X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-recpt-editor.c;h=11e12328e1ddbfa86dc85cf4bc2c70719e8e20eb;hp=448bebe0e7ba7baf8e8e5a67cec97c09251ab3f5;hb=f6d386ff93e929092ba105385a29d760aeba9ff7;hpb=4d802a02db4815346954f71ca0cb11b51a16ec01 diff --git a/src/widgets/modest-recpt-editor.c b/src/widgets/modest-recpt-editor.c index 448bebe..11e1232 100644 --- a/src/widgets/modest-recpt-editor.c +++ b/src/widgets/modest-recpt-editor.c @@ -44,6 +44,12 @@ #include #include +/* FIXNE: we should have no maemo-deps in widgets/ */ +#ifndef MODEST_TOOLKIT_GTK +#include "maemo/modest-hildon-includes.h" +#endif /*!MODEST_TOOLKIT_GTK*/ + + static GObjectClass *parent_class = NULL; #define RECIPIENT_TAG_ID "recpt-id" @@ -334,8 +340,10 @@ modest_recpt_editor_instance_init (GTypeInstance *instance, gpointer g_class) priv->text_view = gtk_text_view_new (); /* Auto-capitalization is the default, so let's turn it off: */ +#ifdef MAEMO_CHANGES hildon_gtk_text_view_set_input_mode (GTK_TEXT_VIEW (priv->text_view), HILDON_GTK_INPUT_MODE_FULL); +#endif priv->recipients = NULL; @@ -435,7 +443,11 @@ modest_recpt_editor_on_button_release_event (GtkWidget *widget, selection_changed = TRUE; } - gtk_text_buffer_select_range (buffer, &start, &end); + if (selection_changed) { + gtk_text_buffer_select_range (buffer, &start, &end); + } else { + GTK_TEXT_VIEW (priv->text_view)->pending_place_cursor_button = 0; + } return FALSE; } @@ -537,11 +549,19 @@ modest_recpt_editor_on_insert_text (GtkTextBuffer *buffer, GtkTextIter prev; gunichar prev_char; ModestRecptEditorPrivate *priv = MODEST_RECPT_EDITOR_GET_PRIVATE (editor); + + if (len > 1024) + len = 1024; if (!is_valid_insert (text, len)) { gchar *new_text = create_valid_text (text, len); g_signal_stop_emission_by_name (G_OBJECT (buffer), "insert-text"); + g_signal_handlers_block_by_func (buffer, modest_recpt_editor_on_insert_text, + editor); gtk_text_buffer_insert (buffer, location, new_text, -1); + g_signal_handlers_unblock_by_func (buffer, + modest_recpt_editor_on_insert_text, + editor); g_free (new_text); return; } @@ -676,12 +696,14 @@ modest_recpt_editor_on_key_press_event (GtkTextView *text_view, ModestRecptEditor *editor) { GtkTextMark *insert; + GtkTextMark *selection; GtkTextBuffer * buffer; - GtkTextIter location; + GtkTextIter location, selection_loc; GtkTextTag *tag; buffer = gtk_text_view_get_buffer (text_view); insert = gtk_text_buffer_get_insert (buffer); + selection = gtk_text_buffer_get_selection_bound (buffer); /* cases to cover: * * cursor is on resolved recipient: @@ -703,6 +725,7 @@ modest_recpt_editor_on_key_press_event (GtkTextView *text_view, */ gtk_text_buffer_get_iter_at_mark (buffer, &location, insert); + gtk_text_buffer_get_iter_at_mark (buffer, &selection_loc, selection); switch (key->keyval) { case GDK_Left: @@ -772,7 +795,12 @@ modest_recpt_editor_on_key_press_event (GtkTextView *text_view, case GDK_Return: case GDK_KP_Enter: { + gint insert_offset, selection_offset; + insert_offset = gtk_text_iter_get_offset (&location); + selection_offset = gtk_text_iter_get_offset (&selection_loc); g_signal_handlers_block_by_func (buffer, modest_recpt_editor_on_insert_text, editor); + if (selection_offset > insert_offset) + location = selection_loc; tag = iter_has_recipient (&location); if (tag != NULL) { gtk_text_buffer_get_end_iter (buffer, &location);