Browse Source

Use XQueryPointer() instead to detect zaphod

FLTK can send events with fl_xevent pointing to random memory, which
means that we cannot trust that structure. XQueryPointer() can give us
what we need, at the cost of an extra round trip.
pull/1425/merge
Pierre Ossman 2 weeks ago
parent
commit
34d9692863
1 changed files with 8 additions and 4 deletions
  1. 8
    4
      vncviewer/DesktopWindow.cxx

+ 8
- 4
vncviewer/DesktopWindow.cxx View File

@@ -850,11 +850,15 @@ int DesktopWindow::handle(int event)
(Fl::event_y() < 0) || (Fl::event_y() >= h())) {
ungrabPointer();
}
// We also don't get sensible coordinates on zaphod setups
#if !defined(WIN32) && !defined(__APPLE__)
if ((fl_xevent != NULL) && (fl_xevent->type == MotionNotify) &&
(((XMotionEvent*)fl_xevent)->root !=
XRootWindow(fl_display, fl_screen))) {
Window root, child;
int x, y, wx, wy;
unsigned int mask;

// We also don't get sensible coordinates on zaphod setups
if (XQueryPointer(fl_display, fl_xid(this), &root, &child,
&x, &y, &wx, &wy, &mask) &&
(root != XRootWindow(fl_display, fl_screen))) {
ungrabPointer();
}
#endif

Loading…
Cancel
Save