summaryrefslogtreecommitdiff
path: root/dix
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <sandmann@daimi.au.dk>2006-01-12 22:14:56 +0000
committerSøren Sandmann Pedersen <sandmann@daimi.au.dk>2006-01-12 22:14:56 +0000
commitc2dedf4d17f8a5b1a8037fd2b4e29122ef78945a (patch)
tree03adc3a1a20822e6a133432998c6bc8a484f6ba1 /dix
parent847d83ec3c90c5b298eaf19ba55251b4a30f4155 (diff)
Thu Jan 12 17:09:18 2006 Søren Sandmann <sandmann@redhat.com>
Add new functions to enable and disable events on Map and Unmap. Use them here to make sure Composite redirect doesn't cause Map/UnmapNotify events that would confuse window managers.
Diffstat (limited to 'dix')
-rw-r--r--dix/window.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/dix/window.c b/dix/window.c
index bd320fabe..84985e66f 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -2728,7 +2728,7 @@ MapWindow(register WindowPtr pWin, ClientPtr client)
}
pWin->mapped = TRUE;
- if (SubStrSend(pWin, pParent))
+ if (SubStrSend(pWin, pParent) && MapUnmapEventsEnabled(pWin))
{
event.u.u.type = MapNotify;
event.u.mapNotify.window = pWin->drawable.id;
@@ -2983,7 +2983,7 @@ UnmapWindow(register WindowPtr pWin, Bool fromConfigure)
if ((!pWin->mapped) || (!(pParent = pWin->parent)))
return(Success);
- if (SubStrSend(pWin, pParent))
+ if (SubStrSend(pWin, pParent) && MapUnmapEventsEnabled(pWin))
{
event.u.u.type = UnmapNotify;
event.u.unmapNotify.window = pWin->drawable.id;
@@ -3285,6 +3285,29 @@ SendVisibilityNotify(WindowPtr pWin)
DeliverEvents(pWin, &event, 1, NullWindow);
}
+static WindowPtr windowDisableMapUnmapEvents;
+
+void
+DisableMapUnmapEvents(WindowPtr pWin)
+{
+ assert (windowDisableMapUnmapEvents == NULL);
+
+ windowDisableMapUnmapEvents = pWin;
+}
+
+void
+EnableMapUnmapEvents(WindowPtr pWin)
+{
+ assert (windowDisableMapUnmapEvents != NULL);
+
+ windowDisableMapUnmapEvents = NULL;
+}
+
+Bool
+MapUnmapEventsEnabled(WindowPtr pWin)
+{
+ return pWin != windowDisableMapUnmapEvents;
+}
#define RANDOM_WIDTH 32