diff options
author | Christopher Faylor <me@cgf.cx> | 2002-08-19 04:43:58 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2002-08-19 04:43:58 +0000 |
commit | c060edba342decad9f5e29837a04cf82ff61b7a0 (patch) | |
tree | 243725d46a0926fd8c6243363cde0e3c173d0bdf /winsup/cygwin/fhandler_console.cc | |
parent | a94b60cea46803ad239495fe0fe3fbcc13766b81 (diff) | |
download | cygnal-c060edba342decad9f5e29837a04cf82ff61b7a0.tar.gz cygnal-c060edba342decad9f5e29837a04cf82ff61b7a0.tar.bz2 cygnal-c060edba342decad9f5e29837a04cf82ff61b7a0.zip |
* fhandler.h (fhandler_console::send_winch_maybe): New method.
* fhandler_console.cc (set_console_state_for_spawn): Remove if 0'ed code.
(fhandler_console::send_winch_maybe): Define new method.
(fhandler_console::read): Use send_winch_maybe where appropriate.
(fhandler_console::init): Just call all tcsetattr rather than output_tcsetattr.
* select.cc (peek_console): Reorganize so that send_winch_maybe is called for
everything but keyboard input.
Diffstat (limited to 'winsup/cygwin/fhandler_console.cc')
-rw-r--r-- | winsup/cygwin/fhandler_console.cc | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc index bae7c11a7..e9ca5b09d 100644 --- a/winsup/cygwin/fhandler_console.cc +++ b/winsup/cygwin/fhandler_console.cc @@ -147,13 +147,6 @@ set_console_state_for_spawn () # define tc shared_console_info /* ACK. Temporarily define for use in TTYSETF macro */ SetConsoleMode (h, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT); TTYSETF (RSTCONS); -#if 0 - char ch; - DWORD n; - /* NOTE -- This ReadFile is apparently necessary for correct functioning on - Windows NT 4.0. Without this, the next ReadFile returns garbage. */ - (void) ReadFile (h, &ch, 0, &n, NULL); -#endif # undef tc } @@ -186,6 +179,17 @@ fhandler_console::set_cursor_maybe () } } +void +fhandler_console::send_winch_maybe () +{ + SHORT y = info.dwWinSize.Y; + SHORT x = info.dwWinSize.X; + fillin_info (); + + if (y != info.dwWinSize.Y || x != info.dwWinSize.X) + tc->kill_pgrp (SIGWINCH); +} + int __stdcall fhandler_console::read (void *pv, size_t buflen) { @@ -332,9 +336,10 @@ fhandler_console::read (void *pv, size_t buflen) break; case MOUSE_EVENT: + send_winch_maybe (); if (use_mouse) { - MOUSE_EVENT_RECORD & mouse_event = input_rec.Event.MouseEvent; + MOUSE_EVENT_RECORD& mouse_event = input_rec.Event.MouseEvent; /* Treat the double-click event like a regular button press */ if (mouse_event.dwEventFlags == DOUBLE_CLICK) @@ -416,10 +421,10 @@ fhandler_console::read (void *pv, size_t buflen) } break; + case FOCUS_EVENT: case WINDOW_BUFFER_SIZE_EVENT: - tc->kill_pgrp (SIGWINCH); - continue; - + send_winch_maybe (); + /* fall through */ default: continue; } @@ -493,7 +498,7 @@ fhandler_console::scroll_screen (int x1, int y1, int x2, int y2, int xn, int yn) CHAR_INFO fill; COORD dest; - (void)fillin_info (); + (void) fillin_info (); sr1.Left = x1 >= 0 ? x1 : info.dwWinSize.X - 1; if (y1 == 0) sr1.Top = info.winTop; @@ -761,8 +766,6 @@ fhandler_console::input_tcsetattr (int, struct termios const *t) { flags |= ENABLE_PROCESSED_INPUT; } - /* What about ENABLE_WINDOW_INPUT - and ENABLE_MOUSE_INPUT ? */ if (use_tty) { @@ -956,7 +959,7 @@ fhandler_console::cursor_set (BOOL rel_to_top, int x, int y) { COORD pos; - (void)fillin_info (); + (void) fillin_info (); if (y > info.winBottom) y = info.winBottom; else if (y < 0) @@ -1692,7 +1695,7 @@ fhandler_console::init (HANDLE f, DWORD a, mode_t bin) if (f != INVALID_HANDLE_VALUE) CloseHandle (f); /* Reopened by open */ - output_tcsetattr (0, &tc->ti); + this->tcsetattr (0, &tc->ti); } int |