diff options
Diffstat (limited to 'abs/extra/gconf')
-rw-r--r-- | abs/extra/gconf/01_xml-gettext-domain.patch | 299 | ||||
-rw-r--r-- | abs/extra/gconf/05_from_vuntz_gconf2-pk-default-path.patch | 12 | ||||
-rw-r--r-- | abs/extra/gconf/PKGBUILD | 49 | ||||
-rwxr-xr-x | abs/extra/gconf/gconf-merge-schema | 34 | ||||
-rw-r--r-- | abs/extra/gconf/gconf-reload.patch | 20 | ||||
-rw-r--r-- | abs/extra/gconf/gconf.install | 26 | ||||
-rwxr-xr-x | abs/extra/gconf/gconfpkg | 50 | ||||
-rw-r--r-- | abs/extra/gconf/xml-gettext-domain.patch | 367 |
8 files changed, 857 insertions, 0 deletions
diff --git a/abs/extra/gconf/01_xml-gettext-domain.patch b/abs/extra/gconf/01_xml-gettext-domain.patch new file mode 100644 index 0000000..7491ca8 --- /dev/null +++ b/abs/extra/gconf/01_xml-gettext-domain.patch @@ -0,0 +1,299 @@ +# Description: Support calling gettext at runtime and putting the gettext domain into the .schemas file instead of replicating translations in /usr/share/gconf/schemas/*.schemas *and* /var/lib/gconf/defaults/%gconf-tree-$LANG.xml. This saves in the order of 90 MB uncompressed/10 MB compressed on hard disks. +# Ubuntu: https://bugs.launchpad.net/bugs/123025 +# Upstream: http://bugzilla.gnome.org/show_bug.cgi?id=568845 +diff -Nur -x '*.orig' -x '*~' gconf-2.25.0/backends/markup-tree.c gconf-2.25.0.new/backends/markup-tree.c +--- gconf-2.25.0/backends/markup-tree.c 2009-01-10 05:55:08.000000000 +0100 ++++ gconf-2.25.0.new/backends/markup-tree.c 2009-01-23 12:11:48.000000000 +0100 +@@ -52,6 +52,7 @@ + char *schema_name; + char *mod_user; + GTime mod_time; ++ char *gettext_domain; + }; + + static LocalSchemaInfo* local_schema_info_new (void); +@@ -1351,6 +1352,7 @@ + gconf_value_free (entry->value); + g_free (entry->schema_name); + g_free (entry->mod_user); ++ g_free (entry->gettext_domain); + + g_slist_foreach (entry->local_schemas, + (GFunc) local_schema_info_free, +@@ -1593,6 +1595,8 @@ + gconf_schema_get_type (schema)); + gconf_schema_set_owner (current_schema, + gconf_schema_get_owner (schema)); ++ gconf_schema_set_gettext_domain (current_schema, ++ gconf_schema_get_gettext_domain (schema)); + } + + /* Update mod time */ +@@ -1805,6 +1809,8 @@ + else if (c_local_schema && c_local_schema->long_desc) + gconf_schema_set_long_desc (schema, c_local_schema->long_desc); + ++ gconf_schema_set_gettext_domain (schema, entry->gettext_domain); ++ + return retval; + } + } +@@ -2339,8 +2345,9 @@ + const char *ltype; + const char *list_type; + const char *owner; ++ + GConfValueType vtype; +- const char *dummy1, *dummy2, *dummy3, *dummy4; ++ const char *dummy1, *dummy2, *dummy3, *dummy4, *dummy5; + + #if 0 + g_assert (ELEMENT_IS ("entry") || +@@ -2377,6 +2384,7 @@ + "muser", &dummy2, + "mtime", &dummy3, + "schema", &dummy4, ++ "gettext_domain", &dummy5, + + NULL)) + return; +@@ -2682,6 +2690,7 @@ + const char *mtime; + const char *schema; + const char *type; ++ const char *gettext_domain; + const char *dummy1, *dummy2, *dummy3, *dummy4; + const char *dummy5, *dummy6, *dummy7; + GConfValue *value; +@@ -2692,6 +2701,7 @@ + mtime = NULL; + schema = NULL; + type = NULL; ++ gettext_domain = NULL; + + if (!locate_attributes (context, element_name, attribute_names, attribute_values, + error, +@@ -2700,6 +2710,7 @@ + "mtime", &mtime, + "schema", &schema, + "type", &type, ++ "gettext_domain", &gettext_domain, + + /* These are allowed but we don't use them until + * parse_value_element +@@ -2767,6 +2778,9 @@ + */ + if (schema) + entry->schema_name = g_strdup (schema); ++ ++ if (gettext_domain) ++ entry->gettext_domain = g_strdup (gettext_domain); + } + else + { +@@ -3705,6 +3719,7 @@ + GConfSchema *schema; + GConfValueType stype; + const char *owner; ++ const char *gettext_domain; + + schema = gconf_value_get_schema (value); + +@@ -3730,6 +3745,23 @@ + + g_free (s); + } ++ ++ gettext_domain = gconf_schema_get_gettext_domain (schema); ++ ++ if (gettext_domain) ++ { ++ char *s; ++ ++ s = g_markup_escape_text (gettext_domain, -1); ++ ++ if (fprintf (f, " gettext_domain=\"%s\"", s) < 0) ++ { ++ g_free (s); ++ return FALSE; ++ } ++ ++ g_free (s); ++ } + + if (stype == GCONF_VALUE_LIST) + { +diff -Nur -x '*.orig' -x '*~' gconf-2.25.0/gconf/gconf-schema.c gconf-2.25.0.new/gconf/gconf-schema.c +--- gconf-2.25.0/gconf/gconf-schema.c 2009-01-10 05:55:07.000000000 +0100 ++++ gconf-2.25.0.new/gconf/gconf-schema.c 2009-01-23 12:11:48.000000000 +0100 +@@ -35,6 +35,7 @@ + gchar* owner; /* Name of creating application */ + gchar* short_desc; /* 40 char or less description, no newlines */ + gchar* long_desc; /* could be a paragraph or so */ ++ gchar* gettext_domain; /* description gettext domain */ + GConfValue* default_value; /* Default value of the key */ + } GConfRealSchema; + +@@ -63,6 +64,7 @@ + g_free (real->locale); + g_free (real->short_desc); + g_free (real->long_desc); ++ g_free (real->gettext_domain); + g_free (real->owner); + + if (real->default_value) +@@ -91,6 +93,8 @@ + + dest->long_desc = g_strdup (real->long_desc); + ++ dest->gettext_domain = g_strdup (real->gettext_domain); ++ + dest->owner = g_strdup (real->owner); + + dest->default_value = real->default_value ? gconf_value_copy (real->default_value) : NULL; +@@ -136,6 +140,20 @@ + REAL_SCHEMA (sc)->locale = NULL; + } + ++void ++gconf_schema_set_gettext_domain (GConfSchema* sc, const gchar* domain) ++{ ++ g_return_if_fail (domain == NULL || g_utf8_validate (domain, -1, NULL)); ++ ++ if (REAL_SCHEMA (sc)->gettext_domain) ++ g_free (REAL_SCHEMA (sc)->gettext_domain); ++ ++ if (domain) ++ REAL_SCHEMA (sc)->gettext_domain = g_strdup (domain); ++ else ++ REAL_SCHEMA (sc)->gettext_domain = NULL; ++} ++ + void + gconf_schema_set_short_desc (GConfSchema* sc, const gchar* desc) + { +@@ -228,6 +246,14 @@ + return FALSE; + } + ++ if (real->gettext_domain && !g_utf8_validate (real->gettext_domain, -1, NULL)) ++ { ++ g_set_error (err, GCONF_ERROR, ++ GCONF_ERROR_FAILED, ++ _("Schema contains invalid UTF-8")); ++ return FALSE; ++ } ++ + if (real->owner && !g_utf8_validate (real->owner, -1, NULL)) + { + g_set_error (err, GCONF_ERROR, +@@ -299,11 +325,22 @@ + } + + const char* ++gconf_schema_get_gettext_domain (const GConfSchema *schema) ++{ ++ g_return_val_if_fail (schema != NULL, NULL); ++ ++ return REAL_SCHEMA (schema)->gettext_domain; ++} ++ ++const char* + gconf_schema_get_short_desc (const GConfSchema *schema) + { + g_return_val_if_fail (schema != NULL, NULL); + +- return REAL_SCHEMA (schema)->short_desc; ++ if (REAL_SCHEMA (schema)->gettext_domain) ++ return g_dgettext(REAL_SCHEMA (schema)->gettext_domain, REAL_SCHEMA (schema)->short_desc); ++ else ++ return REAL_SCHEMA (schema)->short_desc; + } + + const char* +@@ -311,7 +348,10 @@ + { + g_return_val_if_fail (schema != NULL, NULL); + +- return REAL_SCHEMA (schema)->long_desc; ++ if (REAL_SCHEMA (schema)->gettext_domain) ++ return dgettext(REAL_SCHEMA (schema)->gettext_domain, REAL_SCHEMA (schema)->long_desc); ++ else ++ return REAL_SCHEMA (schema)->long_desc; + } + + const char* +diff -Nur -x '*.orig' -x '*~' gconf-2.25.0/gconf/gconf-schema.h gconf-2.25.0.new/gconf/gconf-schema.h +--- gconf-2.25.0/gconf/gconf-schema.h 2009-01-10 05:55:07.000000000 +0100 ++++ gconf-2.25.0.new/gconf/gconf-schema.h 2009-01-23 12:11:48.000000000 +0100 +@@ -48,6 +48,8 @@ + GConfValueType type); + void gconf_schema_set_locale (GConfSchema *sc, + const gchar *locale); ++void gconf_schema_set_gettext_domain (GConfSchema *sc, ++ const gchar *domain); + void gconf_schema_set_short_desc (GConfSchema *sc, + const gchar *desc); + void gconf_schema_set_long_desc (GConfSchema *sc, +@@ -65,6 +67,7 @@ + GConfValueType gconf_schema_get_car_type (const GConfSchema *schema); + GConfValueType gconf_schema_get_cdr_type (const GConfSchema *schema); + const char* gconf_schema_get_locale (const GConfSchema *schema); ++const char* gconf_schema_get_gettext_domain(const GConfSchema *schema); + const char* gconf_schema_get_short_desc (const GConfSchema *schema); + const char* gconf_schema_get_long_desc (const GConfSchema *schema); + const char* gconf_schema_get_owner (const GConfSchema *schema); +diff -Nur -x '*.orig' -x '*~' gconf-2.25.0/gconf/gconftool.c gconf-2.25.0.new/gconf/gconftool.c +--- gconf-2.25.0/gconf/gconftool.c 2009-01-10 05:55:07.000000000 +0100 ++++ gconf-2.25.0.new/gconf/gconftool.c 2009-01-23 12:11:48.000000000 +0100 +@@ -3293,6 +3293,7 @@ + GConfValueType cdr_type; + GConfValue* global_default; + GHashTable* hash; ++ gchar* gettext_domain; + }; + + static int +@@ -3545,6 +3546,15 @@ + else + g_printerr (_("WARNING: empty <applyto> node")); + } ++ else if (strcmp((char *)iter->name, "gettext_domain") == 0) ++ { ++ tmp = (char *)xmlNodeGetContent(iter); ++ if (tmp) ++ { ++ info->gettext_domain = g_strdup(tmp); ++ xmlFree(tmp); ++ } ++ } + else + g_printerr (_("WARNING: node <%s> not understood below <schema>\n"), + iter->name); +@@ -3634,6 +3644,9 @@ + if (info->owner != NULL) + gconf_schema_set_owner(schema, info->owner); + ++ if (info->gettext_domain != NULL) ++ gconf_schema_set_gettext_domain(schema, info->gettext_domain); ++ + xmlFree(name); + + /* Locale-specific info */ +@@ -3763,6 +3776,7 @@ + info.apply_to = NULL; + info.owner = NULL; + info.global_default = NULL; ++ info.gettext_domain = NULL; + info.hash = g_hash_table_new(g_str_hash, g_str_equal); + + extract_global_info(node, &info); +@@ -3799,6 +3813,8 @@ + ; /* nothing */ + else if (strcmp((char *)iter->name, "applyto") == 0) + ; /* nothing */ ++ else if (strcmp((char *)iter->name, "gettext_domain") == 0) ++ ; /* nothing */ + else if (strcmp((char *)iter->name, "locale") == 0) + { + process_locale_info(iter, &info); diff --git a/abs/extra/gconf/05_from_vuntz_gconf2-pk-default-path.patch b/abs/extra/gconf/05_from_vuntz_gconf2-pk-default-path.patch new file mode 100644 index 0000000..c303e19 --- /dev/null +++ b/abs/extra/gconf/05_from_vuntz_gconf2-pk-default-path.patch @@ -0,0 +1,12 @@ +diff -Nur -x '*.orig' -x '*~' gconf-2.25.2/defaults/gconf-defaults.c gconf-2.25.2.new/defaults/gconf-defaults.c +--- gconf-2.25.2/defaults/gconf-defaults.c 2009-02-17 01:15:19.000000000 +0100 ++++ gconf-2.25.2.new/defaults/gconf-defaults.c 2009-02-17 11:12:39.000000000 +0100 +@@ -507,7 +507,7 @@ + else { + annotation_key = "org.gnome.gconf.defaults.set-system.prefix"; + default_action = "org.gnome.gconf.defaults.set-system"; +- dest_address = "xml:merged:" SYSGCONFDIR "/gconf.xml.system"; ++ dest_address = "xml:merged:" SYSGCONFDIR "/gconf.xml.defaults"; + } + + for (i = 0; includes[i]; i++) { diff --git a/abs/extra/gconf/PKGBUILD b/abs/extra/gconf/PKGBUILD new file mode 100644 index 0000000..053e26a --- /dev/null +++ b/abs/extra/gconf/PKGBUILD @@ -0,0 +1,49 @@ +# $Id: PKGBUILD 33882 2009-04-05 19:42:30Z jgc $ +# Maintainer: Jan de Groot <jan@archlinux.org> + +pkgname=gconf +pkgver=2.26.0 +pkgrel=3 +pkgdesc="A configuration database system" +arch=(i686 x86_64) +license=('LGPL') +depends=('orbit2>=2.14.17' 'gtk2>=2.16.0' 'libxml2>=2.7.3' 'policykit>=0.9' 'libldap>=2.3.43') +makedepends=('pkgconfig' 'intltool>=0.40.6' 'gtk-doc>=1.10') +options=('!libtool') +install=gconf.install +url="http://www.gnome.org" +source=(http://ftp.gnome.org/pub/gnome/sources/GConf/2.26/GConf-${pkgver}.tar.bz2 + gconf-merge-schema + gconfpkg + gconf-reload.patch + xml-gettext-domain.patch + 05_from_vuntz_gconf2-pk-default-path.patch) +md5sums=('b010f0de356ea093c6a73778b13de956' + '240b473fa17b748fc9020caf372d936c' + 'b745f04b4121d8724c002b14a4c110b6' + 'cfcc8e15be7b8a48de4aa34336ff6090' + '1c8a0eece8202c4c2fbba596fe0d9c67' + 'd9a02aee25ec04f2340f4e98963aabb0') + +build() { + cd "${srcdir}/GConf-${pkgver}" + # Patch from fedora - reloads gconf after installing schemas + patch -Np1 -i "${srcdir}/gconf-reload.patch" || return 1 + # http://bugzilla.gnome.org/show_bug.cgi?id=568845 + patch -Np1 -i "${srcdir}/xml-gettext-domain.patch" || return 1 + # Patch from Ubuntu: change default path + patch -Np1 -i "${srcdir}/05_from_vuntz_gconf2-pk-default-path.patch" || return 1 + libtoolize --force --copy || return 1 + aclocal || return 1 + autoconf || return 1 + automake --add-missing || return 1 + ./configure --prefix=/usr --sysconfdir=/etc \ + --localstatedir=/var --libexecdir=/usr/lib/GConf \ + --disable-static --enable-defaults-service || return 1 + make pkglibdir=/usr/lib/GConf || return 1 + make DESTDIR="${pkgdir}" install || return 1 + install -m755 -d "${pkgdir}/etc/gconf/gconf.xml.system" || return 1 + install -m755 "${srcdir}/gconf-merge-schema" "${pkgdir}/usr/bin/" || return 1 + install -d -m755 "${pkgdir}/usr/sbin" + install -m755 "${srcdir}/gconfpkg" "${pkgdir}/usr/sbin/" || return 1 +} diff --git a/abs/extra/gconf/gconf-merge-schema b/abs/extra/gconf/gconf-merge-schema new file mode 100755 index 0000000..992c162 --- /dev/null +++ b/abs/extra/gconf/gconf-merge-schema @@ -0,0 +1,34 @@ +#!/bin/bash +if [ ! "$1" -a ! "$2" ]; then + echo "Usage: $0 output.schemas [--domain gettextdomain] file1.schemas [file2.schemas [...]]" + exit 1 +fi + +OUTFILE="$1" +DOMAIN="" +shift + +if [ "$1" = "--domain" ]; then + shift + DOMAIN=$1 + shift +fi + +echo '<?xml version="1.0"?>' > "$OUTFILE" +echo '<gconfschemafile><schemalist>' >> "$OUTFILE" + +while [ "$1" ]; do + if [ -f "$1" ]; then + sed -e '/<?xml/d' \ + -e 's|<gconfschemafile>||g' \ + -e 's|</gconfschemafile>||g' \ + -e 's|<schemalist>||g' \ + -e 's|</schemalist>||g' "$1" >> "$OUTFILE" + fi + shift +done + +echo '</schemalist></gconfschemafile>' >> "$OUTFILE" +if [ "$DOMAIN" != "" ]; then + sed -ri "s/^([[:space:]]*)(<locale name=\"C\">)/\1<gettext_domain>$DOMAIN<\/gettext_domain>\n\1\2/; /^[[:space:]]*<locale name=\"[^C]/,/^[[:space:]]*<\/locale>[[:space:]]*\$/ d; /^$/d; s/<\/schema>$/&\n/" "$OUTFILE" +fi diff --git a/abs/extra/gconf/gconf-reload.patch b/abs/extra/gconf/gconf-reload.patch new file mode 100644 index 0000000..910f0da --- /dev/null +++ b/abs/extra/gconf/gconf-reload.patch @@ -0,0 +1,20 @@ +--- GConf-2.16.0/gconf/gconftool.c.orig 2006-10-14 17:37:14.000000000 +0000 ++++ GConf-2.16.0/gconf/gconftool.c 2006-10-14 17:39:27.000000000 +0000 +@@ -963,6 +963,8 @@ main (int argc, char** argv) + + gconf_engine_unref (conf); + ++ g_spawn_command_line_sync ("/usr/bin/killall -q -TERM " GCONF_SERVERDIR "/" GCONFD, NULL, NULL, NULL, NULL); ++ + return retval; + } + +@@ -975,6 +977,8 @@ main (int argc, char** argv) + + gconf_engine_unref (conf); + ++ g_spawn_command_line_sync ("/usr/bin/killall -q -TERM " GCONF_SERVERDIR "/" GCONFD, NULL, NULL, NULL, NULL); ++ + return retval; + } + diff --git a/abs/extra/gconf/gconf.install b/abs/extra/gconf/gconf.install new file mode 100644 index 0000000..4e792c4 --- /dev/null +++ b/abs/extra/gconf/gconf.install @@ -0,0 +1,26 @@ +post_install() { + ldconfig -r . + chmod 755 etc/gconf/gconf.xml.system +} + +post_upgrade() { + ldconfig -r . + if [ `vercmp $2 2.18.0.1-2` -lt 0 ]; then + echo "Regenerating GConf database... " + # Move from /opt/gnome to /usr + ldconfig -r . + export GCONF_CONFIG_SOURCE=`usr/bin/gconftool-2 --get-default-source` + find /opt/gnome/{etc,share}/gconf/schemas -name "*.schemas" | xargs \ + usr/bin/gconftool-2 --makefile-install-rule > /dev/null + if [ -f opt/gnome/etc/gconf/panel-default-setup.entries ]; then + usr/bin/gconftool-2 --direct --load opt/gnome/etc/gconf/panel-default-setup.entries > /dev/null + fi + echo "done." + fi + chmod 755 etc/gconf/gconf.xml.system + + PID=`pidof gconfd-2` + if [ ! -z "${PID}" ]; then + kill ${PID} + fi +} diff --git a/abs/extra/gconf/gconfpkg b/abs/extra/gconf/gconfpkg new file mode 100755 index 0000000..72021e4 --- /dev/null +++ b/abs/extra/gconf/gconfpkg @@ -0,0 +1,50 @@ +#!/bin/sh + +usage() { +cat << _EOF +Usage: + gconfpkg [OPTION] [PACKAGE] + + Help Options: + -?, --help Show help options + + Application Options: + --install Install schemas for a given package + --uninstall Uninstall schemas for a given package + +_EOF +} + +install() { + GCONF_CONFIG_SOURCE=`/usr/bin/gconftool-2 --get-default-source` \ + /usr/bin/gconftool-2 --makefile-install-rule /usr/share/gconf/schemas/${pkgname}.schemas >/dev/null +} + +uninstall() { + if [ -f /usr/share/gconf/schemas/${pkgname}.schemas ]; then + schemas=/usr/share/gconf/schemas/${pkgname}.schemas + elif [ -f /opt/gnome/share/gconf/schemas/${pkgname}.schemas ]; then + schemas=/opt/gnome/share/gconf/schemas/${pkgname}.schemas + else + schemas=`pacman -Ql ${pkgname} | grep 'gconf/schemas/.*schemas$' | awk '{ print $2 }'` + fi + GCONF_CONFIG_SOURCE=`/usr/bin/gconftool-2 --get-default-source` \ + /usr/bin/gconftool-2 --makefile-uninstall-rule ${schemas} >/dev/null +} + +if [ -z "$2" ]; then + usage +else + pkgname="$2" + case "$1" in + --install) + install + ;; + --uninstall) + uninstall + ;; + *) + usage + ;; + esac +fi diff --git a/abs/extra/gconf/xml-gettext-domain.patch b/abs/extra/gconf/xml-gettext-domain.patch new file mode 100644 index 0000000..1c5a78e --- /dev/null +++ b/abs/extra/gconf/xml-gettext-domain.patch @@ -0,0 +1,367 @@ +diff -ru GConf-2.26.0/backends/markup-tree.c GConf-2.26.0.patched/backends/markup-tree.c +--- GConf-2.26.0/backends/markup-tree.c 2009-02-16 18:17:43.000000000 +0000 ++++ GConf-2.26.0.patched/backends/markup-tree.c 2009-04-05 19:36:42.000000000 +0000 +@@ -52,6 +52,7 @@ + char *schema_name; + char *mod_user; + GTime mod_time; ++ char *gettext_domain; + }; + + static LocalSchemaInfo* local_schema_info_new (void); +@@ -1351,6 +1352,7 @@ + gconf_value_free (entry->value); + g_free (entry->schema_name); + g_free (entry->mod_user); ++ g_free (entry->gettext_domain); + + g_slist_foreach (entry->local_schemas, + (GFunc) local_schema_info_free, +@@ -1593,6 +1595,8 @@ + gconf_schema_get_type (schema)); + gconf_schema_set_owner (current_schema, + gconf_schema_get_owner (schema)); ++ gconf_schema_set_gettext_domain (current_schema, ++ gconf_schema_get_gettext_domain (schema)); + } + + /* Update mod time */ +@@ -1805,6 +1809,8 @@ + else if (c_local_schema && c_local_schema->long_desc) + gconf_schema_set_long_desc (schema, c_local_schema->long_desc); + ++ gconf_schema_set_gettext_domain (schema, entry->gettext_domain); ++ + return retval; + } + } +@@ -2339,8 +2345,9 @@ + const char *ltype; + const char *list_type; + const char *owner; ++ + GConfValueType vtype; +- const char *dummy1, *dummy2, *dummy3, *dummy4; ++ const char *dummy1, *dummy2, *dummy3, *dummy4, *dummy5; + + #if 0 + g_assert (ELEMENT_IS ("entry") || +@@ -2377,6 +2384,7 @@ + "muser", &dummy2, + "mtime", &dummy3, + "schema", &dummy4, ++ "gettext_domain", &dummy5, + + NULL)) + return; +@@ -2683,6 +2691,7 @@ + const char *mtime; + const char *schema; + const char *type; ++ const char *gettext_domain; + const char *dummy1, *dummy2, *dummy3, *dummy4; + const char *dummy5, *dummy6, *dummy7; + GConfValue *value; +@@ -2693,6 +2702,7 @@ + mtime = NULL; + schema = NULL; + type = NULL; ++ gettext_domain = NULL; + + if (!locate_attributes (context, element_name, attribute_names, attribute_values, + error, +@@ -2701,6 +2711,7 @@ + "mtime", &mtime, + "schema", &schema, + "type", &type, ++ "gettext_domain", &gettext_domain, + + /* These are allowed but we don't use them until + * parse_value_element +@@ -2768,6 +2779,9 @@ + */ + if (schema) + entry->schema_name = g_strdup (schema); ++ ++ if (gettext_domain) ++ entry->gettext_domain = g_strdup (gettext_domain); + } + else + { +@@ -3716,6 +3730,7 @@ + GConfSchema *schema; + GConfValueType stype; + const char *owner; ++ const char *gettext_domain; + + schema = gconf_value_get_schema (value); + +@@ -3741,6 +3756,23 @@ + + g_free (s); + } ++ ++ gettext_domain = gconf_schema_get_gettext_domain (schema); ++ ++ if (gettext_domain) ++ { ++ char *s; ++ ++ s = g_markup_escape_text (gettext_domain, -1); ++ ++ if (fprintf (f, " gettext_domain=\"%s\"", s) < 0) ++ { ++ g_free (s); ++ return FALSE; ++ } ++ ++ g_free (s); ++ } + + if (stype == GCONF_VALUE_LIST) + { +Only in GConf-2.26.0.patched/backends: markup-tree.c.orig +diff -ru GConf-2.26.0/doc/gconf-1.0.dtd GConf-2.26.0.patched/doc/gconf-1.0.dtd +--- GConf-2.26.0/doc/gconf-1.0.dtd 2008-05-09 14:29:51.000000000 +0000 ++++ GConf-2.26.0.patched/doc/gconf-1.0.dtd 2009-04-05 19:36:42.000000000 +0000 +@@ -7,7 +7,7 @@ + <!-- A single schema. What I am trying to say is "this set of + elements, in any order". Duplicate elements (apart from <locale>) are + not allowed). --> +-<!ELEMENT schema (key|applyto*|owner?|type|(list_type|(car_type,cdr_type))?|default?|locale*)*> ++<!ELEMENT schema (key|applyto*|owner?|type|(list_type|(car_type,cdr_type))?|default?|locale*|gettext_domain?)*> + + <!-- The key for this schema (e.g. /schemas/apps/foo/bar) --> + <!ELEMENT key (#PCDATA)> +diff -ru GConf-2.26.0/gconf/GConfX.idl GConf-2.26.0.patched/gconf/GConfX.idl +--- GConf-2.26.0/gconf/GConfX.idl 2008-05-09 14:29:51.000000000 +0000 ++++ GConf-2.26.0.patched/gconf/GConfX.idl 2009-04-05 19:36:46.000000000 +0000 +@@ -16,6 +16,7 @@ + string short_desc; + string long_desc; + string owner; ++ string gettext_domain; + // Work around lack of recursive data types + string encoded_default_value; + }; +diff -ru GConf-2.26.0/gconf/gconf-internals.c GConf-2.26.0.patched/gconf/gconf-internals.c +--- GConf-2.26.0/gconf/gconf-internals.c 2009-03-17 02:47:13.000000000 +0000 ++++ GConf-2.26.0.patched/gconf/gconf-internals.c 2009-04-05 19:36:46.000000000 +0000 +@@ -513,6 +513,7 @@ + cs->short_desc = CORBA_string_dup (gconf_schema_get_short_desc (sc) ? gconf_schema_get_short_desc (sc) : ""); + cs->long_desc = CORBA_string_dup (gconf_schema_get_long_desc (sc) ? gconf_schema_get_long_desc (sc) : ""); + cs->owner = CORBA_string_dup (gconf_schema_get_owner (sc) ? gconf_schema_get_owner (sc) : ""); ++ cs->gettext_domain = CORBA_string_dup (gconf_schema_get_gettext_domain (sc) ? gconf_schema_get_gettext_domain (sc) : ""); + + { + gchar* encoded; +@@ -600,6 +601,14 @@ + gconf_schema_set_owner(sc, cs->owner); + } + ++ if (*cs->gettext_domain != '\0') ++ { ++ if (!g_utf8_validate (cs->gettext_domain, -1, NULL)) ++ gconf_log (GCL_ERR, _("Invalid UTF-8 in gettext domain for schema")); ++ else ++ gconf_schema_set_gettext_domain(sc, cs->gettext_domain); ++ } ++ + { + GConfValue* val; + +diff -ru GConf-2.26.0/gconf/gconf-schema.c GConf-2.26.0.patched/gconf/gconf-schema.c +--- GConf-2.26.0/gconf/gconf-schema.c 2008-10-09 17:51:31.000000000 +0000 ++++ GConf-2.26.0.patched/gconf/gconf-schema.c 2009-04-05 19:36:42.000000000 +0000 +@@ -32,9 +32,10 @@ + GConfValueType car_type; /* Pair car type of the described entry */ + GConfValueType cdr_type; /* Pair cdr type of the described entry */ + gchar* locale; /* Schema locale */ +- gchar* owner; /* Name of creating application */ ++ const gchar* owner; /* Name of creating application */ + gchar* short_desc; /* 40 char or less description, no newlines */ + gchar* long_desc; /* could be a paragraph or so */ ++ const gchar* gettext_domain; /* description gettext domain */ + GConfValue* default_value; /* Default value of the key */ + } GConfRealSchema; + +@@ -63,7 +64,6 @@ + g_free (real->locale); + g_free (real->short_desc); + g_free (real->long_desc); +- g_free (real->owner); + + if (real->default_value) + gconf_value_free (real->default_value); +@@ -91,7 +91,9 @@ + + dest->long_desc = g_strdup (real->long_desc); + +- dest->owner = g_strdup (real->owner); ++ dest->gettext_domain = real->gettext_domain; ++ ++ dest->owner = real->owner; + + dest->default_value = real->default_value ? gconf_value_copy (real->default_value) : NULL; + +@@ -136,6 +138,17 @@ + REAL_SCHEMA (sc)->locale = NULL; + } + ++void ++gconf_schema_set_gettext_domain (GConfSchema* sc, const gchar* domain) ++{ ++ g_return_if_fail (domain == NULL || g_utf8_validate (domain, -1, NULL)); ++ ++ if (domain) ++ REAL_SCHEMA (sc)->gettext_domain = g_intern_string (domain); ++ else ++ REAL_SCHEMA (sc)->gettext_domain = NULL; ++} ++ + void + gconf_schema_set_short_desc (GConfSchema* sc, const gchar* desc) + { +@@ -169,11 +182,8 @@ + { + g_return_if_fail (owner == NULL || g_utf8_validate (owner, -1, NULL)); + +- if (REAL_SCHEMA (sc)->owner) +- g_free (REAL_SCHEMA (sc)->owner); +- + if (owner) +- REAL_SCHEMA (sc)->owner = g_strdup (owner); ++ REAL_SCHEMA (sc)->owner = g_intern_string (owner); + else + REAL_SCHEMA (sc)->owner = NULL; + } +@@ -228,6 +238,14 @@ + return FALSE; + } + ++ if (real->gettext_domain && !g_utf8_validate (real->gettext_domain, -1, NULL)) ++ { ++ g_set_error (err, GCONF_ERROR, ++ GCONF_ERROR_FAILED, ++ _("Schema contains invalid UTF-8")); ++ return FALSE; ++ } ++ + if (real->owner && !g_utf8_validate (real->owner, -1, NULL)) + { + g_set_error (err, GCONF_ERROR, +@@ -299,11 +317,29 @@ + } + + const char* ++gconf_schema_get_gettext_domain (const GConfSchema *schema) ++{ ++ g_return_val_if_fail (schema != NULL, NULL); ++ ++ return REAL_SCHEMA (schema)->gettext_domain; ++} ++ ++static inline const char * ++schema_translate (const GConfSchema *schema, ++ const char *string) ++{ ++ if (REAL_SCHEMA (schema)->gettext_domain) ++ return g_dgettext(REAL_SCHEMA (schema)->gettext_domain, string); ++ else ++ return string; ++} ++ ++const char* + gconf_schema_get_short_desc (const GConfSchema *schema) + { + g_return_val_if_fail (schema != NULL, NULL); + +- return REAL_SCHEMA (schema)->short_desc; ++ return schema_translate (schema, REAL_SCHEMA (schema)->short_desc); + } + + const char* +@@ -311,7 +347,7 @@ + { + g_return_val_if_fail (schema != NULL, NULL); + +- return REAL_SCHEMA (schema)->long_desc; ++ return schema_translate (schema, REAL_SCHEMA (schema)->long_desc); + } + + const char* +diff -ru GConf-2.26.0/gconf/gconf-schema.h GConf-2.26.0.patched/gconf/gconf-schema.h +--- GConf-2.26.0/gconf/gconf-schema.h 2008-10-09 17:51:29.000000000 +0000 ++++ GConf-2.26.0.patched/gconf/gconf-schema.h 2009-04-05 19:36:42.000000000 +0000 +@@ -48,6 +48,8 @@ + GConfValueType type); + void gconf_schema_set_locale (GConfSchema *sc, + const gchar *locale); ++void gconf_schema_set_gettext_domain (GConfSchema *sc, ++ const gchar *domain); + void gconf_schema_set_short_desc (GConfSchema *sc, + const gchar *desc); + void gconf_schema_set_long_desc (GConfSchema *sc, +@@ -65,6 +67,7 @@ + GConfValueType gconf_schema_get_car_type (const GConfSchema *schema); + GConfValueType gconf_schema_get_cdr_type (const GConfSchema *schema); + const char* gconf_schema_get_locale (const GConfSchema *schema); ++const char* gconf_schema_get_gettext_domain(const GConfSchema *schema); + const char* gconf_schema_get_short_desc (const GConfSchema *schema); + const char* gconf_schema_get_long_desc (const GConfSchema *schema); + const char* gconf_schema_get_owner (const GConfSchema *schema); +diff -ru GConf-2.26.0/gconf/gconftool.c GConf-2.26.0.patched/gconf/gconftool.c +--- GConf-2.26.0/gconf/gconftool.c 2009-02-16 18:17:43.000000000 +0000 ++++ GConf-2.26.0.patched/gconf/gconftool.c 2009-04-05 19:36:42.000000000 +0000 +@@ -3295,6 +3295,7 @@ + GConfValueType cdr_type; + GConfValue* global_default; + GHashTable* hash; ++ gchar* gettext_domain; + }; + + static int +@@ -3547,6 +3548,15 @@ + else + g_printerr (_("WARNING: empty <applyto> node")); + } ++ else if (strcmp((char *)iter->name, "gettext_domain") == 0) ++ { ++ tmp = (char *)xmlNodeGetContent(iter); ++ if (tmp) ++ { ++ info->gettext_domain = g_strdup(tmp); ++ xmlFree(tmp); ++ } ++ } + else + g_printerr (_("WARNING: node <%s> not understood below <schema>\n"), + iter->name); +@@ -3636,6 +3646,9 @@ + if (info->owner != NULL) + gconf_schema_set_owner(schema, info->owner); + ++ if (info->gettext_domain != NULL) ++ gconf_schema_set_gettext_domain(schema, info->gettext_domain); ++ + xmlFree(name); + + /* Locale-specific info */ +@@ -3765,6 +3778,7 @@ + info.apply_to = NULL; + info.owner = NULL; + info.global_default = NULL; ++ info.gettext_domain = NULL; + info.hash = g_hash_table_new(g_str_hash, g_str_equal); + + extract_global_info(node, &info); +@@ -3801,6 +3815,8 @@ + ; /* nothing */ + else if (strcmp((char *)iter->name, "applyto") == 0) + ; /* nothing */ ++ else if (strcmp((char *)iter->name, "gettext_domain") == 0) ++ ; /* nothing */ + else if (strcmp((char *)iter->name, "locale") == 0) + { + process_locale_info(iter, &info); +Only in GConf-2.26.0.patched/gconf: gconftool.c.orig |