the local OUTBOX folder */
if (type == TNY_FOLDER_TYPE_NORMAL ||
type == TNY_FOLDER_TYPE_UNKNOWN) {
- type = modest_tny_folder_guess_folder_type (TNY_FOLDER (instance));
+ type = modest_tny_folder_guess_folder_type (TNY_FOLDER (instance));
}
switch (type) {
+ case TNY_FOLDER_TYPE_INVALID:
+ g_warning ("%s: BUG: TNY_FOLDER_TYPE_INVALID", __FUNCTION__);
+ break;
+
case TNY_FOLDER_TYPE_ROOT:
if (TNY_IS_ACCOUNT (instance)) {
icon_cell_data, treeview, NULL);
renderer = gtk_cell_renderer_text_new();
- gtk_tree_view_column_pack_start (column, renderer, FALSE);
+ g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END,
+ "ellipsize-set", TRUE, NULL);
+ gtk_tree_view_column_pack_start (column, renderer, TRUE);
gtk_tree_view_column_set_cell_data_func(column, renderer,
text_cell_data, treeview, NULL);
g_signal_connect (account, "connection_status_changed",
G_CALLBACK (on_connection_status_changed),
MODEST_FOLDER_VIEW (user_data));
+
+ /* Refilter the model */
+ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model));
}
/* Insert the account in the model */
tny_list_append (TNY_LIST (gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sort_model))),
G_OBJECT (tny_account));
+
+ /* Refilter the model */
+ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model));
}
ModestFolderViewPrivate *priv;
GtkTreeModel *sort_model, *filter_model;
GtkTreeSelection *sel = NULL;
- TnyAccount *folder_selected_account;
/* Ignore transport account removals, we're not showing them
in the folder view */
MODEST_CONF_FOLDER_VIEW_KEY);
}
+ /* Refilter the model */
+ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model));
+
/* Select the first INBOX if the currently selected folder
belongs to the account that is being deleted */
- folder_selected_account = (TNY_IS_FOLDER (priv->cur_folder_store)) ?
- modest_tny_folder_get_account (TNY_FOLDER (priv->cur_folder_store)) :
- TNY_ACCOUNT (g_object_ref (priv->cur_folder_store));
- if (account == folder_selected_account)
- modest_folder_view_select_first_inbox_or_local (self);
- g_object_unref (folder_selected_account);
+ if (priv->cur_folder_store) {
+ TnyAccount *folder_selected_account;
+
+ folder_selected_account = (TNY_IS_FOLDER (priv->cur_folder_store)) ?
+ modest_tny_folder_get_account (TNY_FOLDER (priv->cur_folder_store)) :
+ TNY_ACCOUNT (g_object_ref (priv->cur_folder_store));
+ if (account == folder_selected_account)
+ modest_folder_view_select_first_inbox_or_local (self);
+ g_object_unref (folder_selected_account);
+ }
}
void
case TNY_FOLDER_TYPE_UNKNOWN:
case TNY_FOLDER_TYPE_NORMAL:
type = modest_tny_folder_guess_folder_type(TNY_FOLDER(instance));
+ if (type == TNY_FOLDER_TYPE_INVALID)
+ g_warning ("%s: BUG: TNY_FOLDER_TYPE_INVALID", __FUNCTION__);
+
if (type == TNY_FOLDER_TYPE_OUTBOX ||
type == TNY_FOLDER_TYPE_SENT
|| type == TNY_FOLDER_TYPE_DRAFTS)
TnyAccountStore *account_store)
{
ModestFolderViewPrivate *priv;
- GtkTreeModel *model /* , *old_model */;
- /* TnyAccount *local_account; */
- TnyList *model_as_list;
+ GtkTreeModel *model /* , *old_model */;
+ GtkTreeModel *filter_model = NULL, *sortable = NULL;
g_return_val_if_fail (MODEST_IS_FOLDER_VIEW (self), FALSE);
g_return_val_if_fail (account_store, FALSE);
}
/* FIXME: the local accounts are not shown when the query
- selects only the subscribed folders. */
-/* model = tny_gtk_folder_store_tree_model_new (TRUE, priv->query); */
+ selects only the subscribed folders */
model = tny_gtk_folder_store_tree_model_new (NULL);
-
- /* Deal with the model via its TnyList Interface,
- * filling the TnyList via a get_accounts() call: */
- model_as_list = TNY_LIST(model);
/* Get the accounts: */
tny_account_store_get_accounts (TNY_ACCOUNT_STORE(account_store),
- model_as_list,
+ TNY_LIST (model),
TNY_ACCOUNT_STORE_STORE_ACCOUNTS);
- g_object_unref (model_as_list);
- model_as_list = NULL;
-
- GtkTreeModel *filter_model = NULL, *sortable = NULL;
sortable = gtk_tree_model_sort_new_with_model (model);
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sortable),
if ((parent_type == TNY_FOLDER_TYPE_ROOT) &&
TNY_IS_ACCOUNT (parent_folder) &&
modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (parent_folder))) {
- cmp1 = get_cmp_subfolder_type_pos (modest_tny_folder_get_local_or_mmc_folder_type (TNY_FOLDER (folder1)));
- cmp2 = get_cmp_subfolder_type_pos (modest_tny_folder_get_local_or_mmc_folder_type (TNY_FOLDER (folder2)));
+ cmp1 = get_cmp_subfolder_type_pos (modest_tny_folder_get_local_or_mmc_folder_type
+ (TNY_FOLDER (folder1)));
+ cmp2 = get_cmp_subfolder_type_pos (modest_tny_folder_get_local_or_mmc_folder_type
+ (TNY_FOLDER (folder2)));
}
g_object_unref (parent_folder);
}
-
+
/* if they are not local folders */
if (cmp1 == cmp2) {
cmp1 = get_cmp_subfolder_type_pos (tny_folder_get_folder_type (TNY_FOLDER (folder1)));
GtkTreePath *source_row;
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
- gtk_tree_selection_get_selected (selection, &model, &iter);
- source_row = gtk_tree_model_get_path (model, &iter);
-
- gtk_tree_set_row_drag_data (selection_data,
- model,
- source_row);
+ if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
- gtk_tree_path_free (source_row);
+ source_row = gtk_tree_model_get_path (model, &iter);
+ gtk_tree_set_row_drag_data (selection_data,
+ model,
+ source_row);
+
+ gtk_tree_path_free (source_row);
+ }
}
typedef struct _DndHelper {
/* get the folder for the row the treepath refers to. */
/* folder must be unref'd */
-static TnyFolder*
+static TnyFolderStore *
tree_path_to_folder (GtkTreeModel *model, GtkTreePath *path)
{
GtkTreeIter iter;
- TnyFolder *folder = NULL;
+ TnyFolderStore *folder = NULL;
if (gtk_tree_model_get_iter (model,&iter, path))
gtk_tree_model_get (model, &iter,
{
TnyList *headers = NULL;
TnyFolder *folder = NULL;
+ TnyFolderType folder_type;
ModestMailOperation *mail_op = NULL;
GtkTreeIter source_iter, dest_iter;
ModestWindowMgr *mgr = NULL;
gtk_tree_model_get (dest_model, &dest_iter,
TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,
&folder, -1);
-
+
+ if (!folder || !TNY_IS_FOLDER(folder)) {
+/* g_warning ("%s: not a valid target folder (%p)", __FUNCTION__, folder); */
+ goto cleanup;
+ }
+
+ folder_type = modest_tny_folder_guess_folder_type (folder);
+ if (folder_type == TNY_FOLDER_TYPE_INVALID) {
+/* g_warning ("%s: invalid target folder", __FUNCTION__); */
+ goto cleanup; /* cannot move messages there */
+ }
+
+ if (modest_tny_folder_get_rules((TNY_FOLDER(folder))) & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE) {
+/* g_warning ("folder not writable"); */
+ goto cleanup; /* verboten! */
+ }
+
/* Ask for confirmation to move */
- main_win = modest_window_mgr_get_main_window(mgr);
- response = modest_ui_actions_msgs_move_to_confirmation (GTK_WINDOW(main_win), folder,
+ main_win = modest_window_mgr_get_main_window (mgr, FALSE); /* don't create */
+ if (!main_win) {
+ g_warning ("%s: BUG: no main window found", __FUNCTION__);
+ goto cleanup;
+ }
+
+ response = modest_ui_actions_msgs_move_to_confirmation (main_win, folder,
TRUE, headers);
if (response == GTK_RESPONSE_CANCEL)
goto cleanup;
/* Transfer messages */
- mail_op = modest_mail_operation_new_with_error_handling (NULL,
+ mail_op = modest_mail_operation_new_with_error_handling ((GObject *) main_win,
modest_ui_actions_move_folder_error_handler,
- NULL);
+ NULL, NULL);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
ModestMailOperation *mail_op = NULL;
GtkTreeIter dest_iter, iter;
TnyFolderStore *dest_folder = NULL;
- TnyFolder *folder = NULL;
+ TnyFolderStore *folder = NULL;
gboolean forbidden = FALSE;
+ ModestWindow *win;
+ win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(), FALSE); /* don't create */
+ if (!win) {
+ g_warning ("%s: BUG: no main window", __FUNCTION__);
+ return;
+ }
+
if (!forbidden) {
/* check the folder rules for the destination */
folder = tree_path_to_folder (dest_model, dest_row);
if (TNY_IS_FOLDER(folder)) {
ModestTnyFolderRules rules =
- modest_tny_folder_get_rules (folder);
+ modest_tny_folder_get_rules (TNY_FOLDER (folder));
forbidden = rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE;
} else if (TNY_IS_FOLDER_STORE(folder)) {
/* enable local root as destination for folders */
folder = tree_path_to_folder (source_model, helper->source_row);
if (TNY_IS_FOLDER(folder)) {
ModestTnyFolderRules rules =
- modest_tny_folder_get_rules (folder);
+ modest_tny_folder_get_rules (TNY_FOLDER (folder));
forbidden = rules & MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE;
} else
forbidden = TRUE;
/* Offer the connection dialog if necessary, for the destination parent folder and source folder: */
if (modest_platform_connect_and_wait_if_network_folderstore (NULL, dest_folder) &&
modest_platform_connect_and_wait_if_network_folderstore (NULL, TNY_FOLDER_STORE (folder))) {
- ModestWindowMgr *mgr = modest_runtime_get_window_mgr ();
-
+
/* Do the mail operation */
- mail_op =
- modest_mail_operation_new_with_error_handling (G_OBJECT (modest_window_mgr_get_main_window (mgr)),
- modest_ui_actions_move_folder_error_handler,
- folder);
+ mail_op = modest_mail_operation_new_with_error_handling ((GObject *) win,
+ modest_ui_actions_move_folder_error_handler,
+ folder, NULL);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
modest_mail_operation_xfer_folder (mail_op,
- folder,
+ TNY_FOLDER (folder),
dest_folder,
helper->delete_source,
xfer_cb,
ModestFolderViewPrivate *priv;
GdkDragAction suggested_action;
gboolean valid_location = FALSE;
- TnyFolder *folder;
+ TnyFolderStore *folder;
priv = MODEST_FOLDER_VIEW_GET_PRIVATE (widget);
/* Check that the destination folder is writable */
dest_model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
folder = tree_path_to_folder (dest_model, dest_row);
- if (folder) {
- ModestTnyFolderRules rules = modest_tny_folder_get_rules(folder);
+ if (folder && TNY_IS_FOLDER (folder)) {
+ ModestTnyFolderRules rules = modest_tny_folder_get_rules(TNY_FOLDER (folder));
if (rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE) {
valid_location = FALSE;
goto out;
}
- g_object_unref (folder);
}
+ g_object_unref (folder);
/* Expand the selected row after 1/2 second */
if (!gtk_tree_view_row_expanded (GTK_TREE_VIEW (widget), dest_row)) {
expand_root_items (self);
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (self));
- gtk_tree_model_get_iter_first (model, &iter);
+ if (!gtk_tree_model_get_iter_first (model, &iter)) {
+ g_warning ("%s: model is empty", __FUNCTION__);
+ return;
+ }
if (find_inbox_iter (model, &iter, &inbox_iter))
path = gtk_tree_model_get_path (model, &inbox_iter);
if (!model)
return FALSE;
-
- gtk_tree_model_get_iter_first (model, &iter);
+ if (!gtk_tree_model_get_iter_first (model, &iter)) {
+ g_warning ("%s: model is empty", __FUNCTION__);
+ return FALSE;
+ }
+
if (find_folder_iter (model, &iter, &folder_iter, folder)) {
GtkTreePath *path;