diff -up kdebase-workspace-4.4.85/libs/solid/control/ifaces/networkmanager.h.kde238325 kdebase-workspace-4.4.85/libs/solid/control/ifaces/networkmanager.h --- kdebase-workspace-4.4.85/libs/solid/control/ifaces/networkmanager.h.kde238325 2009-04-28 08:46:11.000000000 -0500 +++ kdebase-workspace-4.4.85/libs/solid/control/ifaces/networkmanager.h 2010-06-08 14:40:43.554897330 -0500 @@ -164,6 +164,11 @@ namespace Ifaces void wirelessHardwareEnabledChanged(bool enabled); /** + * This signal is emitted when the status of overall networking changed + */ + void networkingEnabledChanged(bool enabled); + + /** * This signal is emitted when the set of active connections changes */ void activeConnectionsChanged(); diff -up kdebase-workspace-4.4.85/libs/solid/control/networkmanager.cpp.kde238325 kdebase-workspace-4.4.85/libs/solid/control/networkmanager.cpp --- kdebase-workspace-4.4.85/libs/solid/control/networkmanager.cpp.kde238325 2009-07-17 16:44:59.000000000 -0500 +++ kdebase-workspace-4.4.85/libs/solid/control/networkmanager.cpp 2010-06-08 14:40:43.555907737 -0500 @@ -56,6 +56,8 @@ Solid::Control::NetworkManagerPrivate::N this, SIGNAL(wirelessEnabledChanged(bool))); connect(managerBackend(), SIGNAL(wirelessHardwareEnabledChanged(bool)), this, SIGNAL(wirelessHardwareEnabledChanged(bool))); + connect(managerBackend(), SIGNAL(networkingEnabledChanged(bool)), + this, SIGNAL(networkingEnabledChanged(bool))); connect(managerBackend(), SIGNAL(activeConnectionsChanged()), this, SIGNAL(activeConnectionsChanged())); } diff -up kdebase-workspace-4.4.85/libs/solid/control/networkmanager.h.kde238325 kdebase-workspace-4.4.85/libs/solid/control/networkmanager.h --- kdebase-workspace-4.4.85/libs/solid/control/networkmanager.h.kde238325 2009-04-28 08:46:11.000000000 -0500 +++ kdebase-workspace-4.4.85/libs/solid/control/networkmanager.h 2010-06-08 14:40:43.555907737 -0500 @@ -170,6 +170,10 @@ namespace Control */ void wirelessHardwareEnabledChanged(bool enabled); /** + * This signal is emitted when the status of overall networking changed + */ + void networkingEnabledChanged(bool enabled); + /** * This signal is emitted when the set of active connections changes */ void activeConnectionsChanged(); diff -up kdebase-workspace-4.4.85/solid/networkmanager-0.7/dbus/introspection/nm-manager-client.xml.kde238325 kdebase-workspace-4.4.85/solid/networkmanager-0.7/dbus/introspection/nm-manager-client.xml --- kdebase-workspace-4.4.85/solid/networkmanager-0.7/dbus/introspection/nm-manager-client.xml.kde238325 2008-05-15 13:37:15.000000000 -0500 +++ kdebase-workspace-4.4.85/solid/networkmanager-0.7/dbus/introspection/nm-manager-client.xml 2010-06-08 14:40:43.549905432 -0500 @@ -39,6 +39,12 @@ object. dbus-glib generates the same bo <arg name="sleep" type="b" direction="in"/> </method> + <method name="Enable"> + <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_enable"/> + <arg name="enable" type="b" direction="in"/> + </method> + + <property name="NetworkingEnabled" type="b" access="read"/> <property name="WirelessEnabled" type="b" access="readwrite"/> <property name="WirelessHardwareEnabled" type="b" access="read"/> <property name="ActiveConnections" type="ao" access="read"/> diff -up kdebase-workspace-4.4.85/solid/networkmanager-0.7/dbus/introspection/nm-manager.xml.kde238325 kdebase-workspace-4.4.85/solid/networkmanager-0.7/dbus/introspection/nm-manager.xml --- kdebase-workspace-4.4.85/solid/networkmanager-0.7/dbus/introspection/nm-manager.xml.kde238325 2008-05-15 13:37:15.000000000 -0500 +++ kdebase-workspace-4.4.85/solid/networkmanager-0.7/dbus/introspection/nm-manager.xml 2010-06-08 14:40:43.549905432 -0500 @@ -80,7 +80,10 @@ <method name="Sleep"> <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_sleep"/> <tp:docstring> - Control the NetworkManager daemon's sleep state. When asleep, all interfaces that it manages are deactivated. When awake, devices are available to be activated. + Control the NetworkManager daemon's sleep state. When asleep, all + interfaces that it manages are deactivated. When awake, devices are + available to be activated. This command should not be called directly + by users or clients; it is intended for system suspend/resume tracking. </tp:docstring> <arg name="sleep" type="b" direction="in"> <tp:docstring> @@ -89,6 +92,30 @@ </arg> </method> + <method name="Enable"> + <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_enable"/> + <tp:docstring> + Control whether overall networking is enabled or disabled. When + disabled, all interfaces that NM manages are deactivated. When enabled, + all managed interfaces are re-enabled and available to be activated. + This command should be used by clients that provide to users the ability + to enable/disable all networking. + </tp:docstring> + <arg name="enable" type="b" direction="in"> + <tp:docstring> + If FALSE, indicates that all networking should be disabled. If TRUE, + indicates that NetworkManager should begin managing network devices. + </tp:docstring> + </arg> + </method> + + <property name="NetworkingEnabled" type="b" access="read"> + <tp:docstring> + Indicates if overall networking is currently enabled or not. See the + Enable() method. + </tp:docstring> + </property> + <property name="WirelessEnabled" type="b" access="readwrite"> <tp:docstring> Indicates if wireless is currently enabled or not. diff -up kdebase-workspace-4.4.85/solid/networkmanager-0.7/dbus/nm-manager-clientinterface.h.kde238325 kdebase-workspace-4.4.85/solid/networkmanager-0.7/dbus/nm-manager-clientinterface.h --- kdebase-workspace-4.4.85/solid/networkmanager-0.7/dbus/nm-manager-clientinterface.h.kde238325 2009-06-17 15:06:03.000000000 -0500 +++ kdebase-workspace-4.4.85/solid/networkmanager-0.7/dbus/nm-manager-clientinterface.h 2010-06-08 14:40:43.551895445 -0500 @@ -2,7 +2,7 @@ * This file was generated by qdbusxml2cpp version 0.7 * Command line was: qdbusxml2cpp -N -m -p nm-manager-clientinterface /space/kde/sources/trunk/KDE/kdebase/workspace/solid/networkmanager-0.7/dbus/introspection/nm-manager-client.xml * - * qdbusxml2cpp is Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * qdbusxml2cpp is Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. @@ -39,6 +39,10 @@ public: inline QList<QDBusObjectPath> activeConnections() const { return qvariant_cast< QList<QDBusObjectPath> >(internalPropGet("ActiveConnections")); } + Q_PROPERTY(bool NetworkingEnabled READ networkingEnabled) + inline bool networkingEnabled() const + { return qvariant_cast< bool >(internalPropGet("NetworkingEnabled")); } + Q_PROPERTY(uint State READ state) inline uint state() const { return qvariant_cast< uint >(internalPropGet("State")); } @@ -68,6 +72,13 @@ public Q_SLOTS: // METHODS return asyncCallWithArgumentList(QLatin1String("DeactivateConnection"), argumentList); } + inline QDBusPendingReply<> Enable(bool enable) + { + QList<QVariant> argumentList; + argumentList << qVariantFromValue(enable); + return asyncCallWithArgumentList(QLatin1String("Enable"), argumentList); + } + inline QDBusPendingReply<QList<QDBusObjectPath> > GetDevices() { QList<QVariant> argumentList; diff -up kdebase-workspace-4.4.85/solid/networkmanager-0.7/manager.cpp.kde238325 kdebase-workspace-4.4.85/solid/networkmanager-0.7/manager.cpp --- kdebase-workspace-4.4.85/solid/networkmanager-0.7/manager.cpp.kde238325 2010-02-09 08:30:15.000000000 -0600 +++ kdebase-workspace-4.4.85/solid/networkmanager-0.7/manager.cpp 2010-06-08 14:40:43.552905013 -0500 @@ -49,6 +49,14 @@ NMNetworkManager::NMNetworkManager(QObje d->nmState = d->iface.state(); d->isWirelessHardwareEnabled = d->iface.wirelessHardwareEnabled(); d->isWirelessEnabled = d->iface.wirelessEnabled(); + QVariant netEnabled = d->iface.property("NetworkingEnabled"); + if (!netEnabled.isNull()) { + d->isNetworkingEnabled = netEnabled.toBool(); + d->NetworkingEnabledPropertyAvailable = true; + } else { + d->isNetworkingEnabled = !(NM_STATE_UNKNOWN == d->nmState || NM_STATE_ASLEEP == d->nmState); + d->NetworkingEnabledPropertyAvailable = false; + } connect( &d->iface, SIGNAL(DeviceAdded(const QDBusObjectPath &)), this, SLOT(deviceAdded(const QDBusObjectPath &))); connect( &d->iface, SIGNAL(DeviceRemoved(const QDBusObjectPath &)), @@ -138,7 +146,7 @@ QObject *NMNetworkManager::createNetwork bool NMNetworkManager::isNetworkingEnabled() const { Q_D(const NMNetworkManager); - return !(NM_STATE_UNKNOWN == d->nmState || NM_STATE_ASLEEP == d->nmState); + return d->isNetworkingEnabled; } bool NMNetworkManager::isWirelessEnabled() const @@ -182,7 +190,14 @@ void NMNetworkManager::deactivateConnect void NMNetworkManager::setNetworkingEnabled(bool enabled) { Q_D(NMNetworkManager); - d->iface.Sleep(!enabled); + + QDBusPendingReply<> reply = d->iface.Enable(enabled); + reply.waitForFinished(); + if (reply.isError()) { + kDebug(1441) << "Enable() D-Bus method not available:" << reply.error(); + kDebug(1441) << "Calling Sleep() instead"; + d->iface.Sleep(!enabled); + } } void NMNetworkManager::setWirelessEnabled(bool enabled) @@ -211,9 +226,19 @@ void NMNetworkManager::stateChanged(uint { Q_D(NMNetworkManager); if ( d->nmState != state ) { + + // When "NetworkingEnabled" property is not available, set isNetworkingEnabled flag and emit signal here. + // It has to be done before emitting statusChanged(), else it would cause infinite status switching. + if (!d->NetworkingEnabledPropertyAvailable) { + d->isNetworkingEnabled = !(NM_STATE_UNKNOWN == state || NM_STATE_ASLEEP == state); + emit networkingEnabledChanged(d->isNetworkingEnabled); + } + + // set new state d->nmState = state; emit statusChanged( convertNMState( state ) ); } + } void NMNetworkManager::propertiesChanged(const QVariantMap &properties) @@ -221,6 +246,7 @@ void NMNetworkManager::propertiesChanged Q_D(NMNetworkManager); kDebug(1441) << properties.keys(); QLatin1String activeConnKey("ActiveConnections"); + QLatin1String netEnabledKey("NetworkingEnabled"); QLatin1String wifiHwKey("WirelessHardwareEnabled"); QLatin1String wifiEnabledKey("WirelessEnabled"); QVariantMap::const_iterator it = properties.find(activeConnKey); @@ -248,6 +274,12 @@ void NMNetworkManager::propertiesChanged kDebug(1441) << wifiEnabledKey << d->isWirelessEnabled; emit wirelessEnabledChanged(d->isWirelessEnabled); } + it = properties.find(netEnabledKey); + if ( it != properties.end()) { + d->isNetworkingEnabled = it->toBool(); + kDebug(1441) << netEnabledKey << d->isNetworkingEnabled; + emit networkingEnabledChanged(d->isNetworkingEnabled); + } } Solid::Networking::Status NMNetworkManager::convertNMState(uint state) diff -up kdebase-workspace-4.4.85/solid/networkmanager-0.7/manager_p.h.kde238325 kdebase-workspace-4.4.85/solid/networkmanager-0.7/manager_p.h --- kdebase-workspace-4.4.85/solid/networkmanager-0.7/manager_p.h.kde238325 2008-06-10 06:41:03.000000000 -0500 +++ kdebase-workspace-4.4.85/solid/networkmanager-0.7/manager_p.h 2010-06-08 14:40:43.552905013 -0500 @@ -35,6 +35,8 @@ public: uint nmState; bool isWirelessEnabled; bool isWirelessHardwareEnabled; + bool isNetworkingEnabled; + bool NetworkingEnabledPropertyAvailable; QStringList networkInterfaces; QStringList activeConnections; };