summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeron Johnson <deron.johnson@sun.com>2005-06-10 19:54:11 +0000
committerDeron Johnson <deron.johnson@sun.com>2005-06-10 19:54:11 +0000
commitb3267de5f492e803475bf3ea0df06373e006d42f (patch)
treea767591e52e7f2169a9ebcab2998007c8463097e
parentdff29b681dd1ec0b514c040973639f7aa21184f1 (diff)
Fix 353.
-rw-r--r--dix/events.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/dix/events.c b/dix/events.c
index b1d331817..3ab89c1b7 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1125,6 +1125,22 @@ lgeTryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
return TryClientEvents (client, pEvents, count, mask, filter, grab);
}
+#ifdef LG3D
+ /*
+ ** Fix for 353: When a 2D grab is enabled the CEP all-grab should be
+ ** disabled. If we don't do this then if you drag outside a native window
+ ** during a grab, the DS will receive events even though a 2D grab is
+ ** active, which is very, very bad.
+ **
+ ** TODO: KLUDGE: this is a kludgey way to fix this problem. It may be that
+ ** the way to solve the problem is to eliminate all-grab entirely. But we
+ ** are not quite ready to do this yet.
+ */
+ if (lgeDisplayServerIsAlive && grab && !IsWinLgePRWWin(grab->window)) {
+ return TryClientEvents (client, pEvents, count, mask, filter, grab);
+ }
+#endif /* LG3D */
+
for (i = 0; i < count; i++) {
Window win;
int destination;