~nonamenoname/slingshot/fix-1084101

« back to all changes in this revision

Viewing changes to src/Backend/AppSystem.vala

  • Committer: Rico Tzschichholz
  • Date: 2013-01-10 16:53:50 UTC
  • Revision ID: ricotz@ubuntu.com-20130110165350-mvfjjj2ntwzqubhh
Port to libgnome-menu-3.0 API

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
#endif
28
28
 
29
29
    public signal void changed ();
30
 
    private bool index_changed = false;
31
30
 
32
31
    construct {
33
32
 
36
35
        rl_service.update_complete.connect (update_popularity);
37
36
#endif
38
37
 
39
 
        apps_menu = GMenu.Tree.lookup ("pantheon-applications.menu", GMenu.TreeFlags.INCLUDE_EXCLUDED);
40
 
        apps_menu.add_monitor ((menu) => {
41
 
 
42
 
            debug ("Apps menu tree changed. Updating…");
43
 
            index_changed = true;
44
 
            update_app_system ();
45
 
            changed ();
46
 
 
47
 
        });
48
 
 
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);
 
40
        
 
41
        apps = new Gee.HashMap<string, Gee.ArrayList<App>> ();
 
42
        categories = new Gee.ArrayList<GMenu.TreeDirectory> ();
 
43
 
50
44
        update_app_system ();
51
45
 
52
46
    }
53
47
 
54
48
    private void update_app_system () {
55
49
 
 
50
        debug ("Updating Applications menu tree...");
56
51
#if HAVE_ZEITGEIST
57
52
        rl_service.refresh_popularity ();
58
53
#endif
59
54
 
 
55
        apps_menu.load_sync ();
 
56
 
60
57
        update_categories_index ();
61
58
        update_apps ();
62
59
 
 
60
        changed ();
 
61
 
63
62
    }
64
63
 
65
64
    private void update_categories_index () {
66
65
 
67
 
        var root_tree = apps_menu.get_root_directory ();
68
 
 
69
 
        if (categories == null || index_changed) {
70
 
            categories = new Gee.ArrayList<GMenu.TreeDirectory> ();
71
 
 
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);
 
66
        categories.clear ();
 
67
 
 
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 ())
 
74
                    categories.add (dir);
76
75
            }
77
76
        }
78
77
 
89
88
 
90
89
    private void update_apps () {
91
90
 
92
 
        if (index_changed) {
93
 
            apps.clear ();
94
 
            apps = null;
95
 
            index_changed = false;
96
 
        }
97
 
 
98
 
        if (apps == null) {
99
 
 
100
 
            apps = new Gee.HashMap<string, Gee.ArrayList<App>> ();
101
 
 
102
 
            foreach (GMenu.TreeDirectory cat in categories) {
103
 
                apps.set (cat.get_name (), get_apps_by_category (cat));
104
 
            }
105
 
 
106
 
        }
 
91
        apps.clear ();
 
92
 
 
93
        foreach (var cat in categories)
 
94
            apps.set (cat.get_name (), get_apps_by_category (cat));
107
95
 
108
96
    }
109
97
 
117
105
 
118
106
        var app_list = new Gee.ArrayList<App> ();
119
107
 
120
 
        foreach (GMenu.TreeItem item in category.get_contents ()) {
121
 
            App app;
122
 
            switch (item.get_type ()) {
 
108
        var iter = category.iter ();
 
109
        GMenu.TreeItemType type;
 
110
        while ((type = iter.next ()) != GMenu.TreeItemType.INVALID) {
 
111
            switch (type) {
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 ()));
125
114
                    break;
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);
131
119
#endif
132
 
                        app_list.add (app);
133
 
                    }
 
120
                    app_list.add (app);
134
121
                    break;
135
122
            }
136
123
        }
 
124
 
137
125
        return app_list;
138
126
 
139
127
    }
140
128
 
141
 
    private bool is_entry (GMenu.TreeEntry entry) {
142
 
 
143
 
        if (entry.get_launch_in_terminal () == false
144
 
            && entry.get_is_excluded () == false
145
 
            && entry.get_is_nodisplay () == false) {
146
 
            return true;
147
 
        } else {
148
 
            return false;
149
 
        }
150
 
 
151
 
    }
152
 
 
153
129
    public Gee.HashMap<string, Gee.ArrayList<App>> get_apps () {
154
130
 
155
131
        return apps;