diff options
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ChangeLog | 11 | ||||
-rw-r--r-- | shell/e-history.c | 24 | ||||
-rw-r--r-- | shell/e-history.h | 4 | ||||
-rw-r--r-- | shell/e-shell-view.c | 59 |
4 files changed, 85 insertions, 13 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog index dbeb008ce4..88a3fb8f9e 100644 --- a/shell/ChangeLog +++ b/shell/ChangeLog @@ -1,5 +1,16 @@ 2002-02-22 Ettore Perazzoli <ettore@ximian.com> + * e-shell-view.c (remove_uri_from_history): New helper function to + remove all the matching URIs from the history. + (history_uri_matching_func): Compare function for using + e_history_remove_matching. + (storage_set_removed_folder_callback): Call + `remove_uri_from_history()'. + + * e-history.c (e_history_remove_matching): New. + +2002-02-22 Ettore Perazzoli <ettore@ximian.com> + * e-shell-view.c (update_navigation_buttons): New. (display_uri): Call it before returning so the navigation buttons always have the right sensitivity. diff --git a/shell/e-history.c b/shell/e-history.c index 99579871e1..16df6cfc10 100644 --- a/shell/e-history.c +++ b/shell/e-history.c @@ -234,5 +234,29 @@ e_history_add (EHistory *history, priv->current_item = priv->current_item->next; } +void +e_history_remove_matching (EHistory *history, + const void *data, + GCompareFunc compare_func) +{ + EHistoryPrivate *priv; + GList *p; + + g_return_if_fail (history != NULL); + g_return_if_fail (E_IS_HISTORY (history)); + g_return_if_fail (compare_func != NULL); + + priv = history->priv; + + for (p = priv->items; p != NULL; p = p->next) { + if ((* compare_func) (data, p->data) == 0) { + if (priv->items == priv->current_item) + priv->items = priv->current_item = g_list_remove_link (priv->items, p); + else + priv->items = g_list_remove_link (priv->items, p); + } + } +} + E_MAKE_TYPE (e_history, "EHistory", EHistory, class_init, init, GTK_TYPE_OBJECT) diff --git a/shell/e-history.h b/shell/e-history.h index f2d4efb1fa..d9204441f5 100644 --- a/shell/e-history.h +++ b/shell/e-history.h @@ -77,6 +77,10 @@ void *e_history_get_current (EHistory *history); void e_history_add (EHistory *history, void *data); +void e_history_remove_matching (EHistory *history, + const void *data, + GCompareFunc compare_func); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c index 0df938d816..7d369a9037 100644 --- a/shell/e-shell-view.c +++ b/shell/e-shell-view.c @@ -316,6 +316,42 @@ setup_verb_sensitivity_for_folder (EShellView *shell_view, bonobo_ui_component_set_prop (ui_component, "/commands/RenameFolder", "sensitive", prop, NULL); } + +static void +update_navigation_buttons (EShellView *shell_view) +{ + EShellViewPrivate *priv; + + priv = shell_view->priv; + + e_shell_folder_title_bar_update_navigation_buttons (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar), + e_history_has_prev (priv->history), + e_history_has_next (priv->history)); +} + +static int +history_uri_matching_func (const void *a, + const void *b) +{ + const char *s1, *s2; + + s1 = (const char *) a; + s2 = (const char *) b; + + return strcmp (s1, s2); +} + +static void +remove_uri_from_history (EShellView *shell_view, + const char *uri) +{ + EShellViewPrivate *priv; + + priv = shell_view->priv; + + e_history_remove_matching (priv->history, uri, history_uri_matching_func); +} + /* Callbacks for the EStorageSet. */ @@ -336,7 +372,16 @@ storage_set_removed_folder_callback (EStorageSet *storage_set, priv = shell_view->priv; uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL); + + remove_uri_from_history (shell_view, uri); + update_navigation_buttons (shell_view); + + /* (Note that at this point the current URI in the history might have + been changed and not match the current view. But we catch this case + when checking if this was the current view, below.) */ + view = g_hash_table_lookup (priv->uri_to_view, uri); + g_free (uri); if (view == NULL) @@ -802,7 +847,7 @@ offline_toggle_clicked_cb (GtkButton *button, } -/* Handling of the navigation buttons. */ +/* Navigation button callbacks. */ static void back_clicked_callback (EShellFolderTitleBar *title_bar, @@ -842,18 +887,6 @@ forward_clicked_callback (EShellFolderTitleBar *title_bar, display_uri (shell_view, new_uri, FALSE); } -static void -update_navigation_buttons (EShellView *shell_view) -{ - EShellViewPrivate *priv; - - priv = shell_view->priv; - - e_shell_folder_title_bar_update_navigation_buttons (priv->folder_title_bar, - e_history_has_prev (priv->history), - e_history_has_next (priv->history)); -} - /* Widget setup. */ |