[gtk+/composite-templates-new: 15/20] GtkStatusbar: Define children with a GtkBuilder template
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/composite-templates-new: 15/20] GtkStatusbar: Define children with a GtkBuilder template
- Date: Tue, 26 Mar 2013 07:41:27 +0000 (UTC)
commit 12c888818e1f3bb4f9baf8fb8c5cccc83b1ab908
Author: Tristan Van Berkom <tristanvb openismus com>
Date: Sat Mar 23 20:38:43 2013 +0900
GtkStatusbar: Define children with a GtkBuilder template
gtk/Makefile.am | 3 +-
gtk/gtk.gresource.xml | 1 +
gtk/gtkstatusbar.c | 80 ++++++++++--------------------------------------
gtk/gtkstatusbar.ui | 49 ++++++++++++++++++++++++++++++
gtk/tests/templates.c | 11 +++++++
po/POTFILES.in | 1 +
6 files changed, 81 insertions(+), 64 deletions(-)
---
diff --git a/gtk/Makefile.am b/gtk/Makefile.am
index 4639210..95e378c 100644
--- a/gtk/Makefile.am
+++ b/gtk/Makefile.am
@@ -1100,7 +1100,8 @@ COMPOSITE_TEMPLATES = \
gtkinfobar.ui \
gtklockbutton.ui \
gtkmessagedialog.ui \
- gtkscalebutton.ui
+ gtkscalebutton.ui \
+ gtkstatusbar.ui
#
# rules to generate built sources
diff --git a/gtk/gtk.gresource.xml b/gtk/gtk.gresource.xml
index ae46681..cf7b9ed 100644
--- a/gtk/gtk.gresource.xml
+++ b/gtk/gtk.gresource.xml
@@ -18,5 +18,6 @@
<file>gtklockbutton.ui</file>
<file>gtkmessagedialog.ui</file>
<file>gtkscalebutton.ui</file>
+ <file>gtkstatusbar.ui</file>
</gresource>
</gresources>
diff --git a/gtk/gtkstatusbar.c b/gtk/gtkstatusbar.c
index 4735037..f5398b9 100644
--- a/gtk/gtkstatusbar.c
+++ b/gtk/gtkstatusbar.c
@@ -34,7 +34,6 @@
#include "gtkwindow.h"
#include "gtkprivate.h"
#include "gtkintl.h"
-#include "gtkbuildable.h"
#include "gtkorientable.h"
#include "gtktypebuiltins.h"
#include "a11y/gtkstatusbaraccessible.h"
@@ -80,6 +79,7 @@ struct _GtkStatusbarPrivate
{
GtkWidget *frame;
GtkWidget *label;
+ GtkWidget *message_area;
GSList *messages;
GSList *keys;
@@ -103,10 +103,6 @@ enum
SIGNAL_LAST
};
-static void gtk_statusbar_buildable_interface_init (GtkBuildableIface *iface);
-static GObject *gtk_statusbar_buildable_get_internal_child (GtkBuildable *buildable,
- GtkBuilder *builder,
- const gchar *childname);
static void gtk_statusbar_update (GtkStatusbar *statusbar,
guint context_id,
const gchar *text);
@@ -120,16 +116,12 @@ static void gtk_statusbar_hierarchy_changed (GtkWidget *widget,
static guint statusbar_signals[SIGNAL_LAST] = { 0 };
-G_DEFINE_TYPE_WITH_CODE (GtkStatusbar, gtk_statusbar, GTK_TYPE_BOX,
- G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
- gtk_statusbar_buildable_interface_init));
+G_DEFINE_TYPE (GtkStatusbar, gtk_statusbar, GTK_TYPE_BOX);
static void
gtk_statusbar_class_init (GtkStatusbarClass *class)
{
- GtkWidgetClass *widget_class;
-
- widget_class = (GtkWidgetClass *) class;
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
widget_class->realize = gtk_statusbar_realize;
widget_class->destroy = gtk_statusbar_destroy;
@@ -185,17 +177,22 @@ gtk_statusbar_class_init (GtkStatusbarClass *class)
GTK_SHADOW_IN,
GTK_PARAM_READABLE));
- g_type_class_add_private (class, sizeof (GtkStatusbarPrivate));
+ /* Bind class to template
+ */
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/gtkstatusbar.ui");
+ gtk_widget_class_bind_child_internal (widget_class, GtkStatusbarPrivate, message_area);
+ gtk_widget_class_bind_child (widget_class, GtkStatusbarPrivate, frame);
+ gtk_widget_class_bind_child (widget_class, GtkStatusbarPrivate, label);
+
+ g_type_class_add_private (class, sizeof (GtkStatusbarPrivate));
- gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_STATUSBAR_ACCESSIBLE);
+ gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_STATUSBAR_ACCESSIBLE);
}
static void
gtk_statusbar_init (GtkStatusbar *statusbar)
{
GtkStatusbarPrivate *priv;
- GtkBox *box = GTK_BOX (statusbar);
- GtkWidget *message_area;
GtkShadowType shadow_type;
statusbar->priv = G_TYPE_INSTANCE_GET_PRIVATE (statusbar,
@@ -203,59 +200,16 @@ gtk_statusbar_init (GtkStatusbar *statusbar)
GtkStatusbarPrivate);
priv = statusbar->priv;
- gtk_widget_set_redraw_on_allocate (GTK_WIDGET (box), TRUE);
-
- gtk_box_set_spacing (box, 2);
- gtk_box_set_homogeneous (box, FALSE);
-
- gtk_widget_style_get (GTK_WIDGET (statusbar), "shadow-type", &shadow_type, NULL);
-
- priv->frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (priv->frame), shadow_type);
- gtk_box_pack_start (box, priv->frame, TRUE, TRUE, 0);
- gtk_widget_show (priv->frame);
-
- message_area = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4);
- gtk_container_add (GTK_CONTAINER (priv->frame), message_area);
- gtk_widget_show (message_area);
-
- priv->label = gtk_label_new ("");
- gtk_label_set_single_line_mode (GTK_LABEL (priv->label), TRUE);
- gtk_widget_set_halign (priv->label, GTK_ALIGN_START);
- gtk_widget_set_valign (priv->label, GTK_ALIGN_CENTER);
- gtk_label_set_ellipsize (GTK_LABEL (priv->label), PANGO_ELLIPSIZE_END);
- gtk_container_add (GTK_CONTAINER (message_area), priv->label);
- gtk_widget_show (priv->label);
-
priv->seq_context_id = 1;
priv->seq_message_id = 1;
priv->messages = NULL;
priv->keys = NULL;
-}
-
-static GtkBuildableIface *parent_buildable_iface;
-static void
-gtk_statusbar_buildable_interface_init (GtkBuildableIface *iface)
-{
- parent_buildable_iface = g_type_interface_peek_parent (iface);
- iface->get_internal_child = gtk_statusbar_buildable_get_internal_child;
-}
+ gtk_widget_init_template (GTK_WIDGET (statusbar));
-static GObject *
-gtk_statusbar_buildable_get_internal_child (GtkBuildable *buildable,
- GtkBuilder *builder,
- const gchar *childname)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (buildable);
- GtkStatusbarPrivate *priv = statusbar->priv;
-
- if (strcmp (childname, "message_area") == 0)
- return G_OBJECT (gtk_bin_get_child (GTK_BIN (priv->frame)));
-
- return parent_buildable_iface->get_internal_child (buildable,
- builder,
- childname);
+ gtk_widget_set_redraw_on_allocate (GTK_WIDGET (statusbar), TRUE);
+ gtk_widget_style_get (GTK_WIDGET (statusbar), "shadow-type", &shadow_type, NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (priv->frame), shadow_type);
}
/**
@@ -580,7 +534,7 @@ gtk_statusbar_get_message_area (GtkStatusbar *statusbar)
priv = statusbar->priv;
- return gtk_bin_get_child (GTK_BIN (priv->frame));
+ return priv->message_area;
}
static void
diff --git a/gtk/gtkstatusbar.ui b/gtk/gtkstatusbar.ui
new file mode 100644
index 0000000..6c6b0b2
--- /dev/null
+++ b/gtk/gtkstatusbar.ui
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface domain="gtk30">
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GtkStatusbar" parent="GtkBox">
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkFrame" id="frame">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkBox" id="message_area">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="ellipsize">end</property>
+ <property name="single_line_mode">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </template>
+</interface>
diff --git a/gtk/tests/templates.c b/gtk/tests/templates.c
index cf821bb..24fd951 100644
--- a/gtk/tests/templates.c
+++ b/gtk/tests/templates.c
@@ -109,6 +109,16 @@ test_scale_button_basic (void)
gtk_widget_destroy (widget);
}
+static void
+test_statusbar_basic (void)
+{
+ GtkWidget *widget;
+
+ widget = gtk_statusbar_new ();
+ g_assert (GTK_IS_STATUSBAR (widget));
+ gtk_widget_destroy (widget);
+}
+
int
main (int argc, char **argv)
{
@@ -123,6 +133,7 @@ main (int argc, char **argv)
g_test_add_func ("/Template/GtkLockButton/Basic", test_lock_button_basic);
g_test_add_func ("/Template/GtkAssistant/Basic", test_assistant_basic);
g_test_add_func ("/Template/GtkScaleButton/Basic", test_scale_button_basic);
+ g_test_add_func ("/Template/GtkStatusBar/Basic", test_statusbar_basic);
return g_test_run();
}
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 1f9b2f8..1cd015a 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -281,3 +281,4 @@ modules/printbackends/test/gtkprintbackendtest.c
[type: gettext/glade]gtk/gtklockbutton.ui
[type: gettext/glade]gtk/gtkmessagedialog.ui
[type: gettext/glade]gtk/gtkscalebutton.ui
+[type: gettext/glade]gtk/gtkstatusbar.ui
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]