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.
This commit is contained in:
Michael Natterer 2012-01-30 22:51:51 +01:00
parent dcc9eabbd5
commit 92693f40b6
2 changed files with 26 additions and 9 deletions

View File

@ -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++)

View File

@ -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,