diff options
author | Benjamin Otte <otte@redhat.com> | 2015-07-25 23:19:40 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2015-07-26 17:18:42 +0200 |
commit | 5ad5431cb76d11729e656aa993cb93cea5636366 (patch) | |
tree | a7ab2a571e74f8d8c2d38a171197d9a0b2c750c1 | |
parent | e0572212bc49a5e7d7e92544fd72b38f97c41a20 (diff) | |
download | gtk+-5ad5431cb76d11729e656aa993cb93cea5636366.tar.gz |
combobox: Create button on init() and destroy in destroy()
The button is the same in both menu and list mode, so there's no need to
destroy and recreate it.
-rw-r--r-- | gtk/gtkcombobox.c | 63 |
1 files changed, 25 insertions, 38 deletions
diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c index d498a87db7..e3bb2506f6 100644 --- a/gtk/gtkcombobox.c +++ b/gtk/gtkcombobox.c @@ -1112,6 +1112,20 @@ gtk_combo_box_init (GtkComboBox *combo_box) priv->text_column = -1; 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); + + 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 @@ -3002,20 +3016,6 @@ gtk_combo_box_menu_setup (GtkComboBox *combo_box) GtkComboBoxPrivate *priv = combo_box->priv; GtkWidget *menu; - priv->button = gtk_toggle_button_new (); - gtk_button_set_focus_on_click (GTK_BUTTON (priv->button), - priv->focus_on_click); - - 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); - g_signal_connect (priv->button, "button-press-event", G_CALLBACK (gtk_combo_box_menu_button_press), combo_box); @@ -3068,13 +3068,6 @@ gtk_combo_box_menu_destroy (GtkComboBox *combo_box) 0, 0, NULL, gtk_combo_box_menu_activate, combo_box); - /* unparent will remove our latest ref */ - gtk_widget_unparent (priv->button); - - priv->box = NULL; - priv->button = NULL; - priv->arrow = NULL; - /* changing the popup window will unref the menu and the children */ } @@ -3276,18 +3269,8 @@ gtk_combo_box_list_setup (GtkComboBox *combo_box) GtkComboBoxPrivate *priv = combo_box->priv; GtkTreeSelection *sel; - priv->button = gtk_toggle_button_new (); - gtk_widget_set_parent (priv->button, GTK_WIDGET (combo_box)); g_signal_connect (priv->button, "button-press-event", G_CALLBACK (gtk_combo_box_list_button_pressed), combo_box); - g_signal_connect (priv->button, "toggled", - G_CALLBACK (gtk_combo_box_button_toggled), 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); if (priv->cell_view) { @@ -3406,13 +3389,6 @@ gtk_combo_box_list_destroy (GtkComboBox *combo_box) gtk_combo_box_list_button_pressed, NULL); - /* destroy things (unparent will kill the latest ref from us) - * last unref on button will destroy the arrow - */ - gtk_widget_unparent (priv->button); - priv->button = NULL; - priv->arrow = NULL; - if (priv->cell_view) { g_object_set (priv->cell_view, @@ -4469,6 +4445,7 @@ static void gtk_combo_box_destroy (GtkWidget *widget) { GtkComboBox *combo_box = GTK_COMBO_BOX (widget); + GtkComboBoxPrivate *priv = combo_box->priv; if (combo_box->priv->popup_idle_id > 0) { @@ -4476,6 +4453,16 @@ gtk_combo_box_destroy (GtkWidget *widget) combo_box->priv->popup_idle_id = 0; } + if (priv->button) + { + /* destroy things (unparent will kill the latest ref from us) + * last unref on button will destroy the arrow + */ + gtk_widget_unparent (priv->button); + priv->button = NULL; + priv->arrow = NULL; + } + gtk_combo_box_popdown (combo_box); if (combo_box->priv->row_separator_destroy) |