Pārlūkot izejas kodu

Detect leaving window on zaphod systems

The coordinates we get are relative the root window of each screen, so
we can only trust them if we are on the same screen. So let's explicitly
check that we are still getting events from the expected screen by
checking the root window field of the event.
pull/1611/head
Pierre Ossman pirms 1 gada
vecāks
revīzija
7a2af97447
1 mainītis faili ar 9 papildinājumiem un 1 dzēšanām
  1. 9
    1
      vncviewer/DesktopWindow.cxx

+ 9
- 1
vncviewer/DesktopWindow.cxx Parādīt failu

@@ -844,12 +844,20 @@ int DesktopWindow::handle(int event)
case FL_LEAVE:
case FL_DRAG:
case FL_MOVE:
// We don't get FL_LEAVE with a grabbed pointer, so check manually
if (mouseGrabbed) {
// We don't get FL_LEAVE with a grabbed pointer, so check manually
if ((Fl::event_x() < 0) || (Fl::event_x() >= w()) ||
(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))) {
ungrabPointer();
}
#endif
}
if (fullscreen_active()) {
// calculate width of "edge" regions

Notiek ielāde…
Atcelt
Saglabāt