[gimp] app: allow to pass an identifier list to gimp_dialog_factory_find_widget()



commit 92693f40b6b61ee88f9de996a419baac0abe8ab2
Author: Michael Natterer <mitch gimp org>
Date:   Mon Jan 30 22:51:51 2012 +0100

    app: allow to pass an identifier list to gimp_dialog_factory_find_widget()
    
    Which is right for all external users, GimpDialogFactory itself splits
    the identifier list itself if needed before finding a specific dialog.

 app/widgets/gimpdialogfactory.c |   33 +++++++++++++++++++++++++--------
 app/widgets/gimpdialogfactory.h |    2 +-
 2 files changed, 26 insertions(+), 9 deletions(-)
---
diff --git a/app/widgets/gimpdialogfactory.c b/app/widgets/gimpdialogfactory.c
index 725838e..000cdf7 100644
--- a/app/widgets/gimpdialogfactory.c
+++ b/app/widgets/gimpdialogfactory.c
@@ -350,19 +350,33 @@ gimp_dialog_factory_find_session_info (GimpDialogFactory *factory,
 
 GtkWidget *
 gimp_dialog_factory_find_widget (GimpDialogFactory *factory,
-                                 const gchar       *identifier)
+                                 const gchar       *identifiers)
 {
-  GimpSessionInfo *info;
+  gchar **ids;
+  gint    i;
 
   g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (factory), NULL);
-  g_return_val_if_fail (identifier != NULL, NULL);
+  g_return_val_if_fail (identifiers != NULL, NULL);
 
-  info = gimp_dialog_factory_find_session_info (factory, identifier);
+  ids = g_strsplit (identifiers, "|", 0);
 
-  if (info)
-    return gimp_session_info_get_widget (info);
-  else
-    return NULL;
+  for (i = 0; ids[i]; i++)
+    {
+      GimpSessionInfo *info;
+
+      info = gimp_dialog_factory_find_session_info (factory, ids[i]);
+
+      if (info)
+        {
+          g_strfreev (ids);
+
+          return gimp_session_info_get_widget (info);
+        }
+    }
+
+  g_strfreev (ids);
+
+  return NULL;
 }
 
 /**
@@ -763,6 +777,9 @@ gimp_dialog_factory_dialog_raise (GimpDialogFactory *factory,
 
   /*  If the identifier is a list, try to find a matching dialog and
    *  raise it. If there's no match, use the first list item.
+   *
+   *  (we split the identifier list manually here because we must pass
+   *  a single identifier, not a list, to new_internal() below)
    */
   ids = g_strsplit (identifiers, "|", 0);
   for (i = 0; ids[i]; i++)
diff --git a/app/widgets/gimpdialogfactory.h b/app/widgets/gimpdialogfactory.h
index a99e590..9e05ccf 100644
--- a/app/widgets/gimpdialogfactory.h
+++ b/app/widgets/gimpdialogfactory.h
@@ -136,7 +136,7 @@ GimpDialogFactoryEntry *
 GimpSessionInfo *   gimp_dialog_factory_find_session_info    (GimpDialogFactory       *factory,
                                                               const gchar             *identifier);
 GtkWidget *         gimp_dialog_factory_find_widget          (GimpDialogFactory       *factory,
-                                                              const gchar             *identifier);
+                                                              const gchar             *identifiers);
 GtkWidget *         gimp_dialog_factory_dialog_new           (GimpDialogFactory       *factory,
                                                               GdkScreen               *screen,
                                                               GimpUIManager           *ui_manager,



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