GtkHeaderBar: Make labels creation available privately

So it can be reused in subclasses

https://bugzilla.gnome.org/show_bug.cgi?id=701345
This commit is contained in:
Bastien Nocera 2013-05-24 15:07:16 +02:00
parent 419b25b643
commit 8a45cb5762
3 changed files with 72 additions and 18 deletions

View File

@ -484,6 +484,7 @@ gtk_private_h_sources = \
gtkfilesystemmodel.h \
gtkfontchooserprivate.h \
gtkfontchooserutils.h \
gtkheaderbarprivate.h \
gtkhslaprivate.h \
gtkiconcache.h \
gtkiconhelperprivate.h \

View File

@ -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

28
gtk/gtkheaderbarprivate.h Normal file
View File

@ -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__ */