@@ -12,11 +12,18 @@ public class Granite.StyleManager : Object {
12
12
private static Gtk . CssProvider ? dark_provider = null ;
13
13
private static Gtk . CssProvider ? app_provider = null ;
14
14
15
- private static GLib . Once<Granite . StyleManager > instance;
16
- public static unowned Granite .StyleManager get_default () {
17
- return instance. once (() = > {
18
- return new Granite .StyleManager ();
19
- });
15
+ private static HashTable<Gdk . Display , StyleManager > style_managers_by_displays = new HashTable<Gdk . Display , StyleManager > (null , null );
16
+
17
+ public static unowned StyleManager get_default () {
18
+ return style_managers_by_displays[Gdk . Display . get_default ()];
19
+ }
20
+
21
+ public static unowned StyleManager get_for_display (Gdk .Display display ) {
22
+ return style_managers_by_displays[display];
23
+ }
24
+
25
+ internal static void init_for_display (Gdk .Display display ) {
26
+ style_managers_by_displays[display] = new StyleManager (display);
20
27
}
21
28
22
29
/**
@@ -26,36 +33,30 @@ public class Granite.StyleManager : Object {
26
33
*/
27
34
public Settings . ColorScheme color_scheme_override { get ; set ; default = LIGHT ; }
28
35
29
- private StyleManager () { }
30
-
31
- construct {
32
- unowned var display_manager = Gdk . DisplayManager . @get ();
33
- display_manager. display_opened. connect (register_display);
34
-
35
- foreach (unowned var display in display_manager. list_displays ()) {
36
- register_display (display);
37
- }
38
-
39
- Granite . Settings . get_default (). notify[" prefers-color-scheme" ]. connect (update_color_scheme);
40
- update_color_scheme ();
36
+ /**
37
+ * The Gdk.Display this StyleManager handles.
38
+ */
39
+ public Gdk . Display display { get ; construct; }
41
40
42
- notify[" color-scheme-override" ]. connect (update_color_scheme);
41
+ private StyleManager (Gdk .Display display ) {
42
+ Object (display: display);
43
43
}
44
44
45
- private void register_display ( Gdk . Display display ) {
45
+ construct {
46
46
var gtk_settings = Gtk . Settings . get_for_display (display);
47
- gtk_settings. gtk_application_prefer_dark_theme = prefers_dark ();
48
- gtk_settings. notify[" gtk-application-prefer-dark-theme" ]. connect (() = > {
49
- set_provider_for_display (display, gtk_settings. gtk_application_prefer_dark_theme);
50
- });
47
+ gtk_settings. notify[" gtk-application-prefer-dark-theme" ]. connect (set_provider_for_display);
48
+ set_provider_for_display ();
51
49
52
- set_provider_for_display (display, gtk_settings. gtk_application_prefer_dark_theme);
50
+ var granite_settings = Granite . Settings . get_default ();
51
+ granite_settings. notify[" prefers-color-scheme" ]. connect (update_color_scheme);
52
+ notify[" color-scheme-override" ]. connect (update_color_scheme);
53
+ update_color_scheme ();
53
54
54
55
var icon_theme = Gtk . IconTheme . get_for_display (display);
55
56
icon_theme. add_resource_path (" /io/elementary/granite" );
56
57
}
57
58
58
- private void set_provider_for_display (Gdk . Display display , bool prefer_dark_style ) {
59
+ private void set_provider_for_display () {
59
60
if (app_provider == null ) {
60
61
var base_path = Application . get_default (). resource_base_path;
61
62
if (base_path != null ) {
@@ -70,7 +71,7 @@ public class Granite.StyleManager : Object {
70
71
}
71
72
}
72
73
73
- if (prefer_dark_style ) {
74
+ if (Gtk . Settings . get_for_display (display) . gtk_application_prefer_dark_theme ) {
74
75
if (base_provider != null ) {
75
76
Gtk . StyleContext . remove_provider_for_display (display, base_provider);
76
77
}
@@ -107,12 +108,8 @@ public class Granite.StyleManager : Object {
107
108
}
108
109
109
110
private void update_color_scheme () {
110
- var dark = prefers_dark ();
111
-
112
- foreach (var display in Gdk . DisplayManager . @get (). list_displays ()) {
113
- var gtk_settings = Gtk . Settings . get_for_display (display);
114
- gtk_settings. gtk_application_prefer_dark_theme = dark;
115
- }
111
+ var gtk_settings = Gtk . Settings . get_for_display (display);
112
+ gtk_settings. gtk_application_prefer_dark_theme = prefers_dark ();
116
113
}
117
114
118
115
private bool prefers_dark () {
0 commit comments