Make QtDBus work again with D-Bus 1.0 and 1.1
authorThiago Macieira <thiago.macieira@intel.com>
Thu, 18 Oct 2012 23:27:35 +0000 (16:27 -0700)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Fri, 19 Oct 2012 00:43:05 +0000 (02:43 +0200)
The dbus_get_version function was introduced in 1.2, so we'd need to
detect pre-1.2 by the absence of the function. But if we're going to
detect the presence or absence of any function, we might as well do it
on dbus_connection_can_send_type, which is the function we wanted anyway.

Change-Id: I6e17a3a8f1382c6a489490084f6e3f61aa5a1947
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
src/dbus/qdbus_symbols_p.h
src/dbus/qdbusintegrator.cpp

index a6e58e9..f51728b 100644 (file)
@@ -297,10 +297,6 @@ DEFINEFUNC(void          , dbus_message_unref, (DBusMessage   *message),
            (message), )
 
 /* dbus-misc.h */
-DEFINEFUNC(void          , dbus_get_version ,     (int *major_version_p,
-                                                   int *minor_version_p,
-                                                   int *micro_version_p),
-           (major_version_p, minor_version_p, micro_version_p), )
 DEFINEFUNC(char*         , dbus_get_local_machine_id ,  (void), (), return)
 
 
@@ -363,14 +359,6 @@ DEFINEFUNC(void        , dbus_server_unref, (DBusServer     *server),
 /* dbus-thread.h */
 DEFINEFUNC(dbus_bool_t     , dbus_threads_init_default, (), (), return)
 
-
-/* D-Bus 1.4 symbols */
-#if !defined(QT_LINKED_LIBDBUS) || (DBUS_VERSION >= 0x010400)
-DEFINEFUNC(dbus_bool_t    ,  dbus_connection_can_send_type ,               (DBusConnection             *connection,
-                                                                            int                         type),
-           (connection, type), return)
-#endif
-
 QT_END_NAMESPACE
 
 #endif // QT_NO_DBUS
index 3fb72e3..2b3ee90 100644 (file)
@@ -1687,24 +1687,23 @@ void QDBusConnectionPrivate::setPeer(DBusConnection *c, const QDBusErrorInternal
 static QDBusConnection::ConnectionCapabilities connectionCapabilies(DBusConnection *connection)
 {
     QDBusConnection::ConnectionCapabilities result = 0;
+    typedef dbus_bool_t (*can_send_type_t)(DBusConnection *, int);
+    static can_send_type_t can_send_type = 0;
 
-#if defined(QT_LINKED_LIBDBUS) && DBUS_VERSION < 0x010400
-    // no capabilities are possible
+#if defined(QT_LINKED_LIBDBUS)
+# if DBUS_VERSION-0 >= 0x010400
+    can_send_type = dbus_connection_can_send_type;
+# endif
 #else
-# if !defined(QT_LINKED_LIBDBUS)
     // run-time check if the next functions are available
-    int major, minor, micro;
-    q_dbus_get_version(&major, &minor, &micro);
-    if (major == 1 && minor < 4)
-        return result;
-# endif
+    can_send_type = (can_send_type_t)qdbus_resolve_conditionally("dbus_connection_can_send_type");
+#endif
 
 #ifndef DBUS_TYPE_UNIX_FD
 # define DBUS_TYPE_UNIX_FD int('h')
 #endif
-    if (q_dbus_connection_can_send_type(connection, DBUS_TYPE_UNIX_FD))
+    if (can_send_type && can_send_type(connection, DBUS_TYPE_UNIX_FD))
         result |= QDBusConnection::UnixFileDescriptorPassing;
-#endif
 
     return result;
 }