1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // Boilerplate code was generated by http://burtonini.com/cgi/gobject.py
6 
7 #include <gdk/gdkkeysyms.h>
8 
9 #include "undo_view.h"
10 
G_DEFINE_TYPE(GtkUndoView,gtk_undo_view,GTK_TYPE_TEXT_VIEW)11 G_DEFINE_TYPE ( GtkUndoView, gtk_undo_view, GTK_TYPE_TEXT_VIEW )
12 
13 /**
14 \brief
15 **/
16 static void gtk_undo_view_dispose ( GObject *object )
17 {
18 	GtkUndoView *uview = GTK_UNDO_VIEW ( object );
19 
20 	if ( uview->undo_manager_ )
21 	{
22 		g_object_unref ( G_OBJECT ( uview->undo_manager_ ) );
23 		uview->undo_manager_ = NULL;
24 	}
25 
26 	G_OBJECT_CLASS ( gtk_undo_view_parent_class )->dispose ( object );
27 }
28 
29 /**
30 \brief
31 **/
gtk_undo_view_undo(GtkUndoView * uview)32 void gtk_undo_view_undo ( GtkUndoView *uview )
33 {
34 	if ( gtk_source_undo_manager_can_undo ( uview->undo_manager_ ) )
35 	{
36 		gtk_source_undo_manager_undo ( uview->undo_manager_ );
37 	}
38 }
39 
40 /**
41 \brief
42 **/
gtk_undo_view_redo(GtkUndoView * uview)43 void gtk_undo_view_redo ( GtkUndoView *uview )
44 {
45 	if ( gtk_source_undo_manager_can_redo ( uview->undo_manager_ ) )
46 		gtk_source_undo_manager_redo ( uview->undo_manager_ );
47 }
48 
49 /**
50 \brief
51 **/
gtk_undo_view_class_init(GtkUndoViewClass * klass)52 static void gtk_undo_view_class_init ( GtkUndoViewClass *klass )
53 {
54 	GObjectClass *object_class = G_OBJECT_CLASS ( klass );
55 	GtkBindingSet *binding_set;
56 
57 	g_signal_new ( "undo",
58 				   G_TYPE_FROM_CLASS ( klass ),
59 				   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
60 				   G_STRUCT_OFFSET ( GtkUndoViewClass, undo ),
61 				   NULL,
62 				   NULL,
63 				   g_cclosure_marshal_VOID__VOID,
64 				   G_TYPE_NONE,
65 				   0 );
66 	g_signal_new ( "redo",
67 				   G_TYPE_FROM_CLASS ( klass ),
68 				   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
69 				   G_STRUCT_OFFSET ( GtkUndoViewClass, redo ),
70 				   NULL,
71 				   NULL,
72 				   g_cclosure_marshal_VOID__VOID,
73 				   G_TYPE_NONE,
74 				   0 );
75 
76 	klass->undo = gtk_undo_view_undo;
77 	klass->redo = gtk_undo_view_redo;
78 
79 	binding_set = gtk_binding_set_by_class ( klass );
80 	gtk_binding_entry_add_signal ( binding_set, GDK_z, GDK_CONTROL_MASK, "undo", 0 );
81 	gtk_binding_entry_add_signal ( binding_set, GDK_y, GDK_CONTROL_MASK, "redo", 0 );
82 	gtk_binding_entry_add_signal ( binding_set, GDK_z, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "redo", 0 );
83 	gtk_binding_entry_add_signal ( binding_set, GDK_F14, 0, "undo", 0 );
84 
85 	object_class->dispose = gtk_undo_view_dispose;
86 }
87 
88 /**
89 \brief
90 **/
gtk_undo_view_init(GtkUndoView * self)91 static void gtk_undo_view_init ( GtkUndoView *self )
92 {
93 }
94 
95 /**
96 \brief
97 **/
gtk_undo_view_new(GtkTextBuffer * buffer)98 GtkWidget *gtk_undo_view_new ( GtkTextBuffer *buffer )
99 {
100 	GtkWidget *ret = g_object_new ( GTK_TYPE_UNDO_VIEW, "buffer", buffer, NULL );
101 	GTK_UNDO_VIEW ( ret )->undo_manager_ = gtk_source_undo_manager_new ( GTK_TEXT_BUFFER ( buffer ) );
102 
103 	return ret;
104 }
105 
106 /**
107 \brief
108 **/
gtk_undo_view_reset(GtkTextBuffer * buffer)109 void gtk_undo_view_reset ( GtkTextBuffer *buffer )
110 {
111 	gtk_source_undo_manager_end_not_undoable_action ( GTK_UNDO_VIEW ( buffer )->undo_manager_ );
112 
113 }
114 
115