[PATCH 1/3] Revert "xwayland: Redirect toplevel windows one by one"
Robert Bragg
robert at sixbynine.org
Thu Jan 12 10:16:07 PST 2012
From: Robert Bragg <robert at linux.intel.com>
This reverts commit 7889930ad9f0faa00e7a5d469a2b50beaf759c9f.
Redirecting the windows one by one this way doesn't handle unredirecting
windows that are reparented so they are no longer top-level windows.
This goes back to automatically redirecting all root sub-windows which
will handle reparenting correctly and we can hopefully find an
alternative fix for the shutdown crash.
---
composite/compalloc.c | 10 +++++-----
composite/compositeext.h | 4 ++--
hw/xfree86/xwayland/xwayland-window.c | 27 +++++++++++++--------------
3 files changed, 20 insertions(+), 21 deletions(-)
diff --git a/composite/compalloc.c b/composite/compalloc.c
index dd4338b..9fd460a 100644
--- a/composite/compalloc.c
+++ b/composite/compalloc.c
@@ -225,11 +225,6 @@ compRedirectWindow (ClientPtr pClient, WindowPtr pWin, int update)
return Success;
}
-int CompositeRedirectWindow (WindowPtr pWin, int update)
-{
- return compRedirectWindow (serverClient, pWin, update);
-}
-
/*
* Free one of the per-client per-window resources, clearing
* redirect and the per-window pointer as appropriate
@@ -396,6 +391,11 @@ compRedirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update)
return Success;
}
+int CompositeRedirectSubwindows (WindowPtr pWin, int update)
+{
+ return compRedirectSubwindows (serverClient, pWin, update);
+}
+
/*
* Free one of the per-client per-subwindows resources,
* which frees one redirect per subwindow
diff --git a/composite/compositeext.h b/composite/compositeext.h
index 0168cdc..c1e915a 100644
--- a/composite/compositeext.h
+++ b/composite/compositeext.h
@@ -34,7 +34,7 @@
extern _X_EXPORT Bool CompositeRegisterAlternateVisuals(ScreenPtr pScreen,
VisualID *vids,
int nVisuals);
-extern _X_EXPORT int CompositeRedirectWindow(WindowPtr pWin,
- int update);
+extern _X_EXPORT int CompositeRedirectSubwindows(WindowPtr pWin,
+ int update);
#endif /* _COMPOSITEEXT_H_ */
diff --git a/hw/xfree86/xwayland/xwayland-window.c b/hw/xfree86/xwayland/xwayland-window.c
index c10b7d8..c2d31cb 100644
--- a/hw/xfree86/xwayland/xwayland-window.c
+++ b/hw/xfree86/xwayland/xwayland-window.c
@@ -105,23 +105,22 @@ xwl_create_window(WindowPtr window)
xwl_screen->CreateWindow = screen->CreateWindow;
screen->CreateWindow = xwl_create_window;
- if (!(xwl_screen->flags & XWL_FLAGS_ROOTLESS))
+ if (!(xwl_screen->flags & XWL_FLAGS_ROOTLESS) ||
+ window->parent != NULL)
return ret;
- if (window == screen->root) {
- len = snprintf(buffer, sizeof buffer, "_NET_WM_CM_S%d", screen->myNum);
- name = MakeAtom(buffer, len, TRUE);
- rc = AddSelection(&selection, name, serverClient);
- if (rc != Success)
- return ret;
+ len = snprintf(buffer, sizeof buffer, "_NET_WM_CM_S%d", screen->myNum);
+ name = MakeAtom(buffer, len, TRUE);
+ rc = AddSelection(&selection, name, serverClient);
+ if (rc != Success)
+ return ret;
- selection->lastTimeChanged = currentTime;
- selection->window = window->drawable.id;
- selection->pWin = window;
- selection->client = serverClient;
- } else if (window->parent == screen->root) {
- CompositeRedirectWindow(window, CompositeRedirectManual);
- }
+ selection->lastTimeChanged = currentTime;
+ selection->window = window->drawable.id;
+ selection->pWin = window;
+ selection->client = serverClient;
+
+ CompositeRedirectSubwindows(window, CompositeRedirectManual);
return ret;
}
--
1.7.7.5
More information about the wayland-devel
mailing list