~ubuntu-branches/ubuntu/precise/gnome-menus/precise

« back to all changes in this revision

Viewing changes to debian/patches/22_desktop-cache.patch

  • Committer: Package Import Robot
  • Author(s): Michael Terry, Michael Terry, Martin Pitt
  • Date: 2011-12-23 15:25:07 UTC
  • mfrom: (1.1.61) (2.2.3 sid)
  • Revision ID: package-import@ubuntu.com-20111223152507-3k3fxkxu4t904lnq
Tags: 3.2.0.1-2ubuntu1
[ Michael Terry ]
* Merge from Debian testing, remaining changes:
  - debian/patches/09_app_install_entry.patch: Add Software Center
  - debian/patches/series: Disable 01_default_prefix.patch
  - debian/gnome-menus.postinst: Disable blacklist
  - debian/watch: Look for unstable tarballs

[ Martin Pitt ]
* Remove remaining menu cache stuff, as it is not being used any more:
  - Drop debian/update-gnome-menus-cache. (LP: #769349, #771196)
  - debian/gnome-menus.triggers: Drop "gmenucache".
  - Drop 22_desktop-cache.patch (already wasn't applied any more in series)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Description: Support a desktop.<localename>.cache file in e. g. /usr/share/applications/ to speed up menu loading. Those are generated with update-gnome-menus-cache <dir>.
2
 
Index: gnome-menus-2.30.0/libmenu/desktop-entries.c
3
 
===================================================================
4
 
--- gnome-menus-2.30.0.orig/libmenu/desktop-entries.c   2010-04-08 16:06:20.323460889 +0200
5
 
+++ gnome-menus-2.30.0/libmenu/desktop-entries.c        2010-04-08 16:06:20.353459954 +0200
6
 
@@ -257,14 +257,15 @@
7
 
 }
8
 
 
9
 
 static DesktopEntry *
10
 
+desktop_entry_load_from_keyfile (DesktopEntry*, GKeyFile*, const char *, gboolean);
11
 
+
12
 
+static DesktopEntry *
13
 
 desktop_entry_load (DesktopEntry *entry)
14
 
 {
15
 
   DesktopEntry *retval = NULL;
16
 
   GKeyFile     *key_file;
17
 
   GError       *error;
18
 
   const char   *desktop_entry_group;
19
 
-  char         *name_str;
20
 
-  char         *type_str;
21
 
 
22
 
   key_file = g_key_file_new ();
23
 
 
24
 
@@ -298,6 +299,28 @@
25
 
         }
26
 
     }
27
 
 
28
 
+  retval = desktop_entry_load_from_keyfile (entry, key_file, desktop_entry_group, TRUE);
29
 
+
30
 
+ out:
31
 
+  g_key_file_free (key_file);
32
 
+
33
 
+  if (!retval)
34
 
+    desktop_entry_unref (entry);
35
 
+
36
 
+  return retval;
37
 
+}
38
 
+
39
 
+
40
 
+static DesktopEntry *
41
 
+desktop_entry_load_from_keyfile (DesktopEntry *entry, 
42
 
+                                 GKeyFile     *key_file,
43
 
+                                 const char   *desktop_entry_group,
44
 
+                                 gboolean     localize)
45
 
