]> git.eshelyaron.com Git - emacs.git/commitdiff
Correctly set up XI key input mask on X Toolkit builds
authorPo Lu <luangruo@yahoo.com>
Wed, 5 Jan 2022 01:39:57 +0000 (09:39 +0800)
committerPo Lu <luangruo@yahoo.com>
Wed, 5 Jan 2022 01:39:57 +0000 (09:39 +0800)
* src/xfns.c (setup_xi_event_mask): Also set the key event mask
on the outer window, which might also have the input focus.
(x_window) [USE_X_TOOLKIT]: Set up XI event mask a bit later.

src/xfns.c

index d1b0b72b7f0437eedfdf4775fe70023adb8af3a4..b94fe179224d6092ec0ae62569f028a8ed243720 100644 (file)
@@ -2934,15 +2934,11 @@ setup_xi_event_mask (struct frame *f)
 
   XISetMask (m, XI_ButtonPress);
   XISetMask (m, XI_ButtonRelease);
-  XISetMask (m, XI_KeyPress);
-  XISetMask (m, XI_KeyRelease);
   XISetMask (m, XI_Motion);
   XISetMask (m, XI_Enter);
   XISetMask (m, XI_Leave);
-#if 0
-  XISetMask (m, XI_FocusIn);
-  XISetMask (m, XI_FocusOut);
-#endif
+  XISetMask (m, XI_KeyPress);
+  XISetMask (m, XI_KeyRelease);
   XISelectEvents (FRAME_X_DISPLAY (f),
                  FRAME_X_WINDOW (f),
                  &mask, 1);
@@ -2950,6 +2946,16 @@ setup_xi_event_mask (struct frame *f)
   memset (m, 0, l);
 #endif /* !USE_GTK */
 
+#ifdef USE_X_TOOLKIT
+  XISetMask (m, XI_KeyPress);
+  XISetMask (m, XI_KeyRelease);
+
+  XISelectEvents (FRAME_X_DISPLAY (f),
+                 FRAME_OUTER_WINDOW (f),
+                 &mask, 1);
+  memset (m, 0, l);
+#endif
+
   mask.deviceid = XIAllDevices;
 
   XISetMask (m, XI_PropertyEvent);
@@ -3140,11 +3146,6 @@ x_window (struct frame *f, long window_prompting)
   class_hints.res_class = SSDATA (Vx_resource_class);
   XSetClassHint (FRAME_X_DISPLAY (f), XtWindow (shell_widget), &class_hints);
 
-#ifdef HAVE_XINPUT2
-  if (FRAME_DISPLAY_INFO (f)->supports_xi2)
-    setup_xi_event_mask (f);
-#endif
-
 #ifdef HAVE_X_I18N
   FRAME_XIC (f) = NULL;
   if (use_xim)
@@ -3232,6 +3233,11 @@ x_window (struct frame *f, long window_prompting)
   /* This is a no-op, except under Motif.  Make sure main areas are
      set to something reasonable, in case we get an error later.  */
   lw_set_main_areas (pane_widget, 0, frame_widget);
+
+#ifdef HAVE_XINPUT2
+  if (FRAME_DISPLAY_INFO (f)->supports_xi2)
+    setup_xi_event_mask (f);
+#endif
 }
 
 #else /* not USE_X_TOOLKIT */