Codebase list cinnamon-menus / 821aeef
New upstream version 4.2.0 Norbert Preining 4 years ago
53 changed file(s) with 286 addition(s) and 14705 deletion(s). Raw diff Collapse all Expand all
+0
-1
.pc/.quilt_patches less more
0 debian/patches
+0
-1
.pc/.quilt_series less more
0 series
+0
-1
.pc/.version less more
0 2
+0
-4931
.pc/01_default_prefix.patch/libmenu/gmenu-tree.c less more
0 /* -*- mode:c; c-file-style: "gnu"; indent-tabs-mode: nil -*-
1 * Copyright (C) 2003, 2004, 2011 Red Hat, Inc.
2 *
3 * This library is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU Lesser General Public
5 * License as published by the Free Software Foundation; either
6 * version 2 of the License, or (at your option) any later version.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public
14 * License along with this library; if not, write to the
15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16 * Boston, MA 02111-1307, USA.
17 */
18
19 #include <config.h>
20
21 #include "gmenu-tree.h"
22
23 #include <string.h>
24 #include <errno.h>
25
26 #include "menu-layout.h"
27 #include "menu-monitor.h"
28 #include "menu-util.h"
29 #include "canonicalize.h"
30
31 /* private */
32 typedef struct GMenuTreeItem GMenuTreeItem;
33 #define GMENU_TREE_ITEM(i) ((GMenuTreeItem *)(i))
34 #define GMENU_TREE_DIRECTORY(i) ((GMenuTreeDirectory *)(i))
35 #define GMENU_TREE_ENTRY(i) ((GMenuTreeEntry *)(i))
36 #define GMENU_TREE_SEPARATOR(i) ((GMenuTreeSeparator *)(i))
37 #define GMENU_TREE_HEADER(i) ((GMenuTreeHeader *)(i))
38 #define GMENU_TREE_ALIAS(i) ((GMenuTreeAlias *)(i))
39
40 enum {
41 PROP_0,
42
43 PROP_MENU_BASENAME,
44 PROP_MENU_PATH,
45 PROP_FLAGS
46 };
47
48 /* Signals */
49 enum
50 {
51 CHANGED,
52 LAST_SIGNAL
53 };
54
55 static guint gmenu_tree_signals [LAST_SIGNAL] = { 0 };
56
57 struct _GMenuTree
58 {
59 GObject parent_instance;
60
61 char *basename;
62 char *non_prefixed_basename;
63 char *path;
64 char *canonical_path;
65
66 GMenuTreeFlags flags;
67
68 GSList *menu_file_monitors;
69
70 MenuLayoutNode *layout;
71 GMenuTreeDirectory *root;
72 GHashTable *entries_by_id;
73
74 guint canonical : 1;
75 guint loaded : 1;
76 };
77
78 G_DEFINE_TYPE (GMenuTree, gmenu_tree, G_TYPE_OBJECT)
79
80 struct GMenuTreeItem
81 {
82 volatile gint refcount;
83
84 GMenuTreeItemType type;
85
86 GMenuTreeDirectory *parent;
87 GMenuTree *tree;
88 };
89
90 struct GMenuTreeIter
91 {
92 volatile gint refcount;
93
94 GMenuTreeItem *item;
95 GSList *contents;
96 GSList *contents_iter;
97 };
98
99 struct GMenuTreeDirectory
100 {
101 GMenuTreeItem item;
102
103 DesktopEntry *directory_entry;
104 char *name;
105
106 GSList *entries;
107 GSList *subdirs;
108
109 MenuLayoutValues default_layout_values;
110 GSList *default_layout_info;
111 GSList *layout_info;
112 GSList *contents;
113
114 guint only_unallocated : 1;
115 guint is_nodisplay : 1;
116 guint layout_pending_separator : 1;
117 guint preprocessed : 1;
118
119 /* 16 bits should be more than enough; G_MAXUINT16 means no inline header */
120 guint will_inline_header : 16;
121 };
122
123 struct GMenuTreeEntry
124 {
125 GMenuTreeItem item;
126
127 DesktopEntry *desktop_entry;
128 char *desktop_file_id;
129
130 guint is_excluded : 1;
131 guint is_unallocated : 1;
132 };
133
134 struct GMenuTreeSeparator
135 {
136 GMenuTreeItem item;
137 };
138
139 struct GMenuTreeHeader
140 {
141 GMenuTreeItem item;
142
143 GMenuTreeDirectory *directory;
144 };
145
146 struct GMenuTreeAlias
147 {
148 GMenuTreeItem item;
149
150 GMenuTreeDirectory *directory;
151 GMenuTreeItem *aliased_item;
152 };
153
154 static gboolean gmenu_tree_load_layout (GMenuTree *tree,
155 GError **error);
156 static void gmenu_tree_force_reload (GMenuTree *tree);
157 static gboolean gmenu_tree_build_from_layout (GMenuTree *tree,
158 GError **error);
159 static void gmenu_tree_force_rebuild (GMenuTree *tree);
160 static void gmenu_tree_resolve_files (GMenuTree *tree,
161 GHashTable *loaded_menu_files,
162 MenuLayoutNode *layout);
163 static void gmenu_tree_force_recanonicalize (GMenuTree *tree);
164 static void gmenu_tree_invoke_monitors (GMenuTree *tree);
165
166 static void gmenu_tree_item_unref_and_unset_parent (gpointer itemp);
167
168 typedef enum
169 {
170 MENU_FILE_MONITOR_INVALID = 0,
171 MENU_FILE_MONITOR_FILE,
172 MENU_FILE_MONITOR_NONEXISTENT_FILE,
173 MENU_FILE_MONITOR_DIRECTORY
174 } MenuFileMonitorType;
175
176 typedef struct
177 {
178 MenuFileMonitorType type;
179 MenuMonitor *monitor;
180 } MenuFileMonitor;
181
182 static void
183 handle_nonexistent_menu_file_changed (MenuMonitor *monitor,
184 MenuMonitorEvent event,
185 const char *path,
186 GMenuTree *tree)
187 {
188 if (event == MENU_MONITOR_EVENT_CHANGED ||
189 event == MENU_MONITOR_EVENT_CREATED)
190 {
191 menu_verbose ("\"%s\" %s, marking tree for recanonicalization\n",
192 path,
193 event == MENU_MONITOR_EVENT_CREATED ? "created" : "changed");
194
195 gmenu_tree_force_recanonicalize (tree);
196 gmenu_tree_invoke_monitors (tree);
197 }
198 }
199
200 static void
201 handle_menu_file_changed (MenuMonitor *monitor,
202 MenuMonitorEvent event,
203 const char *path,
204 GMenuTree *tree)
205 {
206 menu_verbose ("\"%s\" %s, marking tree for recanicalization\n",
207 path,
208 event == MENU_MONITOR_EVENT_CREATED ? "created" :
209 event == MENU_MONITOR_EVENT_CHANGED ? "changed" : "deleted");
210
211 gmenu_tree_force_recanonicalize (tree);
212 gmenu_tree_invoke_monitors (tree);
213 }
214
215 static void
216 handle_menu_file_directory_changed (MenuMonitor *monitor,
217 MenuMonitorEvent event,
218 const char *path,
219 GMenuTree *tree)
220 {
221 if (!g_str_has_suffix (path, ".menu"))
222 return;
223
224 menu_verbose ("\"%s\" %s, marking tree for recanicalization\n",
225 path,
226 event == MENU_MONITOR_EVENT_CREATED ? "created" :
227 event == MENU_MONITOR_EVENT_CHANGED ? "changed" : "deleted");
228
229 gmenu_tree_force_recanonicalize (tree);
230 gmenu_tree_invoke_monitors (tree);
231 }
232
233 static void
234 gmenu_tree_add_menu_file_monitor (GMenuTree *tree,
235 const char *path,
236 MenuFileMonitorType type)
237 {
238 MenuFileMonitor *monitor;
239
240 monitor = g_slice_new0 (MenuFileMonitor);
241
242 monitor->type = type;
243
244 switch (type)
245 {
246 case MENU_FILE_MONITOR_FILE:
247 menu_verbose ("Adding a menu file monitor for \"%s\"\n", path);
248
249 monitor->monitor = menu_get_file_monitor (path);
250 menu_monitor_add_notify (monitor->monitor,
251 (MenuMonitorNotifyFunc) handle_menu_file_changed,
252 tree);
253 break;
254
255 case MENU_FILE_MONITOR_NONEXISTENT_FILE:
256 menu_verbose ("Adding a menu file monitor for non-existent \"%s\"\n", path);
257
258 monitor->monitor = menu_get_file_monitor (path);
259 menu_monitor_add_notify (monitor->monitor,
260 (MenuMonitorNotifyFunc) handle_nonexistent_menu_file_changed,
261 tree);
262 break;
263
264 case MENU_FILE_MONITOR_DIRECTORY:
265 menu_verbose ("Adding a menu directory monitor for \"%s\"\n", path);
266
267 monitor->monitor = menu_get_directory_monitor (path);
268 menu_monitor_add_notify (monitor->monitor,
269 (MenuMonitorNotifyFunc) handle_menu_file_directory_changed,
270 tree);
271 break;
272
273 default:
274 g_assert_not_reached ();
275 break;
276 }
277
278 tree->menu_file_monitors = g_slist_prepend (tree->menu_file_monitors, monitor);
279 }
280
281 static void
282 remove_menu_file_monitor (MenuFileMonitor *monitor,
283 GMenuTree *tree)
284 {
285 switch (monitor->type)
286 {
287 case MENU_FILE_MONITOR_FILE:
288 menu_monitor_remove_notify (monitor->monitor,
289 (MenuMonitorNotifyFunc) handle_menu_file_changed,
290 tree);
291 break;
292
293 case MENU_FILE_MONITOR_NONEXISTENT_FILE:
294 menu_monitor_remove_notify (monitor->monitor,
295 (MenuMonitorNotifyFunc) handle_nonexistent_menu_file_changed,
296 tree);
297 break;
298
299 case MENU_FILE_MONITOR_DIRECTORY:
300 menu_monitor_remove_notify (monitor->monitor,
301 (MenuMonitorNotifyFunc) handle_menu_file_directory_changed,
302 tree);
303 break;
304
305 default:
306 g_assert_not_reached ();
307 break;
308 }
309
310 menu_monitor_unref (monitor->monitor);
311 monitor->monitor = NULL;
312
313 monitor->type = MENU_FILE_MONITOR_INVALID;
314
315 g_slice_free (MenuFileMonitor, monitor);
316 }
317
318 static void
319 gmenu_tree_remove_menu_file_monitors (GMenuTree *tree)
320 {
321 menu_verbose ("Removing all menu file monitors\n");
322
323 g_slist_foreach (tree->menu_file_monitors,
324 (GFunc) remove_menu_file_monitor,
325 tree);
326 g_slist_free (tree->menu_file_monitors);
327 tree->menu_file_monitors = NULL;
328 }
329
330 static gboolean
331 canonicalize_path (GMenuTree *tree,
332 const char *path)
333 {
334 tree->canonical_path = menu_canonicalize_file_name (path, FALSE);
335 if (tree->canonical_path)
336 {
337 tree->canonical = TRUE;
338 gmenu_tree_add_menu_file_monitor (tree,
339 tree->canonical_path,
340 MENU_FILE_MONITOR_FILE);
341 }
342 else
343 {
344 gmenu_tree_add_menu_file_monitor (tree,
345 path,
346 MENU_FILE_MONITOR_NONEXISTENT_FILE);
347 }
348
349 return tree->canonical;
350 }
351
352 static gboolean
353 canonicalize_basename_with_config_dir (GMenuTree *tree,
354 const char *basename,
355 const char *config_dir)
356 {
357 gboolean ret;
358 char *path;
359
360 path = g_build_filename (config_dir, "menus", basename, NULL);
361 ret = canonicalize_path (tree, path);
362 g_free (path);
363
364 return ret;
365 }
366
367 static void
368 canonicalize_basename (GMenuTree *tree,
369 const char *basename)
370 {
371 if (!canonicalize_basename_with_config_dir (tree,
372 basename,
373 g_get_user_config_dir ()))
374 {
375 const char * const *system_config_dirs;
376 int i;
377
378 system_config_dirs = g_get_system_config_dirs ();
379
380 i = 0;
381 while (system_config_dirs[i] != NULL)
382 {
383 if (canonicalize_basename_with_config_dir (tree,
384 basename,
385 system_config_dirs[i]))
386 break;
387
388 ++i;
389 }
390 }
391 }
392
393 static gboolean
394 gmenu_tree_canonicalize_path (GMenuTree *tree,
395 GError **error)
396 {
397 const char *menu_file = NULL;
398
399 if (tree->canonical)
400 return TRUE;
401
402 g_assert (tree->canonical_path == NULL);
403
404 gmenu_tree_remove_menu_file_monitors (tree);
405
406 if (tree->path)
407 {
408 menu_file = tree->path;
409 canonicalize_path (tree, tree->path);
410 }
411 else
412 {
413 const gchar *xdg_menu_prefix;
414
415 menu_file = tree->basename;
416 xdg_menu_prefix = g_getenv ("XDG_MENU_PREFIX");
417
418 if (xdg_menu_prefix != NULL)
419 {
420 gchar *prefixed_basename;
421
422 prefixed_basename = g_strdup_printf ("%sapplications.menu",
423 xdg_menu_prefix);
424
425 /* Some gnome-menus using applications just use "applications.menu"
426 * as the basename and expect gnome-menus to prefix it. Others (e.g.
427 * Alacarte) explicitly use "${XDG_MENU_PREFIX}applications.menu" as
428 * the basename, because they want to save changes to the right files
429 * in ~. In both cases, we want to use "applications-merged" as the
430 * merge directory (as required by the fd.o menu spec), so we save
431 * the non-prefixed basename and use it later when calling
432 * menu_layout_load().
433 */
434 if (!g_strcmp0 (tree->basename, "applications.menu") ||
435 !g_strcmp0 (tree->basename, prefixed_basename))
436 {
437 canonicalize_basename (tree, prefixed_basename);
438 g_free (tree->non_prefixed_basename);
439 tree->non_prefixed_basename = g_strdup ("applications.menu");
440 }
441 g_free (prefixed_basename);
442 }
443
444 if (!tree->canonical)
445 canonicalize_basename (tree, tree->basename);
446 }
447
448 if (tree->canonical)
449 {
450 menu_verbose ("Successfully looked up menu_file for \"%s\": %s\n",
451 menu_file, tree->canonical_path);
452 return TRUE;
453 }
454 else
455 {
456 g_set_error (error,
457 G_IO_ERROR,
458 G_IO_ERROR_FAILED,
459 "Failed to look up menu_file for \"%s\"\n",
460 menu_file);
461 return FALSE;
462 }
463 }
464
465 static void
466 gmenu_tree_force_recanonicalize (GMenuTree *tree)
467 {
468 gmenu_tree_remove_menu_file_monitors (tree);
469
470 if (tree->canonical)
471 {
472 gmenu_tree_force_reload (tree);
473
474 g_free (tree->canonical_path);
475 tree->canonical_path = NULL;
476
477 tree->canonical = FALSE;
478 }
479 }
480
481 /**
482 * gmenu_tree_new:
483 * @menu_basename: Basename of menu file
484 * @flags: Flags controlling menu content
485 *
486 * Returns: (transfer full): A new #GMenuTree instance
487 */
488 GMenuTree *
489 gmenu_tree_new (const char *menu_basename,
490 GMenuTreeFlags flags)
491 {
492 g_return_val_if_fail (menu_basename != NULL, NULL);
493
494 return g_object_new (GMENU_TYPE_TREE,
495 "menu-basename", menu_basename,
496 "flags", flags,
497 NULL);
498 }
499
500 /**
501 * gmenu_tree_new_fo_path:
502 * @menu_path: Path of menu file
503 * @flags: Flags controlling menu content
504 *
505 * Returns: (transfer full): A new #GMenuTree instance
506 */
507 GMenuTree *
508 gmenu_tree_new_for_path (const char *menu_path,
509 GMenuTreeFlags flags)
510 {
511 g_return_val_if_fail (menu_path != NULL, NULL);
512
513 return g_object_new (GMENU_TYPE_TREE,
514 "menu-path", menu_path,
515 "flags", flags,
516 NULL);
517 }
518
519 static GObject *
520 gmenu_tree_constructor (GType type,
521 guint n_construct_properties,
522 GObjectConstructParam *construct_properties)
523 {
524 GObject *obj;
525 GMenuTree *self;
526
527 obj = G_OBJECT_CLASS (gmenu_tree_parent_class)->constructor (type,
528 n_construct_properties,
529 construct_properties);
530
531 /* If GMenuTree:menu-path is set, then we should make sure that
532 * GMenuTree:menu-basename is unset (especially as it has a default
533 * value). This has to be done here, in the constructor, since the
534 * properties are construct-only. */
535
536 self = GMENU_TREE (obj);
537
538 if (self->path != NULL)
539 g_object_set (self, "menu-basename", NULL, NULL);
540
541 return obj;
542 }
543
544 static void
545 gmenu_tree_set_property (GObject *object,
546 guint prop_id,
547 const GValue *value,
548 GParamSpec *pspec)
549 {
550 GMenuTree *self = GMENU_TREE (object);
551
552 switch (prop_id)
553 {
554 case PROP_MENU_BASENAME:
555 self->basename = g_value_dup_string (value);
556 break;
557
558 case PROP_MENU_PATH:
559 self->path = g_value_dup_string (value);
560 break;
561
562 case PROP_FLAGS:
563 self->flags = g_value_get_flags (value);
564 break;
565
566 default:
567 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
568 break;
569 }
570 }
571
572 static void
573 gmenu_tree_get_property (GObject *object,
574 guint prop_id,
575 GValue *value,
576 GParamSpec *pspec)
577 {
578 GMenuTree *self = GMENU_TREE (object);
579
580 switch (prop_id)
581 {
582 case PROP_MENU_BASENAME:
583 g_value_set_string (value, self->basename);
584 break;
585 case PROP_MENU_PATH:
586 g_value_set_string (value, self->path);
587 break;
588 case PROP_FLAGS:
589 g_value_set_flags (value, self->flags);
590 break;
591 default:
592 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
593 break;
594 }
595 }
596
597 static void
598 gmenu_tree_finalize (GObject *object)
599 {
600 GMenuTree *tree = GMENU_TREE (object);
601
602 gmenu_tree_force_recanonicalize (tree);
603
604 if (tree->basename != NULL)
605 g_free (tree->basename);
606 tree->basename = NULL;
607
608 g_free (tree->non_prefixed_basename);
609 tree->non_prefixed_basename = NULL;
610
611 if (tree->path != NULL)
612 g_free (tree->path);
613 tree->path = NULL;
614
615 if (tree->canonical_path != NULL)
616 g_free (tree->canonical_path);
617 tree->canonical_path = NULL;
618
619 g_hash_table_destroy (tree->entries_by_id);
620 tree->entries_by_id = NULL;
621
622 G_OBJECT_CLASS (gmenu_tree_parent_class)->finalize (object);
623 }
624
625 static void
626 gmenu_tree_init (GMenuTree *self)
627 {
628 self->entries_by_id = g_hash_table_new (g_str_hash, g_str_equal);
629 }
630
631 static void
632 gmenu_tree_class_init (GMenuTreeClass *klass)
633 {
634 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
635
636 gobject_class->constructor = gmenu_tree_constructor;
637 gobject_class->get_property = gmenu_tree_get_property;
638 gobject_class->set_property = gmenu_tree_set_property;
639 gobject_class->finalize = gmenu_tree_finalize;
640
641 /**
642 * GMenuTree:menu-basename:
643 *
644 * The name of the menu file; must be a basename or a relative path. The file
645 * will be looked up in $XDG_CONFIG_DIRS/menus/. See the Desktop Menu
646 * specification.
647 */
648 g_object_class_install_property (gobject_class,
649 PROP_MENU_BASENAME,
650 g_param_spec_string ("menu-basename", "", "",
651 "applications.menu",
652 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
653 /**
654 * GMenuTree:menu-path:
655 *
656 * The full path of the menu file. If set, GMenuTree:menu-basename will get
657 * ignored.
658 */
659 g_object_class_install_property (gobject_class,
660 PROP_MENU_PATH,
661 g_param_spec_string ("menu-path", "", "",
662 NULL,
663 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
664 /**
665 * GMenuTree:flags:
666 *
667 * Flags controlling the content of the menu.
668 */
669 g_object_class_install_property (gobject_class,
670 PROP_FLAGS,
671 g_param_spec_flags ("flags", "", "",
672 GMENU_TYPE_TREE_FLAGS,
673 GMENU_TREE_FLAGS_NONE,
674 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
675
676 /**
677 * GMenuTree:changed:
678 *
679 * This signal is emitted when applications are added, removed, or
680 * upgraded. But note the new data will only be visible after
681 * gmenu_tree_load_sync() or a variant thereof is invoked.
682 */
683 gmenu_tree_signals[CHANGED] =
684 g_signal_new ("changed",
685 G_TYPE_FROM_CLASS (klass),
686 G_SIGNAL_RUN_LAST,
687 0,
688 NULL, NULL,
689 g_cclosure_marshal_VOID__VOID,
690 G_TYPE_NONE, 0);
691 }
692
693 /**
694 * gmenu_tree_get_canonical_menu_path:
695 * @tree: a #GMenuTree
696 *
697 * This function is only available if the tree has been loaded via
698 * gmenu_tree_load_sync() or a variant thereof.
699 *
700 * Returns: The absolute and canonicalized path to the loaded menu file
701 */
702 const char *
703 gmenu_tree_get_canonical_menu_path (GMenuTree *tree)
704 {
705 g_return_val_if_fail (GMENU_IS_TREE (tree), NULL);
706 g_return_val_if_fail (tree->loaded, NULL);
707
708 return tree->canonical_path;
709 }
710
711 /**
712 * gmenu_tree_load_sync:
713 * @tree: a #GMenuTree
714 * @error: a #GError
715 *
716 * Synchronously load the menu contents. This function
717 * performs a significant amount of blocking I/O if the
718 * tree has not been loaded yet.
719 *
720 * Returns: %TRUE on success, %FALSE on error
721 */
722 gboolean
723 gmenu_tree_load_sync (GMenuTree *tree,
724 GError **error)
725 {
726 GError *local_error = NULL;
727
728 if (tree->loaded)
729 return TRUE;
730
731 if (!gmenu_tree_build_from_layout (tree, &local_error))
732 {
733 if (local_error)
734 g_propagate_error (error, local_error);
735 return FALSE;
736 }
737
738 tree->loaded = TRUE;
739
740 return TRUE;
741 }
742
743 /**
744 * gmenu_tree_get_root_directory:
745 * @tree: a #GMenuTree
746 *
747 * Get the root directory; you must have loaded the tree first (at
748 * least once) via gmenu_tree_load_sync() or a variant thereof.
749 *
750 * Returns: (transfer full): Root of the tree
751 */
752 GMenuTreeDirectory *
753 gmenu_tree_get_root_directory (GMenuTree *tree)
754 {
755 g_return_val_if_fail (tree != NULL, NULL);
756 g_return_val_if_fail (tree->loaded, NULL);
757
758 return gmenu_tree_item_ref (tree->root);
759 }
760
761 static GMenuTreeDirectory *
762 find_path (GMenuTreeDirectory *directory,
763 const char *path)
764 {
765 const char *name;
766 char *slash;
767 char *freeme;
768 GSList *tmp;
769
770 while (path[0] == G_DIR_SEPARATOR) path++;
771
772 if (path[0] == '\0')
773 return directory;
774
775 freeme = NULL;
776 slash = strchr (path, G_DIR_SEPARATOR);
777 if (slash)
778 {
779 name = freeme = g_strndup (path, slash - path);
780 path = slash + 1;
781 }
782 else
783 {
784 name = path;
785 path = NULL;
786 }
787
788 tmp = directory->contents;
789 while (tmp != NULL)
790 {
791 GMenuTreeItem *item = tmp->data;
792
793 if (item->type != GMENU_TREE_ITEM_DIRECTORY)
794 {
795 tmp = tmp->next;
796 continue;
797 }
798
799 if (!strcmp (name, GMENU_TREE_DIRECTORY (item)->name))
800 {
801 g_free (freeme);
802
803 if (path)
804 return find_path (GMENU_TREE_DIRECTORY (item), path);
805 else
806 return GMENU_TREE_DIRECTORY (item);
807 }
808
809 tmp = tmp->next;
810 }
811
812 g_free (freeme);
813
814 return NULL;
815 }
816
817 GMenuTreeDirectory *
818 gmenu_tree_get_directory_from_path (GMenuTree *tree,
819 const char *path)
820 {
821 GMenuTreeDirectory *root;
822 GMenuTreeDirectory *directory;
823
824 g_return_val_if_fail (tree != NULL, NULL);
825 g_return_val_if_fail (path != NULL, NULL);
826
827 if (path[0] != G_DIR_SEPARATOR)
828 return NULL;
829
830 if (!(root = gmenu_tree_get_root_directory (tree)))
831 return NULL;
832
833 directory = find_path (root, path);
834
835 gmenu_tree_item_unref (root);
836
837 return directory ? gmenu_tree_item_ref (directory) : NULL;
838 }
839
840 /**
841 * gmenu_tree_get_entry_by_id:
842 * @tree: a #GMenuTree
843 * @id: a desktop file ID
844 *
845 * Look up the entry corresponding to the given "desktop file id".
846 *
847 * Returns: (transfer full): A newly referenced #GMenuTreeEntry, or %NULL if none
848 */
849 GMenuTreeEntry *
850 gmenu_tree_get_entry_by_id (GMenuTree *tree,
851 const char *id)
852 {
853 GMenuTreeEntry *entry;
854
855 g_return_val_if_fail (tree->loaded, NULL);
856
857 entry = g_hash_table_lookup (tree->entries_by_id, id);
858 if (entry != NULL)
859 gmenu_tree_item_ref (entry);
860
861 return entry;
862 }
863
864 static void
865 gmenu_tree_invoke_monitors (GMenuTree *tree)
866 {
867 g_signal_emit (tree, gmenu_tree_signals[CHANGED], 0);
868 }
869
870 static GMenuTreeDirectory *
871 get_parent (GMenuTreeItem *item)
872 {
873 g_return_val_if_fail (item != NULL, NULL);
874 return item->parent ? gmenu_tree_item_ref (item->parent) : NULL;
875 }
876
877 /**
878 * gmenu_tree_directory_get_parent:
879 * @directory: a #GMenuTreeDirectory
880 *
881 * Returns: (transfer full): The parent directory, or %NULL if none
882 */
883 GMenuTreeDirectory *
884 gmenu_tree_directory_get_parent (GMenuTreeDirectory *directory)
885 {
886 return get_parent ((GMenuTreeItem *)directory);
887 }
888
889 /**
890 * gmenu_tree_entry_get_parent:
891 * @entry: a #GMenuTreeEntry
892 *
893 * Returns: (transfer full): The parent directory, or %NULL if none
894 */
895 GMenuTreeDirectory *
896 gmenu_tree_entry_get_parent (GMenuTreeEntry *entry)
897 {
898 return get_parent ((GMenuTreeItem *)entry);
899 }
900
901 /**
902 * gmenu_tree_alias_get_parent:
903 * @alias: a #GMenuTreeAlias
904 *
905 * Returns: (transfer full): The parent directory, or %NULL if none
906 */
907 GMenuTreeDirectory *
908 gmenu_tree_alias_get_parent (GMenuTreeAlias *alias)
909 {
910 return get_parent ((GMenuTreeItem *)alias);
911 }
912
913 /**
914 * gmenu_tree_header_get_parent:
915 * @header: a #GMenuTreeHeader
916 *
917 * Returns: (transfer full): The parent directory, or %NULL if none
918 */
919 GMenuTreeDirectory *
920 gmenu_tree_header_get_parent (GMenuTreeHeader *header)
921 {
922 return get_parent ((GMenuTreeItem *)header);
923 }
924
925 /**
926 * gmenu_tree_separator_get_parent:
927 * @separator: a #GMenuTreeSeparator
928 *
929 * Returns: (transfer full): The parent directory, or %NULL if none
930 */
931 GMenuTreeDirectory *
932 gmenu_tree_separator_get_parent (GMenuTreeSeparator *separator)
933 {
934 return get_parent ((GMenuTreeItem *)separator);
935 }
936
937 static void
938 gmenu_tree_item_set_parent (GMenuTreeItem *item,
939 GMenuTreeDirectory *parent)
940 {
941 g_return_if_fail (item != NULL);
942
943 item->parent = parent;
944 }
945
946 /**
947 * gmenu_tree_iter_ref: (skip)
948 * @iter: iter
949 *
950 * Increment the reference count of @iter
951 */
952 GMenuTreeIter *
953 gmenu_tree_iter_ref (GMenuTreeIter *iter)
954 {
955 g_atomic_int_inc (&iter->refcount);
956 return iter;
957 }
958
959 /**
960 * gmenu_tree_iter_unref: (skip)
961 * @iter: iter
962 *
963 * Decrement the reference count of @iter
964 */
965 void
966 gmenu_tree_iter_unref (GMenuTreeIter *iter)
967 {
968 if (!g_atomic_int_dec_and_test (&iter->refcount))
969 return;
970
971 g_slist_foreach (iter->contents, (GFunc)gmenu_tree_item_unref, NULL);
972 g_slist_free (iter->contents);
973
974 g_slice_free (GMenuTreeIter, iter);
975 }
976
977 /**
978 * gmenu_tree_directory_iter:
979 * @directory: directory
980 *
981 * Returns: (transfer full): A new iterator over the directory contents
982 */
983 GMenuTreeIter *
984 gmenu_tree_directory_iter (GMenuTreeDirectory *directory)
985 {
986 GMenuTreeIter *iter;
987
988 g_return_val_if_fail (directory != NULL, NULL);
989
990 iter = g_slice_new0 (GMenuTreeIter);
991 iter->refcount = 1;
992
993 iter->contents = g_slist_copy (directory->contents);
994 iter->contents_iter = iter->contents;
995 g_slist_foreach (iter->contents, (GFunc) gmenu_tree_item_ref, NULL);
996
997 return iter;
998 }
999
1000 /**
1001 * gmenu_tree_iter_next:
1002 * @iter: iter
1003 *
1004 * Change the iterator to the next item, and return its type. If
1005 * there are no more items, %GMENU_TREE_ITEM_INVALID is returned.
1006 *
1007 * Returns: The type of the next item that can be retrived from the iterator
1008 */
1009 GMenuTreeItemType
1010 gmenu_tree_iter_next (GMenuTreeIter *iter)
1011 {
1012 g_return_val_if_fail (iter != NULL, GMENU_TREE_ITEM_INVALID);
1013
1014 if (iter->contents_iter)
1015 {
1016 iter->item = iter->contents_iter->data;
1017 iter->contents_iter = iter->contents_iter->next;
1018 return iter->item->type;
1019 }
1020 else
1021 return GMENU_TREE_ITEM_INVALID;
1022 }
1023
1024 /**
1025 * gmenu_tree_iter_get_directory:
1026 * @iter: iter
1027 *
1028 * This method may only be called if gmenu_tree_iter_next()
1029 * returned GMENU_TREE_ITEM_DIRECTORY.
1030 *
1031 * Returns: (transfer full): A directory
1032 */
1033 GMenuTreeDirectory *
1034 gmenu_tree_iter_get_directory (GMenuTreeIter *iter)
1035 {
1036 g_return_val_if_fail (iter != NULL, NULL);
1037 g_return_val_if_fail (iter->item != NULL, NULL);
1038 g_return_val_if_fail (iter->item->type == GMENU_TREE_ITEM_DIRECTORY, NULL);
1039
1040 return (GMenuTreeDirectory*)gmenu_tree_item_ref (iter->item);
1041 }
1042
1043 /**
1044 * gmenu_tree_iter_get_entry:
1045 * @iter: iter
1046 *
1047 * This method may only be called if gmenu_tree_iter_next()
1048 * returned GMENU_TREE_ITEM_ENTRY.
1049 *
1050 * Returns: (transfer full): An entry
1051 */
1052 GMenuTreeEntry *
1053 gmenu_tree_iter_get_entry (GMenuTreeIter *iter)
1054 {
1055 g_return_val_if_fail (iter != NULL, NULL);
1056 g_return_val_if_fail (iter->item != NULL, NULL);
1057 g_return_val_if_fail (iter->item->type == GMENU_TREE_ITEM_ENTRY, NULL);
1058
1059 return (GMenuTreeEntry*)gmenu_tree_item_ref (iter->item);
1060 }
1061
1062 /**
1063 * gmenu_tree_iter_get_header:
1064 * @iter: iter
1065 *
1066 * This method may only be called if gmenu_tree_iter_next()
1067 * returned GMENU_TREE_ITEM_HEADER.
1068 *
1069 * Returns: (transfer full): A header
1070 */
1071 GMenuTreeHeader *
1072 gmenu_tree_iter_get_header (GMenuTreeIter *iter)
1073 {
1074 g_return_val_if_fail (iter != NULL, NULL);
1075 g_return_val_if_fail (iter->item != NULL, NULL);
1076 g_return_val_if_fail (iter->item->type == GMENU_TREE_ITEM_HEADER, NULL);
1077
1078 return (GMenuTreeHeader*)gmenu_tree_item_ref (iter->item);
1079 }
1080
1081 /**
1082 * gmenu_tree_iter_get_alias:
1083 * @iter: iter
1084 *
1085 * This method may only be called if gmenu_tree_iter_next()
1086 * returned GMENU_TREE_ITEM_ALIAS.
1087 *
1088 * Returns: (transfer full): An alias
1089 */
1090 GMenuTreeAlias *
1091 gmenu_tree_iter_get_alias (GMenuTreeIter *iter)
1092 {
1093 g_return_val_if_fail (iter != NULL, NULL);
1094 g_return_val_if_fail (iter->item != NULL, NULL);
1095 g_return_val_if_fail (iter->item->type == GMENU_TREE_ITEM_ALIAS, NULL);
1096
1097 return (GMenuTreeAlias*)gmenu_tree_item_ref (iter->item);
1098 }
1099
1100 /**
1101 * gmenu_tree_iter_get_separator:
1102 * @iter: iter
1103 *
1104 * This method may only be called if gmenu_tree_iter_next()
1105 * returned #GMENU_TREE_ITEM_SEPARATOR.
1106 *
1107 * Returns: (transfer full): A separator
1108 */
1109 GMenuTreeSeparator *
1110 gmenu_tree_iter_get_separator (GMenuTreeIter *iter)
1111 {
1112 g_return_val_if_fail (iter != NULL, NULL);
1113 g_return_val_if_fail (iter->item != NULL, NULL);
1114 g_return_val_if_fail (iter->item->type == GMENU_TREE_ITEM_SEPARATOR, NULL);
1115
1116 return (GMenuTreeSeparator*)gmenu_tree_item_ref (iter->item);
1117 }
1118
1119 const char *
1120 gmenu_tree_directory_get_name (GMenuTreeDirectory *directory)
1121 {
1122 g_return_val_if_fail (directory != NULL, NULL);
1123
1124 if (!directory->directory_entry)
1125 return directory->name;
1126
1127 return desktop_entry_get_name (directory->directory_entry);
1128 }
1129
1130 const char *
1131 gmenu_tree_directory_get_generic_name (GMenuTreeDirectory *directory)
1132 {
1133 g_return_val_if_fail (directory != NULL, NULL);
1134
1135 if (!directory->directory_entry)
1136 return NULL;
1137
1138 return desktop_entry_get_generic_name (directory->directory_entry);
1139 }
1140
1141 const char *
1142 gmenu_tree_directory_get_comment (GMenuTreeDirectory *directory)
1143 {
1144 g_return_val_if_fail (directory != NULL, NULL);
1145
1146 if (!directory->directory_entry)
1147 return NULL;
1148
1149 return desktop_entry_get_comment (directory->directory_entry);
1150 }
1151
1152 /**
1153 * gmenu_tree_directory_get_icon:
1154 * @directory: a #GMenuTreeDirectory
1155 *
1156 * Gets the icon for the directory.
1157 *
1158 * Returns: (transfer none): The #GIcon for this directory
1159 */
1160 GIcon *
1161 gmenu_tree_directory_get_icon (GMenuTreeDirectory *directory)
1162 {
1163 g_return_val_if_fail (directory != NULL, NULL);
1164
1165 if (!directory->directory_entry)
1166 return NULL;
1167
1168 return desktop_entry_get_icon (directory->directory_entry);
1169 }
1170
1171 const char *
1172 gmenu_tree_directory_get_desktop_file_path (GMenuTreeDirectory *directory)
1173 {
1174 g_return_val_if_fail (directory != NULL, NULL);
1175
1176 if (!directory->directory_entry)
1177 return NULL;
1178
1179 return desktop_entry_get_path (directory->directory_entry);
1180 }
1181
1182 const char *
1183 gmenu_tree_directory_get_menu_id (GMenuTreeDirectory *directory)
1184 {
1185 g_return_val_if_fail (directory != NULL, NULL);
1186
1187 return directory->name;
1188 }
1189
1190 gboolean
1191 gmenu_tree_directory_get_is_nodisplay (GMenuTreeDirectory *directory)
1192 {
1193 g_return_val_if_fail (directory != NULL, FALSE);
1194
1195 return directory->is_nodisplay;
1196 }
1197
1198 /**
1199 * gmenu_tree_directory_get_tree:
1200 * @directory: A #GMenuTreeDirectory
1201 *
1202 * Grab the tree associated with a #GMenuTreeItem.
1203 *
1204 * Returns: (transfer full): The #GMenuTree
1205 */
1206 GMenuTree *
1207 gmenu_tree_directory_get_tree (GMenuTreeDirectory *directory)
1208 {
1209 g_return_val_if_fail (directory != NULL, NULL);
1210
1211 return g_object_ref (directory->item.tree);
1212 }
1213
1214 static void
1215 append_directory_path (GMenuTreeDirectory *directory,
1216 GString *path)
1217 {
1218
1219 if (!directory->item.parent)
1220 {
1221 g_string_append_c (path, G_DIR_SEPARATOR);
1222 return;
1223 }
1224
1225 append_directory_path (directory->item.parent, path);
1226
1227 g_string_append (path, directory->name);
1228 g_string_append_c (path, G_DIR_SEPARATOR);
1229 }
1230
1231 char *
1232 gmenu_tree_directory_make_path (GMenuTreeDirectory *directory,
1233 GMenuTreeEntry *entry)
1234 {
1235 GString *path;
1236
1237 g_return_val_if_fail (directory != NULL, NULL);
1238
1239 path = g_string_new (NULL);
1240
1241 append_directory_path (directory, path);
1242
1243 if (entry != NULL)
1244 {
1245 const char *basename;
1246
1247 basename = desktop_entry_get_basename (entry->desktop_entry);
1248 g_string_append (path, basename);
1249 }
1250
1251 return g_string_free (path, FALSE);
1252 }
1253
1254 /**
1255 * gmenu_tree_entry_get_app_info:
1256 * @entry: a #GMenuTreeEntry
1257 *
1258 * Returns: (transfer none): The #GDesktopAppInfo for this entry
1259 */
1260 GDesktopAppInfo *
1261 gmenu_tree_entry_get_app_info (GMenuTreeEntry *entry)
1262 {
1263 g_return_val_if_fail (entry != NULL, NULL);
1264
1265 return desktop_entry_get_app_info (entry->desktop_entry);
1266 }
1267
1268 const char *
1269 gmenu_tree_entry_get_desktop_file_path (GMenuTreeEntry *entry)
1270 {
1271 g_return_val_if_fail (entry != NULL, NULL);
1272
1273 return desktop_entry_get_path (entry->desktop_entry);
1274 }
1275
1276 const char *
1277 gmenu_tree_entry_get_desktop_file_id (GMenuTreeEntry *entry)
1278 {
1279 g_return_val_if_fail (entry != NULL, FALSE);
1280
1281 return entry->desktop_file_id;
1282 }
1283
1284 gboolean
1285 gmenu_tree_entry_get_is_nodisplay_recurse (GMenuTreeEntry *entry)
1286 {
1287 GMenuTreeDirectory *directory;
1288 GDesktopAppInfo *app_info;
1289
1290 g_return_val_if_fail (entry != NULL, FALSE);
1291
1292 app_info = gmenu_tree_entry_get_app_info (entry);
1293
1294 if (g_desktop_app_info_get_nodisplay (app_info))
1295 return TRUE;
1296
1297 directory = entry->item.parent;
1298 while (directory != NULL)
1299 {
1300 if (directory->is_nodisplay)
1301 return TRUE;
1302
1303 directory = directory->item.parent;
1304 }
1305
1306 return FALSE;
1307 }
1308
1309 gboolean
1310 gmenu_tree_entry_get_is_excluded (GMenuTreeEntry *entry)
1311 {
1312 g_return_val_if_fail (entry != NULL, FALSE);
1313
1314 return entry->is_excluded;
1315 }
1316
1317 gboolean
1318 gmenu_tree_entry_get_is_unallocated (GMenuTreeEntry *entry)
1319 {
1320 g_return_val_if_fail (entry != NULL, FALSE);
1321
1322 return entry->is_unallocated;
1323 }
1324
1325 /**
1326 * gmenu_tree_entry_get_tree:
1327 * @entry: A #GMenuTreeEntry
1328 *
1329 * Grab the tree associated with a #GMenuTreeEntry.
1330 *
1331 * Returns: (transfer full): The #GMenuTree
1332 */
1333 GMenuTree *
1334 gmenu_tree_entry_get_tree (GMenuTreeEntry *entry)
1335 {
1336 g_return_val_if_fail (entry != NULL, NULL);
1337
1338 return g_object_ref (entry->item.tree);
1339 }
1340
1341 GMenuTreeDirectory *
1342 gmenu_tree_header_get_directory (GMenuTreeHeader *header)
1343 {
1344 g_return_val_if_fail (header != NULL, NULL);
1345
1346 return gmenu_tree_item_ref (header->directory);
1347 }
1348
1349 /**
1350 * gmenu_tree_header_get_tree:
1351 * @header: A #GMenuTreeHeader
1352 *
1353 * Grab the tree associated with a #GMenuTreeHeader.
1354 *
1355 * Returns: (transfer full): The #GMenuTree
1356 */
1357 GMenuTree *
1358 gmenu_tree_header_get_tree (GMenuTreeHeader *header)
1359 {
1360 g_return_val_if_fail (header != NULL, NULL);
1361
1362 return g_object_ref (header->item.tree);
1363 }
1364
1365 GMenuTreeItemType
1366 gmenu_tree_alias_get_aliased_item_type (GMenuTreeAlias *alias)
1367 {
1368 g_return_val_if_fail (alias != NULL, GMENU_TREE_ITEM_INVALID);
1369
1370 g_assert (alias->aliased_item != NULL);
1371 return alias->aliased_item->type;
1372 }
1373
1374 GMenuTreeDirectory *
1375 gmenu_tree_alias_get_directory (GMenuTreeAlias *alias)
1376 {
1377 g_return_val_if_fail (alias != NULL, NULL);
1378
1379 return gmenu_tree_item_ref (alias->directory);
1380 }
1381
1382 /**
1383 * gmenu_tree_alias_get_tree:
1384 * @alias: A #GMenuTreeAlias
1385 *
1386 * Grab the tree associated with a #GMenuTreeAlias.
1387 *
1388 * Returns: (transfer full): The #GMenuTree
1389 */
1390 GMenuTree *
1391 gmenu_tree_alias_get_tree (GMenuTreeAlias *alias)
1392 {
1393 g_return_val_if_fail (alias != NULL, NULL);
1394
1395 return g_object_ref (alias->item.tree);
1396 }
1397
1398 /**
1399 * gmenu_tree_separator_get_tree:
1400 * @separator: A #GMenuTreeSeparator
1401 *
1402 * Grab the tree associated with a #GMenuTreeSeparator.
1403 *
1404 * Returns: (transfer full): The #GMenuTree
1405 */
1406 GMenuTree *
1407 gmenu_tree_separator_get_tree (GMenuTreeSeparator *separator)
1408 {
1409 g_return_val_if_fail (separator != NULL, NULL);
1410
1411 return g_object_ref (separator->item.tree);
1412 }
1413
1414 /**
1415 * gmenu_tree_alias_get_aliased_directory:
1416 * @alias: alias
1417 *
1418 * Returns: (transfer full): The aliased directory entry
1419 */
1420 GMenuTreeDirectory *
1421 gmenu_tree_alias_get_aliased_directory (GMenuTreeAlias *alias)
1422 {
1423 g_return_val_if_fail (alias != NULL, NULL);
1424 g_return_val_if_fail (alias->aliased_item->type == GMENU_TREE_ITEM_DIRECTORY, NULL);
1425
1426 return (GMenuTreeDirectory *) gmenu_tree_item_ref (alias->aliased_item);
1427 }
1428
1429 /**
1430 * gmenu_tree_alias_get_aliased_entry:
1431 * @alias: alias
1432 *
1433 * Returns: (transfer full): The aliased entry
1434 */
1435 GMenuTreeEntry *
1436 gmenu_tree_alias_get_aliased_entry (GMenuTreeAlias *alias)
1437 {
1438 g_return_val_if_fail (alias != NULL, NULL);
1439 g_return_val_if_fail (alias->aliased_item->type == GMENU_TREE_ITEM_ENTRY, NULL);
1440
1441 return (GMenuTreeEntry *) gmenu_tree_item_ref (alias->aliased_item);
1442 }
1443
1444 static GMenuTreeDirectory *
1445 gmenu_tree_directory_new (GMenuTree *tree,
1446 GMenuTreeDirectory *parent,
1447 const char *name)
1448 {
1449 GMenuTreeDirectory *retval;
1450
1451 retval = g_slice_new0 (GMenuTreeDirectory);
1452
1453 retval->item.type = GMENU_TREE_ITEM_DIRECTORY;
1454 retval->item.parent = parent;
1455 retval->item.refcount = 1;
1456 retval->item.tree = tree;
1457
1458 retval->name = g_strdup (name);
1459 retval->directory_entry = NULL;
1460 retval->entries = NULL;
1461 retval->subdirs = NULL;
1462 retval->default_layout_info = NULL;
1463 retval->layout_info = NULL;
1464 retval->contents = NULL;
1465 retval->only_unallocated = FALSE;
1466 retval->is_nodisplay = FALSE;
1467 retval->layout_pending_separator = FALSE;
1468 retval->preprocessed = FALSE;
1469 retval->will_inline_header = G_MAXUINT16;
1470
1471 retval->default_layout_values.mask = MENU_LAYOUT_VALUES_NONE;
1472 retval->default_layout_values.show_empty = FALSE;
1473 retval->default_layout_values.inline_menus = FALSE;
1474 retval->default_layout_values.inline_limit = 4;
1475 retval->default_layout_values.inline_header = FALSE;
1476 retval->default_layout_values.inline_alias = FALSE;
1477
1478 return retval;
1479 }
1480
1481 static void
1482 gmenu_tree_directory_finalize (GMenuTreeDirectory *directory)
1483 {
1484 g_assert (directory->item.refcount == 0);
1485
1486 g_slist_foreach (directory->contents,
1487 (GFunc) gmenu_tree_item_unref_and_unset_parent,
1488 NULL);
1489 g_slist_free (directory->contents);
1490 directory->contents = NULL;
1491
1492 g_slist_foreach (directory->default_layout_info,
1493 (GFunc) menu_layout_node_unref,
1494 NULL);
1495 g_slist_free (directory->default_layout_info);
1496 directory->default_layout_info = NULL;
1497
1498 g_slist_foreach (directory->layout_info,
1499 (GFunc) menu_layout_node_unref,
1500 NULL);
1501 g_slist_free (directory->layout_info);
1502 directory->layout_info = NULL;
1503
1504 g_slist_foreach (directory->subdirs,
1505 (GFunc) gmenu_tree_item_unref_and_unset_parent,
1506 NULL);
1507 g_slist_free (directory->subdirs);
1508 directory->subdirs = NULL;
1509
1510 g_slist_foreach (directory->entries,
1511 (GFunc) gmenu_tree_item_unref_and_unset_parent,
1512 NULL);
1513 g_slist_free (directory->entries);
1514 directory->entries = NULL;
1515
1516 if (directory->directory_entry)
1517 desktop_entry_unref (directory->directory_entry);
1518 directory->directory_entry = NULL;
1519
1520 g_free (directory->name);
1521 directory->name = NULL;
1522
1523 g_slice_free (GMenuTreeDirectory, directory);
1524 }
1525
1526 static GMenuTreeSeparator *
1527 gmenu_tree_separator_new (GMenuTreeDirectory *parent)
1528 {
1529 GMenuTreeSeparator *retval;
1530
1531 retval = g_slice_new0 (GMenuTreeSeparator);
1532
1533 retval->item.type = GMENU_TREE_ITEM_SEPARATOR;
1534 retval->item.parent = parent;
1535 retval->item.refcount = 1;
1536 retval->item.tree = parent->item.tree;
1537
1538 return retval;
1539 }
1540
1541 static void
1542 gmenu_tree_separator_finalize (GMenuTreeSeparator *separator)
1543 {
1544 g_assert (separator->item.refcount == 0);
1545
1546 g_slice_free (GMenuTreeSeparator, separator);
1547 }
1548
1549 static GMenuTreeHeader *
1550 gmenu_tree_header_new (GMenuTreeDirectory *parent,
1551 GMenuTreeDirectory *directory)
1552 {
1553 GMenuTreeHeader *retval;
1554
1555 retval = g_slice_new0 (GMenuTreeHeader);
1556
1557 retval->item.type = GMENU_TREE_ITEM_HEADER;
1558 retval->item.parent = parent;
1559 retval->item.refcount = 1;
1560 retval->item.tree = parent->item.tree;
1561
1562 retval->directory = gmenu_tree_item_ref (directory);
1563
1564 gmenu_tree_item_set_parent (GMENU_TREE_ITEM (retval->directory), NULL);
1565
1566 return retval;
1567 }
1568
1569 static void
1570 gmenu_tree_header_finalize (GMenuTreeHeader *header)
1571 {
1572 g_assert (header->item.refcount == 0);
1573
1574 if (header->directory != NULL)
1575 gmenu_tree_item_unref (header->directory);
1576 header->directory = NULL;
1577
1578 g_slice_free (GMenuTreeHeader, header);
1579 }
1580
1581 static GMenuTreeAlias *
1582 gmenu_tree_alias_new (GMenuTreeDirectory *parent,
1583 GMenuTreeDirectory *directory,
1584 GMenuTreeItem *item)
1585 {
1586 GMenuTreeAlias *retval;
1587
1588 retval = g_slice_new0 (GMenuTreeAlias);
1589
1590 retval->item.type = GMENU_TREE_ITEM_ALIAS;
1591 retval->item.parent = parent;
1592 retval->item.refcount = 1;
1593 retval->item.tree = parent->item.tree;
1594
1595 retval->directory = gmenu_tree_item_ref (directory);
1596 if (item->type != GMENU_TREE_ITEM_ALIAS)
1597 retval->aliased_item = gmenu_tree_item_ref (item);
1598 else
1599 {
1600 GMenuTreeAlias *alias = GMENU_TREE_ALIAS (item);
1601 retval->aliased_item = gmenu_tree_item_ref (alias->aliased_item);
1602 }
1603
1604 gmenu_tree_item_set_parent (GMENU_TREE_ITEM (retval->directory), NULL);
1605 gmenu_tree_item_set_parent (retval->aliased_item, NULL);
1606
1607 return retval;
1608 }
1609
1610 static void
1611 gmenu_tree_alias_finalize (GMenuTreeAlias *alias)
1612 {
1613 g_assert (alias->item.refcount == 0);
1614
1615 if (alias->directory != NULL)
1616 gmenu_tree_item_unref (alias->directory);
1617 alias->directory = NULL;
1618
1619 if (alias->aliased_item != NULL)
1620 gmenu_tree_item_unref (alias->aliased_item);
1621 alias->aliased_item = NULL;
1622
1623 g_slice_free (GMenuTreeAlias, alias);
1624 }
1625
1626 static GMenuTreeEntry *
1627 gmenu_tree_entry_new (GMenuTreeDirectory *parent,
1628 DesktopEntry *desktop_entry,
1629 const char *desktop_file_id,
1630 gboolean is_excluded,
1631 gboolean is_unallocated)
1632 {
1633 GMenuTreeEntry *retval;
1634
1635 retval = g_slice_new0 (GMenuTreeEntry);
1636
1637 retval->item.type = GMENU_TREE_ITEM_ENTRY;
1638 retval->item.parent = parent;
1639 retval->item.refcount = 1;
1640 retval->item.tree = parent->item.tree;
1641
1642 retval->desktop_entry = desktop_entry_ref (desktop_entry);
1643 retval->desktop_file_id = g_strdup (desktop_file_id);
1644 retval->is_excluded = is_excluded != FALSE;
1645 retval->is_unallocated = is_unallocated != FALSE;
1646
1647 return retval;
1648 }
1649
1650 static void
1651 gmenu_tree_entry_finalize (GMenuTreeEntry *entry)
1652 {
1653 g_assert (entry->item.refcount == 0);
1654
1655 g_free (entry->desktop_file_id);
1656 entry->desktop_file_id = NULL;
1657
1658 if (entry->desktop_entry)
1659 desktop_entry_unref (entry->desktop_entry);
1660 entry->desktop_entry = NULL;
1661
1662 g_slice_free (GMenuTreeEntry, entry);
1663 }
1664
1665 static int
1666 gmenu_tree_entry_compare_by_id (GMenuTreeItem *a,
1667 GMenuTreeItem *b)
1668 {
1669 if (a->type == GMENU_TREE_ITEM_ALIAS)
1670 a = GMENU_TREE_ALIAS (a)->aliased_item;
1671
1672 if (b->type == GMENU_TREE_ITEM_ALIAS)
1673 b = GMENU_TREE_ALIAS (b)->aliased_item;
1674
1675 return strcmp (GMENU_TREE_ENTRY (a)->desktop_file_id,
1676 GMENU_TREE_ENTRY (b)->desktop_file_id);
1677 }
1678
1679 /**
1680 * gmenu_tree_item_ref:
1681 * @item: a #GMenuTreeItem
1682 *
1683 * Returns: (transfer full): The same @item, or %NULL if @item is not a valid #GMenuTreeItem
1684 */
1685 gpointer
1686 gmenu_tree_item_ref (gpointer itemp)
1687 {
1688 GMenuTreeItem *item;
1689
1690 item = (GMenuTreeItem *) itemp;
1691
1692 g_return_val_if_fail (item != NULL, NULL);
1693 g_return_val_if_fail (item->refcount > 0, NULL);
1694
1695 g_atomic_int_inc (&item->refcount);
1696
1697 return item;
1698 }
1699
1700 void
1701 gmenu_tree_item_unref (gpointer itemp)
1702 {
1703 GMenuTreeItem *item;
1704
1705 item = (GMenuTreeItem *) itemp;
1706
1707 g_return_if_fail (item != NULL);
1708 g_return_if_fail (item->refcount > 0);
1709
1710 if (g_atomic_int_dec_and_test (&(item->refcount)))
1711 {
1712 switch (item->type)
1713 {
1714 case GMENU_TREE_ITEM_DIRECTORY:
1715 gmenu_tree_directory_finalize (GMENU_TREE_DIRECTORY (item));
1716 break;
1717
1718 case GMENU_TREE_ITEM_ENTRY:
1719 gmenu_tree_entry_finalize (GMENU_TREE_ENTRY (item));
1720 break;
1721
1722 case GMENU_TREE_ITEM_SEPARATOR:
1723 gmenu_tree_separator_finalize (GMENU_TREE_SEPARATOR (item));
1724 break;
1725
1726 case GMENU_TREE_ITEM_HEADER:
1727 gmenu_tree_header_finalize (GMENU_TREE_HEADER (item));
1728 break;
1729
1730 case GMENU_TREE_ITEM_ALIAS:
1731 gmenu_tree_alias_finalize (GMENU_TREE_ALIAS (item));
1732 break;
1733
1734 default:
1735 g_assert_not_reached ();
1736 break;
1737 }
1738 }
1739 }
1740
1741 static void
1742 gmenu_tree_item_unref_and_unset_parent (gpointer itemp)
1743 {
1744 GMenuTreeItem *item;
1745
1746 item = (GMenuTreeItem *) itemp;
1747
1748 g_return_if_fail (item != NULL);
1749
1750 gmenu_tree_item_set_parent (item, NULL);
1751 gmenu_tree_item_unref (item);
1752 }
1753
1754 static inline const char *
1755 gmenu_tree_item_compare_get_name_helper (GMenuTreeItem *item,
1756 GMenuTreeFlags flags)
1757 {
1758 const char *name;
1759
1760 name = NULL;
1761
1762 switch (item->type)
1763 {
1764 case GMENU_TREE_ITEM_DIRECTORY:
1765 if (GMENU_TREE_DIRECTORY (item)->directory_entry)
1766 name = desktop_entry_get_name (GMENU_TREE_DIRECTORY (item)->directory_entry);
1767 else
1768 name = GMENU_TREE_DIRECTORY (item)->name;
1769 break;
1770
1771 case GMENU_TREE_ITEM_ENTRY:
1772 if (flags & GMENU_TREE_FLAGS_SORT_DISPLAY_NAME)
1773 name = g_app_info_get_display_name (G_APP_INFO (gmenu_tree_entry_get_app_info (GMENU_TREE_ENTRY (item))));
1774 else
1775 name = desktop_entry_get_name (GMENU_TREE_ENTRY (item)->desktop_entry);
1776 break;
1777
1778 case GMENU_TREE_ITEM_ALIAS:
1779 {
1780 GMenuTreeItem *dir;
1781 dir = GMENU_TREE_ITEM (GMENU_TREE_ALIAS (item)->directory);
1782 name = gmenu_tree_item_compare_get_name_helper (dir, flags);
1783 }
1784 break;
1785
1786 case GMENU_TREE_ITEM_SEPARATOR:
1787 case GMENU_TREE_ITEM_HEADER:
1788 default:
1789 g_assert_not_reached ();
1790 break;
1791 }
1792
1793 return name;
1794 }
1795
1796 static int
1797 gmenu_tree_item_compare (GMenuTreeItem *a,
1798 GMenuTreeItem *b,
1799 gpointer flags_p)
1800 {
1801 const char *name_a;
1802 const char *name_b;
1803 GMenuTreeFlags flags;
1804
1805 flags = GPOINTER_TO_INT (flags_p);
1806
1807 name_a = gmenu_tree_item_compare_get_name_helper (a, flags);
1808 name_b = gmenu_tree_item_compare_get_name_helper (b, flags);
1809
1810 return g_utf8_collate (name_a, name_b);
1811 }
1812
1813 static MenuLayoutNode *
1814 find_menu_child (MenuLayoutNode *layout)
1815 {
1816 MenuLayoutNode *child;
1817
1818 child = menu_layout_node_get_children (layout);
1819 while (child && menu_layout_node_get_type (child) != MENU_LAYOUT_NODE_MENU)
1820 child = menu_layout_node_get_next (child);
1821
1822 return child;
1823 }
1824
1825 static void
1826 merge_resolved_children (GMenuTree *tree,
1827 GHashTable *loaded_menu_files,
1828 MenuLayoutNode *where,
1829 MenuLayoutNode *from)
1830 {
1831 MenuLayoutNode *insert_after;
1832 MenuLayoutNode *menu_child;
1833 MenuLayoutNode *from_child;
1834
1835 gmenu_tree_resolve_files (tree, loaded_menu_files, from);
1836
1837 insert_after = where;
1838 g_assert (menu_layout_node_get_type (insert_after) != MENU_LAYOUT_NODE_ROOT);
1839 g_assert (menu_layout_node_get_parent (insert_after) != NULL);
1840
1841 /* skip root node */
1842 menu_child = find_menu_child (from);
1843 g_assert (menu_child != NULL);
1844 g_assert (menu_layout_node_get_type (menu_child) == MENU_LAYOUT_NODE_MENU);
1845
1846 /* merge children of toplevel <Menu> */
1847 from_child = menu_layout_node_get_children (menu_child);
1848 while (from_child != NULL)
1849 {
1850 MenuLayoutNode *next;
1851
1852 next = menu_layout_node_get_next (from_child);
1853
1854 menu_verbose ("Merging ");
1855 menu_debug_print_layout (from_child, FALSE);
1856 menu_verbose (" after ");
1857 menu_debug_print_layout (insert_after, FALSE);
1858
1859 switch (menu_layout_node_get_type (from_child))
1860 {
1861 case MENU_LAYOUT_NODE_NAME:
1862 menu_layout_node_unlink (from_child); /* delete this */
1863 break;
1864
1865 default:
1866 menu_layout_node_steal (from_child);
1867 menu_layout_node_insert_after (insert_after, from_child);
1868 menu_layout_node_unref (from_child);
1869
1870 insert_after = from_child;
1871 break;
1872 }
1873
1874 from_child = next;
1875 }
1876 }
1877
1878 static gboolean
1879 load_merge_file (GMenuTree *tree,
1880 GHashTable *loaded_menu_files,
1881 const char *filename,
1882 gboolean is_canonical,
1883 gboolean add_monitor,
1884 MenuLayoutNode *where)
1885 {
1886 MenuLayoutNode *to_merge;
1887 const char *canonical;
1888 char *freeme;
1889 gboolean retval;
1890
1891 freeme = NULL;
1892 retval = FALSE;
1893
1894 if (!is_canonical)
1895 {
1896 canonical = freeme = menu_canonicalize_file_name (filename, FALSE);
1897 if (canonical == NULL)
1898 {
1899 if (add_monitor)
1900 gmenu_tree_add_menu_file_monitor (tree,
1901 filename,
1902 MENU_FILE_MONITOR_NONEXISTENT_FILE);
1903
1904 menu_verbose ("Failed to canonicalize merge file path \"%s\": %s\n",
1905 filename, g_strerror (errno));
1906 goto out;
1907 }
1908 }
1909 else
1910 {
1911 canonical = filename;
1912 }
1913
1914 if (g_hash_table_lookup (loaded_menu_files, canonical) != NULL)
1915 {
1916 g_warning ("Not loading \"%s\": recursive loop detected in .menu files",
1917 canonical);
1918 retval = TRUE;
1919 goto out;
1920 }
1921
1922 menu_verbose ("Merging file \"%s\"\n", canonical);
1923
1924 to_merge = menu_layout_load (canonical, tree->non_prefixed_basename, NULL);
1925 if (to_merge == NULL)
1926 {
1927 menu_verbose ("No menu for file \"%s\" found when merging\n",
1928 canonical);
1929 goto out;
1930 }
1931
1932 retval = TRUE;
1933
1934 g_hash_table_insert (loaded_menu_files, (char *) canonical, GUINT_TO_POINTER (TRUE));
1935
1936 if (add_monitor)
1937 gmenu_tree_add_menu_file_monitor (tree,
1938 canonical,
1939 MENU_FILE_MONITOR_FILE);
1940
1941 merge_resolved_children (tree, loaded_menu_files, where, to_merge);
1942
1943 g_hash_table_remove (loaded_menu_files, canonical);
1944
1945 menu_layout_node_unref (to_merge);
1946
1947 out:
1948 if (freeme)
1949 g_free (freeme);
1950
1951 return retval;
1952 }
1953
1954 static gboolean
1955 load_merge_file_with_config_dir (GMenuTree *tree,
1956 GHashTable *loaded_menu_files,
1957 const char *menu_file,
1958 const char *config_dir,
1959 MenuLayoutNode *where)
1960 {
1961 char *merge_file;
1962 gboolean loaded;
1963
1964 loaded = FALSE;
1965
1966 merge_file = g_build_filename (config_dir, "menus", menu_file, NULL);
1967
1968 if (load_merge_file (tree, loaded_menu_files, merge_file, FALSE, TRUE, where))
1969 loaded = TRUE;
1970
1971 g_free (merge_file);
1972
1973 return loaded;
1974 }
1975
1976 static gboolean
1977 compare_basedir_to_config_dir (const char *canonical_basedir,
1978 const char *config_dir)
1979 {
1980 char *dirname;
1981 char *canonical_menus_dir;
1982 gboolean retval;
1983
1984 menu_verbose ("Checking to see if basedir '%s' is in '%s'\n",
1985 canonical_basedir, config_dir);
1986
1987 dirname = g_build_filename (config_dir, "menus", NULL);
1988
1989 retval = FALSE;
1990
1991 canonical_menus_dir = menu_canonicalize_file_name (dirname, FALSE);
1992 if (canonical_menus_dir != NULL &&
1993 strcmp (canonical_basedir, canonical_menus_dir) == 0)
1994 {
1995 retval = TRUE;
1996 }
1997
1998 g_free (canonical_menus_dir);
1999 g_free (dirname);
2000
2001 return retval;
2002 }
2003
2004 static gboolean
2005 load_parent_merge_file_from_basename (GMenuTree *tree,
2006 GHashTable *loaded_menu_files,
2007 MenuLayoutNode *layout,
2008 const char *menu_file,
2009 const char *canonical_basedir)
2010 {
2011 gboolean found_basedir;
2012 const char * const *system_config_dirs;
2013 int i;
2014
2015 /* We're not interested in menu files that are in directories which are not a
2016 * parent of the base directory of this menu file */
2017 found_basedir = compare_basedir_to_config_dir (canonical_basedir,
2018 g_get_user_config_dir ());
2019
2020 system_config_dirs = g_get_system_config_dirs ();
2021
2022 i = 0;
2023 while (system_config_dirs[i] != NULL)
2024 {
2025 if (!found_basedir)
2026 {
2027 found_basedir = compare_basedir_to_config_dir (canonical_basedir,
2028 system_config_dirs[i]);
2029 }
2030 else
2031 {
2032 menu_verbose ("Looking for parent menu file '%s' in '%s'\n",
2033 menu_file, system_config_dirs[i]);
2034
2035 if (load_merge_file_with_config_dir (tree,
2036 loaded_menu_files,
2037 menu_file,
2038 system_config_dirs[i],
2039 layout))
2040 {
2041 break;
2042 }
2043 }
2044
2045 ++i;
2046 }
2047
2048 return system_config_dirs[i] != NULL;
2049 }
2050
2051 static gboolean
2052 load_parent_merge_file (GMenuTree *tree,
2053 GHashTable *loaded_menu_files,
2054 MenuLayoutNode *layout)
2055 {
2056 MenuLayoutNode *root;
2057 const char *basedir;
2058 const char *menu_name;
2059 char *canonical_basedir;
2060 char *menu_file;
2061 gboolean found;
2062
2063 root = menu_layout_node_get_root (layout);
2064
2065 basedir = menu_layout_node_root_get_basedir (root);
2066 menu_name = menu_layout_node_root_get_name (root);
2067
2068 canonical_basedir = menu_canonicalize_file_name (basedir, FALSE);
2069 if (canonical_basedir == NULL)
2070 {
2071 menu_verbose ("Menu basedir '%s' no longer exists, not merging parent\n",
2072 basedir);
2073 return FALSE;
2074 }
2075
2076 found = FALSE;
2077 menu_file = g_strconcat (menu_name, ".menu", NULL);
2078
2079 if (strcmp (menu_file, "applications.menu") == 0 &&
2080 g_getenv ("XDG_MENU_PREFIX"))
2081 {
2082 char *prefixed_basename;
2083 prefixed_basename = g_strdup_printf ("%s%s",
2084 g_getenv ("XDG_MENU_PREFIX"),
2085 menu_file);
2086 found = load_parent_merge_file_from_basename (tree, loaded_menu_files,
2087 layout, prefixed_basename,
2088 canonical_basedir);
2089 g_free (prefixed_basename);
2090 }
2091
2092 if (!found)
2093 {
2094 found = load_parent_merge_file_from_basename (tree, loaded_menu_files,
2095 layout, menu_file,
2096 canonical_basedir);
2097 }
2098
2099 g_free (menu_file);
2100 g_free (canonical_basedir);
2101
2102 return found;
2103 }
2104
2105 static void
2106 load_merge_dir (GMenuTree *tree,
2107 GHashTable *loaded_menu_files,
2108 const char *dirname,
2109 MenuLayoutNode *where)
2110 {
2111 GDir *dir;
2112 const char *menu_file;
2113
2114 menu_verbose ("Loading merge dir \"%s\"\n", dirname);
2115
2116 gmenu_tree_add_menu_file_monitor (tree,
2117 dirname,
2118 MENU_FILE_MONITOR_DIRECTORY);
2119
2120 if ((dir = g_dir_open (dirname, 0, NULL)) == NULL)
2121 return;
2122
2123 while ((menu_file = g_dir_read_name (dir)))
2124 {
2125 if (g_str_has_suffix (menu_file, ".menu"))
2126 {
2127 char *full_path;
2128
2129 full_path = g_build_filename (dirname, menu_file, NULL);
2130
2131 load_merge_file (tree, loaded_menu_files, full_path, TRUE, FALSE, where);
2132
2133 g_free (full_path);
2134 }
2135 }
2136
2137 g_dir_close (dir);
2138 }
2139
2140 static void
2141 load_merge_dir_with_config_dir (GMenuTree *tree,
2142 GHashTable *loaded_menu_files,
2143 const char *config_dir,
2144 const char *dirname,
2145 MenuLayoutNode *where)
2146 {
2147 char *path;
2148
2149 path = g_build_filename (config_dir, "menus", dirname, NULL);
2150
2151 load_merge_dir (tree, loaded_menu_files, path, where);
2152
2153 g_free (path);
2154 }
2155
2156 static void
2157 resolve_merge_file (GMenuTree *tree,
2158 GHashTable *loaded_menu_files,
2159 MenuLayoutNode *layout)
2160 {
2161 char *filename;
2162
2163 if (menu_layout_node_merge_file_get_type (layout) == MENU_MERGE_FILE_TYPE_PARENT)
2164 {
2165 if (load_parent_merge_file (tree, loaded_menu_files, layout))
2166 return;
2167 }
2168
2169 filename = menu_layout_node_get_content_as_path (layout);
2170 if (filename == NULL)
2171 {
2172 menu_verbose ("didn't get node content as a path, not merging file\n");
2173 }
2174 else
2175 {
2176 load_merge_file (tree, loaded_menu_files, filename, FALSE, TRUE, layout);
2177
2178 g_free (filename);
2179 }
2180
2181 /* remove the now-replaced node */
2182 menu_layout_node_unlink (layout);
2183 }
2184
2185 static void
2186 resolve_merge_dir (GMenuTree *tree,
2187 GHashTable *loaded_menu_files,
2188 MenuLayoutNode *layout)
2189 {
2190 char *path;
2191
2192 path = menu_layout_node_get_content_as_path (layout);
2193 if (path == NULL)
2194 {
2195 menu_verbose ("didn't get layout node content as a path, not merging dir\n");
2196 }
2197 else
2198 {
2199 load_merge_dir (tree, loaded_menu_files, path, layout);
2200
2201 g_free (path);
2202 }
2203
2204 /* remove the now-replaced node */
2205 menu_layout_node_unlink (layout);
2206 }
2207
2208 static MenuLayoutNode *
2209 add_app_dir (GMenuTree *tree,
2210 MenuLayoutNode *before,
2211 const char *data_dir)
2212 {
2213 MenuLayoutNode *tmp;
2214 char *dirname;
2215
2216 tmp = menu_layout_node_new (MENU_LAYOUT_NODE_APP_DIR);
2217 dirname = g_build_filename (data_dir, "applications", NULL);
2218 menu_layout_node_set_content (tmp, dirname);
2219 menu_layout_node_insert_before (before, tmp);
2220 menu_layout_node_unref (before);
2221
2222 menu_verbose ("Adding <AppDir>%s</AppDir> in <DefaultAppDirs/>\n",
2223 dirname);
2224
2225 g_free (dirname);
2226
2227 return tmp;
2228 }
2229
2230 static void
2231 resolve_default_app_dirs (GMenuTree *tree,
2232 MenuLayoutNode *layout)
2233 {
2234 MenuLayoutNode *before;
2235 const char * const *system_data_dirs;
2236 int i;
2237
2238 system_data_dirs = g_get_system_data_dirs ();
2239
2240 before = add_app_dir (tree,
2241 menu_layout_node_ref (layout),
2242 g_get_user_data_dir ());
2243
2244 i = 0;
2245 while (system_data_dirs[i] != NULL)
2246 {
2247 before = add_app_dir (tree, before, system_data_dirs[i]);
2248
2249 ++i;
2250 }
2251
2252 menu_layout_node_unref (before);
2253
2254 /* remove the now-replaced node */
2255 menu_layout_node_unlink (layout);
2256 }
2257
2258 static MenuLayoutNode *
2259 add_directory_dir (GMenuTree *tree,
2260 MenuLayoutNode *before,
2261 const char *data_dir)
2262 {
2263 MenuLayoutNode *tmp;
2264 char *dirname;
2265
2266 tmp = menu_layout_node_new (MENU_LAYOUT_NODE_DIRECTORY_DIR);
2267 dirname = g_build_filename (data_dir, "desktop-directories", NULL);
2268 menu_layout_node_set_content (tmp, dirname);
2269 menu_layout_node_insert_before (before, tmp);
2270 menu_layout_node_unref (before);
2271
2272 menu_verbose ("Adding <DirectoryDir>%s</DirectoryDir> in <DefaultDirectoryDirs/>\n",
2273 dirname);
2274
2275 g_free (dirname);
2276
2277 return tmp;
2278 }
2279
2280 static void
2281 resolve_default_directory_dirs (GMenuTree *tree,
2282 MenuLayoutNode *layout)
2283 {
2284 MenuLayoutNode *before;
2285 const char * const *system_data_dirs;
2286 int i;
2287
2288 system_data_dirs = g_get_system_data_dirs ();
2289
2290 before = add_directory_dir (tree,
2291 menu_layout_node_ref (layout),
2292 g_get_user_data_dir ());
2293
2294 i = 0;
2295 while (system_data_dirs[i] != NULL)
2296 {
2297 before = add_directory_dir (tree, before, system_data_dirs[i]);
2298
2299 ++i;
2300 }
2301
2302 menu_layout_node_unref (before);
2303
2304 /* remove the now-replaced node */
2305 menu_layout_node_unlink (layout);
2306 }
2307
2308 static void
2309 resolve_default_merge_dirs (GMenuTree *tree,
2310 GHashTable *loaded_menu_files,
2311 MenuLayoutNode *layout)
2312 {
2313 MenuLayoutNode *root;
2314 const char *menu_name;
2315 char *merge_name;
2316 const char * const *system_config_dirs;
2317 int i;
2318
2319 root = menu_layout_node_get_root (layout);
2320 menu_name = menu_layout_node_root_get_name (root);
2321
2322 merge_name = g_strconcat (menu_name, "-merged", NULL);
2323
2324 system_config_dirs = g_get_system_config_dirs ();
2325
2326 /* Merge in reverse order */
2327 i = 0;
2328 while (system_config_dirs[i] != NULL) i++;
2329 while (i > 0)
2330 {
2331 i--;
2332 load_merge_dir_with_config_dir (tree,
2333 loaded_menu_files,
2334 system_config_dirs[i],
2335 merge_name,
2336 layout);
2337 }
2338
2339 load_merge_dir_with_config_dir (tree,
2340 loaded_menu_files,
2341 g_get_user_config_dir (),
2342 merge_name,
2343 layout);
2344
2345 g_free (merge_name);
2346
2347 /* remove the now-replaced node */
2348 menu_layout_node_unlink (layout);
2349 }
2350
2351 static void
2352 add_filename_include (const char *desktop_file_id,
2353 DesktopEntry *entry,
2354 MenuLayoutNode *include)
2355 {
2356 if (!desktop_entry_has_categories (entry))
2357 {
2358 MenuLayoutNode *node;
2359
2360 node = menu_layout_node_new (MENU_LAYOUT_NODE_FILENAME);
2361 menu_layout_node_set_content (node, desktop_file_id);
2362
2363 menu_layout_node_append_child (include, node);
2364 menu_layout_node_unref (node);
2365 }
2366 }
2367
2368 static void
2369 is_dot_directory (const char *basename,
2370 DesktopEntry *entry,
2371 gboolean *has_dot_directory)
2372 {
2373 if (!strcmp (basename, ".directory"))
2374 *has_dot_directory = TRUE;
2375 }
2376
2377 static gboolean
2378 add_menu_for_legacy_dir (MenuLayoutNode *parent,
2379 const char *legacy_dir,
2380 const char *relative_path,
2381 const char *legacy_prefix,
2382 const char *menu_name)
2383 {
2384 EntryDirectory *ed;
2385 DesktopEntrySet *desktop_entries;
2386 DesktopEntrySet *directory_entries;
2387 GSList *subdirs;
2388 gboolean menu_added;
2389 gboolean has_dot_directory;
2390
2391 ed = entry_directory_new_legacy (DESKTOP_ENTRY_INVALID, legacy_dir, legacy_prefix);
2392 if (!ed)
2393 return FALSE;
2394
2395 subdirs = NULL;
2396 desktop_entries = desktop_entry_set_new ();
2397 directory_entries = desktop_entry_set_new ();
2398
2399 entry_directory_get_flat_contents (ed,
2400 desktop_entries,
2401 directory_entries,
2402 &subdirs);
2403 entry_directory_unref (ed);
2404
2405 has_dot_directory = FALSE;
2406 desktop_entry_set_foreach (directory_entries,
2407 (DesktopEntrySetForeachFunc) is_dot_directory,
2408 &has_dot_directory);
2409 desktop_entry_set_unref (directory_entries);
2410
2411 menu_added = FALSE;
2412 if (desktop_entry_set_get_count (desktop_entries) > 0 || subdirs)
2413 {
2414 MenuLayoutNode *menu;
2415 MenuLayoutNode *node;
2416 GString *subdir_path;
2417 GString *subdir_relative;
2418 GSList *tmp;
2419 int legacy_dir_len;
2420 int relative_path_len;
2421
2422 menu = menu_layout_node_new (MENU_LAYOUT_NODE_MENU);
2423 menu_layout_node_append_child (parent, menu);
2424
2425 menu_added = TRUE;
2426
2427 g_assert (menu_name != NULL);
2428
2429 node = menu_layout_node_new (MENU_LAYOUT_NODE_NAME);
2430 menu_layout_node_set_content (node, menu_name);
2431 menu_layout_node_append_child (menu, node);
2432 menu_layout_node_unref (node);
2433
2434 if (has_dot_directory)
2435 {
2436 node = menu_layout_node_new (MENU_LAYOUT_NODE_DIRECTORY);
2437 if (relative_path != NULL)
2438 {
2439 char *directory_entry_path;
2440
2441 directory_entry_path = g_strdup_printf ("%s/.directory", relative_path);
2442 menu_layout_node_set_content (node, directory_entry_path);
2443 g_free (directory_entry_path);
2444 }
2445 else
2446 {
2447 menu_layout_node_set_content (node, ".directory");
2448 }
2449 menu_layout_node_append_child (menu, node);
2450 menu_layout_node_unref (node);
2451 }
2452
2453 if (desktop_entry_set_get_count (desktop_entries) > 0)
2454 {
2455 MenuLayoutNode *include;
2456
2457 include = menu_layout_node_new (MENU_LAYOUT_NODE_INCLUDE);
2458 menu_layout_node_append_child (menu, include);
2459
2460 desktop_entry_set_foreach (desktop_entries,
2461 (DesktopEntrySetForeachFunc) add_filename_include,
2462 include);
2463
2464 menu_layout_node_unref (include);
2465 }
2466
2467 subdir_path = g_string_new (legacy_dir);
2468 legacy_dir_len = strlen (legacy_dir);
2469
2470 subdir_relative = g_string_new (relative_path);
2471 relative_path_len = relative_path ? strlen (relative_path) : 0;
2472
2473 tmp = subdirs;
2474 while (tmp != NULL)
2475 {
2476 const char *subdir = tmp->data;
2477
2478 g_string_append_c (subdir_path, G_DIR_SEPARATOR);
2479 g_string_append (subdir_path, subdir);
2480
2481 if (relative_path_len)
2482 {
2483 g_string_append_c (subdir_relative, G_DIR_SEPARATOR);
2484 }
2485 g_string_append (subdir_relative, subdir);
2486
2487 add_menu_for_legacy_dir (menu,
2488 subdir_path->str,
2489 subdir_relative->str,
2490 legacy_prefix,
2491 subdir);
2492
2493 g_string_truncate (subdir_relative, relative_path_len);
2494 g_string_truncate (subdir_path, legacy_dir_len);
2495
2496 tmp = tmp->next;
2497 }
2498
2499 g_string_free (subdir_path, TRUE);
2500 g_string_free (subdir_relative, TRUE);
2501
2502 menu_layout_node_unref (menu);
2503 }
2504
2505 desktop_entry_set_unref (desktop_entries);
2506
2507 g_slist_foreach (subdirs, (GFunc) g_free, NULL);
2508 g_slist_free (subdirs);
2509
2510 return menu_added;
2511 }
2512
2513 static void
2514 resolve_legacy_dir (GMenuTree *tree,
2515 GHashTable *loaded_menu_files,
2516 MenuLayoutNode *legacy)
2517 {
2518 MenuLayoutNode *to_merge;
2519 MenuLayoutNode *menu;
2520
2521 to_merge = menu_layout_node_new (MENU_LAYOUT_NODE_ROOT);
2522
2523 menu = menu_layout_node_get_parent (legacy);
2524 g_assert (menu_layout_node_get_type (menu) == MENU_LAYOUT_NODE_MENU);
2525
2526 if (add_menu_for_legacy_dir (to_merge,
2527 menu_layout_node_get_content (legacy),
2528 NULL,
2529 menu_layout_node_legacy_dir_get_prefix (legacy),
2530 menu_layout_node_menu_get_name (menu)))
2531 {
2532 merge_resolved_children (tree, loaded_menu_files, legacy, to_merge);
2533 }
2534
2535 menu_layout_node_unref (to_merge);
2536 }
2537
2538 static MenuLayoutNode *
2539 add_legacy_dir (GMenuTree *tree,
2540 GHashTable *loaded_menu_files,
2541 MenuLayoutNode *before,
2542 const char *data_dir)
2543 {
2544 MenuLayoutNode *legacy;
2545 char *dirname;
2546
2547 dirname = g_build_filename (data_dir, "applnk", NULL);
2548
2549 legacy = menu_layout_node_new (MENU_LAYOUT_NODE_LEGACY_DIR);
2550 menu_layout_node_set_content (legacy, dirname);
2551 menu_layout_node_legacy_dir_set_prefix (legacy, "kde");
2552 menu_layout_node_insert_before (before, legacy);
2553 menu_layout_node_unref (before);
2554
2555 menu_verbose ("Adding <LegacyDir>%s</LegacyDir> in <KDELegacyDirs/>\n",
2556 dirname);
2557
2558 resolve_legacy_dir (tree, loaded_menu_files, legacy);
2559
2560 g_free (dirname);
2561
2562 return legacy;
2563 }
2564
2565 static void
2566 resolve_kde_legacy_dirs (GMenuTree *tree,
2567 GHashTable *loaded_menu_files,
2568 MenuLayoutNode *layout)
2569 {
2570 MenuLayoutNode *before;
2571 const char * const *system_data_dirs;
2572 int i;
2573
2574 system_data_dirs = g_get_system_data_dirs ();
2575
2576 before = add_legacy_dir (tree,
2577 loaded_menu_files,
2578 menu_layout_node_ref (layout),
2579 g_get_user_data_dir ());
2580
2581 i = 0;
2582 while (system_data_dirs[i] != NULL)
2583 {
2584 before = add_legacy_dir (tree, loaded_menu_files, before, system_data_dirs[i]);
2585
2586 ++i;
2587 }
2588
2589 menu_layout_node_unref (before);
2590
2591 /* remove the now-replaced node */
2592 menu_layout_node_unlink (layout);
2593 }
2594
2595 static void
2596 gmenu_tree_resolve_files (GMenuTree *tree,
2597 GHashTable *loaded_menu_files,
2598 MenuLayoutNode *layout)
2599 {
2600 MenuLayoutNode *child;
2601
2602 menu_verbose ("Resolving files in: ");
2603 menu_debug_print_layout (layout, TRUE);
2604
2605 switch (menu_layout_node_get_type (layout))
2606 {
2607 case MENU_LAYOUT_NODE_MERGE_FILE:
2608 resolve_merge_file (tree, loaded_menu_files, layout);
2609 break;
2610
2611 case MENU_LAYOUT_NODE_MERGE_DIR:
2612 resolve_merge_dir (tree, loaded_menu_files, layout);
2613 break;
2614
2615 case MENU_LAYOUT_NODE_DEFAULT_APP_DIRS:
2616 resolve_default_app_dirs (tree, layout);
2617 break;
2618
2619 case MENU_LAYOUT_NODE_DEFAULT_DIRECTORY_DIRS:
2620 resolve_default_directory_dirs (tree, layout);
2621 break;
2622
2623 case MENU_LAYOUT_NODE_DEFAULT_MERGE_DIRS:
2624 resolve_default_merge_dirs (tree, loaded_menu_files, layout);
2625 break;
2626
2627 case MENU_LAYOUT_NODE_LEGACY_DIR:
2628 resolve_legacy_dir (tree, loaded_menu_files, layout);
2629 break;
2630
2631 case MENU_LAYOUT_NODE_KDE_LEGACY_DIRS:
2632 resolve_kde_legacy_dirs (tree, loaded_menu_files, layout);
2633 break;
2634
2635 case MENU_LAYOUT_NODE_PASSTHROUGH:
2636 /* Just get rid of these, we don't need the memory usage */
2637 menu_layout_node_unlink (layout);
2638 break;
2639
2640 default:
2641 /* Recurse */
2642 child = menu_layout_node_get_children (layout);
2643 while (child != NULL)
2644 {
2645 MenuLayoutNode *next = menu_layout_node_get_next (child);
2646
2647 gmenu_tree_resolve_files (tree, loaded_menu_files, child);
2648
2649 child = next;
2650 }
2651 break;
2652 }
2653 }
2654
2655 static void
2656 move_children (MenuLayoutNode *from,
2657 MenuLayoutNode *to)
2658 {
2659 MenuLayoutNode *from_child;
2660 MenuLayoutNode *insert_before;
2661
2662 insert_before = menu_layout_node_get_children (to);
2663 from_child = menu_layout_node_get_children (from);
2664
2665 while (from_child != NULL)
2666 {
2667 MenuLayoutNode *next;
2668
2669 next = menu_layout_node_get_next (from_child);
2670
2671 menu_layout_node_steal (from_child);
2672
2673 if (menu_layout_node_get_type (from_child) == MENU_LAYOUT_NODE_NAME)
2674 {
2675 ; /* just drop the Name in the old <Menu> */
2676 }
2677 else if (insert_before)
2678 {
2679 menu_layout_node_insert_before (insert_before, from_child);
2680 g_assert (menu_layout_node_get_next (from_child) == insert_before);
2681 }
2682 else
2683 {
2684 menu_layout_node_append_child (to, from_child);
2685 }
2686
2687 menu_layout_node_unref (from_child);
2688
2689 from_child = next;
2690 }
2691 }
2692
2693 static int
2694 null_safe_strcmp (const char *a,
2695 const char *b)
2696 {
2697 if (a == NULL && b == NULL)
2698 return 0;
2699 else if (a == NULL)
2700 return -1;
2701 else if (b == NULL)
2702 return 1;
2703 else
2704 return strcmp (a, b);
2705 }
2706
2707 static int
2708 node_compare_func (const void *a,
2709 const void *b)
2710 {
2711 MenuLayoutNode *node_a = (MenuLayoutNode*) a;
2712 MenuLayoutNode *node_b = (MenuLayoutNode*) b;
2713 MenuLayoutNodeType t_a = menu_layout_node_get_type (node_a);
2714 MenuLayoutNodeType t_b = menu_layout_node_get_type (node_b);
2715
2716 if (t_a < t_b)
2717 return -1;
2718 else if (t_a > t_b)
2719 return 1;
2720 else
2721 {
2722 const char *c_a = menu_layout_node_get_content (node_a);
2723 const char *c_b = menu_layout_node_get_content (node_b);
2724
2725 return null_safe_strcmp (c_a, c_b);
2726 }
2727 }
2728
2729 static int
2730 node_menu_compare_func (const void *a,
2731 const void *b)
2732 {
2733 MenuLayoutNode *node_a = (MenuLayoutNode*) a;
2734 MenuLayoutNode *node_b = (MenuLayoutNode*) b;
2735 MenuLayoutNode *parent_a = menu_layout_node_get_parent (node_a);
2736 MenuLayoutNode *parent_b = menu_layout_node_get_parent (node_b);
2737
2738 if (parent_a < parent_b)
2739 return -1;
2740 else if (parent_a > parent_b)
2741 return 1;
2742 else
2743 return null_safe_strcmp (menu_layout_node_menu_get_name (node_a),
2744 menu_layout_node_menu_get_name (node_b));
2745 }
2746
2747 static void
2748 gmenu_tree_strip_duplicate_children (GMenuTree *tree,
2749 MenuLayoutNode *layout)
2750 {
2751 MenuLayoutNode *child;
2752 GSList *simple_nodes;
2753 GSList *menu_layout_nodes;
2754 GSList *prev;
2755 GSList *tmp;
2756
2757 /* to strip dups, we find all the child nodes where
2758 * we want to kill dups, sort them,
2759 * then nuke the adjacent nodes that are equal
2760 */
2761
2762 simple_nodes = NULL;
2763 menu_layout_nodes = NULL;
2764
2765 child = menu_layout_node_get_children (layout);
2766 while (child != NULL)
2767 {
2768 switch (menu_layout_node_get_type (child))
2769 {
2770 /* These are dups if their content is the same */
2771 case MENU_LAYOUT_NODE_APP_DIR:
2772 case MENU_LAYOUT_NODE_DIRECTORY_DIR:
2773 case MENU_LAYOUT_NODE_DIRECTORY:
2774 simple_nodes = g_slist_prepend (simple_nodes, child);
2775 break;
2776
2777 /* These have to be merged in a more complicated way,
2778 * and then recursed
2779 */
2780 case MENU_LAYOUT_NODE_MENU:
2781 menu_layout_nodes = g_slist_prepend (menu_layout_nodes, child);
2782 break;
2783
2784 default:
2785 break;
2786 }
2787
2788 child = menu_layout_node_get_next (child);
2789 }
2790
2791 /* Note that the lists are all backward. So we want to keep
2792 * the items that are earlier in the list, because they were
2793 * later in the file
2794 */
2795
2796 /* stable sort the simple nodes */
2797 simple_nodes = g_slist_sort (simple_nodes,
2798 node_compare_func);
2799
2800 prev = NULL;
2801 tmp = simple_nodes;
2802 while (tmp != NULL)
2803 {
2804 GSList *next = tmp->next;
2805
2806 if (prev)
2807 {
2808 MenuLayoutNode *p = prev->data;
2809 MenuLayoutNode *n = tmp->data;
2810
2811 if (node_compare_func (p, n) == 0)
2812 {
2813 /* nuke it! */
2814 menu_layout_node_unlink (n);
2815 simple_nodes = g_slist_delete_link (simple_nodes, tmp);
2816 tmp = prev;
2817 }
2818 }
2819
2820 prev = tmp;
2821 tmp = next;
2822 }
2823
2824 g_slist_free (simple_nodes);
2825 simple_nodes = NULL;
2826
2827 /* stable sort the menu nodes (the sort includes the
2828 * parents of the nodes in the comparison). Remember
2829 * the list is backward.
2830 */
2831 menu_layout_nodes = g_slist_sort (menu_layout_nodes,
2832 node_menu_compare_func);
2833
2834 prev = NULL;
2835 tmp = menu_layout_nodes;
2836 while (tmp != NULL)
2837 {
2838 GSList *next = tmp->next;
2839
2840 if (prev)
2841 {
2842 MenuLayoutNode *p = prev->data;
2843 MenuLayoutNode *n = tmp->data;
2844
2845 if (node_menu_compare_func (p, n) == 0)
2846 {
2847 /* Move children of first menu to the start of second
2848 * menu and nuke the first menu
2849 */
2850 move_children (n, p);
2851 menu_layout_node_unlink (n);
2852 menu_layout_nodes = g_slist_delete_link (menu_layout_nodes, tmp);
2853 tmp = prev;
2854 }
2855 }
2856
2857 prev = tmp;
2858 tmp = next;
2859 }
2860
2861 g_slist_free (menu_layout_nodes);
2862 menu_layout_nodes = NULL;
2863
2864 /* Recursively clean up all children */
2865 child = menu_layout_node_get_children (layout);
2866 while (child != NULL)
2867 {
2868 if (menu_layout_node_get_type (child) == MENU_LAYOUT_NODE_MENU)
2869 gmenu_tree_strip_duplicate_children (tree, child);
2870
2871 child = menu_layout_node_get_next (child);
2872 }
2873 }
2874
2875 static MenuLayoutNode *
2876 find_submenu (MenuLayoutNode *layout,
2877 const char *path,
2878 gboolean create_if_not_found)
2879 {
2880 MenuLayoutNode *child;
2881 const char *slash;
2882 const char *next_path;
2883 char *name;
2884
2885 menu_verbose (" (splitting \"%s\")\n", path);
2886
2887 if (path[0] == '\0' || path[0] == G_DIR_SEPARATOR)
2888 return NULL;
2889
2890 slash = strchr (path, G_DIR_SEPARATOR);
2891 if (slash != NULL)
2892 {
2893 name = g_strndup (path, slash - path);
2894 next_path = slash + 1;
2895 if (*next_path == '\0')
2896 next_path = NULL;
2897 }
2898 else
2899 {
2900 name = g_strdup (path);
2901 next_path = NULL;
2902 }
2903
2904 child = menu_layout_node_get_children (layout);
2905 while (child != NULL)
2906 {
2907 switch (menu_layout_node_get_type (child))
2908 {
2909 case MENU_LAYOUT_NODE_MENU:
2910 {
2911 if (strcmp (name, menu_layout_node_menu_get_name (child)) == 0)
2912 {
2913 menu_verbose ("MenuNode %p found for path component \"%s\"\n",
2914 child, name);
2915
2916 g_free (name);
2917
2918 if (!next_path)
2919 {
2920 menu_verbose (" Found menu node %p parent is %p\n",
2921 child, layout);
2922 return child;
2923 }
2924
2925 return find_submenu (child, next_path, create_if_not_found);
2926 }
2927 }
2928 break;
2929
2930 default:
2931 break;
2932 }
2933
2934 child = menu_layout_node_get_next (child);
2935 }
2936
2937 if (create_if_not_found)
2938 {
2939 MenuLayoutNode *name_node;
2940
2941 child = menu_layout_node_new (MENU_LAYOUT_NODE_MENU);
2942 menu_layout_node_append_child (layout, child);
2943
2944 name_node = menu_layout_node_new (MENU_LAYOUT_NODE_NAME);
2945 menu_layout_node_set_content (name_node, name);
2946 menu_layout_node_append_child (child, name_node);
2947 menu_layout_node_unref (name_node);
2948
2949 menu_verbose (" Created menu node %p parent is %p\n",
2950 child, layout);
2951
2952 menu_layout_node_unref (child);
2953 g_free (name);
2954
2955 if (!next_path)
2956 return child;
2957
2958 return find_submenu (child, next_path, create_if_not_found);
2959 }
2960 else
2961 {
2962 g_free (name);
2963 return NULL;
2964 }
2965 }
2966
2967 /* To call this you first have to strip duplicate children once,
2968 * otherwise when you move a menu Foo to Bar then you may only
2969 * move one of Foo, not all the merged Foo.
2970 */
2971 static void
2972 gmenu_tree_execute_moves (GMenuTree *tree,
2973 MenuLayoutNode *layout,
2974 gboolean *need_remove_dups_p)
2975 {
2976 MenuLayoutNode *child;
2977 gboolean need_remove_dups;
2978 GSList *move_nodes;
2979 GSList *tmp;
2980
2981 need_remove_dups = FALSE;
2982
2983 move_nodes = NULL;
2984
2985 child = menu_layout_node_get_children (layout);
2986 while (child != NULL)
2987 {
2988 switch (menu_layout_node_get_type (child))
2989 {
2990 case MENU_LAYOUT_NODE_MENU:
2991 /* Recurse - we recurse first and process the current node
2992 * second, as the spec dictates.
2993 */
2994 gmenu_tree_execute_moves (tree, child, &need_remove_dups);
2995 break;
2996
2997 case MENU_LAYOUT_NODE_MOVE:
2998 move_nodes = g_slist_prepend (move_nodes, child);
2999 break;
3000
3001 default:
3002 break;
3003 }
3004
3005 child = menu_layout_node_get_next (child);
3006 }
3007
3008 /* We need to execute the move operations in the order that they appear */
3009 move_nodes = g_slist_reverse (move_nodes);
3010
3011 tmp = move_nodes;
3012 while (tmp != NULL)
3013 {
3014 MenuLayoutNode *move_node = tmp->data;
3015 MenuLayoutNode *old_node;
3016 GSList *next = tmp->next;
3017 const char *old;
3018 const char *new;
3019
3020 old = menu_layout_node_move_get_old (move_node);
3021 new = menu_layout_node_move_get_new (move_node);
3022 g_assert (old != NULL && new != NULL);
3023
3024 menu_verbose ("executing <Move> old = \"%s\" new = \"%s\"\n",
3025 old, new);
3026
3027 old_node = find_submenu (layout, old, FALSE);
3028 if (old_node != NULL)
3029 {
3030 MenuLayoutNode *new_node;
3031
3032 /* here we can create duplicates anywhere below the
3033 * node
3034 */
3035 need_remove_dups = TRUE;
3036
3037 /* look up new node creating it and its parents if
3038 * required
3039 */
3040 new_node = find_submenu (layout, new, TRUE);
3041 g_assert (new_node != NULL);
3042
3043 move_children (old_node, new_node);
3044
3045 menu_layout_node_unlink (old_node);
3046 }
3047
3048 menu_layout_node_unlink (move_node);
3049
3050 tmp = next;
3051 }
3052
3053 g_slist_free (move_nodes);
3054
3055 /* This oddness is to ensure we only remove dups once,
3056 * at the root, instead of recursing the tree over
3057 * and over.
3058 */
3059 if (need_remove_dups_p)
3060 *need_remove_dups_p = need_remove_dups;
3061 else if (need_remove_dups)
3062 gmenu_tree_strip_duplicate_children (tree, layout);
3063 }
3064
3065 static gboolean
3066 gmenu_tree_load_layout (GMenuTree *tree,
3067 GError **error)
3068 {
3069 GHashTable *loaded_menu_files;
3070
3071 if (tree->layout)
3072 return TRUE;
3073
3074 if (!gmenu_tree_canonicalize_path (tree, error))
3075 return FALSE;
3076
3077 menu_verbose ("Loading menu layout from \"%s\"\n",
3078 tree->canonical_path);
3079
3080 tree->layout = menu_layout_load (tree->canonical_path,
3081 tree->non_prefixed_basename,
3082 error);
3083 if (!tree->layout)
3084 return FALSE;
3085
3086 loaded_menu_files = g_hash_table_new (g_str_hash, g_str_equal);
3087 g_hash_table_insert (loaded_menu_files, tree->canonical_path, GUINT_TO_POINTER (TRUE));
3088 gmenu_tree_resolve_files (tree, loaded_menu_files, tree->layout);
3089 g_hash_table_destroy (loaded_menu_files);
3090
3091 gmenu_tree_strip_duplicate_children (tree, tree->layout);
3092 gmenu_tree_execute_moves (tree, tree->layout, NULL);
3093
3094 return TRUE;
3095 }
3096
3097 static void
3098 gmenu_tree_force_reload (GMenuTree *tree)
3099 {
3100 gmenu_tree_force_rebuild (tree);
3101
3102 if (tree->layout)
3103 menu_layout_node_unref (tree->layout);
3104 tree->layout = NULL;
3105 }
3106
3107 typedef struct
3108 {
3109 DesktopEntrySet *set;
3110 const char *category;
3111 } GetByCategoryForeachData;
3112
3113 static void
3114 get_by_category_foreach (const char *file_id,
3115 DesktopEntry *entry,
3116 GetByCategoryForeachData *data)
3117 {
3118 if (desktop_entry_has_category (entry, data->category))
3119 desktop_entry_set_add_entry (data->set, entry, file_id);
3120 }
3121
3122 static void
3123 get_by_category (DesktopEntrySet *entry_pool,
3124 DesktopEntrySet *set,
3125 const char *category)
3126 {
3127 GetByCategoryForeachData data;
3128
3129 data.set = set;
3130 data.category = category;
3131
3132 desktop_entry_set_foreach (entry_pool,
3133 (DesktopEntrySetForeachFunc) get_by_category_foreach,
3134 &data);
3135 }
3136
3137 static DesktopEntrySet *
3138 process_include_rules (MenuLayoutNode *layout,
3139 DesktopEntrySet *entry_pool)
3140 {
3141 DesktopEntrySet *set = NULL;
3142
3143 switch (menu_layout_node_get_type (layout))
3144 {
3145 case MENU_LAYOUT_NODE_AND:
3146 {
3147 MenuLayoutNode *child;
3148
3149 menu_verbose ("Processing <And>\n");
3150
3151 child = menu_layout_node_get_children (layout);
3152 while (child != NULL)
3153 {
3154 DesktopEntrySet *child_set;
3155
3156 child_set = process_include_rules (child, entry_pool);
3157
3158 if (set == NULL)
3159 {
3160 set = child_set;
3161 }
3162 else
3163 {
3164 desktop_entry_set_intersection (set, child_set);
3165 desktop_entry_set_unref (child_set);
3166 }
3167
3168 /* as soon as we get empty results, we can bail,
3169 * because it's an AND
3170 */
3171 if (desktop_entry_set_get_count (set) == 0)
3172 break;
3173
3174 child = menu_layout_node_get_next (child);
3175 }
3176 menu_verbose ("Processed <And>\n");
3177 }
3178 break;
3179
3180 case MENU_LAYOUT_NODE_OR:
3181 {
3182 MenuLayoutNode *child;
3183
3184 menu_verbose ("Processing <Or>\n");
3185
3186 child = menu_layout_node_get_children (layout);
3187 while (child != NULL)
3188 {
3189 DesktopEntrySet *child_set;
3190
3191 child_set = process_include_rules (child, entry_pool);
3192
3193 if (set == NULL)
3194 {
3195 set = child_set;
3196 }
3197 else
3198 {
3199 desktop_entry_set_union (set, child_set);
3200 desktop_entry_set_unref (child_set);
3201 }
3202
3203 child = menu_layout_node_get_next (child);
3204 }
3205 menu_verbose ("Processed <Or>\n");
3206 }
3207 break;
3208
3209 case MENU_LAYOUT_NODE_NOT:
3210 {
3211 /* First get the OR of all the rules */
3212 MenuLayoutNode *child;
3213
3214 menu_verbose ("Processing <Not>\n");
3215
3216 child = menu_layout_node_get_children (layout);
3217 while (child != NULL)
3218 {
3219 DesktopEntrySet *child_set;
3220
3221 child_set = process_include_rules (child, entry_pool);
3222
3223 if (set == NULL)
3224 {
3225 set = child_set;
3226 }
3227 else
3228 {
3229 desktop_entry_set_union (set, child_set);
3230 desktop_entry_set_unref (child_set);
3231 }
3232
3233 child = menu_layout_node_get_next (child);
3234 }
3235
3236 if (set != NULL)
3237 {
3238 DesktopEntrySet *inverted;
3239
3240 /* Now invert the result */
3241 inverted = desktop_entry_set_new ();
3242 desktop_entry_set_union (inverted, entry_pool);
3243 desktop_entry_set_subtract (inverted, set);
3244 desktop_entry_set_unref (set);
3245 set = inverted;
3246 }
3247 menu_verbose ("Processed <Not>\n");
3248 }
3249 break;
3250
3251 case MENU_LAYOUT_NODE_ALL:
3252 menu_verbose ("Processing <All>\n");
3253 set = desktop_entry_set_new ();
3254 desktop_entry_set_union (set, entry_pool);
3255 menu_verbose ("Processed <All>\n");
3256 break;
3257
3258 case MENU_LAYOUT_NODE_FILENAME:
3259 {
3260 DesktopEntry *entry;
3261
3262 menu_verbose ("Processing <Filename>%s</Filename>\n",
3263 menu_layout_node_get_content (layout));
3264
3265 entry = desktop_entry_set_lookup (entry_pool,
3266 menu_layout_node_get_content (layout));
3267 if (entry != NULL)
3268 {
3269 set = desktop_entry_set_new ();
3270 desktop_entry_set_add_entry (set,
3271 entry,
3272 menu_layout_node_get_content (layout));
3273 }
3274 menu_verbose ("Processed <Filename>%s</Filename>\n",
3275 menu_layout_node_get_content (layout));
3276 }
3277 break;
3278
3279 case MENU_LAYOUT_NODE_CATEGORY:
3280 menu_verbose ("Processing <Category>%s</Category>\n",
3281 menu_layout_node_get_content (layout));
3282 set = desktop_entry_set_new ();
3283 get_by_category (entry_pool, set, menu_layout_node_get_content (layout));
3284 menu_verbose ("Processed <Category>%s</Category>\n",
3285 menu_layout_node_get_content (layout));
3286 break;
3287
3288 default:
3289 break;
3290 }
3291
3292 if (set == NULL)
3293 set = desktop_entry_set_new (); /* create an empty set */
3294
3295 menu_verbose ("Matched %d entries\n", desktop_entry_set_get_count (set));
3296
3297 return set;
3298 }
3299
3300 static void
3301 collect_layout_info (MenuLayoutNode *layout,
3302 GSList **layout_info)
3303 {
3304 MenuLayoutNode *iter;
3305
3306 g_slist_foreach (*layout_info,
3307 (GFunc) menu_layout_node_unref,
3308 NULL);
3309 g_slist_free (*layout_info);
3310 *layout_info = NULL;
3311
3312 iter = menu_layout_node_get_children (layout);
3313 while (iter != NULL)
3314 {
3315 switch (menu_layout_node_get_type (iter))
3316 {
3317 case MENU_LAYOUT_NODE_MENUNAME:
3318 case MENU_LAYOUT_NODE_FILENAME:
3319 case MENU_LAYOUT_NODE_SEPARATOR:
3320 case MENU_LAYOUT_NODE_MERGE:
3321 *layout_info = g_slist_prepend (*layout_info,
3322 menu_layout_node_ref (iter));
3323 break;
3324
3325 default:
3326 break;
3327 }
3328
3329 iter = menu_layout_node_get_next (iter);
3330 }
3331
3332 *layout_info = g_slist_reverse (*layout_info);
3333 }
3334
3335 static void
3336 entries_listify_foreach (const char *desktop_file_id,
3337 DesktopEntry *desktop_entry,
3338 GMenuTreeDirectory *directory)
3339 {
3340 directory->entries =
3341 g_slist_prepend (directory->entries,
3342 gmenu_tree_entry_new (directory,
3343 desktop_entry,
3344 desktop_file_id,
3345 FALSE,
3346 FALSE));
3347 }
3348
3349 static void
3350 excluded_entries_listify_foreach (const char *desktop_file_id,
3351 DesktopEntry *desktop_entry,
3352 GMenuTreeDirectory *directory)
3353 {
3354 directory->entries =
3355 g_slist_prepend (directory->entries,
3356 gmenu_tree_entry_new (directory,
3357 desktop_entry,
3358 desktop_file_id,
3359 TRUE,
3360 FALSE));
3361 }
3362
3363 static void
3364 unallocated_entries_listify_foreach (const char *desktop_file_id,
3365 DesktopEntry *desktop_entry,
3366 GMenuTreeDirectory *directory)
3367 {
3368 directory->entries =
3369 g_slist_prepend (directory->entries,
3370 gmenu_tree_entry_new (directory,
3371 desktop_entry,
3372 desktop_file_id,
3373 FALSE,
3374 TRUE));
3375 }
3376
3377 static void
3378 set_default_layout_values (GMenuTreeDirectory *parent,
3379 GMenuTreeDirectory *child)
3380 {
3381 GSList *tmp;
3382
3383 /* if the child has a defined default layout, we don't want to override its
3384 * values. The parent might have a non-defined layout info (ie, no child of
3385 * the DefaultLayout node) but it doesn't meant the default layout values
3386 * (ie, DefaultLayout attributes) aren't different from the global defaults.
3387 */
3388 if (child->default_layout_info != NULL ||
3389 child->default_layout_values.mask != MENU_LAYOUT_VALUES_NONE)
3390 return;
3391
3392 child->default_layout_values = parent->default_layout_values;
3393
3394 tmp = child->subdirs;
3395 while (tmp != NULL)
3396 {
3397 GMenuTreeDirectory *subdir = tmp->data;
3398
3399 set_default_layout_values (child, subdir);
3400
3401 tmp = tmp->next;
3402 }
3403 }
3404
3405 static GMenuTreeDirectory *
3406 process_layout (GMenuTree *tree,
3407 GMenuTreeDirectory *parent,
3408 MenuLayoutNode *layout,
3409 DesktopEntrySet *allocated)
3410 {
3411 MenuLayoutNode *layout_iter;
3412 GMenuTreeDirectory *directory;
3413 DesktopEntrySet *entry_pool;
3414 DesktopEntrySet *entries;
3415 DesktopEntrySet *allocated_set;
3416 DesktopEntrySet *excluded_set;
3417 gboolean deleted;
3418 gboolean only_unallocated;
3419 GSList *tmp;
3420
3421 g_assert (menu_layout_node_get_type (layout) == MENU_LAYOUT_NODE_MENU);
3422 g_assert (menu_layout_node_menu_get_name (layout) != NULL);
3423
3424 directory = gmenu_tree_directory_new (tree, parent,
3425 menu_layout_node_menu_get_name (layout));
3426
3427 menu_verbose ("=== Menu name = %s ===\n", directory->name);
3428
3429
3430 deleted = FALSE;
3431 only_unallocated = FALSE;
3432
3433 entries = desktop_entry_set_new ();
3434 allocated_set = desktop_entry_set_new ();
3435
3436 if (tree->flags & GMENU_TREE_FLAGS_INCLUDE_EXCLUDED)
3437 excluded_set = desktop_entry_set_new ();
3438 else
3439 excluded_set = NULL;
3440
3441 entry_pool = _entry_directory_list_get_all_desktops (menu_layout_node_menu_get_app_dirs (layout));
3442
3443 layout_iter = menu_layout_node_get_children (layout);
3444 while (layout_iter != NULL)
3445 {
3446 switch (menu_layout_node_get_type (layout_iter))
3447 {
3448 case MENU_LAYOUT_NODE_MENU:
3449 /* recurse */
3450 {
3451 GMenuTreeDirectory *child_dir;
3452
3453 menu_verbose ("Processing <Menu>\n");
3454
3455 child_dir = process_layout (tree,
3456 directory,
3457 layout_iter,
3458 allocated);
3459 if (child_dir)
3460 directory->subdirs = g_slist_prepend (directory->subdirs,
3461 child_dir);
3462
3463 menu_verbose ("Processed <Menu>\n");
3464 }
3465 break;
3466
3467 case MENU_LAYOUT_NODE_INCLUDE:
3468 {
3469 /* The match rule children of the <Include> are
3470 * independent (logical OR) so we can process each one by
3471 * itself
3472 */
3473 MenuLayoutNode *rule;
3474
3475 menu_verbose ("Processing <Include> (%d entries)\n",
3476 desktop_entry_set_get_count (entries));
3477
3478 rule = menu_layout_node_get_children (layout_iter);
3479 while (rule != NULL)
3480 {
3481 DesktopEntrySet *rule_set;
3482
3483 rule_set = process_include_rules (rule, entry_pool);
3484 if (rule_set != NULL)
3485 {
3486 desktop_entry_set_union (entries, rule_set);
3487 desktop_entry_set_union (allocated_set, rule_set);
3488 if (excluded_set != NULL)
3489 desktop_entry_set_subtract (excluded_set, rule_set);
3490 desktop_entry_set_unref (rule_set);
3491 }
3492
3493 rule = menu_layout_node_get_next (rule);
3494 }
3495
3496 menu_verbose ("Processed <Include> (%d entries)\n",
3497 desktop_entry_set_get_count (entries));
3498 }
3499 break;
3500
3501 case MENU_LAYOUT_NODE_EXCLUDE:
3502 {
3503 /* The match rule children of the <Exclude> are
3504 * independent (logical OR) so we can process each one by
3505 * itself
3506 */
3507 MenuLayoutNode *rule;
3508
3509 menu_verbose ("Processing <Exclude> (%d entries)\n",
3510 desktop_entry_set_get_count (entries));
3511
3512 rule = menu_layout_node_get_children (layout_iter);
3513 while (rule != NULL)
3514 {
3515 DesktopEntrySet *rule_set;
3516
3517 rule_set = process_include_rules (rule, entry_pool);
3518 if (rule_set != NULL)
3519 {
3520 if (excluded_set != NULL)
3521 desktop_entry_set_union (excluded_set, rule_set);
3522 desktop_entry_set_subtract (entries, rule_set);
3523 desktop_entry_set_unref (rule_set);
3524 }
3525
3526 rule = menu_layout_node_get_next (rule);
3527 }
3528
3529 menu_verbose ("Processed <Exclude> (%d entries)\n",
3530 desktop_entry_set_get_count (entries));
3531 }
3532 break;
3533
3534 case MENU_LAYOUT_NODE_DIRECTORY:
3535 {
3536 DesktopEntry *entry;
3537
3538 menu_verbose ("Processing <Directory>%s</Directory>\n",
3539 menu_layout_node_get_content (layout_iter));
3540
3541 /*
3542 * The last <Directory> to exist wins, so we always try overwriting
3543 */
3544 entry = entry_directory_list_get_directory (menu_layout_node_menu_get_directory_dirs (layout),
3545 menu_layout_node_get_content (layout_iter));
3546
3547 if (entry != NULL)
3548 {
3549 if (!desktop_entry_get_hidden (entry))
3550 {
3551 if (directory->directory_entry)
3552 desktop_entry_unref (directory->directory_entry);
3553 directory->directory_entry = entry; /* pass ref ownership */
3554 }
3555 else
3556 {
3557 desktop_entry_unref (entry);
3558 }
3559 }
3560
3561 menu_verbose ("Processed <Directory> new directory entry = %p (%s)\n",
3562 directory->directory_entry,
3563 directory->directory_entry? desktop_entry_get_path (directory->directory_entry) : "null");
3564 }
3565 break;
3566
3567 case MENU_LAYOUT_NODE_DELETED:
3568 menu_verbose ("Processed <Deleted/>\n");
3569 deleted = TRUE;
3570 break;
3571
3572 case MENU_LAYOUT_NODE_NOT_DELETED:
3573 menu_verbose ("Processed <NotDeleted/>\n");
3574 deleted = FALSE;
3575 break;
3576
3577 case MENU_LAYOUT_NODE_ONLY_UNALLOCATED:
3578 menu_verbose ("Processed <OnlyUnallocated/>\n");
3579 only_unallocated = TRUE;
3580 break;
3581
3582 case MENU_LAYOUT_NODE_NOT_ONLY_UNALLOCATED:
3583 menu_verbose ("Processed <NotOnlyUnallocated/>\n");
3584 only_unallocated = FALSE;
3585 break;
3586
3587 case MENU_LAYOUT_NODE_DEFAULT_LAYOUT:
3588 menu_layout_node_default_layout_get_values (layout_iter,
3589 &directory->default_layout_values);
3590 collect_layout_info (layout_iter, &directory->default_layout_info);
3591 menu_verbose ("Processed <DefaultLayout/>\n");
3592 break;
3593
3594 case MENU_LAYOUT_NODE_LAYOUT:
3595 collect_layout_info (layout_iter, &directory->layout_info);
3596 menu_verbose ("Processed <Layout/>\n");
3597 break;
3598
3599 default:
3600 break;
3601 }
3602
3603 layout_iter = menu_layout_node_get_next (layout_iter);
3604 }
3605
3606 desktop_entry_set_unref (entry_pool);
3607
3608 directory->only_unallocated = only_unallocated;
3609
3610 if (!directory->only_unallocated)
3611 desktop_entry_set_union (allocated, allocated_set);
3612
3613 desktop_entry_set_unref (allocated_set);
3614
3615 if (directory->directory_entry)
3616 {
3617 if (desktop_entry_get_no_display (directory->directory_entry))
3618 {
3619 directory->is_nodisplay = TRUE;
3620
3621 if (!(tree->flags & GMENU_TREE_FLAGS_INCLUDE_NODISPLAY))
3622 {
3623 menu_verbose ("Not showing menu %s because NoDisplay=true\n",
3624 desktop_entry_get_name (directory->directory_entry));
3625 deleted = TRUE;
3626 }
3627 }
3628
3629 if (!desktop_entry_get_show_in (directory->directory_entry))
3630 {
3631 menu_verbose ("Not showing menu %s because OnlyShowIn!=$DESKTOP or NotShowIn=$DESKTOP (with $DESKTOP=${XDG_CURRENT_DESKTOP:-GNOME})\n",
3632 desktop_entry_get_name (directory->directory_entry));
3633 deleted = TRUE;
3634 }
3635 }
3636
3637 if (deleted)
3638 {
3639 if (excluded_set != NULL)
3640 desktop_entry_set_unref (excluded_set);
3641 desktop_entry_set_unref (entries);
3642 gmenu_tree_item_unref (directory);
3643 return NULL;
3644 }
3645
3646 desktop_entry_set_foreach (entries,
3647 (DesktopEntrySetForeachFunc) entries_listify_foreach,
3648 directory);
3649 desktop_entry_set_unref (entries);
3650
3651 if (excluded_set != NULL)
3652 {
3653 desktop_entry_set_foreach (excluded_set,
3654 (DesktopEntrySetForeachFunc) excluded_entries_listify_foreach,
3655 directory);
3656 desktop_entry_set_unref (excluded_set);
3657 }
3658
3659 tmp = directory->subdirs;
3660 while (tmp != NULL)
3661 {
3662 GMenuTreeDirectory *subdir = tmp->data;
3663
3664 set_default_layout_values (directory, subdir);
3665
3666 tmp = tmp->next;
3667 }
3668
3669 tmp = directory->entries;
3670 while (tmp != NULL)
3671 {
3672 GMenuTreeEntry *entry = tmp->data;
3673 GSList *next = tmp->next;
3674 gboolean delete = FALSE;
3675
3676 /* If adding a new condition to delete here, it has to be added to
3677 * get_still_unallocated_foreach() too */
3678
3679 if (desktop_entry_get_hidden (entry->desktop_entry))
3680 {
3681 menu_verbose ("Deleting %s because Hidden=true\n",
3682 desktop_entry_get_name (entry->desktop_entry));
3683 delete = TRUE;
3684 }
3685
3686 if (!(tree->flags & GMENU_TREE_FLAGS_INCLUDE_NODISPLAY) &&
3687 desktop_entry_get_no_display (entry->desktop_entry))
3688 {
3689 menu_verbose ("Deleting %s because NoDisplay=true\n",
3690 desktop_entry_get_name (entry->desktop_entry));
3691 delete = TRUE;
3692 }
3693
3694 if (!desktop_entry_get_show_in (entry->desktop_entry))
3695 {
3696 menu_verbose ("Deleting %s because OnlyShowIn!=$DESKTOP or NotShowIn=$DESKTOP (with $DESKTOP=${XDG_CURRENT_DESKTOP:-GNOME})\n",
3697 desktop_entry_get_name (entry->desktop_entry));
3698 delete = TRUE;
3699 }
3700
3701 /* No need to filter out based on TryExec since GDesktopAppInfo cannot
3702 * deal with .desktop files with a failed TryExec. */
3703
3704 if (delete)
3705 {
3706 directory->entries = g_slist_delete_link (directory->entries,
3707 tmp);
3708 gmenu_tree_item_unref_and_unset_parent (entry);
3709 }
3710
3711 tmp = next;
3712 }
3713
3714 g_assert (directory->name != NULL);
3715
3716 return directory;
3717 }
3718
3719 static void
3720 process_only_unallocated (GMenuTree *tree,
3721 GMenuTreeDirectory *directory,
3722 DesktopEntrySet *allocated,
3723 DesktopEntrySet *unallocated_used)
3724 {
3725 GSList *tmp;
3726
3727 /* For any directory marked only_unallocated, we have to remove any
3728 * entries that were in fact allocated.
3729 */
3730
3731 if (directory->only_unallocated)
3732 {
3733 tmp = directory->entries;
3734 while (tmp != NULL)
3735 {
3736 GMenuTreeEntry *entry = tmp->data;
3737 GSList *next = tmp->next;
3738
3739 if (desktop_entry_set_lookup (allocated, entry->desktop_file_id))
3740 {
3741 directory->entries = g_slist_delete_link (directory->entries,
3742 tmp);
3743 gmenu_tree_item_unref_and_unset_parent (entry);
3744 }
3745 else
3746 {
3747 desktop_entry_set_add_entry (unallocated_used, entry->desktop_entry, entry->desktop_file_id);
3748 }
3749
3750 tmp = next;
3751 }
3752 }
3753
3754 tmp = directory->subdirs;
3755 while (tmp != NULL)
3756 {
3757 GMenuTreeDirectory *subdir = tmp->data;
3758
3759 process_only_unallocated (tree, subdir, allocated, unallocated_used);
3760
3761 tmp = tmp->next;
3762 }
3763 }
3764
3765 typedef struct
3766 {
3767 GMenuTree *tree;
3768 DesktopEntrySet *allocated;
3769 DesktopEntrySet *unallocated_used;
3770 DesktopEntrySet *still_unallocated;
3771 } GetStillUnallocatedForeachData;
3772
3773 static void
3774 get_still_unallocated_foreach (const char *file_id,
3775 DesktopEntry *entry,
3776 GetStillUnallocatedForeachData *data)
3777 {
3778 if (desktop_entry_set_lookup (data->allocated, file_id))
3779 return;
3780
3781 if (desktop_entry_set_lookup (data->unallocated_used, file_id))
3782 return;
3783
3784 /* Same rules than at the end of process_layout() */
3785 if (desktop_entry_get_hidden (entry))
3786 return;
3787
3788 if (!(data->tree->flags & GMENU_TREE_FLAGS_INCLUDE_NODISPLAY) &&
3789 desktop_entry_get_no_display (entry))
3790 return;
3791
3792 if (!desktop_entry_get_show_in (entry))
3793 return;
3794
3795 desktop_entry_set_add_entry (data->still_unallocated, entry, file_id);
3796 }
3797
3798 static void preprocess_layout_info (GMenuTree *tree,
3799 GMenuTreeDirectory *directory);
3800
3801 static GSList *
3802 get_layout_info (GMenuTreeDirectory *directory,
3803 gboolean *is_default_layout)
3804 {
3805 GMenuTreeDirectory *iter;
3806
3807 if (directory->layout_info != NULL)
3808 {
3809 if (is_default_layout)
3810 {
3811 *is_default_layout = FALSE;
3812 }
3813 return directory->layout_info;
3814 }
3815
3816 /* Even if there's no layout information at all, the result will be an
3817 * implicit default layout */
3818 if (is_default_layout)
3819 {
3820 *is_default_layout = TRUE;
3821 }
3822
3823 iter = directory;
3824 while (iter != NULL)
3825 {
3826 /* FIXME: this is broken: we might skip real parent in the
3827 * XML structure, that are hidden because of inlining. */
3828 if (iter->default_layout_info != NULL)
3829 {
3830 return iter->default_layout_info;
3831 }
3832
3833 iter = GMENU_TREE_ITEM (iter)->parent;
3834 }
3835
3836 return NULL;
3837 }
3838
3839 static void
3840 get_values_with_defaults (MenuLayoutNode *node,
3841 MenuLayoutValues *layout_values,
3842 MenuLayoutValues *default_layout_values)
3843 {
3844 menu_layout_node_menuname_get_values (node, layout_values);
3845
3846 if (!(layout_values->mask & MENU_LAYOUT_VALUES_SHOW_EMPTY))
3847 layout_values->show_empty = default_layout_values->show_empty;
3848
3849 if (!(layout_values->mask & MENU_LAYOUT_VALUES_INLINE_MENUS))
3850 layout_values->inline_menus = default_layout_values->inline_menus;
3851
3852 if (!(layout_values->mask & MENU_LAYOUT_VALUES_INLINE_LIMIT))
3853 layout_values->inline_limit = default_layout_values->inline_limit;
3854
3855 if (!(layout_values->mask & MENU_LAYOUT_VALUES_INLINE_HEADER))
3856 layout_values->inline_header = default_layout_values->inline_header;
3857
3858 if (!(layout_values->mask & MENU_LAYOUT_VALUES_INLINE_ALIAS))
3859 layout_values->inline_alias = default_layout_values->inline_alias;
3860 }
3861
3862 static guint
3863 get_real_subdirs_len (GMenuTreeDirectory *directory)
3864 {
3865 guint len;
3866 GSList *tmp;
3867
3868 len = 0;
3869
3870 tmp = directory->subdirs;
3871 while (tmp != NULL)
3872 {
3873 GMenuTreeDirectory *subdir = tmp->data;
3874
3875 tmp = tmp->next;
3876
3877 if (subdir->will_inline_header != G_MAXUINT16)
3878 {
3879 len += get_real_subdirs_len (subdir) + g_slist_length (subdir->entries) + 1;
3880 }
3881 else
3882 len += 1;
3883 }
3884
3885 return len;
3886 }
3887
3888 static void
3889 preprocess_layout_info_subdir_helper (GMenuTree *tree,
3890 GMenuTreeDirectory *directory,
3891 GMenuTreeDirectory *subdir,
3892 MenuLayoutValues *layout_values,
3893 gboolean *contents_added,
3894 gboolean *should_remove)
3895 {
3896 preprocess_layout_info (tree, subdir);
3897
3898 *should_remove = FALSE;
3899 *contents_added = FALSE;
3900
3901 if (subdir->subdirs == NULL && subdir->entries == NULL)
3902 {
3903 if (!(tree->flags & GMENU_TREE_FLAGS_SHOW_EMPTY) &&
3904 !layout_values->show_empty)
3905 {
3906 menu_verbose ("Not showing empty menu '%s'\n", subdir->name);
3907 *should_remove = TRUE;
3908 }
3909 }
3910
3911 else if (layout_values->inline_menus)
3912 {
3913 guint real_subdirs_len;
3914
3915 real_subdirs_len = get_real_subdirs_len (subdir);
3916
3917 if (layout_values->inline_alias &&
3918 real_subdirs_len + g_slist_length (subdir->entries) == 1)
3919 {
3920 GMenuTreeAlias *alias;
3921 GMenuTreeItem *item;
3922 GSList *list;
3923
3924 if (subdir->subdirs != NULL)
3925 list = subdir->subdirs;
3926 else
3927 list = subdir->entries;
3928
3929 item = GMENU_TREE_ITEM (list->data);
3930
3931 menu_verbose ("Inline aliasing '%s' to '%s'\n",
3932 item->type == GMENU_TREE_ITEM_ENTRY ?
3933 g_app_info_get_name (G_APP_INFO (gmenu_tree_entry_get_app_info (GMENU_TREE_ENTRY (item)))) :
3934 (item->type == GMENU_TREE_ITEM_DIRECTORY ?
3935 gmenu_tree_directory_get_name (GMENU_TREE_DIRECTORY (item)) :
3936 gmenu_tree_directory_get_name (GMENU_TREE_ALIAS (item)->directory)),
3937 subdir->name);
3938
3939 alias = gmenu_tree_alias_new (directory, subdir, item);
3940
3941 g_slist_foreach (list,
3942 (GFunc) gmenu_tree_item_unref_and_unset_parent,
3943 NULL);
3944 g_slist_free (list);
3945 subdir->subdirs = NULL;
3946 subdir->entries = NULL;
3947
3948 if (item->type == GMENU_TREE_ITEM_DIRECTORY)
3949 directory->subdirs = g_slist_append (directory->subdirs, alias);
3950 else
3951 directory->entries = g_slist_append (directory->entries, alias);
3952
3953 *contents_added = TRUE;
3954 *should_remove = TRUE;
3955 }
3956
3957 else if (layout_values->inline_limit == 0 ||
3958 layout_values->inline_limit >= real_subdirs_len + g_slist_length (subdir->entries))
3959 {
3960 if (layout_values->inline_header)
3961 {
3962 menu_verbose ("Creating inline header with name '%s'\n", subdir->name);
3963 /* we're limited to 16-bits to spare some memory; if the limit is
3964 * higher than that (would be crazy), we just consider it's
3965 * unlimited */
3966 if (layout_values->inline_limit < G_MAXUINT16)
3967 subdir->will_inline_header = layout_values->inline_limit;
3968 else
3969 subdir->will_inline_header = 0;
3970 }
3971 else
3972 {
3973 g_slist_foreach (subdir->subdirs,
3974 (GFunc) gmenu_tree_item_set_parent,
3975 directory);
3976 directory->subdirs = g_slist_concat (directory->subdirs,
3977 subdir->subdirs);
3978 subdir->subdirs = NULL;
3979
3980 g_slist_foreach (subdir->entries,
3981 (GFunc) gmenu_tree_item_set_parent,
3982 directory);
3983 directory->entries = g_slist_concat (directory->entries,
3984 subdir->entries);
3985 subdir->entries = NULL;
3986
3987 *contents_added = TRUE;
3988 *should_remove = TRUE;
3989 }
3990
3991 menu_verbose ("Inlining directory contents of '%s' to '%s'\n",
3992 subdir->name, directory->name);
3993 }
3994 }
3995 }
3996
3997 static void
3998 preprocess_layout_info (GMenuTree *tree,
3999 GMenuTreeDirectory *directory)
4000 {
4001 GSList *tmp;
4002 GSList *layout_info;
4003 gboolean using_default_layout;
4004 GSList *last_subdir;
4005 gboolean strip_duplicates;
4006 gboolean contents_added;
4007 gboolean should_remove;
4008 GSList *subdirs_sentinel;
4009
4010 /* Note: we need to preprocess all menus, even if the layout mask for a menu
4011 * is MENU_LAYOUT_VALUES_NONE: in this case, we need to remove empty menus;
4012 * and the layout mask can be different for a submenu anyway */
4013
4014 menu_verbose ("Processing menu layout inline hints for %s\n", directory->name);
4015 g_assert (!directory->preprocessed);
4016
4017 strip_duplicates = FALSE;
4018 /* we use last_subdir to track the last non-inlined subdirectory */
4019 last_subdir = g_slist_last (directory->subdirs);
4020
4021 /*
4022 * First process subdirectories with explicit layout
4023 */
4024 layout_info = get_layout_info (directory, &using_default_layout);
4025 tmp = layout_info;
4026 /* see comment below about Menuname to understand why we leave the loop if
4027 * last_subdir is NULL */
4028 while (tmp != NULL && last_subdir != NULL)
4029 {
4030 MenuLayoutNode *node = tmp->data;
4031 MenuLayoutValues layout_values;
4032 const char *name;
4033 GMenuTreeDirectory *subdir;
4034 GSList *subdir_l;
4035
4036 tmp = tmp->next;
4037
4038 /* only Menuname nodes are relevant here */
4039 if (menu_layout_node_get_type (node) != MENU_LAYOUT_NODE_MENUNAME)
4040 continue;
4041
4042 get_values_with_defaults (node,
4043 &layout_values,
4044 &directory->default_layout_values);
4045
4046 /* find the subdirectory that is affected by those attributes */
4047 name = menu_layout_node_get_content (node);
4048 subdir = NULL;
4049 subdir_l = directory->subdirs;
4050 while (subdir_l != NULL)
4051 {
4052 subdir = subdir_l->data;
4053
4054 if (!strcmp (subdir->name, name))
4055 break;
4056
4057 subdir = NULL;
4058 subdir_l = subdir_l->next;
4059
4060 /* We do not want to use Menuname on a menu that appeared via
4061 * inlining: without inlining, the Menuname wouldn't have matched
4062 * anything, and we want to keep the same behavior.
4063 * Unless the layout is a default layout, in which case the Menuname
4064 * does match the subdirectory. */
4065 if (!using_default_layout && subdir_l == last_subdir)
4066 {
4067 subdir_l = NULL;
4068 break;
4069 }
4070 }
4071
4072 if (subdir == NULL)
4073 continue;
4074
4075 preprocess_layout_info_subdir_helper (tree, directory,
4076 subdir, &layout_values,
4077 &contents_added, &should_remove);
4078 strip_duplicates = strip_duplicates || contents_added;
4079 if (should_remove)
4080 {
4081 if (last_subdir == subdir_l)
4082 {
4083 /* we need to recompute last_subdir since we'll remove it from
4084 * the list */
4085 GSList *buf;
4086
4087 if (subdir_l == directory->subdirs)
4088 last_subdir = NULL;
4089 else
4090 {
4091 buf = directory->subdirs;
4092 while (buf != NULL && buf->next != subdir_l)
4093 buf = buf->next;
4094 last_subdir = buf;
4095 }
4096 }
4097
4098 directory->subdirs = g_slist_remove (directory->subdirs, subdir);
4099 gmenu_tree_item_unref_and_unset_parent (GMENU_TREE_ITEM (subdir));
4100 }
4101 }
4102
4103 /*
4104 * Now process the subdirectories with no explicit layout
4105 */
4106 /* this is bogus data, but we just need the pointer anyway */
4107 subdirs_sentinel = g_slist_prepend (directory->subdirs, PACKAGE);
4108 directory->subdirs = subdirs_sentinel;
4109
4110 tmp = directory->subdirs;
4111 while (tmp->next != NULL)
4112 {
4113 GMenuTreeDirectory *subdir = tmp->next->data;
4114
4115 if (subdir->preprocessed)
4116 {
4117 tmp = tmp->next;
4118 continue;
4119 }
4120
4121 preprocess_layout_info_subdir_helper (tree, directory,
4122 subdir, &directory->default_layout_values,
4123 &contents_added, &should_remove);
4124 strip_duplicates = strip_duplicates || contents_added;
4125 if (should_remove)
4126 {
4127 tmp = g_slist_delete_link (tmp, tmp->next);
4128 gmenu_tree_item_unref_and_unset_parent (GMENU_TREE_ITEM (subdir));
4129 }
4130 else
4131 tmp = tmp->next;
4132 }
4133
4134 /* remove the sentinel */
4135 directory->subdirs = g_slist_delete_link (directory->subdirs,
4136 directory->subdirs);
4137
4138 /*
4139 * Finally, remove duplicates if needed
4140 */
4141 if (strip_duplicates)
4142 {
4143 /* strip duplicate entries; there should be no duplicate directories */
4144 directory->entries = g_slist_sort (directory->entries,
4145 (GCompareFunc) gmenu_tree_entry_compare_by_id);
4146 tmp = directory->entries;
4147 while (tmp != NULL && tmp->next != NULL)
4148 {
4149 GMenuTreeItem *a = tmp->data;
4150 GMenuTreeItem *b = tmp->next->data;
4151
4152 if (a->type == GMENU_TREE_ITEM_ALIAS)
4153 a = GMENU_TREE_ALIAS (a)->aliased_item;
4154
4155 if (b->type == GMENU_TREE_ITEM_ALIAS)
4156 b = GMENU_TREE_ALIAS (b)->aliased_item;
4157
4158 if (strcmp (GMENU_TREE_ENTRY (a)->desktop_file_id,
4159 GMENU_TREE_ENTRY (b)->desktop_file_id) == 0)
4160 {
4161 tmp = g_slist_delete_link (tmp, tmp->next);
4162 gmenu_tree_item_unref (b);
4163 }
4164 else
4165 tmp = tmp->next;
4166 }
4167 }
4168
4169 directory->preprocessed = TRUE;
4170 }
4171
4172 static void process_layout_info (GMenuTree *tree,
4173 GMenuTreeDirectory *directory);
4174
4175 static void
4176 check_pending_separator (GMenuTreeDirectory *directory)
4177 {
4178 if (directory->layout_pending_separator)
4179 {
4180 menu_verbose ("Adding pending separator in '%s'\n", directory->name);
4181
4182 directory->contents = g_slist_append (directory->contents,
4183 gmenu_tree_separator_new (directory));
4184 directory->layout_pending_separator = FALSE;
4185 }
4186 }
4187
4188 static void
4189 merge_alias (GMenuTree *tree,
4190 GMenuTreeDirectory *directory,
4191 GMenuTreeAlias *alias)
4192 {
4193 menu_verbose ("Merging alias '%s' in directory '%s'\n",
4194 alias->directory->name, directory->name);
4195
4196 if (alias->aliased_item->type == GMENU_TREE_ITEM_DIRECTORY)
4197 {
4198 process_layout_info (tree, GMENU_TREE_DIRECTORY (alias->aliased_item));
4199 }
4200
4201 check_pending_separator (directory);
4202
4203 directory->contents = g_slist_append (directory->contents,
4204 gmenu_tree_item_ref (alias));
4205 }
4206
4207 static void
4208 merge_subdir (GMenuTree *tree,
4209 GMenuTreeDirectory *directory,
4210 GMenuTreeDirectory *subdir)
4211 {
4212 menu_verbose ("Merging subdir '%s' in directory '%s'\n",
4213 subdir->name, directory->name);
4214
4215 process_layout_info (tree, subdir);
4216
4217 check_pending_separator (directory);
4218
4219 if (subdir->will_inline_header == 0 ||
4220 (subdir->will_inline_header != G_MAXUINT16 &&
4221 g_slist_length (subdir->contents) <= subdir->will_inline_header))
4222 {
4223 GMenuTreeHeader *header;
4224
4225 header = gmenu_tree_header_new (directory, subdir);
4226 directory->contents = g_slist_append (directory->contents, header);
4227
4228 g_slist_foreach (subdir->contents,
4229 (GFunc) gmenu_tree_item_set_parent,
4230 directory);
4231 directory->contents = g_slist_concat (directory->contents,
4232 subdir->contents);
4233 subdir->contents = NULL;
4234 subdir->will_inline_header = G_MAXUINT16;
4235
4236 gmenu_tree_item_set_parent (GMENU_TREE_ITEM (subdir), NULL);
4237 }
4238 else
4239 {
4240 directory->contents = g_slist_append (directory->contents,
4241 gmenu_tree_item_ref (subdir));
4242 }
4243 }
4244
4245 static void
4246 merge_subdir_by_name (GMenuTree *tree,
4247 GMenuTreeDirectory *directory,
4248 const char *subdir_name)
4249 {
4250 GSList *tmp;
4251
4252 menu_verbose ("Attempting to merge subdir '%s' in directory '%s'\n",
4253 subdir_name, directory->name);
4254
4255 tmp = directory->subdirs;
4256 while (tmp != NULL)
4257 {
4258 GMenuTreeDirectory *subdir = tmp->data;
4259 GSList *next = tmp->next;
4260
4261 /* if it's an alias, then it cannot be affected by
4262 * the Merge nodes in the layout */
4263 if (GMENU_TREE_ITEM (subdir)->type == GMENU_TREE_ITEM_ALIAS)
4264 continue;
4265
4266 if (!strcmp (subdir->name, subdir_name))
4267 {
4268 directory->subdirs = g_slist_delete_link (directory->subdirs, tmp);
4269 merge_subdir (tree, directory, subdir);
4270 gmenu_tree_item_unref (subdir);
4271 }
4272
4273 tmp = next;
4274 }
4275 }
4276
4277 static void
4278 merge_entry (GMenuTree *tree,
4279 GMenuTreeDirectory *directory,
4280 GMenuTreeEntry *entry)
4281 {
4282 menu_verbose ("Merging entry '%s' in directory '%s'\n",
4283 entry->desktop_file_id, directory->name);
4284
4285 check_pending_separator (directory);
4286 directory->contents = g_slist_append (directory->contents,
4287 gmenu_tree_item_ref (entry));
4288 }
4289
4290 static void
4291 merge_entry_by_id (GMenuTree *tree,
4292 GMenuTreeDirectory *directory,
4293 const char *file_id)
4294 {
4295 GSList *tmp;
4296
4297 menu_verbose ("Attempting to merge entry '%s' in directory '%s'\n",
4298 file_id, directory->name);
4299
4300 tmp = directory->entries;
4301 while (tmp != NULL)
4302 {
4303 GMenuTreeEntry *entry = tmp->data;
4304 GSList *next = tmp->next;
4305
4306 /* if it's an alias, then it cannot be affected by
4307 * the Merge nodes in the layout */
4308 if (GMENU_TREE_ITEM (entry)->type == GMENU_TREE_ITEM_ALIAS)
4309 continue;
4310
4311 if (!strcmp (entry->desktop_file_id, file_id))
4312 {
4313 directory->entries = g_slist_delete_link (directory->entries, tmp);
4314 merge_entry (tree, directory, entry);
4315 gmenu_tree_item_unref (entry);
4316 }
4317
4318 tmp = next;
4319 }
4320 }
4321
4322 static inline gboolean
4323 find_name_in_list (const char *name,
4324 GSList *list)
4325 {
4326 while (list != NULL)
4327 {
4328 if (!strcmp (name, list->data))
4329 return TRUE;
4330
4331 list = list->next;
4332 }
4333
4334 return FALSE;
4335 }
4336
4337 static void
4338 merge_subdirs (GMenuTree *tree,
4339 GMenuTreeDirectory *directory,
4340 GSList *except)
4341 {
4342 GSList *subdirs;
4343 GSList *tmp;
4344
4345 menu_verbose ("Merging subdirs in directory '%s'\n", directory->name);
4346
4347 subdirs = directory->subdirs;
4348 directory->subdirs = NULL;
4349
4350 subdirs = g_slist_sort_with_data (subdirs,
4351 (GCompareDataFunc) gmenu_tree_item_compare,
4352 GINT_TO_POINTER (GMENU_TREE_FLAGS_NONE));
4353
4354 tmp = subdirs;
4355 while (tmp != NULL)
4356 {
4357 GMenuTreeDirectory *subdir = tmp->data;
4358
4359 if (GMENU_TREE_ITEM (subdir)->type == GMENU_TREE_ITEM_ALIAS)
4360 {
4361 merge_alias (tree, directory, GMENU_TREE_ALIAS (subdir));
4362 gmenu_tree_item_unref (subdir);
4363 }
4364 else if (!find_name_in_list (subdir->name, except))
4365 {
4366 merge_subdir (tree, directory, subdir);
4367 gmenu_tree_item_unref (subdir);
4368 }
4369 else
4370 {
4371 menu_verbose ("Not merging directory '%s' yet\n", subdir->name);
4372 directory->subdirs = g_slist_append (directory->subdirs, subdir);
4373 }
4374
4375 tmp = tmp->next;
4376 }
4377
4378 g_slist_free (subdirs);
4379 g_slist_free (except);
4380 }
4381
4382 static void
4383 merge_entries (GMenuTree *tree,
4384 GMenuTreeDirectory *directory,
4385 GSList *except)
4386 {
4387 GSList *entries;
4388 GSList *tmp;
4389
4390 menu_verbose ("Merging entries in directory '%s'\n", directory->name);
4391
4392 entries = directory->entries;
4393 directory->entries = NULL;
4394
4395 entries = g_slist_sort_with_data (entries,
4396 (GCompareDataFunc) gmenu_tree_item_compare,
4397 GINT_TO_POINTER (tree->flags));
4398
4399 tmp = entries;
4400 while (tmp != NULL)
4401 {
4402 GMenuTreeEntry *entry = tmp->data;
4403
4404 if (GMENU_TREE_ITEM (entry)->type == GMENU_TREE_ITEM_ALIAS)
4405 {
4406 merge_alias (tree, directory, GMENU_TREE_ALIAS (entry));
4407 gmenu_tree_item_unref (entry);
4408 }
4409 else if (!find_name_in_list (entry->desktop_file_id, except))
4410 {
4411 merge_entry (tree, directory, entry);
4412 gmenu_tree_item_unref (entry);
4413 }
4414 else
4415 {
4416 menu_verbose ("Not merging entry '%s' yet\n", entry->desktop_file_id);
4417 directory->entries = g_slist_append (directory->entries, entry);
4418 }
4419
4420 tmp = tmp->next;
4421 }
4422
4423 g_slist_free (entries);
4424 g_slist_free (except);
4425 }
4426
4427 static void
4428 merge_subdirs_and_entries (GMenuTree *tree,
4429 GMenuTreeDirectory *directory,
4430 GSList *except_subdirs,
4431 GSList *except_entries)
4432 {
4433 GSList *items;
4434 GSList *tmp;
4435
4436 menu_verbose ("Merging subdirs and entries together in directory %s\n",
4437 directory->name);
4438
4439 items = g_slist_concat (directory->subdirs, directory->entries);
4440
4441 directory->subdirs = NULL;
4442 directory->entries = NULL;
4443
4444 items = g_slist_sort_with_data (items,
4445 (GCompareDataFunc) gmenu_tree_item_compare,
4446 GINT_TO_POINTER (tree->flags));
4447
4448 tmp = items;
4449 while (tmp != NULL)
4450 {
4451 GMenuTreeItem *item = tmp->data;
4452 GMenuTreeItemType type;
4453
4454 type = item->type;
4455
4456 if (type == GMENU_TREE_ITEM_ALIAS)
4457 {
4458 merge_alias (tree, directory, GMENU_TREE_ALIAS (item));
4459 gmenu_tree_item_unref (item);
4460 }
4461 else if (type == GMENU_TREE_ITEM_DIRECTORY)
4462 {
4463 if (!find_name_in_list (GMENU_TREE_DIRECTORY (item)->name, except_subdirs))
4464 {
4465 merge_subdir (tree,
4466 directory,
4467 GMENU_TREE_DIRECTORY (item));
4468 gmenu_tree_item_unref (item);
4469 }
4470 else
4471 {
4472 menu_verbose ("Not merging directory '%s' yet\n",
4473 GMENU_TREE_DIRECTORY (item)->name);
4474 directory->subdirs = g_slist_append (directory->subdirs, item);
4475 }
4476 }
4477 else if (type == GMENU_TREE_ITEM_ENTRY)
4478 {
4479 if (!find_name_in_list (GMENU_TREE_ENTRY (item)->desktop_file_id, except_entries))
4480 {
4481 merge_entry (tree, directory, GMENU_TREE_ENTRY (item));
4482 gmenu_tree_item_unref (item);
4483 }
4484 else
4485 {
4486 menu_verbose ("Not merging entry '%s' yet\n",
4487 GMENU_TREE_ENTRY (item)->desktop_file_id);
4488 directory->entries = g_slist_append (directory->entries, item);
4489 }
4490 }
4491 else
4492 {
4493 g_assert_not_reached ();
4494 }
4495
4496 tmp = tmp->next;
4497 }
4498
4499 g_slist_free (items);
4500 g_slist_free (except_subdirs);
4501 g_slist_free (except_entries);
4502 }
4503
4504 static GSList *
4505 get_subdirs_from_layout_info (GSList *layout_info)
4506 {
4507 GSList *subdirs;
4508 GSList *tmp;
4509
4510 subdirs = NULL;
4511
4512 tmp = layout_info;
4513 while (tmp != NULL)
4514 {
4515 MenuLayoutNode *node = tmp->data;
4516
4517 if (menu_layout_node_get_type (node) == MENU_LAYOUT_NODE_MENUNAME)
4518 {
4519 subdirs = g_slist_append (subdirs,
4520 (char *) menu_layout_node_get_content (node));
4521 }
4522
4523 tmp = tmp->next;
4524 }
4525
4526 return subdirs;
4527 }
4528
4529 static GSList *
4530 get_entries_from_layout_info (GSList *layout_info)
4531 {
4532 GSList *entries;
4533 GSList *tmp;
4534
4535 entries = NULL;
4536
4537 tmp = layout_info;
4538 while (tmp != NULL)
4539 {
4540 MenuLayoutNode *node = tmp->data;
4541
4542 if (menu_layout_node_get_type (node) == MENU_LAYOUT_NODE_FILENAME)
4543 {
4544 entries = g_slist_append (entries,
4545 (char *) menu_layout_node_get_content (node));
4546 }
4547
4548 tmp = tmp->next;
4549 }
4550
4551 return entries;
4552 }
4553
4554 static void
4555 process_layout_info (GMenuTree *tree,
4556 GMenuTreeDirectory *directory)
4557 {
4558 GSList *layout_info;
4559
4560 menu_verbose ("Processing menu layout hints for %s\n", directory->name);
4561
4562 g_slist_foreach (directory->contents,
4563 (GFunc) gmenu_tree_item_unref_and_unset_parent,
4564 NULL);
4565 g_slist_free (directory->contents);
4566 directory->contents = NULL;
4567 directory->layout_pending_separator = FALSE;
4568
4569 layout_info = get_layout_info (directory, NULL);
4570
4571 if (layout_info == NULL)
4572 {
4573 merge_subdirs (tree, directory, NULL);
4574 merge_entries (tree, directory, NULL);
4575 }
4576 else
4577 {
4578 GSList *tmp;
4579
4580 tmp = layout_info;
4581 while (tmp != NULL)
4582 {
4583 MenuLayoutNode *node = tmp->data;
4584
4585 switch (menu_layout_node_get_type (node))
4586 {
4587 case MENU_LAYOUT_NODE_MENUNAME:
4588 merge_subdir_by_name (tree,
4589 directory,
4590 menu_layout_node_get_content (node));
4591 break;
4592
4593 case MENU_LAYOUT_NODE_FILENAME:
4594 merge_entry_by_id (tree,
4595 directory,
4596 menu_layout_node_get_content (node));
4597 break;
4598
4599 case MENU_LAYOUT_NODE_SEPARATOR:
4600 /* Unless explicitly told to show all separators, do not show a
4601 * separator at the beginning of a menu. Note that we don't add
4602 * the separators now, and instead make it pending. This way, we
4603 * won't show two consecutive separators nor will we show a
4604 * separator at the end of a menu. */
4605 if (tree->flags & GMENU_TREE_FLAGS_SHOW_ALL_SEPARATORS)
4606 {
4607 directory->layout_pending_separator = TRUE;
4608 check_pending_separator (directory);
4609 }
4610 else if (directory->contents)
4611 {
4612 menu_verbose ("Adding a potential separator in '%s'\n",
4613 directory->name);
4614
4615 directory->layout_pending_separator = TRUE;
4616 }
4617 else
4618 {
4619 menu_verbose ("Skipping separator at the beginning of '%s'\n",
4620 directory->name);
4621 }
4622 break;
4623
4624 case MENU_LAYOUT_NODE_MERGE:
4625 switch (menu_layout_node_merge_get_type (node))
4626 {
4627 case MENU_LAYOUT_MERGE_NONE:
4628 break;
4629
4630 case MENU_LAYOUT_MERGE_MENUS:
4631 merge_subdirs (tree,
4632 directory,
4633 get_subdirs_from_layout_info (tmp->next));
4634 break;
4635
4636 case MENU_LAYOUT_MERGE_FILES:
4637 merge_entries (tree,
4638 directory,
4639 get_entries_from_layout_info (tmp->next));
4640 break;
4641
4642 case MENU_LAYOUT_MERGE_ALL:
4643 merge_subdirs_and_entries (tree,
4644 directory,
4645 get_subdirs_from_layout_info (tmp->next),
4646 get_entries_from_layout_info (tmp->next));
4647 break;
4648
4649 default:
4650 g_assert_not_reached ();
4651 break;
4652 }
4653 break;
4654
4655 default:
4656 g_assert_not_reached ();
4657 break;
4658 }
4659
4660 tmp = tmp->next;
4661 }
4662 }
4663
4664 g_slist_foreach (directory->subdirs,
4665 (GFunc) gmenu_tree_item_unref,
4666 NULL);
4667 g_slist_free (directory->subdirs);
4668 directory->subdirs = NULL;
4669
4670 g_slist_foreach (directory->entries,
4671 (GFunc) gmenu_tree_item_unref,
4672 NULL);
4673 g_slist_free (directory->entries);
4674 directory->entries = NULL;
4675
4676 g_slist_foreach (directory->default_layout_info,
4677 (GFunc) menu_layout_node_unref,
4678 NULL);
4679 g_slist_free (directory->default_layout_info);
4680 directory->default_layout_info = NULL;
4681
4682 g_slist_foreach (directory->layout_info,
4683 (GFunc) menu_layout_node_unref,
4684 NULL);
4685 g_slist_free (directory->layout_info);
4686 directory->layout_info = NULL;
4687 }
4688
4689 static void
4690 handle_entries_changed (MenuLayoutNode *layout,
4691 GMenuTree *tree)
4692 {
4693 if (tree->layout == layout)
4694 {
4695 gmenu_tree_force_rebuild (tree);
4696 gmenu_tree_invoke_monitors (tree);
4697 }
4698 }
4699
4700 static void
4701 update_entry_index (GMenuTree *tree,
4702 GMenuTreeDirectory *dir)
4703 {
4704 GMenuTreeIter *iter = gmenu_tree_directory_iter (dir);
4705 GMenuTreeItemType next_type;
4706
4707 while ((next_type = gmenu_tree_iter_next (iter)) != GMENU_TREE_ITEM_INVALID)
4708 {
4709 gpointer item = NULL;
4710
4711 switch (next_type)
4712 {
4713 case GMENU_TREE_ITEM_ENTRY:
4714 {
4715 const char *id;
4716
4717 item = gmenu_tree_iter_get_entry (iter);
4718 id = gmenu_tree_entry_get_desktop_file_id (item);
4719 if (id != NULL)
4720 g_hash_table_insert (tree->entries_by_id, (char*)id, item);
4721 }
4722 break;
4723 case GMENU_TREE_ITEM_DIRECTORY:
4724 {
4725 item = gmenu_tree_iter_get_directory (iter);
4726 update_entry_index (tree, (GMenuTreeDirectory*)item);
4727 }
4728 break;
4729 default:
4730 break;
4731 }
4732 if (item != NULL)
4733 gmenu_tree_item_unref (item);
4734 }
4735
4736 gmenu_tree_iter_unref (iter);
4737 }
4738
4739 static gboolean
4740 gmenu_tree_build_from_layout (GMenuTree *tree,
4741 GError **error)
4742 {
4743 DesktopEntrySet *allocated;
4744
4745 if (tree->root)
4746 return TRUE;
4747
4748 if (!gmenu_tree_load_layout (tree, error))
4749 return FALSE;
4750
4751 menu_verbose ("Building menu tree from layout\n");
4752
4753 allocated = desktop_entry_set_new ();
4754
4755 /* create the menu structure */
4756 tree->root = process_layout (tree,
4757 NULL,
4758 find_menu_child (tree->layout),
4759 allocated);
4760 if (tree->root)
4761 {
4762 DesktopEntrySet *unallocated_used;
4763
4764 unallocated_used = desktop_entry_set_new ();
4765
4766 process_only_unallocated (tree, tree->root, allocated, unallocated_used);
4767 if (tree->flags & GMENU_TREE_FLAGS_INCLUDE_UNALLOCATED)
4768 {
4769 DesktopEntrySet *entry_pool;
4770 DesktopEntrySet *still_unallocated;
4771 GetStillUnallocatedForeachData data;
4772
4773 entry_pool = _entry_directory_list_get_all_desktops (menu_layout_node_menu_get_app_dirs (find_menu_child (tree->layout)));
4774 still_unallocated = desktop_entry_set_new ();
4775
4776 data.tree = tree;
4777 data.allocated = allocated;
4778 data.unallocated_used = unallocated_used;
4779 data.still_unallocated = still_unallocated;
4780
4781 desktop_entry_set_foreach (entry_pool,
4782 (DesktopEntrySetForeachFunc) get_still_unallocated_foreach,
4783 &data);
4784
4785 desktop_entry_set_unref (entry_pool);
4786
4787 desktop_entry_set_foreach (still_unallocated,
4788 (DesktopEntrySetForeachFunc) unallocated_entries_listify_foreach,
4789 tree->root);
4790
4791 desktop_entry_set_unref (still_unallocated);
4792 }
4793
4794 desktop_entry_set_unref (unallocated_used);
4795
4796 /* process the layout info part that can move/remove items:
4797 * inline, show_empty, etc. */
4798 preprocess_layout_info (tree, tree->root);
4799 /* populate the menu structure that we got with the items, and order it
4800 * according to the layout info */
4801 process_layout_info (tree, tree->root);
4802
4803 update_entry_index (tree, tree->root);
4804
4805 menu_layout_node_root_add_entries_monitor (tree->layout,
4806 (MenuLayoutNodeEntriesChangedFunc) handle_entries_changed,
4807 tree);
4808 }
4809
4810 desktop_entry_set_unref (allocated);
4811
4812 return TRUE;
4813 }
4814
4815 static void
4816 gmenu_tree_force_rebuild (GMenuTree *tree)
4817 {
4818 if (tree->root)
4819 {
4820 g_hash_table_remove_all (tree->entries_by_id);
4821 gmenu_tree_item_unref (tree->root);
4822 tree->root = NULL;
4823 tree->loaded = FALSE;
4824
4825 g_assert (tree->layout != NULL);
4826
4827 menu_layout_node_root_remove_entries_monitor (tree->layout,
4828 (MenuLayoutNodeEntriesChangedFunc) handle_entries_changed,
4829 tree);
4830 }
4831 }
4832
4833 GType
4834 gmenu_tree_iter_get_type (void)
4835 {
4836 static GType gtype = G_TYPE_INVALID;
4837 if (gtype == G_TYPE_INVALID)
4838 {
4839 gtype = g_boxed_type_register_static ("GMenuTreeIter",
4840 (GBoxedCopyFunc)gmenu_tree_iter_ref,
4841 (GBoxedFreeFunc)gmenu_tree_iter_unref);
4842 }
4843 return gtype;
4844 }
4845
4846 GType
4847 gmenu_tree_directory_get_type (void)
4848 {
4849 static GType gtype = G_TYPE_INVALID;
4850 if (gtype == G_TYPE_INVALID)
4851 {
4852 gtype = g_boxed_type_register_static ("GMenuTreeDirectory",
4853 (GBoxedCopyFunc)gmenu_tree_item_ref,
4854 (GBoxedFreeFunc)gmenu_tree_item_unref);
4855 }
4856 return gtype;
4857 }
4858
4859 GType
4860 gmenu_tree_entry_get_type (void)
4861 {
4862 static GType gtype = G_TYPE_INVALID;
4863 if (gtype == G_TYPE_INVALID)
4864 {
4865 gtype = g_boxed_type_register_static ("GMenuTreeEntry",
4866 (GBoxedCopyFunc)gmenu_tree_item_ref,
4867 (GBoxedFreeFunc)gmenu_tree_item_unref);
4868 }
4869 return gtype;
4870 }
4871
4872 GType
4873 gmenu_tree_separator_get_type (void)
4874 {
4875 static GType gtype = G_TYPE_INVALID;
4876 if (gtype == G_TYPE_INVALID)
4877 {
4878 gtype = g_boxed_type_register_static ("GMenuTreeSeparator",
4879 (GBoxedCopyFunc)gmenu_tree_item_ref,
4880 (GBoxedFreeFunc)gmenu_tree_item_unref);
4881 }
4882 return gtype;
4883 }
4884
4885 GType
4886 gmenu_tree_header_get_type (void)
4887 {
4888 static GType gtype = G_TYPE_INVALID;
4889 if (gtype == G_TYPE_INVALID)
4890 {
4891 gtype = g_boxed_type_register_static ("GMenuTreeHeader",
4892 (GBoxedCopyFunc)gmenu_tree_item_ref,
4893 (GBoxedFreeFunc)gmenu_tree_item_unref);
4894 }
4895 return gtype;
4896 }
4897
4898 GType
4899 gmenu_tree_alias_get_type (void)
4900 {
4901 static GType gtype = G_TYPE_INVALID;
4902 if (gtype == G_TYPE_INVALID)
4903 {
4904 gtype = g_boxed_type_register_static ("GMenuTreeAlias",
4905 (GBoxedCopyFunc)gmenu_tree_item_ref,
4906 (GBoxedFreeFunc)gmenu_tree_item_unref);
4907 }
4908 return gtype;
4909 }
4910
4911 GType
4912 gmenu_tree_flags_get_type (void)
4913 {
4914 static GType enum_type_id = 0;
4915 if (G_UNLIKELY (!enum_type_id))
4916 {
4917 static const GFlagsValue values[] = {
4918 { GMENU_TREE_FLAGS_NONE, "GMENU_TREE_FLAGS_NONE", "none" },
4919 { GMENU_TREE_FLAGS_INCLUDE_EXCLUDED, "GMENU_TREE_FLAGS_INCLUDE_EXCLUDED", "include-excluded" },
4920 { GMENU_TREE_FLAGS_SHOW_EMPTY, "GMENU_TREE_FLAGS_SHOW_EMPTY", "show-empty" },
4921 { GMENU_TREE_FLAGS_INCLUDE_NODISPLAY, "GMENU_TREE_FLAGS_INCLUDE_NODISPLAY", "include-nodisplay" },
4922 { GMENU_TREE_FLAGS_SHOW_ALL_SEPARATORS, "GMENU_TREE_FLAGS_SHOW_ALL_SEPARATORS", "show-all-separators" },
4923 { GMENU_TREE_FLAGS_SORT_DISPLAY_NAME, "GMENU_TREE_FLAGS_SORT_DISPLAY_NAME", "sort-display-name" },
4924 { GMENU_TREE_FLAGS_INCLUDE_UNALLOCATED, "GMENU_TREE_FLAGS_INCLUDE_UNALLOCATED,", "include-unallocated" },
4925 { 0, NULL, NULL }
4926 };
4927 enum_type_id = g_flags_register_static ("GMenuTreeFlags", values);
4928 }
4929 return enum_type_id;
4930 }
+0
-938
.pc/02_kill_debian_menu.patch/libmenu/desktop-entries.c less more
0 /*
1 * Copyright (C) 2002 - 2004 Red Hat, Inc.
2 *
3 * This library is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU Lesser General Public
5 * License as published by the Free Software Foundation; either
6 * version 2 of the License, or (at your option) any later version.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public
14 * License along with this library; if not, write to the
15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16 * Boston, MA 02111-1307, USA.
17 */
18
19 #include <config.h>
20
21 #include "desktop-entries.h"
22 #include <gio/gdesktopappinfo.h>
23
24 #include <string.h>
25
26 #include "menu-util.h"
27
28 #define DESKTOP_ENTRY_GROUP "Desktop Entry"
29
30 struct DesktopEntry
31 {
32 guint refcount;
33
34 char *path;
35 const char *basename;
36
37 guint type : 2;
38 guint reserved : 30;
39 };
40
41 typedef struct
42 {
43 DesktopEntry base;
44
45 GDesktopAppInfo *appinfo;
46 GQuark *categories;
47 } DesktopEntryDesktop;
48
49 typedef struct
50 {
51 DesktopEntry base;
52
53 char *name;
54 char *generic_name;
55 char *comment;
56 GIcon *icon;
57
58 guint nodisplay : 1;
59 guint hidden : 1;
60 guint showin : 1;
61 } DesktopEntryDirectory;
62
63 struct DesktopEntrySet
64 {
65 int refcount;
66 GHashTable *hash;
67 };
68
69 /*
70 * Desktop entries
71 */
72
73 /**
74 * unix_basename_from_path:
75 * @path: Path string
76 *
77 * Returns: A constant pointer into the basename of @path
78 */
79 static const char *
80 unix_basename_from_path (const char *path)
81 {
82 const char *basename = g_strrstr (path, "/");
83 if (basename)
84 return basename + 1;
85 else
86 return path;
87 }
88
89 static const char *
90 get_current_desktop (void)
91 {
92 static char *current_desktop = NULL;
93
94 /* Support XDG_CURRENT_DESKTOP environment variable; this can be used
95 * to abuse gnome-menus in non-GNOME desktops. */
96 if (!current_desktop)
97 {
98 const char *desktop;
99
100 desktop = g_getenv ("XDG_CURRENT_DESKTOP");
101
102 /* Note: if XDG_CURRENT_DESKTOP is set but empty, do as if it
103 * was not set */
104 if (!desktop || desktop[0] == '\0')
105 current_desktop = g_strdup ("GNOME");
106 else
107 current_desktop = g_strdup (desktop);
108 }
109
110 /* Using "*" means skipping desktop-related checks */
111 if (g_strcmp0 (current_desktop, "*") == 0)
112 return NULL;
113
114 return current_desktop;
115 }
116
117 static GIcon *
118 key_file_get_icon (GKeyFile *key_file)
119 {
120 GIcon *icon = NULL;
121 gchar *icon_name;
122
123 icon_name = g_key_file_get_locale_string (key_file, DESKTOP_ENTRY_GROUP,
124 "Icon", NULL, NULL);
125 if (!icon_name)
126 return NULL;
127
128 if (g_path_is_absolute (icon_name)) {
129 GFile *file;
130
131 file = g_file_new_for_path (icon_name);
132 icon = g_file_icon_new (file);
133 g_object_unref (file);
134 } else {
135 char *p;
136
137 /* Work around a common mistake in desktop files */
138 if ((p = strrchr (icon_name, '.')) != NULL &&
139 (strcmp (p, ".png") == 0 ||
140 strcmp (p, ".xpm") == 0 ||
141 strcmp (p, ".svg") == 0))
142 *p = 0;
143
144 icon = g_themed_icon_new (icon_name);
145 }
146
147 g_free (icon_name);
148
149 return icon;
150 }
151
152 static gboolean
153 key_file_get_show_in (GKeyFile *key_file)
154 {
155 const gchar *current_desktop;
156 gchar **strv;
157 gboolean show_in = TRUE;
158 int i;
159
160 current_desktop = get_current_desktop ();
161 if (!current_desktop)
162 return TRUE;
163
164 strv = g_key_file_get_string_list (key_file,
165 DESKTOP_ENTRY_GROUP,
166 "OnlyShowIn",
167 NULL,
168 NULL);
169 if (strv)
170 {
171 show_in = FALSE;
172 for (i = 0; strv[i]; i++)
173 {
174 if (!strcmp (strv[i], current_desktop))
175 {
176 show_in = TRUE;
177 break;
178 }
179 }
180 }
181 else
182 {
183 strv = g_key_file_get_string_list (key_file,
184 DESKTOP_ENTRY_GROUP,
185 "NotShowIn",
186 NULL,
187 NULL);
188 if (strv)
189 {
190 show_in = TRUE;
191 for (i = 0; strv[i]; i++)
192 {
193 if (!strcmp (strv[i], current_desktop))
194 {
195 show_in = FALSE;
196 }
197 }
198 }
199 }
200 g_strfreev (strv);
201
202 return show_in;
203 }
204
205 static gboolean
206 desktop_entry_load_directory (DesktopEntry *entry,
207 GKeyFile *key_file,
208 GError **error)
209 {
210 DesktopEntryDirectory *entry_directory = (DesktopEntryDirectory*)entry;
211 char *type_str;
212
213 type_str = g_key_file_get_string (key_file, DESKTOP_ENTRY_GROUP, "Type", error);
214 if (!type_str)
215 return FALSE;
216
217 if (strcmp (type_str, "Directory") != 0)
218 {
219 g_set_error (error,
220 G_KEY_FILE_ERROR,
221 G_KEY_FILE_ERROR_INVALID_VALUE,
222 "\"%s\" does not contain the correct \"Type\" value\n", entry->path);
223 g_free (type_str);
224 return FALSE;
225 }
226
227 g_free (type_str);
228
229 entry_directory->name = g_key_file_get_locale_string (key_file, DESKTOP_ENTRY_GROUP, "Name", NULL, error);
230 if (entry_directory->name == NULL)
231 return FALSE;
232
233 entry_directory->generic_name = g_key_file_get_locale_string (key_file, DESKTOP_ENTRY_GROUP, "GenericName", NULL, NULL);
234 entry_directory->comment = g_key_file_get_locale_string (key_file, DESKTOP_ENTRY_GROUP, "Comment", NULL, NULL);
235 entry_directory->icon = key_file_get_icon (key_file);
236 entry_directory->nodisplay = g_key_file_get_boolean (key_file,
237 DESKTOP_ENTRY_GROUP,
238 "NoDisplay",
239 NULL);
240 entry_directory->hidden = g_key_file_get_boolean (key_file,
241 DESKTOP_ENTRY_GROUP,
242 "Hidden",
243 NULL);
244 entry_directory->showin = key_file_get_show_in (key_file);
245
246 return TRUE;
247 }
248
249 static gboolean
250 desktop_entry_load (DesktopEntry *entry)
251 {
252 if (entry->type == DESKTOP_ENTRY_DESKTOP)
253 {
254 DesktopEntryDesktop *entry_desktop = (DesktopEntryDesktop*)entry;
255 const char *categories_str;
256
257 entry_desktop->appinfo = g_desktop_app_info_new_from_filename (entry->path);
258 if (!entry_desktop->appinfo ||
259 !g_app_info_get_name (G_APP_INFO (entry_desktop->appinfo)) ||
260 !g_app_info_get_executable (G_APP_INFO (entry_desktop->appinfo)))
261 {
262 menu_verbose ("Failed to load \"%s\"\n", entry->path);
263 return FALSE;
264 }
265
266 categories_str = g_desktop_app_info_get_categories (entry_desktop->appinfo);
267 if (categories_str)
268 {
269 char **categories;
270 int i;
271
272 categories = g_strsplit (categories_str, ";", -1);
273 entry_desktop->categories = g_new0 (GQuark, g_strv_length (categories) + 1);
274
275 for (i = 0; categories[i]; i++)
276 entry_desktop->categories[i] = g_quark_from_string (categories[i]);
277
278 g_strfreev (categories);
279 }
280
281 return TRUE;
282 }
283 else if (entry->type == DESKTOP_ENTRY_DIRECTORY)
284 {
285 GKeyFile *key_file = NULL;
286 GError *error = NULL;
287 gboolean retval = FALSE;
288
289 key_file = g_key_file_new ();
290
291 if (!g_key_file_load_from_file (key_file, entry->path, 0, &error))
292 goto out;
293
294 if (!desktop_entry_load_directory (entry, key_file, &error))
295 goto out;
296
297 retval = TRUE;
298
299 out:
300 g_key_file_free (key_file);
301
302 if (!retval)
303 {
304 if (error)
305 {
306 menu_verbose ("Failed to load \"%s\": %s\n", entry->path, error->message);
307 g_error_free (error);
308 }
309 else
310 menu_verbose ("Failed to load \"%s\"\n", entry->path);
311 }
312
313 return retval;
314 }
315 else
316 g_assert_not_reached ();
317
318 return FALSE;
319 }
320
321 DesktopEntry *
322 desktop_entry_new (const char *path)
323 {
324 DesktopEntryType type;
325 DesktopEntry *retval;
326
327 menu_verbose ("Loading desktop entry \"%s\"\n", path);
328
329 if (g_str_has_suffix (path, ".desktop"))
330 {
331 type = DESKTOP_ENTRY_DESKTOP;
332 retval = (DesktopEntry*)g_new0 (DesktopEntryDesktop, 1);
333 }
334 else if (g_str_has_suffix (path, ".directory"))
335 {
336 type = DESKTOP_ENTRY_DIRECTORY;
337 retval = (DesktopEntry*)g_new0 (DesktopEntryDirectory, 1);
338 }
339 else
340 {
341 menu_verbose ("Unknown desktop entry suffix in \"%s\"\n",
342 path);
343 return NULL;
344 }
345
346 retval->refcount = 1;
347 retval->type = type;
348 retval->path = g_strdup (path);
349 retval->basename = unix_basename_from_path (retval->path);
350
351 if (!desktop_entry_load (retval))
352 {
353 desktop_entry_unref (retval);
354 return NULL;
355 }
356
357 return retval;
358 }
359
360 DesktopEntry *
361 desktop_entry_reload (DesktopEntry *entry)
362 {
363 g_return_val_if_fail (entry != NULL, NULL);
364
365 menu_verbose ("Re-loading desktop entry \"%s\"\n", entry->path);
366
367 if (entry->type == DESKTOP_ENTRY_DESKTOP)
368 {
369 DesktopEntryDesktop *entry_desktop = (DesktopEntryDesktop *) entry;
370
371 g_object_unref (entry_desktop->appinfo);
372 entry_desktop->appinfo = NULL;
373
374 g_free (entry_desktop->categories);
375 entry_desktop->categories = NULL;
376 }
377 else if (entry->type == DESKTOP_ENTRY_DIRECTORY)
378 {
379 DesktopEntryDirectory *entry_directory = (DesktopEntryDirectory*) entry;
380
381 g_free (entry_directory->name);
382 entry_directory->name = NULL;
383
384 g_free (entry_directory->comment);
385 entry_directory->comment = NULL;
386
387 g_object_unref (entry_directory->icon);
388 entry_directory->icon = NULL;
389 }
390 else
391 g_assert_not_reached ();
392
393 if (!desktop_entry_load (entry))
394 {
395 desktop_entry_unref (entry);
396 return NULL;
397 }
398
399 return entry;
400 }
401
402 DesktopEntry *
403 desktop_entry_ref (DesktopEntry *entry)
404 {
405 g_return_val_if_fail (entry != NULL, NULL);
406 g_return_val_if_fail (entry->refcount > 0, NULL);
407
408 g_atomic_int_inc (&entry->refcount);
409
410 return entry;
411 }
412
413 DesktopEntry *
414 desktop_entry_copy (DesktopEntry *entry)
415 {
416 DesktopEntry *retval;
417
418 menu_verbose ("Copying desktop entry \"%s\"\n",
419 entry->basename);
420
421 if (entry->type == DESKTOP_ENTRY_DESKTOP)
422 retval = (DesktopEntry*)g_new0 (DesktopEntryDesktop, 1);
423 else if (entry->type == DESKTOP_ENTRY_DIRECTORY)
424 retval = (DesktopEntry*)g_new0 (DesktopEntryDirectory, 1);
425 else
426 g_assert_not_reached ();
427
428 retval->refcount = 1;
429 retval->type = entry->type;
430 retval->path = g_strdup (entry->path);
431 retval->basename = unix_basename_from_path (retval->path);
432
433 if (retval->type == DESKTOP_ENTRY_DESKTOP)
434 {
435 DesktopEntryDesktop *desktop_entry = (DesktopEntryDesktop*) entry;
436 DesktopEntryDesktop *retval_desktop_entry = (DesktopEntryDesktop*) retval;
437 int i;
438
439 retval_desktop_entry->appinfo = g_object_ref (desktop_entry->appinfo);
440
441 if (desktop_entry->categories != NULL)
442 {
443 i = 0;
444 for (; desktop_entry->categories[i]; i++);
445
446 retval_desktop_entry->categories = g_new0 (GQuark, i + 1);
447
448 i = 0;
449 for (; desktop_entry->categories[i]; i++)
450 retval_desktop_entry->categories[i] = desktop_entry->categories[i];
451 }
452 else
453 retval_desktop_entry->categories = NULL;
454 }
455 else if (entry->type == DESKTOP_ENTRY_DIRECTORY)
456 {
457 DesktopEntryDirectory *entry_directory = (DesktopEntryDirectory*)entry;
458 DesktopEntryDirectory *retval_directory = (DesktopEntryDirectory*)retval;
459
460 retval_directory->name = g_strdup (entry_directory->name);
461 retval_directory->comment = g_strdup (entry_directory->comment);
462 retval_directory->icon = g_object_ref (entry_directory->icon);
463 retval_directory->nodisplay = entry_directory->nodisplay;
464 retval_directory->hidden = entry_directory->hidden;
465 retval_directory->showin = entry_directory->showin;
466 }
467
468 return retval;
469 }
470
471 void
472 desktop_entry_unref (DesktopEntry *entry)
473 {
474 g_return_if_fail (entry != NULL);
475 g_return_if_fail (entry->refcount > 0);
476
477 entry->refcount -= 1;
478 if (entry->refcount != 0)
479 return;
480
481 g_free (entry->path);
482 entry->path = NULL;
483
484 if (entry->type == DESKTOP_ENTRY_DESKTOP)
485 {
486 DesktopEntryDesktop *desktop_entry = (DesktopEntryDesktop*) entry;
487 g_free (desktop_entry->categories);
488 if (desktop_entry->appinfo)
489 g_object_unref (desktop_entry->appinfo);
490 }
491 else if (entry->type == DESKTOP_ENTRY_DIRECTORY)
492 {
493 DesktopEntryDirectory *entry_directory = (DesktopEntryDirectory*) entry;
494
495 g_free (entry_directory->name);
496 entry_directory->name = NULL;
497
498 g_free (entry_directory->comment);
499 entry_directory->comment = NULL;
500
501 if (entry_directory->icon != NULL)
502 {
503 g_object_unref (entry_directory->icon);
504 entry_directory->icon = NULL;
505 }
506 }
507 else
508 g_assert_not_reached ();
509
510 g_free (entry);
511 }
512
513 DesktopEntryType
514 desktop_entry_get_type (DesktopEntry *entry)
515 {
516 return entry->type;
517 }
518
519 const char *
520 desktop_entry_get_path (DesktopEntry *entry)
521 {
522 return entry->path;
523 }
524
525 const char *
526 desktop_entry_get_basename (DesktopEntry *entry)
527 {
528 return entry->basename;
529 }
530
531 const char *
532 desktop_entry_get_name (DesktopEntry *entry)
533 {
534 if (entry->type == DESKTOP_ENTRY_DESKTOP)
535 return g_app_info_get_name (G_APP_INFO (((DesktopEntryDesktop*)entry)->appinfo));
536 return ((DesktopEntryDirectory*)entry)->name;
537 }
538
539 const char *
540 desktop_entry_get_generic_name (DesktopEntry *entry)
541 {
542 if (entry->type == DESKTOP_ENTRY_DESKTOP)
543 return g_desktop_app_info_get_generic_name (((DesktopEntryDesktop*)entry)->appinfo);
544 return ((DesktopEntryDirectory*)entry)->generic_name;
545 }
546
547 const char *
548 desktop_entry_get_comment (DesktopEntry *entry)
549 {
550 if (entry->type == DESKTOP_ENTRY_DESKTOP)
551 return g_app_info_get_description (G_APP_INFO (((DesktopEntryDesktop*)entry)->appinfo));
552 return ((DesktopEntryDirectory*)entry)->comment;
553 }
554
555 GIcon *
556 desktop_entry_get_icon (DesktopEntry *entry)
557 {
558 if (entry->type == DESKTOP_ENTRY_DESKTOP)
559 return g_app_info_get_icon (G_APP_INFO (((DesktopEntryDesktop*)entry)->appinfo));
560 return ((DesktopEntryDirectory*)entry)->icon;
561 }
562
563 gboolean
564 desktop_entry_get_no_display (DesktopEntry *entry)
565 {
566 if (entry->type == DESKTOP_ENTRY_DESKTOP)
567 return g_desktop_app_info_get_nodisplay (((DesktopEntryDesktop*)entry)->appinfo);
568 return ((DesktopEntryDirectory*)entry)->nodisplay;
569 }
570
571 gboolean
572 desktop_entry_get_hidden (DesktopEntry *entry)
573 {
574 if (entry->type == DESKTOP_ENTRY_DESKTOP)
575 return g_desktop_app_info_get_is_hidden (((DesktopEntryDesktop*)entry)->appinfo);
576 return ((DesktopEntryDirectory*)entry)->hidden;
577 }
578
579 gboolean
580 desktop_entry_get_show_in (DesktopEntry *entry)
581 {
582 if (entry->type == DESKTOP_ENTRY_DESKTOP)
583 {
584 const char *current_desktop = get_current_desktop ();
585
586 if (current_desktop == NULL)
587 return TRUE;
588 else
589 return g_desktop_app_info_get_show_in (((DesktopEntryDesktop*)entry)->appinfo, current_desktop);
590 }
591 return ((DesktopEntryDirectory*)entry)->showin;
592 }
593
594
595 GDesktopAppInfo *
596 desktop_entry_get_app_info (DesktopEntry *entry)
597 {
598 g_return_val_if_fail (entry->type == DESKTOP_ENTRY_DESKTOP, NULL);
599 return ((DesktopEntryDesktop*)entry)->appinfo;
600 }
601
602 gboolean
603 desktop_entry_has_categories (DesktopEntry *entry)
604 {
605 DesktopEntryDesktop *desktop_entry;
606 if (entry->type != DESKTOP_ENTRY_DESKTOP)
607 return FALSE;
608
609 desktop_entry = (DesktopEntryDesktop*) entry;
610 return (desktop_entry->categories != NULL && desktop_entry->categories[0] != 0);
611 }
612
613 gboolean
614 desktop_entry_has_category (DesktopEntry *entry,
615 const char *category)
616 {
617 GQuark quark;
618 int i;
619 DesktopEntryDesktop *desktop_entry;
620
621 if (entry->type != DESKTOP_ENTRY_DESKTOP)
622 return FALSE;
623
624 desktop_entry = (DesktopEntryDesktop*) entry;
625
626 if (desktop_entry->categories == NULL)
627 return FALSE;
628
629 if (!(quark = g_quark_try_string (category)))
630 return FALSE;
631
632 for (i = 0; desktop_entry->categories[i]; i++)
633 {
634 if (quark == desktop_entry->categories[i])
635 return TRUE;
636 }
637
638 return FALSE;
639 }
640
641 void
642 desktop_entry_add_legacy_category (DesktopEntry *entry)
643 {
644 GQuark *categories;
645 int i;
646 DesktopEntryDesktop *desktop_entry;
647
648 g_return_if_fail (entry->type == DESKTOP_ENTRY_DESKTOP);
649
650 desktop_entry = (DesktopEntryDesktop*) entry;
651
652 menu_verbose ("Adding Legacy category to \"%s\"\n",
653 entry->basename);
654
655 if (desktop_entry->categories != NULL)
656 {
657 i = 0;
658 for (; desktop_entry->categories[i]; i++);
659
660 categories = g_new0 (GQuark, i + 2);
661
662 i = 0;
663 for (; desktop_entry->categories[i]; i++)
664 categories[i] = desktop_entry->categories[i];
665 }
666 else
667 {
668 categories = g_new0 (GQuark, 2);
669 i = 0;
670 }
671
672 categories[i] = g_quark_from_string ("Legacy");
673
674 g_free (desktop_entry->categories);
675 desktop_entry->categories = categories;
676 }
677
678 /*
679 * Entry sets
680 */
681
682 DesktopEntrySet *
683 desktop_entry_set_new (void)
684 {
685 DesktopEntrySet *set;
686
687 set = g_new0 (DesktopEntrySet, 1);
688 set->refcount = 1;
689
690 menu_verbose (" New entry set %p\n", set);
691
692 return set;
693 }
694
695 DesktopEntrySet *
696 desktop_entry_set_ref (DesktopEntrySet *set)
697 {
698 g_return_val_if_fail (set != NULL, NULL);
699 g_return_val_if_fail (set->refcount > 0, NULL);
700
701 g_atomic_int_inc (&set->refcount);
702
703 return set;
704 }
705
706 void
707 desktop_entry_set_unref (DesktopEntrySet *set)
708 {
709 gboolean is_zero;
710
711 g_return_if_fail (set != NULL);
712 g_return_if_fail (set->refcount > 0);
713
714 is_zero = g_atomic_int_dec_and_test (&set->refcount);
715 if (is_zero)
716 {
717 menu_verbose (" Deleting entry set %p\n", set);
718
719 if (set->hash)
720 g_hash_table_destroy (set->hash);
721 set->hash = NULL;
722
723 g_free (set);
724 }
725 }
726
727 void
728 desktop_entry_set_add_entry (DesktopEntrySet *set,
729 DesktopEntry *entry,
730 const char *file_id)
731 {
732 menu_verbose (" Adding to set %p entry %s\n", set, file_id);
733
734 if (set->hash == NULL)
735 {
736 set->hash = g_hash_table_new_full (g_str_hash,
737 g_str_equal,
738 g_free,
739 (GDestroyNotify) desktop_entry_unref);
740 }
741
742 g_hash_table_replace (set->hash,
743 g_strdup (file_id),
744 desktop_entry_ref (entry));
745 }
746
747 DesktopEntry *
748 desktop_entry_set_lookup (DesktopEntrySet *set,
749 const char *file_id)
750 {
751 if (set->hash == NULL)
752 return NULL;
753
754 return g_hash_table_lookup (set->hash, file_id);
755 }
756
757 typedef struct
758 {
759 DesktopEntrySetForeachFunc func;
760 gpointer user_data;
761 } EntryHashForeachData;
762
763 static void
764 entry_hash_foreach (const char *file_id,
765 DesktopEntry *entry,
766 EntryHashForeachData *fd)
767 {
768 fd->func (file_id, entry, fd->user_data);
769 }
770
771 void
772 desktop_entry_set_foreach (DesktopEntrySet *set,
773 DesktopEntrySetForeachFunc func,
774 gpointer user_data)
775 {
776 g_return_if_fail (set != NULL);
777 g_return_if_fail (func != NULL);
778
779 if (set->hash != NULL)
780 {
781 EntryHashForeachData fd;
782
783 fd.func = func;
784 fd.user_data = user_data;
785
786 g_hash_table_foreach (set->hash,
787 (GHFunc) entry_hash_foreach,
788 &fd);
789 }
790 }
791
792 static void
793 desktop_entry_set_clear (DesktopEntrySet *set)
794 {
795 menu_verbose (" Clearing set %p\n", set);
796
797 if (set->hash != NULL)
798 {
799 g_hash_table_destroy (set->hash);
800 set->hash = NULL;
801 }
802 }
803
804 int
805 desktop_entry_set_get_count (DesktopEntrySet *set)
806 {
807 if (set->hash == NULL)
808 return 0;
809
810 return g_hash_table_size (set->hash);
811 }
812
813 static void
814 union_foreach (const char *file_id,
815 DesktopEntry *entry,
816 DesktopEntrySet *set)
817 {
818 /* we are iterating over "with" adding anything not
819 * already in "set". We unconditionally overwrite
820 * the stuff in "set" because we can assume
821 * two entries with the same name are equivalent.
822 */
823 desktop_entry_set_add_entry (set, entry, file_id);
824 }
825
826 void
827 desktop_entry_set_union (DesktopEntrySet *set,
828 DesktopEntrySet *with)
829 {
830 menu_verbose (" Union of %p and %p\n", set, with);
831
832 if (desktop_entry_set_get_count (with) == 0)
833 return; /* A fast simple case */
834
835 g_hash_table_foreach (with->hash,
836 (GHFunc) union_foreach,
837 set);
838 }
839
840 typedef struct
841 {
842 DesktopEntrySet *set;
843 DesktopEntrySet *with;
844 } IntersectData;
845
846 static gboolean
847 intersect_foreach_remove (const char *file_id,
848 DesktopEntry *entry,
849 IntersectData *id)
850 {
851 /* Remove everything in "set" which is not in "with" */
852
853 if (g_hash_table_lookup (id->with->hash, file_id) != NULL)
854 return FALSE;
855
856 menu_verbose (" Removing from %p entry %s\n", id->set, file_id);
857
858 return TRUE; /* return TRUE to remove */
859 }
860
861 void
862 desktop_entry_set_intersection (DesktopEntrySet *set,
863 DesktopEntrySet *with)
864 {
865 IntersectData id;
866
867 menu_verbose (" Intersection of %p and %p\n", set, with);
868
869 if (desktop_entry_set_get_count (set) == 0 ||
870 desktop_entry_set_get_count (with) == 0)
871 {
872 /* A fast simple case */
873 desktop_entry_set_clear (set);
874 return;
875 }
876
877 id.set = set;
878 id.with = with;
879
880 g_hash_table_foreach_remove (set->hash,
881 (GHRFunc) intersect_foreach_remove,
882 &id);
883 }
884
885 typedef struct
886 {
887 DesktopEntrySet *set;
888 DesktopEntrySet *other;
889 } SubtractData;
890
891 static gboolean
892 subtract_foreach_remove (const char *file_id,
893 DesktopEntry *entry,
894 SubtractData *sd)
895 {
896 /* Remove everything in "set" which is not in "other" */
897
898 if (g_hash_table_lookup (sd->other->hash, file_id) == NULL)
899 return FALSE;
900
901 menu_verbose (" Removing from %p entry %s\n", sd->set, file_id);
902
903 return TRUE; /* return TRUE to remove */
904 }
905
906 void
907 desktop_entry_set_subtract (DesktopEntrySet *set,
908 DesktopEntrySet *other)
909 {
910 SubtractData sd;
911
912 menu_verbose (" Subtract from %p set %p\n", set, other);
913
914 if (desktop_entry_set_get_count (set) == 0 ||
915 desktop_entry_set_get_count (other) == 0)
916 return; /* A fast simple case */
917
918 sd.set = set;
919 sd.other = other;
920
921 g_hash_table_foreach_remove (set->hash,
922 (GHRFunc) subtract_foreach_remove,
923 &sd);
924 }
925
926 void
927 desktop_entry_set_swap_contents (DesktopEntrySet *a,
928 DesktopEntrySet *b)
929 {
930 GHashTable *tmp;
931
932 menu_verbose (" Swap contents of %p and %p\n", a, b);
933
934 tmp = a->hash;
935 a->hash = b->hash;
936 b->hash = tmp;
937 }
+0
-296
.pc/03_kde-legacydirs.patch/layout/gnome-applications.menu less more
0 <!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
1 "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
2
3 <Menu>
4
5 <Name>Applications</Name>
6 <Directory>X-GNOME-Menu-Applications.directory</Directory>
7
8 <!-- Read standard .directory and .desktop file locations -->
9 <DefaultAppDirs/>
10 <DefaultDirectoryDirs/>
11
12 <!-- Read in overrides and child menus from applications-merged/ -->
13 <DefaultMergeDirs/>
14
15 <!-- Accessories submenu -->
16 <Menu>
17 <Name>Accessories</Name>
18 <OnlyUnallocated/>
19 <Directory>Utility.directory</Directory>
20 <Include>
21 <And>
22 <Category>Utility</Category>
23 <!-- Accessibility spec must have either the Utility or Settings
24 category, and we display an accessibility submenu already for
25 the ones that do not have Settings, so don't display accessibility
26 applications here -->
27 <Not><Category>Accessibility</Category></Not>
28 <Not><Category>System</Category></Not>
29
30 <!-- Also exclude everything we put in the X-GNOME-Utilities
31 whitelist -->
32 <Not><Filename>file-roller.desktop</Filename></Not>
33 <Not><Filename>gnome-file-roller.desktop</Filename></Not>
34 <Not><Filename>deja-dup-preferences.desktop</Filename></Not>
35 <Not><Filename>gnome-calculator.desktop</Filename></Not>
36 <Not><Filename>gcalctool.desktop</Filename></Not>
37 <Not><Filename>gucharmap.desktop</Filename></Not>
38 <Not><Filename>gnome-gucharmap.desktop</Filename></Not>
39 <Not><Filename>gnome-font-viewer.desktop</Filename></Not>
40 <Not><Filename>seahorse.desktop</Filename></Not>
41 <Not><Filename>gnome-terminal.desktop</Filename></Not>
42 <Not><Filename>gnome-tweak-tool.desktop</Filename></Not>
43 <Not><Filename>gnome-disks.desktop</Filename></Not>
44 <Not><Filename>gnome-screenshot.desktop</Filename></Not>
45 <Not><Filename>gnome-yelp.desktop</Filename></Not>
46 <Not><Filename>yelp.desktop</Filename></Not>
47 <Not><Filename>gnome-control-center.desktop</Filename></Not>
48 </And>
49 </Include>
50 </Menu> <!-- End Accessories -->
51
52
53 <!-- Accessibility submenu -->
54 <Menu>
55 <Name>Universal Access</Name>
56 <OnlyUnallocated/>
57 <Directory>Utility-Accessibility.directory</Directory>
58 <Include>
59 <And>
60 <Category>Accessibility</Category>
61 <Not><Category>Settings</Category></Not>
62 </And>
63 </Include>
64 </Menu> <!-- End Accessibility -->
65
66 <!-- Development Tools -->
67 <Menu>
68 <Name>Development</Name>
69 <OnlyUnallocated/>
70 <Directory>Development.directory</Directory>
71 <Include>
72 <And>
73 <Category>Development</Category>
74 </And>
75 <Filename>emacs.desktop</Filename>
76 </Include>
77 </Menu> <!-- End Development Tools -->
78
79 <!-- Education -->
80 <Menu>
81 <Name>Education</Name>
82 <Directory>Education.directory</Directory>
83 <Include>
84 <And>
85 <Category>Education</Category>
86 </And>
87 </Include>
88 </Menu> <!-- End Education -->
89
90 <!-- Games -->
91 <Menu>
92 <Name>Games</Name>
93 <Directory>Game.directory</Directory>
94 <Include>
95 <And>
96 <Category>Game</Category>
97 </And>
98 </Include>
99 </Menu> <!-- End Games -->
100
101 <!-- Graphics -->
102 <Menu>
103 <Name>Graphics</Name>
104 <OnlyUnallocated/>
105 <Directory>Graphics.directory</Directory>
106 <Include>
107 <And>
108 <Category>Graphics</Category>
109 <Not><Filename>eog.desktop</Filename></Not>
110 <Not><Filename>gnome-eog.desktop</Filename></Not>
111 <Not><Filename>evince.desktop</Filename></Not>
112 </And>
113 </Include>
114 </Menu> <!-- End Graphics -->
115
116 <!-- Internet -->
117 <Menu>
118 <Name>Internet</Name>
119 <OnlyUnallocated/>
120 <Directory>Network.directory</Directory>
121 <Include>
122 <And>
123 <Category>Network</Category>
124 <Not><Category>X-GNOME-WebApplication</Category></Not>
125 <Not><Filename>vinagre.desktop</Filename></Not>
126 </And>
127 </Include>
128 </Menu> <!-- End Internet -->
129
130 <!-- Web Applications -->
131 <Menu>
132 <Name>Web Applications</Name>
133 <Directory>X-GNOME-WebApplications.directory</Directory>
134 <Include>
135 <And>
136 <Category>Network</Category>
137 <Category>X-GNOME-WebApplication</Category>
138 </And>
139 </Include>
140 </Menu>
141
142 <!-- Multimedia -->
143 <Menu>
144 <Name>Multimedia</Name>
145 <OnlyUnallocated/>
146 <Directory>AudioVideo.directory</Directory>
147 <Include>
148 <And>
149 <Category>AudioVideo</Category>
150 </And>
151 </Include>
152 </Menu> <!-- End Multimedia -->
153
154 <!-- Office -->
155 <Menu>
156 <Name>Office</Name>
157 <OnlyUnallocated/>
158 <Directory>Office.directory</Directory>
159 <Include>
160 <And>
161 <Category>Office</Category>
162 <Not><Filename>evince.desktop</Filename></Not>
163 <Not><Filename>gnome-dictionary.desktop</Filename></Not>
164 </And>
165 </Include>
166 </Menu> <!-- End Office -->
167
168 <!-- Sundry -->
169 <Menu>
170 <Name>Sundry</Name>
171 <Directory>X-GNOME-Sundry.directory</Directory>
172 <Include>
173 <Filename>alacarte.desktop</Filename>
174 <Filename>caribou.desktop</Filename>
175 <Filename>dconf-editor.desktop</Filename>
176 <Filename>fedora-im-chooser.desktop</Filename>
177 <Filename>fedora-release-notes.desktop</Filename>
178 <Filename>firewall-config.desktop</Filename>
179 <Filename>flash-player-properties.desktop</Filename>
180 <Filename>gconf-editor.desktop</Filename>
181 <Filename>gnome-abrt.desktop</Filename>
182 <Filename>fedora-abrt.desktop</Filename>
183 <Filename>gnome-orca.desktop</Filename>
184 <Filename>gnome-power-statistics.desktop</Filename>
185 <Filename>gnome-user-share-properties.desktop</Filename>
186 <Filename>ibus.desktop</Filename>
187 <Filename>ibus-daemon.desktop</Filename>
188 <Filename>ibus-setup-anthy.desktop</Filename>
189 <Filename>ibus-setup.desktop</Filename>
190 <Filename>ibus-setup-hangul.desktop</Filename>
191 <Filename>ibus-setup-libbopomofo.desktop</Filename>
192 <Filename>ibus-setup-libpinyin.desktop</Filename>
193 <Filename>ibus-setup-m17n.desktop</Filename>
194 <Filename>ibus-setup-typing-booster.desktop</Filename>
195 <Filename>im-chooser.desktop</Filename>
196 <Filename>itweb-settings.desktop</Filename>
197 <Filename>jhbuild.desktop</Filename>
198 <Filename>javaws.desktop</Filename>
199 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
200 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
201 <Filename>log4j-chainsaw.desktop</Filename>
202 <Filename>log4j-logfactor5.desktop</Filename>
203 <Filename>nm-connection-editor.desktop</Filename>
204 <Filename>orca.desktop</Filename>
205 <Filename>setroubleshoot.desktop</Filename>
206 <Filename>authconfig.desktop</Filename>
207 <Filename>system-config-date.desktop</Filename>
208 <Filename>system-config-firewall.desktop</Filename>
209 <Filename>system-config-keyboard.desktop</Filename>
210 <Filename>system-config-language.desktop</Filename>
211 <Filename>system-config-printer.desktop</Filename>
212 <Filename>system-config-users.desktop</Filename>
213 <Filename>vino-preferences.desktop</Filename>
214 </Include>
215 </Menu>
216
217 <!-- System Tools-->
218 <Menu>
219 <Name>System</Name>
220 <OnlyUnallocated/>
221 <Directory>System-Tools.directory</Directory>
222 <Include>
223 <And>
224 <Category>System</Category>
225 <Not><Category>Settings</Category></Not>
226 <Not><Filename>baobab.desktop</Filename></Not>
227 <Not><Filename>gnome-system-log.desktop</Filename></Not>
228 <Not><Filename>gnome-system-monitor.desktop</Filename></Not>
229 </And>
230 </Include>
231 </Menu> <!-- End System Tools -->
232
233 <!-- System Settings -->
234 <Menu>
235 <Name>System Settings</Name>
236 <Directory>X-GNOME-SystemSettings.directory</Directory>
237 <Include>
238 <Category>X-GNOME-Settings-Panel</Category>
239 </Include>
240 </Menu>
241
242 <!-- Utilities submenu -->
243 <Menu>
244 <Name>Utilities</Name>
245 <Directory>X-GNOME-Utilities.directory</Directory>
246 <Include>
247 <Filename>file-roller.desktop</Filename>
248 <Filename>gnome-calculator.desktop</Filename>
249 <Filename>gnome-font-viewer.desktop</Filename>
250 <Filename>gucharmap.desktop</Filename>
251 <Filename>seahorse.desktop</Filename>
252 <Filename>gnome-terminal.desktop</Filename>
253 <Filename>deja-dup-preferences.desktop</Filename>
254 <Filename>gnome-dictionary.desktop</Filename>
255 <Filename>evince.desktop</Filename>
256 <Filename>eog.desktop</Filename>
257 <Filename>baobab.desktop</Filename>
258 <Filename>gnome-system-log.desktop</Filename>
259 <Filename>gnome-system-monitor.desktop</Filename>
260 <Filename>vinagre.desktop</Filename>
261 <Filename>gnome-tweak-tool.desktop</Filename>
262 <Filename>gnome-disks.desktop</Filename>
263 <Filename>gnome-screenshot.desktop</Filename>
264 <Filename>gnome-yelp.desktop</Filename>
265 <Filename>yelp.desktop</Filename>
266 <Filename>gnome-control-center.desktop</Filename>
267 </Include>
268 </Menu>
269
270 <!-- Other -->
271 <Menu>
272 <Name>Other</Name>
273 <Directory>X-GNOME-Other.directory</Directory>
274 <OnlyUnallocated/>
275 <Include>
276 <And>
277 <Not><Category>Core</Category></Not>
278 <Not><Category>Screensaver</Category></Not>
279
280 <!-- Really Fedora ??? -->
281 <Not><Filename>gnome-eog.desktop</Filename></Not>
282 <Not><Filename>gnome-file-roller.desktop</Filename></Not>
283 <Not><Filename>gnome-gucharmap.desktop</Filename></Not>
284 <Not><Filename>gcalctool.desktop</Filename></Not>
285 </And>
286 </Include>
287 </Menu> <!-- End Other -->
288
289 <Layout>
290 <Merge type="menus" />
291 <Menuname>Other</Menuname>
292 <Merge type="files" />
293 </Layout>
294
295 </Menu> <!-- End Applications -->
+0
-300
.pc/08_settings-menus.patch/layout/gnome-applications.menu less more
0 <!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
1 "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
2
3 <Menu>
4
5 <Name>Applications</Name>
6 <Directory>X-GNOME-Menu-Applications.directory</Directory>
7
8 <!-- Scan legacy dirs first, as later items take priority -->
9 <LegacyDir>/etc/X11/applnk</LegacyDir>
10 <LegacyDir>/usr/share/gnome/apps</LegacyDir>
11
12 <!-- Read standard .directory and .desktop file locations -->
13 <DefaultAppDirs/>
14 <DefaultDirectoryDirs/>
15
16 <!-- Read in overrides and child menus from applications-merged/ -->
17 <DefaultMergeDirs/>
18
19 <!-- Accessories submenu -->
20 <Menu>
21 <Name>Accessories</Name>
22 <OnlyUnallocated/>
23 <Directory>Utility.directory</Directory>
24 <Include>
25 <And>
26 <Category>Utility</Category>
27 <!-- Accessibility spec must have either the Utility or Settings
28 category, and we display an accessibility submenu already for
29 the ones that do not have Settings, so don't display accessibility
30 applications here -->
31 <Not><Category>Accessibility</Category></Not>
32 <Not><Category>System</Category></Not>
33
34 <!-- Also exclude everything we put in the X-GNOME-Utilities
35 whitelist -->
36 <Not><Filename>file-roller.desktop</Filename></Not>
37 <Not><Filename>gnome-file-roller.desktop</Filename></Not>
38 <Not><Filename>deja-dup-preferences.desktop</Filename></Not>
39 <Not><Filename>gnome-calculator.desktop</Filename></Not>
40 <Not><Filename>gcalctool.desktop</Filename></Not>
41 <Not><Filename>gucharmap.desktop</Filename></Not>
42 <Not><Filename>gnome-gucharmap.desktop</Filename></Not>
43 <Not><Filename>gnome-font-viewer.desktop</Filename></Not>
44 <Not><Filename>seahorse.desktop</Filename></Not>
45 <Not><Filename>gnome-terminal.desktop</Filename></Not>
46 <Not><Filename>gnome-tweak-tool.desktop</Filename></Not>
47 <Not><Filename>gnome-disks.desktop</Filename></Not>
48 <Not><Filename>gnome-screenshot.desktop</Filename></Not>
49 <Not><Filename>gnome-yelp.desktop</Filename></Not>
50 <Not><Filename>yelp.desktop</Filename></Not>
51 <Not><Filename>gnome-control-center.desktop</Filename></Not>
52 </And>
53 </Include>
54 </Menu> <!-- End Accessories -->
55
56
57 <!-- Accessibility submenu -->
58 <Menu>
59 <Name>Universal Access</Name>
60 <OnlyUnallocated/>
61 <Directory>Utility-Accessibility.directory</Directory>
62 <Include>
63 <And>
64 <Category>Accessibility</Category>
65 <Not><Category>Settings</Category></Not>
66 </And>
67 </Include>
68 </Menu> <!-- End Accessibility -->
69
70 <!-- Development Tools -->
71 <Menu>
72 <Name>Development</Name>
73 <OnlyUnallocated/>
74 <Directory>Development.directory</Directory>
75 <Include>
76 <And>
77 <Category>Development</Category>
78 </And>
79 <Filename>emacs.desktop</Filename>
80 </Include>
81 </Menu> <!-- End Development Tools -->
82
83 <!-- Education -->
84 <Menu>
85 <Name>Education</Name>
86 <Directory>Education.directory</Directory>
87 <Include>
88 <And>
89 <Category>Education</Category>
90 </And>
91 </Include>
92 </Menu> <!-- End Education -->
93
94 <!-- Games -->
95 <Menu>
96 <Name>Games</Name>
97 <Directory>Game.directory</Directory>
98 <Include>
99 <And>
100 <Category>Game</Category>
101 </And>
102 </Include>
103 </Menu> <!-- End Games -->
104
105 <!-- Graphics -->
106 <Menu>
107 <Name>Graphics</Name>
108 <OnlyUnallocated/>
109 <Directory>Graphics.directory</Directory>
110 <Include>
111 <And>
112 <Category>Graphics</Category>
113 <Not><Filename>eog.desktop</Filename></Not>
114 <Not><Filename>gnome-eog.desktop</Filename></Not>
115 <Not><Filename>evince.desktop</Filename></Not>
116 </And>
117 </Include>
118 </Menu> <!-- End Graphics -->
119
120 <!-- Internet -->
121 <Menu>
122 <Name>Internet</Name>
123 <OnlyUnallocated/>
124 <Directory>Network.directory</Directory>
125 <Include>
126 <And>
127 <Category>Network</Category>
128 <Not><Category>X-GNOME-WebApplication</Category></Not>
129 <Not><Filename>vinagre.desktop</Filename></Not>
130 </And>
131 </Include>
132 </Menu> <!-- End Internet -->
133
134 <!-- Web Applications -->
135 <Menu>
136 <Name>Web Applications</Name>
137 <Directory>X-GNOME-WebApplications.directory</Directory>
138 <Include>
139 <And>
140 <Category>Network</Category>
141 <Category>X-GNOME-WebApplication</Category>
142 </And>
143 </Include>
144 </Menu>
145
146 <!-- Multimedia -->
147 <Menu>
148 <Name>Multimedia</Name>
149 <OnlyUnallocated/>
150 <Directory>AudioVideo.directory</Directory>
151 <Include>
152 <And>
153 <Category>AudioVideo</Category>
154 </And>
155 </Include>
156 </Menu> <!-- End Multimedia -->
157
158 <!-- Office -->
159 <Menu>
160 <Name>Office</Name>
161 <OnlyUnallocated/>
162 <Directory>Office.directory</Directory>
163 <Include>
164 <And>
165 <Category>Office</Category>
166 <Not><Filename>evince.desktop</Filename></Not>
167 <Not><Filename>gnome-dictionary.desktop</Filename></Not>
168 </And>
169 </Include>
170 </Menu> <!-- End Office -->
171
172 <!-- Sundry -->
173 <Menu>
174 <Name>Sundry</Name>
175 <Directory>X-GNOME-Sundry.directory</Directory>
176 <Include>
177 <Filename>alacarte.desktop</Filename>
178 <Filename>caribou.desktop</Filename>
179 <Filename>dconf-editor.desktop</Filename>
180 <Filename>fedora-im-chooser.desktop</Filename>
181 <Filename>fedora-release-notes.desktop</Filename>
182 <Filename>firewall-config.desktop</Filename>
183 <Filename>flash-player-properties.desktop</Filename>
184 <Filename>gconf-editor.desktop</Filename>
185 <Filename>gnome-abrt.desktop</Filename>
186 <Filename>fedora-abrt.desktop</Filename>
187 <Filename>gnome-orca.desktop</Filename>
188 <Filename>gnome-power-statistics.desktop</Filename>
189 <Filename>gnome-user-share-properties.desktop</Filename>
190 <Filename>ibus.desktop</Filename>
191 <Filename>ibus-daemon.desktop</Filename>
192 <Filename>ibus-setup-anthy.desktop</Filename>
193 <Filename>ibus-setup.desktop</Filename>
194 <Filename>ibus-setup-hangul.desktop</Filename>
195 <Filename>ibus-setup-libbopomofo.desktop</Filename>
196 <Filename>ibus-setup-libpinyin.desktop</Filename>
197 <Filename>ibus-setup-m17n.desktop</Filename>
198 <Filename>ibus-setup-typing-booster.desktop</Filename>
199 <Filename>im-chooser.desktop</Filename>
200 <Filename>itweb-settings.desktop</Filename>
201 <Filename>jhbuild.desktop</Filename>
202 <Filename>javaws.desktop</Filename>
203 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
204 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
205 <Filename>log4j-chainsaw.desktop</Filename>
206 <Filename>log4j-logfactor5.desktop</Filename>
207 <Filename>nm-connection-editor.desktop</Filename>
208 <Filename>orca.desktop</Filename>
209 <Filename>setroubleshoot.desktop</Filename>
210 <Filename>authconfig.desktop</Filename>
211 <Filename>system-config-date.desktop</Filename>
212 <Filename>system-config-firewall.desktop</Filename>
213 <Filename>system-config-keyboard.desktop</Filename>
214 <Filename>system-config-language.desktop</Filename>
215 <Filename>system-config-printer.desktop</Filename>
216 <Filename>system-config-users.desktop</Filename>
217 <Filename>vino-preferences.desktop</Filename>
218 </Include>
219 </Menu>
220
221 <!-- System Tools-->
222 <Menu>
223 <Name>System</Name>
224 <OnlyUnallocated/>
225 <Directory>System-Tools.directory</Directory>
226 <Include>
227 <And>
228 <Category>System</Category>
229 <Not><Category>Settings</Category></Not>
230 <Not><Filename>baobab.desktop</Filename></Not>
231 <Not><Filename>gnome-system-log.desktop</Filename></Not>
232 <Not><Filename>gnome-system-monitor.desktop</Filename></Not>
233 </And>
234 </Include>
235 </Menu> <!-- End System Tools -->
236
237 <!-- System Settings -->
238 <Menu>
239 <Name>System Settings</Name>
240 <Directory>X-GNOME-SystemSettings.directory</Directory>
241 <Include>
242 <Category>X-GNOME-Settings-Panel</Category>
243 </Include>
244 </Menu>
245
246 <!-- Utilities submenu -->
247 <Menu>
248 <Name>Utilities</Name>
249 <Directory>X-GNOME-Utilities.directory</Directory>
250 <Include>
251 <Filename>file-roller.desktop</Filename>
252 <Filename>gnome-calculator.desktop</Filename>
253 <Filename>gnome-font-viewer.desktop</Filename>
254 <Filename>gucharmap.desktop</Filename>
255 <Filename>seahorse.desktop</Filename>
256 <Filename>gnome-terminal.desktop</Filename>
257 <Filename>deja-dup-preferences.desktop</Filename>
258 <Filename>gnome-dictionary.desktop</Filename>
259 <Filename>evince.desktop</Filename>
260 <Filename>eog.desktop</Filename>
261 <Filename>baobab.desktop</Filename>
262 <Filename>gnome-system-log.desktop</Filename>
263 <Filename>gnome-system-monitor.desktop</Filename>
264 <Filename>vinagre.desktop</Filename>
265 <Filename>gnome-tweak-tool.desktop</Filename>
266 <Filename>gnome-disks.desktop</Filename>
267 <Filename>gnome-screenshot.desktop</Filename>
268 <Filename>gnome-yelp.desktop</Filename>
269 <Filename>yelp.desktop</Filename>
270 <Filename>gnome-control-center.desktop</Filename>
271 </Include>
272 </Menu>
273
274 <!-- Other -->
275 <Menu>
276 <Name>Other</Name>
277 <Directory>X-GNOME-Other.directory</Directory>
278 <OnlyUnallocated/>
279 <Include>
280 <And>
281 <Not><Category>Core</Category></Not>
282 <Not><Category>Screensaver</Category></Not>
283
284 <!-- Really Fedora ??? -->
285 <Not><Filename>gnome-eog.desktop</Filename></Not>
286 <Not><Filename>gnome-file-roller.desktop</Filename></Not>
287 <Not><Filename>gnome-gucharmap.desktop</Filename></Not>
288 <Not><Filename>gcalctool.desktop</Filename></Not>
289 </And>
290 </Include>
291 </Menu> <!-- End Other -->
292
293 <Layout>
294 <Merge type="menus" />
295 <Menuname>Other</Menuname>
296 <Merge type="files" />
297 </Layout>
298
299 </Menu> <!-- End Applications -->
+0
-412
.pc/09_app_install_entry.patch/layout/gnome-applications.menu less more
0 <!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
1 "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
2
3 <Menu>
4
5 <Name>Applications</Name>
6 <Directory>X-GNOME-Menu-Applications.directory</Directory>
7
8 <!-- Scan legacy dirs first, as later items take priority -->
9 <LegacyDir>/etc/X11/applnk</LegacyDir>
10 <LegacyDir>/usr/share/gnome/apps</LegacyDir>
11
12 <!-- Read standard .directory and .desktop file locations -->
13 <DefaultAppDirs/>
14 <DefaultDirectoryDirs/>
15
16 <!-- Read in overrides and child menus from applications-merged/ -->
17 <DefaultMergeDirs/>
18
19 <!-- Accessories submenu -->
20 <Menu>
21 <Name>Accessories</Name>
22 <OnlyUnallocated/>
23 <Directory>Utility.directory</Directory>
24 <Include>
25 <And>
26 <Category>Utility</Category>
27 <!-- Accessibility spec must have either the Utility or Settings
28 category, and we display an accessibility submenu already for
29 the ones that do not have Settings, so don't display accessibility
30 applications here -->
31 <Not><Category>Accessibility</Category></Not>
32 <Not><Category>System</Category></Not>
33
34 <!-- Also exclude everything we put in the X-GNOME-Utilities
35 whitelist -->
36 <Not><Filename>file-roller.desktop</Filename></Not>
37 <Not><Filename>gnome-file-roller.desktop</Filename></Not>
38 <Not><Filename>deja-dup-preferences.desktop</Filename></Not>
39 <Not><Filename>gnome-calculator.desktop</Filename></Not>
40 <Not><Filename>gcalctool.desktop</Filename></Not>
41 <Not><Filename>gucharmap.desktop</Filename></Not>
42 <Not><Filename>gnome-gucharmap.desktop</Filename></Not>
43 <Not><Filename>gnome-font-viewer.desktop</Filename></Not>
44 <Not><Filename>seahorse.desktop</Filename></Not>
45 <Not><Filename>gnome-terminal.desktop</Filename></Not>
46 <Not><Filename>gnome-tweak-tool.desktop</Filename></Not>
47 <Not><Filename>gnome-disks.desktop</Filename></Not>
48 <Not><Filename>gnome-screenshot.desktop</Filename></Not>
49 <Not><Filename>gnome-yelp.desktop</Filename></Not>
50 <Not><Filename>yelp.desktop</Filename></Not>
51 <Not><Filename>gnome-control-center.desktop</Filename></Not>
52 </And>
53 </Include>
54 </Menu> <!-- End Accessories -->
55
56
57 <!-- Accessibility submenu -->
58 <Menu>
59 <Name>Universal Access</Name>
60 <OnlyUnallocated/>
61 <Directory>Utility-Accessibility.directory</Directory>
62 <Include>
63 <And>
64 <Category>Accessibility</Category>
65 <Not><Category>Settings</Category></Not>
66 </And>
67 </Include>
68 </Menu> <!-- End Accessibility -->
69
70 <!-- Development Tools -->
71 <Menu>
72 <Name>Development</Name>
73 <OnlyUnallocated/>
74 <Directory>Development.directory</Directory>
75 <Include>
76 <And>
77 <Category>Development</Category>
78 </And>
79 <Filename>emacs.desktop</Filename>
80 </Include>
81 </Menu> <!-- End Development Tools -->
82
83 <!-- Education -->
84 <Menu>
85 <Name>Education</Name>
86 <Directory>Education.directory</Directory>
87 <Include>
88 <And>
89 <Category>Education</Category>
90 </And>
91 </Include>
92 </Menu> <!-- End Education -->
93
94 <!-- Games -->
95 <Menu>
96 <Name>Games</Name>
97 <Directory>Game.directory</Directory>
98 <Include>
99 <And>
100 <Category>Game</Category>
101 </And>
102 </Include>
103 </Menu> <!-- End Games -->
104
105 <!-- Graphics -->
106 <Menu>
107 <Name>Graphics</Name>
108 <OnlyUnallocated/>
109 <Directory>Graphics.directory</Directory>
110 <Include>
111 <And>
112 <Category>Graphics</Category>
113 <Not><Filename>eog.desktop</Filename></Not>
114 <Not><Filename>gnome-eog.desktop</Filename></Not>
115 <Not><Filename>evince.desktop</Filename></Not>
116 </And>
117 </Include>
118 </Menu> <!-- End Graphics -->
119
120 <!-- Internet -->
121 <Menu>
122 <Name>Internet</Name>
123 <OnlyUnallocated/>
124 <Directory>Network.directory</Directory>
125 <Include>
126 <And>
127 <Category>Network</Category>
128 <Not><Category>X-GNOME-WebApplication</Category></Not>
129 <Not><Filename>vinagre.desktop</Filename></Not>
130 </And>
131 </Include>
132 </Menu> <!-- End Internet -->
133
134 <!-- Web Applications -->
135 <Menu>
136 <Name>Web Applications</Name>
137 <Directory>X-GNOME-WebApplications.directory</Directory>
138 <Include>
139 <And>
140 <Category>Network</Category>
141 <Category>X-GNOME-WebApplication</Category>
142 </And>
143 </Include>
144 </Menu>
145
146 <!-- Multimedia -->
147 <Menu>
148 <Name>Multimedia</Name>
149 <OnlyUnallocated/>
150 <Directory>AudioVideo.directory</Directory>
151 <Include>
152 <And>
153 <Category>AudioVideo</Category>
154 </And>
155 </Include>
156 </Menu> <!-- End Multimedia -->
157
158 <!-- Office -->
159 <Menu>
160 <Name>Office</Name>
161 <OnlyUnallocated/>
162 <Directory>Office.directory</Directory>
163 <Include>
164 <And>
165 <Category>Office</Category>
166 <Not><Filename>evince.desktop</Filename></Not>
167 <Not><Filename>gnome-dictionary.desktop</Filename></Not>
168 </And>
169 </Include>
170 </Menu> <!-- End Office -->
171
172 <!-- Sundry -->
173 <Menu>
174 <Name>Sundry</Name>
175 <Directory>X-GNOME-Sundry.directory</Directory>
176 <Include>
177 <Filename>alacarte.desktop</Filename>
178 <Filename>caribou.desktop</Filename>
179 <Filename>dconf-editor.desktop</Filename>
180 <Filename>fedora-im-chooser.desktop</Filename>
181 <Filename>fedora-release-notes.desktop</Filename>
182 <Filename>firewall-config.desktop</Filename>
183 <Filename>flash-player-properties.desktop</Filename>
184 <Filename>gconf-editor.desktop</Filename>
185 <Filename>gnome-abrt.desktop</Filename>
186 <Filename>fedora-abrt.desktop</Filename>
187 <Filename>gnome-orca.desktop</Filename>
188 <Filename>gnome-power-statistics.desktop</Filename>
189 <Filename>gnome-user-share-properties.desktop</Filename>
190 <Filename>ibus.desktop</Filename>
191 <Filename>ibus-daemon.desktop</Filename>
192 <Filename>ibus-setup-anthy.desktop</Filename>
193 <Filename>ibus-setup.desktop</Filename>
194 <Filename>ibus-setup-hangul.desktop</Filename>
195 <Filename>ibus-setup-libbopomofo.desktop</Filename>
196 <Filename>ibus-setup-libpinyin.desktop</Filename>
197 <Filename>ibus-setup-m17n.desktop</Filename>
198 <Filename>ibus-setup-typing-booster.desktop</Filename>
199 <Filename>im-chooser.desktop</Filename>
200 <Filename>itweb-settings.desktop</Filename>
201 <Filename>jhbuild.desktop</Filename>
202 <Filename>javaws.desktop</Filename>
203 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
204 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
205 <Filename>log4j-chainsaw.desktop</Filename>
206 <Filename>log4j-logfactor5.desktop</Filename>
207 <Filename>nm-connection-editor.desktop</Filename>
208 <Filename>orca.desktop</Filename>
209 <Filename>setroubleshoot.desktop</Filename>
210 <Filename>authconfig.desktop</Filename>
211 <Filename>system-config-date.desktop</Filename>
212 <Filename>system-config-firewall.desktop</Filename>
213 <Filename>system-config-keyboard.desktop</Filename>
214 <Filename>system-config-language.desktop</Filename>
215 <Filename>system-config-printer.desktop</Filename>
216 <Filename>system-config-users.desktop</Filename>
217 <Filename>vino-preferences.desktop</Filename>
218 </Include>
219 </Menu>
220
221 <!-- System Tools-->
222 <Menu>
223 <Name>System</Name>
224 <OnlyUnallocated/>
225 <Directory>System-Tools.directory</Directory>
226 <Include>
227 <And>
228 <Category>System</Category>
229 <Not><Category>Settings</Category></Not>
230 <Not><Filename>baobab.desktop</Filename></Not>
231 <Not><Filename>gnome-system-log.desktop</Filename></Not>
232 <Not><Filename>gnome-system-monitor.desktop</Filename></Not>
233 </And>
234 </Include>
235 <Menu>
236 <Name>Preferences</Name>
237 <Directory>Settings.directory</Directory>
238 <Include>
239 <And>
240 <Category>Settings</Category>
241 <Not>
242 <Or>
243 <Category>System</Category>
244 <Category>X-GNOME-Settings-Panel</Category>
245 <Filename>alacarte.desktop</Filename>
246 <Filename>caribou.desktop</Filename>
247 <Filename>dconf-editor.desktop</Filename>
248 <Filename>fedora-im-chooser.desktop</Filename>
249 <Filename>fedora-release-notes.desktop</Filename>
250 <Filename>firewall-config.desktop</Filename>
251 <Filename>flash-player-properties.desktop</Filename>
252 <Filename>gconf-editor.desktop</Filename>
253 <Filename>gnome-abrt.desktop</Filename>
254 <Filename>fedora-abrt.desktop</Filename>
255 <Filename>gnome-orca.desktop</Filename>
256 <Filename>gnome-power-statistics.desktop</Filename>
257 <Filename>gnome-user-share-properties.desktop</Filename>
258 <Filename>ibus.desktop</Filename>
259 <Filename>ibus-daemon.desktop</Filename>
260 <Filename>ibus-setup-anthy.desktop</Filename>
261 <Filename>ibus-setup.desktop</Filename>
262 <Filename>ibus-setup-hangul.desktop</Filename>
263 <Filename>ibus-setup-libbopomofo.desktop</Filename>
264 <Filename>ibus-setup-libpinyin.desktop</Filename>
265 <Filename>ibus-setup-m17n.desktop</Filename>
266 <Filename>ibus-setup-typing-booster.desktop</Filename>
267 <Filename>im-chooser.desktop</Filename>
268 <Filename>itweb-settings.desktop</Filename>
269 <Filename>jhbuild.desktop</Filename>
270 <Filename>javaws.desktop</Filename>
271 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
272 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
273 <Filename>log4j-chainsaw.desktop</Filename>
274 <Filename>log4j-logfactor5.desktop</Filename>
275 <Filename>nm-connection-editor.desktop</Filename>
276 <Filename>orca.desktop</Filename>
277 <Filename>setroubleshoot.desktop</Filename>
278 <Filename>authconfig.desktop</Filename>
279 <Filename>system-config-date.desktop</Filename>
280 <Filename>system-config-firewall.desktop</Filename>
281 <Filename>system-config-keyboard.desktop</Filename>
282 <Filename>system-config-language.desktop</Filename>
283 <Filename>system-config-printer.desktop</Filename>
284 <Filename>system-config-users.desktop</Filename>
285 <Filename>vino-preferences.desktop</Filename>
286 </Or>
287 </Not>
288 </And>
289 </Include>
290 </Menu>
291 <Menu>
292 <Name>Administration</Name>
293 <Directory>Settings-System.directory</Directory>
294 <Include>
295 <And>
296 <Category>Settings</Category>
297 <Category>System</Category>
298 <Not>
299 <Or>
300 <Category>X-GNOME-Settings-Panel</Category>
301 <Filename>alacarte.desktop</Filename>
302 <Filename>caribou.desktop</Filename>
303 <Filename>dconf-editor.desktop</Filename>
304 <Filename>fedora-im-chooser.desktop</Filename>
305 <Filename>fedora-release-notes.desktop</Filename>
306 <Filename>firewall-config.desktop</Filename>
307 <Filename>flash-player-properties.desktop</Filename>
308 <Filename>gconf-editor.desktop</Filename>
309 <Filename>gnome-abrt.desktop</Filename>
310 <Filename>fedora-abrt.desktop</Filename>
311 <Filename>gnome-orca.desktop</Filename>
312 <Filename>gnome-power-statistics.desktop</Filename>
313 <Filename>gnome-user-share-properties.desktop</Filename>
314 <Filename>ibus.desktop</Filename>
315 <Filename>ibus-daemon.desktop</Filename>
316 <Filename>ibus-setup-anthy.desktop</Filename>
317 <Filename>ibus-setup.desktop</Filename>
318 <Filename>ibus-setup-hangul.desktop</Filename>
319 <Filename>ibus-setup-libbopomofo.desktop</Filename>
320 <Filename>ibus-setup-libpinyin.desktop</Filename>
321 <Filename>ibus-setup-m17n.desktop</Filename>
322 <Filename>ibus-setup-typing-booster.desktop</Filename>
323 <Filename>im-chooser.desktop</Filename>
324 <Filename>itweb-settings.desktop</Filename>
325 <Filename>jhbuild.desktop</Filename>
326 <Filename>javaws.desktop</Filename>
327 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
328 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
329 <Filename>log4j-chainsaw.desktop</Filename>
330 <Filename>log4j-logfactor5.desktop</Filename>
331 <Filename>nm-connection-editor.desktop</Filename>
332 <Filename>orca.desktop</Filename>
333 <Filename>setroubleshoot.desktop</Filename>
334 <Filename>authconfig.desktop</Filename>
335 <Filename>system-config-date.desktop</Filename>
336 <Filename>system-config-firewall.desktop</Filename>
337 <Filename>system-config-keyboard.desktop</Filename>
338 <Filename>system-config-language.desktop</Filename>
339 <Filename>system-config-printer.desktop</Filename>
340 <Filename>system-config-users.desktop</Filename>
341 <Filename>vino-preferences.desktop</Filename>
342 </Or>
343 </Not>
344 </And>
345 </Include>
346 </Menu>
347 </Menu> <!-- End System Tools -->
348
349 <!-- System Settings -->
350 <Menu>
351 <Name>System Settings</Name>
352 <Directory>X-GNOME-SystemSettings.directory</Directory>
353 <Include>
354 <Category>X-GNOME-Settings-Panel</Category>
355 </Include>
356 </Menu>
357
358 <!-- Utilities submenu -->
359 <Menu>
360 <Name>Utilities</Name>
361 <Directory>X-GNOME-Utilities.directory</Directory>
362 <Include>
363 <Filename>file-roller.desktop</Filename>
364 <Filename>gnome-calculator.desktop</Filename>
365 <Filename>gnome-font-viewer.desktop</Filename>
366 <Filename>gucharmap.desktop</Filename>
367 <Filename>seahorse.desktop</Filename>
368 <Filename>gnome-terminal.desktop</Filename>
369 <Filename>deja-dup-preferences.desktop</Filename>
370 <Filename>gnome-dictionary.desktop</Filename>
371 <Filename>evince.desktop</Filename>
372 <Filename>eog.desktop</Filename>
373 <Filename>baobab.desktop</Filename>
374 <Filename>gnome-system-log.desktop</Filename>
375 <Filename>gnome-system-monitor.desktop</Filename>
376 <Filename>vinagre.desktop</Filename>
377 <Filename>gnome-tweak-tool.desktop</Filename>
378 <Filename>gnome-disks.desktop</Filename>
379 <Filename>gnome-screenshot.desktop</Filename>
380 <Filename>gnome-yelp.desktop</Filename>
381 <Filename>yelp.desktop</Filename>
382 <Filename>gnome-control-center.desktop</Filename>
383 </Include>
384 </Menu>
385
386 <!-- Other -->
387 <Menu>
388 <Name>Other</Name>
389 <Directory>X-GNOME-Other.directory</Directory>
390 <OnlyUnallocated/>
391 <Include>
392 <And>
393 <Not><Category>Core</Category></Not>
394 <Not><Category>Screensaver</Category></Not>
395
396 <!-- Really Fedora ??? -->
397 <Not><Filename>gnome-eog.desktop</Filename></Not>
398 <Not><Filename>gnome-file-roller.desktop</Filename></Not>
399 <Not><Filename>gnome-gucharmap.desktop</Filename></Not>
400 <Not><Filename>gcalctool.desktop</Filename></Not>
401 </And>
402 </Include>
403 </Menu> <!-- End Other -->
404
405 <Layout>
406 <Merge type="menus" />
407 <Menuname>Other</Menuname>
408 <Merge type="files" />
409 </Layout>
410
411 </Menu> <!-- End Applications -->
+0
-424
.pc/09_games-menu.patch/layout/gnome-applications.menu less more
0 <!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
1 "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
2
3 <Menu>
4
5 <Name>Applications</Name>
6 <Directory>X-GNOME-Menu-Applications.directory</Directory>
7
8 <!-- Scan legacy dirs first, as later items take priority -->
9 <LegacyDir>/etc/X11/applnk</LegacyDir>
10 <LegacyDir>/usr/share/gnome/apps</LegacyDir>
11
12 <!-- Read standard .directory and .desktop file locations -->
13 <DefaultAppDirs/>
14 <DefaultDirectoryDirs/>
15
16 <!-- Read in overrides and child menus from applications-merged/ -->
17 <DefaultMergeDirs/>
18
19 <!-- Accessories submenu -->
20 <Menu>
21 <Name>Accessories</Name>
22 <OnlyUnallocated/>
23 <Directory>Utility.directory</Directory>
24 <Include>
25 <And>
26 <Category>Utility</Category>
27 <!-- Accessibility spec must have either the Utility or Settings
28 category, and we display an accessibility submenu already for
29 the ones that do not have Settings, so don't display accessibility
30 applications here -->
31 <Not><Category>Accessibility</Category></Not>
32 <Not><Category>System</Category></Not>
33
34 <!-- Also exclude everything we put in the X-GNOME-Utilities
35 whitelist -->
36 <Not><Filename>file-roller.desktop</Filename></Not>
37 <Not><Filename>gnome-file-roller.desktop</Filename></Not>
38 <Not><Filename>deja-dup-preferences.desktop</Filename></Not>
39 <Not><Filename>gnome-calculator.desktop</Filename></Not>
40 <Not><Filename>gcalctool.desktop</Filename></Not>
41 <Not><Filename>gucharmap.desktop</Filename></Not>
42 <Not><Filename>gnome-gucharmap.desktop</Filename></Not>
43 <Not><Filename>gnome-font-viewer.desktop</Filename></Not>
44 <Not><Filename>seahorse.desktop</Filename></Not>
45 <Not><Filename>gnome-terminal.desktop</Filename></Not>
46 <Not><Filename>gnome-tweak-tool.desktop</Filename></Not>
47 <Not><Filename>gnome-disks.desktop</Filename></Not>
48 <Not><Filename>gnome-screenshot.desktop</Filename></Not>
49 <Not><Filename>gnome-yelp.desktop</Filename></Not>
50 <Not><Filename>yelp.desktop</Filename></Not>
51 <Not><Filename>gnome-control-center.desktop</Filename></Not>
52 </And>
53 </Include>
54 </Menu> <!-- End Accessories -->
55
56
57 <!-- Accessibility submenu -->
58 <Menu>
59 <Name>Universal Access</Name>
60 <OnlyUnallocated/>
61 <Directory>Utility-Accessibility.directory</Directory>
62 <Include>
63 <And>
64 <Category>Accessibility</Category>
65 <Not><Category>Settings</Category></Not>
66 </And>
67 </Include>
68 </Menu> <!-- End Accessibility -->
69
70 <!-- Development Tools -->
71 <Menu>
72 <Name>Development</Name>
73 <OnlyUnallocated/>
74 <Directory>Development.directory</Directory>
75 <Include>
76 <And>
77 <Category>Development</Category>
78 </And>
79 <Filename>emacs.desktop</Filename>
80 </Include>
81 </Menu> <!-- End Development Tools -->
82
83 <!-- Education -->
84 <Menu>
85 <Name>Education</Name>
86 <Directory>Education.directory</Directory>
87 <Include>
88 <And>
89 <Category>Education</Category>
90 </And>
91 </Include>
92 </Menu> <!-- End Education -->
93
94 <!-- Games -->
95 <Menu>
96 <Name>Games</Name>
97 <Directory>Game.directory</Directory>
98 <Include>
99 <And>
100 <Category>Game</Category>
101 </And>
102 </Include>
103 </Menu> <!-- End Games -->
104
105 <!-- Graphics -->
106 <Menu>
107 <Name>Graphics</Name>
108 <OnlyUnallocated/>
109 <Directory>Graphics.directory</Directory>
110 <Include>
111 <And>
112 <Category>Graphics</Category>
113 <Not><Filename>eog.desktop</Filename></Not>
114 <Not><Filename>gnome-eog.desktop</Filename></Not>
115 <Not><Filename>evince.desktop</Filename></Not>
116 </And>
117 </Include>
118 </Menu> <!-- End Graphics -->
119
120 <!-- Internet -->
121 <Menu>
122 <Name>Internet</Name>
123 <OnlyUnallocated/>
124 <Directory>Network.directory</Directory>
125 <Include>
126 <And>
127 <Category>Network</Category>
128 <Not><Category>X-GNOME-WebApplication</Category></Not>
129 <Not><Filename>vinagre.desktop</Filename></Not>
130 </And>
131 </Include>
132 </Menu> <!-- End Internet -->
133
134 <!-- Web Applications -->
135 <Menu>
136 <Name>Web Applications</Name>
137 <Directory>X-GNOME-WebApplications.directory</Directory>
138 <Include>
139 <And>
140 <Category>Network</Category>
141 <Category>X-GNOME-WebApplication</Category>
142 </And>
143 </Include>
144 </Menu>
145
146 <!-- Multimedia -->
147 <Menu>
148 <Name>Multimedia</Name>
149 <OnlyUnallocated/>
150 <Directory>AudioVideo.directory</Directory>
151 <Include>
152 <And>
153 <Category>AudioVideo</Category>
154 </And>
155 </Include>
156 </Menu> <!-- End Multimedia -->
157
158 <!-- Office -->
159 <Menu>
160 <Name>Office</Name>
161 <OnlyUnallocated/>
162 <Directory>Office.directory</Directory>
163 <Include>
164 <And>
165 <Category>Office</Category>
166 <Not><Filename>evince.desktop</Filename></Not>
167 <Not><Filename>gnome-dictionary.desktop</Filename></Not>
168 </And>
169 </Include>
170 </Menu> <!-- End Office -->
171
172 <!-- Sundry -->
173 <Menu>
174 <Name>Sundry</Name>
175 <Directory>X-GNOME-Sundry.directory</Directory>
176 <Include>
177 <Filename>alacarte.desktop</Filename>
178 <Filename>caribou.desktop</Filename>
179 <Filename>dconf-editor.desktop</Filename>
180 <Filename>fedora-im-chooser.desktop</Filename>
181 <Filename>fedora-release-notes.desktop</Filename>
182 <Filename>firewall-config.desktop</Filename>
183 <Filename>flash-player-properties.desktop</Filename>
184 <Filename>gconf-editor.desktop</Filename>
185 <Filename>gnome-abrt.desktop</Filename>
186 <Filename>fedora-abrt.desktop</Filename>
187 <Filename>gnome-orca.desktop</Filename>
188 <Filename>gnome-power-statistics.desktop</Filename>
189 <Filename>gnome-user-share-properties.desktop</Filename>
190 <Filename>ibus.desktop</Filename>
191 <Filename>ibus-daemon.desktop</Filename>
192 <Filename>ibus-setup-anthy.desktop</Filename>
193 <Filename>ibus-setup.desktop</Filename>
194 <Filename>ibus-setup-hangul.desktop</Filename>
195 <Filename>ibus-setup-libbopomofo.desktop</Filename>
196 <Filename>ibus-setup-libpinyin.desktop</Filename>
197 <Filename>ibus-setup-m17n.desktop</Filename>
198 <Filename>ibus-setup-typing-booster.desktop</Filename>
199 <Filename>im-chooser.desktop</Filename>
200 <Filename>itweb-settings.desktop</Filename>
201 <Filename>jhbuild.desktop</Filename>
202 <Filename>javaws.desktop</Filename>
203 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
204 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
205 <Filename>log4j-chainsaw.desktop</Filename>
206 <Filename>log4j-logfactor5.desktop</Filename>
207 <Filename>nm-connection-editor.desktop</Filename>
208 <Filename>orca.desktop</Filename>
209 <Filename>setroubleshoot.desktop</Filename>
210 <Filename>authconfig.desktop</Filename>
211 <Filename>system-config-date.desktop</Filename>
212 <Filename>system-config-firewall.desktop</Filename>
213 <Filename>system-config-keyboard.desktop</Filename>
214 <Filename>system-config-language.desktop</Filename>
215 <Filename>system-config-printer.desktop</Filename>
216 <Filename>system-config-users.desktop</Filename>
217 <Filename>vino-preferences.desktop</Filename>
218 </Include>
219 </Menu>
220
221 <!-- System Tools-->
222 <Menu>
223 <Name>System</Name>
224 <OnlyUnallocated/>
225 <Directory>System-Tools.directory</Directory>
226 <Include>
227 <And>
228 <Category>System</Category>
229 <Not><Category>Settings</Category></Not>
230 <Not><Filename>baobab.desktop</Filename></Not>
231 <Not><Filename>gnome-system-log.desktop</Filename></Not>
232 <Not><Filename>gnome-system-monitor.desktop</Filename></Not>
233 </And>
234 </Include>
235 <Menu>
236 <Name>Preferences</Name>
237 <Directory>Settings.directory</Directory>
238 <Include>
239 <And>
240 <Category>Settings</Category>
241 <Not>
242 <Or>
243 <Category>System</Category>
244 <Category>X-GNOME-Settings-Panel</Category>
245 <Filename>alacarte.desktop</Filename>
246 <Filename>caribou.desktop</Filename>
247 <Filename>dconf-editor.desktop</Filename>
248 <Filename>fedora-im-chooser.desktop</Filename>
249 <Filename>fedora-release-notes.desktop</Filename>
250 <Filename>firewall-config.desktop</Filename>
251 <Filename>flash-player-properties.desktop</Filename>
252 <Filename>gconf-editor.desktop</Filename>
253 <Filename>gnome-abrt.desktop</Filename>
254 <Filename>fedora-abrt.desktop</Filename>
255 <Filename>gnome-orca.desktop</Filename>
256 <Filename>gnome-power-statistics.desktop</Filename>
257 <Filename>gnome-user-share-properties.desktop</Filename>
258 <Filename>ibus.desktop</Filename>
259 <Filename>ibus-daemon.desktop</Filename>
260 <Filename>ibus-setup-anthy.desktop</Filename>
261 <Filename>ibus-setup.desktop</Filename>
262 <Filename>ibus-setup-hangul.desktop</Filename>
263 <Filename>ibus-setup-libbopomofo.desktop</Filename>
264 <Filename>ibus-setup-libpinyin.desktop</Filename>
265 <Filename>ibus-setup-m17n.desktop</Filename>
266 <Filename>ibus-setup-typing-booster.desktop</Filename>
267 <Filename>im-chooser.desktop</Filename>
268 <Filename>itweb-settings.desktop</Filename>
269 <Filename>jhbuild.desktop</Filename>
270 <Filename>javaws.desktop</Filename>
271 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
272 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
273 <Filename>log4j-chainsaw.desktop</Filename>
274 <Filename>log4j-logfactor5.desktop</Filename>
275 <Filename>nm-connection-editor.desktop</Filename>
276 <Filename>orca.desktop</Filename>
277 <Filename>setroubleshoot.desktop</Filename>
278 <Filename>authconfig.desktop</Filename>
279 <Filename>system-config-date.desktop</Filename>
280 <Filename>system-config-firewall.desktop</Filename>
281 <Filename>system-config-keyboard.desktop</Filename>
282 <Filename>system-config-language.desktop</Filename>
283 <Filename>system-config-printer.desktop</Filename>
284 <Filename>system-config-users.desktop</Filename>
285 <Filename>vino-preferences.desktop</Filename>
286 </Or>
287 </Not>
288 </And>
289 </Include>
290 </Menu>
291 <Menu>
292 <Name>Administration</Name>
293 <Directory>Settings-System.directory</Directory>
294 <Include>
295 <And>
296 <Category>Settings</Category>
297 <Category>System</Category>
298 <Not>
299 <Or>
300 <Category>X-GNOME-Settings-Panel</Category>
301 <Filename>alacarte.desktop</Filename>
302 <Filename>caribou.desktop</Filename>
303 <Filename>dconf-editor.desktop</Filename>
304 <Filename>fedora-im-chooser.desktop</Filename>
305 <Filename>fedora-release-notes.desktop</Filename>
306 <Filename>firewall-config.desktop</Filename>
307 <Filename>flash-player-properties.desktop</Filename>
308 <Filename>gconf-editor.desktop</Filename>
309 <Filename>gnome-abrt.desktop</Filename>
310 <Filename>fedora-abrt.desktop</Filename>
311 <Filename>gnome-orca.desktop</Filename>
312 <Filename>gnome-power-statistics.desktop</Filename>
313 <Filename>gnome-user-share-properties.desktop</Filename>
314 <Filename>ibus.desktop</Filename>
315 <Filename>ibus-daemon.desktop</Filename>
316 <Filename>ibus-setup-anthy.desktop</Filename>
317 <Filename>ibus-setup.desktop</Filename>
318 <Filename>ibus-setup-hangul.desktop</Filename>
319 <Filename>ibus-setup-libbopomofo.desktop</Filename>
320 <Filename>ibus-setup-libpinyin.desktop</Filename>
321 <Filename>ibus-setup-m17n.desktop</Filename>
322 <Filename>ibus-setup-typing-booster.desktop</Filename>
323 <Filename>im-chooser.desktop</Filename>
324 <Filename>itweb-settings.desktop</Filename>
325 <Filename>jhbuild.desktop</Filename>
326 <Filename>javaws.desktop</Filename>
327 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
328 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
329 <Filename>log4j-chainsaw.desktop</Filename>
330 <Filename>log4j-logfactor5.desktop</Filename>
331 <Filename>nm-connection-editor.desktop</Filename>
332 <Filename>orca.desktop</Filename>
333 <Filename>setroubleshoot.desktop</Filename>
334 <Filename>authconfig.desktop</Filename>
335 <Filename>system-config-date.desktop</Filename>
336 <Filename>system-config-firewall.desktop</Filename>
337 <Filename>system-config-keyboard.desktop</Filename>
338 <Filename>system-config-language.desktop</Filename>
339 <Filename>system-config-printer.desktop</Filename>
340 <Filename>system-config-users.desktop</Filename>
341 <Filename>vino-preferences.desktop</Filename>
342 </Or>
343 </Not>
344 </And>
345 </Include>
346 </Menu>
347 </Menu> <!-- End System Tools -->
348
349 <!-- System Settings -->
350 <Menu>
351 <Name>System Settings</Name>
352 <Directory>X-GNOME-SystemSettings.directory</Directory>
353 <Include>
354 <Category>X-GNOME-Settings-Panel</Category>
355 </Include>
356 </Menu>
357
358 <!-- Utilities submenu -->
359 <Menu>
360 <Name>Utilities</Name>
361 <Directory>X-GNOME-Utilities.directory</Directory>
362 <Include>
363 <Filename>file-roller.desktop</Filename>
364 <Filename>gnome-calculator.desktop</Filename>
365 <Filename>gnome-font-viewer.desktop</Filename>
366 <Filename>gucharmap.desktop</Filename>
367 <Filename>seahorse.desktop</Filename>
368 <Filename>gnome-terminal.desktop</Filename>
369 <Filename>deja-dup-preferences.desktop</Filename>
370 <Filename>gnome-dictionary.desktop</Filename>
371 <Filename>evince.desktop</Filename>
372 <Filename>eog.desktop</Filename>
373 <Filename>baobab.desktop</Filename>
374 <Filename>gnome-system-log.desktop</Filename>
375 <Filename>gnome-system-monitor.desktop</Filename>
376 <Filename>vinagre.desktop</Filename>
377 <Filename>gnome-tweak-tool.desktop</Filename>
378 <Filename>gnome-disks.desktop</Filename>
379 <Filename>gnome-screenshot.desktop</Filename>
380 <Filename>gnome-yelp.desktop</Filename>
381 <Filename>yelp.desktop</Filename>
382 <Filename>gnome-control-center.desktop</Filename>
383 </Include>
384 </Menu>
385
386 <!-- Other -->
387 <Menu>
388 <Name>Other</Name>
389 <Directory>X-GNOME-Other.directory</Directory>
390 <OnlyUnallocated/>
391 <Include>
392 <And>
393 <Not><Category>Core</Category></Not>
394 <Not><Category>Screensaver</Category></Not>
395
396 <!-- Really Fedora ??? -->
397 <Not><Filename>gnome-eog.desktop</Filename></Not>
398 <Not><Filename>gnome-file-roller.desktop</Filename></Not>
399 <Not><Filename>gnome-gucharmap.desktop</Filename></Not>
400 <Not><Filename>gcalctool.desktop</Filename></Not>
401 </And>
402 </Include>
403 </Menu> <!-- End Other -->
404
405 <Layout>
406 <Merge type="menus" />
407 <Menuname>Other</Menuname>
408 <Merge type="files" />
409 </Layout>
410
411 <Include>
412 <Filename>ubuntu-software-center.desktop</Filename>
413 </Include>
414
415 <!-- Separator between menus and gnome-app-install -->
416 <Layout>
417 <Merge type="menus"/>
418 <Merge type="files"/>
419 <Separator/>
420 <Filename>ubuntu-software-center.desktop</Filename>
421 </Layout>
422
423 </Menu> <!-- End Applications -->
+0
-4
.pc/11_science-menu.patch/desktop-directories/Education.directory.in less more
0 [Desktop Entry]
1 _Name=Education
2 Icon=applications-science
3 Type=Directory
+0
-5
.pc/11_science-menu.patch/desktop-directories/Utility.directory.in less more
0 [Desktop Entry]
1 _Name=Accessories
2 _Comment=Desktop accessories
3 Icon=applications-accessories
4 Type=Directory
+0
-524
.pc/11_science-menu.patch/layout/gnome-applications.menu less more
0 <!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
1 "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
2
3 <Menu>
4
5 <Name>Applications</Name>
6 <Directory>X-GNOME-Menu-Applications.directory</Directory>
7
8 <!-- Scan legacy dirs first, as later items take priority -->
9 <LegacyDir>/etc/X11/applnk</LegacyDir>
10 <LegacyDir>/usr/share/gnome/apps</LegacyDir>
11
12 <!-- Read standard .directory and .desktop file locations -->
13 <DefaultAppDirs/>
14 <DefaultDirectoryDirs/>
15
16 <!-- Read in overrides and child menus from applications-merged/ -->
17 <DefaultMergeDirs/>
18
19 <!-- Accessories submenu -->
20 <Menu>
21 <Name>Accessories</Name>
22 <OnlyUnallocated/>
23 <Directory>Utility.directory</Directory>
24 <Include>
25 <And>
26 <Category>Utility</Category>
27 <!-- Accessibility spec must have either the Utility or Settings
28 category, and we display an accessibility submenu already for
29 the ones that do not have Settings, so don't display accessibility
30 applications here -->
31 <Not><Category>Accessibility</Category></Not>
32 <Not><Category>System</Category></Not>
33
34 <!-- Also exclude everything we put in the X-GNOME-Utilities
35 whitelist -->
36 <Not><Filename>file-roller.desktop</Filename></Not>
37 <Not><Filename>gnome-file-roller.desktop</Filename></Not>
38 <Not><Filename>deja-dup-preferences.desktop</Filename></Not>
39 <Not><Filename>gnome-calculator.desktop</Filename></Not>
40 <Not><Filename>gcalctool.desktop</Filename></Not>
41 <Not><Filename>gucharmap.desktop</Filename></Not>
42 <Not><Filename>gnome-gucharmap.desktop</Filename></Not>
43 <Not><Filename>gnome-font-viewer.desktop</Filename></Not>
44 <Not><Filename>seahorse.desktop</Filename></Not>
45 <Not><Filename>gnome-terminal.desktop</Filename></Not>
46 <Not><Filename>gnome-tweak-tool.desktop</Filename></Not>
47 <Not><Filename>gnome-disks.desktop</Filename></Not>
48 <Not><Filename>gnome-screenshot.desktop</Filename></Not>
49 <Not><Filename>gnome-yelp.desktop</Filename></Not>
50 <Not><Filename>yelp.desktop</Filename></Not>
51 <Not><Filename>gnome-control-center.desktop</Filename></Not>
52 </And>
53 </Include>
54 </Menu> <!-- End Accessories -->
55
56
57 <!-- Accessibility submenu -->
58 <Menu>
59 <Name>Universal Access</Name>
60 <OnlyUnallocated/>
61 <Directory>Utility-Accessibility.directory</Directory>
62 <Include>
63 <And>
64 <Category>Accessibility</Category>
65 <Not><Category>Settings</Category></Not>
66 </And>
67 </Include>
68 </Menu> <!-- End Accessibility -->
69
70 <!-- Development Tools -->
71 <Menu>
72 <Name>Development</Name>
73 <OnlyUnallocated/>
74 <Directory>Development.directory</Directory>
75 <Include>
76 <And>
77 <Category>Development</Category>
78 </And>
79 <Filename>emacs.desktop</Filename>
80 </Include>
81 </Menu> <!-- End Development Tools -->
82
83 <!-- Education -->
84 <Menu>
85 <Name>Education</Name>
86 <Directory>Education.directory</Directory>
87 <Include>
88 <And>
89 <Category>Education</Category>
90 </And>
91 </Include>
92 </Menu> <!-- End Education -->
93
94 <!-- Games -->
95 <Menu>
96 <Name>Games</Name>
97 <Directory>Game.directory</Directory>
98 <Include>
99 <And>
100 <Category>Game</Category>
101 <Not><Category>ActionGame</Category></Not>
102 <Not><Category>AdventureGame</Category></Not>
103 <Not><Category>ArcadeGame</Category></Not>
104 <Not><Category>BoardGame</Category></Not>
105 <Not><Category>BlocksGame</Category></Not>
106 <Not><Category>CardGame</Category></Not>
107 <Not><Category>KidsGame</Category></Not>
108 <Not><Category>LogicGame</Category></Not>
109 <Not><Category>Simulation</Category></Not>
110 <Not><Category>SportsGame</Category></Not>
111 <Not><Category>StrategyGame</Category></Not>
112 </And>
113 </Include>
114 <DefaultLayout inline="true" inline_limit="6" inline_header="false">
115 <Merge type="menus"/>
116 <Merge type="files"/>
117 </DefaultLayout>
118 <Menu>
119 <Name>Action</Name>
120 <Directory>ActionGames.directory</Directory>
121 <Include>
122 <Category>ActionGame</Category>
123 </Include>
124 </Menu>
125 <Menu>
126 <Name>Adventure</Name>
127 <Directory>AdventureGames.directory</Directory>
128 <Include>
129 <Category>AdventureGame</Category>
130 </Include>
131 </Menu>
132 <Menu>
133 <Name>Arcade</Name>
134 <Directory>ArcadeGames.directory</Directory>
135 <Include>
136 <Category>ArcadeGame</Category>
137 </Include>
138 </Menu>
139 <Menu>
140 <Name>Board</Name>
141 <Directory>BoardGames.directory</Directory>
142 <Include>
143 <Category>BoardGame</Category>
144 </Include>
145 </Menu>
146 <Menu>
147 <Name>Blocks</Name>
148 <Directory>BlocksGames.directory</Directory>
149 <Include>
150 <Category>BlocksGame</Category>
151 </Include>
152 </Menu>
153 <Menu>
154 <Name>Cards</Name>
155 <Directory>CardGames.directory</Directory>
156 <Include>
157 <Category>CardGame</Category>
158 </Include>
159 </Menu>
160 <Menu>
161 <Name>Kids</Name>
162 <Directory>KidsGames.directory</Directory>
163 <Include>
164 <Category>KidsGame</Category>
165 </Include>
166 </Menu>
167 <Menu>
168 <Name>Logic</Name>
169 <Directory>LogicGames.directory</Directory>
170 <Include>
171 <Category>LogicGame</Category>
172 </Include>
173 </Menu>
174 <Menu>
175 <Name>Role Playing</Name>
176 <Directory>RolePlayingGames.directory</Directory>
177 <Include>
178 <Category>RolePlaying</Category>
179 </Include>
180 </Menu>
181 <Menu>
182 <Name>Simulation</Name>
183 <Directory>SimulationGames.directory</Directory>
184 <Include>
185 <Category>Simulation</Category>
186 </Include>
187 </Menu>
188 <Menu>
189 <Name>Sports</Name>
190 <Directory>SportsGames.directory</Directory>
191 <Include>
192 <Category>SportsGame</Category>
193 </Include>
194 </Menu>
195 <Menu>
196 <Name>Strategy</Name>
197 <Directory>StrategyGames.directory</Directory>
198 <Include>
199 <Category>StrategyGame</Category>
200 </Include>
201 </Menu>
202 </Menu> <!-- End Games -->
203
204 <!-- Graphics -->
205 <Menu>
206 <Name>Graphics</Name>
207 <OnlyUnallocated/>
208 <Directory>Graphics.directory</Directory>
209 <Include>
210 <And>
211 <Category>Graphics</Category>
212 <Not><Filename>eog.desktop</Filename></Not>
213 <Not><Filename>gnome-eog.desktop</Filename></Not>
214 <Not><Filename>evince.desktop</Filename></Not>
215 </And>
216 </Include>
217 </Menu> <!-- End Graphics -->
218
219 <!-- Internet -->
220 <Menu>
221 <Name>Internet</Name>
222 <OnlyUnallocated/>
223 <Directory>Network.directory</Directory>
224 <Include>
225 <And>
226 <Category>Network</Category>
227 <Not><Category>X-GNOME-WebApplication</Category></Not>
228 <Not><Filename>vinagre.desktop</Filename></Not>
229 </And>
230 </Include>
231 </Menu> <!-- End Internet -->
232
233 <!-- Web Applications -->
234 <Menu>
235 <Name>Web Applications</Name>
236 <Directory>X-GNOME-WebApplications.directory</Directory>
237 <Include>
238 <And>
239 <Category>Network</Category>
240 <Category>X-GNOME-WebApplication</Category>
241 </And>
242 </Include>
243 </Menu>
244
245 <!-- Multimedia -->
246 <Menu>
247 <Name>Multimedia</Name>
248 <OnlyUnallocated/>
249 <Directory>AudioVideo.directory</Directory>
250 <Include>
251 <And>
252 <Category>AudioVideo</Category>
253 </And>
254 </Include>
255 </Menu> <!-- End Multimedia -->
256
257 <!-- Office -->
258 <Menu>
259 <Name>Office</Name>
260 <OnlyUnallocated/>
261 <Directory>Office.directory</Directory>
262 <Include>
263 <And>
264 <Category>Office</Category>
265 <Not><Filename>evince.desktop</Filename></Not>
266 <Not><Filename>gnome-dictionary.desktop</Filename></Not>
267 </And>
268 </Include>
269 </Menu> <!-- End Office -->
270
271 <!-- Sundry -->
272 <Menu>
273 <Name>Sundry</Name>
274 <Directory>X-GNOME-Sundry.directory</Directory>
275 <Include>
276 <Filename>alacarte.desktop</Filename>
277 <Filename>caribou.desktop</Filename>
278 <Filename>dconf-editor.desktop</Filename>
279 <Filename>fedora-im-chooser.desktop</Filename>
280 <Filename>fedora-release-notes.desktop</Filename>
281 <Filename>firewall-config.desktop</Filename>
282 <Filename>flash-player-properties.desktop</Filename>
283 <Filename>gconf-editor.desktop</Filename>
284 <Filename>gnome-abrt.desktop</Filename>
285 <Filename>fedora-abrt.desktop</Filename>
286 <Filename>gnome-orca.desktop</Filename>
287 <Filename>gnome-power-statistics.desktop</Filename>
288 <Filename>gnome-user-share-properties.desktop</Filename>
289 <Filename>ibus.desktop</Filename>
290 <Filename>ibus-daemon.desktop</Filename>
291 <Filename>ibus-setup-anthy.desktop</Filename>
292 <Filename>ibus-setup.desktop</Filename>
293 <Filename>ibus-setup-hangul.desktop</Filename>
294 <Filename>ibus-setup-libbopomofo.desktop</Filename>
295 <Filename>ibus-setup-libpinyin.desktop</Filename>
296 <Filename>ibus-setup-m17n.desktop</Filename>
297 <Filename>ibus-setup-typing-booster.desktop</Filename>
298 <Filename>im-chooser.desktop</Filename>
299 <Filename>itweb-settings.desktop</Filename>
300 <Filename>jhbuild.desktop</Filename>
301 <Filename>javaws.desktop</Filename>
302 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
303 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
304 <Filename>log4j-chainsaw.desktop</Filename>
305 <Filename>log4j-logfactor5.desktop</Filename>
306 <Filename>nm-connection-editor.desktop</Filename>
307 <Filename>orca.desktop</Filename>
308 <Filename>setroubleshoot.desktop</Filename>
309 <Filename>authconfig.desktop</Filename>
310 <Filename>system-config-date.desktop</Filename>
311 <Filename>system-config-firewall.desktop</Filename>
312 <Filename>system-config-keyboard.desktop</Filename>
313 <Filename>system-config-language.desktop</Filename>
314 <Filename>system-config-printer.desktop</Filename>
315 <Filename>system-config-users.desktop</Filename>
316 <Filename>vino-preferences.desktop</Filename>
317 </Include>
318 </Menu>
319
320 <!-- System Tools-->
321 <Menu>
322 <Name>System</Name>
323 <OnlyUnallocated/>
324 <Directory>System-Tools.directory</Directory>
325 <Include>
326 <And>
327 <Category>System</Category>
328 <Not><Category>Settings</Category></Not>
329 <Not><Category>Game</Category></Not>
330 <Not><Filename>baobab.desktop</Filename></Not>
331 <Not><Filename>gnome-system-log.desktop</Filename></Not>
332 <Not><Filename>gnome-system-monitor.desktop</Filename></Not>
333 </And>
334 </Include>
335 <Menu>
336 <Name>Preferences</Name>
337 <Directory>Settings.directory</Directory>
338 <Include>
339 <And>
340 <Category>Settings</Category>
341 <Not>
342 <Or>
343 <Category>System</Category>
344 <Category>X-GNOME-Settings-Panel</Category>
345 <Filename>alacarte.desktop</Filename>
346 <Filename>caribou.desktop</Filename>
347 <Filename>dconf-editor.desktop</Filename>
348 <Filename>fedora-im-chooser.desktop</Filename>
349 <Filename>fedora-release-notes.desktop</Filename>
350 <Filename>firewall-config.desktop</Filename>
351 <Filename>flash-player-properties.desktop</Filename>
352 <Filename>gconf-editor.desktop</Filename>
353 <Filename>gnome-abrt.desktop</Filename>
354 <Filename>fedora-abrt.desktop</Filename>
355 <Filename>gnome-orca.desktop</Filename>
356 <Filename>gnome-power-statistics.desktop</Filename>
357 <Filename>gnome-user-share-properties.desktop</Filename>
358 <Filename>ibus.desktop</Filename>
359 <Filename>ibus-daemon.desktop</Filename>
360 <Filename>ibus-setup-anthy.desktop</Filename>
361 <Filename>ibus-setup.desktop</Filename>
362 <Filename>ibus-setup-hangul.desktop</Filename>
363 <Filename>ibus-setup-libbopomofo.desktop</Filename>
364 <Filename>ibus-setup-libpinyin.desktop</Filename>
365 <Filename>ibus-setup-m17n.desktop</Filename>
366 <Filename>ibus-setup-typing-booster.desktop</Filename>
367 <Filename>im-chooser.desktop</Filename>
368 <Filename>itweb-settings.desktop</Filename>
369 <Filename>jhbuild.desktop</Filename>
370 <Filename>javaws.desktop</Filename>
371 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
372 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
373 <Filename>log4j-chainsaw.desktop</Filename>
374 <Filename>log4j-logfactor5.desktop</Filename>
375 <Filename>nm-connection-editor.desktop</Filename>
376 <Filename>orca.desktop</Filename>
377 <Filename>setroubleshoot.desktop</Filename>
378 <Filename>authconfig.desktop</Filename>
379 <Filename>system-config-date.desktop</Filename>
380 <Filename>system-config-firewall.desktop</Filename>
381 <Filename>system-config-keyboard.desktop</Filename>
382 <Filename>system-config-language.desktop</Filename>
383 <Filename>system-config-printer.desktop</Filename>
384 <Filename>system-config-users.desktop</Filename>
385 <Filename>vino-preferences.desktop</Filename>
386 </Or>
387 </Not>
388 </And>
389 </Include>
390 </Menu>
391 <Menu>
392 <Name>Administration</Name>
393 <Directory>Settings-System.directory</Directory>
394 <Include>
395 <And>
396 <Category>Settings</Category>
397 <Category>System</Category>
398 <Not>
399 <Or>
400 <Category>X-GNOME-Settings-Panel</Category>
401 <Filename>alacarte.desktop</Filename>
402 <Filename>caribou.desktop</Filename>
403 <Filename>dconf-editor.desktop</Filename>
404 <Filename>fedora-im-chooser.desktop</Filename>
405 <Filename>fedora-release-notes.desktop</Filename>
406 <Filename>firewall-config.desktop</Filename>
407 <Filename>flash-player-properties.desktop</Filename>
408 <Filename>gconf-editor.desktop</Filename>
409 <Filename>gnome-abrt.desktop</Filename>
410 <Filename>fedora-abrt.desktop</Filename>
411 <Filename>gnome-orca.desktop</Filename>
412 <Filename>gnome-power-statistics.desktop</Filename>
413 <Filename>gnome-user-share-properties.desktop</Filename>
414 <Filename>ibus.desktop</Filename>
415 <Filename>ibus-daemon.desktop</Filename>
416 <Filename>ibus-setup-anthy.desktop</Filename>
417 <Filename>ibus-setup.desktop</Filename>
418 <Filename>ibus-setup-hangul.desktop</Filename>
419 <Filename>ibus-setup-libbopomofo.desktop</Filename>
420 <Filename>ibus-setup-libpinyin.desktop</Filename>
421 <Filename>ibus-setup-m17n.desktop</Filename>
422 <Filename>ibus-setup-typing-booster.desktop</Filename>
423 <Filename>im-chooser.desktop</Filename>
424 <Filename>itweb-settings.desktop</Filename>
425 <Filename>jhbuild.desktop</Filename>
426 <Filename>javaws.desktop</Filename>
427 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
428 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
429 <Filename>log4j-chainsaw.desktop</Filename>
430 <Filename>log4j-logfactor5.desktop</Filename>
431 <Filename>nm-connection-editor.desktop</Filename>
432 <Filename>orca.desktop</Filename>
433 <Filename>setroubleshoot.desktop</Filename>
434 <Filename>authconfig.desktop</Filename>
435 <Filename>system-config-date.desktop</Filename>
436 <Filename>system-config-firewall.desktop</Filename>
437 <Filename>system-config-keyboard.desktop</Filename>
438 <Filename>system-config-language.desktop</Filename>
439 <Filename>system-config-printer.desktop</Filename>
440 <Filename>system-config-users.desktop</Filename>
441 <Filename>vino-preferences.desktop</Filename>
442 </Or>
443 </Not>
444 </And>
445 </Include>
446 </Menu>
447 </Menu> <!-- End System Tools -->
448
449 <!-- System Settings -->
450 <Menu>
451 <Name>System Settings</Name>
452 <Directory>X-GNOME-SystemSettings.directory</Directory>
453 <Include>
454 <Category>X-GNOME-Settings-Panel</Category>
455 </Include>
456 </Menu>
457
458 <!-- Utilities submenu -->
459 <Menu>
460 <Name>Utilities</Name>
461 <Directory>X-GNOME-Utilities.directory</Directory>
462 <Include>
463 <Filename>file-roller.desktop</Filename>
464 <Filename>gnome-calculator.desktop</Filename>
465 <Filename>gnome-font-viewer.desktop</Filename>
466 <Filename>gucharmap.desktop</Filename>
467 <Filename>seahorse.desktop</Filename>
468 <Filename>gnome-terminal.desktop</Filename>
469 <Filename>deja-dup-preferences.desktop</Filename>
470 <Filename>gnome-dictionary.desktop</Filename>
471 <Filename>evince.desktop</Filename>
472 <Filename>eog.desktop</Filename>
473 <Filename>baobab.desktop</Filename>
474 <Filename>gnome-system-log.desktop</Filename>
475 <Filename>gnome-system-monitor.desktop</Filename>
476 <Filename>vinagre.desktop</Filename>
477 <Filename>gnome-tweak-tool.desktop</Filename>
478 <Filename>gnome-disks.desktop</Filename>
479 <Filename>gnome-screenshot.desktop</Filename>
480 <Filename>gnome-yelp.desktop</Filename>
481 <Filename>yelp.desktop</Filename>
482 <Filename>gnome-control-center.desktop</Filename>
483 </Include>
484 </Menu>
485
486 <!-- Other -->
487 <Menu>
488 <Name>Other</Name>
489 <Directory>X-GNOME-Other.directory</Directory>
490 <OnlyUnallocated/>
491 <Include>
492 <And>
493 <Not><Category>Core</Category></Not>
494 <Not><Category>Screensaver</Category></Not>
495
496 <!-- Really Fedora ??? -->
497 <Not><Filename>gnome-eog.desktop</Filename></Not>
498 <Not><Filename>gnome-file-roller.desktop</Filename></Not>
499 <Not><Filename>gnome-gucharmap.desktop</Filename></Not>
500 <Not><Filename>gcalctool.desktop</Filename></Not>
501 </And>
502 </Include>
503 </Menu> <!-- End Other -->
504
505 <Layout>
506 <Merge type="menus" />
507 <Menuname>Other</Menuname>
508 <Merge type="files" />
509 </Layout>
510
511 <Include>
512 <Filename>ubuntu-software-center.desktop</Filename>
513 </Include>
514
515 <!-- Separator between menus and gnome-app-install -->
516 <Layout>
517 <Merge type="menus"/>
518 <Merge type="files"/>
519 <Separator/>
520 <Filename>ubuntu-software-center.desktop</Filename>
521 </Layout>
522
523 </Menu> <!-- End Applications -->
+0
-5
.pc/50_add-gcc-apps.patch/desktop-directories/X-GNOME-SystemSettings.directory.in less more
0 [Desktop Entry]
1 Name=System Settings
2 Icon=gnome-settings
3 Type=Directory
4 NoDisplay=true
+0
-17
.pc/70_ubuntu-directories.patch/po/POTFILES.in less more
0 # List of source files containing translatable strings.
1 # Please keep this file sorted alphabetically.
2 desktop-directories/AudioVideo.directory.in
3 desktop-directories/Development.directory.in
4 desktop-directories/Education.directory.in
5 desktop-directories/Game.directory.in
6 desktop-directories/Graphics.directory.in
7 desktop-directories/Network.directory.in
8 desktop-directories/Office.directory.in
9 desktop-directories/System-Tools.directory.in
10 desktop-directories/Utility-Accessibility.directory.in
11 desktop-directories/Utility.directory.in
12 desktop-directories/X-GNOME-Menu-Applications.directory.in
13 desktop-directories/X-GNOME-Other.directory.in
14 desktop-directories/X-GNOME-Sundry.directory.in
15 desktop-directories/X-GNOME-Utilities.directory.in
16 desktop-directories/X-GNOME-WebApplications.directory.in
+0
-11
.pc/applied-patches less more
0 01_default_prefix.patch
1 02_kill_debian_menu.patch
2 03_kde-legacydirs.patch
3 08_settings-menus.patch
4 09_app_install_entry.patch
5 09_games-menu.patch
6 11_science-menu.patch
7 50_add-gcc-apps.patch
8 70_ubuntu-directories.patch
9 git_restore_calculator.patch
10 ubuntu_gcc_translations.patch
+0
-537
.pc/git_restore_calculator.patch/layout/gnome-applications.menu less more
0 <!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
1 "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
2
3 <Menu>
4
5 <Name>Applications</Name>
6 <Directory>X-GNOME-Menu-Applications.directory</Directory>
7
8 <!-- Scan legacy dirs first, as later items take priority -->
9 <LegacyDir>/etc/X11/applnk</LegacyDir>
10 <LegacyDir>/usr/share/gnome/apps</LegacyDir>
11
12 <!-- Read standard .directory and .desktop file locations -->
13 <DefaultAppDirs/>
14 <DefaultDirectoryDirs/>
15
16 <!-- Read in overrides and child menus from applications-merged/ -->
17 <DefaultMergeDirs/>
18
19 <!-- Accessories submenu -->
20 <Menu>
21 <Name>Accessories</Name>
22 <OnlyUnallocated/>
23 <Directory>Utility.directory</Directory>
24 <Include>
25 <And>
26 <Category>Utility</Category>
27 <!-- Accessibility spec must have either the Utility or Settings
28 category, and we display an accessibility submenu already for
29 the ones that do not have Settings, so don't display accessibility
30 applications here -->
31 <Not><Category>Accessibility</Category></Not>
32 <Not><Category>System</Category></Not>
33
34 <!-- Also exclude everything we put in the X-GNOME-Utilities
35 whitelist -->
36 <Not><Filename>file-roller.desktop</Filename></Not>
37 <Not><Filename>gnome-file-roller.desktop</Filename></Not>
38 <Not><Filename>deja-dup-preferences.desktop</Filename></Not>
39 <Not><Filename>gnome-calculator.desktop</Filename></Not>
40 <Not><Filename>gcalctool.desktop</Filename></Not>
41 <Not><Filename>gucharmap.desktop</Filename></Not>
42 <Not><Filename>gnome-gucharmap.desktop</Filename></Not>
43 <Not><Filename>gnome-font-viewer.desktop</Filename></Not>
44 <Not><Filename>seahorse.desktop</Filename></Not>
45 <Not><Filename>gnome-terminal.desktop</Filename></Not>
46 <Not><Filename>gnome-tweak-tool.desktop</Filename></Not>
47 <Not><Filename>gnome-disks.desktop</Filename></Not>
48 <Not><Filename>gnome-screenshot.desktop</Filename></Not>
49 <Not><Filename>gnome-yelp.desktop</Filename></Not>
50 <Not><Filename>yelp.desktop</Filename></Not>
51 <Not><Filename>gnome-control-center.desktop</Filename></Not>
52 </And>
53 </Include>
54 </Menu> <!-- End Accessories -->
55
56
57 <!-- Accessibility submenu -->
58 <Menu>
59 <Name>Universal Access</Name>
60 <OnlyUnallocated/>
61 <Directory>Utility-Accessibility.directory</Directory>
62 <Include>
63 <And>
64 <Category>Accessibility</Category>
65 <Not><Category>Settings</Category></Not>
66 </And>
67 </Include>
68 </Menu> <!-- End Accessibility -->
69
70 <!-- Development Tools -->
71 <Menu>
72 <Name>Development</Name>
73 <OnlyUnallocated/>
74 <Directory>Development.directory</Directory>
75 <Include>
76 <And>
77 <Category>Development</Category>
78 </And>
79 <Filename>emacs.desktop</Filename>
80 </Include>
81 </Menu> <!-- End Development Tools -->
82
83 <!-- Education -->
84 <Menu>
85 <Name>Education</Name>
86 <Directory>Education.directory</Directory>
87 <Include>
88 <And>
89 <Category>Education</Category>
90 <Not><Category>Science</Category></Not>
91 </And>
92 </Include>
93 </Menu> <!-- End Education -->
94
95 <!-- Science -->
96 <Menu>
97 <Name>Science</Name>
98 <Directory>GnomeScience.directory</Directory>
99 <Include>
100 <And>
101 <Category>Education</Category>
102 <Category>Science</Category>
103 </And>
104 </Include>
105 </Menu> <!-- End Science -->
106
107 <!-- Games -->
108 <Menu>
109 <Name>Games</Name>
110 <Directory>Game.directory</Directory>
111 <Include>
112 <And>
113 <Category>Game</Category>
114 <Not><Category>ActionGame</Category></Not>
115 <Not><Category>AdventureGame</Category></Not>
116 <Not><Category>ArcadeGame</Category></Not>
117 <Not><Category>BoardGame</Category></Not>
118 <Not><Category>BlocksGame</Category></Not>
119 <Not><Category>CardGame</Category></Not>
120 <Not><Category>KidsGame</Category></Not>
121 <Not><Category>LogicGame</Category></Not>
122 <Not><Category>Simulation</Category></Not>
123 <Not><Category>SportsGame</Category></Not>
124 <Not><Category>StrategyGame</Category></Not>
125 </And>
126 </Include>
127 <DefaultLayout inline="true" inline_limit="6" inline_header="false">
128 <Merge type="menus"/>
129 <Merge type="files"/>
130 </DefaultLayout>
131 <Menu>
132 <Name>Action</Name>
133 <Directory>ActionGames.directory</Directory>
134 <Include>
135 <Category>ActionGame</Category>
136 </Include>
137 </Menu>
138 <Menu>
139 <Name>Adventure</Name>
140 <Directory>AdventureGames.directory</Directory>
141 <Include>
142 <Category>AdventureGame</Category>
143 </Include>
144 </Menu>
145 <Menu>
146 <Name>Arcade</Name>
147 <Directory>ArcadeGames.directory</Directory>
148 <Include>
149 <Category>ArcadeGame</Category>
150 </Include>
151 </Menu>
152 <Menu>
153 <Name>Board</Name>
154 <Directory>BoardGames.directory</Directory>
155 <Include>
156 <Category>BoardGame</Category>
157 </Include>
158 </Menu>
159 <Menu>
160 <Name>Blocks</Name>
161 <Directory>BlocksGames.directory</Directory>
162 <Include>
163 <Category>BlocksGame</Category>
164 </Include>
165 </Menu>
166 <Menu>
167 <Name>Cards</Name>
168 <Directory>CardGames.directory</Directory>
169 <Include>
170 <Category>CardGame</Category>
171 </Include>
172 </Menu>
173 <Menu>
174 <Name>Kids</Name>
175 <Directory>KidsGames.directory</Directory>
176 <Include>
177 <Category>KidsGame</Category>
178 </Include>
179 </Menu>
180 <Menu>
181 <Name>Logic</Name>
182 <Directory>LogicGames.directory</Directory>
183 <Include>
184 <Category>LogicGame</Category>
185 </Include>
186 </Menu>
187 <Menu>
188 <Name>Role Playing</Name>
189 <Directory>RolePlayingGames.directory</Directory>
190 <Include>
191 <Category>RolePlaying</Category>
192 </Include>
193 </Menu>
194 <Menu>
195 <Name>Simulation</Name>
196 <Directory>SimulationGames.directory</Directory>
197 <Include>
198 <Category>Simulation</Category>
199 </Include>
200 </Menu>
201 <Menu>
202 <Name>Sports</Name>
203 <Directory>SportsGames.directory</Directory>
204 <Include>
205 <Category>SportsGame</Category>
206 </Include>
207 </Menu>
208 <Menu>
209 <Name>Strategy</Name>
210 <Directory>StrategyGames.directory</Directory>
211 <Include>
212 <Category>StrategyGame</Category>
213 </Include>
214 </Menu>
215 </Menu> <!-- End Games -->
216
217 <!-- Graphics -->
218 <Menu>
219 <Name>Graphics</Name>
220 <OnlyUnallocated/>
221 <Directory>Graphics.directory</Directory>
222 <Include>
223 <And>
224 <Category>Graphics</Category>
225 <Not><Filename>eog.desktop</Filename></Not>
226 <Not><Filename>gnome-eog.desktop</Filename></Not>
227 <Not><Filename>evince.desktop</Filename></Not>
228 </And>
229 </Include>
230 </Menu> <!-- End Graphics -->
231
232 <!-- Internet -->
233 <Menu>
234 <Name>Internet</Name>
235 <OnlyUnallocated/>
236 <Directory>Network.directory</Directory>
237 <Include>
238 <And>
239 <Category>Network</Category>
240 <Not><Category>X-GNOME-WebApplication</Category></Not>
241 <Not><Filename>vinagre.desktop</Filename></Not>
242 </And>
243 </Include>
244 </Menu> <!-- End Internet -->
245
246 <!-- Web Applications -->
247 <Menu>
248 <Name>Web Applications</Name>
249 <Directory>X-GNOME-WebApplications.directory</Directory>
250 <Include>
251 <And>
252 <Category>Network</Category>
253 <Category>X-GNOME-WebApplication</Category>
254 </And>
255 </Include>
256 </Menu>
257
258 <!-- Multimedia -->
259 <Menu>
260 <Name>Multimedia</Name>
261 <OnlyUnallocated/>
262 <Directory>AudioVideo.directory</Directory>
263 <Include>
264 <And>
265 <Category>AudioVideo</Category>
266 </And>
267 </Include>
268 </Menu> <!-- End Multimedia -->
269
270 <!-- Office -->
271 <Menu>
272 <Name>Office</Name>
273 <OnlyUnallocated/>
274 <Directory>Office.directory</Directory>
275 <Include>
276 <And>
277 <Category>Office</Category>
278 <Not><Filename>evince.desktop</Filename></Not>
279 <Not><Filename>gnome-dictionary.desktop</Filename></Not>
280 </And>
281 </Include>
282 </Menu> <!-- End Office -->
283
284 <!-- Sundry -->
285 <Menu>
286 <Name>Sundry</Name>
287 <Directory>X-GNOME-Sundry.directory</Directory>
288 <Include>
289 <Filename>alacarte.desktop</Filename>
290 <Filename>caribou.desktop</Filename>
291 <Filename>dconf-editor.desktop</Filename>
292 <Filename>fedora-im-chooser.desktop</Filename>
293 <Filename>fedora-release-notes.desktop</Filename>
294 <Filename>firewall-config.desktop</Filename>
295 <Filename>flash-player-properties.desktop</Filename>
296 <Filename>gconf-editor.desktop</Filename>
297 <Filename>gnome-abrt.desktop</Filename>
298 <Filename>fedora-abrt.desktop</Filename>
299 <Filename>gnome-orca.desktop</Filename>
300 <Filename>gnome-power-statistics.desktop</Filename>
301 <Filename>gnome-user-share-properties.desktop</Filename>
302 <Filename>ibus.desktop</Filename>
303 <Filename>ibus-daemon.desktop</Filename>
304 <Filename>ibus-setup-anthy.desktop</Filename>
305 <Filename>ibus-setup.desktop</Filename>
306 <Filename>ibus-setup-hangul.desktop</Filename>
307 <Filename>ibus-setup-libbopomofo.desktop</Filename>
308 <Filename>ibus-setup-libpinyin.desktop</Filename>
309 <Filename>ibus-setup-m17n.desktop</Filename>
310 <Filename>ibus-setup-typing-booster.desktop</Filename>
311 <Filename>im-chooser.desktop</Filename>
312 <Filename>itweb-settings.desktop</Filename>
313 <Filename>jhbuild.desktop</Filename>
314 <Filename>javaws.desktop</Filename>
315 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
316 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
317 <Filename>log4j-chainsaw.desktop</Filename>
318 <Filename>log4j-logfactor5.desktop</Filename>
319 <Filename>nm-connection-editor.desktop</Filename>
320 <Filename>orca.desktop</Filename>
321 <Filename>setroubleshoot.desktop</Filename>
322 <Filename>authconfig.desktop</Filename>
323 <Filename>system-config-date.desktop</Filename>
324 <Filename>system-config-firewall.desktop</Filename>
325 <Filename>system-config-keyboard.desktop</Filename>
326 <Filename>system-config-language.desktop</Filename>
327 <Filename>system-config-printer.desktop</Filename>
328 <Filename>system-config-users.desktop</Filename>
329 <Filename>vino-preferences.desktop</Filename>
330 </Include>
331 </Menu>
332
333 <!-- System Tools-->
334 <Menu>
335 <Name>System</Name>
336 <OnlyUnallocated/>
337 <Directory>System-Tools.directory</Directory>
338 <Include>
339 <And>
340 <Category>System</Category>
341 <Not><Category>Settings</Category></Not>
342 <Not><Category>Game</Category></Not>
343 <Not><Filename>baobab.desktop</Filename></Not>
344 <Not><Filename>gnome-system-log.desktop</Filename></Not>
345 <Not><Filename>gnome-system-monitor.desktop</Filename></Not>
346 </And>
347 </Include>
348 <Menu>
349 <Name>Preferences</Name>
350 <Directory>Settings.directory</Directory>
351 <Include>
352 <And>
353 <Category>Settings</Category>
354 <Not>
355 <Or>
356 <Category>System</Category>
357 <Category>X-GNOME-Settings-Panel</Category>
358 <Filename>alacarte.desktop</Filename>
359 <Filename>caribou.desktop</Filename>
360 <Filename>dconf-editor.desktop</Filename>
361 <Filename>fedora-im-chooser.desktop</Filename>
362 <Filename>fedora-release-notes.desktop</Filename>
363 <Filename>firewall-config.desktop</Filename>
364 <Filename>flash-player-properties.desktop</Filename>
365 <Filename>gconf-editor.desktop</Filename>
366 <Filename>gnome-abrt.desktop</Filename>
367 <Filename>fedora-abrt.desktop</Filename>
368 <Filename>gnome-orca.desktop</Filename>
369 <Filename>gnome-power-statistics.desktop</Filename>
370 <Filename>gnome-user-share-properties.desktop</Filename>
371 <Filename>ibus.desktop</Filename>
372 <Filename>ibus-daemon.desktop</Filename>
373 <Filename>ibus-setup-anthy.desktop</Filename>
374 <Filename>ibus-setup.desktop</Filename>
375 <Filename>ibus-setup-hangul.desktop</Filename>
376 <Filename>ibus-setup-libbopomofo.desktop</Filename>
377 <Filename>ibus-setup-libpinyin.desktop</Filename>
378 <Filename>ibus-setup-m17n.desktop</Filename>
379 <Filename>ibus-setup-typing-booster.desktop</Filename>
380 <Filename>im-chooser.desktop</Filename>
381 <Filename>itweb-settings.desktop</Filename>
382 <Filename>jhbuild.desktop</Filename>
383 <Filename>javaws.desktop</Filename>
384 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
385 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
386 <Filename>log4j-chainsaw.desktop</Filename>
387 <Filename>log4j-logfactor5.desktop</Filename>
388 <Filename>nm-connection-editor.desktop</Filename>
389 <Filename>orca.desktop</Filename>
390 <Filename>setroubleshoot.desktop</Filename>
391 <Filename>authconfig.desktop</Filename>
392 <Filename>system-config-date.desktop</Filename>
393 <Filename>system-config-firewall.desktop</Filename>
394 <Filename>system-config-keyboard.desktop</Filename>
395 <Filename>system-config-language.desktop</Filename>
396 <Filename>system-config-printer.desktop</Filename>
397 <Filename>system-config-users.desktop</Filename>
398 <Filename>vino-preferences.desktop</Filename>
399 </Or>
400 </Not>
401 </And>
402 </Include>
403 </Menu>
404 <Menu>
405 <Name>Administration</Name>
406 <Directory>Settings-System.directory</Directory>
407 <Include>
408 <And>
409 <Category>Settings</Category>
410 <Category>System</Category>
411 <Not>
412 <Or>
413 <Category>X-GNOME-Settings-Panel</Category>
414 <Filename>alacarte.desktop</Filename>
415 <Filename>caribou.desktop</Filename>
416 <Filename>dconf-editor.desktop</Filename>
417 <Filename>fedora-im-chooser.desktop</Filename>
418 <Filename>fedora-release-notes.desktop</Filename>
419 <Filename>firewall-config.desktop</Filename>
420 <Filename>flash-player-properties.desktop</Filename>
421 <Filename>gconf-editor.desktop</Filename>
422 <Filename>gnome-abrt.desktop</Filename>
423 <Filename>fedora-abrt.desktop</Filename>
424 <Filename>gnome-orca.desktop</Filename>
425 <Filename>gnome-power-statistics.desktop</Filename>
426 <Filename>gnome-user-share-properties.desktop</Filename>
427 <Filename>ibus.desktop</Filename>
428 <Filename>ibus-daemon.desktop</Filename>
429 <Filename>ibus-setup-anthy.desktop</Filename>
430 <Filename>ibus-setup.desktop</Filename>
431 <Filename>ibus-setup-hangul.desktop</Filename>
432 <Filename>ibus-setup-libbopomofo.desktop</Filename>
433 <Filename>ibus-setup-libpinyin.desktop</Filename>
434 <Filename>ibus-setup-m17n.desktop</Filename>
435 <Filename>ibus-setup-typing-booster.desktop</Filename>
436 <Filename>im-chooser.desktop</Filename>
437 <Filename>itweb-settings.desktop</Filename>
438 <Filename>jhbuild.desktop</Filename>
439 <Filename>javaws.desktop</Filename>
440 <Filename>java-1.7.0-openjdk-jconsole.desktop</Filename>
441 <Filename>java-1.7.0-openjdk-policytool.desktop</Filename>
442 <Filename>log4j-chainsaw.desktop</Filename>
443 <Filename>log4j-logfactor5.desktop</Filename>
444 <Filename>nm-connection-editor.desktop</Filename>
445 <Filename>orca.desktop</Filename>
446 <Filename>setroubleshoot.desktop</Filename>
447 <Filename>authconfig.desktop</Filename>
448 <Filename>system-config-date.desktop</Filename>
449 <Filename>system-config-firewall.desktop</Filename>
450 <Filename>system-config-keyboard.desktop</Filename>
451 <Filename>system-config-language.desktop</Filename>
452 <Filename>system-config-printer.desktop</Filename>
453 <Filename>system-config-users.desktop</Filename>
454 <Filename>vino-preferences.desktop</Filename>
455 </Or>
456 </Not>
457 </And>
458 </Include>
459 </Menu>
460 </Menu> <!-- End System Tools -->
461
462 <!-- System Settings -->
463 <Menu>
464 <Name>System Settings</Name>
465 <Directory>X-GNOME-SystemSettings.directory</Directory>
466 <Include>
467 <Category>X-GNOME-Settings-Panel</Category>
468 </Include>
469 </Menu>
470
471 <!-- Utilities submenu -->
472 <Menu>
473 <Name>Utilities</Name>
474 <Directory>X-GNOME-Utilities.directory</Directory>
475 <Include>
476 <Filename>file-roller.desktop</Filename>
477 <Filename>gnome-calculator.desktop</Filename>
478 <Filename>gnome-font-viewer.desktop</Filename>
479 <Filename>gucharmap.desktop</Filename>
480 <Filename>seahorse.desktop</Filename>
481 <Filename>gnome-terminal.desktop</Filename>
482 <Filename>deja-dup-preferences.desktop</Filename>
483 <Filename>gnome-dictionary.desktop</Filename>
484 <Filename>evince.desktop</Filename>
485 <Filename>eog.desktop</Filename>
486 <Filename>baobab.desktop</Filename>
487 <Filename>gnome-system-log.desktop</Filename>
488 <Filename>gnome-system-monitor.desktop</Filename>
489 <Filename>vinagre.desktop</Filename>
490 <Filename>gnome-tweak-tool.desktop</Filename>
491 <Filename>gnome-disks.desktop</Filename>
492 <Filename>gnome-screenshot.desktop</Filename>
493 <Filename>gnome-yelp.desktop</Filename>
494 <Filename>yelp.desktop</Filename>
495 <Filename>gnome-control-center.desktop</Filename>
496 </Include>
497 </Menu>
498
499 <!-- Other -->
500 <Menu>
501 <Name>Other</Name>
502 <Directory>X-GNOME-Other.directory</Directory>
503 <OnlyUnallocated/>
504 <Include>
505 <And>
506 <Not><Category>Core</Category></Not>
507 <Not><Category>Screensaver</Category></Not>
508
509 <!-- Really Fedora ??? -->
510 <Not><Filename>gnome-eog.desktop</Filename></Not>
511 <Not><Filename>gnome-file-roller.desktop</Filename></Not>
512 <Not><Filename>gnome-gucharmap.desktop</Filename></Not>
513 <Not><Filename>gcalctool.desktop</Filename></Not>
514 </And>
515 </Include>
516 </Menu> <!-- End Other -->
517
518 <Layout>
519 <Merge type="menus" />
520 <Menuname>Other</Menuname>
521 <Merge type="files" />
522 </Layout>
523
524 <Include>
525 <Filename>ubuntu-software-center.desktop</Filename>
526 </Include>
527
528 <!-- Separator between menus and gnome-app-install -->
529 <Layout>
530 <Merge type="menus"/>
531 <Merge type="files"/>
532 <Separator/>
533 <Filename>ubuntu-software-center.desktop</Filename>
534 </Layout>
535
536 </Menu> <!-- End Applications -->
+0
-0
.pc/ubuntu_gcc_translations.patch/desktop-directories/Hardware.directory.in less more
(Empty file)
+0
-29
.pc/ubuntu_gcc_translations.patch/desktop-directories/Makefile.am less more
0 directorydir = $(datadir)/desktop-directories
1
2 directory_in_files = \
3 AudioVideo.directory.in \
4 Development.directory.in \
5 Education.directory.in \
6 Game.directory.in \
7 Graphics.directory.in \
8 Network.directory.in \
9 Office.directory.in \
10 System-Tools.directory.in \
11 Utility.directory.in \
12 Utility-Accessibility.directory.in \
13 X-GNOME-Other.directory.in \
14 X-GNOME-Menu-Applications.directory.in \
15 X-GNOME-Sundry.directory.in \
16 X-GNOME-Utilities.directory.in \
17 X-GNOME-WebApplications.directory.in \
18 X-GNOME-SystemSettings.directory.in
19
20 directory_DATA = $(directory_in_files:.directory.in=.directory)
21
22 @INTLTOOL_DIRECTORY_RULE@
23
24 EXTRA_DIST= $(directory_in_files)
25
26 DISTCLEANFILES = $(directory_DATA)
27
28 -include $(top_srcdir)/git.mk
+0
-524
.pc/ubuntu_gcc_translations.patch/desktop-directories/Makefile.in less more
0 # Makefile.in generated by automake 1.13.1 from Makefile.am.
1 # @configure_input@
2
3 # Copyright (C) 1994-2012 Free Software Foundation, Inc.
4
5 # This Makefile.in is free software; the Free Software Foundation
6 # gives unlimited permission to copy and/or distribute it,
7 # with or without modifications, as long as this notice is preserved.
8
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
11 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
12 # PARTICULAR PURPOSE.
13
14 @SET_MAKE@
15
16 VPATH = @srcdir@
17 am__make_dryrun = \
18 { \
19 am__dry=no; \
20 case $$MAKEFLAGS in \
21 *\\[\ \ ]*) \
22 echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
23 | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
24 *) \
25 for am__flg in $$MAKEFLAGS; do \
26 case $$am__flg in \
27 *=*|--*) ;; \
28 *n*) am__dry=yes; break;; \
29 esac; \
30 done;; \
31 esac; \
32 test $$am__dry = yes; \
33 }
34 pkgdatadir = $(datadir)/@PACKAGE@
35 pkgincludedir = $(includedir)/@PACKAGE@
36 pkglibdir = $(libdir)/@PACKAGE@
37 pkglibexecdir = $(libexecdir)/@PACKAGE@
38 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
39 install_sh_DATA = $(install_sh) -c -m 644
40 install_sh_PROGRAM = $(install_sh) -c
41 install_sh_SCRIPT = $(install_sh) -c
42 INSTALL_HEADER = $(INSTALL_DATA)
43 transform = $(program_transform_name)
44 NORMAL_INSTALL = :
45 PRE_INSTALL = :
46 POST_INSTALL = :
47 NORMAL_UNINSTALL = :
48 PRE_UNINSTALL = :
49 POST_UNINSTALL = :
50 build_triplet = @build@
51 host_triplet = @host@
52 subdir = desktop-directories
53 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
54 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
55 am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \
56 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
57 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
58 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
59 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
60 $(ACLOCAL_M4)
61 mkinstalldirs = $(install_sh) -d
62 CONFIG_HEADER = $(top_builddir)/config.h
63 CONFIG_CLEAN_FILES =
64 CONFIG_CLEAN_VPATH_FILES =
65 AM_V_P = $(am__v_P_@AM_V@)
66 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
67 am__v_P_0 = false
68 am__v_P_1 = :
69 AM_V_GEN = $(am__v_GEN_@AM_V@)
70 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
71 am__v_GEN_0 = @echo " GEN " $@;
72 am__v_GEN_1 =
73 AM_V_at = $(am__v_at_@AM_V@)
74 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
75 am__v_at_0 = @
76 am__v_at_1 =
77 SOURCES =
78 DIST_SOURCES =
79 am__can_run_installinfo = \
80 case $$AM_UPDATE_INFO_DIR in \
81 n|no|NO) false;; \
82 *) (install-info --version) >/dev/null 2>&1;; \
83 esac
84 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
85 am__vpath_adj = case $$p in \
86 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
87 *) f=$$p;; \
88 esac;
89 am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
90 am__install_max = 40
91 am__nobase_strip_setup = \
92 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
93 am__nobase_strip = \
94 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
95 am__nobase_list = $(am__nobase_strip_setup); \
96 for p in $$list; do echo "$$p $$p"; done | \
97 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
98 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
99 if (++n[$$2] == $(am__install_max)) \
100 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
101 END { for (dir in files) print dir, files[dir] }'
102 am__base_list = \
103 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
104 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
105 am__uninstall_files_from_dir = { \
106 test -z "$$files" \
107 || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
108 || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
109 $(am__cd) "$$dir" && rm -f $$files; }; \
110 }
111 am__installdirs = "$(DESTDIR)$(directorydir)"
112 DATA = $(directory_DATA)
113 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
114 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
115 ACLOCAL = @ACLOCAL@
116 ALL_LINGUAS = @ALL_LINGUAS@
117 AMTAR = @AMTAR@
118 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
119 AR = @AR@
120 AS = @AS@
121 AUTOCONF = @AUTOCONF@
122 AUTOHEADER = @AUTOHEADER@
123 AUTOMAKE = @AUTOMAKE@
124 AWK = @AWK@
125 CATALOGS = @CATALOGS@
126 CATOBJEXT = @CATOBJEXT@
127 CC = @CC@
128 CCDEPMODE = @CCDEPMODE@
129 CFLAGS = @CFLAGS@
130 CPP = @CPP@
131 CPPFLAGS = @CPPFLAGS@
132 CYGPATH_W = @CYGPATH_W@
133 DATADIRNAME = @DATADIRNAME@
134 DEBUG_CFLAGS = @DEBUG_CFLAGS@
135 DEFS = @DEFS@
136 DEPDIR = @DEPDIR@
137 DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
138 DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
139 DLLTOOL = @DLLTOOL@
140 DSYMUTIL = @DSYMUTIL@
141 DUMPBIN = @DUMPBIN@
142 ECHO_C = @ECHO_C@
143 ECHO_N = @ECHO_N@
144 ECHO_T = @ECHO_T@
145 EGREP = @EGREP@
146 EXEEXT = @EXEEXT@
147 FGREP = @FGREP@
148 GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
149 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
150 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
151 GMOFILES = @GMOFILES@
152 GMSGFMT = @GMSGFMT@
153 GREP = @GREP@
154 INSTALL = @INSTALL@
155 INSTALL_DATA = @INSTALL_DATA@
156 INSTALL_PROGRAM = @INSTALL_PROGRAM@
157 INSTALL_SCRIPT = @INSTALL_SCRIPT@
158 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
159 INSTOBJEXT = @INSTOBJEXT@
160 INTLLIBS = @INTLLIBS@
161 INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
162 INTLTOOL_MERGE = @INTLTOOL_MERGE@
163 INTLTOOL_PERL = @INTLTOOL_PERL@
164 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
165 INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
166 INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
167 INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
168 INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
169 INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
170 INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
171 INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
172 INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
173 INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
174 INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
175 INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
176 INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
177 LD = @LD@
178 LDFLAGS = @LDFLAGS@
179 LIBOBJS = @LIBOBJS@
180 LIBS = @LIBS@
181 LIBTOOL = @LIBTOOL@
182 LIB_MENU_LT_VERSION = @LIB_MENU_LT_VERSION@
183 LIPO = @LIPO@
184 LN_S = @LN_S@
185 LTLIBOBJS = @LTLIBOBJS@
186 MAINT = @MAINT@
187 MAKEINFO = @MAKEINFO@
188 MANIFEST_TOOL = @MANIFEST_TOOL@
189 MKDIR_P = @MKDIR_P@
190 MKINSTALLDIRS = @MKINSTALLDIRS@
191 MSGFMT = @MSGFMT@
192 MSGFMT_OPTS = @MSGFMT_OPTS@
193 MSGMERGE = @MSGMERGE@
194 NM = @NM@
195 NMEDIT = @NMEDIT@
196 OBJDUMP = @OBJDUMP@
197 OBJEXT = @OBJEXT@
198 OTOOL = @OTOOL@
199 OTOOL64 = @OTOOL64@
200 PACKAGE = @PACKAGE@
201 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
202 PACKAGE_NAME = @PACKAGE_NAME@
203 PACKAGE_STRING = @PACKAGE_STRING@
204 PACKAGE_TARNAME = @PACKAGE_TARNAME@
205 PACKAGE_URL = @PACKAGE_URL@
206 PACKAGE_VERSION = @PACKAGE_VERSION@
207 PATH_SEPARATOR = @PATH_SEPARATOR@
208 PKG_CONFIG = @PKG_CONFIG@
209 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
210 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
211 POFILES = @POFILES@
212 POSUB = @POSUB@
213 PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
214 PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
215 RANLIB = @RANLIB@
216 SED = @SED@
217 SET_MAKE = @SET_MAKE@
218 SHELL = @SHELL@
219 STRIP = @STRIP@
220 USE_NLS = @USE_NLS@
221 VERSION = @VERSION@
222 WARN_CFLAGS = @WARN_CFLAGS@
223 XGETTEXT = @XGETTEXT@
224 abs_builddir = @abs_builddir@
225 abs_srcdir = @abs_srcdir@
226 abs_top_builddir = @abs_top_builddir@
227 abs_top_srcdir = @abs_top_srcdir@
228 ac_ct_AR = @ac_ct_AR@
229 ac_ct_CC = @ac_ct_CC@
230 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
231 am__include = @am__include@
232 am__leading_dot = @am__leading_dot@
233 am__quote = @am__quote@
234 am__tar = @am__tar@
235 am__untar = @am__untar@
236 bindir = @bindir@
237 build = @build@
238 build_alias = @build_alias@
239 build_cpu = @build_cpu@
240 build_os = @build_os@
241 build_vendor = @build_vendor@
242 builddir = @builddir@
243 datadir = @datadir@
244 datarootdir = @datarootdir@
245 docdir = @docdir@
246 dvidir = @dvidir@
247 exec_prefix = @exec_prefix@
248 host = @host@
249 host_alias = @host_alias@
250 host_cpu = @host_cpu@
251 host_os = @host_os@
252 host_vendor = @host_vendor@
253 htmldir = @htmldir@
254 includedir = @includedir@
255 infodir = @infodir@
256 install_sh = @install_sh@
257 intltool__v_merge_options_ = @intltool__v_merge_options_@
258 intltool__v_merge_options_0 = @intltool__v_merge_options_0@
259 libdir = @libdir@
260 libexecdir = @libexecdir@
261 localedir = @localedir@
262 localstatedir = @localstatedir@
263 mandir = @mandir@
264 mkdir_p = @mkdir_p@
265 oldincludedir = @oldincludedir@
266 pdfdir = @pdfdir@
267 prefix = @prefix@
268 program_transform_name = @program_transform_name@
269 psdir = @psdir@
270 sbindir = @sbindir@
271 sharedstatedir = @sharedstatedir@
272 srcdir = @srcdir@
273 sysconfdir = @sysconfdir@
274 target_alias = @target_alias@
275 top_build_prefix = @top_build_prefix@
276 top_builddir = @top_builddir@
277 top_srcdir = @top_srcdir@
278 directorydir = $(datadir)/desktop-directories
279 directory_in_files = \
280 AudioVideo.directory.in \
281 Development.directory.in \
282 Education.directory.in \
283 Game.directory.in \
284 Graphics.directory.in \
285 Network.directory.in \
286 Office.directory.in \
287 System-Tools.directory.in \
288 Utility.directory.in \
289 Utility-Accessibility.directory.in \
290 X-GNOME-Other.directory.in \
291 X-GNOME-Menu-Applications.directory.in \
292 X-GNOME-Sundry.directory.in \
293 X-GNOME-Utilities.directory.in \
294 X-GNOME-WebApplications.directory.in \
295 X-GNOME-SystemSettings.directory.in
296
297 directory_DATA = $(directory_in_files:.directory.in=.directory)
298 EXTRA_DIST = $(directory_in_files)
299 DISTCLEANFILES = $(directory_DATA)
300 all: all-am
301
302 .SUFFIXES:
303 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
304 @for dep in $?; do \
305 case '$(am__configure_deps)' in \
306 *$$dep*) \
307 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
308 && { if test -f $@; then exit 0; else break; fi; }; \
309 exit 1;; \
310 esac; \
311 done; \
312 echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign desktop-directories/Makefile'; \
313 $(am__cd) $(top_srcdir) && \
314 $(AUTOMAKE) --foreign desktop-directories/Makefile
315 .PRECIOUS: Makefile
316 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
317 @case '$?' in \
318 *config.status*) \
319 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
320 *) \
321 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
322 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
323 esac;
324
325 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
326 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
327
328 $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
329 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
330 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
331 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
332 $(am__aclocal_m4_deps):
333
334 mostlyclean-libtool:
335 -rm -f *.lo
336
337 clean-libtool:
338 -rm -rf .libs _libs
339 install-directoryDATA: $(directory_DATA)
340 @$(NORMAL_INSTALL)
341 @list='$(directory_DATA)'; test -n "$(directorydir)" || list=; \
342 if test -n "$$list"; then \
343 echo " $(MKDIR_P) '$(DESTDIR)$(directorydir)'"; \
344 $(MKDIR_P) "$(DESTDIR)$(directorydir)" || exit 1; \
345 fi; \
346 for p in $$list; do \
347 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
348 echo "$$d$$p"; \
349 done | $(am__base_list) | \
350 while read files; do \
351 echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(directorydir)'"; \
352 $(INSTALL_DATA) $$files "$(DESTDIR)$(directorydir)" || exit $$?; \
353 done
354
355 uninstall-directoryDATA:
356 @$(NORMAL_UNINSTALL)
357 @list='$(directory_DATA)'; test -n "$(directorydir)" || list=; \
358 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
359 dir='$(DESTDIR)$(directorydir)'; $(am__uninstall_files_from_dir)
360 tags TAGS:
361
362 ctags CTAGS:
363
364 cscope cscopelist:
365
366
367 distdir: $(DISTFILES)
368 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
369 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
370 list='$(DISTFILES)'; \
371 dist_files=`for file in $$list; do echo $$file; done | \
372 sed -e "s|^$$srcdirstrip/||;t" \
373 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
374 case $$dist_files in \
375 */*) $(MKDIR_P) `echo "$$dist_files" | \
376 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
377 sort -u` ;; \
378 esac; \
379 for file in $$dist_files; do \
380 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
381 if test -d $$d/$$file; then \
382 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
383 if test -d "$(distdir)/$$file"; then \
384 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
385 fi; \
386 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
387 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
388 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
389 fi; \
390 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
391 else \
392 test -f "$(distdir)/$$file" \
393 || cp -p $$d/$$file "$(distdir)/$$file" \
394 || exit 1; \
395 fi; \
396 done
397 check-am: all-am
398 check: check-am
399 all-am: Makefile $(DATA)
400 installdirs:
401 for dir in "$(DESTDIR)$(directorydir)"; do \
402 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
403 done
404 install: install-am
405 install-exec: install-exec-am
406 install-data: install-data-am
407 uninstall: uninstall-am
408
409 install-am: all-am
410 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
411
412 installcheck: installcheck-am
413 install-strip:
414 if test -z '$(STRIP)'; then \
415 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
416 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
417 install; \
418 else \
419 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
420 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
421 "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
422 fi
423 mostlyclean-generic:
424
425 clean-generic:
426
427 distclean-generic:
428 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
429 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
430 -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
431
432 maintainer-clean-generic:
433 @echo "This command is intended for maintainers to use"
434 @echo "it deletes files that may require special tools to rebuild."
435 clean: clean-am
436
437 clean-am: clean-generic clean-libtool mostlyclean-am
438
439 distclean: distclean-am
440 -rm -f Makefile
441 distclean-am: clean-am distclean-generic
442
443 dvi: dvi-am
444
445 dvi-am:
446
447 html: html-am
448
449 html-am:
450
451 info: info-am
452
453 info-am:
454
455 install-data-am: install-directoryDATA
456
457 install-dvi: install-dvi-am
458
459 install-dvi-am:
460
461 install-exec-am:
462
463 install-html: install-html-am
464
465 install-html-am:
466
467 install-info: install-info-am
468
469 install-info-am:
470
471 install-man:
472
473 install-pdf: install-pdf-am
474
475 install-pdf-am:
476
477 install-ps: install-ps-am
478
479 install-ps-am:
480
481 installcheck-am:
482
483 maintainer-clean: maintainer-clean-am
484 -rm -f Makefile
485 maintainer-clean-am: distclean-am maintainer-clean-generic
486
487 mostlyclean: mostlyclean-am
488
489 mostlyclean-am: mostlyclean-generic mostlyclean-libtool
490
491 pdf: pdf-am
492
493 pdf-am:
494
495 ps: ps-am
496
497 ps-am:
498
499 uninstall-am: uninstall-directoryDATA
500
501 .MAKE: install-am install-strip
502
503 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
504 cscopelist-am ctags-am distclean distclean-generic \
505 distclean-libtool distdir dvi dvi-am html html-am info info-am \
506 install install-am install-data install-data-am \
507 install-directoryDATA install-dvi install-dvi-am install-exec \
508 install-exec-am install-html install-html-am install-info \
509 install-info-am install-man install-pdf install-pdf-am \
510 install-ps install-ps-am install-strip installcheck \
511 installcheck-am installdirs maintainer-clean \
512 maintainer-clean-generic mostlyclean mostlyclean-generic \
513 mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
514 uninstall-am uninstall-directoryDATA
515
516
517 @INTLTOOL_DIRECTORY_RULE@
518
519 -include $(top_srcdir)/git.mk
520
521 # Tell versions [3.59,3.63) of GNU make to not export all variables.
522 # Otherwise a system limit (for SysV at least) may be exceeded.
523 .NOEXPORT:
+0
-0
.pc/ubuntu_gcc_translations.patch/desktop-directories/Personal.directory.in less more
(Empty file)
+0
-0
.pc/ubuntu_gcc_translations.patch/desktop-directories/System.directory.in less more
(Empty file)
+0
-33
.pc/ubuntu_gcc_translations.patch/po/POTFILES.in less more
0 # List of source files containing translatable strings.
1 # Please keep this file sorted alphabetically.
2 desktop-directories/AudioVideo.directory.in
3 desktop-directories/Development.directory.in
4 desktop-directories/Education.directory.in
5 desktop-directories/Game.directory.in
6 desktop-directories/Graphics.directory.in
7 desktop-directories/Network.directory.in
8 desktop-directories/Office.directory.in
9 desktop-directories/System-Tools.directory.in
10 desktop-directories/Utility-Accessibility.directory.in
11 desktop-directories/Utility.directory.in
12 desktop-directories/X-GNOME-Menu-Applications.directory.in
13 desktop-directories/X-GNOME-Other.directory.in
14 desktop-directories/X-GNOME-Sundry.directory.in
15 desktop-directories/X-GNOME-Utilities.directory.in
16 desktop-directories/X-GNOME-WebApplications.directory.in
17 debian/desktop-files/ActionGames.directory.in
18 debian/desktop-files/AdventureGames.directory.in
19 debian/desktop-files/ArcadeGames.directory.in
20 debian/desktop-files/BlocksGames.directory.in
21 debian/desktop-files/BoardGames.directory.in
22 debian/desktop-files/CardGames.directory.in
23 debian/desktop-files/Debian.directory.in
24 debian/desktop-files/GnomeScience.directory.in
25 debian/desktop-files/KidsGames.directory.in
26 debian/desktop-files/LogicGames.directory.in
27 debian/desktop-files/RolePlayingGames.directory.in
28 debian/desktop-files/Settings-System.directory.in
29 debian/desktop-files/Settings.directory.in
30 debian/desktop-files/SimulationGames.directory.in
31 debian/desktop-files/SportsGames.directory.in
32 debian/desktop-files/StrategyGames.directory.in
+0
-4869
ChangeLog less more
0 # Generated by Makefile. Do not edit.
1
2 commit 246a46e6f240915c7ba58c455f8d45ea59cebb2e
3 Author: Matthias Clasen <mclasen@redhat.com>
4 Date: Mon Mar 25 22:31:16 2013 -0400
5
6 3.8.0
7
8 M NEWS
9 M configure.ac
10
11 commit 0a37bcb06b0094a677178bd9777758cc16441274
12 Author: Ani Peter <apeter@redhat.com>
13 Date: Mon Mar 25 19:19:17 2013 +0530
14
15 Completed for Malayalam
16
17 M po/ml.po
18
19 commit e28da785eccf196ef0b987b1f4dbe74a5102aff5
20 Author: Krishnababu Krothapalli <kkrothap@redhat.com>
21 Date: Mon Mar 25 15:49:39 2013 +0530
22
23 Updated Telugu Translations
24
25 M po/te.po
26
27 commit 4343c5db75e0b306b835212a98b3edee8ea66db5
28 Author: Reşat SABIQ <tilde.birlik@gmail.com>
29 Date: Sun Mar 24 13:26:35 2013 -0500
30
31 Minor update for Crimean Tatar/Turkish translation
32
33 M po/crh.po
34
35 commit 292ecdb7084cd52c5c8016c2e4b25a78f1debdef
36 Author: Reşat SABIQ <tilde.birlik@gmail.com>
37 Date: Sun Mar 24 13:24:38 2013 -0500
38
39 Updated Crimean Tatar (Crimean Turkish) translation
40
41 M po/crh.po
42
43 commit 47378bcc11d754c3490c7ce06b6a258b8c8afa8c
44 Author: Jiro Matsuzawa <jmatsuzawa@gnome.org>
45 Date: Mon Mar 25 02:30:49 2013 +0900
46
47 l10n: Update Japanese translation
48
49 M po/ja.po
50
51 commit 5e5b387cfd590cd028df6dc323a547e66c76c23b
52 Author: Wouter Bolsterlee <uws@xs4all.nl>
53 Date: Sat Mar 23 23:39:30 2013 +0100
54
55 Updated Dutch translation
56
57 M po/nl.po
58
59 commit 5a6cb52314c39f577ff6faaa6e94bb9620d96f00
60 Author: Daniel Korostil <ted.korostiled@gmail.com>
61 Date: Sat Mar 23 12:42:16 2013 +0200
62
63 Uploaded Ukranian
64
65 M po/uk.po
66
67 commit 370d50f85550cd5e2398198f7148e52c69e2d38f
68 Author: Shantha kumar <shkumar@redhat.com>
69 Date: Fri Mar 22 15:45:10 2013 +0530
70
71 Tamil Translations Updated
72
73 M po/ta.po
74
75 commit 8770020280a690de1f047aa55d360968d187f94b
76 Author: Rajesh Ranjan <rranjan@redhat.com>
77 Date: Fri Mar 22 12:40:18 2013 +0530
78
79 hindi translation
80
81 M po/hi.po
82
83 commit c03b16747e734de180c3dfd678f9657f1f5f163d
84 Author: Sandeep Sheshrao Shedmake <sshedmak@redhat.com>
85 Date: Thu Mar 21 18:46:00 2013 +0530
86
87 Updated Marathi Translations
88
89 M po/mr.po
90
91 commit 5c50a43768e2eff9f68f94b3a1207b0c1d8cd905
92 Author: ManojKumar Giri <mgiri@redhat.com>
93 Date: Wed Mar 20 18:04:23 2013 +0530
94
95 Updated Odia Translation.
96
97 M po/or.po
98
99 commit fb40f7702b8d443e5c6a4983da133b1eafad300c
100 Author: Danial Behzadi <dani.behzi@gmail.com>
101 Date: Wed Mar 20 09:26:27 2013 +0330
102
103 l10n: Updated Persian translation
104
105 M po/fa.po
106
107 commit 107172dc7b4c8b7936113d74f3c53fe53b24bdeb
108 Author: Victor Ibragimov <victor.ibragimov@gmail.com>
109 Date: Tue Mar 19 20:40:30 2013 +0100
110
111 [l10n] Added Tadjik translation
112
113 M po/LINGUAS
114 A po/tg.po
115
116 commit c573fa0e08616a908e6f1c335641ec6c1b9105f4
117 Author: Shankar Prasad <svenkate@redhat.com>
118 Date: Mon Mar 18 16:02:23 2013 +0530
119
120 Updated kn translations
121
122 M po/kn.po
123
124 commit e26a4cd263ffc78db3104a9aca6e85034d48a67b
125 Author: Marek Černocký <marek@manet.cz>
126 Date: Sun Mar 17 22:46:15 2013 +0100
127
128 Updated Czech translation
129
130 M po/cs.po
131
132 commit 3fa134531fa6a7f1ed2ac4b572ea455a55eb1dd4
133 Author: Carles Ferrando <carles.ferrando@gmail.com>
134 Date: Sun Mar 17 19:51:46 2013 +0100
135
136 [l10n] Updated Catalan (Valencian) translation
137
138 M po/ca@valencia.po
139
140 commit 94a7ab3216a5d64c38272f616a20715ea6028b5f
141 Author: Ask H. Larsen <asklarsen@gmail.com>
142 Date: Sun Mar 17 14:44:39 2013 +0100
143
144 Updated Danish translation
145
146 M po/da.po
147
148 commit f4adf5966ff0a6ebc86cdad7b22126dd88859804
149 Author: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
150 Date: Sun Mar 17 16:24:34 2013 +0300
151
152 Updated Belarusian translation.
153
154 M po/be.po
155
156 commit b717f6e4f5d9a792f441f626bb769ec150e4bdd9
157 Author: Changwoo Ryu <cwryu@debian.org>
158 Date: Sat Mar 16 22:26:34 2013 +0900
159
160 Updated Korean translation
161
162 M po/ko.po
163
164 commit 8da5f3028860bfa6f5d8b38f6071285b501bb800
165 Author: Balázs Úr <urbalazs@src.gnome.org>
166 Date: Thu Mar 14 22:14:33 2013 +0100
167
168 Updated Hungarian translation
169
170 M po/hu.po
171
172 commit ca3a6029128122ee4f4b4b991686529174f25d02
173 Author: Duarte Loreto <happyguy_pt@hotmail.com>
174 Date: Tue Mar 12 13:05:37 2013 +0000
175
176 Updated Portuguese translation and converted to New Spelling (Novo AO)
177
178 M po/pt.po
179
180 commit 758c22ec25528869dc96a3a77b76f378e4339d1e
181 Author: Gil Forcada <gforcada@gnome.org>
182 Date: Mon Mar 11 23:01:17 2013 +0100
183
184 [l10n] Updated Catalan translation
185
186 M po/ca.po
187
188 commit ed0dbd6eba3bcff96ce03dc7ba03c1d632e9e14d
189 Author: Mattias Põldaru <mahfiaz@gmail.com>
190 Date: Mon Mar 11 15:31:45 2013 +0200
191
192 [l10n] Updated Estonian translation
193
194 M po/et.po
195
196 commit 2be1f73f29a753a243f8dfcdf540916c8c9f20ad
197 Author: Andika Triwidada <andika@gmail.com>
198 Date: Mon Mar 11 12:39:01 2013 +0700
199
200 Updated Indonesian translation
201
202 M po/id.po
203
204 commit 8d0d9190809b44cdd94ae293d47df2abc4b1fe8d
205 Author: Khaled Hosny <khaledhosny@eglug.org>
206 Date: Sun Mar 10 00:06:18 2013 +0200
207
208 Update Arabic translation
209
210 M po/ar.po
211
212 commit a6c9fb7eaa9c3df19dbe6d555795f563fcdfa7c8
213 Author: Baurzhan Muftakhidinov <baurthefirst@gmail.com>
214 Date: Sat Mar 9 21:28:34 2013 +0600
215
216 Updated Kazakh translation.
217
218 M po/kk.po
219
220 commit eebcb71254cc92334da975505e07446d1a00bf09
221 Author: Ville-Pekka Vainio <vpvainio@iki.fi>
222 Date: Thu Mar 7 20:57:21 2013 +0200
223
224 Finnish translation update by Jiri Grönroos
225
226 M po/fi.po
227
228 commit 47aec8856134fb8960679260a92c499578228b26
229 Author: Rafael Ferreira <rafael.f.f1@gmail.com>
230 Date: Tue Mar 5 10:16:37 2013 -0300
231
232 Updated Brazilian Portuguese translation
233
234 M po/pt_BR.po
235
236 commit e63b9b880787e06c945a525048a7a7d92f8e19c8
237 Author: Nilamdyuti Goswami <ngoswami@redhat.com>
238 Date: Tue Mar 5 15:34:11 2013 +0530
239
240 Assamese translation updated for gnome 3.8
241
242 M po/as.po
243
244 commit 192c6566cc281c52a2ca438da965da32c5e752f2
245 Author: Inaki Larranaga Murgoitio <dooteo@zundan.com>
246 Date: Mon Mar 4 23:08:53 2013 +0100
247
248 Updated Basque language
249
250 M po/eu.po
251
252 commit 0f929355820faafef8712b17be906e834c3c97cc
253 Author: Jeremy Bicha <jbicha@ubuntu.com>
254 Date: Sun Mar 3 01:49:02 2013 -0500
255
256 sundry: Add Power Statistics & Personal File Sharing
257
258 These seem to sort of duplicate what we have in Settings.
259 Perhaps the extra graphs and info from Power Statistics should find
260 a new home in System Monitor?
261
262 https://bugzilla.gnome.org/show_bug.cgi?id=695047
263
264 M layout/gnome-applications.menu
265
266 commit af5d71c573cda0e3527ea935516454dc3cd35e28
267 Author: William Jon McCann <william.jon.mccann@gmail.com>
268 Date: Sun Mar 3 15:33:51 2013 -0500
269
270 Revert "Remove the special casing for Fedora desktop vendor renames"
271
272 This reverts commit 5cc05790a308bbf7a5905254e377d3ca47df603b.
273
274 We should really wait a bit before pushing this so the changes have
275 time to propagate.
276
277 M layout/gnome-applications.menu
278
279 commit a5382598d7f982e49b6267869db69ac7cf562b26
280 Author: William Jon McCann <william.jon.mccann@gmail.com>
281 Date: Sun Mar 3 15:19:45 2013 -0500
282
283 layout: put im-chooser into Sundry
284
285 M layout/gnome-applications.menu
286
287 commit 28ab24749488986519a21a51ca8060e5d9002256
288 Author: Benjamin Steinwender <b@stbe.at>
289 Date: Sun Mar 3 19:52:08 2013 +0100
290
291 [l10n] Updated German translation
292
293 M po/de.po
294
295 commit 6f27ae37ae12ee34b15479bb2a76d8a83ad5be81
296 Author: Luca Ferretti <lferrett@gnome.org>
297 Date: Sun Mar 3 01:19:56 2013 +0100
298
299 l10n: Updated Italian translation
300
301 M po/it.po
302
303 commit 5cc05790a308bbf7a5905254e377d3ca47df603b
304 Author: Kalev Lember <kalevlember@gmail.com>
305 Date: Fri Feb 22 13:15:18 2013 +0100
306
307 Remove the special casing for Fedora desktop vendor renames
308
309 The desktop file vendor prefixes are gone from eog.desktop,
310 file-roller.desktop, gucharmap.desktop, and yelp.desktop in Fedora 19+,
311 so we no longer need to special case them in gnome-applications.menu.
312
313 https://bugzilla.gnome.org/show_bug.cgi?id=694444
314
315 M layout/gnome-applications.menu
316
317 commit e85f2419023afef93e25d2058560fc833c22d310
318 Author: Мирослав Николић <miroslavnikolic@rocketmail.com>
319 Date: Fri Mar 1 09:26:42 2013 +0100
320
321 Updated Serbian translation
322
323 M po/sr.po
324 M po/sr@latin.po
325
326 commit aab9d5ed860175bb86063a58a1fb82b3083d3431
327 Author: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
328 Date: Wed Feb 27 22:51:08 2013 +0800
329
330 Updated Traditional Chinese translation(Hong Kong and Taiwan)
331
332 M po/zh_HK.po
333 M po/zh_TW.po
334
335 commit 7ba60014ce6bcc74996b519540ad58940ecd7205
336 Author: Sweta Kothari <swkothar@redhat.com>
337 Date: Wed Feb 27 13:58:35 2013 +0530
338
339 Updated gujarati file
340
341 M po/gu.po
342
343 commit 4a4d04d822e226eaf2c13a24a79ec639b620eb8a
344 Author: Pavol Klačanský <pavol@klacansky.com>
345 Date: Mon Feb 25 20:57:24 2013 +0100
346
347 Updated slovak translation
348
349 M po/sk.po
350
351 commit 3b28046273ca53e7a4f2d78f26fad10ea7c06424
352 Author: Kjartan Maraas <kmaraas@gnome.org>
353 Date: Mon Feb 25 19:18:08 2013 +0100
354
355 Updated Norwegian bokmål translation
356
357 M po/nb.po
358
359 commit 7c94f1773354a31f9db1f140bd164f9bb5a2f872
360 Author: Jasper St. Pierre <jstpierre@mecheye.net>
361 Date: Mon Feb 25 11:13:14 2013 -0500
362
363 configure: Remove AM_PATH_PYTHON
364
365 This was a leftover from removing the simple-editor.
366
367 M configure.ac
368
369 commit fe172ebde5ff50e55784611bc6048ecf56580699
370 Author: Aurimas Černius <aurisc4@gmail.com>
371 Date: Sun Feb 24 21:59:22 2013 +0200
372
373 Updated Lithuanian translation
374
375 M po/lt.po
376
377 commit 4338482231743c5e8bab7dd565e269e3a0cbe2cd
378 Author: Dimitris Spingos <dmtrs32@gmail.com>
379 Date: Sun Feb 24 10:23:11 2013 +0200
380
381 Updated Greek translation
382
383 M po/el.po
384
385 commit 3e5fe2ec16b5683ffdf225f1b2721ac4e4f902c6
386 Author: Matej Urbančič <mateju@svn.gnome.org>
387 Date: Fri Feb 22 22:28:14 2013 +0100
388
389 Updated Slovenian translation
390
391 M po/sl.po
392
393 commit 57b724f42917bcde9cf6b52d885bea4662b18f89
394 Author: A S Alam <aalam@users.sf.net>
395 Date: Fri Feb 22 14:55:42 2013 +0000
396
397 Punjabi: Translation updated (aalam)
398
399 M po/pa.po
400
401 commit 0cfe9c374d664492a77dbda436da5fe3bed7da4c
402 Author: Gheyret Kenji <gheyret@gmail.com>
403 Date: Fri Feb 22 22:58:01 2013 +0900
404
405 Updated Uyghur translation
406
407 Signed-off-by: Gheyret Kenji <gheyret@gmail.com>
408
409 M po/ug.po
410
411 commit e1849964ad1a91d2a017f0bcc743bb936c52fb0d
412 Author: Yaron Shahrabani <sh.yaron@gmail.com>
413 Date: Thu Feb 21 19:41:32 2013 +0200
414
415 Updated Hebrew translation.
416
417 M po/he.po
418
419 commit ecc8ace4d8d7603f3f1c182de3ae107c20701302
420 Author: Daniel Mustieles <daniel.mustieles@gmail.com>
421 Date: Thu Feb 21 16:55:32 2013 +0100
422
423 Updated Spanish translation
424
425 M po/es.po
426
427 commit eb5f8823904a79787d0e6057f36fc9d08d44c332
428 Author: Yuri Myasoedov <omerta13@yandex.ru>
429 Date: Thu Feb 21 15:54:56 2013 +0400
430
431 Updated Russian translation
432
433 M po/ru.po
434
435 commit 207fa196dd04124ea3919cc7e66b44be75f982f9
436 Author: Cosimo Cecchi <cosimoc@gnome.org>
437 Date: Wed Feb 20 18:48:01 2013 -0500
438
439 sundry: add more Java stuff
440
441 I get these indecipherable desktop files when I install Eclipse.
442
443 https://bugzilla.gnome.org/show_bug.cgi?id=694324
444
445 M layout/gnome-applications.menu
446
447 commit 31b32c027426007639369832e4d6bb48f4f6c0fc
448 Author: Daniel Martinez <dmartinez@src.gnome.org>
449 Date: Wed Feb 20 23:11:23 2013 +0100
450
451 Updated Aragonese translation
452
453 M po/an.po
454
455 commit 48307035146fb3b1e6fea66f5b73a4bfe001a064
456 Author: Alexandre Franke <alexandre.franke@gmail.com>
457 Date: Wed Feb 20 21:15:02 2013 +0100
458
459 Update French translation
460
461 M po/fr.po
462
463 commit e775ffd58b91ec437c4a17d3fea2f5bc45b2423a
464 Author: Fran Diéguez <fran.dieguez@mabishu.com>
465 Date: Wed Feb 20 10:38:36 2013 +0100
466
467 Updated Galician translations
468
469 M po/gl.po
470
471 commit 96ae298b28c458bfd3f735a6ed8dac5d79b3d0b1
472 Author: Rūdolfs Mazurs <rudolfsm@src.gnome.org>
473 Date: Wed Feb 20 11:33:40 2013 +0200
474
475 Updated Latvian translation
476
477 M po/lv.po
478
479 commit a2f3bacaba079df016cf53b8331fb4e1c77f2eab
480 Author: Jasper St. Pierre <jstpierre@mecheye.net>
481 Date: Tue Feb 19 18:55:17 2013 -0500
482
483 Post-release version bump
484
485 M configure.ac
486
487 commit 005605f79c8fb7f13542c497ccc1f1fe52907902
488 Author: Jasper St. Pierre <jstpierre@mecheye.net>
489 Date: Tue Feb 19 18:53:34 2013 -0500
490
491 Release 3.7.90
492
493 M NEWS
494 M configure.ac
495
496 commit 64e189fedf5a04956cb96c54560f54736a012f4b
497 Author: Piotr Drąg <piotrdrag@gmail.com>
498 Date: Tue Feb 19 23:32:28 2013 +0100
499
500 Updated Polish translation
501
502 M po/pl.po
503
504 commit f3c636fbcf38846698c657d6aeb920cdabb0ea17
505 Author: Piotr Drąg <piotrdrag@gmail.com>
506 Date: Tue Feb 19 23:31:14 2013 +0100
507
508 Updated POTFILES.in
509
510 M po/POTFILES.in
511
512 commit ac21fd7730b0c7f84b06468f862592d9666dfac6
513 Author: Florian Müllner <fmuellner@gnome.org>
514 Date: Tue Feb 19 12:47:18 2013 +0100
515
516 Add .directory file for Sundry
517
518 https://bugzilla.gnome.org/show_bug.cgi?id=694131
519
520 M desktop-directories/Makefile.am
521 A desktop-directories/X-GNOME-Sundry.directory.in
522 M layout/gnome-applications.menu
523
524 commit 95858c40461f6a2c53e2d4427d0851a08e0181c7
525 Author: Alexandre Franke <alexandre.franke@gmail.com>
526 Date: Tue Feb 19 21:56:15 2013 +0100
527
528 Update French translation
529
530 M po/fr.po
531
532 commit acb41bfe71a4e4717707eb21aef6c2b19b331e76
533 Author: Jasper St. Pierre <jstpierre@mecheye.net>
534 Date: Tue Feb 19 15:14:48 2013 -0500
535
536 layout: Add some more items to Sundry
537
538 M layout/gnome-applications.menu
539
540 commit 1f4c3b6891637dfd2b8f42bae139166cd0e1fd8e
541 Author: Piotr Drąg <piotrdrag@gmail.com>
542 Date: Tue Feb 19 20:56:29 2013 +0100
543
544 Updated Polish translation
545
546 M po/pl.po
547
548 commit b1f831d2894df2501086f7c4bd523fe0e67f3676
549 Author: Piotr Drąg <piotrdrag@gmail.com>
550 Date: Tue Feb 19 20:44:51 2013 +0100
551
552 Updated POTFILES.in
553
554 M po/POTFILES.in
555
556 commit 36d5d699d7d4193a1b3d84777566466326f78b19
557 Author: Florian Müllner <fmuellner@gnome.org>
558 Date: Sun Feb 17 03:40:22 2013 +0100
559
560 layout: Add Sundry category
561
562 Creates a Sundry directory to contain things that either aren't really apps
563 or are scheduled for removal but that are hard to remove at the moment for
564 various reasons. We just need a temporary way to segregate these items so they
565 don't pollute the app view.
566
567 https://bugzilla.gnome.org/show_bug.cgi?id=694131
568
569 M layout/gnome-applications.menu
570
571 commit 8cb236fbf31dee1a533582f1f8ef72b7b96a33e0
572 Author: Florian Müllner <fmuellner@gnome.org>
573 Date: Sun Feb 17 02:51:00 2013 +0100
574
575 layout: Account for gcalctool => gnome-calculator name change
576
577 https://bugzilla.gnome.org/show_bug.cgi?id=694131
578
579 M layout/gnome-applications.menu
580
581 commit a06c0348c1a129ffd996e00615d5d6d25b17dcdc
582 Author: Florian Müllner <fmuellner@gnome.org>
583 Date: Sun Feb 17 02:25:42 2013 +0100
584
585 layout: Deal with some vendor renames
586
587 The menu spec doesn't offer very specific guidance for how
588 to use vendor prefixes. And it isn't even clear about what
589 a vendor is. Or how it helps avoid collisions with a naming scheme
590 that isn't fully qualified in the first place.
591
592 Longer term we should move to something that uses fully qualified
593 names like the dbus spec. In the meantime we have to deal with
594 "aliases" for app names.
595
596 https://bugzilla.gnome.org/show_bug.cgi?id=694131
597
598 M layout/gnome-applications.menu
599
600 commit e644a541b5bab530fe6649c3b8f212faca46eb66
601 Author: Florian Müllner <fmuellner@gnome.org>
602 Date: Sun Feb 17 02:18:51 2013 +0100
603
604 layout: Add a new X-GNOME-Utilities directory
605
606 Rather than using a developer-defined category, this directory
607 contains an explicit whitelist of known-good GNOME tools. This
608 more or less follows the definition set in the GNOME jhbuild
609 moduleset.
610
611 https://bugzilla.gnome.org/show_bug.cgi?id=694131
612
613 M desktop-directories/Makefile.am
614 A desktop-directories/X-GNOME-Utilities.directory.in
615 M layout/gnome-applications.menu
616
617 commit a5e2e6e4912c2dfcf6559828186063ecd6d09e57
618 Author: Jasper St. Pierre <jstpierre@mecheye.net>
619 Date: Mon Feb 18 14:36:03 2013 -0500
620
621 desktop-directories: Remove system settings desktop entries
622
623 They're unused by gnome-control-center.
624
625 D desktop-directories/Hardware.directory.in
626 M desktop-directories/Makefile.am
627 D desktop-directories/Personal.directory.in
628 D desktop-directories/System.directory.in
629
630 commit b53758987b4d04bf9c869bfd02c0ec1d252638bf
631 Author: Jasper St. Pierre <jstpierre@mecheye.net>
632 Date: Fri Feb 15 19:23:22 2013 -0500
633
634 layout: Install as gnome-applications.menu
635
636 gnome-session now sets XDG_MENU_PREFIX by default, so we should
637 install it where applications that use gnome-menus look.
638
639 M layout/Makefile.am
640 R100 layout/applications.menu layout/gnome-applications.menu
641
642 commit cfaa9d460ef9fb502585d0fcdfcf3bb4e25b19aa
643 Author: Jasper St. Pierre <jstpierre@mecheye.net>
644 Date: Fri Feb 15 17:33:00 2013 -0500
645
646 layout: Put control center apps in the applications menu
647
648 This allows gnome-shell to do app tracking for them. It should
649 not display them, as the desktop directory itself is marked as
650 NoDisplay=true.
651
652 M desktop-directories/Makefile.am
653 A desktop-directories/X-GNOME-SystemSettings.directory.in
654 M layout/applications.menu
655
656 commit a1c6559dcb1f9c9d12d9ebb6bd226a078a02d19a
657 Author: Jasper St. Pierre <jstpierre@mecheye.net>
658 Date: Fri Feb 15 20:44:48 2013 -0500
659
660 gmenu-tree: Fix error reporting
661
662 No idea why this was here..
663
664 M libmenu/gmenu-tree.c
665
666 commit 1e12d0f9f309c977702dad1363e56cd9989b7375
667 Author: Jasper St. Pierre <jstpierre@mecheye.net>
668 Date: Fri Feb 15 20:29:18 2013 -0500
669
670 configure: Have better debugging on by default
671
672 M configure.ac
673
674 commit 589ba554d79366dacf3592b3670459003e45ace4
675 Author: William Jon McCann <jmccann@redhat.com>
676 Date: Fri Sep 28 09:53:22 2012 -0400
677
678 Remove the simple editor
679
680 gnome-menus is a dependency component and we don't really want it
681 to be installing applications as a side effect. There are other
682 better and maintained options for menu editing now anyway.
683
684 https://bugzilla.gnome.org/show_bug.cgi?id=684900
685
686 M Makefile.am
687 M configure.ac
688 M po/POTFILES.in
689 D simple-editor/GMenuSimpleEditor/Makefile.am
690 D simple-editor/GMenuSimpleEditor/__init__.py
691 D simple-editor/GMenuSimpleEditor/config.py.in
692 D simple-editor/GMenuSimpleEditor/main.py
693 D simple-editor/GMenuSimpleEditor/maindialog.py
694 D simple-editor/GMenuSimpleEditor/menufilewriter.py
695 D simple-editor/GMenuSimpleEditor/menutreemodel.py
696 D simple-editor/Makefile.am
697 D simple-editor/gmenu-simple-editor.desktop.in
698 D simple-editor/gmenu-simple-editor.in
699 D simple-editor/gmenu-simple-editor.ui
700
701 commit 7d90221e27fcc72de497f45db4f3ef3c2d623fd6
702 Author: Jasper St. Pierre <jstpierre@mecheye.net>
703 Date: Fri Feb 1 21:46:13 2013 -0500
704
705 Memory leak fixes
706
707 Based on a patch by William Jon McCann <william.jon.mccann@gmail.com>
708
709 https://bugzilla.gnome.org/show_bug.cgi?id=349695
710
711 M libmenu/desktop-entries.c
712 M libmenu/entry-directories.c
713 M libmenu/gmenu-tree.c
714
715 commit db75a478f53f2619b1d96cd09d3a4f9abe682fc9
716 Author: Inaki Larranaga Murgoitio <dooteo@zundan.com>
717 Date: Wed Jan 30 21:26:01 2013 +0100
718
719 Updated Basque language
720
721 M po/eu.po
722
723 commit 2b4eb5f9db8411e62da6ec8d80ada1895772d05b
724 Author: Nuno Araujo <nuno.araujo@russo79.com>
725 Date: Tue Jan 15 22:36:11 2013 +0100
726
727 Fix the build with automake 1.13
728
729 In Automake 1.13, the long-deprecated macro AM_CONFIG_HEADER (deprecated
730 since 2002) has been removed in favour of AC_CONFIG_HEADERS.
731
732 https://bugzilla.gnome.org/show_bug.cgi?id=692108
733
734 M configure.ac
735
736 commit 86241e29cd1101fe638a5665b8c52e8d3c84444d
737 Author: Fabio Tomat <f.t.public@gmail.com>
738 Date: Sat Jan 19 02:34:16 2013 +0100
739
740 Updated Friulian translation
741
742 M po/fur.po
743
744 commit 8d161da704766d9f4a42f1213ca4dc6b8d0e7873
745 Author: Matthias Clasen <mclasen@redhat.com>
746 Date: Tue Jan 15 07:42:02 2013 -0500
747
748 Bump version
749
750 M configure.ac
751
752 commit d4a11d28df389f00550848a078c40a2438908df5
753 Author: Matthias Clasen <mclasen@redhat.com>
754 Date: Tue Jan 15 07:35:47 2013 -0500
755
756 3.6.2
757
758 M NEWS
759
760 commit 234940bf89aa82012c3622674cec151dcf4ff128
761 Author: Gheyret Kenji <gheyret@gmail.com>
762 Date: Sat Jan 12 14:00:36 2013 +0900
763
764 Updated Uyghur translation
765
766 Signed-off-by: Gheyret Kenji <gheyret@gmail.com>
767
768 M po/ug.po
769
770 commit 0594875c19b1bf981f1bbde416a1ca440c7caeb5
771 Author: Vincent Untz <vuntz@gnome.org>
772 Date: Mon Jan 7 16:36:24 2013 +0100
773
774 misc: Remove myself from maintainers
775
776 I'm not really doing anything on gnome-menus anymore, and Jasper is
777 happy being the sole maintainer.
778
779 M MAINTAINERS
780 M gnome-menus.doap
781
782 commit 9c1c50146b8d1a92ac556ba0a0ca174426bc6ffa
783 Author: Gheyret Kenji <gheyret@gmail.com>
784 Date: Fri Jan 4 21:38:40 2013 +0900
785
786 Uyghur translation
787
788 Signed-off-by: Gheyret Kenji <gheyret@gmail.com>
789
790 M po/ug.po
791
792 commit fd4a321b9eaf6ee11b80d0c377b8ff8873e6c777
793 Author: Khaled Hosny <khaledhosny@eglug.org>
794 Date: Mon Dec 24 13:38:26 2012 +0200
795
796 Update Arabic translation
797
798 M po/ar.po
799
800 commit 9d45c5369f4a486d2ba5c3a8c3262c84172b095a
801 Author: Alexandre Rostovtsev <tetromino@gentoo.org>
802 Date: Sat Nov 24 15:24:50 2012 -0500
803
804 libmenu: always call menu_layout_load() with non_prefixed_name parameter
805
806 We must ensure that when loading "${XDG_MENU_PREFIX}applications.menu"
807 or "applications.menu", the root layout node's name is set to "applications",
808 not "${XDG_MENU_PREFIX}applications", because the menu spec states that the
809 default merge directory for "${XDG_MENU_PREFIX}applications.menu" is
810 "applications-merged", not "${XDG_MENU_PREFIX}applications-merged".
811
812 https://bugzilla.gnome.org/show_bug.cgi?id=688972
813
814 M libmenu/gmenu-tree.c
815
816 commit dfae41dd0f0df6a72c1ef47dfe1e9efb1bfee746
817 Author: Shankar Prasad <svenkate@redhat.com>
818 Date: Thu Nov 29 14:24:44 2012 +0530
819
820 Updated kn translation
821
822 M po/kn.po
823
824 commit aad880ce305edc2fe61fb3070ec8df1d9d29f28a
825 Author: Shankar Prasad <svenkate@redhat.com>
826 Date: Thu Nov 29 14:21:37 2012 +0530
827
828 Updated kn translation
829
830 M po/kn.po
831
832 commit df21eb893653e0b3c0e0f43cd0bc0de00c28d54a
833 Author: Shankar Prasad <svenkate@redhat.com>
834 Date: Thu Nov 29 14:13:13 2012 +0530
835
836 Updated kn translation
837
838 M po/kn.po
839
840 commit 09ea3c32275547f8de8799bb47ef3f9441abf12f
841 Author: Shankar Prasad <svenkate@redhat.com>
842 Date: Tue Nov 27 16:00:31 2012 +0530
843
844 Updated kn translation
845
846 M po/kn.po
847
848 commit 6a113f67b993702417d9db189d36e63fd9e4806d
849 Author: Matthias Clasen <mclasen@redhat.com>
850 Date: Tue Nov 13 22:56:06 2012 -0500
851
852 Post-release version bump
853
854 M configure.ac
855
856 commit 0ebd911ccbd177b856d34f43a6ef680275ab0871
857 Author: Matthias Clasen <mclasen@redhat.com>
858 Date: Tue Nov 13 22:54:01 2012 -0500
859
860 3.6.1
861
862 M NEWS
863
864 commit fff8296aa0be3e257b2147e590da38cf470f4054
865 Author: Bahodir Mansurov <6ahodir@gmail.com>
866 Date: Sun Oct 14 13:42:00 2012 -0400
867
868 updating Uzbek@cyrillic translation
869
870 M po/uz@cyrillic.po
871
872 commit d9dce393a242ddc4799fdc776f0af305bf935ff5
873 Author: Bahodir Mansurov <6ahodir@gmail.com>
874 Date: Sun Oct 14 13:04:49 2012 -0400
875
876 updating Uzbek@cyrillic translation
877
878 M po/uz@cyrillic.po
879
880 commit 7acb8e2e5bff34c049c150d53190843996aa3f3d
881 Author: Pavol Klačanský <pavol@klacansky.com>
882 Date: Tue Oct 9 10:44:23 2012 +0100
883
884 Updated Slovak translation
885
886 M po/sk.po
887
888 commit 78b37e6142300931604566e2d8eb4123c70cfeb4
889 Author: Daniel Martinez Cucalon <dmartinez@src.gnome.org>
890 Date: Sat Sep 29 00:54:41 2012 +0200
891
892 Updated Aragonese translation
893
894 M po/an.po
895
896 commit 206da7e2fb133923f5898b42fbdc26db7f46d437
897 Author: Daniel Korostil <ted.korostiled@gmail.com>
898 Date: Wed Sep 26 09:15:57 2012 +0300
899
900 Added uk translation
901
902 M po/uk.po
903
904 commit 20f8d7169da967c39a92fb9bd97c74f5e1bb798d
905 Author: Carles Ferrando <carles.ferrando@gmail.com>
906 Date: Wed Sep 26 01:31:05 2012 +0200
907
908 [l10n] Updated Catalan (Valencian) translation
909
910 M po/ca@valencia.po
911
912 commit e8cda485fec0fb2480f8e232b790387c1f41c77f
913 Author: Gil Forcada <gforcada@gnome.org>
914 Date: Wed Sep 26 01:30:42 2012 +0200
915
916 [l10n] Updated Catalan translation
917
918 M po/ca.po
919
920 commit e2ad6f559992e253ee7b10db7358c709d3a54328
921 Author: Matthias Clasen <mclasen@redhat.com>
922 Date: Tue Sep 25 08:01:46 2012 -0400
923
924 post-release version bump
925
926 M configure.ac
927
928 commit ff379b515cdb3728dfd2f49c233797603b9658b8
929 Author: Matthias Clasen <mclasen@redhat.com>
930 Date: Tue Sep 25 07:54:10 2012 -0400
931
932 3.6.0
933
934 M NEWS
935
936 commit 1f596f13f5b793515dcb07cc7dd0834581f9f22e
937 Author: Rūdolfs Mazurs <rudolfsm@src.gnome.org>
938 Date: Mon Sep 24 13:22:34 2012 +0300
939
940 Updated Latvian translation
941
942 M po/lv.po
943
944 commit 3839fb3f2784f3575c454a7128fb7ff4fed12233
945 Author: Mattias Põldaru <mahfiaz@gmail.com>
946 Date: Mon Sep 24 11:15:01 2012 +0300
947
948 [l10n] Updated Estonian translation
949
950 M po/et.po
951
952 commit b2199a2b2972f37d85deab11818a94ce636a2d0a
953 Author: Timur Zhamakeev <ztimur@gmail.com>
954 Date: Mon Sep 24 09:21:40 2012 +0600
955
956 Updated Kyrgyz translation
957
958 M po/ky.po
959
960 commit d1ea18a03b123039f63e54360b5aac02d58e07fd
961 Author: Runa Bhattacharjee <runab@redhat.com>
962 Date: Fri Sep 21 19:23:07 2012 +0530
963
964 Updated Bengali India Translation
965
966 M po/bn_IN.po
967
968 commit 4883507b4742178707f227922f421e130ae0e612
969 Author: Rajesh Ranjan <rranjan@redhat.com>
970 Date: Fri Sep 21 14:21:36 2012 +0530
971
972 hindi update
973
974 M po/hi.po
975
976 commit 319bc9001ec45d837da239a4dbd1cf30546ba4ce
977 Author: Praveen Illa <mail2ipn@gmail.com>
978 Date: Wed Sep 19 22:08:18 2012 +0530
979
980 Updated Telugu Translation
981
982 M po/te.po
983
984 commit dd8991b15488f384122120ea31e8c6043e0144ea
985 Author: Ani Peter <apeter@redhat.com>
986 Date: Tue Sep 18 23:04:10 2012 +0530
987
988 Updated Malayalam file
989
990 M po/ml.po
991
992 commit e24c669b5331a6deab6730c0bb7f582ad98c138c
993 Author: Noriko Mizumoto <noriko@fedoraproject.org>
994 Date: Tue Sep 18 12:57:52 2012 +0900
995
996 [l10n] Update Japanese translation
997
998 M po/ja.po
999
1000 commit d529600f891fdd32d111e281a65677c9468d8f5c
1001 Author: Djavan Fagundes <djavanf@gnome.org>
1002 Date: Mon Sep 17 21:28:13 2012 -0300
1003
1004 Revert "Updated Brazilian Portuguese translation"
1005
1006 This reverts commit 0b8278f3dc7f834b5856a98762cda69b0d713707.
1007
1008 A po/pt_BR.po
1009
1010 commit 0b8278f3dc7f834b5856a98762cda69b0d713707
1011 Author: Djavan Fagundes <djavanf@gnome.org>
1012 Date: Mon Sep 17 20:40:04 2012 -0300
1013
1014 Updated Brazilian Portuguese translation
1015
1016 D po/pt_BR.po
1017
1018 commit 0619ec60ce602e023beb9d14df34d4958d326a31
1019 Author: Og B. Maciel <ogmaciel@gnome.org>
1020 Date: Mon Sep 17 16:51:48 2012 -0400
1021
1022 Updated translation for Brazilian Portuguese.
1023
1024 M po/pt_BR.po
1025
1026 commit 4ea3f1de69fec378262bc966f5d3e355f82c2b20
1027 Author: Vincent Untz <vuntz@gnome.org>
1028 Date: Mon Sep 17 13:10:55 2012 +0200
1029
1030 release: post-release bump to 3.6.0
1031
1032 M configure.ac
1033
1034 commit a4e3e70fb8150461af79a5314cdd3b9a8fe5956a
1035 Author: Vincent Untz <vuntz@gnome.org>
1036 Date: Mon Sep 17 13:10:14 2012 +0200
1037
1038 release: 3.5.92
1039
1040 M NEWS
1041 M configure.ac
1042
1043 commit c21dc9a2fbc2fbf288de0d688afd519e2f25da4b
1044 Author: Ask H. Larsen <asklarsen@gmail.com>
1045 Date: Sun Sep 16 13:25:58 2012 +0200
1046
1047 Updated Danish translation
1048
1049 M po/da.po
1050
1051 commit fe09bdbae726dbefa92f22d2e851b7ec5b30dfef
1052 Author: Changwoo Ryu <cwryu@debian.org>
1053 Date: Sat Sep 15 16:55:29 2012 +0900
1054
1055 Updated Korean translation
1056
1057 M po/ko.po
1058
1059 commit aceac14e0b728626c966d3ccfab51bb99a396ba6
1060 Author: Rico Tzschichholz <ricotz@t-online.de>
1061 Date: Wed Sep 12 08:40:37 2012 +0200
1062
1063 libmenu: Add proper header reference to GMenu-3.0.gir
1064
1065 M libmenu/Makefile.am
1066
1067 commit 491c7eccff4e5fedc3f68f2d9d33399d49eed9a8
1068 Author: Marek Černocký <marek@manet.cz>
1069 Date: Mon Sep 10 00:47:09 2012 +0200
1070
1071 Czech translation
1072
1073 M po/cs.po
1074
1075 commit 2c2c4f24c60952ef3e014ce0fd24c9db83c7f3fb
1076 Author: Milo Casagrande <milo@ubuntu.com>
1077 Date: Thu Sep 6 22:51:48 2012 +0200
1078
1079 [l10n] Updated Italian translation.
1080
1081 M po/it.po
1082
1083 commit f33d2b42226ae7c0d2fe871b55563b544dfcd252
1084 Author: Arash Mousavi <mousavi.arash@gmail.com>
1085 Date: Thu Sep 6 21:02:51 2012 +0430
1086
1087 l10n: Updated Persian translation
1088
1089 M po/fa.po
1090
1091 commit db8230cb5375eb951fc3385fa56e0fbd20222030
1092 Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
1093 Date: Thu Sep 6 20:23:58 2012 +0700
1094
1095 Updated Thai translation.
1096
1097 M po/th.po
1098
1099 commit b2cd372cf3ef3d5e10ca7e724366c72322a44849
1100 Author: Timo Jyrinki <timo@debian.org>
1101 Date: Thu Sep 6 08:59:09 2012 +0300
1102
1103 Finnish translation update by Jiri Grönroos
1104
1105 M po/fi.po
1106
1107 commit 103fb06fe86990bc7ec95e7cd8f61b71b69f9d9a
1108 Author: Bruce Cowan <bruce@bcowan.me.uk>
1109 Date: Wed Sep 5 19:50:45 2012 +0100
1110
1111 Updated British English translation
1112
1113 M po/en_GB.po
1114
1115 commit a8f755a4b967738261540d2efd4c3ab45a9b283b
1116 Author: Alexandre Franke <alexandre.franke@gmail.com>
1117 Date: Tue Sep 4 20:52:48 2012 +0200
1118
1119 Update French translation
1120
1121 M po/fr.po
1122
1123 commit b4c27cda6d161dbffb3878bfb1fd9164bb292de7
1124 Author: Gabor Kelemen <kelemeng@gnome.hu>
1125 Date: Tue Sep 4 13:49:16 2012 +0200
1126
1127 Updated Hungarian translation
1128
1129 M po/hu.po
1130
1131 commit c66d0da3965cb3157d08b33278220c2d8d52c5f6
1132 Author: Muhammet Kara <muhammetk@acikkaynak.name.tr>
1133 Date: Tue Sep 4 06:48:19 2012 +0300
1134
1135 [l10n]Updated Turkish translation
1136
1137 M po/tr.po
1138
1139 commit 691760dbea68b46aa6b895f0d6c739302c372806
1140 Author: Piotr Drąg <piotrdrag@gmail.com>
1141 Date: Mon Sep 3 19:09:33 2012 +0200
1142
1143 Updated Polish translation
1144
1145 M po/pl.po
1146
1147 commit a797159ac6b20b5e608290731ff0c9ccc1792848
1148 Author: Dr.T.Vasudevan <agnihot3@gmail.com>
1149 Date: Sun Sep 2 18:02:37 2012 +0530
1150
1151 updated Tamil translation
1152
1153 M po/ta.po
1154
1155 commit a44c335288e7c50db6d95bb080329bb1151d40a7
1156 Author: Daniel Nylander <po@danielnylander.se>
1157 Date: Sun Sep 2 11:59:21 2012 +0200
1158
1159 Updated Swedish translation
1160
1161 M po/sv.po
1162
1163 commit 8a09d2aad657036cb91c6d26fc370fd3a7be3d80
1164 Author: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
1165 Date: Sat Sep 1 22:04:28 2012 +0700
1166
1167 Updated Vietnamese translation
1168
1169 M po/vi.po
1170
1171 commit c126f269866ed323926841157c72c48df5753a99
1172 Author: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
1173 Date: Sat Sep 1 22:01:50 2012 +0700
1174
1175 po/vi: import from Damned Lies
1176
1177 M po/vi.po
1178
1179 commit d2b6d0a7e02d36125a455b99f2a43fb2598fc7cc
1180 Author: Duarte Loreto <happyguy_pt@hotmail.com>
1181 Date: Sat Sep 1 01:17:02 2012 +0100
1182
1183 Updated Portuguese translation
1184
1185 M po/pt.po
1186
1187 commit 6cbb7189d43207cc7abb5709255ddf8a6d5e4562
1188 Author: Aurimas Černius <aurisc4@gmail.com>
1189 Date: Wed Aug 29 22:57:58 2012 +0300
1190
1191 Updated Lithuanian translation
1192
1193 M po/lt.po
1194
1195 commit 55149c45571e54ed59599429e5c131fd64789d80
1196 Author: Chrovex Fan <pixelnecro@foxmail.com>
1197 Date: Tue Aug 28 22:32:44 2012 +0800
1198
1199 update Simplified Chinese (zh_CN) translation
1200
1201 M po/zh_CN.po
1202
1203 commit 2bfb0ab9c702b811d26c5adbd276eebdf0e04592
1204 Author: Nilamdyuti Goswami <nilamdyuti@gmail.com>
1205 Date: Tue Aug 28 00:03:50 2012 +0530
1206
1207 Implemented FUEL entries to Assamese translation
1208
1209 M po/as.po
1210
1211 commit 387804f05c1c6a8648f3930b45df939bf1b684f2
1212 Author: A S Alam <aalam@users.sf.net>
1213 Date: Mon Aug 27 19:58:58 2012 +0530
1214
1215 update Punjabi Translation
1216
1217 M po/pa.po
1218
1219 commit 3be4bc499b3df622c149f89780ad8ffc8c67319a
1220 Author: Piotr Drąg <piotrdrag@gmail.com>
1221 Date: Thu Aug 23 03:24:55 2012 +0200
1222
1223 Updated Polish translation
1224
1225 M po/pl.po
1226
1227 commit 1682e39a113f5ea19e1fd8d0da5fb27db6a95274
1228 Author: Dirgita <dirgitadevina@yahoo.co.id>
1229 Date: Tue Aug 21 22:20:32 2012 +0700
1230
1231 Updated Indonesian translation
1232
1233 M po/id.po
1234
1235 commit 0ed913bb8276b06e3f305b5e1907d87cc23d906a
1236 Author: Fran Diéguez <fran.dieguez@mabishu.com>
1237 Date: Fri Aug 17 23:37:20 2012 +0200
1238
1239 Updated Galician translations
1240
1241 M po/gl.po
1242
1243 commit d0e752350b2a9d8f85845614fda54571e143cef5
1244 Author: Sandeep Sheshrao Shedmake <sshedmak@redhat.com>
1245 Date: Thu Aug 16 12:19:50 2012 +0530
1246
1247 Updated Marathi Translations
1248
1249 M po/mr.po
1250
1251 commit 37f8b405844aedc87169ee902a8ed150978ffb1a
1252 Author: Jasper St. Pierre <jstpierre@mecheye.net>
1253 Date: Mon Aug 6 18:42:20 2012 -0300
1254
1255 Post-release version bump
1256
1257 M configure.ac
1258
1259 commit 42ace8382ab15914f55c7dc6dffab418b38e0e50
1260 Author: Jasper St. Pierre <jstpierre@mecheye.net>
1261 Date: Mon Aug 6 18:36:56 2012 -0300
1262
1263 Release 3.5.5
1264
1265 M NEWS
1266
1267 commit 685323a7cae56b1ced25c10f26af8eda7c9c893a
1268 Author: Мирослав Николић <miroslavnikolic@rocketmail.com>
1269 Date: Mon Aug 6 11:30:07 2012 +0200
1270
1271 Updated Serbian translation
1272
1273 M po/sr.po
1274 M po/sr@latin.po
1275
1276 commit b0c0c0afbc6a563f987df95e508c66c881bb5c27
1277 Author: Sweta Kothari <swkothar@redhat.com>
1278 Date: Mon Jul 30 13:54:26 2012 +0530
1279
1280 Updated gujarati file
1281
1282 M po/gu.po
1283
1284 commit 70f681351441c9146e1e4eb1c48154c5db1d2a5b
1285 Author: Przemysław Buczkowski <przemub@yahoo.pl>
1286 Date: Thu Jul 26 19:41:14 2012 +0200
1287
1288 Added Silesian translation
1289
1290 M po/LINGUAS
1291 A po/szl.po
1292
1293 commit 09053a26df6431e32d706eda69c0b7bf9100994b
1294 Author: Baurzhan Muftakhidinov <baurthefirst@gmail.com>
1295 Date: Thu Jul 26 09:20:18 2012 +0600
1296
1297 Updated Kazakh translation
1298
1299 M po/kk.po
1300
1301 commit 73b36491c3a472c67a15f1684893d080c743c601
1302 Author: Tobias Endrigkeit <tobiasendrigkeit@googlemail.com>
1303 Date: Mon Jul 23 22:43:15 2012 +0200
1304
1305 Updated German translation
1306
1307 M po/de.po
1308
1309 commit 985728566f914aa8a3a3c571dd203ee4b50827f3
1310 Author: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
1311 Date: Tue Jul 17 15:01:09 2012 +0800
1312
1313 Updated Traditional Chinese translation(Hong Kong and Taiwan)
1314
1315 M po/zh_HK.po
1316 M po/zh_TW.po
1317
1318 commit 50f09c92d3418043cbead8ccc014235ab3eb9bd3
1319 Author: Jasper St. Pierre <jstpierre@mecheye.net>
1320 Date: Mon Jul 16 20:24:57 2012 -0400
1321
1322 Post-release version bump
1323
1324 M configure.ac
1325
1326 commit f8e4cb42e10b7c2666f3771da158646a145abd34
1327 Author: Jasper St. Pierre <jstpierre@mecheye.net>
1328 Date: Mon Jul 16 20:24:15 2012 -0400
1329
1330 Release 3.5.4
1331
1332 M NEWS
1333
1334 commit 1e62d7d67525ea5628296435bd95ef325954786d
1335 Author: chingiz <chingis091@lavabit.com>
1336 Date: Mon Jul 16 11:36:35 2012 +0400
1337
1338 Updated Kirghiz translation
1339
1340 M po/ky.po
1341
1342 commit b3f0c47b46b5456d220b7cb8b384a52e71018fa3
1343 Author: Alexander Shopov <ash@kambanaria.org>
1344 Date: Wed Jul 4 07:17:08 2012 +0300
1345
1346 Updated Bulgarian translation
1347
1348 M po/bg.po
1349
1350 commit 2c31301300f13a4ced24a0b116a010f9e20b0756
1351 Author: Jasper St. Pierre <jstpierre@mecheye.net>
1352 Date: Tue Jun 26 13:19:56 2012 -0400
1353
1354 Post-release version bump
1355
1356 M configure.ac
1357
1358 commit 78ac358fcb3135574377cea00781edd19bad6065
1359 Author: Jasper St. Pierre <jstpierre@mecheye.net>
1360 Date: Tue Jun 26 13:18:33 2012 -0400
1361
1362 Release 3.5.3
1363
1364 M NEWS
1365
1366 commit 1fba5a23c30af1a8cd07a6bd2f85e3c805129813
1367 Author: Sasi Bhushan Boddepalli <sasi@swecha.net>
1368 Date: Thu Jun 21 14:27:51 2012 +0530
1369
1370 Updated Telugu Translation
1371
1372 M po/te.po
1373
1374 commit 4a00f1eb30bc33afc14e647efb6ec1450ca7ff51
1375 Author: Nilamdyuti Goswami <nilamdyuti@gmail.com>
1376 Date: Thu Jun 21 14:01:14 2012 +0530
1377
1378 Assamese translation reviewed
1379
1380 M po/as.po
1381
1382 commit d1beaf075f02281e28bb730f3e43dd15dfea2ef3
1383 Author: Jasper St. Pierre <jstpierre@mecheye.net>
1384 Date: Wed Jun 20 14:57:58 2012 -0400
1385
1386 libmenu: Allow grabbing the parent from any GMenuTreeItem
1387
1388 Oh how I wish we had real inheritance.
1389
1390 M libmenu/gmenu-tree.c
1391 M libmenu/gmenu-tree.h
1392
1393 commit ade49e7f07ef6cb0168002f6c12a4be6c1bdbee8
1394 Author: Jasper St. Pierre <jstpierre@mecheye.net>
1395 Date: Mon Jun 18 18:08:26 2012 -0400
1396
1397 libmenu: Add a way to grab NoDisplay on an item and all of its parents
1398
1399 Some applications may want a way to show or hide a tree entry based on
1400 its visibility in the actual tree.
1401
1402 https://bugzilla.gnome.org/show_bug.cgi?id=678419
1403
1404 M libmenu/gmenu-tree.c
1405 M libmenu/gmenu-tree.h
1406
1407 commit fef1440c7b440d0360992c2178ef636b02ef777a
1408 Author: Jasper St. Pierre <jstpierre@mecheye.net>
1409 Date: Fri Jun 1 09:16:01 2012 -0400
1410
1411 libmenu: Allow grabbing the GMenuTree from any GMenuTreeItem
1412
1413 https://bugzilla.gnome.org/show_bug.cgi?id=677270
1414
1415 M libmenu/gmenu-tree.c
1416 M libmenu/gmenu-tree.h
1417
1418 commit eec6221af6a8ee04dddb11af9dbac45819a296db
1419 Author: Vincent Untz <vuntz@gnome.org>
1420 Date: Wed Jun 20 19:56:20 2012 +0200
1421
1422 misc: Add Jasper as co-maintainer
1423
1424 Jasper is completely fixing alacarte, so he's the menu guy now :-)
1425
1426 M MAINTAINERS
1427 M gnome-menus.doap
1428
1429 commit 7a87b12a86d7f8dfebca2a33791c04d5249de692
1430 Author: Tom Tryfonidis <tomtryf@gmail.com>
1431 Date: Tue Jun 19 19:26:24 2012 +0300
1432
1433 Updated Greek translation
1434
1435 M po/el.po
1436
1437 commit 8cd6efdf03a7056ed4c7373e00a2eb7657e5c6cc
1438 Author: Jasper St. Pierre <jstpierre@mecheye.net>
1439 Date: Sat Jun 2 13:27:24 2012 -0400
1440
1441 libmenu: Add the forgotten gmenu_tree_iter_get_separator
1442
1443 https://bugzilla.gnome.org/show_bug.cgi?id=677344
1444
1445 M libmenu/gmenu-tree.c
1446 M libmenu/gmenu-tree.h
1447
1448 commit 2a83843d381cebf95a775a9ae2c176c5ae816fc8
1449 Author: Colin Walters <walters@verbum.org>
1450 Date: Fri Jun 8 16:34:12 2012 -0400
1451
1452 gnome-menus: Fix g-ir-scanner warnings
1453
1454 M libmenu/gmenu-tree.c
1455
1456 commit 4973cf303cb9d5e8b160fb1ac0649ac2f864b8b4
1457 Author: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
1458 Date: Fri Jun 8 18:55:01 2012 +0300
1459
1460 Updated Belarusian translation.
1461
1462 M po/be.po
1463
1464 commit 175f03aeef932bf9bf0527e11624e9a8e126e769
1465 Author: Matthias Clasen <mclasen@redhat.com>
1466 Date: Tue Jun 5 09:21:45 2012 -0400
1467
1468 Post-release version bump
1469
1470 M configure.ac
1471
1472 commit c43bc6bc305b156be066fba6ae385b46e0063409
1473 Author: Matthias Clasen <mclasen@redhat.com>
1474 Date: Tue Jun 5 09:17:34 2012 -0400
1475
1476 3.5.2
1477
1478 M NEWS
1479 M configure.ac
1480
1481 commit 326c6ca76a4a739bb3d669ed4ce2d36d9b89eabe
1482 Author: Kjartan Maraas <kmaraas@gnome.org>
1483 Date: Wed May 30 14:06:31 2012 +0200
1484
1485 Updated Norwegian bokmål translation
1486
1487 M po/nb.po
1488
1489 commit efc14ec052a53b706d8d2132ec62426cd46f54ea
1490 Author: Aleksej Kabanov <ak099@mail.ru>
1491 Date: Sun May 27 00:56:26 2012 +0400
1492
1493 Updated Russian translation
1494
1495 M po/ru.po
1496
1497 commit 4693fdd844b623a69e02ec853f90888aee82a728
1498 Author: Yaron Shahrabani <sh.yaron@gmail.com>
1499 Date: Fri May 25 15:29:40 2012 +0300
1500
1501 Updated Hebrew translation.
1502
1503 M po/he.po
1504
1505 commit ef10032c3c9d20cb46482829f7bbf5e09c311dee
1506 Author: Matej Urbančič <mateju@svn.gnome.org>
1507 Date: Wed May 23 20:02:27 2012 +0200
1508
1509 Updated Slovenian translation
1510
1511 M po/sl.po
1512
1513 commit 64606ea5a3c0f3faa5f406a63c53a51a1eb8823a
1514 Author: Fran Diéguez <fran.dieguez@mabishu.com>
1515 Date: Sun May 20 17:57:35 2012 +0200
1516
1517 Updated Galician translations
1518
1519 M po/gl.po
1520
1521 commit 068bfbdbcb328c0f7eb29faecaf41c82e5633bb5
1522 Author: Daniel Mustieles <daniel.mustieles@gmail.com>
1523 Date: Mon May 14 16:49:12 2012 +0200
1524
1525 Updated Spanish translation
1526
1527 M po/es.po
1528
1529 commit 9452548505add051e3ca099332edad2dc7764181
1530 Author: Giovanni Campagna <gcampagna@src.gnome.org>
1531 Date: Tue May 1 00:23:39 2012 +0200
1532
1533 layout: Add a separate category for Web Applications
1534
1535 For technical reasons, it is not possible to guess an appropriate
1536 category for web applications created with Epiphany, so they
1537 would all end up in Others. Instead, make up a category and submenu
1538 just for them.
1539
1540 https://bugzilla.gnome.org/show_bug.cgi?id=675198
1541
1542 M desktop-directories/Makefile.am
1543 A desktop-directories/X-GNOME-WebApplications.directory.in
1544 M layout/applications.menu
1545 M po/POTFILES.in
1546
1547 commit b93cc6818c7ee7be1339f0f7bf8d3ec24790df59
1548 Author: Vincent Untz <vuntz@gnome.org>
1549 Date: Thu Feb 2 10:19:02 2012 +0100
1550
1551 util: Add --include-unallocated option to gnome-menu-spec-test
1552
1553 We want easy testing for GMENU_TREE_FLAGS_INCLUDE_UNALLOCATED.
1554
1555 https://bugzilla.gnome.org/show_bug.cgi?id=668512
1556
1557 M util/test-menu-spec.c
1558
1559 commit 159bfe766f024598e967765a418430dfa46d2197
1560 Author: Vincent Untz <vuntz@gnome.org>
1561 Date: Thu Feb 2 10:16:40 2012 +0100
1562
1563 libmenu: Add GMENU_TREE_FLAGS_INCLUDE_UNALLOCATED flag
1564
1565 Add a new GMENU_TREE_FLAGS_INCLUDE_UNALLOCATED flag to add in the root
1566 directory entries that are not allocated anywhere else. This is useful
1567 if the user really wants to get absolutely all entries (in addition to
1568 using INCLUDE_EXCLUDED, which is a bit different, and
1569 INCLUDE_NODISPLAY).
1570
1571 Add gmenu_tree_entry_get_is_unallocated() API matching this flag.
1572
1573 https://bugzilla.gnome.org/show_bug.cgi?id=668512
1574
1575 M libmenu/gmenu-tree.c
1576 M libmenu/gmenu-tree.h
1577
1578 commit 6b6956b75de4566772c7144a01b39634671b364f
1579 Author: Piotr Drąg <piotrdrag@gmail.com>
1580 Date: Mon Apr 16 19:15:35 2012 +0200
1581
1582 Added Kashubian translation
1583
1584 M po/LINGUAS
1585 A po/csb.po
1586
1587 commit 9d68b854b35573d5567fe79cc58d011ae23ed23e
1588 Author: Alexander Shopov <ash@kambanaria.org>
1589 Date: Sun Apr 1 18:11:32 2012 +0300
1590
1591 Updated Bulgarian translation
1592
1593 M po/bg.po
1594
1595 commit da8b0ff0c8733d8f94d7e29f1ba67ff2e9bace98
1596 Author: Vincent Untz <vuntz@gnome.org>
1597 Date: Mon Mar 26 10:37:18 2012 +0200
1598
1599 release: post-release bump to 3.4.1
1600
1601 M configure.ac
1602
1603 commit e1b3578220871cd5e607a93ab1b251da9e56d4d6
1604 Author: Vincent Untz <vuntz@gnome.org>
1605 Date: Mon Mar 26 10:36:57 2012 +0200
1606
1607 release: 3.4.0
1608
1609 M NEWS
1610 M configure.ac
1611
1612 commit f553195fee927f128963702fc9443ce6d84fb20b
1613 Author: Khoem Sokhem <khoemsokhem@khmeros.info>
1614 Date: Sat Mar 10 13:24:57 2012 +0100
1615
1616 Add initial Khmer translation
1617
1618 M po/LINGUAS
1619 A po/km.po
1620
1621 commit f289d086d2f3162bef06eada7276cd473f73fbfe
1622 Author: Bahodir Mansurov <6ahodir@gmail.com>
1623 Date: Fri Feb 24 21:24:22 2012 -0500
1624
1625 Updated Uzbek@cyrillic translation
1626
1627 M po/uz@cyrillic.po
1628
1629 commit 17b1dc3a3c850794bfe3df028ed72483fb21489e
1630 Author: Vincent Untz <vuntz@gnome.org>
1631 Date: Wed Feb 22 15:10:35 2012 +0100
1632
1633 build: Generate ChangeLog on make dist
1634
1635 M Makefile.am
1636
1637 commit ac467f5484a8c32ccb1484147003dbea8ee51d99
1638 Author: Vincent Untz <vuntz@gnome.org>
1639 Date: Wed Feb 22 15:03:08 2012 +0100
1640
1641 build: Update git.mk and ignore generated tarballs
1642
1643 M Makefile.am
1644 M git.mk
1645
1646 commit 82f575edbd949f682bc9242263e318f7e1d4d57c
1647 Author: Vincent Untz <vuntz@gnome.org>
1648 Date: Mon Feb 6 12:27:00 2012 +0100
1649
1650 release: post-release bump to 3.3.90
1651
1652 M configure.ac
1653
1654 commit 44030054b1752ea353c010ec0588fbc804ffc662
1655 Author: Vincent Untz <vuntz@gnome.org>
1656 Date: Mon Feb 6 12:26:54 2012 +0100
1657
1658 release: 3.3.5
1659
1660 M NEWS
1661 M configure.ac
1662
1663 commit 2adf8dc80b99459450e891161b3b7f254317d9b5
1664 Author: Danishka Navin <danishka@gmail.com>
1665 Date: Wed Feb 1 17:29:09 2012 +0530
1666
1667 fixed few typos in si.po file
1668
1669 M po/si.po
1670
1671 commit 17d5a7f7942f9045acdb8d5cbe18c967169d054e
1672 Author: Danishka Navin <danishka@gmail.com>
1673 Date: Wed Feb 1 16:08:30 2012 +0530
1674
1675 fixed few typos in si.po file
1676
1677 M po/si.po
1678
1679 commit 7b895320a73ef066508d0d411c9ce1e725188a96
1680 Author: Kjartan Maraas <kmaraas@gnome.org>
1681 Date: Wed Jan 25 14:47:48 2012 +0100
1682
1683 Updated Norwegian bokmål translation
1684
1685 M po/nb.po
1686
1687 commit a84c7d360b4cb22a10cac76c95eff4654effd730
1688 Author: Andiswa Mvanyashe <andiswamva@webmail.co.za>
1689 Date: Tue Jan 17 08:09:02 2012 +0200
1690
1691 Updated translation for Xhosa (xh)
1692
1693 M po/xh.po
1694
1695 commit 91a67746970ca4327c03c2f048e48c666a1f3776
1696 Author: Vincent Untz <vuntz@gnome.org>
1697 Date: Tue Dec 20 09:45:45 2011 +0100
1698
1699 build: Create xz tarballs
1700
1701 M configure.ac
1702
1703 commit 581bdf9920d18024413fa7afcacd83e733a26089
1704 Author: Jiro Matsuzawa <jmatsuzawa@src.gnome.org>
1705 Date: Fri Nov 11 02:51:39 2011 +0900
1706
1707 Updated Japanese translation
1708
1709 M po/ja.po
1710
1711 commit 8d46c3a20c4718384b66180990258c0ad6c12f49
1712 Author: Vincent Untz <vuntz@gnome.org>
1713 Date: Mon Oct 24 13:58:21 2011 +0200
1714
1715 release: post-release bump to 3.3.2
1716
1717 M configure.ac
1718
1719 commit f258c9c144c569772a1ea7ea81179c98110fc58f
1720 Author: Vincent Untz <vuntz@gnome.org>
1721 Date: Mon Oct 24 13:58:14 2011 +0200
1722
1723 release: 3.3.1
1724
1725 M NEWS
1726 M configure.ac
1727
1728 commit fbabc41cb6f2c6520f9f117137fa296a7f8340f3
1729 Author: Florian Müllner <fmuellner@gnome.org>
1730 Date: Fri Oct 21 19:57:55 2011 +0200
1731
1732 libmenu: Ignore invalid desktop entries
1733
1734 Both "Name" and "Exec" are mandatory keys according to the desktop
1735 entry spec; some .desktop files missing one or the other have been
1736 spotted in the while, so ignore them explicitly.
1737
1738 https://bugzilla.gnome.org/show_bug.cgi?id=662409
1739
1740 M libmenu/desktop-entries.c
1741
1742 commit 2179d84e1d7ce5a5b79f2736bf64a13e7bca1b4d
1743 Author: Vincent Untz <vuntz@gnome.org>
1744 Date: Fri Oct 7 10:43:02 2011 +0200
1745
1746 layout: Put the Other menu at the end
1747
1748 It's really a special menu, which should not be handled with
1749 alphabetical order.
1750
1751 M layout/applications.menu
1752
1753 commit 480edac95baba553b3cfc471817779e50a367871
1754 Author: Vincent Untz <vuntz@gnome.org>
1755 Date: Wed Sep 28 09:24:19 2011 +0200
1756
1757 release: post-release bump to 3.2.1
1758
1759 M configure.ac
1760
1761 commit 2d5915b925791d2d3bd736704a8706553455bd26
1762 Author: Vincent Untz <vuntz@gnome.org>
1763 Date: Wed Sep 28 09:24:11 2011 +0200
1764
1765 release: 3.2.0.1
1766
1767 M NEWS
1768 M configure.ac
1769
1770 commit f1c76629d33a616089a15bd034708d21e8bd9a87
1771 Author: Vincent Untz <vuntz@gnome.org>
1772 Date: Tue Sep 27 12:09:35 2011 +0200
1773
1774 editor: Fix to work with latest pygi
1775
1776 https://bugzilla.gnome.org/show_bug.cgi?id=660112
1777
1778 M simple-editor/GMenuSimpleEditor/main.py
1779 M simple-editor/GMenuSimpleEditor/menufilewriter.py
1780 M simple-editor/GMenuSimpleEditor/menutreemodel.py
1781
1782 commit b87a8c15e95fa64c94343b0bfdc6523e8f6c1bbc
1783 Author: Vincent Untz <vuntz@gnome.org>
1784 Date: Mon Sep 26 11:09:13 2011 +0200
1785
1786 release: post-release bump to 3.2.1
1787
1788 M configure.ac
1789
1790 commit 4b0e41e9b45087402e64d90c2760c8d2101cd53e
1791 Author: Vincent Untz <vuntz@gnome.org>
1792 Date: Mon Sep 26 11:09:08 2011 +0200
1793
1794 release: 3.2.0
1795
1796 M NEWS
1797
1798 commit 36f7db2473f1d6a0c7a1b1e05e056210ac87e80b
1799 Author: Nilamdyuti Goswami <ngoswami@redhat.com>
1800 Date: Sat Sep 24 15:27:52 2011 +0530
1801
1802 Updated Assamese Translations:bugzilla#659595
1803
1804 M po/as.po
1805
1806 commit 1412cf2222ef8e0f33e9bfa234cf7fdbf6aee035
1807 Author: ipraveen <mail2ipn@gmail.com>
1808 Date: Fri Sep 23 16:32:28 2011 +0530
1809
1810 Updated Telugu Translation
1811
1812 M po/te.po
1813
1814 commit 3ecf6975346ab77b111a99c45b0f7a79228b202f
1815 Author: ipraveen <mail2ipn@gmail.com>
1816 Date: Fri Sep 23 16:26:27 2011 +0530
1817
1818 Updated Telugu Translation
1819
1820 M po/te.po
1821
1822 commit 26e1dd8864b18c5dee038a929bc23cfcadc0f6e1
1823 Author: Nilamdyuti Goswami <ngoswami@redhat.com>
1824 Date: Thu Sep 22 20:17:41 2011 +0200
1825
1826 Updated Assamese translation
1827
1828 M po/as.po
1829
1830 commit 612011be0953e15f349946ba48df5e6e8f036282
1831 Author: Vincent Untz <vuntz@gnome.org>
1832 Date: Mon Sep 19 19:34:28 2011 +0200
1833
1834 release: post-release bump to 3.2.0
1835
1836 M configure.ac
1837
1838 commit 5d7dd75fbf694cfd31f04a3f81c80786b1b5841d
1839 Author: Vincent Untz <vuntz@gnome.org>
1840 Date: Mon Sep 19 19:34:21 2011 +0200
1841
1842 release: 3.1.92
1843
1844 M NEWS
1845 M configure.ac
1846
1847 commit 49406208c5b1bfe449ed46c20d0bf16c7a363518
1848 Author: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
1849 Date: Sun Sep 18 18:22:42 2011 +0300
1850
1851 Updated Belarusian translation (some fixes after manual testing).
1852
1853 M po/be.po
1854
1855 commit c3cc2e1d2dfa4f219c01c8dfee4d14e8aebd3a1e
1856 Author: Jiro Matsuzawa <jmatsuzawa@src.gnome.org>
1857 Date: Sat Sep 17 12:08:06 2011 +0900
1858
1859 Updated Japanese translation
1860
1861 M po/ja.po
1862
1863 commit 8c4aa57ca8ff56f1941899eb3c67babd2b7a3839
1864 Author: dmustieles <daniel.mustieles@gmail.com>
1865 Date: Wed Sep 14 17:37:05 2011 +0200
1866
1867 Updated Spanish translation
1868
1869 M po/es.po
1870
1871 commit ecb47adb12c8ec9a3998efa96656dfedfe002525
1872 Author: Vincent Untz <vuntz@gnome.org>
1873 Date: Mon Aug 29 08:43:26 2011 +0200
1874
1875 libmenu: Fix build failure with --enable-debug
1876
1877 gmenu_tree_entry_get_name() was still being used.
1878
1879 https://bugzilla.gnome.org/show_bug.cgi?id=656714
1880
1881 M libmenu/gmenu-tree.c
1882
1883 commit 20d76fb2f1664aadf0b33c7c91603b47dfe04ef0
1884 Author: Matthias Clasen <mclasen@redhat.com>
1885 Date: Sun Aug 28 19:22:26 2011 -0400
1886
1887 Post-release version bump
1888
1889 M configure.ac
1890
1891 commit 002662a50ab7fbce7398596a53e7270fc6f168e3
1892 Author: Matthias Clasen <mclasen@redhat.com>
1893 Date: Sun Aug 28 19:22:00 2011 -0400
1894
1895 3.1.90
1896
1897 M NEWS
1898
1899 commit 739d3f6ef7d533544f1ec2b4d6e237bfaca99e85
1900 Author: Jasper St. Pierre <jstpierre@mecheye.net>
1901 Date: Sun Aug 21 17:27:50 2011 -0400
1902
1903 libmenu: Don't try to unref potentially NULL pointers
1904
1905 When a DIRECTORY desktop entry fails to load, we'll try to unref
1906 some NULL pointers. This was causing some warnings.
1907
1908 https://bugzilla.gnome.org/show_bug.cgi?id=657042
1909
1910 M libmenu/desktop-entries.c
1911
1912 commit 5fade40dc3ebff3b4c00cdf37e6d7198e39e9bce
1913 Author: Vincent Untz <vuntz@gnome.org>
1914 Date: Fri Aug 12 11:50:59 2011 +0200
1915
1916 release: post-release bump to 3.1.90
1917
1918 M configure.ac
1919
1920 commit 8e0ecffe8a6d4434dab086525f52d05e00edf0e9
1921 Author: Vincent Untz <vuntz@gnome.org>
1922 Date: Fri Aug 12 11:50:52 2011 +0200
1923
1924 release: 3.1.5
1925
1926 M NEWS
1927 M configure.ac
1928
1929 commit 61c87a8e66bfa1d7a823a588b073e3922edc78c3
1930 Author: Vincent Untz <vuntz@gnome.org>
1931 Date: Fri Aug 12 10:44:32 2011 +0200
1932
1933 libmenu: Support XDG_CURRENT_DESKTOP
1934
1935 https://bugzilla.gnome.org/show_bug.cgi?id=653440
1936
1937 M libmenu/desktop-entries.c
1938
1939 commit f0e41152be32a3e07772b53a6c3a0d4dbb0545d9
1940 Author: Colin Walters <walters@verbum.org>
1941 Date: Tue Aug 2 23:13:30 2011 -0400
1942
1943 gmenu_tree_get_entry_by_id: New API
1944
1945 It's useful for gnome-shell if we have an index by desktop file ID to
1946 the tree entry. The cost is very small.
1947
1948 https://bugzilla.gnome.org/show_bug.cgi?id=655868
1949
1950 M libmenu/gmenu-tree.c
1951 M libmenu/gmenu-tree.h
1952
1953 commit 2a17c07927cfc23c9837969ac43f2fbcf9e433d7
1954 Author: Vincent Untz <vuntz@gnome.org>
1955 Date: Sat Jul 23 10:06:35 2011 +0200
1956
1957 build: Require gio-unix-2.0 >= 2.29.15
1958
1959 g_desktop_app_info_get_show_in() was pushed, but after 2.29.14.
1960
1961 M configure.ac
1962
1963 commit 3fae17cc6e86b3e988df481a05a386e005b7637c
1964 Author: Vincent Untz <vuntz@gnome.org>
1965 Date: Fri Jul 22 13:21:17 2011 +0200
1966
1967 editor: Stop editing settings.menu
1968
1969 We dropped that file a while ago. We could replace this with
1970 gnomecc.menu, but gnome-control-center loads the file from the system
1971 configuration and explicitly ignore the user changes there...
1972
1973 M simple-editor/GMenuSimpleEditor/menutreemodel.py
1974
1975 commit 1cb6fe8f97cc5a12933bd77d278a16827e763c13
1976 Author: Vincent Untz <vuntz@gnome.org>
1977 Date: Fri Jul 22 08:55:19 2011 +0200
1978
1979 libmenu: Unset GMenuTree:menu-basename if GMenuTree:menu-path is set
1980
1981 Since GMenuTree:menu-basename has a non-NULL default value, we really
1982 want to unset it if the user sets GMenuTree:menu-path, to avoid any
1983 potential confusion.
1984
1985 We need a constructor to do this magic, as the properties are
1986 construct-only, and doing this anywhere else would be too late.
1987
1988 M libmenu/gmenu-tree.c
1989
1990 commit 02d0f749a1c4f406fa773254c2095e6c4f3d5979
1991 Author: Vincent Untz <vuntz@gnome.org>
1992 Date: Thu Jul 21 18:28:56 2011 +0200
1993
1994 libmenu: Group GMenuTreeFlags flags in a pseudo-consistent way
1995
1996 Since we're breaking ABI, let's go crazy and change the value of flags.
1997 Grouping flags by some sort of meaning (include ones, show ones, misc.
1998 ones) makes the header a bit nicer to read.
1999
2000 M libmenu/gmenu-tree.h
2001
2002 commit 9e2b4abdc8ec63e20f4c2a52b3047f1d767ebd8d
2003 Author: Vincent Untz <vuntz@gnome.org>
2004 Date: Thu Jul 21 18:19:24 2011 +0200
2005
2006 editor: Port to introspection-based gmenu bindings
2007
2008 M simple-editor/GMenuSimpleEditor/maindialog.py
2009 M simple-editor/GMenuSimpleEditor/menutreemodel.py
2010
2011 commit 6f4cf16ec2633ebc62cb91759dbfd01923cd3c73
2012 Author: Vincent Untz <vuntz@gnome.org>
2013 Date: Thu Jul 21 18:09:25 2011 +0200
2014
2015 libmenu, util: Rename gmenu_tree_get_menu_path()
2016
2017 Renamed to gmenu_tree_get_canonical_menu_path(), to avoid any potential
2018 confusion with the menu-path property.
2019
2020 M libmenu/gmenu-tree.c
2021 M libmenu/gmenu-tree.h
2022 M util/test-menu-spec.c
2023
2024 commit 8bc90706c9bfbf0d55c2eaddc859afb4a52a3281
2025 Author: Vincent Untz <vuntz@gnome.org>
2026 Date: Thu Jul 21 18:07:54 2011 +0200
2027
2028 libmenu: Add API to load menu file from full path
2029
2030 Add gmenu_tree_new_for_path() and GMenuTree:menu-path.
2031
2032 M libmenu/gmenu-tree.c
2033 M libmenu/gmenu-tree.h
2034
2035 commit c653bbe8904acca4340f70574357d843e549035c
2036 Author: Vincent Untz <vuntz@gnome.org>
2037 Date: Thu Jul 21 17:22:20 2011 +0200
2038
2039 libmenu, util: Rename GMenuTree:name to GMenuTree:menu-basename
2040
2041 This is a much clearer name for the property, else people might assume
2042 they can use a full path, or something that is not a basename.
2043
2044 Note that a relative path will work, but that really should not be of
2045 much use, hence the choice of basename.
2046
2047 M libmenu/gmenu-tree.c
2048 M libmenu/gmenu-tree.h
2049 M util/gnome-menus-ls.js
2050
2051 commit c45596c3d87fa3e344b9e9a32c51190e12d67d93
2052 Author: Vincent Untz <vuntz@gnome.org>
2053 Date: Thu Jul 21 17:13:18 2011 +0200
2054
2055 libmenu: Fix critical warning when trying to load "" menu
2056
2057 Yes, this is a weird use of the API, but still.
2058
2059 M libmenu/gmenu-tree.c
2060
2061 commit 4c85e0ee58a4e8b11f1e5527909eefd02133a72a
2062 Author: Vincent Untz <vuntz@gnome.org>
2063 Date: Thu Jul 21 17:00:25 2011 +0200
2064
2065 libmenu: Default GMenuTree::name property to "applications.menu"
2066
2067 This is useful for introspection bindings, since users will not
2068 necessarily think of setting the menu name property at construct time.
2069 And it's a saner default than NULL.
2070
2071 M libmenu/gmenu-tree.c
2072
2073 commit d8be0079a48bb7b486cc2b1355ee0cea2596fecb
2074 Author: Vincent Untz <vuntz@gnome.org>
2075 Date: Thu Jul 21 16:55:57 2011 +0200
2076
2077 libmenu: Do not keep internal load_error in GMenuTree
2078
2079 This is not used, and it actually gets corrupted at some point (since
2080 g_propagate_error means we lose the ownership of the GError).
2081
2082 M libmenu/gmenu-tree.c
2083
2084 commit bb3e154f60f81e97178b0cb8457827b29ee20692
2085 Author: Vincent Untz <vuntz@gnome.org>
2086 Date: Thu Jul 21 16:01:46 2011 +0200
2087
2088 build: Bump version to 3.1.4
2089
2090 This is needed so users can know which version to require for the new
2091 API.
2092
2093 M configure.ac
2094
2095 commit 70e9aaacbe0783fe11b7c69310873e0dc638b274
2096 Author: Vincent Untz <vuntz@gnome.org>
2097 Date: Thu Jul 21 15:57:18 2011 +0200
2098
2099 libmenu: Drop GMenuTreeDirectoryRoot
2100
2101 This was only used internally, but with no reason.
2102
2103 M libmenu/gmenu-tree.c
2104
2105 commit 17961198a182d5f68e4773427b1c8f735e0a01cd
2106 Author: Vincent Untz <vuntz@gnome.org>
2107 Date: Thu Jul 21 15:48:35 2011 +0200
2108
2109 libmenu: Make gmenu_tree_directory_get_icon() return a GIcon
2110
2111 It's much better to use GIcon than icon name strings.
2112
2113 M libmenu/desktop-entries.c
2114 M libmenu/desktop-entries.h
2115 M libmenu/gmenu-tree.c
2116 M libmenu/gmenu-tree.h
2117
2118 commit 3c6ad47de8cfc3581fee66107a41ba4b39dd0de0
2119 Author: Vincent Untz <vuntz@gnome.org>
2120 Date: Thu Jul 21 15:26:11 2011 +0200
2121
2122 libmenu: Correctly deal with OnlyShowIn/NotShowIn
2123
2124 We're using new glib API for this.
2125
2126 Also, we do not remove entries because of OnlyShowIn/NotShowIn before
2127 processing the layout, as we might want to add a GMenuTreeFlags value in
2128 the future, to include .desktop files that are excluded because of
2129 OnlyShowIn/NotShowIn.
2130
2131 M configure.ac
2132 M libmenu/desktop-entries.c
2133 M libmenu/desktop-entries.h
2134 M libmenu/gmenu-tree.c
2135
2136 commit 66557ef586adff091c8ce69a2f472da00dcd89ba
2137 Author: Vincent Untz <vuntz@gnome.org>
2138 Date: Mon Jul 4 17:23:32 2011 +0200
2139
2140 build: Drop check for -fno-strict-aliasing support
2141
2142 This was only needed for our previous python bindings.
2143
2144 M configure.ac
2145
2146 commit fc5492ab992fde2b8d378ed91f0b4c6c62cbe69b
2147 Author: Colin Walters <walters@verbum.org>
2148 Date: Tue Jun 14 13:52:06 2011 -0400
2149
2150 libmenu: Dispose of source before context to avoid possible double unref
2151
2152 M libmenu/menu-layout.c
2153
2154 commit 21062503fff272872fdfc5fb468288b1faa85127
2155 Author: Colin Walters <walters@verbum.org>
2156 Date: Tue Jun 14 13:25:47 2011 -0400
2157
2158 libmenu: Make refcounts volatile as g_atomic_* expect
2159
2160 M libmenu/gmenu-tree.c
2161
2162 commit b8b2471e8a3bd0f2d469dea41067721919359c22
2163 Author: Vincent Untz <vuntz@gnome.org>
2164 Date: Tue Jun 14 09:04:31 2011 +0200
2165
2166 libmenu: Correctly look up at NoDisplay for .desktop files
2167
2168 We were using Hidden instead. This requires glib 2.29.9.
2169
2170 M configure.ac
2171 M libmenu/desktop-entries.c
2172
2173 commit 6ba57847943cd74839a306ed6c8926401e370b85
2174 Author: Vincent Untz <vuntz@gnome.org>
2175 Date: Sun Jun 12 12:50:05 2011 +0200
2176
2177 libmenu: Simplify some code
2178
2179 M libmenu/desktop-entries.c
2180
2181 commit 2c47cdbebb15715d91d95aa4babc2de7a993dbd4
2182 Author: Vincent Untz <vuntz@gnome.org>
2183 Date: Sun Jun 12 12:38:30 2011 +0200
2184
2185 libmenu: Fix loading of .directory files
2186
2187 We were always returning FALSE, leaking some data and not displaying a
2188 debug message in case of error (like for .desktop files).
2189
2190 M libmenu/desktop-entries.c
2191
2192 commit 6aff671fbeccb5ff7ec3290d0fd6345fbbb632c8
2193 Author: Vincent Untz <vuntz@gnome.org>
2194 Date: Sun Jun 12 12:34:26 2011 +0200
2195
2196 util: Fix build after gmenu_tree_alias_get_item_type() renaming
2197
2198 M util/test-menu-spec.c
2199
2200 commit 398fd5c145524b7961c9d1dbc105c1cd49d98103
2201 Author: Vincent Untz <vuntz@gnome.org>
2202 Date: Sun Jun 12 12:12:55 2011 +0200
2203
2204 doc: Do not reference non-existing gmenu_tree_iter_get_next_type()
2205
2206 This is gmenu_tree_iter_next().
2207
2208 M libmenu/gmenu-tree.c
2209
2210 commit e71520d5d2ccc4392b046e5feb84349d71a2c69f
2211 Author: Vincent Untz <vuntz@gnome.org>
2212 Date: Sun Jun 12 12:11:31 2011 +0200
2213
2214 libmenu: Handle GenericName for .directory files
2215
2216 While we do not strictly need them right now, this is allowed by the
2217 specification and might be used later.
2218
2219 M libmenu/desktop-entries.c
2220 M libmenu/desktop-entries.h
2221 M libmenu/gmenu-tree.c
2222 M libmenu/gmenu-tree.h
2223
2224 commit f29590a8c3771af47debf75c929170fe59877dce
2225 Author: Vincent Untz <vuntz@gnome.org>
2226 Date: Sun Jun 12 11:53:59 2011 +0200
2227
2228 libmenu: Fix desktop_entry_copy() for .desktop file
2229
2230 We were not dealing with the appinfo field at all.
2231
2232 M libmenu/desktop-entries.c
2233
2234 commit 0d5f1909518f86d7283cde404e9470e6f55a42d2
2235 Author: Vincent Untz <vuntz@gnome.org>
2236 Date: Sun Jun 12 11:41:20 2011 +0200
2237
2238 libmenu: Rename gmenu_tree_alias_get_item_type
2239
2240 Renamed to gmenu_tree_alias_get_aliased_item_type, to avoid any
2241 potential confusion about the typoe of what item this is.
2242
2243 M libmenu/gmenu-tree.c
2244 M libmenu/gmenu-tree.h
2245
2246 commit 4d96af04a6d1d2e211c2005cc9d03d2b0e1a85c0
2247 Author: Vincent Untz <vuntz@gnome.org>
2248 Date: Sun Jun 12 11:33:16 2011 +0200
2249
2250 libmenu: Drop gmenu_tree_entry_get_is_nodisplay() from header
2251
2252 The function got dropped, and having a similar function in
2253 GDesktopAppInfo would be the right thing to do.
2254
2255 M libmenu/gmenu-tree.h
2256
2257 commit f587ca8642070892fd4172ab01735c4a0789dc19
2258 Author: Vincent Untz <vuntz@gnome.org>
2259 Date: Sun Jun 12 11:12:42 2011 +0200
2260
2261 libmenu: Remove unneeded cast
2262
2263 M libmenu/gmenu-tree.c
2264
2265 commit 2167c042bc089ba1e570ac9ba60dcdddb1d1d3c3
2266 Author: Vincent Untz <vuntz@gnome.org>
2267 Date: Sun Jun 12 11:05:52 2011 +0200
2268
2269 libmenu: Rename desktop_entry_desktop_get_icon to desktop_entry_get_icon
2270
2271 The additional desktop in the name was confusing.
2272
2273 M libmenu/desktop-entries.c
2274 M libmenu/desktop-entries.h
2275 M libmenu/gmenu-tree.c
2276
2277 commit 0f7d374006f32559893629fba47fecfaa031d4f8
2278 Author: Vincent Untz <vuntz@gnome.org>
2279 Date: Sun Jun 12 10:53:05 2011 +0200
2280
2281 libmenu: Fix getting the flags property
2282
2283 This was not handled at all.
2284
2285 M libmenu/gmenu-tree.c
2286
2287 commit 0eaed2f94d52a8b03263e5976a4d16104546929c
2288 Author: Vincent Untz <vuntz@gnome.org>
2289 Date: Sun Jun 12 10:39:54 2011 +0200
2290
2291 libmenu: Drop support for "KDE Desktop Entry" group
2292
2293 This was deprecated for years, and with the move to GDesktopAppInfo, we
2294 don't support this group for .desktop files anyway, so it makes no sense
2295 to keep supporting it for .directory files.
2296
2297 M libmenu/desktop-entries.c
2298
2299 commit 536c6d510f53bbf76ff0c4134e935c8e7cf552da
2300 Author: Vincent Untz <vuntz@gnome.org>
2301 Date: Sun Jun 12 10:31:37 2011 +0200
2302
2303 libmenu: Use explicit GMENU_TREE_FLAGS_NONE instead of 0
2304
2305 M libmenu/gmenu-tree.c
2306
2307 commit d5da147d09ca09e593e4a88c11b782ee7479268f
2308 Author: Vincent Untz <vuntz@gnome.org>
2309 Date: Sun Jun 12 09:58:20 2011 +0200
2310
2311 Spaces/tabs fixes
2312
2313 M libmenu/desktop-entries.c
2314 M libmenu/desktop-entries.h
2315 M libmenu/gmenu-tree.c
2316 M libmenu/gmenu-tree.h
2317 M libmenu/menu-layout.c
2318
2319 commit 6920649082e3c0be363094054eecc9f1185a8185
2320 Author: Vincent Untz <vuntz@gnome.org>
2321 Date: Wed Jun 8 17:55:43 2011 +0200
2322
2323 util: Do not call exit() in test tool
2324
2325 A simple return statement is enough.
2326
2327 M util/test-menu-spec.c
2328
2329 commit f88d8c4dd17055932a6b335c008b496327d536b3
2330 Author: Vincent Untz <vuntz@gnome.org>
2331 Date: Wed Jun 8 17:48:58 2011 +0200
2332
2333 build: Fix pkg-config to require gio-unix-2.0 and not glib-2.0
2334
2335 We reference gio/gdesktopappinfo.h in our public header.
2336
2337 M libmenu/libgnome-menu-3.0-uninstalled.pc.in
2338 M libmenu/libgnome-menu-3.0.pc.in
2339
2340 commit cfb20fb779eeed93a0c9571a8340251c8964ef69
2341 Author: Vincent Untz <vuntz@gnome.org>
2342 Date: Wed Jun 8 17:44:16 2011 +0200
2343
2344 gi: Add/Fix annotations to remove introspection warnings
2345
2346 M libmenu/gmenu-tree.c
2347
2348 commit 91a698f7860b3d8d5f29ffcdfcdbadf0cc347bad
2349 Author: Vincent Untz <vuntz@gnome.org>
2350 Date: Wed Jun 8 17:39:42 2011 +0200
2351
2352 build: Version the library name and the pkg-config file
2353
2354 The library is now libgnome-menu-3, the pkg-config file is
2355 libgnome-menu-3.0, the header directory is gnome-menus-3.0 and the
2356 gettext package is gnome-menus-3.0.
2357
2358 This way, it's possible to keep the old libgnome-menu around if some
2359 applications still need it.
2360
2361 M configure.ac
2362 M libmenu/Makefile.am
2363 R080 libmenu/libgnome-menu-uninstalled.pc.in libmenu/libgnome-menu-3.0-uninstalled.pc.in
2364 R072 libmenu/libgnome-menu.pc.in libmenu/libgnome-menu-3.0.pc.in
2365 M util/Makefile.am
2366
2367 commit 669f03a403ca83facf83020e9c37b894c67f1b9b
2368 Author: Vincent Untz <vuntz@gnome.org>
2369 Date: Wed Jun 8 16:19:49 2011 +0200
2370
2371 build: Remove old python-related build stuff
2372
2373 M configure.ac
2374 D m4/python.m4
2375
2376 commit 1cf4482fa3416b98916653db23b40edb26d8646d
2377 Author: Colin Walters <walters@verbum.org>
2378 Date: Thu Apr 21 13:21:57 2011 -0400
2379
2380 Bump to GMenu-4.0.gir; this matches the package version.
2381
2382 M libmenu/Makefile.am
2383
2384 commit 5aa2c53ef25f684a848312455dad396f28c96a90
2385 Author: Colin Walters <walters@verbum.org>
2386 Date: Wed Apr 20 17:48:07 2011 -0400
2387
2388 Replace Python example with JS
2389
2390 M util/Makefile.am
2391 A util/gnome-menus-ls.js
2392 D util/gnome-menus-ls.py
2393
2394 commit f0101da1c3df623f5a0023d9c787535e89476291
2395 Author: Colin Walters <walters@verbum.org>
2396 Date: Wed Apr 20 17:42:39 2011 -0400
2397
2398 Remove GMenuTreeItem from public API
2399
2400 gmenu_tree_directory_get_contents() wasn't actually bindable because
2401 there's no way to express to introspection the inheritance hierarchy
2402 (and to do the runtime type checking necessary via
2403 gmenu_tree_item_get_item_type()).
2404
2405 Therefore, drop it, and instead add explicit functions where each type
2406 is needed. So for gmenu_tree_directory_get_contents(), we instead
2407 add an explicit typesafe iterator object.
2408
2409 The only other instance was gmenu_tree_alias.
2410
2411 Note that gmenu_tree_item_ref() and gmenu_tree_item_unref() remain;
2412 they're C only, and already just took "gpointer".
2413
2414 M libmenu/gmenu-tree.c
2415 M libmenu/gmenu-tree.h
2416 M util/test-menu-spec.c
2417
2418 commit 76895ad01d450696519425d03beab8845230397b
2419 Author: Colin Walters <walters@verbum.org>
2420 Date: Wed Apr 20 17:16:25 2011 -0400
2421
2422 introspection: scan gmenu-tree.c
2423
2424 Now that we're actually adding gtk-doc.
2425
2426 M libmenu/Makefile.am
2427
2428 commit 0877f894a6c74f0dc7522e9cb93cc223097d1494
2429 Author: Colin Walters <walters@verbum.org>
2430 Date: Mon Apr 18 16:17:04 2011 -0400
2431
2432 Document a few functions
2433
2434 M libmenu/gmenu-tree.c
2435
2436 commit bd78be7ad777f70d2390309507162f5dc267ea2f
2437 Author: Colin Walters <walters@verbum.org>
2438 Date: Mon Apr 18 15:36:01 2011 -0400
2439
2440 gmenu_tree_entry_get_parent: New function
2441
2442 Earlier we moved this down to GMenuTreeDirectory, but it turns
2443 out gnome-shell does expect to be able to get the parent of a
2444 GMenuTreeEntry. In the future I want to nuke that code, but
2445 for now just readd this functionality.
2446
2447 M libmenu/gmenu-tree.c
2448 M libmenu/gmenu-tree.h
2449
2450 commit 94b2ea48a5221bd6dc82b8b468bb85ea6d420e57
2451 Author: Colin Walters <walters@verbum.org>
2452 Date: Mon Apr 18 10:10:53 2011 -0400
2453
2454 layout: Use thread-default main context for callbacks
2455
2456 Rather than hardcoding g_idle_add(); this gives us future
2457 flexibility for thread support.
2458
2459 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2460
2461 M libmenu/menu-layout.c
2462
2463 commit 52f9f7017779b6691e2b3f46f6c24e37f219abbf
2464 Author: Colin Walters <walters@verbum.org>
2465 Date: Sun Apr 17 11:22:32 2011 -0400
2466
2467 Remove gmenu_tree_directory_get_tree()
2468
2469 This causes a circular reference internally, and API consumers
2470 can just keep track of it easily enough externally.
2471
2472 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2473
2474 M libmenu/gmenu-tree.c
2475 M libmenu/gmenu-tree.h
2476
2477 commit 5d1e03adc206f52dec82f2b5e8831022321cb1f8
2478 Author: Colin Walters <walters@verbum.org>
2479 Date: Sun Apr 17 10:17:20 2011 -0400
2480
2481 Switch to gslice for most data
2482
2483 This is more efficient for the small items we have here.
2484
2485 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2486
2487 M libmenu/gmenu-tree.c
2488
2489 commit 4f47a654d91cc3b08d46ef518a42c7f484f01be3
2490 Author: Colin Walters <walters@verbum.org>
2491 Date: Sun Apr 17 09:57:47 2011 -0400
2492
2493 Rename gmenu_tree_get_menu_file() to gmenu_tree_get_menu_path()
2494
2495 Document it and clean it up.
2496
2497 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2498
2499 M libmenu/gmenu-tree.c
2500 M libmenu/gmenu-tree.h
2501 M util/test-menu-spec.c
2502
2503 commit 13920c91868f77a964b4498b00072563608f583e
2504 Author: Colin Walters <walters@verbum.org>
2505 Date: Sun Apr 17 09:51:58 2011 -0400
2506
2507 Further propagate GError for gmenu_tree_load_sync()
2508
2509 We had some GError use internally; clean things up so we propagate
2510 it more consistently to the top of gmenu_tree_load_sync().
2511
2512 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2513
2514 M libmenu/gmenu-tree.c
2515
2516 commit 8ecb1aa5d762d25f787002dd001e92e404efabe9
2517 Author: Colin Walters <walters@verbum.org>
2518 Date: Sun Apr 17 09:31:34 2011 -0400
2519
2520 Add explicit gmenu_tree_load_sync()
2521
2522 Rather than having _get_root_directory() be lazy, require users
2523 to explicitly load via this function (or in the future, an
2524 async variant).
2525
2526 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2527
2528 M libmenu/gmenu-tree.c
2529 M libmenu/gmenu-tree.h
2530 M util/test-menu-spec.c
2531
2532 commit a2bda1462b6b46b1c8e47a19977f15c294226ef9
2533 Author: Colin Walters <walters@verbum.org>
2534 Date: Sun Apr 17 08:58:19 2011 -0400
2535
2536 Lower gmenu_tree_item_get_parent to gmenu_tree_directory_get_parent
2537
2538 Introspection doesn't know about the GMenuTreeItem "subclassing",
2539 so we would have to duplicate the _get_parent method on all
2540 subclasses - but in practice it only seems to be used on directories,
2541 so just lower it there.
2542
2543 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2544
2545 M libmenu/gmenu-tree.c
2546 M libmenu/gmenu-tree.h
2547 M util/test-menu-spec.c
2548
2549 commit 14c163c8a8d35fe2daa9c0973495fb4462a3ddec
2550 Author: Colin Walters <walters@verbum.org>
2551 Date: Sun Apr 17 08:46:14 2011 -0400
2552
2553 GMenuTreeItem: Register boxed types, drop user data
2554
2555 This was a hack for the static Python bindings, no longer necessary
2556 after we register proper boxed types for the structures.
2557
2558 Convert the refcount to an atomic integer too; the _unref may be
2559 called from a garbage collector thread in bindings.
2560
2561 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2562
2563 M libmenu/gmenu-tree.c
2564 M libmenu/gmenu-tree.h
2565
2566 commit 8eaf04da66be9437c518ac21e27cbbb67abcd3f5
2567 Author: Colin Walters <walters@verbum.org>
2568 Date: Sun Apr 17 08:44:02 2011 -0400
2569
2570 Rename gmenu_tree_item_get_type() to _get_item_type()
2571
2572 The _get_type() namespace suffix is reserved for GType.
2573
2574 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2575
2576 M libmenu/gmenu-tree.c
2577 M libmenu/gmenu-tree.h
2578 M util/test-menu-spec.c
2579
2580 commit 474b86aac925d7b45d3bbbaba9111719ca0d9b8a
2581 Author: Colin Walters <walters@verbum.org>
2582 Date: Sun Apr 17 08:40:47 2011 -0400
2583
2584 Replace monitor API with a simple "changed" signal
2585
2586 So much simpler...
2587
2588 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2589
2590 M libmenu/gmenu-tree.c
2591 M libmenu/gmenu-tree.h
2592 M util/test-menu-spec.c
2593
2594 commit 21672a2d0ee94a9588fc15cf0cd4c5ffdfc818c1
2595 Author: Colin Walters <walters@verbum.org>
2596 Date: Sun Apr 17 07:50:19 2011 -0400
2597
2598 Convert to GObject, drop static Python bindings
2599
2600 GMenuTree is now a GObject. Drop the static Python bindings, since
2601 introspection gives us coverage of most of the API now.
2602
2603 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2604
2605 M Makefile.am
2606 M configure.ac
2607 M libmenu/gmenu-tree.c
2608 M libmenu/gmenu-tree.h
2609 M libmenu/menu-monitor.c
2610 D python/Makefile.am
2611 D python/gmenu.c
2612 M util/gnome-menus-ls.py
2613 M util/test-menu-spec.c
2614
2615 commit 0a7e4736d221ada2167a064c8b4aa9710a2e04bf
2616 Author: Colin Walters <walters@verbum.org>
2617 Date: Sun Apr 17 07:32:07 2011 -0400
2618
2619 Drop GMenuTree caching and support for absolute paths
2620
2621 This is work towards converting to GObject; the API to create a tree
2622 is now just gmenu_tree_new().
2623
2624 First, the internal caching makes things very complex for little gain
2625 - gnome-shell only creates one GMenuTree, and gnome-panel could pretty
2626 easily be converted to do so.
2627
2628 In a Google Code Search, I couldn't find anyone using absolute paths
2629 for menus, and looking through the revision history, I don't see
2630 a rationale for it. So, just drop it too.
2631
2632 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2633
2634 M libmenu/gmenu-tree.c
2635 M libmenu/gmenu-tree.h
2636 M python/gmenu.c
2637 M util/test-menu-spec.c
2638
2639 commit 903c144be9527f048fa1389c39872d0f22740b62
2640 Author: Colin Walters <walters@verbum.org>
2641 Date: Sun Apr 17 07:17:22 2011 -0400
2642
2643 GMenuTreeFlags: Register with GType
2644
2645 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2646
2647 M libmenu/gmenu-tree.c
2648 M libmenu/gmenu-tree.h
2649
2650 commit d660a95756c99fe053ffd4fbaf523008868f5a67
2651 Author: Colin Walters <walters@verbum.org>
2652 Date: Sun Apr 17 07:10:01 2011 -0400
2653
2654 Fold sorting into GMenuTreeFlags
2655
2656 There's only two sorts right now, and so we can make one the default
2657 and select the other with the flags.
2658
2659 Drop the ability to set the sort at runtime; this never was compatible
2660 with the current GMenuTree caching, and also I'm trying to move
2661 GMenuTree towards being immutable.
2662
2663 M libmenu/gmenu-tree.c
2664 M libmenu/gmenu-tree.h
2665 M python/gmenu.c
2666
2667 commit 4d00dcf9ce31b248c61dc66430b881ba32e2d611
2668 Author: Colin Walters <walters@verbum.org>
2669 Date: Sat Apr 16 14:09:57 2011 -0400
2670
2671 Rebase DesktopEntry on GDesktopAppInfo
2672
2673 The main motivation for this work is to avoid gnome-shell having
2674 to read all .desktop files *twice* - once from gnome-menus, and
2675 once from gio (when doing MIME assocation etc.)
2676
2677 This patch replaces almost all of the accessors for GMenuTreeEntry
2678 with the simple gmenu_tree_entry_get_app_info().
2679
2680 Note this patch depends on patches from (see bug 647967).
2681
2682 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2683
2684 M configure.ac
2685 M libmenu/Makefile.am
2686 M libmenu/desktop-entries.c
2687 M libmenu/desktop-entries.h
2688 M libmenu/gmenu-tree.c
2689 M libmenu/gmenu-tree.h
2690 M python/Makefile.am
2691 M python/gmenu.c
2692 M util/Makefile.am
2693
2694 commit 8a01f3c268a1515fb4e9ee8c924dae20a0880bb1
2695 Author: Colin Walters <walters@verbum.org>
2696 Date: Sat Apr 16 13:31:21 2011 -0400
2697
2698 desktop-entries.c: Split structure explicitly between .desktop and .directory
2699
2700 This is code cleaup preparatory work for rebasing DesktopEntry on
2701 GDesktopAppInfo.
2702
2703 These two cases are different; make this explicit via structure subclassing
2704 of a common base structure.
2705
2706 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2707
2708 M libmenu/desktop-entries.c
2709
2710 commit 5a936c77ebb7ffddbc4e282662bb2d5f62a8a814
2711 Author: Colin Walters <walters@verbum.org>
2712 Date: Sat Apr 16 11:54:17 2011 -0400
2713
2714 DesktopEntry: Clean up structure, make TryExec evaluation lazy
2715
2716 This is preparatory work for rebasing DesktopEntry on top of
2717 GDesktopAppInfo.
2718
2719 First, it doesn't make sense to represet a random subset of booleans
2720 as flags; just flatten these into a bitfield. Move the refcount to be
2721 a plain guint at top.
2722
2723 Second, previously we were calling g_find_program_in_path when
2724 creating a .desktop file, even if the caller wasn't interested in
2725 whether the TryExec succeeded. Make this lazy.
2726
2727 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2728
2729 M libmenu/desktop-entries.c
2730
2731 commit ea008b417c02e8238f58d2d419d01129c2de9226
2732 Author: Colin Walters <walters@verbum.org>
2733 Date: Sat Apr 16 11:04:26 2011 -0400
2734
2735 DesktopEntry: Make basename const reference
2736
2737 Avoids another malloc block.
2738
2739 https://bugzilla.gnome.org/show_bug.cgi?id=647968
2740
2741 M libmenu/desktop-entries.c
2742
2743 commit 6cf363f9eaf4ba8ea736ca0a9e8d427226f381f6
2744 Author: Friedel Wolff <friedel@translate.org.za>
2745 Date: Thu Jul 7 22:30:06 2011 +0200
2746
2747 Add Zulu (zu) to LINGUAS
2748
2749 M po/LINGUAS
2750
2751 commit 756d19762d1793ebe80df661328a1c7a510b9773
2752 Author: Priscilla Mahlangu <priny@translate.za>
2753 Date: Thu Jul 7 22:28:26 2011 +0200
2754
2755 New translation for Zulu (zu)
2756
2757 A po/zu.po
2758
2759 commit 5c896c6418cbc6111c823cca5401204bd62c16dc
2760 Author: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
2761 Date: Sat Jun 25 20:33:13 2011 +0300
2762
2763 Updated Belarusian translation.
2764
2765 M po/be.po
2766
2767 commit 9841d10ecf88b816ea18f186b64d4f1798f0c21a
2768 Author: Carles Ferrando <carles.ferrando@gmail.com>
2769 Date: Sun May 29 18:26:56 2011 +0200
2770
2771 [l10n]Updated Catalan (Valencian) translation
2772
2773 M po/ca@valencia.po
2774
2775 commit 7336104da09a01db012c6d7e4d11abc3bac2f4e8
2776 Author: Vincent Untz <vuntz@gnome.org>
2777 Date: Tue Apr 26 09:12:06 2011 +0200
2778
2779 release: post-release bump to 3.0.2
2780
2781 M configure.ac
2782
2783 commit 582b78f2d085130fb63537c8e7b1120ff77c9979
2784 Author: Vincent Untz <vuntz@gnome.org>
2785 Date: Tue Apr 26 09:11:59 2011 +0200
2786
2787 release: 3.0.1
2788
2789 M NEWS
2790 M configure.ac
2791
2792 commit 1febd5e57900e931b9aa53774a8c3caaff4f6a2a
2793 Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
2794 Date: Mon Apr 25 08:41:18 2011 +0700
2795
2796 Updated Thai translation.
2797
2798 M po/th.po
2799
2800 commit df2f20a03a78d23665148c608b4955bb4702c2d9
2801 Author: Anousak Souphavanh <anousak@gmail.com>
2802 Date: Tue Apr 19 12:47:55 2011 +0300
2803
2804 l10n: Added Lao translation for gnome-menus
2805
2806 M po/LINGUAS
2807 A po/lo.po
2808
2809 commit 2a436ad5101f3a05a029ffaded8d60c412686540
2810 Author: Vincent Untz <vuntz@gnome.org>
2811 Date: Mon Apr 4 23:04:28 2011 +0200
2812
2813 release: post-release bump to 3.0.1
2814
2815 M configure.ac
2816
2817 commit 8f288a1114e95adf98f8186cb309e5cacad66105
2818 Author: Vincent Untz <vuntz@gnome.org>
2819 Date: Mon Apr 4 23:04:21 2011 +0200
2820
2821 release: 3.0.0
2822
2823 M NEWS
2824 M configure.ac
2825
2826 commit a153239bdf7126154ada0b7e22bf827860cad330
2827 Author: Jamil Ahmed <itsjamil@gmail.com>
2828 Date: Mon Apr 4 15:25:07 2011 +0600
2829
2830 Updated Bengali translation
2831
2832 M po/bn.po
2833
2834 commit 381752ab7db377bdabcfda08ab90353ce78770f7
2835 Author: Jordi Serratosa <serratosa@gmail.com>
2836 Date: Mon Apr 4 00:14:46 2011 +0200
2837
2838 [l10n]Fixes on Catalan translation
2839
2840 M po/ca.po
2841
2842 commit 61593b848a8f03694a7963a0cb796aa06b82330c
2843 Author: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
2844 Date: Sat Apr 2 10:31:35 2011 +0700
2845
2846 Updated Vietnamese translation
2847
2848 M po/vi.po
2849
2850 commit 5d9e2b6e441b907ca9724ab3fdc02fc32fa12205
2851 Author: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
2852 Date: Sat Apr 2 10:31:18 2011 +0700
2853
2854 po/vi.po: import from Damned Lies
2855
2856 M po/vi.po
2857
2858 commit e8d7b8fb9d128ac39e3e0f1dd6a8e96c7ce18e75
2859 Author: krishnababu k <kkrothap@redhat.ocm>
2860 Date: Fri Apr 1 13:21:53 2011 +0530
2861
2862 Updated Telugu translations done by praveen
2863
2864 M po/te.po
2865
2866 commit 4fb0ed4d0e7a4fb40e56af6d462467bd16d4c512
2867 Author: Vincent Untz <vuntz@gnome.org>
2868 Date: Wed Mar 30 12:53:39 2011 +0530
2869
2870 layout: Show administration tools and old capplets in Other
2871
2872 Right now, administration tools and capplets that used to be in the
2873 Control Center are not accessible in any way. With this patch, they
2874 appear in Other. While this is not perfect, this will make them
2875 accessible until we find the right solution.
2876
2877 To do this, we just exclude .desktop files that match panels from the
2878 Control Center instead of excludings the Settings category, which is too
2879 broad.
2880
2881 https://bugzilla.gnome.org/show_bug.cgi?id=645061
2882
2883 M layout/applications.menu
2884
2885 commit 7c73245fcbd5feaf66df50ee6ca5e8c9132a11aa
2886 Author: Abduxukur Abdurixit <abdurixit@gmail.com>
2887 Date: Sun Mar 27 19:50:01 2011 +0200
2888
2889 Added UG translation
2890
2891 M po/ug.po
2892
2893 commit d2bd20e2e09fa4791da9a9881d77d58f31328ec9
2894 Author: Sense Hofstede <sense@ubuntu.com>
2895 Date: Fri Mar 18 19:52:08 2011 +0100
2896
2897 Updated Frisian translation
2898
2899 M po/fy.po
2900
2901 commit de31041b34a03b1438407a5604a0d416ea791e31
2902 Author: Khaled Hosny <khaledhosny@eglug.org>
2903 Date: Mon Mar 7 08:07:25 2011 +0200
2904
2905 Updated Arabic translation
2906
2907 M po/ar.po
2908
2909 commit 819557fd56cd9a867bc1ed66955b70c823292b71
2910 Author: Vincent Untz <vuntz@gnome.org>
2911 Date: Sun Mar 6 23:38:58 2011 +0100
2912
2913 release: post-release bump to 2.91.92
2914
2915 M configure.ac
2916
2917 commit 764cf265fac8b7ee574d045b44431fe7cfbd4852
2918 Author: Vincent Untz <vuntz@gnome.org>
2919 Date: Sun Mar 6 23:38:51 2011 +0100
2920
2921 release: 2.91.91
2922
2923 M NEWS
2924 M configure.ac
2925
2926 commit 8e256fa080eadccecea4823f688974da34ed3790
2927 Author: Daniel Korostil <ted.korostiled@gmail.com>
2928 Date: Tue Mar 1 17:43:54 2011 +0200
2929
2930 Uploaded Ukranian
2931
2932 M po/uk.po
2933
2934 commit 715a80efbe9d2be0f329979e13073b0ece9241af
2935 Author: Changwoo Ryu <cwryu@debian.org>
2936 Date: Sun Feb 27 17:17:37 2011 +0900
2937
2938 Updated Korean translation
2939
2940 M po/ko.po
2941
2942 commit 2966b4886b300a0bba438242fa5f44ac9f16f1c0
2943 Author: Vincent Untz <vuntz@gnome.org>
2944 Date: Wed Feb 23 02:55:18 2011 +0100
2945
2946 editor: Fix to work with latest pygi
2947
2948 https://bugzilla.gnome.org/show_bug.cgi?id=643019
2949
2950 M simple-editor/GMenuSimpleEditor/maindialog.py
2951 M simple-editor/GMenuSimpleEditor/menufilewriter.py
2952 M simple-editor/GMenuSimpleEditor/menutreemodel.py
2953
2954 commit 8c66c8ad72ab512bc194cf16eadb7bf76696d817
2955 Author: Friedel Wolff <friedel@translate.org.za>
2956 Date: Mon Feb 7 07:59:47 2011 +0200
2957
2958 Updated translation for Afrikaans (af)
2959
2960 M po/af.po
2961
2962 commit 9792ac69297dc003f5ba4d9461e15874ac1a6908
2963 Author: Vincent Untz <vuntz@gnome.org>
2964 Date: Fri Feb 4 12:01:19 2011 +0100
2965
2966 build: Add ${ACLOCAL_FLAGS} to ACLOCAL_AMFLAGS
2967
2968 This is used by gnome-autogen.sh, and we need it when aclocal.m4 is
2969 to be rebuilt by make, to avoid losing some aclocal paths.
2970
2971 Also, don't set ACLOCAL_AMFLAGS in configure.
2972
2973 M Makefile.am
2974 M configure.ac
2975
2976 commit 6223b261d5a46ac170567ca4d5c0a00a07f64d43
2977 Author: Pavol Klačanský <pavol@klacansky.com>
2978 Date: Wed Feb 2 09:39:00 2011 +0100
2979
2980 Updated Slovak translation
2981
2982 M po/sk.po
2983
2984 commit 668835a8d12d1dd5c88e3bc0fdd44eb6a63272e3
2985 Author: Vincent Untz <vuntz@gnome.org>
2986 Date: Wed Feb 2 01:21:58 2011 +0100
2987
2988 release: post-release bump to 2.91.90
2989
2990 M configure.ac
2991
2992 commit c24f0b2ada3123141049ca579d080245a923b88a
2993 Author: Vincent Untz <vuntz@gnome.org>
2994 Date: Wed Feb 2 01:21:07 2011 +0100
2995
2996 release: 2.91.6
2997
2998 M NEWS
2999 M configure.ac
3000
3001 commit 8c2c9b554fdbbd10769c6028a51e230e362b9b4c
3002 Author: Vincent Untz <vuntz@gnome.org>
3003 Date: Wed Feb 2 01:19:36 2011 +0100
3004
3005 build: Fix distcheck (missing file in POTFILES.in)
3006
3007 M po/POTFILES.in
3008
3009 commit b68bcd27f44ce2c494f6e3cd9695890b9c02af04
3010 Author: Vincent Untz <vuntz@gnome.org>
3011 Date: Tue Feb 1 15:18:49 2011 +0100
3012
3013 layout: Drop settings.menu
3014
3015 It doesn't fit in the GNOME 3 world, where we use gnomecc.menu.
3016
3017 D desktop-directories/InternetAndNetwork.directory.in
3018 D desktop-directories/LookAndFeel.directory.in
3019 M desktop-directories/Makefile.am
3020 D desktop-directories/Settings-System.directory.in
3021 D desktop-directories/Settings.directory.in
3022 D desktop-directories/X-GNOME-Menu-System.directory.in
3023 M layout/Makefile.am
3024 D layout/settings.menu
3025 M po/POTFILES.in
3026
3027 commit 9ff2b267f4ae08ec38a2eb49c9de7f6778708d22
3028 Author: Fran Diéguez <fran.dieguez@mabishu.com>
3029 Date: Thu Jan 27 03:38:30 2011 +0100
3030
3031 QA of Galician translations
3032
3033 M po/gl.po
3034
3035 commit 81dcfb9938e49083eddf545ec4ad919885a041c8
3036 Author: Gheyret T.Kenji <gheyret@gmail.com>
3037 Date: Thu Dec 23 19:02:04 2010 +0100
3038
3039 Added UG translation
3040
3041 M po/ug.po
3042
3043 commit 340f2aa06c57705e9c3c7dcc62abccfa583ed2c8
3044 Author: Mattias Põldaru <mahfiaz gmail com>
3045 Date: Mon Dec 20 14:06:53 2010 +0200
3046
3047 [l10n] Updated Estonian translation
3048
3049 M po/et.po
3050
3051 commit 31c1309040172956c84a6123460e7254221ac2eb
3052 Author: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
3053 Date: Sun Dec 19 12:56:53 2010 +0700
3054
3055 po/vi.po: import some translations from Ubuntu/Maverick
3056
3057 M po/vi.po
3058
3059 commit faf02643fb23eb2ca0ef08b75cd77e1cae0237ab
3060 Author: Gheyret T.Kenji <gheyret@gmail.com>
3061 Date: Sat Nov 20 11:41:03 2010 +0100
3062
3063 Added UG translation
3064
3065 M po/ug.po
3066
3067 commit f921bd15a02ee98d8ad2a5301135f096e0a0621f
3068 Author: Mahyar Moghimi <mahyar.moqimi@gmail.com>
3069 Date: Fri Nov 19 16:16:58 2010 +0330
3070
3071 Updating Persian Translation
3072
3073 M po/fa.po
3074
3075 commit eb15998cee9614522a4a6018249aa449a5b9ead0
3076 Author: Gheyret T.Kenji <gheyret@gmail.com>
3077 Date: Sat Nov 13 22:20:28 2010 +0100
3078
3079 Added UG translation
3080
3081 M po/ug.po
3082
3083 commit 5062b41c9ede06f1dfaa030a72201d7cb24e28d4
3084 Author: Carles Ferrando <carles.ferrando@gmail.com>
3085 Date: Fri Oct 29 01:09:57 2010 +0100
3086
3087 Updated Catalan (Valencian) translation
3088
3089 M po/ca@valencia.po
3090
3091 commit cfaef75741125ab692e4154dcf9ceda8b554c26d
3092 Author: Vincent Untz <vuntz@gnome.org>
3093 Date: Sat Oct 9 11:48:56 2010 +0200
3094
3095 build: Update git.mk from pango
3096
3097 M git.mk
3098
3099 commit 9cbd519531eaacb61cc686c13dce94cc5efb2fb2
3100 Author: Vincent Untz <vuntz@gnome.org>
3101 Date: Wed Oct 6 16:44:29 2010 +0200
3102
3103 editor: Remove useless import
3104
3105 M simple-editor/GMenuSimpleEditor/maindialog.py
3106
3107 commit 6a776912dd1c963644b0291dbf8726ef1ec116ee
3108 Author: Vincent Untz <vuntz@gnome.org>
3109 Date: Wed Oct 6 16:42:06 2010 +0200
3110
3111 introspection: Tell g-ir-scanner what are the prefixes
3112
3113 This means we now require gobject-introspection 0.9.5.
3114
3115 M configure.ac
3116 M libmenu/Makefile.am
3117
3118 commit 5092245c4fe1449bee93b8923e370d7db339f40f
3119 Author: Vincent Untz <vuntz@gnome.org>
3120 Date: Wed Oct 6 15:45:31 2010 +0200
3121
3122 libmenu: Do not send multiple notifications for one file change
3123
3124 We emit notifications in the idle loop, which enables us to compress
3125 multiple notifications: this way, we can check if there is already a
3126 notification for a directory.
3127
3128 We do this at the CachedDir level because it enables us to get one
3129 notification for a file rename, for example. But we also need it at the
3130 MenuLayout level to be sure to compress notifications accross multiple
3131 directories. It could be argued that we only need the latter, but I like
3132 it this way :-)
3133
3134 https://bugzilla.gnome.org/show_bug.cgi?id=172046
3135
3136 M libmenu/entry-directories.c
3137 M libmenu/menu-layout.c
3138
3139 commit 2e394806107ccbf0a3b822ab299042ea441c721e
3140 Author: Vincent Untz <vuntz@gnome.org>
3141 Date: Wed Oct 6 12:01:53 2010 +0200
3142
3143 editor: Forgot to remove "import pygtk" :-)
3144
3145 M simple-editor/GMenuSimpleEditor/main.py
3146
3147 commit adb08fee8c3677e539b9d1ca8fab9be1c4bf14b9
3148 Author: Vincent Untz <vuntz@gnome.org>
3149 Date: Wed Oct 6 11:58:31 2010 +0200
3150
3151 editor: Remove has_separator property
3152
3153 It's gone in new GTK+.
3154
3155 M simple-editor/gmenu-simple-editor.ui
3156
3157 commit cd550ce70f391ba3511800a1e100213bc3ff6c45
3158 Author: Vincent Untz <vuntz@gnome.org>
3159 Date: Wed Oct 6 11:56:48 2010 +0200
3160
3161 editor: port to pygobject-based introspection bindings
3162
3163 https://bugzilla.gnome.org/show_bug.cgi?id=626256
3164
3165 M simple-editor/GMenuSimpleEditor/main.py
3166 M simple-editor/GMenuSimpleEditor/maindialog.py
3167 M simple-editor/GMenuSimpleEditor/menufilewriter.py
3168 M simple-editor/GMenuSimpleEditor/menutreemodel.py
3169
3170 commit ce014ee2884f134bcd9764043a58eb32294062ed
3171 Author: Kikongo Translation Team <lundombe01@zaya-dio.com>
3172 Date: Mon Sep 27 13:27:43 2010 +0200
3173
3174 Added Kikongo translation
3175
3176 M po/LINGUAS
3177 A po/kg.po
3178
3179 commit 15056451271dc5faf31ee2161cdb5696773275c5
3180 Author: Vincent Untz <vuntz@gnome.org>
3181 Date: Mon Sep 27 12:58:48 2010 +0200
3182
3183 release: post-release bump to 2.30.5
3184
3185 M configure.ac
3186
3187 commit 9c269a6850ca8c97edc1e41419d8f7778574c84f
3188 Author: Vincent Untz <vuntz@gnome.org>
3189 Date: Mon Sep 27 12:58:40 2010 +0200
3190
3191 release: 2.30.4
3192
3193 M NEWS
3194 M configure.ac
3195
3196 commit 90a58de1f3a7381b26206be39624a3d40d8ffb07
3197 Author: Vincent Untz <vuntz@gnome.org>
3198 Date: Mon Sep 27 12:29:45 2010 +0200
3199
3200 misc: Rename --enable-deprecations to --enable-deprecation-flags
3201
3202 This is a better name for this configure option, since it's really about
3203 enabling the use of the deprecation flags, not allowing the use of
3204 deprecated API.
3205
3206 M configure.ac
3207
3208 commit f1da5abb7c1783134cfa485b323aedb4f5bc2465
3209 Author: Vincent Untz <vuntz@gnome.org>
3210 Date: Mon Sep 27 12:04:53 2010 +0200
3211
3212 introspection: Associate .gir with pkg-config file
3213
3214 M libmenu/Makefile.am
3215
3216 commit fbd3e2c9f8fb8de4c975367f30b84121478da7d2
3217 Author: Vincent Untz <vuntz@gnome.org>
3218 Date: Thu Sep 23 19:40:47 2010 +0200
3219
3220 libmenu: Clear cache of desktop entries set when files are added/removed
3221
3222 When installing or removing an application, we get a notification of
3223 change. However, the menu tree still contained the same content.
3224
3225 We were simply not clearing the cache containing the list of desktop
3226 entries when a file got added or removed, meaning that we always got the
3227 same list of desktop entries.
3228
3229 (Note that it didn't affect gnome-panel, it's unclear why)
3230
3231 https://bugzilla.gnome.org/show_bug.cgi?id=630410
3232
3233 M libmenu/entry-directories.c
3234
3235 commit 54af0ebf8863955c0641670343ac57900092f104
3236 Author: Torstein Winterseth <kvikende@fsfe.org>
3237 Date: Wed Sep 22 14:32:00 2010 +0200
3238
3239 Updated Norwegian Nynorsk translation.
3240
3241 M po/nn.po
3242
3243 commit b8874d1d36c9b7d448b4958af5b71f2fa3606984
3244 Author: Vincent Untz <vuntz@gnome.org>
3245 Date: Mon Sep 20 17:39:28 2010 +0200
3246
3247 build: Update all Makefile.am to more recent standards
3248
3249 M Makefile.am
3250 M desktop-directories/Makefile.am
3251 M layout/Makefile.am
3252 M libmenu/Makefile.am
3253 M python/Makefile.am
3254 M simple-editor/GMenuSimpleEditor/Makefile.am
3255 M simple-editor/Makefile.am
3256 M util/Makefile.am
3257
3258 commit 7060e3c48a391c0fa96e57879575e333c3a54e67
3259 Author: Vincent Untz <vuntz@gnome.org>
3260 Date: Mon Sep 20 17:37:50 2010 +0200
3261
3262 misc: Update instructions for commit messages
3263
3264 We're switching to "tag:" instead of "[tag]".
3265
3266 M ChangeLog
3267
3268 commit 22642577f7324349b3681bc58e32004820236066
3269 Author: Takayuki KUSANO <AE5T-KSN@asahi-net.or.jp>
3270 Date: Mon Sep 20 18:06:25 2010 +0900
3271
3272 Updated Japanese translation
3273
3274 M po/ja.po
3275
3276 commit feeb6b4d64f2d3e5e0f284aa3e1bfd625a627b1f
3277 Author: Daniel Martinez <entaltoaragon@gmail.com>
3278 Date: Sat Sep 18 20:45:19 2010 +0200
3279
3280 Updated Aragonese translation
3281
3282 M po/an.po
3283
3284 commit 6010094c40eb65965622141cb09fec3a0c8b31d3
3285 Author: Baurzhan Muftakhidinov <baurthefirst@gmail.com>
3286 Date: Wed Sep 15 12:55:46 2010 +0600
3287
3288 Updated Kazakh translation
3289
3290 M po/kk.po
3291
3292 commit fe36b5b5371404ea96a46ac6d6b4a003f54d9828
3293 Author: Vincent Untz <vuntz@gnome.org>
3294 Date: Tue Sep 14 14:40:07 2010 +0200
3295
3296 release: post-release bump to 2.30.4
3297
3298 M configure.ac
3299
3300 commit 721b241e2c5449003238d333d03063fdfe7b3aa1
3301 Author: Vincent Untz <vuntz@gnome.org>
3302 Date: Tue Sep 14 14:39:56 2010 +0200
3303
3304 release: 2.30.3
3305
3306 M NEWS
3307 M configure.ac
3308
3309 commit 328cff2e2951e817a6e999b3a3a8b563f07cd778
3310 Author: Vincent Untz <vuntz@gnome.org>
3311 Date: Wed Sep 8 19:23:00 2010 +0200
3312
3313 [misc] Update AUTHORS, HACKING, MAINTAINERS, README
3314
3315 Nothing new, but make sure this is up-to-date.
3316
3317 Also tweak a bit autogen.sh and Makefile.am to make them look similar in
3318 all my modules.
3319
3320 M AUTHORS
3321 M HACKING
3322 M MAINTAINERS
3323 M Makefile.am
3324 M README
3325 M autogen.sh
3326 M gnome-menus.doap
3327
3328 commit 4cfd7db5d1ac221bc1397854a04dc40a654f1188
3329 Author: Vincent Untz <vuntz@gnome.org>
3330 Date: Wed Sep 8 17:48:37 2010 +0200
3331
3332 [misc] Update license files to latest text
3333
3334 Note that this doesn't change the license. The license text was updated
3335 for the latest FSF address, for example.
3336
3337 M COPYING
3338 M COPYING.LIB
3339
3340 commit bd02ce500383aa04914fda89900af93cdb33809d
3341 Author: Vincent Untz <vuntz@gnome.org>
3342 Date: Wed Sep 8 17:09:44 2010 +0200
3343
3344 [build] Rename configure.in to configure.ac
3345
3346 M autogen.sh
3347 R100 configure.in configure.ac
3348
3349 commit 8b14b78f279bad26580387b69a3274ba1197f66b
3350 Author: Dirgita <dirgitadevina@yahoo.co.id>
3351 Date: Wed Aug 4 10:36:10 2010 +0700
3352
3353 Updated Indonesian translation
3354
3355 M po/id.po
3356
3357 commit d524140a28c92719bdcc81df207c38c3c96052c0
3358 Author: Pablo Castellano <pablog@src.gnome.org>
3359 Date: Tue Aug 3 19:57:18 2010 +0200
3360
3361 Update git.mk from pango
3362
3363 M git.mk
3364
3365 commit d0cbd37e93980bae0781704765c56009913b0204
3366 Author: Gheyret Tohti <gheyret@yahoo.com>
3367 Date: Tue Aug 3 13:54:06 2010 +0200
3368
3369 Updated Uyghur translation
3370
3371 M po/ug.po
3372
3373 commit 784b664c760d655ae306d2d5d718231a1d09333f
3374 Author: Fran Diéguez <fran.dieguez@mabishu.com>
3375 Date: Tue Jul 20 12:10:56 2010 +0200
3376
3377 Updated Galician translations
3378
3379 M po/gl.po
3380
3381 commit 1100aed1ec5863ebfa80e51ca7f07e2b964459dd
3382 Author: Sense Hofstede <qense@ubuntu.com>
3383 Date: Sun Jul 18 00:34:23 2010 +0200
3384
3385 Fix forgotten copyright notices in the Frisian translations.
3386
3387 M po/fy.po
3388
3389 commit e29c70ada73e7f029423361da318685d517cbd2b
3390 Author: Sense Hofstede <qense@ubuntu.com>
3391 Date: Sun Jul 18 00:31:14 2010 +0200
3392
3393 Updated Frisian translation and added it to the LINGUAS file
3394
3395 M po/LINGUAS
3396 A po/fy.po
3397
3398 commit ce67a8b1603bb878131c23b625cf48b44ea8c477
3399 Author: Reuben Potts <reuben03@live.com>
3400 Date: Wed Jul 7 13:51:56 2010 +0200
3401
3402 Added Manx translation
3403
3404 M po/LINGUAS
3405 A po/gv.po
3406
3407 commit 5e30e13fd5923befda0372473f64a81b98b35f92
3408 Author: Baurzhan Muftakhidinov <baurthefirst@gmail.com>
3409 Date: Fri Jul 2 14:40:12 2010 +0300
3410
3411 Updated Kazakh translation for gdm
3412
3413 M po/kk.po
3414
3415 commit 2054996af842e6df1726e58d81a569f03e30d75f
3416 Author: Vincent Untz <vuntz@gnome.org>
3417 Date: Wed Jun 30 12:36:26 2010 +0200
3418
3419 [editor] Better fix for XDG_MENU_PREFIX support in editor
3420
3421 The previous fix was partly wrong, because the menu file referenced in
3422 the created user menu file was not using the prefix.
3423
3424 So instead of letting the library handle XDG_MENU_PREFIX, we handle it
3425 ourselves everywhere.
3426
3427 M simple-editor/GMenuSimpleEditor/menufilewriter.py
3428 M simple-editor/GMenuSimpleEditor/menutreemodel.py
3429
3430 commit ac425c5ac9e386fd171801496503d591d5c5ade2
3431 Author: Vincent Untz <vuntz@gnome.org>
3432 Date: Wed Jun 30 12:31:33 2010 +0200
3433
3434 [editor] Respect XDG_MENU_PREFIX when writing user menu file
3435
3436 https://bugzilla.gnome.org/show_bug.cgi?id=623197
3437
3438 M simple-editor/GMenuSimpleEditor/menufilewriter.py
3439
3440 commit e8a7198465e090f3e35fc1ac328800909574801f
3441 Author: Kristjan Schmidt <kristjan.schmidt@googlemail.com>
3442 Date: Wed Jun 23 17:15:51 2010 +0200
3443
3444 Updated Esperanto translation
3445
3446 M po/eo.po
3447
3448 commit 0e25cc961e1814cb2b6e6e2b9172a649f5542a50
3449 Author: Vincent Untz <vuntz@gnome.org>
3450 Date: Tue Jun 22 03:57:14 2010 +0200
3451
3452 [release] post-release bump to 2.30.3
3453
3454 M configure.in
3455
3456 commit 3ec065b74712c99d1cdde955e864f203afccb41b
3457 Author: Vincent Untz <vuntz@gnome.org>
3458 Date: Tue Jun 22 03:57:06 2010 +0200
3459
3460 [release] 2.30.2
3461
3462 M NEWS
3463 M README
3464 M configure.in
3465
3466 commit 320453668ea791f1d7c9f11d84363bfbae63fb25
3467 Author: Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
3468 Date: Tue Jun 15 23:00:19 2010 -0500
3469
3470 [build] Do not dist gir_DATA
3471
3472 GIR files contain a shared-library attribute which varies per platform,
3473 and therefore must not be disted; see bug 621611 for rationale.
3474
3475 https://bugzilla.gnome.org/show_bug.cgi?id=621724
3476
3477 M libmenu/Makefile.am
3478
3479 commit 612aeb7cd40f57757a733d0805a52f6a6a000152
3480 Author: Fran Diéguez <fran.dieguez@mabishu.com>
3481 Date: Sun Jun 13 19:32:21 2010 +0200
3482
3483 Updated Galician translations
3484
3485 M po/gl.po
3486
3487 commit 7e1332e718118f16ab451a622d40ec3afde79c2b
3488 Author: Matej Urbančič <mateju@svn.gnome.org>
3489 Date: Fri May 21 22:24:04 2010 +0200
3490
3491 Updated Slovenian translation
3492
3493 M po/sl.po
3494
3495 commit f93cca66736b876b8739fb900b51c82e22c7aead
3496 Author: Thomas Thurman <tthurman@gnome.org>
3497 Date: Sun May 16 18:04:30 2010 -0400
3498
3499 Updated Shavian translation
3500
3501 M po/en@shaw.po
3502
3503 commit 0928101b34ac6bc6e7da5c8bd52d39af43a9f38f
3504 Author: Thomas Thurman <tthurman@gnome.org>
3505 Date: Wed May 12 18:41:06 2010 -0400
3506
3507 Updated Shavian transliteration
3508
3509 M po/en@shaw.po
3510
3511 commit a66c03d1771a15ffe054e9e64ff5183bda951bcf
3512 Author: Peteris Krisjanis <pecisk@gmail.com>
3513 Date: Sat Apr 24 22:25:22 2010 +0300
3514
3515 Updated Latvian translation.
3516
3517 M po/lv.po
3518
3519 commit 498f225b6f9a4a146a534bacdc8b8b665cf71d95
3520 Author: Daniel Martinez <entaltoaragon@gmail.com>
3521 Date: Sat Apr 24 11:21:36 2010 +0200
3522
3523 Added Aragonese translation
3524
3525 M po/LINGUAS
3526 A po/an.po
3527
3528 commit 5b8ae6e132b31a0a0f14021ef6cf2fc2794bc87e
3529 Author: Carles Ferrando <carles.ferrando@gmail.com>
3530 Date: Wed Apr 21 23:31:15 2010 +0200
3531
3532 Updated Catalan (Valencian) translation
3533
3534 M po/ca@valencia.po
3535
3536 commit 7408013978ba989af175f2ca17526fec4eea49c6
3537 Author: Shankar Prasad <svenkate@svenkate.pnq.redhat.com>
3538 Date: Wed Apr 21 11:50:02 2010 +0530
3539
3540 Updated Kannada translations
3541
3542 M po/kn.po
3543
3544 commit 20d4732caf167f54c376d34184ca7fdcf7d834b7
3545 Author: Jordi Serratosa <jordis.lists@gmail.com>
3546 Date: Fri Apr 2 17:41:22 2010 +0200
3547
3548 Fixes to Catalan translation
3549
3550 M po/ca.po
3551
3552 commit a08bbc660cd320245ea4f3ccab4c33261e83dc7b
3553 Author: Christian Kirbach <Christian.Kirbach@googlemail.com>
3554 Date: Wed Mar 31 20:11:39 2010 +0200
3555
3556 Updated German translation
3557
3558 M po/de.po
3559
3560 commit ffbddbf28289a4ac72b284e3cc6f4db04cf0b43e
3561 Author: Wouter Bolsterlee <wbolster@gnome.org>
3562 Date: Tue Mar 30 18:01:20 2010 +0200
3563
3564 Dutch translation updated by Wouter Bolsterlee
3565
3566 M po/nl.po
3567
3568 commit 8d9f3db359acde4395645a0ea95c48567e5d79f4
3569 Author: Reşat SABIQ <tilde.birlik@gmail.com>
3570 Date: Tue Mar 30 00:46:58 2010 -0500
3571
3572 Updated Crimean Tatar (Crimean Turkish) translation
3573
3574 M po/crh.po
3575
3576 commit fe6b717216cb93b05abc547fd11c550d9d4f4f4e
3577 Author: Vincent Untz <vuntz@gnome.org>
3578 Date: Tue Mar 30 02:02:15 2010 +0200
3579
3580 [release] post-release bump to 2.30.1
3581
3582 M configure.in
3583
3584 commit ada97a6e81d2f282796938269da7280dc5a8c83f
3585 Author: Vincent Untz <vuntz@gnome.org>
3586 Date: Tue Mar 30 02:02:06 2010 +0200
3587
3588 [release] 2.30.0
3589
3590 M NEWS
3591 M README
3592 M configure.in
3593
3594 commit 2d0068dc1859b3adf21cfcc47a23aa00fc7d4502
3595 Author: Kostas Papadimas <pkst@gnome.org>
3596 Date: Sun Mar 28 10:01:00 2010 +0300
3597
3598 Updated Greek translation
3599
3600 M po/el.po
3601
3602 commit b7d6ee4f3f252b57a85787043fa3506d1640fa05
3603 Author: Inaki Larranaga Murgoitio <dooteo@zundan.com>
3604 Date: Tue Mar 23 15:10:22 2010 +0100
3605
3606 Updated Basque language
3607
3608 M po/eu.po
3609
3610 commit e74ebd36d267033054e6bf15851da0f88d12eb3a
3611 Author: Badral Sanligiin <badral@openmn.org>
3612 Date: Tue Mar 23 02:57:26 2010 +0100
3613
3614 Updated Mongolian translation
3615
3616 M po/mn.po
3617
3618 commit 1bec0581f480c3e8b485be1453de389083feff5c
3619 Author: David Planella <david.planella@gmail.com>
3620 Date: Wed Mar 17 08:24:02 2010 +0100
3621
3622 Updated Catalan translation as per fixes discussed on the translation mailing list
3623
3624 M po/ca.po
3625
3626 commit 1253c82ed7ba774cbad7794c06d31249bf591c37
3627 Author: Vincent Untz <vuntz@gnome.org>
3628 Date: Mon Mar 15 09:55:46 2010 +0100
3629
3630 [libmenu] Never ignore Menuname nodes from DefaultLayout
3631
3632 If a Menuname node applies to a subdirectory that appears because of
3633 inlining, we generally want to ignore it. However, if this Menuname node
3634 comes from a DefaultLayout, then it should really be applied.
3635
3636 M libmenu/gmenu-tree.c
3637
3638 commit 7dba2d5302b539e24131e669e2db26f3c16e1547
3639 Author: Vincent Untz <vuntz@gnome.org>
3640 Date: Mon Mar 15 09:27:44 2010 +0100
3641
3642 [libmenu] Fix layout processing for Menuname nodes
3643
3644 Because of the scope of a variable, no submenu were matching Menuname
3645 nodes in the layouts, making all the Menuname nodes non-working.
3646
3647 https://bugzilla.gnome.org/show_bug.cgi?id=612585
3648
3649 M libmenu/gmenu-tree.c
3650
3651 commit c48304179db938f7336223f99ead95dda6044f7a
3652 Author: Changwoo Ryu <cwryu@debian.org>
3653 Date: Sat Mar 13 23:55:09 2010 +0900
3654
3655 Updated Korean translation
3656
3657 M po/ko.po
3658
3659 commit 87f03667154f5c77548506218c57020e37d04c81
3660 Author: Vincent Untz <vuntz@gnome.org>
3661 Date: Tue Mar 9 14:06:21 2010 +0100
3662
3663 [build] Add configure summary
3664
3665 M configure.in
3666
3667 commit 9fbaa3d7f76ffb4076216d231acf39da0331e0bc
3668 Author: Vincent Untz <vuntz@gnome.org>
3669 Date: Mon Mar 8 14:49:09 2010 +0100
3670
3671 [release] post-release bump to 2.30.0
3672
3673 M configure.in
3674
3675 commit 076f8c42ce3e46c3b5cb761a3cd65c6f1e0a55a2
3676 Author: Vincent Untz <vuntz@gnome.org>
3677 Date: Mon Mar 8 14:49:01 2010 +0100
3678
3679 [release] 2.29.92
3680
3681 M NEWS
3682 M README
3683 M configure.in
3684
3685 commit d50ff15f43bc2311fbd06bd9664ae9571fd550ea
3686 Author: Vincent Untz <vuntz@gnome.org>
3687 Date: Mon Mar 8 14:43:18 2010 +0100
3688
3689 [libmenu] Add gobject-introspection support
3690
3691 https://bugzilla.gnome.org/show_bug.cgi?id=598406
3692
3693 M Makefile.am
3694 M autogen.sh
3695 M configure.in
3696 M libmenu/Makefile.am
3697
3698 commit d3135a15585afcb8d597fae05beadfaf1c743238
3699 Author: Vincent Untz <vuntz@gnome.org>
3700 Date: Thu Mar 4 17:55:40 2010 +0100
3701
3702 [misc] Do not call bindtextdomain() and friends in test-menu-spec.c
3703
3704 We decided to not make this application translatable in commit
3705 25c10ed7, so we don't need those calls.
3706
3707 M util/test-menu-spec.c
3708
3709 commit 57e825050cf8eafb970c8ddd2dc9c66885d25ce3
3710 Author: Nikos Charonitakis <nikosx@gmail.com>
3711 Date: Thu Feb 25 00:52:48 2010 +0200
3712
3713 Updated Greek translation
3714
3715 M po/el.po
3716
3717 commit 274a633ddb053a70e26278308a6fb52ef933e608
3718 Author: Pavol Klačanský <pavol@klacansky.com>
3719 Date: Tue Feb 23 17:55:32 2010 +0100
3720
3721 Updated Slovak translation
3722
3723 M po/sk.po
3724
3725 commit 41d1ce2320c26dce1677e0624c36119ec88e6823
3726 Author: Vincent Untz <vuntz@gnome.org>
3727 Date: Mon Feb 22 20:18:20 2010 +0100
3728
3729 [release] post-release bump to 2.29.92
3730
3731 M configure.in
3732
3733 commit 5eaf95e2c9e7755332a7c586eef34726244290dd
3734 Author: Vincent Untz <vuntz@gnome.org>
3735 Date: Mon Feb 22 20:18:05 2010 +0100
3736
3737 [release] 2.29.91
3738
3739 M NEWS
3740 M README
3741 M configure.in
3742
3743 commit ca24481c06829c7382d20ac7ee2283e22b908451
3744 Author: Vincent Untz <vuntz@gnome.org>
3745 Date: Mon Feb 22 12:11:57 2010 +0100
3746
3747 [misc] Add translator comment for Personal
3748
3749 https://bugzilla.gnome.org/show_bug.cgi?id=610661
3750
3751 M desktop-directories/Personal.directory.in
3752
3753 commit 25c10ed70c8125516537b3b731dff1c559bcab94
3754 Author: Vincent Untz <vuntz@gnome.org>
3755 Date: Mon Feb 22 12:06:48 2010 +0100
3756
3757 [misc] Do not make the string test-menu-spec.c translatable
3758
3759 This is only a test program that doesn't get installed, so there's no
3760 point in making translators work on the strings there.
3761
3762 https://bugzilla.gnome.org/show_bug.cgi?id=609441
3763
3764 M po/POTFILES.in
3765 A po/POTFILES.skip
3766 M util/test-menu-spec.c
3767
3768 commit 8f52b3c312da587fb29590559cb50370787f6116
3769 Author: Fran Diéguez <frandieguez@ubuntu.com>
3770 Date: Mon Feb 15 18:44:37 2010 +0100
3771
3772 Updated Galician Translation
3773
3774 M po/gl.po
3775
3776 commit ef1383eda9480c96ac2e5d958342c98ab1be41cb
3777 Author: Torstein Adolf Winterseth <kvikende@yahoo.no>
3778 Date: Thu Jan 28 12:10:06 2010 +0100
3779
3780 Updated Norwegian Nynorsk translation
3781
3782 M po/nn.po
3783
3784 commit a0a398d77aa2ea28d267f106880e0df1417d8fab
3785 Author: Vincent Untz <vuntz@gnome.org>
3786 Date: Wed Jan 27 16:47:53 2010 +0100
3787
3788 [release] post-release bump to 2.29.90
3789
3790 M configure.in
3791
3792 commit 2c37a7cbdd9d6f7e9f1ccfb0d2979da897e9668e
3793 Author: Vincent Untz <vuntz@gnome.org>
3794 Date: Wed Jan 27 16:47:41 2010 +0100
3795
3796 [release] 2.29.6
3797
3798 M NEWS
3799 M README
3800 M configure.in
3801
3802 commit a462be862680ee3051eef3ca238f5bc405640e16
3803 Author: Jamil Ahmed <itsjamil@gmail.com>
3804 Date: Sun Jan 24 23:15:18 2010 +0600
3805
3806 Updated Bengali translation
3807
3808 M po/bn.po
3809
3810 commit fdafd8c07a65e65fdf6f2e7d358b7eb2b14d01eb
3811 Author: Aron Xu <aronxu@gnome.org>
3812 Date: Sun Jan 24 15:34:41 2010 +0800
3813
3814 Update Simplified Chinese translation.
3815
3816 M po/zh_CN.po
3817
3818 commit 89309a8bb1e76209e147180a3fe2fd15307d6012
3819 Author: Vincent Untz <vuntz@gnome.org>
3820 Date: Fri Jan 15 00:02:07 2010 +0100
3821
3822 [libmenu] Do not count non-inlining submenus as inlining with header
3823
3824 When computing if a submenu should be inlined, we use the number of
3825 items in the subsubmenus. It was always assuming that inlining with a
3826 header would be used, because of misuse of the will_inline_header field.
3827
3828 M libmenu/gmenu-tree.c
3829
3830 commit 4b51a77fcbc1a2c3e94945c4b92a65559f7e5996
3831 Author: Vincent Untz <vuntz@gnome.org>
3832 Date: Thu Jan 14 23:30:47 2010 +0100
3833
3834 [libmenu] Support inline alias of an inline alias
3835
3836 M libmenu/gmenu-tree.c
3837
3838 commit cd1d0a199110ca94266c3e8b928e61d12cd2aac3
3839 Author: Vincent Untz <vuntz@gnome.org>
3840 Date: Thu Jan 14 23:26:49 2010 +0100
3841
3842 [libmenu] Add real support for inline aliases during layout processing
3843
3844 It looks like the inline aliases were not really tested before...
3845
3846 All the processing of the layout info (merge_subdir_by_name,
3847 merge_entry_by_id, merge_subdirs, merge_entries,
3848 merge_subdirs_and_entries) was completely ignoring the fact that some
3849 subdirs or entries might be aliases, and therefore need a different
3850 processing.
3851
3852 This is now done correctly, and we have a merge_alias() function to do
3853 the right thing when an alias is detected.
3854
3855 Also, this simplifies quite a bit the sorting of subdirs or entries
3856 since we always need to check the types of the items we compare, so we
3857 can get rid of gmenu_tree_directory_compare and
3858 gmenu_tree_entry_compare.
3859
3860 M libmenu/gmenu-tree.c
3861
3862 commit cda451cec61345d357cbc26e5a5dfd102f476ea5
3863 Author: Vincent Untz <vuntz@gnome.org>
3864 Date: Thu Jan 14 21:29:42 2010 +0100
3865
3866 [libmenu] Fix miscalulation for inlining when inline_header = true
3867
3868 When inline_header = true for a subdirectory, the length of the content
3869 of the parent directory was miscomputed: instead of adding the length of
3870 the subdirectory, it was just replacing the current length with the
3871 length of the subdirectory.
3872
3873 Also fix a typo in a comment
3874
3875 M libmenu/gmenu-tree.c
3876
3877 commit b6dc7a2443ef3d8fef1a1175532124882e95d03b
3878 Author: krishnababu k <kkrothap@redhat.ocm>
3879 Date: Wed Dec 2 14:36:36 2009 +0530
3880
3881 Updated telugu translation
3882
3883 M po/te.po
3884
3885 commit 696867378e99b410c1803412c7f894c99b386f64
3886 Author: Thomas Thurman <tthurman@gnome.org>
3887 Date: Sat Oct 31 22:26:02 2009 -0400
3888
3889 Shavian translation
3890
3891 M po/LINGUAS
3892 A po/en@shaw.po
3893
3894 commit 4c76410de345e06b879c85fa015659286f42c240
3895 Author: Nils-Christoph Fiedler <linux@medienkompanie.de>
3896 Date: Thu Oct 22 19:47:54 2009 +0200
3897
3898 Updated Low German translation
3899
3900 M po/nds.po
3901
3902 commit 5f2c53bd3fbd4b39707609955f445c96eb9b5fb3
3903 Author: Reşat SABIQ <tilde.birlik@gmail.com>
3904 Date: Wed Oct 21 00:29:46 2009 -0500
3905
3906 Update for Crimean Tatar (Crimean Turkish) translation
3907
3908 M po/crh.po
3909
3910 commit bde6cabd440da28d25983e762ed6b71849da918f
3911 Author: Leonid Kanter <leon@asplinux.ru>
3912 Date: Tue Oct 20 12:06:06 2009 +0300
3913
3914 Updated Russian translation
3915
3916 M po/ru.po
3917
3918 commit 72f4ede1ab9bbcfa29affda98e1fcfecdfcf87ef
3919 Author: Gil Forcada <gforcada@gnome.org>
3920 Date: Tue Oct 6 17:36:50 2009 +0200
3921
3922 Updated Catalan translation
3923
3924 M po/ca.po
3925
3926 commit e1c00f83d903581233e7e15655916b4079b3e500
3927 Author: Sveinn í Felli <sveinki@nett.is>
3928 Date: Fri Oct 2 06:17:30 2009 +0000
3929
3930 Updated Icelandic translation
3931
3932 M po/is.po
3933
3934 commit 5aff8025f08164699721084857a5321ed2a45abe
3935 Author: Vincent Untz <vuntz@gnome.org>
3936 Date: Thu Oct 1 13:25:58 2009 +0200
3937
3938 [release] post-release bump to 2.28.1
3939
3940 M configure.in
3941
3942 commit 1d899c5b7bafb9ea01e0f407df7acb2b0d6432f4
3943 Author: Vincent Untz <vuntz@gnome.org>
3944 Date: Thu Oct 1 13:25:50 2009 +0200
3945
3946 [release] 2.28.0.1
3947
3948 M NEWS
3949 M README
3950 M configure.in
3951
3952 commit 9d8e52a9a3e495f1e8e50a61f89510a03a4d31c9
3953 Author: Vincent Untz <vuntz@gnome.org>
3954 Date: Thu Oct 1 13:21:45 2009 +0200
3955
3956 [build] Link the python binding to libpython
3957
3958 Thanks to Frederic Crozat <fcrozat@mandriva.com> for spotting this.
3959
3960 D acinclude.m4
3961 A m4/python.m4
3962 M python/Makefile.am
3963
3964 commit 117273842932a6fb24143926513474c28e3595b4
3965 Author: Frederic Crozat <fcrozat@mandriva.com>
3966 Date: Tue Sep 29 15:35:10 2009 +0200
3967
3968 [libmenu] Make sure to use a value when sorting items during a merge
3969
3970 The name variable was not assigned any value...
3971
3972 M libmenu/gmenu-tree.c
3973
3974 commit 5713f8e66b0fe3791a57555ebd12ddb076176cd9
3975 Author: Vincent Untz <vuntz@gnome.org>
3976 Date: Mon Sep 21 18:18:27 2009 +0200
3977
3978 [release] post-release bump to 2.28.1
3979
3980 M configure.in
3981
3982 commit ddc11bf8f9d279cc2578c074ccb2c85a837e4ba7
3983 Author: Vincent Untz <vuntz@gnome.org>
3984 Date: Mon Sep 21 18:18:18 2009 +0200
3985
3986 [release] 2.28.0
3987
3988 M NEWS
3989 M README
3990 M configure.in
3991
3992 commit 87d43c2dd053ae3cb16e53341db2cb60ae348cf9
3993 Author: Amitakhya Phukan <aphukan@fedoraproject.org>
3994 Date: Mon Sep 21 11:30:34 2009 +0530
3995
3996 Updating Assamese translations
3997
3998 M po/as.po
3999
4000 commit a44cc5ae04856e05300dc189cab1a9e0ea0d7697
4001 Author: Amitakhya Phukan <aphukan@fedoraproject.org>
4002 Date: Mon Sep 21 11:29:14 2009 +0530
4003
4004 Updating Assamese translations
4005
4006 M po/as.po
4007
4008 commit e6a5afde9de461ccbc45556ca7720d0b9e1c63a8
4009 Author: Shankar Prasad <svenkate@redhat.com>
4010 Date: Mon Sep 21 10:18:37 2009 +0530
4011
4012 Updated Kannada(kn) translation
4013
4014 M po/kn.po
4015
4016 commit dc324804a5105c78f5fded62232d7f83976dec2d
4017 Author: Petr Kovar <pknbe@volny.cz>
4018 Date: Mon Sep 21 04:22:31 2009 +0200
4019
4020 Updated Czech translation
4021
4022 M po/cs.po
4023
4024 commit c7045e1d8937e7730cde99e87dce31ccb3474d76
4025 Author: Rajesh Ranjan <rranjan@rranjan.csb>
4026 Date: Sun Sep 20 12:35:22 2009 +0530
4027
4028 maithili update, translated by Sangeeta Kumari
4029
4030 M po/mai.po
4031
4032 commit 3e5f8caa3f659f4a3ea7730ea79af98c639379ac
4033 Author: Daniel Nylander <po@danielnylander.se>
4034 Date: Sat Sep 19 10:25:52 2009 +0200
4035
4036 Updated Swedish translation
4037
4038 M po/sv.po
4039
4040 commit 8af7dc29b7ccf039422d70c38f3927d1e493e726
4041 Author: Luca Ferretti <elle.uca@libero.it>
4042 Date: Fri Sep 18 15:08:11 2009 +0200
4043
4044 Added Italian translation
4045
4046 M po/it.po
4047
4048 commit b46ad5eb16a78883c09ebddcf09634368052ac72
4049 Author: krishnababu k <kkrothap@redhat.ocm>
4050 Date: Thu Sep 17 21:43:06 2009 +0530
4051
4052 Updated Telugu Translation
4053
4054 M po/te.po
4055
4056 commit 9f35303a5dbb43c2f024d001de95dd58402e4519
4057 Author: Maxim V. Dziumanenko <dziumanenko@gmail.com>
4058 Date: Thu Sep 17 13:56:16 2009 +0300
4059
4060 Added Ukrainian translation
4061
4062 M po/uk.po
4063
4064 commit 9f656630180c4328bfe95e325c4e2afbf61a22d4
4065 Author: Niels-Christoph Fiedler <linux@medienkompanie.de>
4066 Date: Wed Sep 16 18:33:04 2009 +0200
4067
4068 Updated German translation
4069
4070 M po/nds.po
4071
4072 commit 3989f3da21c0b72c2161c4476620e992ca533a02
4073 Author: Adi Roiban <adi@roiban.ro>
4074 Date: Wed Sep 16 16:01:54 2009 +0300
4075
4076 Updated Romanian translation
4077
4078 M po/ro.po
4079
4080 commit a9f05d49e0e31e5cd7ec6ca6e835b3de438f3033
4081 Author: Rajesh Ranjan <rranjan@rranjan.csb>
4082 Date: Wed Sep 16 13:47:43 2009 +0530
4083
4084 hindi update by Rajesh Ranjan
4085
4086 M po/hi.po
4087
4088 commit 19d5f458acc6001cee1446caa39163f3369af273
4089 Author: Gintautas Miliauskas <gintautas@miliauskas.lt>
4090 Date: Tue Sep 15 02:11:17 2009 +0300
4091
4092 Updated Lithuanian translation.
4093
4094 M po/lt.po
4095
4096 commit 1102f0542b4df782708eb857e638bfd5966aa7dc
4097 Author: Ask H. Larsen <asklarsen@gmail.com>
4098 Date: Sun Sep 13 03:23:56 2009 +0200
4099
4100 Updated Danish translation
4101
4102 M po/da.po
4103
4104 commit da99034888d5191a27e3029cbad6c73c7e52e10a
4105 Author: Philip Withnall <philip@tecnocode.co.uk>
4106 Date: Sat Sep 12 23:35:46 2009 +0100
4107
4108 Updated British English translation
4109
4110 M po/en_GB.po
4111
4112 commit 67c6af706c287319a7d5c73cf86d5209fd89f44f
4113 Author: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
4114 Date: Sun Sep 13 06:32:22 2009 +0800
4115
4116 Updated Traditional Chinese translation(Hong Kong and Taiwan)
4117
4118 M po/zh_HK.po
4119 M po/zh_TW.po
4120
4121 commit ebd7a9aaa45fb4b43ac7e5b35e45412ddd55dc9d
4122 Author: Ani <peter.ani@gmail.com>
4123 Date: Sat Sep 12 18:32:13 2009 +0530
4124
4125 Updaeted Malayalam Translations
4126
4127 M po/ml.po
4128
4129 commit 37d761d18917ba9167c2be84c8fd5c6948ff3139
4130 Author: Matej Urbančič <mateju@svn.gnome.org>
4131 Date: Sat Sep 12 10:31:29 2009 +0200
4132
4133 Updated Slovenian translation
4134
4135 M po/sl.po
4136
4137 commit 333ce6b4509b8137c085171b730b92f0d2870c7b
4138 Author: Sandeep Shedmake <sshedmak@redhat.com>
4139 Date: Fri Sep 11 19:35:53 2009 +0530
4140
4141 Updated Marathi Translations
4142
4143 M po/mr.po
4144
4145 commit 068006c9639123b7c7fe47855f5e1801c78c7dd0
4146 Author: A S Alam <aalam@users.sf.net>
4147 Date: Thu Sep 10 06:46:10 2009 +0530
4148
4149 updating for Punjabi
4150
4151 M po/pa.po
4152
4153 commit 7411701b1e806aa8f283ea9868d165ab150ac2c7
4154 Author: Baris Cicek <baris@teamforce.name.tr>
4155 Date: Thu Sep 10 00:25:54 2009 +0300
4156
4157 Updated Turkish translation.
4158
4159 M po/tr.po
4160
4161 commit eb43a84b5a1b55f1743e9d0b9aee036a72962b17
4162 Author: Vincent Untz <vuntz@gnome.org>
4163 Date: Wed Sep 9 02:10:28 2009 +0200
4164
4165 [build] Generate bzip2 tarballs and use foreign automake option
4166
4167 M configure.in
4168
4169 commit 4d35bde7e67f6b59c108ebc8615a342cb93cbd17
4170 Author: Vincent Untz <vuntz@gnome.org>
4171 Date: Wed Sep 9 02:08:49 2009 +0200
4172
4173 [release] post-release bump to 2.28.0
4174
4175 M configure.in
4176
4177 commit 908771796bad88ce49158f951bd7ca40c51b256b
4178 Author: Vincent Untz <vuntz@gnome.org>
4179 Date: Wed Sep 9 02:08:40 2009 +0200
4180
4181 [release] 2.27.92
4182
4183 M NEWS
4184 M README
4185 M configure.in
4186
4187 commit f1a8145230fc24f47f4818f39839aafe5b911c37
4188 Author: Takayuki KUSANO <AE5T-KSN@asahi-net.or.jp>
4189 Date: Tue Sep 8 22:14:00 2009 +0900
4190
4191 Updated Japanese translation
4192
4193 M po/ja.po
4194
4195 commit 0178e1acc5aeca2e05ddfcf67e8f03e8ee82eff6
4196 Author: Vincent Untz <vuntz@gnome.org>
4197 Date: Tue Sep 8 00:20:56 2009 +0200
4198
4199 [misc] Bump version to 2.27.92
4200
4201 M configure.in
4202
4203 commit db81a7f1194e435b538ab6710d752276fb1c7135
4204 Author: Vincent Untz <vuntz@gnome.org>
4205 Date: Mon Sep 7 23:28:56 2009 +0200
4206
4207 [editor] Use display name instead of name
4208
4209 M simple-editor/GMenuSimpleEditor/menutreemodel.py
4210
4211 commit d3fdd0ba4133c66e670561bca5b1bf4dd1a8feea
4212 Author: Vincent Untz <vuntz@gnome.org>
4213 Date: Mon Sep 7 23:13:22 2009 +0200
4214
4215 [libmenu,python] Add gmenu_tree_get_sort_key()/gmenu_tree_set_sort_key()
4216
4217 This is needed for users of gnome-menus that display applications by
4218 strings obtained via get_display_name(), since the order of entry
4219 changes if strings are different.
4220
4221 The default is to keep the sort order by name. At the moment, the only
4222 other option is to use a sort by display name.
4223
4224 Bindings for python are added too.
4225
4226 M libmenu/gmenu-tree.c
4227 M libmenu/gmenu-tree.h
4228 M python/gmenu.c
4229
4230 commit 4b007ffddf4cfd58d508a8c24d49ca8724753bb0
4231 Author: Vincent Untz <vuntz@gnome.org>
4232 Date: Mon Sep 7 23:19:49 2009 +0200
4233
4234 [python] Fix accidental swap between display_name and generic_name
4235
4236 M python/gmenu.c
4237
4238 commit 22b78e8b3cbc5d68638a1729728b682a4ce1d10b
4239 Author: Vincent Untz <vuntz@gnome.org>
4240 Date: Mon Sep 7 19:21:12 2009 +0200
4241
4242 [python] Add bindings for get_generic_name() and get_display_name()
4243
4244 M python/gmenu.c
4245
4246 commit e539c64e99a000b3a89a53bb5a6233a6b16ed96a
4247 Author: Vincent Untz <vuntz@gnome.org>
4248 Date: Mon Sep 7 19:19:41 2009 +0200
4249
4250 [libmenu] Add gmenu_tree_entry_get_display_name() API
4251
4252 This API returns the content of the X-GNOME-FullName key if available,
4253 and fallbacks to Name.
4254
4255 M libmenu/desktop-entries.c
4256 M libmenu/desktop-entries.h
4257 M libmenu/gmenu-tree.c
4258 M libmenu/gmenu-tree.h
4259
4260 commit 9767b9094ef22034be948f289473726e922e1d28
4261 Author: Gabor Kelemen <kelemeng@gnome.hu>
4262 Date: Mon Sep 7 02:30:34 2009 +0200
4263
4264 Hungarian translation updated
4265
4266 M po/hu.po
4267
4268 commit c2e0a3cedf6ceded675e6d6b8368d98dc8e64716
4269 Author: Rodrigo L. M. Flores <rlmflores@src.gnome.org>
4270 Date: Sun Aug 30 19:56:20 2009 -0300
4271
4272 Updated Brazilian Portuguese mailing list address.
4273
4274 M po/pt_BR.po
4275
4276 commit e5c016f25d380332029e4b4d78ebc795fcc06e27
4277 Author: Mario Blättermann <mariobl@gnome.org>
4278 Date: Sun Aug 30 14:54:33 2009 +0200
4279
4280 Updated German translation
4281
4282 M po/de.po
4283
4284 commit aadd320b39ccd5a713b2fc9f5fb85d894141c61f
4285 Author: Miloš Popović <mpopovic@src.gnome.org>
4286 Date: Sat Aug 29 14:43:42 2009 +0200
4287
4288 Updated Serbian translation
4289
4290 M po/sr.po
4291 M po/sr@latin.po
4292
4293 commit 900767c9056455409c0ad674d17959b50b1a0f49
4294 Author: Runa Bhattacharjee <runab@redhat.com>
4295 Date: Fri Aug 28 12:30:47 2009 +0530
4296
4297 Updated Bengali India Translations
4298
4299 M po/bn_IN.po
4300
4301 commit 66913548e742cc1a8c138fccce9302b88fe5eae9
4302 Author: Duarte Loreto <happyguy_pt@hotmail.com>
4303 Date: Thu Aug 27 08:58:37 2009 +0100
4304
4305 Updated Portuguese translation
4306
4307 M po/pt.po
4308
4309 commit 4dbf30628a5f29f8eb0b85c65ffd5b9b0caa5177
4310 Author: Claude Paroz <claude@2xlibre.net>
4311 Date: Wed Aug 26 21:33:09 2009 +0200
4312
4313 Updated French translation
4314
4315 M po/fr.po
4316
4317 commit bcf479be8e2b92c26becafe004a0f1b1c62af679
4318 Author: Inaki Larranaga Murgoitio <dooteo@zundan.com>
4319 Date: Wed Aug 26 18:27:07 2009 +0200
4320
4321 Updated Basque language
4322
4323 M po/eu.po
4324
4325 commit 5ee416dd4c7b0ddb11c7c38581bf293b3b9352dd
4326 Author: Luca Ferretti <elle.uca@libero.it>
4327 Date: Wed Aug 26 09:31:11 2009 +0200
4328
4329 Updated Italian translation
4330
4331 M po/it.po
4332
4333 commit a02a132ed3b18f156bf2c7e965c3075685f72759
4334 Author: Tomasz Dominikowski <dominikowski@gmail.com>
4335 Date: Tue Aug 25 19:26:18 2009 +0200
4336
4337 Updated Polish translation
4338
4339 M po/pl.po
4340
4341 commit 6f55d2289a2a30d03db2bf40c31f79474ff952c0
4342 Author: Frédéric Péters <fpeters@0d.be>
4343 Date: Sat Aug 22 13:44:25 2009 +0200
4344
4345 Remove deprecated Encoding key from desktop file
4346
4347 M simple-editor/gmenu-simple-editor.desktop.in
4348
4349 commit 4771bdb6af1b29f10ba39706cb2b63433d1f0480
4350 Author: Andre Klapper <a9016009@gmx.de>
4351 Date: Mon Aug 24 23:01:03 2009 +0200
4352
4353 Change nds_NFE to nds as discussed on irc
4354
4355 M po/LINGUAS
4356 R100 po/nds_NFE.po po/nds.po
4357
4358 commit 539360b4cfa0c26b884c9811acd15d943a7574a0
4359 Author: Sweta Kothari <swkothar@redhat.com>
4360 Date: Mon Aug 24 15:37:44 2009 +0530
4361
4362 Updated Gujarati Translations
4363
4364 M po/gu.po
4365
4366 commit 28501f2afe901298d74760362f47bb7f67107699
4367 Author: Changwoo Ryu <cwryu@debian.org>
4368 Date: Sun Aug 23 07:27:42 2009 +0900
4369
4370 Update Korean translation
4371
4372 M po/ko.po
4373
4374 commit b2b842dbd5fd8687562d0961ad62391d5f72004f
4375 Author: Mario Blättermann <mariobl@gnome.org>
4376 Date: Sat Aug 22 15:09:52 2009 +0200
4377
4378 Added Low German to LINGUAS
4379
4380 M po/LINGUAS
4381
4382 commit 4694660b8ebac75d9c72ef1de5654bd031a9062e
4383 Author: Mario Blättermann <mariobl@gnome.org>
4384 Date: Sat Aug 22 15:07:10 2009 +0200
4385
4386 Added Low German translation
4387
4388 A po/nds_NFE.po
4389
4390 commit 9dc36cf2b049dbca649c92911f29644b073f031b
4391 Author: Khaled Hosny <khaledhosny@eglug.org>
4392 Date: Thu Aug 20 21:19:07 2009 +0300
4393
4394 Updated Arabic translation
4395
4396 M po/ar.po
4397
4398 commit 895ba3af6f107e61cc6a4414746d94ba3df38a8f
4399 Author: Alexander Shopov <ash@contact.bg>
4400 Date: Fri Aug 14 07:48:02 2009 +0300
4401
4402 Updated Bulgarian translation
4403
4404 M po/bg.po
4405
4406 commit 761e44b26fd2315f8823d3b5f2347346f1ef9eb0
4407 Author: Manoj Kumar Giri <mgiri@mgiri.csb>
4408 Date: Thu Aug 13 20:09:24 2009 +0530
4409
4410 Updated Oriya Translation
4411
4412 M po/or.po
4413
4414 commit c49f4bb691fd51039add261b9a19c5b45bbbd0d5
4415 Author: Antón Méixome <meixome@mancoumun.org>
4416 Date: Wed Aug 12 13:25:27 2009 +0200
4417
4418 Updated Galician translation
4419
4420 M po/gl.po
4421
4422 commit 3ed6cedb4154fa399f48b036088fa703291d28d9
4423 Author: Krix Apolinário <krixapolinario@gmail.com>
4424 Date: Wed Aug 12 00:01:59 2009 -0300
4425
4426 Updated Brazilian Portuguese translation.
4427
4428 M po/pt_BR.po
4429
4430 commit 3f85e31f5fbb7e3e77ed8459af8b18f071ed3767
4431 Author: Kjartan Maraas <kmaraas@gnome.org>
4432 Date: Tue Aug 4 18:15:34 2009 +0200
4433
4434 Updated Norwegian bokmål translation.
4435
4436 M po/nb.po
4437
4438 commit ed5f86151fd103c446535bc8d1ed3d80604e2899
4439 Author: Seán de Búrca <leftmostcat@gmail.com>
4440 Date: Wed Jul 29 17:45:34 2009 -0600
4441
4442 Updated Irish translation
4443
4444 M po/ga.po
4445
4446 commit 6b5cd5918a318712237b5fc511fe122a1229a29b
4447 Author: Denis Arnaud <darnaud@src.gnome.org>
4448 Date: Wed Jul 29 12:13:13 2009 +0200
4449
4450 Updated breton translation
4451
4452 M po/br.po
4453
4454 commit c6f657e60f70bb848b70b9462591a38c973b4010
4455 Author: drtvasudevan <agnihot3@gmail.com>
4456 Date: Wed Jul 29 12:12:26 2009 +0530
4457
4458 Updated Tamil translation
4459
4460 M po/ta.po
4461
4462 commit 458924440a7f69c64272ddeb9fbe1999ac70bbcd
4463 Author: drtvasudevan <agnihot3@gmail.com>
4464 Date: Wed Jul 29 12:10:37 2009 +0530
4465
4466 Updated Tamil translation
4467
4468 M po/ta.po
4469
4470 commit 3d9f5ce3d34839e2342692a849838c9e7503c588
4471 Author: Denis Arnaud <darnaud@src.gnome.org>
4472 Date: Wed Jul 29 07:09:51 2009 +0200
4473
4474 Updated breton translation
4475
4476 M po/br.po
4477
4478 commit ea7245e45238b380a8ba11ee8dabc67775e49c6f
4479 Author: Vincent Untz <vuntz@gnome.org>
4480 Date: Wed Jul 29 00:08:38 2009 +0200
4481
4482 [misc] Update commit guidelines for referencing bugs
4483
4484 M ChangeLog
4485
4486 commit 374cdd09e33122d6a7f06eec9748130b3c85f9fe
4487 Author: Vincent Untz <vuntz@gnome.org>
4488 Date: Tue Jul 28 18:07:17 2009 +0200
4489
4490 [release] post-release bump to 2.27.90
4491
4492 M configure.in
4493
4494 commit e399908c171a0add6ab6febd405b5121b3772fd2
4495 Author: Vincent Untz <vuntz@gnome.org>
4496 Date: Tue Jul 28 18:07:07 2009 +0200
4497
4498 [release] 2.27.5
4499
4500 M NEWS
4501 M README
4502 M configure.in
4503
4504 commit 2bb16693175f59d28c8a798d50ffb9b462c916f3
4505 Author: Denis Arnaud <darnaud@src.gnome.org>
4506 Date: Tue Jul 28 14:10:04 2009 +0200
4507
4508 Updated breton translation
4509
4510 M po/br.po
4511
4512 commit b9cbf41d7c93ad8f18a5b9162dbd85a9e2774efa
4513 Author: Aron Xu <aronxu@gnome.org>
4514 Date: Sun Jul 26 18:25:28 2009 +0800
4515
4516 Updated Simplified Chinese translation.
4517
4518 M po/zh_CN.po
4519
4520 commit 0aed3c9a813e79ad57ec335e2aa410beb5d23991
4521 Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
4522 Date: Thu Jul 23 15:13:40 2009 +0700
4523
4524 Updated Thai translation.
4525
4526 M po/th.po
4527
4528 commit 83e66d9b0487b0be48ea935801d500e9857a4ae5
4529 Author: Vincent Untz <vuntz@gnome.org>
4530 Date: Tue Jul 21 19:35:18 2009 +0200
4531
4532 [build] Set m4/ as macro dir
4533
4534 M Makefile.am
4535 M configure.in
4536
4537 commit 34c1fcb2306df9ca22634a82e75865eda1031769
4538 Author: Vincent Untz <vuntz@gnome.org>
4539 Date: Tue Jul 21 18:53:35 2009 +0200
4540
4541 [build] Use silent-rules instead of shave for quiet build
4542
4543 M configure.in
4544 D m4/shave.m4
4545 D shave-libtool.in
4546 D shave.in
4547 M simple-editor/GMenuSimpleEditor/Makefile.am
4548 M simple-editor/Makefile.am
4549
4550 commit 8ca7e0223b9f0e935889c146bfb5378bfeadf0ea
4551 Author: Ilkka Tuohela <hile@iki.fi>
4552 Date: Sun Jul 19 10:39:57 2009 +0300
4553
4554 Updated Finnish translation
4555
4556 M po/fi.po
4557
4558 commit b8fa21a37017f3fe5e333a616434c5b489e7f333
4559 Author: Vincent Untz <vuntz@gnome.org>
4560 Date: Wed Jul 15 16:52:26 2009 +0200
4561
4562 [release] post-release bump to 2.27.5
4563
4564 M configure.in
4565
4566 commit c17916822f13accf78dfc4d1f3ef8bc398e398f5
4567 Author: Vincent Untz <vuntz@gnome.org>
4568 Date: Wed Jul 15 16:52:15 2009 +0200
4569
4570 [release] 2.27.4
4571
4572 M NEWS
4573 M README
4574 M configure.in
4575
4576 commit d49ae45dc30c3fbafded146e5fbccbe23215316b
4577 Author: Daniel Nylander <po@danielnylander.se>
4578 Date: Tue Jul 7 19:37:51 2009 +0200
4579
4580 Updated Swedish translation
4581
4582 M po/sv.po
4583
4584 commit 0b7478a5de36192e3bc31576c7e8114a3a6dbed3
4585 Author: Yaron Shahrabani <sh.yaron@gmail.com>
4586 Date: Sat Jul 4 22:39:12 2009 +0300
4587
4588 Updated Hebrew translation
4589
4590 M po/he.po
4591
4592 commit 8bddaf2076e094043189a20c36bf66b8c3813921
4593 Author: Vincent Untz <vuntz@gnome.org>
4594 Date: Sat Jun 27 04:18:02 2009 +0200
4595
4596 [libmenu] Sort inlined items unless inline_header is used
4597
4598 We also strip duplicate entries in a menu when we do such a sort.
4599
4600 This is actually not a trivial task since it means we have to correctly
4601 preprocess all inline data before using the layout -- else, we'd try to
4602 sort items while a layout has been used, which is too late (since you
4603 can specify that you want mixed entries and directories, eg; or even
4604 entries or directories in a specified order).
4605
4606 We make sure to evaluate the inline data at the deepest first, so we can
4607 correctly propagate as much inline items as possible to the top.
4608
4609 http://bugzilla.gnome.org/show_bug.cgi?id=490483
4610
4611 M libmenu/gmenu-tree.c
4612
4613 commit 0b1f053e07d1d4c081a58303cfe7ed6b583ed966
4614 Author: Jorge Gonzalez <jorgegonz@svn.gnome.org>
4615 Date: Sat Jun 27 14:58:46 2009 +0200
4616
4617 Updated Spanish translation
4618
4619 M po/es.po
4620
4621 commit 7a6b5b5a292357357f4458820b6e8f851472c592
4622 Author: Vincent Untz <vuntz@gnome.org>
4623 Date: Fri Jun 26 23:42:59 2009 +0200
4624
4625 [libmenu] Do not always inherit parent DefaultLayout attributes
4626
4627 We should not use the parent DefaultLayout attributes when there no
4628 DefaultLayout children for the child but there are DefaultLayout
4629 attributes for the child.
4630
4631 Ie, if the child has <DefaultLayout inline="true"/>, then it used to
4632 keep inheriting the parent DefaultLayout attributes, and then possibly
4633 lose the inline="true".
4634
4635 M libmenu/gmenu-tree.c
4636
4637 commit 89ab14f5fd34d18ef1591baf1000f5197344cd92
4638 Author: Vincent Untz <vuntz@gnome.org>
4639 Date: Fri Jun 26 23:19:47 2009 +0200
4640
4641 [libmenu] Fix DefaultLayout attributes not being inherited
4642
4643 The submenus were not inheriting the DefaultLayout attributes (eg,
4644 all the inline parameters) of their parent when there was no child to
4645 the DefaultLayout of their parent.
4646
4647 Concretely, this was ignored for submenus:
4648 <DefaultLayout inline="true"/>
4649 while this should have behaved like:
4650 <DefaultLayout inline="true"><Merge type="all"/></DefaultLayout>
4651
4652 M libmenu/gmenu-tree.c
4653
4654 commit 6f948049c368cad02b713332430b98c5daa11b5e
4655 Author: Mattias Põldaru <mahfiaz gmail com>
4656 Date: Thu Jun 25 14:29:03 2009 +0300
4657
4658 Updating Estonian translation
4659
4660 M po/et.po
4661
4662 commit 80f5477a91e11630403d60b701658c7ae242c7d7
4663 Author: Claude Paroz <claude@2xlibre.net>
4664 Date: Sun Jun 21 19:35:00 2009 +0200
4665
4666 Add translator comment
4667
4668 M simple-editor/GMenuSimpleEditor/main.py
4669
4670 commit fc7e3ebf3266a47de4dc96a2fc938e01848eb53d
4671 Author: Claude Paroz <claude@2xlibre.net>
4672 Date: Sun Jun 21 19:28:21 2009 +0200
4673
4674 Fix POTFILES.in
4675
4676 M po/POTFILES.in
4677
4678 commit dca731f53b3686436cc94cf2704035419c03b7e8
4679 Author: Robert Staudinger <robsta@gnome.org>
4680 Date: Thu May 7 17:28:08 2009 +0200
4681
4682 [libmenu] Add API to access GenericName
4683
4684 http://bugzilla.gnome.org/show_bug.cgi?id=581887
4685
4686 M libmenu/desktop-entries.c
4687 M libmenu/desktop-entries.h
4688 M libmenu/gmenu-tree.c
4689 M libmenu/gmenu-tree.h
4690
4691 commit d504fabf22e5303abd631e5a868fb5f45f4c7b05
4692 Author: Pedro Fragoso <ember@ubuntu.com>
4693 Date: Sun Jun 21 01:17:26 2009 +0200
4694
4695 [editor] Port to GtkBuilder
4696
4697 (with a few tweaks by me to make it work)
4698
4699 http://bugzilla.gnome.org/show_bug.cgi?id=580158
4700
4701 M po/POTFILES.in
4702 M simple-editor/GMenuSimpleEditor/config.py.in
4703 M simple-editor/GMenuSimpleEditor/main.py
4704 M simple-editor/GMenuSimpleEditor/maindialog.py
4705 M simple-editor/Makefile.am
4706 D simple-editor/gmenu-simple-editor.glade
4707 A simple-editor/gmenu-simple-editor.ui
4708
4709 commit fecc2847cf75048a6fe41c7423ac1e705a32b12b
4710 Author: Vincent Untz <vuntz@gnome.org>
4711 Date: Sun Jun 21 01:09:40 2009 +0200
4712
4713 [editor] Add --help and --version arguments
4714
4715 http://bugzilla.gnome.org/show_bug.cgi?id=552989
4716
4717 M simple-editor/GMenuSimpleEditor/main.py
4718
4719 commit db6d999b0ada473a3124a14dd83ed7ccb2375474
4720 Author: Seán de Búrca <leftmostcat@gmail.com>
4721 Date: Sun May 24 21:21:58 2009 +0100
4722
4723 Updated Irish translation
4724
4725 M po/ga.po
4726
4727 commit 0aa50a649aa76ea95f2cda225a87448e8a16b69c
4728 Author: Inash Zubair <inash@leptone.com>
4729 Date: Sat May 23 13:32:29 2009 +0200
4730
4731 Added Divehi translation
4732
4733 M po/LINGUAS
4734 A po/dv.po
4735
4736 commit 569e4835258906ca51b6b32e062cb3f860e5aeac
4737 Author: Michael Meeks <michael.meeks@novell.com>
4738 Date: Thu May 21 03:55:59 2009 +0200
4739
4740 [libmenu] Add a cache for listing the desktop files
4741
4742 When processing a layout, we get the list of desktop files from a set of
4743 directories. It turns out that we nearly always use the same set of
4744 directories, so adding a one-entry cache makes it possible to avoid
4745 computing things again and again.
4746
4747 I changed Michael's patch a bit, mainly to empty the cache when the last
4748 GMenuTree is unref'ed.
4749
4750 Closes: bgo#498749
4751
4752 M libmenu/entry-directories.c
4753 M libmenu/entry-directories.h
4754 M libmenu/gmenu-tree.c
4755
4756 commit 020085ed0a4086509ede57eb4fb480bbdbb5c79a
4757 Author: Vincent Untz <vuntz@gnome.org>
4758 Date: Sat May 2 02:24:07 2009 +0200
4759
4760 Update commit messages guidelines
4761
4762 M ChangeLog
4763
4764 commit 4900c5713c5caf69d4d476023fb5638fb9d60a17
4765 Author: Vincent Untz <vuntz@gnome.org>
4766 Date: Mon Apr 27 00:20:04 2009 +0200
4767
4768 Use git.mk from pango to autogenerate .gitignore files
4769
4770 M Makefile.am
4771 M desktop-directories/Makefile.am
4772 A git.mk
4773 M layout/Makefile.am
4774 M libmenu/Makefile.am
4775 M python/Makefile.am
4776 M simple-editor/GMenuSimpleEditor/Makefile.am
4777 M simple-editor/Makefile.am
4778 M util/Makefile.am
4779
4780 commit c11452a831ab1ecf15ccb516492740980bda7c18
4781 Author: Vincent Untz <vuntz@gnome.org>
4782 Date: Mon Apr 27 01:10:53 2009 +0200
4783
4784 Remove .cvsignore files
4785
4786 D .cvsignore
4787 D desktop-directories/.cvsignore
4788 D layout/.cvsignore
4789 D libmenu/.cvsignore
4790 D po/.cvsignore
4791 D python/.cvsignore
4792 D simple-editor/.cvsignore
4793 D simple-editor/GMenuSimpleEditor/.cvsignore
4794 D util/.cvsignore
4795
4796 commit 5fa8af519c166de0a0abd4d9cf0e396540270b4f
4797 Author: Vincent Untz <vuntz@gnome.org>
4798 Date: Mon Apr 27 00:13:56 2009 +0200
4799
4800 Use shave to improve build log readability
4801
4802 See http://git.lespiau.name/cgit/shave/tree/README for more details.
4803
4804 M configure.in
4805 A m4/shave.m4
4806 A shave-libtool.in
4807 A shave.in
4808 M simple-editor/GMenuSimpleEditor/Makefile.am
4809 M simple-editor/Makefile.am
4810
4811 commit 22e86da4dfd79d8f2084bce3537607fa2b9bd40e
4812 Author: Vincent Untz <vuntz@gnome.org>
4813 Date: Sun Apr 26 12:26:11 2009 +0200
4814
4815 Fix doap file to have mail address as URL (mailto:)
4816
4817 M gnome-menus.doap
4818
4819 commit 1e3078b3ef1f58c7f6e8878ff0836d312c3e57dc
4820 Author: Vincent Untz <vuntz@gnome.org>
4821 Date: Fri Apr 24 03:25:12 2009 +0200
4822
4823 Make autogen.sh more modern.
4824
4825 M autogen.sh
4826
4827 commit 2f4ef97ac8153a1460b2a1404c4f622712b3db81
4828 Author: Vincent Untz <vuntz@gnome.org>
4829 Date: Wed Apr 22 17:28:55 2009 +0200
4830
4831 Add doap file
4832
4833 A gnome-menus.doap
4834
4835 commit e5c0da200efb4a82d8478d45c62959b848085d77
4836 Author: Vincent Untz <vuntz@gnome.org>
4837 Date: Wed Apr 22 17:27:40 2009 +0200
4838
4839 ename ChangeLog files to ChangeLog.pre-git
4840
4841 M ChangeLog
4842 C100 ChangeLog ChangeLog.pre-git
4843 R100 po/ChangeLog po/ChangeLog.pre-git
4844
4845 commit 71593a96a06add451182f6b2bf848daaae3d37a0
4846 Author: Miquel Esplà <miquelespla@gmail.com>
4847 Date: Tue Apr 21 15:05:10 2009 +0200
4848
4849 Added Valencian-Catalan translation
4850
4851 M po/LINGUAS
4852 A po/ca@valencia.po
4853
4854 commit 44190fe0edccfe82eeed523af572bcda3cb55dab
4855 Author: Vincent Untz <vuntz@gnome.org>
4856 Date: Mon Apr 13 22:05:39 2009 +0000
4857
4858 post-release bump to 2.26.2
4859
4860 2009-04-14 Vincent Untz <vuntz@gnome.org>
4861
4862 * configure.in: post-release bump to 2.26.2
4863
4864 svn path=/trunk/; revision=1017
4865
4866 M ChangeLog
4867 M configure.in
4868 M po/ChangeLog
+0
-31
HACKING less more
0 Hacking on gnome-menus
1 ======================
2
3 + The development occurs in git:
4
5 http://git.gnome.org/browse/gnome-menus
6
7 For information on how to access GNOME git please read:
8
9 http://live.gnome.org/Git
10
11 + Please send patches as bug reports in GNOME Bugzilla:
12
13 https://bugzilla.gnome.org/ (product gnome-menus)
14
15 Your patch should be in unified diff form (the -u option to GNU
16 diff). See also:
17
18 http://live.gnome.org/GnomeLove/SubmittingPatches
19
20 + Please try and send a patch against a recent version of this package.
21 Patches against git master are most preferable.
22
23 + Don't commit any but the most trivial patches without approval.
24
25 + Exceptions to this are:
26
27 - Translators may commit basic i18n related patches to the build
28 setup.
29 - Build sheriff are welcome - in accordance with the relevant build
30 sheriff constraints.
+0
-16
MAINTAINERS less more
0 Currently active maintainers
1 ----------------------------
2
3 Jasper St. Pierre
4 E-mail: jstpierre@mecheye.net
5 Userid: jstpierre
6
7 Non-active maintainers, who have a good understanding of the code
8 -----------------------------------------------------------------
9
10 #Mark McLoughlin
11 #E-mail: mark@skynet.ie
12
13 #Vincent Untz
14 #E-mail: vuntz@gnome.org
15 #Userid: vuntz
+0
-31
Makefile.am less more
0 SUBDIRS = libmenu
1
2 ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
3
4 DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
5
6 EXTRA_DIST = \
7 HACKING \
8 MAINTAINERS
9
10 MAINTAINERCLEANFILES = \
11 $(srcdir)/INSTALL \
12 $(srcdir)/aclocal.m4 \
13 $(srcdir)/config.guess \
14 $(srcdir)/config.h.in \
15 $(srcdir)/config.sub \
16 $(srcdir)/depcomp \
17 $(srcdir)/install-sh \
18 $(srcdir)/ltmain.sh \
19 $(srcdir)/missing \
20 $(srcdir)/mkinstalldirs \
21 $(srcdir)/py-compile \
22 `find "$(srcdir)" -type f -name Makefile.in -print` \
23 $(srcdir)/configure \
24 $(srcdir)/m4/intltool.m4 \
25 $(srcdir)/m4/libtool.m4 \
26 $(srcdir)/m4/ltoptions.m4 \
27 $(srcdir)/m4/ltsugar.m4 \
28 $(srcdir)/m4/ltversion.m4 \
29 $(srcdir)/m4/lt~obsolete.m4
30
0 gnome-menus
0 cinnamon-menus
11 ===========
22
3 gnome-menus contains the libgnome-menu library, the layout configuration
4 files for the GNOME menu, as well as a simple menu editor.
3 cinnamon-menus contains the libcinnamon-menu library, the layout configuration
4 files for the Cinnamon menu, as well as a simple menu editor.
55
6 The libgnome-menu library implements the "Desktop Menu Specification"
6 The libcinnamon-menu library implements the "Desktop Menu Specification"
77 from freedesktop.org:
88
99 http://freedesktop.org/wiki/Specifications/menu-spec
1111
1212 You may download updates to the package from:
1313
14 http://download.gnome.org/sources/gnome-menus/
15
16 To discuss gnome-menus, you may use the desktop-devel-list mailing list:
17
18 http://mail.gnome.org/mailman/listinfo/desktop-devel-list
14 https://github.com/linuxmint/cinnamon-menus/releases
1915
2016
2117 Installation
2218 ============
2319
24 See the file 'INSTALL'. If you are not using a released version of
25 gnome-menus (for example, if you checked out the code from git), you
26 first need to run './autogen.sh'.
20 1) Run meson with options you like. The following configuration installs
21 all binaries, libs, and shared files into /usr/local, and enables all
22 available options:
23
24 meson debian/build \
25 --prefix=/usr/local \
26 --buildtype=plain \
27 -D deprecated_warnings=false
28
29 2) Compile and install (sudo is needed for install)
30
31 ninja -C debian/build
32 ninja -C debian/build install
33
34 3) You can uninstall the installed files with
35
36 ninja -C debian/build uninstall
2737
2838
2939 How to report bugs
3040 ==================
3141
32 Bugs should be reported to the GNOME bug tracking system:
42 Bugs should be reported to the Cinnamon bug tracking system:
3343
34 https://bugzilla.gnome.org/ (product gnome-menus)
44 https://github.com/linuxmint/cinnamon-menus/issues
3545
3646 You will need to create an account for yourself.
3747
38 Please read the following page on how to prepare a useful bug report:
39
40 https://bugzilla.gnome.org/page.cgi?id=bug-writing.html
41
42 Please read the HACKING file for information on where to send changes or
43 bugfixes for this package.
+0
-40
autogen.sh less more
0 #!/bin/sh
1 # Run this to generate all the initial makefiles, etc.
2 test -n "$srcdir" || srcdir=$(dirname "$0")
3 test -n "$srcdir" || srcdir=.
4
5 olddir=$(pwd)
6
7 cd $srcdir
8
9 (test -f configure.ac) || {
10 echo "*** ERROR: Directory '$srcdir' does not look like the top-level project directory ***"
11 exit 1
12 }
13
14 # shellcheck disable=SC2016
15 PKG_NAME=$(autoconf --trace 'AC_INIT:$1' configure.ac)
16
17 if [ "$#" = 0 -a "x$NOCONFIGURE" = "x" ]; then
18 echo "*** WARNING: I am going to run 'configure' with no arguments." >&2
19 echo "*** If you wish to pass any to it, please specify them on the" >&2
20 echo "*** '$0' command line." >&2
21 echo "" >&2
22 fi
23
24 mkdir -p m4
25
26 glib-gettextize --force --copy || exit 1
27 intltoolize --force --copy --automake || exit 1
28 autoreconf --verbose --force --install || exit 1
29
30 cd "$olddir"
31 if [ "$NOCONFIGURE" = "" ]; then
32 $srcdir/configure "$@" || exit 1
33
34 if [ "$1" = "--help" ]; then exit 0 else
35 echo "Now type 'make' to compile $PKG_NAME" || exit 1
36 fi
37 else
38 echo "Skipping configure process."
39 fi
+0
-99
configure.ac less more
0 AC_PREREQ(2.62)
1
2 AC_INIT([cinnamon-menus], [4.0.0])
3 AC_CONFIG_SRCDIR(libmenu/gmenu-tree.h)
4
5 m4_ifdef([AX_IS_RELEASE], [AX_IS_RELEASE([always])])
6
7 AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz])
8 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
9 AC_CONFIG_MACRO_DIR([m4])
10 AC_SUBST([ACLOCAL_AMFLAGS], ["-I $ac_macro_dir \${ACLOCAL_FLAGS}"])
11 AC_CONFIG_HEADERS(config.h)
12
13 AM_MAINTAINER_MODE
14
15 # Before making a release, the LT_VERSION string should be modified.
16 # The string is of the form C:R:A.
17 # - If interfaces have been changed or added, but binary compatibility has
18 # been preserved, change to C+1:0:A+1
19 # - If binary compatibility has been broken (eg removed or changed interfaces)
20 # change to C+1:0:0
21 # - If the interface is the same as the previous version, change to C:R+1:A
22
23 LIB_MENU_LT_VERSION=0:1:0
24 AC_SUBST(LIB_MENU_LT_VERSION)
25
26 AC_PROG_CC
27 AC_STDC_HEADERS
28 AC_ARG_PROGRAM
29 AC_LIBTOOL_WIN32_DLL
30 AM_PROG_LIBTOOL
31
32 PKG_CHECK_MODULES(GIO_UNIX, gio-unix-2.0 >= 2.29.15)
33 AC_SUBST(GIO_UNIX_CFLAGS)
34 AC_SUBST(GIO_UNIX_LIBS)
35
36 m4_ifdef([AX_COMPILER_FLAGS],
37 [AX_COMPILER_FLAGS([WARN_CFLAGS],[WARN_LDFLAGS])])
38
39 AC_ARG_ENABLE(deprecation_flags,
40 [AC_HELP_STRING([--enable-deprecation-flags],
41 [use *_DISABLE_DEPRECATED flags @<:@default=no@:>@])],,
42 [enable_deprecation_flags=no])
43
44 if test "x$enable_deprecation_flags" = "xyes"; then
45 DISABLE_DEPRECATED_CFLAGS=$DISABLE_DEPRECATED
46 AC_SUBST(DISABLE_DEPRECATED_CFLAGS)
47 fi
48
49 AC_ARG_ENABLE(debug,
50 [AS_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@],
51 [turn on debugging @<:@default=debug_default@:>@])],,
52 [enable_debug=debug_default])
53 if test "x$enable_debug" = "xyes"; then
54 DEBUG_CFLAGS="-DG_ENABLE_DEBUG"
55 else
56 if test "x$enable_debug" = "xno"; then
57 DEBUG_CFLAGS="-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS -DG_DISABLE_CAST_CHECKS"
58 else
59 DEBUG_CFLAGS="-DG_ENABLE_DEBUG -DG_DISABLE_CAST_CHECKS"
60 fi
61 fi
62 AC_SUBST(DEBUG_CFLAGS)
63
64 GOBJECT_INTROSPECTION_CHECK([0.9.5])
65
66 AC_OUTPUT([
67 Makefile
68 libmenu/Makefile
69 libmenu/libcinnamon-menu-3.0.pc
70 libmenu/libcinnamon-menu-3.0-uninstalled.pc
71 ])
72
73 dnl ---------------------------------------------------------------------------
74 dnl - Show summary
75 dnl ---------------------------------------------------------------------------
76
77 echo "
78 cinnamon-menus $VERSION
79 `echo cinnamon-menus $VERSION | sed "s/./=/g"`
80
81 prefix: ${prefix}
82 exec_prefix: ${exec_prefix}
83 libdir: ${libdir}
84 bindir: ${bindir}
85 sbindir: ${sbindir}
86 sysconfdir: ${sysconfdir}
87 localstatedir: ${localstatedir}
88 datadir: ${datadir}
89 source code location: ${srcdir}
90 compiler: ${CC}
91 cflags: ${CFLAGS}
92 Maintainer mode: ${USE_MAINTAINER_MODE}
93 Use *_DISABLE_DEPRECATED: ${enable_deprecation_flags}
94
95 Turn on debugging: ${enable_debug}
96 Build introspection support: ${found_introspection}
97
98 "
0 cinnamon-menus (4.2.0) tina; urgency=medium
1
2 [ Pino Toscano ]
3 * Switch to modern realpath() (#20)
4
5 [ Stephen Collins ]
6 * Port to meson (#21)
7
8 [ Leigh Scott ]
9 * Update for meson changes and also adapt for cinnamon (#23)
10
11 [ Stephen Collins ]
12 * Build: fix the build options (#22)
13 * Add devhelp docs to cinnamon menus for easier reference (#24)
14
15 [ Clement Lefebvre ]
16 * Build: Set enable_debug to false
17
18 [ Leigh Scott ]
19 * Add option to disable docs (#25)
20
21 [ Eli Schwartz ]
22 * Cleanup (#26)
23 * Meson simplification (#27)
24
25 -- Clement Lefebvre <root@linuxmint.com> Sun, 23 Jun 2019 15:33:32 +0200
26
027 cinnamon-menus (4.0.0) tessa; urgency=medium
128
229 * CI: Remove Mint 18
22 Priority: optional
33 Maintainer: Clement Lefebvre <root@linuxmint.com>
44 Build-Depends: debhelper (>= 9),
5 dh-autoreconf,
6 autoconf-archive,
5 meson,
76 dh-python,
87 gnome-common,
98 gnome-pkg-tools,
109 gobject-introspection (>= 0.9.12-4~),
10 gtk-doc-tools (>= 1.4),
1111 intltool (>= 0.40.0),
1212 libgirepository1.0-dev (>= 0.10.7-1~),
1313 libglib2.0-dev (>= 2.30.0),
3939 2007, Sebastian Dröge
4040 2008, Vincent Untz
4141 License: LGPL-2+
42
43 Files: libmenu/canonicalize.*
44 Copyright: 1996-2002, Free Software Foundation, Inc
45 2002, Red Hat, Inc. (trivial port to GLib)
46 License: LGPL-2.1+
47 The GNU C Library is free software; you can redistribute it and/or modify it
48 under the terms of the GNU Lesser General Public License as published by the
49 Free Software Foundation; either version 2.1 of the License, or (at your
50 option) any later version.
51 .
52 The GNU C Library is distributed in the hope that it will be useful, but
53 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
54 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
55 for more details.
56 .
57 You should have received a copy of the GNU Lesser General Public License
58 along with the GNU C Library; if not, write to the Free Software Foundation,
59 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
60 .
61 On Debian systems, the complete text of the GNU Lesser General Public License
62 version 2.1 can be found in `/usr/share/common-licenses/LGPL-2.1'.
6342
6443 Files: ltmain.sh
6544 Copyright: 1996-2011, Free Software Foundation, Inc.
11 usr/lib/*/*.so
22 usr/lib/*/pkgconfig
33 usr/share/gir-1.0
4 usr/share/gtk-doc
44 TYPELIBDIR=$(shell pkg-config gobject-introspection-1.0 --variable libdir | sed -e 's/.//')
55
66 %:
7 dh $@ --parallel --with=autoreconf,python3
7 dh $@ --parallel --with=python3
88
99 override_dh_strip:
1010 dh_strip --dbg-package=libcinnamon-menu-3-0-dbg
1313 sed 's@TYPELIBDIR@${TYPELIBDIR}@' debian/gir1.2-cmenu-3.0.install.in > debian/gir1.2-cmenu-3.0.install
1414 dh_install --list-missing
1515
16 override_dh_auto_configure:
17 meson debian/build \
18 --prefix=/usr \
19 --buildtype=plain \
20 -D deprecated_warnings=false \
21 -D enable_debug=false \
22 -D enable_docs=true
23
1624 override_dh_auto_clean:
1725 -dh_auto_clean
26
27 override_dh_auto_install:
28 DESTDIR=${CURDIR}/debian/tmp \
29 ninja -C debian/build install
30
31 override_dh_auto_build:
32 ninja -C debian/build
0 <?xml version="1.0"?>
1 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
2 "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
3 <!ENTITY version SYSTEM "version.xml">
4 ]>
5
6 <book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
7 <bookinfo>
8 <title>Cinnamon Menus Reference Manual</title>
9 <releaseinfo>For Cinnamon Menus &version;</releaseinfo>
10
11 </bookinfo>
12
13 <part>
14 <title>API Reference</title>
15 <chapter>
16 <title>Classes</title>
17 <xi:include href="xml/gmenu-tree.xml"/>
18 </chapter>
19 </part>
20
21 <index id="api-index-full">
22 <title>API Index</title>
23 <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
24 </index>
25 <xi:include href="xml/api-index-deprecated.xml"/>
26 <xi:include href="xml/annotation-glossary.xml"/>
27
28 <index>
29 <title id="index-all">Index</title>
30 </index>
31 </book>
0 version_conf = configuration_data()
1 version_conf.set('VERSION', version)
2
3 configure_file(
4 input: 'version.xml.in',
5 output: 'version.xml',
6 configuration: version_conf,
7 )
8
9 gnome.gtkdoc(
10 'cmenu',
11 src_dir: join_paths(meson.source_root(), 'libmenu'),
12 main_xml: 'cmenu-docs.xml',
13 scan_args: ['--rebuild-types'],
14 ignore_headers: libmenu_private_headers,
15 dependencies: cmenu_dep,
16 install: true,
17 )
+0
-79
libmenu/Makefile.am less more
0 lib_LTLIBRARIES = libcinnamon-menu-3.la
1
2 AM_CPPFLAGS = \
3 $(GIO_UNIX_CFLAGS) \
4 $(WARN_CFLAGS) \
5 -DGMENU_I_KNOW_THIS_IS_UNSTABLE \
6 $(DISABLE_DEPRECATED_CFLAGS) \
7 $(DEBUG_CFLAGS)
8
9 AM_CFLAGS = $(WARN_CFLAGS)
10
11 libcinnamon_menu_3_includedir = $(includedir)/cinnamon-menus-3.0
12 libcinnamon_menu_3_include_HEADERS = \
13 gmenu-tree.h
14
15 libcinnamon_menu_3_sources = \
16 canonicalize.c \
17 desktop-entries.c \
18 entry-directories.c \
19 gmenu-tree.c \
20 menu-layout.c \
21 menu-monitor.c \
22 menu-util.c
23
24 libcinnamon_menu_3_la_SOURCES = \
25 $(libcinnamon_menu_3_sources) \
26 canonicalize.h \
27 desktop-entries.h \
28 entry-directories.h \
29 gmenu-tree.h \
30 menu-layout.h \
31 menu-monitor.h \
32 menu-util.h
33
34 libcinnamon_menu_3_la_LIBADD = \
35 $(GIO_UNIX_LIBS)
36
37 libcinnamon_menu_3_la_LDFLAGS = \
38 $(WARN_LDFLAGS) \
39 -version-info $(LIB_MENU_LT_VERSION) \
40 -no-undefined \
41 -export-symbols-regex gmenu_tree
42
43 pkgconfigdir = $(libdir)/pkgconfig
44 pkgconfig_DATA = libcinnamon-menu-3.0.pc
45
46 EXTRA_DIST = \
47 libcinnamon-menu-3.0.pc.in \
48 libcinnamon-menu-3.0-uninstalled.pc.in
49
50 CLEANFILES =
51
52 # Introspection
53 -include $(INTROSPECTION_MAKEFILE)
54 INTROSPECTION_GIRS =
55 INTROSPECTION_SCANNER_ARGS = --warn-all --add-include-path=$(srcdir)
56 INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
57
58 if HAVE_INTROSPECTION
59 introspection_sources = $(libcinnamon_menu_3_include_HEADERS) gmenu-tree.c
60
61 CMenu-3.0.gir: libcinnamon-menu-3.la
62 CMenu_3_0_gir_INCLUDES = Gio-2.0
63 CMenu_3_0_gir_CFLAGS = $(AM_CPPFLAGS)
64 CMenu_3_0_gir_LIBS = libcinnamon-menu-3.la
65 CMenu_3_0_gir_SCANNERFLAGS = $(WARN_SCANNERFLAGS) --identifier-prefix=GMenu --symbol-prefix=gmenu --pkg-export=libcinnamon-menu-3.0 --c-include=gmenu-tree.h
66 CMenu_3_0_gir_FILES = $(addprefix $(srcdir)/,$(introspection_sources))
67 INTROSPECTION_GIRS += CMenu-3.0.gir
68
69 girdir = $(INTROSPECTION_GIRDIR)
70 gir_DATA = $(INTROSPECTION_GIRS)
71
72 typelibdir = $(INTROSPECTION_TYPELIBDIR)
73 typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
74
75 CLEANFILES += $(gir_DATA) $(typelib_DATA)
76 endif
77
78 -include $(top_srcdir)/git.mk
+0
-256
libmenu/canonicalize.c less more
0 /* Return the canonical absolute name of a given file.
1 Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 Copyright (C) 2002 Red Hat, Inc. (trivial port to GLib)
5
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
10
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public
17 License along with the GNU C Library; if not, write to the Free
18 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19 02111-1307 USA. */
20
21 #include <config.h>
22
23 #include "canonicalize.h"
24
25 #include <stdlib.h>
26 #include <string.h>
27 #include <unistd.h>
28 #include <limits.h>
29 #include <sys/param.h>
30 #include <sys/stat.h>
31 #include <errno.h>
32 #include <stddef.h>
33
34 /* Return the canonical absolute name of file NAME. A canonical name
35 does not contain any `.', `..' components nor any repeated path
36 separators ('/') or symlinks. All path components must exist. If
37 RESOLVED is null, the result is malloc'd; otherwise, if the
38 canonical name is PATH_MAX chars or more, returns null with `errno'
39 set to ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
40 returns the name in RESOLVED. If the name cannot be resolved and
41 RESOLVED is non-NULL, it contains the path of the first component
42 that cannot be resolved. If the path can be resolved, RESOLVED
43 holds the same value as the value returned. */
44
45 static char*
46 menu_realpath (const char *name, char *resolved)
47 {
48 char *rpath, *dest, *extra_buf = NULL;
49 const char *start, *end, *rpath_limit;
50 long int path_max;
51 int num_links = 0;
52
53 if (name == NULL)
54 {
55 /* As per Single Unix Specification V2 we must return an error if
56 either parameter is a null pointer. We extend this to allow
57 the RESOLVED parameter to be NULL in case the we are expected to
58 allocate the room for the return value. */
59 errno = EINVAL;
60 return NULL;
61 }
62
63 if (name[0] == '\0')
64 {
65 /* As per Single Unix Specification V2 we must return an error if
66 the name argument points to an empty string. */
67 errno = ENOENT;
68 return NULL;
69 }
70
71 #ifdef PATH_MAX
72 path_max = PATH_MAX;
73 #else
74 path_max = pathconf (name, _PC_PATH_MAX);
75 if (path_max <= 0)
76 path_max = 1024;
77 #endif
78
79 rpath = resolved ? g_alloca (path_max) : g_malloc (path_max);
80 rpath_limit = rpath + path_max;
81
82 if (name[0] != G_DIR_SEPARATOR)
83 {
84 if (!getcwd (rpath, path_max))
85 {
86 rpath[0] = '\0';
87 goto error;
88 }
89 dest = strchr (rpath, '\0');
90 }
91 else
92 {
93 rpath[0] = G_DIR_SEPARATOR;
94 dest = rpath + 1;
95 }
96
97 for (start = end = name; *start; start = end)
98 {
99 struct stat st;
100 int n;
101
102 /* Skip sequence of multiple path-separators. */
103 while (*start == G_DIR_SEPARATOR)
104 ++start;
105
106 /* Find end of path component. */
107 for (end = start; *end && *end != G_DIR_SEPARATOR; ++end)
108 /* Nothing. */;
109
110 if (end - start == 0)
111 break;
112 else if (end - start == 1 && start[0] == '.')
113 /* nothing */;
114 else if (end - start == 2 && start[0] == '.' && start[1] == '.')
115 {
116 /* Back up to previous component, ignore if at root already. */
117 if (dest > rpath + 1)
118 while ((--dest)[-1] != G_DIR_SEPARATOR);
119 }
120 else
121 {
122 size_t new_size;
123
124 if (dest[-1] != G_DIR_SEPARATOR)
125 *dest++ = G_DIR_SEPARATOR;
126
127 if (dest + (end - start) >= rpath_limit)
128 {
129 ptrdiff_t dest_offset = dest - rpath;
130 char *new_rpath;
131
132 if (resolved)
133 {
134 #ifdef ENAMETOOLONG
135 errno = ENAMETOOLONG;
136 #else
137 /* Uh... just pick something */
138 errno = EINVAL;
139 #endif
140 if (dest > rpath + 1)
141 dest--;
142 *dest = '\0';
143 goto error;
144 }
145 new_size = rpath_limit - rpath;
146 if (end - start + 1 > path_max)
147 new_size += end - start + 1;
148 else
149 new_size += path_max;
150 new_rpath = (char *) realloc (rpath, new_size);
151 if (new_rpath == NULL)
152 goto error;
153 rpath = new_rpath;
154 rpath_limit = rpath + new_size;
155
156 dest = rpath + dest_offset;
157 }
158
159 memcpy (dest, start, end - start);
160 dest = dest + (end - start);
161 *dest = '\0';
162
163 if (stat (rpath, &st) < 0)
164 goto error;
165
166 if (S_ISLNK (st.st_mode))
167 {
168 char *buf = alloca (path_max);
169 size_t len;
170
171 if (++num_links > MAXSYMLINKS)
172 {
173 errno = ELOOP;
174 goto error;
175 }
176
177 n = readlink (rpath, buf, path_max);
178 if (n < 0)
179 goto error;
180 buf[n] = '\0';
181
182 if (!extra_buf)
183 extra_buf = g_alloca (path_max);
184
185 len = strlen (end);
186 if ((long int) (n + len) >= path_max)
187 {
188 #ifdef ENAMETOOLONG
189 errno = ENAMETOOLONG;
190 #else
191 /* Uh... just pick something */
192 errno = EINVAL;
193 #endif
194 goto error;
195 }
196
197 /* Careful here, end may be a pointer into extra_buf... */
198 g_memmove (&extra_buf[n], end, len + 1);
199 name = end = memcpy (extra_buf, buf, n);
200
201 if (buf[0] == G_DIR_SEPARATOR)
202 dest = rpath + 1; /* It's an absolute symlink */
203 else
204 /* Back up to previous component, ignore if at root already: */
205 if (dest > rpath + 1)
206 while ((--dest)[-1] != G_DIR_SEPARATOR);
207 }
208 }
209 }
210 if (dest > rpath + 1 && dest[-1] == G_DIR_SEPARATOR)
211 --dest;
212 *dest = '\0';
213
214 return resolved ? memcpy (resolved, rpath, dest - rpath + 1) : rpath;
215
216 error:
217 if (resolved)
218 strcpy (resolved, rpath);
219 else
220 g_free (rpath);
221 return NULL;
222 }
223
224 char *
225 menu_canonicalize_file_name (const char *name,
226 gboolean allow_missing_basename)
227 {
228 char *retval;
229
230 retval = menu_realpath (name, NULL);
231
232 /* We could avoid some system calls by using the second
233 * argument to realpath() instead of doing realpath
234 * all over again, but who cares really. we'll see if
235 * it's ever in a profile.
236 */
237 if (allow_missing_basename && retval == NULL)
238 {
239 char *dirname;
240 char *canonical_dirname;
241 dirname = g_path_get_dirname (name);
242 canonical_dirname = menu_realpath (dirname, NULL);
243 g_free (dirname);
244 if (canonical_dirname)
245 {
246 char *basename;
247 basename = g_path_get_basename (name);
248 retval = g_build_filename (canonical_dirname, basename, NULL);
249 g_free (basename);
250 g_free (canonical_dirname);
251 }
252 }
253
254 return retval;
255 }
+0
-34
libmenu/canonicalize.h less more
0 /* Return the canonical absolute name of a given file.
1 Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 Copyright (C) 2002 Red Hat, Inc. (trivial port to GLib)
5
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
10
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public
17 License along with the GNU C Library; if not, write to the Free
18 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19 02111-1307 USA. */
20
21 #ifndef G_CANONICALIZE_H
22 #define G_CANONICALIZE_H
23
24 #include <glib.h>
25
26 G_BEGIN_DECLS
27
28 char* menu_canonicalize_file_name (const char *name,
29 gboolean allow_missing_basename);
30
31 G_END_DECLS
32
33 #endif /* G_CANONICALIZE_H */
1616 * Boston, MA 02111-1307, USA.
1717 */
1818
19 #include <config.h>
20
2119 #include "desktop-entries.h"
2220 #include <gio/gdesktopappinfo.h>
2321
1616 * Boston, MA 02111-1307, USA.
1717 */
1818
19 #include <config.h>
20
2119 #include "entry-directories.h"
2220
2321 #include <string.h>
2422 #include <errno.h>
2523 #include <sys/types.h>
2624 #include <dirent.h>
25 #include <stdlib.h>
2726
2827 #include "menu-util.h"
2928 #include "menu-monitor.h"
30 #include "canonicalize.h"
3129
3230 typedef struct CachedDir CachedDir;
3331 typedef struct CachedDirMonitor CachedDirMonitor;
576574 *
577575 * Additionally, the failure is not upon trying to read the file,
578576 * but attempting to get its GAppInfo (g_desktop_app_info_new_from_filename()
579 * in desktop-entries.c ln 277). If you jigger desktop_entry_load() around
577 * in desktop-entries.c ln 277). If you jigger desktop_entry_load() around
580578 * and read the file as a keyfile *first*, it succeeds. If you then try
581579 * to run g_desktop_app_info_new_from_keyfile(), *then* it fails.
582580 *
837835
838836 menu_verbose ("Loading entry directory \"%s\"\n", path);
839837
840 canonical = menu_canonicalize_file_name (path, FALSE);
838 canonical = realpath (path, NULL);
841839 if (canonical == NULL)
842840 {
843841 menu_verbose ("Failed to canonicalize \"%s\": %s\n",
927925 const char *relative_path)
928926 {
929927 char *retval;
930
928
931929 retval = NULL;
932930
933931 if (entry_type == DESKTOP_ENTRY_DESKTOP)
2222
2323 #include <string.h>
2424 #include <errno.h>
25 #include <stdlib.h>
2526
2627 #include "menu-layout.h"
2728 #include "menu-monitor.h"
2829 #include "menu-util.h"
29 #include "canonicalize.h"
3030
3131 /* private */
3232 typedef struct GMenuTreeItem GMenuTreeItem;
331331 canonicalize_path (GMenuTree *tree,
332332 const char *path)
333333 {
334 tree->canonical_path = menu_canonicalize_file_name (path, FALSE);
334 tree->canonical_path = realpath (path, NULL);
335335 if (tree->canonical_path)
336336 {
337337 tree->canonical = TRUE;
19021902
19031903 if (!is_canonical)
19041904 {
1905 canonical = freeme = menu_canonicalize_file_name (filename, FALSE);
1905 canonical = freeme = realpath (filename, NULL);
19061906 if (canonical == NULL)
19071907 {
19081908 if (add_monitor)
19971997
19981998 retval = FALSE;
19991999
2000 canonical_menus_dir = menu_canonicalize_file_name (dirname, FALSE);
2000 canonical_menus_dir = realpath (dirname, NULL);
20012001 if (canonical_menus_dir != NULL &&
20022002 strcmp (canonical_basedir, canonical_menus_dir) == 0)
20032003 {
20742074 basedir = menu_layout_node_root_get_basedir (root);
20752075 menu_name = menu_layout_node_root_get_name (root);
20762076
2077 canonical_basedir = menu_canonicalize_file_name (basedir, FALSE);
2077 canonical_basedir = realpath (basedir, NULL);
20782078 if (canonical_basedir == NULL)
20792079 {
20802080 menu_verbose ("Menu basedir '%s' no longer exists, not merging parent\n",
+0
-11
libmenu/libcinnamon-menu-3.0-uninstalled.pc.in less more
0 prefix=@prefix@
1 exec_prefix=@exec_prefix@
2 libdir=@libdir@
3 includedir=@includedir@
4
5 Name: libcinnamon-menu
6 Description: Desktop Menu Specification Implementation
7 Requires: gio-unix-2.0
8 Version: @VERSION@
9 Libs: ${pc_top_builddir}/${pcfiledir}/libcinnamon-menu-3.la
10 Cflags: -I${pc_top_builddir}/${pcfiledir}
+0
-11
libmenu/libcinnamon-menu-3.0.pc.in less more
0 prefix=@prefix@
1 exec_prefix=@exec_prefix@
2 libdir=@libdir@
3 includedir=@includedir@
4
5 Name: libcinnamon-menu
6 Description: Desktop Menu Specification Implementation
7 Requires: gio-unix-2.0
8 Version: @VERSION@
9 Libs: -L${libdir} -lcinnamon-menu-3
10 Cflags: -I${includedir}/cinnamon-menus-3.0
1818 * Boston, MA 02111-1307, USA.
1919 */
2020
21 #include <config.h>
22
2321 #include "menu-layout.h"
2422
2523 #include <string.h>
2826 #include <unistd.h>
2927 #include <errno.h>
3028
31 #include "canonicalize.h"
3229 #include "entry-directories.h"
3330 #include "menu-util.h"
3431
960957 values->inline_menus = strcmp (inline_menus, "true") == 0;
961958 values->mask |= MENU_LAYOUT_VALUES_INLINE_MENUS;
962959 }
963
960
964961 if (inline_limit != NULL)
965962 {
966963 char *end;
1919 * Boston, MA 02111-1307, USA.
2020 */
2121
22 #include <config.h>
23
2422 #include "menu-monitor.h"
2523
2624 #include <gio/gio.h>
112110
113111 tmp = tmp->next;
114112 }
115
113
116114 tmp = events_to_emit;
117115 while (tmp != NULL)
118116 {
1818 * Boston, MA 02111-1307, USA.
1919 */
2020
21 #include <config.h>
22
2321 #include "menu-util.h"
2422
2523 #include <stdio.h>
238236 case MENU_LAYOUT_MERGE_MENUS:
239237 merge_type_str = "menus";
240238 break;
241
239
242240 case MENU_LAYOUT_MERGE_FILES:
243241 merge_type_str = "files";
244242 break;
245
243
246244 case MENU_LAYOUT_MERGE_ALL:
247245 merge_type_str = "all";
248246 break;
251249 g_assert_not_reached ();
252250 break;
253251 }
254
252
255253 append_simple_with_attr (node, depth, node_name, "type", merge_type_str, str);
256254 }
257255
0 public_headers = [
1 'gmenu-tree.h',
2 ]
3
4 public_sources = [
5 'gmenu-tree.c',
6 public_headers,
7 ]
8
9 libmenu_private_headers = [
10 'desktop-entries.h',
11 'entry-directories.h',
12 'menu-layout.h',
13 'menu-monitor.h',
14 'menu-util.h',
15 ]
16
17 libmenu_sources = [
18 'desktop-entries.c',
19 'entry-directories.c',
20 'menu-layout.c',
21 'menu-monitor.c',
22 'menu-util.c',
23 public_sources,
24 libmenu_private_headers,
25 ]
26
27 libmenu_deps = [
28 gio,
29 config_h,
30 ]
31
32 libcinnamon_menus = library(
33 'cinnamon-menu-3',
34 libmenu_sources,
35 soversion: binary_major_version,
36 version: binary_version,
37 include_directories: include_root,
38 dependencies: libmenu_deps,
39 install: true,
40 build_by_default: false,
41 )
42
43 cmenu_dep = declare_dependency(
44 include_directories: include_directories('.'),
45 link_with: libcinnamon_menus,
46 dependencies: libmenu_deps,
47 link_args: ['-Wl,-Bsymbolic', '-Wl,-z,relro', '-Wl,-z,now'],
48 )
49
50 install_headers(
51 public_headers,
52 subdir: 'cinnamon-menus-3.0'
53 )
54
55 pkgconfig = import('pkgconfig')
56
57 # meson 0.46.0 can drop the version keyword and move libraries to a
58 # positional argument
59 pkgconfig.generate(
60 name: 'libcinnamon-menu-3.0',
61 description: 'Desktop Menu Specification Implementation',
62 version: version,
63 libraries: libcinnamon_menus,
64 subdirs: 'cinnamon-menus-3.0'
65 )
66
67 gnome.generate_gir(
68 libcinnamon_menus,
69 namespace: 'CMenu',
70 nsversion: '3.0',
71 sources: public_sources,
72 identifier_prefix: 'GMenu',
73 symbol_prefix: 'gmenu',
74 includes: 'Gio-2.0',
75 header: 'gmenu-tree.h',
76 install: true,
77 install_dir_gir: join_paths(datadir, 'gir-1.0'),
78 export_packages: 'libcinnamon-menu-3.0',
79 )
0 project('cinnamon-menus', 'c', version : '4.2.0', meson_version: '>=0.40.0')
1
2 gnome = import('gnome')
3
4 version = meson.project_version()
5
6 binary_version = '0.0.1'
7 binary_major_version = binary_version.split('.')[0]
8
9 cmenu_conf = configuration_data()
10 cmenu_conf.set_quoted('PACKAGE', meson.project_name())
11
12 # directories
13 prefix = get_option('prefix')
14 datadir = get_option('datadir')
15 libdir = get_option('libdir')
16 includedir = get_option('includedir')
17
18 # generate config.h
19 config_h_file = configure_file(
20 output : 'config.h',
21 configuration : cmenu_conf
22 )
23
24 config_h = declare_dependency(
25 sources: config_h_file
26 )
27
28 include_root = include_directories('.')
29
30 c_args = [
31 '-DGMENU_I_KNOW_THIS_IS_UNSTABLE',
32 ]
33
34 if get_option('enable_debug')
35 c_args += '-DG_ENABLE_DEBUG'
36 else
37 c_args += '-DG_DISABLE_ASSERT'
38 c_args += '-DG_DISABLE_CHECKS'
39 c_args += '-DG_DISABLE_CAST_CHECKS'
40 endif
41
42 if not get_option('deprecated_warnings')
43 c_args += '-Wno-deprecated-declarations'
44 c_args += '-Wno-deprecated'
45 c_args += '-Wno-declaration-after-statement'
46 endif
47
48 add_global_arguments(c_args, language: 'c')
49
50 gio = dependency('gio-unix-2.0', version: '>= 2.29.15')
51
52 subdir('libmenu')
53 if get_option('enable_docs')
54 subdir('docs/reference')
55 endif
0 option('deprecated_warnings',
1 type: 'boolean',
2 value: true,
3 description: 'Show build warnings for deprecations'
4 )
5 option('enable_debug',
6 type: 'boolean',
7 value: true,
8 description: 'Enable debugging'
9 )
10 option('enable_docs',
11 type: 'boolean',
12 value: false,
13 description: 'Build the API references (requires gtk-doc)'
14 )
+0
-65
omf.make less more
0 #
1 # No modifications of this Makefile should be necessary.
2 #
3 # This file contains the build instructions for installing OMF files. It is
4 # generally called from the makefiles for particular formats of documentation.
5 #
6 # Note that you must configure your package with --localstatedir=/var
7 # so that the scrollkeeper-update command below will update the database
8 # in the standard scrollkeeper directory.
9 #
10 # If it is impossible to configure with --localstatedir=/var, then
11 # modify the definition of scrollkeeper_localstate_dir so that
12 # it points to the correct location. Note that you must still use
13 # $(localstatedir) in this or when people build RPMs it will update
14 # the real database on their system instead of the one under RPM_BUILD_ROOT.
15 #
16 # Note: This make file is not incorporated into xmldocs.make because, in
17 # general, there will be other documents install besides XML documents
18 # and the makefiles for these formats should also include this file.
19 #
20 # About this file:
21 # This file was derived from scrollkeeper_example2, a package
22 # illustrating how to install documentation and OMF files for use with
23 # ScrollKeeper 0.3.x and 0.4.x. For more information, see:
24 # http://scrollkeeper.sourceforge.net/
25 # Version: 0.1.3 (last updated: March 20, 2002)
26 #
27
28 omf_dest_dir=$(datadir)/omf/@PACKAGE@
29 scrollkeeper_localstate_dir = $(localstatedir)/scrollkeeper
30
31 # At some point, it may be wise to change to something like this:
32 # scrollkeeper_localstate_dir = @SCROLLKEEPER_STATEDIR@
33
34 omf: omf_timestamp
35
36 omf_timestamp: $(omffile)
37 -for file in $(omffile); do \
38 absfile=$(srcdir)/$$file; \
39 test -r $$file && absfile=$$file; \
40 scrollkeeper-preinstall $(docdir)/$(docname).xml $$absfile $$file.out; \
41 done; \
42 touch omf_timestamp
43
44 install-data-hook-omf:
45 $(mkinstalldirs) $(DESTDIR)$(omf_dest_dir)
46 for file in $(omffile); do \
47 absfile=$(srcdir)/$$file.out; \
48 test -r $$file.out && absfile=$$file.out; \
49 $(INSTALL_DATA) $$absfile $(DESTDIR)$(omf_dest_dir)/$$file; \
50 done
51 -scrollkeeper-update -p $(DESTDIR)$(scrollkeeper_localstate_dir) -o $(DESTDIR)$(omf_dest_dir)
52
53 uninstall-local-omf:
54 -for file in $(omffile); do \
55 basefile=`basename $$file`; \
56 rm -f $(DESTDIR)$(omf_dest_dir)/$$basefile; \
57 done
58 -rmdir $(DESTDIR)$(omf_dest_dir)
59 -scrollkeeper-update -p $(DESTDIR)$(scrollkeeper_localstate_dir)
60
61 clean-local-omf:
62 -for file in $(omffile); do \
63 rm -f $$file.out; \
64 done
+0
-101
xmldocs.make less more
0 #
1 # No modifications of this Makefile should be necessary.
2 #
3 # To use this template:
4 # 1) Define: figdir, docname, lang, omffile, and entities in
5 # your Makefile.am file for each document directory,
6 # although figdir, omffile, and entities may be empty
7 # 2) Make sure the Makefile in (1) also includes
8 # "include $(top_srcdir)/xmldocs.make" and
9 # "dist-hook: app-dist-hook".
10 # 3) Optionally define 'entities' to hold xml entities which
11 # you would also like installed
12 # 4) Figures must go under $(figdir)/ and be in PNG format
13 # 5) You should only have one document per directory
14 # 6) Note that the figure directory, $(figdir)/, should not have its
15 # own Makefile since this Makefile installs those figures.
16 #
17 # example Makefile.am:
18 # figdir = figures
19 # docname = scrollkeeper-manual
20 # lang = C
21 # omffile=scrollkeeper-manual-C.omf
22 # entities = fdl.xml
23 # include $(top_srcdir)/xmldocs.make
24 # dist-hook: app-dist-hook
25 #
26 # About this file:
27 # This file was taken from scrollkeeper_example2, a package illustrating
28 # how to install documentation and OMF files for use with ScrollKeeper
29 # 0.3.x and 0.4.x. For more information, see:
30 # http://scrollkeeper.sourceforge.net/
31 # Version: 0.1.2 (last updated: March 20, 2002)
32 #
33
34
35 # ********** Begin of section some packagers may need to modify **********
36 # This variable (docdir) specifies where the documents should be installed.
37 # This default value should work for most packages.
38 docdir = $(datadir)/gnome/help/$(docname)/$(lang)
39
40 # ********** You should not have to edit below this line **********
41 xml_files = $(entities) $(docname).xml
42
43 EXTRA_DIST = $(xml_files) $(omffile)
44 CLEANFILES = omf_timestamp
45
46 include $(top_srcdir)/omf.make
47
48 all: omf
49
50 $(docname).xml: $(entities)
51 -ourdir=`pwd`; \
52 cd $(srcdir); \
53 cp $(entities) $$ourdir
54
55 app-dist-hook:
56 if test "$(figdir)"; then \
57 $(mkinstalldirs) $(distdir)/$(figdir); \
58 for file in $(srcdir)/$(figdir)/*.png; do \
59 basefile=`echo $$file | sed -e 's,^.*/,,'`; \
60 $(INSTALL_DATA) $$file $(distdir)/$(figdir)/$$basefile; \
61 done \
62 fi
63
64 install-data-local: omf
65 $(mkinstalldirs) $(DESTDIR)$(docdir)
66 for file in $(xml_files); do \
67 cp $(srcdir)/$$file $(DESTDIR)$(docdir); \
68 done
69 if test "$(figdir)"; then \
70 $(mkinstalldirs) $(DESTDIR)$(docdir)/$(figdir); \
71 for file in $(srcdir)/$(figdir)/*.png; do \
72 basefile=`echo $$file | sed -e 's,^.*/,,'`; \
73 $(INSTALL_DATA) $$file $(DESTDIR)$(docdir)/$(figdir)/$$basefile; \
74 done \
75 fi
76
77 install-data-hook: install-data-hook-omf
78
79 uninstall-local: uninstall-local-doc uninstall-local-omf
80
81 uninstall-local-doc:
82 -if test "$(figdir)"; then \
83 for file in $(srcdir)/$(figdir)/*.png; do \
84 basefile=`echo $$file | sed -e 's,^.*/,,'`; \
85 rm -f $(DESTDIR)$(docdir)/$(figdir)/$$basefile; \
86 done; \
87 rmdir $(DESTDIR)$(docdir)/$(figdir); \
88 fi
89 -for file in $(xml_files); do \
90 rm -f $(DESTDIR)$(docdir)/$$file; \
91 done
92 -rmdir $(DESTDIR)$(docdir)
93
94 clean-local: clean-local-doc clean-local-omf
95
96 # for non-srcdir builds, remove the copied entities.
97 clean-local-doc:
98 if test $(srcdir) != .; then \
99 rm -f $(entities); \
100 fi