- } else if (need_update == SELECTION) {
- bv->screen()->ToggleToggle(TEXT(bv), y, int(x));
- } else {
- locked = false;
- if (need_update == CURSOR) {
- bv->screen()->ToggleSelection(TEXT(bv), true, y, int(x));
- TEXT(bv)->ClearSelection();
- TEXT(bv)->sel_cursor = TEXT(bv)->cursor;
+ if (y_offset < 0)
+ y_offset = y;
+ TEXT(bv)->first = first;
+ if (cleared) { // (need_update&FULL) || (need_update&INIT)
+ int yf = y_offset;
+ y = 0;
+ while ((row != 0) && (yf < ph)) {
+ TEXT(bv)->GetVisibleRow(bv, y+y_offset, int(x), row,
+ y+first, cleared);
+ y += row->height();
+ yf += row->height();
+ row = row->next();
+ }
+ } else if (!locked) {
+ if (need_update & CURSOR) {
+ bv->screen()->ToggleSelection(TEXT(bv), bv, true, y_offset,int(x));
+ TEXT(bv)->ClearSelection(bv);
+ TEXT(bv)->sel_cursor = TEXT(bv)->cursor;
+ }
+ bv->screen()->Update(TEXT(bv), bv, y_offset, int(x));
+ } else {
+ locked = false;
+ if (need_update & SELECTION)
+ bv->screen()->ToggleToggle(TEXT(bv), bv, y_offset, int(x));
+ else if (need_update & CURSOR) {
+ bv->screen()->ToggleSelection(TEXT(bv), bv, true, y_offset,int(x));
+ TEXT(bv)->ClearSelection(bv);
+ TEXT(bv)->sel_cursor = TEXT(bv)->cursor;
+ }
+ bv->screen()->Update(TEXT(bv), bv, y_offset, int(x));
+ locked = true;