瀏覽代碼

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

Loading…
取消
儲存