- if (!dimmed) {
- dimmed = modest_msg_view_window_last_message_selected (MODEST_MSG_VIEW_WINDOW (win));
- modest_dimming_rule_set_notification (rule, NULL);
- }
-
- return dimmed;
-}
-
-
-gboolean
-modest_ui_dimming_rules_on_tools_smtp_servers (ModestWindow *win, gpointer user_data)
-{
- gboolean dimmed;
- ModestAccountMgr *mgr;
-
- mgr = modest_runtime_get_account_mgr();
- dimmed = !modest_account_mgr_has_accounts(mgr, TRUE);
-
- /* Dimm it if we only have metaaccounts */
- if (!dimmed) {
- ModestProtocolRegistry *reg = modest_runtime_get_protocol_registry ();
- GSList *account_names = modest_account_mgr_account_names (mgr, TRUE);
-
- if (account_names) {
- ModestProtocolType store_protocol;
- gboolean found = FALSE;
- GSList *iter = account_names;
- const gchar *tag = MODEST_PROTOCOL_REGISTRY_MULTI_MAILBOX_PROVIDER_PROTOCOLS;
-
- while (iter && !found) {
- gchar* account_name;
-
- account_name = (gchar *) iter->data;
- store_protocol = modest_account_mgr_get_store_protocol (mgr, account_name);
-
- if (!modest_protocol_registry_protocol_type_has_tag (reg, store_protocol, tag))
- found = TRUE;
- else
- iter = g_slist_next (iter);
- }
- modest_account_mgr_free_account_names (account_names);
- dimmed = !found;
- }
- }
-
- return dimmed;
-}
-
-#ifndef MODEST_TOOLKIT_HILDON2
-gboolean
-modest_ui_dimming_rules_on_cancel_sending (ModestWindow *win, gpointer user_data)
-{
- ModestDimmingRule *rule = NULL;
- TnyFolderType types[1];
- const DimmedState *state = 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);
- state = modest_window_get_dimming_state (win);
-
- types[0] = TNY_FOLDER_TYPE_OUTBOX;
-
- /* Check dimmed rules */
- dimmed = !_selected_folder_is_any_of_type (win, types, 1);
- if (dimmed)
- modest_dimming_rule_set_notification (rule, "");
- if (!dimmed) {
- if (state)
- dimmed = !state->sent_in_progress;
- if (dimmed)
- modest_dimming_rule_set_notification (rule, "");
- }
- return dimmed;
-}
-#endif
-
-gboolean
-modest_ui_dimming_rules_on_cancel_sending_all (ModestWindow *win, gpointer user_data)
-{
- /* We dim if no msg send is in progress (and then cancelling send all has no
- * effect */
- return !_msgs_send_in_progress ();
-}
-
-gboolean
-modest_ui_dimming_rules_on_send_receive (ModestWindow *win, gpointer user_data)
-{
- ModestDimmingRule *rule = NULL;
- gboolean dimmed = FALSE;
- ModestAccountMgr *mgr;
- const gchar* account_name;
-
- g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
- rule = MODEST_DIMMING_RULE (user_data);
- mgr = modest_runtime_get_account_mgr();
-
- /* Check dimmed rule */
- account_name = modest_window_get_active_account (win);
-
- if (account_name)
- dimmed = modest_account_mgr_account_is_busy (mgr, account_name);
- else
- dimmed = TRUE;
-
- if (dimmed)
- modest_dimming_rule_set_notification (rule, _("mcen_nc_no_email_acnts_defined"));
-
- return dimmed;
-}
-
-gboolean
-modest_ui_dimming_rules_on_send_receive_all (ModestWindow *win, gpointer user_data)
-{
- ModestDimmingRule *rule = NULL;
- gboolean dimmed = FALSE;
-
- g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
- rule = MODEST_DIMMING_RULE (user_data);
-
- /* Check dimmed rule */
- GSList *account_names = modest_account_mgr_account_names (modest_runtime_get_account_mgr (), TRUE);
- if (g_slist_length (account_names) < 1)
- dimmed = TRUE;
- if (dimmed)
- modest_dimming_rule_set_notification (rule, _("mcen_nc_no_email_acnts_defined"));
-
- modest_account_mgr_free_account_names (account_names);
-
- if (!dimmed) {
- dimmed = _send_receive_in_progress (win);
- }
-
- return dimmed;
-}
-
-#ifdef MODEST_TOOLKIT_HILDON2
-gboolean
-modest_ui_dimming_rules_on_add_to_contacts (ModestWindow *win, gpointer user_data)
-{
- GSList *recipients;
- gboolean has_recipients_to_add;
-
- g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
-
- if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
- TnyMsg *msg;
-
- msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (win));
-
- /* Message is loaded asynchronously, so this could happen */
- if (!msg) {
- TnyHeader *header;
-
- header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
- if (!header)
- return TRUE;
-
- recipients = modest_tny_msg_header_get_all_recipients_list (header);
- g_object_unref (header);
- } else {
- recipients = modest_tny_msg_get_all_recipients_list (msg);
- g_object_unref (msg);
- }
- } else if (MODEST_IS_MSG_EDIT_WINDOW (win)) {
- /* Check if there are pending addresses to add */
- return !modest_msg_edit_window_has_pending_addresses ((ModestMsgEditWindow *) win);
- }
-
- has_recipients_to_add = FALSE;
-
- if (recipients) {
- GSList *node;
- for (node = recipients; node != NULL; node = g_slist_next (node)) {
- const gchar *recipient = (const gchar *) node->data;
- if (modest_text_utils_validate_recipient (recipient, NULL)) {
- if (!modest_address_book_has_address (recipient)) {
- has_recipients_to_add = TRUE;
- break;
- }
- }
- }
- g_slist_foreach (recipients, (GFunc) g_free, NULL);
- g_slist_free (recipients);
- }
-
- return !has_recipients_to_add;
-}
-#else
-gboolean
-modest_ui_dimming_rules_on_add_to_contacts (ModestWindow *win, gpointer user_data)
-{
- ModestDimmingRule *rule = NULL;
- gboolean dimmed = FALSE;
- GtkWidget *focused = NULL;
-
- g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
- rule = MODEST_DIMMING_RULE (user_data);
- focused = gtk_window_get_focus (GTK_WINDOW (win));
-
- dimmed = !focused;
-
- if (!dimmed) {
- gchar *selection = NULL;
- if (GTK_IS_TEXT_VIEW (focused)) {
- GtkTextIter start, end;
- GtkTextBuffer *buffer = NULL;
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused));
- if (gtk_text_buffer_get_selection_bounds (buffer, &start, &end)) {
- selection = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
- }
- } else if (GTK_IS_LABEL (focused)) {
- selection = modest_text_utils_label_get_selection (GTK_LABEL (focused));
- } else {
- gboolean do_check = TRUE;
- GtkClipboard *clipboard;
- if (GTK_IS_HTML (focused)) {
- const gchar *sel;
- int len = -1;
- sel = gtk_html_get_selection_html (GTK_HTML (focused), &len);
- do_check = !((sel == NULL) || (sel[0] == '\0'));
- } else if (MODEST_IS_ATTACHMENTS_VIEW (focused)) {
- do_check = FALSE;
- }
- if (do_check) {
- clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
- selection = gtk_clipboard_wait_for_text (clipboard);
- } else {
- selection = NULL;
- }
- }
- dimmed = !((selection != NULL) && (modest_text_utils_validate_recipient (selection, NULL)));
- }
-
- return dimmed;
-}
-#endif
-
-/* *********************** static utility functions ******************** */
-
-#ifndef MODEST_TOOLKIT_HILDON2
-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;
-}
-#endif
-
-#ifndef MODEST_TOOLKIT_HILDON2
-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;