From: Javier Fernandez Garcia-Boente Date: Thu, 10 May 2007 16:32:52 +0000 (+0000) Subject: * Add a timeout to show progress bar only X-Git-Tag: git_migration_finished~3639 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=b27fb4ee5baf665143391432e0febfaf5345a2f9 * Add a timeout to show progress bar only with operations more than 2 second long. pmo-trunk-r1829 --- diff --git a/src/maemo/modest-main-window.c b/src/maemo/modest-main-window.c index 99bdd63..72db89b 100644 --- a/src/maemo/modest-main-window.c +++ b/src/maemo/modest-main-window.c @@ -103,6 +103,8 @@ static void on_configuration_key_changed (ModestConf* conf, static void set_toolbar_mode (ModestMainWindow *self, ModestToolBarModes mode); +static gboolean set_toolbar_transfer_mode (ModestMainWindow *self); + static void on_show_account_action_activated (GtkAction *action, gpointer user_data); @@ -149,6 +151,9 @@ struct _ModestMainWindowPrivate { ModestMainWindowStyle style; ModestMainWindowContentsStyle contents_style; + + guint progress_bar_timeout; + }; #define MODEST_MAIN_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_MAIN_WINDOW, \ @@ -243,8 +248,6 @@ modest_main_window_init (ModestMainWindow *obj) priv->accounts_popup = NULL; priv->details_widget = NULL; - priv->optimized_view = FALSE; - priv->progress_widgets = NULL; priv->progress_bar = NULL; priv->current_toolbar_mode = TOOLBAR_MODE_NORMAL; @@ -253,6 +256,9 @@ modest_main_window_init (ModestMainWindow *obj) priv->contents_style = MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS; priv->merge_ids = NULL; + + priv->optimized_view = FALSE; + priv->progress_bar_timeout = 0; } static void @@ -266,6 +272,11 @@ modest_main_window_finalize (GObject *obj) g_byte_array_free (priv->merge_ids, TRUE); + if (priv->progress_bar_timeout > 0) { + g_source_remove (priv->progress_bar_timeout); + priv->progress_bar_timeout = 0; + } + G_OBJECT_CLASS(parent_class)->finalize (obj); } @@ -840,10 +851,10 @@ modest_main_window_show_toolbar (ModestWindow *self, } if (show_toolbar) { - /* Quick hack: this prevents toolbar icons "dance" when progress bar show status is changed */ + /* Quick hack: this prevents toolbar icons "dance" when progress bar show status is changed */ /* TODO: resize mode migth be GTK_RESIZE_QUEUE, in order to avoid unneccesary shows */ gtk_container_set_resize_mode (GTK_CONTAINER(parent_priv->toolbar), GTK_RESIZE_IMMEDIATE); - + gtk_widget_show (GTK_WIDGET (parent_priv->toolbar)); set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_NORMAL); } else @@ -1236,6 +1247,14 @@ on_configuration_key_changed (ModestConf* conf, } } +static gboolean +set_toolbar_transfer_mode (ModestMainWindow *self) +{ + set_toolbar_mode (self, TOOLBAR_MODE_TRANSFER); + + return FALSE; +} + static void set_toolbar_mode (ModestMainWindow *self, ModestToolBarModes mode) @@ -1376,7 +1395,9 @@ on_queue_changed (ModestMailOperationQueue *queue, switch (type) { case MODEST_MAIL_OPERATION_QUEUE_OPERATION_ADDED: if (mode_changed) - set_toolbar_mode (self, mode); + priv->progress_bar_timeout = g_timeout_add (1000, + (GSourceFunc) set_toolbar_transfer_mode, + self); if (mode == TOOLBAR_MODE_TRANSFER) { while (tmp) { modest_progress_object_add_operation (MODEST_PROGRESS_OBJECT (tmp->data), @@ -1386,8 +1407,7 @@ on_queue_changed (ModestMailOperationQueue *queue, } break; case MODEST_MAIL_OPERATION_QUEUE_OPERATION_REMOVED: - if (mode == TOOLBAR_MODE_TRANSFER) { - + if (mode == TOOLBAR_MODE_TRANSFER) { while (tmp) { modest_progress_object_remove_operation (MODEST_PROGRESS_OBJECT (tmp->data), mail_op); @@ -1395,8 +1415,14 @@ on_queue_changed (ModestMailOperationQueue *queue, } /* If no more operations are being observed, NORMAL mode is enabled again */ - if (observers_empty (self)) + if (observers_empty (self)) { + if (priv->progress_bar_timeout > 0) { + g_source_remove (priv->progress_bar_timeout); + priv->progress_bar_timeout = 0; + } + set_toolbar_mode (self, TOOLBAR_MODE_NORMAL); + } } break; } diff --git a/src/maemo/modest-msg-view-window.c b/src/maemo/modest-msg-view-window.c index 112909a..272a109 100644 --- a/src/maemo/modest-msg-view-window.c +++ b/src/maemo/modest-msg-view-window.c @@ -101,6 +101,7 @@ static void view_msg_cb (const GObject *obj, const TnyMsg *msg, gpointer user_da static void set_toolbar_mode (ModestMsgViewWindow *self, ModestToolBarModes mode); +static gboolean set_toolbar_transfer_mode (ModestMsgViewWindow *self); /* list my signals */ enum { @@ -148,6 +149,8 @@ struct _ModestMsgViewWindowPrivate { guint clipboard_change_handler; guint queue_change_handler; + + guint progress_bar_timeout; }; #define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ @@ -233,10 +236,18 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj) priv->clipboard_change_handler = 0; priv->optimized_view = FALSE; - + priv->progress_bar_timeout = 0; } +static gboolean +set_toolbar_transfer_mode (ModestMsgViewWindow *self) +{ + set_toolbar_mode (self, TOOLBAR_MODE_TRANSFER); + + return FALSE; +} + static void set_toolbar_mode (ModestMsgViewWindow *self, ModestToolBarModes mode) @@ -409,6 +420,11 @@ modest_msg_view_window_finalize (GObject *obj) priv->queue_change_handler = 0; } + if (priv->progress_bar_timeout > 0) { + g_source_remove (priv->progress_bar_timeout); + priv->progress_bar_timeout = 0; + } + G_OBJECT_CLASS(parent_class)->finalize (obj); } @@ -1180,8 +1196,8 @@ modest_msg_view_window_show_toolbar (ModestWindow *self, priv->cancel_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarCancel"); priv->next_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageNext"); priv->prev_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageBack"); - gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE); - gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE); + gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE); + gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE); gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE); @@ -1340,7 +1356,9 @@ on_queue_changed (ModestMailOperationQueue *queue, } /* Enable transfer toolbar mode */ - set_toolbar_mode (MODEST_MSG_VIEW_WINDOW(self), mode); + priv->progress_bar_timeout = g_timeout_add (1000, + (GSourceFunc) set_toolbar_transfer_mode, + self); } break; case MODEST_MAIL_OPERATION_QUEUE_OPERATION_REMOVED: @@ -1353,8 +1371,14 @@ on_queue_changed (ModestMailOperationQueue *queue, } /* If no more operations are being observed, NORMAL mode is enabled again */ - if (observers_empty (self)) + if (observers_empty (self)) { + if (priv->progress_bar_timeout > 0) { + g_source_remove (priv->progress_bar_timeout); + priv->progress_bar_timeout = 0; + } + set_toolbar_mode (self, TOOLBAR_MODE_NORMAL); + } } break; }