On 4 November 2010 18:18, Wincent Colaiuta <[email protected]> wrote: > On Nov 4, 3:35 pm, björn <[email protected]> wrote: >> >> Thanks. I just tried reproducing with snapshot 52 (the version you >> used when reporting this issue originally) and I can't repro either. >> Weird. > > Perhaps a change in Mac OS X? > >> I'm be happy to merge this, if there is a regression we'll just have >> to find another fix, but...I notice several places in window.c where >> the same line that you just patched appears. Should we perhaps change >> all of them to NOT_VALID instead of CLEAR? I have to take a closer >> look, but I'd value your input. > > I can see three places where we are using CLEAR as a special case for > MacVim: > > - in win_split_ins(), which is used for inserting a new split > > - in win_split(), which is used for splitting an existing window > > - in win_new_height(), which is used to set the vertical height of the > window > > To be honest I am not sure why it's needed in any of those places, as > one would think that SOME_VALID or NOT_VALID would be enough; quoting > from the definitions in src/vim.h: > > #define SOME_VALID 35 /* like NOT_VALID but may scroll > */ > #define NOT_VALID 40 /* buffer needs complete redraw > */ > #define CLEAR 50 /* screen messed up, clear it */ > > The meaning of these is described in depth in src/screen.c: > > * Commands that change how a window is displayed (e.g., setting > 'list') or > * invalidate the contents of a window in another way (e.g., change > fold > * settings), must call redraw_later(NOT_VALID) to have the whole > window > * redisplayed by update_screen() later. > * > * Commands that change how a buffer is displayed (e.g., setting > 'tabstop') > * must call redraw_curbuf_later(NOT_VALID) to have all the windows > for the > * buffer redisplayed by update_screen() later. > * > * Commands that change highlighting and possibly cause a scroll too > must call > * redraw_later(SOME_VALID) to update the whole window but still use > scrolling > * to avoid redrawing everything. But the length of displayed lines > must not > * change, use NOT_VALID then. > * > * Commands that move the window position must call > redraw_later(NOT_VALID). > * TODO: should minimize redrawing by scrolling when possible. > * > * Commands that change everything (e.g., resizing the screen) must > call > * redraw_all_later(NOT_VALID) or redraw_all_later(CLEAR). > > So, I don't know. I would think that CLEAR would never be needed, to > be honest, when NOT_VALID/SOME_VALID is enough on other platforms... > > But yeah, as you say, there's always the risk of regressing.
The problem as I can remember it (with the Core Text renderer) is that splitting a window may cause a scrollbar to appear, thereby causing the entire view to be shifted to the side. In this situation the entire view really needs to be redrawn since Cocoa doesn't shift the contents to make place for the scrollbar. >From what I can tell NOT_VALID should still be enough though so your patch may still not cause any regressions. Björn -- You received this message from the "vim_mac" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php
