* Changes in the autotools stuff affecting a lot of platform dependent
[modest] / src / widgets / modest-recpt-editor.c
index 87aaf6d..11e1232 100644 (file)
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtk.h>
 
+/* 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"
@@ -333,9 +339,15 @@ modest_recpt_editor_instance_init (GTypeInstance *instance, gpointer g_class)
        gtk_container_add (GTK_CONTAINER (priv->abook_button), abook_icon);
 
        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;
 
-       priv->scrolled_window = modest_scroll_text_new (GTK_TEXT_VIEW (priv->text_view), 5);
+       priv->scrolled_window = modest_scroll_text_new (GTK_TEXT_VIEW (priv->text_view), 1024);
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_window), GTK_POLICY_NEVER,
                                        GTK_POLICY_AUTOMATIC);
        gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (priv->scrolled_window), GTK_SHADOW_IN);
@@ -431,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;
 }
@@ -533,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;
        }
@@ -672,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:
@@ -699,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:
@@ -768,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);
@@ -847,6 +879,17 @@ modest_recpt_editor_grab_focus (ModestRecptEditor *recpt_editor)
        gtk_widget_grab_focus (priv->text_view);
 }
 
+gboolean
+modest_recpt_editor_has_focus (ModestRecptEditor *recpt_editor)
+{
+       ModestRecptEditorPrivate *priv;
+       
+       g_return_val_if_fail (MODEST_IS_RECPT_EDITOR (recpt_editor), FALSE);
+       priv = MODEST_RECPT_EDITOR_GET_PRIVATE (recpt_editor);
+
+       return gtk_widget_is_focus (priv->text_view);
+}
+
 static void
 modest_recpt_editor_finalize (GObject *object)
 {