소스 검색

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…
취소
저장