diff --git a/gdk/x11/gdksettings.c b/gdk/x11/gdksettings.c index f8bb6d896b113f509e0fa52753a8d20a01be030a..772d6eb707e8037a0fad05414b8ace3906384cb5 100644 --- a/gdk/x11/gdksettings.c +++ b/gdk/x11/gdksettings.c @@ -69,6 +69,7 @@ static const struct { {"Gtk/RecentFilesMaxAge", "gtk-recent-files-max-age"}, {"Gtk/RecentFilesEnabled", "gtk-recent-files-enabled"}, {"Gtk/KeynavUseCaret", "gtk-keynav-use-caret"}, + {"Gtk/DialogsAlwaysCSD", "gtk-dialogs-always-csd"}, /* These are here in order to be recognized, but are not sent to gtk as they are handled internally by gdk: */ diff --git a/gtk/gtkdialog.c b/gtk/gtkdialog.c index 0ef0f08b24aef403e09a57aecc1af0254c2d7c58..c397d4529280cbc9fc05bbb550c23aae50c8c6e6 100644 --- a/gtk/gtkdialog.c +++ b/gtk/gtkdialog.c @@ -457,6 +457,8 @@ gtk_dialog_constructed (GObject *object) { GtkDialog *dialog = GTK_DIALOG (object); GtkDialogPrivate *priv = dialog->priv; + GtkSettings *settings; + gboolean always_csd; G_OBJECT_CLASS (gtk_dialog_parent_class)->constructed (object); @@ -464,6 +466,9 @@ gtk_dialog_constructed (GObject *object) if (priv->use_header_bar == -1) priv->use_header_bar = FALSE; + settings = gtk_widget_get_settings (GTK_WIDGET (dialog)); + g_object_get (settings, "gtk-dialogs-always-csd", &always_csd, NULL); + if (priv->use_header_bar) { GList *children, *l; @@ -494,6 +499,13 @@ gtk_dialog_constructed (GObject *object) g_signal_connect (priv->action_area, "add", G_CALLBACK (add_cb), dialog); } + else if (always_csd) + { + g_object_set (priv->headerbar, "has-subtitle", FALSE, NULL); + GtkStyleContext *context = gtk_widget_get_style_context (priv->headerbar); + gtk_style_context_add_class (context, GTK_STYLE_CLASS_TITLEBAR); + gtk_style_context_add_class (context, "default-decoration"); + } else { gtk_window_set_titlebar (GTK_WINDOW (dialog), NULL); diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c index 571ae11cd465000d1feb948ffcb8a90466183452..14f385b5077b4181a5f980bf6f26368a2403e443 100644 --- a/gtk/gtksettings.c +++ b/gtk/gtksettings.c @@ -224,7 +224,8 @@ enum { PROP_ENABLE_PRIMARY_PASTE, PROP_RECENT_FILES_ENABLED, PROP_LONG_PRESS_TIME, - PROP_KEYNAV_USE_CARET + PROP_KEYNAV_USE_CARET, + PROP_DIALOGS_ALWAYS_CSD }; /* --- prototypes --- */ @@ -1767,6 +1768,23 @@ gtk_settings_class_init (GtkSettingsClass *class) GTK_PARAM_READWRITE), NULL); g_assert (result == PROP_KEYNAV_USE_CARET); + + /** + * GtkSettings:gtk-dialogs-always-csd: + * + * Whether GTK+ should make all dialogs use client side decorations + * even when gtk-dialogs-use-header is set to false + * + * Since: 3.24.9 + */ + result = settings_install_property_parser (class, + g_param_spec_boolean ("gtk-dialogs-always-csd", + P_("Whether to always use CSD in dialogs"), + P_("Whether to always use CSD in dialogs"), + FALSE, + GTK_PARAM_READWRITE), + NULL); + g_assert (result == PROP_DIALOGS_ALWAYS_CSD); } static void