Commit graph

39 commits

Author SHA1 Message Date
Mathias Gumz
92940571f3 Cleanup; Remove unused function 2015-02-05 21:35:02 +01:00
Mathias Gumz
948e63eb60 detect minute-based strftime-formats (again)
the lag / skipping of the clock was not caused by faulty timer code
on fluxbox's side but by the behavior and inner workings of time().
since this is fixed now (913244789f) we can now rollback ec7fe513c8
and detect strftime-formats which need intervals of seconds or minutes.

minor: the small change to FbTk::Timer::setTimeout() reduces one
start() / stop() cycle for a running timer.
2014-05-12 12:17:00 +02:00
Sami Kerola
47b9786533 build-sys: use AC_USE_SYSTEM_EXTENSIONS
The earlier _GNU_SOURCE definitions possibly did not take effect
everywhere where it was intended.
2013-05-26 10:38:10 +01:00
Mathias Gumz
7c26156842 Initialize FbTk::Timer.m_timeout correctly 2013-02-13 10:30:55 +01:00
Mathias Gumz
34744f504e Cleanup 2013-02-10 11:08:05 +01:00
Mathias Gumz
3e4ee48bf1 Fix regression regarding timers with equal end-time
std::set<Key, Comp> stores Key only if Comp(Key) yields a unique result (My
mistake: I was under the impression Comp is only used for the ordering). This
prevents FbTk::Timers with equal end-times from actually being started.
Escpecially in situation with multiple ClockTools this lead to stopped timers
(see bug #3600694).

Kudos to Adam Majer for enlightening discussions.
2013-02-01 20:36:30 +01:00
Mathias Gumz
716532dd47 Calculates timeouts of ClockTool based upon System Clock
Users expect time switches to happen upon system clock times. Calculating the
timeout for the next refresh of the shown time via the monotonic clock is
wrong: The monotonic clock yields values based upon some arbitrary point in
time which might be off a little bit to the system clock, a 'full' minute of
the monotonic clock might be in the midst of a system clock minute.
2013-01-26 09:21:47 +01:00
Mathias Gumz
33161595f4 Simplifies and fix bugs in FbTk::Timer
* Calling Timer::setTimeout() from within Timer::start() might lead to ugly
  behavior (as experienced in bugs #3590078, #3600143, etc; see commit
  4d307dcd10, fixes the problem partially).

* Stop a timer first, then call the handler (via Timer::fireTimeout()). A
  given handler might call Timer::start() again, which (re)adds the Timer
  to the control list .. the following Timer::stop() would remove it again.

* Use 'm_start' as indicator if timer is running.

* Move the (now quite short) code of ::addTimer / ::removeTimer
  into the Timer::start() and Timer::stop() functions.
2013-01-15 21:40:33 +01:00
Mathias Gumz
13b9ee09ee Minor optimization of handling the timers 2013-01-13 12:23:06 +01:00
Mathias Gumz
4d307dcd10 Fix bug: handle the list of Timers not in-place
With commit 541c8c4 we switched from an (manually) ordered list to a
std::set<> to handle the active timers. The code which checks for overdue
timers now traverses and modifies the std::set<> in place. This might
lead to an infinite loop. Examples of such bad behavior are "flickering of
the tooltip" (bug #3590078) or crashes (bug #3600143) or just insanely high
cpu load when autoraising windows or submenus.

We now make a copy of the std::set<> traverse this instead of the original.
2013-01-12 09:24:11 +01:00
Mathias Gumz
e512c1becd minor cosmetic 2012-09-14 08:52:13 +02:00
Mathias Gumz
2f279e96b1 Fix regression: switch back to microseconds for DelayCmd 2012-09-14 08:51:42 +02:00
Mathias Gumz
59d097bcea Fix bug: (re)setting timeouts on a running FbTk::Timer might lead to broken timer list
Setting a new timeout on a running FbTk::Timer must remove it from the timerlist,
otherwise the list is not ordered correctly anymore. So, we stop the running
FbTk::Timer, set the new timeout and restart it.
2012-09-14 08:48:37 +02:00
Mathias Gumz
541c8c407b changed timing functions to use a monotonic increasing clock
gettimeofday() is subject to be changed on daylight-saving or to ntp-related
(think leap-seconds). even worse, it is subject to be changed BACK in time. this
is hard to fix correctly (see commit 45726d3016 and bug #3560509). it is
irrelevant for timers to know the nano-seconds since the epoch anyways.
2012-08-28 10:51:55 +02:00
Ryan Pavlik
5ae8bdf49d Pre-increment non-primitive types.
Found with cppcheck:
"Prefix ++/-- operators should be preferred for non-primitive
types. Pre-increment/decrement can be more efficient than
post-increment/decrement. Post-increment/decrement usually
involves keeping a copy of the previous value around and adds
a little extra code."
2012-01-04 07:53:54 +01:00
Ryan Pavlik
b0779c413b FbTk/Timer.cc: Check HAVE_SYS_SELECT_H, add alternate for windows 2011-10-31 10:54:08 -05:00
Ryan Pavlik
f40be36f75 FbTk/Timer.cc: Check HAVE_SYS_SELECT_H 2011-10-31 10:47:59 -05:00
Pavel Labath
e67b9a6f83 Upgrade FbTk::Timer so it can take an arbitrary functor as a parameter 2011-09-14 19:39:11 +02:00
Pavel Labath
cfcc4d44aa FbTk::Timer accepts Slots instead of Commands as the former are more general 2011-09-14 19:39:10 +02:00
Pavel Labath
4b47675441 Make RefCount<> more sensible
the previous version of operator*() made no sense. E.g., it violated the invariant
(*ptr).foo <=> ptr->foo. The dereferencing operator now returns a reference to the pointed-to
object, rather than a pointer to it.

I also added a bool conversion operator, which can be used in testing the NULL-ness of the
pointer. Anyone wondering if that could be done in a simpler way is encouraged to read
<http://www.artima.com/cppsource/safebool.html>.

And, finally, I removed the mutable flag from the m_data member, since it does not need it.
2011-05-10 13:00:45 +02:00
Mathias Gumz
e685117941 simpler to use FbTk/Timer api 2010-09-09 12:47:38 +02:00
Mathias Gumz
615e9cec32 compile fix: FD_ZERO (sys/select.h) on solaris wants to use memset(); closes #2997117 2010-05-06 21:19:31 +02:00
Mathias Gumz
c65dc30fc2 improved documentation of the code 2010-01-19 20:20:13 +01:00
Mark Tiefenbruck
8def80cec3 reportedly fix compiling on gcc 4.4 on Solaris 2009-10-08 00:18:43 -07:00
Mark Tiefenbruck
1fe1da5ca0 fix parsing of Delay command 2008-08-21 12:53:32 -07:00
Thomas Orgis
1e2ab2f3ed some fixes for gcc 3.4 2008-04-21 15:43:10 -07:00
Mark Tiefenbruck
9f2f65a698 make FbTk::Command a template class, split parsing information out of ObjectRegistry 2008-01-10 23:41:22 -08:00
Mark Tiefenbruck
8e96ffb74b moved DelayedCmd from Screen.cc to FbTk/Timer.cc, added it to the keys file 2007-12-28 01:19:33 -08:00
simonb
f6140840f8 fix timer issues (esp clock not updating on multiple screens) 2006-06-19 05:04:42 +00:00
simonb
4c011a0a12 don't check the clock so often... 2006-04-18 15:17:11 +00:00
mathias
ae05ad9a01 updated copyright info 2006-02-16 06:53:05 +00:00
mathias
6b8fca511c copyright date 2005-01-24 18:02:34 +00:00
akir
fa5202c120 accepted patch #1057446, improved iterator in timer-code 2004-11-01 02:43:07 +00:00
akir
45726d3016 if the systemtime is set back the timers wont be updated.
solution: add the delta to all of our timers too.
2004-10-19 08:59:44 +00:00
akir
e8c813c38c fixed a minor bug that can lead to HIGH cpuload under some circumstances.
actually we must ensure that only timers with a valid handle are added to the
timerslist.
2004-09-19 21:15:47 +00:00
rathnor
d17bf39a43 add autoconf check for std c++ headers 2004-08-31 15:26:40 +00:00
rathnor
c516aa13a1 fix reading of auto raise delay 2003-10-05 06:28:47 +00:00
fluxgen
af93496614 executing a command on timeout instead of calling a TimeoutHandler 2003-08-11 15:58:34 +00:00
fluxgen
7dd4823340 moved from fluxbox to fbtk 2003-01-09 21:09:49 +00:00