WindowMenuAccessor returned strange alpha values if compiled
with 'g++ -Os'; unholy black magic happens if template<int> faces
functions returning only 'usigned char'.
a 'BidiString' holds both the logical content and the visual reordered
version of the content of a string. this helps to reduce the number of
calls to reorder the string before drawing it (as introduced in the patch
from Ken Bloom) and to be more consistent in menus and textboxes (drawing
cursors and underlining text).
* parse the string only once for a bunch of chars to check instead of
starting over again and again from the beginning, created a helper
function to do this (FbTk::StringUtil::findCharFromAlphabetAfterTrigger)
* put same code into a function (setClockModeLabel())
* use much simpler code to switch between 12h and 24h mode and replace
the fmt-switches
the idea (as a first patch) for this change was provided by
Thomas Habets (thomas at habets pp se). instead of having a
fixed interval each second, we now calculate the next point in
time based upon the format string used by the clocktool to render
the time. as long as no seconds are shown fluxbox now wakes up
once every minute.
assume its 12:34:56.99, displaying 12:34:56 takes some time and so its already
12:34:57 when we display 12:34:56. to fix that i set the time to check the
clock to 0.01 seconds. that shouldnt hurt much since we only redraw the clock
when the string has changed.
a more complex approach would be to analyze the strftime-string and set the
timeout accordingly. but i dont know if its really worth the effort and beeing
a bit off schedule can happen too, just not as often as if you are in seconds
mode.
causes a reconfigure .. which causes a loop over all toolbaritems and call
updateSizing() .. where we should check, if a new timeformat makes the clock
bigger or smaller...
closes#1026096