[gimp] app: action search should search accross all available actions.
- From: Jehan Pagès <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: action search should search accross all available actions.
- Date: Wed, 23 Nov 2016 03:34:19 +0000 (UTC)
commit 53b3673bd8ce96c67ce05de69fe43bc0b87d15a8
Author: Jehan <jehan girinstud io>
Date: Wed Nov 23 04:01:30 2016 +0100
app: action search should search accross all available actions.
It was only searching through the "<Image>" GimpUIManager, so several
action groups were ignored, for instance all palettes-* actions.
app/dialogs/action-search-dialog.c | 124 ++++++++++++++++++++---------------
app/widgets/gimpaction-history.c | 40 +++++++++---
2 files changed, 102 insertions(+), 62 deletions(-)
---
diff --git a/app/dialogs/action-search-dialog.c b/app/dialogs/action-search-dialog.c
index 8ee4918..3b62787 100644
--- a/app/dialogs/action-search-dialog.c
+++ b/app/dialogs/action-search-dialog.c
@@ -35,9 +35,13 @@
#include "core/gimp.h"
+#include "menus/menus.h"
+
#include "widgets/gimpaction.h"
+#include "widgets/gimpactiongroup.h"
#include "widgets/gimpaction-history.h"
#include "widgets/gimpdialogfactory.h"
+#include "widgets/gimpmenufactory.h"
#include "widgets/gimpsearchpopup.h"
#include "widgets/gimpuimanager.h"
@@ -77,19 +81,18 @@ action_search_history_and_actions (GimpSearchPopup *popup,
const gchar *keyword,
gpointer data)
{
- GimpUIManager *manager;
+ GList *menus;
GList *list;
GList *history_actions = NULL;
Gimp *gimp;
g_return_if_fail (GIMP_IS_GIMP (data));
- gimp = GIMP (data);
- manager = gimp_ui_managers_from_name ("<Image>")->data;
-
if (g_strcmp0 (keyword, "") == 0)
return;
+ gimp = GIMP (data);
+
history_actions = gimp_action_history_search (gimp,
action_search_match_keyword,
keyword);
@@ -101,68 +104,83 @@ action_search_history_and_actions (GimpSearchPopup *popup,
}
/* Now check other actions. */
- for (list = gtk_ui_manager_get_action_groups (GTK_UI_MANAGER (manager));
- list;
- list = g_list_next (list))
+ for (menus = gimp_menu_factory_get_registered_menus (global_menu_factory);
+ menus;
+ menus = g_list_next (menus))
{
- GList *list2;
- GimpActionGroup *group = list->data;
- GList *actions = NULL;
+ GimpMenuFactoryEntry *entry = menus->data;
+ GList *managers;
- actions = gtk_action_group_list_actions (GTK_ACTION_GROUP (group));
- actions = g_list_sort (actions, (GCompareFunc) gimp_action_name_compare);
+ managers = gimp_ui_managers_from_name (entry->identifier);
- for (list2 = actions; list2; list2 = g_list_next (list2))
+ for (; managers; managers = g_list_next (managers))
{
- const gchar *name;
- GtkAction *action = list2->data;
- gboolean is_redundant = FALSE;
- gint section;
-
- name = gtk_action_get_name (action);
-
- /* The action search dialog don't show any non-historized
- * action, with the exception of "plug-in-repeat/reshow"
- * actions.
- * Logging them is meaningless (they may mean a different
- * actual action each time), but they are still interesting
- * as a search result.
- */
- if (gimp_action_history_excluded_action (name) &&
- g_strcmp0 (name, "filters-repeat") != 0 &&
- g_strcmp0 (name, "filters-reshow") != 0)
- continue;
-
- if (! gtk_action_is_sensitive (action) &&
- ! GIMP_GUI_CONFIG (gimp->config)->search_show_unavailable)
- continue;
-
- if (action_search_match_keyword (action, keyword, §ion, gimp))
+ GimpUIManager *manager = managers->data;
+
+ for (list = gtk_ui_manager_get_action_groups (GTK_UI_MANAGER (manager));
+ list;
+ list = g_list_next (list))
{
- GList *list3;
+ GList *list2;
+ GimpActionGroup *group = list->data;
+ GList *actions = NULL;
- /* A matching action. Check if we have not already added
- * it as an history action.
- */
- for (list3 = history_actions; list3; list3 = g_list_next (list3))
+ actions = gtk_action_group_list_actions (GTK_ACTION_GROUP (group));
+ actions = g_list_sort (actions, (GCompareFunc) gimp_action_name_compare);
+
+ for (list2 = actions; list2; list2 = g_list_next (list2))
{
- if (strcmp (gtk_action_get_name (GTK_ACTION (list3->data)),
- name) == 0)
+ const gchar *name;
+ GtkAction *action = list2->data;
+ gboolean is_redundant = FALSE;
+ gint section;
+
+ name = gtk_action_get_name (action);
+
+ /* The action search dialog don't show any non-historized
+ * action, with the exception of "plug-in-repeat/reshow"
+ * actions.
+ * Logging them is meaningless (they may mean a different
+ * actual action each time), but they are still interesting
+ * as a search result.
+ */
+ if (gimp_action_history_excluded_action (name) &&
+ g_strcmp0 (name, "filters-repeat") != 0 &&
+ g_strcmp0 (name, "filters-reshow") != 0)
+ continue;
+
+ if (! gtk_action_is_sensitive (action) &&
+ ! GIMP_GUI_CONFIG (gimp->config)->search_show_unavailable)
+ continue;
+
+ if (action_search_match_keyword (action, keyword, §ion, gimp))
{
- is_redundant = TRUE;
- break;
+ GList *list3;
+
+ /* A matching action. Check if we have not already added
+ * it as an history action.
+ */
+ for (list3 = history_actions; list3; list3 = g_list_next (list3))
+ {
+ if (strcmp (gtk_action_get_name (GTK_ACTION (list3->data)),
+ name) == 0)
+ {
+ is_redundant = TRUE;
+ break;
+ }
+ }
+
+ if (! is_redundant)
+ {
+ gimp_search_popup_add_result (popup, action, section);
+ }
}
}
- if (! is_redundant)
- {
- gimp_search_popup_add_result (popup, action, section);
- }
+ g_list_free (actions);
}
}
-
- g_list_free (actions);
- }
+ }
g_list_free_full (history_actions, (GDestroyNotify) g_object_unref);
}
diff --git a/app/widgets/gimpaction-history.c b/app/widgets/gimpaction-history.c
index 745609e..2487635 100644
--- a/app/widgets/gimpaction-history.c
+++ b/app/widgets/gimpaction-history.c
@@ -33,9 +33,12 @@
#include "core/gimp.h"
-#include "gimpuimanager.h"
+#include "menus/menus.h"
+
#include "gimpaction.h"
#include "gimpaction-history.h"
+#include "gimpmenufactory.h"
+#include "gimpuimanager.h"
#define GIMP_ACTION_HISTORY_FILENAME "action-history"
@@ -251,7 +254,6 @@ gimp_action_history_search (Gimp *gimp,
const gchar *keyword)
{
GimpGuiConfig *config;
- GimpUIManager *manager;
GList *actions;
GList *result = NULL;
gint i;
@@ -260,21 +262,41 @@ gimp_action_history_search (Gimp *gimp,
g_return_val_if_fail (match_func != NULL, NULL);
config = GIMP_GUI_CONFIG (gimp->config);
- manager = gimp_ui_managers_from_name ("<Image>")->data;
for (actions = history.items, i = 0;
actions && i < config->action_history_size;
actions = g_list_next (actions), i++)
{
GimpActionHistoryItem *item = actions->data;
- GtkAction *action;
+ GtkAction *action = NULL;
+ GList *menus;
- action = gimp_ui_manager_find_action (manager, NULL, item->action_name);
- if (action == NULL)
- continue;
+ for (menus = gimp_menu_factory_get_registered_menus (global_menu_factory);
+ menus;
+ menus = g_list_next (menus))
+ {
+ GimpMenuFactoryEntry *entry = menus->data;
+ GList *managers;
+
+ managers = gimp_ui_managers_from_name (entry->identifier);
+
+ for (; managers; managers = g_list_next (managers))
+ {
+ GimpUIManager *manager = managers->data;
+
+ action = gimp_ui_manager_find_action (manager, NULL,
+ item->action_name);
+
+ if (action)
+ break;
+ }
+ if (action)
+ break;
+ }
- if (! gtk_action_is_sensitive (action) &&
- ! config->search_show_unavailable)
+ if (action == NULL ||
+ (! gtk_action_is_sensitive (action) &&
+ ! config->search_show_unavailable))
continue;
if (match_func (action, keyword, NULL, gimp))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]