summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2013-03-10 15:17:05 -0400
committerMatthias Clasen <mclasen@redhat.com>2013-03-10 15:17:05 -0400
commit91abc523115fd8cbb3307341b233b3e5fbd1eda6 (patch)
tree532b849766ff451c93ae84ef19dcb8b443a6048e
parent88263b9357f87a0fdb348df0c885151d00739c58 (diff)
downloadgtk+-91abc523115fd8cbb3307341b233b3e5fbd1eda6.tar.gz
Use GtkHeaderBar in client-side decorations
This separates titlebar layout from the GtkWindow code, and gets the title properly centered. It also paves the way for allowing ttle buttons on the left.
-rw-r--r--gtk/gtkwindow.c42
1 files changed, 17 insertions, 25 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 3043e7ba0b..849f681f27 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -49,9 +49,9 @@
#include "gtkintl.h"
#include "gtkstylecontextprivate.h"
#include "gtktypebuiltins.h"
-#include "gtklabel.h"
#include "gtkbox.h"
#include "gtkbutton.h"
+#include "gtkheaderbar.h"
#include "a11y/gtkwindowaccessible.h"
#include "deprecated/gtkstyle.h"
@@ -142,7 +142,6 @@ struct _GtkWindowPrivate
guint auto_mnemonics_timeout_id;
GtkWidget *title_box;
- GtkWidget *title_label;
GtkWidget *title_min_button;
GtkWidget *title_max_button;
GtkWidget *title_close_button;
@@ -1758,13 +1757,10 @@ gtk_window_set_title (GtkWindow *window,
priv->title = new_title;
if (gtk_widget_get_realized (widget))
- {
- gdk_window_set_title (gtk_widget_get_window (widget),
- priv->title);
- }
+ gdk_window_set_title (gtk_widget_get_window (widget), priv->title);
- if (priv->title_label)
- gtk_label_set_text (GTK_LABEL (priv->title_label), priv->title);
+ if (priv->title_box)
+ gtk_header_bar_set_title (GTK_HEADER_BAR (priv->title_box), priv->title);
g_object_notify (G_OBJECT (window), "title");
}
@@ -4946,9 +4942,7 @@ update_window_buttons (GtkWindow *window)
gtk_widget_hide (priv->title_close_button);
}
- if (priv->title_label != NULL)
- gtk_widget_show (priv->title_label);
-
+#if 0
if (priv->title_box != NULL)
{
gtk_widget_show (priv->title_box);
@@ -4963,7 +4957,7 @@ update_window_buttons (GtkWindow *window)
gtk_box_reorder_child (GTK_BOX (priv->title_box), priv->title_close_button, 0);
}
}
-
+#endif
g_strfreev (tokens);
g_free (layout_desc);
}
@@ -5015,39 +5009,37 @@ create_decoration (GtkWidget *widget)
if (priv->type != GTK_WINDOW_POPUP)
{
- priv->title_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+ priv->title_box = gtk_header_bar_new ();
+ g_object_set (priv->title_box,
+ "spacing", 0,
+ "hpadding", 0,
+ "vpadding", 0,
+ NULL);
context = gtk_widget_get_style_context (priv->title_box);
gtk_style_context_add_class (context, "titlebar");
gtk_widget_set_parent (priv->title_box, GTK_WIDGET (window));
- priv->title_label = gtk_label_new (NULL);
if (priv->title)
title = priv->title;
else
title = get_default_title (); /* copied from X backend */
- gtk_label_set_markup (GTK_LABEL (priv->title_label), title);
- gtk_label_set_ellipsize (GTK_LABEL (priv->title_label), PANGO_ELLIPSIZE_END);
- gtk_box_pack_start (GTK_BOX (priv->title_box),
- priv->title_label, TRUE, TRUE, 0);
+ gtk_header_bar_set_title (GTK_HEADER_BAR (priv->title_box), title);
priv->title_close_button = gtk_button_new_with_label ("×");
gtk_widget_set_can_focus (priv->title_close_button, FALSE);
- gtk_box_pack_end (GTK_BOX (priv->title_box), priv->title_close_button,
- FALSE, FALSE, 0);
+ gtk_header_bar_pack_end (GTK_HEADER_BAR (priv->title_box), priv->title_close_button);
g_signal_connect (priv->title_close_button, "clicked",
G_CALLBACK (gtk_window_title_close_clicked), window);
priv->title_max_button = gtk_button_new_with_label ("\342\226\253");
gtk_widget_set_can_focus (priv->title_max_button, FALSE);
- gtk_box_pack_end (GTK_BOX (priv->title_box), priv->title_max_button,
- FALSE, FALSE, 0);
+ gtk_header_bar_pack_end (GTK_HEADER_BAR (priv->title_box), priv->title_max_button);
g_signal_connect (priv->title_max_button, "clicked",
G_CALLBACK (gtk_window_title_max_clicked), window);
priv->title_min_button = gtk_button_new_with_label ("_");
gtk_widget_set_can_focus (priv->title_min_button, FALSE);
- gtk_box_pack_end (GTK_BOX (priv->title_box), priv->title_min_button,
- FALSE, FALSE, 0);
+ gtk_header_bar_pack_end (GTK_HEADER_BAR (priv->title_box), priv->title_min_button);
g_signal_connect (priv->title_min_button, "clicked",
G_CALLBACK (gtk_window_title_min_clicked), window);
@@ -6120,7 +6112,7 @@ gtk_window_state_event (GtkWidget *widget,
if (event->changed_mask & (GDK_WINDOW_STATE_FULLSCREEN | GDK_WINDOW_STATE_MAXIMIZED))
{
update_window_buttons (window);
- gtk_widget_queue_draw (window);
+ gtk_widget_queue_draw (GTK_WIDGET (window));
}
return FALSE;