commit eaee7841 took out the configure positioning of windows. This patch
brings it back and addresses also logic for resizing and sub-menus, that was
not covered on that commit.

Signed-off-by: Tiago Vignatti <[email protected]>
---
 src/xwayland/window-manager.c |   22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c
index b6aac2a..3cc0a50 100644
--- a/src/xwayland/window-manager.c
+++ b/src/xwayland/window-manager.c
@@ -409,6 +409,7 @@ weston_wm_handle_configure_notify(struct weston_wm *wm, 
xcb_generic_event_t *eve
        xcb_configure_notify_event_t *configure_notify = 
                (xcb_configure_notify_event_t *) event;
        struct weston_wm_window *window;
+       int x, y;
 
        window = hash_table_lookup(wm->window_hash, configure_notify->window);
 
@@ -417,6 +418,14 @@ weston_wm_handle_configure_notify(struct weston_wm *wm, 
xcb_generic_event_t *eve
                configure_notify->window,
                configure_notify->x, configure_notify->y,
                configure_notify->width, configure_notify->height);
+
+       /* fetch the position only when configure notify come for client type
+        * of windows, so for instance a resize action won't fall here */
+       if (configure_notify->window == window->id) {
+               weston_wm_window_get_child_position(window, &x, &y);
+               window->x = configure_notify->x - x;
+               window->y = configure_notify->y - y;
+       }
 }
 
 static void
@@ -1290,6 +1299,7 @@ xserver_map_shell_surface(struct weston_wm *wm,
                &wm->server->compositor->shell_interface;
        struct weston_wm_window *parent;
        struct theme *t = window->wm->theme;
+       int x = 0, y = 0;
 
        if (!shell_interface->create_shell_surface)
                return;
@@ -1305,10 +1315,16 @@ xserver_map_shell_surface(struct weston_wm *wm,
        }
 
        parent = hash_table_lookup(wm->window_hash, window->transient_for->id);
+
+       /* treat sub-menus */
+       if (parent->x != 0 && parent->y != 0) {
+               x = parent->x + t->margin + t->width;
+               y = parent->y + t->margin + t->titlebar_height;
+       }
        shell_interface->set_transient(window->shsurf, parent->shsurf,
-                                      window->x - parent->x + t->margin + 
t->width,
-                                      window->y - parent->y + t->margin + 
t->titlebar_height,
-                                      WL_SHELL_SURFACE_TRANSIENT_INACTIVE);
+                              window->x + t->margin + t->width - x,
+                              window->y + t->margin + t->titlebar_height - y,
+                              WL_SHELL_SURFACE_TRANSIENT_INACTIVE);
 }
 
 static void
-- 
1.7.9.5

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to