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>
|
<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>
|
||||||
|
|
|
@ -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 .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:
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue