summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta-xfce/recipes-apps/mousepad/files/0001-Plugin-support-Properly-handle-plugin-settings.patch279
-rw-r--r--meta-xfce/recipes-apps/mousepad/mousepad_0.5.7.bb (renamed from meta-xfce/recipes-apps/mousepad/mousepad_0.5.5.bb)4
2 files changed, 1 insertions, 282 deletions
diff --git a/meta-xfce/recipes-apps/mousepad/files/0001-Plugin-support-Properly-handle-plugin-settings.patch b/meta-xfce/recipes-apps/mousepad/files/0001-Plugin-support-Properly-handle-plugin-settings.patch
deleted file mode 100644
index 0ace907c41..0000000000
--- a/meta-xfce/recipes-apps/mousepad/files/0001-Plugin-support-Properly-handle-plugin-settings.patch
+++ /dev/null
@@ -1,279 +0,0 @@
1From 6d1800a305698f801236a2d73ebe178fa2d1139d Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Ga=C3=ABl=20Bonithon?= <gael@xfce.org>
3Date: Sat, 12 Jun 2021 16:45:56 +0200
4Subject: [PATCH] Plugin support: Properly handle plugin settings
5
6What was done in !92 was strictly speaking only suitable for one plugin.
7This could be extended to several plugins by adding a `.gschema.xml`
8file in `plugins/`, intermediate between the one of the application and
9those of the plugins, or by refactoring the Makefiles with inclusions
10and a single call to `@GSETTINGS_RULES@`.
11
12But in any case, due to the relative rigidity of the `.gschema.xml` file
13format and the internal workings of `glib-compile-schemas`, this would
14only be suitable for plugins that are present at compile time, i.e.
15"fake plugins".
16
17Instead, this commit adds the plugin settings at load time, as is
18natural and as the `GSettingsSchema` documentation states. To do this,
19the setting store is extended to contain several roots: the application
20root and the plugin roots.
21
22For the latter, a unified naming convention is preserved, with the
23prefix `org.xfce.mousepad.plugins.`, but they are in fact completely
24independent of each other and independent of the application root.
25
26Fixes #136, related to !92.
27
28Upstream-Status: Backport [https://gitlab.xfce.org/apps/mousepad/-/commit/0d9d4f05aace800118d0a390e4e5dc5ebb940ca5]
29
30Signed-off-by: Changqing Li <changqing.li@windriver.com>
31---
32 mousepad/mousepad-application.c | 12 +++-
33 mousepad/mousepad-settings-store.c | 70 ++++++++++++-------
34 mousepad/mousepad-settings-store.h | 3 +
35 mousepad/mousepad-settings.c | 14 +++-
36 mousepad/mousepad-settings.h | 1 +
37 mousepad/org.xfce.mousepad.gschema.xml | 1 -
38 ...g.xfce.mousepad.plugins.gspell.gschema.xml | 4 --
39 7 files changed, 71 insertions(+), 34 deletions(-)
40
41diff --git a/mousepad/mousepad-application.c b/mousepad/mousepad-application.c
42index d9a64ff..378d78e 100644
43--- a/mousepad/mousepad-application.c
44+++ b/mousepad/mousepad-application.c
45@@ -721,7 +721,7 @@ mousepad_application_load_plugins (MousepadApplication *application)
46 GError *error = NULL;
47 GDir *dir;
48 const gchar *basename;
49- gchar *provider_name;
50+ gchar *provider_name, *schema_id;
51 gchar **strs;
52 gsize n_strs;
53
54@@ -775,6 +775,16 @@ mousepad_application_load_plugins (MousepadApplication *application)
55 application, G_CONNECT_SWAPPED);
56 g_action_map_add_action (G_ACTION_MAP (application), G_ACTION (action));
57
58+ /* add its settings to the setting store */
59+ if (g_str_has_prefix (provider_name, "mousepad-plugin-"))
60+ schema_id = provider_name + 16;
61+ else
62+ schema_id = provider_name;
63+
64+ schema_id = g_strconcat (MOUSEPAD_ID, ".plugins.", schema_id, NULL);
65+ mousepad_settings_add_root (schema_id);
66+ g_free (schema_id);
67+
68 /* instantiate this provider types and initialize its action state */
69 if (g_strv_contains ((const gchar *const *) strs, provider_name))
70 {
71diff --git a/mousepad/mousepad-settings-store.c b/mousepad/mousepad-settings-store.c
72index de989bd..d117c53 100644
73--- a/mousepad/mousepad-settings-store.c
74+++ b/mousepad/mousepad-settings-store.c
75@@ -29,9 +29,11 @@
76
77 struct MousepadSettingsStore_
78 {
79- GObject parent;
80- GSettings *root;
81- GHashTable *keys;
82+ GObject parent;
83+
84+ GSettingsBackend *backend;
85+ GList *roots;
86+ GHashTable *keys;
87 };
88
89
90@@ -76,8 +78,10 @@ mousepad_setting_key_new (const gchar *key_name,
91
92
93 static void
94-mousepad_setting_key_free (MousepadSettingKey *key)
95+mousepad_setting_key_free (gpointer data)
96 {
97+ MousepadSettingKey *key = data;
98+
99 if (G_LIKELY (key != NULL))
100 {
101 g_object_unref (key->settings);
102@@ -138,16 +142,16 @@ mousepad_settings_store_class_init (MousepadSettingsStoreClass *klass)
103 static void
104 mousepad_settings_store_finalize (GObject *object)
105 {
106- MousepadSettingsStore *self;
107+ MousepadSettingsStore *self = MOUSEPAD_SETTINGS_STORE (object);
108
109 g_return_if_fail (MOUSEPAD_IS_SETTINGS_STORE (object));
110
111- self = MOUSEPAD_SETTINGS_STORE (object);
112+ if (self->backend != NULL)
113+ g_object_unref (self->backend);
114
115+ g_list_free_full (self->roots, g_object_unref);
116 g_hash_table_destroy (self->keys);
117
118- g_object_unref (self->root);
119-
120 G_OBJECT_CLASS (mousepad_settings_store_parent_class)->finalize (object);
121 }
122
123@@ -212,28 +216,19 @@ static void
124 mousepad_settings_store_init (MousepadSettingsStore *self)
125 {
126 #ifdef MOUSEPAD_SETTINGS_KEYFILE_BACKEND
127- GSettingsBackend *backend;
128- gchar *conf_file;
129- conf_file = g_build_filename (g_get_user_config_dir (),
130- "Mousepad",
131- "settings.conf",
132- NULL);
133- backend = g_keyfile_settings_backend_new (conf_file, "/", NULL);
134+ gchar *conf_file;
135+
136+ conf_file = g_build_filename (g_get_user_config_dir (), "Mousepad", "settings.conf", NULL);
137+ self->backend = g_keyfile_settings_backend_new (conf_file, "/", NULL);
138 g_free (conf_file);
139- self->root = g_settings_new_with_backend (MOUSEPAD_ID, backend);
140- g_object_unref (backend);
141 #else
142- self->root = g_settings_new (MOUSEPAD_ID);
143+ self->backend = NULL;
144 #endif
145
146- self->keys = g_hash_table_new_full (g_str_hash,
147- g_str_equal,
148- NULL,
149- (GDestroyNotify) mousepad_setting_key_free);
150+ self->roots = NULL;
151+ self->keys = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, mousepad_setting_key_free);
152
153- mousepad_settings_store_add_settings (self, MOUSEPAD_ID,
154- g_settings_schema_source_get_default (),
155- self->root);
156+ mousepad_settings_store_add_root (self, MOUSEPAD_ID);
157 }
158
159
160@@ -246,6 +241,31 @@ mousepad_settings_store_new (void)
161
162
163
164+void
165+mousepad_settings_store_add_root (MousepadSettingsStore *self,
166+ const gchar *schema_id)
167+{
168+ GSettingsSchemaSource *source;
169+ GSettingsSchema *schema;
170+ GSettings *root;
171+
172+ source = g_settings_schema_source_get_default ();
173+ schema = g_settings_schema_source_lookup (source, schema_id, TRUE);
174+
175+ /* exit silently if no schema is found: plugins may have settings or not */
176+ if (schema == NULL)
177+ return;
178+
179+ root = g_settings_new_full (schema, self->backend, NULL);
180+ g_settings_schema_unref (schema);
181+
182+ self->roots = g_list_prepend (self->roots, root);
183+
184+ mousepad_settings_store_add_settings (self, schema_id, source, root);
185+}
186+
187+
188+
189 const gchar *
190 mousepad_settings_store_lookup_key_name (MousepadSettingsStore *self,
191 const gchar *setting)
192diff --git a/mousepad/mousepad-settings-store.h b/mousepad/mousepad-settings-store.h
193index 3f5cae1..4842036 100644
194--- a/mousepad/mousepad-settings-store.h
195+++ b/mousepad/mousepad-settings-store.h
196@@ -38,6 +38,9 @@ GType mousepad_settings_store_get_type (void);
197
198 MousepadSettingsStore *mousepad_settings_store_new (void);
199
200+void mousepad_settings_store_add_root (MousepadSettingsStore *store,
201+ const gchar *schema_id);
202+
203 const gchar *mousepad_settings_store_lookup_key_name (MousepadSettingsStore *store,
204 const gchar *setting);
205
206diff --git a/mousepad/mousepad-settings.c b/mousepad/mousepad-settings.c
207index d071de6..66b338d 100644
208--- a/mousepad/mousepad-settings.c
209+++ b/mousepad/mousepad-settings.c
210@@ -24,6 +24,15 @@ static MousepadSettingsStore *settings_store = NULL;
211
212
213
214+void
215+mousepad_settings_init (void)
216+{
217+ if (settings_store == NULL)
218+ settings_store = mousepad_settings_store_new ();
219+}
220+
221+
222+
223 void
224 mousepad_settings_finalize (void)
225 {
226@@ -39,10 +48,9 @@ mousepad_settings_finalize (void)
227
228
229 void
230-mousepad_settings_init (void)
231+mousepad_settings_add_root (const gchar *schema_id)
232 {
233- if (settings_store == NULL)
234- settings_store = mousepad_settings_store_new ();
235+ mousepad_settings_store_add_root (settings_store, schema_id);
236 }
237
238
239diff --git a/mousepad/mousepad-settings.h b/mousepad/mousepad-settings.h
240index bc63d11..615be51 100644
241--- a/mousepad/mousepad-settings.h
242+++ b/mousepad/mousepad-settings.h
243@@ -87,6 +87,7 @@ G_BEGIN_DECLS
244
245 void mousepad_settings_init (void);
246 void mousepad_settings_finalize (void);
247+void mousepad_settings_add_root (const gchar *schema_id);
248
249 void mousepad_setting_bind (const gchar *setting,
250 gpointer object,
251diff --git a/mousepad/org.xfce.mousepad.gschema.xml b/mousepad/org.xfce.mousepad.gschema.xml
252index e802719..8509ee3 100644
253--- a/mousepad/org.xfce.mousepad.gschema.xml
254+++ b/mousepad/org.xfce.mousepad.gschema.xml
255@@ -39,7 +39,6 @@
256
257 <!-- generic schemas -->
258 <schema id="org.xfce.mousepad" path="/org/xfce/mousepad/" gettext-domain="mousepad">
259- <child name="plugins" schema="org.xfce.mousepad.plugins"/>
260 <child name="preferences" schema="org.xfce.mousepad.preferences"/>
261 <child name="state" schema="org.xfce.mousepad.state"/>
262 </schema>
263diff --git a/plugins/gspell-plugin/org.xfce.mousepad.plugins.gspell.gschema.xml b/plugins/gspell-plugin/org.xfce.mousepad.plugins.gspell.gschema.xml
264index 6db65b6..95295ba 100644
265--- a/plugins/gspell-plugin/org.xfce.mousepad.plugins.gspell.gschema.xml
266+++ b/plugins/gspell-plugin/org.xfce.mousepad.plugins.gspell.gschema.xml
267@@ -1,9 +1,5 @@
268 <schemalist>
269
270- <schema id="org.xfce.mousepad.plugins" path="/org/xfce/mousepad/plugins/" gettext-domain="mousepad">
271- <child name="gspell" schema="org.xfce.mousepad.plugins.gspell"/>
272- </schema>
273-
274 <schema id="org.xfce.mousepad.plugins.gspell" path="/org/xfce/mousepad/plugins/gspell/" gettext-domain="mousepad">
275 <child name="preferences" schema="org.xfce.mousepad.plugins.gspell.preferences"/>
276 </schema>
277--
2782.17.1
279
diff --git a/meta-xfce/recipes-apps/mousepad/mousepad_0.5.5.bb b/meta-xfce/recipes-apps/mousepad/mousepad_0.5.7.bb
index bab564288e..4897a7eca7 100644
--- a/meta-xfce/recipes-apps/mousepad/mousepad_0.5.5.bb
+++ b/meta-xfce/recipes-apps/mousepad/mousepad_0.5.7.bb
@@ -7,9 +7,7 @@ DEPENDS = "gtk+3 gtksourceview4 xfconf xfce4-dev-tools-native"
7 7
8inherit xfce-app gsettings mime-xdg 8inherit xfce-app gsettings mime-xdg
9 9
10SRC_URI += "file://0001-Plugin-support-Properly-handle-plugin-settings.patch" 10SRC_URI[sha256sum] = "105315743042e09e794037ab0594a1c47cbbf0b6b834dffed157192f4f03bde8"
11
12SRC_URI[sha256sum] = "40c35f00e0e10df50a59bd0dbba9007d2fb5574ed8a2aa73b0fc5ef40e64abe1"
13 11
14PACKAGECONFIG ??= "" 12PACKAGECONFIG ??= ""
15PACKAGECONFIG[spell] = "--enable-plugin-gspell,--disable-plugin-gspell,gspell" 13PACKAGECONFIG[spell] = "--enable-plugin-gspell,--disable-plugin-gspell,gspell"