refactor and enhancement of the dark mode

webkit2png
somas95 2018-06-19 20:36:16 +02:00
parent bad7870e1f
commit 8282fbad62
6 changed files with 98 additions and 71 deletions

View File

@ -1,51 +0,0 @@
<interface>
<menu id="menu4">
<section>
<item>
<object class="GtkCheckMenuItem" id="mnu_focusmode">
<attribute name="label" translatable="yes">Focus Mode</attribute>
<signal name="toggled" handler="set_focusmode" swapped="no"/>
</object>
</item>
<item>
<object class="GtkCheckMenuItem" id="mnu_fullscreen">
<attribute name="label" translatable="yes">Fullscreen</attribute>
<signal name="toggled" handler="toggle_fullscreen" swapped="no"/>
</object>
</item>
<item>
<object class="GtkCheckMenuItem" id="dark_mode">
<attribute name="tooltip_text" translatable="yes">Light text on a dark background</attribute>
<attribute name="label" translatable="yes">Dark Mode</attribute>
<signal name="activate" handler="dark_mode_toggled" swapped="no"/>
</object>
</item>
<item>
<object class="GtkCheckMenuItem" id="mnu_preview">
<attribute name="tooltip_text" translatable="yes">Switch to preview mode</attribute>
<attribute name="label" translatable="yes">Preview</attribute>
<signal name="toggled" handler="toggle_preview" swapped="no"/>
</object>
</item>
</section>
<section>
<item>
<object class="GtkMenuItem" id="searchreplacemenuitem">
<attribute name="tooltip_text" translatable="yes">Open Search and Replace</attribute>
<attribute name="label" translatable="yes">Search and Replace ...</attribute>
<attribute name="use_underline">True</attribute>
<signal name="activate" handler="open_search_and_replace" swapped="no"/>
</object>
</item>
<item>
<object class="GtkCheckMenuItem" id="disable_spellcheck">
<attribute name="label" translatable="yes">Auto _Spellcheck</attribute>
<attribute name="use_underline">True</attribute>
<attribute name="active">True</attribute>
<signal name="toggled" handler="toggle_spellcheck" swapped="no"/>
</object>
</item>
</section>
</menu>
</interface>

View File

@ -254,15 +254,6 @@
<property name="label" translatable="yes">Sidebar</property> <property name="label" translatable="yes">Sidebar</property>
</object> </object>
</child> </child>
<child>
<object class="GtkCheckMenuItem" id="dark_mode">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Light text on a dark background</property>
<property name="label" translatable="yes">Dark Mode</property>
<signal name="activate" handler="dark_mode_toggled" swapped="no"/>
</object>
</child>
<child> <child>
<object class="GtkCheckMenuItem" id="mnu_preview"> <object class="GtkCheckMenuItem" id="mnu_preview">
<property name="visible">True</property> <property name="visible">True</property>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<menu id="WindowMenu">
<section>
<item>
<attribute name="label" translatable="yes">Focus Mode</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Fullscreen</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Dark Mode</attribute>
<attribute name="action">app.dark_mode</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Preview</attribute>
</item>
</section>
<section>
<item>
<attribute name="label" translatable="yes">Search and Replace ...</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Auto _Spellcheck</attribute>
</item>
</section>
</menu>
</interface>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<menu id="WindowMenu">
<section>
<item>
<attribute name="label" translatable="yes">Focus Mode</attribute>
<signal name="toggled" handler="set_focusmode" swapped="no"/>
</item>
<item>
<attribute name="label" translatable="yes">Fullscreen</attribute>
<signal name="toggled" handler="toggle_fullscreen" swapped="no"/>
</item>
<item>
<attribute name="tooltip_text" translatable="yes">Light text on a dark background</attribute>
<attribute name="label" translatable="yes">Dark Mode</attribute>
<signal name="activate" handler="dark_mode_toggled" swapped="no"/>
</item>
<item>
<attribute name="tooltip_text" translatable="yes">Switch to preview mode</attribute>
<attribute name="label" translatable="yes">Preview</attribute>
<signal name="toggled" handler="toggle_preview" swapped="no"/>
</item>
</section>
<section>
<item>
<attribute name="tooltip_text" translatable="yes">Open Search and Replace</attribute>
<attribute name="label" translatable="yes">Search and Replace ...</attribute>
<attribute name="use_underline">True</attribute>
<signal name="activate" handler="open_search_and_replace" swapped="no"/>
</item>
<item>
<attribute name="label" translatable="yes">Auto _Spellcheck</attribute>
<attribute name="use_underline">True</attribute>
<attribute name="active">True</attribute>
<signal name="toggled" handler="toggle_spellcheck" swapped="no"/>
</item>
</section>
</menu>
</interface>

