diff -Nru timeit-1.2.4/debian/changelog timeit-1.2.5/debian/changelog --- timeit-1.2.4/debian/changelog 2013-09-13 13:33:10.000000000 +0000 +++ timeit-1.2.5/debian/changelog 2013-09-25 14:19:47.000000000 +0000 @@ -1,3 +1,9 @@ +timeit (1.2.5) precise; urgency=low + + * Bugfix: Idle detection got into an infinite loop. + + -- Kent Asplund Wed, 25 Sep 2013 16:19:13 +0200 + timeit (1.2.4) precise; urgency=low * Feature: Improved information in idle dialog diff -Nru timeit-1.2.4/src/Logic/IdleDetector.cpp timeit-1.2.5/src/Logic/IdleDetector.cpp --- timeit-1.2.4/src/Logic/IdleDetector.cpp 2013-09-13 13:33:10.000000000 +0000 +++ timeit-1.2.5/src/Logic/IdleDetector.cpp 2013-09-25 14:19:47.000000000 +0000 @@ -22,99 +22,106 @@ IdleDetector::IdleDetector() { - int event_base, error_base; - if (display == 0) - { - display = XOpenDisplay(0); - } - if (XInfo == 0) - { - XInfo = XScreenSaverAllocInfo(); - } - IdleDetectionPossible = false; - if (XScreenSaverQueryExtension(display, &event_base, &error_base)) - { - IdleDetectionPossible = true; - } - idleSeconds = 0; - lastPoll = time(NULL); - idleTimeout = 2000; - lastActivity = lastPoll; - isIdle = false; + int event_base, error_base; + if (display == 0) + { + display = XOpenDisplay(0); + } + if (XInfo == 0) + { + XInfo = XScreenSaverAllocInfo(); + } + IdleDetectionPossible = false; + if (XScreenSaverQueryExtension(display, &event_base, &error_base)) + { + IdleDetectionPossible = true; + } + idleSeconds = 0; + lastPoll = time(NULL); + idleTimeout = 2000; + lastActivity = lastPoll; + isIdle = false; + enabled = false; } IdleDetector::~IdleDetector() { - if (XInfo) - { - //TODO safer allocation/dealocation! - XFree(XInfo); - XInfo = nullptr; - } + if (XInfo) + { + //TODO safer allocation/dealocation! + XFree(XInfo); + XInfo = nullptr; + } } void IdleDetector::setIdleTimeout(int minutes) { - idleTimeout = minutes * 60; + idleTimeout = minutes * 60; } void IdleDetector::reset() { - isIdle = false; + isIdle = false; + lastPoll = time(NULL); } void IdleDetector::pollStatus() { - if (IdleDetectionPossible) - { - time_t now = time(NULL); - if (isIdle) - { - idleSeconds = now - lastActivity; - } - else - { - if (now - lastPoll > 30) - { - idleSeconds = now - lastActivity; - } - else - { - XScreenSaverQueryInfo(display, XRootWindow(display, 0), XInfo); - idleSeconds = (XInfo->idle / 1000); - lastPoll = now; - if (idleSeconds < 20) - { - lastActivity = now; - } - time_t executionTime = time(NULL) -now; - if( executionTime > 10) - { - //We have been suspended for more than 10 seconds inside this function - idleSeconds = executionTime; - } - } - lastPoll = now; - } - if (idleSeconds > idleTimeout) - { - isIdle = true; - } - } + if (IdleDetectionPossible) + { + time_t now = time(NULL); + if (isIdle) + { + idleSeconds = now - lastActivity; + } + else + { + if (now - lastPoll > 30) + { + idleSeconds = now - lastActivity; + } + else + { + XScreenSaverQueryInfo(display, XRootWindow(display, 0), XInfo); + idleSeconds = (XInfo->idle / 1000); + lastPoll = now; + if (idleSeconds < 20) + { + lastActivity = now; + } + time_t executionTime = time(NULL) -now; + if( executionTime > 10) + { + //We have been suspended for more than 10 seconds inside this function + idleSeconds = executionTime; + } + } + lastPoll = now; + } + if (enabled && idleSeconds > idleTimeout) + { + isIdle = true; + } + } } bool IdleDetector::idle() { - return isIdle; + return isIdle; } int IdleDetector::minutesIdle() { - return timeIdle() / secsPerMinute; + return timeIdle() / secsPerMinute; } time_t IdleDetector::timeIdle() { - pollStatus(); - return idleSeconds; + pollStatus(); + return idleSeconds; +} + +void IdleDetector::setEnabled(bool state) +{ + enabled = state; } diff -Nru timeit-1.2.4/src/Logic/IdleDetector.h timeit-1.2.5/src/Logic/IdleDetector.h --- timeit-1.2.4/src/Logic/IdleDetector.h 2013-09-13 13:33:10.000000000 +0000 +++ timeit-1.2.5/src/Logic/IdleDetector.h 2013-09-25 14:19:47.000000000 +0000 @@ -21,6 +21,7 @@ void setIdleTimeout(int minutes); void reset(); bool idle(); + void setEnabled(bool state); private: void pollStatus(); bool IdleDetectionPossible; @@ -30,7 +31,7 @@ long idleTimeout; bool isIdle; time_t lastActivity; - + bool enabled; }; #endif /* IDLEDETECTOR_H_ */ diff -Nru timeit-1.2.4/src/Logic/Timekeeper.cpp timeit-1.2.5/src/Logic/Timekeeper.cpp --- timeit-1.2.4/src/Logic/Timekeeper.cpp 2013-09-13 13:33:10.000000000 +0000 +++ timeit-1.2.5/src/Logic/Timekeeper.cpp 2013-09-25 14:19:47.000000000 +0000 @@ -122,6 +122,7 @@ notifyRunningChanged(); } } + m_idleDetector.setEnabled(activeTasks.size()>0); } void Timekeeper::on_taskRemoved(int64_t id) @@ -197,6 +198,7 @@ void Timekeeper::notifyRunningChanged() { + m_idleDetector.setEnabled(activeTasks.size()>0); std::list::iterator iter; for (iter = observers.begin(); iter != observers.end(); iter++) { diff -Nru timeit-1.2.4/src/version.h timeit-1.2.5/src/version.h --- timeit-1.2.4/src/version.h 2013-09-13 13:33:11.000000000 +0000 +++ timeit-1.2.5/src/version.h 2013-09-25 14:19:48.000000000 +0000 @@ -1 +1 @@ -#define VERSION "1.2.4" +#define VERSION "1.2.5" diff -Nru timeit-1.2.4/version timeit-1.2.5/version --- timeit-1.2.4/version 2013-09-13 13:33:11.000000000 +0000 +++ timeit-1.2.5/version 2013-09-25 14:19:48.000000000 +0000 @@ -1 +1 @@ -1.2.4 +1.2.5