From 9f890982b2977579ab83e6c3909fe4b1a42f51ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 23 Nov 2012 17:49:11 +0100 Subject: [PATCH] Revert "NetworkMenu: rework multiple NIC support" This reverts commit 490206b5b23649017859b9cb6d534cce1855d6dd. Conflicts: configure.ac src/gvc --- configure.ac | 6 +- js/misc/util.js | 80 ++++++++++++++++++++++++ js/ui/status/network.js | 132 +++++++++++++++++++++++++--------------- 3 files changed, 165 insertions(+), 53 deletions(-) diff --git a/configure.ac b/configure.ac index 33a6f9101..bd55e19f1 100644 --- a/configure.ac +++ b/configure.ac @@ -78,7 +78,6 @@ STARTUP_NOTIFICATION_MIN_VERSION=0.11 GCR_MIN_VERSION=3.3.90 GNOME_DESKTOP_REQUIRED_VERSION=3.7.1 GNOME_MENUS_REQUIRED_VERSION=3.5.3 -NETWORKMANAGER_MIN_VERSION=0.9.7 PULSE_MIN_VERS=2.0 # Collect more than 20 libraries for a prize! @@ -100,9 +99,8 @@ PKG_CHECK_MODULES(GNOME_SHELL, gio-unix-2.0 >= $GIO_MIN_VERSION telepathy-glib >= $TELEPATHY_GLIB_MIN_VERSION telepathy-logger-0.2 >= $TELEPATHY_LOGGER_MIN_VERSION polkit-agent-1 >= $POLKIT_MIN_VERSION xfixes - libnm-glib libnm-util >= $NETWORKMANAGER_MIN_VERSION - libnm-gtk >= $NETWORKMANAGER_MIN_VERSION - gnome-keyring-1 gcr-3 >= $GCR_MIN_VERSION) + libnm-glib libnm-util gnome-keyring-1 + gcr-3 >= $GCR_MIN_VERSION) PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0) diff --git a/js/misc/util.js b/js/misc/util.js index 98c231030..fb936c941 100644 --- a/js/misc/util.js +++ b/js/misc/util.js @@ -159,6 +159,86 @@ function killall(processName) { } } +// This was ported from network-manager-applet +// Copyright 2007 - 2011 Red Hat, Inc. +// Author: Dan Williams + +const _IGNORED_WORDS = [ + 'Semiconductor', + 'Components', + 'Corporation', + 'Communications', + 'Company', + 'Corp.', + 'Corp', + 'Co.', + 'Inc.', + 'Inc', + 'Incorporated', + 'Ltd.', + 'Limited.', + 'Intel', + 'chipset', + 'adapter', + '[hex]', + 'NDIS', + 'Module' +]; + +const _IGNORED_PHRASES = [ + 'Multiprotocol MAC/baseband processor', + 'Wireless LAN Controller', + 'Wireless LAN Adapter', + 'Wireless Adapter', + 'Network Connection', + 'Wireless Cardbus Adapter', + 'Wireless CardBus Adapter', + '54 Mbps Wireless PC Card', + 'Wireless PC Card', + 'Wireless PC', + 'PC Card with XJACK(r) Antenna', + 'Wireless cardbus', + 'Wireless LAN PC Card', + 'Technology Group Ltd.', + 'Communication S.p.A.', + 'Business Mobile Networks BV', + 'Mobile Broadband Minicard Composite Device', + 'Mobile Communications AB', + '(PC-Suite Mode)' +]; + +function fixupPCIDescription(desc) { + desc = desc.replace(/[_,]/, ' '); + + /* Attempt to shorten ID by ignoring certain phrases */ + for (let i = 0; i < _IGNORED_PHRASES.length; i++) { + let item = _IGNORED_PHRASES[i]; + let pos = desc.indexOf(item); + if (pos != -1) { + let before = desc.substring(0, pos); + let after = desc.substring(pos + item.length, desc.length); + desc = before + after; + } + } + + /* Attmept to shorten ID by ignoring certain individual words */ + let words = desc.split(' '); + let out = [ ]; + for (let i = 0; i < words.length; i++) { + let item = words[i]; + + // skip empty items (that come out from consecutive spaces) + if (item.length == 0) + continue; + + if (_IGNORED_WORDS.indexOf(item) == -1) { + out.push(item); + } + } + + return out.join(' '); +} + // lowerBound: // @array: an array or array-like object, already sorted // according to @cmp diff --git a/js/ui/status/network.js b/js/ui/status/network.js index 92f5af55f..b5a354e9a 100644 --- a/js/ui/status/network.js +++ b/js/ui/status/network.js @@ -5,7 +5,6 @@ const Gio = imports.gi.Gio; const Lang = imports.lang; const NetworkManager = imports.gi.NetworkManager; const NMClient = imports.gi.NMClient; -const NMGtk = imports.gi.NMGtk; const Signals = imports.signals; const St = imports.gi.St; @@ -140,6 +139,46 @@ const NMNetworkMenuItem = new Lang.Class({ } }); +const NMWiredSectionTitleMenuItem = new Lang.Class({ + Name: 'NMWiredSectionTitleMenuItem', + Extends: PopupMenu.PopupSwitchMenuItem, + + _init: function(label, params) { + params = params || { }; + params.style_class = 'popup-subtitle-menu-item'; + this.parent(label, false, params); + }, + + updateForDevice: function(device) { + if (device) { + this._device = device; + this.setStatus(device.getStatusLabel()); + this.setToggleState(device.connected); + } else + this.setStatus(''); + }, + + activate: function(event) { + this.parent(event); + + if (!this._device) { + log('Section title activated when there is more than one device, should be non reactive'); + return; + } + + let newState = this._switch.state; + + let ok; + if (newState) + ok = this._device.activate(); + else + ok = this._device.deactivate(); + + if (!ok) + this._switch.setToggleState(false); + } +}); + const NMWirelessSectionTitleMenuItem = new Lang.Class({ Name: 'NMWirelessSectionTitleMenuItem', Extends: PopupMenu.PopupSwitchMenuItem, @@ -312,7 +351,7 @@ const NMDevice = new Lang.Class({ this._autoConnectionItem = null; this._overflowItem = null; - this.statusItem = new PopupMenu.PopupSwitchMenuItem('', this.connected, { style_class: 'popup-subtitle-menu-item' }); + this.statusItem = new PopupMenu.PopupSwitchMenuItem(this._getDescription(), this.connected, { style_class: 'popup-subtitle-menu-item' }); this._statusChanged = this.statusItem.connect('toggled', Lang.bind(this, function(item, state) { let ok; if (state) @@ -473,10 +512,6 @@ const NMDevice = new Lang.Class({ } }, - syncDescription: function() { - this.statusItem.label.text = this.device._description; - }, - // protected _createAutomaticConnection: function() { throw new TypeError('Invoking pure virtual function NMDevice.createAutomaticConnection'); @@ -608,6 +643,25 @@ const NMDevice = new Lang.Class({ this.statusItem.setStatus(this.getStatusLabel()); this.emit('state-changed'); + }, + + _getDescription: function() { + let dev_product = this.device.get_product(); + let dev_vendor = this.device.get_vendor(); + if (!dev_product || !dev_vendor) + return ''; + + let product = Util.fixupPCIDescription(dev_product); + let vendor = Util.fixupPCIDescription(dev_vendor); + let out = ''; + + // Another quick hack; if all of the fixed up vendor string + // is found in product, ignore the vendor. + if (product.indexOf(vendor) == -1) + out += vendor + ' '; + out += product; + + return out; } }); @@ -828,6 +882,10 @@ const NMDeviceBluetooth = new Lang.Class({ this._clearSection(); this._queueCreateSection(); this._updateStatusItem(); + }, + + _getDescription: function() { + return this.device.name || _("Bluetooth"); } }); @@ -1609,14 +1667,15 @@ const NMApplet = new Lang.Class({ this._mobileUpdateId = 0; this._mobileUpdateDevice = null; - this._nmDevices = []; this._devices = { }; this._devices.wired = { section: new PopupMenu.PopupMenuSection(), devices: [ ], + item: new NMWiredSectionTitleMenuItem(_("Wired")) }; + this._devices.wired.section.addMenuItem(this._devices.wired.item); this._devices.wired.section.actor.hide(); this.menu.addMenuItem(this._devices.wired.section); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); @@ -1624,7 +1683,7 @@ const NMApplet = new Lang.Class({ this._devices.wireless = { section: new PopupMenu.PopupMenuSection(), devices: [ ], - item: this._makeToggleItem('wireless', _("Wi-Fi")) + item: this._makeToggleItem('wireless', _("Wireless")) }; this._devices.wireless.section.addMenuItem(this._devices.wireless.item); this._devices.wireless.section.actor.hide(); @@ -1634,7 +1693,9 @@ const NMApplet = new Lang.Class({ this._devices.wwan = { section: new PopupMenu.PopupMenuSection(), devices: [ ], + item: this._makeToggleItem('wwan', _("Mobile broadband")) }; + this._devices.wwan.section.addMenuItem(this._devices.wwan.item); this._devices.wwan.section.actor.hide(); this.menu.addMenuItem(this._devices.wwan.section); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); @@ -1719,23 +1780,16 @@ const NMApplet = new Lang.Class({ section.actor.hide(); else { section.actor.show(); - - // Sync the relation between the section title - // item (the one with the airplane mode switch) - // and the individual device switches - if (item) { - if (devices.length == 1) { - let dev = devices[0]; - dev.statusItem.actor.hide(); - item.updateForDevice(dev); - } else { - devices.forEach(function(dev) { - dev.statusItem.actor.show(); - }); - - // remove status text from the section title item - item.updateForDevice(null); - } + if (devices.length == 1) { + let dev = devices[0]; + dev.statusItem.actor.hide(); + item.updateForDevice(dev); + } else { + devices.forEach(function(dev) { + dev.statusItem.actor.show(); + }); + // remove status text from the section title item + item.updateForDevice(null); } } }, @@ -1743,9 +1797,8 @@ const NMApplet = new Lang.Class({ _readDevices: function() { let devices = this._client.get_devices() || [ ]; for (let i = 0; i < devices.length; ++i) { - this._deviceAdded(this._client, devices[i], true); + this._deviceAdded(this._client, devices[i]); } - this._syncDeviceNames(); }, _notifyForDevice: function(device, iconName, title, text, urgency) { @@ -1793,18 +1846,7 @@ const NMApplet = new Lang.Class({ return wrapper; }, - _syncDeviceNames: function() { - let names = NMGtk.utils_disambiguate_device_names(this._nmDevices); - for (let i = 0; i < this._nmDevices.length; i++) { - let device = this._nmDevices[i]; - if (device._description != names[i]) { - device._description = names[i]; - device._delegate.syncDescription(); - } - } - }, - - _deviceAdded: function(client, device, skipSyncDeviceNames) { + _deviceAdded: function(client, device) { if (device._delegate) { // already seen, not adding again return; @@ -1815,14 +1857,10 @@ const NMApplet = new Lang.Class({ let section = this._devices[wrapper.category].section; let devices = this._devices[wrapper.category].devices; - section.addMenuItem(wrapper.statusItem); - section.addMenuItem(wrapper.section); + section.addMenuItem(wrapper.section, 1); + section.addMenuItem(wrapper.statusItem, 1); devices.push(wrapper); - this._nmDevices.push(device); - if (!skipSyncDeviceNames) - this._syncDeviceNames(); - this._syncSectionTitle(wrapper.category); } }, @@ -1840,10 +1878,6 @@ const NMApplet = new Lang.Class({ let pos = devices.indexOf(wrapper); devices.splice(pos, 1); - pos = this._nmDevices.indexOf(device); - this._nmDevices.splice(pos, 1); - this._syncDeviceNames(); - this._syncSectionTitle(wrapper.category) },