~mdw
/
sgt
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix small breakages as a result of yesterday's upheavals. Oops.
[sgt/putty]
/
window.c
diff --git
a/window.c
b/window.c
index
fdef3e6
..
ac8ac85
100644
(file)
--- a/
window.c
+++ b/
window.c
@@
-120,6
+120,7
@@
static void *ldisc;
static Backend *back;
static void *backhandle;
static Backend *back;
static void *backhandle;
+static struct unicode_data ucsdata;
static int session_closed;
Config cfg; /* exported to windlg.c */
static int session_closed;
Config cfg; /* exported to windlg.c */
@@
-508,7
+509,9
@@
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
hwnd = NULL;
hwnd = NULL;
- term = term_init(&cfg, NULL);
+ memset(&ucsdata, 0, sizeof(ucsdata));
+
+ term = term_init(&cfg, &ucsdata, NULL);
logctx = log_init(NULL, &cfg);
term_provide_logctx(term, logctx);
logctx = log_init(NULL, &cfg);
term_provide_logctx(term, logctx);
@@
-903,7
+906,8
@@
void connection_fatal(void *frontend, char *fmt, ...)
PostQuitMessage(1);
else {
session_closed = TRUE;
PostQuitMessage(1);
else {
session_closed = TRUE;
- SetWindowText(hwnd, "PuTTY (inactive)");
+ set_icon(NULL, "PuTTY (inactive)");
+ set_title(NULL, "PuTTY (inactive)");
}
}
}
}
@@
-947,7
+951,8
@@
static void enact_pending_netevent(void)
cfg.close_on_exit == COE_NORMAL) PostQuitMessage(0);
else {
session_closed = TRUE;
cfg.close_on_exit == COE_NORMAL) PostQuitMessage(0);
else {
session_closed = TRUE;
- SetWindowText(hwnd, "PuTTY (inactive)");
+ set_icon(NULL, "PuTTY (inactive)");
+ set_title(NULL, "PuTTY (inactive)");
MessageBox(hwnd, "Connection closed by remote host",
"PuTTY", MB_OK | MB_ICONINFORMATION);
}
MessageBox(hwnd, "Connection closed by remote host",
"PuTTY", MB_OK | MB_ICONINFORMATION);
}
@@
-1112,16
+1117,15
@@
static void init_fonts(int pick_width, int pick_height)
/* !!! Yes the next line is right */
if (cset == OEM_CHARSET)
/* !!! Yes the next line is right */
if (cset == OEM_CHARSET)
- font_codepage = GetOEMCP();
+
ucsdata.
font_codepage = GetOEMCP();
else
else
- if (TranslateCharsetInfo
- ((DWORD *) cset, &info, TCI_SRCCHARSET)) font_codepage =
- info.ciACP;
+ if (TranslateCharsetInfo ((DWORD *) cset, &info, TCI_SRCCHARSET))
+ ucsdata.font_codepage = info.ciACP;
else
else
- font_codepage = -1;
+
ucsdata.
font_codepage = -1;
- GetCPInfo(font_codepage, &cpinfo);
- dbcs_screenfont = (cpinfo.MaxCharSize > 1);
+ GetCPInfo(
ucsdata.
font_codepage, &cpinfo);
+
ucsdata.
dbcs_screenfont = (cpinfo.MaxCharSize > 1);
}
f(FONT_UNDERLINE, cfg.fontcharset, fw_dontcare, TRUE);
}
f(FONT_UNDERLINE, cfg.fontcharset, fw_dontcare, TRUE);
@@
-1209,7
+1213,7
@@
static void init_fonts(int pick_width, int pick_height)
}
fontflag[0] = fontflag[1] = fontflag[2] = 1;
}
fontflag[0] = fontflag[1] = fontflag[2] = 1;
- init_ucs(&cfg);
+ init_ucs(&cfg
, &ucsdata
);
}
static void another_font(int fontno)
}
static void another_font(int fontno)
@@
-1782,7
+1786,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
term_reconfig(term, &cfg);
/* Pass new config data to the back end */
term_reconfig(term, &cfg);
/* Pass new config data to the back end */
- back->reconfig(back, &cfg);
+ back->reconfig(back
handle
, &cfg);
/* Screen size changed ? */
if (cfg.height != prev_cfg.height ||
/* Screen size changed ? */
if (cfg.height != prev_cfg.height ||
@@
-2760,8
+2764,8
@@
void do_text(Context ctx, int x, int y, char *text, int len,
if (lattr == LATTR_TOP || lattr == LATTR_BOT)
text_adjust *= 2;
attr &= ~CSET_MASK;
if (lattr == LATTR_TOP || lattr == LATTR_BOT)
text_adjust *= 2;
attr &= ~CSET_MASK;
- text[0] = (char) (unitab_xterm['q'] & CHAR_MASK);
- attr |= (unitab_xterm['q'] & CSET_MASK);
+ text[0] = (char) (u
csdata.u
nitab_xterm['q'] & CHAR_MASK);
+ attr |= (u
csdata.u
nitab_xterm['q'] & CSET_MASK);
if (attr & ATTR_UNDER) {
attr &= ~ATTR_UNDER;
force_manual_underline = 1;
if (attr & ATTR_UNDER) {
attr &= ~ATTR_UNDER;
force_manual_underline = 1;
@@
-2822,7
+2826,7
@@
void do_text(Context ctx, int x, int y, char *text, int len,
line_box.right = font_width*term->cols+offset_width;
/* We're using a private area for direct to font. (512 chars.) */
line_box.right = font_width*term->cols+offset_width;
/* We're using a private area for direct to font. (512 chars.) */
- if (dbcs_screenfont && (attr & CSET_MASK) == ATTR_ACP) {
+ if (
ucsdata.
dbcs_screenfont && (attr & CSET_MASK) == ATTR_ACP) {
/* Ho Hum, dbcs fonts are a PITA! */
/* To display on W9x I have to convert to UCS */
static wchar_t *uni_buf = 0;
/* Ho Hum, dbcs fonts are a PITA! */
/* To display on W9x I have to convert to UCS */
static wchar_t *uni_buf = 0;
@@
-2835,15
+2839,15
@@
void do_text(Context ctx, int x, int y, char *text, int len,
for(nlen = mptr = 0; mptr<len; mptr++) {
uni_buf[nlen] = 0xFFFD;
for(nlen = mptr = 0; mptr<len; mptr++) {
uni_buf[nlen] = 0xFFFD;
- if (IsDBCSLeadByteEx(font_codepage, (BYTE) text[mptr])) {
+ if (IsDBCSLeadByteEx(
ucsdata.
font_codepage, (BYTE) text[mptr])) {
IpDx[nlen] += char_width;
IpDx[nlen] += char_width;
- MultiByteToWideChar(font_codepage, MB_USEGLYPHCHARS,
+ MultiByteToWideChar(
ucsdata.
font_codepage, MB_USEGLYPHCHARS,
text+mptr, 2, uni_buf+nlen, 1);
mptr++;
}
else
{
text+mptr, 2, uni_buf+nlen, 1);
mptr++;
}
else
{
- MultiByteToWideChar(font_codepage, MB_USEGLYPHCHARS,
+ MultiByteToWideChar(
ucsdata.
font_codepage, MB_USEGLYPHCHARS,
text+mptr, 1, uni_buf+nlen, 1);
}
nlen++;
text+mptr, 1, uni_buf+nlen, 1);
}
nlen++;
@@
-3012,17
+3016,17
@@
int char_width(Context ctx, int uc) {
switch (uc & CSET_MASK) {
case ATTR_ASCII:
switch (uc & CSET_MASK) {
case ATTR_ASCII:
- uc = unitab_line[uc & 0xFF];
+ uc = u
csdata.u
nitab_line[uc & 0xFF];
break;
case ATTR_LINEDRW:
break;
case ATTR_LINEDRW:
- uc = unitab_xterm[uc & 0xFF];
+ uc = u
csdata.u
nitab_xterm[uc & 0xFF];
break;
case ATTR_SCOACS:
break;
case ATTR_SCOACS:
- uc = unitab_scoacs[uc & 0xFF];
+ uc = u
csdata.u
nitab_scoacs[uc & 0xFF];
break;
}
if (DIRECT_FONT(uc)) {
break;
}
if (DIRECT_FONT(uc)) {
- if (dbcs_screenfont) return 1;
+ if (
ucsdata.
dbcs_screenfont) return 1;
/* Speedup, I know of no font where ascii is the wrong width */
if ((uc&CHAR_MASK) >= ' ' && (uc&CHAR_MASK)<= '~')
/* Speedup, I know of no font where ascii is the wrong width */
if ((uc&CHAR_MASK) >= ' ' && (uc&CHAR_MASK)<= '~')
@@
-3290,10
+3294,18
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
SendMessage(hwnd, WM_VSCROLL, SB_PAGEUP, 0);
return 0;
}
SendMessage(hwnd, WM_VSCROLL, SB_PAGEUP, 0);
return 0;
}
+ if (wParam == VK_PRIOR && shift_state == 2) {
+ SendMessage(hwnd, WM_VSCROLL, SB_LINEUP, 0);
+ return 0;
+ }
if (wParam == VK_NEXT && shift_state == 1) {
SendMessage(hwnd, WM_VSCROLL, SB_PAGEDOWN, 0);
return 0;
}
if (wParam == VK_NEXT && shift_state == 1) {
SendMessage(hwnd, WM_VSCROLL, SB_PAGEDOWN, 0);
return 0;
}
+ if (wParam == VK_NEXT && shift_state == 2) {
+ SendMessage(hwnd, WM_VSCROLL, SB_LINEDOWN, 0);
+ return 0;
+ }
if (wParam == VK_INSERT && shift_state == 1) {
term_do_paste(term);
return 0;
if (wParam == VK_INSERT && shift_state == 1) {
term_do_paste(term);
return 0;
@@
-3488,7
+3500,7
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
*p++ = "\000\033\034\035\036\037\177"[wParam - '2'];
return p - output;
}
*p++ = "\000\033\034\035\036\037\177"[wParam - '2'];
return p - output;
}
- if (shift_state == 2 &&
wParam == 0xBD
) {
+ if (shift_state == 2 &&
(wParam == 0xBD || wParam == 0xBF)
) {
*p++ = 0x1F;
return p - output;
}
*p++ = 0x1F;
return p - output;
}
@@
-3759,7
+3771,7
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
#ifdef SHOW_TOASCII_RESULT
if (r == 1 && !key_down) {
if (alt_sum) {
#ifdef SHOW_TOASCII_RESULT
if (r == 1 && !key_down) {
if (alt_sum) {
- if (in_utf(term) || dbcs_screenfont)
+ if (in_utf(term) ||
ucsdata.
dbcs_screenfont)
debug((", (U+%04x)", alt_sum));
else
debug((", LCH(%d)", alt_sum));
debug((", (U+%04x)", alt_sum));
else
debug((", LCH(%d)", alt_sum));
@@
-3812,7
+3824,7
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
if (!key_down) {
if (alt_sum) {
if (!key_down) {
if (alt_sum) {
- if (in_utf(term) || dbcs_screenfont) {
+ if (in_utf(term) ||
ucsdata.
dbcs_screenfont) {
keybuf = alt_sum;
term_seen_key_event(term);
luni_send(ldisc, &keybuf, 1, 1);
keybuf = alt_sum;
term_seen_key_event(term);
luni_send(ldisc, &keybuf, 1, 1);
@@
-3862,7
+3874,7
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
if (!left_alt)
keys[0] = 0;
/* If we will be using alt_sum fix the 256s */
if (!left_alt)
keys[0] = 0;
/* If we will be using alt_sum fix the 256s */
- else if (keys[0] && (in_utf(term) || dbcs_screenfont))
+ else if (keys[0] && (in_utf(term) ||
ucsdata.
dbcs_screenfont))
keys[0] = 10;
}
keys[0] = 10;
}