static void ProcessChar(Container container)
{
int ch = Curses.getch ();
if ((ch == -1) || (ch == Curses.KeyResize)){
if (Curses.CheckWinChange ()){
EmptyContainer.Clear ();
foreach (Container c in toplevels)
c.SizeChanged ();
Refresh ();
}
return;
}
if (ch == Curses.KeyMouse){
Curses.MouseEvent ev;
Curses.console_sharp_getmouse (out ev);
container.ProcessMouse (ev);
return;
}
if (ch == 27){
Curses.timeout (100);
int k = Curses.getch ();
if (k != Curses.ERR && k != 27)
ch = Curses.KeyAlt | k;
Curses.timeout (-1);
}
if (container.ProcessHotKey (ch))
return;
if (container.ProcessKey (ch))
return;
if (container.ProcessColdKey (ch))
return;
// Control-c, quit the current operation.
if (ch == 3){
container.Running = false;
return;
}
// Control-z, suspend execution, then repaint.
if (ch == 26){
Curses.console_sharp_sendsigtstp ();
Window.Standard.redrawwin ();
Curses.refresh ();
}
//
// Focus handling
//
if (ch == 9 || ch == Curses.KeyDown || ch == Curses.KeyRight){
if (!container.FocusNext ())
container.FocusNext ();
Curses.refresh ();
} else if (ch == Curses.KeyUp || ch == Curses.KeyLeft){
if (!container.FocusPrev ())
container.FocusPrev ();
Curses.refresh ();
}
}