patch for qt/connection.cpp

Harald Fernengel harryf at gmx.com
Tue Apr 27 05:01:23 EST 2004


Hi,

that patch cleans connection.{cpp|h} up a bit and adds a new constructor 
to open a connection based on DBusBusType.

Please apply (or get me a CVS account ;))

Harald
-------------- next part --------------
Index: connection.cpp
===================================================================
RCS file: /cvs/dbus/dbus/qt/connection.cpp,v
retrieving revision 1.7
diff -u -3 -p -r1.7 connection.cpp
--- connection.cpp	28 Jan 2004 03:33:44 -0000	1.7
+++ connection.cpp	26 Apr 2004 18:55:18 -0000
@@ -29,30 +29,54 @@ using Internal::Integrator;
 
 struct Connection::Private
 {
+  Private(Connection *qq);
+  void setConnection(DBusConnection *c);
+
   DBusConnection *connection;
   int connectionSlot;
   DBusError error;
   Integrator *integrator;
   int timeout;
+  Connection *q;
 };
 
+Connection::Private::Private(Connection *qq)
+    : connection(0), connectionSlot(0), integrator(0), timeout(-1), q(qq)
+{
+    dbus_error_init(&error);
+}
+
+void Connection::Private::setConnection(DBusConnection *c)
+{
+    if (!c) {
+        qDebug("error: %s, %s", error.name, error.message);
+        dbus_error_free(&error);
+        return;
+    }
+    connection = c;
+    integrator = new Integrator(c, q);
+    connect(integrator, SIGNAL(readReady()), q, SLOT(dispatchRead()));
+}
+
 Connection::Connection( const QString& host, QObject *parent )
   : QObject( parent )
 {
-  d = new Private;
+  d = new Private(this);
 
   if ( !host.isEmpty() )
     init( host );
 }
 
+Connection::Connection(DBusBusType type, QObject* parent)
+    : QObject(parent)
+{
+  d = new Private(this);
+  d->setConnection(dbus_bus_get(type, &d->error));
+}
+
 void Connection::init( const QString& host )
 {
-  dbus_error_init( &d->error );
-  d->timeout = -1;
-  d->connection = dbus_connection_open( host.ascii(), &d->error );
-  d->integrator = new Integrator( d->connection, this );
-  connect( d->integrator, SIGNAL(readReady()),
-           SLOT(dispatchRead()) );
+  d->setConnection(dbus_connection_open(host.ascii(), &d->error));
   //dbus_connection_allocate_data_slot( &d->connectionSlot );
   //dbus_connection_set_data( d->connection, d->connectionSlot, 0, 0 );
 }
@@ -96,17 +120,13 @@ DBusConnection* Connection::connection()
 Connection::Connection( DBusConnection *connection, QObject *parent  )
   : QObject( parent )
 {
-  d = new Private;
-  dbus_error_init( &d->error );
-  d->timeout = -1;
-  d->connection = connection;
-  d->integrator = new Integrator( d->connection, this );
-  connect( d->integrator, SIGNAL(readReady()),
-           SLOT(dispatchRead()) );
+  d = new Private(this);
+  d->setConnection(connection);
 }
 
-void Connection::send( const Message& )
+void Connection::send( const Message &m )
 {
+    dbus_connection_send(d->connection, m.message(), 0);
 }
 
 void Connection::sendWithReply( const Message& )
@@ -117,6 +137,10 @@ Message Connection::sendWithReplyAndBloc
 {
   DBusMessage *reply;
   reply = dbus_connection_send_with_reply_and_block( d->connection, m.message(), d->timeout, &d->error );
+  if (dbus_error_is_set(&d->error)) {
+      qDebug("error: %s, %s", d->error.name, d->error.message);
+      dbus_error_free(&d->error);
+  }
   return Message( reply );
 }
 
Index: connection.h
===================================================================
RCS file: /cvs/dbus/dbus/qt/connection.h,v
retrieving revision 1.7
diff -u -3 -p -r1.7 connection.h
--- connection.h	26 Jan 2004 07:46:55 -0000	1.7
+++ connection.h	26 Apr 2004 18:55:18 -0000
@@ -41,6 +41,7 @@ namespace DBusQt {
   public:
     Connection( const QString& host = QString::null,
                 QObject* parent = 0);
+    Connection(DBusBusType type, QObject* parent = 0);
 
     bool isConnected() const;
     bool isAuthenticated() const;


More information about the dbus mailing list