{
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));
}
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;
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);
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;
/* 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:
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)
{
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,
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,