X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Fresizeterm.c;h=a94cfc3aaaa8512e464e13497c76c23d8fdfdee1;hp=b2cff21677bb838bb97a0bb795a045c9c28988b3;hb=9fab8ab6b69130169a6880e63585d83efb1c1722;hpb=8144a95f5729b46a1ad4f4c3c4ba29800304e4c0 diff --git a/ncurses/base/resizeterm.c b/ncurses/base/resizeterm.c index b2cff216..a94cfc3a 100644 --- a/ncurses/base/resizeterm.c +++ b/ncurses/base/resizeterm.c @@ -41,7 +41,7 @@ #include #include -MODULE_ID("$Id: resizeterm.c,v 1.28 2008/01/06 01:23:36 tom Exp $") +MODULE_ID("$Id: resizeterm.c,v 1.34 2008/06/07 13:58:40 tom Exp $") #define stolen_lines (screen_lines - SP->_lines_avail) @@ -66,10 +66,10 @@ show_window_sizes(const char *name) { WINDOWLIST *wp; - _nc_lock_global(windowlist); + _nc_lock_global(curses); _tracef("%s resizing: %2d x %2d (%2d x %2d)", name, LINES, COLS, screen_lines, screen_columns); - for (wp = _nc_windows; wp != 0; wp = wp->next) { + for (each_window(wp)) { _tracef(" window %p is %2ld x %2ld at %2ld,%2ld", &(wp->win), (long) wp->win._maxy + 1, @@ -77,7 +77,7 @@ show_window_sizes(const char *name) (long) wp->win._begy, (long) wp->win._begx); } - _nc_unlock_global(windowlist); + _nc_unlock_global(curses); } #endif @@ -104,7 +104,7 @@ ripped_window(WINDOW *win) ripoff_t *rop; if (win != 0) { - for (rop = ripoff_stack; (rop - ripoff_stack) < N_RIPS; rop++) { + for (each_ripoff(rop)) { if (rop->win == win && rop->line != 0) { result = rop; break; @@ -125,7 +125,7 @@ ripped_bottom(WINDOW *win) ripoff_t *rop; if (win != 0) { - for (rop = ripoff_stack; (rop - ripoff_stack) < N_RIPS; rop++) { + for (each_ripoff(rop)) { if (rop->line < 0) { result -= rop->line; if (rop->win == win) { @@ -148,7 +148,7 @@ child_depth(WINDOW *cmp) if (cmp != 0) { WINDOWLIST *wp; - for (wp = _nc_windows; wp != 0; wp = wp->next) { + for (each_window(wp)) { WINDOW *tst = &(wp->win); if (tst->_parent == cmp) { depth = 1 + child_depth(tst); @@ -210,24 +210,22 @@ adjust_window(WINDOW *win, int ToLines, int ToCols, int stolen EXTRA_DCLS) */ win->_begy += (ToLines - CurLines); } else { - if (myLines == CurLines - stolen - && ToLines != CurLines) + if (myLines == (CurLines - stolen) + && ToLines != CurLines) { myLines = ToLines - stolen; - else if (myLines == CurLines - && ToLines != CurLines) + } else if (myLines == CurLines + && ToLines != CurLines) { myLines = ToLines; + } } - if (myLines > ToLines) + if (myLines > ToLines) { myLines = ToLines; + } if (myCols > ToCols) myCols = ToCols; - if (myLines == CurLines - && ToLines != CurLines) - myLines = ToLines; - if (myCols == CurCols && ToCols != CurCols) myCols = ToCols; @@ -253,7 +251,7 @@ decrease_size(int ToLines, int ToCols, int stolen EXTRA_DCLS) found = FALSE; TR(TRACE_UPDATE, ("decreasing size of windows to %dx%d, depth=%d", ToLines, ToCols, depth)); - for (wp = _nc_windows; wp != 0; wp = wp->next) { + for (each_window(wp)) { WINDOW *win = &(wp->win); if (!(win->_flags & _ISPAD)) { @@ -287,7 +285,7 @@ increase_size(int ToLines, int ToCols, int stolen EXTRA_DCLS) found = FALSE; TR(TRACE_UPDATE, ("increasing size of windows to %dx%d, depth=%d", ToLines, ToCols, depth)); - for (wp = _nc_windows; wp != 0; wp = wp->next) { + for (each_window(wp)) { WINDOW *win = &(wp->win); if (!(win->_flags & _ISPAD)) { @@ -322,7 +320,7 @@ resize_term(int ToLines, int ToCols) returnCode(ERR); } - _nc_lock_global(windowlist); + _nc_lock_global(curses); was_stolen = (screen_lines - SP->_lines_avail); if (is_term_resized(ToLines, ToCols)) { @@ -380,7 +378,7 @@ resize_term(int ToLines, int ToCols) SET_LINES(ToLines - was_stolen); SET_COLS(ToCols); - _nc_unlock_global(windowlist); + _nc_unlock_global(curses); returnCode(result); } @@ -420,13 +418,17 @@ resizeterm(int ToLines, int ToCols) result = resize_term(ToLines, ToCols); #if USE_SIGWINCH - ungetch(KEY_RESIZE); /* so application can know this */ + _nc_ungetch(SP, KEY_RESIZE); /* so application can know this */ clearok(curscr, TRUE); /* screen contents are unknown */ /* ripped-off lines are a special case: if we did not lengthen * them, we haven't moved them either. repaint them, too. + * + * for the rest - stdscr and other windows - the client has to + * decide which to repaint, since without panels, ncurses does + * not know which are really on top. */ - for (rop = ripoff_stack; (rop - ripoff_stack) < N_RIPS; rop++) { + for (each_ripoff(rop)) { if (rop->win != stdscr && rop->win != 0 && rop->line < 0) {