Переглянути джерело

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 1 рік тому
джерело
коміт
7a2af97447
1 змінених файлів з 9 додано та 1 видалено
  1. 9
    1
      vncviewer/DesktopWindow.cxx

+ 9
- 1
vncviewer/DesktopWindow.cxx Переглянути файл

@@ -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

Завантаження…
Відмінити
Зберегти