}
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);
}
if (lastact != MA_NOTHING)
term_mouse (b, lastact, x, y);
- lasttime = GetMessageTime();
+ lasttime = thistime;
}
static int WINAPI WndProc (HWND hwnd, UINT message,
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:
- 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:
- 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:
+ SetCapture(hwnd);
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,
- 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;
+ ReleaseCapture();
case WM_RBUTTONDOWN:
+ SetCapture(hwnd);
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,
- 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:
/*
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 */
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);
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);
+ oldpen = SelectObject (hdc, oldpen);
+ DeleteObject (oldpen);
}
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;
- SelectObject (hdc, CreatePen(PS_SOLID, 0, colours[23]));
+ oldpen = SelectObject (hdc, CreatePen(PS_SOLID, 0, colours[23]));
Polyline (hdc, pts, 5);
+ oldpen = SelectObject (hdc, oldpen);
+ DeleteObject (oldpen);
}
}
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);
}
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);
}
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() {