Commit c4539df2 authored by Alexander Larsson's avatar Alexander Larsson

Re-fix opacity group handling

The last change fixed the windowed widget case but broke
opacity group handling for windowed child widgets. This fixes
up the code by making sure we norender_children in when there
is an opacity group.

This also cleans up the comments about how this works to something
that is hopefully more understandable.
parent 8ee57846
...@@ -14230,21 +14230,25 @@ gtk_widget_propagate_alpha (GtkWidget *widget) ...@@ -14230,21 +14230,25 @@ gtk_widget_propagate_alpha (GtkWidget *widget)
parent = priv->parent; parent = priv->parent;
norender = /* Norender affects only windowed widget and means don't render widget->window in the
/* If this widget has an opacity group and no window don't render it */ normal fashion.
(priv->opacity_group && !gtk_widget_get_has_window (widget)) || We only set this if the parent has norender_children, because:
/* If the parent has norender_children, propagate that here */ a) For an opacity group (that does not have a norender_children parent) we still
(parent != NULL && parent->priv->norender_children); need to render the window or we will never get an expose event.
b) For alpha we set the opacity of window->widget directly, so no other
/* Windowed widget children should norender if: */ work is needed.
*/
norender = (parent != NULL && parent->priv->norender_children);
/* windows under this widget should not render if:
a) This widget has an opacity group
b) This widget has alpha and is no-windowed (otherwise we'd set alpha on widget->window)
c) This widget has norender but is no-windowed (a windowed widget would "swallow" the norender)
*/
norender_children = norender_children =
/* The widget is no_window (otherwise its enought to mark it norender/alpha), and */ priv->opacity_group ||
!gtk_widget_get_has_window (widget) && (!gtk_widget_get_has_window (widget) &&
( /* norender is set, or */ ( norender || priv->alpha != 255));
norender ||
/* widget has an alpha */
priv->alpha != 255
);
if (gtk_widget_get_has_window (widget)) if (gtk_widget_get_has_window (widget))
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment