2007-08-16 Murray Cumming <murrayc@murrayc.com>
[modest] / src / widgets / modest-header-view.c
index b95dc48..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;
 
@@ -1521,11 +1525,6 @@ folder_monitor_update (TnyFolderObserver *self,
        if (tny_folder_change_get_folder (change) != priv->folder)
                return;
 
-       /* Check header removed  (hide marked as DELETED headers) */
-/*     if (changed & TNY_FOLDER_CHANGE_CHANGED_EXPUNGED_HEADERS) { */
-/*             modest_header_view_refilter (MODEST_HEADER_VIEW(self)); */
-/*     } */
-
        /* Check folder count */
        if ((changed & TNY_FOLDER_CHANGE_CHANGED_ADDED_HEADERS) ||
            (changed & TNY_FOLDER_CHANGE_CHANGED_EXPUNGED_HEADERS)) {
@@ -1540,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)
 {
@@ -1653,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);
@@ -1665,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)); 
@@ -1681,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));