2006-02-22 [wwp] 2.0.0cvs70
[claws.git] / src / compose.c
index 3dd00b0d641faa6439791ebb42f261cc7410b69b..41f373dc1516655b138d40c755ea6fb433641c6d 100644 (file)
 #include "foldersel.h"
 #include "toolbar.h"
 #include "inc.h"
+#include "message_search.h"
+
 enum
 {
        COL_MIMETYPE = 0,
@@ -270,10 +272,12 @@ static gint compose_remove_reedit_target  (Compose        *compose,
 void compose_remove_draft                      (Compose        *compose);
 static gint compose_queue                      (Compose        *compose,
                                                 gint           *msgnum,
-                                                FolderItem     **item);
+                                                FolderItem     **item,
+                                                gchar          **msgpath);
 static gint compose_queue_sub                  (Compose        *compose,
                                                 gint           *msgnum,
                                                 FolderItem     **item,
+                                                gchar          **msgpath,
                                                 gboolean       check_subject);
 static void compose_add_attachments            (Compose        *compose,
                                                 MimeInfo       *parent);
@@ -408,6 +412,9 @@ static void compose_changed_cb              (GtkTextBuffer  *textbuf,
 static void compose_wrap_cb            (gpointer        data,
                                         guint           action,
                                         GtkWidget      *widget);
+static void compose_find_cb            (gpointer        data,
+                                        guint           action,
+                                        GtkWidget      *widget);
 static void compose_toggle_autowrap_cb (gpointer        data,
                                         guint           action,
                                         GtkWidget      *widget);
@@ -542,12 +549,12 @@ static GtkItemFactoryEntry compose_entries[] =
        {N_("/_Edit/Select _all"),      "<control>A", compose_allsel_cb, 0, NULL},
        {N_("/_Edit/A_dvanced"),        NULL, NULL, 0, "<Branch>"},
        {N_("/_Edit/A_dvanced/Move a character backward"),
-                                       "<control>B",
+                                       "<shift><control>B",
                                        compose_advanced_action_cb,
                                        COMPOSE_CALL_ADVANCED_ACTION_MOVE_BACKWARD_CHARACTER,
                                        NULL},
        {N_("/_Edit/A_dvanced/Move a character forward"),
-                                       "<control>F",
+                                       "<shift><control>F",
                                        compose_advanced_action_cb,
                                        COMPOSE_CALL_ADVANCED_ACTION_MOVE_FORWARD_CHARACTER,
                                        NULL},
@@ -617,6 +624,9 @@ static GtkItemFactoryEntry compose_entries[] =
                                        COMPOSE_CALL_ADVANCED_ACTION_DELETE_TO_LINE_END,
                                        NULL},
        {N_("/_Edit/---"),              NULL, NULL, 0, "<Separator>"},
+       {N_("/_Edit/_Find"),
+                                       "<control>F", compose_find_cb, 0, NULL},
+       {N_("/_Edit/---"),                      NULL, NULL, 0, "<Separator>"},
        {N_("/_Edit/_Wrap current paragraph"),
                                        "<control>L", compose_wrap_cb, 0, NULL},
        {N_("/_Edit/Wrap all long _lines"),
@@ -1745,10 +1755,14 @@ Compose *compose_redirect(PrefsAccount *account, MsgInfo *msginfo)
        gtk_widget_set_sensitive(compose->toolbar->draft_btn, FALSE);
        gtk_widget_set_sensitive(compose->toolbar->insert_btn, FALSE);
        gtk_widget_set_sensitive(compose->toolbar->attach_btn, FALSE);
-       gtk_widget_set_sensitive(compose->toolbar->sig_btn, FALSE);
-       gtk_widget_set_sensitive(compose->toolbar->exteditor_btn, FALSE);
-       gtk_widget_set_sensitive(compose->toolbar->linewrap_current_btn, FALSE);
-       gtk_widget_set_sensitive(compose->toolbar->linewrap_all_btn, FALSE);
+       if (compose->toolbar->sig_btn)
+               gtk_widget_set_sensitive(compose->toolbar->sig_btn, FALSE);
+       if (compose->toolbar->exteditor_btn)
+               gtk_widget_set_sensitive(compose->toolbar->exteditor_btn, FALSE);
+       if (compose->toolbar->linewrap_current_btn)
+               gtk_widget_set_sensitive(compose->toolbar->linewrap_current_btn, FALSE);
+       if (compose->toolbar->linewrap_all_btn)
+               gtk_widget_set_sensitive(compose->toolbar->linewrap_all_btn, FALSE);
 
        compose->modified = FALSE;
        compose_set_title(compose);
@@ -3762,7 +3776,7 @@ gint compose_send(Compose *compose)
        gint msgnum;
        FolderItem *folder;
        gint val = -1;
-       gchar *msgpath;
+       gchar *msgpath = NULL;
 
        compose_allow_user_actions (compose, FALSE);
        compose->sending = TRUE;
@@ -3770,7 +3784,7 @@ gint compose_send(Compose *compose)
        if (compose_check_entries(compose, TRUE) == FALSE)
                goto bail;
 
-       val = compose_queue(compose, &msgnum, &folder);
+       val = compose_queue(compose, &msgnum, &folder, &msgpath);
 
        if (val) {
                if (val == -4) {
@@ -3808,10 +3822,15 @@ gint compose_send(Compose *compose)
                return 0;
        }
        
-       msgpath = folder_item_fetch_msg(folder, msgnum);
-       val = procmsg_send_message_queue(msgpath);
-       g_free(msgpath);
-
+       if (msgpath == NULL) {
+               msgpath = folder_item_fetch_msg(folder, msgnum);
+               val = procmsg_send_message_queue(msgpath);
+               g_free(msgpath);
+       } else {
+               val = procmsg_send_message_queue(msgpath);
+               g_unlink(msgpath);
+               g_free(msgpath);
+       }
        if (prefs_common.send_dialog_mode == SEND_DIALOG_ALWAYS) {
                compose->sending = FALSE;
                compose_allow_user_actions (compose, TRUE);
@@ -4338,11 +4357,11 @@ void compose_remove_draft(Compose *compose)
 
 }
 
-static gint compose_queue(Compose *compose, gint *msgnum, FolderItem **item)
+static gint compose_queue(Compose *compose, gint *msgnum, FolderItem **item, gchar **msgpath)
 {
-       return compose_queue_sub (compose, msgnum, item, FALSE);
+       return compose_queue_sub (compose, msgnum, item, msgpath, FALSE);
 }
-static gint compose_queue_sub(Compose *compose, gint *msgnum, FolderItem **item, gboolean check_subject)
+static gint compose_queue_sub(Compose *compose, gint *msgnum, FolderItem **item, gchar **msgpath, gboolean check_subject)
 {
        FolderItem *queue;
        gchar *tmp;
@@ -4536,14 +4555,18 @@ static gint compose_queue_sub(Compose *compose, gint *msgnum, FolderItem **item,
                return -1;
        }
        folder_item_scan(queue);
-       if ((num = folder_item_add_msg(queue, tmp, NULL, TRUE)) < 0) {
+       if ((num = folder_item_add_msg(queue, tmp, NULL, FALSE)) < 0) {
                g_warning("can't queue the message\n");
                g_unlink(tmp);
                g_free(tmp);
                return -1;
        }
-       g_unlink(tmp);
-       g_free(tmp);
+       
+       if (msgpath == NULL) {
+               g_unlink(tmp);
+               g_free(tmp);
+       } else
+               *msgpath = tmp;
 
        if (compose->mode == COMPOSE_REEDIT) {
                compose_remove_reedit_target(compose, FALSE);
@@ -5472,11 +5495,17 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode)
        gtk_widget_show(notebook);
 
        /* header labels and entries */
-       gtk_notebook_append_page(GTK_NOTEBOOK(notebook), compose_create_header(compose), gtk_label_new(_("Header")));
+       gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+                       compose_create_header(compose),
+                       gtk_label_new_with_mnemonic(_("Hea_der")));
        /* attachment list */
-       gtk_notebook_append_page(GTK_NOTEBOOK(notebook), compose_create_attach(compose), gtk_label_new(_("Attachments")));
+       gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+                       compose_create_attach(compose),
+                       gtk_label_new_with_mnemonic(_("_Attachments")));
        /* Others Tab */
-       gtk_notebook_append_page(GTK_NOTEBOOK(notebook), compose_create_others(compose), gtk_label_new(_("Others")));
+       gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+                       compose_create_others(compose),
+                       gtk_label_new_with_mnemonic(_("Othe_rs")));
 
        /* Subject */
        subject_hbox = gtk_hbox_new(FALSE, 0);
@@ -5683,6 +5712,7 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode)
                                                  conv_get_locale_charset_str(),
                                                  prefs_common.misspelled_col,
                                                  prefs_common.check_while_typing,
+                                                 prefs_common.recheck_when_changing_dict,
                                                  prefs_common.use_alternate,
                                                  GTK_TEXT_VIEW(text),
                                                  GTK_WINDOW(compose->window));
