On 06/05/2012 07:29 PM, Kristian Høgsberg wrote:
On Tue, Jun 05, 2012 at 07:15:32PM +0300, Tiago Vignatti wrote:
On 06/05/2012 07:13 PM, Kristian Høgsberg wrote:
On Mon, Jun 04, 2012 at 08:01:45PM +0300, Tiago Vignatti wrote:
"top-level window is a window whose override-redirect attribute is False",
ICCCM 4.1.1

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

diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c
index baa49e2..b5d39d3 100644
--- a/src/xwayland/window-manager.c
+++ b/src/xwayland/window-manager.c
@@ -109,6 +109,7 @@ struct weston_wm_window {
        int width, height;
        int x, y;
        int decorate;
+       int override_redirect;
  };

  static struct weston_wm_window *
@@ -692,7 +693,7 @@ weston_wm_handle_property_notify(struct weston_wm *wm, 
xcb_generic_event_t *even

  static void
  weston_wm_window_create(struct weston_wm *wm,
-                       xcb_window_t id, int width, int height)
+                       xcb_window_t id, int width, int height, int override)
  {
        struct weston_wm_window *window;
        uint32_t values[1];
@@ -710,7 +711,7 @@ weston_wm_window_create(struct weston_wm *wm,
        window->wm = wm;
        window->id = id;
        window->properties_dirty = 1;
-
+       window->override_redirect = override;
        window->width = width;
        window->height = height;

@@ -741,7 +742,8 @@ weston_wm_handle_create_notify(struct weston_wm *wm, 
xcb_generic_event_t *event)
                return;

        weston_wm_window_create(wm, create_notify->window,
-                               create_notify->width, create_notify->height);
+                               create_notify->width, create_notify->height,
+                               create_notify->override_redirect);
  }

  static void
@@ -777,7 +779,8 @@ weston_wm_handle_reparent_notify(struct weston_wm *wm, 
xcb_generic_event_t *even
                reparent_notify->event);

        if (reparent_notify->parent == wm->screen->root) {
-               weston_wm_window_create(wm, reparent_notify->window, 10, 10);
+               weston_wm_window_create(wm, reparent_notify->window, 10, 10,
+                                       reparent_notify->override_redirect);
        } else if (!our_resource(wm, reparent_notify->parent)) {
                window = hash_table_lookup(wm->window_hash,
                                           reparent_notify->window);
@@ -1322,7 +1325,8 @@ xserver_map_shell_surface(struct weston_wm *wm,
                                                      window->surface,
                                                &shell_client);

-       if (!window->transient_for) {
+       /* ICCCM 4.1.1 */
+       if (!window->override_redirect) {
                shell_interface->set_toplevel(window->shsurf);
                return;
        }

When I get here with an override_redirect window that's not transient
for another window, I crash when just below we try:

         parent = hash_table_lookup(wm->window_hash, window->transient_for->id);

yes, expected. And that's fixed with the 6/6.

No, not cool.  You can't just have a patch in the middle of a series
that crashes the compositor.

agreed, my bad :/

I could temporarily fallback those to map as top_level as it was before, but meh...

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

Reply via email to