xwayland: Set decoration margin for xwayland windows

dev
Kristian Høgsberg 11 years ago
parent 052ef4e7bc
commit e5c1ae9368
  1. 16
      desktop-shell/shell.c
  2. 4
      src/compositor.h
  3. 9
      xwayland/window-manager.c

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

@ -111,7 +111,9 @@ struct weston_shell_interface {
struct weston_seat *ws, uint32_t edges); struct weston_seat *ws, uint32_t edges);
void (*set_title)(struct shell_surface *shsurf, void (*set_title)(struct shell_surface *shsurf,
const char *title); 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 { struct weston_animation {

@ -944,7 +944,8 @@ weston_wm_window_draw_decoration(void *data)
cairo_t *cr; cairo_t *cr;
int x, y, width, height; int x, y, width, height;
int32_t input_x, input_y, input_w, input_h; 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; uint32_t flags = 0;
weston_wm_window_read_properties(window); 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, pixman_region32_init_rect(&window->surface->pending.input,
input_x, input_y, input_w, input_h); 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);
} }
} }

Loading…
Cancel
Save