* Add new dimming rules for copy,cut and paste operations.
authorJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Tue, 26 Jun 2007 18:17:25 +0000 (18:17 +0000)
committerJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Tue, 26 Jun 2007 18:17:25 +0000 (18:17 +0000)
* Add dimming rules for undo operations.
* Implement undo operation for copy and cut operations.
* Fixes: NB#59325

pmo-trunk-r2442

src/maemo/modest-main-window-ui-dimming.h
src/maemo/modest-main-window-ui.h
src/modest-ui-actions.c
src/modest-ui-dimming-rules.c
src/modest-ui-dimming-rules.h

index 8602852..ad662a4 100644 (file)
@@ -25,9 +25,9 @@ static const ModestDimmingEntry modest_main_window_menu_dimming_entries [] = {
 
        /* Edit Menu */
        { "/MenuBar/EditMenu", NULL },
-       { "/MenuBar/EditMenu/EditUndoMenu",  },
-       { "/MenuBar/EditMenu/EditCutMenu", NULL },
-       { "/MenuBar/EditMenu/EditCopyMenu", NULL },
+       { "/MenuBar/EditMenu/EditUndoMenu", G_CALLBACK(modest_ui_dimming_rules_on_undo) },
+       { "/MenuBar/EditMenu/EditCutMenu", G_CALLBACK(modest_ui_dimming_rules_on_cut) },
+       { "/MenuBar/EditMenu/EditCopyMenu", G_CALLBACK(modest_ui_dimming_rules_on_copy) },
        { "/MenuBar/EditMenu/EditPasteMenu", G_CALLBACK(modest_ui_dimming_rules_on_paste_msgs) },
        { "/MenuBar/EditMenu/EditSelectAllMenu", G_CALLBACK(modest_ui_dimming_rules_on_select_all)},
        { "/MenuBar/EditMenu/EditMarkAsReadMenu", G_CALLBACK(modest_ui_dimming_rules_on_mark_as_read_msg) },
index a00a8a3..841475f 100644 (file)
@@ -71,7 +71,7 @@ static const GtkActionEntry modest_action_entries [] = {
        
 
        /* Edit */
-       { "EditUndo",        NULL,      N_("mcen_me_inbox_undo"),        "<CTRL>Z",    NULL, NULL },
+       { "EditUndo",        NULL,      N_("mcen_me_inbox_undo"),        "<CTRL>Z",    NULL, G_CALLBACK (modest_ui_actions_on_undo) },
        { "EditCut",         NULL,      N_("mcen_me_inbox_cut"),          "<CTRL>X",    NULL, G_CALLBACK (modest_ui_actions_on_cut) },
        { "EditCopy",        NULL,      N_("mcen_me_inbox_copy"),         "<CTRL>C",    NULL, G_CALLBACK (modest_ui_actions_on_copy) },
        { "EditPaste",       NULL,      N_("mcen_me_inbox_paste"),        "<CTRL>V",    NULL, G_CALLBACK (modest_ui_actions_on_paste) },
index d17a175..93e78f8 100644 (file)
@@ -2271,9 +2271,16 @@ void
 modest_ui_actions_on_undo (GtkAction *action,
                           ModestWindow *window)
 {
+       ModestEmailClipboard *clipboard = NULL;
+
        if (MODEST_IS_MSG_EDIT_WINDOW (window)) {
                modest_msg_edit_window_undo (MODEST_MSG_EDIT_WINDOW (window));
-       } else {
+       } if (MODEST_IS_MAIN_WINDOW (window)) {
+               /* Clear clipboard source */
+               clipboard = modest_runtime_get_email_clipboard ();
+               modest_email_clipboard_clear (clipboard);               
+       }
+       else {
                g_return_if_reached ();
        }
 }
@@ -2365,28 +2372,24 @@ modest_ui_actions_on_select_all (GtkAction *action,
                gtk_text_buffer_get_start_iter (buffer, &start);
                gtk_text_buffer_get_end_iter (buffer, &end);
                gtk_text_buffer_select_range (buffer, &start, &end);
-       }
-       else if ((MODEST_IS_FOLDER_VIEW (focused_widget)) ||
-                (MODEST_IS_HEADER_VIEW (focused_widget))) {
-               
-               GtkTreeSelection *selection = NULL;
-
-               /* Get header view */           
+       } else if (GTK_IS_HTML (focused_widget)) {
+               gtk_html_select_all (GTK_HTML (focused_widget));
+       } else if (MODEST_IS_MAIN_WINDOW (window)) {
                GtkWidget *header_view = focused_widget;
-               if (MODEST_IS_FOLDER_VIEW (focused_widget))
+               GtkTreeSelection *selection = NULL;
+               
+               if (!(MODEST_IS_HEADER_VIEW (focused_widget)))
                        header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
                                                                           MODEST_WIDGET_TYPE_HEADER_VIEW);
-
+                               
                /* Select all messages */
                selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view));
                gtk_tree_selection_select_all (selection);
 
                /* Set focuse on header view */
                gtk_widget_grab_focus (header_view);
