+/*
+ * window.c - the PuTTY(tel) main program, which runs a PuTTY terminal
+ * emulator and backend in a window.
+ */
+
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#endif
}
} else {
- if ( font_width != win_width/term->cols ||
- font_height != win_height/term->rows) {
+ if ( font_width * term->cols != win_width ||
+ font_height * term->rows != win_height) {
/* Our only choice at this point is to change the
* size of the terminal; Oh well.
*/
if (cfg.nethack_keypad && !left_alt) {
switch (wParam) {
case VK_NUMPAD1:
- *p++ = shift_state ? 'B' : 'b';
+ *p++ = "bB\002\002"[shift_state & 3];
return p - output;
case VK_NUMPAD2:
- *p++ = shift_state ? 'J' : 'j';
+ *p++ = "jJ\012\012"[shift_state & 3];
return p - output;
case VK_NUMPAD3:
- *p++ = shift_state ? 'N' : 'n';
+ *p++ = "nN\016\016"[shift_state & 3];
return p - output;
case VK_NUMPAD4:
- *p++ = shift_state ? 'H' : 'h';
+ *p++ = "hH\010\010"[shift_state & 3];
return p - output;
case VK_NUMPAD5:
*p++ = shift_state ? '.' : '.';
return p - output;
case VK_NUMPAD6:
- *p++ = shift_state ? 'L' : 'l';
+ *p++ = "lL\014\014"[shift_state & 3];
return p - output;
case VK_NUMPAD7:
- *p++ = shift_state ? 'Y' : 'y';
+ *p++ = "yY\031\031"[shift_state & 3];
return p - output;
case VK_NUMPAD8:
- *p++ = shift_state ? 'K' : 'k';
+ *p++ = "kK\013\013"[shift_state & 3];
return p - output;
case VK_NUMPAD9:
- *p++ = shift_state ? 'U' : 'u';
+ *p++ = "uU\025\025"[shift_state & 3];
return p - output;
}
}
UnrealizeObject(pal);
RealizePalette(hdc);
free_ctx(hdc);
+ } else {
+ if (n == (ATTR_DEFBG>>ATTR_BGSHIFT))
+ /* If Default Background changes, we need to ensure any
+ * space between the text area and the window border is
+ * redrawn. */
+ InvalidateRect(hwnd, NULL, TRUE);
}
}
hdc = get_ctx(frontend);
RealizePalette(hdc);
free_ctx(hdc);
+ } else {
+ /* Default Background may have changed. Ensure any space between
+ * text area and window border is redrawn. */
+ InvalidateRect(hwnd, NULL, TRUE);
}
}
ss.bottom - ss.top,
SWP_FRAMECHANGED);
+ /* We may have changed size as a result */
+
+ reset_window(0);
+
/* Tick the menu item in the System menu. */
CheckMenuItem(GetSystemMenu(hwnd, FALSE), IDM_FULLSCREEN,
MF_CHECKED);