2007-06-03 Christian Kellner <ckellner@openismus.com>
[modest] / src / maemo / modest-msg-edit-window.c
index 5b9f0e0..aca186d 100644 (file)
@@ -87,9 +87,9 @@ static gboolean is_modified (ModestMsgEditWindow *editor);
 
 static void  text_buffer_refresh_attributes (WPTextBuffer *buffer, ModestMsgEditWindow *window);
 static void  text_buffer_delete_range (GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end, gpointer userdata);
-static void  text_buffer_mark_set (GtkTextBuffer *buffer, GtkTextIter *location, GtkTextMark *mark, gpointer userdata);
 static void  text_buffer_can_undo (GtkTextBuffer *buffer, gboolean can_undo, 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  modest_msg_edit_window_color_button_change (ModestMsgEditWindow *window,
                                                         gpointer userdata);
 static void  modest_msg_edit_window_size_change (GtkCheckMenuItem *menu_item,
@@ -115,6 +115,7 @@ static void modest_msg_edit_window_show_toolbar   (ModestWindow *window,
 static void modest_msg_edit_window_clipboard_owner_change (GtkClipboard *clipboard,
                                                           GdkEvent *event,
                                                           ModestMsgEditWindow *window);
+static void update_window_title (ModestMsgEditWindow *window);
 static void update_dimmed (ModestMsgEditWindow *window);
 
 
@@ -306,43 +307,6 @@ get_transports (void)
 
 
 static void
-text_buffer_mark_set (GtkTextBuffer *buffer, GtkTextIter *iter, GtkTextMark *mark, gpointer userdata)
-{
-       ModestMsgEditWindow *window;
-       ModestMsgEditWindowPrivate *priv;
-       GdkRectangle location;
-       gint v_scroll_min_value = 0;
-       gint v_scroll_max_value = 0;
-       gint v_scroll_visible;
-       GtkAdjustment *vadj;
-       GtkTextMark *insert_mark;
-       GtkTextIter insert_iter;
-       
-       g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (userdata));
-       g_return_if_fail (GTK_IS_TEXT_MARK (mark));
-       window = MODEST_MSG_EDIT_WINDOW (userdata);
-       priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
-               
-       insert_mark = gtk_text_buffer_get_insert (GTK_TEXT_BUFFER (priv->text_buffer));
-       gtk_text_buffer_get_iter_at_mark (GTK_TEXT_BUFFER (priv->text_buffer), &insert_iter, insert_mark);
-       gtk_text_view_get_iter_location (GTK_TEXT_VIEW (priv->msg_body), &insert_iter, &location);
-       
-       if (priv->header_box)
-               v_scroll_min_value += priv->header_box->allocation.height + DEFAULT_MAIN_VBOX_SPACING;
-       v_scroll_min_value += location.y;
-       v_scroll_max_value = v_scroll_min_value + location.height;
-       
-       v_scroll_visible = GTK_WIDGET (window)->allocation.height;
-       
-       vadj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->scroll));
-       
-       if (((gdouble) v_scroll_min_value) < vadj->value)
-               gtk_adjustment_set_value (vadj, v_scroll_min_value);
-       else if (((gdouble) v_scroll_max_value) > (vadj->value + vadj->page_size))
-               gtk_adjustment_set_value (vadj, ((gdouble)v_scroll_max_value) - vadj->page_size);
-}
-
-static void
 init_window (ModestMsgEditWindow *obj)
 {
        GtkWidget *from_caption, *to_caption, *subject_caption;
@@ -422,8 +386,6 @@ init_window (ModestMsgEditWindow *obj)
 
        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), "mark-set",
-                         G_CALLBACK (text_buffer_mark_set), obj);
        g_signal_connect (G_OBJECT (priv->text_buffer), "delete-range",
                          G_CALLBACK (text_buffer_delete_range), obj);
        g_signal_connect (G_OBJECT (priv->text_buffer), "can-undo",
@@ -448,6 +410,7 @@ init_window (ModestMsgEditWindow *obj)
        g_signal_connect (G_OBJECT (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->to_field))),
                          "changed", G_CALLBACK (to_field_changed), obj);
        to_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);
 
        priv->scroll = gtk_scrolled_window_new (NULL, NULL);
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scroll), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
@@ -588,11 +551,13 @@ set_msg (ModestMsgEditWindow *self, TnyMsg *msg)
        if (bcc)
                modest_recpt_editor_set_recipients (MODEST_RECPT_EDITOR (priv->bcc_field), bcc);
        if (subject)
