X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/63be776775f6859bc185f2fbc00da5d16710fde7..4e95095a1785e436b46f4e79052189cadac4f668:/window.c diff --git a/window.c b/window.c index db645137..f13f0d4f 100644 --- a/window.c +++ b/window.c @@ -110,7 +110,6 @@ static struct unicode_data ucsdata; static int session_closed; static const struct telnet_special *specials; -static int specials_menu_position; static struct { HMENU menu; @@ -1640,9 +1639,9 @@ static Mouse_Button translate_button(Mouse_Button button) if (button == MBT_LEFT) return MBT_SELECT; if (button == MBT_MIDDLE) - return cfg.mouse_is_xterm ? MBT_PASTE : MBT_EXTEND; + return cfg.mouse_is_xterm == 1 ? MBT_PASTE : MBT_EXTEND; if (button == MBT_RIGHT) - return cfg.mouse_is_xterm ? MBT_EXTEND : MBT_PASTE; + return cfg.mouse_is_xterm == 1 ? MBT_EXTEND : MBT_PASTE; return 0; /* shouldn't happen */ } @@ -2028,9 +2027,11 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, case WM_LBUTTONUP: case WM_MBUTTONUP: case WM_RBUTTONUP: - if (message == WM_RBUTTONDOWN && (wParam & MK_CONTROL)) { + if (message == WM_RBUTTONDOWN && + ((wParam & MK_CONTROL) || (cfg.mouse_is_xterm == 2))) { POINT cursorpos; + show_mouseptr(1); /* make sure pointer is visible */ GetCursorPos(&cursorpos); TrackPopupMenu(popup_menus[CTXMENU].menu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON, @@ -2076,11 +2077,42 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, * window, we put up the System menu instead of doing * selection. */ - if (is_full_screen() && press && button == MBT_LEFT && - X_POS(lParam) == 0 && Y_POS(lParam) == 0) { - SendMessage(hwnd, WM_SYSCOMMAND, SC_MOUSEMENU, 0); - return 0; + { + char mouse_on_hotspot = 0; + POINT pt; + + GetCursorPos(&pt); +#ifndef NO_MULTIMON + { + HMONITOR mon; + MONITORINFO mi; + + mon = MonitorFromPoint(pt, MONITOR_DEFAULTTONULL); + + if (mon != NULL) { + mi.cbSize = sizeof(MONITORINFO); + GetMonitorInfo(mon, &mi); + + if (mi.rcMonitor.left == pt.x && + mi.rcMonitor.top == pt.y) { + mouse_on_hotspot = 1; + } + CloseHandle(mon); + } + } +#else + if (pt.x == 0 && pt.y == 0) { + mouse_on_hotspot = 1; + } +#endif + if (is_full_screen() && press && + button == MBT_LEFT && mouse_on_hotspot) { + SendMessage(hwnd, WM_SYSCOMMAND, SC_MOUSEMENU, + MAKELPARAM(pt.x, pt.y)); + return 0; + } } + if (press) { click(button, TO_CHR_X(X_POS(lParam)), TO_CHR_Y(Y_POS(lParam)), @@ -4431,10 +4463,10 @@ void beep(void *frontend, int mode) } else if (mode == BELL_WAVEFILE) { if (!PlaySound(cfg.bell_wavefile.path, NULL, SND_ASYNC | SND_FILENAME)) { - char buf[sizeof(cfg.bell_wavefile) + 80]; + char buf[sizeof(cfg.bell_wavefile.path) + 80]; char otherbuf[100]; sprintf(buf, "Unable to play sound file\n%s\n" - "Using default sound instead", cfg.bell_wavefile); + "Using default sound instead", cfg.bell_wavefile.path); sprintf(otherbuf, "%.70s Sound Error", appname); MessageBox(hwnd, buf, otherbuf, MB_OK | MB_ICONEXCLAMATION); @@ -4568,7 +4600,7 @@ char *get_window_title(void *frontend, int icon) /* * See if we're in full-screen mode. */ -int is_full_screen() +static int is_full_screen() { if (!IsZoomed(hwnd)) return FALSE; @@ -4582,7 +4614,7 @@ int is_full_screen() * one monitor is present. */ static int get_fullscreen_rect(RECT * ss) { -#ifdef MONITOR_DEFAULTTONEAREST +#if defined(MONITOR_DEFAULTTONEAREST) && !defined(NO_MULTIMON) HMONITOR mon; MONITORINFO mi; mon = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); @@ -4607,7 +4639,7 @@ static int get_fullscreen_rect(RECT * ss) * Go full-screen. This should only be called when we are already * maximised. */ -void make_full_screen() +static void make_full_screen() { DWORD style; RECT ss; @@ -4641,7 +4673,7 @@ void make_full_screen() /* * Clear the full-screen attributes. */ -void clear_full_screen() +static void clear_full_screen() { DWORD oldstyle, style; @@ -4671,7 +4703,7 @@ void clear_full_screen() /* * Toggle full-screen mode. */ -void flip_full_screen() +static void flip_full_screen() { if (is_full_screen()) { ShowWindow(hwnd, SW_RESTORE);