projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add a how-to section on public-key authentication in PSCP
[u/mdw/putty]
/
window.c
diff --git
a/window.c
b/window.c
index
26fcb0d
..
cdc58dc
100644
(file)
--- a/
window.c
+++ b/
window.c
@@
-101,13
+101,10
@@
static Mouse_Button lastbtn;
static char *window_name, *icon_name;
static char *window_name, *icon_name;
-static Ldisc *real_ldisc;
-
static int compose_state = 0;
static int compose_state = 0;
-void begin_session(void) {
- ldisc = real_ldisc;
-}
+/* Dummy routine, only required in plink. */
+void ldisc_update(int echo, int edit) {}
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
static char appname[] = "PuTTY";
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
static char appname[] = "PuTTY";
@@
-318,11
+315,6
@@
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
return 1;
}
return 1;
}
- real_ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple);
- /* To start with, we use the simple line discipline, so we can
- * type passwords etc without fear of them being echoed... */
- ldisc = &ldisc_simple;
-
if (!prev) {
wndclass.style = 0;
wndclass.lpfnWndProc = WndProc;
if (!prev) {
wndclass.style = 0;
wndclass.lpfnWndProc = WndProc;
@@
-564,7
+556,8
@@
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
}
if(!timer_id)
timer_id = SetTimer(hwnd, 1, 20, NULL);
}
if(!timer_id)
timer_id = SetTimer(hwnd, 1, 20, NULL);
- DispatchMessage (&msg);
+ if (!(IsWindow(logbox) && IsDialogMessage(logbox, &msg)))
+ DispatchMessage (&msg);
/* Make sure we blink everything that needs it. */
term_blink(0);
/* Make sure we blink everything that needs it. */
term_blink(0);
@@
-674,7
+667,7
@@
void connection_fatal(char *fmt, ...) {
vsprintf(stuff, fmt, ap);
va_end(ap);
MessageBox(hwnd, stuff, "PuTTY Fatal Error", MB_ICONERROR | MB_OK);
vsprintf(stuff, fmt, ap);
va_end(ap);
MessageBox(hwnd, stuff, "PuTTY Fatal Error", MB_ICONERROR | MB_OK);
- if (cfg.close_on_exit)
+ if (cfg.close_on_exit
== COE_ALWAYS
)
PostQuitMessage(1);
else {
session_closed = TRUE;
PostQuitMessage(1);
else {
session_closed = TRUE;
@@
-699,14
+692,17
@@
static void enact_pending_netevent(void) {
ret = select_result (pend_netevent_wParam, pend_netevent_lParam);
reentering = 0;
ret = select_result (pend_netevent_wParam, pend_netevent_lParam);
reentering = 0;
- if (ret == 0) {
- if (cfg.close_on_exit)
+ if (ret == 0 && !session_closed) {
+ /* Abnormal exits will already have set session_closed and taken
+ * appropriate action. */
+ if (cfg.close_on_exit == COE_ALWAYS ||
+ cfg.close_on_exit == COE_NORMAL)
PostQuitMessage(0);
else {
PostQuitMessage(0);
else {
- session_closed = TRUE;
- MessageBox(hwnd, "Connection closed by remote host",
- "PuTTY", MB_OK | MB_ICONINFORMATION);
-
SetWindowText (hwnd, "PuTTY (inactive)"
);
+
session_closed = TRUE;
+ SetWindowText (hwnd, "PuTTY (inactive)");
+ MessageBox(hwnd, "Connection closed by remote host",
+
"PuTTY", MB_OK | MB_ICONINFORMATION
);
}
}
}
}
}
}
@@
-1054,6
+1050,17
@@
static void click (Mouse_Button b, int x, int y) {
lasttime = thistime;
}
lasttime = thistime;
}
+static void show_mouseptr(int show) {
+ static int cursor_visible = 1;
+ if (!cfg.hide_mouseptr) /* override if this feature disabled */
+ show = 1;
+ if (cursor_visible && !show)
+ ShowCursor(FALSE);
+ else if (!cursor_visible && show)
+ ShowCursor(TRUE);
+ cursor_visible = show;
+}
+
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam) {
HDC hdc;
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam) {
HDC hdc;
@@
-1077,7
+1084,7
@@
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
{
time_t now;
time(&now);
{
time_t now;
time(&now);
- if (now-last_movement > cfg.ping_interval
* 60 - 10
)
+ if (now-last_movement > cfg.ping_interval)
{
back->special(TS_PING);
last_movement = now;
{
back->special(TS_PING);
last_movement = now;
@@
-1087,6
+1094,7
@@
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
case WM_CREATE:
break;
case WM_CLOSE:
case WM_CREATE:
break;
case WM_CLOSE:
+ show_mouseptr(1);
if (!cfg.warn_on_close || session_closed ||
MessageBox(hwnd, "Are you sure you want to close this session?",
"PuTTY Exit Confirmation",
if (!cfg.warn_on_close || session_closed ||
MessageBox(hwnd, "Are you sure you want to close this session?",
"PuTTY Exit Confirmation",
@@
-1094,6
+1102,7
@@
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
DestroyWindow(hwnd);
return 0;
case WM_DESTROY:
DestroyWindow(hwnd);
return 0;
case WM_DESTROY:
+ show_mouseptr(1);
PostQuitMessage (0);
return 0;
case WM_SYSCOMMAND:
PostQuitMessage (0);
return 0;
case WM_SYSCOMMAND:
@@
-1206,11
+1215,10
@@
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
init_fonts(0);
sfree(logpal);
/*
init_fonts(0);
sfree(logpal);
/*
- *
Telnet will change local echo -> remote if
the
- *
remote asks
.
+ *
Flush the line discipline's edit buffer in
the
+ *
case where local editing has just been disabled
.
*/
*/
- if (cfg.protocol != PROT_TELNET)
- ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple);
+ ldisc_send(NULL, 0);
if (pal)
DeleteObject(pal);
logpal = NULL;
if (pal)
DeleteObject(pal);
logpal = NULL;
@@
-1329,40
+1337,47
@@
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
#define TO_CHR_Y(y) (((y)<0 ? (y)-font_height+1: (y)) / font_height)
case WM_LBUTTONDOWN:
#define TO_CHR_Y(y) (((y)<0 ? (y)-font_height+1: (y)) / font_height)
case WM_LBUTTONDOWN:
+ show_mouseptr(1);
click (MB_SELECT, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
SetCapture(hwnd);
return 0;
case WM_LBUTTONUP:
click (MB_SELECT, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
SetCapture(hwnd);
return 0;
case WM_LBUTTONUP:
+ show_mouseptr(1);
term_mouse (MB_SELECT, MA_RELEASE, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
ReleaseCapture();
return 0;
case WM_MBUTTONDOWN:
term_mouse (MB_SELECT, MA_RELEASE, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
ReleaseCapture();
return 0;
case WM_MBUTTONDOWN:
+ show_mouseptr(1);
SetCapture(hwnd);
click (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
return 0;
case WM_MBUTTONUP:
SetCapture(hwnd);
click (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
return 0;
case WM_MBUTTONUP:
+ show_mouseptr(1);
term_mouse (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
MA_RELEASE, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
ReleaseCapture();
return 0;
case WM_RBUTTONDOWN:
term_mouse (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
MA_RELEASE, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
ReleaseCapture();
return 0;
case WM_RBUTTONDOWN:
+ show_mouseptr(1);
SetCapture(hwnd);
click (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
return 0;
case WM_RBUTTONUP:
SetCapture(hwnd);
click (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
return 0;
case WM_RBUTTONUP:
+ show_mouseptr(1);
term_mouse (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
MA_RELEASE, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
ReleaseCapture();
return 0;
case WM_MOUSEMOVE:
term_mouse (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
MA_RELEASE, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
ReleaseCapture();
return 0;
case WM_MOUSEMOVE:
+ show_mouseptr(1);
/*
* Add the mouse position and message time to the random
* number noise.
/*
* Add the mouse position and message time to the random
* number noise.
@@
-1428,6
+1443,7
@@
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
term_update();
break;
case WM_KILLFOCUS:
term_update();
break;
case WM_KILLFOCUS:
+ show_mouseptr(1);
has_focus = FALSE;
DestroyCaret();
term_out();
has_focus = FALSE;
DestroyCaret();
term_out();
@@
-1593,7
+1609,10
@@
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
len = TranslateKey (message, wParam, lParam, buf);
if (len == -1)
return DefWindowProc (hwnd, message, wParam, lParam);
len = TranslateKey (message, wParam, lParam, buf);
if (len == -1)
return DefWindowProc (hwnd, message, wParam, lParam);
- ldisc->send (buf, len);
+ ldisc_send (buf, len);
+
+ if (len > 0)
+ show_mouseptr(0);
}
}
return 0;
}
}
return 0;
@@
-1603,7
+1622,7
@@
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
buf[1] = wParam;
buf[0] = wParam >> 8;
buf[1] = wParam;
buf[0] = wParam >> 8;
- ldisc
->
send (buf, 2);
+ ldisc
_
send (buf, 2);
}
case WM_CHAR:
case WM_SYSCHAR:
}
case WM_CHAR:
case WM_SYSCHAR:
@@
-1615,7
+1634,7
@@
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
*/
{
char c = xlat_kbd2tty((unsigned char)wParam);
*/
{
char c = xlat_kbd2tty((unsigned char)wParam);
- ldisc
->
send (&c, 1);
+ ldisc
_
send (&c, 1);
}
return 0;
}
}
return 0;
}