aboutsummaryrefslogtreecommitdiffstats
path: root/shell/e-shell-view.c
diff options
context:
space:
mode:
authorChris Toshok <toshok@helixcode.com>2000-09-01 13:08:39 +0800
committerChris Toshok <toshok@src.gnome.org>2000-09-01 13:08:39 +0800
commit38babe98e0f9813bef50880bed3eaf360470e555 (patch)
tree035afbde9ee40cc460d665178043994dfd2c1fb6 /shell/e-shell-view.c
parent64fdd80faab0d58532289ae7c5a0805041956ad1 (diff)
downloadgsoc2013-evolution-38babe98e0f9813bef50880bed3eaf360470e555.tar
gsoc2013-evolution-38babe98e0f9813bef50880bed3eaf360470e555.tar.gz
gsoc2013-evolution-38babe98e0f9813bef50880bed3eaf360470e555.tar.bz2
gsoc2013-evolution-38babe98e0f9813bef50880bed3eaf360470e555.tar.lz
gsoc2013-evolution-38babe98e0f9813bef50880bed3eaf360470e555.tar.xz
gsoc2013-evolution-38babe98e0f9813bef50880bed3eaf360470e555.tar.zst
gsoc2013-evolution-38babe98e0f9813bef50880bed3eaf360470e555.zip
add delayed_selection to _EShellViewPrivate. (new_folder_cb): new
2000-08-31 Chris Toshok <toshok@helixcode.com> * e-shell-view.c: add delayed_selection to _EShellViewPrivate. (new_folder_cb): new function. check if the path is our delayed_selection and if so, select it. (folder_selected_cb): if the user selects something using a UI gesture, clear out a pending delayed selection. (e_shell_view_display_uri): if the uri isn't available, save it in the delayed_selection field, and set up the new_folder signal. svn path=/trunk/; revision=5157
Diffstat (limited to 'shell/e-shell-view.c')
-rw-r--r--shell/e-shell-view.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c
index 3a7f838d3b..f1fc3402f0 100644
--- a/shell/e-shell-view.c
+++ b/shell/e-shell-view.c
@@ -65,6 +65,11 @@ struct _EShellViewPrivate {
/* Currently displayed URI. */
char *uri;
+ /* delayed selection, used when a path doesn't exist in an
+ EStorage. cleared when we're signaled with
+ "folder_selected" */
+ char *delayed_selection;
+
/* The widgetry. */
GtkWidget *appbar;
GtkWidget *hpaned;
@@ -264,6 +269,35 @@ pop_up_folder_bar (EShellView *shell_view)
/* Callbacks. */
+/* Callback when a new folder is added. removed when we clear the
+ delayed_selection */
+static void
+new_folder_cb (EStorageSet *storage_set,
+ const char *path,
+ void *data)
+{
+ EShellView *shell_view;
+ EShellViewPrivate *priv;
+ char *delayed_path;
+
+ shell_view = E_SHELL_VIEW (data);
+ priv = shell_view->priv;
+
+ delayed_path = strchr (priv->delayed_selection, ':');
+ if (delayed_path) {
+ delayed_path ++;
+ if (!strcmp(path, delayed_path)) {
+ gtk_signal_disconnect_by_func (GTK_OBJECT (e_shell_get_storage_set(priv->shell)),
+ GTK_SIGNAL_FUNC (new_folder_cb),
+ shell_view);
+ g_free (priv->uri);
+ priv->uri = priv->delayed_selection;
+ priv->delayed_selection = NULL;
+ e_shell_view_display_uri (shell_view, priv->uri);
+ }
+ }
+}
+
/* Callback called when an icon on the shortcut bar gets clicked. */
static void
activate_shortcut_cb (EShortcutsView *shortcut_view,
@@ -285,13 +319,24 @@ folder_selected_cb (EStorageSetView *storage_set_view,
void *data)
{
EShellView *shell_view;
+ EShellViewPrivate *priv;
+
char *uri;
shell_view = E_SHELL_VIEW (data);
+ priv = shell_view->priv;
uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
e_shell_view_display_uri (shell_view, uri);
g_free (uri);
+
+ if (priv->delayed_selection) {
+ g_free (priv->delayed_selection);
+ priv->delayed_selection = NULL;
+ gtk_signal_disconnect_by_func (GTK_OBJECT (e_shell_get_storage_set(priv->shell)),
+ GTK_SIGNAL_FUNC (new_folder_cb),
+ shell_view);
+ }
}
/* Callback called when the close button on the tree's title bar is clicked. */
@@ -1149,6 +1194,10 @@ e_shell_view_display_uri (EShellView *shell_view,
g_assert (GTK_IS_WIDGET (control));
show_existing_view (shell_view, uri, control);
} else if (! create_new_view_for_uri (shell_view, uri)) {
+ priv->delayed_selection = g_strdup (uri);
+ gtk_signal_connect_after (GTK_OBJECT (e_shell_get_storage_set(priv->shell)), "new_folder",
+ GTK_SIGNAL_FUNC (new_folder_cb), shell_view);
+
retval = FALSE;
goto end;
}