-               gtk_entry_set_text (GTK_ENTRY(priv->subject_field), subject);   
+               gtk_entry_set_text (GTK_ENTRY(priv->subject_field), subject);
+
+       update_window_title (self);
 
 /*     gtk_text_buffer_set_can_paste_rich_text (priv->text_buffer, TRUE); */
        wp_text_buffer_reset_buffer (WP_TEXT_BUFFER (priv->text_buffer), TRUE);
-       body = modest_tny_msg_get_body (msg, FALSE);
+       body = modest_tny_msg_get_body (msg, TRUE);
 
        if ((body == NULL)||(body[0] == '\0')) {
                g_free (body);
@@ -710,6 +675,7 @@ modest_msg_edit_window_setup_toolbar (ModestMsgEditWindow *window)
        tool_item = GTK_WIDGET (gtk_tool_item_new ());
        priv->font_color_button = hildon_color_button_new ();
        GTK_WIDGET_UNSET_FLAGS (tool_item, GTK_CAN_FOCUS);
+       GTK_WIDGET_UNSET_FLAGS (priv->font_color_button, GTK_CAN_FOCUS);
        gtk_container_add (GTK_CONTAINER (tool_item), priv->font_color_button);
        gtk_tool_item_set_expand (GTK_TOOL_ITEM (tool_item), TRUE);
        gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (tool_item), TRUE);
@@ -900,7 +866,6 @@ modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name)
 
        restore_settings (MODEST_MSG_EDIT_WINDOW(obj));
                
-       gtk_window_set_title (GTK_WINDOW(obj), "Modest");
        gtk_window_set_icon_from_file (GTK_WINDOW(obj), MODEST_APP_ICON, NULL);
 
        g_signal_connect (G_OBJECT(obj), "delete-event",
@@ -2040,12 +2005,11 @@ modest_msg_edit_window_select_font (ModestMsgEditWindow *window)
                                font_size, DEFAULT_FONT_SIZE);
                        fmt.cs.font_size = TRUE;
                }
-               gtk_widget_destroy (dialog);
-       
-               gtk_widget_grab_focus(GTK_WIDGET(priv->msg_body));
                wp_text_buffer_set_format(WP_TEXT_BUFFER(priv->text_buffer), &fmt);
        }
-
+       gtk_widget_destroy (dialog);
+       
+       gtk_widget_grab_focus(GTK_WIDGET(priv->msg_body));
 }
 
 void
@@ -2215,6 +2179,7 @@ msg_body_focus (GtkWidget *focus,
                GdkEventFocus *event,
                gpointer userdata)
 {
+       
        update_dimmed (MODEST_MSG_EDIT_WINDOW (userdata));
        return FALSE;
 }
@@ -2345,3 +2310,25 @@ modest_msg_edit_window_clipboard_owner_change (GtkClipboard *clipboard,
        action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EditMenu/CopyMenu");
        gtk_action_set_sensitive (action, (selection != NULL) && (!MODEST_IS_ATTACHMENTS_VIEW (focused)));
 }
+
+static void 
+update_window_title (ModestMsgEditWindow *window)
+{
+       ModestMsgEditWindowPrivate *priv = NULL;
+       const gchar *subject;
+
+       priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
+       subject = gtk_entry_get_text (GTK_ENTRY (priv->subject_field));
+       if (subject == NULL || subject[0] == '\0')
+               subject = _("mail_va_new_email");
+
+       gtk_window_set_title (GTK_WINDOW (window), subject);
+
+}
+
+static void  
+subject_field_changed (GtkEditable *editable, 
+                      ModestMsgEditWindow *window)
+{
+       update_window_title (window);
+}