Fixes NB#111359, properly use the logical id for device memory full
[modest] / src / hildon2 / modest-msg-edit-window.c
index c7add0e..d1e66b1 100644 (file)
@@ -92,6 +92,8 @@
 #define IMAGE_MAX_WIDTH 560
 #define DEFAULT_FONT_SCALE 1.5
 #define ATTACHMENT_BUTTON_WIDTH 118
+#define MAX_FROM_VALUE 48
+#define MAX_BODY_LENGTH 4096
 
 static gboolean is_wp_text_buffer_started = FALSE;
 
@@ -110,6 +112,11 @@ static void  text_buffer_apply_tag (GtkTextBuffer *buffer, GtkTextTag *tag,
                                    GtkTextIter *start, GtkTextIter *end,
                                    gpointer userdata);
 static void  text_buffer_delete_images_by_id (GtkTextBuffer *buffer, const gchar * image_id);
+static void  body_insert_text (GtkTextBuffer *buffer, 
+                                     GtkTextIter *location,
+                                     gchar *text,
+                                     gint len,
+                                     ModestMsgEditWindow *window);
 static void  subject_field_changed (GtkEditable *editable, ModestMsgEditWindow *window);
 static void  subject_field_insert_text (GtkEditable *editable, 
                                        gchar *new_text,
@@ -712,6 +719,8 @@ connect_signals (ModestMsgEditWindow *obj)
                          G_CALLBACK (text_buffer_can_redo), obj);
        g_signal_connect (G_OBJECT (priv->text_buffer), "changed",
                           G_CALLBACK (body_changed), obj);
+       g_signal_connect (G_OBJECT (priv->text_buffer), "insert-text", 
+                         G_CALLBACK (body_insert_text), obj);
        g_signal_connect (G_OBJECT (priv->text_buffer), "modified-changed",
                           G_CALLBACK (body_changed), obj);
        g_signal_connect (G_OBJECT (priv->text_buffer), "end-user-action",
@@ -858,6 +867,7 @@ init_window (ModestMsgEditWindow *obj)
        priv->from_field    = modest_selector_picker_new (MODEST_EDITABLE_SIZE,
                                                          HILDON_BUTTON_ARRANGEMENT_HORIZONTAL,
                                                          NULL, g_str_equal);
+       modest_selector_picker_set_value_max_chars (MODEST_SELECTOR_PICKER (priv->from_field), MAX_FROM_VALUE);
        modest_maemo_utils_set_hbutton_layout (title_size_group, value_size_group, 
                                               _("mail_va_from"), priv->from_field);
 
@@ -947,6 +957,8 @@ init_window (ModestMsgEditWindow *obj)
 /*     g_signal_connect (G_OBJECT (obj), "key_pressed", G_CALLBACK (on_key_pressed), NULL) */
 
        priv->pannable = hildon_pannable_area_new ();
+
+       g_object_set (G_OBJECT (priv->pannable), "hscrollbar-policy", GTK_POLICY_NEVER, NULL);
        
        main_vbox = gtk_vbox_new  (FALSE, DEFAULT_MAIN_VBOX_SPACING);
        window_align = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
@@ -3490,6 +3502,43 @@ update_window_title (ModestMsgEditWindow *window)
 
 }
 
+
+static void  
+body_insert_text (GtkTextBuffer *buffer, 
+                 GtkTextIter *location,
+                 gchar *text,
+                 gint len,
+                 ModestMsgEditWindow *window)
+{
+       GtkTextIter end_iter;
+       gint offset;
+
+       gtk_text_buffer_get_end_iter (GTK_TEXT_BUFFER (buffer), &end_iter);
+
+       offset = gtk_text_iter_get_offset (&end_iter);
+
+       if (offset + len > MAX_BODY_LENGTH) {
+               g_signal_stop_emission_by_name (G_OBJECT (buffer), "insert-text");
+               if (offset < MAX_BODY_LENGTH)
+               {
+                       gchar *result;
+
+                       /* Prevent endless recursion */
+                       result = g_strndup (text, MAX_BODY_LENGTH - offset);
+                       g_signal_handlers_block_by_func (G_OBJECT (buffer), G_CALLBACK (body_insert_text), window);
+                       g_signal_emit_by_name (G_OBJECT (buffer), "insert-text", location,
+                                              (gpointer) result, (gpointer) MAX_BODY_LENGTH - offset,
+                                              (gpointer) window);
+                       g_signal_handlers_unblock_by_func (G_OBJECT (buffer), G_CALLBACK (body_insert_text), window);
+               }
+
+       }
+       if (offset + len > MAX_BODY_LENGTH) {
+               hildon_banner_show_information (GTK_WIDGET (window), NULL, 
+                                               _CS("ckdg_ib_maximum_characters_reached"));
+       }
+}
+
 static void  
 subject_field_changed (GtkEditable *editable, 
                       ModestMsgEditWindow *window)
@@ -3500,7 +3549,6 @@ subject_field_changed (GtkEditable *editable,
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
        modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
 }
-
 static void  
 subject_field_insert_text (GtkEditable *editable, 
                           gchar *new_text,
@@ -4180,6 +4228,9 @@ setup_menu (ModestMsgEditWindow *self)
                                                  NULL);
        g_signal_connect (G_OBJECT (priv->cc_button), "toggled",
                          G_CALLBACK (on_cc_button_toggled), (gpointer) self);
+       gtk_button_set_alignment (GTK_BUTTON (priv->cc_button), 0.5, 0.5);
+       gtk_button_set_alignment (GTK_BUTTON (priv->cc_button), 0.5, 0.5);
+
        priv->bcc_button = hildon_check_button_new (0);
        gtk_button_set_label (GTK_BUTTON (priv->bcc_button), _("mcen_me_editor_showbcc"));
        hildon_check_button_set_active (HILDON_CHECK_BUTTON (priv->bcc_button),
@@ -4188,6 +4239,8 @@ setup_menu (ModestMsgEditWindow *self)
                                                  NULL);
        g_signal_connect (G_OBJECT (priv->bcc_button), "toggled",
                          G_CALLBACK (on_bcc_button_toggled), (gpointer) self);
+       gtk_button_set_alignment (GTK_BUTTON (priv->bcc_button), 0.5, 0.5);
+       gtk_button_set_alignment (GTK_BUTTON (priv->bcc_button), 0.5, 0.5);
 
        modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_editor_attach_inlineimage"), NULL,
                                           APP_MENU_CALLBACK (modest_ui_actions_on_insert_image),