@@ -43,6 +43,8 @@ namespace Scratch.Widgets {
4343 private double total_delta = 0 ;
4444 private const double SCROLL_THRESHOLD = 1.0 ;
4545
46+ protected static Scratch . Application application;
47+
4648 public signal void style_changed (Gtk .SourceStyleScheme style );
4749 // "selection_changed" signal now only emitted when the selected text changes (position ignored).
4850 // Listened to by searchbar and highlight word selection plugin
@@ -84,6 +86,7 @@ namespace Scratch.Widgets {
8486 }
8587
8688 construct {
89+ application = (Scratch . Application ) (GLib . Application . get_default ());
8790 space_drawer. enable_matrix = true ;
8891
8992 expand = true ;
@@ -201,6 +204,12 @@ namespace Scratch.Widgets {
201204 });
202205 }
203206 });
207+
208+ application. notify[" system-document-font" ]. connect (() = > {
209+ if (Scratch . settings. get_boolean (" use-system-font" )) {
210+ update_font ();
211+ }
212+ });
204213 }
205214
206215 private bool get_current_line (out Gtk .TextIter start , out Gtk .TextIter end ) {
@@ -278,8 +287,27 @@ namespace Scratch.Widgets {
278287 set_wrap_mode (Gtk . WrapMode . NONE );
279288 }
280289
290+ update_font ();
291+
292+ if (settings. get_boolean (" follow-system-style" )) {
293+ var system_prefers_dark = Granite . Settings . get_default (). prefers_color_scheme == Granite . Settings . ColorScheme . DARK ;
294+ if (system_prefers_dark) {
295+ source_buffer. style_scheme = style_scheme_manager. get_scheme (" elementary-dark" );
296+ } else {
297+ source_buffer. style_scheme = style_scheme_manager. get_scheme (" elementary-light" );
298+ }
299+ } else {
300+ var scheme = style_scheme_manager. get_scheme (Scratch . settings. get_string (" style-scheme" ));
301+ source_buffer. style_scheme = scheme ?? style_scheme_manager. get_scheme (" classic" );
302+ }
303+
304+ git_diff_gutter_renderer. set_style_scheme (source_buffer. style_scheme);
305+ style_changed (source_buffer. style_scheme);
306+ }
307+
308+ private void update_font () {
281309 if (Scratch . settings. get_boolean (" use-system-font" )) {
282- font = (( Scratch . Application ) GLib . Application . get_default ()) . default_font ;
310+ font = application . system_document_font ;
283311 } else {
284312 font = Scratch . settings. get_string (" font" );
285313 }
@@ -296,21 +324,6 @@ namespace Scratch.Widgets {
296324 } catch (Error e) {
297325 critical (e. message);
298326 }
299-
300- if (settings. get_boolean (" follow-system-style" )) {
301- var system_prefers_dark = Granite . Settings . get_default (). prefers_color_scheme == Granite . Settings . ColorScheme . DARK ;
302- if (system_prefers_dark) {
303- source_buffer. style_scheme = style_scheme_manager. get_scheme (" elementary-dark" );
304- } else {
305- source_buffer. style_scheme = style_scheme_manager. get_scheme (" elementary-light" );
306- }
307- } else {
308- var scheme = style_scheme_manager. get_scheme (Scratch . settings. get_string (" style-scheme" ));
309- source_buffer. style_scheme = scheme ?? style_scheme_manager. get_scheme (" classic" );
310- }
311-
312- git_diff_gutter_renderer. set_style_scheme (source_buffer. style_scheme);
313- style_changed (source_buffer. style_scheme);
314327 }
315328
316329 public void go_to_line (int line , int offset = 0 ) {
@@ -653,7 +666,7 @@ namespace Scratch.Widgets {
653666 // Use a default size of 10pt
654667 double px_per_line = 10 * PT_TO_PX ;
655668
656- var last_window = (( Scratch . Application ) GLib . Application . get_default ()) . get_last_window ();
669+ var last_window = application . get_last_window ();
657670 if (last_window != null ) {
658671 // Get the actual font size
659672 px_per_line = last_window. get_current_font_size () * PT_TO_PX ;
0 commit comments