+/* $Id$ */
+
/***
This file is part of avahi.
#include <qobject.h>
#include <qtimer.h>
#endif
+#include <avahi-common/timeval.h>
#include "qt-watch.h"
class AvahiWatch : public QObject
public:
AvahiWatch(int fd, AvahiWatchEvent event, AvahiWatchCallback callback, void* userdata);
~AvahiWatch() {}
- AvahiWatchEvent getEvents() const { return m_lastEvent; }
+ AvahiWatchEvent getEvents() const { return m_incallback ? m_lastEvent : (AvahiWatchEvent)0; }
void setWatchedEvents(AvahiWatchEvent event);
private slots:
AvahiWatchEvent m_lastEvent;
int m_fd;
void* m_userdata;
+ bool m_incallback;
};
class AvahiTimeout : public QObject
AvahiWatch::AvahiWatch(int fd, AvahiWatchEvent event, AvahiWatchCallback callback, void* userdata) :
- m_in(0), m_out(0), m_callback(callback), m_fd(fd), m_userdata(userdata)
+ m_in(0), m_out(0), m_callback(callback), m_fd(fd), m_userdata(userdata), m_incallback(false)
{
setWatchedEvents(event);
}
void AvahiWatch::gotIn()
{
m_lastEvent = AVAHI_WATCH_IN;
+ m_incallback=true;
m_callback(this,m_fd,m_lastEvent,m_userdata);
+ m_incallback=false;
}
void AvahiWatch::gotOut()
{
m_lastEvent = AVAHI_WATCH_IN;
+ m_incallback=true;
m_callback(this,m_fd,m_lastEvent,m_userdata);
+ m_incallback=false;
}
void AvahiWatch::setWatchedEvents(AvahiWatchEvent event)
m_callback(callback), m_userdata(userdata)
{
connect(&m_timer, SIGNAL(timeout()), this, SLOT(timeout()));
+#ifdef QT4
+ m_timer.setSingleShot(true);
+#endif
update(tv);
}
{
m_timer.stop();
if (tv) {
- struct timeval now;
- gettimeofday(&now, 0);
- m_timer.start((tv->tv_sec-now.tv_sec)*1000+(tv->tv_usec-now.tv_usec)/1000);
+ AvahiUsec u = avahi_age(tv)/1000;
+#ifdef QT4
+ m_timer.start( (u>0) ? 0 : -u);
+#else
+ m_timer.start( (u>0) ? 0 : -u,true);
+#endif
}
}
delete t;
}
-
-void create_qt_poll(AvahiPoll *api)
+const AvahiPoll* avahi_qt_poll_get(void)
{
- api->userdata=0;
- api->watch_new = q_watch_new;
- api->watch_free = q_watch_free;
- api->watch_update = q_watch_update;
- api->watch_get_events = q_watch_get_events;
-
- api->timeout_new = q_timeout_new;
- api->timeout_free = q_timeout_free;
- api->timeout_update = q_timeout_update;
+ static const AvahiPoll qt_poll = {
+ NULL,
+ q_watch_new,
+ q_watch_update,
+ q_watch_get_events,
+ q_watch_free,
+ q_timeout_new,
+ q_timeout_update,
+ q_timeout_free
+ };
+
+ return &qt_poll;
}
-#include "qt-watch.moc"
+#ifdef QT4
+#include "qt-watch.moc4"
+#else
+#include "qt-watch.moc3"
+#endif