From 7a92d9cc82b7775a0f5cb1fde233119d435a79b6 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 10 Mar 2009 01:06:18 +0000 Subject: Add e_lookup_action() and e_lookup_action_group() to e-util, so I don't have to keep writing the algorithm over and over again. Add EFileActivity, which provides a GCancellable for GIO operations. Cancelling the activity cancels the GIO operation, and vice versa. Also provides a handy GFileProgressCallback function which updates the activity's "percent" property. svn path=/branches/kill-bonobo/; revision=37396 --- e-util/e-util.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ e-util/e-util.h | 4 +++ 2 files changed, 84 insertions(+) (limited to 'e-util') diff --git a/e-util/e-util.c b/e-util/e-util.c index 32f6169bd5..e4e9a3ac32 100644 --- a/e-util/e-util.c +++ b/e-util/e-util.c @@ -212,6 +212,86 @@ e_file_open_tmp (gchar **name_used, return g_file_open_tmp (template, name_used, error); } +/** + * e_lookup_action: + * @ui_manager: a #GtkUIManager + * @action_name: the name of an action + * + * Returns the first #GtkAction named @action_name by traversing the + * list of action groups in @ui_manager. If no such action exists, the + * function emits a critical warning before returning %NULL, since this + * probably indicates a programming error and most code is not prepared + * to deal with lookup failures. + * + * Returns: the first #GtkAction named @action_name + **/ +GtkAction * +e_lookup_action (GtkUIManager *ui_manager, + const gchar *action_name) +{ + GtkAction *action = NULL; + GList *iter; + + g_return_val_if_fail (GTK_IS_UI_MANAGER (ui_manager), NULL); + g_return_val_if_fail (action_name != NULL, NULL); + + iter = gtk_ui_manager_get_action_groups (ui_manager); + + while (iter != NULL) { + GtkActionGroup *action_group = iter->data; + + action = gtk_action_group_get_action ( + action_group, action_name); + if (action != NULL) + return action; + + iter = g_list_next (iter); + } + + g_critical ("%s: action `%s' not found", G_STRFUNC, action_name); + + return NULL; +} + +/** + * e_lookup_action_group: + * @ui_manager: a #GtkUIManager + * @group_name: the name of an action group + * + * Returns the #GtkActionGroup in @ui_manager named @group_name. If no + * such action group exists, the function emits a critical warnings before + * returning %NULL, since this probably indicates a programming error and + * most code is not prepared to deal with lookup failures. + * + * Returns: the #GtkActionGroup named @group_name + **/ +GtkActionGroup * +e_lookup_action_group (GtkUIManager *ui_manager, + const gchar *group_name) +{ + GList *iter; + + g_return_val_if_fail (GTK_IS_UI_MANAGER (ui_manager), NULL); + g_return_val_if_fail (group_name != NULL, NULL); + + iter = gtk_ui_manager_get_action_groups (ui_manager); + + while (iter != NULL) { + GtkActionGroup *action_group = iter->data; + const gchar *name; + + name = gtk_action_group_get_name (action_group); + if (strcmp (name, group_name) == 0) + return action_group; + + iter = g_list_next (iter); + } + + g_critical ("%s: action group `%s' not found", G_STRFUNC, group_name); + + return NULL; +} + /** * e_load_ui_definition: * @ui_manager: a #GtkUIManager diff --git a/e-util/e-util.h b/e-util/e-util.h index 5f431156eb..744b4a7a9d 100644 --- a/e-util/e-util.h +++ b/e-util/e-util.h @@ -48,6 +48,10 @@ void e_display_help (GtkWindow *parent, const gchar *link_id); gint e_file_open_tmp (gchar **name_used, GError **error); +GtkAction * e_lookup_action (GtkUIManager *ui_manager, + const gchar *action_name); +GtkActionGroup *e_lookup_action_group (GtkUIManager *ui_manager, + const gchar *group_name); guint e_load_ui_definition (GtkUIManager *ui_manager, const gchar *basename); gint e_action_compare_by_label (GtkAction *action1, -- cgit v1.2.3