Magellan Linux

Annotation of /trunk/kdebase/patches/kdebase-3.5.5-dbus060.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 144 - (hide annotations) (download)
Tue May 8 20:06:05 2007 UTC (17 years, 1 month ago) by niro
File size: 39619 byte(s)
-import

1 niro 144 diff -Naur kdebase-3.5.5/kioslave/media/configure.in.in kdebase-3.5.5.patched/kioslave/media/configure.in.in
2     --- kdebase-3.5.5/kioslave/media/configure.in.in 2006-10-01 19:31:54.000000000 +0200
3     +++ kdebase-3.5.5.patched/kioslave/media/configure.in.in 2006-10-19 11:47:41.000000000 +0200
4     @@ -97,70 +97,6 @@
5    
6     AC_SUBST(DBUS_INCS)
7     AC_SUBST(DBUS_LIBS)
8     -
9     -########### Check for DBus-Qt3 bindings
10     -
11     - AC_MSG_CHECKING(for DBus-Qt3 bindings)
12     -
13     - dbusqt_inc=NOTFOUND
14     - dbusqt_lib=NOTFOUND
15     - dbusqt=NOTFOUND
16     -
17     - search_incs="$kde_includes $kde_extra_includes /usr/include /usr/include/dbus-1.0 /usr/local/include /usr/local/include/dbus-1.0"
18     - AC_FIND_FILE(dbus/connection.h, $search_incs, dbusqt_incdir)
19     -
20     - if test -r $dbusqt_incdir/dbus/connection.h ; then
21     - have_qt_patch=0
22     - grep dbus_connection_setup_with_qt_main $dbusqt_incdir/dbus/connection.h \
23     - > /dev/null 2>&1 && have_qt_patch=1
24     - if test $have_qt_patch = 1 ; then
25     - DBUSQT_INCS="-I$dbusqt_incdir"
26     - dbusqt_inc=FOUND
27     - fi
28     - fi
29     -
30     - search_libs="$kde_libraries $kde_extra_libs /usr/lib$kdelibsuff /usr/local/lib$kdelibsuff"
31     - AC_FIND_FILE(libdbus-qt-1.so, $search_libs, dbusqt_libdir)
32     -
33     - if test -r $dbusqt_libdir/libdbus-qt-1.so ; then
34     - DBUSQT_LIBS="-L$dbusqt_libdir -ldbus-qt-1"
35     - dbusqt_lib=FOUND
36     - fi
37     -
38     - if test $dbusqt_inc != FOUND || test $dbusqt_lib != FOUND ; then
39     -
40     - search_incs="`pkg-config --cflags dbus-1 |sed 's/-I//g'`"
41     - AC_FIND_FILE(dbus/connection.h, $search_incs, dbusqt_incdir)
42     - if test -r $dbusqt_incdir/dbus/connection.h ; then
43     - have_qt_patch=0
44     - grep dbus_connection_setup_with_qt_main $dbusqt_incdir/dbus/connection.h \
45     - > /dev/null 2>&1 && have_qt_patch=1
46     - if test $have_qt_patch = 1 ; then
47     - DBUSQT_INCS="-I$dbusqt_incdir"
48     - dbusqt_inc=FOUND
49     - fi
50     - fi
51     -
52     - search_libs="`pkg-config --libs dbus-1 --libs-only-L | sed 's/-L//g'`"
53     - AC_FIND_FILE(libdbus-qt-1.so, $search_libs, dbusqt_libdir)
54     -
55     - if test -r $dbusqt_libdir/libdbus-qt-1.so ; then
56     - DBUSQT_LIBS="-L$dbusqt_libdir -ldbus-qt-1"
57     - dbusqt_lib=FOUND
58     - fi
59     -
60     - fi
61     -
62     -
63     - if test $dbusqt_inc = FOUND && test $dbusqt_lib = FOUND ; then
64     - AC_MSG_RESULT(headers $dbusqt_incdir libraries $dbusqt_libdir)
65     - dbusqt=FOUND
66     - else
67     - AC_MSG_RESULT(searched but not found)
68     - fi
69     -
70     - AC_SUBST(DBUSQT_INCS)
71     - AC_SUBST(DBUSQT_LIBS)
72     fi
73    
74     ########### Check if media HAL backend sould be compiled
75     @@ -168,7 +104,7 @@
76     AC_MSG_CHECKING(if the HAL backend for media:/ should be compiled)
77    
78     HALBACKEND=no
79     -if test "x$hal" = "xFOUND" && test "x$dbus" = "xFOUND" && test "x$dbusqt" = "xFOUND" ; then
80     +if test "x$hal" = "xFOUND" && test "x$dbus" = "xFOUND" ; then
81     AC_DEFINE_UNQUOTED([COMPILE_HALBACKEND],1, [media HAL backend compilation])
82     HALBACKEND=yes
83     AC_SUBST(HALBACKEND)
84     diff -Naur kdebase-3.5.5/kioslave/media/mediamanager/connection.cpp kdebase-3.5.5.patched/kioslave/media/mediamanager/connection.cpp
85     --- kdebase-3.5.5/kioslave/media/mediamanager/connection.cpp 1970-01-01 01:00:00.000000000 +0100
86     +++ kdebase-3.5.5.patched/kioslave/media/mediamanager/connection.cpp 2006-10-19 11:37:12.000000000 +0200
87     @@ -0,0 +1,168 @@
88     +// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
89     +/* connection.cpp: Qt wrapper for DBusConnection
90     + *
91     + * Copyright (C) 2003 Zack Rusin <zack@kde.org>
92     + *
93     + * Licensed under the Academic Free License version 2.0
94     + *
95     + * This program is free software; you can redistribute it and/or modify
96     + * it under the terms of the GNU General Public License as published by
97     + * the Free Software Foundation; either version 2 of the License, or
98     + * (at your option) any later version.
99     + *
100     + * This program is distributed in the hope that it will be useful,
101     + * but WITHOUT ANY WARRANTY; without even the implied warranty of
102     + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
103     + * GNU General Public License for more details.
104     + *
105     + * You should have received a copy of the GNU General Public License
106     + * along with this program; if not, write to the Free Software
107     + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
108     + *
109     + */
110     +#include "connection.h"
111     +
112     +using namespace DBusQt;
113     +
114     +#include "integrator.h"
115     +using Internal::Integrator;
116     +
117     +struct Connection::Private
118     +{
119     + Private( Connection *qq );
120     + void setConnection( DBusConnection *c );
121     + DBusConnection *connection;
122     + int connectionSlot;
123     + DBusError error;
124     + Integrator *integrator;
125     + int timeout;
126     + Connection *q;
127     +};
128     +
129     +Connection::Private::Private( Connection *qq )
130     + : connection( 0 ), connectionSlot( 0 ), integrator( 0 ),
131     + timeout( -1 ), q( qq )
132     +{
133     + dbus_error_init( &error );
134     +}
135     +
136     +void Connection::Private::setConnection( DBusConnection *c )
137     +{
138     + if (!c) {
139     + qDebug( "error: %s, %s", error.name, error.message );
140     + dbus_error_free( &error );
141     + return;
142     + }
143     + connection = c;
144     + integrator = new Integrator( c, q );
145     + connect( integrator, SIGNAL(readReady()), q, SLOT(dispatchRead()) );
146     +}
147     +
148     +Connection::Connection( QObject *parent )
149     + : QObject( parent )
150     +{
151     + d = new Private( this );
152     +}
153     +
154     +Connection::Connection( const QString& host, QObject *parent )
155     + : QObject( parent )
156     +{
157     + d = new Private( this );
158     +
159     + if ( !host.isEmpty() )
160     + init( host );
161     +}
162     +
163     +Connection::Connection( DBusBusType type, QObject* parent )
164     + : QObject( parent )
165     +{
166     + d = new Private( this );
167     + d->setConnection( dbus_bus_get(type, &d->error) );
168     +}
169     +
170     +void Connection::init( const QString& host )
171     +{
172     + d->setConnection( dbus_connection_open( host.ascii(), &d->error) );
173     + //dbus_connection_allocate_data_slot( &d->connectionSlot );
174     + //dbus_connection_set_data( d->connection, d->connectionSlot, 0, 0 );
175     +}
176     +
177     +bool Connection::isConnected() const
178     +{
179     + return dbus_connection_get_is_connected( d->connection );
180     +}
181     +
182     +bool Connection::isAuthenticated() const
183     +{
184     + return dbus_connection_get_is_authenticated( d->connection );
185     +}
186     +
187     +void Connection::open( const QString& host )
188     +{
189     + if ( host.isEmpty() ) return;
190     +
191     + init( host );
192     +}
193     +
194     +void Connection::close()
195     +{
196     + dbus_connection_close( d->connection );
197     +}
198     +
199     +void Connection::flush()
200     +{
201     + dbus_connection_flush( d->connection );
202     +}
203     +
204     +void Connection::dispatchRead()
205     +{
206     + while ( dbus_connection_dispatch( d->connection ) == DBUS_DISPATCH_DATA_REMAINS )
207     + ;
208     +}
209     +
210     +DBusConnection* Connection::connection() const
211     +{
212     + return d->connection;
213     +}
214     +
215     +Connection::Connection( DBusConnection *connection, QObject *parent )
216     + : QObject( parent )
217     +{
218     + d = new Private(this);
219     + d->setConnection(connection);
220     +}
221     +
222     +void Connection::send( const Message &m )
223     +{
224     + dbus_connection_send(d->connection, m.message(), 0);
225     +}
226     +
227     +void Connection::sendWithReply( const Message& )
228     +{
229     +}
230     +
231     +Message Connection::sendWithReplyAndBlock( const Message &m )
232     +{
233     + DBusMessage *reply;
234     + reply = dbus_connection_send_with_reply_and_block( d->connection, m.message(), d->timeout, &d->error );
235     + if (dbus_error_is_set(&d->error)) {
236     + qDebug("error: %s, %s", d->error.name, d->error.message);
237     + dbus_error_free(&d->error);
238     + }
239     + return Message( reply );
240     +}
241     +
242     +void* Connection::virtual_hook( int, void* )
243     +{
244     +}
245     +
246     +void Connection::dbus_connection_setup_with_qt_main (DBusConnection *connection)
247     +{
248     + d->setConnection( connection );
249     +}
250     +
251     +
252     +
253     +/////////////////////////////////////////////////////////
254     +
255     +#include "connection.moc"
256     diff -Naur kdebase-3.5.5/kioslave/media/mediamanager/connection.h kdebase-3.5.5.patched/kioslave/media/mediamanager/connection.h
257     --- kdebase-3.5.5/kioslave/media/mediamanager/connection.h 1970-01-01 01:00:00.000000000 +0100
258     +++ kdebase-3.5.5.patched/kioslave/media/mediamanager/connection.h 2006-10-19 11:37:12.000000000 +0200
259     @@ -0,0 +1,86 @@
260     +// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
261     +/* connection.h: Qt wrapper for DBusConnection
262     + *
263     + * Copyright (C) 2003 Zack Rusin <zack@kde.org>
264     + *
265     + * Licensed under the Academic Free License version 2.1
266     + *
267     + * This program is free software; you can redistribute it and/or modify
268     + * it under the terms of the GNU General Public License as published by
269     + * the Free Software Foundation; either version 2 of the License, or
270     + * (at your option) any later version.
271     + *
272     + * This program is distributed in the hope that it will be useful,
273     + * but WITHOUT ANY WARRANTY; without even the implied warranty of
274     + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
275     + * GNU General Public License for more details.
276     + *
277     + * You should have received a copy of the GNU General Public License
278     + * along with this program; if not, write to the Free Software
279     + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
280     + *
281     + */
282     +#ifndef DBUS_QT_CONNECTION_H
283     +#define DBUS_QT_CONNECTION_H
284     +
285     +/* We acknowledge the the dbus API is unstable */
286     +#define DBUS_API_SUBJECT_TO_CHANGE
287     +
288     +#include "message.h"
289     +
290     +#include <qobject.h>
291     +#include <qstring.h>
292     +
293     +#include "dbus/dbus.h"
294     +
295     +namespace DBusQt {
296     + namespace Internal {
297     + class Integrator;
298     + }
299     +
300     + class Connection : public QObject
301     + {
302     + Q_OBJECT
303     + public:
304     + Connection( QObject *parent =0 );
305     + Connection( const QString& host,
306     + QObject *parent = 0 );
307     + Connection( DBusBusType type, QObject* parent = 0 );
308     +
309     + bool isConnected() const;
310     + bool isAuthenticated() const;
311     +
312     + Message borrowMessage();
313     + Message popMessage();
314     + void stealBorrowMessage( const Message& );
315     + void dbus_connection_setup_with_qt_main (DBusConnection *connection);
316     +
317     + public slots:
318     + void open( const QString& );
319     + void close();
320     + void flush();
321     + void send( const Message& );
322     + void sendWithReply( const Message& );
323     + Message sendWithReplyAndBlock( const Message& );
324     +
325     + protected slots:
326     + void dispatchRead();
327     +
328     + protected:
329     + void init( const QString& host );
330     + virtual void *virtual_hook( int id, void *data );
331     +
332     + private:
333     + friend class Internal::Integrator;
334     + DBusConnection *connection() const;
335     + Connection( DBusConnection *connection, QObject *parent );
336     +
337     + private:
338     + struct Private;
339     + Private *d;
340     + };
341     +
342     +}
343     +
344     +
345     +#endif
346     diff -Naur kdebase-3.5.5/kioslave/media/mediamanager/halbackend.h kdebase-3.5.5.patched/kioslave/media/mediamanager/halbackend.h
347     --- kdebase-3.5.5/kioslave/media/mediamanager/halbackend.h 2006-07-22 10:15:45.000000000 +0200
348     +++ kdebase-3.5.5.patched/kioslave/media/mediamanager/halbackend.h 2006-10-19 11:37:12.000000000 +0200
349     @@ -40,7 +40,7 @@
350     /* We acknowledge the the dbus API is unstable */
351     #define DBUS_API_SUBJECT_TO_CHANGE
352     /* DBus-Qt bindings */
353     -#include <dbus/connection.h>
354     +#include <connection.h>
355     /* HAL libraries */
356     #include <libhal.h>
357     #include <libhal-storage.h>
358     diff -Naur kdebase-3.5.5/kioslave/media/mediamanager/integrator.cpp kdebase-3.5.5.patched/kioslave/media/mediamanager/integrator.cpp
359     --- kdebase-3.5.5/kioslave/media/mediamanager/integrator.cpp 1970-01-01 01:00:00.000000000 +0100
360     +++ kdebase-3.5.5.patched/kioslave/media/mediamanager/integrator.cpp 2006-10-19 11:37:12.000000000 +0200
361     @@ -0,0 +1,244 @@
362     +// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
363     +/* integrator.h: integrates D-BUS into Qt event loop
364     + *
365     + * Copyright (C) 2003 Zack Rusin <zack@kde.org>
366     + *
367     + * Licensed under the Academic Free License version 2.0
368     + *
369     + * This program is free software; you can redistribute it and/or modify
370     + * it under the terms of the GNU General Public License as published by
371     + * the Free Software Foundation; either version 2 of the License, or
372     + * (at your option) any later version.
373     + *
374     + * This program is distributed in the hope that it will be useful,
375     + * but WITHOUT ANY WARRANTY; without even the implied warranty of
376     + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
377     + * GNU General Public License for more details.
378     + *
379     + * You should have received a copy of the GNU General Public License
380     + * along with this program; if not, write to the Free Software
381     + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
382     + *
383     + */
384     +#include "integrator.h"
385     +#include "connection.h"
386     +
387     +#include <qtimer.h>
388     +#include <qsocketnotifier.h>
389     +#include <qintdict.h>
390     +#include <qptrlist.h>
391     +
392     +namespace DBusQt
393     +{
394     +namespace Internal {
395     +
396     +struct Watch {
397     + Watch(): readSocket( 0 ), writeSocket( 0 ) { }
398     +
399     + DBusWatch *watch;
400     + QSocketNotifier *readSocket;
401     + QSocketNotifier *writeSocket;
402     +};
403     +
404     +//////////////////////////////////////////////////////////////
405     +dbus_bool_t dbusAddWatch( DBusWatch *watch, void *data )
406     +{
407     + Integrator *con = static_cast<Integrator*>( data );
408     + con->addWatch( watch );
409     + return true;
410     +}
411     +void dbusRemoveWatch( DBusWatch *watch, void *data )
412     +{
413     + Integrator *con = static_cast<Integrator*>( data );
414     + con->removeWatch( watch );
415     +}
416     +
417     +void dbusToggleWatch( DBusWatch *watch, void *data )
418     +{
419     + Integrator *itg = static_cast<Integrator*>( data );
420     + if ( dbus_watch_get_enabled( watch ) )
421     + itg->addWatch( watch );
422     + else
423     + itg->removeWatch( watch );
424     +}
425     +
426     +dbus_bool_t dbusAddTimeout( DBusTimeout *timeout, void *data )
427     +{
428     + if ( !dbus_timeout_get_enabled(timeout) )
429     + return true;
430     +
431     + Integrator *itg = static_cast<Integrator*>( data );
432     + itg->addTimeout( timeout );
433     + return true;
434     +}
435     +
436     +void dbusRemoveTimeout( DBusTimeout *timeout, void *data )
437     +{
438     + Integrator *itg = static_cast<Integrator*>( data );
439     + itg->removeTimeout( timeout );
440     +}
441     +
442     +void dbusToggleTimeout( DBusTimeout *timeout, void *data )
443     +{
444     + Integrator *itg = static_cast<Integrator*>( data );
445     +
446     + if ( dbus_timeout_get_enabled( timeout ) )
447     + itg->addTimeout( timeout );
448     + else
449     + itg->removeTimeout( timeout );
450     +}
451     +
452     +void dbusWakeupMain( void* )
453     +{
454     +}
455     +
456     +void dbusNewConnection( DBusServer *server,
457     + DBusConnection *new_connection,
458     + void *data )
459     +{
460     + Integrator *itg = static_cast<Integrator*>( data );
461     + itg->handleConnection( new_connection );
462     +}
463     +/////////////////////////////////////////////////////////////
464     +
465     +Timeout::Timeout( QObject *parent, DBusTimeout *t )
466     + : QObject( parent ), m_timeout( t )
467     +{
468     + m_timer = new QTimer( this );
469     + connect( m_timer, SIGNAL(timeout()),
470     + SLOT(slotTimeout()) );
471     +}
472     +
473     +void Timeout::slotTimeout()
474     +{
475     + emit timeout( m_timeout );
476     +}
477     +
478     +void Timeout::start()
479     +{
480     + m_timer->start( dbus_timeout_get_interval( m_timeout ) );
481     +}
482     +
483     +Integrator::Integrator( DBusConnection *conn, QObject *parent )
484     + : QObject( parent ), m_connection( conn )
485     +{
486     + m_timeouts.setAutoDelete( true );
487     +
488     + dbus_connection_set_watch_functions( m_connection,
489     + dbusAddWatch,
490     + dbusRemoveWatch,
491     + dbusToggleWatch,
492     + this, 0 );
493     + dbus_connection_set_timeout_functions( m_connection,
494     + dbusAddTimeout,
495     + dbusRemoveTimeout,
496     + dbusToggleTimeout,
497     + this, 0 );
498     + dbus_connection_set_wakeup_main_function( m_connection,
499     + dbusWakeupMain,
500     + this, 0 );
501     +}
502     +
503     +Integrator::Integrator( DBusServer *server, QObject *parent )
504     + : QObject( parent ), m_server( server )
505     +{
506     + m_connection = reinterpret_cast<DBusConnection*>( m_server );
507     + m_timeouts.setAutoDelete( true );
508     +
509     + dbus_server_set_watch_functions( m_server,
510     + dbusAddWatch,
511     + dbusRemoveWatch,
512     + dbusToggleWatch,
513     + this, 0 );
514     + dbus_server_set_timeout_functions( m_server,
515     + dbusAddTimeout,
516     + dbusRemoveTimeout,
517     + dbusToggleTimeout,
518     + this, 0 );
519     + dbus_server_set_new_connection_function( m_server,
520     + dbusNewConnection,
521     + this, 0 );
522     +}
523     +
524     +void Integrator::slotRead( int fd )
525     +{
526     + QIntDictIterator<Watch> it( m_watches );
527     + for ( ; it.current(); ++it )
528     + dbus_watch_handle ( it.current()->watch, DBUS_WATCH_READABLE );
529     +
530     + emit readReady();
531     +}
532     +
533     +void Integrator::slotWrite( int fd )
534     +{
535     + QIntDictIterator<Watch> it( m_watches );
536     + for ( ; it.current(); ++it )
537     + dbus_watch_handle ( it.current()->watch, DBUS_WATCH_WRITABLE );
538     +}
539     +
540     +void Integrator::slotTimeout( DBusTimeout *timeout )
541     +{
542     + dbus_timeout_handle( timeout );
543     +}
544     +
545     +void Integrator::addWatch( DBusWatch *watch )
546     +{
547     + if ( !dbus_watch_get_enabled( watch ) )
548     + return;
549     +
550     + Watch *qtwatch = new Watch;
551     + qtwatch->watch = watch;
552     +
553     + int flags = dbus_watch_get_flags( watch );
554     + int fd = dbus_watch_get_fd( watch );
555     +
556     + if ( flags & DBUS_WATCH_READABLE ) {
557     + qtwatch->readSocket = new QSocketNotifier( fd, QSocketNotifier::Read, this );
558     + QObject::connect( qtwatch->readSocket, SIGNAL(activated(int)), SLOT(slotRead(int)) );
559     + }
560     +
561     + if (flags & DBUS_WATCH_WRITABLE) {
562     + qtwatch->writeSocket = new QSocketNotifier( fd, QSocketNotifier::Write, this );
563     + QObject::connect( qtwatch->writeSocket, SIGNAL(activated(int)), SLOT(slotWrite(int)) );
564     + }
565     +
566     + m_watches.insert( fd, qtwatch );
567     +}
568     +
569     +void Integrator::removeWatch( DBusWatch *watch )
570     +{
571     + int key = dbus_watch_get_fd( watch );
572     +
573     + Watch *qtwatch = m_watches.take( key );
574     +
575     + if ( qtwatch ) {
576     + delete qtwatch->readSocket; qtwatch->readSocket = 0;
577     + delete qtwatch->writeSocket; qtwatch->writeSocket = 0;
578     + delete qtwatch;
579     + }
580     +}
581     +
582     +void Integrator::addTimeout( DBusTimeout *timeout )
583     +{
584     + Timeout *mt = new Timeout( this, timeout );
585     + m_timeouts.insert( timeout, mt );
586     + connect( mt, SIGNAL(timeout(DBusTimeout*)),
587     + SLOT(slotTimeout(DBusTimeout*)) );
588     + mt->start();
589     +}
590     +
591     +void Integrator::removeTimeout( DBusTimeout *timeout )
592     +{
593     + m_timeouts.remove( timeout );
594     +}
595     +
596     +void Integrator::handleConnection( DBusConnection *c )
597     +{
598     + Connection *con = new Connection( c, this );
599     + emit newConnection( con );
600     +}
601     +
602     +}//end namespace Internal
603     +}//end namespace DBusQt
604     +
605     +#include "integrator.moc"
606     diff -Naur kdebase-3.5.5/kioslave/media/mediamanager/integrator.h kdebase-3.5.5.patched/kioslave/media/mediamanager/integrator.h
607     --- kdebase-3.5.5/kioslave/media/mediamanager/integrator.h 1970-01-01 01:00:00.000000000 +0100
608     +++ kdebase-3.5.5.patched/kioslave/media/mediamanager/integrator.h 2006-10-19 11:37:12.000000000 +0200
609     @@ -0,0 +1,95 @@
610     +// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
611     +/* integrator.h: integrates D-BUS into Qt event loop
612     + *
613     + * Copyright (C) 2003 Zack Rusin <zack@kde.org>
614     + *
615     + * Licensed under the Academic Free License version 2.1
616     + *
617     + * This program is free software; you can redistribute it and/or modify
618     + * it under the terms of the GNU General Public License as published by
619     + * the Free Software Foundation; either version 2 of the License, or
620     + * (at your option) any later version.
621     + *
622     + * This program is distributed in the hope that it will be useful,
623     + * but WITHOUT ANY WARRANTY; without even the implied warranty of
624     + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
625     + * GNU General Public License for more details.
626     + *
627     + * You should have received a copy of the GNU General Public License
628     + * along with this program; if not, write to the Free Software
629     + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
630     + *
631     + */
632     +#ifndef DBUS_QT_INTEGRATOR_H
633     +#define DBUS_QT_INTEGRATOR_H
634     +
635     +/* We acknowledge the the dbus API is unstable */
636     +#define DBUS_API_SUBJECT_TO_CHANGE
637     +
638     +#include <qobject.h>
639     +
640     +#include <qintdict.h>
641     +#include <qptrdict.h>
642     +
643     +#include "dbus/dbus.h"
644     +
645     +class QTimer;
646     +
647     +namespace DBusQt
648     +{
649     + class Connection;
650     +
651     + namespace Internal
652     + {
653     + struct Watch;
654     +
655     + class Timeout : public QObject
656     + {
657     + Q_OBJECT
658     + public:
659     + Timeout( QObject *parent, DBusTimeout *t );
660     + public:
661     + void start();
662     + signals:
663     + void timeout( DBusTimeout* );
664     + protected slots:
665     + void slotTimeout();
666     + private:
667     + QTimer *m_timer;
668     + DBusTimeout *m_timeout;
669     + };
670     +
671     + class Integrator : public QObject
672     + {
673     + Q_OBJECT
674     + public:
675     + Integrator( DBusConnection *connection, QObject *parent );
676     + Integrator( DBusServer *server, QObject *parent );
677     +
678     + signals:
679     + void readReady();
680     + void newConnection( Connection* );
681     +
682     + protected slots:
683     + void slotRead( int );
684     + void slotWrite( int );
685     + void slotTimeout( DBusTimeout *timeout );
686     +
687     + public:
688     + void addWatch( DBusWatch* );
689     + void removeWatch( DBusWatch* );
690     +
691     + void addTimeout( DBusTimeout* );
692     + void removeTimeout( DBusTimeout* );
693     +
694     + void handleConnection( DBusConnection* );
695     + private:
696     + QIntDict<Watch> m_watches;
697     + QPtrDict<Timeout> m_timeouts;
698     + DBusConnection *m_connection;
699     + DBusServer *m_server;
700     + };
701     + }
702     +}
703     +
704     +#endif
705     diff -Naur kdebase-3.5.5/kioslave/media/mediamanager/Makefile.am kdebase-3.5.5.patched/kioslave/media/mediamanager/Makefile.am
706     --- kdebase-3.5.5/kioslave/media/mediamanager/Makefile.am 2005-09-10 10:25:36.000000000 +0200
707     +++ kdebase-3.5.5.patched/kioslave/media/mediamanager/Makefile.am 2006-10-19 11:37:12.000000000 +0200
708     @@ -1,17 +1,22 @@
709     kde_module_LTLIBRARIES = kded_mediamanager.la
710    
711     if include_media_halbackend
712     -HALBACKEND_INCS = $(HAL_INCS) $(DBUS_INCS) $(DBUSQT_INCS)
713     +HALBACKEND_INCS = $(HAL_INCS) $(DBUS_INCS)
714     endif
715    
716     METASOURCES = AUTO
717     INCLUDES = -I$(srcdir)/../libmediacommon -I../libmediacommon $(HALBACKEND_INCS) $(all_includes)
718    
719     +DBUSQT3BINDING_LIB = libdbusqt3.la
720     +libdbusqt3_la_SOURCES = connection.cpp integrator.cpp message.cpp
721     +libdbusqt3_la_LDFLAGS = -avoid-version $(all_libraries) -no-undefined
722     +libdbusqt3_la_LIBADD = $(HAL_LIBS) $(DBUS_LIBS)
723     +
724     if include_media_halbackend
725     HALBACKEND_LIB = libhalbackend.la
726     libhalbackend_la_SOURCES = halbackend.cpp
727     libhalbackend_la_LDFLAGS = -avoid-version $(all_libraries) -no-undefined
728     -libhalbackend_la_LIBADD = $(HAL_LIBS) $(DBUS_LIBS) $(DBUSQT_LIBS)
729     +libhalbackend_la_LIBADD = $(HAL_LIBS) $(DBUS_LIBS) $(DBUSQT3BINDING_LIB)
730     endif
731    
732     if include_media_linuxcdpolling
733     @@ -20,7 +25,7 @@
734     liblinuxcdpolling_la_LDFLAGS = -avoid-version $(all_libraries) -no-undefined
735     endif
736    
737     -noinst_LTLIBRARIES = $(LINUXCDPOLLING_LIB) $(HALBACKEND_LIB)
738     +noinst_LTLIBRARIES = $(LINUXCDPOLLING_LIB) $(HALBACKEND_LIB) $(DBUSQT3BINDING_LIB)
739    
740     kded_mediamanager_la_SOURCES = mediamanager.cpp mediamanager.skel medialist.cpp backendbase.cpp fstabbackend.cpp removablebackend.cpp mediadirnotify.cpp mediadirnotify.skel
741     kded_mediamanager_la_LDFLAGS = $(all_libraries) -module -avoid-version
742     diff -Naur kdebase-3.5.5/kioslave/media/mediamanager/message.cpp kdebase-3.5.5.patched/kioslave/media/mediamanager/message.cpp
743     --- kdebase-3.5.5/kioslave/media/mediamanager/message.cpp 1970-01-01 01:00:00.000000000 +0100
744     +++ kdebase-3.5.5.patched/kioslave/media/mediamanager/message.cpp 2006-10-19 11:37:12.000000000 +0200
745     @@ -0,0 +1,551 @@
746     +/* -*- mode: C++; c-file-style: "gnu" -*- */
747     +/* message.cpp: Qt wrapper for DBusMessage
748     + *
749     + * Copyright (C) 2003 Zack Rusin <zack@kde.org>
750     + *
751     + * Licensed under the Academic Free License version 2.0
752     + *
753     + * This program is free software; you can redistribute it and/or modify
754     + * it under the terms of the GNU General Public License as published by
755     + * the Free Software Foundation; either version 2 of the License, or
756     + * (at your option) any later version.
757     + *
758     + * This program is distributed in the hope that it will be useful,
759     + * but WITHOUT ANY WARRANTY; without even the implied warranty of
760     + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
761     + * GNU General Public License for more details.
762     + *
763     + * You should have received a copy of the GNU General Public License
764     + * along with this program; if not, write to the Free Software
765     + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
766     + *
767     + */
768     +#include "message.h"
769     +
770     +#include <qmap.h>
771     +
772     +#include <cstdlib>
773     +
774     +namespace DBusQt {
775     +
776     +struct Message::iterator::IteratorData {
777     + DBusMessageIter *iter;
778     + QVariant var;
779     + bool end;
780     + DBusMessage *mesg;
781     +};
782     +
783     +/**
784     + * Iterator.
785     + */
786     +Message::iterator::iterator()
787     +{
788     + d = new IteratorData;
789     + d->iter = 0; d->end = true;
790     +}
791     +
792     +/**
793     + * Constructs iterator for the message.
794     + * @param msg message whose fields we want to iterate
795     + */
796     +Message::iterator::iterator( DBusMessage* msg )
797     +{
798     + d = new IteratorData;
799     + d->mesg = msg;
800     + d->iter = static_cast<DBusMessageIter *>( malloc( sizeof(DBusMessageIter) ) );
801     + dbus_message_iter_init( d->mesg, d->iter );
802     + if ( !d->iter ) {
803     + qDebug("No iterator??");
804     + }
805     + fillVar();
806     + d->end = false;
807     +}
808     +
809     +/**
810     + * Copy constructor for the iterator.
811     + * @param itr iterator
812     + */
813     +Message::iterator::iterator( const iterator& itr )
814     +{
815     + d = new IteratorData;
816     + d->iter = itr.d->iter;
817     + d->var = itr.d->var;
818     + d->end = itr.d->end;
819     +}
820     +
821     +/**
822     + * Destructor.
823     + */
824     +Message::iterator::~iterator()
825     +{
826     + free( d->iter );
827     + delete d; d=0;
828     +}
829     +
830     +/**
831     + * Creates an iterator equal to the @p itr iterator
832     + * @param itr other iterator
833     + * @return
834     + */
835     +Message::iterator&
836     +Message::iterator::operator=( const iterator& itr )
837     +{
838     + IteratorData *tmp = new IteratorData;
839     + tmp->iter = itr.d->iter;
840     + tmp->var = itr.d->var;
841     + tmp->end = itr.d->end;
842     + delete d; d=tmp;
843     + return *this;
844     +}
845     +
846     +/**
847     + * Returns the constant QVariant held by the iterator.
848     + * @return the constant reference to QVariant held by this iterator
849     + */
850     +const QVariant&
851     +Message::iterator::operator*() const
852     +{
853     + return d->var;
854     +}
855     +
856     +/**
857     + * Returns the QVariant held by the iterator.
858     + * @return reference to QVariant held by this iterator
859     + */
860     +QVariant&
861     +Message::iterator::operator*()
862     +{
863     + return d->var;
864     +}
865     +
866     +/**
867     + * Moves to the next field and return a reference to itself after
868     + * incrementing.
869     + * @return reference to self after incrementing
870     + */
871     +Message::iterator&
872     +Message::iterator::operator++()
873     +{
874     + if ( d->end )
875     + return *this;
876     +
877     + if ( dbus_message_iter_next( d->iter ) ) {
878     + fillVar();
879     + } else {
880     + d->end = true;
881     + d->var = QVariant();
882     + }
883     + return *this;
884     +}
885     +
886     +/**
887     + * Moves to the next field and returns self before incrementing.
888     + * @return self before incrementing
889     + */
890     +Message::iterator
891     +Message::iterator::operator++(int)
892     +{
893     + iterator itr( *this );
894     + operator++();
895     + return itr;
896     +}
897     +
898     +/**
899     + * Compares this iterator to @p it iterator.
900     + * @param it the iterator to which we're comparing this one to
901     + * @return true if they're equal, false otherwise
902     + */
903     +bool
904     +Message::iterator::operator==( const iterator& it )
905     +{
906     + if ( d->end == it.d->end ) {
907     + if ( d->end == true ) {
908     + return true;
909     + } else {
910     + return d->var == it.d->var;
911     + }
912     + } else
913     + return false;
914     +}
915     +
916     +/**
917     + * Compares two iterators.
918     + * @param it The other iterator.
919     + * @return true if two iterators are not equal, false
920     + * otherwise
921     + */
922     +bool
923     +Message::iterator::operator!=( const iterator& it )
924     +{
925     + return !operator==( it );
926     +}
927     +
928     +QVariant Message::iterator::marshallBaseType( DBusMessageIter* i )
929     +{
930     + QVariant ret;
931     + switch (dbus_message_iter_get_arg_type(i)) {
932     + case DBUS_TYPE_INT32:
933     + {
934     + dbus_int32_t v;
935     + dbus_message_iter_get_basic (i, &v);
936     + ret = QVariant( v );
937     + }
938     + break;
939     + case DBUS_TYPE_UINT32:
940     + {
941     + dbus_uint32_t v;
942     + dbus_message_iter_get_basic (i, &v);
943     + ret = QVariant( v );
944     + }
945     + break;
946     + case DBUS_TYPE_DOUBLE:
947     + {
948     + double v;
949     + dbus_message_iter_get_basic (i, &v);
950     + ret = QVariant( v );
951     + }
952     + break;
953     + case DBUS_TYPE_STRING:
954     + {
955     + const char *v;
956     + dbus_message_iter_get_basic (i, &v);
957     + ret = QVariant( v );
958     + }
959     + break;
960     + default:
961     + ret = QVariant();
962     + break;
963     + }
964     + return ret;
965     +}
966     +
967     +/**
968     + * Fills QVariant based on what current DBusMessageIter helds.
969     + */
970     +void
971     +Message::iterator::fillVar()
972     +{
973     + switch ( dbus_message_iter_get_arg_type( d->iter ) ) {
974     + case DBUS_TYPE_INT32:
975     + case DBUS_TYPE_UINT32:
976     + case DBUS_TYPE_DOUBLE:
977     + case DBUS_TYPE_STRING:
978     + d->var = marshallBaseType( d->iter );
979     + break;
980     + case DBUS_TYPE_ARRAY: {
981     + switch ( dbus_message_iter_get_element_type( d->iter ) ) {
982     + case DBUS_TYPE_STRING: {
983     + QStringList tempList;
984     + DBusMessageIter sub;
985     + dbus_message_iter_recurse (d->iter, &sub);
986     + while (dbus_message_iter_get_arg_type (&sub) != DBUS_TYPE_INVALID)
987     + {
988     + const char *v;
989     + dbus_message_iter_get_basic (&sub, &v);
990     + tempList.append( QString( v ) );
991     + dbus_message_iter_next (&sub);
992     + }
993     + d->var = QVariant( tempList );
994     + break;
995     + }
996     + default:
997     + qDebug( "Array of type not implemented" );
998     + d->var = QVariant();
999     + break;
1000     + }
1001     + break;
1002     + }
1003     +#if 0
1004     + /* DICT is gone for now, but expected to be reintroduced, or else
1005     + * reintroduced as a flag on the introspection data that can
1006     + * apply to array of struct of two fields
1007     + */
1008     + case DBUS_TYPE_DICT: {
1009     + qDebug( "Got a hash!" );
1010     + QMap<QString, QVariant> tempMap;
1011     + DBusMessageIter dictIter;
1012     + dbus_message_iter_init_dict_iterator( d->iter, &dictIter );
1013     + do {
1014     + char *key = dbus_message_iter_get_dict_key( &dictIter );
1015     + tempMap[key] = marshallBaseType( &dictIter );
1016     + dbus_free( key );
1017     + dbus_message_iter_next( &dictIter );
1018     + } while( dbus_message_iter_has_next( &dictIter ) );
1019     + d->var = QVariant( tempMap );
1020     + break;
1021     + qDebug( "Hash/Dict type not implemented" );
1022     + d->var = QVariant();
1023     + break;
1024     + }
1025     +#endif
1026     + default:
1027     + qDebug( "not implemented" );
1028     + d->var = QVariant();
1029     + break;
1030     + }
1031     +}
1032     +
1033     +/**
1034     + * Returns a QVariant help by this iterator.
1035     + * @return QVariant held by this iterator
1036     + */
1037     +QVariant
1038     +Message::iterator::var() const
1039     +{
1040     + return d->var;
1041     +}
1042     +
1043     +struct Message::Private {
1044     + DBusMessage *msg;
1045     +};
1046     +
1047     +Message::Message( DBusMessage *m )
1048     +{
1049     + d = new Private;
1050     + d->msg = m;
1051     +}
1052     +
1053     +/**
1054     + *
1055     + */
1056     +Message::Message( int messageType )
1057     +{
1058     + d = new Private;
1059     + d->msg = dbus_message_new( messageType );
1060     +}
1061     +
1062     +/**
1063     + * Constructs a new Message with the given service and name.
1064     + * @param service service service that the message should be sent to
1065     + * @param name name of the message
1066     + */
1067     +Message::Message( const QString& service, const QString& path,
1068     + const QString& interface, const QString& method )
1069     +{
1070     + d = new Private;
1071     + d->msg = dbus_message_new_method_call( service.latin1(), path.latin1(),
1072     + interface.latin1(), method.latin1() );
1073     +}
1074     +
1075     +/**
1076     + * Constructs a message that is a reply to some other
1077     + * message.
1078     + * @param name the name of the message
1079     + * @param replayingTo original_message the message which the created
1080     + * message is a reply to.
1081     + */
1082     +Message::Message( const Message& replayingTo )
1083     +{
1084     + d = new Private;
1085     + d->msg = dbus_message_new_method_return( replayingTo.d->msg );
1086     +}
1087     +
1088     +Message:: Message( const QString& path, const QString& interface,
1089     + const QString& name )
1090     +{
1091     + d = new Private;
1092     + d->msg = dbus_message_new_signal( path.ascii(), interface.ascii(),
1093     + name.ascii() );
1094     +}
1095     +
1096     +Message::Message( const Message& replayingTo, const QString& errorName,
1097     + const QString& errorMessage )
1098     +{
1099     + d = new Private;
1100     + d->msg = dbus_message_new_error( replayingTo.d->msg, errorName.utf8(),
1101     + errorMessage.utf8() );
1102     +}
1103     +
1104     +Message Message::operator=( const Message& other )
1105     +{
1106     + //FIXME: ref the other.d->msg instead of copying it?
1107     +}
1108     +/**
1109     + * Destructs message.
1110     + */
1111     +Message::~Message()
1112     +{
1113     + if ( d->msg ) {
1114     + dbus_message_unref( d->msg );
1115     + }
1116     + delete d; d=0;
1117     +}
1118     +
1119     +int Message::type() const
1120     +{
1121     + return dbus_message_get_type( d->msg );
1122     +}
1123     +
1124     +void Message::setPath( const QString& path )
1125     +{
1126     + dbus_message_set_path( d->msg, path.ascii() );
1127     +}
1128     +
1129     +QString Message::path() const
1130     +{
1131     + return dbus_message_get_path( d->msg );
1132     +}
1133     +
1134     +void Message::setInterface( const QString& iface )
1135     +{
1136     + dbus_message_set_interface( d->msg, iface.ascii() );
1137     +}
1138     +
1139     +QString Message::interface() const
1140     +{
1141     + return dbus_message_get_interface( d->msg );
1142     +}
1143     +
1144     +void Message::setMember( const QString& member )
1145     +{
1146     + dbus_message_set_member( d->msg, member.ascii() );
1147     +}
1148     +
1149     +QString Message::member() const
1150     +{
1151     + return dbus_message_get_member( d->msg );
1152     +}
1153     +
1154     +QString Message::errorName() const
1155     +{
1156     + return dbus_message_get_error_name( d->msg );
1157     +}
1158     +
1159     +QString Message::destination() const
1160     +{
1161     + return dbus_message_get_destination( d->msg );
1162     +}
1163     +
1164     +/**
1165     + * Sets the message sender.
1166     + * @param sender the sender
1167     + * @return false if unsuccessful
1168     + */
1169     +bool
1170     +Message::setSender( const QString& sender )
1171     +{
1172     + return dbus_message_set_sender( d->msg, sender.latin1() );
1173     +}
1174     +
1175     +/**
1176     + * Returns sender of this message.
1177     + * @return sender
1178     + */
1179     +QString
1180     +Message::sender() const
1181     +{
1182     + return dbus_message_get_sender( d->msg );
1183     +}
1184     +
1185     +QString Message::signature() const
1186     +{
1187     + return dbus_message_get_signature( d->msg );
1188     +}
1189     +
1190     +
1191     +/**
1192     + * Returns the starting iterator for the fields of this
1193     + * message.
1194     + * @return starting iterator
1195     + */
1196     +Message::iterator
1197     +Message::begin() const
1198     +{
1199     + return iterator( d->msg );
1200     +}
1201     +
1202     +/**
1203     + * Returns the ending iterator for the fields of this
1204     + * message.
1205     + * @return ending iterator
1206     + */
1207     +Message::iterator
1208     +Message::end() const
1209     +{
1210     + return iterator();
1211     +}
1212     +
1213     +/**
1214     + * Returns the field at position @p i
1215     + * @param i position of the wanted field
1216     + * @return QVariant at position @p i or an empty QVariant
1217     + */
1218     +QVariant
1219     +Message::at( int i )
1220     +{
1221     + iterator itr( d->msg );
1222     +
1223     + while ( i-- ) {
1224     + if ( itr == end() )
1225     + return QVariant();//nothing there
1226     + ++itr;
1227     + }
1228     + return *itr;
1229     +}
1230     +
1231     +/**
1232     + * The underlying DBusMessage of this class.
1233     + * @return DBusMessage pointer.
1234     + */
1235     +DBusMessage*
1236     +Message::message() const
1237     +{
1238     + return d->msg;
1239     +}
1240     +
1241     +Message& Message::operator<<( bool b )
1242     +{
1243     + const dbus_bool_t right_size_bool = b;
1244     + dbus_message_append_args( d->msg, DBUS_TYPE_BOOLEAN, &right_size_bool,
1245     + DBUS_TYPE_INVALID );
1246     +}
1247     +
1248     +Message& Message::operator<<( Q_INT8 byte )
1249     +{
1250     + dbus_message_append_args( d->msg, DBUS_TYPE_BYTE, &byte,
1251     + DBUS_TYPE_INVALID );
1252     +}
1253     +
1254     +Message& Message::operator<<( Q_INT32 num )
1255     +{
1256     + dbus_message_append_args( d->msg, DBUS_TYPE_INT32, &num,
1257     + DBUS_TYPE_INVALID );
1258     +}
1259     +
1260     +Message& Message::operator<<( Q_UINT32 num )
1261     +{
1262     + dbus_message_append_args( d->msg, DBUS_TYPE_UINT32, &num,
1263     + DBUS_TYPE_INVALID );
1264     +}
1265     +
1266     +Message& Message::operator<<( Q_INT64 num )
1267     +{
1268     + dbus_message_append_args( d->msg, DBUS_TYPE_INT64, &num,
1269     + DBUS_TYPE_INVALID );
1270     +}
1271     +
1272     +Message& Message::operator<<( Q_UINT64 num )
1273     +{
1274     + dbus_message_append_args( d->msg, DBUS_TYPE_UINT64, &num,
1275     + DBUS_TYPE_INVALID );
1276     +}
1277     +
1278     +Message& Message::operator<<( double num )
1279     +{
1280     + dbus_message_append_args( d->msg, DBUS_TYPE_DOUBLE, &num,
1281     + DBUS_TYPE_INVALID );
1282     +}
1283     +
1284     +Message& Message::operator<<( const QString& str )
1285     +{
1286     + const char *u = str.utf8();
1287     + dbus_message_append_args( d->msg, DBUS_TYPE_STRING, &u,
1288     + DBUS_TYPE_INVALID );
1289     +}
1290     +
1291     +Message& Message::operator<<( const QVariant& custom )
1292     +{
1293     + //FIXME: imeplement
1294     +}
1295     +
1296     +}
1297     diff -Naur kdebase-3.5.5/kioslave/media/mediamanager/message.h kdebase-3.5.5.patched/kioslave/media/mediamanager/message.h
1298     --- kdebase-3.5.5/kioslave/media/mediamanager/message.h 1970-01-01 01:00:00.000000000 +0100
1299     +++ kdebase-3.5.5.patched/kioslave/media/mediamanager/message.h 2006-10-19 11:37:12.000000000 +0200
1300     @@ -0,0 +1,132 @@
1301     +/* -*- mode: C++; c-file-style: "gnu" -*- */
1302     +/* message.h: Qt wrapper for DBusMessage
1303     + *
1304     + * Copyright (C) 2003 Zack Rusin <zack@kde.org>
1305     + *
1306     + * Licensed under the Academic Free License version 2.1
1307     + *
1308     + * This program is free software; you can redistribute it and/or modify
1309     + * it under the terms of the GNU General Public License as published by
1310     + * the Free Software Foundation; either version 2 of the License, or
1311     + * (at your option) any later version.
1312     + *
1313     + * This program is distributed in the hope that it will be useful,
1314     + * but WITHOUT ANY WARRANTY; without even the implied warranty of
1315     + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1316     + * GNU General Public License for more details.
1317     + *
1318     + * You should have received a copy of the GNU General Public License
1319     + * along with this program; if not, write to the Free Software
1320     + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
1321     + *
1322     + */
1323     +#ifndef DBUS_QT_MESSAGE_H
1324     +#define DBUS_QT_MESSAGE_H
1325     +
1326     +/* We acknowledge the the dbus API is unstable */
1327     +#define DBUS_API_SUBJECT_TO_CHANGE
1328     +
1329     +#include <qvariant.h>
1330     +#include <qstring.h>
1331     +#include <qstringlist.h>
1332     +
1333     +#include "dbus/dbus.h"
1334     +
1335     +namespace DBusQt {
1336     +
1337     + class Message
1338     + {
1339     + public:
1340     + class iterator {
1341     + public:
1342     + iterator();
1343     + iterator( const iterator& );
1344     + iterator( DBusMessage* msg );
1345     + ~iterator();
1346     +
1347     + iterator& operator=( const iterator& );
1348     + const QVariant& operator*() const;
1349     + QVariant& operator*();
1350     + iterator& operator++();
1351     + iterator operator++(int);
1352     + bool operator==( const iterator& it );
1353     + bool operator!=( const iterator& it );
1354     +
1355     + QVariant var() const;
1356     + protected:
1357     + QVariant marshallBaseType( DBusMessageIter* i );
1358     + void fillVar();
1359     + struct IteratorData;
1360     + IteratorData *d;
1361     + };
1362     +
1363     + Message( int messageType );
1364     + Message( DBusMessage * );//hide this one from the public implementation
1365     + Message( const QString& service, const QString& path,
1366     + const QString& interface, const QString& method );
1367     + Message( const Message& replayingTo );
1368     + Message( const QString& path, const QString& interface,
1369     + const QString& name );
1370     + Message( const Message& replayingTo, const QString& errorName,
1371     + const QString& errorMessage );
1372     +
1373     + Message operator=( const Message& other );
1374     +
1375     + virtual ~Message();
1376     +
1377     + int type() const;
1378     +
1379     + void setPath( const QString& );
1380     + QString path() const;
1381     +
1382     + void setInterface( const QString& );
1383     + QString interface() const;
1384     +
1385     + void setMember( const QString& );
1386     + QString member() const;
1387     +
1388     + QString errorName() const;
1389     +
1390     + QString destination() const;
1391     +
1392     + bool setSender( const QString& sender );
1393     + QString sender() const;
1394     +
1395     + QString signature() const;
1396     +
1397     + iterator begin() const;
1398     + iterator end() const;
1399     +
1400     + QVariant at( int i );
1401     +
1402     +
1403     + public:
1404     + Message& operator<<( bool );
1405     + Message& operator<<( Q_INT8 );
1406     + Message& operator<<( Q_INT32 );
1407     + Message& operator<<( Q_UINT32 );
1408     + Message& operator<<( Q_INT64 );
1409     + Message& operator<<( Q_UINT64 );
1410     + Message& operator<<( double );
1411     + Message& operator<<( const QString& );
1412     + Message& operator<<( const QVariant& );
1413     + //Message& operator<<();
1414     + //Message& operator<<();
1415     + //Message& operator<<();
1416     + //Message& operator<<();
1417     + //Message& operator<<();
1418     + //Message& operator<<();
1419     + //Message& operator<<();
1420     +
1421     + protected:
1422     + friend class Connection;
1423     + DBusMessage* message() const;
1424     +
1425     + private:
1426     + struct Private;
1427     + Private *d;
1428     + };
1429     +
1430     +}
1431     +
1432     +#endif