projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add DeleteObject calls to go with the CreatePen calls in do_text. Should
[u/mdw/putty]
/
window.c
diff --git
a/window.c
b/window.c
index
151441f
..
829abe7
100644
(file)
--- a/
window.c
+++ b/
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 == MA_2CLK ? MA_3CLK :
lastact == MA_3CLK ? MA_CLICK : MA_NOTHING);
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);
}
if (lastact != MA_NOTHING)
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,
@@
-698,33
+700,46
@@
static int WINAPI WndProc (HWND hwnd, UINT message,
break;
}
break;
break;
}
break;
+
+#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:
case WM_LBUTTONDOWN:
- click (MB_SELECT, LOWORD(lParam) / font_width,
- HIWORD(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:
return 0;
case WM_LBUTTONUP:
- term_mouse (MB_SELECT, MA_RELEASE, LOWORD(lParam) / font_width,
- HIWORD(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:
return 0;
case WM_MBUTTONDOWN:
+ SetCapture(hwnd);
click (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
click (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
-
LOWORD(lParam) / font_width
,
-
HIWORD(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,
return 0;
case WM_MBUTTONUP:
term_mouse (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
- MA_RELEASE,
LOWORD(lParam) / font_width
,
-
HIWORD(lParam) / font_height
);
+ MA_RELEASE,
TO_CHR_X(X_POS(lParam))
,
+
TO_CHR_Y(Y_POS(lParam))
);
return 0;
return 0;
+ ReleaseCapture();
case WM_RBUTTONDOWN:
case WM_RBUTTONDOWN:
+ SetCapture(hwnd);
click (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
click (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
-
LOWORD(lParam) / font_width
,
-
HIWORD(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,
return 0;
case WM_RBUTTONUP:
term_mouse (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
- MA_RELEASE, LOWORD(lParam) / font_width,
- HIWORD(lParam) / font_height);
+ MA_RELEASE, TO_CHR_X(X_POS(lParam)),
+ TO_CHR_Y(Y_POS(lParam)));
+ ReleaseCapture();
return 0;
case WM_MOUSEMOVE:
/*
return 0;
case WM_MOUSEMOVE:
/*
@@
-742,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;
b = cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND;
else
b = cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE;
- term_mouse (b, MA_DRAG,
LOWORD(lParam) / font_width
,
-
HIWORD(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 */
return 0;
case WM_IGNORE_CLIP:
ignore_clip = wParam; /* don't panic on DESTROYCLIPBOARD */
@@
-854,7
+866,10
@@
static int WINAPI WndProc (HWND hwnd, UINT message,
if (wParam == SIZE_RESTORED || wParam == SIZE_MAXIMIZED)
SetWindowText (hwnd, window_name);
if (!ignore_size) {
if (wParam == SIZE_RESTORED || wParam == SIZE_MAXIMIZED)
SetWindowText (hwnd, window_name);
if (!ignore_size) {
- int width, height, w, h, ew, eh;
+ int width, height, w, h;
+#if 0 /* we have fixed this using WM_SIZING now */
+ int ew, eh;
+#endif
width = LOWORD(lParam);
height = HIWORD(lParam);
width = LOWORD(lParam);
height = HIWORD(lParam);
@@
-1072,18
+1087,24
@@
void do_text (Context ctx, int x, int y, char *text, int len,
TextOut (hdc, x-1, y, text, len);
}
if (und_mode == UND_LINE && (attr & ATTR_UNDER)) {
TextOut (hdc, x-1, y, text, len);
}
if (und_mode == UND_LINE && (attr & ATTR_UNDER)) {
- SelectObject (hdc, CreatePen(PS_SOLID, 0, fg));
+ HPEN oldpen;
+ oldpen = SelectObject (hdc, CreatePen(PS_SOLID, 0, fg));
MoveToEx (hdc, x, y+descent, NULL);
LineTo (hdc, x+len*font_width, y+descent);
MoveToEx (hdc, x, y+descent, NULL);
LineTo (hdc, x+len*font_width, y+descent);
+ oldpen = SelectObject (hdc, oldpen);
+ DeleteObject (oldpen);
}
if (attr & ATTR_PASCURS) {
POINT pts[5];
}
if (attr & ATTR_PASCURS) {
POINT pts[5];
+ HPEN oldpen;
pts[0].x = pts[1].x = pts[4].x = x;
pts[2].x = pts[3].x = x+font_width-1;
pts[0].y = pts[3].y = pts[4].y = y;
pts[1].y = pts[2].y = y+font_height-1;
pts[0].x = pts[1].x = pts[4].x = x;
pts[2].x = pts[3].x = x+font_width-1;
pts[0].y = pts[3].y = pts[4].y = y;
pts[1].y = pts[2].y = y+font_height-1;
- SelectObject (hdc, CreatePen(PS_SOLID, 0, colours[23]));
+
oldpen =
SelectObject (hdc, CreatePen(PS_SOLID, 0, colours[23]));
Polyline (hdc, pts, 5);
Polyline (hdc, pts, 5);
+ oldpen = SelectObject (hdc, oldpen);
+ DeleteObject (oldpen);
}
}
}
}
@@
-1315,7
+1336,7
@@
void set_title (char *title) {
sfree (window_name);
window_name = smalloc(1+strlen(title));
strcpy (window_name, title);
sfree (window_name);
window_name = smalloc(1+strlen(title));
strcpy (window_name, title);
- if (!IsIconic(hwnd))
+ if (
cfg.win_name_always ||
!IsIconic(hwnd))
SetWindowText (hwnd, title);
}
SetWindowText (hwnd, title);
}
@@
-1323,7
+1344,7
@@
void set_icon (char *title) {
sfree (icon_name);
icon_name = smalloc(1+strlen(title));
strcpy (icon_name, title);
sfree (icon_name);
icon_name = smalloc(1+strlen(title));
strcpy (icon_name, title);
- if (IsIconic(hwnd))
+ if (
!cfg.win_name_always &&
IsIconic(hwnd))
SetWindowText (hwnd, title);
}
SetWindowText (hwnd, title);
}
@@
-1335,7
+1356,8
@@
void set_sbar (int total, int start, int page) {
si.nMax = total - 1;
si.nPage = page;
si.nPos = start;
si.nMax = total - 1;
si.nPage = page;
si.nPos = start;
- SetScrollInfo (hwnd, SB_VERT, &si, TRUE);
+ if (hwnd)
+ SetScrollInfo (hwnd, SB_VERT, &si, TRUE);
}
Context get_ctx() {
}
Context get_ctx() {