X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmodest-ui-dimming-rules.c;h=c5ad4b99eb9a4be9e63e5d3b29bdb4a276ed5a67;hb=6e565d66a81f50c1c2afa04635dc84a4f5d82a62;hp=c54930bb5a6cf4e4f7b096e21b32945897ac69d7;hpb=0402b531c7d5f035c64428c20134cb0491fa17cf;p=modest diff --git a/src/modest-ui-dimming-rules.c b/src/modest-ui-dimming-rules.c index c54930b..c5ad4b9 100644 --- a/src/modest-ui-dimming-rules.c +++ b/src/modest-ui-dimming-rules.c @@ -50,27 +50,26 @@ static gboolean _invalid_attach_selected (ModestWindow *win, static gboolean _purged_attach_selected (ModestWindow *win, gboolean all, ModestDimmingRule *rule); static gboolean _clipboard_is_empty (ModestWindow *win); static gboolean _invalid_clipboard_selected (ModestWindow *win, ModestDimmingRule *rule); -/* static gboolean _already_opened_msg (ModestWindow *win, guint *n_messages); */ -/* static gboolean _selected_msg_marked_as (ModestMainWindow *win, TnyHeaderFlags mask, gboolean opposite, gboolean all); */ -static gboolean _selected_folder_not_writeable (ModestMainWindow *win); -static gboolean _selected_folder_is_snd_level (ModestMainWindow *win); +static gboolean _selected_folder_not_writeable (ModestMainWindow *win, gboolean for_paste); +static gboolean _selected_folder_not_moveable (ModestMainWindow *win); +static gboolean _selected_folder_not_renameable (ModestMainWindow *win); +static gboolean _selected_folder_not_deletable (ModestMainWindow *win); static gboolean _selected_folder_is_any_of_type (ModestWindow *win, TnyFolderType types[], guint ntypes); static gboolean _selected_folder_is_root_or_inbox (ModestMainWindow *win); static gboolean _selected_folder_is_MMC_or_POP_root (ModestMainWindow *win); static gboolean _selected_folder_is_root (ModestMainWindow *win); static gboolean _header_view_is_all_selected (ModestMainWindow *win); static gboolean _selected_folder_is_empty (ModestMainWindow *win); +static gboolean _folder_view_has_focus (ModestWindow *win); static gboolean _selected_folder_is_same_as_source (ModestWindow *win); static gboolean _msg_download_in_progress (ModestMsgViewWindow *win); static gboolean _msg_download_completed (ModestMainWindow *win); static gboolean _selected_msg_sent_in_progress (ModestWindow *win); static gboolean _sending_in_progress (ModestWindow *win); -/* static gboolean _message_is_marked_as_deleted (ModestMsgViewWindow *win); */ -/* static gboolean _selected_message_is_marked_as_deleted (ModestMainWindow *win); */ static gboolean _invalid_folder_for_purge (ModestWindow *win, ModestDimmingRule *rule); static gboolean _transfer_mode_enabled (ModestWindow *win); - -static void fill_list_of_caches (gpointer key, gpointer value, gpointer userdata); +static gboolean _selected_folder_has_subfolder_with_same_name (ModestWindow *win); +static void fill_list_of_caches (gpointer key, gpointer value, gpointer userdata); static DimmedState * @@ -79,6 +78,7 @@ _define_main_window_dimming_state (ModestMainWindow *window) DimmedState *state = NULL; GtkWidget *focused_widget = NULL; GtkWidget *header_view = NULL; + GtkTreeModel *model = NULL; TnyList *selected_headers = NULL; TnyIterator *iter = NULL; TnyHeader *header = NULL; @@ -110,6 +110,7 @@ _define_main_window_dimming_state (ModestMainWindow *window) state->any_has_attachments = FALSE; state->all_has_attachments = FALSE; state->sent_in_progress = FALSE; + state->all_selected = FALSE; /* Get focused widget */ focused_widget = gtk_window_get_focus (GTK_WINDOW (window)); @@ -188,6 +189,15 @@ _define_main_window_dimming_state (ModestMainWindow *window) g_object_unref (header); } + /* check if all the headers are selected or not */ + model = gtk_tree_view_get_model(GTK_TREE_VIEW(header_view)); + if (model != NULL){ + gint count; + count = gtk_tree_model_iter_n_children(model, NULL); + if(state->n_selected == count != 0) + state->all_selected = TRUE; + } + /* Free */ g_free(msg_uid); g_object_unref(selected_headers); @@ -311,44 +321,30 @@ modest_ui_dimming_rules_on_new_msg (ModestWindow *win, gpointer user_data) ModestDimmingRule *rule = NULL; gboolean dimmed = FALSE; - g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE); + g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE); g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE); rule = MODEST_DIMMING_RULE (user_data); /* Check dimmed rule */ - if (!dimmed) { - dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win)); - if (dimmed) - modest_dimming_rule_set_notification (rule, ""); + if (MODEST_IS_MSG_VIEW_WINDOW(win)) { + if (!dimmed) { + dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win)); + if (dimmed) + modest_dimming_rule_set_notification (rule, ""); + } + } else if (MODEST_IS_MAIN_WINDOW(win)) { + if (!dimmed) { + dimmed = !modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), + TRUE); + if (dimmed) + modest_dimming_rule_set_notification (rule, _("mcen_nc_no_email_acnts_defined")); + } } return dimmed; } gboolean -modest_ui_dimming_rules_on_csm_new_folder (ModestWindow *win, gpointer user_data) -{ - ModestDimmingRule *rule = NULL; - gboolean dimmed = FALSE; - - g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); - g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE); - rule = MODEST_DIMMING_RULE (user_data); - - /* Check common new folder menu item dimming rules */ - dimmed = modest_ui_dimming_rules_on_new_folder (win, user_data); - - /* Check CSM specific dimming rules */ - if (!dimmed) { - dimmed = _selected_folder_is_snd_level (MODEST_MAIN_WINDOW(win)); - if (dimmed) - modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_create_error")); - } - - return dimmed; -} - -gboolean modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data) { ModestDimmingRule *rule = NULL; @@ -373,11 +369,13 @@ modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data) dimmed = FALSE; } else { const gchar *proto_str = tny_account_get_proto (TNY_ACCOUNT (parent_folder)); - /* If it's POP then dim */ - dimmed = (modest_protocol_info_get_transport_store_protocol (proto_str) == - MODEST_PROTOCOL_STORE_POP) ? TRUE : FALSE; - if (dimmed) - modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_create_error")); + if (proto_str != NULL) { + /* If it's POP then dim */ + dimmed = (modest_protocol_info_get_transport_store_protocol (proto_str) == + MODEST_PROTOCOL_STORE_POP) ? TRUE : FALSE; + if (dimmed) + modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_create_error")); + } } } else { /* TODO: the specs say that only one level of subfolder is allowed, is this true ? */ @@ -390,7 +388,7 @@ modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data) /* Apply folder rules */ if (!dimmed) { - dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win)); + dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win), FALSE); if (dimmed) modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_create_error")); } @@ -400,6 +398,13 @@ modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data) modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_create_error")); } } + + /* if not the folder is selected then dim */ + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_FOLDER_VIEW); + if (folder_view && !gtk_widget_is_focus (folder_view)) + dimmed = TRUE; + g_object_unref (parent_folder); return dimmed; @@ -467,7 +472,7 @@ modest_ui_dimming_rules_on_delete_folder (ModestWindow *win, gpointer user_data) /* Check dimmed rule */ if (!dimmed) { - dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win)); + dimmed = _selected_folder_not_deletable (MODEST_MAIN_WINDOW(win)); if (dimmed) modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_delete_error")); } @@ -538,7 +543,7 @@ modest_ui_dimming_rules_on_rename_folder (ModestWindow *win, gpointer user_data) /* Check dimmed rule */ if (!dimmed) { - dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win)); + dimmed = _selected_folder_not_renameable (MODEST_MAIN_WINDOW(win)); if (dimmed) modest_dimming_rule_set_notification (rule, ""); } @@ -915,7 +920,7 @@ modest_ui_dimming_rules_on_main_window_move_to (ModestWindow *win, gpointer user /* Apply folder rules */ if (!dimmed) { - dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win)); + dimmed = _selected_folder_not_moveable (MODEST_MAIN_WINDOW(win)); if (dimmed) modest_dimming_rule_set_notification (rule, _("emev_bd_unabletomove_items")); } @@ -941,6 +946,11 @@ modest_ui_dimming_rules_on_main_window_move_to (ModestWindow *win, gpointer user dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data); } + if (!dimmed) { + dimmed = _selected_msg_sent_in_progress (win); + if (dimmed) + modest_dimming_rule_set_notification (rule, _("sfil_ib_unable_to_move_selected_items")); + } return dimmed; } @@ -1001,7 +1011,7 @@ modest_ui_dimming_rules_on_find_msg (ModestWindow *win, gpointer user_data) } gboolean -modest_ui_dimming_rules_on_paste_msgs (ModestWindow *win, gpointer user_data) +modest_ui_dimming_rules_on_paste (ModestWindow *win, gpointer user_data) { ModestDimmingRule *rule = NULL; TnyFolderType types[3]; @@ -1019,25 +1029,42 @@ modest_ui_dimming_rules_on_paste_msgs (ModestWindow *win, gpointer user_data) if (!dimmed) { dimmed = _clipboard_is_empty (win); if (dimmed) - modest_dimming_rule_set_notification (rule, dgettext("hildon-common-strings", "ecoc_ib_edwin_nothing_to_paste")); + modest_dimming_rule_set_notification (rule, + dgettext("hildon-common-strings", + "ecoc_ib_edwin_nothing_to_paste")); } if (!dimmed) { dimmed = _selected_folder_is_any_of_type (win, types, 3); if (dimmed) - modest_dimming_rule_set_notification (rule, dgettext("hildon-common-strings", "ckct_ib_unable_to_paste_here")); + modest_dimming_rule_set_notification (rule, + dgettext("hildon-common-strings", + "ckct_ib_unable_to_paste_here")); } if (!dimmed) { - dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win)); - if (dimmed) { - modest_dimming_rule_set_notification (rule, dgettext("hildon-common-strings", "ckct_ib_unable_to_paste_here")); - } + dimmed = !_folder_view_has_focus (win); + if (dimmed) + modest_dimming_rule_set_notification (rule, + dgettext("hildon-common-strings", + "ckct_ib_unable_to_paste_here")); + } + if (!dimmed) { + dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win), TRUE); + if (dimmed) + modest_dimming_rule_set_notification (rule, + dgettext("hildon-common-strings", + "ckct_ib_unable_to_paste_here")); } if (!dimmed) { dimmed = _selected_folder_is_same_as_source (win); if (dimmed) modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_copy_samefolder")); } - + if (!dimmed) { + dimmed = _selected_folder_has_subfolder_with_same_name (win); + if (dimmed) + modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_copy_samefolder")); + } + return dimmed; } @@ -1188,10 +1215,12 @@ gboolean modest_ui_dimming_rules_on_cut (ModestWindow *win, gpointer user_data) { ModestDimmingRule *rule = NULL; + const DimmedState *state = NULL; gboolean dimmed = FALSE; g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE); rule = MODEST_DIMMING_RULE (user_data); + state = modest_window_get_dimming_state (win); /* Check common dimming rules */ if (!dimmed) { @@ -1212,7 +1241,12 @@ modest_ui_dimming_rules_on_cut (ModestWindow *win, gpointer user_data) if (!dimmed) { dimmed = _selected_msg_sent_in_progress (win); if (dimmed) - modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_cut_mess")); + modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_cut_mess")); + } + if (!dimmed) { + dimmed = state->already_opened_msg; + if(dimmed) + modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_cut_mess")); } } else if (MODEST_IS_FOLDER_VIEW (focused)) { @@ -1224,7 +1258,7 @@ modest_ui_dimming_rules_on_cut (ModestWindow *win, gpointer user_data) /* Apply folder rules */ if (!dimmed) { - dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win)); + dimmed = _selected_folder_not_deletable (MODEST_MAIN_WINDOW(win)); if (dimmed) modest_dimming_rule_set_notification (rule, _("emev_bd_unabletomove_items")); } @@ -1248,10 +1282,12 @@ gboolean modest_ui_dimming_rules_on_copy (ModestWindow *win, gpointer user_data) { ModestDimmingRule *rule = NULL; + const DimmedState *state = NULL; gboolean dimmed = FALSE; g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE); rule = MODEST_DIMMING_RULE (user_data); + state = modest_window_get_dimming_state (win); /* Check common dimming rules */ if (!dimmed) { @@ -1274,13 +1310,29 @@ modest_ui_dimming_rules_on_copy (ModestWindow *win, gpointer user_data) if (dimmed) modest_dimming_rule_set_notification (rule, _("")); } + if (!dimmed) { + dimmed = state->already_opened_msg; + if(dimmed) + modest_dimming_rule_set_notification (rule, _("")); + } } else if (MODEST_IS_FOLDER_VIEW (focused)) { + TnyFolderType types[3]; + + types[0] = TNY_FOLDER_TYPE_DRAFTS; + types[1] = TNY_FOLDER_TYPE_OUTBOX; + types[2] = TNY_FOLDER_TYPE_SENT; + if (!dimmed) { dimmed = _selected_folder_is_root (MODEST_MAIN_WINDOW(win)); if (dimmed) modest_dimming_rule_set_notification (rule, _("")); } + if (!dimmed) { + dimmed = _selected_folder_is_any_of_type (win, types, 3); + if (dimmed) + modest_dimming_rule_set_notification (rule, _("")); + } } } @@ -1431,11 +1483,15 @@ modest_ui_dimming_rules_on_add_to_contacts (ModestWindow *win, gpointer user_dat static gboolean -_selected_folder_not_writeable (ModestMainWindow *win) +_selected_folder_not_writeable (ModestMainWindow *win, + gboolean for_paste) { GtkWidget *folder_view = NULL; TnyFolderStore *parent_folder = NULL; + ModestEmailClipboard *clipboard = NULL; ModestTnyFolderRules rules; + gboolean is_local_acc = FALSE; + gboolean xfer_folders = FALSE; gboolean result = FALSE; g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); @@ -1450,9 +1506,20 @@ _selected_folder_not_writeable (ModestMainWindow *win) /* Get selected folder as parent of new folder to create */ parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); if (!(parent_folder && TNY_IS_FOLDER(parent_folder))) { - if (parent_folder) - g_object_unref (parent_folder); - return TRUE; + /* If it's the local account and its transfering folders, then do not dim */ + if (TNY_IS_ACCOUNT (parent_folder)) { + is_local_acc = modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (parent_folder)); + if (for_paste) { + clipboard = modest_runtime_get_email_clipboard (); + xfer_folders = modest_email_clipboard_folder_copied (clipboard); + } + } + + if (for_paste) + result = !(is_local_acc && xfer_folders); + else + result = !is_local_acc; + goto frees; } /* Check dimmed rule */ @@ -1460,7 +1527,117 @@ _selected_folder_not_writeable (ModestMainWindow *win) result = rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE; /* free */ - g_object_unref (parent_folder); + frees: + if (parent_folder != NULL) + g_object_unref (parent_folder); + + return result; +} + +static gboolean +_selected_folder_not_deletable (ModestMainWindow *win) +{ + GtkWidget *folder_view = NULL; + TnyFolderStore *parent_folder = NULL; + ModestTnyFolderRules rules; + gboolean result = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + /* Get folder view */ + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_FOLDER_VIEW); + /* If no folder view, always dimmed */ + if (!folder_view) + return TRUE; + + /* Get selected folder as parent of new folder to create */ + parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); + if (!(parent_folder && TNY_IS_FOLDER(parent_folder))) { + result = TRUE; + goto frees; + } + + /* Check dimmed rule */ + rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder)); + result = rules & MODEST_FOLDER_RULES_FOLDER_NON_DELETABLE; + + /* free */ + frees: + if (parent_folder != NULL) + g_object_unref (parent_folder); + + return result; +} + +static gboolean +_selected_folder_not_moveable (ModestMainWindow *win) +{ + GtkWidget *folder_view = NULL; + TnyFolderStore *parent_folder = NULL; + ModestTnyFolderRules rules; + gboolean result = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + /* Get folder view */ + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_FOLDER_VIEW); + /* If no folder view, always dimmed */ + if (!folder_view) + return TRUE; + + /* Get selected folder as parent of new folder to create */ + parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); + if (!(parent_folder && TNY_IS_FOLDER(parent_folder))) { + result = TRUE; + goto frees; + } + + /* Check dimmed rule */ + rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder)); + result = rules & MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE; + + /* free */ + frees: + if (parent_folder != NULL) + g_object_unref (parent_folder); + + return result; +} + +static gboolean +_selected_folder_not_renameable (ModestMainWindow *win) +{ + GtkWidget *folder_view = NULL; + TnyFolderStore *parent_folder = NULL; + ModestTnyFolderRules rules; + gboolean result = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + /* Get folder view */ + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_FOLDER_VIEW); + /* If no folder view, always dimmed */ + if (!folder_view) + return TRUE; + + /* Get selected folder as parent of new folder to create */ + parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); + if (!(parent_folder && TNY_IS_FOLDER(parent_folder))) { + result = TRUE; + goto frees; + } + + /* Check dimmed rule */ + rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder)); + result = rules & MODEST_FOLDER_RULES_FOLDER_NON_RENAMEABLE; + + /* free */ + frees: + if (parent_folder != NULL) + g_object_unref (parent_folder); return result; } @@ -1536,6 +1713,9 @@ _selected_folder_is_MMC_or_POP_root (ModestMainWindow *win) folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), MODEST_WIDGET_TYPE_FOLDER_VIEW); + if (!folder_view) + return FALSE; + /* Get selected folder as parent of new folder to create */ parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); if (!parent_folder) @@ -1565,32 +1745,13 @@ _selected_folder_is_MMC_or_POP_root (ModestMainWindow *win) static gboolean _header_view_is_all_selected (ModestMainWindow *win) { - GtkTreeSelection *sel = NULL; - GtkTreeModel *model = NULL; - GtkTreeView *header_view = NULL; - gint count_sel, count_model; - - header_view = GTK_TREE_VIEW(modest_main_window_get_child_widget( - win, MODEST_WIDGET_TYPE_HEADER_VIEW)); - if(header_view == NULL) - return FALSE; - - model = gtk_tree_view_get_model(header_view); - if (model == NULL) - return FALSE; + const DimmedState *state = NULL; - sel = gtk_tree_view_get_selection(header_view); - if (sel == NULL) - return FALSE; + g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE); - /* check if all the headers are selected or not */ - count_sel = gtk_tree_selection_count_selected_rows (sel); - count_model = gtk_tree_model_iter_n_children(model, NULL); - if(count_sel == count_model != 0) - /*all header is selected*/ - return TRUE; + state = modest_window_get_dimming_state (MODEST_WINDOW(win)); - return FALSE; + return state->all_selected; } static gboolean @@ -1627,6 +1788,25 @@ _selected_folder_is_empty (ModestMainWindow *win) } static gboolean +_folder_view_has_focus (ModestWindow *win) +{ + GtkWidget *folder_view = NULL; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + /* Get folder view */ + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_FOLDER_VIEW); + if (!folder_view) + return FALSE; + + if (gtk_widget_is_focus(folder_view)) + return TRUE; + + return FALSE; +} + +static gboolean _selected_folder_is_same_as_source (ModestWindow *win) { ModestEmailClipboard *clipboard = NULL; @@ -1737,49 +1917,6 @@ _folder_is_any_of_type (TnyFolder *folder, } static gboolean -_selected_folder_is_snd_level (ModestMainWindow *win) -{ - GtkWidget *folder_view = NULL; - GtkTreeSelection *sel = NULL; - GtkTreeModel *model = NULL; - GtkTreePath *path = NULL; - GtkTreeIter iter; - TnyFolderStore *folder = NULL; - gboolean result = FALSE; - - g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), TRUE); - - /*Get curent folder */ - folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), - MODEST_WIDGET_TYPE_FOLDER_VIEW); - /* If no folder view, always dimmed */ - if (!folder_view) - goto frees; - - /* Get selected folder as parent of new folder to create */ - folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); - if (!(folder && TNY_IS_FOLDER(folder))) { - goto frees; - } - - /* Check folder level */ - sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(folder_view)); - if (!gtk_tree_selection_get_selected (sel, &model, &iter)) - goto frees; - path = gtk_tree_model_get_path (model, &iter); - result = gtk_tree_path_get_depth (path) > 2; - - frees: - if (folder != NULL) - g_object_unref (folder); - if (path != NULL) - gtk_tree_path_free (path); - - return result; - -} - -static gboolean _clipboard_is_empty (ModestWindow *win) { gboolean result = FALSE; @@ -1796,7 +1933,7 @@ _clipboard_is_empty (ModestWindow *win) static gboolean _invalid_clipboard_selected (ModestWindow *win, - ModestDimmingRule *rule) + ModestDimmingRule *rule) { const DimmedState *state = NULL; gboolean result = FALSE; @@ -2137,3 +2274,42 @@ _transfer_mode_enabled (ModestWindow *win) return result; } +static gboolean +_selected_folder_has_subfolder_with_same_name (ModestWindow *win) +{ + GtkWidget *folder_view = NULL; + TnyFolderStore *folder = NULL; + ModestEmailClipboard *clipboard = NULL; + const gchar *folder_name = NULL; + gboolean result = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), TRUE); + + /*Get current parent folder */ + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_FOLDER_VIEW); + /* If no folder view, always dimmed */ + if (!folder_view) return FALSE; + + /* Get selected folder as parent of new folder to create */ + folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); + if (!(folder && TNY_IS_FOLDER(folder))) goto frees; + + /* get modest clipboard and source folder */ + clipboard = modest_runtime_get_email_clipboard (); + folder_name = modest_email_clipboard_get_folder_name (clipboard); + if (folder_name == NULL) goto frees; + + /* Check source subfolders names */ + result = modest_tny_folder_has_subfolder_with_name (folder, folder_name); + + + /* Free */ + frees: + if (folder != NULL) + g_object_unref (folder); + + + return result; +} +