summaryrefslogtreecommitdiff
path: root/windows/prefs.c
diff options
context:
space:
mode:
authorVincent Sanders <vince@netsurf-browser.org>2010-01-31 00:36:02 +0000
committerVincent Sanders <vince@netsurf-browser.org>2010-01-31 00:36:02 +0000
commit55162445db4c8ea46be671c2abed4ad4e77e1dcd (patch)
tree52b04422e2575987ef9617d35c8f21b078a4b696 /windows/prefs.c
parent6990c2cd049d6e1a36c8e6a6bb9ba2f8d8db9fac (diff)
downloadnetsurf-55162445db4c8ea46be671c2abed4ad4e77e1dcd.tar.gz
netsurf-55162445db4c8ea46be671c2abed4ad4e77e1dcd.tar.bz2
Add Windows frontend
svn path=/trunk/netsurf/; revision=9940
Diffstat (limited to 'windows/prefs.c')
-rw-r--r--windows/prefs.c635
1 files changed, 635 insertions, 0 deletions
diff --git a/windows/prefs.c b/windows/prefs.c
new file mode 100644
index 000000000..f41f96663
--- /dev/null
+++ b/windows/prefs.c
@@ -0,0 +1,635 @@
+/*
+ * Copyright 2009 Mark Benjamin <netsurf-browser.org.MarkBenjamin@dfgh.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <windows.h>
+#define _WIN32_IE (0x0501)
+#include <commctrl.h>
+#include "desktop/options.h"
+#include "utils/log.h"
+#include "utils/messages.h"
+#include "utils/utils.h"
+#include "windows/gui.h"
+#include "windows/prefs.h"
+#include "windows/resourceid.h"
+
+#define NSWS_PREFS_WINDOW_WIDTH 600
+#define NSWS_PREFS_WINDOW_HEIGHT 400
+
+#ifndef MIN
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+#ifndef MAX
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+#endif
+/* static HWND prefswindow = NULL; */
+
+void nsws_prefs_window_create(HWND parent);
+BOOL CALLBACK nsws_prefs_event_callback(HWND hwnd, UINT msg, WPARAM wparam,
+ LPARAM lparam);
+CHOOSEFONT *nsws_prefs_font_prepare(int fontfamily, HWND parent);
+
+void nsws_prefs_dialog_init(HWND parent)
+{
+ int ret = DialogBox(hinstance, MAKEINTRESOURCE(NSWS_ID_PREFS_DIALOG),
+ parent, nsws_prefs_event_callback);
+ if (ret == -1) {
+ warn_user(messages_get("NoMemory"), 0);
+ return;
+ }
+}
+
+
+BOOL CALLBACK nsws_prefs_event_callback(HWND hwnd, UINT msg, WPARAM wparam,
+ LPARAM lparam)
+{
+ HWND sub;
+ char *temp, number[6];
+ int len;
+ switch(msg) {
+ case WM_INITDIALOG: {
+ if ((option_homepage_url != NULL) &&
+ (option_homepage_url[0] != '\0')) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_HOMEPAGE);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_homepage_url);
+ }
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_PROXYTYPE);
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"None");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Simple");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Basic Auth");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"NTLM Auth");
+ if (option_http_proxy)
+ SendMessage(sub, CB_SETCURSEL, (WPARAM)
+ (option_http_proxy_auth + 1), 0);
+ else
+ SendMessage(sub, CB_SETCURSEL, 0, 0);
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_PROXYHOST);
+ if ((option_http_proxy_host != NULL) &&
+ (option_http_proxy_host[0] != '\0'))
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_http_proxy_host);
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_PROXYPORT);
+ if (option_http_proxy_port != 0) {
+ snprintf(number, 6, "%d", option_http_proxy_port);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_PROXYNAME);
+ if ((option_http_proxy_auth_user != NULL) &&
+ (option_http_proxy_auth_user[0] != '\0'))
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_http_proxy_auth_user);
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_PROXYPASS);
+ if ((option_http_proxy_auth_pass != NULL) &&
+ (option_http_proxy_auth_pass[0] != '\0'))
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_http_proxy_auth_pass);
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FONTDEF);
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Sans serif");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Serif");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Monospace");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Cursive");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Fantasy");
+ SendMessage(sub, CB_SETCURSEL,
+ (WPARAM) (option_font_default - 1), 0);
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_ADVERTS);
+ SendMessage(sub, BM_SETCHECK, (WPARAM) ((option_block_ads) ?
+ BST_CHECKED : BST_UNCHECKED), 0);
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_REFERER);
+ SendMessage(sub, BM_SETCHECK, (WPARAM)((option_send_referer) ?
+ BST_CHECKED : BST_UNCHECKED), 0);
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_NOANIMATION);
+ SendMessage(sub, BM_SETCHECK, (WPARAM)((option_animate_images)
+ ? BST_UNCHECKED : BST_CHECKED), 0);
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FETCHERS);
+ snprintf(number, 6, "%d", option_max_fetchers);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FETCH_HOST);
+ snprintf(number, 6, "%d", option_max_fetchers_per_host);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FETCH_HANDLES);
+ snprintf(number, 6, "%d", option_max_cached_fetch_handles);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+
+ if ((option_font_sans != NULL) &&
+ (option_font_sans[0] != '\0')) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_SANS);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_font_sans);
+ }
+ if ((option_font_serif != NULL) &&
+ (option_font_serif[0] != '\0')) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_SERIF);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_font_serif);
+ }
+ if ((option_font_mono != NULL) &&
+ (option_font_mono[0] != '\0')) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_MONO);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_font_mono);
+ }
+ if ((option_font_cursive != NULL) &&
+ (option_font_cursive[0] != '\0')) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_CURSIVE);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_font_cursive);
+ }
+ if ((option_font_fantasy != NULL) &&
+ (option_font_fantasy[0] != '\0')) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FANTASY);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_font_fantasy);
+ }
+ if (option_font_min_size != 0) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FONT_MINSIZE);
+ snprintf(number, 6, "%.1f", option_font_min_size /
+ 10.0);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+ if (option_font_size != 0) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FONT_SIZE);
+ snprintf(number, 6, "%.1f", option_font_size / 10.0);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+ if (option_max_fetchers != 0) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FETCHERS);
+ snprintf(number, 6, "%d", option_max_fetchers);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+ if (option_max_fetchers_per_host != 0) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FETCH_HOST);
+ snprintf(number, 6, "%d",
+ option_max_fetchers_per_host);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+ if (option_max_cached_fetch_handles != 0) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FETCH_HANDLES);
+ snprintf(number, 6, "%d",
+ option_max_cached_fetch_handles);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+ if (option_minimum_gif_delay != 0) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_ANIMATIONDELAY);
+ snprintf(number, 6, "%.1f", option_minimum_gif_delay /
+ 100.0);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+ return TRUE;
+ }
+ case WM_CREATE:
+ return TRUE;
+ case WM_COMMAND:
+ switch(LOWORD(wparam)) {
+ case IDOK: {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_HOMEPAGE);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ if (option_homepage_url != NULL)
+ free(option_homepage_url);
+ option_homepage_url = malloc(len + 1);
+ if (option_homepage_url != NULL)
+ SendMessage(sub, WM_GETTEXT,
+ (WPARAM) (len + 1),
+ (LPARAM) option_homepage_url);
+/* seems to segfault at startup
+
+ option_block_ads = (IsDlgButtonChecked(hwnd,
+ NSWS_ID_PREFS_ADVERTS) == BST_CHECKED)
+ ? true : false;
+*/
+ option_send_referer = (IsDlgButtonChecked(hwnd,
+ NSWS_ID_PREFS_REFERER) == BST_CHECKED)
+ ? true : false;
+ option_animate_images = (IsDlgButtonChecked(hwnd,
+ NSWS_ID_PREFS_NOANIMATION) ==
+ BST_CHECKED) ? false : true;
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FETCHERS);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ option_max_fetchers = atoi(temp);
+ free(temp);
+ }
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FETCH_HOST);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ option_max_fetchers_per_host = atoi(temp);
+ free(temp);
+ }
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FETCH_HANDLES);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ option_max_cached_fetch_handles = atoi(temp);
+ free(temp);
+ }
+ sub = GetDlgItem(hwnd,
+ NSWS_ID_PREFS_FONT_SIZE);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)
+ (len + 1), (LPARAM) temp);
+ option_font_size = (int)
+ (10 * strtod(temp, NULL));
+ free(temp);
+ }
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FONT_MINSIZE);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)
+ (len + 1), (LPARAM) temp);
+ option_font_min_size = (int)
+ (10 * strtod(temp, NULL));
+ free(temp);
+ }
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_ANIMATIONDELAY);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)
+ (len + 1), (LPARAM) temp);
+ option_minimum_gif_delay = (int)
+ (100 * strtod(temp, NULL));
+ free(temp);
+ }
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_PROXYHOST);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ if (option_http_proxy_host != NULL)
+ free(option_http_proxy_host);
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ option_http_proxy_host = strdup(temp);
+ free(temp);
+ }
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_PROXYPORT);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ option_http_proxy_port = atoi(temp);
+ free(temp);
+ }
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_PROXYNAME);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ if (option_http_proxy_auth_user != NULL)
+ free(option_http_proxy_auth_user);
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ option_http_proxy_auth_user = strdup(temp);
+ free(temp);
+ }
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_PROXYPASS);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ if (option_http_proxy_auth_pass != NULL)
+ free(option_http_proxy_auth_pass);
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ option_http_proxy_auth_pass = strdup(temp);
+ free(temp);
+ }
+ options_write(options_file_location);
+ }
+ case IDCANCEL:
+ EndDialog(hwnd, IDOK);
+ break;
+ case NSWS_ID_PREFS_HOMEPAGE:
+ break;
+ case NSWS_ID_PREFS_ADVERTS:
+ break;
+ case NSWS_ID_PREFS_POPUPS:
+ printf("wparam %d, lparam %ld hi %d lo %d\n", wparam,
+ lparam, HIWORD(lparam),
+ LOWORD(lparam));
+ break;
+ case NSWS_ID_PREFS_PLUGINS:
+ printf("wparam %d, lparam %ld hi %d lo %d\n", wparam,
+ lparam, HIWORD(lparam),
+ LOWORD(lparam));
+ break;
+ case NSWS_ID_PREFS_REFERER:
+ printf("wparam %d, lparam %ld hi %d lo %d\n", wparam,
+ lparam, HIWORD(lparam),
+ LOWORD(lparam));
+ break;
+ case NSWS_ID_PREFS_PROXYTYPE:
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_PROXYTYPE);
+ option_http_proxy_auth = SendMessage(sub,
+ CB_GETCURSEL, 0, 0) - 1;
+ option_http_proxy = (option_http_proxy_auth != -1);
+ option_http_proxy_auth += (option_http_proxy) ? 0 : 1;
+ break;
+ case NSWS_ID_PREFS_PROXYHOST:
+ break;
+ case NSWS_ID_PREFS_PROXYNAME:
+ break;
+ case NSWS_ID_PREFS_PROXYPASS:
+ break;
+ case NSWS_ID_PREFS_SANS: {
+ CHOOSEFONT *cf = nsws_prefs_font_prepare(FF_SWISS,
+ hwnd);
+ if (cf == NULL)
+ break;
+ if (ChooseFont(cf) == TRUE) {
+ if (option_font_sans != NULL)
+ free(option_font_sans);
+ option_font_sans = strdup(
+ cf->lpLogFont->lfFaceName);
+ }
+ free(cf->lpLogFont);
+ free(cf);
+ if ((option_font_sans != NULL) &&
+ (option_font_sans[0] != '\0')) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_SANS);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_font_sans);
+ }
+ break;
+ }
+ case NSWS_ID_PREFS_SERIF: {
+ CHOOSEFONT *cf = nsws_prefs_font_prepare(FF_ROMAN,
+ hwnd);
+ if (cf == NULL)
+ break;
+
+ if (ChooseFont(cf) == TRUE) {
+ if (option_font_serif != NULL)
+ free(option_font_serif);
+ option_font_serif = strdup(
+ cf->lpLogFont->lfFaceName);
+ }
+ free(cf->lpLogFont);
+ free(cf);
+ if ((option_font_serif != NULL) &&
+ (option_font_serif[0] != '\0')) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_SERIF);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_font_serif);
+ }
+ break;
+ }
+ case NSWS_ID_PREFS_MONO: {
+ CHOOSEFONT *cf = nsws_prefs_font_prepare(FF_MODERN,
+ hwnd);
+ if (cf == NULL)
+ break;
+
+ if (ChooseFont(cf) == TRUE) {
+ if (option_font_mono != NULL)
+ free(option_font_mono);
+ option_font_mono = strdup(
+ cf->lpLogFont->lfFaceName);
+ }
+ free(cf->lpLogFont);
+ free(cf);
+ if ((option_font_mono != NULL) &&
+ (option_font_mono[0] != '\0')) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_MONO);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_font_mono);
+ }
+ break;
+ }
+ case NSWS_ID_PREFS_CURSIVE: {
+ CHOOSEFONT *cf = nsws_prefs_font_prepare(FF_SCRIPT,
+ hwnd);
+ if (cf == NULL)
+ break;
+
+ if (ChooseFont(cf) == TRUE) {
+ if (option_font_cursive != NULL)
+ free(option_font_cursive);
+ option_font_cursive = strdup(
+ cf->lpLogFont->lfFaceName);
+ }
+ free(cf->lpLogFont);
+ free(cf);
+ if ((option_font_cursive != NULL) &&
+ (option_font_cursive[0] != '\0')) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_CURSIVE);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_font_cursive);
+ }
+ break;
+ }
+ case NSWS_ID_PREFS_FANTASY: {
+ CHOOSEFONT *cf = nsws_prefs_font_prepare(FF_DECORATIVE,
+ hwnd);
+ if (cf == NULL)
+ break;
+ if (ChooseFont(cf) == TRUE) {
+ if (option_font_fantasy != NULL)
+ free(option_font_fantasy);
+ option_font_fantasy = strdup(
+ cf->lpLogFont->lfFaceName);
+ }
+ free(cf->lpLogFont);
+ free(cf);
+ if ((option_font_fantasy != NULL) &&
+ (option_font_fantasy[0] != '\0')) {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FANTASY);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)option_font_fantasy);
+ }
+ break;
+ }
+ case NSWS_ID_PREFS_FONTDEF: {
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FONTDEF);
+ option_font_default = SendMessage(sub, CB_GETCURSEL, 0, 0) + 1;
+ break;
+ }
+ case NSWS_ID_PREFS_FETCHERS:
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FETCHERS);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp == NULL)
+ return FALSE;
+ SendMessage(sub, WM_GETTEXT, (WPARAM)
+ (len + 1), (LPARAM) temp);
+ option_max_fetchers = atoi(temp);
+ free(temp);
+ break;
+ case NSWS_ID_PREFS_FETCH_HOST:
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FETCH_HOST);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp == NULL)
+ return FALSE;
+ SendMessage(sub, WM_GETTEXT, (WPARAM)
+ (len + 1), (LPARAM) temp);
+ option_max_fetchers_per_host = atoi(temp);
+ free(temp);
+ break;
+ case NSWS_ID_PREFS_FETCH_HANDLES:
+ sub = GetDlgItem(hwnd, NSWS_ID_PREFS_FETCH_HANDLES);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp == NULL)
+ return FALSE;
+ SendMessage(sub, WM_GETTEXT, (WPARAM)
+ (len + 1), (LPARAM) temp);
+ option_max_cached_fetch_handles = atoi(temp);
+ free(temp);
+ break;
+ default:
+ return FALSE;
+ }
+ break;
+ case WM_NOTIFY: {
+ NMHDR *nm = (NMHDR *)lparam;
+ NMUPDOWN *ud = (NMUPDOWN *)lparam;
+ if (nm->code == UDN_DELTAPOS)
+ switch(nm->idFrom) {
+ case NSWS_ID_PREFS_FONT_SIZE_SPIN: {
+ double size = 0;
+ sub = GetDlgItem(hwnd,
+ NSWS_ID_PREFS_FONT_SIZE);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp == NULL)
+ return FALSE;
+ SendMessage(sub, WM_GETTEXT, (WPARAM)
+ (len + 1), (LPARAM) temp);
+ if (ud->iDelta == 1) {
+ size = strtod(temp, NULL) + 0.1;
+ }
+ else if (ud->iDelta == -1) {
+ size = strtod(temp, NULL) - 0.1;
+ }
+ free(temp);
+ size = MAX(size, 0);
+ snprintf(number, 6, "%.1f", size);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)number);
+ return TRUE;
+ }
+ case NSWS_ID_PREFS_FONT_MINSIZE_SPIN: {
+ double size = 0;
+ sub = GetDlgItem(hwnd,
+ NSWS_ID_PREFS_FONT_MINSIZE);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp == NULL)
+ return FALSE;
+ SendMessage(sub, WM_GETTEXT, (WPARAM)
+ (len + 1), (LPARAM) temp);
+ if (ud->iDelta == 1) {
+ size = strtod(temp, NULL) + 0.1;
+ }
+ else if (ud->iDelta == -1) {
+ size = strtod(temp, NULL) - 0.1;
+ }
+ free(temp);
+ size = MAX(size, 0);
+ snprintf(number, 6, "%.1f", size);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)number);
+ return TRUE;
+ }
+ case NSWS_ID_PREFS_ANIMATIONDELAY_SPIN: {
+ double animation=0;
+ sub = GetDlgItem(hwnd,
+ NSWS_ID_PREFS_ANIMATIONDELAY);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp == NULL)
+ return FALSE;
+ SendMessage(sub, WM_GETTEXT, (WPARAM)
+ (len + 1), (LPARAM) temp);
+ if (ud->iDelta == 1) {
+ animation = strtod(temp, NULL) + 0.1;
+ }
+ else if (ud->iDelta == -1) {
+ animation = strtod(temp, NULL) - 0.1;
+ }
+ free(temp);
+ animation = MAX(animation, 0);
+ snprintf(number, 6, "%.1f", animation);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)number);
+ return TRUE;
+ }
+ }
+ break;
+ }
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+CHOOSEFONT *nsws_prefs_font_prepare(int fontfamily, HWND parent)
+{
+ CHOOSEFONT *cf = malloc(sizeof(CHOOSEFONT));
+ if (cf == NULL) {
+ warn_user(messages_get("NoMemory"),0);
+ return NULL;
+ }
+ LOGFONT *lf = malloc(sizeof(LOGFONT));
+ if (lf == NULL) {
+ warn_user(messages_get("NoMemory"),0);
+ free(cf);
+ return NULL;
+ }
+ switch(fontfamily) {
+ case FF_ROMAN:
+ snprintf(lf->lfFaceName, LF_FACESIZE, "%s",
+ option_font_serif);
+ break;
+ case FF_MODERN:
+ snprintf(lf->lfFaceName, LF_FACESIZE, "%s",
+ option_font_mono);
+ break;
+ case FF_SCRIPT:
+ snprintf(lf->lfFaceName, LF_FACESIZE, "%s",
+ option_font_cursive);
+ break;
+ case FF_DECORATIVE:
+ snprintf(lf->lfFaceName, LF_FACESIZE, "%s",
+ option_font_fantasy);
+ break;
+ case FF_SWISS:
+ default:
+ snprintf(lf->lfFaceName, LF_FACESIZE, "%s",
+ option_font_sans);
+ break;
+ }
+ cf->lStructSize = sizeof(CHOOSEFONT);
+ cf->hwndOwner = parent;
+ cf->lpLogFont = lf;
+ cf->Flags = CF_SCREENFONTS | CF_INITTOLOGFONTSTRUCT | CF_LIMITSIZE;
+ cf->nSizeMin = 16;
+ cf->nSizeMax = 24;
+
+ return cf;
+}