xwayland: Set decoration margin for xwayland windows
authorKristian Høgsberg <krh@bitplanet.net>
Wed, 30 Apr 2014 23:28:41 +0000 (16:28 -0700)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 30 Apr 2014 23:28:41 +0000 (16:28 -0700)
desktop-shell/shell.c
src/compositor.h
xwayland/window-manager.c

index a9c67fa..8b67844 100644 (file)
@@ -2053,6 +2053,16 @@ set_title(struct shell_surface *shsurf, const char *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);
index 03d8992..1fb5ffa 100644 (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 {
index 627c45e..dd0118e 100644 (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);
        }
 }