[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", &notes_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