emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master ea953db0a0: Fix invalid picture after toggling the tool bar or me


From: Po Lu
Subject: master ea953db0a0: Fix invalid picture after toggling the tool bar or menu bar on GTK
Date: Mon, 24 Jan 2022 21:15:35 -0500 (EST)

branch: master
commit ea953db0a06f1ca3e66fb2de6ec7500011d9b161
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Fix invalid picture after toggling the tool bar or menu bar on GTK
    
    * src/xterm.c (x_drop_xrender_surfaces): New function.
    (handle_one_xevent): Call x_drop_xrender_surfaces instead of
    just font_drop_xrender_surfaces.
---
 src/xterm.c | 33 ++++++++++++++++++++-------------
 1 file changed, 20 insertions(+), 13 deletions(-)

diff --git a/src/xterm.c b/src/xterm.c
index bf611db6bc..919c8b12ab 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -358,6 +358,22 @@ x_flush (struct frame *f)
   unblock_input ();
 }
 
+static void
+x_drop_xrender_surfaces (struct frame *f)
+{
+  font_drop_xrender_surfaces (f);
+
+#ifdef HAVE_XRENDER
+  if (f && FRAME_X_DOUBLE_BUFFERED_P (f)
+      && FRAME_X_PICTURE (f) != None)
+    {
+      XRenderFreePicture (FRAME_X_DISPLAY (f),
+                         FRAME_X_PICTURE (f));
+      FRAME_X_PICTURE (f) = None;
+    }
+#endif
+}
+
 #ifdef HAVE_XRENDER
 MAYBE_UNUSED static void
 x_xr_ensure_picture (struct frame *f)
@@ -9061,7 +9077,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                }
 
              if (FRAME_X_DOUBLE_BUFFERED_P (f))
-                font_drop_xrender_surfaces (f);
+                x_drop_xrender_surfaces (f);
               f->output_data.x->has_been_visible = true;
               SET_FRAME_GARBAGED (f);
               unblock_input ();
@@ -9885,23 +9901,14 @@ handle_one_xevent (struct x_display_info *dpyinfo,
         }
 
       f = x_top_window_to_frame (dpyinfo, configureEvent.xconfigure.window);
-      /* Unfortunately, we need to call font_drop_xrender_surfaces for
+      /* Unfortunately, we need to call x_drop_xrender_surfaces for
          _all_ ConfigureNotify events, otherwise we miss some and
          flicker.  Don't try to optimize these calls by looking only
          for size changes: that's not sufficient.  We miss some
          surface invalidations and flicker.  */
       block_input ();
       if (f && FRAME_X_DOUBLE_BUFFERED_P (f))
-        font_drop_xrender_surfaces (f);
-#ifdef HAVE_XRENDER
-      if (f && FRAME_X_DOUBLE_BUFFERED_P (f)
-         && FRAME_X_PICTURE (f) != None)
-       {
-         XRenderFreePicture (FRAME_X_DISPLAY (f),
-                             FRAME_X_PICTURE (f));
-         FRAME_X_PICTURE (f) = None;
-       }
-#endif
+        x_drop_xrender_surfaces (f);
       unblock_input ();
 #if defined USE_CAIRO && !defined USE_GTK
       if (f)
@@ -9931,7 +9938,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 
          block_input ();
           if (FRAME_X_DOUBLE_BUFFERED_P (f))
-            font_drop_xrender_surfaces (f);
+            x_drop_xrender_surfaces (f);
           unblock_input ();
           xg_frame_resized (f, configureEvent.xconfigure.width,
                             configureEvent.xconfigure.height);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]