+gboolean
+modest_ui_dimming_rules_on_save_attachments (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 = _invalid_attach_selected (win, FALSE, FALSE, rule);
+
+ if (!dimmed) {
+ dimmed = _purged_attach_selected (win, FALSE, NULL);
+ if (dimmed) {
+ modest_dimming_rule_set_notification (rule, _("mail_ib_attach_not_local"));
+ }
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_remove_attachments (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ gboolean dimmed = 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 in main window if there's only one message selected */
+ if (!dimmed && MODEST_IS_MAIN_WINDOW (win)) {
+ dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW (win), TRUE, rule);
+ }
+
+ /* Check in view window if there's any attachment selected */
+ if (!dimmed && MODEST_IS_MSG_VIEW_WINDOW (win)) {
+ dimmed = _invalid_attach_selected (win, FALSE, FALSE, NULL);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("FIXME:no attachment selected"));
+ }
+
+ /* cannot purge in editable drafts nor pop folders */
+ if (!dimmed) {
+ dimmed = _invalid_folder_for_purge (win, rule);
+ }
+
+ /* Check if the selected message in main window has attachments */
+ if (!dimmed && MODEST_IS_MAIN_WINDOW (win)) {
+ dimmed = _selected_msg_marked_as (win, TNY_HEADER_FLAG_ATTACHMENTS, TRUE);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mail_ib_unable_to_purge_attachments"));
+ }
+
+ /* Check if all attachments are already purged */
+ if (!dimmed) {
+ dimmed = _purged_attach_selected (win, TRUE, rule);
+ }
+
+ /* Check if the message is already downloaded */
+ if (!dimmed && MODEST_IS_MAIN_WINDOW (win)) {
+ dimmed = !_msg_download_completed (MODEST_MAIN_WINDOW (win));
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mail_ib_attach_not_local"));
+ }
+
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_undo (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 = _clipboard_is_empty (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, "");
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_cut (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 common dimming rules */
+ if (!dimmed) {
+ dimmed = _invalid_clipboard_selected (win, rule);
+ }
+
+ /* Check window specific dimming rules */
+ if (MODEST_IS_MAIN_WINDOW (win)) {
+ if (!dimmed) {
+ dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, "");
+ }
+ if (!dimmed) {
+ dimmed = _selected_msg_sent_in_progress (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_cut_mess"));
+ }
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_copy (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 common dimming rules */
+ if (!dimmed) {
+ dimmed = _invalid_clipboard_selected (win, rule);
+ }
+
+ /* Check window specific dimming rules */
+ if (MODEST_IS_MAIN_WINDOW (win)) {
+ if (!dimmed) {
+ dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, "");
+ }
+ if (!dimmed) {
+ dimmed = _selected_msg_sent_in_progress (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_cut_mess"));
+ }
+ }
+
+ 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));
+/* if (dimmed) */
+/* modest_dimming_rule_set_notification (rule, ""); */
+ }
+
+ 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));
+/* if (dimmed) */
+/* modest_dimming_rule_set_notification (rule, ""); */
+ }
+
+ 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];
+ guint n_messages = 0;
+ 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);
+
+ types[0] = TNY_FOLDER_TYPE_OUTBOX;
+
+ /* Check dimmed rules */
+ if (!dimmed) {
+ dimmed = _already_opened_msg (win, &n_messages);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_cancel_send"));
+ }
+ 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_add_to_contacts (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) {
+ GtkClipboard *clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
+ gchar *selection = NULL;
+ selection = gtk_clipboard_wait_for_text (clipboard);
+
+ dimmed = !((selection != NULL) && (modest_text_utils_validate_recipient (selection, NULL)));
+ }
+
+ return dimmed;
+}