DBus Qt bindings
Peter Hawkins
peter@hawkins.emu.id.au
Wed, 28 Jan 2004 15:23:13 +1100
Hi...
On Wed, 28 Jan 2004 02:35 pm, Zack Rusin wrote:
> On Tuesday 27 January 2004 22:19, Peter Hawkins wrote:
> > What now?
>
> 1) Don't be using private constructors.
I have to in this case. Remember I have no intention of directly using any
classes that wrap the interface - all I'm interested in is being able to use
the python bindings that already exist with a Qt event loop. It seems to me
that the simplest way to do this is to come up with an equivalent of the
relevant bit of the glib bindings, ie. a way of saying 'Here is a
DBusConnection, please look after it and look after the event delivery,
otherwise don't bother me'.
If you have a better suggestion, I'd love to hear it.
> 2) Pick your religion and pray I'll have enough time to start chasing it
> or someone else takes it.
Well, I'm hoping you or someone else who knows more about dbus can help. I
have gone to the extent of completely rewriting my own version of the Qt
bindings which supported just what I needed but it suffered from exactly the
same problem (ie. no event delivery).
> 3) Provide me some actually useful info like whether the socket
> notifiers in the integrator are actually watching and firing events and
> have me fix it.
Well, yes they are, but something isn't working (maybe to do with the main
dbus library, not the qt bindings).
I'm running
sudo ./dbus-qt-monitor --system sender=org.freedesktop.Hal
while starting up the Hal daemon, just as a source of events.
Normally, using dbus-monitor, I see this sort of thing:
peterh@warpcore:~/tmp/dbus$ sudo dbus-monitor
--systemsender=org.freedesktop.Hal
signal interface=org.freedesktop.DBus; member=ServiceAcquired;
sender=org.freedesktop.DBus
string::1.106
signal interface=org.freedesktop.Hal.Manager; member=DeviceAdded;
sender=:1.107
string:/org/freedesktop/Hal/devices/pci_1039_630
signal interface=org.freedesktop.Hal.Manager; member=DeviceAdded;
sender=:1.107
string:/org/freedesktop/Hal/devices/pci_1039_5513
... many more signals ....
When using dbus-qt-monitor (which is my copy of tools/dbus-monitor trivially
adapted to use a QApplication instead of a GMainLoop, and to call
dbus_connection_setup_with_qt_main() as described above instead of
dbus_connection_setup_with_g_main()), I see the following:
Integrator::slotRead(7)
Connection::dispatchRead()
signal interface=org.freedesktop.DBus; member=ServiceAcquired;
sender=org.freedesktop.DBus
string::1.104
Integrator::slotRead(7)
Connection::dispatchRead()
Integrator::slotRead(7)
Connection::dispatchRead()
Integrator::slotRead(7)
Connection::dispatchRead()
... endless repetition of the above two lines ....
Incidentally, normally you see a 'ServiceAcquired' signal as soon as you run
dbus-monitor, whereas here it didn't appear until after the hal daemon
startup, implying something isn't working with signal delivery.
By looking at an strace, it seems to me that the relevant data is received and
read by the process, but it is not dispatch()ed in a timely manner.
Any ideas?
=)
Peter