X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-msg-view-window.c;h=9749443c43befac42abc03e0b22b369c07fe47d7;hp=ab39d0014e42c20b805360b73c406099d445f9db;hb=020116114abce7854183d211076e0986f8ecb67c;hpb=dc85dcc4f5296895b3087e40ba0e01f9adf2b9b4 diff --git a/src/hildon2/modest-msg-view-window.c b/src/hildon2/modest-msg-view-window.c index ab39d00..9749443 100644 --- a/src/hildon2/modest-msg-view-window.c +++ b/src/hildon2/modest-msg-view-window.c @@ -71,6 +71,10 @@ #include #include #include +#include +#include +#include +#include #define MYDOCS_ENV "MYDOCSDIR" #define DOCS_FOLDER ".documents" @@ -236,6 +240,11 @@ static gboolean _modest_msg_view_window_map_event (GtkWidget *widget, 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 { @@ -483,15 +492,20 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj) 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)); - + hildon_program_add_window (hildon_program_get_instance(), HILDON_WINDOW(obj)); + /* 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); } static void @@ -807,6 +821,8 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self, 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); @@ -2273,30 +2289,6 @@ view_msg_cb (ModestMailOperation *mail_op, return; } - if (msg && TNY_IS_CAMEL_BS_MSG (msg)) { - TnyMimePart *body; - body = modest_tny_msg_find_body_part (msg, TRUE); - - if (body && !tny_camel_bs_mime_part_is_fetched (TNY_CAMEL_BS_MIME_PART (body))) { - /* We have body structure but not the body mime part. What we do - * is restarting load of message */ - self = (ModestMsgViewWindow *) modest_mail_operation_get_source (mail_op); - priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self); - - tny_header_unset_flag (TNY_HEADER (header), TNY_HEADER_FLAG_CACHED); - - modest_msg_view_window_reload (self); - - if (row_reference) - gtk_tree_row_reference_free (row_reference); - g_object_unref (body); - return; - } - - if (body) - g_object_unref (body); - } - /* Get the window */ self = (ModestMsgViewWindow *) modest_mail_operation_get_source (mail_op); g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self)); @@ -2784,7 +2776,7 @@ on_decode_to_stream_async_handler (TnyMimePart *mime_part, 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: @@ -3150,6 +3142,10 @@ save_mime_part_to_file_connect_idle (SaveMimePartInfo *info) TNY_ACCOUNT (account), (ModestConnectedPerformer) save_mime_part_to_file_connect_handler, info); + + if (account) + g_object_unref (account); + return FALSE; } @@ -3162,8 +3158,34 @@ save_mime_part_to_file (SaveMimePartInfo *info) if (TNY_IS_CAMEL_BS_MIME_PART (pair->part) && !tny_camel_bs_mime_part_is_fetched (TNY_CAMEL_BS_MIME_PART (pair->part))) { - g_idle_add ((GSourceFunc) save_mime_part_to_file_connect_idle, info); - return NULL; + 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); @@ -3369,6 +3391,28 @@ save_attachments_response (GtkDialog *dialog, 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) @@ -3384,10 +3428,31 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, 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: + To: + 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_maemo_utils_select_attachments (GTK_WINDOW (window), mime_parts, allow_msgs)) { g_object_unref (mime_parts); return; } @@ -4040,3 +4105,45 @@ sync_flags (ModestMsgViewWindow *self) g_object_unref (header); } } + +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; +} + +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; +}