int scroll_on_key;
int scroll_on_disp;
int compose_key;
+ int ctrlaltkeys;
char wintitle[256]; /* initial window title */
/* Terminal options */
int savelines;
write_setting_i (sesskey, "AltSpace", cfg->alt_space);
write_setting_i (sesskey, "AltOnly", cfg->alt_only);
write_setting_i (sesskey, "ComposeKey", cfg->compose_key);
+ write_setting_i (sesskey, "CtrlAltKeys", cfg->ctrlaltkeys);
write_setting_i (sesskey, "LocalEcho", cfg->localecho);
write_setting_i (sesskey, "LocalEdit", cfg->localedit);
write_setting_s (sesskey, "Answerback", cfg->answerback);
gppi (sesskey, "AltSpace", 0, &cfg->alt_space);
gppi (sesskey, "AltOnly", 0, &cfg->alt_only);
gppi (sesskey, "ComposeKey", 0, &cfg->compose_key);
+ gppi (sesskey, "CtrlAltKeys", 1, &cfg->ctrlaltkeys);
gppi (sesskey, "LocalEcho", LD_BACKEND, &cfg->localecho);
gppi (sesskey, "LocalEdit", LD_BACKEND, &cfg->localedit);
gpps (sesskey, "Answerback", "PuTTY", cfg->answerback, sizeof(cfg->answerback));
IDC_CURNORMAL,
IDC_CURAPPLIC,
IDC_COMPOSEKEY,
+ IDC_CTRLALTKEYS,
keyboardpanelend,
terminalpanelstart,
CheckDlgButton (hwnd, IDC_ALTSPACE, cfg.alt_space);
CheckDlgButton (hwnd, IDC_ALTONLY, cfg.alt_only);
CheckDlgButton (hwnd, IDC_COMPOSEKEY, cfg.compose_key);
+ CheckDlgButton (hwnd, IDC_CTRLALTKEYS, cfg.ctrlaltkeys);
CheckRadioButton (hwnd, IDC_ECHOBACKEND, IDC_ECHONO,
cfg.localecho == LD_BACKEND ? IDC_ECHOBACKEND:
cfg.localecho == LD_YES ? IDC_ECHOYES : IDC_ECHONO);
}
if (panel == keyboardpanelstart) {
- /* The Keyboard panel. Accelerators used: [acgo] h?sr~lxv unpymie t */
+ /* The Keyboard panel. Accelerators used: [acgo] h?sr~lxvunpymietd */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
bartitle(&cp, "Options controlling the effects of keys",
endbox(&cp);
beginbox(&cp, "Enable extra keyboard features:",
IDC_BOX_KEYBOARD3);
- checkbox(&cp, "Application and AltGr ac&t as Compose key",
+ checkbox(&cp, "AltGr ac&ts as Compose key",
IDC_COMPOSEKEY);
+ checkbox(&cp, "Control-Alt is &different from AltGr",
+ IDC_CTRLALTKEYS);
endbox(&cp);
}
HIWORD(wParam) == BN_DOUBLECLICKED)
cfg.compose_key = IsDlgButtonChecked (hwnd, IDC_COMPOSEKEY);
break;
+ case IDC_CTRLALTKEYS:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.ctrlaltkeys = IsDlgButtonChecked (hwnd, IDC_CTRLALTKEYS);
+ break;
case IDC_WRAPMODE:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
keystate[VK_RMENU] = keystate[VK_MENU];
}
- /* Note if AltGr was pressed and if it was used as a compose key */
- if (cfg.compose_key) {
- if (wParam == VK_MENU && (HIWORD(lParam)&KF_EXTENDED))
- {
- if (!compose_state) compose_key = wParam;
- }
- if (wParam == VK_APPS && !compose_state)
- compose_key = wParam;
-
- if (wParam == compose_key)
- {
- if (compose_state == 0 && (HIWORD(lParam)&(KF_UP|KF_REPEAT))==0)
- compose_state = 1;
- else if (compose_state == 1 && (HIWORD(lParam)&KF_UP))
- compose_state = 2;
- else
- compose_state = 0;
- }
- else if (compose_state==1 && wParam != VK_CONTROL)
- compose_state = 0;
- } else {
- compose_state = 0;
- }
/* Nastyness with NUMLock - Shift-NUMLock is left alone though */
if ( (cfg.funky_type == 3 ||
key_down = ((HIWORD(lParam)&KF_UP)==0);
- /* Make sure Ctrl-ALT is not the same as AltGr for ToAscii */
- if (left_alt && (keystate[VK_CONTROL]&0x80))
- keystate[VK_MENU] = 0;
+ /* Make sure Ctrl-ALT is not the same as AltGr for ToAscii unless told. */
+ if (left_alt && (keystate[VK_CONTROL]&0x80)) {
+ if (cfg.ctrlaltkeys)
+ keystate[VK_MENU] = 0;
+ else {
+ keystate[VK_RMENU] = 0x80;
+ left_alt = 0;
+ }
+ }
scan = (HIWORD(lParam) & (KF_UP | KF_EXTENDED | 0xFF));
shift_state = ((keystate[VK_SHIFT]&0x80)!=0)
+ ((keystate[VK_CONTROL]&0x80)!=0)*2;
+ /* Note if AltGr was pressed and if it was used as a compose key */
+ if (!compose_state) {
+ compose_key = -1;
+ if (cfg.compose_key) {
+ if (wParam == VK_MENU && (HIWORD(lParam)&KF_EXTENDED))
+ compose_key = wParam;
+ }
+ if (wParam == VK_APPS)
+ compose_key = wParam;
+ }
+
+ if (wParam == compose_key)
+ {
+ if (compose_state == 0 && (HIWORD(lParam)&(KF_UP|KF_REPEAT))==0)
+ compose_state = 1;
+ else if (compose_state == 1 && (HIWORD(lParam)&KF_UP))
+ compose_state = 2;
+ else
+ compose_state = 0;
+ }
+ else if (compose_state==1 && wParam != VK_CONTROL)
+ compose_state = 0;
+
/*
* Record that we pressed key so the scroll window can be reset, but
* be careful to avoid Shift-UP/Down
{
*p++ = 3; return p - output;
}
+ if (wParam == VK_PAUSE) /* Break/Pause */
+ {
+ *p++ = 26; *p++ = 0; return -2;
+ }
/* Control-2 to Control-8 are special */
if (shift_state == 2 && wParam >= '2' && wParam <= '8')
{
} else
return 0;
}
+ else alt_state = 0;
return -1;
}