summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Vignatti <tiago.vignatti@intel.com>2012-05-15 19:19:56 +0300
committerChristopher James Halse Rogers <christopher.halse.rogers@canonical.com>2012-06-13 15:26:20 +1000
commitf6ea000450988f411260701df11ad381c98f52df (patch)
treedb36a3b4d1f66d6666561a0c24cf8d356821a30d
parent823bc5f5bc6b0b4f511b990816df36a82f7c71ca (diff)
Xi: fix master device picking on SetDeviceRedirectWindow
It was messing all Enter/LeaveNotify logic in a way that the server wasn't delivering those events anymore to clients of xwayland. The same was sometimes causing segfaults on the server, due clients not clearing properly PointerWindows pointer: Program received signal SIGSEGV, Segmentation fault. 0x000000000044314f in IsParent (a=0x241e0b0, b=0x21) at events.c:974 974 for (b = b->parent; b; b = b->parent) (gdb) bt #0 0x000000000044314f in IsParent (a=0x241e0b0, b=0x21) at events.c:974 #1 0x0000000000440345 in CoreFocusOutNotifyPointerEvents (dev=0x24283a0, pwin_parent=0x241e0b0, exclude=0x2584720, mode=0, inclusive=0) at enterleave.c:773 #2 0x0000000000440846 in CoreFocusToDescendant (dev=0x24283a0, A=0x241e0b0, B=0x2584720, mode=0) at enterleave.c:1019 #3 0x0000000000441016 in CoreFocusEvents (dev=0x24283a0, from=0x241e0b0, to=0x2584720, mode=0) at enterleave.c:1245 #4 0x0000000000441775 in DoFocusEvents (pDev=0x24283a0, from=0x241e0b0, to=0x2584720, mode=0) at enterleave.c:1390 #5 0x000000000044bb19 in SetInputFocus (client=0x257e8d0, dev=0x24283a0, focusID=6291578, revertTo=1 '\001', ctime=0, followOK=0) at events.c:4869 #6 0x000000000044bc9f in ProcSetInputFocus (client=0x257e8d0) at events.c:4911 #7 0x0000000000430838 in Dispatch () at dispatch.c:439 #8 0x0000000000421725 in main (argc=8, argv=0x7fffffffdd38, envp=0x7fffffffdd80) at main.c:287 Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
-rw-r--r--Xi/exevents.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/Xi/exevents.c b/Xi/exevents.c
index a9cc732dd..0322095a9 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -2007,7 +2007,7 @@ SetDeviceRedirectWindow(DeviceIntPtr dev, WindowPtr window)
SpritePtr pSprite = dev->spriteInfo->sprite;
DeviceIntPtr mouse;
- mouse = IsMaster(dev) ? GetMaster(dev, MASTER_POINTER) : dev;
+ mouse = IsMaster(dev) ? dev : GetMaster(dev, MASTER_POINTER);
pSprite->redirectWindow = window;