X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-header-view.c;h=44990085f6913dbeddc384f7f716d10cf3488028;hp=e90e1c61a3264c0ba4812c8b6f3a979e49c1973a;hb=acb49abcabb4f4104693a02d6b5814a3f50ab036;hpb=2f6a98cf9bcc141115a9d7f480a1f4f4f7bd7285 diff --git a/src/widgets/modest-header-view.c b/src/widgets/modest-header-view.c index e90e1c6..4499008 100644 --- a/src/widgets/modest-header-view.c +++ b/src/widgets/modest-header-view.c @@ -40,7 +40,7 @@ #include #include #include - +#include #include #include #include @@ -150,8 +150,10 @@ struct _ModestHeaderViewPrivate { gulong selection_changed_handler; gulong acc_removed_handler; - HeaderViewStatus status; GList *drag_begin_cached_selected_rows; + + HeaderViewStatus status; + guint status_timeout; }; typedef struct _HeadersCountChangedHelper HeadersCountChangedHelper; @@ -558,6 +560,7 @@ modest_header_view_init (ModestHeaderView *obj) priv->observers_lock = g_mutex_new (); priv->status = HEADER_VIEW_INIT; + priv->status_timeout = 0; priv->observer_list_lock = g_mutex_new(); priv->observer_list = NULL; @@ -1203,6 +1206,9 @@ modest_header_view_set_folder (ModestHeaderView *self, } if (priv->folder) { + if (priv->status_timeout) + g_source_remove (priv->status_timeout); + g_mutex_lock (priv->observers_lock); tny_folder_remove_observer (priv->folder, TNY_FOLDER_OBSERVER (self)); g_object_unref (priv->folder); @@ -1294,7 +1300,12 @@ on_header_row_activated (GtkTreeView *treeview, GtkTreePath *path, /* Dont open DELETED messages */ if (flags & TNY_HEADER_FLAG_DELETED) { - modest_platform_information_banner (NULL, NULL, _("mcen_ib_message_already_deleted")); + GtkWidget *win; + gchar *msg; + win = gtk_widget_get_ancestor (GTK_WIDGET (treeview), GTK_TYPE_WINDOW); + msg = modest_ui_actions_get_msg_already_deleted_error_msg (MODEST_WINDOW (win)); + modest_platform_information_banner (NULL, NULL, msg); + g_free (msg); goto frees; } @@ -1872,7 +1883,32 @@ _clipboard_set_selected_data (ModestHeaderView *header_view, g_object_unref (headers); } +typedef struct { + ModestHeaderView *self; + TnyFolder *folder; +} NotifyFilterInfo; + +static gboolean +notify_filter_change (gpointer data) +{ + NotifyFilterInfo *info = (NotifyFilterInfo *) data; + + g_signal_emit (info->self, + signals[MSG_COUNT_CHANGED_SIGNAL], + 0, info->folder, NULL); + + return FALSE; +} + +static void +notify_filter_change_destroy (gpointer data) +{ + NotifyFilterInfo *info = (NotifyFilterInfo *) data; + g_object_unref (info->self); + g_object_unref (info->folder); + g_slice_free (NotifyFilterInfo, info); +} static gboolean filter_row (GtkTreeModel *model, @@ -1887,7 +1923,8 @@ filter_row (GtkTreeModel *model, gboolean visible = TRUE; gboolean found = FALSE; GValue value = {0,}; - + HeaderViewStatus old_status; + g_return_val_if_fail (MODEST_IS_HEADER_VIEW (user_data), FALSE); priv = MODEST_HEADER_VIEW_GET_PRIVATE (user_data); @@ -1899,8 +1936,9 @@ filter_row (GtkTreeModel *model, header = (TnyHeader *) g_value_get_object (&value); g_value_unset (&value); - /* Hide mark as deleted heders */ - if (flags & TNY_HEADER_FLAG_DELETED) { + /* Hide deleted and mark as deleted heders */ + if (flags & TNY_HEADER_FLAG_DELETED || + flags & TNY_HEADER_FLAG_EXPUNGED) { visible = FALSE; goto frees; } @@ -1929,8 +1967,23 @@ filter_row (GtkTreeModel *model, } frees: + old_status = priv->status; priv->status = ((gboolean) priv->status) && !visible; - + if (priv->status != old_status) { + NotifyFilterInfo *info; + + if (priv->status_timeout) + g_source_remove (priv->status_timeout); + + info = g_slice_new0 (NotifyFilterInfo); + info->self = g_object_ref (G_OBJECT (user_data)); + info->folder = tny_header_get_folder (header); + priv->status_timeout = g_timeout_add_full (G_PRIORITY_DEFAULT, 1000, + notify_filter_change, + info, + notify_filter_change_destroy); + } + return visible; }