summaryrefslogtreecommitdiffstats
path: root/qt/integrator.cpp
diff options
context:
space:
mode:
authorZack Rusin <zack@kde.org>2003-11-24 19:11:55 +0000
committerZack Rusin <zack@kde.org>2003-11-24 19:11:55 +0000
commit27f6dca9ce4680dbbe8dc20a862f5ad63b709609 (patch)
treef3458e7b3c5a9ad1debfc178c50df26b2f7ba380 /qt/integrator.cpp
parent89d43511ec5718823d8faa98246e420af5f26d5a (diff)
As changelog says. Integration is pretty much there, so dbus should at least
use Qt for timeouts and watches comfortably now.
Diffstat (limited to 'qt/integrator.cpp')
-rw-r--r--qt/integrator.cpp103
1 files changed, 91 insertions, 12 deletions
diff --git a/qt/integrator.cpp b/qt/integrator.cpp
index 8d49606b..ca793a0a 100644
--- a/qt/integrator.cpp
+++ b/qt/integrator.cpp
@@ -32,30 +32,91 @@ namespace DBusQt
{
namespace Internal {
-struct QtWatch {
- QtWatch(): readSocket( 0 ), writeSocket( 0 ) { }
+struct Watch {
+ Watch(): readSocket( 0 ), writeSocket( 0 ) { }
DBusWatch *watch;
QSocketNotifier *readSocket;
QSocketNotifier *writeSocket;
};
-struct DBusQtTimeout {
- DBusQtTimeout(): timer( 0 ), timeout( 0 ) { }
- ~DBusQtTimeout() {
- delete timer;
- }
- QTimer *timer;
- DBusTimeout *timeout;
-};
+//////////////////////////////////////////////////////////////
+dbus_bool_t dbusAddWatch( DBusWatch *watch, void *data )
+{
+ Integrator *con = static_cast<Integrator*>( data );
+ con->addWatch( watch );
+ return true;
+}
+void dbusRemoveWatch( DBusWatch *watch, void *data )
+{
+ Integrator *con = static_cast<Integrator*>( data );
+ con->removeWatch( watch );
+}
+
+void dbusToggleWatch( DBusWatch *watch, void *data )
+{
+ Integrator *itg = static_cast<Integrator*>( data );
+ if ( dbus_watch_get_enabled( watch ) )
+ itg->addWatch( watch );
+ else
+ itg->removeWatch( watch );
+}
+
+dbus_bool_t dbusAddTimeout( DBusTimeout *timeout, void *data )
+{
+ if ( !dbus_timeout_get_enabled(timeout) )
+ return true;
+
+ Integrator *itg = static_cast<Integrator*>( data );
+ itg->addTimeout( timeout );
+ return true;
+}
+
+void dbusRemoveTimeout( DBusTimeout *timeout, void *data )
+{
+ Integrator *itg = static_cast<Integrator*>( data );
+ itg->removeTimeout( timeout );
+}
+
+void dbusToggleTimeout( DBusTimeout *timeout, void *data )
+{
+ Integrator *itg = static_cast<Integrator*>( data );
+
+ if ( dbus_timeout_get_enabled( timeout ) )
+ itg->addTimeout( timeout );
+ else
+ itg->removeTimeout( timeout );
+}
void dbusWakeupMain( void* )
{
}
+/////////////////////////////////////////////////////////////
+
+Timeout::Timeout( QObject *parent, DBusTimeout *t )
+ : QObject( parent ), m_timeout( t )
+{
+ m_timer = new QTimer( this );
+ connect( m_timer, SIGNAL(timeout()),
+ SLOT(slotTimeout()) );
+}
+
+void Timeout::slotTimeout()
+{
+ emit timeout( m_timeout );
+}
+
+void Timeout::start()
+{
+ m_timer->start( dbus_timeout_get_interval( m_timeout ) );
+}
+
Integrator::Integrator( Connection *parent )
: QObject( parent ), m_parent( parent )
{
+ m_timeouts.setAutoDelete( true );
+
dbus_connection_set_watch_functions( m_parent->connection(),
dbusAddWatch,
dbusRemoveWatch,
@@ -82,12 +143,17 @@ void Integrator::slotWrite( int fd )
Q_UNUSED( fd );
}
+void Integrator::slotTimeout( DBusTimeout *timeout )
+{
+ dbus_timeout_handle( timeout );
+}
+
void Integrator::addWatch( DBusWatch *watch )
{
if ( !dbus_watch_get_enabled( watch ) )
return;
- QtWatch *qtwatch = new QtWatch;
+ Watch *qtwatch = new Watch;
qtwatch->watch = watch;
int flags = dbus_watch_get_flags( watch );
@@ -110,7 +176,7 @@ void Integrator::removeWatch( DBusWatch *watch )
{
int key = dbus_watch_get_fd( watch );
- QtWatch *qtwatch = m_watches.take( key );
+ Watch *qtwatch = m_watches.take( key );
if ( qtwatch ) {
delete qtwatch->readSocket; qtwatch->readSocket = 0;
@@ -119,6 +185,19 @@ void Integrator::removeWatch( DBusWatch *watch )
}
}
+void Integrator::addTimeout( DBusTimeout *timeout )
+{
+ Timeout *mt = new Timeout( this, timeout );
+ m_timeouts.insert( timeout, mt );
+ connect( mt, SIGNAL(timeout(DBusTimeout*)),
+ SLOT(slotTimeout(DBusTimeout*)) );
+ mt->start();
+}
+
+void Integrator::removeTimeout( DBusTimeout *timeout )
+{
+ m_timeouts.remove( timeout );
+}
}//end namespace Internal
}//end namespace DBusQt