From 628d5406d72cf29d678f20a56a51e1871a1af221 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 24 Apr 2021 09:16:42 -0400 Subject: [PATCH 1/3] x11: Fix shadows Commit a2cd21cab663a003 changed a condition and inadvertedly broke client-side shadows on X11. Change this back. Fixes: #3896 --- gtk/gtkwindow.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index abc6aa1582..a21e7205c8 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -4005,7 +4005,7 @@ get_shadow_width (GtkWindow *window, if (!priv->decorated) goto out; - if (!priv->client_decorated || + if (!priv->client_decorated && !(gtk_window_should_use_csd (window) && gtk_window_supports_client_shadow (window))) goto out; From 1c1c030b8e6a9da8628197592d33c0f547fde293 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 24 Apr 2021 11:07:20 -0400 Subject: [PATCH 2/3] Simplify shadow conditions The code in gtkwindow.c for dealing with the various combinations of client-side decorations and client-side shadows is entirely too complicated. This commit does not really clean it up, but simplifies one of the shadow conditions far enough to make some sense. With this change, I get the expected decorations in all the cases I can easily reproduce locally. --- gtk/gtkwindow.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index a21e7205c8..88a4e9721a 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -4005,9 +4005,8 @@ get_shadow_width (GtkWindow *window, if (!priv->decorated) goto out; - if (!priv->client_decorated && - !(gtk_window_should_use_csd (window) && - gtk_window_supports_client_shadow (window))) + if (!priv->client_decorated || + !priv->use_client_shadow) goto out; if (priv->maximized || From aa569acaa14a79a94eadbd18bd80b28852ec7e29 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 24 Apr 2021 11:29:19 -0400 Subject: [PATCH 3/3] window: Don't let solid-csd linger Just from reading the code, it seems that we should unset .csd and .solid-csd at the same time, since the are mutually exclusive and we unset them here so realize() can set one of them again. --- gtk/gtkwindow.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 88a4e9721a..d7048ed412 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -3038,8 +3038,10 @@ gtk_window_set_titlebar (GtkWindow *window, if (titlebar == NULL) { + /* these are updated in realize() */ priv->client_decorated = FALSE; gtk_widget_remove_css_class (widget, "csd"); + gtk_widget_remove_css_class (widget, "solid-csd"); goto out; }