forked from Mirrors/apostrophe
initial port to gresources
parent
b7c9eafbdb
commit
3af59e2c1d
|
@ -14,6 +14,7 @@ desktop_file = i18n.merge_file(
|
||||||
install: true,
|
install: true,
|
||||||
install_dir: get_option('datadir') / 'applications'
|
install_dir: get_option('datadir') / 'applications'
|
||||||
)
|
)
|
||||||
|
|
||||||
# Validate Desktop File
|
# Validate Desktop File
|
||||||
desktop_file_validate = find_program('desktop-file-validate', required: false)
|
desktop_file_validate = find_program('desktop-file-validate', required: false)
|
||||||
if desktop_file_validate.found()
|
if desktop_file_validate.found()
|
||||||
|
@ -57,6 +58,33 @@ install_data(
|
||||||
rename: '@0@.gschema.xml'.format(application_id)
|
rename: '@0@.gschema.xml'.format(application_id)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Resources
|
||||||
|
ui_config = configuration_data()
|
||||||
|
ui_config.set('app-id', application_id)
|
||||||
|
ui_config.set('version', meson.project_version() + version_suffix)
|
||||||
|
ui_config.set('package_url', 'http://uberwriter.github.io/uberwriter/')
|
||||||
|
ui_preconfigured_files = files(
|
||||||
|
'ui/About.ui.in'
|
||||||
|
)
|
||||||
|
ui_dependencies = []
|
||||||
|
foreach ui_file: ui_preconfigured_files
|
||||||
|
ui_dependencies += configure_file(
|
||||||
|
input: ui_file,
|
||||||
|
output: '@BASENAME@',
|
||||||
|
configuration: ui_config
|
||||||
|
)
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
resources = gnome.compile_resources(
|
||||||
|
meson.project_name(),
|
||||||
|
meson.project_name() + '.gresource.xml',
|
||||||
|
gresource_bundle: true,
|
||||||
|
install:true,
|
||||||
|
install_dir: join_paths(datadir, meson.project_name()),
|
||||||
|
dependencies: ui_dependencies
|
||||||
|
)
|
||||||
|
message('datadir')
|
||||||
|
message(datadir)
|
||||||
subdir('icons')
|
subdir('icons')
|
||||||
|
|
||||||
install_subdir(
|
install_subdir(
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<gresources>
|
||||||
|
<gresource prefix="/de/wolfvollprecht/UberWriter/">
|
||||||
|
<file compressed="true">media/css/gtk/base.css</file>
|
||||||
|
<file compressed="true" preprocess="xml-stripblanks">ui/Export.ui</file>
|
||||||
|
<file compressed="true" preprocess="xml-stripblanks">ui/Menu.ui</file>
|
||||||
|
<file compressed="true" preprocess="xml-stripblanks">ui/Preferences.ui</file>
|
||||||
|
<file compressed="true" preprocess="xml-stripblanks">ui/Preview.ui</file>
|
||||||
|
<file compressed="true" preprocess="xml-stripblanks">ui/Recents.ui</file>
|
||||||
|
<file compressed="true" preprocess="xml-stripblanks">ui/Shortcuts.ui</file>
|
||||||
|
<file compressed="true" preprocess="xml-stripblanks">ui/Window.ui</file>
|
||||||
|
<file compressed="true" preprocess="xml-stripblanks">About.ui</file>
|
||||||
|
</gresource>
|
||||||
|
</gresources>
|
|
@ -8,9 +8,9 @@
|
||||||
<property name="window_position">center</property>
|
<property name="window_position">center</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<property name="program_name">Uberwriter</property>
|
<property name="program_name">Uberwriter</property>
|
||||||
<property name="version">2.1.5</property>
|
<property name="version">@version@</property>
|
||||||
<property name="copyright" translatable="yes">Copyright (C) 2018, Wolf Vollprecht</property>
|
<property name="copyright" translatable="yes">Copyright (C) 2018, Wolf Vollprecht</property>
|
||||||
<property name="website">http://uberwriter.github.io/uberwriter</property>
|
<property name="website">@package_url@</property>
|
||||||
<property name="website_label" translatable="yes">Uberwriter website</property>
|
<property name="website_label" translatable="yes">Uberwriter website</property>
|
||||||
<property name="authors">Wolf Vollprecht <w.vollprecht@gmail.com>
|
<property name="authors">Wolf Vollprecht <w.vollprecht@gmail.com>
|
||||||
Manuel Genovés <manuel.genoves@gmail.com></property>
|
Manuel Genovés <manuel.genoves@gmail.com></property>
|
||||||
|
@ -25,7 +25,7 @@ naxuroqa (German)
|
||||||
Wolf
|
Wolf
|
||||||
Manuel (Spanish, Catalan)</property>
|
Manuel (Spanish, Catalan)</property>
|
||||||
<property name="artists">Tobias Bernard <hi@tobiasbernard.com></property>
|
<property name="artists">Tobias Bernard <hi@tobiasbernard.com></property>
|
||||||
<property name="logo_icon_name">image-missing</property>
|
<property name="logo_icon_name">@app-id@</property>
|
||||||
<property name="license_type">gpl-3-0</property>
|
<property name="license_type">gpl-3-0</property>
|
||||||
<child type="titlebar">
|
<child type="titlebar">
|
||||||
<placeholder/>
|
<placeholder/>
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# freely based on https://gitlab.gnome.org/World/lollypop/blob/master/generate_data.sh
|
||||||
|
|
||||||
|
function generate_resource()
|
||||||
|
{
|
||||||
|
# TODO: package css styles too
|
||||||
|
echo '<?xml version="1.0" encoding="UTF-8"?>'
|
||||||
|
echo '<gresources>'
|
||||||
|
echo ' <gresource prefix="/de/wolfvollprecht/UberWriter/">'
|
||||||
|
for file in ../data/media/css/gtk/*.css
|
||||||
|
do
|
||||||
|
echo -n ' <file compressed="true">'
|
||||||
|
echo -n ${file#*/*/}
|
||||||
|
echo '</file>'
|
||||||
|
done
|
||||||
|
for file in ../data/ui/*.ui About.ui
|
||||||
|
do
|
||||||
|
echo -n ' <file compressed="true" preprocess="xml-stripblanks">'
|
||||||
|
echo -n ${file#*/*/}
|
||||||
|
echo '</file>'
|
||||||
|
done
|
||||||
|
echo ' </gresource>'
|
||||||
|
echo '</gresources>'
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_resource > ../data/uberwriter.gresource.xml
|
||||||
|
|
|
@ -25,35 +25,39 @@ import pkg_resources
|
||||||
import gettext
|
import gettext
|
||||||
import locale
|
import locale
|
||||||
|
|
||||||
|
from gi.repository import Gio
|
||||||
|
|
||||||
# Add project root directory (enable symlink and trunk execution)
|
# Add project root directory (enable symlink and trunk execution)
|
||||||
PROJECT_ROOT_DIRECTORY = os.path.abspath(
|
PROJECT_ROOT_DIRECTORY = os.path.abspath(
|
||||||
os.path.dirname(os.path.dirname(os.path.realpath(sys.argv[0]))))
|
os.path.dirname(os.path.dirname(os.path.realpath(sys.argv[0]))))
|
||||||
|
|
||||||
# Set the path if needed. This allows uberwriter to run without installing it :)
|
# Set the path if needed. This allows uberwriter to run without installing it :)
|
||||||
python_path = []
|
python_path = []
|
||||||
if os.path.abspath(__file__).startswith('/opt'):
|
|
||||||
gettext.bindtextdomain('uberwriter', '/opt/extras.ubuntu.com/uberwriter/share/locale')
|
|
||||||
syspath = sys.path[:] # copy to avoid infinite loop in pending objects
|
|
||||||
for path in syspath:
|
|
||||||
opt_path = path.replace('/usr', '/opt/extras.ubuntu.com/uberwriter')
|
|
||||||
python_path.insert(0, opt_path)
|
|
||||||
sys.path.insert(0, opt_path)
|
|
||||||
os.putenv("XDG_DATA_DIRS", "%s:%s" % ("/opt/extras.ubuntu.com/uberwriter/share/", os.getenv("XDG_DATA_DIRS", "/usr/local/share/:/usr/share/")))
|
|
||||||
if (os.path.exists(os.path.join(PROJECT_ROOT_DIRECTORY, 'uberwriter'))
|
if (os.path.exists(os.path.join(PROJECT_ROOT_DIRECTORY, 'uberwriter'))
|
||||||
and PROJECT_ROOT_DIRECTORY not in sys.path):
|
and PROJECT_ROOT_DIRECTORY not in sys.path):
|
||||||
python_path.insert(0, PROJECT_ROOT_DIRECTORY)
|
python_path.insert(0, PROJECT_ROOT_DIRECTORY)
|
||||||
sys.path.insert(0, PROJECT_ROOT_DIRECTORY)
|
sys.path.insert(0, PROJECT_ROOT_DIRECTORY)
|
||||||
if python_path:
|
if python_path:
|
||||||
os.putenv('PYTHONPATH', "%s:%s" % (os.getenv('PYTHONPATH', ''), ':'.join(python_path))) # for subprocesses
|
os.putenv('PYTHONPATH', "%s:%s" % (os.getenv('PYTHONPATH', ''), ':'.join(python_path))) # for subprocesses
|
||||||
|
|
||||||
import uberwriter
|
import uberwriter
|
||||||
|
|
||||||
locale_dir = os.path.abspath(os.path.join(os.path.dirname(uberwriter.__file__),'../po/'))
|
|
||||||
|
localedir = '@LOCALE_DIR@'
|
||||||
|
pkgdatadir = '@DATA_DIR@'
|
||||||
|
|
||||||
|
|
||||||
|
#locale_dir = os.path.abspath(os.path.join(os.path.dirname(uberwriter.__file__),'../po/'))
|
||||||
|
|
||||||
# L10n
|
# L10n
|
||||||
locale.textdomain('uberwriter')
|
locale.textdomain('uberwriter')
|
||||||
locale.bindtextdomain('uberwriter', locale_dir)
|
locale.bindtextdomain('uberwriter', localedir)
|
||||||
gettext.textdomain('uberwriter')
|
gettext.textdomain('uberwriter')
|
||||||
gettext.bindtextdomain('uberwriter', locale_dir)
|
gettext.bindtextdomain('uberwriter', localedir)
|
||||||
|
|
||||||
|
resource = Gio.resource_load(os.path.join(pkgdatadir, 'uberwriter/uberwriter.gresource'))
|
||||||
|
Gio.Resource._register(resource)
|
||||||
|
|
||||||
|
|
||||||
uberwriter.main()
|
uberwriter.main()
|
||||||
|
|
|
@ -24,7 +24,7 @@ from uberwriter import main_window
|
||||||
from uberwriter.settings import Settings
|
from uberwriter.settings import Settings
|
||||||
from uberwriter.helpers import set_up_logging
|
from uberwriter.helpers import set_up_logging
|
||||||
from uberwriter.preferences_dialog import PreferencesDialog
|
from uberwriter.preferences_dialog import PreferencesDialog
|
||||||
from uberwriter.helpers import get_builder, get_media_path
|
from uberwriter.helpers import get_media_path
|
||||||
|
|
||||||
|
|
||||||
class Application(Gtk.Application):
|
class Application(Gtk.Application):
|
||||||
|
@ -247,7 +247,9 @@ class Application(Gtk.Application):
|
||||||
PreferencesDialog(self.settings).show(self.window)
|
PreferencesDialog(self.settings).show(self.window)
|
||||||
|
|
||||||
def on_shortcuts(self, _action, _param):
|
def on_shortcuts(self, _action, _param):
|
||||||
builder = get_builder('Shortcuts')
|
builder = Gtk.Builder()
|
||||||
|
builder.add_from_resource(
|
||||||
|
"/de/wolfvollprecht/UberWriter/ui/Shortcuts.ui")
|
||||||
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()
|
||||||
|
|
||||||
|
@ -255,14 +257,11 @@ class Application(Gtk.Application):
|
||||||
self.window.open_uberwriter_markdown()
|
self.window.open_uberwriter_markdown()
|
||||||
|
|
||||||
def on_about(self, _action, _param):
|
def on_about(self, _action, _param):
|
||||||
builder = get_builder('About')
|
builder = Gtk.Builder()
|
||||||
|
builder.add_from_resource("/de/wolfvollprecht/UberWriter/About.ui")
|
||||||
about_dialog = builder.get_object("AboutDialog")
|
about_dialog = builder.get_object("AboutDialog")
|
||||||
about_dialog.set_transient_for(self.window)
|
about_dialog.set_transient_for(self.window)
|
||||||
|
|
||||||
logo_file = get_media_path("de.wolfvollprecht.UberWriter.svg")
|
|
||||||
logo = GdkPixbuf.Pixbuf.new_from_file(logo_file)
|
|
||||||
|
|
||||||
about_dialog.set_logo(logo)
|
|
||||||
about_dialog.present()
|
about_dialog.present()
|
||||||
|
|
||||||
def on_quit(self, _action, _param):
|
def on_quit(self, _action, _param):
|
||||||
|
|
|
@ -28,7 +28,6 @@ from gi.repository import Gtk
|
||||||
|
|
||||||
from uberwriter import helpers
|
from uberwriter import helpers
|
||||||
from uberwriter.theme import Theme
|
from uberwriter.theme import Theme
|
||||||
from uberwriter.helpers import get_builder
|
|
||||||
|
|
||||||
LOGGER = logging.getLogger('uberwriter')
|
LOGGER = logging.getLogger('uberwriter')
|
||||||
|
|
||||||
|
@ -150,7 +149,9 @@ class Export:
|
||||||
|
|
||||||
def __init__(self, filename):
|
def __init__(self, filename):
|
||||||
"""Set up the about dialog"""
|
"""Set up the about dialog"""
|
||||||
self.builder = get_builder('Export')
|
self.builder = Gtk.Builder()
|
||||||
|
self.builder.add_from_resource(
|
||||||
|
"/de/wolfvollprecht/UberWriter/ui/Export.ui")
|
||||||
self.dialog = self.builder.get_object("Export")
|
self.dialog = self.builder.get_object("Export")
|
||||||
self.stack = self.builder.get_object("export_stack")
|
self.stack = self.builder.get_object("export_stack")
|
||||||
self.stack_switcher = self.builder.get_object("format_switcher")
|
self.stack_switcher = self.builder.get_object("format_switcher")
|
||||||
|
|
|
@ -23,7 +23,6 @@ import gi
|
||||||
|
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
from uberwriter.helpers import get_builder
|
|
||||||
from uberwriter.helpers import get_descendant
|
from uberwriter.helpers import get_descendant
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,13 +140,17 @@ def main_buttons(app):
|
||||||
Gtk.IconSize.BUTTON),
|
Gtk.IconSize.BUTTON),
|
||||||
Gtk.MenuButton().new())
|
Gtk.MenuButton().new())
|
||||||
|
|
||||||
builder_window_menu = get_builder('Menu')
|
builder_window_menu = Gtk.Builder()
|
||||||
|
builder_window_menu.add_from_resource(
|
||||||
|
"/de/wolfvollprecht/UberWriter/ui/Menu.ui")
|
||||||
model = builder_window_menu.get_object("Menu")
|
model = builder_window_menu.get_object("Menu")
|
||||||
|
|
||||||
open_button = Gtk.Button().new_with_label(_("Open"))
|
open_button = Gtk.Button().new_with_label(_("Open"))
|
||||||
open_button.set_action_name("app.open")
|
open_button.set_action_name("app.open")
|
||||||
|
|
||||||
recents_builder = get_builder('Recents')
|
recents_builder = Gtk.Builder()
|
||||||
|
recents_builder.add_from_resource(
|
||||||
|
"/de/wolfvollprecht/UberWriter/ui/Recents.ui")
|
||||||
recents = recents_builder.get_object("recent_md_popover")
|
recents = recents_builder.get_object("recent_md_popover")
|
||||||
|
|
||||||
recents_treeview = get_descendant(recents, "recent_view", level=0)
|
recents_treeview = get_descendant(recents, "recent_view", level=0)
|
||||||
|
|
|
@ -35,22 +35,6 @@ from uberwriter.config import get_data_file
|
||||||
from uberwriter.builder import Builder
|
from uberwriter.builder import Builder
|
||||||
|
|
||||||
|
|
||||||
def get_builder(builder_file_name):
|
|
||||||
"""Return a fully-instantiated Gtk.Builder instance from specified ui
|
|
||||||
file
|
|
||||||
|
|
||||||
:param builder_file_name: The name of the builder file, without extension.
|
|
||||||
Assumed to be in the 'ui' directory under the data path.
|
|
||||||
"""
|
|
||||||
# Look for the ui file that describes the user interface.
|
|
||||||
ui_filename = get_data_file('ui', '%s.ui' % (builder_file_name,))
|
|
||||||
if not os.path.exists(ui_filename):
|
|
||||||
ui_filename = None
|
|
||||||
|
|
||||||
builder = Builder()
|
|
||||||
builder.set_translation_domain()
|
|
||||||
builder.add_from_file(ui_filename)
|
|
||||||
return builder
|
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
|
|
|
@ -36,7 +36,6 @@ import cairo
|
||||||
|
|
||||||
from uberwriter import helpers
|
from uberwriter import helpers
|
||||||
from uberwriter.theme import Theme
|
from uberwriter.theme import Theme
|
||||||
from uberwriter.helpers import get_builder
|
|
||||||
|
|
||||||
from uberwriter.sidebar import Sidebar
|
from uberwriter.sidebar import Sidebar
|
||||||
from uberwriter.search_and_replace import SearchAndReplace
|
from uberwriter.search_and_replace import SearchAndReplace
|
||||||
|
@ -72,7 +71,9 @@ class MainWindow(StyledWindow):
|
||||||
self.get_style_context().add_class('uberwriter-window')
|
self.get_style_context().add_class('uberwriter-window')
|
||||||
|
|
||||||
# Set UI
|
# Set UI
|
||||||
builder = get_builder('Window')
|
builder = Gtk.Builder()
|
||||||
|
builder.add_from_resource(
|
||||||
|
"/de/wolfvollprecht/UberWriter/ui/Window.ui")
|
||||||
root = builder.get_object("FullscreenOverlay")
|
root = builder.get_object("FullscreenOverlay")
|
||||||
self.connect("delete-event", self.on_delete_called)
|
self.connect("delete-event", self.on_delete_called)
|
||||||
self.add(root)
|
self.add(root)
|
||||||
|
|
|
@ -27,7 +27,6 @@ from gi.repository import Gtk, Pango, GLib # pylint: disable=E0611
|
||||||
import logging
|
import logging
|
||||||
logger = logging.getLogger('uberwriter')
|
logger = logging.getLogger('uberwriter')
|
||||||
|
|
||||||
from uberwriter.helpers import get_builder
|
|
||||||
|
|
||||||
|
|
||||||
class PreferencesDialog:
|
class PreferencesDialog:
|
||||||
|
@ -64,7 +63,9 @@ class PreferencesDialog:
|
||||||
|
|
||||||
def __init__(self, settings):
|
def __init__(self, settings):
|
||||||
self.settings = settings
|
self.settings = settings
|
||||||
self.builder = get_builder("Preferences")
|
self.builder = Gtk.Builder()
|
||||||
|
self.builder.add_from_resource(
|
||||||
|
"/de/wolfvollprecht/UberWriter/ui/Preferences.ui")
|
||||||
|
|
||||||
self.dark_mode_auto_switch = self.builder.get_object("dark_mode_auto_switch")
|
self.dark_mode_auto_switch = self.builder.get_object("dark_mode_auto_switch")
|
||||||
self.dark_mode_auto_switch.set_active(self.settings.get_value("dark-mode-auto"))
|
self.dark_mode_auto_switch.set_active(self.settings.get_value("dark-mode-auto"))
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from queue import Queue
|
from queue import Queue
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
import os
|
||||||
|
|
||||||
from gi.repository import GLib
|
from gi.repository import GLib
|
||||||
|
|
||||||
|
|
|
@ -4,12 +4,11 @@ from enum import auto, IntEnum
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
|
|
||||||
from uberwriter.helpers import get_builder
|
|
||||||
from uberwriter.preview_renderer import PreviewRenderer
|
from uberwriter.preview_renderer import PreviewRenderer
|
||||||
from uberwriter.settings import Settings
|
from uberwriter.settings import Settings
|
||||||
|
|
||||||
gi.require_version('WebKit2', '4.0')
|
gi.require_version('WebKit2', '4.0')
|
||||||
from gi.repository import WebKit2, GLib
|
from gi.repository import WebKit2, GLib, Gtk
|
||||||
|
|
||||||
from uberwriter.preview_converter import PreviewConverter
|
from uberwriter.preview_converter import PreviewConverter
|
||||||
from uberwriter.preview_web_view import PreviewWebView
|
from uberwriter.preview_web_view import PreviewWebView
|
||||||
|
@ -33,7 +32,9 @@ class PreviewHandler:
|
||||||
self.web_view = None
|
self.web_view = None
|
||||||
self.web_view_pending_html = None
|
self.web_view_pending_html = None
|
||||||
|
|
||||||
builder = get_builder("Preview")
|
builder = Gtk.Builder()
|
||||||
|
builder.add_from_resource(
|
||||||
|
"/de/wolfvollprecht/UberWriter/ui/Preview.ui")
|
||||||
preview = builder.get_object("preview")
|
preview = builder.get_object("preview")
|
||||||
mode_button = builder.get_object("preview_mode_button")
|
mode_button = builder.get_object("preview_mode_button")
|
||||||
self.mode_revealer = builder.get_object("preview_mode_revealer")
|
self.mode_revealer = builder.get_object("preview_mode_revealer")
|
||||||
|
|
|
@ -4,7 +4,7 @@ from uberwriter import helpers
|
||||||
from uberwriter.theme import Theme
|
from uberwriter.theme import Theme
|
||||||
|
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
from gi.repository import Gtk, GLib
|
from gi.repository import Gtk, GLib, Gio
|
||||||
|
|
||||||
|
|
||||||
class StyledWindow(Gtk.ApplicationWindow):
|
class StyledWindow(Gtk.ApplicationWindow):
|
||||||
|
@ -27,8 +27,10 @@ class StyledWindow(Gtk.ApplicationWindow):
|
||||||
GLib.Variant("b", theme.is_dark))
|
GLib.Variant("b", theme.is_dark))
|
||||||
|
|
||||||
# Set theme css
|
# Set theme css
|
||||||
|
css_provider_file = Gio.File.new_for_uri(
|
||||||
|
"resource:///de/wolfvollprecht/UberWriter/media/css/gtk/base.css")
|
||||||
style_provider = Gtk.CssProvider()
|
style_provider = Gtk.CssProvider()
|
||||||
style_provider.load_from_path(helpers.get_css_path("gtk/base.css"))
|
style_provider.load_from_file(css_provider_file)
|
||||||
Gtk.StyleContext.add_provider_for_screen(
|
Gtk.StyleContext.add_provider_for_screen(
|
||||||
self.get_screen(), style_provider,
|
self.get_screen(), style_provider,
|
||||||
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
|
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
|
||||||
|
|
Loading…
Reference in New Issue