X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-folder-view.c;h=c65a7a9bb51358d760f38764c38b10c018cb93fe;hp=9f27641de9c2c011110870320378ea5d009d45bb;hb=3678825a6d664c48b705f3de78da181ec5d8f9c9;hpb=b70734073cfc2ac74c63fa8e299d97cab7df7962 diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index 9f27641..c65a7a9 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -80,6 +80,11 @@ static void modest_folder_view_set_account_store (TnyAccountStoreView *s static void on_selection_changed (GtkTreeSelection *sel, gpointer data); +static void on_row_activated (GtkTreeView *treeview, + GtkTreePath *path, + GtkTreeViewColumn *column, + gpointer userdata); + static void on_account_removed (TnyAccountStore *self, TnyAccount *account, gpointer user_data); @@ -158,6 +163,7 @@ static void on_display_name_changed (ModestAccountMgr *self, enum { FOLDER_SELECTION_CHANGED_SIGNAL, FOLDER_DISPLAY_NAME_CHANGED_SIGNAL, + FOLDER_ACTIVATED_SIGNAL, LAST_SIGNAL }; @@ -188,6 +194,7 @@ struct _ModestFolderViewPrivate { gchar *local_account_name; gchar *visible_account_id; ModestFolderViewStyle style; + ModestFolderViewCellStyle cell_style; gboolean reselect; /* we use this to force a reselection of the INBOX */ gboolean show_non_move; @@ -279,8 +286,23 @@ modest_folder_view_class_init (ModestFolderViewClass *klass) g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); + signals[FOLDER_ACTIVATED_SIGNAL] = + g_signal_new ("folder_activated", + G_TYPE_FROM_CLASS (gobject_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (ModestFolderViewClass, + folder_activated), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, G_TYPE_POINTER); + treeview_class->select_cursor_parent = NULL; +#ifdef MODEST_TOOLKIT_HILDON2 + gtk_rc_parse_string ("class \"ModestFolderView\" style \"fremantle-touchlist\""); + +#endif + } /* Simplify checks for NULLs: */ @@ -394,6 +416,7 @@ text_cell_data (GtkTreeViewColumn *column, if (type != TNY_FOLDER_TYPE_ROOT) { gint number = 0; + gboolean drafts; if (modest_tny_folder_is_local_folder (TNY_FOLDER (instance)) || modest_tny_folder_is_memory_card_folder (TNY_FOLDER (instance))) { @@ -411,30 +434,44 @@ text_cell_data (GtkTreeViewColumn *column, } } + if (type == TNY_FOLDER_TYPE_INBOX) { + g_free (fname); + fname = g_strdup (_("mcen_me_folder_inbox")); + } + /* note: we cannot reliably get the counts from the tree model, we need * to use explicit calls on tny_folder for some reason. */ /* Select the number to show: the unread or unsent messages. in case of outbox/drafts, show all */ if ((type == TNY_FOLDER_TYPE_DRAFTS) || (type == TNY_FOLDER_TYPE_OUTBOX) || - (type == TNY_FOLDER_TYPE_MERGE)) /* _OUTBOX actually returns _MERGE... */ + (type == TNY_FOLDER_TYPE_MERGE)) { /* _OUTBOX actually returns _MERGE... */ number = tny_folder_get_all_count (TNY_FOLDER(instance)); - else + drafts = TRUE; + } else { number = tny_folder_get_unread_count (TNY_FOLDER(instance)); + drafts = FALSE; + } - /* Use bold font style if there are unread or unset messages */ - if (number > 0) { - if (type == TNY_FOLDER_TYPE_INBOX) - item_name = g_strdup_printf ("%s (%d)", _("mcen_me_folder_inbox"), number); - else - item_name = g_strdup_printf ("%s (%d)", fname, number); - item_weight = 800; + if (priv->cell_style == MODEST_FOLDER_VIEW_CELL_STYLE_COMPACT) { + gchar * substring; + if (number > 0) { + substring = g_strdup_printf (drafts?"TODO:%d messages":"TODO:%d new messages", number); + } else { + substring = g_strdup (""); + } + item_name = g_strdup_printf ("%s\n%s", + fname, substring); + g_free (substring); } else { - if (type == TNY_FOLDER_TYPE_INBOX) - item_name = g_strdup (_("mcen_me_folder_inbox")); - else + /* Use bold font style if there are unread or unset messages */ + if (number > 0) { + item_name = g_strdup_printf ("%s (%d)", fname, number); + item_weight = 800; + } else { item_name = g_strdup (fname); - item_weight = 400; + item_weight = 400; + } } } else if (TNY_IS_ACCOUNT (instance)) { @@ -460,7 +497,7 @@ text_cell_data (GtkTreeViewColumn *column, if (item_name && item_weight) { /* Set the name in the treeview cell: */ - g_object_set (rendobj,"text", item_name, "weight", item_weight, NULL); + g_object_set (rendobj,"markup", item_name, "weight", item_weight, NULL); /* Notify display name observers */ /* TODO: What listens for this signal, and how can it use only the new name? */ @@ -713,8 +750,6 @@ icon_cell_data (GtkTreeViewColumn *column, } free_pixbufs (pixbufs); - - return; } static void @@ -845,6 +880,13 @@ modest_folder_view_finalize (GObject *obj) priv->account_store = NULL; } + if (g_signal_handler_is_connected (modest_runtime_get_account_mgr (), + priv->display_name_changed_signal)) { + g_signal_handler_disconnect (modest_runtime_get_account_mgr (), + priv->display_name_changed_signal); + priv->display_name_changed_signal = 0; + } + if (priv->query) { g_object_unref (G_OBJECT (priv->query)); priv->query = NULL; @@ -1235,7 +1277,11 @@ modest_folder_view_new (TnyFolderStoreQuery *query) ModestFolderViewPrivate *priv; GtkTreeSelection *sel; - self = G_OBJECT (g_object_new (MODEST_TYPE_FOLDER_VIEW, NULL)); + self = G_OBJECT (g_object_new (MODEST_TYPE_FOLDER_VIEW, +#ifdef MODEST_TOOLKIT_HILDON2 + "hildon-ui-mode", HILDON_UI_MODE_NORMAL, +#endif + NULL)); priv = MODEST_FOLDER_VIEW_GET_PRIVATE (self); if (query) @@ -1245,6 +1291,8 @@ modest_folder_view_new (TnyFolderStoreQuery *query) priv->changed_signal = g_signal_connect (sel, "changed", G_CALLBACK (on_selection_changed), self); + g_signal_connect (self, "row-activated", G_CALLBACK (on_row_activated), self); + g_signal_connect (self, "expose-event", G_CALLBACK (modest_folder_view_on_map), NULL); return GTK_WIDGET(self); @@ -1501,6 +1549,40 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data) } } +static void +on_row_activated (GtkTreeView *treeview, + GtkTreePath *treepath, + GtkTreeViewColumn *column, + gpointer user_data) +{ + GtkTreeModel *model = NULL; + TnyFolderStore *folder = NULL; + GtkTreeIter iter; + ModestFolderView *self = NULL; + ModestFolderViewPrivate *priv = NULL; + + g_return_if_fail (treeview); + g_return_if_fail (user_data); + + self = MODEST_FOLDER_VIEW (user_data); + priv = MODEST_FOLDER_VIEW_GET_PRIVATE(user_data); + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (self)); + + if (!gtk_tree_model_get_iter (model, &iter, treepath)) + return; + + gtk_tree_model_get (model, &iter, + TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, &folder, + -1); + + g_signal_emit (G_OBJECT(self), + signals[FOLDER_ACTIVATED_SIGNAL], + 0, folder); + + g_object_unref (folder); +} + TnyFolderStore * modest_folder_view_get_selected (ModestFolderView *self) { @@ -1819,6 +1901,12 @@ drag_and_drop_from_header_view (GtkTreeModel *source_model, } g_strfreev (uris); + /* This could happen ig we perform a d&d very quickly over the + same row that row could dissapear because message is + transferred */ + if (!TNY_IS_FOLDER (src_folder)) + goto cleanup; + /* Get the target folder */ gtk_tree_model_get_iter (dest_model, &dest_iter, dest_row); gtk_tree_model_get (dest_model, &dest_iter, @@ -2011,6 +2099,18 @@ drag_and_drop_from_folder_view (GtkTreeModel *source_model, /* Check if the drag is possible */ if (forbidden || !gtk_tree_path_compare (helper->source_row, dest_row)) { + /* Show error */ + modest_platform_run_information_dialog ((GtkWindow *) win, + _("mail_in_ui_folder_move_target_error"), + FALSE); + /* Restore the previous selection */ + folder = tree_path_to_folder (source_model, helper->source_row); + if (folder) { + if (TNY_IS_FOLDER (folder)) + modest_folder_view_select_folder (helper->folder_view, + TNY_FOLDER (folder), FALSE); + g_object_unref (folder); + } dnd_helper_destroyer (helper); return; } @@ -2309,6 +2409,9 @@ setup_drag_and_drop (GtkTreeView *self) /* Set up the folder view as a dnd destination. Set only the highlight flag, otherwise gtk will have a different behaviour */ +#ifdef MODEST_TOOLKIT_HILDON2 + return; +#endif gtk_drag_dest_set (GTK_WIDGET (self), GTK_DEST_DEFAULT_HIGHLIGHT, folder_view_drag_types, @@ -2865,3 +2968,17 @@ on_display_name_changed (ModestAccountMgr *mgr, gtk_widget_queue_draw (GTK_WIDGET (self)); #endif } + +void +modest_folder_view_set_cell_style (ModestFolderView *self, + ModestFolderViewCellStyle cell_style) +{ + ModestFolderViewPrivate *priv = NULL; + + g_return_if_fail (MODEST_IS_FOLDER_VIEW (self)); + priv = MODEST_FOLDER_VIEW_GET_PRIVATE (self); + + priv->cell_style = cell_style; + + gtk_widget_queue_draw (GTK_WIDGET (self)); +}