From 792b963bda8c44023c0590c42c08ec0bad1a4bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 29 Aug 2013 23:25:13 +0200 Subject: [PATCH] iconGrid: Change IconGrid.addItem() to take an object instead of an actor IconGrid has never really been a general purpose container, but has always been used in conjunction with BaseIcon. IconGrid will soon gain the ability to adjust the item size dynamically to adapt to the available space, which will require that we can make some more assumptions about the items added to the grid (namely: we need access to BaseIcon's setIconSize() method). So change addItem() to take an object instead, which should have an actor and a (BaseIcon) icon property. Based on a patch by Carlos Soriano. https://bugzilla.gnome.org/show_bug.cgi?id=706081 --- js/ui/appDisplay.js | 9 ++++----- js/ui/iconGrid.js | 15 +++++++++++---- js/ui/searchDisplay.js | 16 +++++++++------- js/ui/wanda.js | 5 ++--- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 59ca49727..587960c7b 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -129,7 +129,7 @@ const BaseAppView = new Lang.Class({ let id = this._getItemId(this._allItems[i]); if (!id) continue; - this._grid.addItem(this._items[id].actor); + this._grid.addItem(this._items[id]); } this.emit('view-loaded'); @@ -583,7 +583,7 @@ const FrequentView = new Lang.Class({ if (!mostUsed[i].get_app_info().should_show()) continue; let appIcon = new AppIcon(mostUsed[i]); - this._grid.addItem(appIcon.actor, -1); + this._grid.addItem(appIcon, -1); } }, @@ -862,10 +862,9 @@ const AppSearchProvider = new Lang.Class({ app.open_new_window(workspace); }, - createResultActor: function (resultMeta, terms) { + createResultObject: function (resultMeta, terms) { let app = resultMeta['id']; - let icon = new AppIcon(app); - return icon.actor; + return new AppIcon(app); } }); diff --git a/js/ui/iconGrid.js b/js/ui/iconGrid.js index bcadffa01..d22b4cf1a 100644 --- a/js/ui/iconGrid.js +++ b/js/ui/iconGrid.js @@ -205,7 +205,7 @@ const IconGrid = new Lang.Class({ this.actor = new St.BoxLayout({ style_class: 'icon-grid', vertical: true }); - + this._items = []; // Pulled from CSS, but hardcode some defaults here this._spacing = 0; this._hItemSize = this._vItemSize = ICON_SIZE; @@ -406,14 +406,21 @@ const IconGrid = new Lang.Class({ }, removeAll: function() { + this._items = []; this._grid.destroy_all_children(); }, - addItem: function(actor, index) { + addItem: function(item, index) { + if (!item.icon || !item.icon instanceof BaseIcon) { + log('Only items with a BaseIcon icon property can be added to IconGrid'); + return; + } + + this._items.push(item); if (index !== undefined) - this._grid.insert_child_at_index(actor, index); + this._grid.insert_child_at_index(item.actor, index); else - this._grid.add_actor(actor); + this._grid.add_actor(item.actor); }, getItemAtIndex: function(index) { diff --git a/js/ui/searchDisplay.js b/js/ui/searchDisplay.js index 9d47e44ec..72aa13194 100644 --- a/js/ui/searchDisplay.js +++ b/js/ui/searchDisplay.js @@ -126,23 +126,25 @@ const GridSearchResult = new Lang.Class({ this.actor.style_class = 'grid-search-result'; - let content = provider.createResultActor(metaInfo, terms); + let content = provider.createResultObject(metaInfo, terms); let dragSource = null; if (content == null) { - content = new St.Bin(); + let actor = new St.Bin(); let icon = new IconGrid.BaseIcon(this.metaInfo['name'], { createIcon: this.metaInfo['createIcon'] }); - content.set_child(icon.actor); - content.label_actor = icon.label; + actor.set_child(icon.actor); + actor.label_actor = icon.label; dragSource = icon.icon; + content = { actor: actor, icon: icon }; } else { if (content._delegate && content._delegate.getDragActorSource) dragSource = content._delegate.getDragActorSource(); } - this.actor.set_child(content); - this.actor.label_actor = content.label_actor; + this.actor.set_child(content.actor); + this.actor.label_actor = content.actor.label_actor; + this.icon = content.icon; let draggable = DND.makeDraggable(this.actor); draggable.connect('drag-begin', @@ -327,7 +329,7 @@ const GridSearchResults = new Lang.Class({ for (let i = 0; i < metas.length; i++) { let display = new GridSearchResult(this.provider, metas[i], this._terms); display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn)); - this._grid.addItem(display.actor); + this._grid.addItem(display); } }, diff --git a/js/ui/wanda.js b/js/ui/wanda.js index 713f4cdca..731a63109 100644 --- a/js/ui/wanda.js +++ b/js/ui/wanda.js @@ -150,8 +150,7 @@ const WandaSearchProvider = new Lang.Class({ this._dialog = new FortuneDialog(capitalize(fish), FISH_COMMAND); }, - createResultActor: function (resultMeta, terms) { - let icon = new WandaIconBin(resultMeta.id, resultMeta.name); - return icon.actor; + createResultObject: function (resultMeta, terms) { + return new WandaIconBin(resultMeta.id, resultMeta.name); } });