X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;ds=sidebyside;f=avahi-qt%2Fqt-watch.cpp;h=dac9dcc7ea116d0328f219ca3be1b1bd619224b1;hb=4e88ffafebd622a212c4af7b3f7e1ef643644261;hp=fe8f2c30f7380362d9e02d8fd4eaf115427668c5;hpb=2a73209f103f0e348416be95fa557426b921831e;p=catta diff --git a/avahi-qt/qt-watch.cpp b/avahi-qt/qt-watch.cpp index fe8f2c3..dac9dcc 100644 --- a/avahi-qt/qt-watch.cpp +++ b/avahi-qt/qt-watch.cpp @@ -27,6 +27,7 @@ #include #include #endif +#include #include "qt-watch.h" class AvahiWatch : public QObject @@ -35,7 +36,7 @@ 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: @@ -50,6 +51,7 @@ private: AvahiWatchEvent m_lastEvent; int m_fd; void* m_userdata; + bool m_incallback; }; class AvahiTimeout : public QObject @@ -73,7 +75,7 @@ private: 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); } @@ -81,13 +83,17 @@ AvahiWatch::AvahiWatch(int fd, AvahiWatchEvent event, AvahiWatchCallback callbac 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) @@ -108,6 +114,9 @@ AvahiTimeout::AvahiTimeout(const struct timeval* tv, AvahiTimeoutCallback callba m_callback(callback), m_userdata(userdata) { connect(&m_timer, SIGNAL(timeout()), this, SLOT(timeout())); +#ifdef QT4 + m_timer.setSingleShot(true); +#endif update(tv); } @@ -115,9 +124,12 @@ void AvahiTimeout::update(const struct timeval *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 } } @@ -163,18 +175,24 @@ static void q_timeout_free(AvahiTimeout *t) 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