* 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.
This commit is contained in:
parent
a94b60cea4
commit
c060edba34
|
@ -1,3 +1,15 @@
|
||||||
|
2002-08-19 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
2002-08-18 Christopher Faylor <cgf@redhat.com>
|
2002-08-18 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
* perthread.h (vfork_save): Add ctty, sid, pgid, exitval fields.
|
* perthread.h (vfork_save): Add ctty, sid, pgid, exitval fields.
|
||||||
|
|
|
@ -826,6 +826,7 @@ class fhandler_console: public fhandler_termios
|
||||||
void set_close_on_exec (int val);
|
void set_close_on_exec (int val);
|
||||||
void fixup_after_fork (HANDLE parent);
|
void fixup_after_fork (HANDLE parent);
|
||||||
void set_input_state ();
|
void set_input_state ();
|
||||||
|
void send_winch_maybe ();
|
||||||
};
|
};
|
||||||
|
|
||||||
class fhandler_tty_common: public fhandler_termios
|
class fhandler_tty_common: public fhandler_termios
|
||||||
|
|
|
@ -147,13 +147,6 @@ set_console_state_for_spawn ()
|
||||||
# define tc shared_console_info /* ACK. Temporarily define for use in TTYSETF macro */
|
# define tc shared_console_info /* ACK. Temporarily define for use in TTYSETF macro */
|
||||||
SetConsoleMode (h, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT);
|
SetConsoleMode (h, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT);
|
||||||
TTYSETF (RSTCONS);
|
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
|
# 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
|
int __stdcall
|
||||||
fhandler_console::read (void *pv, size_t buflen)
|
fhandler_console::read (void *pv, size_t buflen)
|
||||||
{
|
{
|
||||||
|
@ -332,9 +336,10 @@ fhandler_console::read (void *pv, size_t buflen)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MOUSE_EVENT:
|
case MOUSE_EVENT:
|
||||||
|
send_winch_maybe ();
|
||||||
if (use_mouse)
|
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 */
|
/* Treat the double-click event like a regular button press */
|
||||||
if (mouse_event.dwEventFlags == DOUBLE_CLICK)
|
if (mouse_event.dwEventFlags == DOUBLE_CLICK)
|
||||||
|
@ -416,10 +421,10 @@ fhandler_console::read (void *pv, size_t buflen)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case FOCUS_EVENT:
|
||||||
case WINDOW_BUFFER_SIZE_EVENT:
|
case WINDOW_BUFFER_SIZE_EVENT:
|
||||||
tc->kill_pgrp (SIGWINCH);
|
send_winch_maybe ();
|
||||||
continue;
|
/* fall through */
|
||||||
|
|
||||||
default:
|
default:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -493,7 +498,7 @@ fhandler_console::scroll_screen (int x1, int y1, int x2, int y2, int xn, int yn)
|
||||||
CHAR_INFO fill;
|
CHAR_INFO fill;
|
||||||
COORD dest;
|
COORD dest;
|
||||||
|
|
||||||
(void)fillin_info ();
|
(void) fillin_info ();
|
||||||
sr1.Left = x1 >= 0 ? x1 : info.dwWinSize.X - 1;
|
sr1.Left = x1 >= 0 ? x1 : info.dwWinSize.X - 1;
|
||||||
if (y1 == 0)
|
if (y1 == 0)
|
||||||
sr1.Top = info.winTop;
|
sr1.Top = info.winTop;
|
||||||
|
@ -761,8 +766,6 @@ fhandler_console::input_tcsetattr (int, struct termios const *t)
|
||||||
{
|
{
|
||||||
flags |= ENABLE_PROCESSED_INPUT;
|
flags |= ENABLE_PROCESSED_INPUT;
|
||||||
}
|
}
|
||||||
/* What about ENABLE_WINDOW_INPUT
|
|
||||||
and ENABLE_MOUSE_INPUT ? */
|
|
||||||
|
|
||||||
if (use_tty)
|
if (use_tty)
|
||||||
{
|
{
|
||||||
|
@ -956,7 +959,7 @@ fhandler_console::cursor_set (BOOL rel_to_top, int x, int y)
|
||||||
{
|
{
|
||||||
COORD pos;
|
COORD pos;
|
||||||
|
|
||||||
(void)fillin_info ();
|
(void) fillin_info ();
|
||||||
if (y > info.winBottom)
|
if (y > info.winBottom)
|
||||||
y = info.winBottom;
|
y = info.winBottom;
|
||||||
else if (y < 0)
|
else if (y < 0)
|
||||||
|
@ -1692,7 +1695,7 @@ fhandler_console::init (HANDLE f, DWORD a, mode_t bin)
|
||||||
if (f != INVALID_HANDLE_VALUE)
|
if (f != INVALID_HANDLE_VALUE)
|
||||||
CloseHandle (f); /* Reopened by open */
|
CloseHandle (f); /* Reopened by open */
|
||||||
|
|
||||||
output_tcsetattr (0, &tc->ti);
|
this->tcsetattr (0, &tc->ti);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -661,18 +661,22 @@ peek_console (select_record *me, bool)
|
||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (irec.EventType == WINDOW_BUFFER_SIZE_EVENT)
|
if (irec.EventType == KEY_EVENT)
|
||||||
fh->tc->kill_pgrp (SIGWINCH);
|
|
||||||
else if (irec.EventType == MOUSE_EVENT &&
|
|
||||||
(irec.Event.MouseEvent.dwEventFlags == 0 ||
|
|
||||||
irec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK))
|
|
||||||
{
|
{
|
||||||
if (fh->mouse_aware ())
|
if (irec.Event.KeyEvent.bKeyDown
|
||||||
|
&& (irec.Event.KeyEvent.uChar.AsciiChar
|
||||||
|
|| get_nonascii_key (irec, tmpbuf)))
|
||||||
return me->read_ready = true;
|
return me->read_ready = true;
|
||||||
}
|
}
|
||||||
else if (irec.EventType == KEY_EVENT && irec.Event.KeyEvent.bKeyDown == true &&
|
else
|
||||||
(irec.Event.KeyEvent.uChar.AsciiChar || get_nonascii_key (irec, tmpbuf)))
|
{
|
||||||
return me->read_ready = true;
|
fh->send_winch_maybe ();
|
||||||
|
if (irec.EventType == MOUSE_EVENT
|
||||||
|
&& fh->mouse_aware ()
|
||||||
|
&& (irec.Event.MouseEvent.dwEventFlags == 0
|
||||||
|
|| irec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK))
|
||||||
|
return me->read_ready = true;
|
||||||
|
}
|
||||||
|
|
||||||
/* Read and discard the event */
|
/* Read and discard the event */
|
||||||
ReadConsoleInput (h, &irec, 1, &events_read);
|
ReadConsoleInput (h, &irec, 1, &events_read);
|
||||||
|
|
Loading…
Reference in New Issue