[gimp/wip/Jehan/layers-dockable-refresh: 117/126] app: make sure the GimpContainerPopup shows the right item as selected…




commit 53894a6333184c3a054dd7752c387af0d8721a56
Author: Jehan <jehan girinstud io>
Date:   Fri Nov 5 19:55:57 2021 +0100

    app: make sure the GimpContainerPopup shows the right item as selected…
    
    … for the case of data managed by the GimpContext.
    
    Checking stable and dev builds, it looks this just never worked and used
    to just show no selection. Now it is more annoying as it shows a
    selected item, but not the right one. Just make sure it shows whatever
    is currently selected.

 app/widgets/gimpcontainerpopup.c | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)
---
diff --git a/app/widgets/gimpcontainerpopup.c b/app/widgets/gimpcontainerpopup.c
index 22b713a640..76a0ba0355 100644
--- a/app/widgets/gimpcontainerpopup.c
+++ b/app/widgets/gimpcontainerpopup.c
@@ -275,10 +275,12 @@ gimp_container_popup_set_view_size (GimpContainerPopup *popup,
 static void
 gimp_container_popup_create_view (GimpContainerPopup *popup)
 {
-  GimpEditor *editor;
-  GtkWidget  *button;
-  gint        rows;
-  gint        columns;
+  GimpEditor  *editor;
+  GtkWidget   *button;
+  const gchar *signal_name;
+  GType        children_type;
+  gint         rows;
+  gint         columns;
 
   popup->editor = g_object_new (GIMP_TYPE_CONTAINER_EDITOR,
                                 "view-type",         popup->view_type,
@@ -353,6 +355,26 @@ gimp_container_popup_create_view (GimpContainerPopup *popup)
                             popup);
 
   gtk_widget_grab_focus (GTK_WIDGET (popup->editor));
+
+  /* Special-casing the object types managed by the context to make sure
+   * the right items are selected when opening the popup.
+   */
+  children_type = gimp_container_get_children_type (popup->container);
+  signal_name   = gimp_context_type_to_signal_name (children_type);
+
+  if (signal_name)
+    {
+      GimpObject *object;
+      GList      *items = NULL;
+
+      object = gimp_context_get_by_type (popup->context, children_type);
+      if (object)
+        items = g_list_prepend (NULL, object);
+
+      gimp_container_view_select_items (popup->editor->view, items);
+
+      g_list_free (items);
+    }
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]