screen resizing fixes when resizeterm() isn't supported

git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1123 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2001-01-15 22:47:51 +00:00 committed by cras
parent 0807bafbe8
commit ae2bb54a42
2 changed files with 34 additions and 17 deletions

View File

@ -95,7 +95,6 @@ static void mainwindow_resize(MAIN_WINDOW_REC *window, int ychange, int xchange)
signal_emit("mainwindow resized", 1, window); signal_emit("mainwindow resized", 1, window);
} }
#ifdef USE_CURSES_WINDOWS
void mainwindows_recreate(void) void mainwindows_recreate(void)
{ {
GSList *tmp; GSList *tmp;
@ -103,11 +102,12 @@ void mainwindows_recreate(void)
for (tmp = mainwindows; tmp != NULL; tmp = tmp->next) { for (tmp = mainwindows; tmp != NULL; tmp = tmp->next) {
MAIN_WINDOW_REC *rec = tmp->data; MAIN_WINDOW_REC *rec = tmp->data;
#ifdef USE_CURSES_WINDOWS
create_curses_window(rec); create_curses_window(rec);
#endif
gui_window_redraw(rec->active); gui_window_redraw(rec->active);
} }
} }
#endif
MAIN_WINDOW_REC *mainwindow_create(void) MAIN_WINDOW_REC *mainwindow_create(void)
{ {

View File

@ -42,14 +42,18 @@ static int scrx, scry;
static int use_colors; static int use_colors;
static int freeze_refresh; static int freeze_refresh;
static int init_screen_int(void);
static void deinit_screen_int(void);
#ifdef SIGWINCH #ifdef SIGWINCH
static void sig_winch(int p) static void sig_winch(int p)
{ {
#ifdef TIOCGWINSZ
struct winsize ws;
int ychange, xchange; int ychange, xchange;
#if defined (TIOCGWINSZ) && defined (HAVE_CURSES_RESIZETERM)
struct winsize ws;
/* Get new window size */ /* Get new window size */
if (ioctl(0, TIOCGWINSZ, &ws) < 0) if (ioctl(0, TIOCGWINSZ, &ws) < 0)
return; return;
@ -65,16 +69,22 @@ static void sig_winch(int p)
/* Resize curses terminal */ /* Resize curses terminal */
ychange = ws.ws_row-LINES; ychange = ws.ws_row-LINES;
xchange = ws.ws_col-COLS; xchange = ws.ws_col-COLS;
#ifdef HAVE_CURSES_RESIZETERM
resizeterm(ws.ws_row, ws.ws_col); resizeterm(ws.ws_row, ws.ws_col);
#else #else
deinit_screen(); int old_lines, old_cols;
init_screen();
old_lines = LINES;
old_cols = COLS;
deinit_screen_int();
init_screen_int();
mainwindows_recreate(); mainwindows_recreate();
ychange = LINES-old_lines;
xchange = COLS-old_cols;
#endif #endif
mainwindows_resize(ychange, xchange != 0); mainwindows_resize(ychange, xchange != 0);
#endif
} }
#endif #endif
@ -164,30 +174,37 @@ static int init_curses(void)
return TRUE; return TRUE;
} }
/* Initialize screen, detect screen length */ static int init_screen_int(void)
int init_screen(void)
{ {
settings_add_bool("lookandfeel", "colors", TRUE);
settings_add_str("misc", "ignore_signals", "");
use_colors = settings_get_bool("colors"); use_colors = settings_get_bool("colors");
read_signals(); read_signals();
scrx = scry = 0; scrx = scry = 0;
freeze_refresh = 0; freeze_refresh = 0;
if (!init_curses()) return init_curses();
return FALSE; }
static void deinit_screen_int(void)
{
endwin();
}
/* Initialize screen, detect screen length */
int init_screen(void)
{
settings_add_bool("lookandfeel", "colors", TRUE);
settings_add_str("misc", "ignore_signals", "");
signal_add("setup changed", (SIGNAL_FUNC) read_settings); signal_add("setup changed", (SIGNAL_FUNC) read_settings);
return 1;
return init_screen_int();
} }
/* Deinitialize screen */ /* Deinitialize screen */
void deinit_screen(void) void deinit_screen(void)
{ {
deinit_screen_int();
signal_remove("setup changed", (SIGNAL_FUNC) read_settings); signal_remove("setup changed", (SIGNAL_FUNC) read_settings);
endwin();
} }
void set_color(WINDOW *window, int col) void set_color(WINDOW *window, int col)