]> git.eshelyaron.com Git - emacs.git/commitdiff
Only rely on EWMH window activation if possible
authorPo Lu <luangruo@yahoo.com>
Sun, 2 Oct 2022 00:28:56 +0000 (08:28 +0800)
committerPo Lu <luangruo@yahoo.com>
Sun, 2 Oct 2022 00:28:56 +0000 (08:28 +0800)
* xterm.c (x_ewmh_activate_frame): Remove unnecessary
x_wm_supports check.
(x_focus_frame): When the window manager supports
_NET_ACTIVE_WINDOW, just use it; anything else may confuse the
window manager.

src/xterm.c

index 947cf7edb546baf7a74caabd53dbdb34d93f1ddb..d83b03d1ca6c1f51fb6e4e7335d234dc2116378a 100644 (file)
@@ -26842,8 +26842,7 @@ x_ewmh_activate_frame (struct frame *f)
 
   dpyinfo = FRAME_DISPLAY_INFO (f);
 
-  if (FRAME_VISIBLE_P (f)
-      && x_wm_supports (f, dpyinfo->Xatom_net_active_window))
+  if (FRAME_VISIBLE_P (f))
     {
       /* See the documentation at
         https://specifications.freedesktop.org/wm-spec/wm-spec-latest.html
@@ -26903,14 +26902,23 @@ x_focus_frame (struct frame *f, bool noactivate)
     xembed_request_focus (f);
   else
     {
+      if (!noactivate
+         && x_wm_supports (f, dpyinfo->Xatom_net_active_window))
+       {
+         /* When window manager activation is possible, use it
+            instead.  The window manager is expected to perform any
+            necessary actions such as raising the frame, moving it to
+            the current workspace, and mapping it, etc, before moving
+            input focus to the frame.  */
+         x_ewmh_activate_frame (f);
+         return;
+       }
+
       /* Ignore any BadMatch error this request might result in.  */
       x_ignore_errors_for_next_request (dpyinfo);
       XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
                      RevertToParent, CurrentTime);
       x_stop_ignoring_errors (dpyinfo);
-
-      if (!noactivate)
-       x_ewmh_activate_frame (f);
     }
 }