summaryrefslogtreecommitdiff
path: root/gtk/gtkwidget.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2014-10-28 10:28:23 -0400
committerMatthias Clasen <mclasen@redhat.com>2014-10-28 10:28:23 -0400
commit4cf6edda55edb57228e9a1b545dd72c90c3d22af (patch)
tree07eb4042ccb1df6728ce82c61883946ed4e1ac4b /gtk/gtkwidget.c
parentd58c750db5085a6e7ffe3490acc938a0694743d4 (diff)
downloadgtk+-4cf6edda55edb57228e9a1b545dd72c90c3d22af.tar.gz
wayland: Make window opacity work
Under wayland, the compositor doesn't have a 'overall window alpha' knob, we just need to add the alpha to the buffers we send. Client-side alpha, if you want to call it that. Implement this by reusing the existing alpha support for non-toplevel widgets. As a side-effect of the implementation, windows with RGBA visual under X will now also use per-pixel alpha, instead of overall alpha.
Diffstat (limited to 'gtk/gtkwidget.c')
-rw-r--r--gtk/gtkwidget.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 956543910c..f3e4958ae9 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -7122,8 +7122,9 @@ _gtk_widget_draw (GtkWidget *widget,
cairo_save (cr);
push_group =
- (widget->priv->alpha != 255 &&
- !gtk_widget_is_toplevel (widget));
+ widget->priv->alpha != 255 &&
+ (!gtk_widget_is_toplevel (widget) ||
+ gtk_widget_get_visual (widget) == gdk_screen_get_rgba_visual (gtk_widget_get_screen (widget)));
if (push_group)
cairo_push_group (cr);
@@ -15958,7 +15959,8 @@ gtk_widget_update_alpha (GtkWidget *widget)
if (gtk_widget_get_realized (widget))
{
- if (gtk_widget_is_toplevel (widget))
+ if (gtk_widget_is_toplevel (widget) &&
+ gtk_widget_get_visual (widget) != gdk_screen_get_rgba_visual (gtk_widget_get_screen (widget)))
gdk_window_set_opacity (priv->window, priv->alpha / 255.0);
gtk_widget_queue_draw (widget);