forked from Mirrors/apostrophe
refactor and enhancement of the dark mode
parent
bad7870e1f
commit
8282fbad62
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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:
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue