Make QtDBus work again with D-Bus 1.0 and 1.1

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>
This commit is contained in:
Thiago Macieira 2012-10-18 16:27:35 -07:00 committed by The Qt Project
parent 221bd941ff
commit 0510fc149e
2 changed files with 10 additions and 23 deletions

View 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

View 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
#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;
#if defined(QT_LINKED_LIBDBUS)
# if DBUS_VERSION-0 >= 0x010400
can_send_type = dbus_connection_can_send_type;
# endif
#else
// run-time check if the next functions are available
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;
}