[desktop-file-utils] fix the fixup

Matthias Clasen mclasen at fedoraproject.org
Fri Dec 23 20:19:51 UTC 2011


commit 8259d9515ee4844f40cb19bd97e9fbd1de91d5ae
Author: Matthias Clasen <mclasen at redhat.com>
Date:   Fri Dec 23 15:19:36 2011 -0500

    fix the fixup

 desktop-file-utils.spec |    6 +-
 localelist-fixup.patch  |  102 +++++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 97 insertions(+), 11 deletions(-)
---
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 <mclasen at redhat.com> - 0.19-2
+* Fri Dec 23 2011 Matthias Clasen <mclasen at redhat.com> - 0.19-3
 - Fix up locale lists just like other lists
 
 * Tue Dec 20 2011 Matthias Clasen <mclasen at redhat.com> - 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;
+ }
++


More information about the scm-commits mailing list