[Goodies-commits] r5692 - in xfce4-notes-plugin/trunk: . panel-plugin
Mike Massonnet
mmassonnet at xfce.org
Sun Oct 19 10:33:31 CEST 2008
Author: mmassonnet
Date: 2008-10-19 08:33:31 +0000 (Sun, 19 Oct 2008)
New Revision: 5692
Modified:
xfce4-notes-plugin/trunk/ChangeLog
xfce4-notes-plugin/trunk/panel-plugin/notes.c
xfce4-notes-plugin/trunk/panel-plugin/notes.h
Log:
Scroll to last cursor position on undo/redo
Modified: xfce4-notes-plugin/trunk/ChangeLog
===================================================================
--- xfce4-notes-plugin/trunk/ChangeLog 2008-10-18 19:57:06 UTC (rev 5691)
+++ xfce4-notes-plugin/trunk/ChangeLog 2008-10-19 08:33:31 UTC (rev 5692)
@@ -1,3 +1,12 @@
+2008-10-19 Mike Massonnet <mmassonnet at xfce.org>
+
+Scroll to last cursor position on undo/redo
+ * panel-plugin/notes.[ch]:
+ - Set a GtkTextMark inside the buffer and use it as cursor position
+ to scroll back to. This is more reliable then to scroll back to a
+ GtkTextIter as per API documentation.
+ - Free the undo/redo text buffer when a NotesNote is destroyed.
+
2008-10-18 Mike Massonnet <mmassonnet at xfce.org>
Simple undo/redo feature
Modified: xfce4-notes-plugin/trunk/panel-plugin/notes.c
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/notes.c 2008-10-18 19:57:06 UTC (rev 5691)
+++ xfce4-notes-plugin/trunk/panel-plugin/notes.c 2008-10-19 08:33:31 UTC (rev 5692)
@@ -1551,6 +1551,7 @@
NotesNote *notes_note;
gint id;
GtkTextBuffer *buffer;
+ GtkTextIter iter;
notes_note = g_slice_new0 (NotesNote);
notes_note->notes_window = notes_window;
@@ -1577,6 +1578,8 @@
/* Text view */
notes_note->text_view = gtk_text_view_new ();
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (notes_note->text_view));
+ gtk_text_buffer_get_iter_at_offset (GTK_TEXT_BUFFER (buffer), &iter, 0);
+ gtk_text_buffer_create_mark (GTK_TEXT_BUFFER (buffer), "undo-pos", &iter, FALSE);
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (notes_note->text_view), GTK_WRAP_WORD);
if (NULL != notes_note->notes_window->font)
notes_note_set_font (notes_note, notes_note->notes_window->font);
@@ -1628,6 +1631,12 @@
if (notes_note->timeout != 0)
g_source_remove (notes_note->timeout);
+ /* Remove undo/redo data */
+ if (notes_note->undo_timeout != 0)
+ g_source_remove (notes_note->undo_timeout);
+ g_free (notes_note->undo_text);
+ g_free (notes_note->redo_text);
+
/* Remove notebook page */
id = g_slist_index (notes_window->notes, notes_note);
gtk_notebook_remove_page (GTK_NOTEBOOK (notes_window->notebook), id);
@@ -1958,6 +1967,8 @@
GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (notes_note->text_view));
GtkTextIter start, end;
+ g_object_get (buffer, "cursor-position", ¬es_note->cursor_pos, NULL);
+
gtk_text_buffer_get_iter_at_offset (GTK_TEXT_BUFFER (buffer), &start, 0);
gtk_text_buffer_get_iter_at_offset (GTK_TEXT_BUFFER (buffer), &end, -1);
@@ -1974,6 +1985,8 @@
{
GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (notes_note->text_view));
gchar *tmp;
+ GtkTextIter iter;
+ GtkTextMark *mark;
if (notes_note->undo_timeout > 0)
{
@@ -1986,7 +1999,13 @@
notes_note->undo_text = g_strdup ("");
gtk_text_buffer_set_text (GTK_TEXT_BUFFER (buffer), notes_note->undo_text, -1);
+ gtk_text_buffer_get_iter_at_offset (GTK_TEXT_BUFFER (buffer), &iter, notes_note->cursor_pos);
+ gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER (buffer), &iter);
+ mark = gtk_text_buffer_get_mark (GTK_TEXT_BUFFER (buffer), "undo-pos");
+ gtk_text_buffer_move_mark (GTK_TEXT_BUFFER (buffer), mark, &iter);
+ gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (notes_note->text_view), mark, 0.0, FALSE, 0.5, 0.5);
+
tmp = notes_note->undo_text;
notes_note->undo_text = notes_note->redo_text;
notes_note->redo_text = tmp;
Modified: xfce4-notes-plugin/trunk/panel-plugin/notes.h
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/notes.h 2008-10-18 19:57:06 UTC (rev 5691)
+++ xfce4-notes-plugin/trunk/panel-plugin/notes.h 2008-10-19 08:33:31 UTC (rev 5692)
@@ -122,6 +122,7 @@
GtkWidget *scrolled_window;
GtkWidget *text_view;
+ gint cursor_pos;
guint undo_timeout;
gchar *undo_text;
gchar *redo_text;
More information about the Goodies-commits
mailing list