diff options
Diffstat (limited to 'gtk/gtkwindow.c')
-rw-r--r-- | gtk/gtkwindow.c | 63 |
1 files changed, 40 insertions, 23 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index c8fb6c02bd..5cb0bf2740 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -6140,10 +6140,9 @@ update_window_style_classes (GtkWindow *window) } static void -get_shadow_width (GtkWidget *widget, - GtkBorder *shadow_width) +get_shadow_width_internal (GtkWidget *widget, + GtkBorder *shadow_width) { - GtkWindowPrivate *priv = GTK_WINDOW (widget)->priv; GtkBorder border = { 0 }; GtkBorder d = { 0 }; GtkBorder margin; @@ -6154,14 +6153,6 @@ get_shadow_width (GtkWidget *widget, *shadow_width = border; - if (!priv->client_decorated) - return; - - if (priv->maximized || - priv->fullscreen || - priv->tiled) - return; - state = gtk_widget_get_state_flags (widget); context = gtk_widget_get_style_context (widget); @@ -6200,6 +6191,26 @@ get_shadow_width (GtkWidget *widget, gtk_style_context_restore (context); } +static void +get_shadow_width (GtkWidget *widget, + GtkBorder *shadow_width) +{ + GtkWindowPrivate *priv = GTK_WINDOW (widget)->priv; + GtkBorder nothing = { 0 }; + + *shadow_width = nothing; + + if (!priv->client_decorated) + return; + + if (priv->maximized || + priv->fullscreen || + priv->tiled) + return; + + get_shadow_width_internal (widget, shadow_width); +} + /* We're placing 8 input-only windows around * the window content as resize handles, as * follows: @@ -6438,19 +6449,27 @@ update_border_windows (GtkWindow *window) } static void -update_shadow_width (GtkWindow *window, - GtkBorder *border) +update_shadow_width (GtkWindow *window) { + GtkWidget *widget = GTK_WIDGET (window); + GtkWindowPrivate *priv = window->priv; GdkWindow *gdk_window; + GtkBorder border; - gdk_window = gtk_widget_get_window (GTK_WIDGET (window)); + if (!priv->client_decorated) + return; - if (gdk_window) - gdk_window_set_shadow_width (gdk_window, - border->left, - border->right, - border->top, - border->bottom); + gdk_window = gtk_widget_get_window (widget); + + if (gdk_window == NULL) + return; + + get_shadow_width_internal (widget, &border); + gdk_window_set_shadow_width (gdk_window, + border.left, + border.right, + border.top, + border.bottom); } static void @@ -6584,9 +6603,6 @@ _gtk_window_set_allocation (GtkWindow *window, priv->title_height = 0; - if (priv->client_decorated) - update_shadow_width (window, &window_border); - update_opaque_region (window, &window_border, &child_allocation); if (priv->title_box != NULL && @@ -6821,6 +6837,7 @@ gtk_window_style_updated (GtkWidget *widget) gdk_window_set_background_rgba (gtk_widget_get_window (widget), &transparent); gtk_widget_queue_resize (widget); + update_shadow_width (window); } } |