From: Sergio Villar Senin Date: Mon, 25 Jun 2007 18:56:49 +0000 (+0000) Subject: * Added an attribute sent to the msg edit window that specifies that the mail has... X-Git-Tag: git_migration_finished~3118 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=a8712a6b492bdc754ef169452802773ec89376cd;ds=sidebyside * Added an attribute sent to the msg edit window that specifies that the mail has scheduled to be sent * Modified the window destruction code in the window manager. Now checks that the message has not been sent before trying to save it to drafsts * Some code reorganization in the window manager pmo-trunk-r2415 --- diff --git a/src/gnome/modest-msg-edit-window.c b/src/gnome/modest-msg-edit-window.c index 1788690..f14113b 100644 --- a/src/gnome/modest-msg-edit-window.c +++ b/src/gnome/modest-msg-edit-window.c @@ -68,6 +68,8 @@ struct _ModestMsgEditWindowPrivate { GtkWidget *cc_field; GtkWidget *bcc_field; GtkWidget *subject_field; + + gboolean sent; }; #define MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ @@ -150,6 +152,7 @@ modest_msg_edit_window_init (ModestMsgEditWindow *obj) priv->cc_field = NULL; priv->bcc_field = NULL; priv->subject_field = NULL; + priv->sent = FALSE; } /** @@ -618,3 +621,22 @@ modest_msg_edit_window_set_file_format (ModestMsgEditWindow *window, g_message ("not implemented yet %s", __FUNCTION__); } + +gboolean +modest_msg_edit_window_get_sent (ModestMsgEditWindow *window) +{ + ModestMsgEditWindowPrivate *priv; + + priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(window); + return priv->sent; +} + +void +modest_msg_edit_window_set_sent (ModestMsgEditWindow *window, + gboolean sent) +{ + ModestMsgEditWindowPrivate *priv; + + priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(window); + priv->sent = sent; +} diff --git a/src/maemo/modest-msg-edit-window.c b/src/maemo/modest-msg-edit-window.c index 7a893bb..c120bb0 100644 --- a/src/maemo/modest-msg-edit-window.c +++ b/src/maemo/modest-msg-edit-window.c @@ -199,6 +199,7 @@ struct _ModestMsgEditWindowPrivate { gulong system_clipboard_change_handler_id; TnyMsg *draft_msg; + gboolean sent; }; #define MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ @@ -300,6 +301,7 @@ modest_msg_edit_window_init (ModestMsgEditWindow *obj) priv->draft_msg = NULL; priv->clipboard_change_handler_id = 0; priv->system_clipboard_change_handler_id = 0; + priv->sent = FALSE; } @@ -2818,3 +2820,22 @@ view_menu_activated (GtkAction *action, update_zoom_dimming (window); } + +gboolean +modest_msg_edit_window_get_sent (ModestMsgEditWindow *window) +{ + ModestMsgEditWindowPrivate *priv; + + priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(window); + return priv->sent; +} + +void +modest_msg_edit_window_set_sent (ModestMsgEditWindow *window, + gboolean sent) +{ + ModestMsgEditWindowPrivate *priv; + + priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(window); + priv->sent = sent; +} diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 7326caa..fa1d7b3 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -1643,6 +1643,7 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) g_object_unref (G_OBJECT (mail_operation)); modest_msg_edit_window_free_msg_data (edit_window, data); + modest_msg_edit_window_set_sent (edit_window, TRUE); /* Save settings and close the window: */ gtk_widget_destroy (GTK_WIDGET (edit_window)); diff --git a/src/widgets/modest-msg-edit-window.h b/src/widgets/modest-msg-edit-window.h index bbc30d0..ea39433 100644 --- a/src/widgets/modest-msg-edit-window.h +++ b/src/widgets/modest-msg-edit-window.h @@ -334,6 +334,9 @@ void modest_msg_edit_window_toggle_find_toolbar (ModestMsgEditWindow */ gboolean modest_msg_edit_window_is_modified (ModestMsgEditWindow *window); +gboolean modest_msg_edit_window_get_sent (ModestMsgEditWindow *window); +void modest_msg_edit_window_set_sent (ModestMsgEditWindow *window, + gboolean sent); G_END_DECLS diff --git a/src/widgets/modest-window-mgr.c b/src/widgets/modest-window-mgr.c index e7709db..9d10d8b 100644 --- a/src/widgets/modest-window-mgr.c +++ b/src/widgets/modest-window-mgr.c @@ -250,9 +250,12 @@ on_window_destroy (ModestWindow *window, ModestWindowMgr *self) } } } else { - if (MODEST_IS_MSG_EDIT_WINDOW (window)) - /* Save currently edited message to Drafts */ - if (modest_msg_edit_window_is_modified (MODEST_MSG_EDIT_WINDOW (window))) { + if (MODEST_IS_MSG_EDIT_WINDOW (window)) { + gboolean sent; + + sent = modest_msg_edit_window_get_sent (MODEST_MSG_EDIT_WINDOW (window)); + /* Save currently edited message to Drafts if it was not sent */ + if (!sent && modest_msg_edit_window_is_modified (MODEST_MSG_EDIT_WINDOW (window))) { gint response = modest_platform_run_confirmation_dialog (GTK_WINDOW (self), _("mcen_nc_no_email_message_modified_save_changes")); @@ -260,6 +263,7 @@ on_window_destroy (ModestWindow *window, ModestWindowMgr *self) modest_ui_actions_on_save_to_drafts (NULL, MODEST_MSG_EDIT_WINDOW (window)); } } + } } /* Unregister window */ @@ -272,7 +276,7 @@ modest_window_mgr_unregister_window (ModestWindowMgr *self, { GList *win; ModestWindowMgrPrivate *priv; - gint *handler_id; + gint *tmp, handler_id; g_return_if_fail (MODEST_IS_WINDOW_MGR (self)); g_return_if_fail (MODEST_IS_WINDOW (window)); @@ -292,19 +296,18 @@ modest_window_mgr_unregister_window (ModestWindowMgr *self, /* Save state */ modest_window_save_state (window); - /* Remove from list */ + /* Remove from list & hash table */ priv->window_list = g_list_remove_link (priv->window_list, win); + tmp = g_hash_table_lookup (priv->destroy_handlers, window); + handler_id = *tmp; + g_hash_table_remove (priv->destroy_handlers, window); /* Remove the reference to the window. We need to block the destroy event handler to avoid recursive calls */ - handler_id = g_hash_table_lookup (priv->destroy_handlers, window); - g_signal_handler_block (window, *handler_id); + g_signal_handler_block (window, handler_id); gtk_widget_destroy (win->data); - if (G_IS_OBJECT (window)) { - g_warning ("This should not happen the window was not completely destroyed"); - g_signal_handler_unblock (window, *handler_id); - } - g_hash_table_remove (priv->destroy_handlers, window); + if (G_IS_OBJECT (window)) + g_signal_handler_unblock (window, handler_id); /* If there are no more windows registered then exit program */ if (priv->window_list == NULL) {