Christopher Allene's patch for going full-screen on Alt-Enter.
[u/mdw/putty] / window.c
index f3db0cd..869e91f 100644 (file)
--- a/window.c
+++ b/window.c
@@ -71,13 +71,16 @@ static void init_fonts(int);
 static void another_font(int);
 static void deinit_fonts(void);
 
-static int extra_width, extra_height;
+static int full_screen = 0, extra_width, extra_height;
+static LONG old_wind_style;
+static WINDOWPLACEMENT old_wind_placement;
 
 static int pending_netevent = 0;
 static WPARAM pend_netevent_wParam = 0;
 static LPARAM pend_netevent_lParam = 0;
 static void enact_pending_netevent(void);
 static void flash_window(int mode);
+static void flip_full_screen(void);
 
 static time_t last_movement = 0;
 
@@ -706,7 +709,8 @@ char *do_select(SOCKET skt, int startup)
     int msg, events;
     if (startup) {
        msg = WM_NETEVENT;
-       events = FD_READ | FD_WRITE | FD_OOB | FD_CLOSE | FD_ACCEPT;
+       events = (FD_CONNECT | FD_READ | FD_WRITE |
+                 FD_OOB | FD_CLOSE | FD_ACCEPT);
     } else {
        msg = events = 0;
     }
@@ -1666,6 +1670,9 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
        pending_netevent = TRUE;
        pend_netevent_wParam = wParam;
        pend_netevent_lParam = lParam;
+       if (WSAGETSELECTEVENT(lParam) != FD_READ)
+           enact_pending_netevent();
+
        time(&last_movement);
        return 0;
       case WM_SETFOCUS:
@@ -1957,7 +1964,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
        }
        return 0;
       case WM_SETCURSOR:
-       if (send_raw_mouse) {
+       if (send_raw_mouse && LOWORD(lParam) == HTCLIENT) {
            SetCursor(LoadCursor(NULL, IDC_ARROW));
            return TRUE;
        }
@@ -2548,6 +2555,10 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
            SendMessage(hwnd, WM_SYSCOMMAND, SC_KEYMENU, 0);
            return -1;
        }
+       if (left_alt && wParam == VK_RETURN && cfg.fullscreenonaltenter) {
+           flip_full_screen();
+           return -1;
+       }
        /* Control-Numlock for app-keypad mode switch */
        if (wParam == VK_PAUSE && shift_state == 2) {
            app_keypad_keys ^= 1;
@@ -3411,3 +3422,27 @@ void beep(int mode)
        flash_window(2);               /* start */
     }
 }
+
+/*
+ * Toggle full screen mode. Thanks to cwis@nerim.fr for the
+ * implementation.
+ */
+static void flip_full_screen(void)
+{
+    if (!full_screen) {
+       int cx, cy;
+
+       cx = GetSystemMetrics(SM_CXSCREEN);
+       cy = GetSystemMetrics(SM_CYSCREEN);
+       GetWindowPlacement(hwnd, &old_wind_placement);
+       old_wind_style = GetWindowLong(hwnd, GWL_STYLE);
+       SetWindowLong(hwnd, GWL_STYLE,
+                     old_wind_style & ~(WS_CAPTION | WS_BORDER | WS_THICKFRAME));
+       SetWindowPos(hwnd, HWND_TOP, 0, 0, cx, cy, SWP_SHOWWINDOW);
+       full_screen = 1;
+    } else {
+       SetWindowLong(hwnd, GWL_STYLE, old_wind_style);
+       SetWindowPlacement(hwnd,&old_wind_placement);
+       full_screen = 0;
+    }
+}