]> source.dussan.org Git - tigervnc.git/commitdiff
Create helper function for grabKeyboard conditions
authorSamuel Mannehed <samuel@cendio.se>
Thu, 23 Sep 2021 14:31:19 +0000 (16:31 +0200)
committerSamuel Mannehed <samuel@cendio.se>
Wed, 6 Oct 2021 15:20:40 +0000 (17:20 +0200)
(cherry picked from commit d6f4edbbf3e27771d27d8691f7bf0984997bd2e3)

vncviewer/DesktopWindow.cxx
vncviewer/DesktopWindow.h

index a8382fbfb08ecce3591ed7f344125de941f5a6a2..31b5c4c64c593bb0753c46bbdceda011dd69e58b 100644 (file)
@@ -652,8 +652,7 @@ void DesktopWindow::resize(int x, int y, int w, int h)
 
   // Some systems require a grab after the window size has been changed.
   // Otherwise they might hold on to displays, resulting in them being unusable.
-  if (fullscreen_active() && fullscreenSystemKeys)
-    grabKeyboard();
+  maybeGrabKeyboard();
 }
 
 
@@ -800,11 +799,8 @@ int DesktopWindow::handle(int event)
     // Update scroll bars
     repositionWidgets();
 
-    if (!fullscreenSystemKeys)
-      break;
-
     if (fullscreen_active())
-      grabKeyboard();
+      maybeGrabKeyboard();
     else
       ungrabKeyboard();
 
@@ -870,10 +866,7 @@ int DesktopWindow::fltkDispatch(int event, Fl_Window *win)
     // all monitors and the user clicked on another application.
     // Make sure we update our grabs with the focus changes.
     case FL_FOCUS:
-      if (fullscreenSystemKeys) {
-        if (dw->fullscreen_active())
-          dw->grabKeyboard();
-      }
+      dw->maybeGrabKeyboard();
       break;
     case FL_UNFOCUS:
       if (fullscreenSystemKeys) {
@@ -1014,6 +1007,12 @@ Bool eventIsFocusWithSerial(Display *display, XEvent *event, XPointer arg)
 }
 #endif
 
+void DesktopWindow::maybeGrabKeyboard()
+{
+  if (fullscreenSystemKeys && fullscreen_active())
+    grabKeyboard();
+}
+
 void DesktopWindow::grabKeyboard()
 {
   // Grabbing the keyboard is fairly safe as FLTK reroutes events to the
@@ -1144,12 +1143,7 @@ void DesktopWindow::handleGrab(void *data)
 
   assert(self);
 
-  if (!fullscreenSystemKeys)
-    return;
-  if (!self->fullscreen_active())
-    return;
-
-  self->grabKeyboard();
+  self->maybeGrabKeyboard();
 }
 
 
@@ -1453,8 +1447,8 @@ void DesktopWindow::handleOptions(void *data)
 {
   DesktopWindow *self = (DesktopWindow*)data;
 
-  if (self->fullscreen_active() && fullscreenSystemKeys)
-    self->grabKeyboard();
+  if (fullscreenSystemKeys)
+    self->maybeGrabKeyboard();
   else
     self->ungrabKeyboard();
 
index f25985cced0f72c284a66963f3d66bea27e26434..04539700dbc6bed20992c20e7718c2098b186f39 100644 (file)
@@ -95,6 +95,7 @@ private:
   static int fltkDispatch(int event, Fl_Window *win);
   static int fltkHandle(int event);
 
+  void maybeGrabKeyboard();
   void grabKeyboard();
   void ungrabKeyboard();
   void grabPointer();