Hi Daniel, ----- Original Message ----- > [Accidentally sent the unannotated version - sorry.] > [...] > > Unfortunately this totally breaks output hotplug, regressing the fix > from 216bdbc735. The effect is that if you hotplug an output and move an > XWayland window on to it, it can never receive pointer input, even > though the screen / root window size / RandR information are all updated. > > Calling SetRootClip updates the root window's borderSize, so that > RRScreenSizeNotify (through ScreenRestructured) can rebuild the sprite > bounding box against the updated root window borderSize. With the > SetRootClip call removed, the bounding box always remains the same as it > was when the server was started.
Sorry I didn't spot that while testing the original patch, but I can definitely reproduce with gnome wayland, indeed. > It seems like we need a third mode to SetRootClip, diverging in the > middle ('Use REGION_BREAK to ...') branch: update winSize and > borderSize, but keep borderClip and clipList empty. I can't see how to > do this without a DIX change, since calling SetRootClip(TRUE) followed > by SetRootClip(FALSE) would have this desired effect, but generate a > bunch of exposures in between, which would generate invalid writes. > > How about this (apply with git am --scissors)? It quite dumbly tries to > preserve API: Bool is really int, so we take the existing TRUE/FALSE > modes as the first two enum parameters, then introduce a new one. > > Tested by starting with a single output, manually checking > screenInfo.screens[0]->root->{winSize,borderSize,borderClip,clipList} > with gdb, hotplugging an output, verifying the regions again and also > checking xev receives events on that output, unplugging it and verifying > regions again. The patch fixes the issue with the input events of course, but I just had a segfault in Xwayland trying this patch: (EE) (EE) Caught signal 11 (Segmentation fault). Server aborting Fatal server error: (EE) (EE) Segmentation fault at address 0x100000001 (EE) (EE) 10: ? (?+0x29) [0x29] (EE) 9: /usr/bin/Xwayland (_start+0x29) [0x423299] (EE) 8: /lib64/libc.so.6 (__libc_start_main+0xf0) [0x7fdd80e7f580] (EE) 7: /usr/bin/Xwayland (dix_main+0x3b3) [0x544ef3] (EE) 6: /usr/bin/Xwayland (Dispatch+0x31e) [0x54109e] (EE) 5: /usr/bin/Xwayland (ProcRRGetMonitors+0x9b) [0x4ca18b] (EE) 4: /usr/bin/Xwayland (RRMonitorMakeList+0x269) [0x4c9ba9] (EE) 3: /usr/bin/Xwayland (RRMonitorSetFromServer+0x118) [0x4c9198] (EE) 2: /usr/bin/Xwayland (MakeAtom+0x30) [0x530710] (EE) 1: /lib64/libc.so.6 (__restore_rt+0x0) [0x7fdd80e93b1f] (EE) 0: /usr/bin/Xwayland (OsSigHandler+0x29) [0x5792d9] (EE) Backtrace: (EE) This occurred while disabling the secondary output in g-c-c in gnome-wayland session (Xwayland crashing incidentally takes the entire gnome session with it). Maybe the segfault is unrelated to that patch, I need to check further. Cheers, Olivier _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel