1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-09 17:38:00 +00:00

Fix double/triple click, and improve drag select

[originally from svn r19]
This commit is contained in:
Simon Tatham 1999-01-22 09:35:08 +00:00
parent c19ba8098e
commit a1078ecce4

View File

@ -556,7 +556,9 @@ void request_resize (int w, int h) {
}
static void click (Mouse_Button b, int x, int y) {
if (lastbtn == b && GetMessageTime() - lasttime < dbltime) {
int thistime = GetMessageTime();
if (lastbtn == b && thistime - lasttime < dbltime) {
lastact = (lastact == MA_CLICK ? MA_2CLK :
lastact == MA_2CLK ? MA_3CLK :
lastact == MA_3CLK ? MA_CLICK : MA_NOTHING);
@ -566,7 +568,7 @@ static void click (Mouse_Button b, int x, int y) {
}
if (lastact != MA_NOTHING)
term_mouse (b, lastact, x, y);
lasttime = GetMessageTime();
lasttime = thistime;
}
static int WINAPI WndProc (HWND hwnd, UINT message,
@ -702,38 +704,41 @@ static int WINAPI WndProc (HWND hwnd, UINT message,
#define X_POS(l) ((int)(short)LOWORD(l))
#define Y_POS(l) ((int)(short)HIWORD(l))
#define TO_CHR_X(x) (((x)<0 ? (x)-font_width+1 : (x)) / font_width)
#define TO_CHR_Y(y) (((y)<0 ? (y)-font_height+1: (y)) / font_height)
case WM_LBUTTONDOWN:
click (MB_SELECT, X_POS(lParam) / font_width,
Y_POS(lParam) / font_height);
click (MB_SELECT, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
SetCapture(hwnd);
return 0;
case WM_LBUTTONUP:
term_mouse (MB_SELECT, MA_RELEASE, X_POS(lParam) / font_width,
Y_POS(lParam) / font_height);
term_mouse (MB_SELECT, MA_RELEASE, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
ReleaseCapture();
return 0;
case WM_MBUTTONDOWN:
SetCapture(hwnd);
click (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
X_POS(lParam) / font_width,
Y_POS(lParam) / font_height);
TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
return 0;
case WM_MBUTTONUP:
term_mouse (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
MA_RELEASE, X_POS(lParam) / font_width,
Y_POS(lParam) / font_height);
MA_RELEASE, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
return 0;
ReleaseCapture();
case WM_RBUTTONDOWN:
SetCapture(hwnd);
click (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
X_POS(lParam) / font_width,
Y_POS(lParam) / font_height);
TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
return 0;
case WM_RBUTTONUP:
term_mouse (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
MA_RELEASE, X_POS(lParam) / font_width,
Y_POS(lParam) / font_height);
MA_RELEASE, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
ReleaseCapture();
return 0;
case WM_MOUSEMOVE:
@ -752,12 +757,9 @@ static int WINAPI WndProc (HWND hwnd, UINT message,
b = cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND;
else
b = cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE;
term_mouse (b, MA_DRAG, X_POS(lParam) / font_width,
Y_POS(lParam) / font_height);
term_mouse (b, MA_DRAG, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)));
}
lastbtn = MB_NOTHING;
lastact = MA_NOTHING;
lasttime = GetMessageTime();
return 0;
case WM_IGNORE_CLIP:
ignore_clip = wParam; /* don't panic on DESTROYCLIPBOARD */