[gnome-shell] NetworkMenu: make the settings launcher point to the right devices



commit 6a7d184b7b07effb9edb028f26603eda594fa57a
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Wed Oct 2 19:39:58 2013 +0200

    NetworkMenu: make the settings launcher point to the right devices
    
    Tell gnome-control-center to focus on the associated device when
    launching it from one of the submenus.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=709246

 js/misc/util.js         |   17 +++++++++++++++++
 js/ui/status/network.js |   23 +++++++++++++++++++++--
 2 files changed, 38 insertions(+), 2 deletions(-)
---
diff --git a/js/misc/util.js b/js/misc/util.js
index 9e8dfa4..6ffda1e 100644
--- a/js/misc/util.js
+++ b/js/misc/util.js
@@ -1,6 +1,7 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 
 const Clutter = imports.gi.Clutter;
+const Gio = imports.gi.Gio;
 const GLib = imports.gi.GLib;
 const Lang = imports.lang;
 const St = imports.gi.St;
@@ -79,6 +80,22 @@ function spawnCommandLine(command_line) {
     }
 }
 
+// spawnApp:
+// @argv: an argv array
+//
+// Runs @argv as if it was an application, handling startup notification
+function spawnApp(argv) {
+    try {
+        let app = Gio.AppInfo.create_from_commandline(argv.join(' '), null,
+                                                      Gio.AppInfoCreateFlags.SUPPORTS_STARTUP_NOTIFICATION);
+
+        let context = global.create_app_launch_context();
+        app.launch([], context);
+    } catch(err) {
+        _handleSpawnError(argv[0], err);
+    }
+}
+
 // trySpawn:
 // @argv: an argv array
 //
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 10b3d34..d8b896c 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -83,6 +83,17 @@ function ensureActiveConnectionProps(active, settings) {
     }
 }
 
+function createSettingsAction(label, device) {
+    let item = new PopupMenu.PopupMenuItem(label);
+
+    item.connect('activate', function() {
+        Util.spawnApp(['gnome-control-center', 'network', 'show-device',
+                       device.get_path()]);
+    });
+
+    return item;
+}
+
 const NMConnectionItem = new Lang.Class({
     Name: 'NMConnectionItem',
 
@@ -283,7 +294,6 @@ const NMConnectionDevice = new Lang.Class({
         this._settings = settings;
 
         this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect));
-        this.item.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
 
         this._stateChangedId = this._device.connect('state-changed', Lang.bind(this, 
this._deviceStateChanged));
         this._activeConnectionChangedId = this._device.connect('notify::active-connection', Lang.bind(this, 
this._activeConnectionChanged));
@@ -413,6 +423,9 @@ const NMDeviceModem = new Lang.Class({
 
     _init: function(client, device, settings) {
         this.parent(client, device, settings);
+
+        this.item.menu.addMenuItem(createSettingsAction(_("Mobile Broadband Settings"), device));
+
         this._mobileDevice = null;
 
         let capabilities = device.current_capabilities;
@@ -494,6 +507,12 @@ const NMDeviceBluetooth = new Lang.Class({
     Extends: NMConnectionDevice,
     category: NMConnectionCategory.WWAN,
 
+    _init: function(client, device, settings) {
+        this.parent(client, device, settings);
+
+        this.item.menu.addMenuItem(createSettingsAction(_("Mobile Broadband Settings"), device));
+    },
+
     _autoConnect: function() {
         // FIXME: DUN devices are configured like modems, so
         // We need to spawn the mobile wizard
@@ -975,7 +994,7 @@ const NMDeviceWireless = new Lang.Class({
         this._toggleItem.connect('activate', Lang.bind(this, this._toggleWifi));
         this.item.menu.addMenuItem(this._toggleItem);
 
-        this.item.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
+        this.item.menu.addMenuItem(createSettingsAction(_("Wi-Fi Settings"), device));
 
         this._wirelessEnabledChangedId = this._client.connect('notify::wireless-enabled', Lang.bind(this, 
this._sync));
         this._wirelessHwEnabledChangedId = this._client.connect('notify::wireless-hardware-enabled', 
Lang.bind(this, this._sync));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]