+{
46
 
+  char         *name_str;
47
 
+  char         *type_str;
48
 
+  DesktopEntry *retval = NULL;
49
 
+
50
 
   if (!g_key_file_has_key (key_file, desktop_entry_group, "Name", NULL))
51
 
     {
52
 
       menu_verbose ("\"%s\" contains no \"Name\" key\n", entry->path);
53
 
@@ -340,12 +363,24 @@
54
 
   retval = entry;
55
 
 
56
 
 #define GET_LOCALE_STRING(n) g_key_file_get_locale_string (key_file, desktop_entry_group, (n), NULL, NULL)
57
 
+#define GET_STRING(n) g_key_file_get_string (key_file, desktop_entry_group, (n), NULL)
58
 
 
59
 
-  retval->name         = GET_LOCALE_STRING ("Name");
60
 
-  retval->generic_name = GET_LOCALE_STRING ("GenericName");
61
 
-  retval->full_name    = GET_LOCALE_STRING ("X-GNOME-FullName");
62
 
-  retval->comment      = GET_LOCALE_STRING ("Comment");
63
 
-  retval->icon         = GET_LOCALE_STRING ("Icon");
64
 
+  if (localize)
65
 
+    {
66
 
+      retval->name         = GET_LOCALE_STRING ("Name");
67
 
+      retval->generic_name = GET_LOCALE_STRING ("GenericName");
68
 
+      retval->full_name    = GET_LOCALE_STRING ("X-GNOME-FullName");
69
 
+      retval->comment      = GET_LOCALE_STRING ("Comment");
70
 
+      retval->icon         = GET_LOCALE_STRING ("Icon");
71
 
+    } 
72
 
+  else 
73
 
+    {
74
 
+      retval->name         = GET_STRING ("Name");
75
 
+      retval->generic_name = GET_STRING ("GenericName");
76
 
+      retval->full_name    = GET_STRING ("X-GNOME-FullName");
77
 
+      retval->comment      = GET_STRING ("Comment");
78
 
+      retval->icon         = GET_STRING ("Icon");
79
 
+    }
80
 
   retval->flags        = get_flags_from_key_file (retval, key_file, desktop_entry_group);
81
 
   retval->categories   = get_categories_from_key_file (retval, key_file, desktop_entry_group);
82
 
 
83
 
@@ -371,11 +406,6 @@
84
 
                 retval->flags & DESKTOP_ENTRY_TRYEXEC_FAILED ? "(true)" : "(false)");
85
 
 
86
 
  out:
87
 
-  g_key_file_free (key_file);
88
 
-
89
 
-  if (!retval)
90
 
-    desktop_entry_unref (entry);
91
 
-
92
 
   return retval;
93
 
 }
94
 
 
95
 
@@ -413,6 +443,27 @@
96
 
 }
97
 
 
98
 
 DesktopEntry *
99
 
+desktop_entry_new_from_keyfile (GKeyFile *key_file, 
100
 
+                                const char *group,
101
 
+                                const char *directory)
102
 
+{
103
 
+  DesktopEntry     *retval;
104
 
+
105
 
+  menu_verbose ("Generating desktop entry from key file group \"%s\"\n", group);
106
 
+
107
 
+  retval = g_new0 (DesktopEntry, 1);
108
 
+
109
 
+  retval->refcount = 1;
110
 
+  retval->type     = DESKTOP_ENTRY_DESKTOP;
111
 
+  retval->path = g_strdup_printf ("%s/%s.desktop", directory, group);
112
 
+  retval->basename = g_path_get_basename (retval->path);
113
 
+
114
 
+  retval = desktop_entry_load_from_keyfile (retval, key_file, group, FALSE);
115
 
+
116
 
+  return retval;
117
 
+}
118
 
+
119
 
+DesktopEntry *
120
 
 desktop_entry_reload (DesktopEntry *entry)
121
 
 {
122
 
   g_return_val_if_fail (entry != NULL, NULL);
123
 
Index: gnome-menus-2.30.0/libmenu/desktop-entries.h
124
 
===================================================================
125
 
--- gnome-menus-2.30.0.orig/libmenu/desktop-entries.h   2010-01-14 04:03:53.000000000 +0100
126
 
+++ gnome-menus-2.30.0/libmenu/desktop-entries.h        2010-04-08 16:06:20.353459954 +0200
127
 
@@ -34,6 +34,7 @@
128
 
 typedef struct DesktopEntry DesktopEntry;
129
 
 
130
 
 DesktopEntry *desktop_entry_new (const char   *path);
131
 
+DesktopEntry *desktop_entry_new_from_keyfile (GKeyFile *key, const char *group, const char *directory);
132
 
 
133
 
 DesktopEntry *desktop_entry_ref    (DesktopEntry *entry);
134
 
 DesktopEntry *desktop_entry_copy   (DesktopEntry *entry);
135
 
Index: gnome-menus-2.30.0/libmenu/entry-directories.c
136
 
===================================================================
137
 
--- gnome-menus-2.30.0.orig/libmenu/entry-directories.c 2010-01-14 04:03:53.000000000 +0100
138
 
+++ gnome-menus-2.30.0/libmenu/entry-directories.c      2010-04-08 16:06:23.163462272 +0200
139
 
@@ -25,6 +25,7 @@
140
 
 #include <errno.h>
141
 
 #include <sys/types.h>
142
 
 #include <dirent.h>
143
 
+#include <locale.h>
144
 
 
145
 
 #include "menu-util.h"
146
 
 #include "menu-monitor.h"
147
 
@@ -261,6 +262,42 @@
148
 
 }
149
 
 
150
 
 static gboolean
151
 
+cached_dir_add_keyfile_entry (CachedDir  *dir,
152
 
+                              GKeyFile   *keyfile,
153
 
+                              const char *group,
154
 
+                              const char *path)
155
 