@@ -6870,10 +6900,14 @@ static void compose_set_ext_editor_sensitive(Compose *compose,
        gtk_widget_set_sensitive(compose->toolbar->sendl_btn,     sensitive);
        gtk_widget_set_sensitive(compose->toolbar->draft_btn,     sensitive);
        gtk_widget_set_sensitive(compose->toolbar->insert_btn,    sensitive);
-       gtk_widget_set_sensitive(compose->toolbar->sig_btn,       sensitive);
-       gtk_widget_set_sensitive(compose->toolbar->exteditor_btn, sensitive);
-       gtk_widget_set_sensitive(compose->toolbar->linewrap_current_btn,  sensitive);
-       gtk_widget_set_sensitive(compose->toolbar->linewrap_all_btn,  sensitive);
+       if (compose->toolbar->sig_btn)
+               gtk_widget_set_sensitive(compose->toolbar->sig_btn,   ensitive);
+       if (compose->toolbar->exteditor_btn)
+               gtk_widget_set_sensitive(compose->toolbar->exteditor_btn, sensitive);
+       if (compose->toolbar->linewrap_current_btn)
+               gtk_widget_set_sensitive(compose->toolbar->linewrap_current_btn, sensitive);
+       if (compose->toolbar->linewrap_all_btn)
+               gtk_widget_set_sensitive(compose->toolbar->linewrap_all_btn, sensitive);
 }
 #endif /* G_OS_UNIX */
 
