gnome-utils r8270 - trunk/logview
- From: cosimoc svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-utils r8270 - trunk/logview
- Date: Tue, 23 Dec 2008 13:26:43 +0000 (UTC)
Author: cosimoc
Date: Tue Dec 23 13:26:43 2008
New Revision: 8270
URL: http://svn.gnome.org/viewvc/gnome-utils?rev=8270&view=rev
Log:
Implement wrap in search.
Modified:
trunk/logview/logview.c
Modified: trunk/logview/logview.c
==============================================================================
--- trunk/logview/logview.c (original)
+++ trunk/logview/logview.c Tue Dec 23 13:26:43 2008
@@ -34,7 +34,8 @@
#include "logview-manager.h"
#define APP_NAME _("System Log Viewer")
-#define SEARCH_MARK "lw-search-mark"
+#define SEARCH_START_MARK "lw-search-start-mark"
+#define SEARCH_END_MARK "lw-search-end-mark"
struct _LogviewWindowPrivate {
GtkWidget *statusbar;
@@ -439,43 +440,67 @@
logview_search_text (LogviewWindow *logview, gboolean forward)
{
GtkTextBuffer *buffer;
- GtkTextMark *search_mark;
- GtkTextIter start, start_m, end_m;
+ GtkTextMark *search_start, *search_end;
+ GtkTextIter search, start_m, end_m;
const char *text;
- gboolean res;
+ gboolean res, wrapped;
+
+ wrapped = FALSE;
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (logview->priv->text_view));
- search_mark = gtk_text_buffer_get_mark (buffer, SEARCH_MARK);
+ search_start = gtk_text_buffer_get_mark (buffer, SEARCH_START_MARK);
+ search_end = gtk_text_buffer_get_mark (buffer, SEARCH_END_MARK);
- if (!search_mark) {
+ if (!search_start) {
/* this is our first search on the buffer, create a new search mark */
- gtk_text_buffer_get_start_iter (buffer, &start);
- search_mark = gtk_text_buffer_create_mark (buffer, SEARCH_MARK,
- &start, TRUE);
+ gtk_text_buffer_get_start_iter (buffer, &search);
+ search_start = gtk_text_buffer_create_mark (buffer, SEARCH_START_MARK,
+ &search, TRUE);
+ search_end = gtk_text_buffer_create_mark (buffer, SEARCH_END_MARK,
+ &search, TRUE);
} else {
- gtk_text_buffer_get_iter_at_mark (buffer, &start, search_mark);
+ if (forward) {
+ gtk_text_buffer_get_iter_at_mark (buffer, &search, search_end);
+ } else {
+ gtk_text_buffer_get_iter_at_mark (buffer, &search, search_start);
+ }
}
text = logview_findbar_get_text (LOGVIEW_FINDBAR (logview->priv->find_bar));
+wrap:
+
if (forward) {
- res = gtk_text_iter_forward_search (&start, text, 0, &start_m, &end_m, NULL);
+ res = gtk_text_iter_forward_search (&search, text, 0, &start_m, &end_m, NULL);
} else {
- res = gtk_text_iter_backward_search (&start, text, 0, &start_m, &end_m, NULL);
+ res = gtk_text_iter_backward_search (&search, text, 0, &start_m, &end_m, NULL);
}
if (res) {
gtk_text_buffer_select_range (buffer, &start_m, &end_m);
- gtk_text_buffer_move_mark (buffer, search_mark, &end_m);
+ gtk_text_buffer_move_mark (buffer, search_start, &start_m);
+ gtk_text_buffer_move_mark (buffer, search_end, &end_m);
} else {
- GtkTextMark *mark;
- GtkTextIter iter;
+ if (wrapped) {
+
+ GtkTextMark *mark;
+ GtkTextIter iter;
+
+ if (gtk_text_buffer_get_has_selection (buffer)) {
+ /* unselect */
+ mark = gtk_text_buffer_get_mark (buffer, "insert");
+ gtk_text_buffer_get_iter_at_mark (buffer, &iter, mark);
+ gtk_text_buffer_move_mark_by_name (buffer, "selection_bound", &iter);
+ }
+ } else {
+ if (forward) {
+ gtk_text_buffer_get_start_iter (buffer, &search);
+ } else {
+ gtk_text_buffer_get_end_iter (buffer, &search);
+ }
- if (gtk_text_buffer_get_has_selection (buffer)) {
- /* unselect */
- mark = gtk_text_buffer_get_mark (buffer, "insert");
- gtk_text_buffer_get_iter_at_mark (buffer, &iter, mark);
- gtk_text_buffer_move_mark_by_name (buffer, "selection_bound", &iter);
+ wrapped = TRUE;
+ goto wrap;
}
}
}
@@ -502,19 +527,21 @@
text_changed_timeout_cb (gpointer user_data)
{
LogviewWindow *logview = user_data;
- GtkTextMark *search_mark;
+ GtkTextMark *search_start, *search_end;
GtkTextIter start;
GtkTextBuffer *buffer;
logview->priv->search_timeout_id = 0;
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (logview->priv->text_view));
- search_mark = gtk_text_buffer_get_mark (buffer, SEARCH_MARK);
+ search_start = gtk_text_buffer_get_mark (buffer, SEARCH_START_MARK);
+ search_end = gtk_text_buffer_get_mark (buffer, SEARCH_END_MARK);
- if (search_mark) {
+ if (search_start) {
/* reset the search mark to the start */
gtk_text_buffer_get_start_iter (buffer, &start);
- gtk_text_buffer_move_mark (buffer, search_mark, &start);
+ gtk_text_buffer_move_mark (buffer, search_start, &start);
+ gtk_text_buffer_move_mark (buffer, search_end, &start);
}
logview_search_text (logview, TRUE);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]