appDisplay: Create AppFolderIcons for selected categories

App folders are intended for grouping some applications, not to
assign a category to every single application, so we will only
create folders for a selected subset of the existing categories.
Software/Alacarte will eventually allow to create/modify those
folders, so store the setting in GSettings so that it can be
shared with those applications.

https://bugzilla.gnome.org/show_bug.cgi?id=694192
This commit is contained in:
Florian Müllner 2013-01-31 17:14:13 +01:00
parent 6a1b341336
commit e3c9c46c1c
2 changed files with 16 additions and 1 deletions

View File

@ -39,6 +39,14 @@
will be displayed in the favorites area.
</_description>
</key>
<key name="app-folder-categories" type="as">
<default>[ 'Utilities', 'Sundry' ]</default>
<_summary>List of categories that should be displayed as folders</_summary>
<_description>
Each category name in this list will be represented as folder in the
application view, rather than being displayed inline in the main view.
</_description>
</key>
<key name="command-history" type="as">
<default>[]</default>
<_summary>History for command (Alt-F2) dialog</_summary>

View File

@ -267,6 +267,9 @@ const AppDisplay = new Lang.Class({
this._appSystem.connect('installed-changed', Lang.bind(this, function() {
Main.queueDeferredWork(this._workId);
}));
global.settings.connect('changed::app-folder-categories', Lang.bind(this, function() {
Main.queueDeferredWork(this._workId);
}));
let box = new St.BoxLayout();
this.actor = new St.Bin({ child: box,
@ -297,13 +300,17 @@ const AppDisplay = new Lang.Class({
var iter = root.iter();
var nextType;
let folderCategories = global.settings.get_strv('app-folder-categories');
while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) {
if (nextType == GMenu.TreeItemType.DIRECTORY) {
var dir = iter.get_directory();
if (dir.get_is_nodisplay())
continue;
_loadCategory(dir, this._view);
if (folderCategories.indexOf(dir.get_menu_id()) != -1)
this._view.addFolder(dir);
else
_loadCategory(dir, this._view);
}
}
this._view.loadGrid();