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;
}
ModestAccountMgr *account_mgr = modest_runtime_get_account_mgr();
GSList *accounts = modest_account_mgr_account_names (account_mgr,
- TRUE /* only enabled accounts. */);
+ TRUE /* only enabled accounts. */);
GSList *cursor = accounts;
while (cursor) {
- const gchar *account_name = cursor->data;
+ gchar *account_name = cursor->data;
gchar *from_string = NULL;
if (account_name) {
from_string = modest_account_mgr_get_from_string (account_mgr,
}
if (from_string && account_name) {
- gchar *name = g_strdup (account_name);
+ gchar *name = account_name;
ModestPair *pair = modest_pair_new ((gpointer) name,
(gpointer) from_string , TRUE);
transports = g_slist_prepend (transports, pair);
cursor = cursor->next;
}
- g_slist_free (accounts);
+ g_slist_free (accounts); /* only free the accounts, not the elements,
+ * because they are used in the pairlist */
return transports;
}
GtkWidget *scroll_area;
GtkWidget *subject_box;
GtkWidget *attachment_icon;
+ GtkWidget *window_box;
priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(obj);
priv->priority_icon = gtk_image_new ();
gtk_box_pack_start (GTK_BOX (subject_box), priv->priority_icon, FALSE, FALSE, 0);
priv->subject_field = gtk_entry_new_with_max_length (SUBJECT_MAX_LENGTH);
- g_object_set (G_OBJECT (priv->subject_field), "hildon-input-mode", HILDON_GTK_INPUT_MODE_FULL, NULL);
+ hildon_gtk_entry_set_input_mode (GTK_ENTRY (priv->subject_field),
+ HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_AUTOCAP);
gtk_box_pack_start (GTK_BOX (subject_box), priv->subject_field, TRUE, TRUE, 0);
priv->add_attachment_button = gtk_button_new ();
GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (priv->add_attachment_button), GTK_CAN_FOCUS);
/* 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",
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_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); */
gchar *body;
ModestMsgEditWindowPrivate *priv;
GtkTextIter iter;
+ TnyHeaderFlags priority_flags;
g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (self));
g_return_if_fail (TNY_IS_MSG (msg));
cc = tny_header_get_cc (header);
bcc = tny_header_get_bcc (header);
subject = tny_header_get_subject (header);
+ priority_flags = tny_header_get_flags (header) & TNY_HEADER_FLAG_PRIORITY;
if (to)
modest_recpt_editor_set_recipients (MODEST_RECPT_EDITOR (priv->to_field), to);
modest_recpt_editor_set_recipients (MODEST_RECPT_EDITOR (priv->bcc_field), bcc);
if (subject)
gtk_entry_set_text (GTK_ENTRY(priv->subject_field), subject);
+ modest_msg_edit_window_set_priority_flags (MODEST_MSG_EDIT_WINDOW(self),
+ priority_flags);
update_window_title (self);
ModestConf *conf;
gboolean prefer_formatted;
gint file_format;
+ ModestPair *account_pair = NULL;
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);
setup_insensitive_handlers (MODEST_MSG_EDIT_WINDOW (obj));
+ account_pair = modest_pair_list_find_by_first_as_string (priv->from_field_protos, account_name);
+ if (account_pair != NULL)
+ modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->from_field), account_pair->first);
+
set_msg (MODEST_MSG_EDIT_WINDOW (obj), msg);
text_buffer_refresh_attributes (WP_TEXT_BUFFER (priv->text_buffer), MODEST_MSG_EDIT_WINDOW (obj));
wp_text_buffer_set_attribute (WP_TEXT_BUFFER (priv->text_buffer), WPT_BOLD, (gpointer) (buffer_format->font));
}
if (buffer_format->cs.bullet) {
- wp_text_buffer_set_attribute (WP_TEXT_BUFFER (priv->text_buffer), WPT_BULLET, (gpointer) (buffer_format->bullet));
+ wp_text_buffer_set_attribute (WP_TEXT_BUFFER (priv->text_buffer), WPT_BULLET, (gpointer) ((int)buffer_format->bullet));
}
/* wp_text_buffer_set_format (WP_TEXT_BUFFER (priv->text_buffer), buffer_format); */
wp_text_buffer_thaw (WP_TEXT_BUFFER (priv->text_buffer));
ModestMsgEditWindowPrivate *priv;
GtkWidget *dialog = NULL;
gint response = 0;
- gchar *uri = NULL, *filename = NULL;
+ GSList *uris = NULL;
+ GSList *uri_node;
priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
dialog = hildon_file_chooser_dialog_new (GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_OPEN);
+ gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), TRUE);
response = gtk_dialog_run (GTK_DIALOG (dialog));
switch (response) {
case GTK_RESPONSE_OK:
- uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+ uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (dialog));
break;
default:
break;
}
gtk_widget_destroy (dialog);
- if (uri) {
-
+ for (uri_node = uris; uri_node != NULL; uri_node = g_slist_next (uri_node)) {
+ const gchar *uri;
GnomeVFSHandle *handle = NULL;
GnomeVFSResult result;
+ uri = (const gchar *) uri_node->data;
result = gnome_vfs_open (&handle, uri, GNOME_VFS_OPEN_READ);
if (result == GNOME_VFS_OK) {
TnyMimePart *mime_part;
TnyStream *stream;
const gchar *mime_type = NULL;
gchar *basename;
+ gchar *filename;
gchar *content_id;
GnomeVFSFileInfo info;
+
+ filename = g_filename_from_uri (uri, NULL, NULL);
if (gnome_vfs_get_file_info_from_handle (handle, &info, GNOME_VFS_FILE_INFO_GET_MIME_TYPE) == GNOME_VFS_OK)
mime_type = gnome_vfs_file_info_get_mime_type (&info);
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);
+
}
- g_free (filename);
}
+ g_slist_foreach (uris, (GFunc) g_free, NULL);
+ g_slist_free (uris);
}
void
modest_msg_edit_window_attach_file_noninteractive (
ModestMsgEditWindow *window,
- gchar *filename)
+ const gchar *file_uri)
{
ModestMsgEditWindowPrivate *priv;
priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
- if (filename) {
- gint file_id;
+ if (file_uri) {
+ gint file_id = 0;
+ /* TODO: We should probably try to use only the URI,
+ * instead of using a filename.
+ */
+ gchar* filename = g_filename_from_uri (file_uri, NULL, NULL);
+ if (!filename) {
+ g_warning("%s: g_filename_from_uri(%s) failed.\n", __FUNCTION__, file_uri);
+ }
+
file_id = g_open (filename, O_RDONLY, 0);
if (file_id != -1) {
TnyMimePart *mime_part;
close (file_id);
g_warning("file to be attached does not exist: %s", filename);
}
+
+ g_free (filename);
}
}
GtkWidget *confirmation_dialog = NULL;
gboolean dialog_response;
GList *node;
+ gchar *message = NULL;
+ const gchar *filename = NULL;
+
if (att_list->next == NULL) {
- gchar *message = g_strdup_printf (_("emev_nc_delete_attachment"),
- tny_mime_part_get_filename (TNY_MIME_PART (att_list->data)));
- confirmation_dialog = hildon_note_new_confirmation (GTK_WINDOW (window), message);
- g_free (message);
+ filename = tny_mime_part_get_filename (TNY_MIME_PART (att_list->data));
} else {
- confirmation_dialog = hildon_note_new_confirmation (GTK_WINDOW (window), _("emev_nc_delete_attachments"));
+ filename = "";
}
+ message = g_strdup_printf (ngettext("emev_nc_delete_attachment", "emev_nc_delete_attachments",
+ att_list->next == NULL), filename);
+ confirmation_dialog = hildon_note_new_confirmation (GTK_WINDOW (window), message);
+ g_free (message);
dialog_response = (gtk_dialog_run (GTK_DIALOG (confirmation_dialog))==GTK_RESPONSE_OK);
gtk_widget_destroy (confirmation_dialog);
if (!dialog_response) {
group = gtk_radio_action_get_group (zoom_radio_action);
if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (group->data))) {
- hildon_banner_show_information (NULL, NULL, _("mcen_ib_max_zoom_level"));
+ hildon_banner_show_information (NULL, NULL, _("ckct_ib_max_zoom_level_reached"));
return FALSE;
}
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (node->next->data), TRUE);
return TRUE;
} else
- hildon_banner_show_information (NULL, NULL, _("mcen_ib_min_zoom_level"));
+ hildon_banner_show_information (NULL, NULL, _("ckct_ib_min_zoom_level_reached"));
break;
}
}
TnyHeaderFlags priority_flags)
{
ModestMsgEditWindowPrivate *priv;
+ ModestWindowPrivate *parent_priv;
g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
+ parent_priv = MODEST_WINDOW_GET_PRIVATE (window);
priority_flags = priority_flags & (TNY_HEADER_FLAG_HIGH_PRIORITY);
if (priv->priority_flags != priority_flags) {
+ GtkAction *priority_action = NULL;
priv->priority_flags = priority_flags;
case TNY_HEADER_FLAG_HIGH_PRIORITY:
gtk_image_set_from_icon_name (GTK_IMAGE (priv->priority_icon), "qgn_list_messaging_high", GTK_ICON_SIZE_MENU);
gtk_widget_show (priv->priority_icon);
+ priority_action = gtk_ui_manager_get_action (parent_priv->ui_manager,
+ "/MenuBar/ToolsMenu/MessagePriorityMenu/MessagePriorityHighMenu");
break;
case TNY_HEADER_FLAG_LOW_PRIORITY:
gtk_image_set_from_icon_name (GTK_IMAGE (priv->priority_icon), "qgn_list_messaging_low", GTK_ICON_SIZE_MENU);
gtk_widget_show (priv->priority_icon);
+ priority_action = gtk_ui_manager_get_action (parent_priv->ui_manager,
+ "/MenuBar/ToolsMenu/MessagePriorityMenu/MessagePriorityLowMenu");
break;
default:
gtk_widget_hide (priv->priority_icon);
+ priority_action = gtk_ui_manager_get_action (parent_priv->ui_manager,
+ "/MenuBar/ToolsMenu/MessagePriorityMenu/MessagePriorityNormalMenu");
break;
}
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (priority_action), TRUE);
+ gtk_text_buffer_set_modified (priv->text_buffer, TRUE);
}
}
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);
+}
+
+