-
-       } else if (GTK_IS_HTML (focused_widget)) {
-               gtk_html_select_all (GTK_HTML (focused_widget));
        }
+
 }
 
 void
index 8fa8a6b..809ba94 100644 (file)
@@ -44,6 +44,7 @@
 static gboolean _folder_is_any_of_type (TnyFolder *folder, TnyFolderType types[], guint ntypes);
 static gboolean _invalid_msg_selected (ModestMainWindow *win, gboolean unique, ModestDimmingRule *rule);
 static gboolean _invalid_attach_selected (ModestWindow *win, gboolean unique, gboolean for_view, ModestDimmingRule *rule);
+static gboolean _clipboard_is_empty (ModestWindow *win);
 static gboolean _invalid_clipboard_selected (ModestWindow *win);
 static gboolean _already_opened_msg (ModestWindow *win, guint *n_messages);
 static gboolean _selected_msg_marked_as (ModestWindow *win, TnyHeaderFlags mask, gboolean opposite);
@@ -65,13 +66,19 @@ static gboolean _invalid_attachment_for_purge (ModestWindow *win, ModestDimmingR
 gboolean 
 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_DIMMING_RULE (user_data), FALSE);
+       rule = MODEST_DIMMING_RULE (user_data);
                
        /* Check dimmed rule */ 
-       if (!dimmed)
+       if (!dimmed) {
                dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, "");
+       }
 
        return dimmed;
 }
@@ -79,16 +86,18 @@ modest_ui_dimming_rules_on_new_msg (ModestWindow *win, gpointer user_data)
 gboolean 
 modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data)
 {
-       gboolean dimmed = FALSE;
+       ModestDimmingRule *rule = NULL;
        GtkWidget *folder_view = NULL;
        TnyFolderStore *parent_folder = 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);
 
-
+       /* Get selected folder as parent of new folder to create */
        folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
                                                           MODEST_WIDGET_TYPE_FOLDER_VIEW);
-       /* 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;
@@ -102,6 +111,8 @@ modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data)
                        /* 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, "");
                }
        } else {
                /* TODO: the specs say that only one level of subfolder is allowed, is this true ? */
@@ -113,10 +124,16 @@ modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data)
                types[2] = TNY_FOLDER_TYPE_SENT;
 
                /* Apply folder rules */        
-               if (!dimmed)
+               if (!dimmed) {
                        dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win));
-               if (!dimmed)
+                       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, "");
+               }
        }
        g_object_unref (parent_folder);
 
