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