appDisplay: Add AllView.addFolder() method

Adjust AllView to be able to hold both apps and folders, and add an
addFolder() method to insert a folder.

https://bugzilla.gnome.org/show_bug.cgi?id=694192
This commit is contained in:
Florian Müllner 2013-01-31 15:32:02 +01:00
parent 65f96494f8
commit 6a1b341336

View File

@ -184,15 +184,29 @@ const AllView = new Lang.Class({
}, },
_getItemId: function(item) { _getItemId: function(item) {
if (item instanceof Shell.App)
return item.get_id(); return item.get_id();
else if (item instanceof GMenu.TreeDirectory)
return item.get_menu_id();
else
return null;
}, },
_createItemIcon: function(item) { _createItemIcon: function(item) {
if (item instanceof Shell.App)
return new AppIcon(item); return new AppIcon(item);
else if (item instanceof GMenu.TreeDirectory)
return new FolderIcon(item, this);
else
return null;
}, },
_compareItems: function(a, b) { _compareItems: function(itemA, itemB) {
return a.compare_by_name(b); // bit of a hack: rely on both ShellApp and GMenuTreeDirectory
// having a get_name() method
let nameA = GLib.utf8_collate_key(itemA.get_name(), -1);
let nameB = GLib.utf8_collate_key(itemB.get_name(), -1);
return (nameA > nameB) ? 1 : (nameA < nameB ? -1 : 0);
}, },
addApp: function(app) { addApp: function(app) {
@ -202,6 +216,13 @@ const AllView = new Lang.Class({
Lang.bind(this, this._ensureIconVisible)); Lang.bind(this, this._ensureIconVisible));
}, },
addFolder: function(dir) {
let folderIcon = this._addItem(dir);
if (folderIcon)
folderIcon.actor.connect('key-focus-in',
Lang.bind(this, this._ensureIconVisible));
},
addFolderPopup: function(popup) { addFolderPopup: function(popup) {
this._stack.add_actor(popup.actor); this._stack.add_actor(popup.actor);
popup.connect('open-state-changed', Lang.bind(this, popup.connect('open-state-changed', Lang.bind(this,