apps-menu: Use Map to keep track of app items

The use of Array to keep track of inserted items is extremely
confusing, as no elements are ever added to the array. What
the code actually does is monkey-patching properties into an
empty object (that happens to be of type "Array"). While the
direct idiomatic replacement would be {}, update the code to
use a proper map instead.

https://bugzilla.gnome.org/show_bug.cgi?id=780371
This commit is contained in:
Florian Müllner
2017-03-15 05:16:49 +01:00
parent 2b396b4cf3
commit 021037bfcd
+8 -6
View File
@@ -286,6 +286,7 @@ const ApplicationsButton = new Lang.Class({
Lang.bind(this, this._setKeybinding));
this._setKeybinding();
this._applicationsButtons = new Map();
this.reloadFlag = false;
this._createLayout();
this._display();
@@ -494,7 +495,7 @@ const ApplicationsButton = new Lang.Class({
},
_display: function() {
this._applicationsButtons = new Array();
this._applicationsButtons.clear();
this.mainBox.style=('width: 35em;');
this.mainBox.hide();
@@ -553,12 +554,13 @@ const ApplicationsButton = new Lang.Class({
if (apps) {
for (let i = 0; i < apps.length; i++) {
let app = apps[i];
if (!this._applicationsButtons[app]) {
let applicationMenuItem = new ApplicationMenuItem(this, app);
this._applicationsButtons[app] = applicationMenuItem;
let item = this._applicationsButtons.get(app);
if (!item) {
item = new ApplicationMenuItem(this, app);
this._applicationsButtons.set(app, item);
}
if (!this._applicationsButtons[app].actor.get_parent())
this.applicationsBox.add_actor(this._applicationsButtons[app].actor);
if (!item.actor.get_parent())
this.applicationsBox.add_actor(item.actor);
}
}
},