Re: PropertiesChanged
- From: Marcin Klekot <m klekot sirrix com>
- To: Dan Williams <dcbw redhat com>
- Cc: "networkmanager-list gnome org" <networkmanager-list gnome org>
- Subject: Re: PropertiesChanged
- Date: Mon, 29 Mar 2010 13:28:31 +0200
Hi Dan,
thanks for your answer. With the dbus-monitor I see the
PropertiesChanged signal on the interface
org.freedesktop.NetworkManager.AccessPoint, but not in my Qt Application.
The dbus-monitor output is:
signal sender=:1.5 -> dest=(null destination) serial=3364
path=/org/freedesktop/NetworkManager/AccessPoint/4;
interface=org.freedesktop.NetworkManager.AccessPoint;
member=PropertiesChanged
array [
dict entry(
string "Strength"
variant byte 40
)
]
Let me explain the steps i did to establish the DBus connection in my Qt
App, maybe someone see a mistake.
First I created the interface class from the nm-access-point.xml
introspection file. Because the qdbusxml2cpp compiler does not
understand the type a{sv}, I added an annotation as follows:
<signal name="PropertiesChanged">
<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="Dict"/>
<arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
The created header file is:
*
* This file was generated by qdbusxml2cpp version 0.7
* Command line was: qdbusxml2cpp nm-access-point.xml -p
AccessPointInterface
*
* qdbusxml2cpp is Copyright (C) 2009 Nokia Corporation and/or its
subsidiary(-ies).
*
* This is an auto-generated file.
* Do not edit! All changes made to it will be lost.
*/
#ifndef ACCESSPOINTINTERFACE_H_1268036583
#define ACCESSPOINTINTERFACE_H_1268036583
#include <QtCore/QObject>
#include <QtCore/QByteArray>
#include <QtCore/QList>
#include <QtCore/QMap>
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QVariant>
#include <QtDBus/QtDBus>
typedef QMap<QString, QVariant > Dict; //added manualy
Q_DECLARE_METATYPE (Dict) //added manualy
/*
* Proxy class for interface org.freedesktop.NetworkManager.AccessPoint
*/
class OrgFreedesktopNetworkManagerAccessPointInterface: public
QDBusAbstractInterface
{
Q_OBJECT
public:
static inline const char *staticInterfaceName()
{ return "org.freedesktop.NetworkManager.AccessPoint"; }
public:
OrgFreedesktopNetworkManagerAccessPointInterface(const QString
&service, const QString &path, const QDBusConnection &connection,
QObject *parent = 0);
~OrgFreedesktopNetworkManagerAccessPointInterface();
Q_PROPERTY(uint Flags READ flags)
inline uint flags() const
{ return qvariant_cast< uint >(internalPropGet("Flags")); }
/* some loc throwed away */
Q_PROPERTY(uint WpaFlags READ wpaFlags)
inline uint wpaFlags() const
{ return qvariant_cast< uint >(internalPropGet("WpaFlags")); }
//public Q_SLOTS: // METHODS
Q_SIGNALS: // SIGNALS
void PropertiesChanged(Dict properties);
};
#endif
In the source code I defined Dict as follows:
typedef QMap<QString, QVariant > Dict;
Q_DECLARE_METATYPE (Dict)
and registered it with qDBusRegisterMetaType<Dict>() in the constructor
of the interface class.
After creating an instance of that class I connected the
PropertiesChanged signal to an appropriate slot with:
connect(m_pAccesspointInterface, SIGNAL(PropertiesChanged(Dict)), this,
SLOT(on_APPropertiesChanged(Dict)));
I can read the properties (for example with strength()) and the returned
values corresponds to the values reported by dbus-monitor, but the
signal PropertiesChanged is not signaled.
I did the same steps with nm-exported-connection.xml with the following
annotation for the parameter in the Updated signal:
<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="DictOfDicts"/>
and the appropriate typedef in my source code:
typedef QMap<QString, QVariant > Dict;
Q_DECLARE_METATYPE (Dict)
typedef QMap<QString, Dict > DictOfDicts;
Q_DECLARE_METATYPE (DictOfDicts)
On this interface my application gets the Updated signal correctly.
Any suggestions?
Dan Williams schrieb:
> On Fri, 2010-03-19 at 17:55 +0100, Marcin Klekot wrote:
>> Hi All,
>>
>> i am writing a qt based NM applet to configure wireless connections.
>> With qdbusxml2cpp I created all needed interface classes from the
>> introspection xml files. With this classes i can now talk to
>> networkmanager over dubs (adding and deleting connections, connecting
>> and disconnecting, and so on)
>> The problem I have is that on no interface PropertiesChanged is
>> signaled. Other signals like 'NewConnection' on 'NetworkManagerSetting'
>> or 'Updated' on 'NetworkManagerSettings.Connection' are signaled
>> correctly.
>> I assumed that PropertiesChanged would be signaled on
>> NetworkManager.Connection. Active if the connection state changes but
>> this is not the case. PropertiesChanged is also not signaled on
>> NetworkManager.Device.Wireless when the appropriate device connects or
>> disconnects. On the other hand AccessPointAdded is signaled correctly.
>>
>> Any suggestions why PropertiesChanged is not signaled?
>
> I'm very sure you should be getting these signals. I've verified that
> the Bitrate property of the the Device.Wireless interface does get a
> PropertiesChanged signal emitted when it changes.
>
> Run "dbus-monitor --system" and walk away from your AP, for example.
> The bitrate should drop the farther away you get.
>
> Dan
>
>
>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]