mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	view: Set view->output prior to calling view_center()
This commit is contained in:
		
							parent
							
								
									bdbbbb2e62
								
							
						
					
					
						commit
						a9cbbe1e41
					
				
					 4 changed files with 16 additions and 19 deletions
				
			
		
							
								
								
									
										24
									
								
								src/view.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								src/view.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -254,18 +254,16 @@ view_minimize(struct view *view, bool minimized)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
static bool
 | 
			
		||||
view_compute_centered_position(struct view *view, struct output *output,
 | 
			
		||||
		const struct wlr_box *ref, int w, int h, int *x, int *y)
 | 
			
		||||
view_compute_centered_position(struct view *view, const struct wlr_box *ref,
 | 
			
		||||
		int w, int h, int *x, int *y)
 | 
			
		||||
{
 | 
			
		||||
	if (w <= 0 || h <= 0) {
 | 
			
		||||
		wlr_log(WLR_ERROR, "view has empty geometry, not centering");
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	struct output *output = view_output(view);
 | 
			
		||||
	if (!output_is_usable(output)) {
 | 
			
		||||
		output = view_output(view);
 | 
			
		||||
		if (!output_is_usable(output)) {
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	struct border margin = ssd_get_margin(view->ssd);
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +297,7 @@ set_fallback_geometry(struct view *view)
 | 
			
		|||
{
 | 
			
		||||
	view->natural_geometry.width = LAB_FALLBACK_WIDTH;
 | 
			
		||||
	view->natural_geometry.height = LAB_FALLBACK_HEIGHT;
 | 
			
		||||
	view_compute_centered_position(view, NULL, NULL,
 | 
			
		||||
	view_compute_centered_position(view, NULL,
 | 
			
		||||
		view->natural_geometry.width,
 | 
			
		||||
		view->natural_geometry.height,
 | 
			
		||||
		&view->natural_geometry.x,
 | 
			
		||||
| 
						 | 
				
			
			@ -331,12 +329,12 @@ view_store_natural_geometry(struct view *view)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
view_center(struct view *view, struct output *output, const struct wlr_box *ref)
 | 
			
		||||
view_center(struct view *view, const struct wlr_box *ref)
 | 
			
		||||
{
 | 
			
		||||
	assert(view);
 | 
			
		||||
	int x, y;
 | 
			
		||||
	if (view_compute_centered_position(view, output, ref,
 | 
			
		||||
			view->pending.width, view->pending.height, &x, &y)) {
 | 
			
		||||
	if (view_compute_centered_position(view, ref, view->pending.width,
 | 
			
		||||
			view->pending.height, &x, &y)) {
 | 
			
		||||
		view_move(view, x, y);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -352,8 +350,8 @@ view_apply_natural_geometry(struct view *view)
 | 
			
		|||
	} else {
 | 
			
		||||
		/* reposition if original geometry is offscreen */
 | 
			
		||||
		struct wlr_box box = view->natural_geometry;
 | 
			
		||||
		if (view_compute_centered_position(view, NULL, NULL,
 | 
			
		||||
				box.width, box.height, &box.x, &box.y)) {
 | 
			
		||||
		if (view_compute_centered_position(view, NULL, box.width,
 | 
			
		||||
				box.height, &box.x, &box.y)) {
 | 
			
		||||
			view_move_resize(view, box);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -777,7 +775,7 @@ view_adjust_for_layout_change(struct view *view)
 | 
			
		|||
			if (!wlr_output_layout_intersects(
 | 
			
		||||
					view->server->output_layout,
 | 
			
		||||
					NULL, &view->pending)) {
 | 
			
		||||
				view_center(view, NULL, NULL);
 | 
			
		||||
				view_center(view, NULL);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -306,7 +306,7 @@ position_xdg_toplevel_view(struct view *view)
 | 
			
		|||
		xdg_toplevel_from_view(view)->parent;
 | 
			
		||||
 | 
			
		||||
	if (!parent_xdg_toplevel) {
 | 
			
		||||
		view_center(view, output_nearest_to_cursor(view->server), NULL);
 | 
			
		||||
		view_center(view, NULL);
 | 
			
		||||
	} else {
 | 
			
		||||
		/*
 | 
			
		||||
		 * If child-toplevel-views, we center-align relative to their
 | 
			
		||||
| 
						 | 
				
			
			@ -315,7 +315,8 @@ position_xdg_toplevel_view(struct view *view)
 | 
			
		|||
		struct view *parent = lookup_view_by_xdg_toplevel(
 | 
			
		||||
			view->server, parent_xdg_toplevel);
 | 
			
		||||
		assert(parent);
 | 
			
		||||
		view_center(view, view_output(parent), &parent->pending);
 | 
			
		||||
		view->output = view_output(parent);
 | 
			
		||||
		view_center(view, &parent->pending);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -400,7 +400,7 @@ set_initial_position(struct view *view,
 | 
			
		|||
		/* Just make sure the view is on-screen */
 | 
			
		||||
		view_adjust_for_layout_change(view);
 | 
			
		||||
	} else {
 | 
			
		||||
		view_center(view, output_nearest_to_cursor(view->server), NULL);
 | 
			
		||||
		view_center(view, NULL);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue