From 8259d9515ee4844f40cb19bd97e9fbd1de91d5ae Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Dec 23 2011 20:19:36 +0000 Subject: fix the fixup --- diff --git a/desktop-file-utils.spec b/desktop-file-utils.spec index 4c00a37..0cdf3b7 100644 --- a/desktop-file-utils.spec +++ b/desktop-file-utils.spec @@ -4,7 +4,7 @@ Summary: Utilities for manipulating .desktop files Name: desktop-file-utils Version: 0.19 -Release: 2%{?dist} +Release: 3%{?dist} URL: http://www.freedesktop.org/software/desktop-file-utils Source0: http://www.freedesktop.org/software/desktop-file-utils/releases/%{name}-%{version}.tar.xz Source1: desktop-entry-mode-init.el @@ -48,7 +48,7 @@ Install the %{name} package to use %{pkgname} with GNU Emacs. %prep %setup -q -%patch0 -p1 +%patch0 -p1 -b .localelist %build %configure @@ -80,7 +80,7 @@ touch $RPM_BUILD_ROOT%{_emacs_sitestartdir}/desktop-entry-mode-init.elc %{_emacs_sitelispdir}/%{pkg}/*.el %changelog -* Fri Dec 23 2011 Matthias Clasen - 0.19-2 +* Fri Dec 23 2011 Matthias Clasen - 0.19-3 - Fix up locale lists just like other lists * Tue Dec 20 2011 Matthias Clasen - 0.19-1 diff --git a/localelist-fixup.patch b/localelist-fixup.patch index 1773f33..6b58426 100644 --- a/localelist-fixup.patch +++ b/localelist-fixup.patch @@ -1,13 +1,99 @@ diff -up desktop-file-utils-0.19/src/validate.c.localelist desktop-file-utils-0.19/src/validate.c ---- desktop-file-utils-0.19/src/validate.c.localelist 2011-12-23 12:42:27.910908853 -0500 -+++ desktop-file-utils-0.19/src/validate.c 2011-12-23 12:42:47.493908152 -0500 -@@ -2740,7 +2740,8 @@ desktop_file_fixup (GKeyFile *keyfile, +--- desktop-file-utils-0.19/src/validate.c.localelist 2011-12-19 09:58:16.000000000 -0500 ++++ desktop-file-utils-0.19/src/validate.c 2011-12-23 15:18:09.769574922 -0500 +@@ -2722,12 +2722,41 @@ desktop_file_validate (const char *filen + return (!kf.fatal_error); + } + ++static void ++fixup_list (GKeyFile *keyfile, ++ const gchar *filename, ++ const gchar *key) ++{ ++ char *value; ++ ++ value = g_key_file_get_value (keyfile, GROUP_DESKTOP_ENTRY, key, NULL); ++ if (value) { ++ int len; ++ ++ len = strlen (value); ++ ++ if (len > 0 && (value[len - 1] != ';' || ++ (len > 1 && value[len - 2] == '\\' && ++ (len < 3 || value[len - 3] != '\\')))) { ++ char *str; ++ ++ g_printerr ("%s: warning: key \"%s\" is a list and does not have a " ++ "semicolon as trailing character, fixing\n", ++ filename, key); ++ ++ str = g_strconcat (value, ";", NULL); ++ g_key_file_set_value (keyfile, GROUP_DESKTOP_ENTRY, ++ key, str); ++ g_free (str); ++ } ++ } ++} ++ + /* return FALSE if we were unable to fix the file */ + gboolean + desktop_file_fixup (GKeyFile *keyfile, + const char *filename) + { +- char *value; + unsigned int i; + + if (g_key_file_has_group (keyfile, GROUP_KDE_DESKTOP_ENTRY)) { +@@ -2739,33 +2768,28 @@ desktop_file_fixup (GKeyFile *keyfile, + /* Fix lists to have a ';' at the end if they don't */ for (i = 0; i < G_N_ELEMENTS (registered_desktop_keys); i++) { - if (registered_desktop_keys[i].type != DESKTOP_STRING_LIST_TYPE && +- if (registered_desktop_keys[i].type != DESKTOP_STRING_LIST_TYPE && - registered_desktop_keys[i].type != DESKTOP_REGEXP_LIST_TYPE) -+ registered_desktop_keys[i].type != DESKTOP_REGEXP_LIST_TYPE && -+ registered_desktop_keys[i].type != DESKTOP_LOCALESTRING_LIST_TYPE) - continue; +- continue; +- +- value = g_key_file_get_value (keyfile, GROUP_DESKTOP_ENTRY, +- registered_desktop_keys[i].name, NULL); +- if (value) { +- int len; +- +- len = strlen (value); +- +- if (len > 0 && (value[len - 1] != ';' || +- (len > 1 && value[len - 2] == '\\' && +- (len < 3 || value[len - 3] != '\\')))) { +- char *str; +- +- g_printerr ("%s: warning: key \"%s\" is a list and does not have a " +- "semicolon as trailing character, fixing\n", +- filename, registered_desktop_keys[i].name); +- +- str = g_strconcat (value, ";", NULL); +- g_key_file_set_value (keyfile, GROUP_DESKTOP_ENTRY, +- registered_desktop_keys[i].name, str); +- g_free (str); ++ if (registered_desktop_keys[i].type == DESKTOP_STRING_LIST_TYPE || ++ registered_desktop_keys[i].type == DESKTOP_REGEXP_LIST_TYPE) ++ fixup_list (keyfile, filename, registered_desktop_keys[i].name); ++ ++ if (registered_desktop_keys[i].type == DESKTOP_LOCALESTRING_LIST_TYPE) { ++ gsize len, keylen; ++ guint j; ++ gchar **keys; ++ ++ keylen = strlen (registered_desktop_keys[i].name); ++ len = 0; ++ keys = g_key_file_get_keys (keyfile, GROUP_DESKTOP_ENTRY, &len, NULL); ++ for (j = 0; j < len; j++) { ++ if (g_str_has_prefix (keys[j], registered_desktop_keys[i].name) && ++ keys[j][keylen] == '[') { ++ fixup_list (keyfile, filename, keys[j]); ++ } + } ++ g_strfreev (keys); + } + } - value = g_key_file_get_value (keyfile, GROUP_DESKTOP_ENTRY, + return TRUE; + } ++