X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-msg-view-window.c;h=feb88c3bada8f639930c652e8774b77691f24a3e;hp=4c5e407861004a2d8aa4f26074930f8246cba7f1;hb=91a531ee4468a77c332d9a1277e0a3aa1deadabf;hpb=15653b82b80a0905f45315e241e525b1b6524a4a diff --git a/src/hildon2/modest-msg-view-window.c b/src/hildon2/modest-msg-view-window.c index 4c5e407..feb88c3 100644 --- a/src/hildon2/modest-msg-view-window.c +++ b/src/hildon2/modest-msg-view-window.c @@ -125,26 +125,25 @@ struct _ModestMsgViewWindowPrivate { static void modest_msg_view_window_class_init (ModestMsgViewWindowClass *klass); static void modest_msg_view_window_init (ModestMsgViewWindow *obj); -static void modest_header_view_observer_init( - ModestHeaderViewObserverIface *iface_class); +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_toggle_find_toolbar (GtkToggleAction *obj, - gpointer data); -static void modest_msg_view_window_find_toolbar_close (GtkWidget *widget, - ModestMsgViewWindow *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); - + ModestMsgViewWindow *obj); +static void modest_msg_view_window_toggle_find_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); -static void modest_msg_view_window_set_zoom (ModestWindow *window, - gdouble zoom); +static gdouble modest_msg_view_window_get_zoom (ModestWindow *window); +static void modest_msg_view_window_set_zoom (ModestWindow *window, + gdouble zoom); static gboolean modest_msg_view_window_zoom_minus (ModestWindow *window); -static gboolean modest_msg_view_window_zoom_plus (ModestWindow *window); -static gboolean modest_msg_view_window_key_event (GtkWidget *window, - GdkEventKey *event, - gpointer userdata); +static gboolean modest_msg_view_window_zoom_plus (ModestWindow *window); +static gboolean modest_msg_view_window_key_event (GtkWidget *window, + GdkEventKey *event, + gpointer userdata); static void modest_msg_view_window_update_priority (ModestMsgViewWindow *window); static void modest_msg_view_window_show_toolbar (ModestWindow *window, @@ -203,7 +202,6 @@ static void set_progress_hint (ModestMsgViewWindow *self, static void update_window_title (ModestMsgViewWindow *window); -static gboolean set_toolbar_transfer_mode (ModestMsgViewWindow *self); static void init_window (ModestMsgViewWindow *obj); static gboolean msg_is_visible (TnyHeader *header, gboolean check_outbox); @@ -396,7 +394,6 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj) ModestWindowPrivate *parent_priv = NULL; GtkActionGroup *action_group = NULL; GError *error = NULL; - GdkPixbuf *window_icon; priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj); parent_priv = MODEST_WINDOW_GET_PRIVATE(obj); @@ -459,33 +456,11 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj) /* Init window */ init_window (MODEST_MSG_VIEW_WINDOW(obj)); - /* Set window icon */ - window_icon = modest_platform_get_icon (MODEST_APP_MSG_VIEW_ICON, MODEST_ICON_SIZE_BIG); - if (window_icon) { - gtk_window_set_icon (GTK_WINDOW (obj), window_icon); - g_object_unref (window_icon); - } - hildon_program_add_window (hildon_program_get_instance(), HILDON_WINDOW(obj)); } - -static gboolean -set_toolbar_transfer_mode (ModestMsgViewWindow *self) -{ - ModestMsgViewWindowPrivate *priv = NULL; - - g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE); - - priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(self); - - set_progress_hint (self, TRUE); - - return FALSE; -} - static void update_progress_hint (ModestMsgViewWindow *self) { @@ -783,6 +758,8 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self, G_CALLBACK (modest_ui_actions_on_details), obj); g_signal_connect (G_OBJECT(priv->msg_view), "link_contextual", 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), "fetch_image", G_CALLBACK (on_fetch_image), obj); @@ -1309,41 +1286,41 @@ modest_msg_view_window_on_row_reordered (GtkTreeModel *header_model, gpointer arg3, ModestMsgViewWindow *window) { - ModestMsgViewWindowPrivate *priv = NULL; + ModestMsgViewWindowPrivate *priv = NULL; gboolean already_changed = FALSE; priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(window); /* If the current row was reordered select the proper next valid row. The same if the next row reference changes */ - if (priv->row_reference && - gtk_tree_row_reference_valid (priv->row_reference)) { - GtkTreePath *path; - path = gtk_tree_row_reference_get_path (priv->row_reference); - if (gtk_tree_path_compare (path, arg1) == 0) { - if (priv->next_row_reference) { - gtk_tree_row_reference_free (priv->next_row_reference); - } - priv->next_row_reference = gtk_tree_row_reference_copy (priv->row_reference); - select_next_valid_row (header_model, &(priv->next_row_reference), FALSE, priv->is_outbox); - already_changed = TRUE; - } - gtk_tree_path_free (path); - } - if (!already_changed && - priv->next_row_reference && + if (!priv->row_reference || + !gtk_tree_row_reference_valid (priv->row_reference)) + return; + + if (priv->next_row_reference && gtk_tree_row_reference_valid (priv->next_row_reference)) { - GtkTreePath *path; - path = gtk_tree_row_reference_get_path (priv->next_row_reference); - if (gtk_tree_path_compare (path, arg1) == 0) { - if (priv->next_row_reference) { - gtk_tree_row_reference_free (priv->next_row_reference); - } + GtkTreePath *cur, *next; + /* Check that the order is still the correct one */ + cur = gtk_tree_row_reference_get_path (priv->row_reference); + next = gtk_tree_row_reference_get_path (priv->next_row_reference); + gtk_tree_path_next (cur); + if (gtk_tree_path_compare (cur, next) != 0) { + gtk_tree_row_reference_free (priv->next_row_reference); priv->next_row_reference = gtk_tree_row_reference_copy (priv->row_reference); select_next_valid_row (header_model, &(priv->next_row_reference), FALSE, priv->is_outbox); + already_changed = TRUE; } - gtk_tree_path_free (path); + gtk_tree_path_free (cur); + gtk_tree_path_free (next); + } else { + if (priv->next_row_reference) + gtk_tree_row_reference_free (priv->next_row_reference); + /* Update next row reference */ + priv->next_row_reference = gtk_tree_row_reference_copy (priv->row_reference); + select_next_valid_row (header_model, &(priv->next_row_reference), FALSE, priv->is_outbox); + already_changed = TRUE; } + check_dimming_rules_after_change (window); } @@ -1508,46 +1485,44 @@ modest_msg_view_window_get_message_uid (ModestMsgViewWindow *self) return (const gchar*) priv->msg_uid; } -static void -modest_msg_view_window_toggle_find_toolbar (GtkToggleAction *toggle, +/* Used for the Ctrl+F accelerator */ +static void +modest_msg_view_window_toggle_find_toolbar (GtkWidget *obj, gpointer data) { ModestMsgViewWindow *window = MODEST_MSG_VIEW_WINDOW (data); ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window); - ModestWindowPrivate *parent_priv = MODEST_WINDOW_GET_PRIVATE (window); - gboolean is_active; - GtkAction *action; - - is_active = gtk_toggle_action_get_active (toggle); - if (is_active) { - gtk_widget_show (priv->find_toolbar); - hildon_find_toolbar_highlight_entry (HILDON_FIND_TOOLBAR (priv->find_toolbar), TRUE); - } else { - gtk_widget_hide (priv->find_toolbar); - modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view)); - } + if (GTK_WIDGET_VISIBLE (priv->find_toolbar)) { + modest_msg_view_window_find_toolbar_close (obj, data); + } else { + modest_msg_view_window_show_find_toolbar (obj, data); + } +} - /* update the toggle buttons status */ - action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage"); - if (action) - modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active); +/* Handler for menu option */ +static void +modest_msg_view_window_show_find_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); + hildon_find_toolbar_highlight_entry (HILDON_FIND_TOOLBAR (priv->find_toolbar), TRUE); } +/* Handler for click on the "X" close button in find toolbar */ static void modest_msg_view_window_find_toolbar_close (GtkWidget *widget, ModestMsgViewWindow *obj) { - GtkToggleAction *toggle; - ModestWindowPrivate *parent_priv; ModestMsgViewWindowPrivate *priv; priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (obj); - parent_priv = MODEST_WINDOW_GET_PRIVATE (obj); - toggle = GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage")); - gtk_toggle_action_set_active (toggle, FALSE); + /* Hide toolbar */ + gtk_widget_hide (priv->find_toolbar); modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view)); } @@ -1978,6 +1953,9 @@ message_reader (ModestMsgViewWindow *window, tny_header_view_set_header (TNY_HEADER_VIEW (priv->msg_view), header); gtk_window_set_title (GTK_WINDOW (window), _CS("ckdg_pb_updating")); + if (header) + folder = NULL; + if (folder) g_object_ref (folder); @@ -2048,7 +2026,8 @@ message_reader (ModestMsgViewWindow *window, message_reader_performer (FALSE, NULL, (GtkWindow *) window, account, info); g_object_unref (account); - g_object_unref (folder); + if (folder) + g_object_unref (folder); return TRUE; } @@ -2327,7 +2306,7 @@ 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); - widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageMoveTo"); + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageReplyAll"); 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); @@ -2335,7 +2314,7 @@ 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); - widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/FindInMessage"); + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarDownloadExternalImages"); 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); @@ -2473,8 +2452,10 @@ 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) { - set_toolbar_transfer_mode(self); + if (op_type == MODEST_MAIL_OPERATION_TYPE_RECEIVE || + op_type == MODEST_MAIL_OPERATION_TYPE_OPEN || + op_type == MODEST_MAIL_OPERATION_TYPE_DELETE) { + set_progress_hint (self, TRUE); while (tmp) { modest_progress_object_add_operation ( MODEST_PROGRESS_OBJECT (tmp->data), @@ -2484,9 +2465,12 @@ on_mail_operation_started (ModestMailOperation *mail_op, } } g_object_unref (source); + + /* Update dimming rules */ + check_dimming_rules_after_change (self); } -static void +static void on_mail_operation_finished (ModestMailOperation *mail_op, gpointer user_data) { @@ -2494,13 +2478,15 @@ on_mail_operation_finished (ModestMailOperation *mail_op, ModestMailOperationTypeOperation op_type; GSList *tmp; ModestMsgViewWindowPrivate *priv; - + self = MODEST_MSG_VIEW_WINDOW (user_data); priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self); 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 || + op_type == MODEST_MAIL_OPERATION_TYPE_OPEN || + op_type == MODEST_MAIL_OPERATION_TYPE_DELETE) { while (tmp) { modest_progress_object_remove_operation (MODEST_PROGRESS_OBJECT (tmp->data), mail_op); @@ -2519,7 +2505,6 @@ on_mail_operation_finished (ModestMailOperation *mail_op, won't let the user delete the message that has been readed for example */ check_dimming_rules_after_change (self); - } static void @@ -2788,6 +2773,7 @@ typedef struct { GList *pairs; GnomeVFSResult result; + gchar *uri; } SaveMimePartInfo; static void save_mime_part_info_free (SaveMimePartInfo *info, gboolean with_struct); @@ -2808,6 +2794,7 @@ save_mime_part_info_free (SaveMimePartInfo *info, gboolean with_struct) } g_list_free (info->pairs); info->pairs = NULL; + g_free (info->uri); if (with_struct) { g_slice_free (SaveMimePartInfo, info); } @@ -2823,7 +2810,13 @@ idle_save_mime_part_show_result (SaveMimePartInfo *info) if (info->result == GNOME_VFS_OK) { hildon_banner_show_information (NULL, NULL, _CS("sfil_ib_saved")); } else if (info->result == GNOME_VFS_ERROR_NO_SPACE) { - gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), ""); + gchar *msg = NULL; + + /* Check if the uri belongs to the external mmc */ + if (g_str_has_prefix (info->uri, g_getenv (MODEST_MMC1_VOLUMEPATH_ENV))) + msg = g_strdup_printf (_KR("cerm_device_memory_full"), ""); + else + msg = g_strdup (_KR("cerm_memory_card_full")); modest_platform_information_banner (NULL, NULL, msg); g_free (msg); } else { @@ -2982,14 +2975,15 @@ save_attachments_response (GtkDialog *dialog, } g_object_unref (iter); } - g_free (chooser_uri); if (files_to_save != NULL) { SaveMimePartInfo *info = g_slice_new0 (SaveMimePartInfo); info->pairs = files_to_save; info->result = TRUE; + info->uri = g_strdup (chooser_uri); save_mime_parts_to_file_with_checks ((GtkWindow *) dialog, info); } + g_free (chooser_uri); end: /* Free and close the dialog */ @@ -3430,9 +3424,19 @@ setup_menu (ModestMsgViewWindow *self) g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW(self)); /* Settings menu buttons */ - modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_replytoall"), NULL, - APP_MENU_CALLBACK (modest_ui_actions_on_reply_all), - MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_reply_msg)); + 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_forward"), "d", APP_MENU_CALLBACK (modest_ui_actions_on_forward), MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_reply_msg)); @@ -3440,6 +3444,7 @@ setup_menu (ModestMsgViewWindow *self) 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)); @@ -3458,9 +3463,6 @@ setup_menu (ModestMsgViewWindow *self) 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), _("mail_bd_external_images"), NULL, - APP_MENU_CALLBACK (modest_ui_actions_on_fetch_images), - MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_fetch_images)); 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)); @@ -3523,7 +3525,7 @@ modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self) gtk_widget_destroy (picker_dialog); if (selected) - modest_address_book_add_address (selected); + modest_address_book_add_address (selected, (GtkWindow *) self); g_free (selected); } else { @@ -3603,7 +3605,7 @@ update_branding (ModestMsgViewWindow *self) mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (self)); mgr = modest_runtime_get_account_mgr (); - + if (modest_account_mgr_account_is_multimailbox (mgr, account, &protocol)) { if (MODEST_IS_ACCOUNT_PROTOCOL (protocol)) { service_name = modest_account_protocol_get_service_name (MODEST_ACCOUNT_PROTOCOL (protocol),