+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
( 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
MICRO_VERSION=0
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=54
+EXTRA_VERSION=55
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
#include "foldersel.h"
#include "toolbar.h"
#include "inc.h"
+#include "message_search.h"
+
enum
{
COL_MIMETYPE = 0,
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);
{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},
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"),
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)
{
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.
*/
#include "messageview.h"
#include "codeconv.h"
#include "template.h"
+#include "textview.h"
#ifdef USE_ASPELL
#include "gtkaspell.h"
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__ */
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;
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);
GtkTextIter *end_iter);
GtkWidget *face_get_from_header(const gchar *o_face);
+
#endif /* __GTKUTILS_H__ */
#include "main.h"
#include "message_search.h"
#include "messageview.h"
+#include "compose.h"
#include "utils.h"
#include "gtkutils.h"
#include "manage_window.h"
GtkWidget *close_btn;
MessageView *messageview;
+
+ Compose *compose;
+ gboolean search_compose;
} search_window;
static void message_search_create (void);
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);
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;
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) {
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;
}
#include <glib.h>
#include "messageview.h"
+#include "compose.h"
void message_search (MessageView *messageview);
+void message_search_compose (Compose *compose);
#endif /* __MESSAGE_SEARCH_H__ */
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)
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)