[gtk+/wip/csd-for-review] Allow theme control over window buttons
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/csd-for-review] Allow theme control over window buttons
- Date: Mon, 11 Mar 2013 02:03:21 +0000 (UTC)
commit d93f3c9b747e4daddd66527718ca4d968daa025c
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Mar 9 23:03:38 2013 -0500
Allow theme control over window buttons
Add a style property to control the presence and order of
window buttons.
gtk/gtkwindow.c | 34 +++++++++++++++++++++++++++++++++-
1 files changed, 33 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 217a301..0e64cc2 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -1029,6 +1029,13 @@ gtk_window_class_init (GtkWindowClass *klass)
/* Style properties.
*/
gtk_widget_class_install_style_property (widget_class,
+ g_param_spec_string ("decoration-button-layout",
+ P_("Decorated button layout"),
+ P_("Decorated button layout"),
+ "minimize,maximize,close",
+ GTK_PARAM_READABLE));
+
+ gtk_widget_class_install_style_property (widget_class,
g_param_spec_int ("resize-grip-width",
P_("Width of resize grip"),
P_("Width of resize grip"),
@@ -4865,12 +4872,22 @@ update_window_buttons (GtkWindow *window)
if (priv->client_decorated)
{
+ gchar *layout_desc;
+ gchar **tokens;
+ gint i;
+
+ gtk_widget_style_get (GTK_WIDGET (window),
+ "decoration-button-layout", &layout_desc,
+ NULL);
+ tokens = g_strsplit (layout_desc, ",", -1);
+
if (priv->title_box != NULL)
gtk_widget_show (priv->title_box);
if (priv->title_min_button != NULL)
{
- if (priv->gdk_type_hint == GDK_WINDOW_TYPE_HINT_NORMAL)
+ if (strstr (layout_desc, "minimize") &&
+ priv->gdk_type_hint == GDK_WINDOW_TYPE_HINT_NORMAL)
gtk_widget_show (priv->title_min_button);
else
gtk_widget_hide (priv->title_min_button);
@@ -4879,6 +4896,7 @@ update_window_buttons (GtkWindow *window)
if (priv->title_max_button != NULL)
{
if (priv->resizable &&
+ strstr (layout_desc, "maximize") &&
priv->gdk_type_hint == GDK_WINDOW_TYPE_HINT_NORMAL)
gtk_widget_show (priv->title_max_button);
else
@@ -4888,6 +4906,7 @@ update_window_buttons (GtkWindow *window)
if (priv->title_close_button != NULL)
{
if (priv->deletable &&
+ strstr (layout_desc, "close") &&
priv->gdk_type_hint == GDK_WINDOW_TYPE_HINT_NORMAL)
gtk_widget_show_all (priv->title_close_button);
else
@@ -4896,6 +4915,19 @@ update_window_buttons (GtkWindow *window)
if (priv->title_label != NULL)
gtk_widget_show (priv->title_label);
+
+ for (i = 0; tokens[i] != 0; i++)
+ {
+ if (strcmp (tokens[i], "minimize") == 0)
+ gtk_box_reorder_child (GTK_BOX (priv->title_box), priv->title_min_button, 0);
+ else if (strcmp (tokens[i], "maximize") == 0)
+ gtk_box_reorder_child (GTK_BOX (priv->title_box), priv->title_max_button, 0);
+ else if (strcmp (tokens[i], "close") == 0)
+ gtk_box_reorder_child (GTK_BOX (priv->title_box), priv->title_close_button, 0);
+ }
+
+ g_strfreev (tokens);
+ g_free (layout_desc);
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]