All of lore.kernel.org
 help / color / mirror / Atom feed
* [meta-xfce][PATCH] mousepad: fix warning during postinst
@ 2021-06-15  7:45 Changqing Li
  2021-06-15 13:49 ` [oe] " Andreas Müller
  0 siblings, 1 reply; 2+ messages in thread
From: Changqing Li @ 2021-06-15  7:45 UTC (permalink / raw)
  To: openembedded-devel

From: Changqing Li <changqing.li@windriver.com>

fix below warning during do_rootfs:
[log_check] Warning: undefined reference to <schema id='org.xfce.mousepad.plugins'/>

Signed-off-by: Changqing Li <changqing.li@windriver.com>
---
 ...port-Properly-handle-plugin-settings.patch | 279 ++++++++++++++++++
 .../recipes-apps/mousepad/mousepad_0.5.5.bb   |   2 +
 2 files changed, 281 insertions(+)
 create mode 100644 meta-xfce/recipes-apps/mousepad/files/0001-Plugin-support-Properly-handle-plugin-settings.patch

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
new file mode 100644
index 000000000..0ace907c4
--- /dev/null
+++ b/meta-xfce/recipes-apps/mousepad/files/0001-Plugin-support-Properly-handle-plugin-settings.patch
@@ -0,0 +1,279 @@
+From 6d1800a305698f801236a2d73ebe178fa2d1139d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ga=C3=ABl=20Bonithon?= <gael@xfce.org>
+Date: Sat, 12 Jun 2021 16:45:56 +0200
+Subject: [PATCH] Plugin support: Properly handle plugin settings
+
+What was done in !92 was strictly speaking only suitable for one plugin.
+This could be extended to several plugins by adding a `.gschema.xml`
+file in `plugins/`, intermediate between the one of the application and
+those of the plugins, or by refactoring the Makefiles with inclusions
+and a single call to `@GSETTINGS_RULES@`.
+
+But in any case, due to the relative rigidity of the `.gschema.xml` file
+format and the internal workings of `glib-compile-schemas`, this would
+only be suitable for plugins that are present at compile time, i.e.
+"fake plugins".
+
+Instead, this commit adds the plugin settings at load time, as is
+natural and as the `GSettingsSchema` documentation states. To do this,
+the setting store is extended to contain several roots: the application
+root and the plugin roots.
+
+For the latter, a unified naming convention is preserved, with the
+prefix `org.xfce.mousepad.plugins.`, but they are in fact completely
+independent of each other and independent of the application root.
+
+Fixes #136, related to !92.
+
+Upstream-Status: Backport [https://gitlab.xfce.org/apps/mousepad/-/commit/0d9d4f05aace800118d0a390e4e5dc5ebb940ca5]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ mousepad/mousepad-application.c               | 12 +++-
+ mousepad/mousepad-settings-store.c            | 70 ++++++++++++-------
+ mousepad/mousepad-settings-store.h            |  3 +
+ mousepad/mousepad-settings.c                  | 14 +++-
+ mousepad/mousepad-settings.h                  |  1 +
+ mousepad/org.xfce.mousepad.gschema.xml        |  1 -
+ ...g.xfce.mousepad.plugins.gspell.gschema.xml |  4 --
+ 7 files changed, 71 insertions(+), 34 deletions(-)
+
+diff --git a/mousepad/mousepad-application.c b/mousepad/mousepad-application.c
+index d9a64ff..378d78e 100644
+--- a/mousepad/mousepad-application.c
++++ b/mousepad/mousepad-application.c
+@@ -721,7 +721,7 @@ mousepad_application_load_plugins (MousepadApplication *application)
+   GError                  *error = NULL;
+   GDir                    *dir;
+   const gchar             *basename;
+-  gchar                   *provider_name;
++  gchar                   *provider_name, *schema_id;
+   gchar                  **strs;
+   gsize                    n_strs;
+ 
+@@ -775,6 +775,16 @@ mousepad_application_load_plugins (MousepadApplication *application)
+                                            application, G_CONNECT_SWAPPED);
+           g_action_map_add_action (G_ACTION_MAP (application), G_ACTION (action));
+ 
++          /* add its settings to the setting store */
++          if (g_str_has_prefix (provider_name, "mousepad-plugin-"))
++            schema_id = provider_name + 16;
++          else
++            schema_id = provider_name;
++
++          schema_id = g_strconcat (MOUSEPAD_ID, ".plugins.", schema_id, NULL);
++          mousepad_settings_add_root (schema_id);
++          g_free (schema_id);
++
+           /* instantiate this provider types and initialize its action state */
+           if (g_strv_contains ((const gchar *const *) strs, provider_name))
+             {
+diff --git a/mousepad/mousepad-settings-store.c b/mousepad/mousepad-settings-store.c
+index de989bd..d117c53 100644
+--- a/mousepad/mousepad-settings-store.c
++++ b/mousepad/mousepad-settings-store.c
+@@ -29,9 +29,11 @@
+ 
+ struct MousepadSettingsStore_
+ {
+-  GObject     parent;
+-  GSettings  *root;
+-  GHashTable *keys;
++  GObject parent;
++
++  GSettingsBackend *backend;
++  GList            *roots;
++  GHashTable       *keys;
+ };
+ 
+ 
+@@ -76,8 +78,10 @@ mousepad_setting_key_new (const gchar *key_name,
+ 
+ 
+ static void
+-mousepad_setting_key_free (MousepadSettingKey *key)
++mousepad_setting_key_free (gpointer data)
+ {
++  MousepadSettingKey *key = data;
++
+   if (G_LIKELY (key != NULL))
+     {
+       g_object_unref (key->settings);
+@@ -138,16 +142,16 @@ mousepad_settings_store_class_init (MousepadSettingsStoreClass *klass)
+ static void
+ mousepad_settings_store_finalize (GObject *object)
+ {
+-  MousepadSettingsStore *self;
++  MousepadSettingsStore *self = MOUSEPAD_SETTINGS_STORE (object);
+ 
+   g_return_if_fail (MOUSEPAD_IS_SETTINGS_STORE (object));
+ 
+-  self = MOUSEPAD_SETTINGS_STORE (object);
++  if (self->backend != NULL)
++    g_object_unref (self->backend);
+ 
++  g_list_free_full (self->roots, g_object_unref);
+   g_hash_table_destroy (self->keys);
+ 
+-  g_object_unref (self->root);
+-
+   G_OBJECT_CLASS (mousepad_settings_store_parent_class)->finalize (object);
+ }
+ 
+@@ -212,28 +216,19 @@ static void
+ mousepad_settings_store_init (MousepadSettingsStore *self)
+ {
+ #ifdef MOUSEPAD_SETTINGS_KEYFILE_BACKEND
+-  GSettingsBackend *backend;
+-  gchar            *conf_file;
+-  conf_file = g_build_filename (g_get_user_config_dir (),
+-                                "Mousepad",
+-                                "settings.conf",
+-                                NULL);
+-  backend = g_keyfile_settings_backend_new (conf_file, "/", NULL);
++  gchar *conf_file;
++
++  conf_file = g_build_filename (g_get_user_config_dir (), "Mousepad", "settings.conf", NULL);
++  self->backend = g_keyfile_settings_backend_new (conf_file, "/", NULL);
+   g_free (conf_file);
+-  self->root = g_settings_new_with_backend (MOUSEPAD_ID, backend);
+-  g_object_unref (backend);
+ #else
+-  self->root = g_settings_new (MOUSEPAD_ID);
++  self->backend = NULL;
+ #endif
+ 
+-  self->keys = g_hash_table_new_full (g_str_hash,
+-                                      g_str_equal,
+-                                      NULL,
+-                                      (GDestroyNotify) mousepad_setting_key_free);
++  self->roots = NULL;
++  self->keys = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, mousepad_setting_key_free);
+ 
+-  mousepad_settings_store_add_settings (self, MOUSEPAD_ID,
+-                                        g_settings_schema_source_get_default (),
+-                                        self->root);
++  mousepad_settings_store_add_root (self, MOUSEPAD_ID);
+ }
+ 
+ 
+@@ -246,6 +241,31 @@ mousepad_settings_store_new (void)
+ 
+ 
+ 
++void
++mousepad_settings_store_add_root (MousepadSettingsStore *self,
++                                  const gchar           *schema_id)
++{
++  GSettingsSchemaSource *source;
++  GSettingsSchema       *schema;
++  GSettings             *root;
++
++  source = g_settings_schema_source_get_default ();
++  schema = g_settings_schema_source_lookup (source, schema_id, TRUE);
++
++  /* exit silently if no schema is found: plugins may have settings or not */
++  if (schema == NULL)
++    return;
++
++  root = g_settings_new_full (schema, self->backend, NULL);
++  g_settings_schema_unref (schema);
++
++  self->roots = g_list_prepend (self->roots, root);
++
++  mousepad_settings_store_add_settings (self, schema_id, source, root);
++}
++
++
++
+ const gchar *
+ mousepad_settings_store_lookup_key_name (MousepadSettingsStore *self,
+                                          const gchar           *setting)
+diff --git a/mousepad/mousepad-settings-store.h b/mousepad/mousepad-settings-store.h
+index 3f5cae1..4842036 100644
+--- a/mousepad/mousepad-settings-store.h
++++ b/mousepad/mousepad-settings-store.h
+@@ -38,6 +38,9 @@ GType                  mousepad_settings_store_get_type        (void);
+ 
+ MousepadSettingsStore *mousepad_settings_store_new             (void);
+ 
++void                   mousepad_settings_store_add_root        (MousepadSettingsStore  *store,
++                                                                const gchar            *schema_id);
++
+ const gchar           *mousepad_settings_store_lookup_key_name (MousepadSettingsStore  *store,
+                                                                 const gchar            *setting);
+ 
+diff --git a/mousepad/mousepad-settings.c b/mousepad/mousepad-settings.c
+index d071de6..66b338d 100644
+--- a/mousepad/mousepad-settings.c
++++ b/mousepad/mousepad-settings.c
+@@ -24,6 +24,15 @@ static MousepadSettingsStore *settings_store = NULL;
+ 
+ 
+ 
++void
++mousepad_settings_init (void)
++{
++  if (settings_store == NULL)
++    settings_store = mousepad_settings_store_new ();
++}
++
++
++
+ void
+ mousepad_settings_finalize (void)
+ {
+@@ -39,10 +48,9 @@ mousepad_settings_finalize (void)
+ 
+ 
+ void
+-mousepad_settings_init (void)
++mousepad_settings_add_root (const gchar *schema_id)
+ {
+-  if (settings_store == NULL)
+-    settings_store = mousepad_settings_store_new ();
++  mousepad_settings_store_add_root (settings_store, schema_id);
+ }
+ 
+ 
+diff --git a/mousepad/mousepad-settings.h b/mousepad/mousepad-settings.h
+index bc63d11..615be51 100644
+--- a/mousepad/mousepad-settings.h
++++ b/mousepad/mousepad-settings.h
+@@ -87,6 +87,7 @@ G_BEGIN_DECLS
+ 
+ void       mousepad_settings_init          (void);
+ void       mousepad_settings_finalize      (void);
++void       mousepad_settings_add_root      (const gchar        *schema_id);
+ 
+ void       mousepad_setting_bind           (const gchar        *setting,
+                                             gpointer            object,
+diff --git a/mousepad/org.xfce.mousepad.gschema.xml b/mousepad/org.xfce.mousepad.gschema.xml
+index e802719..8509ee3 100644
+--- a/mousepad/org.xfce.mousepad.gschema.xml
++++ b/mousepad/org.xfce.mousepad.gschema.xml
+@@ -39,7 +39,6 @@
+ 
+   <!-- generic schemas -->
+   <schema id="org.xfce.mousepad" path="/org/xfce/mousepad/" gettext-domain="mousepad">
+-    <child name="plugins" schema="org.xfce.mousepad.plugins"/>
+     <child name="preferences" schema="org.xfce.mousepad.preferences"/>
+     <child name="state" schema="org.xfce.mousepad.state"/>
+   </schema>
+diff --git a/plugins/gspell-plugin/org.xfce.mousepad.plugins.gspell.gschema.xml b/plugins/gspell-plugin/org.xfce.mousepad.plugins.gspell.gschema.xml
+index 6db65b6..95295ba 100644
+--- a/plugins/gspell-plugin/org.xfce.mousepad.plugins.gspell.gschema.xml
++++ b/plugins/gspell-plugin/org.xfce.mousepad.plugins.gspell.gschema.xml
+@@ -1,9 +1,5 @@
+ <schemalist>
+ 
+-  <schema id="org.xfce.mousepad.plugins" path="/org/xfce/mousepad/plugins/" gettext-domain="mousepad">
+-    <child name="gspell" schema="org.xfce.mousepad.plugins.gspell"/>
+-  </schema>
+-
+   <schema id="org.xfce.mousepad.plugins.gspell" path="/org/xfce/mousepad/plugins/gspell/" gettext-domain="mousepad">
+     <child name="preferences" schema="org.xfce.mousepad.plugins.gspell.preferences"/>
+   </schema>
+-- 
+2.17.1
+
diff --git a/meta-xfce/recipes-apps/mousepad/mousepad_0.5.5.bb b/meta-xfce/recipes-apps/mousepad/mousepad_0.5.5.bb
index 830d86b8a..a93ff551b 100644
--- a/meta-xfce/recipes-apps/mousepad/mousepad_0.5.5.bb
+++ b/meta-xfce/recipes-apps/mousepad/mousepad_0.5.5.bb
@@ -7,6 +7,8 @@ DEPENDS = "gtk+3 gtksourceview4 xfconf xfce4-dev-tools-native"
 
 inherit xfce-app gsettings mime-xdg
 
+SRC_URI += "file://0001-Plugin-support-Properly-handle-plugin-settings.patch"
+
 SRC_URI[sha256sum] = "40c35f00e0e10df50a59bd0dbba9007d2fb5574ed8a2aa73b0fc5ef40e64abe1"
 
 PACKAGECONFIG ??= ""
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [oe] [meta-xfce][PATCH] mousepad: fix warning during postinst
  2021-06-15  7:45 [meta-xfce][PATCH] mousepad: fix warning during postinst Changqing Li
@ 2021-06-15 13:49 ` Andreas Müller
  0 siblings, 0 replies; 2+ messages in thread
From: Andreas Müller @ 2021-06-15 13:49 UTC (permalink / raw)
  To: Changqing Li; +Cc: openembeded-devel

On Tue, Jun 15, 2021 at 9:47 AM Changqing Li <changqing.li@windriver.com> wrote:
>
> From: Changqing Li <changqing.li@windriver.com>
>
> fix below warning during do_rootfs:
> [log_check] Warning: undefined reference to <schema id='org.xfce.mousepad.plugins'/>

That was really annoying - thanks for this fix

Cheers,

Andreas

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-06-15 13:49 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-15  7:45 [meta-xfce][PATCH] mousepad: fix warning during postinst Changqing Li
2021-06-15 13:49 ` [oe] " Andreas Müller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.