diff --git a/data/meson.build b/data/meson.build
index d414111..956c85e 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -14,6 +14,7 @@ desktop_file = i18n.merge_file(
install: true,
install_dir: get_option('datadir') / 'applications'
)
+
# Validate Desktop File
desktop_file_validate = find_program('desktop-file-validate', required: false)
if desktop_file_validate.found()
@@ -57,6 +58,33 @@ install_data(
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')
install_subdir(
diff --git a/data/uberwriter.gresource.xml b/data/uberwriter.gresource.xml
new file mode 100644
index 0000000..ea9446b
--- /dev/null
+++ b/data/uberwriter.gresource.xml
@@ -0,0 +1,14 @@
+
+
+
+ media/css/gtk/base.css
+ ui/Export.ui
+ ui/Menu.ui
+ ui/Preferences.ui
+ ui/Preview.ui
+ ui/Recents.ui
+ ui/Shortcuts.ui
+ ui/Window.ui
+ About.ui
+
+
diff --git a/data/ui/About.ui b/data/ui/About.ui.in
similarity index 97%
rename from data/ui/About.ui
rename to data/ui/About.ui.in
index c5b788c..ec23e6c 100644
--- a/data/ui/About.ui
+++ b/data/ui/About.ui.in
@@ -8,9 +8,9 @@
center
dialog
Uberwriter
- 2.1.5
+ @version@
Copyright (C) 2018, Wolf Vollprecht
- http://uberwriter.github.io/uberwriter
+ @package_url@
Uberwriter website
Wolf Vollprecht <w.vollprecht@gmail.com>
Manuel Genovés <manuel.genoves@gmail.com>
@@ -25,7 +25,7 @@ naxuroqa (German)
Wolf
Manuel (Spanish, Catalan)
Tobias Bernard <hi@tobiasbernard.com>
- image-missing
+ @app-id@
gpl-3-0
diff --git a/scripts/data_generator.sh b/scripts/data_generator.sh
new file mode 100755
index 0000000..b9b8e05
--- /dev/null
+++ b/scripts/data_generator.sh
@@ -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 ''
+ echo ''
+ echo ' '
+ for file in ../data/media/css/gtk/*.css
+ do
+ echo -n ' '
+ echo -n ${file#*/*/}
+ echo ''
+ done
+ for file in ../data/ui/*.ui About.ui
+ do
+ echo -n ' '
+ echo -n ${file#*/*/}
+ echo ''
+ done
+ echo ' '
+ echo ''
+}
+
+generate_resource > ../data/uberwriter.gresource.xml
+
diff --git a/uberwriter.in b/uberwriter.in
index e9880af..b5431a7 100755
--- a/uberwriter.in
+++ b/uberwriter.in
@@ -25,35 +25,39 @@ import pkg_resources
import gettext
import locale
+from gi.repository import Gio
+
# Add project root directory (enable symlink and trunk execution)
PROJECT_ROOT_DIRECTORY = os.path.abspath(
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 :)
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'))
and PROJECT_ROOT_DIRECTORY not in sys.path):
python_path.insert(0, PROJECT_ROOT_DIRECTORY)
sys.path.insert(0, PROJECT_ROOT_DIRECTORY)
if python_path:
os.putenv('PYTHONPATH', "%s:%s" % (os.getenv('PYTHONPATH', ''), ':'.join(python_path))) # for subprocesses
-
+
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
locale.textdomain('uberwriter')
-locale.bindtextdomain('uberwriter', locale_dir)
+locale.bindtextdomain('uberwriter', localedir)
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()
diff --git a/uberwriter/application.py b/uberwriter/application.py
index c52c0cc..5fc8ebf 100644
--- a/uberwriter/application.py
+++ b/uberwriter/application.py
@@ -24,7 +24,7 @@ from uberwriter import main_window
from uberwriter.settings import Settings
from uberwriter.helpers import set_up_logging
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):
@@ -247,7 +247,9 @@ class Application(Gtk.Application):
PreferencesDialog(self.settings).show(self.window)
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").show()
@@ -255,14 +257,11 @@ class Application(Gtk.Application):
self.window.open_uberwriter_markdown()
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.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()
def on_quit(self, _action, _param):
diff --git a/uberwriter/export_dialog.py b/uberwriter/export_dialog.py
index 0f0effc..2c5b0c4 100644
--- a/uberwriter/export_dialog.py
+++ b/uberwriter/export_dialog.py
@@ -28,7 +28,6 @@ from gi.repository import Gtk
from uberwriter import helpers
from uberwriter.theme import Theme
-from uberwriter.helpers import get_builder
LOGGER = logging.getLogger('uberwriter')
@@ -150,7 +149,9 @@ class Export:
def __init__(self, filename):
"""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.stack = self.builder.get_object("export_stack")
self.stack_switcher = self.builder.get_object("format_switcher")
diff --git a/uberwriter/headerbars.py b/uberwriter/headerbars.py
index d0a788f..a70af47 100644
--- a/uberwriter/headerbars.py
+++ b/uberwriter/headerbars.py
@@ -23,7 +23,6 @@ import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
-from uberwriter.helpers import get_builder
from uberwriter.helpers import get_descendant
@@ -141,13 +140,17 @@ def main_buttons(app):
Gtk.IconSize.BUTTON),
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")
open_button = Gtk.Button().new_with_label(_("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_treeview = get_descendant(recents, "recent_view", level=0)
diff --git a/uberwriter/helpers.py b/uberwriter/helpers.py
index 6700fbd..71df380 100644
--- a/uberwriter/helpers.py
+++ b/uberwriter/helpers.py
@@ -35,22 +35,6 @@ from uberwriter.config import get_data_file
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
diff --git a/uberwriter/main_window.py b/uberwriter/main_window.py
index f3b8e52..47de14e 100644
--- a/uberwriter/main_window.py
+++ b/uberwriter/main_window.py
@@ -36,7 +36,6 @@ import cairo
from uberwriter import helpers
from uberwriter.theme import Theme
-from uberwriter.helpers import get_builder
from uberwriter.sidebar import Sidebar
from uberwriter.search_and_replace import SearchAndReplace
@@ -72,7 +71,9 @@ class MainWindow(StyledWindow):
self.get_style_context().add_class('uberwriter-window')
# Set UI
- builder = get_builder('Window')
+ builder = Gtk.Builder()
+ builder.add_from_resource(
+ "/de/wolfvollprecht/UberWriter/ui/Window.ui")
root = builder.get_object("FullscreenOverlay")
self.connect("delete-event", self.on_delete_called)
self.add(root)
diff --git a/uberwriter/preferences_dialog.py b/uberwriter/preferences_dialog.py
index 5c374e8..5158298 100644
--- a/uberwriter/preferences_dialog.py
+++ b/uberwriter/preferences_dialog.py
@@ -27,7 +27,6 @@ from gi.repository import Gtk, Pango, GLib # pylint: disable=E0611
import logging
logger = logging.getLogger('uberwriter')
-from uberwriter.helpers import get_builder
class PreferencesDialog:
@@ -64,7 +63,9 @@ class PreferencesDialog:
def __init__(self, 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.set_active(self.settings.get_value("dark-mode-auto"))
diff --git a/uberwriter/preview_converter.py b/uberwriter/preview_converter.py
index 07fba58..693b92e 100644
--- a/uberwriter/preview_converter.py
+++ b/uberwriter/preview_converter.py
@@ -1,5 +1,6 @@
from queue import Queue
from threading import Thread
+import os
from gi.repository import GLib
diff --git a/uberwriter/preview_handler.py b/uberwriter/preview_handler.py
index 77b62de..4331957 100644
--- a/uberwriter/preview_handler.py
+++ b/uberwriter/preview_handler.py
@@ -4,12 +4,11 @@ from enum import auto, IntEnum
import gi
-from uberwriter.helpers import get_builder
from uberwriter.preview_renderer import PreviewRenderer
from uberwriter.settings import Settings
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_web_view import PreviewWebView
@@ -33,7 +32,9 @@ class PreviewHandler:
self.web_view = 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")
mode_button = builder.get_object("preview_mode_button")
self.mode_revealer = builder.get_object("preview_mode_revealer")
diff --git a/uberwriter/styled_window.py b/uberwriter/styled_window.py
index e88101e..b95ad03 100644
--- a/uberwriter/styled_window.py
+++ b/uberwriter/styled_window.py
@@ -4,7 +4,7 @@ from uberwriter import helpers
from uberwriter.theme import Theme
gi.require_version('Gtk', '3.0')
-from gi.repository import Gtk, GLib
+from gi.repository import Gtk, GLib, Gio
class StyledWindow(Gtk.ApplicationWindow):
@@ -27,8 +27,10 @@ class StyledWindow(Gtk.ApplicationWindow):
GLib.Variant("b", theme.is_dark))
# 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.load_from_path(helpers.get_css_path("gtk/base.css"))
+ style_provider.load_from_file(css_provider_file)
Gtk.StyleContext.add_provider_for_screen(
self.get_screen(), style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)