Subject: bug#60565: closed (Re: bug#60565: [PATCH] src/pgtkfns.c (parse_resource_key): Use recursive schema lookup)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 08 Jan 2023 11:50:02 +0000

Your bug report

#60565: [PATCH] src/pgtkfns.c (parse_resource_key): Use recursive schema lookup

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
60565: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=60565
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#60565: [PATCH] src/pgtkfns.c (parse_resource_key): Use recursive schema lookup
From: Eli Zaretskii <[email-masked]>
To: Po Lu <[email-masked]>
Cc: [email-masked], [email-masked]
Date: Sun, 08 Jan 2023 13:49:36 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

> From: Po Lu <[email-masked]>
> Cc: [email-masked],  [email-masked]
> Date: Sun, 08 Jan 2023 09:14:18 +0800
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> > Should this go to the release branch?  IOW, is the problem serious
> > enough and/or was introduced recently enough for us to want it in
> > Emacs 29?
> 
> Yes, please.  It is likely to affect packagers of Emacs 29.

Thanks, installed, and closing the bug.

Subject: [PATCH] src/pgtkfns.c (parse_resource_key): Use recursive schema lookup
From: Tad Fisher <[email-masked]>
To: [email-masked]
Date: Thu, 5 Jan 2023 01:58:47 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

From 8e2cf80593dd78030929f96f0f1a3e1a325428a4 Mon Sep 17 00:00:00 2001
From: Tad Fisher <[email-masked]>
Date: Wed, 4 Jan 2023 13:40:17 -0800
Subject: [PATCH] ; * src/pgtkfns.c (parse_resource_key): Use recursive schema lookup

XDG_DATA_DIRS may consist of multiple directories, and
g_settings_schema_source_get_default composes these into a recursive
schema source. One must pass TRUE to g_settings_schema_source_lookup,
otherwise only the first directory in XDG_DATA_DIRS is searched.

It follows that in the case that the directory containing the compiled
GSettings schema for Emacs is not the first in XDG_DATA_DIRS,
parse_resource_key will not accept any resource key, which causes
pgtk_get_defaults_value and pgtk_set_defaults_value to fail.

This impacts systems that compose multiple GSettings schema sources
via XDG_DATA_DIRS, such Flatpak and NixOS.

Supporting GIO documentation for g_settings_schema_source_get_default:

> The returned source may actually consist of multiple schema sources
> from different directories, depending on which directories were given
> in `XDG_DATA_DIRS` and `GSETTINGS_SCHEMA_DIR`. For this reason, all
> lookups performed against the default source should probably be done
> recursively.

Copyright-paperwork-exempt: yes
---
 src/pgtkfns.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/pgtkfns.c b/src/pgtkfns.c
index 6b3a0459d36..6e5bb22375a 100644
--- a/src/pgtkfns.c
+++ b/src/pgtkfns.c
@@ -1902,7 +1902,7 @@ parse_resource_key (const char *res_key, char *setting_key)
 
   /* check existence of setting_key */
   GSettingsSchemaSource *ssrc = g_settings_schema_source_get_default ();
-  GSettingsSchema *scm = g_settings_schema_source_lookup (ssrc, SCHEMA_ID, FALSE);
+  GSettingsSchema *scm = g_settings_schema_source_lookup (ssrc, SCHEMA_ID, TRUE);
   if (!scm)
     return NULL;	/* *.schema.xml is not installed. */
   if (!g_settings_schema_has_key (scm, setting_key))
-- 
2.38.1