#include <tny-camel-imap-folder.h>
#include <tny-camel-pop-folder.h>
#ifdef MODEST_TOOLKIT_HILDON2
+#include <modest-accounts-window.h>
#include <hildon/hildon-pannable-area.h>
+#include <hildon/hildon-gtk.h>
+#include <modest-header-window.h>
+#include <modest-folder-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>
#include <gtkhtml/gtkhtml.h>
#define MIN_FREE_SPACE 5 * 1024 * 1024
-#define MOVE_FOLDER_OK_BUTTON "ok-button"
-#define MOVE_FOLDER_NEW_BUTTON "new-button"
+#define MODEST_MOVE_TO_DIALOG_FOLDER_VIEW "move-to-dialog-folder-view"
typedef struct _GetMsgAsyncHelper {
ModestWindow *window;
GtkWidget *banner;
} PasteAsAttachmentHelper;
+typedef struct {
+ TnyList *list;
+ ModestWindow *win;
+} MoveToInfo;
/*
* The do_headers_action uses this kind of functions to perform some
TnyFolderStore *parent_folder,
const gchar *suggested_name);
-static GtkWidget* get_folder_view_from_move_to_dialog (GtkWidget *move_to_dialog);
-
static TnyAccount *get_account_from_folder_store (TnyFolderStore *folder_store);
+static void modest_ui_actions_on_main_window_move_to (GtkAction *action,
+ GtkWidget *folder_view,
+ TnyFolderStore *dst_folder,
+ ModestMainWindow *win);
+#ifdef MODEST_TOOLKIT_HILDON2
+static void modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view,
+ TnyFolderStore *dst_folder,
+ TnyList *selection,
+ GtkWindow *win);
+#endif
+
+static void modest_ui_actions_on_window_move_to (GtkAction *action,
+ TnyList *list_to_move,
+ TnyFolderStore *dst_folder,
+ ModestWindow *win);
+
/*
* This function checks whether a TnyFolderStore is a pop account
*/
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);
+#ifndef MODEST_TOOLKIT_HILDON2
/* always present a main window in the background
* we do it here, so we cannot end up with two wizards (as this
* function might be called in modest_window_mgr_get_main_window as well */
- if (!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));
+#else
+ if (!win) {
+ GList *window_list;
+ ModestWindowMgr *mgr;
+
+ mgr = modest_runtime_get_window_mgr ();
+
+ window_list = modest_window_mgr_get_window_list (mgr);
+ if (window_list == NULL) {
+ win = MODEST_WINDOW (modest_accounts_window_new ());
+ modest_window_mgr_register_window (mgr, win, NULL);
+ gtk_widget_show_all (GTK_WIDGET (win));
+
+ win = MODEST_WINDOW (modest_folder_window_new (NULL));
+ modest_window_mgr_register_window (mgr, win, NULL);
+
+ gtk_widget_show_all (GTK_WIDGET (win));
+ } else {
+ g_list_free (window_list);
+ }
+ }
+#endif
+
+ if (win)
+ gtk_window_set_transient_for (GTK_WINDOW (wizard), GTK_WINDOW (win));
/* make sure the mainwindow is visible. We need to present the
wizard again to give it the focus back. show_all are needed
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 ())
return list;
+#ifdef MODEST_TOOLKIT_HILDON2
+ } else if (MODEST_IS_HEADER_WINDOW (win)) {
+ GtkWidget *header_view;
+
+ header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (win)));
+ return modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
+#endif
} else
return NULL;
}
void
modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
{
+ modest_ui_actions_on_edit_mode_delete_message (win);
+}
+
+gboolean
+modest_ui_actions_on_edit_mode_delete_message (ModestWindow *win)
+{
TnyList *header_list = NULL;
TnyIterator *iter = NULL;
TnyHeader *header = NULL;
gint response;
ModestWindowMgr *mgr;
GtkWidget *header_view = NULL;
+ gboolean retval = TRUE;
- g_return_if_fail (MODEST_IS_WINDOW(win));
+ g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
/* Check first if the header view has the focus */
if (MODEST_IS_MAIN_WINDOW (win)) {
modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
if (!gtk_widget_is_focus (header_view))
- return;
+ return FALSE;
}
/* Get the headers, either from the header view (if win is the main window),
* or from the message view window: */
header_list = get_selected_headers (win);
- if (!header_list) return;
+ if (!header_list) return FALSE;
/* Check if any of the headers are already opened, or in the process of being opened */
if (MODEST_IS_MAIN_WINDOW (win)) {
g_free (msg);
g_object_unref (header_list);
- return;
+ return FALSE;
}
}
/* Get main window */
mgr = modest_runtime_get_window_mgr ();
main_window = modest_window_mgr_get_main_window (mgr, FALSE); /* don't create */
- } else {
+ } else if (MODEST_IS_MAIN_WINDOW (win)) {
/* Move cursor to next row */
main_window = win;
/* Free */
g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL);
g_list_free (sel_list);
+ retval = TRUE;
+ } else {
+ retval = FALSE;
}
/* Free*/
g_free(message);
g_free(desc);
g_object_unref (header_list);
+
+ return retval;
}
w = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
if (gtk_widget_is_focus (w)) {
- modest_ui_actions_on_delete_folder (action, MODEST_MAIN_WINDOW(win));
+ modest_ui_actions_on_delete_folder (action, MODEST_WINDOW(win));
return;
}
}
}
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_new_account (GtkAction *action,
+ ModestWindow *window)
+{
+ modest_ui_actions_run_account_setup_wizard (window);
+}
+
+void
+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
allowed_size = MODEST_MAX_ATTACHMENT_SIZE;
msg_win = modest_msg_edit_window_new (msg, account_name, FALSE);
- if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr(), msg_win, NULL)) {
+ if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr(), msg_win, win)) {
gtk_widget_destroy (GTK_WIDGET (msg_win));
goto cleanup;
}
error->code == MODEST_MAIL_OPERATION_ERROR_LOW_MEMORY) {
GObject *source = modest_mail_operation_get_source (mail_op);
modest_platform_run_information_dialog (GTK_IS_WINDOW (source) ? GTK_WINDOW (source) : NULL,
- dgettext("ke-recv","memr_ib_operation_disabled"),
+ _KR("memr_ib_operation_disabled"),
TRUE);
g_object_unref (source);
}
if (error && ((error->code == TNY_SERVICE_ERROR_NO_SUCH_MESSAGE) ||
error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE)) {
- gchar *subject, *msg;
+ gchar *subject, *msg, *format = NULL;
+ TnyAccount *account;
subject = tny_header_dup_subject (header);
if (!subject)
- subject = g_strdup (_("mail_va_no_subject"));;
- msg = g_strdup_printf (_("emev_ni_ui_imap_message_not_available_in_server"),
- subject);
+ subject = g_strdup (_("mail_va_no_subject"));
+
+ account = modest_mail_operation_get_account (mail_op);
+ if (account) {
+ ModestProtocol *protocol;
+ ModestProtocolType proto;
+ proto = modest_tny_account_get_protocol_type (account);
+ protocol = modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (), proto);
+ if (protocol)
+ format = modest_protocol_get_translation (protocol, MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE);
+ g_object_unref (account);
+ }
+
+ if (!format)
+ format = g_strdup (_("emev_ni_ui_imap_message_not_available_in_server"));
+
+ msg = g_strdup_printf (format, subject);
modest_platform_run_information_dialog (NULL, msg, FALSE);
g_free (msg);
+ g_free (format);
g_free (subject);
}
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, gboolean *can_open)
+{
+ TnyFolder *folder;
+ gchar *account = NULL;
+ TnyFolderType folder_type = TNY_FOLDER_TYPE_UNKNOWN;
+
+ *is_draft = FALSE;
+ *can_open = TRUE;
+ 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);
g_warning ("%s: BUG: TNY_FOLDER_TYPE_INVALID", __FUNCTION__);
}
-
if (folder_type == TNY_FOLDER_TYPE_OUTBOX) {
TnyTransportAccount *traccount = NULL;
ModestTnyAccountStore *accstore = modest_runtime_get_account_store();
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 */
+ *can_open = FALSE;
+ }
+#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 */
+ }
+
+ if (!account) {
+ TnyAccount *acc = tny_folder_get_account (folder);
+ if (acc) {
+ account =
+ g_strdup (modest_tny_account_get_parent_modest_account_name_for_server_account (acc));
+ g_object_unref (acc);
+ }
}
+ 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;
+ gboolean can_open;
+ 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, &can_open);
+
/* Get account */
if (!account)
account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (parent_win)));
if (!account)
account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
-
+
if (open_in_editor) {
ModestAccountMgr *mgr = modest_runtime_get_account_mgr ();
gchar *from_header = NULL, *acc_name;
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);
}
g_free (uid);
}
-
+
/* Register and show new window */
if (win != NULL) {
mgr = modest_runtime_get_window_mgr ();
/* Free */
g_free(account);
g_object_unref (parent_win);
- g_object_unref (folder);
}
static gboolean
if (is_memory_full_error (err))
modest_platform_information_banner (parent_window,
- NULL, dgettext("ke-recv",
- "cerm_device_memory_full"));
+ NULL, _KR("cerm_device_memory_full"));
else if (err->code == TNY_SYSTEM_ERROR_MEMORY)
/* If the account was created in memory full
conditions then tinymail won't be able to
if (status != MODEST_MAIL_OPERATION_STATUS_CANCELED) {
if (is_memory_full_error ((GError *) error)) {
modest_platform_information_banner ((GtkWidget *) win,
- NULL, dgettext("ke-recv",
- "cerm_device_memory_full"));
+ NULL, _KR("cerm_device_memory_full"));
} else if (error->code == TNY_SYSTEM_ERROR_MEMORY) {
modest_platform_information_banner ((GtkWidget *) win,
NULL, _("emev_ui_imap_inbox_select_error"));
} else if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
error->code == MODEST_MAIL_OPERATION_ERROR_FILE_IO) {
modest_platform_information_banner ((GtkWidget *) win,
- NULL, dgettext ("hildon-common-strings", "sfil_ni_unable_to_open_file_not_found"));
+ NULL, _CS ("sfil_ni_unable_to_open_file_not_found"));
} else if (user_data) {
modest_platform_information_banner ((GtkWidget *) win,
NULL, user_data);
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;
+ ModestProtocol *protocol;
+ ModestProtocolRegistry *protocol_registry;
+ gchar *subject;
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);
if (proto == MODEST_PROTOCOL_REGISTRY_TYPE_INVALID) {
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);
+ 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);
-
- 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;
+ 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);
- 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 {
+ if (error_msg == NULL) {
error_msg = g_strdup (_("mail_ni_ui_folder_get_msg_folder_error"));
}
+#ifndef MODEST_TOOLKIT_HILDON2
+ gboolean show_open_draft = FALSE;
+ if (modest_protocol_registry_protocol_type_has_tag (protocol_registry,
+ proto,
+ MODEST_PROTOCOL_REGISTRY_LOCAL_STORE_PROTOCOLS)) {
+ TnyFolder *folder;
+ TnyFolderType folder_type;
+
+ 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);
+ }
+#endif
+
+#ifdef MODEST_TOOLKIT_HILDON2
+ gboolean is_draft;
+ gboolean can_open;
+ gchar *account_name = get_info_from_header (helper->header, &is_draft, &can_open);
+
+ if (!can_open) {
+ modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), helper->header);
+ g_free (account_name);
+ open_msg_helper_destroyer (helper);
+ goto clean;
+ }
+
+ 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,
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
+
+#ifndef MODEST_TOOLKIT_HILDON2
if (show_open_draft) {
helper->banner_info = g_slice_new (OpenMsgBannerInfo);
helper->banner_info->message = g_strdup (_("mail_ib_opening_draft_message"));
helper->banner_info->idle_handler = g_timeout_add (500, open_msg_banner_idle,
helper->banner_info);
}
+#endif
+
+ 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;
-
- g_return_if_fail (headers != NULL);
+ ModestWindow *window;
- /* 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;
-
- 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);
- 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);
}
+static void
+rf_helper_window_closed (gpointer data,
+ GObject *object)
+{
+ ReplyForwardHelper *helper = (ReplyForwardHelper *) data;
+
+ helper->parent_window = NULL;
+}
+
static ReplyForwardHelper*
create_reply_forward_helper (ReplyForwardAction action,
ModestWindow *win,
g_strdup (active_acc) :
modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
+ /* Note that window could be destroyed just AFTER calling
+ register_window so we must ensure that this pointer does
+ not hold invalid references */
+ if (rf_helper->parent_window)
+ g_object_weak_ref (G_OBJECT (rf_helper->parent_window),
+ rf_helper_window_closed, rf_helper);
+
return rf_helper;
}
g_free (helper->account_name);
if (helper->header)
g_object_unref (helper->header);
+ if (helper->parent_window)
+ g_object_weak_unref (G_OBJECT (helper->parent_window),
+ rf_helper_window_closed, helper);
g_slice_free (ReplyForwardHelper, helper);
}
mgr = modest_runtime_get_window_mgr ();
modest_window_mgr_register_window (mgr, msg_win, (ModestWindow *) rf_helper->parent_window);
- if (rf_helper->parent_window != NULL) {
+ /* Note that register_window could have deleted the account */
+ if (MODEST_IS_WINDOW (rf_helper->parent_window)) {
gdouble parent_zoom;
parent_zoom = modest_window_get_zoom (MODEST_WINDOW (rf_helper->parent_window));
{
ReplyForwardHelper *rf_helper = NULL;
guint reply_forward_type;
-
+
g_return_if_fail (MODEST_IS_WINDOW(win));
-
+
/* we check for low-mem; in that case, show a warning, and don't allow
* reply/forward (because it could potentially require a lot of memory */
if (modest_platform_check_memory_low (MODEST_WINDOW(win), TRUE))
if (!modest_ui_actions_run_account_setup_wizard (win))
return;
}
-
+
reply_forward_type =
modest_conf_get_int (modest_runtime_get_conf (),
- (action == ACTION_FORWARD) ?
+ (action == ACTION_FORWARD) ?
MODEST_CONF_FORWARD_TYPE :
MODEST_CONF_REPLY_TYPE,
NULL);
if (msg && header) {
/* Create helper */
- rf_helper = create_reply_forward_helper (action, win,
+ rf_helper = create_reply_forward_helper (action, win,
reply_forward_type, header);
reply_forward_cb (NULL, header, FALSE, msg, NULL, rf_helper);
} else {
g_warning("%s: no message or header found in viewer\n", __FUNCTION__);
}
-
+
if (msg)
g_object_unref (msg);
if (header)
/* 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)
download = FALSE;
}
}
-
+
if (download) {
/* Create helper */
rf_helper = create_reply_forward_helper (action, win,
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);
+#ifdef MODEST_TOOLKIT_HILDON2
+ } else if (MODEST_IS_ACCOUNTS_WINDOW (win)) {
+ modest_ui_actions_do_send_receive_all (win, TRUE, TRUE, TRUE);
+#endif
+ } 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
if (error && error->domain == MODEST_MAIL_OPERATION_ERROR &&
error->code == MODEST_MAIL_OPERATION_ERROR_LOW_MEMORY) {
modest_platform_run_information_dialog (GTK_WINDOW (win),
- dgettext("ke-recv","memr_ib_operation_disabled"),
+ _KR("memr_ib_operation_disabled"),
TRUE);
return;
}
modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view),
TNY_FOLDER (folder_store),
TRUE,
+ MODEST_WINDOW (main_window),
folder_refreshed_cb,
main_window);
void
modest_ui_actions_on_msg_attachment_clicked (ModestMsgView *msgview, TnyMimePart *mime_part,
ModestWindow *win)
-{
+{
/* we check for low-mem; in that case, show a warning, and don't allow
* viewing attachments
*/
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);
expected_size > available_disk) {
modest_platform_information_banner (NULL, NULL,
- dgettext("ke-recv",
- "cerm_device_memory_full"));
+ _KR("cerm_device_memory_full"));
return FALSE;
}
if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) {
modest_platform_run_information_dialog (
GTK_WINDOW(edit_window),
- dgettext("ke-recv","memr_ib_operation_disabled"),
+ _KR("memr_ib_operation_disabled"),
TRUE);
return FALSE;
}
}
void
-modest_ui_actions_on_insert_image (GtkAction *action,
+modest_ui_actions_on_insert_image (GObject *object,
ModestMsgEditWindow *window)
{
g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
- g_return_if_fail (GTK_IS_ACTION (action));
if (modest_platform_check_memory_low (MODEST_WINDOW(window), TRUE))
ModestMsgEditWindow *window)
{
g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
- g_return_if_fail (GTK_IS_ACTION (action));
modest_msg_edit_window_remove_attachments (window, NULL);
}
#endif
} else {
/* the 'source_win' is either the ModestMainWindow, or the 'Move to folder'-dialog
- * FIXME: any other? */
+ * FIXME: any other? */
GtkWidget *folder_view;
if (MODEST_IS_MAIN_WINDOW(source_win))
modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (source_win),
MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
else
- folder_view =
- get_folder_view_from_move_to_dialog (GTK_WIDGET(source_win));
-
+ folder_view = GTK_WIDGET(g_object_get_data (G_OBJECT (source_win),
+ MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
+
/* Select the newly created folder. It could happen
that the widget is no longer there (i.e. the window
has been destroyed, so we need to check this */
g_object_unref (source_win);
}
-static void
-do_create_folder (GtkWindow *parent_window,
- TnyFolderStore *parent_folder,
- const gchar *suggested_name)
-{
- gint result;
- gchar *folder_name = NULL;
-
- result = modest_platform_run_new_folder_dialog (GTK_WINDOW (parent_window),
- parent_folder,
- (gchar *) suggested_name,
- &folder_name);
-
- if (result == GTK_RESPONSE_ACCEPT) {
- ModestMailOperation *mail_op;
-
- mail_op = modest_mail_operation_new ((GObject *) parent_window);
- modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
- mail_op);
- modest_mail_operation_create_folder (mail_op,
- parent_folder,
- (const gchar *) folder_name,
- do_create_folder_cb,
- folder_name);
- g_object_unref (mail_op);
- }
-}
+typedef struct {
+ gchar *folder_name;
+ TnyFolderStore *parent;
+} CreateFolderConnect;
static void
-create_folder_performer (gboolean canceled,
+do_create_folder_performer (gboolean canceled,
GError *err,
GtkWindow *parent_window,
TnyAccount *account,
gpointer user_data)
{
- TnyFolderStore *parent_folder = TNY_FOLDER_STORE (user_data);
+ CreateFolderConnect *helper = (CreateFolderConnect *) user_data;
+ ModestMailOperation *mail_op;
if (canceled || err) {
/* In memory full conditions we could get this error here */
goto frees;
}
- /* Run the new folder dialog */
- do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL);
+ mail_op = modest_mail_operation_new ((GObject *) parent_window);
+ modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
+ mail_op);
+ modest_mail_operation_create_folder (mail_op,
+ helper->parent,
+ (const gchar *) helper->folder_name,
+ do_create_folder_cb,
+ g_strdup (helper->folder_name));
+ g_object_unref (mail_op);
frees:
- g_object_unref (parent_folder);
+ if (helper->parent)
+ g_object_unref (helper->parent);
+ if (helper->folder_name)
+ g_free (helper->folder_name);
+ g_slice_free (CreateFolderConnect, helper);
+}
+
+
+static void
+do_create_folder (GtkWindow *parent_window,
+ TnyFolderStore *suggested_parent,
+ const gchar *suggested_name)
+{
+ gint result;
+ gchar *folder_name = NULL;
+ TnyFolderStore *parent_folder = NULL;
+
+ result = modest_platform_run_new_folder_dialog (GTK_WINDOW (parent_window),
+ suggested_parent,
+ (gchar *) suggested_name,
+ &folder_name,
+ &parent_folder);
+
+ if (result == GTK_RESPONSE_ACCEPT && parent_folder) {
+ CreateFolderConnect *helper = (CreateFolderConnect *) g_slice_new0 (CreateFolderHelper);
+ helper->folder_name = g_strdup (folder_name);
+ helper->parent = g_object_ref (parent_folder);
+
+ modest_platform_connect_if_remote_and_perform (GTK_WINDOW (parent_window),
+ TRUE,
+ parent_folder,
+ do_create_folder_performer,
+ helper);
+ }
+
+ if (folder_name)
+ g_free (folder_name);
+ if (parent_folder)
+ g_object_unref (parent_folder);
}
static void
{
TnyFolderStore *parent_folder;
+#ifdef MODEST_TOOLKIT_HILDON2
+ ModestTnyAccountStore *acc_store;
+
+ acc_store = modest_runtime_get_account_store ();
+
+ parent_folder = (TnyFolderStore *)
+ modest_tny_account_store_get_local_folders_account (acc_store);
+#else
parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
-
- if (parent_folder) {
- /* The parent folder will be freed in the callback */
- modest_platform_connect_if_remote_and_perform (GTK_WINDOW (parent_window),
- TRUE,
- parent_folder,
- create_folder_performer,
- parent_folder);
- }
+#endif
+
+ if (parent_folder)
+ do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL);
}
-void
-modest_ui_actions_on_new_folder (GtkAction *action, ModestMainWindow *main_window)
+void
+modest_ui_actions_on_new_folder (GtkAction *action, ModestWindow *window)
{
- GtkWidget *folder_view;
-
- g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
- folder_view = modest_main_window_get_child_widget (main_window,
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- if (!folder_view)
- return;
+ g_return_if_fail (MODEST_IS_WINDOW(window));
+
+ if (MODEST_IS_MAIN_WINDOW (window)) {
+ GtkWidget *folder_view;
- modest_ui_actions_create_folder (GTK_WIDGET (main_window), folder_view);
+ folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+ if (!folder_view)
+ return;
+
+ modest_ui_actions_create_folder (GTK_WIDGET (window), folder_view);
+#ifdef MODEST_TOOLKIT_HILDON2
+ } else if (MODEST_IS_FOLDER_WINDOW (window)) {
+ GtkWidget *folder_view;
+
+ folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
+ modest_ui_actions_create_folder (GTK_WIDGET (window), folder_view);
+#endif
+ } else {
+ g_assert_not_reached ();
+ }
}
static void
message is opened for example */
message = _("emev_ni_internal_error");
} else {
- message = _("emev_ib_ui_imap_unable_to_rename");
+ message = _CS("ckdg_ib_unable_to_remove");
}
/* We don't set a parent for the dialog because the dialog
{
ModestFolderView *folder_view;
- /* If the window was closed when renaming a folder this could
- happen */
+ /* If the window was closed when renaming a folder, or if
+ * it's not a main window this will happen */
if (!MODEST_IS_FOLDER_VIEW (user_data))
return;
if (canceled || err) {
/* In memory full conditions we could get this error here */
check_memory_full_error ((GtkWidget *) parent_window, err);
- } else if (MODEST_IS_MAIN_WINDOW(parent_window)) {
-
- folder_view = modest_main_window_get_child_widget (
- MODEST_MAIN_WINDOW (parent_window),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+ } else {
mail_op =
modest_mail_operation_new_with_error_handling (G_OBJECT(parent_window),
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
- /* Clear the headers view */
- sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
- gtk_tree_selection_unselect_all (sel);
+ if (MODEST_IS_MAIN_WINDOW(parent_window)) {
+
+ folder_view = modest_main_window_get_child_widget (
+ MODEST_MAIN_WINDOW (parent_window),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+
+ /* Clear the headers view */
+ sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
+ gtk_tree_selection_unselect_all (sel);
+ } else {
+ folder_view = NULL;
+ }
/* Actually rename the folder */
modest_mail_operation_rename_folder (mail_op,
void
modest_ui_actions_on_rename_folder (GtkAction *action,
- ModestMainWindow *main_window)
+ ModestWindow *window)
+{
+ modest_ui_actions_on_edit_mode_rename_folder (window);
+}
+
+gboolean
+modest_ui_actions_on_edit_mode_rename_folder (ModestWindow *window)
{
TnyFolderStore *folder;
GtkWidget *folder_view;
- GtkWidget *header_view;
+ gboolean do_rename = TRUE;
- g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
+ g_return_val_if_fail (MODEST_IS_WINDOW(window), FALSE);
- folder_view = modest_main_window_get_child_widget (main_window,
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- if (!folder_view)
- return;
+ if (MODEST_IS_MAIN_WINDOW (window)) {
+ folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+ if (!folder_view)
+ return FALSE;
- header_view = modest_main_window_get_child_widget (main_window,
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
-
- if (!header_view)
- return;
+#ifdef MODEST_TOOLKIT_HILDON2
+ } else if (MODEST_IS_FOLDER_WINDOW (window)) {
+ folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
+#endif
+ } else {
+ return FALSE;
+ }
folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
if (!folder)
- return;
+ return FALSE;
if (TNY_IS_FOLDER (folder)) {
- gchar *folder_name;
+ gchar *folder_name = NULL;
gint response;
const gchar *current_name;
TnyFolderStore *parent;
- gboolean do_rename = TRUE;
current_name = tny_folder_get_name (TNY_FOLDER (folder));
parent = tny_folder_get_folder_store (TNY_FOLDER (folder));
- response = modest_platform_run_rename_folder_dialog (GTK_WINDOW (main_window),
+ response = modest_platform_run_rename_folder_dialog (GTK_WINDOW (window),
parent, current_name,
&folder_name);
g_object_unref (parent);
RenameFolderInfo *rename_folder_data = g_new0 (RenameFolderInfo, 1);
rename_folder_data->folder = g_object_ref (folder);
rename_folder_data->new_name = folder_name;
- modest_platform_connect_if_remote_and_perform (GTK_WINDOW(main_window), TRUE,
+ modest_platform_connect_if_remote_and_perform (GTK_WINDOW(window), TRUE,
folder, on_rename_folder_performer, rename_folder_data);
}
}
g_object_unref (folder);
+ return do_rename;
}
static void
ModestMailOperation *mail_op;
GtkTreeSelection *sel;
- if (!MODEST_IS_MAIN_WINDOW(parent_window) || canceled || (err!=NULL)) {
+ if (!MODEST_IS_WINDOW(parent_window) || canceled || (err!=NULL)) {
g_object_unref (G_OBJECT (info->folder));
g_free (info);
return;
}
- folder_view = modest_main_window_get_child_widget (
+ if (MODEST_IS_MAIN_WINDOW (parent_window)) {
+ folder_view = modest_main_window_get_child_widget (
MODEST_MAIN_WINDOW (parent_window),
MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+#ifdef MODEST_TOOLKIT_HILDON2
+ } else if (MODEST_IS_FOLDER_WINDOW (parent_window)) {
+ folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (parent_window)));
+#endif
+ } else {
+ g_object_unref (G_OBJECT (info->folder));
+ g_free (info);
+ return;
+ }
/* Unselect the folder before deleting it to free the headers */
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
g_free (info);
}
-static void
-delete_folder (ModestMainWindow *main_window, gboolean move_to_trash)
+static gboolean
+delete_folder (ModestWindow *window, gboolean move_to_trash)
{
TnyFolderStore *folder;
GtkWidget *folder_view;
gint response;
gchar *message;
- g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
+ g_return_val_if_fail (MODEST_IS_WINDOW(window), FALSE);
- folder_view = modest_main_window_get_child_widget (main_window,
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+ if (MODEST_IS_MAIN_WINDOW (window)) {
+
+ folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+#ifdef MODEST_TOOLKIT_HILDON2
+ } else if (MODEST_IS_FOLDER_WINDOW (window)) {
+ folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
+#endif
+ } else {
+ return FALSE;
+ }
if (!folder_view)
- return;
+ return FALSE;
folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
/* Show an error if it's an account */
if (!TNY_IS_FOLDER (folder)) {
- modest_platform_run_information_dialog (GTK_WINDOW (main_window),
+ modest_platform_run_information_dialog (GTK_WINDOW (window),
_("mail_in_ui_folder_delete_error"),
FALSE);
g_object_unref (G_OBJECT (folder));
- return;
+ return FALSE;
}
/* Ask the user */
message = g_strdup_printf (_("mcen_nc_delete_folder_text"),
tny_folder_get_name (TNY_FOLDER (folder)));
- response = modest_platform_run_confirmation_dialog (GTK_WINDOW (main_window),
+ response = modest_platform_run_confirmation_dialog (GTK_WINDOW (window),
(const gchar *) message);
g_free (message);
info->move_to_trash = move_to_trash;
g_object_ref (G_OBJECT (info->folder));
TnyAccount *account = tny_folder_get_account (TNY_FOLDER (folder));
- modest_platform_connect_if_remote_and_perform (GTK_WINDOW (main_window),
+ modest_platform_connect_if_remote_and_perform (GTK_WINDOW (window),
TRUE,
TNY_FOLDER_STORE (account),
on_delete_folder_cb, info);
g_object_unref (account);
+ return TRUE;
+ } else {
+ return FALSE;
}
g_object_unref (G_OBJECT (folder));
}
-void
+void
modest_ui_actions_on_delete_folder (GtkAction *action,
- ModestMainWindow *main_window)
+ ModestWindow *window)
{
- g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
+ modest_ui_actions_on_edit_mode_delete_folder (window);
+}
+
+gboolean
+modest_ui_actions_on_edit_mode_delete_folder (ModestWindow *window)
+{
+ g_return_val_if_fail (MODEST_IS_WINDOW(window), TRUE);
- delete_folder (main_window, FALSE);
+ return delete_folder (window, FALSE);
}
void
{
g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
- delete_folder (main_window, TRUE);
+ delete_folder (MODEST_WINDOW (main_window), TRUE);
}
}
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")) {
modest_msg_edit_window_check_names (window, FALSE);
}
-static void
-create_move_to_dialog_on_new_folder(GtkWidget *button, gpointer user_data)
-{
- modest_ui_actions_create_folder (gtk_widget_get_toplevel (button),
- GTK_WIDGET (user_data));
-}
-
+#ifndef MODEST_TOOLKIT_HILDON2
/*
* This function is used to track changes in the selection of the
* folder view that is inside the "move to" dialog to enable/disable
gpointer user_data)
{
GtkWidget *dialog = NULL;
- GtkWidget *ok_button = NULL, *new_button = NULL;
gboolean ok_sensitive = TRUE, new_sensitive = TRUE;
gboolean moving_folder = FALSE;
gboolean is_local_account = TRUE;
ModestTnyFolderRules rules;
g_return_if_fail (MODEST_IS_FOLDER_VIEW(self));
-
+
if (!selected)
return;
-
- /* Get the OK button */
+
dialog = gtk_widget_get_ancestor (GTK_WIDGET (self), GTK_TYPE_DIALOG);
if (!dialog)
return;
- ok_button = g_object_get_data (G_OBJECT (dialog), MOVE_FOLDER_OK_BUTTON);
- new_button = g_object_get_data (G_OBJECT (dialog), MOVE_FOLDER_NEW_BUTTON);
-
/* check if folder_store is an remote account */
if (TNY_IS_ACCOUNT (folder_store)) {
TnyAccount *local_account = NULL;
/* Get the folder to move */
moved_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
-
+
/* Check that we're not moving to the same folder */
if (TNY_IS_FOLDER (moved_folder)) {
parent = tny_folder_get_folder_store (TNY_FOLDER (moved_folder));
if (parent == folder_store)
ok_sensitive = FALSE;
g_object_unref (parent);
- }
+ }
if (ok_sensitive && TNY_IS_ACCOUNT (folder_store)) {
/* Do not allow to move to an account unless it's the
local folders account */
if (!is_local_account)
ok_sensitive = FALSE;
- }
+ }
if (ok_sensitive && (moved_folder == folder_store)) {
/* Do not allow to move to itself */
}
end:
- /* Set sensitivity of the OK button */
- gtk_widget_set_sensitive (ok_button, ok_sensitive);
- /* Set sensitivity of the NEW button */
- gtk_widget_set_sensitive (new_button, new_sensitive);
+ /* Set sensitivity of the OK and NEW button */
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, ok_sensitive);
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), MODEST_GTK_RESPONSE_NEW_FOLDER, new_sensitive);
}
+#endif
+
+static void
+on_move_to_dialog_response (GtkDialog *dialog,
+ gint response,
+ gpointer user_data)
+{
+ GtkWidget *parent_win, *folder_view;
+ MoveToInfo *helper = NULL;
+ helper = (MoveToInfo *) user_data;
-#define MODEST_MOVE_TO_DIALOG_FOLDER_VIEW "move-to-dialog-folder-view"
+ parent_win = (GtkWidget *) helper->win;
+ folder_view = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog),
+ MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
-static GtkWidget*
-get_folder_view_from_move_to_dialog (GtkWidget *move_to_dialog)
-{
- return GTK_WIDGET(g_object_get_data (G_OBJECT(move_to_dialog),
- MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
-}
+ switch (response) {
+ TnyFolderStore *dst_folder;
-static GtkWidget*
-create_move_to_dialog (GtkWindow *win,
- GtkWidget *folder_view,
- GtkWidget **tree_view)
-{
- GtkWidget *dialog;
+ case MODEST_GTK_RESPONSE_NEW_FOLDER:
+ modest_ui_actions_create_folder (GTK_WIDGET (parent_win), folder_view);
+ return;
+ case GTK_RESPONSE_NONE:
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ break;
+ case GTK_RESPONSE_OK:
+ dst_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
+ /* Do window specific stuff */
+ if (MODEST_IS_MAIN_WINDOW (parent_win)) {
+ modest_ui_actions_on_main_window_move_to (NULL,
+ folder_view,
+ dst_folder,
+ MODEST_MAIN_WINDOW (parent_win));
#ifdef MODEST_TOOLKIT_HILDON2
- GtkWidget *pannable;
-#else
- GtkWidget *scroll;
+ } else if (MODEST_IS_FOLDER_WINDOW (parent_win)) {
+ modest_ui_actions_on_folder_window_move_to (folder_view,
+ dst_folder,
+ helper->list,
+ GTK_WINDOW (parent_win));
#endif
- GtkWidget *new_button, *ok_button;
+ } else {
+ /* Moving from headers window in edit mode */
+ modest_ui_actions_on_window_move_to (NULL, helper->list,
+ dst_folder,
+ MODEST_WINDOW (parent_win));
+ }
- dialog = gtk_dialog_new_with_buttons (_("mcen_ti_moveto_folders_title"),
- GTK_WINDOW (win),
- GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT,
- NULL);
+ if (dst_folder)
+ g_object_unref (dst_folder);
-#ifndef MODEST_TOOLKIT_GTK
- ok_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("mcen_bd_dialog_ok"), GTK_RESPONSE_ACCEPT);
- /* We do this manually so GTK+ does not associate a response ID for
- * the button. */
- new_button = gtk_button_new_from_stock (_("mcen_bd_new"));
- gtk_box_pack_end (GTK_BOX (GTK_DIALOG (dialog)->action_area), new_button, FALSE, FALSE, 0);
- gtk_widget_show (new_button);
-#ifndef MODEST_TOOLKIT_HILDON2
- gtk_dialog_add_button (GTK_DIALOG (dialog), _("mcen_bd_dialog_cancel"), GTK_RESPONSE_REJECT);
-#endif
-#else
- /* We do this manually so GTK+ does not associate a response ID for
- * the button. */
- new_button = gtk_button_new_with_label (_("mcen_ti_new_folder"));
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), new_button, FALSE, FALSE, 0);
- gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (GTK_DIALOG (dialog)->action_area), new_button, TRUE);
- gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
- ok_button = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_ACCEPT);
- gtk_container_set_border_width (GTK_CONTAINER (dialog), 12);
- gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 24);
-#endif
- g_object_set_data (G_OBJECT (dialog), MOVE_FOLDER_OK_BUTTON, ok_button);
- g_object_set_data (G_OBJECT (dialog), MOVE_FOLDER_NEW_BUTTON, new_button);
+ break;
+ default:
+ g_warning ("%s unexpected response id %d", __FUNCTION__, response);
+ }
- /* Create scrolled window */
-#ifdef MODEST_TOOLKIT_HILDON2
- pannable = hildon_pannable_area_new ();
-#else
- scroll = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
-#endif
+ /* Free the helper and exit */
+ if (helper->list)
+ g_object_unref (helper->list);
+ g_slice_free (MoveToInfo, helper);
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
-#ifdef MODEST_TOOLKIT_GTK
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN);
-#endif
+static GtkWidget*
+create_move_to_dialog (GtkWindow *win,
+ GtkWidget *folder_view)
+{
+ GtkWidget *dialog, *tree_view = NULL;
- /* Create folder view */
- *tree_view = modest_platform_create_folder_view (NULL);
+ dialog = modest_platform_create_move_to_dialog (win, &tree_view);
+#ifndef MODEST_TOOLKIT_HILDON2
/* Track changes in the selection to
* disable the OK button whenever "Move to" is not possible
* disbale NEW button whenever New is not possible */
- g_signal_connect (*tree_view,
+ g_signal_connect (tree_view,
"folder_selection_changed",
G_CALLBACK (on_move_to_dialog_folder_selection_changed),
win);
-
- /* Listen to clicks on New button */
- g_signal_connect (G_OBJECT (new_button),
- "clicked",
- G_CALLBACK(create_move_to_dialog_on_new_folder),
- *tree_view);
+#endif
/* It could happen that we're trying to move a message from a
window (msg window for example) after the main window was
if (MODEST_IS_FOLDER_VIEW (folder_view)) {
const gchar *visible_id = NULL;
- modest_folder_view_set_style (MODEST_FOLDER_VIEW (*tree_view),
+ modest_folder_view_set_style (MODEST_FOLDER_VIEW (tree_view),
MODEST_FOLDER_VIEW_STYLE_SHOW_ALL);
modest_folder_view_copy_model (MODEST_FOLDER_VIEW(folder_view),
- MODEST_FOLDER_VIEW(*tree_view));
+ MODEST_FOLDER_VIEW(tree_view));
visible_id =
modest_folder_view_get_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(folder_view));
/* Show the same account than the one that is shown in the main window */
- modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(*tree_view),
+ modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(tree_view),
visible_id);
} else {
const gchar *active_account_name = NULL;
ModestAccountSettings *settings = NULL;
ModestServerAccountSettings *store_settings = NULL;
- modest_folder_view_set_style (MODEST_FOLDER_VIEW (*tree_view),
+ modest_folder_view_set_style (MODEST_FOLDER_VIEW (tree_view),
MODEST_FOLDER_VIEW_STYLE_SHOW_ALL);
- modest_folder_view_update_model (MODEST_FOLDER_VIEW (*tree_view),
+ modest_folder_view_update_model (MODEST_FOLDER_VIEW (tree_view),
TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()));
active_account_name = modest_window_get_active_account (MODEST_WINDOW (win));
store_settings = modest_account_settings_get_store_settings (settings);
store_account_name = modest_server_account_settings_get_account_name (store_settings);
- modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW (*tree_view),
+ modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW (tree_view),
store_account_name);
g_object_unref (store_settings);
g_object_unref (settings);
}
}
- /* we keep a pointer to the embedded folder view, so we can retrieve it with
- * get_folder_view_from_move_to_dialog
- * (see above) later (needed for focus handling)
+ /* we keep a pointer to the embedded folder view, so we can
+ * retrieve it with get_folder_view_from_move_to_dialog (see
+ * above) later (needed for focus handling)
*/
- g_object_set_data (G_OBJECT(dialog), MODEST_MOVE_TO_DIALOG_FOLDER_VIEW, *tree_view);
+ g_object_set_data (G_OBJECT(dialog), MODEST_MOVE_TO_DIALOG_FOLDER_VIEW, tree_view);
-
/* Hide special folders */
- modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (*tree_view), FALSE);
-
-#ifdef MODEST_TOOLKIT_HILDON2
- gtk_container_add (GTK_CONTAINER (pannable), *tree_view);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
- pannable, TRUE, TRUE, 0);
-#else
- gtk_container_add (GTK_CONTAINER (scroll), *tree_view);
- /* Add scroll to dialog */
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
- scroll, TRUE, TRUE, 0);
+ modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (tree_view), FALSE);
+#ifndef MODEST_TOOLKIT_HILDON2
+ modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (tree_view));
#endif
-
- gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
-#ifndef MODEST_TOOLKIT_GTK
- gtk_window_set_default_size (GTK_WINDOW (dialog), 300, 300);
-#else
- gtk_window_set_default_size (GTK_WINDOW (dialog), 600, 400);
-#endif
+ gtk_widget_show (GTK_WIDGET (tree_view));
return dialog;
}
-
-
/*
* Shows a confirmation dialog to the user when we're moving messages
* from a remote server to the local storage. Returns the dialog
gpointer user_data)
{
MoveToHelper *helper = (MoveToHelper *) user_data;
+ GObject *object = modest_mail_operation_get_source (mail_op);
/* Note that the operation could have failed, in that case do
nothing */
- if (modest_mail_operation_get_status (mail_op) ==
- MODEST_MAIL_OPERATION_STATUS_SUCCESS) {
-
- GObject *object = modest_mail_operation_get_source (mail_op);
- if (MODEST_IS_MSG_VIEW_WINDOW (object)) {
- ModestMsgViewWindow *self = MODEST_MSG_VIEW_WINDOW (object);
+ if (modest_mail_operation_get_status (mail_op) !=
+ MODEST_MAIL_OPERATION_STATUS_SUCCESS)
+ goto frees;
- if (!modest_msg_view_window_select_next_message (self) &&
- !modest_msg_view_window_select_previous_message (self)) {
- /* No more messages to view, so close this window */
- modest_ui_actions_on_close_window (NULL, MODEST_WINDOW(self));
- }
- } else if (MODEST_IS_MAIN_WINDOW (object) &&
- gtk_tree_row_reference_valid (helper->reference)) {
- GtkWidget *header_view;
- GtkTreePath *path;
- GtkTreeSelection *sel;
+ if (MODEST_IS_MSG_VIEW_WINDOW (object)) {
+ ModestMsgViewWindow *self = MODEST_MSG_VIEW_WINDOW (object);
- header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(object),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view));
- path = gtk_tree_row_reference_get_path (helper->reference);
- /* We need to unselect the previous one
- because we could be copying instead of
- moving */
- gtk_tree_selection_unselect_all (sel);
- gtk_tree_selection_select_path (sel, path);
- gtk_tree_path_free (path);
+ if (!modest_msg_view_window_select_next_message (self) &&
+ !modest_msg_view_window_select_previous_message (self)) {
+ /* No more messages to view, so close this window */
+ modest_ui_actions_on_close_window (NULL, MODEST_WINDOW(self));
}
- g_object_unref (object);
- }
+ } else if (MODEST_IS_MAIN_WINDOW (object) &&
+ gtk_tree_row_reference_valid (helper->reference)) {
+ GtkWidget *header_view;
+ GtkTreePath *path;
+ GtkTreeSelection *sel;
+
+ header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(object),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
+ sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view));
+ path = gtk_tree_row_reference_get_path (helper->reference);
+ /* We need to unselect the previous one
+ because we could be copying instead of
+ moving */
+ gtk_tree_selection_unselect_all (sel);
+ gtk_tree_selection_select_path (sel, path);
+ gtk_tree_path_free (path);
+ }
+ g_object_unref (object);
+
+ frees:
/* Destroy the helper */
move_to_helper_destroyer (helper);
}
GObject *object;
object = modest_mail_operation_get_source (mail_op);
- folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(object),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- g_object_ref (folder_view);
- g_object_unref (object);
- move_to_cb (mail_op, user_data);
- modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view), new_folder, FALSE);
- g_object_unref (folder_view);
+ if (MODEST_IS_MAIN_WINDOW (object)) {
+ folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(object),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+ g_object_ref (folder_view);
+ g_object_unref (object);
+ move_to_cb (mail_op, user_data);
+ modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view), new_folder, FALSE);
+ g_object_unref (folder_view);
+ } else {
+ move_to_cb (mail_op, user_data);
+ }
}
static void
modest_ui_actions_move_folder_error_handler (ModestMailOperation *mail_op,
gpointer user_data)
{
+ GObject *win = NULL;
+
+#ifndef MODEST_TOOLKIT_HILDON2
ModestWindow *main_window = NULL;
-
+
/* Disable next automatic folder selection */
main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
FALSE); /* don't create */
if (main_window) {
- GObject *win = NULL;
GtkWidget *folder_view = NULL;
-
+
folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (main_window),
MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
modest_folder_view_disable_next_folder_selection (MODEST_FOLDER_VIEW(folder_view));
-
+
if (user_data && TNY_IS_FOLDER (user_data)) {
modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view),
TNY_FOLDER (user_data), FALSE);
}
-
- /* Show notification dialog only if the main window exists */
- win = modest_mail_operation_get_source (mail_op);
- modest_platform_run_information_dialog ((GtkWindow *) win,
- _("mail_in_ui_folder_move_target_error"),
- FALSE);
- if (win)
- g_object_unref (win);
}
+#endif
+ /* Show notification dialog only if the main window exists */
+ win = modest_mail_operation_get_source (mail_op);
+ modest_platform_run_information_dialog ((GtkWindow *) win,
+ _("mail_in_ui_folder_move_target_error"),
+ FALSE);
+ if (win)
+ g_object_unref (win);
}
static void
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;
xfer_messages_error_handler (ModestMailOperation *mail_op,
gpointer user_data)
{
- ModestWindow *main_window = NULL;
-
- /* Disable next automatic folder selection */
- main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
- FALSE); /* don't create */
- if (main_window) {
- GObject *win = modest_mail_operation_get_source (mail_op);
- modest_platform_run_information_dialog ((GtkWindow *) win,
- _("mail_in_ui_folder_move_target_error"),
- FALSE);
- if (win)
- g_object_unref (win);
- }
- move_to_helper_destroyer (user_data);
+ GObject *win = modest_mail_operation_get_source (mail_op);
+ modest_platform_run_information_dialog ((GtkWindow *) win,
+ _("mail_in_ui_folder_move_target_error"),
+ FALSE);
+ if (win)
+ g_object_unref (win);
}
typedef struct {
}
movehelper = g_new0 (MoveToHelper, 1);
+
+#ifndef MODEST_TOOLKIT_HILDON2
movehelper->banner = modest_platform_animation_banner (GTK_WIDGET (win), NULL,
_CS("ckct_nw_pasting"));
if (movehelper->banner != NULL) {
g_object_ref (movehelper->banner);
gtk_widget_show (GTK_WIDGET (movehelper->banner));
}
+#endif
if (MODEST_IS_MAIN_WINDOW (win)) {
GtkWidget *header_view =
MoveFolderInfo *info = (MoveFolderInfo*)user_data;
GtkTreeSelection *sel;
ModestMailOperation *mail_op = NULL;
-
- if (canceled || err || !MODEST_IS_MAIN_WINDOW (parent_window)) {
+
+ if (canceled || err || !MODEST_IS_WINDOW (parent_window)) {
g_object_unref (G_OBJECT (info->src_folder));
g_object_unref (G_OBJECT (info->dst_folder));
g_free (info);
return;
}
-
+
MoveToHelper *helper = g_new0 (MoveToHelper, 1);
+#ifndef MODEST_TOOLKIT_HILDON2
helper->banner = modest_platform_animation_banner (GTK_WIDGET (parent_window), NULL,
_CS("ckct_nw_pasting"));
if (helper->banner != NULL) {
g_object_ref (helper->banner);
gtk_widget_show (GTK_WIDGET(helper->banner));
}
+#endif
/* Clean folder on header view before moving it */
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (info->folder_view));
gtk_tree_selection_unselect_all (sel);
/* modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view), */
/* TNY_FOLDER (src_folder), TRUE); */
- modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view),
- TNY_FOLDER (info->dst_folder), TRUE);
+ if (MODEST_IS_MAIN_WINDOW (parent_window)) {
+ modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view),
+ TNY_FOLDER (info->dst_folder), TRUE);
+ }
modest_mail_operation_xfer_folder (mail_op,
TNY_FOLDER (info->src_folder),
info->dst_folder,
src_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
/* Get header view */
- header_view = MODEST_HEADER_VIEW(modest_main_window_get_child_widget (win, MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW));
+ header_view = (ModestHeaderView *)
+ modest_main_window_get_child_widget (win, MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
/* Get folder or messages to transfer */
if (gtk_widget_is_focus (folder_view)) {
do_xfer = FALSE;
}
- if (do_xfer) {
+ if (do_xfer) {
MoveFolderInfo *info = g_new0 (MoveFolderInfo, 1);
DoubleConnectionInfo *connect_info = g_slice_new (DoubleConnectionInfo);
g_object_unref (src_folder);
}
+#ifdef MODEST_TOOLKIT_HILDON2
+/*
+ * UI handler for the "Move to" action when invoked from the
+ * ModestFolderWindow
+ */
+static void
+modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view,
+ TnyFolderStore *dst_folder,
+ TnyList *selection,
+ GtkWindow *win)
+{
+ TnyFolderStore *src_folder = NULL;
+ TnyIterator *iterator;
+
+ if (tny_list_get_length (selection) != 1)
+ return;
+
+ iterator = tny_list_create_iterator (selection);
+ src_folder = TNY_FOLDER_STORE (tny_iterator_get_current (iterator));
+ g_object_unref (iterator);
+
+
+ gboolean do_xfer = TRUE;
+
+ /* Allow only to transfer folders to the local root folder */
+ if (TNY_IS_ACCOUNT (dst_folder) &&
+ !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (dst_folder) &&
+ !modest_tny_account_is_memory_card_account (TNY_ACCOUNT (dst_folder))) {
+ do_xfer = FALSE;
+ /* Show an error */
+ modest_platform_run_information_dialog (win,
+ _("mail_in_ui_folder_move_target_error"),
+ FALSE);
+ } else if (!TNY_IS_FOLDER (src_folder)) {
+ g_warning ("%s: src_folder is not a TnyFolder.\n", __FUNCTION__);
+ do_xfer = FALSE;
+ }
+
+ if (do_xfer) {
+ MoveFolderInfo *info = g_new0 (MoveFolderInfo, 1);
+ DoubleConnectionInfo *connect_info = g_slice_new (DoubleConnectionInfo);
+
+ info->src_folder = g_object_ref (src_folder);
+ info->dst_folder = g_object_ref (dst_folder);
+ info->delete_original = TRUE;
+ info->folder_view = folder_view;
+
+ connect_info->callback = on_move_folder_cb;
+ connect_info->dst_account = get_account_from_folder_store (TNY_FOLDER_STORE (dst_folder));
+ connect_info->data = info;
+
+ modest_platform_double_connect_and_perform(GTK_WINDOW (win), TRUE,
+ TNY_FOLDER_STORE (src_folder),
+ connect_info);
+ }
+
+ /* Frees */
+ g_object_unref (src_folder);
+}
+#endif
+
void
modest_ui_actions_transfer_messages_helper (GtkWindow *win,
* UI handler for the "Move to" action when invoked from the
* ModestMsgViewWindow
*/
-static void
-modest_ui_actions_on_msg_view_window_move_to (GtkAction *action,
- TnyFolderStore *dst_folder,
- ModestMsgViewWindow *win)
+static void
+modest_ui_actions_on_window_move_to (GtkAction *action,
+ TnyList *headers,
+ TnyFolderStore *dst_folder,
+ ModestWindow *win)
{
- TnyList *headers = NULL;
- TnyHeader *header = NULL;
TnyFolder *src_folder = NULL;
g_return_if_fail (TNY_IS_FOLDER (dst_folder));
- /* Create header list */
- header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
- src_folder = TNY_FOLDER (tny_header_get_folder(header));
- headers = tny_simple_list_new ();
- tny_list_append (headers, G_OBJECT (header));
+ if (headers) {
+ TnyHeader *header = NULL;
+ TnyIterator *iter;
- /* Transfer the messages */
- modest_ui_actions_transfer_messages_helper (GTK_WINDOW (win), src_folder, headers,
- TNY_FOLDER (dst_folder));
+ iter = tny_list_create_iterator (headers);
+ header = (TnyHeader *) tny_iterator_get_current (iter);
+ src_folder = tny_header_get_folder (header);
- /* Frees */
- g_object_unref (src_folder);
- g_object_unref (header);
- g_object_unref (headers);
+ /* Transfer the messages */
+ modest_ui_actions_transfer_messages_helper (GTK_WINDOW (win), src_folder,
+ headers,
+ TNY_FOLDER (dst_folder));
+
+ /* Frees */
+ g_object_unref (header);
+ g_object_unref (iter);
+ g_object_unref (src_folder);
+ }
}
void
modest_ui_actions_on_move_to (GtkAction *action,
ModestWindow *win)
{
- GtkWidget *dialog = NULL, *folder_view = NULL, *tree_view = NULL;
- gint result = 0;
- TnyFolderStore *dst_folder = NULL;
- ModestMainWindow *main_window;
+ modest_ui_actions_on_edit_mode_move_to (win);
+}
+
+gboolean
+modest_ui_actions_on_edit_mode_move_to (ModestWindow *win)
+{
+ GtkWidget *dialog = NULL;
+ MoveToInfo *helper = NULL;
+ TnyList *list_to_move;
- g_return_if_fail (MODEST_IS_MAIN_WINDOW (win) ||
- MODEST_IS_MSG_VIEW_WINDOW (win));
+ g_return_val_if_fail (MODEST_IS_WINDOW (win), FALSE);
+#ifndef MODEST_TOOLKIT_HILDON2
/* Get the main window if exists */
+ ModestMainWindow *main_window;
if (MODEST_IS_MAIN_WINDOW (win))
main_window = MODEST_MAIN_WINDOW (win);
else
MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
else
folder_view = NULL;
+#endif
- /* Create and run the dialog */
- dialog = create_move_to_dialog (GTK_WINDOW (win), folder_view, &tree_view);
- modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (tree_view));
- modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog), (GtkWindow *) win);
- result = gtk_dialog_run (GTK_DIALOG(dialog));
- g_object_ref (tree_view);
- gtk_widget_destroy (dialog);
+ list_to_move = modest_platform_get_list_to_move (MODEST_WINDOW (win));
- if (result != GTK_RESPONSE_ACCEPT)
- return;
+ if (!list_to_move)
+ return FALSE;
- dst_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (tree_view));
- /* Do window specific stuff */
- if (MODEST_IS_MAIN_WINDOW (win)) {
- modest_ui_actions_on_main_window_move_to (action,
- folder_view,
- dst_folder,
- MODEST_MAIN_WINDOW (win));
- } else {
- modest_ui_actions_on_msg_view_window_move_to (action,
- dst_folder,
- MODEST_MSG_VIEW_WINDOW (win));
+ if (tny_list_get_length (list_to_move) < 1) {
+ g_object_unref (list_to_move);
+ return FALSE;
}
- if (dst_folder)
- g_object_unref (dst_folder);
+ /* Create and run the dialog */
+ dialog = create_move_to_dialog (GTK_WINDOW (win), NULL);
+ modest_window_mgr_set_modal (modest_runtime_get_window_mgr (),
+ GTK_WINDOW (dialog),
+ (GtkWindow *) win);
+
+ /* Create helper */
+ helper = g_slice_new0 (MoveToInfo);
+ helper->list = list_to_move;
+ helper->win = win;
+
+ /* Listen to response signal */
+ g_signal_connect (dialog, "response", G_CALLBACK (on_move_to_dialog_response), helper);
+
+ /* Show the dialog */
+ gtk_widget_show (dialog);
+
+ return TRUE;
}
/*
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
void
-modest_ui_actions_on_toggle_find_in_page (GtkToggleAction *action,
+modest_ui_actions_on_toggle_find_in_page (GtkAction *action,
ModestWindow *window)
{
+ gboolean active;
g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
- modest_msg_edit_window_toggle_find_toolbar (MODEST_MSG_EDIT_WINDOW (window), gtk_toggle_action_get_active (action));
+ if (GTK_IS_TOGGLE_ACTION (action))
+ active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+ else
+ active = TRUE;
+
+ modest_msg_edit_window_toggle_find_toolbar (MODEST_MSG_EDIT_WINDOW (window),
+ active);
}
static void
message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), server_name);
break;
case TNY_SERVICE_ERROR_SEND:
- message = g_strdup (dgettext("hildon-common-strings", "sfil_ib_unable_to_send"));
+ message = g_strdup (_CS("sfil_ib_unable_to_send"));
break;
case TNY_SERVICE_ERROR_UNAVAILABLE:
message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), server_name);
default:
g_warning ("%s: unexpected ERROR %d",
__FUNCTION__, err->code);
- message = g_strdup (dgettext("hildon-common-strings", "sfil_ib_unable_to_send"));
+ message = g_strdup (_CS("sfil_ib_unable_to_send"));
break;
}
TnyFolderStore *selected_folder = NULL;
TnyFolderType folder_type;
+
+ /* TODO: this does not work in Fremantle */
mgr = modest_runtime_get_window_mgr ();
main_window = MODEST_MAIN_WINDOW (modest_window_mgr_get_main_window (mgr,
FALSE));/* don't create */
folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
g_object_unref (iter);
g_object_unref (headers);
+#ifdef MODEST_TOOLKIT_HILDON2
+ } else if (MODEST_IS_HEADER_WINDOW (win)) {
+ GtkWidget *header_view;
+ TnyList* headers = NULL;
+ TnyIterator *iter;
+ header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (win)));
+ headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW (header_view));
+ if (!headers || tny_list_get_length (headers) == 0) {
+ if (headers)
+ g_object_unref (headers);
+ return NULL;
+ }
+ iter = tny_list_create_iterator (headers);
+ header = TNY_HEADER (tny_iterator_get_current (iter));
+ folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
+ g_object_unref (iter);
+ g_object_unref (headers);
+#endif
} else if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
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;
+}