tty: kernel should send SIGWINCH, not terminal

This commit is contained in:
K. Lange 2018-10-28 19:03:04 +09:00
parent 4fb42341dd
commit 0995d14106
3 changed files with 12 additions and 17 deletions

View File

@ -64,7 +64,7 @@ char * selection_text = NULL;
term_state_t * ansi_state = NULL; term_state_t * ansi_state = NULL;
void reinit(); /* Defined way further down */ void reinit(void); /* Defined way further down */
void term_redraw_cursor(); void term_redraw_cursor();
void term_clear(); void term_clear();
@ -1046,7 +1046,7 @@ term_callbacks_t term_callbacks = {
NULL, NULL,
}; };
void reinit(int send_sig) { void reinit(void) {
if (term_buffer) { if (term_buffer) {
/* Do nothing */ /* Do nothing */
} else { } else {
@ -1205,7 +1205,7 @@ int main(int argc, char ** argv) {
w.ws_ypixel = 0; w.ws_ypixel = 0;
ioctl(fd_master, TIOCSWINSZ, &w); ioctl(fd_master, TIOCSWINSZ, &w);
reinit(0); reinit();
fflush(stdin); fflush(stdin);

View File

@ -155,7 +155,7 @@ static struct MenuList * menu_right_click = NULL;
static void render_decors(void); static void render_decors(void);
static void term_clear(); static void term_clear();
static void reinit(); static void reinit(void);
static void term_redraw_cursor(); static void term_redraw_cursor();
static int decor_left_width = 0; static int decor_left_width = 0;
@ -1714,7 +1714,7 @@ static void key_event(int ret, key_event_t * event) {
_no_frame = !_no_frame; _no_frame = !_no_frame;
window_width = window->width - decor_width * (!_no_frame); window_width = window->width - decor_width * (!_no_frame);
window_height = window->height - (decor_height + menu_bar_height) * (!_no_frame); window_height = window->height - (decor_height + menu_bar_height) * (!_no_frame);
reinit(1); reinit();
} }
break; break;
case KEY_ARROW_UP: case KEY_ARROW_UP:
@ -1866,7 +1866,7 @@ static term_cell_t * copy_terminal(int old_width, int old_height, term_cell_t *
} }
/* Reinitialize the terminal after a resize. */ /* Reinitialize the terminal after a resize. */
static void reinit(int send_sig) { static void reinit(void) {
/* Figure out character sizes if fonts have changed. */ /* Figure out character sizes if fonts have changed. */
if (_use_aa && !_have_freetype) { if (_use_aa && !_have_freetype) {
@ -1943,11 +1943,6 @@ static void reinit(int send_sig) {
w.ws_xpixel = term_width * char_width; w.ws_xpixel = term_width * char_width;
w.ws_ypixel = term_height * char_height; w.ws_ypixel = term_height * char_height;
ioctl(fd_master, TIOCSWINSZ, &w); ioctl(fd_master, TIOCSWINSZ, &w);
/* If requested, send a signal to the application. */
if (send_sig) {
kill(child_pid, SIGWINCH);
}
} }
static void update_bounds(void) { static void update_bounds(void) {
@ -2009,7 +2004,7 @@ static void resize_finish(int width, int height) {
reinit_graphics_yutani(ctx, window); reinit_graphics_yutani(ctx, window);
/* Reinitialize the terminal buffer and ANSI library */ /* Reinitialize the terminal buffer and ANSI library */
reinit(1); reinit();
/* We are done resizing. */ /* We are done resizing. */
yutani_window_resize_done(yctx, window); yutani_window_resize_done(yctx, window);
@ -2254,13 +2249,13 @@ static void _menu_action_hide_borders(struct MenuEntry * self) {
window_height = window->height - (decor_height + menu_bar_height) * (!_no_frame); window_height = window->height - (decor_height + menu_bar_height) * (!_no_frame);
menu_update_title(_menu_toggle_borders_context, _no_frame ? "Show borders" : "Hide borders"); menu_update_title(_menu_toggle_borders_context, _no_frame ? "Show borders" : "Hide borders");
menu_update_title(_menu_toggle_borders_bar, _no_frame ? "Show borders" : "Hide borders"); menu_update_title(_menu_toggle_borders_bar, _no_frame ? "Show borders" : "Hide borders");
reinit(1); reinit();
} }
static void _menu_action_toggle_sdf(struct MenuEntry * self) { static void _menu_action_toggle_sdf(struct MenuEntry * self) {
_use_aa = !(_use_aa); _use_aa = !(_use_aa);
menu_update_title(self, _use_aa ? "Bitmap font" : "Anti-aliased font"); menu_update_title(self, _use_aa ? "Bitmap font" : "Anti-aliased font");
reinit(1); reinit();
} }
static void _menu_action_show_about(struct MenuEntry * self) { static void _menu_action_show_about(struct MenuEntry * self) {
@ -2295,7 +2290,7 @@ static void _menu_action_set_scale(struct MenuEntry * self) {
scale_fonts = 1; scale_fonts = 1;
font_scaling = atof(_self->action); font_scaling = atof(_self->action);
} }
reinit(1); reinit();
} }
int main(int argc, char ** argv) { int main(int argc, char ** argv) {
@ -2474,7 +2469,7 @@ int main(int argc, char ** argv) {
terminal = fdopen(fd_slave, "w"); terminal = fdopen(fd_slave, "w");
/* Initialize the terminal buffer and ANSI library for the first time. */ /* Initialize the terminal buffer and ANSI library for the first time. */
reinit(0); reinit();
/* Make sure we're not passing anything to stdin on the child */ /* Make sure we're not passing anything to stdin on the child */
fflush(stdin); fflush(stdin);

View File

@ -273,7 +273,7 @@ int pty_ioctl(pty_t * pty, int request, void * argp) {
if (!argp) return -EINVAL; if (!argp) return -EINVAL;
validate(argp); validate(argp);
memcpy(&pty->size, argp, sizeof(struct winsize)); memcpy(&pty->size, argp, sizeof(struct winsize));
/* TODO send sigwinch to fg_prog */ group_send_signal(pty->fg_proc, SIGWINCH, 1);
return 0; return 0;
case TIOCGWINSZ: case TIOCGWINSZ:
if (!argp) return -EINVAL; if (!argp) return -EINVAL;