Memory leak fix: repair endemic failure to call sftp_pkt_free().
[u/mdw/putty] / window.c
index 5ea24dc..4bcc269 100644 (file)
--- a/window.c
+++ b/window.c
 #endif
 #endif
 
+#ifndef NO_MULTIMON
 #if WINVER < 0x0500
 #define COMPILE_MULTIMON_STUBS
 #include <multimon.h>
 #endif
+#endif
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -723,7 +725,8 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
                timer_id = 0;
            }
            HideCaret(hwnd);
-           term_out();
+           if (GetCapture() != hwnd)
+               term_out();
            term_update();
            ShowCaret(hwnd);
 
@@ -1517,7 +1520,8 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
       case WM_TIMER:
        if (pending_netevent)
            enact_pending_netevent();
-       term_out();
+       if (GetCapture() != hwnd)
+           term_out();
        noise_regular();
        HideCaret(hwnd);
        term_update();
@@ -1937,7 +1941,8 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
         */
        noise_ultralight(lParam);
 
-       if (wParam & (MK_LBUTTON | MK_MBUTTON | MK_RBUTTON)) {
+       if (wParam & (MK_LBUTTON | MK_MBUTTON | MK_RBUTTON) &&
+           GetCapture() == hwnd) {
            Mouse_Button b;
            if (wParam & MK_LBUTTON)
                b = MBT_LEFT;
@@ -2429,7 +2434,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            return TRUE;
        }
       default:
-       if (message == wm_mousewheel) {
+       if (message == wm_mousewheel || message == WM_MOUSEWHEEL) {
            int shift_pressed=0, control_pressed=0, alt_pressed=0;
 
            if (message == WM_MOUSEWHEEL) {
@@ -4217,6 +4222,11 @@ void set_iconic(int iconic)
  */
 void move_window(int x, int y)
 {
+    if (cfg.resize_action == RESIZE_DISABLED || 
+        cfg.resize_action == RESIZE_FONT ||
+       IsZoomed(hwnd))
+       return;
+
     SetWindowPos(hwnd, NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
 }