]> git.meshlink.io Git - catta/blobdiff - avahi-qt/qt-watch.cpp
l10n: Updated Malay (ms) translation to 24%
[catta] / avahi-qt / qt-watch.cpp
index fe8f2c30f7380362d9e02d8fd4eaf115427668c5..dac9dcc7ea116d0328f219ca3be1b1bd619224b1 100644 (file)
@@ -27,6 +27,7 @@
 #include <qobject.h>
 #include <qtimer.h>
 #endif
+#include <avahi-common/timeval.h>
 #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