Pass TRUE as @queue to e_shell_view_display_uri().

* e-shell.c (create_view): Pass TRUE as @queue to
e_shell_view_display_uri().

* e-shell-view-menu.c (command_activate_view): Pass TRUE as @queue
to e_shell_view_display_uri().
(goto_folder_dialog_folder_selected_cb): Likewise.

* e-shell-shared-folder-picker-dialog.c
(shared_folder_discovery_listener_callback): Pass TRUE as @queue
to e_shell_view_display_uri().

* e-shell-view.c
(display_uri): New arg @queue.  If true, it allows the
delayed_selection mechanism to happen transparently (returning
TRUE, while before it used to return FALSE).  Otherwise, refuse to
queue the URI and return FALSE.
(e_shell_view_display_uri): New arg @queue; pass it to
display_uri().
(handle_current_folder_removed): Pass TRUE as @queue to
e_shell_view_display_uri().
(set_folder_timeout): Likewise.
(switch_on_folder_tree_click): Likewise.
(activate_shortcut_cb): Likewise.
(corba_interface_change_current_view_cb): Likewise.
(socket_destroy_cb): Likewise.
(socket_destroy_cb): Likewise.
(e_shell_view_load_settings): Here, try displaying the old URI
with @queue set to FALSE; if this fails, display the default URI
and then invoke display again using @queue = TRUE so it gets
queued up.  This should fix #27721.

svn path=/trunk/; revision=17972
This commit is contained in:
Ettore Perazzoli
2002-09-04 19:33:15 +00:00
parent 4270c51a98
commit ee467a65b1
6 changed files with 72 additions and 27 deletions

View File

@ -1,3 +1,36 @@
2002-09-04 Ettore Perazzoli <ettore@ximian.com>
* e-shell.c (create_view): Pass TRUE as @queue to
e_shell_view_display_uri().
* e-shell-view-menu.c (command_activate_view): Pass TRUE as @queue
to e_shell_view_display_uri().
(goto_folder_dialog_folder_selected_cb): Likewise.
* e-shell-shared-folder-picker-dialog.c
(shared_folder_discovery_listener_callback): Pass TRUE as @queue
to e_shell_view_display_uri().
* e-shell-view.c
(display_uri): New arg @queue. If true, it allows the
delayed_selection mechanism to happen transparently (returning
TRUE, while before it used to return FALSE). Otherwise, refuse to
queue the URI and return FALSE.
(e_shell_view_display_uri): New arg @queue; pass it to
display_uri().
(handle_current_folder_removed): Pass TRUE as @queue to
e_shell_view_display_uri().
(set_folder_timeout): Likewise.
(switch_on_folder_tree_click): Likewise.
(activate_shortcut_cb): Likewise.
(corba_interface_change_current_view_cb): Likewise.
(socket_destroy_cb): Likewise.
(socket_destroy_cb): Likewise.
(e_shell_view_load_settings): Here, try displaying the old URI
with @queue set to FALSE; if this fails, display the default URI
and then invoke display again using @queue = TRUE so it gets
queued up. This should fix #27721.
2002-09-04 Ettore Perazzoli <ettore@ximian.com>
* main.c (idle_cb): Pass FALSE as @restore_all_views to

View File

@ -455,7 +455,7 @@ shared_folder_discovery_listener_callback (BonoboListener *listener,
NULL);
if (discovery_data->parent != NULL)
e_shell_view_display_uri (parent, uri);
e_shell_view_display_uri (parent, uri, TRUE);
else
e_shell_create_view (shell, uri, NULL);
} else {

View File

@ -323,7 +323,7 @@ command_activate_view (BonoboUIComponent *uih,
shell_view = E_SHELL_VIEW (data);
uri = g_strconcat (E_SHELL_URI_PREFIX, get_path_for_folder_op (shell_view), NULL);
e_shell_view_display_uri (shell_view, uri);
e_shell_view_display_uri (shell_view, uri, TRUE);
g_free (uri);
}
@ -449,7 +449,7 @@ goto_folder_dialog_folder_selected_cb (EShellFolderSelectionDialog *folder_selec
shell_view = E_SHELL_VIEW (data);
uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
e_shell_view_display_uri (shell_view, uri);
e_shell_view_display_uri (shell_view, uri, TRUE);
g_free (uri);
}
}

