f63d94eba3
GPaste GNOME Shell extension uses GPaste library generated via introspection. Previously, we added the gpaste package to services.xserver.desktopManager.gnome3.sessionPath option, which added its typelib directory to GI_TYPELIB_PATH environment variable globally, in order for GNOME Shell to be able to find it. This is not very Nix-y, though, so we have decided to patch the code to append the path to the GI repository search path. Additionally, the code relies on GPaste’s GSettings schemas, so we had to hard-code the paths to them as well. We ignored the GNOME Shell’s schemas, since they will already be available for the extension inside GNOME Shell program.
55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
--- a/src/gnome-shell/extension.js
|
|
+++ b/src/gnome-shell/extension.js
|
|
@@ -7,6 +7,8 @@
|
|
|
|
const Config = imports.misc.config;
|
|
|
|
+imports.gi.GIRepository.Repository.prepend_search_path('@typelibPath@');
|
|
+
|
|
imports.gi.versions.Clutter = Config.LIBMUTTER_API_VERSION;
|
|
imports.gi.versions.GLib = '2.0';
|
|
imports.gi.versions.GPaste = '1.0';
|
|
--- a/src/gnome-shell/prefs.js
|
|
+++ b/src/gnome-shell/prefs.js
|
|
@@ -7,6 +7,8 @@
|
|
|
|
const Gettext = imports.gettext;
|
|
|
|
+imports.gi.GIRepository.Repository.prepend_search_path('@typelibPath@');
|
|
+
|
|
const GPaste = imports.gi.GPaste;
|
|
|
|
const ExtensionUtils = imports.misc.extensionUtils;
|
|
--- a/src/libgpaste/settings/gpaste-settings.c
|
|
+++ b/src/libgpaste/settings/gpaste-settings.c
|
|
@@ -22,6 +22,8 @@
|
|
|
|
typedef struct
|
|
{
|
|
+ GSettingsSchemaSource *schema_source;
|
|
+ GSettingsSchema *schema;
|
|
GSettings *settings;
|
|
GSettings *shell_settings;
|
|
|
|
@@ -919,6 +921,8 @@
|
|
{
|
|
g_signal_handler_disconnect (settings, priv->c_signals[C_CHANGED]);
|
|
g_clear_object (&priv->settings);
|
|
+ g_settings_schema_unref (priv->schema);
|
|
+ g_settings_schema_source_unref (priv->schema_source);
|
|
}
|
|
|
|
if (shell_settings)
|
|
@@ -1000,7 +1004,11 @@
|
|
g_paste_settings_init (GPasteSettings *self)
|
|
{
|
|
GPasteSettingsPrivate *priv = g_paste_settings_get_instance_private (self);
|
|
- GSettings *settings = priv->settings = g_settings_new (G_PASTE_SETTINGS_NAME);
|
|
+
|
|
+ // library used by introspection requires schemas but we cannot set XDG_DATA_DIRS for the library
|
|
+ GSettingsSchemaSource *schema_source = priv->schema_source = g_settings_schema_source_new_from_directory ("@gschemasCompiled@", NULL, FALSE, NULL);
|
|
+ priv->schema = g_settings_schema_source_lookup (schema_source, G_PASTE_SETTINGS_NAME, FALSE);
|
|
+ GSettings *settings = priv->settings = g_settings_new_full (priv->schema, NULL, NULL);
|
|
|
|
priv->history_name = NULL;
|
|
priv->launch_ui = NULL;
|