From a718dec073135b0dac15e0f36e9a7ac6b9b9ddfa Mon Sep 17 00:00:00 2001 From: Ettore Perazzoli Date: Thu, 1 Jun 2000 00:56:00 +0000 Subject: Implemented right-click menus for the shell's shortcut bar (the user can remove shortcuts now) and added status bar to the shell view. Also, added an API call to EShortcutBar to get the view type for a specified group. svn path=/trunk/; revision=3318 --- shell/e-shortcuts.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 71 insertions(+), 5 deletions(-) (limited to 'shell/e-shortcuts.c') diff --git a/shell/e-shortcuts.c b/shell/e-shortcuts.c index 414e5d2da9..4d3b51cc13 100644 --- a/shell/e-shortcuts.c +++ b/shell/e-shortcuts.c @@ -100,36 +100,52 @@ struct _EShortcutsPrivate { GHashTable *title_to_group; }; +enum { + NEW_GROUP, + REMOVE_GROUP, + NEW_SHORTCUT, + REMOVE_SHORTCUT, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL] = { 0 }; + static void unload_shortcuts (EShortcuts *shortcuts) { EShortcutsPrivate *priv; + GList *orig_groups; GList *p, *q; priv = shortcuts->priv; + orig_groups = priv->groups; for (p = priv->groups; p != NULL; p = p->next) { ShortcutGroup *group; + gtk_signal_emit (GTK_OBJECT (shortcuts), signals[REMOVE_GROUP], 0); + group = (ShortcutGroup *) p->data; - g_free (group->title); + + g_hash_table_remove (priv->title_to_group, group->title); for (q = group->shortcuts; q != NULL; q = q->next) g_free (q->data); + g_free (group->title); g_list_free (group->shortcuts); + + priv->groups = priv->groups->next; } - if (priv->groups != NULL) - g_list_free (priv->groups); + if (orig_groups != NULL) + g_list_free (orig_groups); priv->groups = NULL; g_hash_table_destroy (priv->title_to_group); priv->title_to_group = g_hash_table_new (g_str_hash, g_str_equal); - - /* FIXME update the views. */ } static gboolean @@ -141,6 +157,8 @@ load_shortcuts (EShortcuts *shortcuts, xmlNode *root; xmlNode *p, *q; + /* FIXME: Update the views by emitting the appropriate signals. */ + priv = shortcuts->priv; doc = xmlParseFile (file_name); @@ -355,6 +373,46 @@ class_init (EShortcutsClass *klass) object_class->destroy = destroy; parent_class = gtk_type_class (gtk_object_get_type ()); + + signals[NEW_GROUP] + = gtk_signal_new ("new_group", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (EShortcutsClass, new_group), + gtk_marshal_NONE__INT, + GTK_TYPE_NONE, 1, + GTK_TYPE_INT); + + signals[REMOVE_GROUP] + = gtk_signal_new ("remove_group", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (EShortcutsClass, remove_group), + gtk_marshal_NONE__INT, + GTK_TYPE_NONE, 1, + GTK_TYPE_INT); + + signals[NEW_SHORTCUT] + = gtk_signal_new ("new_shortcut", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (EShortcutsClass, new_shortcut), + gtk_marshal_NONE__INT_INT, + GTK_TYPE_NONE, 2, + GTK_TYPE_INT, + GTK_TYPE_INT); + + signals[REMOVE_SHORTCUT] + = gtk_signal_new ("remove_shortcut", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (EShortcutsClass, remove_shortcut), + gtk_marshal_NONE__INT_INT, + GTK_TYPE_NONE, 2, + GTK_TYPE_INT, + GTK_TYPE_INT); + + gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); } @@ -609,6 +667,8 @@ e_shortcuts_remove_shortcut (EShortcuts *shortcuts, p = g_list_nth (group->shortcuts, num); g_return_if_fail (p != NULL); + gtk_signal_emit (GTK_OBJECT (shortcuts), signals[REMOVE_SHORTCUT], group_num, num); + uri = (char *) p->data; g_free (uri); @@ -639,6 +699,8 @@ e_shortcuts_add_shortcut (EShortcuts *shortcuts, group->shortcuts = g_list_insert (group->shortcuts, g_strdup (uri), num); + gtk_signal_emit (GTK_OBJECT (shortcuts), signals[NEW_SHORTCUT], group_num, num); + make_dirty (shortcuts); } @@ -658,6 +720,8 @@ e_shortcuts_remove_group (EShortcuts *shortcuts, p = g_list_nth (priv->groups, group_num); g_return_if_fail (p != NULL); + gtk_signal_emit (GTK_OBJECT (shortcuts), signals[REMOVE_GROUP], group_num); + group = (ShortcutGroup *) p->data; e_free_string_list (group->shortcuts); @@ -686,6 +750,8 @@ e_shortcuts_add_group (EShortcuts *shortcuts, priv->groups = g_list_insert (priv->groups, group, group_num); + gtk_signal_emit (GTK_OBJECT (shortcuts), signals[NEW_GROUP], group_num); + make_dirty (shortcuts); } -- cgit v1.2.3