* Fixes NB#87094 merged from trunk 5191 & 5259
authorSergio Villar Senin <svillar@igalia.com>
Mon, 3 Nov 2008 15:54:28 +0000 (15:54 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Mon, 3 Nov 2008 15:54:28 +0000 (15:54 +0000)
pmo-diablo-r6216

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

index 7e300e5..1b0bb69 100644 (file)
@@ -1101,34 +1101,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));
 }
 
 
@@ -1681,6 +1660,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;
@@ -1741,7 +1723,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);
@@ -1750,18 +1731,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 40f744d..983fc14 100644 (file)
@@ -5994,6 +5994,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 447b57b..960840a 100644 (file)
@@ -711,6 +711,33 @@ modest_ui_dimming_rules_always_dimmed (ModestWindow *win, gpointer user_data)
        return dimmed;
 }
 
+static gboolean
+_message_already_sent (ModestMsgViewWindow *view_window)
+{
+       TnyHeader *header;
+       TnyFolder *folder;
+       gboolean already_sent = FALSE;
+
+       header = modest_msg_view_window_get_header (view_window);
+       if (header) {
+               folder = tny_header_get_folder (header);
+               if (folder) {
+                       if (modest_tny_folder_guess_folder_type (folder) ==
+                           TNY_FOLDER_TYPE_OUTBOX) {                           
+                               ModestTnySendQueueStatus status = 
+                                       modest_tny_all_send_queues_get_msg_status (header);
+                               if (status == MODEST_TNY_SEND_QUEUE_UNKNOWN ||
+                                   status == MODEST_TNY_SEND_QUEUE_SENDING)
+                                       already_sent = TRUE;
+                       }
+                       g_object_unref (folder);
+               }
+               g_object_unref (header);
+       }
+       return already_sent;
+}
+
+
 gboolean 
 modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
 {
@@ -777,6 +804,11 @@ 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)
+                       dimmed = _message_already_sent (MODEST_MSG_VIEW_WINDOW(win));
                
                /* The delete button should be dimmed when viewing an attachment,
                 * but should be enabled when viewing a message from the list, 
@@ -1041,6 +1073,12 @@ 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)
+               dimmed = _message_already_sent (MODEST_MSG_VIEW_WINDOW(win));
+
        if (!dimmed) {
                if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
                        /* The move_to button should be dimmed when viewing an attachment,