]> git.eshelyaron.com Git - emacs.git/commitdiff
Get rid of a loop through all frames when processing events
authorPo Lu <luangruo@yahoo.com>
Mon, 7 Mar 2022 00:53:50 +0000 (08:53 +0800)
committerPo Lu <luangruo@yahoo.com>
Mon, 7 Mar 2022 00:53:50 +0000 (08:53 +0800)
* src/xterm.c (handle_one_xevent): Just flip back buffer of f
and any instead.
(flush_dirty_back_buffer_on): New function.
(flush_dirty_back_buffers): Delete function.

src/xterm.c

index 8642345549cbd94eef2c15d1371ed9769e817fbf..d368c7232394b8ddd54b5237b11f109f38b48cf2 100644 (file)
@@ -9887,23 +9887,18 @@ x_net_wm_state (struct frame *f, Window window)
   store_frame_param (f, Qshaded, shaded ? Qt : Qnil);
 }
 
-/* Flip back buffers on any frames with undrawn content.  */
+/* Flip back buffers on FRAME if it has undrawn content.  */
 static void
-flush_dirty_back_buffers (void)
+flush_dirty_back_buffer_on (struct frame *f)
 {
   block_input ();
-  Lisp_Object tail, frame;
-  FOR_EACH_FRAME (tail, frame)
-    {
-      struct frame *f = XFRAME (frame);
-      if (FRAME_LIVE_P (f) &&
-          FRAME_X_P (f) &&
-          FRAME_X_WINDOW (f) &&
-          !FRAME_GARBAGED_P (f) &&
-          !buffer_flipping_blocked_p () &&
-          FRAME_X_NEED_BUFFER_FLIP (f))
-        show_back_buffer (f);
-    }
+  if (FRAME_LIVE_P (f) &&
+      FRAME_X_P (f) &&
+      FRAME_X_WINDOW (f) &&
+      !FRAME_GARBAGED_P (f) &&
+      !buffer_flipping_blocked_p () &&
+      FRAME_X_NEED_BUFFER_FLIP (f))
+    show_back_buffer (f);
   unblock_input ();
 }
 
@@ -13490,9 +13485,15 @@ handle_one_xevent (struct x_display_info *dpyinfo,
       count++;
     }
 
-  /* Sometimes event processing draws to the frame outside redisplay.
-     To ensure that these changes become visible, draw them here.  */
-  flush_dirty_back_buffers ();
+  /* Sometimes event processing draws to either F or ANY outside
+     redisplay.  To ensure that these changes become visible, draw
+     them here.  */
+
+  if (f)
+    flush_dirty_back_buffer_on (f);
+
+  if (any && any != f)
+    flush_dirty_back_buffer_on (any);
   return count;
 }