From 8282fbad62924649a5ddd51712c441ec7213e836 Mon Sep 17 00:00:00 2001 From: somas95 Date: Tue, 19 Jun 2018 20:36:16 +0200 Subject: [PATCH] refactor and enhancement of the dark mode --- data/ui/Menu4.ui | 51 ---------------------------------- data/ui/UberwriterWindow.ui | 9 ------ data/ui/WindowMenu.ui | 28 +++++++++++++++++++ data/ui/WindowMenubck.xml | 39 ++++++++++++++++++++++++++ uberwriter/UberwriterWindow.py | 22 +++++++-------- uberwriter_lib/AppWindow.py | 20 +++++++++++++ 6 files changed, 98 insertions(+), 71 deletions(-) delete mode 100644 data/ui/Menu4.ui create mode 100644 data/ui/WindowMenu.ui create mode 100644 data/ui/WindowMenubck.xml diff --git a/data/ui/Menu4.ui b/data/ui/Menu4.ui deleted file mode 100644 index bb2ede3..0000000 --- a/data/ui/Menu4.ui +++ /dev/null @@ -1,51 +0,0 @@ - - -
- - - Focus Mode - - - - - - Fullscreen - - - - - - - Light text on a dark background - Dark Mode - - - - - - Switch to preview mode - Preview - - - -
-
- - - Open Search and Replace - Search and Replace ... - True - - - - - - Auto _Spellcheck - True - True - - - -
-
-
diff --git a/data/ui/UberwriterWindow.ui b/data/ui/UberwriterWindow.ui index f35fe39..af882b0 100644 --- a/data/ui/UberwriterWindow.ui +++ b/data/ui/UberwriterWindow.ui @@ -254,15 +254,6 @@ Sidebar - - - True - False - Light text on a dark background - Dark Mode - - - True diff --git a/data/ui/WindowMenu.ui b/data/ui/WindowMenu.ui new file mode 100644 index 0000000..ed309a3 --- /dev/null +++ b/data/ui/WindowMenu.ui @@ -0,0 +1,28 @@ + + + +
+ + Focus Mode + + + Fullscreen + + + Dark Mode + app.dark_mode + + + Preview + +
+
+ + Search and Replace ... + + + Auto _Spellcheck + +
+
+
\ No newline at end of file diff --git a/data/ui/WindowMenubck.xml b/data/ui/WindowMenubck.xml new file mode 100644 index 0000000..c49d7e1 --- /dev/null +++ b/data/ui/WindowMenubck.xml @@ -0,0 +1,39 @@ + + + +
+ + Focus Mode + + + + Fullscreen + + + + Light text on a dark background + Dark Mode + + + + Switch to preview mode + Preview + + +
+
+ + Open Search and Replace + Search and Replace ... + True + + + + Auto _Spellcheck + True + True + + +
+
+
\ No newline at end of file diff --git a/uberwriter/UberwriterWindow.py b/uberwriter/UberwriterWindow.py index ebb0fc5..b24977d 100644 --- a/uberwriter/UberwriterWindow.py +++ b/uberwriter/UberwriterWindow.py @@ -47,6 +47,8 @@ from .UberwriterSearchAndReplace import UberwriterSearchAndReplace from .Settings import Settings # from .UberwriterAutoCorrect import UberwriterAutoCorrect +from uberwriter_lib.helpers import get_builder + import logging logger = logging.getLogger('uberwriter') @@ -766,20 +768,20 @@ class UberwriterWindow(Window): decision.ignore() return True # Don't let the event "bubble up" - def dark_mode_toggled(self, widget, data=None): + def dark_mode_toggled(self, state): # Save state for saving settings later - self.dark_mode = widget.get_active() + self.dark_mode = state if self.dark_mode: # Dark Mode is on # self.gtk_settings.set_property('gtk-application-prefer-dark-theme', True) - self.settings.set_value("dark-mode", GLib.Variant("b", True)) + # self.settings.set_value("dark-mode", GLib.Variant("b", True)) self.get_style_context().add_class("dark_mode") self.hb_container.get_style_context().add_class("dark_mode") self.MarkupBuffer.dark_mode(True) else: # Dark mode off # self.gtk_settings.set_property('gtk-application-prefer-dark-theme', False) - self.settings.set_value("dark-mode", GLib.Variant("b", False)) + # self.settings.set_value("dark-mode", GLib.Variant("b", False)) self.get_style_context().remove_class("dark_mode") self.hb_container.get_style_context().remove_class("dark_mode") self.MarkupBuffer.dark_mode(False) @@ -995,9 +997,10 @@ class UberwriterWindow(Window): bbtn = Gtk.MenuButton() btn_settings = Gtk.MenuButton() btn_settings.props.image = Gtk.Image.new_from_icon_name('emblem-system-symbolic', Gtk.IconSize.BUTTON) - #btn_settings.props.use_popover = True - self.builder.get_object("menu4").detach() - btn_settings.set_popup(self.builder.get_object("menu4")) + btn_settings.props.use_popover = True + self.builder_window_menu = get_builder('WindowMenu') + self.model = self.builder_window_menu.get_object("WindowMenu") + btn_settings.set_menu_model(self.model) self.builder.get_object("menu1").detach() bbtn.set_popup(self.builder.get_object("menu1")) @@ -1025,7 +1028,6 @@ class UberwriterWindow(Window): self.focusmode_menu_button = builder.get_object('mnu_focusmode') self.preview_button = builder.get_object('preview_toggle') self.preview_mnu_button = builder.get_object('mnu_preview') - self.dark_mode_button = builder.get_object('dark_mode') self.fullscreen_button.set_name('fullscreen_toggle') self.focusmode_button.set_name('focus_toggle') @@ -1130,7 +1132,7 @@ class UberwriterWindow(Window): # Setup dark mode if so if self.settings.get_value("dark-mode"): - self.dark_mode_button.set_active(True) + self.dark_mode_toggled(True) # Scrolling -> Dark or not? @@ -1272,14 +1274,12 @@ class UberwriterWindow(Window): logger.debug("Error writing settings file to disk. Error: %r" % e) def load_settings(self, builder): - dark_mode_button = builder.get_object("dark_mode") spellcheck_button = builder.get_object("disable_spellcheck") try: f = open(CONFIG_PATH + "settings.pickle", "rb") settings = pickle.load(f) f.close() self.dark_mode = settings['dark_mode'] - dark_mode_button.set_active(settings['dark_mode']) spellcheck_button.set_active(settings['spellcheck']) logger.debug("loaded settings: %r" % settings) except Exception as e: diff --git a/uberwriter_lib/AppWindow.py b/uberwriter_lib/AppWindow.py index 6eabd89..d126417 100644 --- a/uberwriter_lib/AppWindow.py +++ b/uberwriter_lib/AppWindow.py @@ -134,6 +134,15 @@ class Application(Gtk.Application): action.connect("activate", self.on_quit) self.add_action(action) + set_dark_mode = self.settings.get_value("dark-mode") + + action = Gio.SimpleAction.new_stateful( + "dark_mode", + None, + GLib.Variant.new_boolean(set_dark_mode)) + action.connect("change-state", self.on_dark_mode) + self.add_action(action) + builder = get_builder('App_menu') self.set_app_menu(builder.get_object("app-menu")) @@ -202,6 +211,17 @@ class Application(Gtk.Application): builder = get_builder('Shortcuts') builder.get_object("shortcuts").set_transient_for(self.window) builder.get_object("shortcuts").show() + + def on_dark_mode(self, action, value): + action.set_state(value) + self.settings.set_value("dark-mode", + GLib.Variant("b", value)) + self.window.dark_mode_toggled(value) + + #this changes the headerbar theme accordingly + self.dark_setting = Gtk.Settings.get_default() + self.dark_setting.set_property("gtk-application-prefer-dark-theme", value) + def on_quit(self, action, param): self.quit()