diff --git a/data/icons/writeas-bright-dark.png b/data/icons/writeas-bright-dark.png index 69214d9..003cadb 100644 Binary files a/data/icons/writeas-bright-dark.png and b/data/icons/writeas-bright-dark.png differ diff --git a/data/icons/writeas-bright-dark@2x.png b/data/icons/writeas-bright-dark@2x.png new file mode 100644 index 0000000..c24dfbf Binary files /dev/null and b/data/icons/writeas-bright-dark@2x.png differ diff --git a/data/meson.build b/data/meson.build index 8dbc35f..dbc87eb 100644 --- a/data/meson.build +++ b/data/meson.build @@ -2,7 +2,7 @@ install_data('icons/write-as.png', install_dir: join_paths(get_option('datadir'), 'icons', 'hicolor', '128x128', 'apps') ) install_data('icons/writeas-bright-dark.png', - install_dir: join_paths(get_option('datadir'), 'icons', 'hicolor', '48x48', 'actions')) + install_dir: join_paths(get_option('datadir'), 'icons', 'hicolor', '16x16', 'actions')) install_data('write-as-gtk.desktop', install_dir: join_paths(get_option('datadir'), 'applications')) diff --git a/src/window.vala b/src/window.vala index 17d84f1..9bbe6f1 100644 --- a/src/window.vala +++ b/src/window.vala @@ -2,10 +2,7 @@ public class WriteAs.MainWindow : Gtk.ApplicationWindow { private Gtk.TextView canvas; construct { - var header = new Gtk.HeaderBar(); - header.title = ""; - header.show_close_button = true; - set_titlebar(header); + construct_toolbar(); canvas = new Gtk.TextView(); add(canvas); @@ -16,4 +13,25 @@ public class WriteAs.MainWindow : Gtk.ApplicationWindow { set_default_size(800, 600); } + + private void construct_toolbar() { + var header = new Gtk.HeaderBar(); + header.title = ""; + header.show_close_button = true; + set_titlebar(header); + + var darkmode_button = new Gtk.ToggleButton(); + // NOTE the fallback icon is a bit of a meaning stretch, but it works. + var icon_theme = Gtk.IconTheme.get_default(); + darkmode_button.image = new Gtk.Image.from_icon_name( + icon_theme.has_icon("writeas-bright-dark") ? + "writeas-bright-dark" : "weather-clear-night", + Gtk.IconSize.SMALL_TOOLBAR); + darkmode_button.draw_indicator = false; + var settings = Gtk.Settings.get_default(); + darkmode_button.toggled.connect(() => { + settings.gtk_application_prefer_dark_theme = darkmode_button.active; + }); + header.pack_end(darkmode_button); + } }