#include <tny-camel-pop-folder.h>
#ifdef MODEST_TOOLKIT_HILDON2
#include <hildon/hildon-pannable-area.h>
+#include <modest-header-window.h>
#endif
#ifdef MODEST_PLATFORM_MAEMO
#include "modest-account-mgr-helpers.h"
#include "modest-mail-operation.h"
#include "modest-text-utils.h"
-
-#ifdef MODEST_HAVE_EASYSETUP
-#ifdef MODEST_TOOLKIT_HILDON2
-#include "modest-easysetup-wizard-dialog.h"
-#else
-#include "easysetup/modest-easysetup-wizard-dialog.h"
-#endif
-#endif /* MODEST_HAVE_EASYSETUP */
-
#include <modest-widget-memory.h>
#include <tny-error.h>
#include <tny-simple-list.h>
gboolean
modest_ui_actions_run_account_setup_wizard (ModestWindow *win)
{
- gboolean result = FALSE;
+ gboolean result = FALSE;
GtkWindow *wizard;
gint dialog_response;
- /* there is no such wizard yet */
+ /* there is no such wizard yet */
wizard = GTK_WINDOW (modest_platform_get_account_settings_wizard ());
modest_window_mgr_set_modal (modest_runtime_get_window_mgr(), GTK_WINDOW (wizard), (GtkWindow *) win);
if (!win)
win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(),
TRUE); /* create if not existent */
-
+
gtk_window_set_transient_for (GTK_WINDOW (wizard), GTK_WINDOW (win));
/* make sure the mainwindow is visible. We need to present the
gtk_window_present (GTK_WINDOW (win));
gtk_window_present (GTK_WINDOW (wizard));
#endif
-
+
dialog_response = gtk_dialog_run (GTK_DIALOG (wizard));
gtk_widget_destroy (GTK_WIDGET (wizard));
if (gtk_events_pending ())
}
void
+modest_ui_actions_add_to_contacts (GtkAction *action, ModestWindow *win)
+{
+ g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win));
+
+ modest_msg_view_window_add_to_contacts (MODEST_MSG_VIEW_WINDOW (win));
+}
+
+void
modest_ui_actions_on_add_to_contacts (GtkAction *action, ModestWindow *win)
{
GtkClipboard *clipboard = NULL;
}
void
-modest_ui_actions_on_accounts (GtkAction *action,
+modest_ui_actions_on_accounts (GtkAction *action,
ModestWindow *win)
{
/* This is currently only implemented for Maemo */
if (!modest_account_mgr_has_accounts (modest_runtime_get_account_mgr(), TRUE)) {
- if (!modest_ui_actions_run_account_setup_wizard (win))
+ if (!modest_ui_actions_run_account_setup_wizard (win))
g_debug ("%s: wizard was already running", __FUNCTION__);
-
+
return;
} else {
/* Show the list of accounts */
GtkWindow *account_win = GTK_WINDOW (modest_account_view_window_new ());
-
+
/* The accounts dialog must be modal */
modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (account_win), (GtkWindow *) win);
modest_utils_show_dialog_and_forget (GTK_WINDOW (win), GTK_DIALOG (account_win));
* possiblities.
*/
#ifndef MODEST_TOOLKIT_GTK /* Defined in config.h */
-
+
/* Create the window if necessary: */
GtkWidget *specific_window = GTK_WIDGET (modest_connection_specific_smtp_window_new ());
modest_connection_specific_smtp_window_fill_with_connections (
ModestTnyAccountStore *store = modest_runtime_get_account_store();
GnomeVFSFileSize total_size, allowed_size;
- /* we check for low-mem; in that case, show a warning, and don't allow
- * composing a message with attachments
- */
- if (attachments && modest_platform_check_memory_low (win, TRUE))
+ /* we check for low-mem */
+ if (modest_platform_check_memory_low (win, TRUE))
goto cleanup;
#ifdef MODEST_TOOLKIT_HILDON2
typedef struct {
GtkTreeModel *model;
- TnyList *headers;
+ TnyHeader *header;
OpenMsgBannerInfo *banner_info;
- GHashTable *row_refs_per_header;
+ GtkTreeRowReference *rowref;
} OpenMsgHelper;
gboolean
}
-static void
-open_msg_cb (ModestMailOperation *mail_op,
- TnyHeader *header,
- gboolean canceled,
- TnyMsg *msg,
- GError *err,
- gpointer user_data)
+static GtkWidget *
+get_header_view_from_window (ModestWindow *window)
{
- ModestWindowMgr *mgr = NULL;
- ModestWindow *parent_win = NULL;
- ModestWindow *win = NULL;
- TnyFolderType folder_type = TNY_FOLDER_TYPE_UNKNOWN;
- gchar *account = NULL;
- TnyFolder *folder;
- gboolean open_in_editor = FALSE;
- OpenMsgHelper *helper = (OpenMsgHelper *) user_data;
-
- /* Do nothing if there was any problem with the mail
- operation. The error will be shown by the error_handler of
- the mail operation */
- if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg))
- return;
+ GtkWidget *header_view;
- parent_win = (ModestWindow *) modest_mail_operation_get_source (mail_op);
- folder = tny_header_get_folder (header);
+ if (MODEST_IS_MAIN_WINDOW (window)) {
+ header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
+#ifdef MODEST_TOOLKIT_HILDON2
+ } else if (MODEST_IS_HEADER_WINDOW (window)){
+ header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (window)));
+#endif
+ } else {
+ header_view = NULL;
+ }
- /* Mark header as read */
- headers_action_mark_as_read (header, MODEST_WINDOW(parent_win), NULL);
+ return header_view;
+}
+static gchar *
+get_info_from_header (TnyHeader *header, gboolean *is_draft)
+{
+ TnyFolder *folder;
+ gchar *account = NULL;
+ TnyFolderType folder_type = TNY_FOLDER_TYPE_UNKNOWN;
+
+ *is_draft = FALSE;
+
+ folder = tny_header_get_folder (header);
/* Gets folder type (OUTBOX headers will be opened in edit window */
if (modest_tny_folder_is_local_folder (folder)) {
folder_type = modest_tny_folder_get_local_or_mmc_folder_type (folder);
if (folder_type == TNY_FOLDER_TYPE_INVALID)
g_warning ("%s: BUG: TNY_FOLDER_TYPE_INVALID", __FUNCTION__);
}
-
if (folder_type == TNY_FOLDER_TYPE_OUTBOX) {
TnyTransportAccount *traccount = NULL;
if (traccount) {
ModestTnySendQueue *send_queue = NULL;
ModestTnySendQueueStatus status;
- char *msg_id;
+ gchar *msg_id;
account = g_strdup(modest_tny_account_get_parent_modest_account_name_for_server_account(
TNY_ACCOUNT(traccount)));
send_queue = modest_runtime_get_send_queue(traccount, TRUE);
if (TNY_IS_SEND_QUEUE (send_queue)) {
msg_id = modest_tny_send_queue_get_msg_id (header);
status = modest_tny_send_queue_get_msg_status(send_queue, msg_id);
+ g_free (msg_id);
/* Only open messages in outbox with the editor if they are in Failed state */
if (status == MODEST_TNY_SEND_QUEUE_FAILED) {
- open_in_editor = TRUE;
+ *is_draft = TRUE;
}
- g_free(msg_id);
+#ifdef MODEST_TOOLKIT_HILDON2
+ else {
+ /* In Fremantle we can not
+ open any message from
+ outbox which is not in
+ failed state */
+ g_object_unref(traccount);
+ }
+#endif
}
g_object_unref(traccount);
} else {
g_warning("Cannot get transport account for message in outbox!!");
}
} else if (folder_type == TNY_FOLDER_TYPE_DRAFTS) {
- open_in_editor = TRUE; /* Open in editor if the message is in the Drafts folder */
+ *is_draft = TRUE; /* Open in editor if the message is in the Drafts folder */
}
+ g_object_unref (folder);
+
+ return account;
+}
+
+static void
+open_msg_cb (ModestMailOperation *mail_op,
+ TnyHeader *header,
+ gboolean canceled,
+ TnyMsg *msg,
+ GError *err,
+ gpointer user_data)
+{
+ ModestWindowMgr *mgr = NULL;
+ ModestWindow *parent_win = NULL;
+ ModestWindow *win = NULL;
+ gchar *account = NULL;
+ gboolean open_in_editor = FALSE;
+ OpenMsgHelper *helper = (OpenMsgHelper *) user_data;
+
+ /* Do nothing if there was any problem with the mail
+ operation. The error will be shown by the error_handler of
+ the mail operation */
+ if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg))
+ return;
+
+ parent_win = (ModestWindow *) modest_mail_operation_get_source (mail_op);
+
+ /* Mark header as read */
+ headers_action_mark_as_read (header, MODEST_WINDOW(parent_win), NULL);
+
+ account = get_info_from_header (header, &open_in_editor);
+
/* Get account */
if (!account)
account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (parent_win)));
win = modest_msg_edit_window_new (msg, account, TRUE);
} else {
gchar *uid = modest_tny_folder_get_header_unique_id (header);
-
- if (MODEST_IS_MAIN_WINDOW (parent_win)) {
- GtkTreeRowReference *row_reference;
- row_reference = (GtkTreeRowReference *) g_hash_table_lookup (helper->row_refs_per_header, header);
-
+ if (helper->rowref && helper->model) {
win = modest_msg_view_window_new_with_header_model (msg, account, (const gchar*) uid,
- helper->model, row_reference);
+ helper->model, helper->rowref);
} else {
win = modest_msg_view_window_new_for_attachment (msg, account, (const gchar*) uid);
}
/* Free */
g_free(account);
g_object_unref (parent_win);
- g_object_unref (folder);
}
static gboolean
return account;
}
-static void
-foreach_unregister_headers (gpointer data,
- gpointer user_data)
+static TnyAccount*
+get_account_from_header (TnyHeader *header)
{
- ModestWindowMgr *mgr = (ModestWindowMgr *) user_data;
- TnyHeader *header = TNY_HEADER (data);
+ TnyAccount *account = NULL;
+ TnyFolder *folder;
- modest_window_mgr_unregister_header (mgr, header);
+ folder = tny_header_get_folder (header);
+
+ if (folder) {
+ account = tny_folder_get_account (folder);
+ g_object_unref (folder);
+ }
+
+ return account;
}
static void
-open_msgs_helper_destroyer (gpointer user_data)
+open_msg_helper_destroyer (gpointer user_data)
{
OpenMsgHelper *helper = (OpenMsgHelper *) user_data;
helper->banner_info = NULL;
}
g_object_unref (helper->model);
- g_object_unref (helper->headers);
- g_hash_table_destroy (helper->row_refs_per_header);
+ g_object_unref (helper->header);
+ gtk_tree_row_reference_free (helper->rowref);
g_slice_free (OpenMsgHelper, helper);
}
static void
-open_msgs_performer(gboolean canceled,
+open_msg_performer(gboolean canceled,
GError *err,
GtkWindow *parent_window,
TnyAccount *account,
ModestMailOperation *mail_op = NULL;
gchar *error_msg;
ModestProtocolType proto;
- TnyList *not_opened_headers;
TnyConnectionStatus status;
gboolean show_open_draft = FALSE;
OpenMsgHelper *helper = NULL;
helper = (OpenMsgHelper *) user_data;
- not_opened_headers = helper->headers;
status = tny_account_get_connection_status (account);
if (err || canceled) {
- /* Unregister the already registered headers */
- tny_list_foreach (not_opened_headers, foreach_unregister_headers,
- modest_runtime_get_window_mgr ());
+ modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), helper->header);
/* Free the helper */
- open_msgs_helper_destroyer (helper);
-
+ open_msg_helper_destroyer (helper);
+
/* In memory full conditions we could get this error here */
check_memory_full_error ((GtkWidget *) parent_window, err);
-
+
goto clean;
}
proto = MODEST_PROTOCOLS_STORE_MAILDIR;
}
- /* Create the error messages */
- if (tny_list_get_length (not_opened_headers) == 1) {
- ModestProtocol *protocol;
- ModestProtocolRegistry *protocol_registry;
- TnyIterator *iter;
- TnyHeader *header;
- gchar *subject;
-
- protocol_registry = modest_runtime_get_protocol_registry ();
- iter = tny_list_create_iterator (not_opened_headers);
- header = TNY_HEADER (tny_iterator_get_current (iter));
- subject = tny_header_dup_subject (header);
+ ModestProtocol *protocol;
+ ModestProtocolRegistry *protocol_registry;
+ gchar *subject;
+
+ protocol_registry = modest_runtime_get_protocol_registry ();
+ subject = tny_header_dup_subject (helper->header);
- protocol = modest_protocol_registry_get_protocol_by_type (protocol_registry, proto);
- error_msg = modest_protocol_get_translation (protocol, MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE, subject);
- if (subject)
- g_free (subject);
- g_object_unref (header);
- g_object_unref (iter);
+ protocol = modest_protocol_registry_get_protocol_by_type (protocol_registry, proto);
+ error_msg = modest_protocol_get_translation (protocol, MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE, subject);
+ if (subject)
+ g_free (subject);
- if (error_msg == NULL) {
- error_msg = g_strdup (_("mail_ni_ui_folder_get_msg_folder_error"));
- }
+ if (error_msg == NULL) {
+ error_msg = g_strdup (_("mail_ni_ui_folder_get_msg_folder_error"));
+ }
- if (modest_protocol_registry_protocol_type_has_tag (protocol_registry,
- proto,
- MODEST_PROTOCOL_REGISTRY_LOCAL_STORE_PROTOCOLS)) {
- TnyHeader *header;
- TnyFolder *folder;
- TnyIterator *iter;
- TnyFolderType folder_type;
+ if (modest_protocol_registry_protocol_type_has_tag (protocol_registry,
+ proto,
+ MODEST_PROTOCOL_REGISTRY_LOCAL_STORE_PROTOCOLS)) {
+ TnyFolder *folder;
+ TnyFolderType folder_type;
- iter = tny_list_create_iterator (not_opened_headers);
- header = TNY_HEADER (tny_iterator_get_current (iter));
- folder = tny_header_get_folder (header);
- folder_type = modest_tny_folder_get_local_or_mmc_folder_type (folder);
- show_open_draft = (folder_type == TNY_FOLDER_TYPE_DRAFTS);
- g_object_unref (folder);
- g_object_unref (header);
- g_object_unref (iter);
- }
- } else {
- error_msg = g_strdup (_("mail_ni_ui_folder_get_msg_folder_error"));
+ folder = tny_header_get_folder (helper->header);
+ folder_type = modest_tny_folder_get_local_or_mmc_folder_type (folder);
+ show_open_draft = (folder_type == TNY_FOLDER_TYPE_DRAFTS);
+ g_object_unref (folder);
}
+#ifdef MODEST_TOOLKIT_HILDON2
+ gboolean is_draft;
+ gchar *account_name = get_info_from_header (helper->header, &is_draft);
+
+ if (!is_draft) {
+ ModestWindow *window;
+ GtkWidget *header_view;
+ gchar *uid;
+
+ header_view = get_header_view_from_window (MODEST_WINDOW (parent_window));
+ uid = modest_tny_folder_get_header_unique_id (helper->header);
+ if (header_view) {
+ window = modest_msg_view_window_new_from_header_view
+ (MODEST_HEADER_VIEW (header_view), account_name, uid, helper->rowref);
+ if (window != NULL) {
+ if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr (),
+ window, NULL)) {
+ gtk_widget_destroy (GTK_WIDGET (window));
+ } else {
+ gtk_widget_show_all (GTK_WIDGET(window));
+ }
+ }
+ }
+ g_free (account_name);
+ g_free (uid);
+ open_msg_helper_destroyer (helper);
+ goto clean;
+ }
+ g_free (account_name);
+#endif
/* Create the mail operation */
mail_op =
modest_mail_operation_new_with_error_handling ((GObject *) parent_window,
if (show_open_draft) {
helper->banner_info = g_slice_new (OpenMsgBannerInfo);
+#ifdef MODEST_TOOLKIT_HILDON2
+ helper->banner_info->message = g_strdup (_("mail_me_opening"));
+#else
helper->banner_info->message = g_strdup (_("mail_ib_opening_draft_message"));
+#endif
helper->banner_info->banner = NULL;
helper->banner_info->idle_handler = g_timeout_add (500, open_msg_banner_idle,
helper->banner_info);
}
+ TnyList *headers;
+ headers = TNY_LIST (tny_simple_list_new ());
+ tny_list_prepend (headers, G_OBJECT (helper->header));
modest_mail_operation_get_msgs_full (mail_op,
- not_opened_headers,
+ headers,
open_msg_cb,
helper,
- open_msgs_helper_destroyer);
+ open_msg_helper_destroyer);
+ g_object_unref (headers);
/* Frees */
clean:
* same when trying to open messages.
*/
static void
-open_msgs_from_headers (TnyList *headers, ModestWindow *win)
+open_msg_from_header (TnyHeader *header, GtkTreeRowReference *rowref, ModestWindow *win)
{
ModestWindowMgr *mgr = NULL;
- TnyIterator *iter = NULL, *iter_not_opened = NULL;
- TnyList *not_opened_headers = NULL;
- TnyHeaderFlags flags = 0;
TnyAccount *account;
- gint uncached_msgs = 0;
- GtkWidget *header_view;
- GtkTreeModel *model;
- GHashTable *refs_for_headers;
+ gboolean cached = FALSE;
+ gboolean found;
+ GtkWidget *header_view = NULL;
OpenMsgHelper *helper;
- GtkTreeSelection *sel;
- GList *sel_list = NULL, *sel_list_iter = NULL;
+ ModestWindow *window;
- g_return_if_fail (headers != NULL);
-
- /* Check that only one message is selected for opening */
- if (tny_list_get_length (headers) != 1) {
- modest_platform_information_banner ((win) ? GTK_WIDGET (win) : NULL,
- NULL, _("mcen_ib_select_one_message"));
- return;
- }
+ g_return_if_fail (header != NULL && rowref != NULL);
mgr = modest_runtime_get_window_mgr ();
- iter = tny_list_create_iterator (headers);
- /* Get the account */
- account = get_account_from_header_list (headers);
+ /* get model */
+ header_view = get_header_view_from_window (MODEST_WINDOW (win));
+ if (header_view == NULL)
+ return;
+ /* Get the account */
+ account = get_account_from_header (header);
if (!account)
return;
- /* Get the selections, we need to get the references to the
- rows here because the treeview/model could dissapear (the
- user might want to select another folder)*/
- header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view));
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
- sel_list = gtk_tree_selection_get_selected_rows (sel, &model);
- refs_for_headers = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL,
- (GDestroyNotify) gtk_tree_row_reference_free);
-
- /* Look if we already have a message view for each header. If
- true, then remove the header from the list of headers to
- open */
- sel_list_iter = sel_list;
- not_opened_headers = tny_simple_list_new ();
- while (!tny_iterator_is_done (iter) && sel_list_iter) {
-
- ModestWindow *window = NULL;
- TnyHeader *header = NULL;
- gboolean found = FALSE;
+ window = NULL;
+ found = modest_window_mgr_find_registered_header (mgr, header, &window);
- header = TNY_HEADER (tny_iterator_get_current (iter));
- if (header)
- flags = tny_header_get_flags (header);
-
- window = NULL;
- found = modest_window_mgr_find_registered_header (mgr, header, &window);
-
- /* Do not open again the message and present the
- window to the user */
- if (found) {
- if (window) {
+ /* Do not open again the message and present the
+ window to the user */
+ if (found) {
+ if (window) {
#ifndef MODEST_TOOLKIT_HILDON2
- gtk_window_present (GTK_WINDOW (window));
+ gtk_window_present (GTK_WINDOW (window));
#endif
- } else {
- /* the header has been registered already, we don't do
- * anything but wait for the window to come up*/
- g_debug ("header %p already registered, waiting for window", header);
- }
} else {
- GtkTreeRowReference *row_reference;
-
- tny_list_append (not_opened_headers, G_OBJECT (header));
- /* Create a new row reference and add it to the hash table */
- row_reference = gtk_tree_row_reference_new (model, (GtkTreePath *) sel_list_iter->data);
- g_hash_table_insert (refs_for_headers, header, row_reference);
+ /* the header has been registered already, we don't do
+ * anything but wait for the window to come up*/
+ g_debug ("header %p already registered, waiting for window", header);
}
-
- if (header)
- g_object_unref (header);
-
- /* Go to next */
- tny_iterator_next (iter);
- sel_list_iter = g_list_next (sel_list_iter);
+ goto cleanup;
}
- g_object_unref (iter);
- iter = NULL;
- g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL);
- g_list_free (sel_list);
/* Open each message */
- if (tny_list_get_length (not_opened_headers) == 0) {
- g_hash_table_destroy (refs_for_headers);
- goto cleanup;
- }
-
- /* If some messages would have to be downloaded, ask the user to
- * make a connection. It's generally easier to do this here (in the mainloop)
- * than later in a thread:
- */
- if (tny_list_get_length (not_opened_headers) > 0) {
- uncached_msgs = header_list_count_uncached_msgs (not_opened_headers);
-
- if (uncached_msgs > 0) {
- /* Allways download if we are online. */
- if (!tny_device_is_online (modest_runtime_get_device ())) {
- gint response;
-
- /* If ask for user permission to download the messages */
- response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
- ngettext("mcen_nc_get_msg",
- "mcen_nc_get_msgs",
- uncached_msgs));
-
- /* End if the user does not want to continue */
- if (response == GTK_RESPONSE_CANCEL) {
- g_hash_table_destroy (refs_for_headers);
- goto cleanup;
- }
+ cached = tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED;
+ if (!cached) {
+ /* Allways download if we are online. */
+ if (!tny_device_is_online (modest_runtime_get_device ())) {
+ gint response;
+
+ /* If ask for user permission to download the messages */
+ response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
+ _("mcen_nc_get_msg"));
+
+ /* End if the user does not want to continue */
+ if (response == GTK_RESPONSE_CANCEL) {
+ goto cleanup;
}
}
}
- /* Register the headers before actually creating the windows: */
- iter_not_opened = tny_list_create_iterator (not_opened_headers);
- while (!tny_iterator_is_done (iter_not_opened)) {
- TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter_not_opened));
- if (header) {
- modest_window_mgr_register_header (mgr, header, NULL);
- g_object_unref (header);
- }
- tny_iterator_next (iter_not_opened);
- }
- g_object_unref (iter_not_opened);
- iter_not_opened = NULL;
+ /* We register the window for opening */
+ modest_window_mgr_register_header (mgr, header, NULL);
/* Create the helper. We need to get a reference to the model
here because it could change while the message is readed
(the user could switch between folders) */
helper = g_slice_new (OpenMsgHelper);
- helper->model = g_object_ref (model);
- helper->headers = g_object_ref (not_opened_headers);
- helper->row_refs_per_header = refs_for_headers;
+ helper->model = g_object_ref (gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)));
+ helper->header = g_object_ref (header);
+ helper->rowref = gtk_tree_row_reference_copy (rowref);
helper->banner_info = NULL;
/* Connect to the account and perform */
- if (uncached_msgs > 0) {
+ if (!cached) {
modest_platform_connect_and_perform ((GtkWindow *) win, TRUE, g_object_ref (account),
- open_msgs_performer, helper);
+ open_msg_performer, helper);
} else {
/* Call directly the performer, do not need to connect */
- open_msgs_performer (FALSE, NULL, (GtkWindow *) win,
- g_object_ref (account), helper);
+ open_msg_performer (FALSE, NULL, (GtkWindow *) win,
+ g_object_ref (account), helper);
}
cleanup:
/* Clean */
if (account)
g_object_unref (account);
- if (not_opened_headers)
- g_object_unref (not_opened_headers);
}
void
modest_ui_actions_on_open (GtkAction *action, ModestWindow *win)
{
TnyList *headers;
+ TnyHeader *header;
+ gint headers_count;
+ TnyIterator *iter;
/* we check for low-mem; in that case, show a warning, and don't allow
* opening
if (!headers)
return;
+ headers_count = tny_list_get_length (headers);
+ if (headers_count != 1) {
+ if (headers_count > 1) {
+ /* Don't allow activation if there are more than one message selected */
+ modest_platform_information_banner (NULL, NULL, _("mcen_ib_select_one_message"));
+ }
+
+ g_object_unref (headers);
+ return;
+ }
+
+ iter = tny_list_create_iterator (headers);
+ header = TNY_HEADER (tny_iterator_get_current (iter));
+ g_object_unref (iter);
+
/* Open them */
- open_msgs_from_headers (headers, win);
+ if (header) {
+ open_msg_from_header (header, NULL, win);
+ g_object_unref (header);
+ }
g_object_unref(headers);
}
modest_ui_actions_on_sort (GtkAction *action,
ModestWindow *window)
{
+ GtkWidget *header_view = NULL;
+
g_return_if_fail (MODEST_IS_WINDOW(window));
if (MODEST_IS_MAIN_WINDOW (window)) {
- GtkWidget *header_view;
header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window),
MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- if (!header_view) {
- modest_platform_information_banner (NULL, NULL, _CS("ckdg_ib_nothing_to_sort"));
-
- return;
- }
+#ifdef MODEST_TOOLKIT_HILDON2
+ } else if (MODEST_IS_HEADER_WINDOW (window)) {
+ header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (window)));
+#endif
+ }
- /* Show sorting dialog */
- modest_utils_run_sort_dialog (GTK_WINDOW (window), MODEST_SORT_HEADERS);
+ if (!header_view) {
+ modest_platform_information_banner (NULL, NULL, _CS("ckdg_ib_nothing_to_sort"));
+
+ return;
}
+
+ /* Show sorting dialog */
+ modest_utils_run_sort_dialog (GTK_WINDOW (window), MODEST_SORT_HEADERS);
}
static void
if (folder_store)
g_object_unref (folder_store);
- }
+ /* Refresh the active account. Force the connection if needed
+ and poke the status of all folders */
+ modest_ui_actions_do_send_receive (NULL, TRUE, TRUE, TRUE, win);
+ } else {
+ const gchar *active_account;
+ active_account = modest_window_get_active_account (MODEST_WINDOW (win));
+
+ modest_ui_actions_do_send_receive (active_account, TRUE, TRUE, TRUE, win);
+ }
- /* Refresh the active account. Force the connection if needed
- and poke the status of all folders */
- modest_ui_actions_do_send_receive (NULL, TRUE, TRUE, TRUE, win);
}
void
modest_ui_actions_on_header_activated (ModestHeaderView *header_view,
TnyHeader *header,
- ModestMainWindow *main_window)
+ GtkTreePath *path,
+ ModestWindow *window)
{
- TnyList *headers;
GtkWidget *open_widget;
+ GtkTreeRowReference *rowref;
- g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
-
- if (!header)
- return;
+ g_return_if_fail (MODEST_IS_WINDOW(window));
+ g_return_if_fail (MODEST_IS_HEADER_VIEW (header_view));
+ g_return_if_fail (TNY_IS_HEADER (header));
if (modest_header_view_count_selected_headers (header_view) > 1) {
+ /* Don't allow activation if there are more than one message selected */
modest_platform_information_banner (NULL, NULL, _("mcen_ib_select_one_message"));
return;
}
/* we check for low-mem; in that case, show a warning, and don't allow
* activating headers
*/
- if (modest_platform_check_memory_low (MODEST_WINDOW(main_window), TRUE))
- return;
-
- modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
- open_widget = modest_window_get_action_widget (MODEST_WINDOW (main_window), "/MenuBar/EmailMenu/EmailOpenMenu");
- if (!GTK_WIDGET_IS_SENSITIVE (open_widget))
+ if (modest_platform_check_memory_low (MODEST_WINDOW(window), TRUE))
return;
- headers = modest_header_view_get_selected_headers (header_view);
-
- open_msgs_from_headers (headers, MODEST_WINDOW (main_window));
+ if (MODEST_IS_MAIN_WINDOW (window)) {
+ modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
+ open_widget = modest_window_get_action_widget (MODEST_WINDOW (window), "/MenuBar/EmailMenu/EmailOpenMenu");
+ if (!GTK_WIDGET_IS_SENSITIVE (open_widget))
+ return;
+ }
- g_object_unref (headers);
+ rowref = gtk_tree_row_reference_new (gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)), path);
+ open_msg_from_header (header, rowref, MODEST_WINDOW (window));
+ gtk_tree_row_reference_free (rowref);
}
static void
modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view),
TNY_FOLDER (folder_store),
TRUE,
+ MODEST_WINDOW (main_window),
folder_refreshed_cb,
main_window);
gpointer user_data)
{
ModestMsgEditWindow *edit_window;
+
+ /* TODO: in hildon 2 we have to dim and undim the header views while we're saving */
+#ifndef MODEST_TOOLKIT_HILDON2
ModestMainWindow *win;
/* FIXME. Make the header view sensitive again. This is a
win, MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
if (hdrview) gtk_widget_set_sensitive(hdrview, TRUE);
}
+#endif
edit_window = MODEST_MSG_EDIT_WINDOW (user_data);
return;
if (TNY_IS_FOLDER (folder)) {
- gchar *folder_name;
+ gchar *folder_name = NULL;
gint response;
const gchar *current_name;
TnyFolderStore *parent;
}
void
-modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
+modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
const gchar* server_account_name,
gchar **username,
- gchar **password,
- gboolean *cancel,
+ gchar **password,
+ gboolean *cancel,
gboolean *remember,
ModestMainWindow *main_window)
{
g_return_if_fail(server_account_name);
gboolean completed = FALSE;
PasswordDialogFields *fields = NULL;
-
+
/* Initalize output parameters: */
if (cancel)
*cancel = FALSE;
-
+
if (remember)
*remember = TRUE;
-
+
#ifndef MODEST_TOOLKIT_GTK
/* Maemo uses a different (awkward) button order,
* It should probably just use gtk_alternative_dialog_button_order ().
*/
- GtkWidget *dialog = gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
- NULL,
- GTK_DIALOG_MODAL,
- _("mcen_bd_dialog_ok"),
- GTK_RESPONSE_ACCEPT,
- _("mcen_bd_dialog_cancel"),
- GTK_RESPONSE_REJECT,
- NULL);
+#ifdef MODEST_TOOLKIT_HILDON2
+ GtkWidget *dialog =
+ gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
+ NULL,
+ GTK_DIALOG_MODAL,
+ _HL("wdgt_bd_done"),
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#else
- GtkWidget *dialog = gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
- NULL,
- GTK_DIALOG_MODAL,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_OK,
- GTK_RESPONSE_ACCEPT,
- NULL);
-#endif /* !MODEST_TOOLKIT_GTK */
+ GtkWidget *dialog =
+ gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
+ NULL,
+ GTK_DIALOG_MODAL,
+ _("mcen_bd_dialog_ok"),
+ GTK_RESPONSE_ACCEPT,
+ _("mcen_bd_dialog_cancel"),
+ GTK_RESPONSE_REJECT,
+ NULL);
+#endif /* MODEST_TOOLKIT_HILDON2 */
+#else
+ GtkWidget *dialog =
+ gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
+ NULL,
+ GTK_DIALOG_MODAL,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+#endif /* MODEST_TOOLKIT_GTK */
modest_window_mgr_set_modal (modest_runtime_get_window_mgr(), GTK_WINDOW (dialog), NULL);
-
+
gchar *server_name = modest_account_mgr_get_server_account_hostname (
modest_runtime_get_account_mgr(), server_account_name);
if (!server_name) {/* This happened once, though I don't know why. murrayc. */
gtk_widget_destroy (dialog);
return;
}
-
- /* This causes a warning because the logical ID has no %s in it,
- * though the translation does, but there is not much we can do about that: */
+
gchar *txt = g_strdup_printf (_("mail_ia_password_info"), server_name);
gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), gtk_label_new(txt),
FALSE, FALSE, 0);
/* username: */
gchar *initial_username = modest_account_mgr_get_server_account_username (
modest_runtime_get_account_mgr(), server_account_name);
-
+
GtkWidget *entry_username = gtk_entry_new ();
if (initial_username)
gtk_entry_set_text (GTK_ENTRY (entry_username), initial_username);
#ifndef MODEST_TOOLKIT_GTK
/* Auto-capitalization is the default, so let's turn it off: */
hildon_gtk_entry_set_input_mode (GTK_ENTRY (entry_username), HILDON_GTK_INPUT_MODE_FULL);
-
+
/* Create a size group to be used by all captions.
* Note that HildonCaption does not create a default size group if we do not specify one.
* We use GTK_SIZE_GROUP_HORIZONTAL, so that the widths are the same. */
GtkSizeGroup *sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-
+
GtkWidget *caption = hildon_caption_new (sizegroup,
_("mail_fi_username"), entry_username, NULL, HILDON_CAPTION_MANDATORY);
gtk_widget_show (entry_username);
gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), caption,
FALSE, FALSE, MODEST_MARGIN_HALF);
gtk_widget_show (caption);
-#else
+#else
gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry_username,
TRUE, FALSE, 0);
-#endif /* !MODEST_TOOLKIT_GTK */
-
+#endif /* !MODEST_TOOLKIT_GTK */
+
/* password: */
GtkWidget *entry_password = gtk_entry_new ();
gtk_entry_set_visibility (GTK_ENTRY(entry_password), FALSE);
/* gtk_entry_set_invisible_char (GTK_ENTRY(entry_password), "*"); */
-
+
#ifndef MODEST_TOOLKIT_GTK
/* Auto-capitalization is the default, so let's turn it off: */
- hildon_gtk_entry_set_input_mode (GTK_ENTRY (entry_password),
+ hildon_gtk_entry_set_input_mode (GTK_ENTRY (entry_password),
HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_INVISIBLE);
-
- caption = hildon_caption_new (sizegroup,
+
+ caption = hildon_caption_new (sizegroup,
_("mail_fi_password"), entry_password, NULL, HILDON_CAPTION_MANDATORY);
gtk_widget_show (entry_password);
- gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), caption,
+ gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), caption,
FALSE, FALSE, MODEST_MARGIN_HALF);
gtk_widget_show (caption);
g_object_unref (sizegroup);
-#else
+#else
gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry_password,
TRUE, FALSE, 0);
-#endif /* !MODEST_TOOLKIT_GTK */
+#endif /* !MODEST_TOOLKIT_GTK */
if (initial_username != NULL)
gtk_widget_grab_focus (GTK_WIDGET (entry_password));
-
+
/* This is not in the Maemo UI spec:
remember_pass_check = gtk_check_button_new_with_label (_("Remember password"));
gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), remember_pass_check,
gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
while (!completed) {
-
+
if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
if (username) {
*username = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry_username)));
-
+
/* Note that an empty field becomes the "" string */
if (*username && strlen (*username) > 0) {
modest_account_mgr_set_server_account_username (modest_runtime_get_account_mgr(),
server_account_name,
*username);
completed = TRUE;
-
+
const gboolean username_was_changed =
(strcmp (*username, initial_username) != 0);
if (username_was_changed) {
"username in the get_password() callback.\n", __FUNCTION__);
}
} else {
+ g_free (*username);
+ *username = NULL;
/* Show error */
modest_platform_information_banner (GTK_WIDGET (dialog), NULL,
_("mcen_ib_username_pw_incorrect"));
completed = FALSE;
}
}
-
+
if (password) {
*password = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry_password)));
-
+
/* We do not save the password in the configuration,
* because this function is only called for passwords that should
* not be remembered:
modest_runtime_get_account_mgr(), server_account_name,
*password);
*/
- }
+ }
if (cancel)
- *cancel = FALSE;
+ *cancel = FALSE;
} else {
+#ifndef MODEST_TOOLKIT_HILDON2
/* Set parent to NULL or the banner will disappear with its parent dialog */
modest_platform_information_banner(NULL, NULL, _("mail_ib_login_cancelled"));
+#endif
completed = TRUE;
if (username)
- *username = NULL;
+ *username = NULL;
if (password)
- *password = NULL;
+ *password = NULL;
if (cancel)
*cancel = TRUE;
}
*remember = FALSE;
*/
+ g_free (initial_username);
gtk_widget_destroy (dialog);
g_slice_free (PasswordDialogFields, fields);
gtk_text_buffer_paste_clipboard (buffer, clipboard, NULL, TRUE);
} else if (MODEST_IS_MSG_EDIT_WINDOW (window)) {
ModestMailOperation *mail_op;
- TnyFolder *src_folder;
- TnyList *data;
+ TnyFolder *src_folder = NULL;
+ TnyList *data = NULL;
gboolean delete;
PasteAsAttachmentHelper *helper = g_new0 (PasteAsAttachmentHelper, 1);
helper->window = MODEST_MSG_EDIT_WINDOW (window);
helper,
paste_as_attachment_free);
}
+ /* Free */
+ if (data)
+ g_object_unref (data);
+ if (src_folder)
+ g_object_unref (src_folder);
+
}
} else if (MODEST_IS_FOLDER_VIEW (focused_widget)) {
ModestEmailClipboard *clipboard = NULL;
/* Show details of each header */
do_headers_action (win, headers_action_show_details, header_view);
}
+#ifdef MODEST_TOOLKIT_HILDON2
+ } else if (MODEST_IS_HEADER_WINDOW (win)) {
+ TnyFolder *folder;
+ GtkWidget *header_view;
+
+ header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (win)));
+ folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view));
+ if (folder) {
+ modest_platform_run_folder_details_dialog (GTK_WINDOW (win),
+ folder);
+ g_object_unref (folder);
+ }
+#endif
}
}
active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (toggle));
- /* Check if we want to toggle the toolbar vuew in fullscreen
+ /* Check if we want to toggle the toolbar view in fullscreen
or normal mode */
if (!strcmp (gtk_action_get_name (GTK_ACTION (toggle)),
"ViewShowToolbarFullScreen")) {
if (response == GTK_RESPONSE_OK) {
GtkWidget *info;
info =
- modest_platform_animation_banner (GTK_WIDGET (win), NULL, _("mcen_ib_removing_attachment"));
+ modest_platform_animation_banner (GTK_WIDGET (win), NULL, _("mcen_me_inbox_remove_attachments"));
iter = tny_list_create_iterator (parts);
while (!tny_iterator_is_done (iter)) {
TnyMimePart *part;
modest_ui_actions_on_help (GtkAction *action,
GtkWindow *win)
{
+ /* Help app is not available at all in fremantle */
+#ifndef MODEST_TOOLKIT_HILDON2
const gchar *help_id;
g_return_if_fail (win && GTK_IS_WINDOW(win));
if (help_id)
modest_platform_show_help (GTK_WINDOW (win), help_id);
+#endif
}
void
modest_ui_actions_on_csm_help (GtkAction *action,
GtkWindow *win)
{
+ /* Help app is not available at all in fremantle */
+#ifndef MODEST_TOOLKIT_HILDON2
+
const gchar* help_id = NULL;
GtkWidget *folder_view;
TnyFolderStore *folder_store;
modest_platform_show_help (GTK_WINDOW (win), help_id);
else
modest_ui_actions_on_help (action, win);
+#endif
}
static void
return msg;
}
+
+gboolean
+modest_ui_actions_on_delete_account (GtkWindow *parent_window,
+ const gchar *account_name,
+ const gchar *account_title)
+{
+ ModestAccountMgr *account_mgr;
+ gchar *txt = NULL;
+ gint response;
+ ModestProtocol *protocol;
+ gboolean removed = FALSE;
+
+ g_return_val_if_fail (account_name, FALSE);
+ g_return_val_if_fail (account_title, FALSE);
+
+ account_mgr = modest_runtime_get_account_mgr();
+
+ /* The warning text depends on the account type: */
+ protocol = modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (),
+ modest_account_mgr_get_store_protocol (account_mgr,
+ account_name));
+ txt = modest_protocol_get_translation (protocol,
+ MODEST_PROTOCOL_TRANSLATION_DELETE_MAILBOX,
+ account_title);
+ if (txt == NULL)
+ txt = g_strdup_printf (_("emev_nc_delete_mailbox"), account_title);
+
+ response = modest_platform_run_confirmation_dialog (parent_window, txt);
+ g_free (txt);
+ txt = NULL;
+
+ if (response == GTK_RESPONSE_OK) {
+ /* Remove account. If it succeeds then it also removes
+ the account from the ModestAccountView: */
+ gboolean is_default = FALSE;
+ gchar *default_account_name = modest_account_mgr_get_default_account (account_mgr);
+ if (default_account_name && (strcmp (default_account_name, account_name) == 0))
+ is_default = TRUE;
+ g_free (default_account_name);
+
+ removed = modest_account_mgr_remove_account (account_mgr, account_name);
+ if (!removed)
+ g_warning ("%s: modest_account_mgr_remove_account() failed.\n", __FUNCTION__);
+ }
+ return removed;
+}