View File

@ -47,6 +47,8 @@ from .UberwriterSearchAndReplace import UberwriterSearchAndReplace
from .Settings import Settings from .Settings import Settings
# from .UberwriterAutoCorrect import UberwriterAutoCorrect # from .UberwriterAutoCorrect import UberwriterAutoCorrect
from uberwriter_lib.helpers import get_builder
import logging import logging
logger = logging.getLogger('uberwriter') logger = logging.getLogger('uberwriter')
@ -766,20 +768,20 @@ class UberwriterWindow(Window):
decision.ignore() decision.ignore()
return True # Don't let the event "bubble up" 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 # Save state for saving settings later
self.dark_mode = widget.get_active() self.dark_mode = state
if self.dark_mode: if self.dark_mode:
# Dark Mode is on # Dark Mode is on
# self.gtk_settings.set_property('gtk-application-prefer-dark-theme', True) # 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.get_style_context().add_class("dark_mode")
self.hb_container.get_style_context().add_class("dark_mode") self.hb_container.get_style_context().add_class("dark_mode")
self.MarkupBuffer.dark_mode(True) self.MarkupBuffer.dark_mode(True)
else: else:
# Dark mode off # Dark mode off
# self.gtk_settings.set_property('gtk-application-prefer-dark-theme', False) # 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.get_style_context().remove_class("dark_mode")
self.hb_container.get_style_context().remove_class("dark_mode") self.hb_container.get_style_context().remove_class("dark_mode")
self.MarkupBuffer.dark_mode(False) self.MarkupBuffer.dark_mode(False)
@ -995,9 +997,10 @@ class UberwriterWindow(Window):
bbtn = Gtk.MenuButton() bbtn = Gtk.MenuButton()
btn_settings = 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.image = Gtk.Image.new_from_icon_name('emblem-system-symbolic', Gtk.IconSize.BUTTON)
#btn_settings.props.use_popover = True btn_settings.props.use_popover = True
self.builder.get_object("menu4").detach() self.builder_window_menu = get_builder('WindowMenu')
btn_settings.set_popup(self.builder.get_object("menu4")) self.model = self.builder_window_menu.get_object("WindowMenu")
btn_settings.set_menu_model(self.model)
self.builder.get_object("menu1").detach() self.builder.get_object("menu1").detach()
bbtn.set_popup(self.builder.get_object("menu1")) 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.focusmode_menu_button = builder.get_object('mnu_focusmode')
self.preview_button = builder.get_object('preview_toggle') self.preview_button = builder.get_object('preview_toggle')
self.preview_mnu_button = builder.get_object('mnu_preview') 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.fullscreen_button.set_name('fullscreen_toggle')
self.focusmode_button.set_name('focus_toggle') self.focusmode_button.set_name('focus_toggle')
@ -1130,7 +1132,7 @@ class UberwriterWindow(Window):
# Setup dark mode if so # Setup dark mode if so
if self.settings.get_value("dark-mode"): if self.settings.get_value("dark-mode"):
self.dark_mode_button.set_active(True) self.dark_mode_toggled(True)
# Scrolling -> Dark or not? # Scrolling -> Dark or not?
@ -1272,14 +1274,12 @@ class UberwriterWindow(Window):
logger.debug("Error writing settings file to disk. Error: %r" % e) logger.debug("Error writing settings file to disk. Error: %r" % e)
def load_settings(self, builder): def load_settings(self, builder):
dark_mode_button = builder.get_object("dark_mode")
spellcheck_button = builder.get_object("disable_spellcheck") spellcheck_button = builder.get_object("disable_spellcheck")
try: try:
f = open(CONFIG_PATH + "settings.pickle", "rb") f = open(CONFIG_PATH + "settings.pickle", "rb")
settings = pickle.load(f) settings = pickle.load(f)
f.close() f.close()
self.dark_mode = settings['dark_mode'] self.dark_mode = settings['dark_mode']
dark_mode_button.set_active(settings['dark_mode'])
spellcheck_button.set_active(settings['spellcheck']) spellcheck_button.set_active(settings['spellcheck'])
logger.debug("loaded settings: %r" % settings) logger.debug("loaded settings: %r" % settings)
except Exception as e: except Exception as e:

View File

@ -134,6 +134,15 @@ class Application(Gtk.Application):
action.connect("activate", self.on_quit) action.connect("activate", self.on_quit)
self.add_action(action) 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') builder = get_builder('App_menu')
self.set_app_menu(builder.get_object("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_builder('Shortcuts')
builder.get_object("shortcuts").set_transient_for(self.window) builder.get_object("shortcuts").set_transient_for(self.window)
builder.get_object("shortcuts").show() 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): def on_quit(self, action, param):
self.quit() self.quit()