aboutsummaryrefslogtreecommitdiffstats
path: root/shell/e-shell-view.c
diff options
context:
space:
mode:
authorjacob berkman <jacob@ximian.com>2001-06-26 04:30:42 +0800
committerJacob Berkman <jberkman@src.gnome.org>2001-06-26 04:30:42 +0800
commit4d5ccfcb23509552645597c073fd0fa311701ded (patch)
treea790571c62af8d91671d5a905b737286e77ea416 /shell/e-shell-view.c
parentb655dc216eaab23a6f2d2e9a278b4f5dd4fdfa3a (diff)
downloadgsoc2013-evolution-4d5ccfcb23509552645597c073fd0fa311701ded.tar
gsoc2013-evolution-4d5ccfcb23509552645597c073fd0fa311701ded.tar.gz
gsoc2013-evolution-4d5ccfcb23509552645597c073fd0fa311701ded.tar.bz2
gsoc2013-evolution-4d5ccfcb23509552645597c073fd0fa311701ded.tar.lz
gsoc2013-evolution-4d5ccfcb23509552645597c073fd0fa311701ded.tar.xz
gsoc2013-evolution-4d5ccfcb23509552645597c073fd0fa311701ded.tar.zst
gsoc2013-evolution-4d5ccfcb23509552645597c073fd0fa311701ded.zip
display a selected uri in a timeout rather than right away, so the UI
2001-06-25 jacob berkman <jacob@ximian.com> * e-shell-view.c: (set_folder_timeout): display a selected uri in a timeout rather than right away, so the UI feels a bit more responsive, and the tree is more navigable via keyboard (switch_on_folder_tree_click): use the timeout rather than setting the URI right away (destroy): remove the timeout if it still exists (update_for_current_uri): if there is a timeout set, don't update (e_shell_view_display_uri): remove the timeout if it exists svn path=/trunk/; revision=10490
Diffstat (limited to 'shell/e-shell-view.c')
-rw-r--r--shell/e-shell-view.c60
1 files changed, 57 insertions, 3 deletions
diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c
index 8098eba211..8951c34926 100644
--- a/shell/e-shell-view.c
+++ b/shell/e-shell-view.c
@@ -83,6 +83,10 @@ struct _EShellViewPrivate {
"folder_selected" */
char *delayed_selection;
+ /* uri to go to at timeout */
+ unsigned int set_folder_timeout;
+ char *set_folder_uri;
+
/* Tooltips. */
GtkTooltips *tooltips;
@@ -139,6 +143,8 @@ static guint signals[LAST_SIGNAL] = { 0 };
#define DEFAULT_URI "evolution:/local/Inbox"
+#define SET_FOLDER_DELAY 250
+
/* The icons for the offline/online status. */
@@ -396,6 +402,22 @@ pop_up_folder_bar (EShellView *shell_view)
static void new_folder_cb (EStorageSet *storage_set, const char *path, void *data);
+static int
+set_folder_timeout (gpointer data)
+{
+ EShellView *shell_view;
+ EShellViewPrivate *priv;
+
+ shell_view = E_SHELL_VIEW (data);
+ priv = shell_view->priv;
+
+ /* 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);
+
+ return FALSE;
+}
+
static void
switch_on_folder_tree_click (EShellView *shell_view,
const char *path)
@@ -411,8 +433,9 @@ switch_on_folder_tree_click (EShellView *shell_view,
return;
}
- e_shell_view_display_uri (shell_view, uri);
- g_free (uri);
+ if (priv->set_folder_timeout != 0)
+ gtk_timeout_remove (priv->set_folder_timeout);
+ g_free (priv->set_folder_uri);
if (priv->delayed_selection) {
g_free (priv->delayed_selection);
@@ -422,8 +445,16 @@ switch_on_folder_tree_click (EShellView *shell_view,
shell_view);
}
- if (priv->folder_bar_mode == E_SHELL_VIEW_SUBWINDOW_TRANSIENT)
+ if (priv->folder_bar_mode == E_SHELL_VIEW_SUBWINDOW_TRANSIENT) {
+ e_shell_view_display_uri (shell_view, uri);
popdown_transient_folder_bar (shell_view);
+ g_free (uri);
+ return;
+ }
+
+ priv->set_folder_uri = uri;
+
+ priv->set_folder_timeout = gtk_timeout_add (SET_FOLDER_DELAY, set_folder_timeout, shell_view);
}
@@ -880,6 +911,11 @@ destroy (GtkObject *object)
g_free (priv->uri);
+ if (priv->set_folder_timeout != 0)
+ gtk_timeout_remove (priv->set_folder_timeout);
+
+ g_free (priv->set_folder_uri);
+
g_free (priv);
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
@@ -976,6 +1012,9 @@ init (EShellView *shell_view)
priv->sockets = NULL;
+ priv->set_folder_timeout = 0;
+ priv->set_folder_uri = NULL;
+
shell_view->priv = priv;
}
@@ -1315,6 +1354,13 @@ update_for_current_uri (EShellView *shell_view)
priv = shell_view->priv;
+ /* if we update when there is a timeout set, the selection
+ * will jump around against the user's wishes. so we just
+ * return.
+ */
+ if (priv->set_folder_timeout != 0)
+ return;
+
path = get_storage_set_path_from_uri (priv->uri);
if (priv->uri != NULL && strcmp (priv->uri, "evolution:/My Evolution") == 0) {
@@ -1806,6 +1852,14 @@ e_shell_view_display_uri (EShellView *shell_view,
retval = TRUE;
end:
+ g_free (priv->set_folder_uri);
+ priv->set_folder_uri = NULL;
+
+ if (priv->set_folder_timeout != 0) {
+ gtk_timeout_remove (priv->set_folder_timeout);
+ priv->set_folder_timeout = 0;
+ }
+
update_for_current_uri (shell_view);
bonobo_window_thaw (BONOBO_WINDOW (shell_view));