]> git.eshelyaron.com Git - emacs.git/commitdiff
Correctly register focus events concomitant with alpha changes
authorPo Lu <luangruo@yahoo.com>
Tue, 17 Oct 2023 00:33:25 +0000 (08:33 +0800)
committerPo Lu <luangruo@yahoo.com>
Tue, 17 Oct 2023 00:33:25 +0000 (08:33 +0800)
* src/xterm.c (x_frame_highlight, x_frame_unhighlight): Skip
changing the frame alpha when the frame is not eligible for
focus state-specific alpha values; otherwise, the alpha might be
reset by the time a alpha change wrought by a focus change
arrives, impeding handle_one_xevent from subsequently restoring
the initial value.  (bug#66398)

src/xterm.c

index 709705fc19e12f402247d4f9b856cb00c2a1099d..6f335ea11da59609d7b36a4dfb43e6278aa33684 100644 (file)
@@ -11487,7 +11487,9 @@ x_frame_highlight (struct frame *f)
   x_stop_ignoring_errors (dpyinfo);
   unblock_input ();
   gui_update_cursor (f, true);
-  x_set_frame_alpha (f);
+
+  if (!FRAME_X_OUTPUT (f)->alpha_identical_p)
+    x_set_frame_alpha (f);
 }
 
 static void
@@ -11511,7 +11513,15 @@ x_frame_unhighlight (struct frame *f)
   unblock_input ();
 
   gui_update_cursor (f, true);
-  x_set_frame_alpha (f);
+
+  /* Eschew modifying the frame alpha when the alpha values for
+     focused and background frames are identical; otherwise, this will
+     upset the order in which changes to the alpha property
+     immediately subsequent to a focus change are propagated into a
+     frame's alpha property.  (bug#66398) */
+
+  if (!FRAME_X_OUTPUT (f)->alpha_identical_p)
+    x_set_frame_alpha (f);
 }
 
 /* The focus has changed.  Update the frames as necessary to reflect