diff options
| -rw-r--r-- | ChangeLog | 12 | ||||
| -rw-r--r-- | configure.in | 21 | ||||
| -rw-r--r-- | dbus/dbus-bus.c | 32 | ||||
| -rw-r--r-- | dbus/dbus-threads.c | 3 | ||||
| -rw-r--r-- | doc/Makefile.am | 6 | ||||
| -rw-r--r-- | qt/Makefile.am | 5 | ||||
| -rw-r--r-- | test/test-service.c | 37 | 
7 files changed, 91 insertions, 25 deletions
| @@ -1,5 +1,17 @@  2003-04-06  Havoc Pennington  <hp@pobox.com> +	* qt/Makefile.am (dbusinclude_HEADERS): install dbus-qt.h,  +	from Colin Walters + +	* configure.in: fixes to Qt detection from Colin Walters + +	* doc/Makefile.am: Only remove generated docbook dirs if they +	exist, from Colin Walters + +	* dbus/dbus-bus.c: change how we set well-known connections to +	NULL, so that it works if a single connection is stored in  +	two well-known array slots. +  	* test/Makefile.am: remove a lot of stuff that isn't immediately  	useful, it's in CVS history if we want it. diff --git a/configure.in b/configure.in index e908d3ee..907d78ca 100644 --- a/configure.in +++ b/configure.in @@ -350,9 +350,22 @@ AC_SUBST(DBUS_GLIB_THREADS_LIBS)  # Qt detection  have_qt=no -if test -n "$QTDIR" -a -f $QTDIR/include/qglobal.h; then +AC_MSG_CHECKING([for qglobal.h]) +if test -n "$QTDIR" -a -f "$QTDIR/include/qglobal.h"; then      have_qt=yes -    DBUS_QT_CXXFLAGS=-I$QTDIR/include +    DBUS_QT_CXXFLAGS="-I$QTDIR/include" +else +    for dir in "${prefix}/include/qt" "/usr/include/qt3" "/usr/include/qt" "/usr/lib/qt/include"; do +        if test -f "$dir/qglobal.h"; then +            have_qt=yes +            DBUS_QT_CXXFLAGS="-I$dir" +       fi +    done +fi +if test x"$have_qt" = x"yes"; then +   AC_MSG_RESULT([found]) +else +   AC_MSG_RESULT([not found])  fi  dnl linking to kdecore will give us a bit of help from libtool @@ -360,10 +373,10 @@ if (! kde-config >& /dev/null); then      have_qt=no  else      kdelibs=`kde-config --install lib --expandvars 2>/dev/null` -    if test -z $kdelibs -a -f $kdelibs/libkdecore.la; then +    if test -z $kdelibs -o ! -f $kdelibs/libkdecore.la; then          have_qt=no      else -        DBUS_QT_LIBS=$kdelibs/libkdecore.la +        DBUS_QT_LIBS="$kdelibs/libkdecore.la"      fi  fi diff --git a/dbus/dbus-bus.c b/dbus/dbus-bus.c index df883f51..c16ceeb4 100644 --- a/dbus/dbus-bus.c +++ b/dbus/dbus-bus.c @@ -50,9 +50,10 @@   */  typedef struct  { +  DBusConnection *connection; /**< Connection we're associated with */    char *base_service; /**< Base service name of this connection */ -  DBusConnection **connection; /**< Pointer to bus_connections entry */ +  unsigned int is_well_known : 1; /**< Is one of the well-known connections in our global array */  } BusData;  /** The slot we have reserved to store BusData @@ -120,10 +121,14 @@ init_connections_unlocked (void)    if (!initialized)      {        const char *s; -       -      bus_connections[0] = NULL; -      bus_connections[1] = NULL; -      bus_connections[2] = NULL; +      int i; + +      i = 0; +      while (i < N_BUS_TYPES) +        { +          bus_connections[i] = NULL; +          ++i; +        }        /* Don't init these twice, we may run this code twice if         * init_connections_unlocked() fails midway through. @@ -238,10 +243,19 @@ bus_data_free (void *data)  {    BusData *bd = data; -  if (bd->connection) +  if (bd->is_well_known)      { +      int i;        _DBUS_LOCK (bus); -      *bd->connection = NULL; +      /* We may be stored in more than one slot */ +      i = 0; +      while (i < N_BUS_TYPES) +        { +          if (bus_connections[i] == bd->connection) +            bus_connections[i] = NULL; + +          ++i; +        }        _DBUS_UNLOCK (bus);      } @@ -268,6 +282,8 @@ ensure_bus_data (DBusConnection *connection)            data_slot_unref ();            return NULL;          } + +      bd->connection = connection;        if (!dbus_connection_set_data (connection, bus_data_slot, bd,                                       bus_data_free)) @@ -385,7 +401,7 @@ dbus_bus_get (DBusBusType  type,    bd = ensure_bus_data (connection);    _dbus_assert (bd != NULL); -  bd->connection = &bus_connections[type]; +  bd->is_well_known = TRUE;    _DBUS_UNLOCK (bus);    return connection; diff --git a/dbus/dbus-threads.c b/dbus/dbus-threads.c index e8b9f3cd..a573a1ec 100644 --- a/dbus/dbus-threads.c +++ b/dbus/dbus-threads.c @@ -350,6 +350,7 @@ dbus_threads_init (const DBusThreadFunctions *functions)    return TRUE;  } +/** @} */  #ifdef DBUS_BUILD_TESTS  /** Fake mutex used for debugging */ @@ -489,5 +490,3 @@ _dbus_threads_init_debug (void)  }  #endif /* DBUS_BUILD_TESTS */ - -/** @} */ diff --git a/doc/Makefile.am b/doc/Makefile.am index 2761155d..5a3a0a28 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -14,12 +14,12 @@ endif  dbus-specification.html: dbus-specification.sgml  	db2html -o . --nochunks dbus-specification.sgml &&	\  	rm -r dbus-specification/stylesheet-images &&		\ -	rmdir dbus-specification +	(if test -d dbus-specification ; then rmdir dbus-specification ; fi)  dbus-test-plan.html: dbus-test-plan.sgml -	db2html -o . --nochunks dbus-test-plan.sgml &&	\ +	db2html -o . --nochunks dbus-test-plan.sgml &&		\  	rm -r dbus-test-plan/stylesheet-images &&		\ -	rmdir dbus-test-plan +	(if test -d dbus-test-plan ; then rmdir dbus-test-plan ; fi)  maintainer-clean-local:  	rm -f dbus-test-plan.html diff --git a/qt/Makefile.am b/qt/Makefile.am index f23e1ddd..97b67f7b 100644 --- a/qt/Makefile.am +++ b/qt/Makefile.am @@ -1,7 +1,12 @@  INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_QT_CXXFLAGS) +dbusincludedir=$(includedir)/dbus-1.0/dbus +  lib_LTLIBRARIES=libdbus-qt-1.la +dbusinclude_HEADERS=				\ +	dbus-qt.h +  libdbus_qt_1_la_SOURCES = 			\  	dbus-qthread.cpp diff --git a/test/test-service.c b/test/test-service.c index 9e06b604..a1f2ae34 100644 --- a/test/test-service.c +++ b/test/test-service.c @@ -11,10 +11,8 @@ die (const char *message)  }  static DBusHandlerResult -echo_handler (DBusMessageHandler *handler, -              DBusConnection     *connection, -              DBusMessage        *message, -              void               *user_data) +handle_echo (DBusConnection     *connection, +             DBusMessage        *message)  {    DBusError error;    DBusMessage *reply; @@ -59,6 +57,25 @@ echo_handler (DBusMessageHandler *handler,    return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS;  } +static DBusHandlerResult +filter_func (DBusMessageHandler *handler, +             DBusConnection     *connection, +             DBusMessage        *message, +             void               *user_data) +{ +  if (dbus_message_name_is (message, "org.freedesktop.DBus.TestSuiteEcho")) +    return handle_echo (connection, message); +  else if (dbus_message_name_is (message, DBUS_MESSAGE_LOCAL_DISCONNECT)) +    { +      _dbus_loop_quit (loop); +      return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS; +    } +  else +    { +      return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS; +    } +} +  int  main (int    argc,        char **argv) @@ -66,7 +83,10 @@ main (int    argc,    DBusConnection *connection;    DBusError error;    DBusMessageHandler *handler; -  const char *to_handle[] = { "org.freedesktop.DBus.TestSuiteEcho" }; +  const char *to_handle[] = { +    "org.freedesktop.DBus.TestSuiteEcho", +    DBUS_MESSAGE_LOCAL_DISCONNECT, +  };    int result;    dbus_error_init (&error); @@ -86,11 +106,12 @@ main (int    argc,    if (!test_connection_setup (loop, connection))      die ("No memory\n"); -  handler = dbus_message_handler_new (echo_handler, NULL, NULL); +  handler = dbus_message_handler_new (filter_func, NULL, NULL);    if (handler == NULL)      die ("No memory"); -  if (!dbus_connection_register_handler (connection, handler, to_handle, 1)) +  if (!dbus_connection_register_handler (connection, handler, to_handle, +                                         _DBUS_N_ELEMENTS (to_handle)))      die ("No memory");    result = dbus_bus_acquire_service (connection, "org.freedesktop.DBus.TestSuiteEchoService", @@ -106,7 +127,7 @@ main (int    argc,    _dbus_loop_run (loop);    dbus_connection_unref (connection); - +      dbus_message_handler_unref (handler);    _dbus_loop_unref (loop); | 
