2006-02-15 [wwp] 2.0.0cvs55
authorTristan Chabredier <wwp@claws-mail.org>
Wed, 15 Feb 2006 15:21:49 +0000 (15:21 +0000)
committerTristan Chabredier <wwp@claws-mail.org>
Wed, 15 Feb 2006 15:21:49 +0000 (15:21 +0000)
* src/compose.c
* src/compose.h
* src/message_search.c
* src/message_search.h
* src/textview.c
* src/gtk/gtkutils.c
* src/gtk/gtkutils.h
added the ability to Find text in the compose window (and a bit
of code factorization).

ChangeLog
PATCHSETS
configure.ac
src/compose.c
src/compose.h
src/gtk/gtkutils.c
src/gtk/gtkutils.h
src/message_search.c
src/message_search.h
src/textview.c

index a961d3fa581c78359fb2128ff301f79128e71906..997e9702f7bac4e38cdbe473acbc9e6266a14f23 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2006-02-15 [wwp]       2.0.0cvs55
+
+       * src/compose.c
+       * src/compose.h
+       * src/message_search.c
+       * src/message_search.h
+       * src/textview.c
+       * src/gtk/gtkutils.c
+       * src/gtk/gtkutils.h
+               added the ability to Find text in the compose window (and a bit
+               of code factorization).
+
 2006-02-15 [wwp]       2.0.0cvs54
 
        * src/prefs_gtk.c
index 0411f6fe13b31e6dcc5bbaa4ad0cf11f83ced3be..9e1d4b2c2c8054d51ace95bdccb52e2e39fa6d0f 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.15.2.22 -r 1.15.2.23 src/summary_search.c;  ) > 2.0.0cvs52.patchset
 ( cvs diff -u -r 1.5.2.7 -r 1.5.2.8 src/prefs_gtk.h;  ) > 2.0.0cvs53.patchset
 ( cvs diff -u -r 1.10.2.16 -r 1.10.2.17 src/prefs_gtk.c;  ) > 2.0.0cvs54.patchset
+( cvs diff -u -r 1.382.2.240 -r 1.382.2.241 src/compose.c;  cvs diff -u -r 1.50.2.20 -r 1.50.2.21 src/compose.h;  cvs diff -u -r 1.3.12.13 -r 1.3.12.14 src/message_search.c;  cvs diff -u -r 1.1.16.2 -r 1.1.16.3 src/message_search.h;  cvs diff -u -r 1.96.2.96 -r 1.96.2.97 src/textview.c;  cvs diff -u -r 1.5.2.20 -r 1.5.2.21 src/gtk/gtkutils.c;  cvs diff -u -r 1.4.2.17 -r 1.4.2.18 src/gtk/gtkutils.h;  ) > 2.0.0cvs55.patchset
index 90c939d3c2bb1621d18495bbc839b6b66e714257..2f89d33662113f05261b64c94685704d6a72fd59 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=0
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=54
+EXTRA_VERSION=55
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index b53f4a1ec26df53b1d1e3b124e26bbc06a47118d..1e9a886c8aed357a4f4e56dd0aef7c3f75ef5db0 100644 (file)
 #include "foldersel.h"
 #include "toolbar.h"
 #include "inc.h"
+#include "message_search.h"
+
 enum
 {
        COL_MIMETYPE = 0,
@@ -408,6 +410,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 +547,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 +622,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"),
@@ -7931,6 +7939,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)
 {
@@ -8431,6 +8446,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.
  */
index 83dbbe3db470f4072f7b541130d4402bd035f3ff..1c9dd883680c05971ce67fa6fc59b4dc4b4e22ed 100644 (file)
@@ -36,6 +36,7 @@ typedef struct _AttachInfo    AttachInfo;
 #include "messageview.h"
 #include "codeconv.h"
 #include "template.h"
+#include "textview.h"
 
 #ifdef USE_ASPELL
 #include "gtkaspell.h"
@@ -299,4 +300,13 @@ void compose_reply_from_messageview        (MessageView    *msgview,
                                         guint           action);
 void compose_action_cb                 (void           *data);
 
+void compose_set_position                              (Compose        *compose,
+                                                gint            pos);
+gboolean compose_search_string                 (Compose        *compose,
+                                                const gchar    *str,
+                                                gboolean        case_sens);
+gboolean compose_search_string_backward        (Compose        *compose,
+                                                const gchar    *str,
+                                                gboolean        case_sens);
+
 #endif /* __COMPOSE_H__ */
index cbd81c7cd0426471b9db1e7e9af905224b92a726..8e5afa59cf0db138d827528b7da47a31bbb7881c 100644 (file)
@@ -590,6 +590,86 @@ gchar *gtkut_text_view_get_selection(GtkTextView *textview)
                return NULL;
 }
 
