diff options
author | Jason Leach <jasonleach@usa.net> | 2001-01-19 15:36:55 +0800 |
---|---|---|
committer | Jacob Leach <jleach@src.gnome.org> | 2001-01-19 15:36:55 +0800 |
commit | fb06ffa383cd7f2398ff9332438d78a4921b5fc1 (patch) | |
tree | 12c046a50be55304bafb5a7ed577a826e1344ddb /shell/e-shortcuts.c | |
parent | 788351db0a44bbbb19c2bc4b3962e5abfd001c69 (diff) | |
download | gsoc2013-evolution-fb06ffa383cd7f2398ff9332438d78a4921b5fc1.tar.gz gsoc2013-evolution-fb06ffa383cd7f2398ff9332438d78a4921b5fc1.tar.zst gsoc2013-evolution-fb06ffa383cd7f2398ff9332438d78a4921b5fc1.zip |
(Bug #883: Shortcut bar does not update when a folders display name
2001-01-17 Jason Leach <jasonleach@usa.net>
(Bug #883: Shortcut bar does not update when a folders display
name changes)
* e-local-storage.c (class_init): Define a new "folder_updated"
signal here.
(bonobo_interface_update_folder_cb): Emit the new folder_updated
signal here.
* e-shell-view.c (e_shell_view_construct): Connect the
EShell::ELocalStorage folder_updated signal here. Also connect
the updated_folder signal coming from EShell::EStorageSet to the
new callback.
* e-shell-view.c (folder_updated_cb): Callback that actually
initiates the shell updating.
* e-shortcuts.c (e_shortcuts_update_shortcut_by_uri): New
function. Given a uri for a shortcut bar item, we'll update it.
* e-shortcuts.c (e_shortcuts_remove_shortcut_by_uri): New
function. Given a uri for a shortcut bar item, we'll remove it.
* e-shortcuts.c (removed_folder_cb): Connect this callback that
will remove a renamed vfolder from the shortcut bar. Temporary
fix to the problem of renaming vfolders and having the shortcut
bar think the old vfolder still exists.
(Bug #1168: Shortcut bar and icon size persistence)
* e-shell-view.c (save_shortcut_bar_icon_modes): New static
function, save the icon modes (for all shortcut bar groups, even
though we only have one group now).
(load_shortcut_bar_icon_modes): New static function, load the
saved shortcut bar group icon modes and apply them to our
shortcut bar.
svn path=/trunk/; revision=7639
Diffstat (limited to 'shell/e-shortcuts.c')
-rw-r--r-- | shell/e-shortcuts.c | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/shell/e-shortcuts.c b/shell/e-shortcuts.c index 4719f3965c..63d9480f00 100644 --- a/shell/e-shortcuts.c +++ b/shell/e-shortcuts.c @@ -58,6 +58,7 @@ #include "e-shortcuts-view.h" #include "e-shortcuts.h" +#include "e-shell-constants.h" #define PARENT_TYPE GTK_TYPE_OBJECT @@ -312,6 +313,22 @@ make_dirty (EShortcuts *shortcuts) schedule_idle (shortcuts); } +/* Signal handlers for the storage set */ +static void +removed_folder_cb (EStorageSet *storage_set, + const char *path, + void *data) +{ + EShortcuts *shortcuts; + char *tmp; + + shortcuts = E_SHORTCUTS (data); + + tmp = g_strconcat (E_SHELL_URI_PREFIX, path, NULL); + e_shortcuts_remove_shortcut_by_uri (shortcuts, tmp); + g_free (tmp); +} + /* Signal handlers for the views. */ @@ -454,6 +471,9 @@ e_shortcuts_construct (EShortcuts *shortcuts, gtk_object_ref (GTK_OBJECT (storage_set)); priv->storage_set = storage_set; + gtk_signal_connect (GTK_OBJECT (priv->storage_set), "removed_folder", + removed_folder_cb, shortcuts); + gtk_object_ref (GTK_OBJECT (folder_type_registry)); priv->folder_type_registry = folder_type_registry; } @@ -708,6 +728,112 @@ e_shortcuts_add_shortcut (EShortcuts *shortcuts, } void +e_shortcuts_update_shortcut (EShortcuts *shortcuts, + int group_num, + int num, + const char *uri) +{ + g_return_if_fail (shortcuts != NULL); + g_return_if_fail (E_IS_SHORTCUTS (shortcuts)); + + /* FIXME: need support in e-shortcut-bar widget (and also + e-icon-bar) to be able to "update" a shortcut without doing + this lame remove then add */ + + e_shortcuts_remove_shortcut (shortcuts, group_num, num); + e_shortcuts_add_shortcut (shortcuts, group_num, num, uri); +} + + +/* The shortcuts_by_uri functions */ + + +typedef struct { + int group_num; + int num; +} EShortcutPosition; + +static GList * +find_positions_by_uri (EShortcuts *shortcuts, + const char *uri) +{ + EShortcutsPrivate *priv; + GList *p = NULL, *q = NULL; + GList *retval = NULL; + int group_num = 0, num = 0; + + priv = shortcuts->priv; + + for (p = priv->groups; p != NULL; p = p->next) { + ShortcutGroup *group; + + group = (ShortcutGroup *) p->data; + + for (q = group->shortcuts; q != NULL; q = q->next) { + char *listeduri = q->data; + + if (!strcmp (uri, listeduri)) { + EShortcutPosition *position; + + position = g_new (EShortcutPosition, 1); + position->group_num = group_num; + position->num = num; + + retval = g_list_append (retval, position); + } + num++; + } + + group_num++; + num = 0; + } + + return g_list_first (retval); +} + +void +e_shortcuts_remove_shortcut_by_uri (EShortcuts *shortcuts, + const char *uri) +{ + GList *items = NULL; + + items = find_positions_by_uri (shortcuts, uri); + + while (items) { + EShortcutPosition *pos = (EShortcutPosition *) items->data; + + if (pos) { + e_shortcuts_remove_shortcut (shortcuts, pos->group_num, pos->num); + g_free (pos); + } + items = g_list_next (items); + } + g_list_free (items); +} + +void +e_shortcuts_update_shortcut_by_uri (EShortcuts *shortcuts, + const char *uri) +{ + GList *items = NULL; + + items = find_positions_by_uri (shortcuts, uri); + + while (items) { + EShortcutPosition *pos = (EShortcutPosition *) items->data; + + if (pos) { + e_shortcuts_update_shortcut (shortcuts, + pos->group_num, pos->num, + uri); + g_free (pos); + } + items = g_list_next (items); + } + g_list_free (items); +} + +void e_shortcuts_remove_group (EShortcuts *shortcuts, int group_num) { |