* Fixes NB#87094, dimm the toolbar buttons when the message has been sent
authorSergio Villar Senin <svillar@igalia.com>
Tue, 29 Jul 2008 09:56:38 +0000 (09:56 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Tue, 29 Jul 2008 09:56:38 +0000 (09:56 +0000)
pmo-trunk-r5191

src/maemo/modest-msg-view-window.c
src/modest-ui-actions.c
src/modest-ui-dimming-rules.c

index 6bad4fe..a543f1a 100644 (file)
@@ -1108,34 +1108,13 @@ modest_msg_view_window_on_row_deleted(GtkTreeModel *header_model,
 {
        check_dimming_rules_after_change (window);
 }
-
-static gboolean
-check_dimming_rules_after_change_in_idle (gpointer data)
-{
        /* The window could have dissapeared */
-       if (MODEST_IS_WINDOW (data)) {
-               ModestWindow *win = MODEST_WINDOW (data);
-               gdk_threads_enter ();
-               modest_ui_actions_check_menu_dimming_rules (win);
-               modest_ui_actions_check_toolbar_dimming_rules (win);
-               gdk_threads_leave ();
-       }
-
-       return FALSE;
-}
 
 static void
 check_dimming_rules_after_change (ModestMsgViewWindow *window)
 {
-       static guint dimming_delayer = 0;
-
-       if (dimming_delayer > 0)
-               g_source_remove (dimming_delayer);
-
-       /* We're expecting a lot of changes at the same time so don't
-          need to check dimming rules for every change that
-          happens */
-       dimming_delayer = g_timeout_add (100, check_dimming_rules_after_change_in_idle, window);
+       modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
+       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
 }
 
 
@@ -1688,6 +1667,9 @@ modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window)
        if (!priv->header_model || !priv->row_reference)
                return TRUE;
 
+       if (!gtk_tree_row_reference_valid (priv->row_reference))
+               return TRUE;
+
        path = gtk_tree_row_reference_get_path (priv->row_reference);
        if (path == NULL)
                return TRUE;
@@ -1755,7 +1737,6 @@ modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
        ModestMsgViewWindowPrivate *priv;
        gboolean is_first_selected;
        GtkTreeIter tmp_iter;
-/*     gchar * path_string;*/
 
        g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), TRUE);
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
@@ -1764,18 +1745,13 @@ modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
        if (!priv->header_model || !priv->row_reference)
                return TRUE;
 
+       if (!gtk_tree_row_reference_valid (priv->row_reference))
+               return TRUE;
+
        path = gtk_tree_row_reference_get_path (priv->row_reference);
        if (!path)
                return TRUE;
 
-/*     path_string = gtk_tree_path_to_string (path);
-       is_first_selected = strcmp (path_string, "0");
-
-       g_free (path_string);
-       gtk_tree_path_free (path);
-
-       return is_first_selected;*/
-
        is_first_selected = TRUE;
        while (is_first_selected) {
                TnyHeader *header;
index a6f1279..d37aa7b 100644 (file)
@@ -6025,6 +6025,8 @@ modest_ui_actions_on_send_queue_status_changed (ModestTnySendQueue *send_queue,
        /* Rerun dimming rules, because the message could become deletable for example */
        modest_window_check_dimming_rules_group (MODEST_WINDOW (main_window), 
                                                 MODEST_DIMMING_RULES_TOOLBAR);
+       modest_window_check_dimming_rules_group (MODEST_WINDOW (main_window), 
+                                                MODEST_DIMMING_RULES_MENU);
        
        /* Free */
  frees:
index 71d32f8..6b6ae5b 100644 (file)
@@ -777,6 +777,15 @@ modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
                        if (dimmed)
                                modest_dimming_rule_set_notification (rule, _CS("ckct_ib_unable_to_delete"));
                }
+
+               /* This could happen if we're viewing a message of the
+                  outbox that has been already sent */
+               if (!dimmed) {
+                       ModestMsgViewWindow *view_window = MODEST_MSG_VIEW_WINDOW (win);
+                       if (modest_msg_view_window_last_message_selected (view_window) &&
+                           modest_msg_view_window_first_message_selected (view_window))
+                               dimmed = TRUE; 
+               }
                
                /* The delete button should be dimmed when viewing an attachment,
                 * but should be enabled when viewing a message from the list, 
@@ -1041,6 +1050,16 @@ modest_ui_dimming_rules_on_view_window_move_to (ModestWindow *win, gpointer user
                if (dimmed)
                        modest_dimming_rule_set_notification (rule, _("emev_nc_unabletomove_item"));
        }
+
+       /* This could happen if we're viewing a message of the outbox
+          that has been already sent */
+       if (!dimmed) {
+               ModestMsgViewWindow *view_window = MODEST_MSG_VIEW_WINDOW (win);
+               if (modest_msg_view_window_last_message_selected (view_window) &&
+                   modest_msg_view_window_first_message_selected (view_window))
+                       dimmed = TRUE; 
+       }
+
        if (!dimmed) {
                if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
                        /* The move_to button should be dimmed when viewing an attachment,