1 |
tetromino 12/11/24 23:43:39 |
2 |
|
3 |
Added: gnome-menus-3.0.1-applications-merged.patch |
4 |
gnome-menus-3.6.1-applications-merged.patch |
5 |
Log: |
6 |
Correctly load custom menus from 'applications-merged' directories when XDG_MENU_PREFIX is set. |
7 |
|
8 |
(Portage version: 2.2.0_alpha142/cvs/Linux x86_64, signed Manifest commit with key CF0ADD61) |
9 |
|
10 |
Revision Changes Path |
11 |
1.1 gnome-base/gnome-menus/files/gnome-menus-3.0.1-applications-merged.patch |
12 |
|
13 |
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/gnome-base/gnome-menus/files/gnome-menus-3.0.1-applications-merged.patch?rev=1.1&view=markup |
14 |
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/gnome-base/gnome-menus/files/gnome-menus-3.0.1-applications-merged.patch?rev=1.1&content-type=text/plain |
15 |
|
16 |
Index: gnome-menus-3.0.1-applications-merged.patch |
17 |
=================================================================== |
18 |
From 15baddac6c5343eaa103ecd27c625f5a415d24f3 Mon Sep 17 00:00:00 2001 |
19 |
From: Alexandre Rostovtsev <tetromino@g.o> |
20 |
Date: Sat, 24 Nov 2012 15:24:50 -0500 |
21 |
Subject: [PATCH] libmenu: always call menu_layout_load() with |
22 |
non_prefixed_name parameter |
23 |
|
24 |
We must ensure that when loading "${XDG_MENU_PREFIX}applications.menu", |
25 |
the root layout node's name is set to "applications", not |
26 |
"${XDG_MENU_PREFIX}applications", because the menu spec states that the |
27 |
default merge directory for "${XDG_MENU_PREFIX}applications.menu" is |
28 |
"applications-merged", not "${XDG_MENU_PREFIX}applications-merged". |
29 |
|
30 |
https://bugzilla.gnome.org/show_bug.cgi?id=688972 |
31 |
--- |
32 |
libmenu/gmenu-tree.c | 29 ++++++++++++++++++++++++++--- |
33 |
1 file changed, 26 insertions(+), 3 deletions(-) |
34 |
|
35 |
diff --git a/libmenu/gmenu-tree.c b/libmenu/gmenu-tree.c |
36 |
index 0cb9645..a0d85d6 100644 |
37 |
--- a/libmenu/gmenu-tree.c |
38 |
+++ b/libmenu/gmenu-tree.c |
39 |
@@ -47,6 +47,7 @@ struct GMenuTree |
40 |
guint refcount; |
41 |
|
42 |
char *basename; |
43 |
+ char *non_prefixed_basename; |
44 |
char *absolute_path; |
45 |
char *canonical_path; |
46 |
|
47 |
@@ -630,6 +631,24 @@ gmenu_tree_lookup (const char *menu_file, |
48 |
return retval; |
49 |
} |
50 |
|
51 |
+static void |
52 |
+gmenu_tree_update_non_prefixed_basename (GMenuTree *tree, |
53 |
+ const gchar *filename) |
54 |
+{ |
55 |
+ gchar *s, *basename; |
56 |
+ |
57 |
+ g_free (tree->non_prefixed_basename); |
58 |
+ tree->non_prefixed_basename = NULL; |
59 |
+ if (filename == NULL) |
60 |
+ return; |
61 |
+ s = g_strdup_printf ("%sapplications.menu", g_getenv ("XDG_MENU_PREFIX")); |
62 |
+ basename = g_path_get_basename (filename); |
63 |
+ if (!g_strcmp0 (basename, "applications.menu") || !g_strcmp0 (basename, s)) |
64 |
+ tree->non_prefixed_basename = g_strdup ("applications.menu"); |
65 |
+ g_free (s); |
66 |
+ g_free (basename); |
67 |
+} |
68 |
+ |
69 |
static GMenuTree * |
70 |
gmenu_tree_new (GMenuTreeType type, |
71 |
const char *menu_file, |
72 |
@@ -650,11 +669,13 @@ gmenu_tree_new (GMenuTreeType type, |
73 |
{ |
74 |
g_assert (canonical == FALSE); |
75 |
tree->basename = g_strdup (menu_file); |
76 |
+ gmenu_tree_update_non_prefixed_basename (tree, tree->basename); |
77 |
} |
78 |
else |
79 |
{ |
80 |
tree->canonical = canonical != FALSE; |
81 |
tree->absolute_path = g_strdup (menu_file); |
82 |
+ gmenu_tree_update_non_prefixed_basename (tree, tree->absolute_path); |
83 |
|
84 |
if (tree->canonical) |
85 |
{ |
86 |
@@ -709,6 +730,9 @@ gmenu_tree_unref (GMenuTree *tree) |
87 |
g_free (tree->basename); |
88 |
tree->basename = NULL; |
89 |
|
90 |
+ g_free (tree->non_prefixed_basename); |
91 |
+ tree->non_prefixed_basename = NULL; |
92 |
+ |
93 |
if (tree->absolute_path != NULL) |
94 |
g_free (tree->absolute_path); |
95 |
tree->absolute_path = NULL; |
96 |
@@ -1768,7 +1792,7 @@ load_merge_file (GMenuTree *tree, |
97 |
|
98 |
menu_verbose ("Merging file \"%s\"\n", canonical); |
99 |
|
100 |
- to_merge = menu_layout_load (canonical, NULL, NULL); |
101 |
+ to_merge = menu_layout_load (canonical, tree->non_prefixed_basename, NULL); |
102 |
if (to_merge == NULL) |
103 |
{ |
104 |
menu_verbose ("No menu for file \"%s\" found when merging\n", |
105 |
@@ -2926,8 +2950,7 @@ gmenu_tree_load_layout (GMenuTree *tree) |
106 |
|
107 |
error = NULL; |
108 |
tree->layout = menu_layout_load (tree->canonical_path, |
109 |
- tree->type == GMENU_TREE_BASENAME ? |
110 |
- tree->basename : NULL, |
111 |
+ tree->non_prefixed_basename, |
112 |
&error); |
113 |
if (tree->layout == NULL) |
114 |
{ |
115 |
-- |
116 |
1.8.0 |
117 |
|
118 |
|
119 |
|
120 |
|
121 |
1.1 gnome-base/gnome-menus/files/gnome-menus-3.6.1-applications-merged.patch |
122 |
|
123 |
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/gnome-base/gnome-menus/files/gnome-menus-3.6.1-applications-merged.patch?rev=1.1&view=markup |
124 |
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/gnome-base/gnome-menus/files/gnome-menus-3.6.1-applications-merged.patch?rev=1.1&content-type=text/plain |
125 |
|
126 |
Index: gnome-menus-3.6.1-applications-merged.patch |
127 |
=================================================================== |
128 |
From e047041a49ad9e857b97c534203a98aac80de8d8 Mon Sep 17 00:00:00 2001 |
129 |
From: Alexandre Rostovtsev <tetromino@g.o> |
130 |
Date: Sat, 24 Nov 2012 15:24:50 -0500 |
131 |
Subject: [PATCH] libmenu: always call menu_layout_load() with |
132 |
non_prefixed_name parameter |
133 |
|
134 |
We must ensure that when loading "${XDG_MENU_PREFIX}applications.menu", |
135 |
the root layout node's name is set to "applications", not |
136 |
"${XDG_MENU_PREFIX}applications", because the menu spec states that the |
137 |
default merge directory for "${XDG_MENU_PREFIX}applications.menu" is |
138 |
"applications-merged", not "${XDG_MENU_PREFIX}applications-merged". |
139 |
|
140 |
https://bugzilla.gnome.org/show_bug.cgi?id=688972 |
141 |
--- |
142 |
libmenu/gmenu-tree.c | 31 +++++++++++++++++++++++++++++-- |
143 |
1 file changed, 29 insertions(+), 2 deletions(-) |
144 |
|
145 |
diff --git a/libmenu/gmenu-tree.c b/libmenu/gmenu-tree.c |
146 |
index 3e59c2c..dd6c670 100644 |
147 |
--- a/libmenu/gmenu-tree.c |
148 |
+++ b/libmenu/gmenu-tree.c |
149 |
@@ -60,6 +60,7 @@ struct _GMenuTree |
150 |
GObject parent_instance; |
151 |
|
152 |
char *basename; |
153 |
+ char *non_prefixed_basename; |
154 |
char *path; |
155 |
char *canonical_path; |
156 |
|
157 |
@@ -524,6 +525,24 @@ gmenu_tree_constructor (GType type, |
158 |
} |
159 |
|
160 |
static void |
161 |
+gmenu_tree_update_non_prefixed_basename (GMenuTree *tree, |
162 |
+ const gchar *filename) |
163 |
+{ |
164 |
+ gchar *s, *basename; |
165 |
+ |
166 |
+ g_free (tree->non_prefixed_basename); |
167 |
+ tree->non_prefixed_basename = NULL; |
168 |
+ if (filename == NULL) |
169 |
+ return; |
170 |
+ s = g_strdup_printf ("%sapplications.menu", g_getenv ("XDG_MENU_PREFIX")); |
171 |
+ basename = g_path_get_basename (filename); |
172 |
+ if (!g_strcmp0 (basename, "applications.menu") || !g_strcmp0 (basename, s)) |
173 |
+ tree->non_prefixed_basename = g_strdup ("applications.menu"); |
174 |
+ g_free (s); |
175 |
+ g_free (basename); |
176 |
+} |
177 |
+ |
178 |
+static void |
179 |
gmenu_tree_set_property (GObject *object, |
180 |
guint prop_id, |
181 |
const GValue *value, |
182 |
@@ -534,10 +553,14 @@ gmenu_tree_set_property (GObject *object, |
183 |
switch (prop_id) |
184 |
{ |
185 |
case PROP_MENU_BASENAME: |
186 |
+ if (g_strcmp0 (self->basename, g_value_get_string (value))) |
187 |
+ gmenu_tree_update_non_prefixed_basename (self, g_value_get_string (value)); |
188 |
self->basename = g_value_dup_string (value); |
189 |
break; |
190 |
|
191 |
case PROP_MENU_PATH: |
192 |
+ if (g_strcmp0 (self->path, g_value_get_string (value))) |
193 |
+ gmenu_tree_update_non_prefixed_basename (self, g_value_get_string (value)); |
194 |
self->path = g_value_dup_string (value); |
195 |
break; |
196 |
|
197 |
@@ -587,6 +610,9 @@ gmenu_tree_finalize (GObject *object) |
198 |
g_free (tree->basename); |
199 |
tree->basename = NULL; |
200 |
|
201 |
+ g_free (tree->non_prefixed_basename); |
202 |
+ tree->non_prefixed_basename = NULL; |
203 |
+ |
204 |
if (tree->path != NULL) |
205 |
g_free (tree->path); |
206 |
tree->path = NULL; |
207 |
@@ -1896,7 +1922,7 @@ load_merge_file (GMenuTree *tree, |
208 |
|
209 |
menu_verbose ("Merging file \"%s\"\n", canonical); |
210 |
|
211 |
- to_merge = menu_layout_load (canonical, NULL, NULL); |
212 |
+ to_merge = menu_layout_load (canonical, tree->non_prefixed_basename, NULL); |
213 |
if (to_merge == NULL) |
214 |
{ |
215 |
menu_verbose ("No menu for file \"%s\" found when merging\n", |
216 |
@@ -3053,8 +3079,9 @@ gmenu_tree_load_layout (GMenuTree *tree, |
217 |
tree->canonical_path); |
218 |
|
219 |
error = NULL; |
220 |
+ |
221 |
tree->layout = menu_layout_load (tree->canonical_path, |
222 |
- tree->path ? NULL : tree->basename, |
223 |
+ tree->non_prefixed_basename, |
224 |
error); |
225 |
if (!tree->layout) |
226 |
return FALSE; |
227 |
-- |
228 |
1.8.0 |