@@ -7090,7 +7124,7 @@ static void compose_send_later_cb(gpointer data, guint action,
        Compose *compose = (Compose *)data;
        gint val;
 
-       val = compose_queue_sub(compose, NULL, NULL, TRUE);
+       val = compose_queue_sub(compose, NULL, NULL, NULL, TRUE);
        if (!val) 
                compose_close(compose);
        else if (val == -2) {
@@ -7925,6 +7959,13 @@ static void compose_wrap_cb(gpointer data, guint action, GtkWidget *widget)
                compose_beautify_paragraph(compose, NULL, TRUE);
 }
 
+static void compose_find_cb(gpointer data, guint action, GtkWidget *widget)
+{
+       Compose *compose = (Compose *)data;
+
+       message_search_compose(compose);
+}
+
 static void compose_toggle_autowrap_cb(gpointer data, guint action,
                                       GtkWidget *widget)
 {
@@ -8425,6 +8466,29 @@ void compose_reply_from_messageview(MessageView *msgview, GSList *msginfo_list,
        g_free(body);
 }
 
+void compose_set_position(Compose *compose, gint pos)
+{
+       GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+
+       gtkut_text_view_set_position(text, pos);
+}
+
+gboolean compose_search_string(Compose *compose,
+                               const gchar *str, gboolean case_sens)
+{
+       GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+
+       return gtkut_text_view_search_string(text, str, case_sens);
+}
+
+gboolean compose_search_string_backward(Compose *compose,
+                               const gchar *str, gboolean case_sens)
+{
+       GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+
+       return gtkut_text_view_search_string_backward(text, str, case_sens);
+}
+
 /*
  * End of Source.
  */