diff options
author | Benjamin Otte <otte@redhat.com> | 2015-07-26 00:06:46 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2015-07-26 17:18:42 +0200 |
commit | 5e2ab6db7fd12c282d6ce722b6597a70eff47e6c (patch) | |
tree | 3dd7f22ea140edab7ecb84832cfeb4e27d2c6d97 | |
parent | 5ad5431cb76d11729e656aa993cb93cea5636366 (diff) | |
download | gtk+-5e2ab6db7fd12c282d6ce722b6597a70eff47e6c.tar.gz |
combobox: Use ui file to construct internal button child
-rw-r--r-- | gtk/Makefile.am | 1 | ||||
-rw-r--r-- | gtk/gtkcombobox.c | 37 | ||||
-rw-r--r-- | gtk/ui/gtkcombobox.ui | 19 |
3 files changed, 45 insertions, 12 deletions
diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 7f8b72b640..4fd509cdac 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -1079,6 +1079,7 @@ templates = \ ui/gtkassistant.ui \ ui/gtkcolorchooserdialog.ui \ ui/gtkcoloreditor.ui \ + ui/gtkcombobox.ui \ ui/gtkdialog.ui \ ui/gtkfilechooserbutton.ui \ ui/gtkfilechooserwidget.ui \ diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c index e3bb2506f6..a079158b2a 100644 --- a/gtk/gtkcombobox.c +++ b/gtk/gtkcombobox.c @@ -415,6 +415,10 @@ static gchar *gtk_combo_box_format_entry_text (GtkComboBox *c static GtkBuildableIface *parent_buildable_iface; static void gtk_combo_box_buildable_init (GtkBuildableIface *iface); +static void gtk_combo_box_buildable_add_child (GtkBuildable *buildable, + GtkBuilder *builder, + GObject *child, + const gchar *type); static gboolean gtk_combo_box_buildable_custom_tag_start (GtkBuildable *buildable, GtkBuilder *builder, GObject *child, @@ -1058,6 +1062,11 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass) GTK_SHADOW_NONE, GTK_PARAM_READABLE)); + gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/ui/gtkcombobox.ui"); + gtk_widget_class_bind_template_child_internal_private (widget_class, GtkComboBox, button); + gtk_widget_class_bind_template_child_internal_private (widget_class, GtkComboBox, arrow); + gtk_widget_class_bind_template_callback (widget_class, gtk_combo_box_button_toggled); + gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_COMBO_BOX_ACCESSIBLE); } @@ -1065,7 +1074,7 @@ static void gtk_combo_box_buildable_init (GtkBuildableIface *iface) { parent_buildable_iface = g_type_interface_peek_parent (iface); - iface->add_child = _gtk_cell_layout_buildable_add_child; + iface->add_child = gtk_combo_box_buildable_add_child; iface->custom_tag_start = gtk_combo_box_buildable_custom_tag_start; iface->custom_tag_end = gtk_combo_box_buildable_custom_tag_end; iface->get_internal_child = gtk_combo_box_buildable_get_internal_child; @@ -1113,19 +1122,9 @@ gtk_combo_box_init (GtkComboBox *combo_box) priv->text_renderer = NULL; priv->id_column = -1; - priv->button = gtk_toggle_button_new (); - gtk_button_set_focus_on_click (GTK_BUTTON (priv->button), - priv->focus_on_click); + gtk_widget_init_template (GTK_WIDGET (combo_box)); - g_signal_connect (priv->button, "toggled", - G_CALLBACK (gtk_combo_box_button_toggled), combo_box); - gtk_widget_set_parent (priv->button, GTK_WIDGET (combo_box)); - - priv->arrow = gtk_image_new_from_icon_name ("pan-down-symbolic", GTK_ICON_SIZE_BUTTON); - gtk_container_add (GTK_CONTAINER (priv->button), priv->arrow); gtk_widget_add_events (priv->button, GDK_SCROLL_MASK); - - gtk_widget_show_all (priv->button); } static void @@ -5216,6 +5215,20 @@ gtk_combo_box_get_focus_on_click (GtkComboBox *combo_box) return combo_box->priv->focus_on_click; } +static void +gtk_combo_box_buildable_add_child (GtkBuildable *buildable, + GtkBuilder *builder, + GObject *child, + const gchar *type) +{ + if (GTK_IS_WIDGET (child)) + { + parent_buildable_iface->add_child (buildable, builder, child, type); + return; + } + + _gtk_cell_layout_buildable_add_child (buildable, builder, child, type); +} static gboolean gtk_combo_box_buildable_custom_tag_start (GtkBuildable *buildable, diff --git a/gtk/ui/gtkcombobox.ui b/gtk/ui/gtkcombobox.ui new file mode 100644 index 0000000000..cd06621b8b --- /dev/null +++ b/gtk/ui/gtkcombobox.ui @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface domain="gtk30"> + <!-- interface-requires gtk+ 3.10 --> + <template class="GtkComboBox" parent="GtkBin"> + <child> + <object class="GtkToggleButton" id="button"> + <property name="visible">True</property> + <property name="focus-on-click">True</property> + <signal name="toggled" handler="gtk_combo_box_button_toggled" swapped="no"/> + <child> + <object class="GtkImage" id="arrow"> + <property name="visible">True</property> + <property name="icon-name">pan-down-symbolic</property> + </object> + </child> + </object> + </child> + </template> +</interface> |