mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-22 14:39:24 -05:00
Fix double/triple click, and improve drag select
[originally from svn r19]
This commit is contained in:
parent
c19ba8098e
commit
a1078ecce4
40
window.c
40
window.c
@ -556,7 +556,9 @@ void request_resize (int w, int h) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void click (Mouse_Button b, int x, int y) {
|
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 = (lastact == MA_CLICK ? MA_2CLK :
|
||||||
lastact == MA_2CLK ? MA_3CLK :
|
lastact == MA_2CLK ? MA_3CLK :
|
||||||
lastact == MA_3CLK ? MA_CLICK : MA_NOTHING);
|
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)
|
if (lastact != MA_NOTHING)
|
||||||
term_mouse (b, lastact, x, y);
|
term_mouse (b, lastact, x, y);
|
||||||
lasttime = GetMessageTime();
|
lasttime = thistime;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int WINAPI WndProc (HWND hwnd, UINT message,
|
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 X_POS(l) ((int)(short)LOWORD(l))
|
||||||
#define Y_POS(l) ((int)(short)HIWORD(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:
|
case WM_LBUTTONDOWN:
|
||||||
click (MB_SELECT, X_POS(lParam) / font_width,
|
click (MB_SELECT, TO_CHR_X(X_POS(lParam)),
|
||||||
Y_POS(lParam) / font_height);
|
TO_CHR_Y(Y_POS(lParam)));
|
||||||
SetCapture(hwnd);
|
SetCapture(hwnd);
|
||||||
return 0;
|
return 0;
|
||||||
case WM_LBUTTONUP:
|
case WM_LBUTTONUP:
|
||||||
term_mouse (MB_SELECT, MA_RELEASE, X_POS(lParam) / font_width,
|
term_mouse (MB_SELECT, MA_RELEASE, TO_CHR_X(X_POS(lParam)),
|
||||||
Y_POS(lParam) / font_height);
|
TO_CHR_Y(Y_POS(lParam)));
|
||||||
ReleaseCapture();
|
ReleaseCapture();
|
||||||
return 0;
|
return 0;
|
||||||
case WM_MBUTTONDOWN:
|
case WM_MBUTTONDOWN:
|
||||||
SetCapture(hwnd);
|
SetCapture(hwnd);
|
||||||
click (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
|
click (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
|
||||||
X_POS(lParam) / font_width,
|
TO_CHR_X(X_POS(lParam)),
|
||||||
Y_POS(lParam) / font_height);
|
TO_CHR_Y(Y_POS(lParam)));
|
||||||
return 0;
|
return 0;
|
||||||
case WM_MBUTTONUP:
|
case WM_MBUTTONUP:
|
||||||
term_mouse (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
|
term_mouse (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
|
||||||
MA_RELEASE, X_POS(lParam) / font_width,
|
MA_RELEASE, TO_CHR_X(X_POS(lParam)),
|
||||||
Y_POS(lParam) / font_height);
|
TO_CHR_Y(Y_POS(lParam)));
|
||||||
return 0;
|
return 0;
|
||||||
ReleaseCapture();
|
ReleaseCapture();
|
||||||
case WM_RBUTTONDOWN:
|
case WM_RBUTTONDOWN:
|
||||||
SetCapture(hwnd);
|
SetCapture(hwnd);
|
||||||
click (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
|
click (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
|
||||||
X_POS(lParam) / font_width,
|
TO_CHR_X(X_POS(lParam)),
|
||||||
Y_POS(lParam) / font_height);
|
TO_CHR_Y(Y_POS(lParam)));
|
||||||
return 0;
|
return 0;
|
||||||
case WM_RBUTTONUP:
|
case WM_RBUTTONUP:
|
||||||
term_mouse (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
|
term_mouse (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
|
||||||
MA_RELEASE, X_POS(lParam) / font_width,
|
MA_RELEASE, TO_CHR_X(X_POS(lParam)),
|
||||||
Y_POS(lParam) / font_height);
|
TO_CHR_Y(Y_POS(lParam)));
|
||||||
ReleaseCapture();
|
ReleaseCapture();
|
||||||
return 0;
|
return 0;
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
@ -752,12 +757,9 @@ static int WINAPI WndProc (HWND hwnd, UINT message,
|
|||||||
b = cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND;
|
b = cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND;
|
||||||
else
|
else
|
||||||
b = cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE;
|
b = cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE;
|
||||||
term_mouse (b, MA_DRAG, X_POS(lParam) / font_width,
|
term_mouse (b, MA_DRAG, TO_CHR_X(X_POS(lParam)),
|
||||||
Y_POS(lParam) / font_height);
|
TO_CHR_Y(Y_POS(lParam)));
|
||||||
}
|
}
|
||||||
lastbtn = MB_NOTHING;
|
|
||||||
lastact = MA_NOTHING;
|
|
||||||
lasttime = GetMessageTime();
|
|
||||||
return 0;
|
return 0;
|
||||||
case WM_IGNORE_CLIP:
|
case WM_IGNORE_CLIP:
|
||||||
ignore_clip = wParam; /* don't panic on DESTROYCLIPBOARD */
|
ignore_clip = wParam; /* don't panic on DESTROYCLIPBOARD */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user