summaryrefslogtreecommitdiff
path: root/src/pgtkfns.c
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-01-31 20:21:04 +0800
committerPo Lu <luangruo@yahoo.com>2022-01-31 20:21:04 +0800
commit46473a4eac2579b88ec843e1301eb2a89835e2ae (patch)
treef945e81e20b215f2f5cf2188b1ddf141415b75a9 /src/pgtkfns.c
parent790ad61fcf91c75811ed30d21518e1dac99be044 (diff)
downloademacs-46473a4eac2579b88ec843e1301eb2a89835e2ae.tar.gz
Implement `alpha-background' on PGTK
* src/ftcrfont.c (ftcrfont_draw): Respect alpha-background where appropriate. * src/gtkutil.c (xg_create_frame_widgets): Swap some conditionals around to get the right visual and signal handlers on PGTK. (xg_widget_style_updated): Likewise. * src/pgtkfns.c (pgtk_set_alpha_background): New function. (pgtk_frame_parm_handlers): Add it instead of the generic param handler. (Fx_create_frame): Fix typo. * src/pgtkterm.c (pgtk_fill_rectangle): (pgtk_set_cr_source_with_gc_foreground): (pgtk_set_cr_source_with_gc_background): (pgtk_set_cr_source_with_color): New argument `respect_alpha_backend'. All callers changed. * src/pgtkterm.h: Update function prototypes.
Diffstat (limited to 'src/pgtkfns.c')
-rw-r--r--src/pgtkfns.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/pgtkfns.c b/src/pgtkfns.c
index 5980b31d6e2..c7987afc7db 100644
--- a/src/pgtkfns.c
+++ b/src/pgtkfns.c
@@ -235,6 +235,24 @@ x_set_background_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
}
static void
+pgtk_set_alpha_background (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
+{
+ gui_set_alpha_background (f, arg, oldval);
+
+ /* This prevents GTK from painting the window's background, which
+ interferes with transparent background in some environments */
+
+ gtk_widget_set_app_paintable (FRAME_GTK_OUTER_WIDGET (f),
+ f->alpha_background != 1.0);
+
+ if (FRAME_GTK_OUTER_WIDGET (f)
+ && gtk_widget_get_realized (FRAME_GTK_OUTER_WIDGET (f))
+ && f->alpha_background != 1.0)
+ gdk_window_set_opaque_region (gtk_widget_get_window (FRAME_GTK_OUTER_WIDGET (f)),
+ NULL);
+}
+
+static void
x_set_border_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
{
int pix;
@@ -1043,7 +1061,7 @@ frame_parm_handler pgtk_frame_parm_handlers[] = {
x_set_z_group,
x_set_override_redirect,
gui_set_no_special_glyphs,
- gui_set_alpha_background,
+ pgtk_set_alpha_background,
};
@@ -1668,7 +1686,7 @@ This function is an internal primitive--use `make-frame' instead. */ )
RES_TYPE_NUMBER);
gui_default_parameter (f, parms, Qalpha, Qnil,
"alpha", "Alpha", RES_TYPE_NUMBER);
- gui_default_parameter (f, parms, Qalpha, Qnil,
+ gui_default_parameter (f, parms, Qalpha_background, Qnil,
"alphaBackground", "AlphaBackground", RES_TYPE_NUMBER);
if (!NILP (parent_frame))