X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fwindows.c;h=13dbed0e9d5f6cd8aa28e3b637456fc3b3aaf548;hb=b1af9d56e78085b64a9825e5b3914dff118dea7c;hp=ec176ed7ea2f11414a43c97feeedf4438881e754;hpb=598eeab09f9c377e65f886b147e037e7972dadf9;p=plomrogue diff --git a/src/windows.c b/src/windows.c index ec176ed..13dbed0 100644 --- a/src/windows.c +++ b/src/windows.c @@ -533,116 +533,13 @@ extern void cycle_active_win(struct WinMeta * wmeta, char dir) -extern uint8_t shift_active_win_old(struct WinMeta * wmeta, char dir) +extern uint8_t shift_active_win(struct WinMeta * wmeta, char dir) { - if (0 != wmeta->active /* No shifting with less */ - && wmeta->chain_start != wmeta->chain_end /* than 2 windows visible. */ - && (dir == 'f' || dir == 'b')) /* and wrong dir char. */ + if ( 0 == wmeta->active /* No shifting with less */ + || wmeta->chain_start == wmeta->chain_end /* than two windows visible */ + || (dir != 'f' && dir != 'b')) /* or wrong direction char. */ { - struct Win * w_shift = wmeta->active, * w_p, * w_p_next; - - /* Check if shifting will lead to wrapping. */ - char wrap = 0; - if ( (dir == 'f' && w_shift == wmeta->chain_end) - || (dir == 'b' && w_shift == wmeta->chain_start)) - { - wrap = 1; - } - - /* Suspend all visible windows, remember their order in wins[]. */ - uint16_t i, i_max; - for (w_p = wmeta->chain_start, i_max = 1; - w_p != wmeta->chain_end; - w_p = w_p->next) - { - i_max++; - } - struct Win ** wins = malloc(i_max * sizeof(struct Win *)); - if (NULL == wins) - { - return 1; - } - for (i = 0, w_p = wmeta->chain_start; - i < i_max; - i++) - { - w_p_next = w_p->next; - suspend_win(wmeta, w_p); - wins[i] = w_p; - w_p = w_p_next; - } - - /* Re-append all previously visible windows in the new order. */ - if (wrap) - { - if (dir == 'f') - { - if (0 != append_win(wmeta, w_shift)) - { - return 1; - } - for (i = 0; i < i_max - 1; i++) - { - if (0 != append_win(wmeta, wins[i])) - { - return 1; - } - } - } - else - { - for (i = 1; i < i_max; i++) - { - if (0 != append_win(wmeta, wins[i])) - { - return 1; - } - } - if (0 != append_win(wmeta, w_shift)) - { - return 1; - } - } - } - else - { - for (i = 0; i < i_max; i++) - { - if ( (dir == 'f' && w_shift == wins[i]) - || (dir == 'b' && w_shift == wins[i+1])) - { - if ( 0 != append_win(wmeta, wins[i+1]) - || 0 != append_win(wmeta, wins[i])) - { - return 1; - } - i++; - } - else - { - if (0 != append_win(wmeta, wins[i])) - { - return 1; - } - } - } - } - free(wins); - - wmeta->active = w_shift; /* Otherwise lastly appended win is active. */ - } - return 0; -} - - - -extern void shift_active_win(struct WinMeta * wmeta, char dir) -{ - if ( 0 == wmeta->active - || wmeta->chain_start == wmeta->chain_end - || (dir != 'f' && dir != 'b')) - { - return; + return 0; } if ('f' == dir) { @@ -652,12 +549,12 @@ extern void shift_active_win(struct WinMeta * wmeta, char dir) { shift_win_backward(wmeta); } - update_wins(wmeta, wmeta->chain_start); + return update_wins(wmeta, wmeta->chain_start); } -extern void draw_all_wins(struct WinMeta * wmeta) +extern uint8_t draw_all_wins(struct WinMeta * wmeta) { /* Empty everything before filling it a-new. */ erase(); @@ -675,17 +572,23 @@ extern void draw_all_wins(struct WinMeta * wmeta) /* Draw virtual screen scroll hints. */ if (wmeta->pad_offset > 0) { - draw_scroll_hint(&wmeta->padframe, - wmeta->pad_offset, wmeta->pad_offset + 1, '<'); + if (draw_scroll_hint(&wmeta->padframe, + wmeta->pad_offset, wmeta->pad_offset + 1, '<')) + { + return 1; + } } if (wmeta->pad_offset + wmeta->padframe.size.x < getmaxx(wmeta->padframe.curses_win) - 1) { - draw_scroll_hint(&wmeta->padframe, - wmeta->pad_offset + wmeta->padframe.size.x - 1, - getmaxx(wmeta->padframe.curses_win) - - (wmeta->pad_offset + wmeta->padframe.size.x), - '>'); + if (draw_scroll_hint(&wmeta->padframe, + wmeta->pad_offset + wmeta->padframe.size.x - 1, + getmaxx(wmeta->padframe.curses_win) + - (wmeta->pad_offset + wmeta->padframe.size.x), + '>')) + { + return 1; + } } /* Write virtual screen segment to be shown on physical screen into */ @@ -696,6 +599,7 @@ extern void draw_all_wins(struct WinMeta * wmeta) /* Only at the end write accumulated changes to the physical screen. */ doupdate(); + return 0; }