NetworkMenu: take out an item from More... when another is destroyed

When one of the networks in the main menu is removed and we have
a More... submenu, we can take the first out from the submenu and
show it in the main menu.

https://bugzilla.gnome.org/show_bug.cgi?id=647175
This commit is contained in:
Giovanni Campagna 2011-06-27 17:45:24 +02:00
parent a007b1bb2d
commit 5819dd3a5a
2 changed files with 34 additions and 7 deletions

View File

@ -946,6 +946,14 @@ PopupMenuBase.prototype = {
}); });
}, },
get firstMenuItem() {
let items = this._getMenuItems();
if (items.length)
return items[0];
else
return null;
},
removeAll: function() { removeAll: function() {
let children = this._getMenuItems(); let children = this._getMenuItems();
for (let i = 0; i < children.length; i++) { for (let i = 0; i < children.length; i++) {

View File

@ -1281,12 +1281,29 @@ NMDeviceWireless.prototype = {
if (apObj.accessPoints.length == 0) { if (apObj.accessPoints.length == 0) {
if (apObj.item) if (apObj.item)
apObj.item.destroy(); apObj.item.destroy();
this._networks.splice(pos, 1);
if (this._overflowItem && if (this._overflowItem) {
this._overflowItem.menu.length == 0) { if (!apObj.isMore) {
this._overflowItem.destroy(); // we removed an item in the main menu, and we have a more submenu
this._overflowItem = null; // we need to extract the first item in more and move it to the submenu
let apObj = this._overflowItem.menu.firstMenuItem;
if (apObj.item) {
apObj.item.destroy();
this._createNetworkItem(apObj, NUM_VISIBLE_NETWORKS-1);
}
}
// This can happen if the removed connection is from the overflow
// menu, or if we just moved the last connection out from the menu
if (this._overflowItem.menu.length == 0) {
this._overflowItem.destroy();
this._overflowItem = null;
}
} }
this._networks.splice(pos, 1);
} else if (apObj.item) } else if (apObj.item)
apObj.item.updateAccessPoints(apObj.accessPoints); apObj.item.updateAccessPoints(apObj.accessPoints);
}, },
@ -1482,14 +1499,16 @@ NMDeviceWireless.prototype = {
} }
})); }));
} }
if (position < NUM_VISIBLE_NETWORKS) if (position < NUM_VISIBLE_NETWORKS) {
apObj.isMore = false;
this.section.addMenuItem(apObj.item, position); this.section.addMenuItem(apObj.item, position);
else { } else {
if (!this._overflowItem) { if (!this._overflowItem) {
this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More...")); this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More..."));
this.section.addMenuItem(this._overflowItem); this.section.addMenuItem(this._overflowItem);
} }
this._overflowItem.menu.addMenuItem(apObj.item, position - NUM_VISIBLE_NETWORKS); this._overflowItem.menu.addMenuItem(apObj.item, position - NUM_VISIBLE_NETWORKS);
apObj.isMore = true;
} }
}, },