forked from AuroraMiddleware/gtk
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.
This commit is contained in:
parent
d58c750db5
commit
4cf6edda55
@ -7122,8 +7122,9 @@ _gtk_widget_draw (GtkWidget *widget,
|
|||||||
cairo_save (cr);
|
cairo_save (cr);
|
||||||
|
|
||||||
push_group =
|
push_group =
|
||||||
(widget->priv->alpha != 255 &&
|
widget->priv->alpha != 255 &&
|
||||||
!gtk_widget_is_toplevel (widget));
|
(!gtk_widget_is_toplevel (widget) ||
|
||||||
|
gtk_widget_get_visual (widget) == gdk_screen_get_rgba_visual (gtk_widget_get_screen (widget)));
|
||||||
|
|
||||||
if (push_group)
|
if (push_group)
|
||||||
cairo_push_group (cr);
|
cairo_push_group (cr);
|
||||||
@ -15958,7 +15959,8 @@ gtk_widget_update_alpha (GtkWidget *widget)
|
|||||||
|
|
||||||
if (gtk_widget_get_realized (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);
|
gdk_window_set_opacity (priv->window, priv->alpha / 255.0);
|
||||||
|
|
||||||
gtk_widget_queue_draw (widget);
|
gtk_widget_queue_draw (widget);
|
||||||
|
@ -6761,6 +6761,9 @@ update_opaque_region (GtkWindow *window,
|
|||||||
is_opaque = (color->alpha >= 1.0);
|
is_opaque = (color->alpha >= 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gtk_widget_get_opacity (widget) < 1.0)
|
||||||
|
is_opaque = FALSE;
|
||||||
|
|
||||||
if (is_opaque)
|
if (is_opaque)
|
||||||
{
|
{
|
||||||
cairo_rectangle_int_t rect;
|
cairo_rectangle_int_t rect;
|
||||||
|
Loading…
Reference in New Issue
Block a user