36
35
rl_service.update_complete.connect (update_popularity);
39
apps_menu = GMenu.Tree.lookup ("pantheon-applications.menu", GMenu.TreeFlags.INCLUDE_EXCLUDED);
40
apps_menu.add_monitor ((menu) => {
42
debug ("Apps menu tree changed. Updating…");
49
apps_menu.set_sort_key (GMenu.TreeSortKey.DISPLAY_NAME);
38
apps_menu = new GMenu.Tree ("pantheon-applications.menu", GMenu.TreeFlags.INCLUDE_EXCLUDED | GMenu.TreeFlags.SORT_DISPLAY_NAME);
39
apps_menu.changed.connect (update_app_system);
41
apps = new Gee.HashMap<string, Gee.ArrayList<App>> ();
42
categories = new Gee.ArrayList<GMenu.TreeDirectory> ();
50
44
update_app_system ();
54
48
private void update_app_system () {
50
debug ("Updating Applications menu tree...");
57
52
rl_service.refresh_popularity ();
55
apps_menu.load_sync ();
60
57
update_categories_index ();
65
64
private void update_categories_index () {
67
var root_tree = apps_menu.get_root_directory ();
69
if (categories == null || index_changed) {
70
categories = new Gee.ArrayList<GMenu.TreeDirectory> ();
72
foreach (GMenu.TreeItem item in root_tree.get_contents ()) {
73
if (item.get_type () == GMenu.TreeItemType.DIRECTORY)
74
if (((GMenu.TreeDirectory) item).get_is_nodisplay () == false)
75
categories.add ((GMenu.TreeDirectory) item);
68
var iter = apps_menu.get_root_directory ().iter ();
69
GMenu.TreeItemType type;
70
while ((type = iter.next ()) != GMenu.TreeItemType.INVALID) {
71
if (type == GMenu.TreeItemType.DIRECTORY) {
72
var dir = iter.get_directory ();
73
if (!dir.get_is_nodisplay ())
90
89
private void update_apps () {
95
index_changed = false;
100
apps = new Gee.HashMap<string, Gee.ArrayList<App>> ();
102
foreach (GMenu.TreeDirectory cat in categories) {
103
apps.set (cat.get_name (), get_apps_by_category (cat));
93
foreach (var cat in categories)
94
apps.set (cat.get_name (), get_apps_by_category (cat));
118
106
var app_list = new Gee.ArrayList<App> ();
120
foreach (GMenu.TreeItem item in category.get_contents ()) {
122
switch (item.get_type ()) {
108
var iter = category.iter ();
109
GMenu.TreeItemType type;
110
while ((type = iter.next ()) != GMenu.TreeItemType.INVALID) {
123
112
case GMenu.TreeItemType.DIRECTORY:
124
app_list.add_all (get_apps_by_category ((GMenu.TreeDirectory) item));
113
app_list.add_all (get_apps_by_category (iter.get_directory ()));
126
115
case GMenu.TreeItemType.ENTRY:
127
if (is_entry ((GMenu.TreeEntry) item)) {
128
app = new App ((GMenu.TreeEntry) item);
116
var app = new App (iter.get_entry ());
129
117
#if HAVE_ZEITGEIST
130
app.launched.connect (rl_service.app_launched);
118
app.launched.connect (rl_service.app_launched);
141
private bool is_entry (GMenu.TreeEntry entry) {
143
if (entry.get_launch_in_terminal () == false
144
&& entry.get_is_excluded () == false
145
&& entry.get_is_nodisplay () == false) {
153
129
public Gee.HashMap<string, Gee.ArrayList<App>> get_apps () {