[gtksourceview] Added undo and redo signals to GtkSourceBuffer



commit 7f7cda76b429bfcecdd2688d23d6441ec9c66d24
Author: Jesse van den Kieboom <jesse vandenkieboom epfl ch>
Date:   Sat Jan 2 12:00:24 2010 +0100

    Added undo and redo signals to GtkSourceBuffer
    
    The actual undo and redo actions are run in the default signal handlers

 gtksourceview/gtksourcebuffer.c |   50 +++++++++++++++++++++++++++++++++++---
 gtksourceview/gtksourcebuffer.h |    6 +++-
 2 files changed, 50 insertions(+), 6 deletions(-)
---
diff --git a/gtksourceview/gtksourcebuffer.c b/gtksourceview/gtksourcebuffer.c
index ecb69a9..9a197d2 100644
--- a/gtksourceview/gtksourcebuffer.c
+++ b/gtksourceview/gtksourcebuffer.c
@@ -86,6 +86,8 @@
 enum {
 	HIGHLIGHT_UPDATED,
 	SOURCE_MARK_UPDATED,
+	UNDO,
+	REDO,
 	LAST_SIGNAL
 };
 
@@ -166,6 +168,9 @@ static void 	 gtk_source_buffer_real_mark_deleted	(GtkTextBuffer		 *buffer,
 static gboolean	 gtk_source_buffer_find_bracket_match_with_limit (GtkTextIter    *orig,
 								  gint            max_chars);
 
+static void	 gtk_source_buffer_real_undo		(GtkSourceBuffer	 *buffer);
+static void	 gtk_source_buffer_real_redo		(GtkSourceBuffer	 *buffer);
+
 static void
 gtk_source_buffer_class_init (GtkSourceBufferClass *klass)
 {
@@ -190,6 +195,9 @@ gtk_source_buffer_class_init (GtkSourceBufferClass *klass)
 	tb_class->mark_set	= gtk_source_buffer_real_mark_set;
 	tb_class->mark_deleted	= gtk_source_buffer_real_mark_deleted;
 
+	klass->undo = gtk_source_buffer_real_undo;
+	klass->redo = gtk_source_buffer_real_redo;
+
 	/**
 	 * GtkSourceBuffer:highlight-syntax:
 	 *
@@ -304,6 +312,26 @@ gtk_source_buffer_class_init (GtkSourceBufferClass *klass)
 			   G_TYPE_NONE,
 			   1, GTK_TYPE_TEXT_MARK);
 
+	buffer_signals[UNDO] =
+	    g_signal_new ("undo",
+			  G_OBJECT_CLASS_TYPE (object_class),
+			  G_SIGNAL_RUN_LAST,
+			  G_STRUCT_OFFSET (GtkSourceBufferClass, undo),
+			  NULL, NULL,
+			  g_cclosure_marshal_VOID__VOID,
+			  G_TYPE_NONE,
+			  0);
+
+	buffer_signals[REDO] =
+	    g_signal_new ("redo",
+			  G_OBJECT_CLASS_TYPE (object_class),
+			  G_SIGNAL_RUN_LAST,
+			  G_STRUCT_OFFSET (GtkSourceBufferClass, redo),
+			  NULL, NULL,
+			  g_cclosure_marshal_VOID__VOID,
+			  G_TYPE_NONE,
+			  0);
+
 	g_type_class_add_private (object_class, sizeof(GtkSourceBufferPrivate));
 }
 
@@ -1026,9 +1054,8 @@ void
 gtk_source_buffer_undo (GtkSourceBuffer *buffer)
 {
 	g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer));
-	g_return_if_fail (gtk_source_undo_manager_can_undo (buffer->priv->undo_manager));
 
-	gtk_source_undo_manager_undo (buffer->priv->undo_manager);
+	g_signal_emit (buffer, buffer_signals[UNDO], 0);
 }
 
 /**
@@ -1042,9 +1069,8 @@ void
 gtk_source_buffer_redo (GtkSourceBuffer *buffer)
 {
 	g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer));
-	g_return_if_fail (gtk_source_undo_manager_can_redo (buffer->priv->undo_manager));
 
-	gtk_source_undo_manager_redo (buffer->priv->undo_manager);
+	g_signal_emit (buffer, buffer_signals[REDO], 0);
 }
 
 /**
@@ -1558,6 +1584,22 @@ gtk_source_buffer_real_mark_deleted (GtkTextBuffer *buffer,
 		GTK_TEXT_BUFFER_CLASS (gtk_source_buffer_parent_class)->mark_deleted (buffer, mark);
 }
 
+static void
+gtk_source_buffer_real_undo (GtkSourceBuffer *buffer)
+{
+	g_return_if_fail (gtk_source_undo_manager_can_undo (buffer->priv->undo_manager));
+
+	gtk_source_undo_manager_undo (buffer->priv->undo_manager);
+}
+
+static void
+gtk_source_buffer_real_redo (GtkSourceBuffer *buffer)
+{
+	g_return_if_fail (gtk_source_undo_manager_can_redo (buffer->priv->undo_manager));
+
+	gtk_source_undo_manager_redo (buffer->priv->undo_manager);
+}
+
 /**
  * gtk_source_buffer_create_source_mark:
  * @buffer: a #GtkSourceBuffer.
diff --git a/gtksourceview/gtksourcebuffer.h b/gtksourceview/gtksourcebuffer.h
index 67ec9f2..d2801a6 100644
--- a/gtksourceview/gtksourcebuffer.h
+++ b/gtksourceview/gtksourcebuffer.h
@@ -55,13 +55,15 @@ struct _GtkSourceBufferClass
 {
 	GtkTextBufferClass parent_class;
 
+	/* Signals */
+	void (*undo) (GtkSourceBuffer *buffer);
+	void (*redo) (GtkSourceBuffer *buffer);
+
 	/* Padding for future expansion */
 	void (*_gtk_source_reserved1) (void);
 	void (*_gtk_source_reserved2) (void);
 	void (*_gtk_source_reserved3) (void);
 	void (*_gtk_source_reserved4) (void);
-	void (*_gtk_source_reserved5) (void);
-	void (*_gtk_source_reserved6) (void);
 };
 
 GType           	 gtk_source_buffer_get_type 		(void) G_GNUC_CONST;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]