static void modest_msg_edit_window_finalize (GObject *obj);
static gboolean msg_body_focus (GtkWidget *focus, GdkEventFocus *event, gpointer userdata);
-static void to_field_changed (GtkTextBuffer *buffer, ModestMsgEditWindow *editor);
+static void recpt_field_changed (GtkTextBuffer *buffer, ModestMsgEditWindow *editor);
static void send_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor);
static void style_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor);
static void setup_insensitive_handlers (ModestMsgEditWindow *editor);
static void update_window_title (ModestMsgEditWindow *window);
static void update_dimmed (ModestMsgEditWindow *window);
+/* Find toolbar */
+static void modest_msg_edit_window_find_toolbar_search (GtkWidget *widget,
+ ModestMsgEditWindow *window);
+static void modest_msg_edit_window_find_toolbar_close (GtkWidget *widget,
+ ModestMsgEditWindow *window);
+
/* list my signals */
enum {
GtkWidget *font_tool_button_label;
GSList *size_items_group;
GtkWidget *size_tool_button_label;
+
+ GtkWidget *find_toolbar;
GtkWidget *scroll;
priv->priority_flags = 0;
+ priv->find_toolbar = NULL;
+
priv->draft_msg = NULL;
priv->clipboard_change_handler_id = 0;
}
GtkWidget *scroll_area;
GtkWidget *subject_box;
GtkWidget *attachment_icon;
+ GtkWidget *window_box;
priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(obj);
/* gtk_text_buffer_set_can_paste_rich_text (priv->text_buffer, TRUE); */
wp_text_buffer_reset_buffer (WP_TEXT_BUFFER (priv->text_buffer), TRUE);
+ priv->find_toolbar = hildon_find_toolbar_new (NULL);
+ gtk_widget_set_no_show_all (priv->find_toolbar, TRUE);
+
g_signal_connect (G_OBJECT (priv->text_buffer), "refresh_attributes",
G_CALLBACK (text_buffer_refresh_attributes), obj);
g_signal_connect (G_OBJECT (priv->text_buffer), "delete-range",
g_signal_connect (G_OBJECT (priv->msg_body), "focus-out-event",
G_CALLBACK (msg_body_focus), obj);
g_signal_connect (G_OBJECT (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->to_field))),
- "changed", G_CALLBACK (to_field_changed), obj);
- to_field_changed (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->to_field)), MODEST_MSG_EDIT_WINDOW (obj));
+ "changed", G_CALLBACK (recpt_field_changed), obj);
+ g_signal_connect (G_OBJECT (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->cc_field))),
+ "changed", G_CALLBACK (recpt_field_changed), obj);
+ g_signal_connect (G_OBJECT (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->bcc_field))),
+ "changed", G_CALLBACK (recpt_field_changed), obj);
+ recpt_field_changed (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->to_field)), MODEST_MSG_EDIT_WINDOW (obj));
g_signal_connect (G_OBJECT (priv->subject_field), "changed", G_CALLBACK (subject_field_changed), obj);
+ g_signal_connect (G_OBJECT (priv->find_toolbar), "close", G_CALLBACK (modest_msg_edit_window_find_toolbar_close), obj);
+ g_signal_connect (G_OBJECT (priv->find_toolbar), "search", G_CALLBACK (modest_msg_edit_window_find_toolbar_search), obj);
+
priv->scroll = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scroll), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (priv->scroll), GTK_SHADOW_NONE);
gtk_container_set_focus_vadjustment (GTK_CONTAINER (main_vbox), gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->scroll)));
gtk_widget_show_all (GTK_WIDGET(priv->scroll));
- if (!modest_conf_get_bool(modest_runtime_get_conf(), MODEST_CONF_SHOW_CC, NULL))
- gtk_widget_hide (priv->cc_field);
- if (!modest_conf_get_bool(modest_runtime_get_conf(), MODEST_CONF_SHOW_BCC, NULL))
- gtk_widget_hide (priv->bcc_field);
+ if (!modest_conf_get_bool(modest_runtime_get_conf(), MODEST_CONF_SHOW_CC, NULL)) {
+ gtk_widget_set_no_show_all (priv->cc_caption, TRUE);
+ gtk_widget_hide (priv->cc_caption);
+ }
+ if (!modest_conf_get_bool(modest_runtime_get_conf(), MODEST_CONF_SHOW_BCC, NULL)) {
+ gtk_widget_set_no_show_all (priv->bcc_caption, TRUE);
+ gtk_widget_hide (priv->bcc_caption);
+ }
- gtk_container_add (GTK_CONTAINER(obj), priv->scroll);
+ window_box = gtk_vbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (window_box), priv->scroll, TRUE, TRUE, 0);
+ gtk_box_pack_end (GTK_BOX (window_box), priv->find_toolbar, FALSE, FALSE, 0);
+ gtk_container_add (GTK_CONTAINER(obj), window_box);
scroll_area = modest_scroll_area_new (priv->scroll, priv->msg_body);
gtk_container_add (GTK_CONTAINER (frame), scroll_area);
gtk_container_set_focus_vadjustment (GTK_CONTAINER (scroll_area),
{
ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (obj);
-
if (priv->clipboard_change_handler_id > 0) {
g_signal_handler_disconnect (gtk_clipboard_get (GDK_SELECTION_PRIMARY), priv->clipboard_change_handler_id);
priv->clipboard_change_handler_id = 0;
/* /\* remove old message from drafts *\/ */
/* if (priv->draft_msg) { */
/* TnyHeader *header = tny_msg_get_header (priv->draft_msg); */
-/* TnyAccount *account = modest_tny_account_store_get_tny_account_by_account (modest_runtime_get_account_store(), */
+/* TnyAccount *account = modest_tny_account_store_get_server_account (modest_runtime_get_account_store(), */
/* account_name, */
/* TNY_ACCOUNT_TYPE_STORE); */
/* TnyFolder *folder = modest_tny_account_get_special_folder (account, TNY_FOLDER_TYPE_DRAFTS); */
/* Add attachments to the view */
modest_attachments_view_set_message (MODEST_ATTACHMENTS_VIEW (priv->attachments_view), msg);
- if (priv->attachments == NULL)
- gtk_widget_hide_all (priv->attachments_caption);
+ priv->attachments = modest_attachments_view_get_attachments (MODEST_ATTACHMENTS_VIEW (priv->attachments_view));
+ if (priv->attachments == NULL) {
+ gtk_widget_hide (priv->attachments_caption);
+ } else {
+ gtk_widget_set_no_show_all (priv->attachments_caption, FALSE);
+ gtk_widget_show_all (priv->attachments_caption);
+ }
gtk_text_buffer_get_start_iter (priv->text_buffer, &iter);
gtk_text_buffer_place_cursor (priv->text_buffer, &iter);
gint file_format;
g_return_val_if_fail (msg, NULL);
+ g_return_val_if_fail (account_name, NULL);
obj = g_object_new(MODEST_TYPE_MSG_EDIT_WINDOW, NULL);
g_object_unref (action_group);
/* Load the UI definition */
- gtk_ui_manager_add_ui_from_file (parent_priv->ui_manager, MODEST_UIDIR "modest-msg-edit-window-ui.xml", &error);
+ gtk_ui_manager_add_ui_from_file (parent_priv->ui_manager, MODEST_UIDIR "modest-msg-edit-window-ui.xml",
+ &error);
if (error != NULL) {
g_warning ("Could not merge modest-msg-edit-window-ui.xml: %s", error->message);
g_clear_error (&error);
action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EditMenu/CopyMenu");
gtk_action_set_sensitive (action, FALSE);
+ /* set initial state of cc and bcc */
+ action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ViewMenu/ViewCcFieldMenu");
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ modest_conf_get_bool(modest_runtime_get_conf(), MODEST_CONF_SHOW_CC, NULL));
+ action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ViewMenu/ViewBccFieldMenu");
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ modest_conf_get_bool(modest_runtime_get_conf(), MODEST_CONF_SHOW_BCC, NULL));
+
/* Setup the file format */
conf = modest_runtime_get_conf ();
prefer_formatted = modest_conf_get_bool (conf, MODEST_CONF_PREFER_FORMATTED_TEXT, &error);
priv->attachments = g_list_prepend (priv->attachments, image_part);
modest_attachments_view_add_attachment (MODEST_ATTACHMENTS_VIEW (priv->attachments_view),
image_part);
+ gtk_text_buffer_set_modified (priv->text_buffer, TRUE);
gtk_widget_set_no_show_all (priv->attachments_caption, FALSE);
gtk_widget_show_all (priv->attachments_caption);
} else if (image_file_id == -1) {
mime_part);
gtk_widget_set_no_show_all (priv->attachments_caption, FALSE);
gtk_widget_show_all (priv->attachments_caption);
+ gtk_text_buffer_set_modified (priv->text_buffer, TRUE);
}
g_free (filename);
}
gtk_widget_show_all (priv->attachments_caption);
} else if (file_id == -1) {
close (file_id);
+ g_warning("file to be attached does not exist: %s", filename);
}
}
}
}
dialog_response = (gtk_dialog_run (GTK_DIALOG (confirmation_dialog))==GTK_RESPONSE_OK);
gtk_widget_destroy (confirmation_dialog);
+ if (!dialog_response) {
+ if (clean_list)
+ g_list_free (att_list);
+ return;
+ }
hildon_banner_show_information (NULL, NULL, _("mcen_ib_removing_attachment"));
for (node = att_list; node != NULL; node = g_list_next (node)) {
modest_attachments_view_remove_attachment (MODEST_ATTACHMENTS_VIEW (priv->attachments_view),
mime_part);
+ if (priv->attachments == NULL)
+ gtk_widget_hide (priv->attachments_caption);
att_id = tny_mime_part_get_content_id (mime_part);
if (att_id != NULL)
text_buffer_delete_images_by_id (gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->msg_body)),
att_id);
g_object_unref (mime_part);
+ gtk_text_buffer_set_modified (priv->text_buffer, TRUE);
}
}
g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
+ gtk_widget_set_no_show_all (priv->cc_caption, TRUE);
if (show)
gtk_widget_show (priv->cc_caption);
else
gtk_widget_hide (priv->cc_caption);
+ modest_conf_set_bool(modest_runtime_get_conf(), MODEST_CONF_SHOW_CC, show, NULL);
}
void
g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
+ gtk_widget_set_no_show_all (priv->bcc_caption, TRUE);
if (show)
gtk_widget_show (priv->bcc_caption);
else
gtk_widget_hide (priv->bcc_caption);
+ modest_conf_set_bool(modest_runtime_get_conf(), MODEST_CONF_SHOW_BCC, show, NULL);
}
static void
}
static void
-to_field_changed (GtkTextBuffer *buffer,
+recpt_field_changed (GtkTextBuffer *buffer,
ModestMsgEditWindow *editor)
{
ModestWindowPrivate *parent_priv = MODEST_WINDOW_GET_PRIVATE (editor);
+ ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (editor);
+ GtkTextBuffer *to_buffer, *cc_buffer, *bcc_buffer;
+ gboolean dim = FALSE;
GtkAction *action;
+ to_buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->to_field));
+ cc_buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->cc_field));
+ bcc_buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->bcc_field));
+
+ dim = ((gtk_text_buffer_get_char_count (to_buffer) +
+ gtk_text_buffer_get_char_count (cc_buffer) +
+ gtk_text_buffer_get_char_count (bcc_buffer)) == 0);
+
action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarSend");
- gtk_action_set_sensitive (action, gtk_text_buffer_get_char_count (buffer) != 0);
+ gtk_action_set_sensitive (action, !dim);
action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EmailMenu/SendMenu");
- gtk_action_set_sensitive (action, gtk_text_buffer_get_char_count (buffer) != 0);
+ gtk_action_set_sensitive (action, !dim);
}
static void
subject_field_changed (GtkEditable *editable,
ModestMsgEditWindow *window)
{
+ ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
update_window_title (window);
+ gtk_text_buffer_set_modified (priv->text_buffer, TRUE);
+}
+
+void
+modest_msg_edit_window_toggle_find_toolbar (ModestMsgEditWindow *window,
+ gboolean show)
+{
+ ModestMsgEditWindowPrivate *priv = NULL;
+
+ g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
+ priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
+
+ gtk_widget_set_no_show_all (priv->find_toolbar, FALSE);
+ if (show) {
+ gtk_widget_show_all (priv->find_toolbar);
+ hildon_find_toolbar_highlight_entry (HILDON_FIND_TOOLBAR (priv->find_toolbar), TRUE);
+ } else {
+ gtk_widget_hide_all (priv->find_toolbar);
+ gtk_widget_grab_focus (priv->msg_body);
+ }
+
+}
+
+static void
+modest_msg_edit_window_find_toolbar_search (GtkWidget *widget,
+ ModestMsgEditWindow *window)
+{
+ gchar *current_search = NULL;
+ ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
+ gboolean result;
+ GtkTextIter selection_start, selection_end;
+ GtkTextIter match_start, match_end;
+
+ g_object_get (G_OBJECT (widget), "prefix", ¤t_search, NULL);
+ if ((current_search == NULL) && (strcmp (current_search, "") == 0)) {
+ g_free (current_search);
+ return;
+ }
+
+ gtk_text_buffer_get_selection_bounds (priv->text_buffer, &selection_start, &selection_end);
+ result = gtk_text_iter_forward_search (&selection_end, current_search, GTK_TEXT_SEARCH_VISIBLE_ONLY, &match_start, &match_end, NULL);
+ if (!result) {
+ GtkTextIter buffer_start;
+ gtk_text_buffer_get_start_iter (priv->text_buffer, &buffer_start);
+ result = gtk_text_iter_forward_search (&buffer_start, current_search, GTK_TEXT_SEARCH_VISIBLE_ONLY, &match_start, &match_end, &selection_start);
+ }
+ if (result) {
+ gtk_text_buffer_select_range (priv->text_buffer, &match_start, &match_end);
+ gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (priv->msg_body), &match_start, 0.0, TRUE, 0.0, 0.0);
+ } else {
+ /* TODO: warning about non succesful search */
+ }
+ g_free (current_search);
}
+
+static void
+modest_msg_edit_window_find_toolbar_close (GtkWidget *widget,
+ ModestMsgEditWindow *window)
+{
+ GtkToggleAction *toggle;
+ ModestWindowPrivate *parent_priv;
+ parent_priv = MODEST_WINDOW_GET_PRIVATE (window);
+
+ toggle = GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ToolsMenu/FindInMessageMenu"));
+ gtk_toggle_action_set_active (toggle, FALSE);
+}
+