mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	xdg: update padding on commit
Maximize/unmaximize changes padding on XDG-shell views with CSD, so we need to update padding to render cycle-view decoration correctly.
This commit is contained in:
		
							parent
							
								
									c1269adc40
								
							
						
					
					
						commit
						b8c6f9c216
					
				
					 2 changed files with 21 additions and 25 deletions
				
			
		| 
						 | 
					@ -385,8 +385,8 @@ render_cycle_box(struct output *output, pixman_region32_t *output_damage,
 | 
				
			||||||
		box.width += view->margin.left + view->margin.right;
 | 
							box.width += view->margin.left + view->margin.right;
 | 
				
			||||||
		box.height += view->margin.top + view->margin.bottom;
 | 
							box.height += view->margin.top + view->margin.bottom;
 | 
				
			||||||
	} else if (!view->maximized) {
 | 
						} else if (!view->maximized) {
 | 
				
			||||||
		box.x -= view->padding.left;
 | 
							box.x += view->padding.left;
 | 
				
			||||||
		box.y -= view->padding.top;
 | 
							box.y += view->padding.top;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	float white[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
 | 
						float white[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										42
									
								
								src/xdg.c
									
										
									
									
									
								
							
							
						
						
									
										42
									
								
								src/xdg.c
									
										
									
									
									
								
							| 
						 | 
					@ -50,6 +50,10 @@ handle_commit(struct wl_listener *listener, void *data)
 | 
				
			||||||
	view->w = size.width;
 | 
						view->w = size.width;
 | 
				
			||||||
	view->h = size.height;
 | 
						view->h = size.height;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* padding changes with maximize/unmaximize */
 | 
				
			||||||
 | 
						view->padding.top = view->padding.bottom = size.y;
 | 
				
			||||||
 | 
						view->padding.left = view->padding.right = size.x;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uint32_t serial = view->pending_move_resize.configure_serial;
 | 
						uint32_t serial = view->pending_move_resize.configure_serial;
 | 
				
			||||||
	if (serial > 0 && serial >= view->xdg_surface->configure_serial) {
 | 
						if (serial > 0 && serial >= view->xdg_surface->configure_serial) {
 | 
				
			||||||
		if (view->pending_move_resize.update_x) {
 | 
							if (view->pending_move_resize.update_x) {
 | 
				
			||||||
| 
						 | 
					@ -178,27 +182,21 @@ xdg_toplevel_view_for_each_surface(struct view *view,
 | 
				
			||||||
	wlr_xdg_surface_for_each_surface(view->xdg_surface, iterator, data);
 | 
						wlr_xdg_surface_for_each_surface(view->xdg_surface, iterator, data);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					update_padding(struct view *view)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct wlr_box padding;
 | 
				
			||||||
 | 
						wlr_xdg_surface_get_geometry(view->xdg_surface, &padding);
 | 
				
			||||||
 | 
						view->padding.top = view->padding.bottom = padding.y;
 | 
				
			||||||
 | 
						view->padding.left = view->padding.right = padding.x;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
xdg_toplevel_view_maximize(struct view *view, bool maximized)
 | 
					xdg_toplevel_view_maximize(struct view *view, bool maximized)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	wlr_xdg_toplevel_set_maximized(view->xdg_surface, maximized);
 | 
						wlr_xdg_toplevel_set_maximized(view->xdg_surface, maximized);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Return area between surface extremities and window */
 | 
					 | 
				
			||||||
static struct border
 | 
					 | 
				
			||||||
xdg_shell_padding(struct view *view)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct wlr_box box;
 | 
					 | 
				
			||||||
	wlr_xdg_surface_get_geometry(view->xdg_surface, &box);
 | 
					 | 
				
			||||||
	struct border border = {
 | 
					 | 
				
			||||||
		.top = -box.y,
 | 
					 | 
				
			||||||
		.bottom = -box.y,
 | 
					 | 
				
			||||||
		.left = -box.x,
 | 
					 | 
				
			||||||
		.right = -box.x,
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	return border;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static bool
 | 
					static bool
 | 
				
			||||||
istopmost(struct view *view)
 | 
					istopmost(struct view *view)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -212,17 +210,15 @@ xdg_toplevel_view_map(struct view *view)
 | 
				
			||||||
	view->surface = view->xdg_surface->surface;
 | 
						view->surface = view->xdg_surface->surface;
 | 
				
			||||||
	if (!view->been_mapped) {
 | 
						if (!view->been_mapped) {
 | 
				
			||||||
		view->server_side_deco = has_ssd(view);
 | 
							view->server_side_deco = has_ssd(view);
 | 
				
			||||||
 | 
							/* align to edge of screen */
 | 
				
			||||||
		if (view->server_side_deco) {
 | 
							if (view->server_side_deco) {
 | 
				
			||||||
			view->margin = deco_thickness(view);
 | 
								view->margin = deco_thickness(view);
 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			view->padding = xdg_shell_padding(view);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if (istopmost(view)) {
 | 
					 | 
				
			||||||
			/* align to edge of screen */
 | 
					 | 
				
			||||||
			view->x += view->margin.left;
 | 
								view->x += view->margin.left;
 | 
				
			||||||
			view->y += view->margin.top;
 | 
								view->y += view->margin.top;
 | 
				
			||||||
			view->x += view->padding.left;
 | 
							} else {
 | 
				
			||||||
			view->y += view->padding.top;
 | 
								update_padding(view);
 | 
				
			||||||
 | 
								view->x -= view->padding.left;
 | 
				
			||||||
 | 
								view->y -= view->padding.top;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	view->been_mapped = true;
 | 
						view->been_mapped = true;
 | 
				
			||||||
| 
						 | 
					@ -256,7 +252,7 @@ static const struct view_impl xdg_toplevel_view_impl = {
 | 
				
			||||||
	.map = xdg_toplevel_view_map,
 | 
						.map = xdg_toplevel_view_map,
 | 
				
			||||||
	.move = xdg_toplevel_view_move,
 | 
						.move = xdg_toplevel_view_move,
 | 
				
			||||||
	.unmap = xdg_toplevel_view_unmap,
 | 
						.unmap = xdg_toplevel_view_unmap,
 | 
				
			||||||
	.maximize = xdg_toplevel_view_maximize
 | 
						.maximize = xdg_toplevel_view_maximize,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue