aboutsummaryrefslogtreecommitdiffstats
path: root/vncviewer
diff options
context:
space:
mode:
authorSamuel Mannehed <samuel@cendio.se>2021-09-23 16:31:59 +0200
committerSamuel Mannehed <samuel@cendio.se>2021-09-24 13:07:17 +0200
commit72e94ca93d3ada8fb7f518fa65644d2bc172bd4b (patch)
tree6748b67747a8661b676134c162b1a35d98166005 /vncviewer
parentd6f4edbbf3e27771d27d8691f7bf0984997bd2e3 (diff)
downloadtigervnc-72e94ca93d3ada8fb7f518fa65644d2bc172bd4b.tar.gz
tigervnc-72e94ca93d3ada8fb7f518fa65644d2bc172bd4b.zip
Only grab keyboard when we have focus
There was an issue with the new grabs that were introduced in commit 2289342de7222e4ff2483eae95bb9898830e6097. On macOS when running vncviewer in fullscreen on one monitor, we saw that we sometimes got resize and fullscreen events when switching the focus away from vncviewer. With the changes in the commit mentioned above this meant that we immediately grabbed the keyboard again, thus never releasing it. Fixes #1332.
Diffstat (limited to 'vncviewer')
-rw-r--r--vncviewer/DesktopWindow.cxx16
-rw-r--r--vncviewer/DesktopWindow.h2
2 files changed, 17 insertions, 1 deletions
diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx
index 31b5c4c6..d379a712 100644
--- a/vncviewer/DesktopWindow.cxx
+++ b/vncviewer/DesktopWindow.cxx
@@ -1007,9 +1007,23 @@ Bool eventIsFocusWithSerial(Display *display, XEvent *event, XPointer arg)
}
#endif
+bool DesktopWindow::hasFocus()
+{
+ Fl_Widget* focus;
+
+ focus = Fl::grab();
+ if (!focus)
+ focus = Fl::focus();
+
+ if (!focus)
+ return false;
+
+ return focus->window() == this;
+}
+
void DesktopWindow::maybeGrabKeyboard()
{
- if (fullscreenSystemKeys && fullscreen_active())
+ if (fullscreenSystemKeys && fullscreen_active() && hasFocus())
grabKeyboard();
}
diff --git a/vncviewer/DesktopWindow.h b/vncviewer/DesktopWindow.h
index 04539700..a654b126 100644
--- a/vncviewer/DesktopWindow.h
+++ b/vncviewer/DesktopWindow.h
@@ -95,6 +95,8 @@ private:
static int fltkDispatch(int event, Fl_Window *win);
static int fltkHandle(int event);
+ bool hasFocus();
+
void maybeGrabKeyboard();
void grabKeyboard();
void ungrabKeyboard();