emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

emacs-29 1469aac20d: ; * src/pgtkfns.c (parse_resource_key): Use recursi


From: Eli Zaretskii
Subject: emacs-29 1469aac20d: ; * src/pgtkfns.c (parse_resource_key): Use recursive schema lookup
Date: Sun, 8 Jan 2023 06:48:47 -0500 (EST)

branch: emacs-29
commit 1469aac20d8ebcd3c5cca898b814c305278d4c27
Author: Tad Fisher <tadfisher@gmail.com>
Commit: Eli Zaretskii <eliz@gnu.org>

    ; * 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.
    
    Bug#60565
    
    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 6b3a0459d3..6e5bb22375 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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]