diff options
author | Po Lu <luangruo@yahoo.com> | 2022-01-31 20:21:04 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2022-01-31 20:21:04 +0800 |
commit | 46473a4eac2579b88ec843e1301eb2a89835e2ae (patch) | |
tree | f945e81e20b215f2f5cf2188b1ddf141415b75a9 /src/pgtkfns.c | |
parent | 790ad61fcf91c75811ed30d21518e1dac99be044 (diff) | |
download | emacs-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.c | 22 |
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)) |