From 3fd91923ee75008d52fa24da149f6e0bdf987db6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Genov=C3=A9s?= Date: Fri, 14 Dec 2018 19:34:06 +0100 Subject: [PATCH 1/9] Join open and recents buttons --- uberwriter/headerbars.py | 44 ++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/uberwriter/headerbars.py b/uberwriter/headerbars.py index 0f9b41c..6755b06 100644 --- a/uberwriter/headerbars.py +++ b/uberwriter/headerbars.py @@ -45,11 +45,8 @@ class MainHeaderbar: #pylint: disable=too-few-public-methods self.hb_container.show() self.btns = buttons(app) - self.rec = self.btns.recent pack_buttons(self.hb, self.btns) - # btns.recent.set_popup(self.generate_recent_files_menu()) - self.hb.show_all() @@ -107,26 +104,35 @@ def buttons(app): [NamedTupple] -- tupple of Gtk.Buttons """ - builder_window_menu = get_builder('Menu') - model = builder_window_menu.get_object("Menu") - recents_builder = get_builder('Recents') - recents = recents_builder.get_object("recent_md_popover") - recents_wd = recents_builder.get_object("recent_md_widget") - recents_wd.connect('item-activated', app.on_open_recent) - - Button = namedtuple("Button", "new open recent save search menu") + Button = namedtuple("Button", "new open_recent save search menu") btn = Button(Gtk.Button().new_with_label(_("New")), - Gtk.Button().new_with_label(_("Open")), - Gtk.MenuButton().new(), + Gtk.Box().new(0, 0), Gtk.Button().new_with_label(_("Save")), Gtk.Button().new_from_icon_name("system-search-symbolic", Gtk.IconSize.BUTTON), Gtk.MenuButton().new()) - btn.recent.set_image(Gtk.Image.new_from_icon_name("go-down-symbolic", - Gtk.IconSize.BUTTON)) - btn.recent.set_tooltip_text(_("Open Recent")) - btn.recent.set_popover(recents) + builder_window_menu = get_builder('Menu') + model = builder_window_menu.get_object("Menu") + + open_button = Gtk.Button().new_with_label(_("Open")) + open_button.set_action_name("app.open") + + recents_builder = get_builder('Recents') + recents = recents_builder.get_object("recent_md_popover") + recents_wd = recents_builder.get_object("recent_md_widget") + recents_wd.connect('item-activated', app.on_open_recent) + + recents_button = Gtk.MenuButton().new() + recents_button.set_image(Gtk.Image.new_from_icon_name("pan-down-symbolic", + Gtk.IconSize.BUTTON)) + recents_button.set_tooltip_text(_("Open Recent")) + recents_button.set_popover(recents) + + btn.open_recent.get_style_context().add_class("linked") + btn.open_recent.pack_start(open_button, False, False, 0) + btn.open_recent.pack_end(recents_button, False, False, 0) + btn.search.set_tooltip_text(_("Search and replace")) btn.menu.set_tooltip_text(_("Menu")) btn.menu.set_image(Gtk.Image.new_from_icon_name("open-menu-symbolic", @@ -134,7 +140,6 @@ def buttons(app): btn.menu.set_use_popover(True) btn.menu.set_menu_model(model) btn.new.set_action_name("app.new") - btn.open.set_action_name("app.open") btn.save.set_action_name("app.save") btn.search.set_action_name("app.search") @@ -152,8 +157,7 @@ def pack_buttons(headerbar, btn, btn_exit=None): """ headerbar.pack_start(btn.new) - headerbar.pack_start(btn.open) - headerbar.pack_start(btn.recent) + headerbar.pack_start(btn.open_recent) if btn_exit: headerbar.pack_end(btn_exit) headerbar.pack_end(btn.menu) From 56e718be15f52037a4b3cf3dd8a2dfde6ad643be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Genov=C3=A9s?= Date: Fri, 14 Dec 2018 20:01:00 +0100 Subject: [PATCH 2/9] allow disabling overlay within preferences window --- data/ui/Preferences.ui | 30 +++++++++++++++++++++++++++++- uberwriter/UberwriterWindow.py | 2 +- uberwriter_lib/AppWindow.py | 16 ++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/data/ui/Preferences.ui b/data/ui/Preferences.ui index 9325450..43fe8da 100644 --- a/data/ui/Preferences.ui +++ b/data/ui/Preferences.ui @@ -40,9 +40,10 @@ True False - start + end start Use dark mode + right 0 @@ -53,7 +54,9 @@ True False + end Autospellcheck + right 0 @@ -83,6 +86,31 @@ 1 + + + True + False + end + Draw scroll gradient + right + + + 0 + 2 + + + + + True + True + start + app.draw_gradient + + + 1 + 2 + + True diff --git a/uberwriter/UberwriterWindow.py b/uberwriter/UberwriterWindow.py index 885400b..4ee77eb 100644 --- a/uberwriter/UberwriterWindow.py +++ b/uberwriter/UberwriterWindow.py @@ -153,7 +153,7 @@ class UberwriterWindow(Gtk.ApplicationWindow): # Let them disable it if self.settings.get_value("gradient-overlay"): - self.scrolled_window.connect_after("draw", self.draw_gradient) + self.overlay = self.scrolled_window.connect_after("draw", self.draw_gradient) self.smooth_scroll_starttime = 0 self.smooth_scroll_endtime = 0 diff --git a/uberwriter_lib/AppWindow.py b/uberwriter_lib/AppWindow.py index b207aa2..83b7502 100644 --- a/uberwriter_lib/AppWindow.py +++ b/uberwriter_lib/AppWindow.py @@ -98,6 +98,12 @@ class Application(Gtk.Application): action.connect("change-state", self.on_spellcheck) self.add_action(action) + action = Gio.SimpleAction.new_stateful("draw_gradient", + None, + GLib.Variant.new_boolean(True)) + action.connect("change-state", self.on_draw_gradient) + self.add_action(action) + # Menu Actions action = Gio.SimpleAction.new("new", None) @@ -235,6 +241,16 @@ class Application(Gtk.Application): action.set_state(value) self.window.toggle_spellcheck(value) + def on_draw_gradient(self, action, value): + action.set_state(value) + self.settings.set_value("gradient-overlay", + GLib.Variant("b", value)) + if value: + self.window.overlay = self.window.scrolled_window.connect_after( + "draw", self.window.draw_gradient) + else: + self.window.scrolled_window.disconnect(self.window.overlay) + def on_new(self, _action, _value): self.window.new_document() From a2661be8026ffe1619a88d62855af0f5ff67bcee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Genov=C3=A9s?= Date: Fri, 14 Dec 2018 20:06:38 +0100 Subject: [PATCH 3/9] reorder things --- data/ui/Preferences.ui | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/data/ui/Preferences.ui b/data/ui/Preferences.ui index 43fe8da..1454037 100644 --- a/data/ui/Preferences.ui +++ b/data/ui/Preferences.ui @@ -63,6 +63,19 @@ 1 + + + True + False + end + Draw scroll gradient + right + + + 0 + 2 + + True @@ -86,19 +99,6 @@ 1 - - - True - False - end - Draw scroll gradient - right - - - 0 - 2 - - True From 7e926b86fe962b3dc3b8240afe0283d55e589fcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Genov=C3=A9s?= Date: Fri, 14 Dec 2018 20:06:56 +0100 Subject: [PATCH 4/9] read setting from gschema at startup --- uberwriter_lib/AppWindow.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/uberwriter_lib/AppWindow.py b/uberwriter_lib/AppWindow.py index 83b7502..91ae9ac 100644 --- a/uberwriter_lib/AppWindow.py +++ b/uberwriter_lib/AppWindow.py @@ -98,9 +98,10 @@ class Application(Gtk.Application): action.connect("change-state", self.on_spellcheck) self.add_action(action) + set_gradient_overlay = self.settings.get_value("gradient-overlay") action = Gio.SimpleAction.new_stateful("draw_gradient", None, - GLib.Variant.new_boolean(True)) + GLib.Variant.new_boolean(set_gradient_overlay)) action.connect("change-state", self.on_draw_gradient) self.add_action(action) From 7066f446d2f3de41af68f9a0f3b0c49bd65b8b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Genov=C3=A9s?= Date: Fri, 14 Dec 2018 20:47:15 +0100 Subject: [PATCH 5/9] Fix padding in "unsaved changes" modal --- uberwriter/UberwriterWindow.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/uberwriter/UberwriterWindow.py b/uberwriter/UberwriterWindow.py index 4ee77eb..26f71d4 100644 --- a/uberwriter/UberwriterWindow.py +++ b/uberwriter/UberwriterWindow.py @@ -715,8 +715,7 @@ class UberwriterWindow(Gtk.ApplicationWindow): dialog.add_button(_("Close without Saving"), Gtk.ResponseType.NO) dialog.add_button(_("Cancel"), Gtk.ResponseType.CANCEL) dialog.add_button(_("Save now"), Gtk.ResponseType.YES) - dialog.set_title(_('Unsaved changes')) - dialog.set_default_size(200, 150) + # dialog.set_default_size(200, 60) dialog.set_default_response(Gtk.ResponseType.YES) response = dialog.run() From 7d3a6fd6dec6d465aeab6decdb9e7df203c45eb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Genov=C3=A9s?= Date: Sat, 22 Dec 2018 14:26:32 +0100 Subject: [PATCH 6/9] add function to retrieve any child by name --- uberwriter_lib/helpers.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/uberwriter_lib/helpers.py b/uberwriter_lib/helpers.py index efd4cde..dc0fe8f 100644 --- a/uberwriter_lib/helpers.py +++ b/uberwriter_lib/helpers.py @@ -21,6 +21,8 @@ import logging import os import shutil +from gi.repository import Gtk + from . uberwriterconfig import get_data_file from . Builder import Builder @@ -152,3 +154,32 @@ def exist_executable(command): """ return shutil.which(command) is not None + +def get_descendant(widget, child_name, level, doPrint=False): + if widget is not None: + if doPrint: print("-"*level + str(Gtk.Buildable.get_name(widget)) + + " :: " + widget.get_name()) + else: + if doPrint: print("-"*level + "None") + return None + #/*** If it is what we are looking for ***/ + if Gtk.Buildable.get_name(widget) == child_name: # not widget.get_name() ! + return widget + #/*** If this widget has one child only search its child ***/ + if (hasattr(widget, 'get_child') and + callable(getattr(widget, 'get_child')) and + child_name != ""): + child = widget.get_child() + if child is not None: + return get_descendant(child, child_name, level+1,doPrint) + # /*** Ity might have many children, so search them ***/ + elif (hasattr(widget, 'get_children') and + callable(getattr(widget, 'get_children')) and + child_name != ""): + children = widget.get_children() + # /*** For each child ***/ + found = None + for child in children: + if child is not None: + found = get_descendant(child, child_name, level+1, doPrint) # //search the child + if found: return found From 66ccfb47c314053d7859290c1aca73331c40d51e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Genov=C3=A9s?= Date: Sat, 22 Dec 2018 14:28:17 +0100 Subject: [PATCH 7/9] recents popover: open document on single click --- uberwriter/headerbars.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/uberwriter/headerbars.py b/uberwriter/headerbars.py index 6755b06..52069fb 100644 --- a/uberwriter/headerbars.py +++ b/uberwriter/headerbars.py @@ -20,6 +20,7 @@ from collections import namedtuple from gettext import gettext as _ from gi.repository import Gtk from uberwriter_lib.helpers import get_builder +from uberwriter_lib.helpers import get_descendant from uberwriter_lib.AppWindow import Application as app @@ -120,6 +121,10 @@ def buttons(app): recents_builder = get_builder('Recents') recents = recents_builder.get_object("recent_md_popover") + + recents_treeview = get_descendant(recents, "recent_view", level=0) + recents_treeview.set_activate_on_single_click(True) + recents_wd = recents_builder.get_object("recent_md_widget") recents_wd.connect('item-activated', app.on_open_recent) From 5618ff38b6023502f1538798b7cb1e218bb7ceff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Genov=C3=A9s?= Date: Sat, 9 Mar 2019 14:50:12 +0100 Subject: [PATCH 8/9] fix background color in dark mode preview for code blocks --- data/media/github-md-dark.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/media/github-md-dark.css b/data/media/github-md-dark.css index 6df7e7c..2dfd3eb 100644 --- a/data/media/github-md-dark.css +++ b/data/media/github-md-dark.css @@ -474,7 +474,7 @@ code { padding: 0.2em 0.4em; margin: 0; font-size: 85%; - background-color: rgba(27,31,35,0.05); + background-color: #fafbfc9d; color: #1b1f23; border-radius: 3px; } @@ -508,7 +508,7 @@ pre { overflow: auto; font-size: 85%; line-height: 1.45; - background-color: #f6f8fa; + background-color: #f6f8faf1; border-radius: 3px; } From fb47539dd8c66ec07182ad04970ee7a3203aaa4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Genov=C3=A9s?= Date: Sat, 9 Mar 2019 19:53:28 +0100 Subject: [PATCH 9/9] initial theme stylesheets support --- data/media/adwaita_style.css | 4 ++++ data/media/arc_style.css | 4 ++++ data/media/style.css | 3 --- uberwriter/UberwriterWindow.py | 12 ++++++------ uberwriter_lib/AppWindow.py | 21 ++++++++++++++++++++- 5 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 data/media/adwaita_style.css create mode 100644 data/media/arc_style.css diff --git a/data/media/adwaita_style.css b/data/media/adwaita_style.css new file mode 100644 index 0000000..6e1b8ed --- /dev/null +++ b/data/media/adwaita_style.css @@ -0,0 +1,4 @@ +@define-color dark_bg #353535; +@define-color light_bg #F6F5F4; + +@import url("style.css"); diff --git a/data/media/arc_style.css b/data/media/arc_style.css new file mode 100644 index 0000000..0fce002 --- /dev/null +++ b/data/media/arc_style.css @@ -0,0 +1,4 @@ +@define-color dark_bg #31373D; +@define-color light_bg #EDEDED; + +@import url("style.css"); diff --git a/data/media/style.css b/data/media/style.css index 9cdae4a..43aea46 100644 --- a/data/media/style.css +++ b/data/media/style.css @@ -4,9 +4,6 @@ inclusion in templates */ -@define-color dark_bg #31373D; -@define-color light_bg #EDEDED; - @binding-set window-bindings { bind "w" { "close-window" () }; bind "b" { "toggle-bibtex" () }; diff --git a/uberwriter/UberwriterWindow.py b/uberwriter/UberwriterWindow.py index 26f71d4..6d3f6b6 100644 --- a/uberwriter/UberwriterWindow.py +++ b/uberwriter/UberwriterWindow.py @@ -177,13 +177,13 @@ class UberwriterWindow(Gtk.ApplicationWindow): # Init file name with None self.set_filename() - self.style_provider = Gtk.CssProvider() - self.style_provider.load_from_path(helpers.get_media_path('style.css')) + # self.style_provider = Gtk.CssProvider() + # self.style_provider.load_from_path(helpers.get_media_path('arc_style.css')) - Gtk.StyleContext.add_provider_for_screen( - Gdk.Screen.get_default(), self.style_provider, - Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION - ) + # Gtk.StyleContext.add_provider_for_screen( + # Gdk.Screen.get_default(), self.style_provider, + # Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION + # ) # Markup and Shortcuts for the TextBuffer self.markup_buffer = MarkupBuffer( diff --git a/uberwriter_lib/AppWindow.py b/uberwriter_lib/AppWindow.py index 91ae9ac..dca70f4 100644 --- a/uberwriter_lib/AppWindow.py +++ b/uberwriter_lib/AppWindow.py @@ -16,11 +16,12 @@ from gettext import gettext as _ import gi gi.require_version('Gtk', '3.0') # pylint: disable=wrong-import-position -from gi.repository import GLib, Gio, Gtk, GdkPixbuf +from gi.repository import GLib, Gio, Gtk, Gdk, GdkPixbuf from uberwriter import UberwriterWindow from uberwriter.Settings import Settings from uberwriter_lib import set_up_logging +from uberwriter_lib import helpers from uberwriter_lib.PreferencesDialog import PreferencesDialog from . helpers import get_builder, get_media_path @@ -36,9 +37,27 @@ class Application(Gtk.Application): def init(self): """Init main application""" + # set theme variant (dark/light) dark = self.settings.get_value("dark-mode") Gtk.Settings.get_default().set_property("gtk-application-prefer-dark-theme", dark) + # set css for current theme + self.style_provider = Gtk.CssProvider() + + themes = { + "Arc": "arc_style.css", + "Arc-Dark": "arc_style.css", + "Arc-Darker": "arc_style.css", + } + + theme = Gtk.Settings.get_default().get_property("gtk-theme-name") + self.style_provider.load_from_path(helpers.get_media_path(themes.get(theme,"adwaita_style.css"))) + + Gtk.StyleContext.add_provider_for_screen( + Gdk.Screen.get_default(), self.style_provider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION + ) + def do_startup(self, *args, **kwargs):