@@ -126,10 +143,13 @@ modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data)
 gboolean 
 modest_ui_dimming_rules_on_delete_folder (ModestWindow *win, gpointer user_data)
 {
-       gboolean dimmed = FALSE;
+       ModestDimmingRule *rule = NULL;
        TnyFolderType types[5];
+       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_DRAFTS; 
        types[1] = TNY_FOLDER_TYPE_OUTBOX;
@@ -137,17 +157,28 @@ modest_ui_dimming_rules_on_delete_folder (ModestWindow *win, gpointer user_data)
        types[3] = TNY_FOLDER_TYPE_INBOX;
        types[4] = TNY_FOLDER_TYPE_ROOT;
 
-       g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
                
        /* Check dimmed rule */ 
-       if (!dimmed)
+       if (!dimmed) {
                dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win));
-       if (!dimmed)
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, "");
+       }
+       if (!dimmed) {
                dimmed = _selected_folder_is_any_of_type (win, types, 5);
-       if (!dimmed)
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, "");
+       }
+       if (!dimmed) {
                dimmed = _selected_folder_is_root_or_inbox (MODEST_MAIN_WINDOW(win));
-       if (!dimmed)
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, "");
+       }
+       if (!dimmed) {
                dimmed = _selected_folder_is_MMC_or_POP_root (MODEST_MAIN_WINDOW(win));
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, "");
+       }
 
        return dimmed;
 }
@@ -155,13 +186,19 @@ modest_ui_dimming_rules_on_delete_folder (ModestWindow *win, gpointer user_data)
 gboolean
 modest_ui_dimming_rules_on_sort (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 dimmed rule */ 
-       if (!dimmed)
+       if (!dimmed) {
                dimmed = _selected_folder_is_root (MODEST_MAIN_WINDOW(win));
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, "");
+       }
 
        return dimmed;
        
@@ -170,24 +207,34 @@ modest_ui_dimming_rules_on_sort (ModestWindow *win, gpointer user_data)
 gboolean 
 modest_ui_dimming_rules_on_rename_folder (ModestWindow *win, gpointer user_data)
 {
-       gboolean dimmed = FALSE;
+       ModestDimmingRule *rule = NULL;
        TnyFolderType types[3];
+       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_DRAFTS; 
        types[1] = TNY_FOLDER_TYPE_OUTBOX;
        types[2] = TNY_FOLDER_TYPE_SENT;
        
-       g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
-               
        /* Check dimmed rule */ 
-       if (!dimmed)
+       if (!dimmed) {
                dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win));
-       if (!dimmed)
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, "");
+       }
+       if (!dimmed) {
                dimmed = _selected_folder_is_root_or_inbox (MODEST_MAIN_WINDOW(win));
-       if (!dimmed)
+               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, "");
+       }
 
        return dimmed;
 }
@@ -203,8 +250,9 @@ modest_ui_dimming_rules_on_open_msg (ModestWindow *win, gpointer user_data)
        rule = MODEST_DIMMING_RULE (user_data);
                
        /* Check dimmed rule */ 
-       if (!dimmed)
+       if (!dimmed) {
                dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, user_data);
+       }
        if (!dimmed) {
                dimmed = _selected_msg_sent_in_progress (win);
                if (dimmed)
@@ -242,15 +290,18 @@ modest_ui_dimming_rules_on_reply_msg (ModestWindow *win, gpointer user_data)
                        if (dimmed)
                                modest_dimming_rule_set_notification (rule, _("mcen_ib_nothing_to_reply"));
                }
-               if (!dimmed)
+               if (!dimmed) {
                        dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, rule);
-
+               }
        /* msg view window dimming rules */
        } else if (MODEST_IS_MSG_VIEW_WINDOW(win)) {
                
                /* Check dimmed rule */ 
-               if (!dimmed)
+               if (!dimmed) {
                        dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
+                       if (dimmed)
+                               modest_dimming_rule_set_notification (rule, "");
+               }
        }
        
        return dimmed;
@@ -260,15 +311,22 @@ modest_ui_dimming_rules_on_reply_msg (ModestWindow *win, gpointer user_data)
 gboolean 
 modest_ui_dimming_rules_on_contents_msg (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 dimmed rule */ 
-       if (!dimmed)
+       if (!dimmed) {
                dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
-       if (!dimmed)
+       }
+       if (!dimmed) {
                dimmed = _msg_download_completed (MODEST_MAIN_WINDOW(win));
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, "");
+       }
 
        return dimmed;
 }
