Skip to content

Commit 93f1da5

Browse files
committed
Linux: Fixed UI freeze when closing debugger tools while a tooltip is opened
Found on Fedora 42 using Wayland. An infinite loop occurred when XQueryPointer failed.
1 parent 9808b0f commit 93f1da5

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

Linux/LinuxMouseManager.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,27 @@ SystemMouseState LinuxMouseManager::GetSystemMouseState(void* rendererHandle)
3434

3535
Window root = 0;
3636
Window c = 0;
37-
int rootX, rootY, childX, childY;
38-
uint32_t mask;
37+
int rootX = 0;
38+
int rootY = 0;
39+
int childX = 0;
40+
int childY = 0;
41+
uint32_t mask = 0;
3942

4043
XGrabServer(_display);
41-
XQueryPointer(_display, _rootWindow, &root, &c, &rootX, &rootY, &childX, &childY, &mask);
42-
if(root != _rootWindow) c = root;
44+
if(!XQueryPointer(_display, _rootWindow, &root, &c, &rootX, &rootY, &childX, &childY, &mask)) {
45+
XUngrabServer(_display);
46+
XFlush(_display);
47+
return state;
48+
}
49+
50+
if(root != _rootWindow) {
51+
c = root;
52+
}
53+
4354
while(c != 0) {
44-
XQueryPointer(_display, c, &root, &c, &rootX, &rootY, &childX, &childY, &mask);
55+
if(!XQueryPointer(_display, c, &root, &c, &rootX, &rootY, &childX, &childY, &mask)) {
56+
break;
57+
}
4558
}
4659
XUngrabServer(_display);
4760
XFlush(_display);

0 commit comments

Comments
 (0)