X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;ds=sidebyside;f=avahi-qt%2Fqt-watch.cpp;h=c0b21402348722b742cbc74563fac4d444a214b0;hb=8185ec8431c51946095d3f11e80545e3519f67cf;hp=fe8f2c30f7380362d9e02d8fd4eaf115427668c5;hpb=2a73209f103f0e348416be95fa557426b921831e;p=catta diff --git a/avahi-qt/qt-watch.cpp b/avahi-qt/qt-watch.cpp index fe8f2c3..c0b2140 100644 --- a/avahi-qt/qt-watch.cpp +++ b/avahi-qt/qt-watch.cpp @@ -1,3 +1,5 @@ +/* $Id$ */ + /*** This file is part of avahi. @@ -35,7 +37,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 +52,7 @@ private: AvahiWatchEvent m_lastEvent; int m_fd; void* m_userdata; + bool m_incallback; }; class AvahiTimeout : public QObject @@ -73,7 +76,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 +84,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 +115,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); } @@ -117,7 +127,11 @@ void AvahiTimeout::update(const struct timeval *tv) if (tv) { struct timeval now; gettimeofday(&now, 0); +#ifdef QT4 m_timer.start((tv->tv_sec-now.tv_sec)*1000+(tv->tv_usec-now.tv_usec)/1000); +#else + m_timer.start((tv->tv_sec-now.tv_sec)*1000+(tv->tv_usec-now.tv_usec)/1000,true); +#endif } } @@ -163,18 +177,24 @@ static void q_timeout_free(AvahiTimeout *t) delete t; } +static AvahiPoll qt_poll; -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; + qt_poll.userdata=0; + qt_poll.watch_new = q_watch_new; + qt_poll.watch_free = q_watch_free; + qt_poll.watch_update = q_watch_update; + qt_poll.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; + qt_poll.timeout_new = q_timeout_new; + qt_poll.timeout_free = q_timeout_free; + qt_poll.timeout_update = q_timeout_update; + return &qt_poll; } -#include "qt-watch.moc" +#ifdef QT4 +#include "qt-watch.moc4" +#else +#include "qt-watch.moc3" +#endif