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.png b/data/icons/writeas-bright-dark@2x.png similarity index 77% copy from data/icons/writeas-bright-dark.png copy to data/icons/writeas-bright-dark@2x.png index 69214d9..c24dfbf 100644 Binary files a/data/icons/writeas-bright-dark.png 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 @@ -1,10 +1,10 @@ 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')) install_data('write-as-gtk.appdata.xml', install_dir: join_paths(get_option('datadir'), 'metainfo')) diff --git a/src/window.vala b/src/window.vala index 17d84f1..9bbe6f1 100644 --- a/src/window.vala +++ b/src/window.vala @@ -1,19 +1,37 @@ 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); } public MainWindow(Gtk.Application app) { set_application(app); 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); + } }