Skip to content

Commit d1a3871

Browse files
committed
move lambdas to handlers
1 parent 567b5db commit d1a3871

File tree

1 file changed

+62
-51
lines changed

1 file changed

+62
-51
lines changed

src/Window.vala

Lines changed: 62 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)