X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-msg-view-window.c;h=fca809312f72ee685b6257b4ead14d5d0207908b;hp=4b7581b6b5d2b35f77752e107020016467a165aa;hb=d2b7b5190cdfa7b235eba09687beed4f48d57bba;hpb=34abbc5f611d07a4a52479f887fc452a30deaf59 diff --git a/src/hildon2/modest-msg-view-window.c b/src/hildon2/modest-msg-view-window.c index 4b7581b..fca8093 100644 --- a/src/hildon2/modest-msg-view-window.c +++ b/src/hildon2/modest-msg-view-window.c @@ -94,7 +94,7 @@ struct _ModestMsgViewWindowPrivate { /* Whether the message is in outbox */ gboolean is_outbox; - + /* A reference to the @model of the header view * to allow selecting previous/next messages, * if the message is currently selected in the header view. @@ -116,7 +116,7 @@ struct _ModestMsgViewWindowPrivate { GtkWidget *remove_attachment_banner; gchar *msg_uid; - + GSList *sighandlers; }; @@ -533,7 +533,10 @@ init_window (ModestMsgViewWindow *obj) priv->find_toolbar = hildon_find_toolbar_new (NULL); hildon_window_add_toolbar (HILDON_WINDOW (obj), GTK_TOOLBAR (priv->find_toolbar)); gtk_widget_set_no_show_all (priv->find_toolbar, TRUE); - + + /* NULL-ize fields if the window is destroyed */ + g_signal_connect (priv->msg_view, "destroy", G_CALLBACK (gtk_widget_destroyed), &(priv->msg_view)); + gtk_widget_show_all (GTK_WIDGET(main_vbox)); } @@ -788,7 +791,7 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self, g_signal_connect (G_OBJECT (obj), "move-focus", G_CALLBACK (on_move_focus), obj); - g_signal_connect (G_OBJECT (obj), "expose-event", + g_signal_connect (G_OBJECT (obj), "map-event", G_CALLBACK (_modest_msg_view_window_map_event), G_OBJECT (obj)); @@ -1467,7 +1470,6 @@ modest_msg_view_window_find_toolbar_search (GtkWidget *widget, g_free (priv->last_search); priv->last_search = NULL; } else { - modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view)); hildon_find_toolbar_highlight_entry (HILDON_FIND_TOOLBAR (priv->find_toolbar), TRUE); } } else { @@ -1477,7 +1479,6 @@ modest_msg_view_window_find_toolbar_search (GtkWidget *widget, g_free (priv->last_search); priv->last_search = NULL; } else { - modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view)); hildon_find_toolbar_highlight_entry (HILDON_FIND_TOOLBAR (priv->find_toolbar), TRUE); } } @@ -1799,6 +1800,7 @@ message_reader_performer (gboolean canceled, info = (MsgReaderInfo *) user_data; if (canceled || err) { + update_window_title (MODEST_MSG_VIEW_WINDOW (parent_window)); goto frees; } @@ -1809,7 +1811,7 @@ message_reader_performer (gboolean canceled, mail_op = modest_mail_operation_new_with_error_handling (G_OBJECT(parent_window), 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, info->header, TRUE, view_msg_cb, info->row_reference); g_object_unref (mail_op); @@ -1865,9 +1867,11 @@ message_reader (ModestMsgViewWindow *window, response = modest_platform_run_confirmation_dialog (GTK_WINDOW (window), _("mcen_nc_get_msg")); - if (response == GTK_RESPONSE_CANCEL) + if (response == GTK_RESPONSE_CANCEL) { + update_window_title (window); return FALSE; - + } + folder = tny_header_get_folder (header); info = g_slice_new (MsgReaderInfo); info->header = g_object_ref (header); @@ -2014,12 +2018,24 @@ view_msg_cb (ModestMailOperation *mail_op, row_reference = (GtkTreeRowReference *) user_data; if (canceled) { 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); + g_object_unref (self); + } return; } - + /* If there was any error */ if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg)) { - gtk_tree_row_reference_free (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); + g_object_unref (self); + } return; } @@ -2147,7 +2163,7 @@ toolbar_resize (ModestMsgViewWindow *self) parent_priv = MODEST_WINDOW_GET_PRIVATE(self); mgr = modest_runtime_get_window_mgr (); - static_button_size = modest_window_mgr_get_fullscreen_mode (mgr)?118:108; + static_button_size = modest_window_mgr_get_fullscreen_mode (mgr)?120:120; if (parent_priv->toolbar) { /* left size buttons */ @@ -2167,13 +2183,12 @@ toolbar_resize (ModestMsgViewWindow *self) gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), FALSE); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), FALSE); gtk_widget_set_size_request (GTK_WIDGET (widget), static_button_size, -1); - + gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->next_toolitem), TRUE); gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->next_toolitem), TRUE); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->prev_toolitem), TRUE); gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->prev_toolitem), TRUE); } - } static void @@ -2193,6 +2208,7 @@ modest_msg_view_window_show_toolbar (ModestWindow *self, if (!parent_priv->toolbar) { parent_priv->toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar"); + gtk_toolbar_set_icon_size (GTK_TOOLBAR (parent_priv->toolbar), HILDON_ICON_SIZE_FINGER); gtk_widget_set_no_show_all (parent_priv->toolbar, TRUE); priv->next_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageNext"); @@ -2309,7 +2325,7 @@ on_mail_operation_started (ModestMailOperation *mail_op, tmp = priv->progress_widgets; source = modest_mail_operation_get_source(mail_op); if (G_OBJECT (self) == source) { - if (op_type == MODEST_MAIL_OPERATION_TYPE_RECEIVE ) { + if (op_type == MODEST_MAIL_OPERATION_TYPE_RECEIVE) { set_toolbar_transfer_mode(self); while (tmp) { modest_progress_object_add_operation ( @@ -2336,7 +2352,7 @@ on_mail_operation_finished (ModestMailOperation *mail_op, op_type = modest_mail_operation_get_type_operation (mail_op); tmp = priv->progress_widgets; - if (op_type == MODEST_MAIL_OPERATION_TYPE_RECEIVE ) { + if (op_type == MODEST_MAIL_OPERATION_TYPE_RECEIVE) { while (tmp) { modest_progress_object_remove_operation (MODEST_PROGRESS_OBJECT (tmp->data), mail_op); @@ -2347,15 +2363,15 @@ on_mail_operation_finished (ModestMailOperation *mail_op, if (observers_empty (self)) { set_progress_hint (self, FALSE); } - - /* Update dimming rules. We have to do this right here - and not in view_msg_cb because at that point the - transfer mode is still enabled so the dimming rule - won't let the user delete the message that has been - readed for example */ - modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (self)); - modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (self)); } + + /* Update dimming rules. We have to do this right here + and not in view_msg_cb because at that point the + transfer mode is still enabled so the dimming rule + won't let the user delete the message that has been + readed for example */ + check_dimming_rules_after_change (self); + } static void @@ -2408,23 +2424,6 @@ modest_msg_view_window_get_attachments (ModestMsgViewWindow *win) return selected_attachments; } -typedef struct { - gchar *filepath; - GtkWidget *banner; - guint banner_idle_id; -} DecodeAsyncHelper; - -static gboolean -decode_async_banner_idle (gpointer user_data) -{ - DecodeAsyncHelper *helper = (DecodeAsyncHelper *) user_data; - - helper->banner_idle_id = 0; - helper->banner = hildon_banner_show_animation (NULL, NULL, _("mail_me_opening")); - - return FALSE; -} - static void on_decode_to_stream_async_handler (TnyMimePart *mime_part, gboolean cancelled, @@ -2432,16 +2431,8 @@ on_decode_to_stream_async_handler (TnyMimePart *mime_part, GError *err, gpointer user_data) { - DecodeAsyncHelper *helper = (DecodeAsyncHelper *) user_data; + gchar *filepath = (gchar *) user_data; - if (helper->banner_idle_id > 0) { - g_source_remove (helper->banner_idle_id); - helper->banner_idle_id = 0; - } - if (helper->banner) { - gtk_widget_destroy (helper->banner); - helper->banner = NULL; - } if (cancelled || err) { modest_platform_information_banner (NULL, NULL, _("mail_ib_file_operation_failed")); @@ -2449,15 +2440,14 @@ on_decode_to_stream_async_handler (TnyMimePart *mime_part, } /* make the file read-only */ - g_chmod(helper->filepath, 0444); + g_chmod(filepath, 0444); /* Activate the file */ - modest_platform_activate_file (helper->filepath, tny_mime_part_get_content_type (mime_part)); + modest_platform_activate_file (filepath, tny_mime_part_get_content_type (mime_part)); free: /* Frees */ - g_free (helper->filepath); - g_slice_free (DecodeAsyncHelper, helper); + g_free (filepath); } void @@ -2517,16 +2507,12 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyFsStream *temp_stream = NULL; temp_stream = modest_utils_create_temp_stream (att_filename, attachment_uid, &filepath); - + if (temp_stream != NULL) { - DecodeAsyncHelper *helper = g_slice_new (DecodeAsyncHelper); - helper->filepath = g_strdup (filepath); - helper->banner = NULL; - helper->banner_idle_id = g_timeout_add (1000, decode_async_banner_idle, helper); tny_mime_part_decode_to_stream_async (mime_part, TNY_STREAM (temp_stream), on_decode_to_stream_async_handler, - NULL, - helper); + NULL, + g_strdup (filepath)); g_object_unref (temp_stream); /* NOTE: files in the temporary area will be automatically * cleaned after some time if they are no longer in use */ @@ -2586,7 +2572,6 @@ typedef struct typedef struct { GList *pairs; - GtkWidget *banner; GnomeVFSResult result; } SaveMimePartInfo; @@ -2609,7 +2594,6 @@ save_mime_part_info_free (SaveMimePartInfo *info, gboolean with_struct) g_list_free (info->pairs); info->pairs = NULL; if (with_struct) { - gtk_widget_destroy (info->banner); g_slice_free (SaveMimePartInfo, info); } } @@ -2702,9 +2686,6 @@ save_mime_parts_to_file_with_checks (SaveMimePartInfo *info) if (!is_ok) { save_mime_part_info_free (info, TRUE); } else { - GtkWidget *banner = hildon_banner_show_animation (NULL, NULL, - _CS("sfil_ib_saving")); - info->banner = banner; g_thread_create ((GThreadFunc)save_mime_part_to_file, info, FALSE, NULL); } @@ -2789,6 +2770,10 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, TnyList *m /* 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 (!modest_maemo_utils_select_attachments (GTK_WINDOW (window), mime_parts)) { + g_object_unref (mime_parts); + return; + } if (mime_parts == NULL || tny_list_get_length (mime_parts) == 0) return; } else { @@ -2817,7 +2802,7 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, TnyList *m save_multiple_str = g_strdup_printf (_FM("sfil_va_number_of_objects_attachments"), tny_list_get_length (mime_parts)); } - + save_dialog = hildon_file_chooser_dialog_new (GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_SAVE); @@ -2901,7 +2886,8 @@ modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, gboolean } g_object_unref (iter); - if (tny_list_get_length (mime_parts) == 0) { + if (!modest_maemo_utils_select_attachments (GTK_WINDOW (window), mime_parts) || + tny_list_get_length (mime_parts) == 0) { g_object_unref (mime_parts); return; } @@ -2980,11 +2966,18 @@ modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, gboolean static void update_window_title (ModestMsgViewWindow *window) { - ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window); + ModestMsgViewWindowPrivate *priv; TnyMsg *msg = NULL; TnyHeader *header = NULL; gchar *subject = NULL; - + + priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window); + + /* Note that if the window is closed while we're retrieving + the message, this widget could de deleted */ + if (!priv->msg_view) + return; + msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view)); if (msg != NULL) { @@ -3003,9 +2996,10 @@ update_window_title (ModestMsgViewWindow *window) } -static void on_move_focus (GtkWidget *widget, - GtkDirectionType direction, - gpointer userdata) +static void +on_move_focus (GtkWidget *widget, + GtkDirectionType direction, + gpointer userdata) { g_signal_stop_emission_by_name (G_OBJECT (widget), "move-focus"); } @@ -3121,7 +3115,7 @@ on_fetch_image (ModestMsgView *msgview, return FALSE; } - return TRUE;; + return TRUE; } static void @@ -3240,4 +3234,6 @@ _modest_msg_view_window_map_event (GtkWidget *widget, if (priv->progress_hint) { hildon_gtk_window_set_progress_indicator (GTK_WINDOW (self), TRUE); } + + return FALSE; }