@@ -306,8 +364,6 @@ modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
                }
                if (!dimmed) {
                        dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
-                       if (dimmed)
-                               modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected"));
                }
                if (!dimmed) {
                        dimmed = _already_opened_msg (win, &n_messages);
@@ -347,8 +403,12 @@ modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
 gboolean 
 modest_ui_dimming_rules_on_details (ModestWindow *win, gpointer user_data)
 {
-       gboolean dimmed = FALSE;
+       ModestDimmingRule *rule = NULL;
        GtkWidget *header_view = NULL;
+       gboolean dimmed = FALSE;
+
+       g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+       rule = MODEST_DIMMING_RULE (user_data);
        
        /* main window dimming rules */
        if (MODEST_IS_MAIN_WINDOW(win)) {
@@ -375,8 +435,10 @@ modest_ui_dimming_rules_on_details (ModestWindow *win, gpointer user_data)
                                         * though the UI spec is not clear about that.
                                         * If we enable this for accounts then we must 
                                         * add code to handle them in modest_ui_actions_on_details(). */
-                                       if (!TNY_IS_FOLDER(folder_store))
+                                       if (!TNY_IS_FOLDER(folder_store)) {
                                                dimmed = TRUE;
+                                               modest_dimming_rule_set_notification (rule, "");
+                                       }
 
                                        g_object_unref (folder_store);
                                }
@@ -388,8 +450,11 @@ modest_ui_dimming_rules_on_details (ModestWindow *win, gpointer user_data)
        } else {
 
                /* Check dimmed rule */ 
-               if (!dimmed)
+               if (!dimmed) {
                        dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
+                       if (dimmed)
+                               modest_dimming_rule_set_notification (rule, "");
+               }
        }
 
        return dimmed;
@@ -399,37 +464,50 @@ modest_ui_dimming_rules_on_details (ModestWindow *win, gpointer user_data)
 gboolean 
 modest_ui_dimming_rules_on_mark_as_read_msg (ModestWindow *win, gpointer user_data)
 {
-       gboolean dimmed = FALSE;
+       ModestDimmingRule *rule = NULL;
        TnyHeaderFlags flags;
+       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);
        
        flags = TNY_HEADER_FLAG_SEEN; 
 
        /* Check dimmed rule */ 
-       if (!dimmed)
+       if (!dimmed) {
                dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
-       if (!dimmed) 
+       }
+       if (!dimmed) {
                dimmed = _selected_msg_marked_as (win, flags, FALSE);
-       
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, "");
+       }       
+
        return dimmed;
 }
 
 gboolean 
 modest_ui_dimming_rules_on_mark_as_unread_msg (ModestWindow *win, gpointer user_data)
 {
-       gboolean dimmed = FALSE;
+       ModestDimmingRule *rule = NULL;
        TnyHeaderFlags flags;
+       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);
        
        flags = TNY_HEADER_FLAG_SEEN; 
 
        /* Check dimmed rule */ 
        if (!dimmed)
                dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
-       if (!dimmed) 
+       if (!dimmed) {
                dimmed = _selected_msg_marked_as (win, flags, TRUE);
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, "");
+       }
 
        return dimmed;
 }
