nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch
Jan Tojnar f63d94eba3
gnome3.gpaste: hard-code paths
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.
2018-08-01 19:14:30 +02:00

56 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;