summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2001-01-15 22:47:51 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2001-01-15 22:47:51 +0000
commitae2bb54a42c9efc9050d930d1039f1cf5ee7a72e (patch)
tree9a783cc72273e9de96c64ce88b3c6e1bc367b9d3 /src
parent0807bafbe8bace7938563ef3d56b74c0d1e96949 (diff)
downloadirssi-ae2bb54a42c9efc9050d930d1039f1cf5ee7a72e.zip
screen resizing fixes when resizeterm() isn't supported
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1123 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src')
-rw-r--r--src/fe-text/mainwindows.c4
-rw-r--r--src/fe-text/screen.c47
2 files changed, 34 insertions, 17 deletions
diff --git a/src/fe-text/mainwindows.c b/src/fe-text/mainwindows.c
index 57d3bc24..8984c120 100644
--- a/src/fe-text/mainwindows.c
+++ b/src/fe-text/mainwindows.c
@@ -95,7 +95,6 @@ static void mainwindow_resize(MAIN_WINDOW_REC *window, int ychange, int xchange)
signal_emit("mainwindow resized", 1, window);
}
-#ifdef USE_CURSES_WINDOWS
void mainwindows_recreate(void)
{
GSList *tmp;
@@ -103,11 +102,12 @@ void mainwindows_recreate(void)
for (tmp = mainwindows; tmp != NULL; tmp = tmp->next) {
MAIN_WINDOW_REC *rec = tmp->data;
+#ifdef USE_CURSES_WINDOWS
create_curses_window(rec);
+#endif
gui_window_redraw(rec->active);
}
}
-#endif
MAIN_WINDOW_REC *mainwindow_create(void)
{
diff --git a/src/fe-text/screen.c b/src/fe-text/screen.c
index 917cb133..d38ab88f 100644
--- a/src/fe-text/screen.c
+++ b/src/fe-text/screen.c
@@ -42,14 +42,18 @@ static int scrx, scry;
static int use_colors;
static int freeze_refresh;
+static int init_screen_int(void);
+static void deinit_screen_int(void);
+
#ifdef SIGWINCH
static void sig_winch(int p)
{
-#ifdef TIOCGWINSZ
- struct winsize ws;
int ychange, xchange;
+#if defined (TIOCGWINSZ) && defined (HAVE_CURSES_RESIZETERM)
+ struct winsize ws;
+
/* Get new window size */
if (ioctl(0, TIOCGWINSZ, &ws) < 0)
return;
@@ -65,16 +69,22 @@ static void sig_winch(int p)
/* Resize curses terminal */
ychange = ws.ws_row-LINES;
xchange = ws.ws_col-COLS;
-#ifdef HAVE_CURSES_RESIZETERM
resizeterm(ws.ws_row, ws.ws_col);
#else
- deinit_screen();
- init_screen();
+ int old_lines, old_cols;
+
+ old_lines = LINES;
+ old_cols = COLS;
+
+ deinit_screen_int();
+ init_screen_int();
mainwindows_recreate();
+
+ ychange = LINES-old_lines;
+ xchange = COLS-old_cols;
#endif
mainwindows_resize(ychange, xchange != 0);
-#endif
}
#endif
@@ -164,30 +174,37 @@ static int init_curses(void)
return TRUE;
}
-/* Initialize screen, detect screen length */
-int init_screen(void)
+static int init_screen_int(void)
{
- settings_add_bool("lookandfeel", "colors", TRUE);
- settings_add_str("misc", "ignore_signals", "");
-
use_colors = settings_get_bool("colors");
read_signals();
scrx = scry = 0;
freeze_refresh = 0;
- if (!init_curses())
- return FALSE;
+ return init_curses();
+}
+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);
- return 1;
+
+ return init_screen_int();
}
/* Deinitialize screen */
void deinit_screen(void)
{
+ deinit_screen_int();
signal_remove("setup changed", (SIGNAL_FUNC) read_settings);
- endwin();
}
void set_color(WINDOW *window, int col)