Perform the current folder refresh in an idle. This will avoid cancelations in the...
authorSergio Villar Senin <svillar@igalia.com>
Sun, 23 Aug 2009 09:28:02 +0000 (11:28 +0200)
committerSergio Villar Senin <svillar@igalia.com>
Sun, 23 Aug 2009 10:33:15 +0000 (12:33 +0200)
Added an extra check

src/hildon2/modest-header-window.c
src/modest-ui-actions.c

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));
                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);
 }
 
        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,
 static void
 update_account_cb (ModestMailOperation *self,
                   TnyList *new_headers,
@@ -2209,29 +2243,13 @@ update_account_cb (ModestMailOperation *self,
        }
 
        if (source) {
        }
 
        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);
        }
 }
                g_object_unref (source);
        }
 }