* Fixed some bugs on dimming rules about copy/cur/paste folders.
authorJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Mon, 13 Aug 2007 17:18:59 +0000 (17:18 +0000)
committerJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Mon, 13 Aug 2007 17:18:59 +0000 (17:18 +0000)
* Check if folder is empty on POP accounts refreshing, due to
POP refresh operation does not emit notifications.
* Use filter_row function, called to hide marked as deleted
rows on header-view, to determine if folder is empty.

pmo-trunk-r2973

src/maemo/modest-main-window.c
src/modest-ui-actions.c
src/modest-ui-dimming-rules.c
src/widgets/modest-header-view.c

index 6fba596..541ce8c 100644 (file)
@@ -1781,6 +1781,7 @@ _on_msg_count_changed (ModestHeaderView *header_view,
 {
        printf ("DEBUG: %s\n", __FUNCTION__);
        gboolean folder_empty = FALSE;
+       gboolean all_marked_as_deleted = FALSE;
        TnyFolderChangeChanged changed; 
        ModestMainWindowPrivate *priv;
        
@@ -1804,6 +1805,10 @@ _on_msg_count_changed (ModestHeaderView *header_view,
                modest_header_view_refilter (MODEST_HEADER_VIEW(priv->header_view));
        }
 
+       /* Check if all messages are marked to be deleted */
+       all_marked_as_deleted = modest_header_view_is_empty (header_view);
+       folder_empty = folder_empty || all_marked_as_deleted ;
+       
        /* Set contents style of headers view */
        if (folder_empty)  {
                modest_main_window_set_contents_style (main_window,
index fbc1895..41b70d1 100644 (file)
@@ -445,9 +445,9 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
                if (TNY_IS_CAMEL_IMAP_FOLDER (folder))
 /*                     tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* FALSE --> don't expunge *\/ */
                        tny_folder_sync (folder, FALSE, &err); /* FALSE --> don't expunge */
-/*             else if (TNY_IS_CAMEL_POP_FOLDER (folder)) */
+               else if (TNY_IS_CAMEL_POP_FOLDER (folder))
 /*                     tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* TRUE --> dont expunge *\/ */
-/*                     tny_folder_sync (folder, TRUE, &err); /\* TRUE --> expunge *\/ */
+                       tny_folder_sync (folder, TRUE, &err); /* TRUE --> expunge */
                else
                        /* local folders */
 /*                     tny_folder_sync_async(folder, TRUE, NULL, NULL, NULL); /\* TRUE --> expunge *\/ */
@@ -1412,21 +1412,30 @@ new_messages_arrived (ModestMailOperation *self,
                      gpointer user_data)
 {
        ModestMainWindow *win = NULL;
+       GtkWidget *folder_view = NULL;
+       TnyFolderStore *folder = NULL;
        gboolean folder_empty = FALSE;
 
        g_return_if_fail (MODEST_IS_MAIN_WINDOW (user_data));
        win = MODEST_MAIN_WINDOW (user_data);
 
-       if (new_messages == 0)
-               return;
-       
        /* Set contents style of headers view */
-       folder_empty = modest_main_window_get_style (win);
-       if (folder_empty) {
-               modest_main_window_set_contents_style (win,
+       if (modest_main_window_get_contents_style (win) == MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY) {
+               folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win), 
+                                                                  MODEST_WIDGET_TYPE_FOLDER_VIEW);
+               folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));             
+               
+
+               folder_empty = (tny_folder_get_all_count (TNY_FOLDER (folder)) == 0);
+               
+               if (!folder_empty)
+                       modest_main_window_set_contents_style (win,
                                                       MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
        }       
 
+       /* Notify new messages have been downloaded */
+       if (new_messages > 0)
+               modest_platform_on_new_msg ();
 }
 
 /*
index edf41c2..c1d1587 100644 (file)
@@ -76,6 +76,7 @@ static DimmedState *
 _define_main_window_dimming_state (ModestMainWindow *window)
 {
        DimmedState *state = NULL;
+       GtkWidget *focused_widget = NULL;
        GtkWidget *header_view = NULL;
        TnyList *selected_headers = NULL;
        TnyIterator *iter = NULL;
@@ -109,8 +110,16 @@ _define_main_window_dimming_state (ModestMainWindow *window)
        state->all_has_attachments = FALSE;
        state->sent_in_progress = FALSE;
 
+       /* Get focused widget */
+       focused_widget = gtk_window_get_focus (GTK_WINDOW (window));
+       if (MODEST_IS_FOLDER_VIEW (focused_widget)) {
+               state->n_selected++;
+               return state;
+       }
+       
        /* Get header view and selected headers */
-       header_view = modest_main_window_get_child_widget (window, MODEST_WIDGET_TYPE_HEADER_VIEW);
+/*     header_view = modest_main_window_get_child_widget (window, MODEST_WIDGET_TYPE_HEADER_VIEW); */
+       header_view = focused_widget;
        selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
        if (!selected_headers) 
                return state;
index 20669ba..a0454e7 100644 (file)
@@ -116,6 +116,8 @@ struct _ModestHeaderViewPrivate {
 
        gulong  selection_changed_handler;
        gulong  acc_removed_handler;
+
+       gboolean empty;
 };
 
 typedef struct _HeadersCountChangedHelper HeadersCountChangedHelper;
@@ -508,6 +510,8 @@ modest_header_view_init (ModestHeaderView *obj)
        priv->monitor        = NULL;
        priv->observers_lock = g_mutex_new ();
 
+       priv->empty  = TRUE;
+
        priv->clipboard = modest_runtime_get_email_clipboard ();
        priv->hidding_ids = NULL;
        priv->n_selected = 0;
@@ -795,12 +799,12 @@ modest_header_view_get_columns (ModestHeaderView *self)
 }
 
 
-gboolean
-modest_header_view_is_empty (ModestHeaderView *self)
-{
-       g_return_val_if_fail (self, FALSE);
-       return FALSE; /* FIXME */
-}
+/* gboolean */
+/* modest_header_view_is_empty (ModestHeaderView *self) */
+/* { */
+/*     g_return_val_if_fail (self, FALSE); */
+/*     return FALSE; /\* FIXME *\/ */
+/* } */
 
 
 gboolean
@@ -1508,7 +1512,7 @@ static void
 folder_monitor_update (TnyFolderObserver *self, 
                       TnyFolderChange *change)
 {
-       ModestHeaderViewPrivate *priv;
+       ModestHeaderViewPrivate *priv = NULL;
        TnyFolderChangeChanged changed;
        HeadersCountChangedHelper *helper = NULL;
 
@@ -1535,6 +1539,16 @@ folder_monitor_update (TnyFolderObserver *self,
        }       
 }
 
+gboolean
+modest_header_view_is_empty (ModestHeaderView *self)
+{
+       ModestHeaderViewPrivate *priv = NULL;
+               
+       priv = MODEST_HEADER_VIEW_GET_PRIVATE (MODEST_HEADER_VIEW (self));
+
+       return priv->empty;
+}
+
 void
 modest_header_view_clear (ModestHeaderView *self)
 {
@@ -1648,8 +1662,10 @@ filter_row (GtkTreeModel *model,
                visible = !found;
        }
 
-       /* Free */
  frees:
+       priv->empty = priv->empty && !visible;
+       
+       /* Free */
        if (header)
                g_object_unref (header);
        g_free(id);
@@ -1660,7 +1676,7 @@ filter_row (GtkTreeModel *model,
 static void
 _clear_hidding_filter (ModestHeaderView *header_view) 
 {
-       ModestHeaderViewPrivate *priv;
+       ModestHeaderViewPrivate *priv = NULL;
        guint i;
        
        g_return_if_fail (MODEST_IS_HEADER_VIEW (header_view)); 
@@ -1676,9 +1692,13 @@ _clear_hidding_filter (ModestHeaderView *header_view)
 void 
 modest_header_view_refilter (ModestHeaderView *header_view)
 {
-       GtkTreeModel *model;
+       GtkTreeModel *model = NULL;
+       ModestHeaderViewPrivate *priv = NULL;
 
        g_return_if_fail (MODEST_IS_HEADER_VIEW (header_view));
+       priv = MODEST_HEADER_VIEW_GET_PRIVATE(header_view);
+
+       priv->empty = TRUE;
 
        /* Hide cut headers */
        model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));