View File

@ -189,7 +189,8 @@ static const char *get_storage_set_path_from_uri (const char *uri);
/* Boo. */
static void new_folder_cb (EStorageSet *storage_set, const char *path, void *data);
static gboolean display_uri (EShellView *shell_view, const char *uri, gboolean add_to_history);
static gboolean display_uri (EShellView *shell_view, const char *uri,
gboolean add_to_history, gboolean queue);
/* View handling. */
@ -454,7 +455,7 @@ handle_current_folder_removed (EShellView *shell_view)
/* No Inbox in this storage -- fallback to the storage. */
storage_uri = g_strconcat (E_SHELL_URI_PREFIX, storage_name, NULL);
e_shell_view_display_uri (shell_view, storage_uri);
e_shell_view_display_uri (shell_view, storage_uri, TRUE);
g_free (storage_uri);
g_free (storage_name);
@ -466,7 +467,7 @@ handle_current_folder_removed (EShellView *shell_view)
}
if (new_path == NULL) {
e_shell_view_display_uri (shell_view, FALLBACK_URI);
e_shell_view_display_uri (shell_view, FALLBACK_URI, TRUE);
} else {
EFolder *folder;
@ -475,12 +476,12 @@ handle_current_folder_removed (EShellView *shell_view)
folder = e_storage_set_get_folder (e_shell_get_storage_set (priv->shell), new_path);
if (folder == NULL) {
e_shell_view_display_uri (shell_view, FALLBACK_URI);
e_shell_view_display_uri (shell_view, FALLBACK_URI, TRUE);
} else {
char *new_uri;
new_uri = g_strconcat (E_SHELL_URI_PREFIX, new_path, NULL);
e_shell_view_display_uri (shell_view, new_uri);
e_shell_view_display_uri (shell_view, new_uri, TRUE);
g_free (new_uri);
}
@ -745,7 +746,7 @@ set_folder_timeout (gpointer data)
/* Set to 0 so we don't remove it in _display_uri(). */
priv->set_folder_timeout = 0;
e_shell_view_display_uri (shell_view, priv->set_folder_uri);
e_shell_view_display_uri (shell_view, priv->set_folder_uri, TRUE);
return FALSE;
}
@ -792,7 +793,7 @@ switch_on_folder_tree_click (EShellView *shell_view,
cleanup_delayed_selection (shell_view);
if (priv->folder_bar_popup != NULL) {
e_shell_view_display_uri (shell_view, uri);
e_shell_view_display_uri (shell_view, uri, TRUE);
g_free (uri);
gtk_object_ref (GTK_OBJECT (shell_view));
@ -830,7 +831,7 @@ new_folder_cb (EStorageSet *storage_set,
uri = g_strdup (priv->delayed_selection);
cleanup_delayed_selection (shell_view);
e_shell_view_display_uri (shell_view, uri);
e_shell_view_display_uri (shell_view, uri, TRUE);
g_free (uri);
}
}
@ -855,7 +856,7 @@ activate_shortcut_cb (EShortcutsView *shortcut_view,
e_shell_view_show_shortcut_bar (new_view, FALSE);
e_shell_view_show_folder_bar (new_view, FALSE);
} else {
e_shell_view_display_uri (shell_view, uri);
e_shell_view_display_uri (shell_view, uri, TRUE);
}
}
@ -985,7 +986,7 @@ back_clicked_callback (EShellFolderTitleBar *title_bar,
new_uri = (const char *) e_history_prev (priv->history);
display_uri (shell_view, new_uri, FALSE);
display_uri (shell_view, new_uri, FALSE, TRUE);
}
static void
@ -1004,7 +1005,7 @@ forward_clicked_callback (EShellFolderTitleBar *title_bar,
new_uri = (const char *) e_history_next (priv->history);
display_uri (shell_view, new_uri, FALSE);
display_uri (shell_view, new_uri, FALSE, TRUE);
}
@ -1490,7 +1491,7 @@ corba_interface_change_current_view_cb (EvolutionShellView *shell_view,
g_return_if_fail (view != NULL);
e_shell_view_display_uri (view, uri);
e_shell_view_display_uri (view, uri, TRUE);
}
static void
@ -2045,13 +2046,13 @@ socket_destroy_cb (GtkWidget *socket_widget, gpointer data)
}
if (viewing_closed_uri)
e_shell_view_display_uri (shell_view, NULL);
e_shell_view_display_uri (shell_view, NULL, TRUE);
e_shell_component_maybe_crashed (priv->shell, uri, folder_type, shell_view);
/* We were actively viewing the component that just crashed, so flip to the default URI */
if (viewing_closed_uri)
e_shell_view_display_uri (shell_view, E_SHELL_VIEW_DEFAULT_URI);
e_shell_view_display_uri (shell_view, E_SHELL_VIEW_DEFAULT_URI, TRUE);
}
@ -2226,7 +2227,8 @@ evolution_uri_for_default_uri (EShell *shell,
static gboolean
display_uri (EShellView *shell_view,
const char *uri,
gboolean add_to_history)
gboolean add_to_history,
gboolean queue)
{
EShellViewPrivate *priv;
View *view;
@ -2281,12 +2283,17 @@ display_uri (EShellView *shell_view,
if (view != NULL) {
show_existing_view (shell_view, real_uri, view);
} else if (! create_new_view_for_uri (shell_view, real_uri, view_info)) {
if (! queue) {
retval = FALSE;
goto end;
}
cleanup_delayed_selection (shell_view);
priv->delayed_selection = g_strdup (real_uri);
gtk_signal_connect_full (GTK_OBJECT (e_shell_get_storage_set (priv->shell)),
"new_folder", GTK_SIGNAL_FUNC (new_folder_cb), NULL,
shell_view, NULL, FALSE, TRUE);
retval = FALSE;
retval = TRUE;
goto end;
}
@ -2325,12 +2332,13 @@ display_uri (EShellView *shell_view,
gboolean
e_shell_view_display_uri (EShellView *shell_view,
const char *uri)
const char *uri,
gboolean queue)
{
g_return_val_if_fail (shell_view != NULL, FALSE);
g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), FALSE);
return display_uri (shell_view, uri, TRUE);
return display_uri (shell_view, uri, TRUE, queue);
}
@ -2778,10 +2786,13 @@ e_shell_view_load_settings (EShellView *shell_view,
key = g_strconcat (prefix, "DisplayedURI", NULL);
stringval = bonobo_config_get_string (db, key, NULL);
if (stringval) {
if (! e_shell_view_display_uri (shell_view, stringval))
e_shell_view_display_uri (shell_view, E_SHELL_VIEW_DEFAULT_URI);
} else
e_shell_view_display_uri (shell_view, E_SHELL_VIEW_DEFAULT_URI);
if (! e_shell_view_display_uri (shell_view, stringval, FALSE)) {
e_shell_view_display_uri (shell_view, E_SHELL_VIEW_DEFAULT_URI, FALSE);
e_shell_view_display_uri (shell_view, stringval, TRUE);
}
} else {
e_shell_view_display_uri (shell_view, E_SHELL_VIEW_DEFAULT_URI, TRUE);
}
g_free (stringval);
g_free (key);

View File

@ -87,7 +87,8 @@ EShellView *e_shell_view_new (EShell *shell);
const GNOME_Evolution_ShellView e_shell_view_get_corba_interface (EShellView *view);
gboolean e_shell_view_display_uri (EShellView *shell_view,
const char *uri);
const char *uri,
gboolean queue);
void e_shell_view_show_shortcut_bar (EShellView *shell_view,
gboolean show);

View File

@ -985,7 +985,7 @@ create_view (EShell *shell,
GTK_SIGNAL_FUNC (view_destroy_cb), shell);
if (uri != NULL)
e_shell_view_display_uri (E_SHELL_VIEW (view), uri);
e_shell_view_display_uri (E_SHELL_VIEW (view), uri, TRUE);
shell->priv->views = g_list_prepend (shell->priv->views, view);