B_FULL_UPDATE_ON_RESIZE doesn't call Draw() intermittedly
|Reported by:||jscipione||Owned by:||nobody|
|Has a Patch:||no||Platform:||All|
Experienced this issue in DeskCalc with B_FULL_UPDATE_ON_RESIZE and B_FRAME_EVENTS view flags and B_FOLLOW_ALL_SIDES for the resizing mode flag of the view. When you resize the window App Server calls FrameResized() but occasionally doesn't call Draw() afterwords. In DeskCalc this is worked around by calling Invalidate() at the end of FrameResized() but that shouldn't be needed.
I've attached a test program to this ticket that you can see the issue more clearly. Build it with:
gcc -lbe -o resizetest resizetest.cpp
Then run the program from terminal like this to see the output:
I've tested this program on both BeOS R5 and Haiku and both OS's seem to experience this issue but it happens much more often on Haiku.
The view starts off green. On R5 as you resize the view it flashes red then settles on blue (iow Draw() then FrameResized() get called) while on Haiku it flashes blue then settles on red (iow FrameResized() then Draw() get called). While this is different between the two OS's I don't think it's a problem, I just wanted to point out the difference in case it helps to track down the bug.
The real problem is that when you're done resizing the window occasionally the view will end up blue on Haiku because Draw() never got called. This is a little bit tough to do with the test program but is very easy to pull off on DeskCalc. If you look at the output of the program in Terminal though it shows what is happening: FrameResized() gets called several times with no corresponding Draw().
This might be related to #7010.