diff --git a/app/widgets/gimpcontainercombobox.c b/app/widgets/gimpcontainercombobox.c index d559890b12..16b1ab9fe3 100644 --- a/app/widgets/gimpcontainercombobox.c +++ b/app/widgets/gimpcontainercombobox.c @@ -77,6 +77,9 @@ static void gimp_container_combo_box_rename_item (GimpContainerView *v static gboolean gimp_container_combo_box_select_item (GimpContainerView *view, GimpViewable *viewable, gpointer insert_data); +static gboolean gimp_container_combo_box_select_items(GimpContainerView *view, + GList *viewables, + GList *paths); static void gimp_container_combo_box_clear_items (GimpContainerView *view); static void gimp_container_combo_box_set_view_size (GimpContainerView *view); @@ -127,6 +130,7 @@ gimp_container_combo_box_view_iface_init (GimpContainerViewInterface *iface) iface->reorder_item = gimp_container_combo_box_reorder_item; iface->rename_item = gimp_container_combo_box_rename_item; iface->select_item = gimp_container_combo_box_select_item; + iface->select_items = gimp_container_combo_box_select_items; iface->clear_items = gimp_container_combo_box_clear_items; iface->set_view_size = gimp_container_combo_box_set_view_size; @@ -380,6 +384,40 @@ gimp_container_combo_box_select_item (GimpContainerView *view, return TRUE; } +static gboolean +gimp_container_combo_box_select_items (GimpContainerView *view, + GList *viewables, + GList *paths) +{ + GtkComboBox *combo_box = GTK_COMBO_BOX (view); + + g_return_val_if_fail (GIMP_IS_CONTAINER_VIEW (view), FALSE); + /* Only zero or one items may selected in a GimpContainerComboBox. */ + g_return_val_if_fail (g_list_length (viewables) < 2, FALSE); + + if (gtk_combo_box_get_model (GTK_COMBO_BOX (view))) + { + g_signal_handlers_block_by_func (combo_box, + gimp_container_combo_box_changed, + view); + + if (viewables) + { + gimp_container_view_item_selected (view, viewables->data); + } + else + { + gtk_combo_box_set_active (combo_box, -1); + } + + g_signal_handlers_unblock_by_func (combo_box, + gimp_container_combo_box_changed, + view); + } + + return TRUE; +} + static void gimp_container_combo_box_clear_items (GimpContainerView *view) { diff --git a/app/widgets/gimpcontainerview.c b/app/widgets/gimpcontainerview.c index eac2c20020..e6a8441f06 100644 --- a/app/widgets/gimpcontainerview.c +++ b/app/widgets/gimpcontainerview.c @@ -1383,8 +1383,15 @@ gimp_container_view_context_changed (GimpContext *context, GimpViewable *viewable, GimpContainerView *view) { - if (! gimp_container_view_select_item (view, viewable)) + GList *viewables = NULL; + + if (viewable) + viewables = g_list_prepend (viewables, viewable); + + if (! gimp_container_view_select_items (view, viewables)) g_warning ("%s: select_item() failed (should not happen)", G_STRFUNC); + + g_list_free (viewables); } static void