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>
</object>
</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>
<object class="GtkCheckMenuItem" id="mnu_preview">
<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 .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:

View File

@ -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()