We have got a problem in the mechanism that blinks the cursor. The blinking is done via a timer and if we happen to be in another timer context, the auto-update gets blocked until the timer-triggered code finishes execution, and so the cursor does not blink.
A current example of this is the background spell checker. To avoid the cursor disappearing while doing the background checking, on entry into fl_BlockLayout::checkSpelling() we flick the cursor off and then flick it on again just before we leave. This results in erratic blinking since the interval of the blink is dictated by the time it takes to spellcheck the current block, which is considerable for long blocks and virtually null for short blocks (load a reasonably long document, say 50 pages, and watch the behaviour of the cursor immediately after the loading of the document finishes). Now, I could improve the code in fl_BlockLayout::checkSpelling() so that it does not flick the cursor more often than every 500 ms, but that seems like treating the symptoms, not the problem. It would seem to me that the proper solution would be to have the cursor- blinking timer running in a separate thread, so that it does not get blocked by other timer events in the main thead. This way we could remove all the cursor-handling stuff from the spellchecking code, and would not need to worry about the cursor if/when in the future we implement other timer-driven stuff. What do you think about the suggestion? Tomas
