diff options
author | Matthias Clasen <maclas@gmx.de> | 2004-02-24 23:12:57 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2004-02-24 23:12:57 +0000 |
commit | 4e678022e5922b2b292979e69db3c8190d75bd87 (patch) | |
tree | 804cbabbbe0d707247395045c64b49cc30fa7fb5 | |
parent | f65e2a2a1ee9f14f98da4ca1cb002bc7c956617a (diff) | |
download | gtk+-4e678022e5922b2b292979e69db3c8190d75bd87.tar.gz |
Don't resize priv->cell_view if it is NULL. (#127804, Damon Chaplin)
Wed Feb 25 00:13:24 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtkcombobox.c (gtk_combo_box_menu_row_changed):
* gtk/gtkcombobox.c (gtk_combo_box_list_row_changed):
Don't resize priv->cell_view if it is NULL. (#127804,
Damon Chaplin)
Wed Feb 25 00:06:50 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtkcombobox.c: Add a comment about the different
modi of this widget. Get rid of priv->hbox, and some other
cleanups. Make sure that gtk_combo_box_unset_model() is
always called before setting up a different mode.
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 14 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 14 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 14 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 14 | ||||
-rw-r--r-- | gtk/gtkcombobox.c | 156 |
6 files changed, 176 insertions, 50 deletions
@@ -1,3 +1,17 @@ +Wed Feb 25 00:13:24 2004 Matthias Clasen <maclas@gmx.de> + + * gtk/gtkcombobox.c (gtk_combo_box_menu_row_changed): + * gtk/gtkcombobox.c (gtk_combo_box_list_row_changed): + Don't resize priv->cell_view if it is NULL. (#127804, + Damon Chaplin) + +Wed Feb 25 00:06:50 2004 Matthias Clasen <maclas@gmx.de> + + * gtk/gtkcombobox.c: Add a comment about the different + modi of this widget. Get rid of priv->hbox, and some other + cleanups. Make sure that gtk_combo_box_unset_model() is + always called before setting up a different mode. + Tue Feb 24 17:51:49 2004 Owen Taylor <otaylor@redhat.com> * gtk/gtkaccellabel.c (gtk_accel_label_refetch): Convert diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 42b6d09667..7561ce148b 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,17 @@ +Wed Feb 25 00:13:24 2004 Matthias Clasen <maclas@gmx.de> + + * gtk/gtkcombobox.c (gtk_combo_box_menu_row_changed): + * gtk/gtkcombobox.c (gtk_combo_box_list_row_changed): + Don't resize priv->cell_view if it is NULL. (#127804, + Damon Chaplin) + +Wed Feb 25 00:06:50 2004 Matthias Clasen <maclas@gmx.de> + + * gtk/gtkcombobox.c: Add a comment about the different + modi of this widget. Get rid of priv->hbox, and some other + cleanups. Make sure that gtk_combo_box_unset_model() is + always called before setting up a different mode. + Tue Feb 24 17:51:49 2004 Owen Taylor <otaylor@redhat.com> * gtk/gtkaccellabel.c (gtk_accel_label_refetch): Convert diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 42b6d09667..7561ce148b 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,17 @@ +Wed Feb 25 00:13:24 2004 Matthias Clasen <maclas@gmx.de> + + * gtk/gtkcombobox.c (gtk_combo_box_menu_row_changed): + * gtk/gtkcombobox.c (gtk_combo_box_list_row_changed): + Don't resize priv->cell_view if it is NULL. (#127804, + Damon Chaplin) + +Wed Feb 25 00:06:50 2004 Matthias Clasen <maclas@gmx.de> + + * gtk/gtkcombobox.c: Add a comment about the different + modi of this widget. Get rid of priv->hbox, and some other + cleanups. Make sure that gtk_combo_box_unset_model() is + always called before setting up a different mode. + Tue Feb 24 17:51:49 2004 Owen Taylor <otaylor@redhat.com> * gtk/gtkaccellabel.c (gtk_accel_label_refetch): Convert diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 42b6d09667..7561ce148b 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,17 @@ +Wed Feb 25 00:13:24 2004 Matthias Clasen <maclas@gmx.de> + + * gtk/gtkcombobox.c (gtk_combo_box_menu_row_changed): + * gtk/gtkcombobox.c (gtk_combo_box_list_row_changed): + Don't resize priv->cell_view if it is NULL. (#127804, + Damon Chaplin) + +Wed Feb 25 00:06:50 2004 Matthias Clasen <maclas@gmx.de> + + * gtk/gtkcombobox.c: Add a comment about the different + modi of this widget. Get rid of priv->hbox, and some other + cleanups. Make sure that gtk_combo_box_unset_model() is + always called before setting up a different mode. + Tue Feb 24 17:51:49 2004 Owen Taylor <otaylor@redhat.com> * gtk/gtkaccellabel.c (gtk_accel_label_refetch): Convert diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 42b6d09667..7561ce148b 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,17 @@ +Wed Feb 25 00:13:24 2004 Matthias Clasen <maclas@gmx.de> + + * gtk/gtkcombobox.c (gtk_combo_box_menu_row_changed): + * gtk/gtkcombobox.c (gtk_combo_box_list_row_changed): + Don't resize priv->cell_view if it is NULL. (#127804, + Damon Chaplin) + +Wed Feb 25 00:06:50 2004 Matthias Clasen <maclas@gmx.de> + + * gtk/gtkcombobox.c: Add a comment about the different + modi of this widget. Get rid of priv->hbox, and some other + cleanups. Make sure that gtk_combo_box_unset_model() is + always called before setting up a different mode. + Tue Feb 24 17:51:49 2004 Owen Taylor <otaylor@redhat.com> * gtk/gtkaccellabel.c (gtk_accel_label_refetch): Convert diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c index 2a9dcec232..357e5f6954 100644 --- a/gtk/gtkcombobox.c +++ b/gtk/gtkcombobox.c @@ -48,7 +48,6 @@ /* WELCOME, to THE house of evil code */ - typedef struct _ComboCellInfo ComboCellInfo; struct _ComboCellInfo { @@ -80,8 +79,6 @@ struct _GtkComboBoxPrivate GtkTreeViewColumn *column; GtkWidget *cell_view; - - GtkWidget *hbox; GtkWidget *cell_view_frame; GtkWidget *button; @@ -103,6 +100,60 @@ struct _GtkComboBoxPrivate guint popup_in_progress : 1; }; +/* While debugging this evil code, I have learned that + * there are actually 4 modes to this widget, which can + * be characterized as follows + * + * 1) menu mode, no child added + * + * tree_view -> NULL + * cell_view -> GtkCellView, regular child + * cell_view_frame -> NULL + * button -> GtkToggleButton set_parent to combo + * arrow -> GtkArrow set_parent to button + * separator -> GtkVSepator set_parent to button + * popup_widget -> GtkMenu + * popup_window -> NULL + * popup_frame -> NULL + * + * 2) menu mode, child added + * + * tree_view -> NULL + * cell_view -> NULL + * cell_view_frame -> NULL + * button -> GtkToggleButton set_parent to combo + * arrow -> GtkArrow, child of button + * separator -> NULL + * popup_widget -> GtkMenu + * popup_window -> NULL + * popup_frame -> NULL + * + * 3) list mode, no child added + * + * tree_view -> GtkTreeView, child of popup_frame + * cell_view -> GtkCellView, regular child + * cell_view_frame -> GtkFrame, set parent to combo + * button -> GtkToggleButton, set_parent to combo + * arrow -> GtkArrow, child of button + * separator -> NULL + * popup_widget -> tree_view + * popup_window -> GtkWindow + * popup_frame -> GtkFrame, child of popup_window + * + * 4) list mode, child added + * + * tree_view -> GtkTreeView, child of popup_frame + * cell_view -> NULL + * cell_view_frame -> NULL + * button -> GtkToggleButton, set_parent to combo + * arrow -> GtkArrow, child of button + * separator -> NULL + * popup_widget -> tree_view + * popup_window -> GtkWindow + * popup_frame -> GtkFrame, child of popup_window + * + */ + enum { CHANGED, LAST_SIGNAL @@ -529,12 +580,18 @@ gtk_combo_box_style_set (GtkWidget *widget, { if (GTK_IS_MENU (combo_box->priv->popup_widget)) gtk_combo_box_menu_destroy (combo_box); + else + gtk_combo_box_unset_model (combo_box); + gtk_combo_box_list_setup (combo_box); } else { if (GTK_IS_TREE_VIEW (combo_box->priv->tree_view)) gtk_combo_box_list_destroy (combo_box); + else + gtk_combo_box_unset_model (combo_box); + gtk_combo_box_menu_setup (combo_box, TRUE); } } @@ -561,14 +618,9 @@ gtk_combo_box_add (GtkContainer *container, GtkComboBox *combo_box = GTK_COMBO_BOX (container); if (combo_box->priv->cell_view && combo_box->priv->cell_view->parent) - { - gtk_container_remove (container, combo_box->priv->cell_view); - (* GTK_CONTAINER_CLASS (parent_class)->add) (container, widget); - } - else - { - (* GTK_CONTAINER_CLASS (parent_class)->add) (container, widget); - } + gtk_container_remove (container, combo_box->priv->cell_view); + + (* GTK_CONTAINER_CLASS (parent_class)->add) (container, widget); if (combo_box->priv->cell_view && widget != combo_box->priv->cell_view) @@ -579,6 +631,7 @@ gtk_combo_box_add (GtkContainer *container, if (!combo_box->priv->tree_view && combo_box->priv->separator) { gtk_widget_unparent (combo_box->priv->separator); + combo_box->priv->separator = NULL; g_object_ref (G_OBJECT (combo_box->priv->arrow)); gtk_widget_unparent (combo_box->priv->arrow); @@ -1142,31 +1195,32 @@ gtk_combo_box_size_allocate (GtkWidget *widget, static void gtk_combo_box_unset_model (GtkComboBox *combo_box) { - if (!combo_box->priv->tree_view) + if (combo_box->priv->inserted_id != -1) { - /* menu mode */ g_signal_handler_disconnect (combo_box->priv->model, - combo_box->priv->inserted_id); + combo_box->priv->inserted_id); + combo_box->priv->inserted_id = -1; + } + if (combo_box->priv->deleted_id != -1) + { g_signal_handler_disconnect (combo_box->priv->model, - combo_box->priv->deleted_id); + combo_box->priv->deleted_id); + combo_box->priv->deleted_id = -1; + } + if (combo_box->priv->changed_id != -1) + { g_signal_handler_disconnect (combo_box->priv->model, - combo_box->priv->changed_id); - - combo_box->priv->inserted_id = - combo_box->priv->deleted_id = + combo_box->priv->changed_id); combo_box->priv->changed_id = -1; + } + /* menu mode */ + if (!combo_box->priv->tree_view) + { if (combo_box->priv->popup_widget) gtk_container_foreach (GTK_CONTAINER (combo_box->priv->popup_widget), (GtkCallback)gtk_widget_destroy, NULL); } - else - { - /* list mode */ - g_signal_handler_disconnect (combo_box->priv->model, - combo_box->priv->changed_id); - combo_box->priv->changed_id = -1; - } } static void @@ -1211,26 +1265,14 @@ gtk_combo_box_forall (GtkContainer *container, if (include_internals) { - if (!combo_box->priv->tree_view) - { - if (combo_box->priv->cell_view && combo_box->priv->button) - { - (* callback) (combo_box->priv->button, callback_data); - (* callback) (combo_box->priv->separator, callback_data); - (* callback) (combo_box->priv->arrow, callback_data); - } - else if (combo_box->priv->arrow) - { - (* callback) (combo_box->priv->button, callback_data); - (* callback) (combo_box->priv->arrow, callback_data); - } - } - else - { - (* callback) (combo_box->priv->button, callback_data); - if (combo_box->priv->cell_view_frame) - (* callback) (combo_box->priv->cell_view_frame, callback_data); - } + if (combo_box->priv->button) + (* callback) (combo_box->priv->button, callback_data); + if (combo_box->priv->separator) + (* callback) (combo_box->priv->separator, callback_data); + if (combo_box->priv->arrow) + (* callback) (combo_box->priv->arrow, callback_data); + if (combo_box->priv->cell_view_frame) + (* callback) (combo_box->priv->cell_view_frame, callback_data); } if (GTK_BIN (container)->child) @@ -1389,9 +1431,13 @@ gtk_combo_box_menu_setup (GtkComboBox *combo_box, box = gtk_menu_new (); gtk_combo_box_set_popup_widget (combo_box, box); + /* set the models */ + gtk_combo_box_set_model_internal (combo_box); + /* add items */ if (add_childs) gtk_combo_box_menu_fill (combo_box); + } static void @@ -1583,6 +1629,8 @@ gtk_combo_box_relayout (GtkComboBox *combo_box) /* ensure we are in menu style */ if (combo_box->priv->tree_view) gtk_combo_box_list_destroy (combo_box); + else + gtk_combo_box_unset_model (combo_box); menu = combo_box->priv->popup_widget; @@ -1748,8 +1796,11 @@ gtk_combo_box_menu_row_changed (GtkTreeModel *model, if (width > combo_box->priv->width) { - gtk_widget_set_size_request (combo_box->priv->cell_view, width, -1); - gtk_widget_queue_resize (combo_box->priv->cell_view); + if (combo_box->priv->cell_view) + { + gtk_widget_set_size_request (combo_box->priv->cell_view, width, -1); + gtk_widget_queue_resize (combo_box->priv->cell_view); + } combo_box->priv->width = width; } } @@ -2061,8 +2112,11 @@ gtk_combo_box_list_row_changed (GtkTreeModel *model, if (width > combo_box->priv->width) { - gtk_widget_set_size_request (combo_box->priv->cell_view, width, -1); - gtk_widget_queue_resize (combo_box->priv->cell_view); + if (combo_box->priv->cell_view) + { + gtk_widget_set_size_request (combo_box->priv->cell_view, width, -1); + gtk_widget_queue_resize (combo_box->priv->cell_view); + } combo_box->priv->width = width; } } @@ -2952,6 +3006,8 @@ gtk_combo_box_finalize (GObject *object) { GtkComboBox *combo_box = GTK_COMBO_BOX (object); + gtk_combo_box_unset_model (combo_box); + if (GTK_IS_MENU (combo_box->priv->popup_widget)) gtk_combo_box_menu_destroy (combo_box); |