initial port to gresources

ft.librem5
Manuel Genovés 2019-11-04 23:05:03 +01:00
parent b7c9eafbdb
commit 3af59e2c1d
14 changed files with 119 additions and 52 deletions

View File

@ -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(

View File

@ -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>

View File

@ -8,9 +8,9 @@
<property name="window_position">center</property>
<property name="type_hint">dialog</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="website">http://uberwriter.github.io/uberwriter</property>
<property name="website">@package_url@</property>
<property name="website_label" translatable="yes">Uberwriter website</property>
<property name="authors">Wolf Vollprecht &lt;w.vollprecht@gmail.com&gt;
Manuel Genovés &lt;manuel.genoves@gmail.com&gt;</property>
@ -25,7 +25,7 @@ naxuroqa (German)
Wolf
Manuel (Spanish, Catalan)</property>
<property name="artists">Tobias Bernard &lt;hi@tobiasbernard.com&gt;</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>
<child type="titlebar">
<placeholder/>

View File

@ -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

View File

@ -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()

View File

@ -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):

View File

@ -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")

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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"))

View File

@ -1,5 +1,6 @@
from queue import Queue
from threading import Thread
import os
from gi.repository import GLib

View File

@ -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")

View File

@ -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)