[gtk+] GtkHeaderBar: Make labels creation available privately



commit 8a45cb576264565f5dbe991cb9b77cafb3919999
Author: Bastien Nocera <hadess hadess net>
Date:   Fri May 24 15:07:16 2013 +0200

    GtkHeaderBar: Make labels creation available privately
    
    So it can be reused in subclasses
    
    https://bugzilla.gnome.org/show_bug.cgi?id=701345

 gtk/Makefile.am           |    1 +
 gtk/gtkheaderbar.c        |   61 +++++++++++++++++++++++++++++++-------------
 gtk/gtkheaderbarprivate.h |   28 ++++++++++++++++++++
 3 files changed, 72 insertions(+), 18 deletions(-)
---
diff --git a/gtk/Makefile.am b/gtk/Makefile.am
index 0b3de0a..f5fc3d1 100644
--- a/gtk/Makefile.am
+++ b/gtk/Makefile.am
@@ -484,6 +484,7 @@ gtk_private_h_sources =             \
        gtkfilesystemmodel.h    \
        gtkfontchooserprivate.h \
        gtkfontchooserutils.h   \
+       gtkheaderbarprivate.h   \
        gtkhslaprivate.h        \
        gtkiconcache.h          \
        gtkiconhelperprivate.h  \
diff --git a/gtk/gtkheaderbar.c b/gtk/gtkheaderbar.c
index b15fd0b..d08fbc6 100644
--- a/gtk/gtkheaderbar.c
+++ b/gtk/gtkheaderbar.c
@@ -20,6 +20,7 @@
 #include "config.h"
 
 #include "gtkheaderbar.h"
+#include "gtkheaderbarprivate.h"
 #include "gtkintl.h"
 #include "gtkprivate.h"
 #include "gtktypebuiltins.h"
@@ -162,6 +163,44 @@ init_sizing_box (GtkHeaderBar *bar)
   gtk_widget_show_all (priv->label_sizing_box);
 }
 
+GtkWidget *
+_gtk_header_bar_create_title_box (const char *title,
+                                  const char *subtitle,
+                                  GtkWidget **ret_title_label,
+                                  GtkWidget **ret_subtitle_label)
+{
+  GtkWidget *label_box;
+  GtkWidget *title_label;
+  GtkWidget *subtitle_label;
+
+  label_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+  gtk_widget_set_valign (label_box, GTK_ALIGN_CENTER);
+  gtk_widget_show (label_box);
+
+  title_label = gtk_label_new (title);
+  boldify_label (title_label);
+  gtk_label_set_line_wrap (GTK_LABEL (title_label), FALSE);
+  gtk_label_set_single_line_mode (GTK_LABEL (title_label), TRUE);
+  gtk_label_set_ellipsize (GTK_LABEL (title_label), PANGO_ELLIPSIZE_END);
+  gtk_box_pack_start (GTK_BOX (label_box), title_label, FALSE, FALSE, 0);
+  gtk_widget_show (title_label);
+
+  subtitle_label = gtk_label_new (subtitle);
+  smallify_label (subtitle_label);
+  gtk_label_set_line_wrap (GTK_LABEL (subtitle_label), FALSE);
+  gtk_label_set_single_line_mode (GTK_LABEL (subtitle_label), TRUE);
+  gtk_label_set_ellipsize (GTK_LABEL (subtitle_label), PANGO_ELLIPSIZE_END);
+  gtk_box_pack_start (GTK_BOX (label_box), subtitle_label, FALSE, FALSE, 0);
+  gtk_widget_set_no_show_all (subtitle_label, TRUE);
+
+  if (ret_title_label)
+    *ret_title_label = title_label;
+  if (ret_subtitle_label)
+    *ret_subtitle_label = subtitle_label;
+
+  return label_box;
+}
+
 static void
 construct_label_box (GtkHeaderBar *bar)
 {
@@ -169,25 +208,11 @@ construct_label_box (GtkHeaderBar *bar)
 
   g_assert (priv->label_box == NULL);
 
-  priv->label_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+  priv->label_box = _gtk_header_bar_create_title_box (priv->title,
+                                                      priv->subtitle,
+                                                      &priv->title_label,
+                                                      &priv->subtitle_label);
   gtk_widget_set_parent (priv->label_box, GTK_WIDGET (bar));
-  gtk_widget_set_valign (priv->label_box, GTK_ALIGN_CENTER);
-  gtk_widget_show (priv->label_box);
-
-  priv->title_label = gtk_label_new (priv->title);
-  boldify_label (priv->title_label);
-  gtk_label_set_line_wrap (GTK_LABEL (priv->title_label), FALSE);
-  gtk_label_set_single_line_mode (GTK_LABEL (priv->title_label), TRUE);
-  gtk_label_set_ellipsize (GTK_LABEL (priv->title_label), PANGO_ELLIPSIZE_END);
-  gtk_box_pack_start (GTK_BOX (priv->label_box), priv->title_label, FALSE, FALSE, 0);
-  gtk_widget_show (priv->title_label);
-
-  priv->subtitle_label = gtk_label_new (priv->subtitle);
-  smallify_label (priv->subtitle_label);
-  gtk_label_set_line_wrap (GTK_LABEL (priv->subtitle_label), FALSE);
-  gtk_label_set_single_line_mode (GTK_LABEL (priv->subtitle_label), TRUE);
-  gtk_label_set_ellipsize (GTK_LABEL (priv->subtitle_label), PANGO_ELLIPSIZE_END);
-  gtk_box_pack_start (GTK_BOX (priv->label_box), priv->subtitle_label, FALSE, FALSE, 0);
 }
 
 static void
diff --git a/gtk/gtkheaderbarprivate.h b/gtk/gtkheaderbarprivate.h
new file mode 100644
index 0000000..bd75166
--- /dev/null
+++ b/gtk/gtkheaderbarprivate.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2013 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifndef __GTK_HEADER_BAR_PRIVATE_H__
+#define __GTK_HEADER_BAR_PRIVATE_H__
+
+GtkWidget * _gtk_header_bar_create_title_box (const char *title,
+                                              const char *subtitle,
+                                              GtkWidget **ret_title_label,
+                                              GtkWidget **ret_subtitle_label);
+
+#endif /* __GTK_HEADER_BAR_PRIVATE_H__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]