Changeset 099597c for owl.c


Ignore:
Timestamp:
Feb 4, 2011, 5:32:37 PM (10 years ago)
Author:
David Benjamin <davidben@mit.edu>
Branches:
master, release-1.8, release-1.9
Children:
8d553bf
Parents:
e062f97
git-author:
David Benjamin <davidben@mit.edu> (01/25/11 17:27:10)
git-committer:
David Benjamin <davidben@mit.edu> (02/04/11 17:32:37)
Message:
Don't reset colorpairs in the middle of drawing

Resetting colorpairs while drawing the mainwin causes the existing
contents in a popwin to refer to invalid color pairs. We used to draw
the mainwin first and redraw the contents of each window from scratch.
Moving to libpanel in 1.6 changed this, so background colors
occasionally bled into your popwin.

This changes the colorpair logic to only trigger when we need to, and to
forcibly dirty every window if needed. NOTE: if we don't have enough
color-pairs to draw the current screen, this will draw everything twice.
But it will probably almost never happen.

Reported-by: Alex Dehnert <adehnert@mit.edu>
Reviewed-by: Alejandro R. Sedeño <asedeno@mit.edu>
File:
1 edited

Legend:

Unmodified
Added
Removed
  • owl.c

    rd3941a0 r099597c  
    444444static int owl_refresh_pre_select_action(owl_ps_action *a, void *data)
    445445{
     446  owl_colorpair_mgr *cpmgr;
     447
    446448  /* if a resize has been scheduled, deal with it */
    447449  owl_global_check_resize(&g);
    448450  /* update the terminal if we need to */
    449451  owl_window_redraw_scheduled();
     452  /* On colorpair shortage, reset and redraw /everything/. NOTE: if
     453   * the current screen uses too many colorpairs, this draws
     454   * everything twice. But this is unlikely; COLOR_PAIRS is 64 with
     455   * 8+1 colors, and 256^2 with 256+1 colors. (+1 for default.) */
     456  cpmgr = owl_global_get_colorpair_mgr(&g);
     457  if (cpmgr->overflow) {
     458    owl_function_debugmsg("colorpairs: color shortage; reset pairs and redraw. COLOR_PAIRS = %d", COLOR_PAIRS);
     459    owl_fmtext_reset_colorpairs(cpmgr);
     460    owl_function_full_redisplay();
     461    owl_window_redraw_scheduled();
     462  }
    450463  return 0;
    451464}
Note: See TracChangeset for help on using the changeset viewer.