Merge branch 'part-to-stream-in-plugins' of https://git.maemo.org/projects/modest...
authorJose Dapena Paz <jdapena@igalia.com>
Mon, 24 Aug 2009 10:16:01 +0000 (12:16 +0200)
committerJose Dapena Paz <jdapena@igalia.com>
Mon, 24 Aug 2009 10:16:01 +0000 (12:16 +0200)
debian/changelog
src/hildon2/modest-header-window.c
src/modest-ui-actions.c

index 32cd28d..5e4d9d1 100644 (file)
@@ -1,8 +1,16 @@
+modest (3.0.17-rc40) unstable; urgency=low
+
+  * Week 35, 2009 - fifth release
+  *
+  * Fixes: NB#131583    Email application hangs often when retrieving messages 
+  *
+
+ -- Moises Martinez <moises.martinez@nokia.com>  Mon, 24 Aug 2009 11:19:03 +0300
+
 modest (3.0.17-rc39) unstable; urgency=low
 
   * Week 35, 2009 - fourth release
   *
-  * Fixes: NB#120278 Modest: 'Inbox' UI is not updated when change read/unread status from Web interface 
   * Fixes: NB#134613 Email editor body doesn't get expanded when entering text
 
  -- Moises Martinez <moises.martinez@nokia.com>  Sun, 23 Aug 2009 01:53:00 +0300
index 3d8e894..36c78df 100644 (file)
@@ -310,11 +310,13 @@ modest_header_window_disconnect_signals (ModestWindow *self)
                GtkTreeModel *sortable;
 
                sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->header_view));
-               if (g_signal_handler_is_connected (G_OBJECT (sortable),
-                                                  priv->sort_column_handler)) {
-                       g_signal_handler_disconnect (G_OBJECT (sortable),
-                                                    priv->sort_column_handler);
-                       priv->sort_column_handler = 0;
+               if (sortable) {
+                       if (g_signal_handler_is_connected (G_OBJECT (sortable),
+                                                          priv->sort_column_handler)) {
+                               g_signal_handler_disconnect (G_OBJECT (sortable),
+                                                            priv->sort_column_handler);
+                               priv->sort_column_handler = 0;
+                       }
                }
        }
 
index e7b2b93..e6069a5 100644 (file)
@@ -2151,6 +2151,40 @@ modest_ui_actions_on_sort (GtkAction *action,
        modest_utils_run_sort_dialog (GTK_WINDOW (window), MODEST_SORT_HEADERS);
 }
 
+static gboolean
+idle_refresh_folder (gpointer source)
+{
+       ModestHeaderView *header_view = NULL;
+
+       /* If the window still exists */
+       if (!GTK_IS_WIDGET (source) ||
+           !GTK_WIDGET_VISIBLE (source))
+               return FALSE;
+
+       /* Refresh the current view */
+#ifdef MODEST_TOOLKIT_HILDON2
+       if (MODEST_IS_HEADER_WINDOW (source))
+               header_view = modest_header_window_get_header_view ((ModestHeaderWindow *) source);
+#else
+       if (MODEST_IS_MAIN_WINDOW (source))
+               header_view = modest_main_window_get_child_widget ((ModestMainWindow *) source,
+                                                                  MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
+#endif
+       if (header_view) {
+               TnyFolder *folder = modest_header_view_get_folder (header_view);
+               if (folder) {
+                       /* We must clear first, because otherwise set_folder will ignore
+                          the change as the folders are the same */
+                       modest_header_view_clear (header_view);
+                       modest_header_view_set_folder (header_view, folder, TRUE,
+                                                      (ModestWindow *) source, NULL, NULL);
+                       g_object_unref (folder);
+               }
+       }
+
+       return FALSE;
+}
+
 static void
 update_account_cb (ModestMailOperation *self,
                   TnyList *new_headers,
@@ -2209,29 +2243,13 @@ update_account_cb (ModestMailOperation *self,
        }
 
        if (source) {
-               ModestHeaderView *header_view = NULL;
-
-               /* Refresh the current view */
-#ifdef MODEST_TOOLKIT_HILDON2
-               if (MODEST_IS_HEADER_WINDOW (source))
-                       header_view = modest_header_window_get_header_view ((ModestHeaderWindow *) source);
-#else
-               if (MODEST_IS_MAIN_WINDOW (source))
-                       header_view = modest_main_window_get_child_widget ((ModestMainWindow *) source,
-                                                                          MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
-#endif
-               if (header_view) {
-                       TnyFolder *folder = modest_header_view_get_folder (header_view);
-                       if (folder) {
-                               /* We must clear first, because otherwise set_folder will ignore
-                                  the change as the folders are the same */
-                               modest_header_view_clear (header_view);
-                               modest_header_view_set_folder (header_view, folder, TRUE,
-                                                              (ModestWindow *) source, NULL, NULL);
-                               g_object_unref (folder);
-                       }
-               }
-
+               /* Refresh the current folder in an idle. We do this
+                  in order to avoid refresh cancelations if the
+                  currently viewed folder is the inbox */
+               g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+                                idle_refresh_folder,
+                                g_object_ref (source),
+                                g_object_unref);
                g_object_unref (source);
        }
 }