+ sfree(cl);
+ }
+ break;
+ case IDM_RECONF:
+ {
+ int prev_alwaysontop = cfg.alwaysontop;
+ int prev_sunken_edge = cfg.sunken_edge;
+ char oldlogfile[FILENAME_MAX];
+ int oldlogtype;
+ int need_setwpos = FALSE;
+ int old_fwidth, old_fheight;
+
+ strcpy(oldlogfile, cfg.logfilename);
+ oldlogtype = cfg.logtype;
+ old_fwidth = font_width;
+ old_fheight = font_height;
+ GetWindowText(hwnd, cfg.wintitle, sizeof(cfg.wintitle));
+
+ if (!do_reconfig(hwnd))
+ break;
+
+ if (strcmp(oldlogfile, cfg.logfilename) ||
+ oldlogtype != cfg.logtype) {
+ logfclose(); /* reset logging */
+ logfopen();
+ }
+
+ just_reconfigged = TRUE;
+ deinit_fonts();
+ bold_mode = cfg.bold_colour ? BOLD_COLOURS : BOLD_FONT;
+ und_mode = UND_FONT;
+ init_fonts(0);
+ sfree(logpal);
+ /*
+ * Flush the line discipline's edit buffer in the
+ * case where local editing has just been disabled.
+ */
+ ldisc_send(NULL, 0);
+ if (pal)
+ DeleteObject(pal);
+ logpal = NULL;
+ pal = NULL;
+ cfgtopalette();
+ init_palette();
+
+ /* Enable or disable the scroll bar, etc */
+ {
+ LONG nflg, flag = GetWindowLong(hwnd, GWL_STYLE);
+ LONG nexflag, exflag =
+ GetWindowLong(hwnd, GWL_EXSTYLE);
+
+ nexflag = exflag;
+ if (cfg.alwaysontop != prev_alwaysontop) {
+ if (cfg.alwaysontop) {
+ nexflag |= WS_EX_TOPMOST;
+ SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0,
+ SWP_NOMOVE | SWP_NOSIZE);
+ } else {
+ nexflag &= ~(WS_EX_TOPMOST);
+ SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0,
+ SWP_NOMOVE | SWP_NOSIZE);
+ }
+ }
+ if (cfg.sunken_edge)
+ nexflag |= WS_EX_CLIENTEDGE;
+ else
+ nexflag &= ~(WS_EX_CLIENTEDGE);
+
+ nflg = flag;
+ if (cfg.scrollbar)
+ nflg |= WS_VSCROLL;
+ else
+ nflg &= ~WS_VSCROLL;
+ if (cfg.locksize)
+ nflg &= ~(WS_THICKFRAME | WS_MAXIMIZEBOX);
+ else
+ nflg |= (WS_THICKFRAME | WS_MAXIMIZEBOX);
+
+ if (nflg != flag || nexflag != exflag) {
+ RECT cr, wr;
+
+ if (nflg != flag)
+ SetWindowLong(hwnd, GWL_STYLE, nflg);
+ if (nexflag != exflag)
+ SetWindowLong(hwnd, GWL_EXSTYLE, nexflag);
+
+ SendMessage(hwnd, WM_IGNORE_SIZE, 0, 0);
+
+ SetWindowPos(hwnd, NULL, 0, 0, 0, 0,
+ SWP_NOACTIVATE | SWP_NOCOPYBITS |
+ SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER
+ | SWP_FRAMECHANGED);
+
+ GetWindowRect(hwnd, &wr);
+ GetClientRect(hwnd, &cr);
+ extra_width =
+ wr.right - wr.left - cr.right + cr.left;
+ extra_height =
+ wr.bottom - wr.top - cr.bottom + cr.top;
+ need_setwpos = TRUE;
+ }
+ }
+
+ if (cfg.height != rows ||
+ cfg.width != cols ||
+ old_fwidth != font_width ||
+ old_fheight != font_height ||
+ cfg.savelines != savelines ||
+ cfg.sunken_edge != prev_sunken_edge)
+ need_setwpos = TRUE;
+
+ if (IsZoomed(hwnd)) {
+ int w, h;
+ RECT cr;
+ if (need_setwpos)
+ defered_resize = TRUE;
+
+ GetClientRect(hwnd, &cr);
+ w = cr.right - cr.left;
+ h = cr.bottom - cr.top;
+ w = w / font_width;
+ if (w < 1)
+ w = 1;
+ h = h / font_height;
+ if (h < 1)
+ h = 1;
+
+ term_size(h, w, cfg.savelines);
+ InvalidateRect(hwnd, NULL, TRUE);
+ back->size();
+ } else {
+ term_size(cfg.height, cfg.width, cfg.savelines);
+ InvalidateRect(hwnd, NULL, TRUE);
+ if (need_setwpos) {
+ SetWindowPos(hwnd, NULL, 0, 0,
+ extra_width + font_width * cfg.width,
+ extra_height +
+ font_height * cfg.height,
+ SWP_NOACTIVATE | SWP_NOCOPYBITS |
+ SWP_NOMOVE | SWP_NOZORDER);
+ }
+ }
+ /* Oops */
+ if (cfg.locksize && IsZoomed(hwnd))
+ force_normal(hwnd);
+ set_title(cfg.wintitle);
+ if (IsIconic(hwnd)) {
+ SetWindowText(hwnd,
+ cfg.win_name_always ? window_name :
+ icon_name);
+ }