* src/maemo/modest-msg-edit-window.c:
[modest] / src / maemo / modest-msg-edit-window.c
index 288e9b1..591a8fa 100644 (file)
@@ -104,6 +104,11 @@ static void  text_buffer_can_redo (GtkTextBuffer *buffer, gboolean can_redo, Mod
 static void  text_buffer_apply_tag (GtkTextBuffer *buffer, GtkTextTag *tag, 
                                    GtkTextIter *start, GtkTextIter *end,
                                    gpointer userdata);
+static void  text_buffer_insert_text (GtkTextBuffer *buffer,
+                                     GtkTextIter *location,
+                                     gchar *text,
+                                     gint len,
+                                     ModestMsgEditWindow *window);
 static void  text_buffer_delete_images_by_id (GtkTextBuffer *buffer, const gchar * image_id);
 static void  subject_field_changed (GtkEditable *editable, ModestMsgEditWindow *window);
 static void  subject_field_insert_text (GtkEditable *editable, 
@@ -523,6 +528,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 (text_buffer_insert_text), obj);
        g_signal_connect (G_OBJECT (obj), "window-state-event",
                          G_CALLBACK (modest_msg_edit_window_window_state_event),
                          NULL);
@@ -1062,6 +1069,7 @@ set_msg (ModestMsgEditWindow *self, TnyMsg *msg, gboolean preserve_is_rich)
        modest_msg_edit_window_reset_modified (self);
 
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (self));
+       modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (self));
        text_buffer_can_undo (priv->text_buffer, FALSE, self);
        text_buffer_can_redo (priv->text_buffer, FALSE, self);
 
@@ -1359,7 +1367,8 @@ modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name, gboolean pre
 
        text_buffer_refresh_attributes (WP_TEXT_BUFFER (priv->text_buffer), MODEST_MSG_EDIT_WINDOW (obj));
 
-        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (obj));
+       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (obj));
+       modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (obj));
        modest_window_check_dimming_rules_group (MODEST_WINDOW (obj), MODEST_DIMMING_RULES_CLIPBOARD);
        priv->update_caption_visibility = TRUE;
 
@@ -2653,6 +2662,7 @@ modest_msg_edit_window_undo (ModestMsgEditWindow *window)
        wp_text_buffer_undo (WP_TEXT_BUFFER (priv->text_buffer));
 
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+       modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
 
 }
 
@@ -2667,6 +2677,7 @@ modest_msg_edit_window_redo (ModestMsgEditWindow *window)
        wp_text_buffer_redo (WP_TEXT_BUFFER (priv->text_buffer));
 
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+       modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
 
 }
 
@@ -2763,6 +2774,7 @@ msg_body_focus (GtkWidget *focus,
 {
        
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (userdata));
+       modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (userdata));
        modest_window_check_dimming_rules_group (MODEST_WINDOW (userdata), MODEST_DIMMING_RULES_CLIPBOARD);
        return FALSE;
 }
@@ -2772,12 +2784,14 @@ recpt_field_changed (GtkTextBuffer *buffer,
                  ModestMsgEditWindow *editor)
 {
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (editor));
+       modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (editor));
 }
 
 static void
 body_changed (GtkTextBuffer *buffer, ModestMsgEditWindow *editor)
 {
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (editor));
+       modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (editor));
 }
 
 void
@@ -2928,6 +2942,7 @@ subject_field_changed (GtkEditable *editable,
        update_window_title (window);
        gtk_text_buffer_set_modified (priv->text_buffer, TRUE);
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+       modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
 }
 
 static void  
@@ -2980,6 +2995,48 @@ subject_field_insert_text (GtkEditable *editable,
        g_string_free (result, TRUE);
 }
 
+static void  
+text_buffer_insert_text (GtkTextBuffer *buffer, 
+                        GtkTextIter *iter,
+                        gchar *new_text,
+                        gint new_text_length,
+                        ModestMsgEditWindow *window)
+{
+       GString *result = g_string_new ("");
+       gchar *current;
+       gint result_len = 0;
+       gboolean changed = FALSE;
+
+       for (current = new_text; current != NULL && *current != '\0'; current = g_utf8_next_char (current)) {
+               gunichar c = g_utf8_get_char_validated (current, 8);
+               /* Invalid unichar, stop */
+               if (c == -1)
+                       break;
+               /* a bullet */
+               switch (c) {
+               case 0x2022:
+                       result = g_string_append_c (result, ' ');
+                       changed = TRUE;
+                       break;
+               default:
+                       result = g_string_append_unichar (result, c);
+               }
+               result_len++;
+       }
+
+       if (changed) {
+               g_signal_stop_emission_by_name (G_OBJECT (buffer), "insert-text");
+               g_signal_handlers_block_by_func(G_OBJECT(buffer), G_CALLBACK(text_buffer_insert_text), window);
+               g_signal_emit_by_name (buffer, "insert-text", 
+                                      (gpointer) iter,
+                                      (gpointer) result->str, (gpointer) result->len,
+                                      (gpointer) window);
+               g_signal_handlers_unblock_by_func(G_OBJECT(buffer), G_CALLBACK(text_buffer_insert_text), window);
+       }
+
+       g_string_free (result, TRUE);
+}
+
 void
 modest_msg_edit_window_toggle_find_toolbar (ModestMsgEditWindow *window,
                                            gboolean show)