#include "modest-marshal.h"
#include "modest-platform.h"
#include <modest-utils.h>
-#include <modest-maemo-utils.h>
+#include <modest-toolkit-utils.h>
#include <modest-tny-msg.h>
#include <modest-msg-view-window.h>
#include "modest-msg-view-window-ui-dimming.h"
#include <modest-account-mgr-helpers.h>
#include <modest-toolkit-factory.h>
#include <modest-scrollable.h>
-#include <hildon/hildon-picker-dialog.h>
-#include <hildon/hildon-app-menu.h>
+#include <modest-isearch-toolbar.h>
#include "modest-defs.h"
-#include "modest-hildon-includes.h"
#include "modest-ui-dimming-manager.h"
#include <gdk/gdkkeysyms.h>
#include <modest-tny-account.h>
#include <modest-account-protocol.h>
#include <modest-icon-names.h>
#include <modest-ui-actions.h>
+#include <modest-window-mgr.h>
#include <tny-camel-msg.h>
+#include <modest-icon-names.h>
+
+#ifdef MODEST_PLATFORM_MAEMO
+#include <modest-maemo-utils.h>
+#endif
+
+#ifdef MODEST_TOOLKIT_HILDON2
+#include <hildon/hildon.h>
+#include <gdk/gdkx.h>
+#include <X11/Xatom.h>
+#include <X11/XKBlib.h>
+#include <X11/Xdmcp.h>
+#endif
+
+#include <tny-camel-bs-mime-part.h>
+#include <tny-camel-bs-msg.h>
#define MYDOCS_ENV "MYDOCSDIR"
#define DOCS_FOLDER ".documents"
GtkWidget *msg_view;
GtkWidget *main_scroll;
- GtkWidget *find_toolbar;
+ GtkWidget *isearch_toolbar;
gchar *last_search;
/* Progress observers */
gulong row_deleted_handler;
gulong row_inserted_handler;
gulong rows_reordered_handler;
+ gulong fetch_image_redraw_handler;
guint purge_timeout;
GtkWidget *remove_attachment_banner;
gchar *msg_uid;
TnyMimePart *other_body;
+ TnyMsg * top_msg;
GSList *sighandlers;
};
static void modest_msg_view_window_init (ModestMsgViewWindow *obj);
static void modest_header_view_observer_init (ModestHeaderViewObserverIface *iface_class);
static void modest_msg_view_window_finalize (GObject *obj);
-static void modest_msg_view_window_show_find_toolbar (GtkWidget *obj, gpointer data);
-static void modest_msg_view_window_find_toolbar_close (GtkWidget *widget,
- ModestMsgViewWindow *obj);
-static void modest_msg_view_window_find_toolbar_search (GtkWidget *widget,
- ModestMsgViewWindow *obj);
-static void modest_msg_view_window_toggle_find_toolbar (GtkWidget *obj,
- gpointer data);
+static void modest_msg_view_window_show_isearch_toolbar (GtkWidget *obj, gpointer data);
+static void modest_msg_view_window_isearch_toolbar_close (GtkWidget *widget,
+ ModestMsgViewWindow *obj);
+static void modest_msg_view_window_isearch_toolbar_search (GtkWidget *widget,
+ ModestMsgViewWindow *obj);
+static void modest_msg_view_window_toggle_isearch_toolbar (GtkWidget *obj,
+ gpointer data);
static void modest_msg_view_window_disconnect_signals (ModestWindow *self);
static gdouble modest_msg_view_window_get_zoom (ModestWindow *window);
gpointer userdata);
static void update_branding (ModestMsgViewWindow *self);
static void sync_flags (ModestMsgViewWindow *self);
+static gboolean on_handle_calendar (ModestMsgView *msgview, TnyMimePart *calendar_part,
+ GtkContainer *container, ModestMsgViewWindow *self);
+
+static gboolean on_realize (GtkWidget *widget,
+ gpointer userdata);
/* list my signals */
enum {
};
static const GtkToggleActionEntry msg_view_toggle_action_entries [] = {
- { "FindInMessage", MODEST_TOOLBAR_ICON_FIND, N_("qgn_toolb_gene_find"), "<CTRL>F", NULL, G_CALLBACK (modest_msg_view_window_toggle_find_toolbar), FALSE },
+ { "FindInMessage", MODEST_TOOLBAR_ICON_FIND, N_("qgn_toolb_gene_find"), "<CTRL>F", NULL, G_CALLBACK (modest_msg_view_window_toggle_isearch_toolbar), FALSE },
};
#define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
MODEST_TYPE_MSG_VIEW_WINDOW, \
ModestMsgViewWindowPrivate))
/* globals */
-static GtkWindowClass *parent_class = NULL;
+static ModestWindowParentClass *parent_class = NULL;
/* uncomment the following if you have defined any signals */
static guint signals[LAST_SIGNAL] = {0};
(GInstanceInitFunc) modest_msg_view_window_init,
NULL
};
-#ifdef MODEST_TOOLKIT_GTK
- my_type = g_type_register_static (MODEST_TYPE_WINDOW,
+#ifndef MODEST_TOOLKIT_HILDON2
+ my_type = g_type_register_static (MODEST_TYPE_SHELL_WINDOW,
"ModestMsgViewWindow",
&my_info, 0);
#else
modest_msg_view_window_class_init (ModestMsgViewWindowClass *klass)
{
GObjectClass *gobject_class;
- HildonWindowClass *hildon_window_class;
ModestWindowClass *modest_window_class;
GtkBindingSet *binding_set;
gobject_class = (GObjectClass*) klass;
- hildon_window_class = (HildonWindowClass *) klass;
modest_window_class = (ModestWindowClass *) klass;
parent_class = g_type_class_peek_parent (klass);
g_error_free (error);
error = NULL;
}
- /* ****** */
-
- /* Add accelerators */
- gtk_window_add_accel_group (GTK_WINDOW (obj),
- gtk_ui_manager_get_accel_group (parent_priv->ui_manager));
priv->is_search_result = FALSE;
priv->is_outbox = FALSE;
priv->row_deleted_handler = 0;
priv->row_inserted_handler = 0;
priv->rows_reordered_handler = 0;
+ priv->fetch_image_redraw_handler = 0;
priv->progress_hint = FALSE;
priv->fetching_images = 0;
priv->remove_attachment_banner = NULL;
priv->msg_uid = NULL;
priv->other_body = NULL;
-
+
priv->sighandlers = NULL;
-
+
/* Init window */
init_window (MODEST_MSG_VIEW_WINDOW(obj));
+#ifdef MODEST_TOOLKIT_HILDON2
+ /* Grab the zoom keys, it will be used for Zoom and not for
+ changing volume */
+ g_signal_connect (G_OBJECT (obj), "realize",
+ G_CALLBACK (on_realize),
+ NULL);
+#endif
}
static void
call this function before */
modest_msg_view_window_disconnect_signals (MODEST_WINDOW (obj));
+ if (priv->fetch_image_redraw_handler > 0) {
+ g_source_remove (priv->fetch_image_redraw_handler);
+ priv->fetch_image_redraw_handler = 0;
+ }
+
if (priv->other_body != NULL) {
g_object_unref (priv->other_body);
priv->other_body = NULL;
}
+ if (priv->top_msg != NULL) {
+ g_object_unref (priv->top_msg);
+ priv->top_msg = NULL;
+ }
+
if (priv->header_model != NULL) {
g_object_unref (priv->header_model);
priv->header_model = NULL;
G_CALLBACK (modest_ui_actions_on_msg_link_contextual), obj);
g_signal_connect (G_OBJECT(priv->msg_view), "limit_error",
G_CALLBACK (modest_ui_actions_on_limit_error), obj);
+ g_signal_connect (G_OBJECT(priv->msg_view), "handle_calendar",
+ G_CALLBACK (on_handle_calendar), obj);
g_signal_connect (G_OBJECT (priv->msg_view), "fetch_image",
G_CALLBACK (on_fetch_image), obj);
/* First add out toolbar ... */
modest_msg_view_window_show_toolbar (MODEST_WINDOW (obj), TRUE);
- /****** HILDON2:START
- * adds the toolbar
- */
- /* ... and later the find toolbar. This way find toolbar will
- be shown over the other */
- priv->find_toolbar = hildon_find_toolbar_new (NULL);
- modest_window_add_toolbar (MODEST_WINDOW (obj), GTK_TOOLBAR (priv->find_toolbar));
- gtk_widget_set_no_show_all (priv->find_toolbar, TRUE);
- g_signal_connect (G_OBJECT (priv->find_toolbar), "close",
- G_CALLBACK (modest_msg_view_window_find_toolbar_close), obj);
- g_signal_connect (G_OBJECT (priv->find_toolbar), "search",
- G_CALLBACK (modest_msg_view_window_find_toolbar_search), obj);
+ priv->isearch_toolbar = modest_toolkit_factory_create_isearch_toolbar (modest_runtime_get_toolkit_factory (),
+ NULL);
+ modest_window_add_toolbar (MODEST_WINDOW (obj), GTK_TOOLBAR (priv->isearch_toolbar));
+ gtk_widget_set_no_show_all (priv->isearch_toolbar, TRUE);
+ g_signal_connect (G_OBJECT (priv->isearch_toolbar), "isearch-close",
+ G_CALLBACK (modest_msg_view_window_isearch_toolbar_close), obj);
+ g_signal_connect (G_OBJECT (priv->isearch_toolbar), "isearch-search",
+ G_CALLBACK (modest_msg_view_window_isearch_toolbar_search), obj);
priv->last_search = NULL;
- /****** HILDON2:END */
/* Init the clipboard actions dim status */
modest_msg_view_grab_focus(MODEST_MSG_VIEW (priv->msg_view));
modest_msg_view_window_construct (window, modest_account_name, mailbox, msg_uid);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+ priv->top_msg = NULL;
/* Remember the message list's TreeModel so we can detect changes
* and change the list selection when necessary: */
modest_msg_view_window_construct (window, modest_account_name, mailbox, msg_uid);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+ priv->top_msg = NULL;
is_merge = g_str_has_prefix (msg_uid, "merge:");
modest_msg_view_window_construct (window, modest_account_name, mailbox, msg_uid);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+ priv->top_msg = NULL;
/* Remember the message list's TreeModel so we can detect changes
* and change the list selection when necessary: */
modest_msg_view_window_construct (window, modest_account_name, mailbox, msg_uid);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+ priv->top_msg = NULL;
/* Remember that this is a search result,
* so we can disable some UI appropriately: */
ModestWindow *
modest_msg_view_window_new_with_other_body (TnyMsg *msg,
TnyMimePart *other_body,
+ TnyMsg *top_msg,
const gchar *modest_account_name,
const gchar *mailbox,
const gchar *msg_uid)
} else {
tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
}
+ if (top_msg) {
+ priv->top_msg = g_object_ref (top_msg);
+ } else {
+ priv->top_msg = NULL;
+ }
update_window_title (MODEST_MSG_VIEW_WINDOW (obj));
update_branding (MODEST_MSG_VIEW_WINDOW (obj));
}
ModestWindow *
-modest_msg_view_window_new_for_attachment (TnyMsg *msg,
+modest_msg_view_window_new_for_attachment (TnyMsg *msg,
+ TnyMsg *top_msg,
const gchar *modest_account_name,
const gchar *mailbox,
const gchar *msg_uid)
{
- return modest_msg_view_window_new_with_other_body (msg, NULL, modest_account_name, mailbox, msg_uid);
+ return modest_msg_view_window_new_with_other_body (msg, NULL, top_msg, modest_account_name, mailbox, msg_uid);
}
static void
return tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
}
+TnyMsg*
+modest_msg_view_window_get_top_message (ModestMsgViewWindow *self)
+{
+ ModestMsgViewWindowPrivate *priv;
+
+ g_return_val_if_fail (self, NULL);
+
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(self);
+
+ if (priv->top_msg)
+ return g_object_ref (priv->top_msg);
+ else
+ return NULL;
+}
+
const gchar*
modest_msg_view_window_get_message_uid (ModestMsgViewWindow *self)
{
/* Used for the Ctrl+F accelerator */
static void
-modest_msg_view_window_toggle_find_toolbar (GtkWidget *obj,
- gpointer data)
+modest_msg_view_window_toggle_isearch_toolbar (GtkWidget *obj,
+ gpointer data)
{
ModestMsgViewWindow *window = MODEST_MSG_VIEW_WINDOW (data);
ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
- if (GTK_WIDGET_VISIBLE (priv->find_toolbar)) {
- modest_msg_view_window_find_toolbar_close (obj, data);
+ if (GTK_WIDGET_VISIBLE (priv->isearch_toolbar)) {
+ modest_msg_view_window_isearch_toolbar_close (obj, data);
} else {
- modest_msg_view_window_show_find_toolbar (obj, data);
+ modest_msg_view_window_show_isearch_toolbar (obj, data);
}
}
/* Handler for menu option */
static void
-modest_msg_view_window_show_find_toolbar (GtkWidget *obj,
- gpointer data)
+modest_msg_view_window_show_isearch_toolbar (GtkWidget *obj,
+ gpointer data)
{
ModestMsgViewWindow *window = MODEST_MSG_VIEW_WINDOW (data);
ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
- gtk_widget_show (priv->find_toolbar);
- /****** HILDON2:START */
- hildon_find_toolbar_highlight_entry (HILDON_FIND_TOOLBAR (priv->find_toolbar), TRUE);
- /****** HILDON2:END */
+ gtk_widget_show (priv->isearch_toolbar);
+ modest_isearch_toolbar_highlight_entry (MODEST_ISEARCH_TOOLBAR (priv->isearch_toolbar), TRUE);
}
-/* Handler for click on the "X" close button in find toolbar */
+/* Handler for click on the "X" close button in isearch toolbar */
static void
-modest_msg_view_window_find_toolbar_close (GtkWidget *widget,
- ModestMsgViewWindow *obj)
+modest_msg_view_window_isearch_toolbar_close (GtkWidget *widget,
+ ModestMsgViewWindow *obj)
{
ModestMsgViewWindowPrivate *priv;
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (obj);
/* Hide toolbar */
- gtk_widget_hide (priv->find_toolbar);
+ gtk_widget_hide (priv->isearch_toolbar);
modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view));
}
static void
-modest_msg_view_window_find_toolbar_search (GtkWidget *widget,
- ModestMsgViewWindow *obj)
+modest_msg_view_window_isearch_toolbar_search (GtkWidget *widget,
+ ModestMsgViewWindow *obj)
{
- gchar *current_search;
+ const gchar *current_search;
ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (obj);
if (modest_mime_part_view_is_empty (MODEST_MIME_PART_VIEW (priv->msg_view))) {
return;
}
- g_object_get (G_OBJECT (widget), "prefix", ¤t_search, NULL);
+ current_search = modest_isearch_toolbar_get_search (MODEST_ISEARCH_TOOLBAR (widget));
if ((current_search == NULL) || (strcmp (current_search, "") == 0)) {
- g_free (current_search);
- modest_platform_system_banner (NULL, NULL, _CS("ecdg_ib_find_rep_enter_text"));
+ modest_platform_system_banner (NULL, NULL, _CS_FIND_REP_ENTER_TEXT);
return;
}
priv->last_search);
if (!result) {
modest_platform_system_banner (NULL, NULL,
- _HL("ckct_ib_find_no_matches"));
+ _HL_IB_FIND_NO_MATCHES);
g_free (priv->last_search);
priv->last_search = NULL;
} else {
- /****** HILDON2:START */
- hildon_find_toolbar_highlight_entry (HILDON_FIND_TOOLBAR (priv->find_toolbar), TRUE);
- /****** HILDON2:END */
+ modest_isearch_toolbar_highlight_entry (MODEST_ISEARCH_TOOLBAR (priv->isearch_toolbar), TRUE);
}
} else {
if (!modest_isearch_view_search_next (MODEST_ISEARCH_VIEW (priv->msg_view))) {
modest_platform_system_banner (NULL, NULL,
- _HL("ckct_ib_find_search_complete"));
+ _HL_IB_FIND_COMPLETE);
g_free (priv->last_search);
priv->last_search = NULL;
} else {
- /****** HILDON2:START */
- hildon_find_toolbar_highlight_entry (HILDON_FIND_TOOLBAR (priv->find_toolbar), TRUE);
- /****** HILDON2:END */
+ modest_isearch_toolbar_highlight_entry (MODEST_ISEARCH_TOOLBAR (priv->isearch_toolbar), TRUE);
}
}
- g_free (current_search);
-
}
static void
if (zoom_level >= 2.0) {
modest_platform_system_banner (NULL, NULL,
- _CS("ckct_ib_max_zoom_level_reached"));
+ _CS_MAX_ZOOM_LEVEL_REACHED);
return FALSE;
} else if (zoom_level >= 1.5) {
zoom_level = 2.0;
/* set zoom level */
int_zoom = (gint) rint (zoom_level*100.0+0.1);
- banner_text = g_strdup_printf (_HL("wdgt_ib_zoom"), int_zoom);
+ banner_text = g_strdup_printf (_HL_IB_ZOOM, int_zoom);
modest_platform_information_banner (GTK_WIDGET (window), NULL, banner_text);
g_free (banner_text);
modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom_level);
if (zoom_level <= 0.5) {
modest_platform_system_banner (NULL, NULL,
- _CS("ckct_ib_min_zoom_level_reached"));
+ _CS_MIN_ZOOM_LEVEL_REACHED);
return FALSE;
} else if (zoom_level <= 0.8) {
zoom_level = 0.5;
/* set zoom level */
int_zoom = (gint) rint (zoom_level*100.0+0.1);
- banner_text = g_strdup_printf (_HL("wdgt_ib_zoom"), int_zoom);
+ banner_text = g_strdup_printf (_HL_IB_ZOOM, int_zoom);
modest_platform_information_banner (GTK_WIDGET (window), NULL, banner_text);
g_free (banner_text);
modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom_level);
{
GtkWidget *focus;
- focus = gtk_window_get_focus (GTK_WINDOW (window));
+ focus = gtk_container_get_focus_child ((GtkContainer *) window);
- /* for the find toolbar case */
+ /* for the isearch toolbar case */
if (focus && GTK_IS_ENTRY (focus)) {
if (event->keyval == GDK_BackSpace) {
GdkEvent *copy;
static void
message_reader_performer (gboolean canceled,
GError *err,
- GtkWindow *parent_window,
+ ModestWindow *parent_window,
TnyAccount *account,
gpointer user_data)
{
info = (MsgReaderInfo *) user_data;
if (canceled || err) {
update_window_title (MODEST_MSG_VIEW_WINDOW (parent_window));
+ modest_ui_actions_on_close_window (NULL, MODEST_WINDOW (parent_window));
goto frees;
}
/* We set the header from model while we're loading */
tny_header_view_set_header (TNY_HEADER_VIEW (priv->msg_view), header);
- gtk_window_set_title (GTK_WINDOW (window), _CS("ckdg_pb_updating"));
+ modest_window_set_title (MODEST_WINDOW (window), _CS_UPDATING);
if (header)
folder = NULL;
we're not online */
if (!tny_device_is_online (modest_runtime_get_device())) {
GtkResponseType response;
+ GtkWindow *toplevel;
- response = modest_platform_run_confirmation_dialog (GTK_WINDOW (window),
- _("mcen_nc_get_msg"));
+ toplevel = (GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) window);
+ response = modest_platform_run_confirmation_dialog (toplevel, _("mcen_nc_get_msg"));
if (response == GTK_RESPONSE_CANCEL) {
update_window_title (window);
return FALSE;
}
/* Offer the connection dialog if necessary */
- modest_platform_connect_if_remote_and_perform ((GtkWindow *) window,
+ modest_platform_connect_if_remote_and_perform ((ModestWindow *) window,
TRUE,
TNY_FOLDER_STORE (folder),
message_reader_performer,
else
info->row_reference = NULL;
- message_reader_performer (FALSE, NULL, (GtkWindow *) window, account, info);
+ message_reader_performer (FALSE, NULL, (ModestWindow *) window, account, info);
if (account)
g_object_unref (account);
if (folder)
modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), header);
row_reference = (GtkTreeRowReference *) user_data;
- if (canceled) {
+ self = (ModestMsgViewWindow *) modest_mail_operation_get_source (mail_op);
+ if (canceled || !self || MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self)->msg_view == NULL ) {
if (row_reference)
gtk_tree_row_reference_free (row_reference);
- self = (ModestMsgViewWindow *) modest_mail_operation_get_source (mail_op);
if (self) {
/* Restore window title */
update_window_title (self);
if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg)) {
if (row_reference)
gtk_tree_row_reference_free (row_reference);
- self = (ModestMsgViewWindow *) modest_mail_operation_get_source (mail_op);
if (self) {
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+ /* First we check if the parent is a folder window */
+ if (priv->msg_uid && !modest_window_mgr_get_folder_window (MODEST_WINDOW_MGR (modest_runtime_get_window_mgr ()))) {
+ gboolean is_merge;
+ TnyAccount *account = NULL;
+ GtkWidget *header_window = NULL;
+
+ is_merge = g_str_has_prefix (priv->msg_uid, "merge:");
+
+ /* Get the account */
+ if (!is_merge)
+ account = tny_account_store_find_account (TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()),
+ priv->msg_uid);
+
+ if (is_merge || account) {
+ TnyFolder *folder = NULL;
+
+ /* Try to get the message, if it's already downloaded
+ we don't need to connect */
+ if (account) {
+ folder = modest_tny_folder_store_find_folder_from_uri (TNY_FOLDER_STORE (account),
+ priv->msg_uid);
+ } else {
+ ModestTnyAccountStore *account_store;
+ ModestTnyLocalFoldersAccount *local_folders_account;
+
+ account_store = modest_runtime_get_account_store ();
+ local_folders_account = MODEST_TNY_LOCAL_FOLDERS_ACCOUNT (
+ modest_tny_account_store_get_local_folders_account (account_store));
+ folder = modest_tny_local_folders_account_get_merged_outbox (local_folders_account);
+ g_object_unref (local_folders_account);
+ }
+ if (account) g_object_unref (account);
+
+ if (folder) {
+ header_window = (GtkWidget *)
+ modest_header_window_new (
+ folder,
+ modest_window_get_active_account (MODEST_WINDOW (self)),
+ modest_window_get_active_mailbox (MODEST_WINDOW (self)));
+ if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr (),
+ MODEST_WINDOW (header_window),
+ NULL)) {
+ gtk_widget_destroy (GTK_WIDGET (header_window));
+ } else {
+ gtk_widget_show_all (GTK_WIDGET (header_window));
+ }
+ g_object_unref (folder);
+ }
+ }
+ }
+
+
/* Restore window title */
update_window_title (self);
modest_ui_actions_on_close_window (NULL, MODEST_WINDOW (self));
}
/* Get the window */
- self = (ModestMsgViewWindow *) modest_mail_operation_get_source (mail_op);
g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self));
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
}
/* Mark header as read */
- if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_SEEN))
+ if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_SEEN)) {
+ gchar *uid;
+
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);
+ }
/* Set new message */
if (priv->msg_view != NULL && TNY_IS_MSG_VIEW (priv->msg_view)) {
if (!parent_priv->toolbar) {
parent_priv->toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager,
"/ToolBar");
+
+#ifdef MODEST_TOOLKIT_HILDON2
gtk_toolbar_set_icon_size (GTK_TOOLBAR (parent_priv->toolbar), HILDON_ICON_SIZE_FINGER);
+#else
+ gtk_toolbar_set_icon_size (GTK_TOOLBAR (parent_priv->toolbar), GTK_ICON_SIZE_LARGE_TOOLBAR);
+#endif
gtk_widget_set_no_show_all (parent_priv->toolbar, TRUE);
priv->next_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageNext");
{
DecodeAsyncHelper *helper = (DecodeAsyncHelper *) user_data;
const gchar *content_type;
+ ModestMsgViewWindowPrivate *priv;
+
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (helper->self);
if (cancelled || err) {
if (err) {
set_progress_hint (helper->self, FALSE);
content_type = tny_mime_part_get_content_type (mime_part);
- if (g_str_has_prefix (content_type, "message/rfc822")) {
+ if (content_type && g_str_has_prefix (content_type, "message/rfc822")) {
ModestWindowMgr *mgr;
ModestWindow *msg_win = NULL;
TnyMsg * msg;
fd = g_open (helper->file_path, O_RDONLY, 0644);
if (fd != -1) {
+ TnyMsg *top_msg;
file_stream = tny_fs_stream_new (fd);
mgr = modest_runtime_get_window_mgr ();
account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
msg = tny_camel_msg_new ();
- tny_camel_msg_parse (msg, file_stream);
- msg_win = modest_msg_view_window_new_for_attachment (TNY_MSG (msg), account, mailbox, helper->attachment_uid);
+ tny_camel_msg_parse ((TnyCamelMsg *) msg, file_stream);
+
+ if (priv->top_msg)
+ top_msg = g_object_ref (priv->top_msg);
+ else
+ top_msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
+
+ msg_win = modest_msg_view_window_new_for_attachment (TNY_MSG (msg), top_msg,
+ account, mailbox, helper->attachment_uid);
+ if (top_msg) g_object_unref (top_msg);
modest_window_set_zoom (MODEST_WINDOW (msg_win),
modest_window_get_zoom (MODEST_WINDOW (helper->self)));
if (modest_window_mgr_register_window (mgr, msg_win, MODEST_WINDOW (helper->self)))
g_chmod(helper->file_path, 0444);
/* Activate the file */
- modest_platform_activate_file (helper->file_path, tny_mime_part_get_content_type (mime_part));
+ modest_platform_activate_file (helper->file_path, content_type);
}
free:
g_slice_free (DecodeAsyncHelper, helper);
}
+static void
+view_attachment_connect_handler (gboolean canceled,
+ GError *err,
+ GtkWindow *parent_window,
+ TnyAccount *account,
+ TnyMimePart *part)
+{
+
+ if (canceled || err) {
+ g_object_unref (part);
+ return;
+ }
+
+ modest_msg_view_window_view_attachment (MODEST_MSG_VIEW_WINDOW (parent_window),
+ part);
+ g_object_unref (part);
+}
+
void
modest_msg_view_window_view_attachment (ModestMsgViewWindow *window,
TnyMimePart *mime_part)
if (tny_mime_part_is_purged (mime_part))
goto frees;
+ if (TNY_IS_CAMEL_BS_MIME_PART (mime_part) &&
+ !tny_camel_bs_mime_part_is_fetched (TNY_CAMEL_BS_MIME_PART (mime_part))) {
+ gboolean is_merge;
+ TnyAccount *account;
+
+ is_merge = g_str_has_prefix (priv->msg_uid, "merge:");
+ account = NULL;
+ /* Get the account */
+ if (!is_merge)
+ account = tny_account_store_find_account (TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()),
+ priv->msg_uid);
+
+ if (!tny_device_is_online (modest_runtime_get_device())) {
+ modest_platform_connect_and_perform ((ModestWindow *) window,
+ TRUE,
+ TNY_ACCOUNT (account),
+ (ModestConnectedPerformer) view_attachment_connect_handler,
+ g_object_ref (mime_part));
+ goto frees;
+ }
+ }
+
if (!modest_tny_mime_part_is_msg (mime_part) && tny_mime_part_get_filename (mime_part)) {
gchar *filepath = NULL;
const gchar *att_filename = tny_mime_part_get_filename (mime_part);
if (found) {
g_debug ("window for this body is already being created");
} else {
+ TnyMsg *top_msg;
/* it's not found, so create a new window for it */
modest_window_mgr_register_header (mgr, header, attachment_uid); /* register the uid before building the window */
const gchar *mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (window));
if (!account)
account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
+
+ if (priv->top_msg)
+ top_msg = g_object_ref (priv->top_msg);
+ else
+ top_msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
- msg_win = modest_msg_view_window_new_with_other_body (TNY_MSG (current_msg), TNY_MIME_PART (mime_part),
+ msg_win = modest_msg_view_window_new_with_other_body (TNY_MSG (current_msg), TNY_MIME_PART (mime_part), top_msg,
account, mailbox, attachment_uid);
+
+ if (top_msg) g_object_unref (top_msg);
modest_window_set_zoom (MODEST_WINDOW (msg_win),
modest_window_get_zoom (MODEST_WINDOW (window)));
* thus, we don't do anything */
g_debug ("window for is already being created");
} else {
+ TnyMsg *top_msg;
/* it's not found, so create a new window for it */
modest_window_mgr_register_header (mgr, header, attachment_uid); /* register the uid before building the window */
gchar *account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (window)));
const gchar *mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (window));
if (!account)
account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
- msg_win = modest_msg_view_window_new_for_attachment (TNY_MSG (mime_part), account,
- mailbox, attachment_uid);
+ if (priv->top_msg)
+ top_msg = g_object_ref (priv->top_msg);
+ else
+ top_msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
+ msg_win = modest_msg_view_window_new_for_attachment (
+ TNY_MSG (mime_part), top_msg, account,
+ mailbox, attachment_uid);
modest_window_set_zoom (MODEST_WINDOW (msg_win),
modest_window_get_zoom (MODEST_WINDOW (window)));
if (modest_window_mgr_register_window (mgr, msg_win, MODEST_WINDOW (window)))
* modest_platform_system_banner is or does Gtk+ code */
gdk_threads_enter (); /* CHECKED */
- if (info->result == GNOME_VFS_OK) {
- modest_platform_system_banner (NULL, NULL, _CS("sfil_ib_saved"));
+ if (info->result == GNOME_VFS_ERROR_CANCELLED) {
+ /* nothing */
+ } else if (info->result == GNOME_VFS_OK) {
+ modest_platform_system_banner (NULL, NULL, _CS_SAVED);
} else if (info->result == GNOME_VFS_ERROR_NO_SPACE) {
gchar *msg = NULL;
} else {
modest_platform_system_banner (NULL, NULL, _("mail_ib_file_operation_failed"));
}
+ set_progress_hint (info->window, FALSE);
save_mime_part_info_free (info, FALSE);
gdk_threads_leave (); /* CHECKED */
return FALSE;
}
+static void
+save_mime_part_to_file_connect_handler (gboolean canceled,
+ GError *err,
+ GtkWindow *parent_window,
+ TnyAccount *account,
+ SaveMimePartInfo *info)
+{
+ if (canceled || err) {
+ if (canceled && !err) {
+ info->result = GNOME_VFS_ERROR_CANCELLED;
+ }
+ g_idle_add ((GSourceFunc) idle_save_mime_part_show_result, info);
+ } else {
+ g_thread_create ((GThreadFunc)save_mime_part_to_file, info, FALSE, NULL);
+ }
+}
+
+static gboolean
+save_mime_part_to_file_connect_idle (SaveMimePartInfo *info)
+{
+ gboolean is_merge;
+ TnyAccount *account;
+ ModestMsgViewWindowPrivate *priv;
+
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (info->window);
+
+ is_merge = g_str_has_prefix (priv->msg_uid, "merge:");
+ account = NULL;
+
+ /* Get the account */
+ if (!is_merge)
+ account = tny_account_store_find_account (TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()),
+ priv->msg_uid);
+
+ modest_platform_connect_and_perform ((ModestWindow *) info->window,
+ TRUE,
+ TNY_ACCOUNT (account),
+ (ModestConnectedPerformer) save_mime_part_to_file_connect_handler,
+ info);
+
+ if (account)
+ g_object_unref (account);
+
+ return FALSE;
+}
+
static gpointer
save_mime_part_to_file (SaveMimePartInfo *info)
{
TnyStream *stream;
SaveMimePartPair *pair = (SaveMimePartPair *) info->pairs->data;
+ if (TNY_IS_CAMEL_BS_MIME_PART (pair->part) &&
+ !tny_camel_bs_mime_part_is_fetched (TNY_CAMEL_BS_MIME_PART (pair->part))) {
+ gboolean check_online = TRUE;
+ ModestMsgViewWindowPrivate *priv = NULL;
+
+ /* Check if we really need to connect to save the mime part */
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (info->window);
+ if (g_str_has_prefix (priv->msg_uid, "merge:")) {
+ check_online = FALSE;
+ } else {
+ TnyAccountStore *acc_store;
+ TnyAccount *account = NULL;
+
+ acc_store = (TnyAccountStore*) modest_runtime_get_account_store ();
+ account = tny_account_store_find_account (acc_store, priv->msg_uid);
+
+ if (account) {
+ if (tny_account_get_connection_status (account) ==
+ TNY_CONNECTION_STATUS_CONNECTED)
+ check_online = FALSE;
+ g_object_unref (account);
+ } else {
+ check_online = !tny_device_is_online (tny_account_store_get_device (acc_store));
+ }
+ }
+
+ if (check_online) {
+ g_idle_add ((GSourceFunc) save_mime_part_to_file_connect_idle, info);
+ return NULL;
+ }
+ }
+
info->result = gnome_vfs_create (&handle, pair->filename, GNOME_VFS_OPEN_WRITE, FALSE, 0644);
if (info->result == GNOME_VFS_OK) {
GError *error = NULL;
if (written < 0) {
g_warning ("modest: could not save attachment %s: %d (%s)\n", pair->filename, error?error->code:-1, error?error->message:"Unknown error");
- if ((error->domain == TNY_ERROR_DOMAIN) &&
+ if (error && (error->domain == TNY_ERROR_DOMAIN) &&
(error->code == TNY_IO_ERROR_WRITE) &&
(errno == ENOSPC)) {
info->result = GNOME_VFS_ERROR_NO_SPACE;
escaped_basename = g_uri_unescape_string (basename, NULL);
message = g_strdup_printf ("%s\n%s",
- _FM("docm_nc_replace_file"),
+ _FM_REPLACE_FILE,
(escaped_basename) ? escaped_basename : "");
response = modest_platform_run_confirmation_dialog (parent, message);
g_free (message);
g_free (escaped_basename);
} else {
response = modest_platform_run_confirmation_dialog (parent,
- _FM("docm_nc_replace_multiple"));
+ _FM_REPLACE_MULTIPLE);
}
if (response != GTK_RESPONSE_OK)
is_ok = FALSE;
if (!is_ok) {
save_mime_part_info_free (info, TRUE);
} else {
+ /* Start progress and launch thread */
+ set_progress_hint (info->window, TRUE);
g_thread_create ((GThreadFunc)save_mime_part_to_file, info, FALSE, NULL);
}
if (modest_maemo_utils_in_usb_mode ()) {
err_msg = dgettext ("hildon-status-bar-usb", "usbh_ib_mmc_usb_connected");
} else {
- err_msg = _FM("sfil_ib_readonly_location");
+ err_msg = _FM_READ_ONLY_LOCATION;
}
#else
- err_msg = _FM("sfil_ib_readonly_location");
+ err_msg = _FM_READ_ONLY_LOCATION;
#endif
modest_platform_system_banner (NULL, NULL, err_msg);
} else {
gtk_widget_destroy (GTK_WIDGET (dialog));
}
+static gboolean
+msg_is_attachment (TnyList *mime_parts)
+{
+ TnyIterator *iter;
+ gboolean retval = FALSE;
+
+ if (tny_list_get_length (mime_parts) > 1)
+ return FALSE;
+
+ iter = tny_list_create_iterator (mime_parts);
+ if (iter) {
+ TnyMimePart *part = TNY_MIME_PART (tny_iterator_get_current (iter));
+ if (part) {
+ if (TNY_IS_MSG (part))
+ retval = TRUE;
+ g_object_unref (part);
+ }
+ g_object_unref (iter);
+ }
+ return retval;
+}
+
void
modest_msg_view_window_save_attachments (ModestMsgViewWindow *window,
TnyList *mime_parts)
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
if (mime_parts == NULL) {
+ gboolean allow_msgs = FALSE;
+
/* In Hildon 2.2 save and delete operate over all the attachments as there's no
* selection available */
mime_parts = modest_msg_view_get_attachments (MODEST_MSG_VIEW (priv->msg_view));
- if (mime_parts && !modest_maemo_utils_select_attachments (GTK_WINDOW (window), mime_parts, FALSE)) {
+
+ /* Check if the message is composed by an unique MIME
+ part whose content disposition is attachment. There
+ could be messages like this:
+
+ Date: Tue, 12 Jan 2010 20:40:59 +0000
+ From: <sender@example.org>
+ To: <recipient@example.org>
+ Subject: no body
+ Content-Type: image/jpeg
+ Content-Disposition: attachment; filename="bug7718.jpeg"
+
+ whose unique MIME part is the message itself whose
+ content disposition is attachment
+ */
+ if (mime_parts && msg_is_attachment (mime_parts))
+ allow_msgs = TRUE;
+
+ if (mime_parts && !modest_toolkit_utils_select_attachments (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (window))), mime_parts, allow_msgs)) {
g_object_unref (mime_parts);
return;
}
+
if (mime_parts == NULL || tny_list_get_length (mime_parts) == 0) {
if (mime_parts) {
g_object_unref (mime_parts);
num), num);
}
- /****** HILDON2:START
- * creation of hildon file chooser dialog for saving
- */
- save_dialog = hildon_file_chooser_dialog_new (GTK_WINDOW (window),
- GTK_FILE_CHOOSER_ACTION_SAVE);
- /****** HILDON2:END */
+ /* Creation of hildon file chooser dialog for saving */
+ save_dialog = modest_toolkit_factory_create_file_chooser_dialog (modest_runtime_get_toolkit_factory (),
+ "",
+ (GtkWindow *) window,
+ GTK_FILE_CHOOSER_ACTION_SAVE);
/* Get last used folder */
conf_folder = modest_conf_get_string (modest_runtime_get_conf (),
/* if multiple, set multiple string */
if (save_multiple_str) {
g_object_set (G_OBJECT (save_dialog), "save-multiple", save_multiple_str, NULL);
- gtk_window_set_title (GTK_WINDOW (save_dialog), _FM("sfil_ti_save_objects_files"));
+ gtk_window_set_title (GTK_WINDOW (save_dialog), _FM_SAVE_OBJECT_FILES);
g_free (save_multiple_str);
}
g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window));
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+#ifdef MODEST_TOOLKIT_HILDON2
/* In hildon 2.2 we ignore the get_all flag as we always get all attachments. This is
* because we don't have selection
*/
g_object_unref (tmp);
g_object_unref (iter);
- if (!modest_maemo_utils_select_attachments (GTK_WINDOW (window), mime_parts, TRUE) ||
+ if (!modest_toolkit_utils_select_attachments (GTK_WINDOW (window), mime_parts, TRUE) ||
tny_list_get_length (mime_parts) == 0) {
g_object_unref (mime_parts);
return;
}
+#else
+ /* In gtk we get only selected attachments for the operation.
+ */
+ mime_parts = modest_msg_view_get_selected_attachments (MODEST_MSG_VIEW (priv->msg_view));
+
+ /* Remove already purged messages from mime parts list. We use
+ a copy of the list to remove items in the original one */
+ tmp = tny_list_copy (mime_parts);
+ iter = tny_list_create_iterator (tmp);
+ while (!tny_iterator_is_done (iter)) {
+ TnyMimePart *part = TNY_MIME_PART (tny_iterator_get_current (iter));
+ if (tny_mime_part_is_purged (part))
+ tny_list_remove (mime_parts, (GObject *) part);
+
+ g_object_unref (part);
+ tny_iterator_next (iter);
+ }
+ g_object_unref (tmp);
+ g_object_unref (iter);
+
+ if (tny_list_get_length (mime_parts) == 0) {
+ g_object_unref (mime_parts);
+ return;
+ }
+#endif
n_attachments = tny_list_get_length (mime_parts);
if (n_attachments == 1) {
"mcen_nc_purge_files_text",
n_attachments), n_attachments);
}
- response = modest_platform_run_confirmation_dialog (GTK_WINDOW (window),
+ response = modest_platform_run_confirmation_dialog (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (window))),
confirmation_message);
g_free (confirmation_message);
subject = g_strdup (_("mail_va_no_subject"));
}
- gtk_window_set_title (GTK_WINDOW (window), subject);
+ modest_window_set_title (MODEST_WINDOW (window), subject);
}
} FetchImageData;
gboolean
+on_fetch_image_timeout_refresh_view (gpointer userdata)
+{
+ ModestMsgViewWindowPrivate *priv;
+
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (userdata);
+ update_progress_hint (MODEST_MSG_VIEW_WINDOW (userdata));
+ /* Note that priv->msg_view is set to NULL when this window is
+ distroyed */
+ if (priv->msg_view && GTK_WIDGET_DRAWABLE (priv->msg_view)) {
+ gtk_widget_queue_draw (GTK_WIDGET (priv->msg_view));
+ }
+ priv->fetch_image_redraw_handler = 0;
+ g_object_unref (userdata);
+ return FALSE;
+}
+
+gboolean
on_fetch_image_idle_refresh_view (gpointer userdata)
{
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (fidata->window);
priv->fetching_images--;
- gtk_widget_queue_draw (fidata->msg_view);
- update_progress_hint (MODEST_MSG_VIEW_WINDOW (fidata->window));
+ if (priv->fetch_image_redraw_handler == 0) {
+ priv->fetch_image_redraw_handler = g_timeout_add (500, on_fetch_image_timeout_refresh_view, g_object_ref (fidata->window));
+ }
+
}
gdk_threads_leave ();
{
g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW(self));
- /****** HILDON2:START
- * add actions to hildon window menu
- */
-
/* Settings menu buttons */
- modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_viewer_find"), NULL,
- APP_MENU_CALLBACK (modest_msg_view_window_show_find_toolbar),
- MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_find_in_msg));
-
- modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self),
- dngettext(GETTEXT_PACKAGE,
- "mcen_me_move_message",
- "mcen_me_move_messages",
- 1),
- NULL,
- APP_MENU_CALLBACK (modest_ui_actions_on_move_to),
- MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_move_to));
-
- modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_mark_as_read"), NULL,
- APP_MENU_CALLBACK (modest_ui_actions_on_mark_as_read),
- MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_mark_as_read_msg_in_view));
-
- modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_mark_as_unread"), NULL,
- APP_MENU_CALLBACK (modest_ui_actions_on_mark_as_unread),
- MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_mark_as_unread_msg_in_view));
-
- modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_viewer_save_attachments"), NULL,
- APP_MENU_CALLBACK (modest_ui_actions_save_attachments),
- MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_save_attachments));
- modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_remove_attachments"), NULL,
- APP_MENU_CALLBACK (modest_ui_actions_remove_attachments),
- MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_remove_attachments));
-
- modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_new_message"), "<Control>n",
- APP_MENU_CALLBACK (modest_ui_actions_on_new_msg),
- MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_new_msg));
- modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_viewer_addtocontacts"), NULL,
- APP_MENU_CALLBACK (modest_ui_actions_add_to_contacts),
- MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_add_to_contacts));
-
- modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_ti_message_properties"), NULL,
- APP_MENU_CALLBACK (modest_ui_actions_on_details),
- MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_details));
-
- /****** HILDON2:END */
+ modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_new_message"), "<Control>n",
+ MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_on_new_msg),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_new_msg));
+
+ modest_window_add_to_menu (MODEST_WINDOW (self),
+ dngettext(GETTEXT_PACKAGE,
+ "mcen_me_move_message",
+ "mcen_me_move_messages",
+ 1),
+ NULL,
+ MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_on_move_to),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_move_to));
+
+ modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_inbox_mark_as_read"), NULL,
+ MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_on_mark_as_read),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_mark_as_read_msg_in_view));
+ modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_inbox_mark_as_unread"), NULL,
+ MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_on_mark_as_unread),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_mark_as_unread_msg_in_view));
+
+ modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_viewer_save_attachments"), NULL,
+ MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_save_attachments),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_save_attachments));
+ modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_inbox_remove_attachments"), NULL,
+ MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_remove_attachments),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_remove_attachments));
+
+ modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_viewer_addtocontacts"), NULL,
+ MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_add_to_contacts),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_add_to_contacts));
+
+ modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_ti_message_properties"), NULL,
+ MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_on_details),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_details));
+
+ modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_viewer_find"), NULL,
+ MODEST_WINDOW_MENU_CALLBACK (modest_msg_view_window_show_isearch_toolbar),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_find_in_msg));
}
void
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
GSList *recipients = NULL;
TnyMsg *msg = NULL;
- gboolean contacts_to_add = FALSE;
msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
if (msg == NULL) {
g_object_unref (msg);
}
- if (recipients != NULL) {
- /****** HILDON2:START
- * shows dialog with addresses not present in addressbook. User can choose one to
- * add it to addressbook.
- * */
- GtkWidget *picker_dialog;
- GtkWidget *selector;
- GSList *node;
- gchar *selected = NULL;
-
- selector = hildon_touch_selector_new_text ();
- g_object_ref (selector);
-
- for (node = recipients; node != NULL; node = g_slist_next (node)) {
- if (!modest_address_book_has_address ((const gchar *) node->data)) {
- hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector),
- (const gchar *) node->data);
- contacts_to_add = TRUE;
- }
- }
-
- if (contacts_to_add) {
- gint picker_result;
-
- picker_dialog = hildon_picker_dialog_new (GTK_WINDOW (self));
- gtk_window_set_title (GTK_WINDOW (picker_dialog), _("mcen_me_viewer_addtocontacts"));
-
- hildon_picker_dialog_set_selector (HILDON_PICKER_DIALOG (picker_dialog),
- HILDON_TOUCH_SELECTOR (selector));
-
- picker_result = gtk_dialog_run (GTK_DIALOG (picker_dialog));
-
- if (picker_result == GTK_RESPONSE_OK) {
- selected = hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector));
- }
- gtk_widget_destroy (picker_dialog);
-
- if (selected)
- modest_address_book_add_address (selected, (GtkWindow *) self);
- g_free (selected);
-
- } else {
-
- g_object_unref (selector);
-
- }
- /****** HILDON2:END */
+ if (recipients) {
+ /* Offer the user to add recipients to the address book */
+ modest_address_book_add_address_list_with_selector (recipients, (GtkWindow *) self);
+ g_slist_foreach (recipients, (GFunc) g_free, NULL); g_slist_free (recipients);
}
-
- if (recipients) {g_slist_foreach (recipients, (GFunc) g_free, NULL); g_slist_free (recipients);}
}
static gboolean
g_object_unref (header);
}
}
+
+#ifdef MODEST_TOOLKIT_HILDON2
+static gboolean
+on_realize (GtkWidget *widget,
+ gpointer userdata)
+{
+ GdkDisplay *display;
+ Atom atom;
+ unsigned long val = 1;
+
+ display = gdk_drawable_get_display (widget->window);
+ atom = gdk_x11_get_xatom_by_name_for_display (display, "_HILDON_ZOOM_KEY_ATOM");
+ XChangeProperty (GDK_DISPLAY_XDISPLAY (display),
+ GDK_WINDOW_XID (widget->window), atom,
+ XA_INTEGER, 32, PropModeReplace,
+ (unsigned char *) &val, 1);
+
+ return FALSE;
+}
+#endif
+
+static gboolean
+on_handle_calendar (ModestMsgView *msgview, TnyMimePart *calendar_part, GtkContainer *container, ModestMsgViewWindow *self)
+{
+ const gchar *account_name;
+ ModestProtocolType proto_type;
+ ModestProtocol *protocol;
+ gboolean retval = FALSE;
+
+ account_name = modest_window_get_active_account (MODEST_WINDOW (self));
+
+ /* Get proto */
+ proto_type = modest_account_mgr_get_store_protocol (modest_runtime_get_account_mgr (),
+ account_name);
+ protocol =
+ modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (),
+ proto_type);
+
+ if (MODEST_IS_ACCOUNT_PROTOCOL (protocol)) {
+ retval = modest_account_protocol_handle_calendar (MODEST_ACCOUNT_PROTOCOL (protocol), MODEST_WINDOW (self),
+ calendar_part, container);
+ }
+ return retval;
+}