#include "modest-tny-msg.h"
#include "modest-mail-operation.h"
#include "modest-icon-names.h"
-#include "modest-progress-bar-widget.h"
+#include "modest-progress-bar.h"
#include "modest-text-utils.h"
#include "modest-ui-dimming-manager.h"
#include "maemo/modest-osso-state-saving.h"
static gboolean restore_paned_timeout_handler (gpointer *data);
+static gboolean show_retrieving_banner (gpointer user_data);
+
+static void on_window_destroy (GtkObject *widget,
+ gpointer userdata);
+
typedef struct _ModestMainWindowPrivate ModestMainWindowPrivate;
struct _ModestMainWindowPrivate {
GtkWidget *msg_paned;
GtkWidget *updating_banner;
guint updating_banner_timeout;
+ /* "Retrieving" banner for header view */
+ GtkWidget *retrieving_banner;
+ guint retrieving_banner_timeout;
+
/* Display state */
osso_display_state_t display_state;
};
priv->sighandlers = NULL;
priv->updating_banner = NULL;
priv->updating_banner_timeout = 0;
+ priv->retrieving_banner = NULL;
+ priv->retrieving_banner_timeout = 0;
priv->display_state = OSSO_DISPLAY_ON;
modest_window_mgr_register_help_id (modest_runtime_get_window_mgr(),
priv->updating_banner = NULL;
}
+ if (priv->retrieving_banner_timeout > 0) {
+ g_source_remove (priv->retrieving_banner_timeout);
+ priv->retrieving_banner_timeout = 0;
+ }
+
+ if (priv->retrieving_banner) {
+ gtk_widget_destroy (priv->retrieving_banner);
+ priv->retrieving_banner = NULL;
+ }
+
if (priv->restore_paned_timeout > 0) {
g_source_remove (priv->restore_paned_timeout);
priv->restore_paned_timeout = 0;
display_name = g_strdup_printf (_("mcen_me_toolbar_sendreceive_mailbox_n"),
modest_account_settings_get_display_name (settings));
}
+
+
/* Create action and add it to the action group. The
action name must be the account name, this way we
gchar* item_name, *refresh_action_name;
guint8 merge_id = 0;
GtkAction *view_account_action, *refresh_account_action;
+ gchar *escaped_display_name;
+
+ escaped_display_name = modest_text_utils_escape_mnemonics (display_name);
view_account_action = GTK_ACTION (gtk_radio_action_new (account_name,
- display_name, NULL, NULL, 0));
+ escaped_display_name, NULL, NULL, 0));
+ g_free (escaped_display_name);
gtk_action_group_add_action (priv->view_additions_group, view_account_action);
gtk_radio_action_set_group (GTK_RADIO_ACTION (view_account_action), radio_group);
radio_group = gtk_radio_action_get_group (GTK_RADIO_ACTION (view_account_action));
modest_signal_mgr_connect (priv->sighandlers,G_OBJECT (self), "window-state-event",
G_CALLBACK (modest_main_window_window_state_event),
NULL);
+ /* we don't register this in sighandlers, as it should be run after disconnecting all signals,
+ * in destroy stage */
+ g_signal_connect (G_OBJECT (self), "destroy", G_CALLBACK (on_window_destroy), NULL);
/* Mail Operation Queue */
priv->sighandlers =
toolbar_resize (MODEST_MAIN_WINDOW (self));
/* Add ProgressBar (Transfer toolbar) */
- priv->progress_bar = modest_progress_bar_widget_new ();
+ priv->progress_bar = modest_progress_bar_new ();
gtk_widget_set_no_show_all (priv->progress_bar, TRUE);
placeholder = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ProgressBarView");
insert_index = gtk_toolbar_get_item_index(GTK_TOOLBAR (parent_priv->toolbar), GTK_TOOL_ITEM(placeholder));
/* Transport accounts and local ones (MMC and the Local
folders account do now cause menu changes */
if (TNY_IS_STORE_ACCOUNT (account) &&
- modest_tny_folder_store_is_remote (TNY_FOLDER_STORE (account)))
+ modest_tny_folder_store_is_remote (TNY_FOLDER_STORE (account))) {
+ /* Update menus */
update_menus (MODEST_MAIN_WINDOW (user_data));
+ }
}
static void
g_free (label);
/* Folder count */
- label = g_markup_printf_escaped ("<span color='%s'>%s</span>: %d",
+ label = g_markup_printf_escaped ("<span color='%s'>%s:</span> %d",
gray_color_markup,
_("mcen_fi_rootfolder_folders"),
modest_tny_folder_store_get_folder_count (folder_store));
TnyFolderChange *change,
ModestMainWindow *main_window)
{
+ gboolean refilter = FALSE;
gboolean folder_empty = FALSE;
gboolean all_marked_as_deleted = FALSE;
ModestMainWindowPrivate *priv;
if (changed & TNY_FOLDER_CHANGE_CHANGED_ADDED_HEADERS) {
modest_platform_push_email_notification ();
}
+
+ if ((changed) & TNY_FOLDER_CHANGE_CHANGED_EXPUNGED_HEADERS)
+ refilter = TRUE;
+ } else {
+ folder_empty = (((guint) tny_folder_get_all_count (TNY_FOLDER (folder))) == 0);
}
/* Check if all messages are marked to be deleted */
modest_main_window_set_contents_style (main_window,
MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
}
+
+ if (refilter)
+ modest_header_view_refilter (header_view);
}
ModestToolBarModes mode;
GSList *tmp;
gboolean mode_changed = FALSE;
- TnyAccount *account;
+ TnyAccount *account = NULL;
self = MODEST_MAIN_WINDOW (user_data);
priv = MODEST_MAIN_WINDOW_GET_PRIVATE (self);
is_remote = !(modest_tny_account_is_virtual_local_folders (account) ||
modest_tny_account_is_memory_card_account (account));
- g_object_unref (account);
- if (!is_remote)
+ if (!is_remote) {
+ g_object_unref (account);
return;
+ }
+
+ /* Show information banner. Remove old timeout */
+ if (priv->retrieving_banner_timeout > 0) {
+ g_source_remove (priv->retrieving_banner_timeout);
+ priv->retrieving_banner_timeout = 0;
+ }
+ /* Create a new timeout */
+ priv->retrieving_banner_timeout =
+ g_timeout_add (2000, show_retrieving_banner, self);
}
+
+ /* Not every mail operation has account, noop does not */
+ if (account)
+ g_object_unref (account);
/* Get toolbar mode from operation id*/
mode = get_toolbar_mode_from_mail_operation (self, mail_op, &mode_changed);
tmp = g_slist_next (tmp);
}
}
+
+ /* Update the main menu as well, we need to explicitely do
+ this in order to enable/disable accelerators */
+ modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (self));
}
static void
GSList *tmp = NULL;
ModestMainWindow *self;
gboolean mode_changed;
- TnyAccount *account;
+ TnyAccount *account = NULL;
ModestMainWindowPrivate *priv;
self = MODEST_MAIN_WINDOW (user_data);
is_remote = !(modest_tny_account_is_virtual_local_folders (account) ||
modest_tny_account_is_memory_card_account (account));
- g_object_unref (account);
- if (!is_remote)
+ if (!is_remote) {
+ g_object_unref (account);
return;
+ }
+
+ /* Remove old timeout */
+ if (priv->retrieving_banner_timeout > 0) {
+ g_source_remove (priv->retrieving_banner_timeout);
+ priv->retrieving_banner_timeout = 0;
+ }
+
+ /* Remove the banner if exists */
+ if (priv->retrieving_banner) {
+ gtk_widget_destroy (priv->retrieving_banner);
+ priv->retrieving_banner = NULL;
+ }
}
+ /* Not every mail operation has account, noop does not */
+ if (account)
+ g_object_unref (account);
+
/* Get toolbar mode from operation id*/
mode = get_toolbar_mode_from_mail_operation (self, mail_op, &mode_changed);
/* If account_name == NULL, we must update all (option All) */
if (!account_name)
- modest_ui_actions_do_send_receive_all (win, FALSE);
+ modest_ui_actions_do_send_receive_all (win, TRUE, TRUE, TRUE);
else
- modest_ui_actions_do_send_receive (account_name, FALSE, win);
+ modest_ui_actions_do_send_receive (account_name, TRUE, TRUE, TRUE, win);
}
return (priv->display_state == OSSO_DISPLAY_ON) ? TRUE : FALSE;
}
+
+static void
+on_window_destroy (GtkObject *widget, gpointer userdata)
+{
+ ModestMainWindowPrivate *priv;
+
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE (widget);
+
+ if (priv->retrieving_banner_timeout > 0) {
+ g_source_remove (priv->retrieving_banner_timeout);
+ priv->retrieving_banner_timeout = 0;
+ }
+
+ if (priv->retrieving_banner != NULL) {
+ gtk_widget_destroy (priv->retrieving_banner);
+ priv->retrieving_banner = NULL;
+ }
+
+ if (priv->updating_banner_timeout > 0) {
+ g_source_remove (priv->updating_banner_timeout);
+ priv->updating_banner_timeout = 0;
+ }
+
+ if (priv->updating_banner != NULL) {
+ gtk_widget_destroy (priv->updating_banner);
+ priv->updating_banner = NULL;
+ }
+
+}
+
+static gboolean
+show_retrieving_banner (gpointer user_data)
+{
+ ModestMainWindowPrivate *priv = NULL;
+
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE (user_data);
+
+ if (priv->retrieving_banner == NULL) {
+
+ /* We're outside the main lock */
+ gdk_threads_enter ();
+ priv->retrieving_banner =
+ modest_platform_animation_banner (GTK_WIDGET (user_data), NULL,
+ _("mcen_ib_getting_items"));
+ gdk_threads_leave ();
+ }
+
+ /* Remove timeout */
+ priv->retrieving_banner_timeout = 0;
+ return FALSE;
+}