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
This commit is contained in:
parent
9a8bf3b881
commit
792b963bda
@ -129,7 +129,7 @@ const BaseAppView = new Lang.Class({
|
|||||||
let id = this._getItemId(this._allItems[i]);
|
let id = this._getItemId(this._allItems[i]);
|
||||||
if (!id)
|
if (!id)
|
||||||
continue;
|
continue;
|
||||||
this._grid.addItem(this._items[id].actor);
|
this._grid.addItem(this._items[id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.emit('view-loaded');
|
this.emit('view-loaded');
|
||||||
@ -583,7 +583,7 @@ const FrequentView = new Lang.Class({
|
|||||||
if (!mostUsed[i].get_app_info().should_show())
|
if (!mostUsed[i].get_app_info().should_show())
|
||||||
continue;
|
continue;
|
||||||
let appIcon = new AppIcon(mostUsed[i]);
|
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);
|
app.open_new_window(workspace);
|
||||||
},
|
},
|
||||||
|
|
||||||
createResultActor: function (resultMeta, terms) {
|
createResultObject: function (resultMeta, terms) {
|
||||||
let app = resultMeta['id'];
|
let app = resultMeta['id'];
|
||||||
let icon = new AppIcon(app);
|
return new AppIcon(app);
|
||||||
return icon.actor;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ const IconGrid = new Lang.Class({
|
|||||||
|
|
||||||
this.actor = new St.BoxLayout({ style_class: 'icon-grid',
|
this.actor = new St.BoxLayout({ style_class: 'icon-grid',
|
||||||
vertical: true });
|
vertical: true });
|
||||||
|
this._items = [];
|
||||||
// Pulled from CSS, but hardcode some defaults here
|
// Pulled from CSS, but hardcode some defaults here
|
||||||
this._spacing = 0;
|
this._spacing = 0;
|
||||||
this._hItemSize = this._vItemSize = ICON_SIZE;
|
this._hItemSize = this._vItemSize = ICON_SIZE;
|
||||||
@ -406,14 +406,21 @@ const IconGrid = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
removeAll: function() {
|
removeAll: function() {
|
||||||
|
this._items = [];
|
||||||
this._grid.destroy_all_children();
|
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)
|
if (index !== undefined)
|
||||||
this._grid.insert_child_at_index(actor, index);
|
this._grid.insert_child_at_index(item.actor, index);
|
||||||
else
|
else
|
||||||
this._grid.add_actor(actor);
|
this._grid.add_actor(item.actor);
|
||||||
},
|
},
|
||||||
|
|
||||||
getItemAtIndex: function(index) {
|
getItemAtIndex: function(index) {
|
||||||
|
@ -126,23 +126,25 @@ const GridSearchResult = new Lang.Class({
|
|||||||
|
|
||||||
this.actor.style_class = 'grid-search-result';
|
this.actor.style_class = 'grid-search-result';
|
||||||
|
|
||||||
let content = provider.createResultActor(metaInfo, terms);
|
let content = provider.createResultObject(metaInfo, terms);
|
||||||
let dragSource = null;
|
let dragSource = null;
|
||||||
|
|
||||||
if (content == null) {
|
if (content == null) {
|
||||||
content = new St.Bin();
|
let actor = new St.Bin();
|
||||||
let icon = new IconGrid.BaseIcon(this.metaInfo['name'],
|
let icon = new IconGrid.BaseIcon(this.metaInfo['name'],
|
||||||
{ createIcon: this.metaInfo['createIcon'] });
|
{ createIcon: this.metaInfo['createIcon'] });
|
||||||
content.set_child(icon.actor);
|
actor.set_child(icon.actor);
|
||||||
content.label_actor = icon.label;
|
actor.label_actor = icon.label;
|
||||||
dragSource = icon.icon;
|
dragSource = icon.icon;
|
||||||
|
content = { actor: actor, icon: icon };
|
||||||
} else {
|
} else {
|
||||||
if (content._delegate && content._delegate.getDragActorSource)
|
if (content._delegate && content._delegate.getDragActorSource)
|
||||||
dragSource = content._delegate.getDragActorSource();
|
dragSource = content._delegate.getDragActorSource();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.actor.set_child(content);
|
this.actor.set_child(content.actor);
|
||||||
this.actor.label_actor = content.label_actor;
|
this.actor.label_actor = content.actor.label_actor;
|
||||||
|
this.icon = content.icon;
|
||||||
|
|
||||||
let draggable = DND.makeDraggable(this.actor);
|
let draggable = DND.makeDraggable(this.actor);
|
||||||
draggable.connect('drag-begin',
|
draggable.connect('drag-begin',
|
||||||
@ -327,7 +329,7 @@ const GridSearchResults = new Lang.Class({
|
|||||||
for (let i = 0; i < metas.length; i++) {
|
for (let i = 0; i < metas.length; i++) {
|
||||||
let display = new GridSearchResult(this.provider, metas[i], this._terms);
|
let display = new GridSearchResult(this.provider, metas[i], this._terms);
|
||||||
display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
|
display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
|
||||||
this._grid.addItem(display.actor);
|
this._grid.addItem(display);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -150,8 +150,7 @@ const WandaSearchProvider = new Lang.Class({
|
|||||||
this._dialog = new FortuneDialog(capitalize(fish), FISH_COMMAND);
|
this._dialog = new FortuneDialog(capitalize(fish), FISH_COMMAND);
|
||||||
},
|
},
|
||||||
|
|
||||||
createResultActor: function (resultMeta, terms) {
|
createResultObject: function (resultMeta, terms) {
|
||||||
let icon = new WandaIconBin(resultMeta.id, resultMeta.name);
|
return new WandaIconBin(resultMeta.id, resultMeta.name);
|
||||||
return icon.actor;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user