+{
156
 
+  DesktopEntry *entry;
157
 
+  gchar **dirsplit;
158
 
+
159
 
+  entry = desktop_entry_new_from_keyfile (keyfile, group, path);
160
 
+  if (entry == NULL)
161
 
+    return FALSE;
162
 
+
163
 
+  /* subdirectory? */
164
 
+  dirsplit = g_strsplit (group, "/", 2);
165
 
+  if (dirsplit[1] == NULL)
166
 
+    dir->entries = g_slist_prepend (dir->entries, entry);
167
 
+  else 
168
 
+    {
169
 
+      CachedDir *subdir;
170
 
+      subdir = find_subdir (dir, dirsplit[0]);
171
 
+      if (subdir == NULL)
172
 
+        {
173
 
+         subdir = cached_dir_new(dirsplit[0]);
174
 
+         subdir->parent = dir;
175
 
+          dir->subdirs = g_slist_prepend (dir->subdirs, subdir);
176
 
+       }
177
 
+
178
 
+      subdir->entries = g_slist_prepend (subdir->entries, entry);
179
 
+    }
180
 
+
181
 
+  g_strfreev (dirsplit);
182
 
+
183
 
+  return TRUE;
184
 
+}
185
 
+
186
 
+static gboolean
187
 
 cached_dir_update_entry (CachedDir  *dir,
188
 
                          const char *basename,
189
 
                          const char *path)
190
 
@@ -469,6 +506,56 @@
191
 
 }
192
 
 
193
 
 static gboolean
194
 
+cached_dir_load_entries_from_cache_file (CachedDir *dir, 
195
 
+                                         const char *dirname)
196
 
+{
197
 
+  gchar                cache_file[PATH_MAX];
198
 
+  char                 *locale, *s;
199
 
+  GKeyFile             *kf;
200
 
+  gchar                **names;
201
 
+  gchar                **i;
202
 
+
203
 
+  /* ignore cache if we have $LANGUAGE */
204
 
+  locale = g_getenv ("LANGUAGE");
205
 
+  if (locale != NULL && *locale != '\0')
206
 
+    {
207
 
+      menu_verbose ("cached_dir_load_entries_from_cache_file(): $LANGUAGE present, not using cache\n");
208
 
+      return FALSE;
209
 
+    }
210
 
+
211
 
+  locale = g_strdup (setlocale (LC_MESSAGES, NULL));
212
 
+  if (locale == NULL)
213
 
+    {
214
 
+      menu_verbose ("cached_dir_load_entries_from_cache_file(): setlocale() failed, aborting\n");
215
 
+      return FALSE;
216
 
+    }
217
 
+
218
 
+  /* canonicalize .UTF-8 to .utf8 (only happens at end of string) */
219
 
+  s = strstr (locale, ".UTF-8");
220
 
+  if (s != NULL)
221
 
+      strcpy (s, ".utf8");
222
 
+
223
 
+  g_snprintf (cache_file, sizeof(cache_file), "%s/desktop.%s.cache", dirname, locale);
224
 
+  g_free (locale);
225
 
+
226
 
+  menu_verbose ("Attempting to read entries from cache file %s\n",
227
 
+                cache_file);
228
 
+  
229
 
+  kf = g_key_file_new ();
230
 
+  if (!g_key_file_load_from_file (kf, cache_file, G_KEY_FILE_NONE, NULL))
231
 
+    return FALSE;
232
 
+
233
 
+  names = g_key_file_get_groups(kf, NULL);
234
 
+  for (i = names; *i != NULL; ++i)
235
 
+      cached_dir_add_keyfile_entry (dir, kf, *i, dirname);
236
 
+
237
 
+  g_strfreev (names);
238
 
+  g_key_file_free (kf);
239
 
+
240
 
+  return TRUE;
241
 
+}
242
 
+
243
 
+static gboolean
244
 
 cached_dir_load_entries_recursive (CachedDir  *dir,
245
 
                                    const char *dirname)
246
 
 {
247
 
@@ -485,6 +572,14 @@
248
 
   menu_verbose ("Attempting to read entries from %s (full path %s)\n",
249
 
                 dir->name, dirname);
250
 
 
251
 
+  if (cached_dir_load_entries_from_cache_file (dir, dirname))
252
 
+    {
253
 
+      menu_verbose ("Got from file cache\n");
254
 
+      cached_dir_ensure_monitor (dir, dirname);
255
 
+      dir->have_read_entries = TRUE;
256
 
+      return TRUE;
257
 
+    }
258
 
+
259
 
   dp = opendir (dirname);
260
 
   if (dp == NULL)
261
 
     {