[PATCH weston 3/6] xwm: use override_redirect for determining or not top-level windows

Tiago Vignatti tiago.vignatti at intel.com
Mon Jun 4 10:01:45 PDT 2012


"top-level window is a window whose override-redirect attribute is False",
ICCCM 4.1.1

Signed-off-by: Tiago Vignatti <tiago.vignatti at intel.com>
---
 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;
 	}
-- 
1.7.9.5



More information about the wayland-devel mailing list