]> source.dussan.org Git - tigervnc.git/commitdiff
Request keyboard grab ability under Xwayland
authorPierre Ossman <ossman@cendio.se>
Tue, 18 Jun 2019 14:25:51 +0000 (16:25 +0200)
committerPierre Ossman <ossman@cendio.se>
Tue, 18 Jun 2019 14:25:51 +0000 (16:25 +0200)
We're usually white listed, but let's be a good citizen and formally
request the keyboard grab ability from the compositor.

vncviewer/DesktopWindow.cxx
vncviewer/DesktopWindow.h

index 150c39bc7f92873c6222d7538d580382165ef5c9..c52a9150ed0d0654bc9a636aed9faa4c224df94d 100644 (file)
@@ -290,6 +290,28 @@ void DesktopWindow::setCursor(int width, int height,
 }
 
 
+void DesktopWindow::show()
+{
+  Fl_Window::show();
+
+#if !defined(WIN32) && !defined(__APPLE__)
+  XEvent e;
+
+  // Request ability to grab keyboard under Xwayland
+  e.xany.type = ClientMessage;
+  e.xany.window = fl_xid(this);
+  e.xclient.message_type = XInternAtom (fl_display, "_XWAYLAND_MAY_GRAB_KEYBOARD", 0);
+  e.xclient.format = 32;
+  e.xclient.data.l[0] = 1;
+  e.xclient.data.l[1] = 0;
+  e.xclient.data.l[2] = 0;
+  e.xclient.data.l[3] = 0;
+  e.xclient.data.l[4] = 0;
+  XSendEvent(fl_display, RootWindow(fl_display, fl_screen), 0, SubstructureNotifyMask | SubstructureRedirectMask, &e);
+#endif
+}
+
+
 void DesktopWindow::draw()
 {
   bool redraw;
index 6ec8e1bd3823b3fdad19007788cc3b4d5de386d7..c408cb78335640fe4e906d4038b81577dd373a53 100644 (file)
@@ -73,6 +73,7 @@ public:
   void setLEDState(unsigned int state);
 
   // Fl_Window callback methods
+  virtual void show();
   void draw();
   void resize(int x, int y, int w, int h);