@@ -437,8 +515,12 @@ modest_ui_dimming_rules_on_mark_as_unread_msg (ModestWindow *win, gpointer user_
 gboolean 
 modest_ui_dimming_rules_on_move_to (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);
+
        if (MODEST_IS_MAIN_WINDOW (win)) 
                dimmed = modest_ui_dimming_rules_on_main_window_move_to (win, user_data);
        else if (MODEST_IS_MSG_VIEW_WINDOW (win)) 
@@ -525,10 +607,16 @@ modest_ui_dimming_rules_on_paste_msgs (ModestWindow *win, gpointer user_data)
        types[2] = TNY_FOLDER_TYPE_SENT;
        
        /* Check dimmed rule */ 
-       if (!dimmed) 
-               dimmed = _invalid_clipboard_selected (win);
-       if (!dimmed)
+       if (!dimmed) {
+               dimmed = _clipboard_is_empty (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, "");
+       }
        if (!dimmed) {
                dimmed = _selected_folder_is_same_as_source (win);
                if (dimmed)
@@ -550,8 +638,11 @@ modest_ui_dimming_rules_on_select_all (ModestWindow *win, gpointer user_data)
        rule = MODEST_DIMMING_RULE (user_data);
 
        /* Check dimmed rule */ 
-       if (!dimmed) 
+       if (!dimmed) {
                dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));                   
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, "");
+       }
                
        return dimmed;
 }
@@ -613,15 +704,91 @@ modest_ui_dimming_rules_on_remove_attachments (ModestWindow *win, gpointer user_
 }
 
 gboolean 
-modest_ui_dimming_rules_on_copy (ModestWindow *win, gpointer user_data)
+modest_ui_dimming_rules_on_undo (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_clipboard_selected (win);                     
+       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);
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, "");
+       }
+
+       /* Check window specific dimming rules */
+       if (MODEST_IS_MAIN_WINDOW (win)) {
+               if (!dimmed) {
+                       dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win));
+                       if (dimmed)
+                               modest_dimming_rule_set_notification (rule, "");
+               }
+               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);
+               if (dimmed)
+                       modest_dimming_rule_set_notification (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;
 }
@@ -629,28 +796,41 @@ modest_ui_dimming_rules_on_copy (ModestWindow *win, gpointer user_data)
 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) 
+       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) 
+       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;
 }
 
@@ -999,7 +1179,20 @@ _folder_is_any_of_type (TnyFolder *folder,
        return result;
 }
 
+static gboolean
+_clipboard_is_empty (ModestWindow *win)
+{
+       gboolean result = FALSE;
+       
+       if (MODEST_IS_MAIN_WINDOW (win)) {
+               ModestEmailClipboard *clipboard = NULL;
+               clipboard = modest_runtime_get_email_clipboard ();
+               if (modest_email_clipboard_cleared (clipboard)) 
+                result = TRUE;  
+       }
 
+       return result;
+}
 
 static gboolean
 _invalid_clipboard_selected (ModestWindow *win)
@@ -1023,11 +1216,14 @@ _invalid_clipboard_selected (ModestWindow *win)
                          (MODEST_IS_ATTACHMENTS_VIEW (focused)));
        }               
        else if (MODEST_IS_MAIN_WINDOW (win)) {
-               ModestEmailClipboard *clipboard = NULL;
+               GtkWidget *header_view = NULL;
 
-               clipboard = modest_runtime_get_email_clipboard ();
-               if (modest_email_clipboard_cleared (clipboard)) 
-                       result = TRUE;
+               /* Get header view to check selected messages */
+               header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
+                                                                  MODEST_WIDGET_TYPE_HEADER_VIEW);
+       
+               /* Check dimming */
+               result = !modest_header_view_has_selected_headers (MODEST_HEADER_VIEW(header_view));            
        }
        
        return result;
index e5e5537..6e29376 100644 (file)
@@ -59,7 +59,9 @@ gboolean modest_ui_dimming_rules_on_select_all (ModestWindow *win, gpointer user
 gboolean modest_ui_dimming_rules_on_view_attachments (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_save_attachments (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_remove_attachments (ModestWindow *win, gpointer user_data);
+gboolean modest_ui_dimming_rules_on_undo (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_copy (ModestWindow *win, gpointer user_data);
+gboolean modest_ui_dimming_rules_on_cut (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_view_previous (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_view_next (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_tools_smtp_servers (ModestWindow *win, gpointer user_data);