From f7f31d8939037be0877ee9800d3cd83898060c83 Mon Sep 17 00:00:00 2001 From: Jose Dapena Paz Date: Mon, 9 Feb 2009 13:30:02 +0000 Subject: [PATCH] Added progress hint support in folder window. pmo-trunk-r7429 --- src/hildon2/modest-folder-window.c | 76 +++++++++++++++++++++++++++++++++++- src/hildon2/modest-folder-window.h | 10 +++++ src/modest-ui-dimming-rules.c | 3 ++ src/widgets/modest-window-mgr.c | 2 +- src/widgets/modest-window-mgr.h | 2 +- 5 files changed, 90 insertions(+), 3 deletions(-) diff --git a/src/hildon2/modest-folder-window.c b/src/hildon2/modest-folder-window.c index a57ee45..90c9f7d 100644 --- a/src/hildon2/modest-folder-window.c +++ b/src/hildon2/modest-folder-window.c @@ -84,6 +84,12 @@ static void edit_mode_changed (ModestFolderWindow *folder_window, gint edit_mode_id, gboolean enabled, ModestFolderWindow *self); +static void on_progress_list_changed (ModestWindowMgr *mgr, + ModestFolderWindow *self); +static gboolean on_map_event (GtkWidget *widget, + GdkEvent *event, + gpointer userdata); +static void update_progress_hint (ModestFolderWindow *self); typedef struct _ModestFolderWindowPrivate ModestFolderWindowPrivate; struct _ModestFolderWindowPrivate { @@ -94,6 +100,8 @@ struct _ModestFolderWindowPrivate { /* signals */ GSList *sighandlers; + gchar *current_store_account; + gboolean progress_hint; }; #define MODEST_FOLDER_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_FOLDER_WINDOW, \ @@ -161,6 +169,8 @@ modest_folder_window_init (ModestFolderWindow *obj) modest_window_mgr_register_help_id (modest_runtime_get_window_mgr(), GTK_WINDOW(obj), "applications_email_folderview"); + priv->progress_hint = FALSE; + priv->current_store_account = NULL; } static void @@ -170,6 +180,11 @@ modest_folder_window_finalize (GObject *obj) priv = MODEST_FOLDER_WINDOW_GET_PRIVATE(obj); + if (priv->current_store_account) { + g_free (priv->current_store_account); + priv->current_store_account = NULL; + } + /* Sanity check: shouldn't be needed, the window mgr should call this function before */ modest_folder_window_disconnect_signals (MODEST_WINDOW (obj)); @@ -199,6 +214,10 @@ connect_signals (ModestFolderWindow *self) G_OBJECT (priv->folder_view), "folder-activated", G_CALLBACK (on_folder_activated), self); + priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers, + G_OBJECT (modest_runtime_get_window_mgr ()), + "progress-list-changed", + G_CALLBACK (on_progress_list_changed), self); /* TODO: connect folder view activate */ /* window */ @@ -294,6 +313,11 @@ modest_folder_window_new (TnyFolderStoreQuery *query) GTK_SELECTION_SINGLE, EDIT_MODE_CALLBACK (modest_ui_actions_on_edit_mode_rename_folder)); + g_signal_connect (G_OBJECT (self), "map-event", + G_CALLBACK (on_map_event), + G_OBJECT (self)); + update_progress_hint (self); + return MODEST_WINDOW(self); } @@ -333,9 +357,13 @@ modest_folder_window_set_account (ModestFolderWindow *self, if (!store_settings) goto free_refs; + if (priv->current_store_account != NULL) + g_free (priv->current_store_account); + priv->current_store_account = g_strdup (modest_server_account_settings_get_account_name (store_settings)); + modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW (priv->folder_view), - modest_server_account_settings_get_account_name (store_settings)); + priv->current_store_account); modest_window_set_active_account (MODEST_WINDOW (self), account_name); gtk_window_set_title (GTK_WINDOW (self), @@ -491,3 +519,49 @@ edit_mode_changed (ModestFolderWindow *folder_window, modest_folder_view_unset_filter (MODEST_FOLDER_VIEW (priv->folder_view), filter); } + +static gboolean +on_map_event (GtkWidget *widget, + GdkEvent *event, + gpointer userdata) +{ + ModestFolderWindow *self = (ModestFolderWindow *) userdata; + ModestFolderWindowPrivate *priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self); + + if (priv->progress_hint) { + hildon_gtk_window_set_progress_indicator (GTK_WINDOW (self), TRUE); + } + + return FALSE; +} + +static void +update_progress_hint (ModestFolderWindow *self) +{ + ModestFolderWindowPrivate *priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self); + + if (!priv->current_store_account) + return; + + priv->progress_hint = modest_window_mgr_has_progress_operation_on_account (modest_runtime_get_window_mgr (), + priv->current_store_account); + + if (GTK_WIDGET_VISIBLE (self)) { + hildon_gtk_window_set_progress_indicator (GTK_WINDOW (self), priv->progress_hint?1:0); + } +} + +static void +on_progress_list_changed (ModestWindowMgr *mgr, + ModestFolderWindow *self) +{ + update_progress_hint (self); +} + +gboolean +modest_folder_window_transfer_mode_enabled (ModestFolderWindow *self) +{ + ModestFolderWindowPrivate *priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self); + + return priv->progress_hint; +} diff --git a/src/hildon2/modest-folder-window.h b/src/hildon2/modest-folder-window.h index cbb167e..f7fb2bf 100644 --- a/src/hildon2/modest-folder-window.h +++ b/src/hildon2/modest-folder-window.h @@ -94,6 +94,16 @@ ModestFolderView *modest_folder_window_get_folder_view (ModestFolderWindow *self void modest_folder_window_set_account (ModestFolderWindow *self, const gchar *account_name); +/** + * modest_folder_Window_transfer_mode_enabled: + * @self: a #ModestFolderWindow + * + * if @self is in transfer mode (progress hint visible) + * + * Returns: %TRUE if progress hint should be visible + */ +gboolean modest_folder_window_transfer_mode_enabled (ModestFolderWindow *self); + G_END_DECLS #endif diff --git a/src/modest-ui-dimming-rules.c b/src/modest-ui-dimming-rules.c index 008432e..1f13fa6 100644 --- a/src/modest-ui-dimming-rules.c +++ b/src/modest-ui-dimming-rules.c @@ -50,6 +50,7 @@ #include #ifdef MODEST_TOOLKIT_HILDON2 #include +#include #endif @@ -2803,6 +2804,8 @@ _transfer_mode_enabled (ModestWindow *win) } else if (MODEST_IS_MAIN_WINDOW(win)) { result = modest_main_window_transfer_mode_enabled (MODEST_MAIN_WINDOW (win)); #ifdef MODEST_TOOLKIT_HILDON2 + } else if (MODEST_IS_FOLDER_WINDOW (win)) { + result = modest_folder_window_transfer_mode_enabled (MODEST_FOLDER_WINDOW (win)); } else if (MODEST_IS_HEADER_WINDOW (win)) { result = modest_header_window_transfer_mode_enabled (MODEST_HEADER_WINDOW (win)); #endif diff --git a/src/widgets/modest-window-mgr.c b/src/widgets/modest-window-mgr.c index 5913806..97ac112 100644 --- a/src/widgets/modest-window-mgr.c +++ b/src/widgets/modest-window-mgr.c @@ -1090,7 +1090,7 @@ modest_window_mgr_has_progress_operation_on_account (ModestWindowMgr *self, if (account != NULL) { const gchar *current_name; - current_name = tny_account_get_name (account); + current_name = tny_account_get_id (account); if (current_name && strcmp (current_name, account_name) == 0) account_ops ++; g_object_unref (account); diff --git a/src/widgets/modest-window-mgr.h b/src/widgets/modest-window-mgr.h index 4cfd907..d5eece0 100644 --- a/src/widgets/modest-window-mgr.h +++ b/src/widgets/modest-window-mgr.h @@ -436,7 +436,7 @@ TnyList *modest_window_mgr_get_progress_operations (ModestWindowMgr *self); gboolean modest_window_mgr_has_progress_operation (ModestWindowMgr *self); /** - * modest_window_mgr_has_progress_operation: + * modest_window_mgr_has_progress_operation_on_account: * @self: a #ModestWindowMgr * @account_name: a string * -- 1.7.9.5