#include <tny-camel-folder.h>
#include <tny-camel-imap-folder.h>
#include <tny-camel-pop-folder.h>
+#include <widgets/modest-header-window.h>
+#include <widgets/modest-folder-window.h>
+#include <widgets/modest-accounts-window.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>
#include <modest-maemo-utils.h>
#endif
-
-#ifdef MODEST_PLATFORM_MAEMO
-#include "maemo/modest-osso-state-saving.h"
-#endif /* MODEST_PLATFORM_MAEMO */
-#ifndef MODEST_TOOLKIT_GTK
-#include "maemo/modest-hildon-includes.h"
-#include "maemo/modest-connection-specific-smtp-window.h"
-#endif /* !MODEST_TOOLKIT_GTK */
-#include <modest-utils.h>
-
+#include "modest-utils.h"
+#include "widgets/modest-connection-specific-smtp-window.h"
#include "widgets/modest-ui-constants.h"
-#include <widgets/modest-main-window.h>
#include <widgets/modest-msg-view-window.h>
#include <widgets/modest-account-view-window.h>
#include <widgets/modest-details-dialog.h>
#include <tny-msg-view.h>
#include <tny-device.h>
#include <tny-merge-folder.h>
+#include <widgets/modest-toolkit-utils.h>
+#include <tny-camel-bs-msg.h>
+#include <tny-camel-bs-mime-part.h>
+#include <gtk/gtk.h>
#include <gtkhtml/gtkhtml.h>
-#define MIN_FREE_SPACE 5 * 1024 * 1024
#define MODEST_MOVE_TO_DIALOG_FOLDER_VIEW "move-to-dialog-folder-view"
typedef struct _GetMsgAsyncHelper {
gchar *mailbox;
GtkWidget *parent_window;
TnyHeader *header;
+ TnyHeader *top_header;
+ TnyMsg *msg_part;
+ TnyList *parts;
} ReplyForwardHelper;
typedef struct _MoveToHelper {
static void reply_forward (ReplyForwardAction action, ModestWindow *win);
-static void folder_refreshed_cb (ModestMailOperation *mail_op,
- TnyFolder *folder,
- gpointer user_data);
-
-static void on_send_receive_finished (ModestMailOperation *mail_op,
- gpointer user_data);
-
static gint header_list_count_uncached_msgs (TnyList *header_list);
static gboolean connect_to_get_msg (ModestWindow *win,
static gboolean remote_folder_has_leave_on_server (TnyFolderStore *folder);
-static void do_create_folder (GtkWindow *window,
+static void do_create_folder (ModestWindow *window,
TnyFolderStore *parent_folder,
const gchar *suggested_name);
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
+ ModestWindow *win);
static void modest_ui_actions_on_window_move_to (GtkAction *action,
TnyList *list_to_move,
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)
- win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(),
- TRUE); /* create if not existent */
-#else
if (!win) {
GList *window_list;
ModestWindowMgr *mgr;
g_list_free (window_list);
}
}
-#endif
- if (win)
- gtk_window_set_transient_for (GTK_WINDOW (wizard), GTK_WINDOW (win));
+ if (win) {
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
+ gtk_window_set_transient_for (GTK_WINDOW (wizard), toplevel);
+ }
/* make sure the mainwindow is visible. We need to present the
wizard again to give it the focus back. show_all are needed
in order to get the widgets properly drawn (MainWindow main
paned won't be in its right position and the dialog will be
missplaced */
-#ifndef MODEST_TOOLKIT_HILDON2
- gtk_widget_show_all (GTK_WIDGET (win));
- gtk_widget_show_all (GTK_WIDGET (wizard));
- 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));
void
modest_ui_actions_on_about (GtkAction *action, ModestWindow *win)
{
+ GtkWindow *toplevel;
GtkWidget *about;
const gchar *authors[] = {
"Dirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>",
NULL
};
about = gtk_about_dialog_new ();
- gtk_about_dialog_set_name (GTK_ABOUT_DIALOG(about), PACKAGE_NAME);
+ gtk_about_dialog_set_program_name (GTK_ABOUT_DIALOG(about), PACKAGE_NAME);
gtk_about_dialog_set_version (GTK_ABOUT_DIALOG(about),PACKAGE_VERSION);
gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG(about),
_("Copyright (c) 2006, Nokia Corporation\n"
"uses the tinymail email framework written by Philip van Hoof"));
gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(about), authors);
gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(about), "http://modest.garage.maemo.org");
- gtk_window_set_transient_for (GTK_WINDOW (about), GTK_WINDOW (win));
+
+ toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
+ gtk_window_set_transient_for (GTK_WINDOW (about), toplevel);
gtk_window_set_modal (GTK_WINDOW (about), TRUE);
gtk_dialog_run (GTK_DIALOG (about));
static TnyList *
get_selected_headers (ModestWindow *win)
{
- if (MODEST_IS_MAIN_WINDOW(win)) {
- GtkWidget *header_view;
-
- header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- return modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
-
- } else if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
+ if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
/* for MsgViewWindows, we simply return a list with one element */
TnyHeader *header;
TnyList *list = NULL;
}
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;
-}
-
-static GtkTreeRowReference *
-get_next_after_selected_headers (ModestHeaderView *header_view)
-{
- GtkTreeSelection *sel;
- GList *selected_rows, *node;
- GtkTreePath *path;
- GtkTreeRowReference *result;
- GtkTreeModel *model;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
- sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view));
- selected_rows = gtk_tree_selection_get_selected_rows (sel, NULL);
-
- if (selected_rows == NULL)
+ } else {
return NULL;
-
- node = g_list_last (selected_rows);
- path = gtk_tree_path_copy ((GtkTreePath *) node->data);
- gtk_tree_path_next (path);
-
- result = gtk_tree_row_reference_new (model, path);
-
- gtk_tree_path_free (path);
- g_list_foreach (selected_rows, (GFunc) gtk_tree_path_free, NULL);
- g_list_free (selected_rows);
-
- return result;
+ }
}
static void
gpointer user_data)
{
TnyHeaderFlags flags;
+ gchar *uid;
g_return_if_fail (TNY_IS_HEADER(header));
flags = tny_header_get_flags (header);
if (flags & TNY_HEADER_FLAG_SEEN) return;
tny_header_set_flag (header, TNY_HEADER_FLAG_SEEN);
+ uid = modest_tny_folder_get_header_unique_id (header);
+ modest_platform_emit_msg_read_changed_signal (uid, TRUE);
+ g_free (uid);
}
static void
flags = tny_header_get_flags (header);
if (flags & TNY_HEADER_FLAG_SEEN) {
+ gchar *uid;
+ uid = modest_tny_folder_get_header_unique_id (header);
tny_header_unset_flag (header, TNY_HEADER_FLAG_SEEN);
+ modest_platform_emit_msg_read_changed_signal (uid, FALSE);
}
}
gchar *desc = NULL;
gint response;
ModestWindowMgr *mgr;
- GtkWidget *header_view = NULL;
gboolean retval = TRUE;
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)) {
- header_view =
- 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 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 FALSE;
/* Check if any of the headers are already opened, or in the process of being opened */
- if (MODEST_IS_MAIN_WINDOW (win)) {
- gint opened_headers = 0;
-
- iter = tny_list_create_iterator (header_list);
- mgr = modest_runtime_get_window_mgr ();
- while (!tny_iterator_is_done (iter)) {
- header = TNY_HEADER (tny_iterator_get_current (iter));
- if (header) {
- if (modest_window_mgr_find_registered_header (mgr, header, NULL))
- opened_headers++;
- g_object_unref (header);
- }
- tny_iterator_next (iter);
- }
- g_object_unref (iter);
-
- if (opened_headers > 0) {
- gchar *msg;
-
- msg = g_strdup_printf (_("mcen_nc_unable_to_delete_n_messages"),
- opened_headers);
-
- modest_platform_run_information_dialog (GTK_WINDOW (win), (const gchar *) msg, FALSE);
-
- g_free (msg);
- g_object_unref (header_list);
- return FALSE;
- }
- }
/* Select message */
if (tny_list_get_length(header_list) == 1) {
tny_list_get_length(header_list)), desc);
/* Confirmation dialog */
- response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
+ response = modest_platform_run_confirmation_dialog (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (win))),
message);
-
if (response == GTK_RESPONSE_OK) {
- ModestWindow *main_window = NULL;
- ModestWindowMgr *mgr = NULL;
- GtkTreeModel *model = NULL;
GtkTreeSelection *sel = NULL;
- GList *sel_list = NULL, *tmp = NULL;
- GtkTreeRowReference *next_row_reference = NULL;
- GtkTreeRowReference *prev_row_reference = NULL;
- GtkTreePath *next_path = NULL;
- GtkTreePath *prev_path = NULL;
+ GList *sel_list = NULL;
ModestMailOperation *mail_op = NULL;
/* Find last selected row */
- if (MODEST_IS_MAIN_WINDOW (win)) {
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
- sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view));
- sel_list = gtk_tree_selection_get_selected_rows (sel, &model);
- for (tmp=sel_list; tmp; tmp=tmp->next) {
- if (tmp->next == NULL) {
- prev_path = gtk_tree_path_copy((GtkTreePath *) tmp->data);
- next_path = gtk_tree_path_copy((GtkTreePath *) tmp->data);
-
- gtk_tree_path_prev (prev_path);
- gtk_tree_path_next (next_path);
-
- prev_row_reference = gtk_tree_row_reference_new (model, prev_path);
- next_row_reference = gtk_tree_row_reference_new (model, next_path);
- }
- }
- }
/* Disable window dimming management */
- modest_window_disable_dimming (MODEST_WINDOW(win));
+ modest_window_disable_dimming (win);
/* Remove each header. If it's a view window header_view == NULL */
mail_op = modest_mail_operation_new ((GObject *) win);
if (sel != NULL) {
gtk_tree_selection_unselect_all (sel);
}
- modest_window_enable_dimming (MODEST_WINDOW(win));
+ modest_window_enable_dimming (win);
if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
modest_ui_actions_refresh_message_window_after_delete (MODEST_MSG_VIEW_WINDOW (win));
/* Get main window */
mgr = modest_runtime_get_window_mgr ();
- main_window = modest_window_mgr_get_main_window (mgr, FALSE); /* don't create */
- } else if (MODEST_IS_MAIN_WINDOW (win)) {
- /* Move cursor to next row */
- main_window = win;
-
- /* Select next or previous row */
- if (gtk_tree_row_reference_valid (next_row_reference)) {
- gtk_tree_selection_select_path (sel, next_path);
- }
- else if (gtk_tree_row_reference_valid (prev_row_reference)) {
- gtk_tree_selection_select_path (sel, prev_path);
- }
-
- /* Free */
- if (gtk_tree_row_reference_valid (next_row_reference))
- gtk_tree_row_reference_free (next_row_reference);
- if (next_path != NULL)
- gtk_tree_path_free (next_path);
- if (gtk_tree_row_reference_valid (prev_row_reference))
- gtk_tree_row_reference_free (prev_row_reference);
- if (prev_path != NULL)
- gtk_tree_path_free (prev_path);
}
/* Update toolbar dimming state */
- if (main_window) {
- modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
- modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
- }
+ modest_ui_actions_check_menu_dimming_rules (win);
+ modest_ui_actions_check_toolbar_dimming_rules (win);
/* Free */
g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL);
g_return_if_fail (MODEST_IS_WINDOW(win));
/* Check first if the header view has the focus */
- if (MODEST_IS_MAIN_WINDOW (win)) {
- GtkWidget *w;
- 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_WINDOW(win));
- return;
- }
- }
modest_ui_actions_on_delete_message (action, win);
}
ModestWindowMgr *mgr = NULL;
#ifdef MODEST_PLATFORM_MAEMO
- modest_osso_save_state();
+ modest_window_mgr_save_state_for_all_windows (modest_runtime_get_window_mgr ());
#endif /* MODEST_PLATFORM_MAEMO */
g_debug ("closing down, clearing %d item(s) from operation queue",
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));
+ if (MODEST_IS_MSG_VIEW_WINDOW (win))
+ modest_msg_view_window_add_to_contacts (MODEST_MSG_VIEW_WINDOW (win));
+ else if (MODEST_IS_MSG_EDIT_WINDOW (win))
+ modest_msg_edit_window_add_to_contacts (MODEST_MSG_EDIT_WINDOW (win));
}
void
clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
selection = gtk_clipboard_wait_for_text (clipboard);
- /* Question: why is the clipboard being used here?
- * It doesn't really make a lot of sense. */
-
- if (selection)
- {
- modest_address_book_add_address (selection);
+ if (selection) {
+ modest_address_book_add_address (selection, (GtkWindow *) win);
g_free (selection);
}
}
return;
} else {
/* Show the list of accounts */
- GtkWindow *account_win = GTK_WINDOW (modest_account_view_window_new ());
+ GtkWindow *win_toplevel, *acc_toplevel;
+ GtkWidget *account_win;
+
+ account_win = modest_account_view_window_new ();
+ acc_toplevel = (GtkWindow *) gtk_widget_get_toplevel (account_win);
/* 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));
+ win_toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
+ modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), acc_toplevel, win_toplevel);
+ modest_utils_show_dialog_and_forget (win_toplevel, GTK_DIALOG (account_win));
}
}
void
modest_ui_actions_on_smtp_servers (GtkAction *action, ModestWindow *win)
{
- /* This is currently only implemented for Maemo,
- * because it requires an API (libconic) to detect different connection
- * 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 (
modest_window_mgr_set_modal (modest_runtime_get_window_mgr (),
GTK_WINDOW (specific_window), (GtkWindow *) win);
gtk_widget_show (specific_window);
-#endif /* !MODEST_TOOLKIT_GTK */
}
static guint64
TnyMsg *msg = NULL;
TnyAccount *account = NULL;
TnyFolder *folder = NULL;
- gchar *from_str = NULL, *signature = NULL, *body = NULL;
- gchar *recipient = NULL;
+ gchar *from_str = NULL, *signature = NULL, *body = NULL, *recipient = NULL, *tmp = NULL;
gboolean use_signature = FALSE;
ModestWindow *msg_win = NULL;
ModestAccountMgr *mgr = modest_runtime_get_account_mgr();
GnomeVFSFileSize total_size, allowed_size;
guint64 available_disk, expected_size, parts_size;
guint parts_count;
+ TnyList *header_pairs;
/* we check for low-mem */
if (modest_platform_check_memory_low (win, TRUE))
parts_size = count_parts_size (attachments);
expected_size = modest_tny_msg_estimate_size (body, NULL, parts_count, parts_size);
- /* Double check: memory full condition or message too big */
- if (available_disk < MIN_FREE_SPACE ||
+ /* Double check: disk full condition or message too big */
+ if (available_disk < MODEST_TNY_ACCOUNT_STORE_MIN_FREE_SPACE ||
expected_size > available_disk) {
gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
modest_platform_system_banner (NULL, NULL, msg);
}
if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) {
- modest_platform_run_information_dialog (
- GTK_WINDOW(win),
- _KR("memr_ib_operation_disabled"),
- TRUE);
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
+ modest_platform_run_information_dialog (toplevel,
+ _("mail_ib_error_attachment_size"),
+ TRUE);
return;
}
-#ifdef MODEST_TOOLKIT_HILDON2
if (win)
account_name = g_strdup (modest_window_get_active_account(win));
-#endif
if (!account_name) {
account_name = modest_account_mgr_get_default_account(mgr);
}
goto cleanup;
}
+
recipient = modest_text_utils_get_email_address (from_str);
- signature = modest_account_mgr_get_signature_from_recipient (mgr, recipient, &use_signature);
+ tmp = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr (),
+ recipient,
+ &use_signature);
+ signature = modest_text_utils_create_colored_signature (tmp);
+ g_free (tmp);
g_free (recipient);
- if (body_str != NULL) {
- body = use_signature ? g_strconcat(body_str, "\n--\n", signature, NULL) : g_strdup(body_str);
- } else {
- body = use_signature ? g_strconcat("\n--\n", signature, NULL) : g_strdup("");
- }
- msg = modest_tny_msg_new (to_str, from_str, cc_str, bcc_str, subject_str, NULL, NULL, body, NULL, NULL, NULL);
+ body = use_signature ? g_strconcat ((body_str) ? body_str : "", signature, NULL) :
+ g_strdup(body_str);
+
+ header_pairs = TNY_LIST (tny_simple_list_new ());
+ msg = modest_tny_msg_new_html_plain (to_str, from_str, cc_str, bcc_str, subject_str,
+ NULL, NULL, body, NULL, NULL, NULL, NULL, header_pairs, NULL);
+ g_object_unref (header_pairs);
+
if (!msg) {
g_printerr ("modest: failed to create new msg\n");
goto cleanup;
error = modest_mail_operation_get_error (mail_op);
if (error && error->domain == MODEST_MAIL_OPERATION_ERROR &&
error->code == MODEST_MAIL_OPERATION_ERROR_LOW_MEMORY) {
+ GtkWindow *toplevel = NULL;
GObject *source = modest_mail_operation_get_source (mail_op);
- modest_platform_run_information_dialog (GTK_IS_WINDOW (source) ? GTK_WINDOW (source) : NULL,
+
+ toplevel = (GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (source));
+ modest_platform_run_information_dialog (toplevel,
_KR("memr_ib_operation_disabled"),
TRUE);
g_object_unref (source);
error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE)) {
gchar *subject, *msg, *format = NULL;
TnyAccount *account;
- subject = tny_header_dup_subject (header);
+
+ subject = (header) ? tny_header_dup_subject (header) : NULL;
if (!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, subject);
+ ModestProtocolType proto = modest_tny_account_get_protocol_type (account);
+ ModestProtocol *protocol = modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (), proto);
+
+ if (protocol) {
+ if (tny_account_get_connection_status (account) ==
+ TNY_CONNECTION_STATUS_CONNECTED) {
+ if (header) {
+ format = modest_protocol_get_translation (protocol,
+ MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE,
+ subject);
+ } else {
+ format = modest_protocol_get_translation (protocol,
+ MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE_LOST_HEADER);
+ }
+ } else {
+ format = g_strdup_printf (_("mail_ib_backend_server_invalid"),
+ tny_account_get_hostname (account));
+ }
+ }
g_object_unref (account);
}
- if (!format)
- format = g_strdup (_("emev_ni_ui_imap_message_not_available_in_server"));
+ if (!format) {
+ if (header) {
+ format = g_strdup (_("emev_ni_ui_imap_message_not_available_in_server"));
+ } else {
+ format = g_strdup (_("emev_ni_ui_pop3_msg_recv_error"));
+ }
+ }
msg = g_strdup_printf (format, subject);
modest_platform_run_information_dialog (NULL, msg, FALSE);
typedef struct {
GtkTreeModel *model;
TnyHeader *header;
+ ModestWindow *caller_window;
OpenMsgBannerInfo *banner_info;
GtkTreeRowReference *rowref;
} OpenMsgHelper;
{
GtkWidget *header_view;
- 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)){
+ 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;
}
if (status == MODEST_TNY_SEND_QUEUE_FAILED) {
*is_draft = TRUE;
}
-#ifdef MODEST_TOOLKIT_HILDON2
else {
/* In Fremantle we can not
open any message from
failed state */
*can_open = FALSE;
}
-#endif
}
g_object_unref(traccount);
} else {
win = modest_msg_view_window_new_with_header_model (msg, account, mailbox, (const gchar*) uid,
helper->model, helper->rowref);
} else {
- win = modest_msg_view_window_new_for_attachment (msg, account, mailbox, (const gchar*) uid);
+ win = modest_msg_view_window_new_for_attachment (msg, NULL, account, mailbox, (const gchar*) uid);
}
g_free (uid);
}
gtk_widget_show_all (GTK_WIDGET(win));
}
- /* Update toolbar dimming state */
- if (MODEST_IS_MAIN_WINDOW (parent_win)) {
- modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (parent_win));
- }
cleanup:
/* Free */
g_object_unref (parent_win);
}
-static gboolean
-is_memory_full_error (GError *error, ModestMailOperation *mail_op)
-{
- gboolean enough_free_space = TRUE;
- GnomeVFSURI *cache_dir_uri;
- const gchar *cache_dir = NULL;
- GnomeVFSFileSize free_space;
- TnyAccountStore *acc_store;
-
- acc_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store ());
-
- /* Cache dir is different in case we're using an external storage (like MMC account) */
- if (mail_op) {
- TnyAccount *account = modest_mail_operation_get_account (mail_op);
- if (account) {
- if (modest_tny_account_is_memory_card_account (account)) {
- cache_dir = g_getenv (MODEST_MMC1_VOLUMEPATH_ENV);
- }
- g_object_unref (account);
- }
- }
-
- /* Get the default local cache dir */
- if (!cache_dir)
- cache_dir = tny_account_store_get_cache_dir (acc_store);
-
- cache_dir_uri = gnome_vfs_uri_new (cache_dir);
- if (cache_dir_uri) {
- if (gnome_vfs_get_volume_free_space (cache_dir_uri, &free_space) == GNOME_VFS_OK) {
- if (free_space < MIN_FREE_SPACE)
- enough_free_space = FALSE;
- }
- gnome_vfs_uri_unref (cache_dir_uri);
- }
-
- if ((error->code == TNY_SYSTEM_ERROR_MEMORY ||
- /* When asking for a mail and no space left on device
- tinymail returns this error */
- error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE ||
- /* When the folder summary could not be read or
- written */
- error->code == TNY_IO_ERROR_WRITE ||
- error->code == TNY_IO_ERROR_READ) &&
- !enough_free_space) {
- return TRUE;
- } else {
- return FALSE;
- }
-}
-
-static gboolean
-check_memory_full_error (GtkWidget *parent_window, GError *err)
-{
- if (err == NULL)
- return FALSE;
-
- if (is_memory_full_error (err, NULL)) {
- gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
- modest_platform_information_banner (parent_window, NULL, msg);
- g_free (msg);
- } else if (err->code == TNY_SYSTEM_ERROR_MEMORY)
- /* If the account was created in memory full
- conditions then tinymail won't be able to
- connect so it'll return this error code */
- modest_platform_information_banner (parent_window,
- NULL, _("emev_ui_imap_inbox_select_error"));
- else
- return FALSE;
-
- return TRUE;
-}
-
void
modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op,
gpointer user_data)
/* If the mail op has been cancelled then it's not an error:
don't show any message */
if (status != MODEST_MAIL_OPERATION_STATUS_CANCELED) {
- if (is_memory_full_error ((GError *) error, mail_op)) {
+ TnyAccount *account = modest_mail_operation_get_account (mail_op);
+ if (modest_tny_account_store_is_disk_full_error (modest_runtime_get_account_store(),
+ (GError *) error, account)) {
gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
modest_platform_information_banner ((GtkWidget *) win, NULL, msg);
g_free (msg);
} else if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
error->code == MODEST_MAIL_OPERATION_ERROR_FILE_IO) {
modest_platform_information_banner ((GtkWidget *) win,
- NULL, _CS ("sfil_ni_unable_to_open_file_not_found"));
+ NULL, _CS_UNABLE_TO_OPEN_FILE_NOT_FOUND);
} else if (user_data) {
modest_platform_information_banner ((GtkWidget *) win,
NULL, user_data);
}
+ if (account)
+ g_object_unref (account);
}
if (win)
}
static void
+caller_win_destroyed (OpenMsgHelper *helper, GObject *object)
+{
+ if (helper->caller_window)
+ helper->caller_window = NULL;
+}
+
+static void
open_msg_helper_destroyer (gpointer user_data)
{
OpenMsgHelper *helper = (OpenMsgHelper *) user_data;
+ if (helper->caller_window) {
+ g_object_weak_unref ((GObject *) helper->caller_window, (GWeakNotify) caller_win_destroyed, helper);
+ helper->caller_window = NULL;
+ }
+
if (helper->banner_info) {
g_free (helper->banner_info->message);
if (helper->banner_info->idle_handler > 0) {
static void
open_msg_performer(gboolean canceled,
GError *err,
- GtkWindow *parent_window,
+ ModestWindow *parent_window,
TnyAccount *account,
gpointer user_data)
{
helper = (OpenMsgHelper *) user_data;
status = tny_account_get_connection_status (account);
- if (err || canceled) {
+ if (err || canceled || helper->caller_window == NULL) {
modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), helper->header);
/* Free the helper */
open_msg_helper_destroyer (helper);
- /* In memory full conditions we could get this error here */
- check_memory_full_error ((GtkWidget *) parent_window, err);
+ /* In disk full conditions we could get this error here */
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ account, NULL);
goto clean;
}
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 (!g_strcmp0 (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) ||
+ !g_strcmp0 (account_name, MODEST_MMC_ACCOUNT_ID)) {
+ g_free (account_name);
+ account_name = g_strdup (modest_window_get_active_account (MODEST_WINDOW (parent_window)));
+ }
+
if (!can_open) {
modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), helper->header);
g_free (account_name);
GtkWidget *header_view;
gchar *uid;
- header_view = get_header_view_from_window (MODEST_WINDOW (parent_window));
+ header_view = get_header_view_from_window (parent_window);
uid = modest_tny_folder_get_header_unique_id (helper->header);
if (header_view) {
const gchar *mailbox = NULL;
- mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (parent_window));
+ mailbox = modest_window_get_active_mailbox (parent_window);
window = modest_msg_view_window_new_from_header_view
(MODEST_HEADER_VIEW (header_view), account_name, mailbox, uid, helper->rowref);
if (window != NULL) {
goto clean;
}
g_free (account_name);
-#endif
/* Create the mail operation */
mail_op =
modest_mail_operation_new_with_error_handling ((GObject *) parent_window,
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->banner = NULL;
- 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 ());
OpenMsgHelper *helper;
ModestWindow *window;
- g_return_if_fail (header != NULL && rowref != NULL);
+ g_return_if_fail (header != NULL && rowref != NULL && gtk_tree_row_reference_valid (rowref));
mgr = modest_runtime_get_window_mgr ();
if (found) {
if (window) {
#ifndef MODEST_TOOLKIT_HILDON2
- gtk_window_present (GTK_WINDOW (window));
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) window);
+ gtk_window_present (toplevel);
#endif
} else {
/* the header has been registered already, we don't do
/* Allways download if we are online. */
if (!tny_device_is_online (modest_runtime_get_device ())) {
gint response;
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
/* If ask for user permission to download the messages */
- response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
+ response = modest_platform_run_confirmation_dialog (toplevel,
_("mcen_nc_get_msg"));
/* End if the user does not want to continue */
(the user could switch between folders) */
helper = g_slice_new (OpenMsgHelper);
helper->model = g_object_ref (gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)));
+ helper->caller_window = win;
+ g_object_weak_ref ((GObject *) helper->caller_window, (GWeakNotify) caller_win_destroyed, helper);
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 (!cached) {
- modest_platform_connect_and_perform ((GtkWindow *) win, TRUE, g_object_ref (account),
+ modest_platform_connect_and_perform (win, TRUE, g_object_ref (account),
open_msg_performer, helper);
} else {
/* Call directly the performer, do not need to connect */
- open_msg_performer (FALSE, NULL, (GtkWindow *) win,
+ open_msg_performer (FALSE, NULL, win,
g_object_ref (account), helper);
}
cleanup:
create_reply_forward_helper (ReplyForwardAction action,
ModestWindow *win,
guint reply_forward_type,
- TnyHeader *header)
+ TnyHeader *header,
+ TnyMsg *msg_part,
+ TnyHeader *top_header,
+ TnyList *parts)
{
ReplyForwardHelper *rf_helper = NULL;
const gchar *active_acc = modest_window_get_active_account (win);
rf_helper->action = action;
rf_helper->parent_window = (MODEST_IS_WINDOW (win)) ? GTK_WIDGET (win) : NULL;
rf_helper->header = (header) ? g_object_ref (header) : NULL;
+ rf_helper->top_header = (top_header) ? g_object_ref (top_header) : NULL;
+ rf_helper->msg_part = (msg_part) ? g_object_ref (msg_part) : NULL;
rf_helper->account_name = (active_acc) ?
g_strdup (active_acc) :
modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
rf_helper->mailbox = g_strdup (active_mailbox);
+ if (parts)
+ rf_helper->parts = g_object_ref (parts);
+ else
+ rf_helper->parts = NULL;
/* Note that window could be destroyed just AFTER calling
register_window so we must ensure that this pointer does
g_free (helper->mailbox);
if (helper->header)
g_object_unref (helper->header);
+ if (helper->top_header)
+ g_object_unref (helper->top_header);
+ if (helper->msg_part)
+ g_object_unref (helper->msg_part);
+ if (helper->parts)
+ g_object_unref (helper->parts);
if (helper->parent_window)
g_object_weak_unref (G_OBJECT (helper->parent_window),
rf_helper_window_closed, helper);
gchar *from = NULL;
TnyAccount *account = NULL;
ModestWindowMgr *mgr = NULL;
- gchar *signature = NULL;
+ gchar *signature = NULL, *recipient = NULL;
gboolean use_signature;
- gchar *recipient;
/* If there was any error. The mail operation could be NULL,
this means that we already have the message downloaded and
from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(),
rf_helper->account_name, rf_helper->mailbox);
+
recipient = modest_text_utils_get_email_address (from);
- signature = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr(),
- recipient,
+ signature = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr (),
+ recipient,
&use_signature);
g_free (recipient);
/* Create reply mail */
switch (rf_helper->action) {
+ /* Use the msg_header to ensure that we have all the
+ information. The summary can lack some data */
+ TnyHeader *msg_header;
case ACTION_REPLY:
+ msg_header = tny_msg_get_header (rf_helper->msg_part?rf_helper->msg_part:msg);
new_msg =
- modest_tny_msg_create_reply_msg (msg, header, from,
+ modest_tny_msg_create_reply_msg (rf_helper->msg_part?rf_helper->msg_part:msg, msg_header, from,
(use_signature) ? signature : NULL,
rf_helper->reply_forward_type,
MODEST_TNY_MSG_REPLY_MODE_SENDER);
+ g_object_unref (msg_header);
break;
case ACTION_REPLY_TO_ALL:
+ msg_header = tny_msg_get_header (rf_helper->msg_part?rf_helper->msg_part:msg);
new_msg =
- modest_tny_msg_create_reply_msg (msg, header, from,
+ modest_tny_msg_create_reply_msg (rf_helper->msg_part?rf_helper->msg_part:msg, msg_header, from,
(use_signature) ? signature : NULL,
rf_helper->reply_forward_type,
MODEST_TNY_MSG_REPLY_MODE_ALL);
edit_type = MODEST_EDIT_TYPE_REPLY;
+ g_object_unref (msg_header);
break;
case ACTION_FORWARD:
new_msg =
- modest_tny_msg_create_forward_msg (msg, from, (use_signature) ? signature : NULL,
+ modest_tny_msg_create_forward_msg (rf_helper->msg_part?rf_helper->msg_part:msg, from,
+ (use_signature) ? signature : NULL,
rf_helper->reply_forward_type);
edit_type = MODEST_EDIT_TYPE_FORWARD;
break;
TnyAccount *account)
{
GtkResponseType response;
+ GtkWindow *toplevel;
/* Allways download if we are online. */
if (tny_device_is_online (modest_runtime_get_device ()))
return TRUE;
/* If offline, then 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",
- num_of_uncached_msgs));
+ toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
+ response = modest_platform_run_confirmation_dialog (toplevel,
+ ngettext("mcen_nc_get_msg",
+ "mcen_nc_get_msgs",
+ num_of_uncached_msgs));
if (response == GTK_RESPONSE_CANCEL)
return FALSE;
- return modest_platform_connect_and_wait((GtkWindow *) win, account);
+ return modest_platform_connect_and_wait(toplevel, account);
}
static void
reply_forward_performer (gboolean canceled,
GError *err,
- GtkWindow *parent_window,
+ ModestWindow *parent_window,
TnyAccount *account,
gpointer user_data)
{
modest_ui_actions_disk_operations_error_handler,
NULL, NULL);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
- modest_mail_operation_get_msg (mail_op, rf_helper->header, TRUE, reply_forward_cb, rf_helper);
+ modest_mail_operation_get_msg_and_parts (mail_op, rf_helper->top_header, rf_helper->parts, TRUE, reply_forward_cb, rf_helper);
/* Frees */
g_object_unref(mail_op);
}
+static gboolean
+all_parts_retrieved (TnyMimePart *part)
+{
+ if (!TNY_IS_CAMEL_BS_MIME_PART (part)) {
+ return TRUE;
+ } else {
+ TnyList *pending_parts;
+ TnyIterator *iterator;
+ gboolean all_retrieved = TRUE;
+
+ pending_parts = TNY_LIST (tny_simple_list_new ());
+ tny_mime_part_get_parts (part, pending_parts);
+ iterator = tny_list_create_iterator (pending_parts);
+ while (all_retrieved && !tny_iterator_is_done (iterator)) {
+ TnyMimePart *child;
+
+ child = TNY_MIME_PART (tny_iterator_get_current (iterator));
+
+ if (tny_camel_bs_mime_part_is_fetched (TNY_CAMEL_BS_MIME_PART (child))) {
+ all_retrieved = all_parts_retrieved (TNY_MIME_PART (child));
+ } else {
+ all_retrieved = FALSE;
+ }
+
+ g_object_unref (child);
+ tny_iterator_next (iterator);
+ }
+ g_object_unref (iterator);
+ g_object_unref (pending_parts);
+ return all_retrieved;
+ }
+}
+
+static void
+forward_pending_parts_helper (TnyMimePart *part, TnyList *list)
+{
+ TnyList *parts;
+ TnyIterator *iterator;
+
+ if (!tny_camel_bs_mime_part_is_fetched (TNY_CAMEL_BS_MIME_PART (part))) {
+ tny_list_append (list, G_OBJECT (part));
+ }
+ parts = TNY_LIST (tny_simple_list_new ());
+ tny_mime_part_get_parts (part, parts);
+ for (iterator = tny_list_create_iterator (parts);
+ !tny_iterator_is_done (iterator);
+ tny_iterator_next (iterator)) {
+ TnyMimePart *child;
+
+ child = TNY_MIME_PART (tny_iterator_get_current (iterator));
+ forward_pending_parts_helper (child, list);
+ g_object_unref (child);
+ }
+ g_object_unref (iterator);
+ g_object_unref (parts);
+}
+
+static TnyList *
+forward_pending_parts (TnyMsg *msg)
+{
+ TnyList *result = TNY_LIST (tny_simple_list_new ());
+ if (TNY_IS_CAMEL_BS_MIME_PART (msg)) {
+ forward_pending_parts_helper (TNY_MIME_PART (msg), result);
+ }
+
+ return result;
+}
+
/*
* Common code for the reply and forward actions
*/
ReplyForwardHelper *rf_helper = NULL;
guint reply_forward_type;
- g_return_if_fail (MODEST_IS_WINDOW(win));
+ g_return_if_fail (win && 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_IS_MSG_VIEW_WINDOW (win)) {
TnyMsg *msg = NULL;
+ TnyMsg *top_msg = NULL;
TnyHeader *header = NULL;
/* Get header and message. Do not free them here, the
reply_forward_cb must do it */
msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW(win));
+ top_msg = modest_msg_view_window_get_top_message (MODEST_MSG_VIEW_WINDOW(win));
header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
- if (msg && header) {
+ if (msg && header && (action != ACTION_FORWARD || all_parts_retrieved (TNY_MIME_PART (msg)))) {
/* Create helper */
rf_helper = create_reply_forward_helper (action, win,
- reply_forward_type, header);
+ reply_forward_type, header, NULL, NULL, NULL);
reply_forward_cb (NULL, header, FALSE, msg, NULL, rf_helper);
} else {
- g_warning("%s: no message or header found in viewer\n", __FUNCTION__);
+ gboolean do_download = TRUE;
+
+ if (msg && header && action == ACTION_FORWARD) {
+ if (top_msg == NULL)
+ top_msg = g_object_ref (msg);
+ /* Not all parts retrieved. Then we have to retrieve them all before
+ * creating the forward message */
+ if (!tny_device_is_online (modest_runtime_get_device ())) {
+ gint response;
+ GtkWindow *toplevel;
+
+ /* If ask for user permission to download the messages */
+ toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
+ response = modest_platform_run_confirmation_dialog (toplevel,
+ ngettext("mcen_nc_get_msg",
+ "mcen_nc_get_msgs",
+ 1));
+
+ /* End if the user does not want to continue */
+ if (response == GTK_RESPONSE_CANCEL)
+ do_download = FALSE;
+ }
+
+ if (do_download) {
+ TnyList *pending_parts;
+ TnyFolder *folder;
+ TnyAccount *account;
+ TnyHeader *top_header;
+
+ /* Create helper */
+ top_header = tny_msg_get_header (top_msg);
+ pending_parts = forward_pending_parts (top_msg);
+ rf_helper = create_reply_forward_helper (action, win,
+ reply_forward_type, header, msg, top_header, pending_parts);
+ g_object_unref (pending_parts);
+
+ folder = tny_header_get_folder (top_header);
+ account = tny_folder_get_account (folder);
+ modest_platform_connect_and_perform (win,
+ TRUE, account,
+ reply_forward_performer,
+ rf_helper);
+ if (folder) g_object_unref (folder);
+ g_object_unref (account);
+ if (top_header) g_object_unref (top_header);
+ }
+
+ } else {
+ g_warning("%s: no message or header found in viewer\n", __FUNCTION__);
+ }
}
if (msg)
g_object_unref (msg);
+ if (top_msg)
+ g_object_unref (top_msg);
if (header)
g_object_unref (header);
} else {
/* Allways download if we are online. */
if (!tny_device_is_online (modest_runtime_get_device ())) {
gint response;
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
/* If ask for user permission to download the messages */
- response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
+ response = modest_platform_run_confirmation_dialog (toplevel,
ngettext("mcen_nc_get_msg",
"mcen_nc_get_msgs",
uncached_msgs));
if (download) {
/* Create helper */
rf_helper = create_reply_forward_helper (action, win,
- reply_forward_type, header);
+ reply_forward_type, header, NULL, NULL, NULL);
if (uncached_msgs > 0) {
- modest_platform_connect_and_perform (GTK_WINDOW (win),
+ modest_platform_connect_and_perform (win,
TRUE, account,
reply_forward_performer,
rf_helper);
} else {
- reply_forward_performer (FALSE, NULL, GTK_WINDOW (win),
+ reply_forward_performer (FALSE, NULL, win,
account, rf_helper);
}
}
if (folder)
g_object_unref (folder);
} else {
- reply_forward_cb (NULL, header, FALSE, NULL, NULL, rf_helper);
+ reply_forward_cb (NULL, header, FALSE, NULL, NULL, NULL);
}
/* Frees */
g_object_unref (header_list);
}
void
-modest_ui_actions_on_reply (GtkAction *action, ModestWindow *win)
+modest_ui_actions_reply_calendar (ModestWindow *win, TnyList *header_pairs)
{
- g_return_if_fail (MODEST_IS_WINDOW(win));
-
- reply_forward (ACTION_REPLY, win);
-}
+ gchar *from;
+ gchar *recipient;
+ gchar *signature;
+ gboolean use_signature;
+ TnyMsg *new_msg;
+ GtkWidget *msg_win;
+ const gchar *account_name;
+ const gchar *mailbox;
+ TnyHeader *msg_header;
+ ModestWindowMgr *mgr;
+ TnyMsg *msg;
-void
-modest_ui_actions_on_forward (GtkAction *action, ModestWindow *win)
-{
- g_return_if_fail (MODEST_IS_WINDOW(win));
+ g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win));
- reply_forward (ACTION_FORWARD, 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))
+ return;
-void
-modest_ui_actions_on_reply_all (GtkAction *action, ModestWindow *win)
-{
- g_return_if_fail (MODEST_IS_WINDOW(win));
+ account_name = modest_window_get_active_account (MODEST_WINDOW (win));
+ mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (win));
+ from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(),
+ account_name, mailbox);
+ recipient = modest_text_utils_get_email_address (from);
+ signature = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr(),
+ recipient,
+ &use_signature);
+ g_free (recipient);
- reply_forward (ACTION_REPLY_TO_ALL, win);
-}
+ msg = modest_msg_view_window_get_message(MODEST_MSG_VIEW_WINDOW(win));
+ g_return_if_fail(msg);
-void
-modest_ui_actions_on_next (GtkAction *action,
- ModestWindow *window)
-{
- if (MODEST_IS_MAIN_WINDOW (window)) {
- GtkWidget *header_view;
+ msg_header = tny_msg_get_header (msg);
+ new_msg =
+ modest_tny_msg_create_reply_calendar_msg (msg, msg_header, from,
+ (use_signature) ? signature : NULL,
+ header_pairs);
+ g_object_unref (msg_header);
- header_view = modest_main_window_get_child_widget (
- MODEST_MAIN_WINDOW(window),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- if (!header_view)
- return;
+ g_free (from);
+ g_free (signature);
+
+ if (!new_msg) {
+ g_warning ("%s: failed to create message\n", __FUNCTION__);
+ goto cleanup;
+ }
+
+ msg_win = (GtkWidget *) modest_msg_edit_window_new (new_msg, account_name, mailbox, FALSE);
+ mgr = modest_runtime_get_window_mgr ();
+ modest_window_mgr_register_window (mgr, MODEST_WINDOW (msg_win), (ModestWindow *) win);
+
+ /* Show edit window */
+ gtk_widget_show_all (GTK_WIDGET (msg_win));
+
+cleanup:
+ if (new_msg)
+ g_object_unref (G_OBJECT (new_msg));
+}
+
+void
+modest_ui_actions_on_reply (GtkAction *action, ModestWindow *win)
+{
+ g_return_if_fail (MODEST_IS_WINDOW(win));
+
+ reply_forward (ACTION_REPLY, win);
+}
+
+void
+modest_ui_actions_on_forward (GtkAction *action, ModestWindow *win)
+{
+ g_return_if_fail (MODEST_IS_WINDOW(win));
+
+ reply_forward (ACTION_FORWARD, win);
+}
+
+void
+modest_ui_actions_on_reply_all (GtkAction *action, ModestWindow *win)
+{
+ g_return_if_fail (MODEST_IS_WINDOW(win));
+
+ reply_forward (ACTION_REPLY_TO_ALL, win);
+}
- modest_header_view_select_next (
- MODEST_HEADER_VIEW(header_view));
- } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
+void
+modest_ui_actions_on_next (GtkAction *action,
+ ModestWindow *window)
+{
+ if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
modest_msg_view_window_select_next_message (
MODEST_MSG_VIEW_WINDOW (window));
} else {
{
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)
- return;
-
- modest_header_view_select_prev (MODEST_HEADER_VIEW(header_view));
- } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
+ if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
modest_msg_view_window_select_previous_message (MODEST_MSG_VIEW_WINDOW (window));
} else {
g_return_if_reached ();
g_return_if_fail (MODEST_IS_WINDOW(window));
- 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)) {
+ if (MODEST_IS_HEADER_WINDOW (window)) {
header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (window)));
-#endif
}
if (!header_view) {
- modest_platform_information_banner (NULL, NULL, _CS("ckdg_ib_nothing_to_sort"));
+ modest_platform_information_banner (NULL, NULL, _CS_NOTHING_TO_SORT);
return;
}
/* Show sorting dialog */
- modest_utils_run_sort_dialog (GTK_WINDOW (window), MODEST_SORT_HEADERS);
+ modest_utils_run_sort_dialog (MODEST_WINDOW (window), MODEST_SORT_HEADERS);
}
static void
-new_messages_arrived (ModestMailOperation *self,
- TnyList *new_headers,
- gpointer user_data)
+sync_folder_cb (ModestMailOperation *mail_op,
+ TnyFolder *folder,
+ gpointer user_data)
+{
+ ModestHeaderView *header_view = (ModestHeaderView *) user_data;
+
+ if (modest_mail_operation_get_status (mail_op) == MODEST_MAIL_OPERATION_STATUS_SUCCESS) {
+ ModestWindow *parent = (ModestWindow *) modest_mail_operation_get_source (mail_op);
+
+ /* We must clear first, because otherwise set_folder will ignore */
+ /* the change as the folders are the same */
+ modest_header_view_clear (header_view);
+ modest_header_view_set_folder (header_view, folder, TRUE, parent, NULL, NULL);
+
+ g_object_unref (parent);
+ }
+
+ g_object_unref (header_view);
+}
+
+static gboolean
+idle_refresh_folder (gpointer source)
+{
+ ModestHeaderView *header_view = NULL;
+
+ /* If the window still exists */
+ if (!GTK_IS_WIDGET (source) ||
+ !GTK_WIDGET_VISIBLE (source))
+ return FALSE;
+
+ /* Refresh the current view */
+ if (MODEST_IS_HEADER_WINDOW (source))
+ header_view = modest_header_window_get_header_view ((ModestHeaderWindow *) source);
+ if (header_view) {
+ TnyFolder *folder = modest_header_view_get_folder (header_view);
+ if (folder) {
+ /* Sync the folder status */
+ ModestMailOperation *mail_op = modest_mail_operation_new (source);
+ modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
+ modest_mail_operation_sync_folder (mail_op, folder, FALSE, sync_folder_cb, g_object_ref (header_view));
+ g_object_unref (folder);
+ g_object_unref (mail_op);
+ }
+ }
+
+ return FALSE;
+}
+
+static void
+update_account_cb (ModestMailOperation *self,
+ TnyList *new_headers,
+ gpointer user_data)
{
- GObject *source;
+ ModestWindow *top;
gboolean show_visual_notifications;
- source = modest_mail_operation_get_source (self);
- show_visual_notifications = (source) ? FALSE : TRUE;
- if (source)
- g_object_unref (source);
+ top = modest_window_mgr_get_current_top (modest_runtime_get_window_mgr ());
+ show_visual_notifications = (top) ? FALSE : TRUE;
/* Notify new messages have been downloaded. If the
send&receive was invoked by the user then do not show any
flags = tny_header_get_flags (header);
if (!(flags & TNY_HEADER_FLAG_SEEN)) {
- tny_list_append (actually_new_list, G_OBJECT (header));
+ /* Messages are ordered from most
+ recent to oldest. But we want to
+ show notifications starting from
+ the oldest message. That's why we
+ reverse the list */
+ tny_list_prepend (actually_new_list, G_OBJECT (header));
}
g_object_unref (header);
}
g_object_unref (actually_new_list);
}
-}
-
-gboolean
-retrieve_all_messages_cb (GObject *source,
- guint num_msgs,
- guint retrieve_limit)
-{
- GtkWindow *window;
- gchar *msg;
- gint response;
-
- window = GTK_WINDOW (source);
- msg = g_strdup_printf (_("mail_nc_msg_count_limit_exceeded"),
- num_msgs, retrieve_limit);
-
- /* Ask the user if they want to retrieve all the messages */
- response =
- modest_platform_run_confirmation_dialog_with_buttons (window, msg,
- _("mcen_bd_get_all"),
- _("mcen_bd_newest_only"));
- /* Free and return */
- g_free (msg);
- return (response == GTK_RESPONSE_ACCEPT) ? TRUE : FALSE;
+ if (top) {
+ /* Refresh the current folder in an idle. We do this
+ in order to avoid refresh cancelations if the
+ currently viewed folder is the inbox */
+ g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+ idle_refresh_folder,
+ g_object_ref (top),
+ g_object_unref);
+ }
}
typedef struct {
static void
do_send_receive_performer (gboolean canceled,
GError *err,
- GtkWindow *parent_window,
+ ModestWindow *parent_window,
TnyAccount *account,
gpointer user_data)
{
info = (SendReceiveInfo *) user_data;
if (err || canceled) {
- /* In memory full conditions we could get this error here */
- check_memory_full_error ((GtkWidget *) parent_window, err);
+ /* In disk full conditions we could get this error here */
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ account, NULL);
if (info->mail_op) {
modest_mail_operation_queue_remove (modest_runtime_get_mail_operation_queue (),
goto clean;
}
- /* Set send/receive operation in progress */
- if (info->win && MODEST_IS_MAIN_WINDOW (info->win)) {
- modest_main_window_notify_send_receive_initied (MODEST_MAIN_WINDOW (info->win));
- }
-
- if (info->win && MODEST_IS_MAIN_WINDOW (info->win))
- g_signal_connect (G_OBJECT (info->mail_op), "operation-finished",
- G_CALLBACK (on_send_receive_finished),
- info->win);
/* Send & receive. */
- modest_mail_operation_update_account (info->mail_op, info->account_name, info->poke_status, info->interactive,
- (info->win) ? retrieve_all_messages_cb : NULL,
- new_messages_arrived, info->win);
+ modest_mail_operation_update_account (info->mail_op, info->account_name,
+ info->poke_status, info->interactive,
+ update_account_cb, info->win);
clean:
/* Frees */
gchar *acc_name = NULL;
SendReceiveInfo *info;
ModestTnyAccountStore *acc_store;
+ TnyAccount *account;
/* If no account name was provided then get the current account, and if
there is no current account then pick the default one: */
if (!acc_name)
acc_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
if (!acc_name) {
- g_printerr ("modest: cannot get default account\n");
+ modest_platform_information_banner (NULL, NULL, _("emev_ni_internal_error"));
return;
}
} else {
}
acc_store = modest_runtime_get_account_store ();
+ account = modest_tny_account_store_get_server_account (acc_store, acc_name, TNY_ACCOUNT_TYPE_STORE);
+
+ if (!account) {
+ g_free (acc_name);
+ modest_platform_information_banner (NULL, NULL, _("emev_ni_internal_error"));
+ return;
+ }
+
+ /* Do not automatically refresh accounts that are flagged as
+ NO_AUTO_UPDATE. This could be useful for accounts that
+ handle their own update times */
+ if (!interactive) {
+ ModestProtocolType proto = modest_tny_account_get_protocol_type (account);
+ if (proto != MODEST_PROTOCOL_REGISTRY_TYPE_INVALID) {
+ const gchar *tag = MODEST_PROTOCOL_REGISTRY_NO_AUTO_UPDATE_PROTOCOLS;
+ ModestProtocolRegistry *registry = modest_runtime_get_protocol_registry ();
+
+ if (modest_protocol_registry_protocol_type_has_tag (registry, proto, tag)) {
+ g_debug ("%s no auto update allowed for account %s", __FUNCTION__, account_name);
+ g_object_unref (account);
+ g_free (acc_name);
+ return;
+ }
+ }
+ }
/* Create the info for the connect and perform */
info = g_slice_new (SendReceiveInfo);
info->win = (win) ? g_object_ref (win) : NULL;
info->poke_status = poke_status;
info->interactive = interactive;
- info->account = modest_tny_account_store_get_server_account (acc_store, acc_name,
- TNY_ACCOUNT_TYPE_STORE);
+ info->account = account;
/* We need to create the operation here, because otherwise it
could happen that the queue emits the queue-empty signal
while we're trying to connect the account */
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), info->mail_op);
/* Invoke the connect and perform */
- modest_platform_connect_and_perform ((win) ? GTK_WINDOW (win) : NULL,
- force_connection, info->account,
+ modest_platform_connect_and_perform (win, force_connection, info->account,
do_send_receive_performer, info);
}
modest_ui_actions_on_accounts (NULL, win);
/* Refresh the current folder. The if is always TRUE it's just an extra check */
- if (MODEST_IS_MAIN_WINDOW (win)) {
- GtkWidget *folder_view;
- TnyFolderStore *folder_store;
-
- folder_view =
- modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- if (!folder_view)
- return;
-
- folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
-
- 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)) {
+ 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));
void
-modest_ui_actions_toggle_header_list_view (GtkAction *action, ModestMainWindow *main_window)
-{
- ModestConf *conf;
- GtkWidget *header_view;
-
- g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
-
- header_view = modest_main_window_get_child_widget (main_window,
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- if (!header_view)
- return;
-
- conf = modest_runtime_get_conf ();
-
- /* what is saved/restored is depending on the style; thus; we save with
- * old style, then update the style, and restore for this new style
- */
- modest_widget_memory_save (conf, G_OBJECT(header_view), MODEST_CONF_HEADER_VIEW_KEY);
-
- if (modest_header_view_get_style
- (MODEST_HEADER_VIEW(header_view)) == MODEST_HEADER_VIEW_STYLE_DETAILS)
- modest_header_view_set_style (MODEST_HEADER_VIEW(header_view),
- MODEST_HEADER_VIEW_STYLE_TWOLINES);
- else
- modest_header_view_set_style (MODEST_HEADER_VIEW(header_view),
- MODEST_HEADER_VIEW_STYLE_DETAILS);
-
- modest_widget_memory_restore (conf, G_OBJECT(header_view),
- MODEST_CONF_HEADER_VIEW_KEY);
-}
-
-
-void
-modest_ui_actions_on_header_selected (ModestHeaderView *header_view,
- TnyHeader *header,
- ModestMainWindow *main_window)
-{
- g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
- g_return_if_fail (MODEST_IS_HEADER_VIEW (header_view));
-
- /* in the case the folder is empty, show the empty folder message and focus
- * folder view */
- if (!header && gtk_widget_is_focus (GTK_WIDGET (header_view))) {
- if (modest_header_view_is_empty (header_view)) {
- TnyFolder *folder = modest_header_view_get_folder (header_view);
- GtkWidget *folder_view =
- modest_main_window_get_child_widget (main_window,
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- if (folder != NULL) {
- modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view), folder, FALSE);
- g_object_unref (folder);
- }
- gtk_widget_grab_focus (GTK_WIDGET (folder_view));
- return;
- }
- }
- /* If no header has been selected then exit */
- if (!header)
- return;
-
- /* Update focus */
- if (!gtk_widget_is_focus (GTK_WIDGET(header_view)))
- gtk_widget_grab_focus (GTK_WIDGET(header_view));
-
- /* Update toolbar dimming state */
- modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
- modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
-}
-
-void
modest_ui_actions_on_header_activated (ModestHeaderView *header_view,
TnyHeader *header,
GtkTreePath *path,
ModestWindow *window)
{
- GtkWidget *open_widget;
GtkTreeRowReference *rowref;
g_return_if_fail (MODEST_IS_WINDOW(window));
if (modest_platform_check_memory_low (MODEST_WINDOW(window), TRUE))
return;
- 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;
- }
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
-set_active_account_from_tny_account (TnyAccount *account,
- ModestWindow *window)
-{
- const gchar *server_acc_name = tny_account_get_id (account);
-
- /* We need the TnyAccount provided by the
- account store because that is the one that
- knows the name of the Modest account */
- TnyAccount *modest_server_account =
- modest_tny_account_store_get_tny_account_by (modest_runtime_get_account_store (),
- MODEST_TNY_ACCOUNT_STORE_QUERY_ID,
- server_acc_name);
- if (!modest_server_account) {
- g_warning ("%s: could not get tny account\n", __FUNCTION__);
- return;
- }
-
- /* Update active account, but only if it's not a pseudo-account */
- if ((!modest_tny_account_is_virtual_local_folders(modest_server_account)) &&
- (!modest_tny_account_is_memory_card_account(modest_server_account))) {
- const gchar *modest_acc_name =
- modest_tny_account_get_parent_modest_account_name_for_server_account (modest_server_account);
- if (modest_acc_name)
- modest_window_set_active_account (window, modest_acc_name);
- }
-
- g_object_unref (modest_server_account);
-}
-
-
-static void
-folder_refreshed_cb (ModestMailOperation *mail_op,
- TnyFolder *folder,
- gpointer user_data)
-{
- ModestMainWindow *win = NULL;
- GtkWidget *folder_view, *header_view;
- const GError *error;
-
- g_return_if_fail (TNY_IS_FOLDER (folder));
-
- win = MODEST_MAIN_WINDOW (user_data);
-
- /* Check if the operation failed due to memory low conditions */
- error = modest_mail_operation_get_error (mail_op);
- if (error && error->domain == MODEST_MAIL_OPERATION_ERROR &&
- error->code == MODEST_MAIL_OPERATION_ERROR_LOW_MEMORY) {
- modest_platform_run_information_dialog (GTK_WINDOW (win),
- _KR("memr_ib_operation_disabled"),
- TRUE);
- return;
- }
-
- folder_view =
- modest_main_window_get_child_widget(win, MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- header_view =
- modest_main_window_get_child_widget(win, MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
-
- if (folder_view) {
- TnyFolderStore *current_folder;
-
- current_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
- if (current_folder) {
- gboolean different = ((TnyFolderStore *) folder != current_folder);
- g_object_unref (current_folder);
- if (different)
- return;
- }
- }
-
- /* Check if folder is empty and set headers view contents style */
- if ((tny_folder_get_all_count (folder) == 0) ||
- modest_header_view_is_empty (MODEST_HEADER_VIEW (header_view)))
- modest_main_window_set_contents_style (win,
- MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY);
-}
-
-void
-modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
- TnyFolderStore *folder_store,
- gboolean selected,
- ModestMainWindow *main_window)
-{
- GtkWidget *header_view;
-
- g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
-
- header_view = modest_main_window_get_child_widget(main_window,
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- if (!header_view)
- return;
-
-
- if (TNY_IS_ACCOUNT (folder_store)) {
- if (selected) {
- set_active_account_from_tny_account (TNY_ACCOUNT (folder_store), MODEST_WINDOW (main_window));
-
- /* Show account details */
- modest_main_window_set_contents_style (main_window, MODEST_MAIN_WINDOW_CONTENTS_STYLE_DETAILS);
- }
- } else {
- if (TNY_IS_FOLDER (folder_store) && selected) {
- TnyAccount *account;
-
- /* Update the active account */
- account = modest_tny_folder_get_account (TNY_FOLDER (folder_store));
- if (account) {
- set_active_account_from_tny_account (account, MODEST_WINDOW (main_window));
- g_object_unref (account);
- account = NULL;
- }
-
- /* Set the header style by default, it could
- be changed later by the refresh callback to
- empty */
- modest_main_window_set_contents_style (main_window,
- MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
-
- /* Set folder on header view. This function
- will call tny_folder_refresh_async so we
- pass a callback that will be called when
- finished. We use that callback to set the
- empty view if there are no messages */
- modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view),
- TNY_FOLDER (folder_store),
- TRUE,
- MODEST_WINDOW (main_window),
- folder_refreshed_cb,
- main_window);
-
- /* Restore configuration. We need to do this
- *after* the set_folder because the widget
- memory asks the header view about its
- folder */
- modest_widget_memory_restore (modest_runtime_get_conf (),
- G_OBJECT(header_view),
- MODEST_CONF_HEADER_VIEW_KEY);
- } else {
- /* No need to save the header view
- configuration for Maemo because it only
- saves the sorting stuff and that it's
- already being done by the sort
- dialog. Remove it when the GNOME version
- has the same behaviour */
-#ifdef MODEST_TOOLKIT_GTK
- if (modest_main_window_get_contents_style (main_window) ==
- MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS)
- modest_widget_memory_save (modest_runtime_get_conf (),
- G_OBJECT (header_view),
- MODEST_CONF_HEADER_VIEW_KEY);
-#endif
- modest_header_view_clear (MODEST_HEADER_VIEW(header_view));
- }
- }
-
- /* Update dimming state */
- modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
- modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
-}
-
void
modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemType type,
ModestWindow *win)
GtkWidget *dialog;
gchar *txt, *item;
gboolean online;
+ GtkWindow *toplevel;
+ toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
item = (type == MODEST_ITEM_TYPE_FOLDER) ? "folder" : "message";
online = tny_device_is_online (modest_runtime_get_device());
if (online) {
/* already online -- the item is simply not there... */
- dialog = gtk_message_dialog_new (GTK_WINDOW (win),
+ dialog = gtk_message_dialog_new (toplevel,
GTK_DIALOG_MODAL,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_NONE,
gtk_dialog_run (GTK_DIALOG(dialog));
} else {
dialog = gtk_dialog_new_with_buttons (_("Connection requested"),
- GTK_WINDOW (win),
+ toplevel,
GTK_DIALOG_MODAL,
_("mcen_bd_dialog_cancel"),
GTK_RESPONSE_REJECT,
gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
g_free (txt);
- gtk_window_set_default_size (GTK_WINDOW(dialog), 300, 300);
+ gtk_window_set_default_size ((GtkWindow *) dialog, 300, 300);
if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
/* TODO: Comment about why is this commented out: */
/* modest_platform_connect_and_wait (); */
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
- * temporary hack. See modest_ui_actions_on_save_to_drafts()
- * for details */
- win = MODEST_MAIN_WINDOW(modest_window_mgr_get_main_window(
- modest_runtime_get_window_mgr(), FALSE));
- if (win != NULL) {
- GtkWidget *hdrview = modest_main_window_get_child_widget(
- 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);
parts_count,
parts_size);
- /* Double check: memory full condition or message too big */
- if (available_disk < MIN_FREE_SPACE ||
+ /* Double check: disk full condition or message too big */
+ if (available_disk < MODEST_TNY_ACCOUNT_STORE_MIN_FREE_SPACE ||
expected_size > available_disk) {
gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
modest_platform_information_banner (NULL, NULL, msg);
* somehow got past our checks when attaching.
*/
if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) {
- modest_platform_run_information_dialog (
- GTK_WINDOW(edit_window),
- _KR("memr_ib_operation_disabled"),
- TRUE);
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) edit_window);
+ modest_platform_run_information_dialog (toplevel,
+ _("mail_ib_error_attachment_size"),
+ TRUE);
return FALSE;
}
gchar *account_name;
ModestAccountMgr *account_mgr;
gboolean had_error = FALSE;
- ModestMainWindow *win = NULL;
g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), FALSE);
data->priority_flags,
data->references,
data->in_reply_to,
+ data->custom_header_pairs,
on_save_to_drafts_cb,
g_object_ref(edit_window));
-#ifdef MODEST_TOOLKIT_HILDON2
/* In hildon2 we always show the information banner on saving to drafts.
* It will be a system information banner in this case.
*/
gchar *text = g_strdup_printf (_("mail_va_saved_to_drafts"), _("mcen_me_folder_drafts"));
modest_platform_information_banner (NULL, NULL, text);
g_free (text);
-#else
- /* Use the main window as the parent of the banner, if the
- main window does not exist it won't be shown, if the parent
- window exists then it's properly shown. We don't use the
- editor window because it could be closed (save to drafts
- could happen after closing the window */
- win = (ModestMainWindow *)
- modest_window_mgr_get_main_window( modest_runtime_get_window_mgr(), FALSE);
- if (win) {
- gchar *text = g_strdup_printf (_("mail_va_saved_to_drafts"), _("mcen_me_folder_drafts"));
- modest_platform_information_banner (GTK_WIDGET (win), NULL, text);
- g_free (text);
- }
-#endif
modest_msg_edit_window_set_modified (edit_window, FALSE);
/* Frees */
modest_msg_edit_window_free_msg_data (edit_window, data);
- /* ** FIXME **
- * If the drafts folder is selected then make the header view
- * insensitive while the message is being saved to drafts
- * (it'll be sensitive again in on_save_to_drafts_cb()). This
- * is not very clean but it avoids letting the drafts folder
- * in an inconsistent state: the user could edit the message
- * being saved and undesirable things would happen.
- * In the average case the user won't notice anything at
- * all. In the worst case (the user is editing a really big
- * file from Drafts) the header view will be insensitive
- * during the saving process (10 or 20 seconds, depending on
- * the message). Anyway this is just a quick workaround: once
- * we find a better solution it should be removed
- * See NB#65125 (commend #18) for details.
- */
- if (!had_error && win != NULL) {
- ModestFolderView *view = MODEST_FOLDER_VIEW(modest_main_window_get_child_widget(
- win, MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW));
- if (view != NULL) {
- TnyFolder *folder = TNY_FOLDER(modest_folder_view_get_selected(view));
- if (folder) {
- if (modest_tny_folder_is_local_folder(folder)) {
- TnyFolderType folder_type;
- folder_type = modest_tny_folder_get_local_or_mmc_folder_type(folder);
- if (folder_type == TNY_FOLDER_TYPE_DRAFTS) {
- GtkWidget *hdrview = modest_main_window_get_child_widget(
- win, MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- if (hdrview) gtk_widget_set_sensitive(hdrview, FALSE);
- }
- }
- }
- if (folder != NULL) g_object_unref(folder);
- }
- }
return !had_error;
}
modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
{
TnyTransportAccount *transport_account = NULL;
- gboolean had_error = FALSE;
+ gboolean had_error = FALSE, add_to_contacts;
MsgData *data;
ModestAccountMgr *account_mgr;
gchar *account_name;
g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), TRUE);
- if (!modest_msg_edit_window_check_names (edit_window, TRUE))
+ /* Check whether to automatically add new contacts to addressbook or not */
+ add_to_contacts = modest_conf_get_bool (modest_runtime_get_conf (),
+ MODEST_CONF_AUTO_ADD_TO_CONTACTS, NULL);
+ if (!modest_msg_edit_window_check_names (edit_window, add_to_contacts))
return TRUE;
data = modest_msg_edit_window_get_msg_data (edit_window);
- if (data->subject == NULL || data->subject[0] == '\0') {
- /* Empty subject -> no send */
- modest_msg_edit_window_free_msg_data (edit_window, data);
- return FALSE;
- }
-
recipients = g_strconcat (data->to?data->to:"",
data->cc?data->cc:"",
data->bcc?data->bcc:"",
}
/* Get the currently-active transport account for this modest account: */
- if (strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) != 0) {
+ if (account_name && strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) != 0) {
transport_account =
TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
(modest_runtime_get_account_store (),
data->images,
data->references,
data->in_reply_to,
- data->priority_flags);
+ data->priority_flags,
+ data->custom_header_pairs);
if (modest_mail_operation_get_status (mail_operation) == MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS)
modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent"));
if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
error->code == MODEST_MAIL_OPERATION_ERROR_INSTANCE_CREATION_FAILED) {
g_warning ("%s failed: %s\n", __FUNCTION__, (modest_mail_operation_get_error (mail_operation))->message);
- modest_platform_information_banner (NULL, NULL, _CS("sfil_ni_not_enough_memory"));
+ modest_platform_information_banner (NULL, NULL, _CS_NOT_ENOUGH_MEMORY);
had_error = TRUE;
}
}
return !had_error;
}
+gboolean
+modest_ui_actions_on_send_msg (ModestWindow *window,
+ TnyMsg *msg)
+{
+ TnyTransportAccount *transport_account = NULL;
+ gboolean had_error = FALSE;
+ ModestAccountMgr *account_mgr;
+ gchar *account_name;
+ ModestMailOperation *mail_operation;
+
+ account_mgr = modest_runtime_get_account_mgr();
+ account_name = g_strdup(modest_window_get_active_account (MODEST_WINDOW(window)));
+
+ if (!account_name)
+ account_name = modest_account_mgr_get_default_account (account_mgr);
+
+ /* Get the currently-active transport account for this modest account: */
+ if (account_name && strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) != 0) {
+ transport_account =
+ TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
+ (modest_runtime_get_account_store (),
+ account_name, TNY_ACCOUNT_TYPE_TRANSPORT));
+ }
+
+ /* Create the mail operation */
+ mail_operation = modest_mail_operation_new_with_error_handling (NULL, modest_ui_actions_disk_operations_error_handler, NULL, NULL);
+ modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
+
+ modest_mail_operation_send_mail (mail_operation,
+ transport_account,
+ msg);
+
+ if (modest_mail_operation_get_status (mail_operation) == MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS)
+ modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent"));
+
+ if (modest_mail_operation_get_error (mail_operation) != NULL) {
+ const GError *error = modest_mail_operation_get_error (mail_operation);
+ if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
+ error->code == MODEST_MAIL_OPERATION_ERROR_INSTANCE_CREATION_FAILED) {
+ g_warning ("%s failed: %s\n", __FUNCTION__, (modest_mail_operation_get_error (mail_operation))->message);
+ modest_platform_information_banner (NULL, NULL, _CS("sfil_ni_not_enough_memory"));
+ had_error = TRUE;
+ }
+ }
+
+ /* Free data: */
+ g_free (account_name);
+ g_object_unref (G_OBJECT (transport_account));
+ g_object_unref (G_OBJECT (mail_operation));
+
+ return !had_error;
+}
+
void
modest_ui_actions_on_toggle_bold (GtkToggleAction *action,
ModestMsgEditWindow *window)
if (modest_msg_edit_window_get_format (MODEST_MSG_EDIT_WINDOW(window)) == MODEST_MSG_EDIT_FORMAT_TEXT)
return;
- modest_msg_edit_window_select_background_color (window);
}
void
error = modest_mail_operation_get_error (mail_op);
if (error) {
-
+ gboolean disk_full = FALSE;
+ TnyAccount *account;
/* Show an error. If there was some problem writing to
disk, show it, otherwise show the generic folder
create error. We do it here and not in an error
stop the main loop in a gtk_dialog_run and then,
the message won't be shown until that dialog is
closed */
- modest_ui_actions_disk_operations_error_handler (mail_op,
- _("mail_in_ui_folder_create_error"));
-
- if (!is_memory_full_error ((GError *) error, mail_op)) {
- /* Try again if there is no full memory condition */
- do_create_folder (source_win, parent_folder, (const gchar *) suggested_name);
+ account = modest_mail_operation_get_account (mail_op);
+ if (account) {
+ disk_full =
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) source_win,
+ (GError *) error,
+ account,
+ _("mail_in_ui_folder_create_error_memory"));
+ g_object_unref (account);
}
+ if (!disk_full) {
+ /* Show an error and try again if there is no
+ full memory condition */
+ modest_platform_information_banner ((GtkWidget *) source_win, NULL,
+ _("mail_in_ui_folder_create_error"));
+ do_create_folder ((ModestWindow *) source_win,
+ parent_folder, (const gchar *) suggested_name);
+ }
+
} else {
- /* the 'source_win' is either the ModestMainWindow, or the 'Move to folder'-dialog
+ /* the 'source_win' is either the ModestWindow, or the 'Move to folder'-dialog
* FIXME: any other? */
GtkWidget *folder_view;
- if (MODEST_IS_MAIN_WINDOW(source_win))
- folder_view =
- modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (source_win),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- else
folder_view = GTK_WIDGET(g_object_get_data (G_OBJECT (source_win),
MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
static void
do_create_folder_performer (gboolean canceled,
- GError *err,
- GtkWindow *parent_window,
- TnyAccount *account,
- gpointer user_data)
+ GError *err,
+ ModestWindow *parent_window,
+ TnyAccount *account,
+ gpointer user_data)
{
CreateFolderConnect *helper = (CreateFolderConnect *) user_data;
ModestMailOperation *mail_op;
if (canceled || err) {
- /* In memory full conditions we could get this error here */
- check_memory_full_error ((GtkWidget *) parent_window, err);
+ /* In disk full conditions we could get this error here */
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ NULL, _("mail_in_ui_folder_create_error_memory"));
/* This happens if we have selected the outbox folder
as the parent */
- if (err->code == TNY_SERVICE_ERROR_UNKNOWN &&
+ if (err && err->code == TNY_SERVICE_ERROR_UNKNOWN &&
TNY_IS_MERGE_FOLDER (helper->parent)) {
/* Show an error and retry */
modest_platform_information_banner ((GtkWidget *) parent_window,
static void
-do_create_folder (GtkWindow *parent_window,
+do_create_folder (ModestWindow *parent_window,
TnyFolderStore *suggested_parent,
const gchar *suggested_name)
{
gint result;
gchar *folder_name = NULL;
TnyFolderStore *parent_folder = NULL;
+ GtkWindow *toplevel;
- result = modest_platform_run_new_folder_dialog (GTK_WINDOW (parent_window),
+ toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) parent_window);
+ result = modest_platform_run_new_folder_dialog (toplevel,
suggested_parent,
(gchar *) suggested_name,
&folder_name,
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),
+ modest_platform_connect_if_remote_and_perform (parent_window,
TRUE,
parent_folder,
do_create_folder_performer,
}
static void
-modest_ui_actions_create_folder(GtkWidget *parent_window,
+modest_ui_actions_create_folder(GtkWindow *parent_window,
GtkWidget *folder_view,
TnyFolderStore *parent_folder)
{
if (!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));
-#endif
}
if (parent_folder) {
- do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL);
+ do_create_folder (MODEST_WINDOW (parent_window), parent_folder, NULL);
g_object_unref (parent_folder);
}
}
g_return_if_fail (MODEST_IS_WINDOW(window));
- if (MODEST_IS_MAIN_WINDOW (window)) {
- GtkWidget *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, NULL);
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_FOLDER_WINDOW (window)) {
+ if (MODEST_IS_FOLDER_WINDOW (window)) {
GtkWidget *folder_view;
+ GtkWindow *toplevel;
folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
- modest_ui_actions_create_folder (GTK_WIDGET (window), folder_view, NULL);
-#endif
+ toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) window);
+ modest_ui_actions_create_folder (toplevel, folder_view, NULL);
} else {
g_assert_not_reached ();
}
const GError *error = NULL;
gchar *message = NULL;
gboolean mem_full;
+ TnyAccount *account = modest_mail_operation_get_account (mail_op);
/* Get error message */
error = modest_mail_operation_get_error (mail_op);
if (!error)
g_return_if_reached ();
- mem_full = is_memory_full_error ((GError *) error, mail_op);
+ mem_full = modest_tny_account_store_is_disk_full_error (modest_runtime_get_account_store(),
+ (GError *) error, account);
if (mem_full) {
message = g_strdup_printf (_KR("cerm_device_memory_full"), "");
} else if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
error->code == MODEST_MAIL_OPERATION_ERROR_FOLDER_EXISTS) {
- message = _CS("ckdg_ib_folder_already_exists");
+ message = _CS_FOLDER_ALREADY_EXISTS;
} else if (error->domain == TNY_ERROR_DOMAIN &&
error->code == TNY_SERVICE_ERROR_STATE) {
/* This means that the folder is already in use (a
message is opened for example */
message = _("emev_ni_internal_error");
} else {
- message = _CS("ckdg_ib_unable_to_rename");
+ message = _CS_UNABLE_TO_RENAME;
}
/* We don't set a parent for the dialog because the dialog
will be destroyed so the banner won't appear */
modest_platform_information_banner (NULL, NULL, message);
+ if (account)
+ g_object_unref (account);
if (mem_full)
g_free (message);
}
/* Note that if the rename fails new_folder will be NULL */
if (new_folder) {
modest_folder_view_select_folder (folder_view, new_folder, FALSE);
- } else {
- modest_folder_view_select_first_inbox_or_local (folder_view);
}
gtk_widget_grab_focus (GTK_WIDGET (folder_view));
}
static void
on_rename_folder_performer (gboolean canceled,
GError *err,
- GtkWindow *parent_window,
+ ModestWindow *parent_window,
TnyAccount *account,
gpointer user_data)
{
RenameFolderInfo *data = (RenameFolderInfo*)user_data;
if (canceled || err) {
- /* In memory full conditions we could get this error here */
- check_memory_full_error ((GtkWidget *) parent_window, err);
+ /* In disk full conditions we could get this error here */
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ account, NULL);
} else {
mail_op =
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
-
- 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)) {
+ if (MODEST_IS_FOLDER_WINDOW (parent_window)) {
ModestFolderWindow *folder_window = (ModestFolderWindow *) parent_window;
folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (folder_window));
}
-#endif
/* Clear the folders view */
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
g_return_val_if_fail (MODEST_IS_WINDOW(window), FALSE);
- 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;
-
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_FOLDER_WINDOW (window)) {
+ if (MODEST_IS_FOLDER_WINDOW (window)) {
folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
-#endif
} else {
return FALSE;
}
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 (window),
+ response = modest_platform_run_rename_folder_dialog (MODEST_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(window), TRUE,
+ modest_platform_connect_if_remote_and_perform (window, TRUE,
folder, on_rename_folder_performer, rename_folder_data);
}
}
gpointer user_data)
{
GObject *win = modest_mail_operation_get_source (mail_op);
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (win));
- modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL,
+ modest_platform_run_information_dialog (toplevel,
_("mail_in_ui_folder_delete_error"),
FALSE);
g_object_unref (win);
static void
on_delete_folder_cb (gboolean canceled,
- GError *err,
- GtkWindow *parent_window,
- TnyAccount *account,
- gpointer user_data)
+ GError *err,
+ ModestWindow *parent_window,
+ TnyAccount *account,
+ gpointer user_data)
{
DeleteFolderInfo *info = (DeleteFolderInfo*) user_data;
GtkWidget *folder_view;
ModestMailOperation *mail_op;
GtkTreeSelection *sel;
+ ModestWindow *modest_window;
+
+#ifdef MODEST_TOOLKIT_HILDON2
+ modest_window = (ModestWindow*) parent_window;
+#else
+ if (MODEST_IS_SHELL (parent_window)) {
+ modest_window = modest_shell_peek_window (MODEST_SHELL (parent_window));
+ } else {
+ modest_window = NULL;
+ }
+#endif
- if (!MODEST_IS_WINDOW(parent_window) || canceled || (err!=NULL)) {
+ if (!MODEST_IS_WINDOW(modest_window) || canceled || (err!=NULL)) {
+ /* Note that the connection process can fail due to
+ memory low conditions as it can not successfully
+ store the summary */
+ if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget*) parent_window, err,
+ account, NULL))
+ g_debug ("Error connecting when trying to delete a folder");
g_object_unref (G_OBJECT (info->folder));
g_free (info);
return;
}
- 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
+ if (MODEST_IS_FOLDER_WINDOW (modest_window)) {
+ folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (modest_window)));
} else {
g_object_unref (G_OBJECT (info->folder));
g_free (info);
mail_op);
modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (info->folder), info->move_to_trash);
- modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (folder_view));
-
- g_object_unref (G_OBJECT (mail_op));
- g_object_unref (G_OBJECT (info->folder));
+ g_object_unref (mail_op);
+ g_object_unref (info->folder);
g_free (info);
}
g_return_val_if_fail (MODEST_IS_WINDOW(window), FALSE);
- 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)) {
+ if (MODEST_IS_FOLDER_WINDOW (window)) {
folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
-#endif
} else {
return FALSE;
}
/* Show an error if it's an account */
if (!TNY_IS_FOLDER (folder)) {
- modest_platform_run_information_dialog (GTK_WINDOW (window),
+ modest_platform_run_information_dialog (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (window))),
_("mail_in_ui_folder_delete_error"),
FALSE);
g_object_unref (G_OBJECT (folder));
/* 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 (window),
+ response = modest_platform_run_confirmation_dialog (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (window))),
(const gchar *) message);
g_free (message);
if (response == GTK_RESPONSE_OK) {
- DeleteFolderInfo *info;
+ TnyAccount *account = NULL;
+ DeleteFolderInfo *info = NULL;
info = g_new0(DeleteFolderInfo, 1);
- info->folder = folder;
+ info->folder = g_object_ref (folder);
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 (window),
+
+ account = tny_folder_get_account (TNY_FOLDER (folder));
+ modest_platform_connect_if_remote_and_perform (window,
TRUE,
TNY_FOLDER_STORE (account),
on_delete_folder_cb, info);
g_object_unref (account);
+ g_object_unref (folder);
return TRUE;
} else {
return FALSE;
}
- g_object_unref (G_OBJECT (folder));
}
void
return delete_folder (window, FALSE);
}
-void
-modest_ui_actions_on_move_folder_to_trash_folder (GtkAction *action, ModestMainWindow *main_window)
-{
- g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
-
- delete_folder (MODEST_WINDOW (main_window), TRUE);
-}
-
typedef struct _PasswordDialogFields {
GtkWidget *username;
const gchar *value;
gboolean any_value_empty = FALSE;
-#ifdef MODEST_TOOLKIT_HILDON2
- value = hildon_entry_get_text (HILDON_ENTRY (fields->username));
-#else
- value = gtk_entry_get_text (GTK_ENTRY (fields->username));
-#endif
+ value = modest_entry_get_text (fields->username);
if ((value == NULL) || value[0] == '\0') {
any_value_empty = TRUE;
}
-#ifdef MODEST_TOOLKIT_HILDON2
- value = hildon_entry_get_text (HILDON_ENTRY (fields->password));
-#else
- value = gtk_entry_get_text (GTK_ENTRY (fields->password));
-#endif
+ value = modest_entry_get_text (fields->password);
if ((value == NULL) || value[0] == '\0') {
any_value_empty = TRUE;
}
gchar **password,
gboolean *cancel,
gboolean *remember,
- ModestMainWindow *main_window)
+ ModestWindow *window)
{
g_return_if_fail(server_account_name);
gboolean completed = FALSE;
gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
NULL,
GTK_DIALOG_MODAL,
- _HL("wdgt_bd_done"),
+ _HL_DONE,
GTK_RESPONSE_ACCEPT,
NULL);
gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox),
gchar *initial_username = modest_account_mgr_get_server_account_username (
modest_runtime_get_account_mgr(), server_account_name);
-#ifdef MODEST_TOOLKIT_HILDON2
- GtkWidget *entry_username = hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
- if (initial_username)
- hildon_entry_set_text (HILDON_ENTRY (entry_username), initial_username);
-#else
- GtkWidget *entry_username = gtk_entry_new ();
+ GtkWidget *entry_username = modest_toolkit_factory_create_entry (modest_runtime_get_toolkit_factory ());
if (initial_username)
- gtk_entry_set_text (GTK_ENTRY (entry_username), initial_username);
-#endif
+ modest_entry_set_text (entry_username, initial_username);
+
/* Dim this if a connection has ever succeeded with this username,
* as per the UI spec: */
/* const gboolean username_known = */
*/
gtk_widget_set_sensitive (entry_username, FALSE);
-#ifndef MODEST_TOOLKIT_GTK
/* Auto-capitalization is the default, so let's turn it off: */
+#ifdef MAEMO_CHANGES
hildon_gtk_entry_set_input_mode (GTK_ENTRY (entry_username), HILDON_GTK_INPUT_MODE_FULL);
+#endif
/* 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);
-#ifdef MODEST_TOOLKIT_HILDON2
- GtkWidget *caption = modest_maemo_utils_create_captioned (sizegroup, NULL,
- _("mail_fi_username"), FALSE,
- entry_username);
-#else
- GtkWidget *caption = hildon_caption_new (sizegroup,
- _("mail_fi_username"), entry_username, NULL, HILDON_CAPTION_MANDATORY);
-#endif
+ GtkWidget *caption = modest_toolkit_utils_create_captioned (sizegroup, NULL,
+ _("mail_fi_username"), FALSE,
+ entry_username);
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
- gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry_username,
- TRUE, FALSE, 0);
-#endif /* !MODEST_TOOLKIT_GTK */
/* password: */
-#ifdef MODEST_TOOLKIT_HILDON2
- GtkWidget *entry_password = hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
-#else
- GtkWidget *entry_password = gtk_entry_new ();
-#endif
+ GtkWidget *entry_password = modest_toolkit_factory_create_entry (modest_runtime_get_toolkit_factory ());
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: */
+#ifdef MAEMO_CHANGES
hildon_gtk_entry_set_input_mode (GTK_ENTRY (entry_password),
HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_INVISIBLE);
-
-#ifdef MODEST_TOOLKIT_HILDON2
- caption = modest_maemo_utils_create_captioned (sizegroup, NULL,
- _("mail_fi_password"), FALSE,
- entry_password);
-#else
- caption = hildon_caption_new (sizegroup,
- _("mail_fi_password"), entry_password, NULL, HILDON_CAPTION_MANDATORY);
#endif
+
+ caption = modest_toolkit_utils_create_captioned (sizegroup, NULL,
+ _("mail_fi_password"), FALSE,
+ entry_password);
gtk_widget_show (entry_password);
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
- gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry_password,
- TRUE, FALSE, 0);
-#endif /* !MODEST_TOOLKIT_GTK */
if (initial_username != NULL)
gtk_widget_grab_focus (GTK_WIDGET (entry_password));
if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
if (username) {
-#ifdef MODEST_TOOLKIT_HILDON2
- *username = g_strdup (hildon_entry_get_text (HILDON_ENTRY(entry_username)));
-#else
- *username = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry_username)));
-#endif
+ *username = g_strdup (modest_entry_get_text (entry_username));
/* Note that an empty field becomes the "" string */
if (*username && strlen (*username) > 0) {
}
if (password) {
-#ifdef MODEST_TOOLKIT_HILDON2
- *password = g_strdup (hildon_entry_get_text (HILDON_ENTRY(entry_password)));
-#else
- *password = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry_password)));
-#endif
+ *password = g_strdup (modest_entry_get_text (entry_password));
/* We do not save the password in the configuration,
* because this function is only called for passwords that should
if (cancel)
*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;
GtkClipboard *clipboard;
clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
- focused_widget = gtk_window_get_focus (GTK_WINDOW (window));
+ focused_widget = gtk_container_get_focus_child ((GtkContainer *) window);
if (GTK_IS_EDITABLE (focused_widget)) {
gtk_editable_cut_clipboard (GTK_EDITABLE(focused_widget));
gtk_clipboard_set_can_store (clipboard, NULL, 0);
gboolean copied = TRUE;
clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
- focused_widget = gtk_window_get_focus (GTK_WINDOW (window));
+ focused_widget = gtk_container_get_focus_child ((GtkContainer *) window);
if (GTK_IS_LABEL (focused_widget)) {
gchar *selection;
if (num_of_unc_msgs == 0 || continue_download) {
modest_platform_information_banner (
- NULL, NULL, _CS("mcen_ib_getting_items"));
+ NULL, NULL, _CS_GETTING_ITEMS);
modest_header_view_copy_selection (
MODEST_HEADER_VIEW (focused_widget));
} else
/* Show information banner if there was a copy to clipboard */
if(copied)
modest_platform_information_banner (
- NULL, NULL, _CS("ecoc_ib_edwin_copied"));
+ NULL, NULL, _CS_COPIED);
}
void
modest_ui_actions_on_undo (GtkAction *action,
ModestWindow *window)
{
- ModestEmailClipboard *clipboard = NULL;
-
if (MODEST_IS_MSG_EDIT_WINDOW (window)) {
modest_msg_edit_window_undo (MODEST_MSG_EDIT_WINDOW (window));
- } else if (MODEST_IS_MAIN_WINDOW (window)) {
- /* Clear clipboard source */
- clipboard = modest_runtime_get_email_clipboard ();
- modest_email_clipboard_clear (clipboard);
- }
- else {
+ } else {
g_return_if_reached ();
}
}
GtkWidget *inf_note = NULL;
ModestMailOperation *mail_op = NULL;
- focused_widget = gtk_window_get_focus (GTK_WINDOW (window));
+ focused_widget = gtk_container_get_focus_child ((GtkContainer *) window);
if (GTK_IS_EDITABLE (focused_widget)) {
gtk_editable_paste_clipboard (GTK_EDITABLE(focused_widget));
} else if (GTK_IS_TEXT_VIEW (focused_widget)) {
PasteAsAttachmentHelper *helper = g_new0 (PasteAsAttachmentHelper, 1);
helper->window = MODEST_MSG_EDIT_WINDOW (window);
helper->banner = modest_platform_animation_banner (GTK_WIDGET (window), NULL,
- _CS("ckct_nw_pasting"));
+ _CS_PASTING);
modest_email_clipboard_get_data (e_clipboard, &src_folder, &data, &delete);
mail_op = modest_mail_operation_new (G_OBJECT (window));
if (helper->banner != NULL) {
if (response == GTK_RESPONSE_OK) {
/* Launch notification */
inf_note = modest_platform_animation_banner (GTK_WIDGET (window), NULL,
- _CS("ckct_nw_pasting"));
+ _CS_PASTING);
if (inf_note != NULL) {
gtk_window_set_modal (GTK_WINDOW(inf_note), FALSE);
gtk_widget_show (GTK_WIDGET(inf_note));
} else if (src_folder != NULL) {
/* Launch notification */
inf_note = modest_platform_animation_banner (GTK_WIDGET (window), NULL,
- _CS("ckct_nw_pasting"));
+ _CS_PASTING);
if (inf_note != NULL) {
gtk_window_set_modal (GTK_WINDOW(inf_note), FALSE);
gtk_widget_show (GTK_WIDGET(inf_note));
{
GtkWidget *focused_widget;
- focused_widget = gtk_window_get_focus (GTK_WINDOW (window));
+ focused_widget = gtk_container_get_focus_child ((GtkContainer *) window);
if (MODEST_IS_ATTACHMENTS_VIEW (focused_widget)) {
modest_attachments_view_select_all (MODEST_ATTACHMENTS_VIEW (focused_widget));
} else if (GTK_IS_LABEL (focused_widget)) {
gtk_text_buffer_select_range (buffer, &start, &end);
} else if (GTK_IS_HTML (focused_widget)) {
gtk_html_select_all (GTK_HTML (focused_widget));
- } else if (MODEST_IS_MAIN_WINDOW (window)) {
- GtkWidget *header_view = focused_widget;
- GtkTreeSelection *selection = NULL;
-
- if (!(MODEST_IS_HEADER_VIEW (focused_widget))) {
- header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- }
-
- /* Disable window dimming management */
- modest_window_disable_dimming (MODEST_WINDOW(window));
-
- /* Select all messages */
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view));
- gtk_tree_selection_select_all (selection);
-
- /* Set focuse on header view */
- gtk_widget_grab_focus (header_view);
-
- /* Enable window dimming management */
- modest_window_enable_dimming (MODEST_WINDOW(window));
- modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
- modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
}
}
if (active != fullscreen) {
modest_window_mgr_set_fullscreen_mode (mgr, active);
#ifndef MODEST_TOOLKIT_HILDON2
- gtk_window_present (GTK_WINDOW (window));
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) window);
+ gtk_window_present (toplevel);
#endif
}
}
fullscreen = modest_window_mgr_get_fullscreen_mode (mgr);
modest_window_mgr_set_fullscreen_mode (mgr, !fullscreen);
-#ifndef MODEST_TOOLKIT_HILDON2
- gtk_window_present (GTK_WINDOW (window));
-#endif
}
/*
{
gboolean async_retrieval;
+ GtkWindow *toplevel;
TnyMsg *msg = NULL;
if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
async_retrieval = TRUE;
msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (window));
+ async_retrieval = !TNY_IS_CAMEL_BS_MSG (msg);
} else {
async_retrieval = FALSE;
}
- modest_platform_run_header_details_dialog (GTK_WINDOW (window), header, async_retrieval, msg);
+ toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) window);
+ modest_platform_run_header_details_dialog (toplevel, header, async_retrieval, msg);
if (msg)
g_object_unref (msg);
}
g_object_unref (header);
}
g_object_unref (msg);
-
- } else if (MODEST_IS_MAIN_WINDOW (win)) {
- GtkWidget *folder_view, *header_view;
-
- /* Check which widget has the focus */
- folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- if (gtk_widget_is_focus (folder_view)) {
- TnyFolderStore *folder_store
- = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
- if (!folder_store) {
- g_warning ("%s: No item was selected.\n", __FUNCTION__);
- return;
- }
- /* Show only when it's a folder */
- /* This function should not be called for account items,
- * because we dim the menu item for them. */
- if (TNY_IS_FOLDER (folder_store)) {
- modest_platform_run_folder_details_dialog (GTK_WINDOW (win),
- TNY_FOLDER (folder_store));
- }
-
- g_object_unref (folder_store);
-
- } else {
- header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- /* 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);
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
+
+ modest_platform_run_folder_details_dialog (toplevel, folder);
g_object_unref (folder);
}
-#endif
}
}
void
+modest_ui_actions_on_limit_error (GtkAction *action,
+ ModestWindow *win)
+{
+ g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win));
+
+ modest_platform_information_banner ((GtkWidget *) win, NULL, _CS_MAXIMUM_CHARACTERS_REACHED);
+
+}
+
+void
modest_ui_actions_on_toggle_show_cc (GtkToggleAction *toggle,
ModestMsgEditWindow *window)
{
modest_msg_edit_window_show_bcc (window, gtk_toggle_action_get_active (toggle));
}
-void
-modest_ui_actions_toggle_folders_view (GtkAction *action,
- ModestMainWindow *main_window)
-{
- g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
-
- if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)))
- modest_main_window_set_style (main_window, MODEST_MAIN_WINDOW_STYLE_SPLIT);
- else
- modest_main_window_set_style (main_window, MODEST_MAIN_WINDOW_STYLE_SIMPLE);
-}
void
modest_ui_actions_on_toggle_toolbar (GtkToggleAction *toggle,
}
void
-modest_ui_actions_on_check_names (GtkAction *action, ModestMsgEditWindow *window)
-{
- g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
- modest_msg_edit_window_check_names (window, FALSE);
-}
-
-#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
- * the OK button because we do not want the user to select a disallowed
- * destination for a folder.
- * The user also not desired to be able to use NEW button on items where
- * folder creation is not possibel.
- */
-static void
-on_move_to_dialog_folder_selection_changed (ModestFolderView* self,
- TnyFolderStore *folder_store,
- gboolean selected,
- gpointer user_data)
-{
- GtkWidget *dialog = NULL;
- gboolean ok_sensitive = TRUE, new_sensitive = TRUE;
- gboolean moving_folder = FALSE;
- gboolean is_local_account = TRUE;
- GtkWidget *folder_view = NULL;
- ModestTnyFolderRules rules;
-
- g_return_if_fail (MODEST_IS_FOLDER_VIEW(self));
-
- if (!selected)
- return;
-
- dialog = gtk_widget_get_ancestor (GTK_WIDGET (self), GTK_TYPE_DIALOG);
- if (!dialog)
- return;
-
- /* check if folder_store is an remote account */
- if (TNY_IS_ACCOUNT (folder_store)) {
- TnyAccount *local_account = NULL;
- TnyAccount *mmc_account = NULL;
- ModestTnyAccountStore *account_store = NULL;
-
- account_store = modest_runtime_get_account_store ();
- local_account = modest_tny_account_store_get_local_folders_account (account_store);
- mmc_account = modest_tny_account_store_get_mmc_folders_account (account_store);
-
- if ((gpointer) local_account != (gpointer) folder_store &&
- (gpointer) mmc_account != (gpointer) folder_store) {
- ModestProtocolType proto;
- proto = modest_tny_account_get_protocol_type (TNY_ACCOUNT (folder_store));
- if (proto == MODEST_PROTOCOL_REGISTRY_TYPE_INVALID) {
- proto = MODEST_PROTOCOLS_STORE_MAILDIR;
- }
- is_local_account = FALSE;
- /* New button should be dimmed on remote
- POP account root */
- new_sensitive = (modest_protocol_registry_protocol_type_has_tag (modest_runtime_get_protocol_registry (),
- proto,
- MODEST_PROTOCOL_REGISTRY_STORE_HAS_FOLDERS));
- }
- g_object_unref (local_account);
-
- /* It could not exist */
- if (mmc_account)
- g_object_unref (mmc_account);
- }
-
- /* Check the target folder rules */
- if (TNY_IS_FOLDER (folder_store)) {
- rules = modest_tny_folder_get_rules (TNY_FOLDER (folder_store));
- if (rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE) {
- ok_sensitive = FALSE;
- new_sensitive = FALSE;
- goto end;
- }
- }
-
- /* Check if we're moving a folder */
- if (MODEST_IS_MAIN_WINDOW (user_data)) {
- /* Get the widgets */
- folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (user_data),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- if (gtk_widget_is_focus (folder_view))
- moving_folder = TRUE;
- }
-
- if (moving_folder) {
- TnyFolderStore *moved_folder = NULL, *parent = 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 */
- ok_sensitive = FALSE;
- }
- g_object_unref (moved_folder);
- } else {
- TnyFolder *src_folder = NULL;
-
- /* Moving a message */
- if (MODEST_IS_MSG_VIEW_WINDOW (user_data)) {
-
- TnyHeader *header = NULL;
- header = modest_msg_view_window_get_header
- (MODEST_MSG_VIEW_WINDOW (user_data));
- if (!TNY_IS_HEADER(header))
- g_warning ("%s: could not get source header", __FUNCTION__);
- else
- src_folder = tny_header_get_folder (header);
-
- if (header)
- g_object_unref (header);
- } else {
- src_folder =
- TNY_FOLDER (modest_folder_view_get_selected
- (MODEST_FOLDER_VIEW (folder_view)));
- }
-
- if (TNY_IS_FOLDER(src_folder)) {
- /* Do not allow to move the msg to the same folder */
- /* Do not allow to move the msg to an account */
- if ((gpointer) src_folder == (gpointer) folder_store ||
- TNY_IS_ACCOUNT (folder_store))
- ok_sensitive = FALSE;
- g_object_unref (src_folder);
- } else
- g_warning ("%s: could not get source folder", __FUNCTION__);
- }
-
- end:
- /* 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);
+modest_ui_actions_on_check_names (GtkAction *action, ModestMsgEditWindow *window)
+{
+ g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
+ modest_msg_edit_window_check_names (window, FALSE);
}
-#endif
+
static void
on_move_to_dialog_response (GtkDialog *dialog,
parent_win = (GtkWidget *) helper->win;
folder_view = MODEST_FOLDER_VIEW (g_object_get_data (G_OBJECT (dialog),
MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
-
switch (response) {
TnyFolderStore *dst_folder;
TnyFolderStore *selected;
case MODEST_GTK_RESPONSE_NEW_FOLDER:
selected = modest_folder_view_get_selected (folder_view);
- modest_ui_actions_create_folder (GTK_WIDGET (dialog), GTK_WIDGET (folder_view), selected);
+ modest_ui_actions_create_folder ((GtkWindow *) dialog, GTK_WIDGET (folder_view), selected);
g_object_unref (selected);
return;
case GTK_RESPONSE_NONE:
case GTK_RESPONSE_OK:
dst_folder = modest_folder_view_get_selected (folder_view);
- if (MODEST_IS_MAIN_WINDOW (parent_win)) {
- /* Clean list to move used for filtering */
- modest_folder_view_set_list_to_move (folder_view, NULL);
-
- modest_ui_actions_on_main_window_move_to (NULL,
- GTK_WIDGET (folder_view),
- dst_folder,
- MODEST_MAIN_WINDOW (parent_win));
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_FOLDER_WINDOW (parent_win)) {
+ if (MODEST_IS_FOLDER_WINDOW (parent_win)) {
/* Clean list to move used for filtering */
modest_folder_view_set_list_to_move (folder_view, NULL);
modest_ui_actions_on_folder_window_move_to (GTK_WIDGET (folder_view),
dst_folder,
helper->list,
- GTK_WINDOW (parent_win));
-#endif
+ MODEST_WINDOW (parent_win));
} else {
/* if the user selected a root folder
(account) then do not perform any action */
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,
- "folder_selection_changed",
- G_CALLBACK (on_move_to_dialog_folder_selection_changed),
- win);
-#endif
/* It could happen that we're trying to move a message from a
window (msg window for example) after the main window was
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),
- TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()));
active_account_name = modest_window_get_active_account (MODEST_WINDOW (win));
mgr = modest_runtime_get_account_mgr ();
g_object_set_data (G_OBJECT(dialog), MODEST_MOVE_TO_DIALOG_FOLDER_VIEW, tree_view);
/* Hide special folders */
-#ifndef MODEST_TOOLKIT_HILDON2
- modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (tree_view), FALSE);
-#endif
if (list_to_move)
modest_folder_view_set_list_to_move (MODEST_FOLDER_VIEW (tree_view), list_to_move);
-#ifndef MODEST_TOOLKIT_HILDON2
- modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (tree_view));
-#endif
gtk_widget_show (GTK_WIDGET (tree_view));
/* 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;
-
- 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);
TnyFolder *new_folder,
gpointer user_data)
{
- GtkWidget *folder_view;
GObject *object;
object = modest_mail_operation_get_source (mail_op);
- 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);
}
}
gpointer user_data)
{
GObject *win = NULL;
+ const GError *error;
+ TnyAccount *account = 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) {
- GtkWidget *folder_view = NULL;
+ win = modest_mail_operation_get_source (mail_op);
+ error = modest_mail_operation_get_error (mail_op);
- 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 (TNY_IS_FOLDER (user_data))
+ account = modest_tny_folder_get_account (TNY_FOLDER (user_data));
+ else if (TNY_IS_ACCOUNT (user_data))
+ account = g_object_ref (user_data);
- if (user_data && TNY_IS_FOLDER (user_data)) {
- modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view),
- TNY_FOLDER (user_data), FALSE);
- }
- }
-#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 it's not a disk full error then show a generic error */
+ if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) win, (GError *) error,
+ account, NULL))
+ modest_platform_run_information_dialog ((GtkWindow *) win,
+ _("mail_in_ui_folder_move_target_error"),
+ FALSE);
+ if (account)
+ g_object_unref (account);
if (win)
g_object_unref (win);
}
-static void
-open_msg_for_purge_cb (ModestMailOperation *mail_op,
- TnyHeader *header,
- gboolean canceled,
- TnyMsg *msg,
- GError *err,
- gpointer user_data)
-{
- TnyList *parts;
- TnyIterator *iter;
- gint pending_purges = 0;
- gboolean some_purged = FALSE;
- ModestWindow *win = MODEST_WINDOW (user_data);
- ModestWindowMgr *mgr = modest_runtime_get_window_mgr ();
-
- /* If there was any error */
- if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg)) {
- modest_window_mgr_unregister_header (mgr, header);
- return;
- }
-
- /* Once the message has been retrieved for purging, we check if
- * it's all ok for purging */
-
- parts = tny_simple_list_new ();
- tny_mime_part_get_parts (TNY_MIME_PART (msg), parts);
- iter = tny_list_create_iterator (parts);
-
- while (!tny_iterator_is_done (iter)) {
- TnyMimePart *part;
- part = TNY_MIME_PART (tny_iterator_get_current (iter));
- if (part && (tny_mime_part_is_attachment (part) || TNY_IS_MSG (part))) {
- if (tny_mime_part_is_purged (part))
- some_purged = TRUE;
- else
- pending_purges++;
- }
-
- if (part)
- g_object_unref (part);
-
- tny_iterator_next (iter);
- }
- g_object_unref (iter);
-
-
- if (pending_purges>0) {
- gint response;
- response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),_("mcen_nc_purge_file_text_inbox"));
-
- if (response == GTK_RESPONSE_OK) {
- GtkWidget *info;
- info =
- 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;
-
- part = TNY_MIME_PART (tny_iterator_get_current (iter));
- if (part && (tny_mime_part_is_attachment (part) || TNY_IS_MSG (part)))
- tny_mime_part_set_purged (part);
-
- if (part)
- g_object_unref (part);
-
- tny_iterator_next (iter);
- }
- g_object_unref (iter);
-
- tny_msg_rewrite_cache (msg);
-
- gtk_widget_destroy (info);
- }
- }
-
- modest_window_mgr_unregister_header (mgr, header);
-
- g_object_unref (parts);
-}
-
-static void
-modest_ui_actions_on_main_window_remove_attachments (GtkAction *action,
- ModestMainWindow *win)
-{
- GtkWidget *header_view;
- TnyList *header_list;
- TnyHeader *header;
- TnyHeaderFlags flags;
- ModestWindow *msg_view_window = NULL;
- gboolean found;
-
- g_return_if_fail (MODEST_IS_MAIN_WINDOW (win));
-
- header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
-
- header_list = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW (header_view));
- if (!header_list) {
- g_warning ("%s: no header selected", __FUNCTION__);
- return;
- }
-
- if (tny_list_get_length (header_list) == 1) {
- TnyIterator *iter = tny_list_create_iterator (header_list);
- header = TNY_HEADER (tny_iterator_get_current (iter));
- g_object_unref (iter);
- } else
- return;
-
- if (!header || !TNY_IS_HEADER(header)) {
- g_warning ("%s: header is not valid", __FUNCTION__);
- return;
- }
-
- found = modest_window_mgr_find_registered_header (modest_runtime_get_window_mgr (),
- header, &msg_view_window);
- flags = tny_header_get_flags (header);
- if (!(flags & TNY_HEADER_FLAG_CACHED))
- return;
- if (found) {
- if (msg_view_window != NULL)
- modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (msg_view_window), TRUE);
- else {
- /* do nothing; uid was registered before, so window is probably on it's way */
- g_debug ("header %p has already been registered", header);
- }
- } else {
- ModestMailOperation *mail_op = NULL;
- modest_window_mgr_register_header (modest_runtime_get_window_mgr (), header, NULL);
- mail_op = modest_mail_operation_new_with_error_handling (G_OBJECT (win),
- modest_ui_actions_disk_operations_error_handler,
- NULL, NULL);
- modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
- modest_mail_operation_get_msg (mail_op, header, FALSE, open_msg_for_purge_cb, win);
-
- g_object_unref (mail_op);
- }
- if (header)
- g_object_unref (header);
- if (header_list)
- g_object_unref (header_list);
-}
/*
* Checks if we need a connection to do the transfer and if the user
* wants to connect to complete it
*/
static void
-modest_ui_actions_xfer_messages_check (GtkWindow *parent_window,
+modest_ui_actions_xfer_messages_check (ModestWindow *parent_window,
TnyFolderStore *src_folder,
TnyList *headers,
TnyFolder *dst_folder,
if (uncached_msgs > 0) {
guint num_headers;
const gchar *msg;
+ GtkWindow *toplevel;
*need_connection = TRUE;
num_headers = tny_list_get_length (headers);
msg = ngettext ("mcen_nc_get_msg", "mcen_nc_get_msgs", num_headers);
+ toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) parent_window);
- if (modest_platform_run_confirmation_dialog (parent_window, msg) ==
+ if (modest_platform_run_confirmation_dialog (toplevel, msg) ==
GTK_RESPONSE_CANCEL) {
*do_xfer = FALSE;
} else {
{
GObject *win;
const GError *error;
+ TnyAccount *account;
win = modest_mail_operation_get_source (mail_op);
error = modest_mail_operation_get_error (mail_op);
- if (error && is_memory_full_error ((GError *) error, mail_op)) {
- gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
- modest_platform_information_banner ((GtkWidget *) win, NULL, msg);
- g_free (msg);
- } else {
+ /* We cannot get the account from the mail op as that is the
+ source account and for checking memory full conditions we
+ need the destination one */
+ account = TNY_ACCOUNT (user_data);
+
+ if (error &&
+ !modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) win, (GError*) error,
+ account, _KR("cerm_memory_card_full"))) {
modest_platform_run_information_dialog ((GtkWindow *) win,
_("mail_in_ui_folder_move_target_error"),
FALSE);
static void
xfer_messages_performer (gboolean canceled,
GError *err,
- GtkWindow *parent_window,
+ ModestWindow *parent_window,
TnyAccount *account,
gpointer user_data)
{
- ModestWindow *win = MODEST_WINDOW (parent_window);
TnyAccount *dst_account = NULL;
gboolean dst_forbids_message_add = FALSE;
XferMsgsHelper *helper;
helper = (XferMsgsHelper *) user_data;
if (canceled || err) {
- if (!check_memory_full_error ((GtkWidget *) parent_window, err)) {
+ if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ account, NULL)) {
/* Show the proper error message */
modest_ui_actions_on_account_connection_error (parent_window, account);
}
/* tinymail will return NULL for local folders it seems */
dst_forbids_message_add = modest_protocol_registry_protocol_type_has_tag (modest_runtime_get_protocol_registry (),
modest_tny_account_get_protocol_type (dst_account),
- MODEST_PROTOCOL_REGISTRY_STORE_FORBID_MESSAGE_ADD);
- g_object_unref (dst_account);
+ MODEST_PROTOCOL_REGISTRY_STORE_FORBID_INCOMING_XFERS);
if (dst_forbids_message_add) {
- modest_platform_information_banner (GTK_WIDGET (win),
+ modest_platform_information_banner (GTK_WIDGET (parent_window),
NULL,
ngettext("mail_in_ui_folder_move_target_error",
"mail_in_ui_folder_move_targets_error",
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 =
- modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- movehelper->reference = get_next_after_selected_headers (MODEST_HEADER_VIEW (header_view));
- }
/* Perform the mail operation */
- mail_op = modest_mail_operation_new_with_error_handling (G_OBJECT(win),
+ mail_op = modest_mail_operation_new_with_error_handling (G_OBJECT(parent_window),
xfer_messages_error_handler,
- movehelper, NULL);
+ g_object_ref (dst_account),
+ g_object_unref);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
g_object_unref (G_OBJECT (mail_op));
end:
+ if (dst_account)
+ g_object_unref (dst_account);
g_object_unref (helper->dst_folder);
g_object_unref (helper->headers);
g_slice_free (XferMsgsHelper, helper);
} MoveFolderInfo;
static void
-on_move_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window,
- TnyAccount *account, gpointer user_data)
+on_move_folder_cb (gboolean canceled,
+ GError *err,
+ ModestWindow *parent_window,
+ TnyAccount *account,
+ gpointer user_data)
{
MoveFolderInfo *info = (MoveFolderInfo*)user_data;
GtkTreeSelection *sel;
ModestMailOperation *mail_op = NULL;
if (canceled || err || !MODEST_IS_WINDOW (parent_window)) {
+ /* Note that the connection process can fail due to
+ memory low conditions as it can not successfully
+ store the summary */
+ if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget*) parent_window, err,
+ account, NULL))
+ g_debug ("Error connecting when trying to move a folder");
+
g_object_unref (G_OBJECT (info->src_folder));
g_object_unref (G_OBJECT (info->dst_folder));
g_free (info);
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"));
+ _CS_PASTING);
if (helper->banner != NULL) {
g_object_ref (helper->banner);
gtk_widget_show (GTK_WIDGET(helper->banner));
mail_op =
modest_mail_operation_new_with_error_handling (G_OBJECT(parent_window),
- modest_ui_actions_move_folder_error_handler,
- info->src_folder, NULL);
+ modest_ui_actions_move_folder_error_handler,
+ g_object_ref (info->dst_folder), g_object_unref);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
- mail_op);
-
- /* Select *after* the changes */
- /* TODO: this function hangs UI after transfer */
- /* modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view), */
- /* TNY_FOLDER (src_folder), TRUE); */
+ mail_op);
- 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,
/*
* UI handler for the "Move to" action when invoked from the
- * ModestMainWindow
- */
-static void
-modest_ui_actions_on_main_window_move_to (GtkAction *action,
- GtkWidget *folder_view,
- TnyFolderStore *dst_folder,
- ModestMainWindow *win)
-{
- ModestHeaderView *header_view = NULL;
- TnyFolderStore *src_folder = NULL;
-
- g_return_if_fail (MODEST_IS_MAIN_WINDOW (win));
-
- /* Get the source folder */
- src_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
-
- /* Get 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)) {
- 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;
- } 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);
- }
- } else if (gtk_widget_is_focus (GTK_WIDGET(header_view))) {
- TnyList *headers;
-
- headers = modest_header_view_get_selected_headers(header_view);
-
- /* Transfer the messages */
- modest_ui_actions_transfer_messages_helper (GTK_WINDOW (win), TNY_FOLDER (src_folder),
- headers, TNY_FOLDER (dst_folder));
-
- g_object_unref (headers);
- }
-
- /* Frees */
- 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)
+ ModestWindow *win)
{
TnyFolderStore *src_folder = NULL;
TnyIterator *iterator;
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))) {
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
+
do_xfer = FALSE;
/* Show an error */
- modest_platform_run_information_dialog (win,
+ modest_platform_run_information_dialog (toplevel,
_("mail_in_ui_folder_move_target_error"),
FALSE);
} else if (!TNY_IS_FOLDER (src_folder)) {
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,
+ modest_platform_double_connect_and_perform(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,
+modest_ui_actions_transfer_messages_helper (ModestWindow *win,
TnyFolder *src_folder,
TnyList *headers,
TnyFolder *dst_folder)
connect_info->dst_account = tny_folder_get_account (TNY_FOLDER (dst_folder));
connect_info->data = helper;
- modest_platform_double_connect_and_perform(GTK_WINDOW (win), TRUE,
+ modest_platform_double_connect_and_perform(win, TRUE,
TNY_FOLDER_STORE (src_folder),
connect_info);
} else {
TnyAccount *src_account = get_account_from_folder_store (TNY_FOLDER_STORE (src_folder));
- xfer_messages_performer (FALSE, NULL, GTK_WINDOW (win),
+ xfer_messages_performer (FALSE, NULL, win,
src_account, helper);
g_object_unref (src_account);
}
src_folder = tny_header_get_folder (header);
/* Transfer the messages */
- modest_ui_actions_transfer_messages_helper (GTK_WINDOW (win), src_folder,
+ modest_ui_actions_transfer_messages_helper (win, src_folder,
headers,
TNY_FOLDER (dst_folder));
modest_ui_actions_on_edit_mode_move_to (ModestWindow *win)
{
GtkWidget *dialog = NULL;
+ GtkWindow *toplevel = NULL;
MoveToInfo *helper = NULL;
TnyList *list_to_move;
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
- main_window =
- MODEST_MAIN_WINDOW (modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
- FALSE)); /* don't create */
-#endif
list_to_move = modest_platform_get_list_to_move (MODEST_WINDOW (win));
}
/* Create and run the dialog */
- dialog = create_move_to_dialog (GTK_WINDOW (win), NULL, list_to_move);
+ toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
+ dialog = create_move_to_dialog (toplevel, NULL, list_to_move);
modest_window_mgr_set_modal (modest_runtime_get_window_mgr (),
GTK_WINDOW (dialog),
- (GtkWindow *) win);
+ toplevel);
/* Create helper */
helper = g_slice_new0 (MoveToInfo);
modest_ui_actions_remove_attachments (GtkAction *action,
ModestWindow *window)
{
- if (MODEST_IS_MAIN_WINDOW (window)) {
- modest_ui_actions_on_main_window_remove_attachments (action, MODEST_MAIN_WINDOW (window));
- } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
+ if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (window), FALSE);
} else {
/* not supported window for this action */
ModestWindow *win)
{
GtkWidget *dialog;
+ GtkWindow *toplevel;
dialog = modest_platform_get_global_settings_dialog ();
- gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (win));
+ toplevel = (GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (win));
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), toplevel);
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
gtk_widget_show_all (dialog);
help_id = modest_window_mgr_get_help_id (modest_runtime_get_window_mgr(), win);
if (help_id)
- modest_platform_show_help (GTK_WINDOW (win), help_id);
+ modest_platform_show_help (win, help_id);
#endif
}
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;
-
- g_return_if_fail (win && MODEST_IS_MAIN_WINDOW (win));
-
- /* Get selected folder */
- folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
-
- /* Switch help_id */
- if (folder_store && TNY_IS_FOLDER (folder_store))
- help_id = modest_tny_folder_get_help_id (TNY_FOLDER (folder_store));
-
- if (folder_store)
- g_object_unref (folder_store);
-
- if (help_id)
- modest_platform_show_help (GTK_WINDOW (win), help_id);
- else
- modest_ui_actions_on_help (action, win);
-#endif
}
static void
static void
retrieve_msg_contents_performer (gboolean canceled,
GError *err,
- GtkWindow *parent_window,
+ ModestWindow *parent_window,
TnyAccount *account,
gpointer user_data)
{
TnyList *headers = TNY_LIST (user_data);
if (err || canceled) {
- check_memory_full_error ((GtkWidget *) parent_window, err);
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ account, NULL);
goto out;
}
g_object_unref (iter);
/* Connect and perform the message retrieval */
- modest_platform_connect_and_perform ((GtkWindow *) window, TRUE,
+ modest_platform_connect_and_perform (window, TRUE,
g_object_ref (account),
retrieve_msg_contents_performer,
g_object_ref (headers));
void
modest_ui_actions_on_search_messages (GtkAction *action, ModestWindow *window)
{
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) window);
+
g_return_if_fail (MODEST_IS_WINDOW (window));
/* we check for low-mem; in that case, show a warning, and don't allow
if (modest_platform_check_memory_low (window, TRUE))
return;
- modest_platform_show_search_messages (GTK_WINDOW (window));
+ modest_platform_show_search_messages (toplevel);
}
void
modest_ui_actions_on_open_addressbook (GtkAction *action, ModestWindow *win)
{
- g_return_if_fail (MODEST_IS_WINDOW (win));
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) win);
+ g_return_if_fail (MODEST_IS_WINDOW (win));
/* we check for low-mem; in that case, show a warning, and don't allow
* for the addressbook
if (modest_platform_check_memory_low (win, TRUE))
return;
-
- modest_platform_show_addressbook (GTK_WINDOW (win));
+ modest_platform_show_addressbook (toplevel);
}
else
active = TRUE;
- modest_msg_edit_window_toggle_find_toolbar (MODEST_MSG_EDIT_WINDOW (window),
- active);
-}
-
-static void
-on_send_receive_finished (ModestMailOperation *mail_op,
- gpointer user_data)
-{
- GtkWidget *header_view, *folder_view;
- TnyFolderStore *folder_store;
- ModestMainWindow *main_win = MODEST_MAIN_WINDOW (user_data);
-
- /* Set send/receive operation finished */
- modest_main_window_notify_send_receive_completed (main_win);
-
- /* Don't refresh the current folder if there were any errors */
- if (modest_mail_operation_get_status (mail_op) !=
- MODEST_MAIL_OPERATION_STATUS_SUCCESS)
- return;
-
- /* Refresh the current folder if we're viewing a window. We do
- this because the user won't be able to see the new mails in
- the selected folder after a Send&Receive because it only
- performs a poke_status, i.e, only the number of read/unread
- messages is updated, but the new headers are not
- downloaded */
- folder_view = modest_main_window_get_child_widget (main_win,
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- if (!folder_view)
- return;
-
- folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
-
- /* Do not need to refresh INBOX again because the
- update_account does it always automatically */
- if (folder_store && TNY_IS_FOLDER (folder_store) &&
- tny_folder_get_folder_type (TNY_FOLDER (folder_store)) != TNY_FOLDER_TYPE_INBOX) {
- ModestMailOperation *refresh_op;
-
- header_view = modest_main_window_get_child_widget (main_win,
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
-
- /* We do not need to set the contents style
- because it hasn't changed. We also do not
- need to save the widget status. Just force
- a refresh */
- refresh_op = modest_mail_operation_new (G_OBJECT (main_win));
- modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), refresh_op);
- modest_mail_operation_refresh_folder (refresh_op, TNY_FOLDER (folder_store),
- folder_refreshed_cb, main_win);
- g_object_unref (refresh_op);
- }
-
- if (folder_store)
- g_object_unref (folder_store);
+ modest_msg_edit_window_toggle_isearch_toolbar (MODEST_MSG_EDIT_WINDOW (window),
+ active);
}
server_name);
break;
case TNY_SERVICE_ERROR_SEND:
- message = g_strdup (_CS("sfil_ib_unable_to_send"));
+ message = g_strdup (_CS_UNABLE_TO_SEND);
break;
case TNY_SERVICE_ERROR_UNAVAILABLE:
message = modest_protocol_get_translation (protocol,
default:
g_warning ("%s: unexpected ERROR %d",
__FUNCTION__, err->code);
- message = g_strdup (_CS("sfil_ib_unable_to_send"));
+ message = g_strdup (_CS_UNABLE_TO_SEND);
break;
}
if (!top_window)
return;
-#ifndef MODEST_TOOLKIT_HILDON2
- if (MODEST_IS_MAIN_WINDOW (top_window)) {
- header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (top_window),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- }
-#else
if (MODEST_IS_HEADER_WINDOW (top_window)) {
header_view = (GtkWidget *)
modest_header_window_get_header_view (MODEST_HEADER_WINDOW (top_window));
}
-#endif
/* Get selected folder */
if (header_view)
}
void
-modest_ui_actions_on_account_connection_error (GtkWindow *parent_window,
+modest_ui_actions_on_account_connection_error (ModestWindow *parent_window,
TnyAccount *account)
{
ModestProtocolType protocol_type;
if (error_note == NULL) {
g_warning ("%s: This should not be reached", __FUNCTION__);
} else {
- modest_platform_run_information_dialog (parent_window, error_note, FALSE);
+ GtkWindow *toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) parent_window);
+ modest_platform_run_information_dialog (toplevel, error_note, FALSE);
g_free (error_note);
}
}
ModestProtocol *protocol;
TnyHeader *header = NULL;
- if (MODEST_IS_MAIN_WINDOW (win)) {
- GtkWidget *header_view;
- TnyList* headers = NULL;
- TnyIterator *iter;
- header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- 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);
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_HEADER_WINDOW (win)) {
+ if (MODEST_IS_HEADER_WINDOW (win)) {
GtkWidget *header_view;
TnyList* headers = NULL;
TnyIterator *iter;
}
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));
if (header)
g_free (default_account_name);
removed = modest_account_mgr_remove_account (account_mgr, account_name);
- if (!removed)
+ if (removed) {
+#ifdef MODEST_TOOLKIT_HILDON2
+ hildon_gtk_window_take_screenshot (parent_window, FALSE);
+#endif
+ /* Close all email notifications, we cannot
+ distinguish if the notification belongs to
+ this account or not, so for safety reasons
+ we remove them all */
+ modest_platform_remove_new_mail_notifications (FALSE, account_name);
+ } else {
g_warning ("%s: modest_account_mgr_remove_account() failed.\n", __FUNCTION__);
+ }
}
return removed;
}
static void
on_fetch_images_performer (gboolean canceled,
GError *err,
- GtkWindow *parent_window,
+ ModestWindow *parent_window,
TnyAccount *account,
gpointer user_data)
{
{
g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window));
- modest_platform_connect_and_perform ((GtkWindow *) window, TRUE,
+ modest_platform_connect_and_perform (window, TRUE,
NULL,
- on_fetch_images_performer,
+ on_fetch_images_performer,
g_object_ref (window));
}
modest_msg_view_window_reload (MODEST_MSG_VIEW_WINDOW (window));
}
+
+/** Check whether any connections are active, and cancel them if
+ * the user wishes.
+ * Returns TRUE is there was no problem,
+ * or if an operation was cancelled so we can continue.
+ * Returns FALSE if the user chose to cancel his request instead.
+ */
+
+gboolean
+modest_ui_actions_check_for_active_account (ModestWindow *self,
+ const gchar* account_name)
+{
+ ModestTnySendQueue *send_queue;
+ ModestTnyAccountStore *acc_store;
+ ModestMailOperationQueue* queue;
+ TnyConnectionStatus store_conn_status;
+ TnyAccount *store_account = NULL, *transport_account = NULL;
+ gboolean retval = TRUE, sending = FALSE;
+
+ acc_store = modest_runtime_get_account_store ();
+ queue = modest_runtime_get_mail_operation_queue ();
+
+ store_account =
+ modest_tny_account_store_get_server_account (acc_store,
+ account_name,
+ TNY_ACCOUNT_TYPE_STORE);
+
+ /* This could happen if the account was deleted before the
+ call to this function */
+ if (!store_account)
+ return FALSE;
+
+ transport_account =
+ modest_tny_account_store_get_server_account (acc_store,
+ account_name,
+ TNY_ACCOUNT_TYPE_TRANSPORT);
+
+ /* This could happen if the account was deleted before the
+ call to this function */
+ if (!transport_account) {
+ g_object_unref (store_account);
+ return FALSE;
+ }
+
+ /* If the transport account was not used yet, then the send
+ queue could not exist (it's created on demand) */
+ send_queue = modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT (transport_account), FALSE);
+ if (TNY_IS_SEND_QUEUE (send_queue))
+ sending = modest_tny_send_queue_sending_in_progress (send_queue);
+
+ store_conn_status = tny_account_get_connection_status (store_account);
+ if (store_conn_status == TNY_CONNECTION_STATUS_CONNECTED || sending) {
+ gint response;
+
+ response = modest_platform_run_confirmation_dialog (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))),
+ _("emev_nc_disconnect_account"));
+ if (response == GTK_RESPONSE_OK) {
+ retval = TRUE;
+ } else {
+ retval = FALSE;
+ }
+ }
+
+ if (retval) {
+
+ /* FIXME: We should only cancel those of this account */
+ modest_mail_operation_queue_cancel_all (queue);
+
+ /* Also disconnect the account */
+ if ((tny_account_get_connection_status (store_account) != TNY_CONNECTION_STATUS_DISCONNECTED) &&
+ (tny_account_get_connection_status (store_account) != TNY_CONNECTION_STATUS_DISCONNECTED_BROKEN)) {
+ tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (store_account),
+ FALSE, NULL, NULL);
+ }
+ if (sending) {
+ tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (transport_account),
+ FALSE, NULL, NULL);
+ }
+ }
+
+ /* Frees */
+ g_object_unref (store_account);
+ g_object_unref (transport_account);
+
+ return retval;
+}