emacs-diffs
[Top][All Lists]
Advanced

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

master 4dd47196f6: Fix opaque region treatment on GTK 3


From: Po Lu
Subject: master 4dd47196f6: Fix opaque region treatment on GTK 3
Date: Mon, 18 Apr 2022 23:14:10 -0400 (EDT)

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

    Fix opaque region treatment on GTK 3
    
    * src/xfns.c (x_set_alpha_background):
    * src/xterm.c (x_update_opaque_region): Update opaque region for
    tooltip frames the correct way on GTK.
---
 src/xfns.c  | 22 +++++++++++++++++++++-
 src/xterm.c |  9 +++++++--
 2 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/src/xfns.c b/src/xfns.c
index 195af1381b..9ceba98f67 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -730,9 +730,11 @@ x_set_wait_for_wm (struct frame *f, Lisp_Object new_value, 
Lisp_Object old_value
 static void
 x_set_alpha_background (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
 {
-#ifndef HAVE_GTK3
   unsigned long opaque_region[] = {0, 0, FRAME_PIXEL_WIDTH (f),
                                   FRAME_PIXEL_HEIGHT (f)};
+#ifdef USE_GTK
+  GObjectClass *object_class;
+  GtkWidgetClass *class;
 #endif
 
   gui_set_alpha_background (f, arg, oldval);
@@ -776,6 +778,24 @@ x_set_alpha_background (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
                     FRAME_DISPLAY_INFO (f)->Xatom_net_wm_opaque_region,
                     XA_CARDINAL, 32, PropModeReplace,
                     (unsigned char *) &opaque_region, 4);
+#else
+  else
+    {
+      if (FRAME_TOOLTIP_P (f))
+       XChangeProperty (FRAME_X_DISPLAY (f),
+                        FRAME_X_WINDOW (f),
+                        FRAME_DISPLAY_INFO (f)->Xatom_net_wm_opaque_region,
+                        XA_CARDINAL, 32, PropModeReplace,
+                        (unsigned char *) &opaque_region, 4);
+      else
+       {
+         object_class = G_OBJECT_GET_CLASS (FRAME_GTK_OUTER_WIDGET (f));
+         class = GTK_WIDGET_CLASS (object_class);
+
+         if (class->style_updated)
+           class->style_updated (FRAME_GTK_OUTER_WIDGET (f));
+       }
+    }
 #endif
 }
 
diff --git a/src/xterm.c b/src/xterm.c
index 99269e3e92..b5b2fe3294 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -3783,7 +3783,6 @@ x_toolkit_position (struct frame *f, int x, int y,
 static void
 x_update_opaque_region (struct frame *f, XEvent *configure)
 {
-#ifndef HAVE_GTK3
   unsigned long opaque_region[] = {0, 0,
                                   (configure
                                    ? configure->xconfigure.width
@@ -3791,7 +3790,6 @@ x_update_opaque_region (struct frame *f, XEvent 
*configure)
                                   (configure
                                    ? configure->xconfigure.height
                                    : FRAME_PIXEL_HEIGHT (f))};
-#endif
 
   if (!FRAME_DISPLAY_INFO (f)->alpha_bits)
     return;
@@ -3810,6 +3808,13 @@ x_update_opaque_region (struct frame *f, XEvent 
*configure)
                     FRAME_DISPLAY_INFO (f)->Xatom_net_wm_opaque_region,
                     XA_CARDINAL, 32, PropModeReplace,
                     (unsigned char *) &opaque_region, 4);
+#else
+  else if (FRAME_TOOLTIP_P (f))
+    XChangeProperty (FRAME_X_DISPLAY (f),
+                    FRAME_X_WINDOW (f),
+                    FRAME_DISPLAY_INFO (f)->Xatom_net_wm_opaque_region,
+                    XA_CARDINAL, 32, PropModeReplace,
+                    (unsigned char *) &opaque_region, 4);
 #endif
   unblock_input ();
 }



reply via email to

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