The special treatment of Alt-resize (to cause resizing to affect the
[sgt/putty] / windows / window.c
index 96f6499..12b6fe7 100644 (file)
@@ -1331,7 +1331,7 @@ debug(("general_textout: done, xn=%d\n", xn));
 
 /*
  * Initialise all the fonts we will need initially. There may be as many as
- * three or as few as one.  The other (poentially) twentyone fonts are done
+ * three or as few as one.  The other (potentially) twenty-one fonts are done
  * if/when they are needed.
  *
  * We also:
@@ -2627,7 +2627,8 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
         * 1) Keep the sizetip uptodate
         * 2) Make sure the window size is _stepped_ in units of the font size.
         */
-       if (cfg.resize_action != RESIZE_FONT && !is_alt_pressed()) {
+        if (cfg.resize_action == RESIZE_TERM ||
+            (cfg.resize_action == RESIZE_EITHER && !is_alt_pressed())) {
            int width, height, w, h, ew, eh;
            LPRECT r = (LPRECT) lParam;
 
@@ -2750,55 +2751,57 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            width = LOWORD(lParam);
            height = HIWORD(lParam);
 
-           if (!resizing) {
-               if (wParam == SIZE_MAXIMIZED && !was_zoomed) {
-                   was_zoomed = 1;
-                   prev_rows = term->rows;
-                   prev_cols = term->cols;
-                   if (cfg.resize_action == RESIZE_TERM) {
-                       w = width / font_width;
-                       if (w < 1) w = 1;
-                       h = height / font_height;
-                       if (h < 1) h = 1;
-
-                       term_size(term, h, w, cfg.savelines);
-                   }
-                   reset_window(0);
-               } else if (wParam == SIZE_RESTORED && was_zoomed) {
-                   was_zoomed = 0;
-                   if (cfg.resize_action == RESIZE_TERM)
-                       term_size(term, prev_rows, prev_cols, cfg.savelines);
-                   if (cfg.resize_action != RESIZE_FONT)
-                       reset_window(2);
-                   else
-                       reset_window(0);
-               }
-               /* This is an unexpected resize, these will normally happen
-                * if the window is too large. Probably either the user
-                * selected a huge font or the screen size has changed.
-                *
-                * This is also called with minimize.
-                */
-               else reset_window(-1);
-           }
-
-           /*
-            * Don't call back->size in mid-resize. (To prevent
-            * massive numbers of resize events getting sent
-            * down the connection during an NT opaque drag.)
-            */
-           if (resizing) {
-               if (cfg.resize_action != RESIZE_FONT && !is_alt_pressed()) {
+            if (wParam == SIZE_MAXIMIZED && !was_zoomed) {
+                was_zoomed = 1;
+                prev_rows = term->rows;
+                prev_cols = term->cols;
+                if (cfg.resize_action == RESIZE_TERM) {
+                    w = width / font_width;
+                    if (w < 1) w = 1;
+                    h = height / font_height;
+                    if (h < 1) h = 1;
+
+                    term_size(term, h, w, cfg.savelines);
+                }
+                reset_window(0);
+            } else if (wParam == SIZE_RESTORED && was_zoomed) {
+                was_zoomed = 0;
+                if (cfg.resize_action == RESIZE_TERM) {
+                    w = (width-cfg.window_border*2) / font_width;
+                    if (w < 1) w = 1;
+                    h = (height-cfg.window_border*2) / font_height;
+                    if (h < 1) h = 1;
+                    term_size(term, h, w, cfg.savelines);
+                    reset_window(2);
+                } else if (cfg.resize_action != RESIZE_FONT)
+                    reset_window(2);
+                else
+                    reset_window(0);
+            } else if (wParam == SIZE_MINIMIZED) {
+                /* do nothing */
+           } else if (cfg.resize_action == RESIZE_TERM ||
+                       (cfg.resize_action == RESIZE_EITHER &&
+                        !is_alt_pressed())) {
+                w = (width-cfg.window_border*2) / font_width;
+                if (w < 1) w = 1;
+                h = (height-cfg.window_border*2) / font_height;
+                if (h < 1) h = 1;
+
+                if (resizing) {
+                    /*
+                     * Don't call back->size in mid-resize. (To
+                     * prevent massive numbers of resize events
+                     * getting sent down the connection during an NT
+                     * opaque drag.)
+                     */
                    need_backend_resize = TRUE;
-                   w = (width-cfg.window_border*2) / font_width;
-                   if (w < 1) w = 1;
-                   h = (height-cfg.window_border*2) / font_height;
-                   if (h < 1) h = 1;
-
                    cfg.height = h;
                    cfg.width = w;
-               } else 
-                   reset_window(0);
+                } else {
+                    term_size(term, h, w, cfg.savelines);
+                }
+            } else {
+                reset_window(0);
            }
        }
        sys_cursor_update();
@@ -5019,7 +5022,7 @@ DECL_WINDOWS_FUNCTION(static, BOOL, FlashWindowEx, (PFLASHWINFO));
 
 static void init_flashwindow(void)
 {
-    HMODULE user32_module = LoadLibrary("USER32.DLL");
+    HMODULE user32_module = load_system32_dll("user32.dll");
     GET_WINDOWS_FUNCTION(user32_module, FlashWindowEx);
 }