I also test the windows version of SciTE, if I change the caret.period=1000 (in SciTEGlobal.properties), it also blink correctly, so it is a bug in wxScintilla or in our cbEditor.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
When reading and debugging the code, I see the multiply timers were introduced in the merge of the Scintilla 3.5.0 branch.
I see the multiply timers (wxTimer* timers[tickDwell+1];) are conflict with the wxSCITimer, this is the only usage of SCITimer, do we need them?
Or, shall we need the multiply timers here?
It is related to the wxWidgets port of the scintilla control, I looked at the wx trunk head, they don't have the multiply timers implementation in their wxScintilla(wxSTC), I think those improvements were done by Morten, so I wrote an email to Morten to ask his help.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Look at code of scintilla implementation for different platforms in scintilla's Mercurial code repo. I see that many platform use the multiply timers, but the SetTicking() is deprecated and never used any more, so I think we should not use this function call either.
Yes, I also think it was too fast.
ollydbg: Would you do it?
I extended to 1500ms, but I see the caret does not blink correctly compared with Windows native notepad.exe. Maybe, it is a scintilla bug.
This is patch can be abandoned, since it doesn't solve the core issue, my later patch should fix the issue.
I also test the windows version of SciTE, if I change the caret.period=1000 (in SciTEGlobal.properties), it also blink correctly, so it is a bug in wxScintilla or in our cbEditor.
Probably it is wxscintilla related bug. If you have time it will be best if you can test the same thing in wxstc.
When reading and debugging the code, I see the multiply timers were introduced in the merge of the Scintilla 3.5.0 branch.
I see the multiply timers (wxTimer* timers[tickDwell+1];) are conflict with the wxSCITimer, this is the only usage of SCITimer, do we need them?
Or, shall we need the multiply timers here?
Here is the patch to fix this issue, it works fine here under my Windows XP.
Not sure other platform's result.
I don't know, you should probably talk to the scintilla maintainers about this. Or see if wx guys have fix similar issue recently.
It is related to the wxWidgets port of the scintilla control, I looked at the wx trunk head, they don't have the multiply timers implementation in their wxScintilla(wxSTC), I think those improvements were done by Morten, so I wrote an email to Morten to ask his help.
Look at code of scintilla implementation for different platforms in scintilla's Mercurial code repo. I see that many platform use the multiply timers, but the SetTicking() is deprecated and never used any more, so I think we should not use this function call either.
Now, I see that the SetFocusState() function already modify the caret status in ShowCaretAtCurrentPosition() and DropCaret().
So, just comment out all the function call of SetTicking() in the ScintillaWX.cpp. It also works fine.
thanks ollydbg, seemed like alot of work for something silly but it really does make a difference when your staring at it.
Commit the fix now.