Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

System theme change now fully respected while Code already running #1377

Merged
merged 2 commits into from
Nov 19, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions src/MainWindow.vala
Original file line number Diff line number Diff line change
@@ -103,6 +103,9 @@ namespace Scratch {
public static Gee.MultiMap<string, string> action_accelerators = new Gee.HashMultiMap<string, string> ();
private static string base_title;

private ulong color_scheme_listener_handler_id = 0;


private const ActionEntry[] ACTION_ENTRIES = {
{ ACTION_FIND, action_fetch, "s" },
{ ACTION_FIND_NEXT, action_find_next },
@@ -303,11 +306,32 @@ namespace Scratch {
if (Scratch.settings.get_boolean ("follow-system-style")) {
var system_prefers_dark = Granite.Settings.get_default ().prefers_color_scheme == Granite.Settings.ColorScheme.DARK;
gtk_settings.gtk_application_prefer_dark_theme = system_prefers_dark;
connect_color_scheme_preference_listener ();
} else {
disconnect_color_scheme_preference_listener ();
gtk_settings.gtk_application_prefer_dark_theme = Scratch.settings.get_boolean ("prefer-dark-style");
}
}

private void connect_color_scheme_preference_listener () {
var gtk_settings = Gtk.Settings.get_default ();
var granite_settings = Granite.Settings.get_default ();

color_scheme_listener_handler_id = granite_settings.notify["prefers-color-scheme"].connect (() => {
gtk_settings.gtk_application_prefer_dark_theme = (
granite_settings.prefers_color_scheme == Granite.Settings.ColorScheme.DARK
);
});
}

private void disconnect_color_scheme_preference_listener () {
if (color_scheme_listener_handler_id != 0) {
var granite_settings = Granite.Settings.get_default ();
granite_settings.disconnect (color_scheme_listener_handler_id);
color_scheme_listener_handler_id = 0;
}
}

private void update_toolbar_button (string name, bool new_state) {
switch (name) {
case ACTION_SHOW_FIND: