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;
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 =
show_toolbar);
}
+/*
+ * Counts the number of remote accounts in a list
+ */
+static guint
+num_remote_accounts (TnyList *accounts)
+{
+ TnyIterator *iter;
+ guint num = 0;
+
+ iter = tny_list_create_iterator (accounts);
+ while (!tny_iterator_is_done (iter)) {
+ TnyAccount *account = (TnyAccount *) tny_iterator_get_current (iter);
+ if (modest_tny_folder_store_is_remote (TNY_FOLDER_STORE (account)))
+ num++;
+ tny_iterator_next (iter);
+ }
+ g_object_unref (iter);
+ return num;
+}
+
+
static void
on_account_inserted (TnyAccountStore *accoust_store,
TnyAccount *account,
/* 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))) {
+ TnyList *list = tny_simple_list_new ();
+
+ /* Update menus */
update_menus (MODEST_MAIN_WINDOW (user_data));
+
+ /* Perform a send&receive if there are more than 1
+ remote account , if this is the first remote
+ account the folder view will automatically select
+ and update it */
+ tny_account_store_get_accounts (TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()),
+ list, TNY_ACCOUNT_STORE_STORE_ACCOUNTS);
+ if (num_remote_accounts (list) > 1) {
+ const gchar *account_name =
+ modest_tny_account_get_parent_modest_account_name_for_server_account (account);
+ modest_ui_actions_do_send_receive (account_name, FALSE, MODEST_WINDOW (user_data));
+ }
+
+ g_object_unref (list);
+ }
}
static void
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)
{