+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_view_previous (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);
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
+
+ /* Check dimmed rule */
+ if (!dimmed) {
+ dimmed = _transfer_mode_enabled (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (
+ rule, _("mail_ib_notavailable_downloading"));
+ }
+ if (!dimmed) {
+ dimmed = modest_msg_view_window_first_message_selected (
+ MODEST_MSG_VIEW_WINDOW(win));
+ modest_dimming_rule_set_notification (rule, NULL);
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_view_next (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_DIMMING_RULE (user_data), FALSE);
+ rule = MODEST_DIMMING_RULE (user_data);
+
+ /* Check dimmed rule */
+ if (!dimmed) {
+ dimmed = _transfer_mode_enabled (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
+ }
+ 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)
+{
+ const gboolean dimmed =
+ !modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(),
+ TRUE);
+
+ return dimmed;
+}
+
+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 */
+ if (!dimmed) {
+ dimmed = !_selected_folder_is_any_of_type (win, types, 1);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, "");
+ }
+ if (!dimmed) {
+ dimmed = !_sending_in_progress (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, "");
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_csm_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 */
+ if (!dimmed) {
+ dimmed = !_selected_folder_is_any_of_type (win, types, 1);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, "");
+ }
+ if (!dimmed) {
+ dimmed = !_sending_in_progress (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, "");
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_send_receive (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 */
+ 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_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 */
+ if (!dimmed) {
+ 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);
+ }
+
+ return dimmed;
+}
+
+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)) {
+ gint start, end;
+ if (gtk_label_get_selection_bounds (GTK_LABEL (focused), &start, &end)) {
+ const gchar *start_offset;
+ start_offset = gtk_label_get_text (GTK_LABEL (focused));
+ start_offset = g_utf8_offset_to_pointer (start_offset, start);
+ selection = g_new0 (gchar, end - start + 1);
+ g_utf8_strncpy (selection, start_offset, end - start);
+ }
+ } else {
+ GtkClipboard *clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
+ selection = gtk_clipboard_wait_for_text (clipboard);
+ }
+ dimmed = !((selection != NULL) && (modest_text_utils_validate_recipient (selection, NULL)));
+ }
+
+ return dimmed;
+}
+
+/* *********************** 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);
+