mirror of https://github.com/cy384/ssheven.git
break out keypress event handling
This commit is contained in:
parent
2a31b1092c
commit
22580dac81
|
@ -95,6 +95,7 @@
|
||||||
#define CNTL_PREF_FG_COLOR 128
|
#define CNTL_PREF_FG_COLOR 128
|
||||||
#define CNTL_PREF_BG_COLOR 129
|
#define CNTL_PREF_BG_COLOR 129
|
||||||
#define CNTL_PREF_TERM_TYPE 130
|
#define CNTL_PREF_TERM_TYPE 130
|
||||||
|
|
||||||
/* menus */
|
/* menus */
|
||||||
#define MBAR_SSHEVEN 128
|
#define MBAR_SSHEVEN 128
|
||||||
|
|
||||||
|
|
70
ssheven.c
70
ssheven.c
|
@ -585,6 +585,44 @@ void resize_con_window(WindowPtr eventWin, EventRecord event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int handle_keypress(EventRecord* event)
|
||||||
|
{
|
||||||
|
unsigned char c = event->message & charCodeMask;
|
||||||
|
|
||||||
|
// if we have a key and command and it's not autorepeating
|
||||||
|
if (c && (event->modifiers & cmdKey) && event->what != autoKey)
|
||||||
|
{
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case 'q':
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
ssh_paste();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if it's just a normal key
|
||||||
|
// note that this is after translation, e.g. shift-f -> 'F', ctrl-a -> 0x01
|
||||||
|
else if (c)
|
||||||
|
{
|
||||||
|
if (key_to_vterm[c] != VTERM_KEY_NONE)
|
||||||
|
{
|
||||||
|
vterm_keyboard_key(con.vterm, key_to_vterm[c], VTERM_MOD_NONE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ('\r' == c) c = '\n';
|
||||||
|
ssh_con.send_buffer[0] = c;
|
||||||
|
ssh_write(ssh_con.send_buffer, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void event_loop(void)
|
void event_loop(void)
|
||||||
{
|
{
|
||||||
int exit_event_loop = 0;
|
int exit_event_loop = 0;
|
||||||
|
@ -612,8 +650,6 @@ void event_loop(void)
|
||||||
check_cursor();
|
check_cursor();
|
||||||
|
|
||||||
// handle any GUI events
|
// handle any GUI events
|
||||||
unsigned char c = 0;
|
|
||||||
|
|
||||||
switch (event.what)
|
switch (event.what)
|
||||||
{
|
{
|
||||||
case updateEvt:
|
case updateEvt:
|
||||||
|
@ -625,35 +661,7 @@ void event_loop(void)
|
||||||
|
|
||||||
case keyDown:
|
case keyDown:
|
||||||
case autoKey: // autokey means we're repeating a held down key event
|
case autoKey: // autokey means we're repeating a held down key event
|
||||||
c = event.message & charCodeMask;
|
exit_event_loop = handle_keypress(&event);
|
||||||
// if we have a key and command and it's not autorepeating
|
|
||||||
if (c && (event.modifiers & cmdKey) && event.what != autoKey)
|
|
||||||
{
|
|
||||||
switch(c)
|
|
||||||
{
|
|
||||||
case 'q':
|
|
||||||
exit_event_loop = 1;
|
|
||||||
break;
|
|
||||||
case 'v':
|
|
||||||
ssh_paste();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (c)
|
|
||||||
{
|
|
||||||
if (key_to_vterm[c] != VTERM_KEY_NONE)
|
|
||||||
{
|
|
||||||
vterm_keyboard_key(con.vterm, key_to_vterm[c], VTERM_MOD_NONE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ('\r' == c) c = '\n';
|
|
||||||
ssh_con.send_buffer[0] = c;
|
|
||||||
ssh_write(ssh_con.send_buffer, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case mouseDown:
|
case mouseDown:
|
||||||
|
|
Loading…
Reference in New Issue