xwayland: Set decoration margin for xwayland windows

This commit is contained in:
Kristian Høgsberg 2014-04-30 16:28:41 -07:00
parent 052ef4e7bc
commit e5c1ae9368
3 changed files with 23 additions and 6 deletions

View file

@ -2052,6 +2052,16 @@ set_title(struct shell_surface *shsurf, const char *title)
shsurf->title = strdup(title);
}
static void
set_margin(struct shell_surface *shsurf,
int32_t left, int32_t right, int32_t top, int32_t bottom)
{
shsurf->margin.left = left;
shsurf->margin.right = right;
shsurf->margin.top = top;
shsurf->margin.bottom = bottom;
}
static void
shell_surface_set_title(struct wl_client *client,
struct wl_resource *resource, const char *title)
@ -3349,10 +3359,7 @@ xdg_surface_set_margin(struct wl_client *client,
{
struct shell_surface *shsurf = wl_resource_get_user_data(resource);
shsurf->margin.left = left;
shsurf->margin.right = right;
shsurf->margin.top = top;
shsurf->margin.bottom = bottom;
set_margin(shsurf, left, right, top, bottom);
}
static void
@ -6112,6 +6119,7 @@ module_init(struct weston_compositor *ec,
ec->shell_interface.move = shell_interface_move;
ec->shell_interface.resize = surface_resize;
ec->shell_interface.set_title = set_title;
ec->shell_interface.set_margin = set_margin;
weston_layer_init(&shell->fullscreen_layer, &ec->cursor_layer.link);
weston_layer_init(&shell->panel_layer, &shell->fullscreen_layer.link);

View file

@ -111,7 +111,9 @@ struct weston_shell_interface {
struct weston_seat *ws, uint32_t edges);
void (*set_title)(struct shell_surface *shsurf,
const char *title);
void (*set_margin)(struct shell_surface *shsurf,
int32_t left, int32_t right,
int32_t top, int32_t bottom);
};
struct weston_animation {

View file

@ -944,7 +944,8 @@ weston_wm_window_draw_decoration(void *data)
cairo_t *cr;
int x, y, width, height;
int32_t input_x, input_y, input_w, input_h;
struct weston_shell_interface *shell_interface =
&wm->server->compositor->shell_interface;
uint32_t flags = 0;
weston_wm_window_read_properties(window);
@ -1006,6 +1007,12 @@ weston_wm_window_draw_decoration(void *data)
pixman_region32_init_rect(&window->surface->pending.input,
input_x, input_y, input_w, input_h);
shell_interface->set_margin(window->shsurf,
input_x,
width - input_w - input_x,
input_y,
height - input_h - input_y);
}
}