+
+void gtkut_text_view_set_position(GtkTextView *text, gint pos)
+{
+       GtkTextBuffer *buffer;
+       GtkTextIter iter;
+
+       g_return_val_if_fail(text != NULL, FALSE);
+
+       buffer = gtk_text_view_get_buffer(text);
+
+       gtk_text_buffer_get_iter_at_offset(buffer, &iter, pos);
+       gtk_text_buffer_place_cursor(buffer, &iter);
+       gtk_text_view_scroll_to_iter(text, &iter, 0.0, FALSE, 0.0, 0.0);
+}
+
+gboolean gtkut_text_view_search_string(GtkTextView *text, const gchar *str,
+                                       gboolean case_sens)
+{
+       GtkTextBuffer *buffer;
+       GtkTextIter iter, match_pos;
+       GtkTextMark *mark;
+       gint len;
+
+       g_return_val_if_fail(text != NULL, FALSE);
+       g_return_val_if_fail(str != NULL, FALSE);
+
+       buffer = gtk_text_view_get_buffer(text);
+
+       len = g_utf8_strlen(str, -1);
+       g_return_val_if_fail(len >= 0, FALSE);
+
+       mark = gtk_text_buffer_get_insert(buffer);
+       gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
+
+       if (gtkut_text_buffer_find(buffer, &iter, str, case_sens,
+                                  &match_pos)) {
+               GtkTextIter end = match_pos;
+
+               gtk_text_iter_forward_chars(&end, len);
+               /* place "insert" at the last character */
+               gtk_text_buffer_select_range(buffer, &end, &match_pos);
+               gtk_text_view_scroll_to_mark(text, mark, 0.0, FALSE, 0.0, 0.0);
+               return TRUE;
+       }
+
+       return FALSE;
+}
+
+gboolean gtkut_text_view_search_string_backward(GtkTextView *text, const gchar *str,
+                                       gboolean case_sens)
+{
+       GtkTextBuffer *buffer;
+       GtkTextIter iter, match_pos;
+       GtkTextMark *mark;
+       gint len;
+
+       g_return_val_if_fail(text != NULL, FALSE);
+       g_return_val_if_fail(str != NULL, FALSE);
+
+       buffer = gtk_text_view_get_buffer(text);
+
+       len = g_utf8_strlen(str, -1);
+       g_return_val_if_fail(len >= 0, FALSE);
+
+       mark = gtk_text_buffer_get_insert(buffer);
+       gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
+
+       if (gtkut_text_buffer_find_backward(buffer, &iter, str, case_sens,
+                                           &match_pos)) {
+               GtkTextIter end = match_pos;
+
+               gtk_text_iter_forward_chars(&end, len);
+               gtk_text_buffer_select_range(buffer, &match_pos, &end);
+               gtk_text_view_scroll_to_mark(text, mark, 0.0, FALSE, 0.0, 0.0);
+               return TRUE;
+       }
+
+       return FALSE;
+}
+
 void gtkut_window_popup(GtkWidget *window)
 {
        gint x, y, sx, sy, new_x, new_y;
index fe10d2d85714064eb447005e3a252cbee8074e8a..c4014975e898d6f4f8f6ee37f75e715a2c57adfc 100644 (file)
@@ -160,6 +160,12 @@ gboolean gtkut_text_buffer_find_backward(GtkTextBuffer             *buffer,
                                         GtkTextIter            *match_pos);
 
 gchar *gtkut_text_view_get_selection   (GtkTextView    *textview);
+void gtkut_text_view_set_position              (GtkTextView *text, gint pos);
+gboolean gtkut_text_view_search_string (GtkTextView *text, const gchar *str,
+                                       gboolean case_sens);
+gboolean gtkut_text_view_search_string_backward        (GtkTextView *text, const gchar *str,
+                                       gboolean case_sens);
+
 GtkWidget *label_window_create(const gchar *str);
 void gtkut_window_popup                        (GtkWidget      *window);
 
@@ -195,4 +201,5 @@ gboolean get_tag_range(GtkTextIter *iter,
                                       GtkTextIter *end_iter);
 
 GtkWidget *face_get_from_header(const gchar *o_face);
+
 #endif /* __GTKUTILS_H__ */
index 8dc1cc2faa5cc71ecc022cea105506b9d5ee8289..e46b622f1d9923bfef782f811e607a7a19cbc931 100644 (file)
@@ -44,6 +44,7 @@
 #include "main.h"
 #include "message_search.h"
 #include "messageview.h"
+#include "compose.h"
 #include "utils.h"
 #include "gtkutils.h"
 #include "manage_window.h"
@@ -58,6 +59,9 @@ static struct MessageSearchWindow {
        GtkWidget *close_btn;
 
        MessageView *messageview;
+
+       Compose *compose;
+       gboolean search_compose;
 } search_window;
 
 static void message_search_create      (void);
@@ -80,6 +84,22 @@ void message_search(MessageView *messageview)
                gtk_widget_hide(search_window.window);
 
        search_window.messageview = messageview;
+       search_window.search_compose = FALSE;
+
+       gtk_widget_grab_focus(search_window.next_btn);
+       gtk_widget_grab_focus(search_window.body_entry);
+       gtk_widget_show(search_window.window);
+}
+
+void message_search_compose(Compose *compose)
+{
+       if (!search_window.window)
+               message_search_create();
+       else
+               gtk_widget_hide(search_window.window);
+
+       search_window.compose = compose;
+       search_window.search_compose = TRUE;
 
        gtk_widget_grab_focus(search_window.next_btn);
        gtk_widget_grab_focus(search_window.body_entry);
@@ -172,6 +192,7 @@ static void message_search_create(void)
 static void message_search_execute(gboolean backward)
 {
        MessageView *messageview = search_window.messageview;
+       Compose *compose = search_window.compose;
        gboolean case_sens;
        gboolean all_searched = FALSE;
        const gchar *body_str;
@@ -187,13 +208,25 @@ static void message_search_execute(gboolean backward)
                AlertValue val;
 
                if (backward) {
-                       if (messageview_search_string_backward
-                               (messageview, body_str, case_sens) == TRUE)
-                               break;
+                       if (search_window.search_compose) {
+                               if (compose_search_string_backward
+                                       (compose, body_str, case_sens) == TRUE)
+                                       break;
+                       } else {
+                               if (messageview_search_string_backward
+                                       (messageview, body_str, case_sens) == TRUE)
+                                       break;
+                       }
                } else {
-                       if (messageview_search_string
-                               (messageview, body_str, case_sens) == TRUE)
-                               break;
+                       if (search_window.search_compose) {
+                               if (compose_search_string
+                                       (compose, body_str, case_sens) == TRUE)
+                                       break;
+                       } else {
+                               if (messageview_search_string
+                                       (messageview, body_str, case_sens) == TRUE)
+                                       break;
+                       }
                }
 
                if (all_searched) {
@@ -218,8 +251,13 @@ static void message_search_execute(gboolean backward)
                if (G_ALERTALTERNATE == val) {
                        manage_window_focus_in(search_window.window,
                                               NULL, NULL);
-                       messageview_set_position(messageview,
-                                                backward ? -1 : 0);
+                       if (search_window.search_compose) {
+                               compose_set_position(compose,
+                                                        backward ? -1 : 0);
+                       } else {
+                               messageview_set_position(messageview,
+                                                        backward ? -1 : 0);
+                       }
                } else
                        break;
        }
index 780c9f30dcde066025eb4cc141682957e6cfee54..733f03987a9cbb54ada9cc6b063d6a0e5b335be4 100644 (file)
@@ -23,7 +23,9 @@
 #include <glib.h>
 
 #include "messageview.h"
+#include "compose.h"
 
 void message_search    (MessageView    *messageview);
+void message_search_compose    (Compose        *compose);
 
 #endif /* __MESSAGE_SEARCH_H__ */
index 722fcb53e635ffd519d62a984796ffcae21539df..046c13cb80e925d78c292848fdf80c58053d0c3f 100644 (file)
@@ -1232,12 +1232,8 @@ enum
 void textview_set_position(TextView *textview, gint pos)
 {
        GtkTextView *text = GTK_TEXT_VIEW(textview->text);
-       GtkTextBuffer *buffer = gtk_text_view_get_buffer(text);
-       GtkTextIter iter;
 
-       gtk_text_buffer_get_iter_at_offset(buffer, &iter, pos);
-       gtk_text_buffer_place_cursor(buffer, &iter);
-       gtk_text_view_scroll_to_iter(text, &iter, 0.0, FALSE, 0.0, 0.0);
+       gtkut_text_view_set_position(text, pos);
 }
 
 static GPtrArray *textview_scan_header(TextView *textview, FILE *fp)
@@ -1441,65 +1437,16 @@ gboolean textview_search_string(TextView *textview, const gchar *str,
                                gboolean case_sens)
 {
        GtkTextView *text = GTK_TEXT_VIEW(textview->text);
-       GtkTextBuffer *buffer;
-       GtkTextIter iter, match_pos;
-       GtkTextMark *mark;
-       gint len;
-
-       g_return_val_if_fail(str != NULL, FALSE);
-
-       buffer = gtk_text_view_get_buffer(text);
-
-       len = g_utf8_strlen(str, -1);
-       g_return_val_if_fail(len >= 0, FALSE);
-
-       mark = gtk_text_buffer_get_insert(buffer);
-       gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
-
-       if (gtkut_text_buffer_find(buffer, &iter, str, case_sens,
-                                  &match_pos)) {
-               GtkTextIter end = match_pos;
-
-               gtk_text_iter_forward_chars(&end, len);
-               /* place "insert" at the last character */
-               gtk_text_buffer_select_range(buffer, &end, &match_pos);
-               gtk_text_view_scroll_to_mark(text, mark, 0.0, FALSE, 0.0, 0.0);
-               return TRUE;
-       }
 
-       return FALSE;
+       return gtkut_text_view_search_string(text, str, case_sens);
 }
 
 gboolean textview_search_string_backward(TextView *textview, const gchar *str,
                                         gboolean case_sens)
 {
        GtkTextView *text = GTK_TEXT_VIEW(textview->text);
-       GtkTextBuffer *buffer;
-       GtkTextIter iter, match_pos;
-       GtkTextMark *mark;
-       gint len;
-
-       g_return_val_if_fail(str != NULL, FALSE);
-
-       buffer = gtk_text_view_get_buffer(text);
-
-       len = g_utf8_strlen(str, -1);
-       g_return_val_if_fail(len >= 0, FALSE);
 
-       mark = gtk_text_buffer_get_insert(buffer);
-       gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
-
-       if (gtkut_text_buffer_find_backward(buffer, &iter, str, case_sens,
-                                           &match_pos)) {
-               GtkTextIter end = match_pos;
-
-               gtk_text_iter_forward_chars(&end, len);
-               gtk_text_buffer_select_range(buffer, &match_pos, &end);
-               gtk_text_view_scroll_to_mark(text, mark, 0.0, FALSE, 0.0, 0.0);
-               return TRUE;
-       }
-
-       return FALSE;
+       return gtkut_text_view_search_string_backward(text, str, case_sens);
 }
 
 void textview_scroll_one_line(TextView *textview, gboolean up)