@@ -9,6 +9,10 @@ public class AppWindow : Gtk.Window {
99 public string file_name { get ; set ; default = " unknown" ; }
1010 public bool is_new { get ; set ; default = false ; }
1111
12+ // Add a debounce so we aren't writing the entire buffer every character input
13+ public int interval = 500 ; // ms
14+ public uint debounce_timer_id = 0 ;
15+
1216 public AppWindow () {
1317 debug (" Constructing GUI" );
1418
@@ -76,57 +80,9 @@ public class AppWindow : Gtk.Window {
7680
7781 // Signal callbacks are heavily derived from similar operations in
7882 // elementary/code
79- save_as_button.clicked.connect (() => {
80- var save_dialog = new Gtk .FileDialog () { initial_name = file_name };
81-
82- save_dialog. save. begin (this , null , (obj, res) = > {
83- try {
84- file = save_dialog. save. end (res);
85- file_name = file. get_basename ();
86- if (is_new) { is_new = false ; }
87- save_file (file);
88- } catch (Error err) {
89- warning (" Failed to save file: %s " , err. message);
90- }
91- });
92- });
93-
94- this.close_request.connect (() => {
95- save_file ();
96-
97- if (is_new) {
98- try {
99- this . file. delete ();
100- } catch (Error err) {
101- warning (
102- " The persistent file couldn't be deleted: %s " ,
103- err. message
104- );
105- }
106- }
107-
108- return false ;
109- });
110-
111- // Add a debounce so we aren't writing the entire buffer every character input
112- var interval = 500 ; // ms
113- uint debounce_timer_id = 0 ;
114-
115- buf.changed.connect (() => {
116- debug (" The buffer has been modified, starting the debounce timer" );
117-
118- if (debounce_timer_id != 0 ) {
119- GLib . Source . remove (debounce_timer_id);
120- }
121-
122- debounce_timer_id = Timeout . add (interval, () = > {
123- debounce_timer_id = 0 ;
124- if (file. query_exists ()) {
125- save_file ();
126- }
127- return GLib . Source . REMOVE ;
128- });
129- });
83+ save_as_button.clicked.connect (on_save );
84+ this.close_request.connect (on_close );
85+ buf.changed.connect (on_buffer_changed );
13086
13187 debug ("Binding window title to file_name ");
13288
@@ -135,6 +91,8 @@ public class AppWindow : Gtk.Window {
13591 debug ("Success !");
13692 }
13793
94+
95+ /* ---------------- FILE OPERATIONS ---------------- */
13896 public void open_file (File file = this .file ) {
13997 this . file = file;
14098
@@ -176,4 +134,57 @@ public class AppWindow : Gtk.Window {
176134 warning (" Couldn't save file: %s " , err. message);
177135 }
178136 }
137+
138+
139+ /* ---------------- HANDLERS ---------------- */
140+ public void on_save () {
141+ debug (" Save event!" );
142+ var save_dialog = new Gtk .FileDialog () { initial_name = file_name };
143+
144+ save_dialog. save. begin (this , null , (obj, res) = > {
145+ try {
146+ file = save_dialog. save. end (res);
147+ file_name = file. get_basename ();
148+ if (is_new) { is_new = false ; }
149+ save_file (file);
150+
151+ } catch (Error err) {
152+ warning (" Failed to save file: %s " , err. message);
153+ }
154+ });
155+ }
156+
157+ public void on_buffer_changed () {
158+ debug (" The buffer has been modified, starting the debounce timer" );
159+
160+ if (debounce_timer_id != 0 ) {
161+ GLib . Source . remove (debounce_timer_id);
162+ }
163+
164+ debounce_timer_id = Timeout . add (interval, () = > {
165+ debounce_timer_id = 0 ;
166+ if (file. query_exists ()) {
167+ save_file ();
168+ }
169+ return GLib . Source . REMOVE ;
170+ });
171+
172+ }
173+
174+ public void on_close () {
175+ debug (" Close event!" );
176+ save_file ();
177+
178+ if (is_new) {
179+ try {
180+ this . file. delete ();
181+ } catch (Error err) {
182+ warning (
183+ " The persistent file couldn't be deleted: %s " ,
184+ err. message
185+ );
186+ }
187+ }
188+ return false ;
189+ }
179190}
0 commit comments