summaryrefslogtreecommitdiff
path: root/dix
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2008-01-16 20:24:11 -0500
committerKristian Høgsberg <krh@redhat.com>2008-01-16 21:56:08 -0500
commita6a7fadbb03ee99312dfb15ac478ab3c414c1c0b (patch)
treeee7288c0721020aa1cf6870cc242d61d1c7d4c69 /dix
parente46f6ddeccd082b2d507a1e8b57ea30e6b0a2c83 (diff)
Don't break grab and focus state for a window when redirecting it.
Composite uses an unmap/map cycle to trigger backing pixmap allocation and cliprect recomputation when a window is redirected or unredirected. To avoid protocol visible side effects, map and unmap events are disabled temporarily. However, when a window is unmapped it is also removed from grabs and loses focus, but these state changes are not disabled. This change supresses the unmap side effects during the composite unmap/map cycle and fixes this bug: http://bugzilla.gnome.org/show_bug.cgi?id=488264 where compiz would cause gnome-screensaver to lose its grab when compiz unredirects the fullscreen lock window.
Diffstat (limited to 'dix')
-rw-r--r--dix/window.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/dix/window.c b/dix/window.c
index 33cf76b59..1ccf12603 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -2993,7 +2993,8 @@ UnrealizeTree(
}
#endif
(* Unrealize)(pChild);
- DeleteWindowFromAnyEvents(pChild, FALSE);
+ if (MapUnmapEventsEnabled(pWin))
+ DeleteWindowFromAnyEvents(pChild, FALSE);
if (pChild->viewable)
{
#ifdef DO_SAVE_UNDERS