diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -47,7 +47,7 @@ set(libkdelibs4support_SRCS solid/networking_win.cpp kdeui/kapplication_win.cpp) else() - set(libkdelibs4support_SRCS solid/networking.cpp) + set(libkdelibs4support_SRCS solid/networking_unix.cpp) endif() @@ -203,6 +203,7 @@ kparts/factory.cpp solid/powermanagement.cpp + solid/networking.cpp ) set_source_files_properties( solid/org.freedesktop.PowerManagement.xml @@ -345,6 +346,8 @@ if(WIN32) target_link_libraries(KF5KDELibs4Support PUBLIC kdewin) + # required by moc to generate correct slot access code from solid/networking_q.h + set_target_properties(KF5KDELibs4Support PROPERTIES COMPILE_DEFINITIONS "Q_OS_WIN") endif() diff --git a/src/solid/networking.cpp b/src/solid/networking.cpp --- a/src/solid/networking.cpp +++ b/src/solid/networking.cpp @@ -24,51 +24,12 @@ #include "networking.h" #include "networking_p.h" -#include "org_kde_solid_networking_client.h" - Q_GLOBAL_STATIC(Solid::NetworkingPrivate, globalNetworkManager) -Solid::NetworkingPrivate::NetworkingPrivate() - : netStatus(Solid::Networking::Unknown), - connectPolicy(Solid::Networking::Managed), - disconnectPolicy(Solid::Networking::Managed), - iface(nullptr) -{ - QDBusServiceWatcher *watcher = new QDBusServiceWatcher("org.kde.kded5", QDBusConnection::sessionBus(), - QDBusServiceWatcher::WatchForOwnerChange, this); - connect(watcher, SIGNAL(serviceOwnerChanged(QString,QString,QString)), - this, SLOT(serviceOwnerChanged(QString,QString,QString))); - - initialize(); -} - -Solid::NetworkingPrivate::~NetworkingPrivate() -{ -} - Solid::Networking::Notifier::Notifier() { } -void Solid::NetworkingPrivate::initialize() -{ - delete iface; - iface = new OrgKdeSolidNetworkingClientInterface("org.kde.kded5", - "/modules/networkstatus", - QDBusConnection::sessionBus(), - this); - - //connect( iface, SIGNAL(statusChanged(uint)), globalNetworkManager, SIGNAL(statusChanged(Networking::Status)) ); - connect(iface, SIGNAL(statusChanged(uint)), this, SLOT(serviceStatusChanged(uint))); - - QDBusReply reply = iface->status(); - if (reply.isValid()) { - netStatus = (Solid::Networking::Status)reply.value(); - } else { - netStatus = Solid::Networking::Unknown; - } -} - uint Solid::NetworkingPrivate::status() const { return netStatus; @@ -86,54 +47,6 @@ return globalNetworkManager; } -void Solid::NetworkingPrivate::serviceStatusChanged(uint status) -{ -// qDebug() ; - netStatus = (Solid::Networking::Status)status; - switch (netStatus) { - case Solid::Networking::Unknown: - break; - case Solid::Networking::Unconnected: - case Solid::Networking::Disconnecting: - case Solid::Networking::Connecting: - if (disconnectPolicy == Solid::Networking::Managed) { - emit globalNetworkManager->shouldDisconnect(); - } else if (disconnectPolicy == Solid::Networking::OnNextStatusChange) { - setDisconnectPolicy(Solid::Networking::Manual); - emit globalNetworkManager->shouldDisconnect(); - } - break; - case Solid::Networking::Connected: - if (disconnectPolicy == Solid::Networking::Managed) { - emit globalNetworkManager->shouldConnect(); - } else if (disconnectPolicy == Solid::Networking::OnNextStatusChange) { - setConnectPolicy(Solid::Networking::Manual); - emit globalNetworkManager->shouldConnect(); - } - break; -// default: -// qDebug() << "Unrecognised status code!"; - } - emit globalNetworkManager->statusChanged(netStatus); -} - -void Solid::NetworkingPrivate::serviceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner) -{ - Q_UNUSED(name) - Q_UNUSED(oldOwner) - if (newOwner.isEmpty()) { - // kded quit on us - netStatus = Solid::Networking::Unknown; - emit globalNetworkManager->statusChanged(netStatus); - - } else { - // kded was replaced or started - initialize(); - emit globalNetworkManager->statusChanged(netStatus); - serviceStatusChanged(netStatus); - } -} - Solid::Networking::ManagementPolicy Solid::Networking::connectPolicy() { return globalNetworkManager->connectPolicy; diff --git a/src/solid/networking.cpp b/src/solid/networking_unix.cpp copy from src/solid/networking.cpp copy to src/solid/networking_unix.cpp --- a/src/solid/networking.cpp +++ b/src/solid/networking_unix.cpp @@ -26,8 +26,6 @@ #include "org_kde_solid_networking_client.h" -Q_GLOBAL_STATIC(Solid::NetworkingPrivate, globalNetworkManager) - Solid::NetworkingPrivate::NetworkingPrivate() : netStatus(Solid::Networking::Unknown), connectPolicy(Solid::Networking::Managed), @@ -44,10 +42,7 @@ Solid::NetworkingPrivate::~NetworkingPrivate() { -} - -Solid::Networking::Notifier::Notifier() -{ + delete iface; } void Solid::NetworkingPrivate::initialize() @@ -69,23 +64,6 @@ } } -uint Solid::NetworkingPrivate::status() const -{ - return netStatus; -} - -/*=========================================================================*/ - -Solid::Networking::Status Solid::Networking::status() -{ - return static_cast(globalNetworkManager->status()); -} - -Solid::Networking::Notifier *Solid::Networking::notifier() -{ - return globalNetworkManager; -} - void Solid::NetworkingPrivate::serviceStatusChanged(uint status) { // qDebug() ; @@ -97,24 +75,24 @@ case Solid::Networking::Disconnecting: case Solid::Networking::Connecting: if (disconnectPolicy == Solid::Networking::Managed) { - emit globalNetworkManager->shouldDisconnect(); + emit Solid::Networking::notifier()->shouldDisconnect(); } else if (disconnectPolicy == Solid::Networking::OnNextStatusChange) { setDisconnectPolicy(Solid::Networking::Manual); - emit globalNetworkManager->shouldDisconnect(); + emit Solid::Networking::notifier()->shouldDisconnect(); } break; case Solid::Networking::Connected: if (disconnectPolicy == Solid::Networking::Managed) { - emit globalNetworkManager->shouldConnect(); + emit Solid::Networking::notifier()->shouldConnect(); } else if (disconnectPolicy == Solid::Networking::OnNextStatusChange) { setConnectPolicy(Solid::Networking::Manual); - emit globalNetworkManager->shouldConnect(); + emit Solid::Networking::notifier()->shouldConnect(); } break; // default: // qDebug() << "Unrecognised status code!"; } - emit globalNetworkManager->statusChanged(netStatus); + emit Solid::Networking::notifier()->statusChanged(netStatus); } void Solid::NetworkingPrivate::serviceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner) @@ -124,33 +102,12 @@ if (newOwner.isEmpty()) { // kded quit on us netStatus = Solid::Networking::Unknown; - emit globalNetworkManager->statusChanged(netStatus); + emit Solid::Networking::notifier()->statusChanged(netStatus); } else { // kded was replaced or started initialize(); - emit globalNetworkManager->statusChanged(netStatus); + emit Solid::Networking::notifier()->statusChanged(netStatus); serviceStatusChanged(netStatus); } } - -Solid::Networking::ManagementPolicy Solid::Networking::connectPolicy() -{ - return globalNetworkManager->connectPolicy; -} - -void Solid::Networking::setConnectPolicy(Solid::Networking::ManagementPolicy policy) -{ - globalNetworkManager->connectPolicy = policy; -} - -Solid::Networking::ManagementPolicy Solid::Networking::disconnectPolicy() -{ - return globalNetworkManager->disconnectPolicy; -} - -void Solid::Networking::setDisconnectPolicy(Solid::Networking::ManagementPolicy policy) -{ - globalNetworkManager->disconnectPolicy = policy; -} - diff --git a/src/solid/networking_win.cpp b/src/solid/networking_win.cpp --- a/src/solid/networking_win.cpp +++ b/src/solid/networking_win.cpp @@ -25,10 +25,6 @@ #include "networking.h" #include "networking_p.h" -#include "org_kde_solid_networking_client.h" - -Q_GLOBAL_STATIC(Solid::NetworkingPrivate, globalNetworkManager) - Solid::NetworkingPrivate::NetworkingPrivate() : netStatus(Solid::Networking::Unknown), connectPolicy(Solid::Networking::Managed), @@ -43,53 +39,32 @@ m_manager->deleteLater(); } -Solid::Networking::Notifier::Notifier() -{ -} - void Solid::NetworkingPrivate::initialize() { netStatus = m_manager->isOnline() ? Solid::Networking::Connected : Solid::Networking::Unconnected; connect(m_manager, SIGNAL(onlineStateChanged(bool)), this, SLOT(serviceStatusChanged(bool))); } -uint Solid::NetworkingPrivate::status() const -{ - return netStatus; -} - -/*=========================================================================*/ - -Solid::Networking::Status Solid::Networking::status() -{ - return static_cast(globalNetworkManager->status()); -} - -Solid::Networking::Notifier *Solid::Networking::notifier() -{ - return globalNetworkManager; -} - void Solid::NetworkingPrivate::serviceStatusChanged(bool status) { // kDebug( 921 ) ; netStatus = status ? Solid::Networking::Connected : Solid::Networking::Unconnected; switch (netStatus) { case Solid::Networking::Unknown: break; case Solid::Networking::Unconnected: - emit globalNetworkManager->shouldDisconnect(); + emit Solid::Networking::notifier()->shouldDisconnect(); break; case Solid::Networking::Connected: - emit globalNetworkManager->shouldConnect(); + emit Solid::Networking::notifier()->shouldConnect(); break; default: break; // kDebug( 921 ) << "Unrecognised status code!"; } - emit globalNetworkManager->statusChanged(netStatus); + emit Solid::Networking::notifier()->statusChanged(netStatus); } void Solid::NetworkingPrivate::serviceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner) @@ -99,37 +74,12 @@ if (newOwner.isEmpty()) { // kded quit on us netStatus = Solid::Networking::Unknown; - emit globalNetworkManager->statusChanged(netStatus); + emit Solid::Networking::notifier()->statusChanged(netStatus); } else { // kded was replaced or started initialize(); - emit globalNetworkManager->statusChanged(netStatus); - serviceStatusChanged(netStatus); + emit Solid::Networking::notifier()->statusChanged(netStatus); + serviceStatusChanged(netStatus == Solid::Networking::Connected); } } - -Solid::Networking::ManagementPolicy Solid::Networking::connectPolicy() -{ - return globalNetworkManager->connectPolicy; -} - -void Solid::Networking::setConnectPolicy(Solid::Networking::ManagementPolicy policy) -{ - globalNetworkManager->connectPolicy = policy; -} - -Solid::Networking::ManagementPolicy Solid::Networking::disconnectPolicy() -{ - return globalNetworkManager->disconnectPolicy; -} - -void Solid::Networking::setDisconnectPolicy(Solid::Networking::ManagementPolicy policy) -{ - globalNetworkManager->disconnectPolicy = policy; -} - -// CMake automoc only looks at .h and _p.h, therefore we have -// to add theses include to make sure networking.h and networking_p.h are automoc'd -#include "moc_networking.cpp" -#include "moc_networking_p.cpp"