-/* *********************** static utility functions ******************** */
-
-
-static gboolean
-_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);
-
- /* Get folder view */
- folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
- MODEST_MAIN_WINDOW_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))) {
- /* 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 */
- rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder));
- result = rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE;
-
- /* free */
- 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_MAIN_WINDOW_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_MAIN_WINDOW_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_MAIN_WINDOW_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;
-}
-
-static gboolean
-_selected_folder_is_root_or_inbox (ModestMainWindow *win)
-{
- TnyFolderType types[2];
- gboolean result = FALSE;
-
- g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
-
- types[0] = TNY_FOLDER_TYPE_ROOT;
- types[1] = TNY_FOLDER_TYPE_INBOX;
-
- /* Check folder type */
- result = _selected_folder_is_any_of_type (MODEST_WINDOW(win), types, 2);
-
- /* Check pop and MMC accounts */
- if (!result) {
- result = _selected_folder_is_MMC_or_POP_root (win);
- }
-
- return result;
-}
-
-
-static gboolean
-_selected_folder_is_root (ModestMainWindow *win)
-{
- TnyFolderType types[1];
- gboolean result = FALSE;
-
- g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
-
- /* All accounts are root items: */
- GtkWidget *folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- if (folder_view) {
- gboolean is_account = FALSE;
- TnyFolderStore *folder_store =
- modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
- if (folder_store) {
- is_account = TNY_IS_ACCOUNT (folder_store);
- g_object_unref (folder_store);
- folder_store = NULL;
- }
-
- if (is_account)
- return TRUE;
- }
-
- /* Try something more precise: */
- types[0] = TNY_FOLDER_TYPE_ROOT;
-
- /* Check folder type */
- result = _selected_folder_is_any_of_type (MODEST_WINDOW(win), types, 1);
-
- /* Check pop and MMC accounts */
- if (!result) {
- result = _selected_folder_is_MMC_or_POP_root (win);
- }
-
- return result;
-}
-
-static gboolean
-_selected_folder_is_MMC_or_POP_root (ModestMainWindow *win)
-{
- GtkWidget *folder_view = NULL;
- TnyFolderStore *parent_folder = NULL;
- gboolean result = FALSE;
-
- folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
- MODEST_MAIN_WINDOW_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)
- return TRUE;
-
- if (TNY_IS_ACCOUNT (parent_folder)) {
- /* If it's the local account then do not dim */
- if (modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (parent_folder))) {
- result = FALSE;
- } else {
- /* If it's the MMC root folder then dim it */
- if (!strcmp (tny_account_get_id (TNY_ACCOUNT (parent_folder)), MODEST_MMC_ACCOUNT_ID)) {
- result = TRUE;
- } else {
- const gchar *proto_str = tny_account_get_proto (TNY_ACCOUNT (parent_folder));
- /* If it's POP then dim */
- result = (modest_protocol_info_get_transport_store_protocol (proto_str) ==
- MODEST_PROTOCOL_STORE_POP) ? TRUE : FALSE;
- }
- }
- }
- g_object_unref (parent_folder);
-
- return result;
-}
-
-static gboolean
-_header_view_is_all_selected (ModestMainWindow *win)
-{
- const DimmedState *state = NULL;
-
- g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
-
- state = modest_window_get_dimming_state (MODEST_WINDOW(win));
-
- return state->all_selected;
-}
-
-static gboolean
-_selected_folder_is_empty (ModestMainWindow *win)
-{
- GtkWidget *folder_view = NULL;
- TnyFolderStore *folder = NULL;
- 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_MAIN_WINDOW_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 */
- folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
- if (!(folder && TNY_IS_FOLDER(folder))) {
- if (folder)
- g_object_unref (folder);
- return TRUE;
- }
-
- /* Check folder type */
- result = tny_folder_get_all_count (TNY_FOLDER (folder)) == 0;
-
- /* free */
- g_object_unref (folder);
-
- return result;
-}
-
-static gboolean
-_folder_view_has_focus (ModestWindow *win)