2 * Internet control panel applet: general propsheet
4 * Copyright 2010 Detlef Riekenberg
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
33 #include "wine/debug.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(inetcpl
);
37 static const WCHAR about_blank
[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
38 static const WCHAR start_page
[] = {'S','t','a','r','t',' ','P','a','g','e',0};
39 static const WCHAR default_page
[] = {'D','e','f','a','u','l','t','_','P','a','g','e','_','U','R','L',0};
40 static const WCHAR reg_ie_main
[] = {'S','o','f','t','w','a','r','e','\\',
41 'M','i','c','r','o','s','o','f','t','\\',
42 'I','n','t','e','r','n','e','t',' ','E','x','p','l','o','r','e','r','\\',
45 /* list of unimplemented buttons */
46 static DWORD disabled_general_buttons
[] = {IDC_HOME_CURRENT
,
49 static DWORD disabled_delhist_buttons
[] = {IDC_DELETE_FORM_DATA
,
53 /*********************************************************************
54 * delhist_on_command [internal]
56 * handle WM_COMMAND in Delete browsing history dialog
59 static INT_PTR
delhist_on_command(HWND hdlg
, WPARAM wparam
)
63 case MAKEWPARAM(IDOK
, BN_CLICKED
):
64 if (IsDlgButtonChecked(hdlg
, IDC_DELETE_TEMP_FILES
))
65 FreeUrlCacheSpaceW(NULL
, 100, 0);
67 if (IsDlgButtonChecked(hdlg
, IDC_DELETE_COOKIES
))
69 WCHAR pathW
[MAX_PATH
];
71 if(SHGetSpecialFolderPathW(NULL
, pathW
, CSIDL_COOKIES
, TRUE
))
72 FreeUrlCacheSpaceW(pathW
, 100, 0);
75 if (IsDlgButtonChecked(hdlg
, IDC_DELETE_HISTORY
))
77 WCHAR pathW
[MAX_PATH
];
79 if(SHGetSpecialFolderPathW(NULL
, pathW
, CSIDL_HISTORY
, TRUE
))
80 FreeUrlCacheSpaceW(pathW
, 100, 0);
83 EndDialog(hdlg
, IDOK
);
86 case MAKEWPARAM(IDCANCEL
, BN_CLICKED
):
87 EndDialog(hdlg
, IDCANCEL
);
90 case MAKEWPARAM(IDC_DELETE_TEMP_FILES
, BN_CLICKED
):
91 case MAKEWPARAM(IDC_DELETE_COOKIES
, BN_CLICKED
):
92 case MAKEWPARAM(IDC_DELETE_HISTORY
, BN_CLICKED
):
93 case MAKEWPARAM(IDC_DELETE_FORM_DATA
, BN_CLICKED
):
94 case MAKEWPARAM(IDC_DELETE_PASSWORDS
, BN_CLICKED
):
96 BOOL any
= IsDlgButtonChecked(hdlg
, IDC_DELETE_TEMP_FILES
) ||
97 IsDlgButtonChecked(hdlg
, IDC_DELETE_COOKIES
) ||
98 IsDlgButtonChecked(hdlg
, IDC_DELETE_HISTORY
) ||
99 IsDlgButtonChecked(hdlg
, IDC_DELETE_FORM_DATA
) ||
100 IsDlgButtonChecked(hdlg
, IDC_DELETE_PASSWORDS
);
101 EnableWindow(GetDlgItem(hdlg
, IDOK
), any
);
112 /*********************************************************************
113 * delhist_dlgproc [internal]
115 * Delete browsing history dialog procedure
118 static INT_PTR CALLBACK
delhist_dlgproc(HWND hdlg
, UINT msg
, WPARAM wparam
, LPARAM lparam
)
123 return delhist_on_command(hdlg
, wparam
);
127 DWORD
*ptr
= disabled_delhist_buttons
;
130 EnableWindow(GetDlgItem(hdlg
, *ptr
), FALSE
);
133 CheckDlgButton(hdlg
, IDC_DELETE_TEMP_FILES
, BST_CHECKED
);
143 /*********************************************************************
144 * parse_url_from_outside [internal]
146 * Filter an URL, add a usable scheme, when needed
149 static DWORD
parse_url_from_outside(LPCWSTR url
, LPWSTR out
, DWORD maxlen
)
152 DWORD (WINAPI
*pParseURLFromOutsideSourceW
)(LPCWSTR
, LPWSTR
, LPDWORD
, LPDWORD
);
155 hdll
= LoadLibraryA("shdocvw.dll");
156 pParseURLFromOutsideSourceW
= (void *) GetProcAddress(hdll
, (LPSTR
) 170);
158 if (pParseURLFromOutsideSourceW
)
160 res
= pParseURLFromOutsideSourceW(url
, out
, &maxlen
, NULL
);
165 ERR("failed to get ordinal 170: %d\n", GetLastError());
170 /*********************************************************************
171 * general_on_command [internal]
176 static INT_PTR
general_on_command(HWND hwnd
, WPARAM wparam
)
178 WCHAR buffer
[INTERNET_MAX_URL_LENGTH
];
185 case MAKEWPARAM(IDC_HOME_EDIT
, EN_CHANGE
):
186 /* enable apply button */
187 SendMessageW(GetParent(hwnd
), PSM_CHANGED
, (WPARAM
)hwnd
, 0);
190 case MAKEWPARAM(IDC_HOME_BLANK
, BN_CLICKED
):
191 SetDlgItemTextW(hwnd
, IDC_HOME_EDIT
, about_blank
);
194 case MAKEWPARAM(IDC_HOME_DEFAULT
, BN_CLICKED
):
195 len
= sizeof(buffer
);
197 res
= SHRegGetUSValueW(reg_ie_main
, default_page
, &type
, buffer
, &len
, FALSE
, (LPBYTE
) about_blank
, sizeof(about_blank
));
198 if (!res
&& (type
== REG_SZ
)) SetDlgItemTextW(hwnd
, IDC_HOME_EDIT
, buffer
);
201 case MAKEWPARAM(IDC_HISTORY_DELETE
, BN_CLICKED
):
202 DialogBoxW(hcpl
, MAKEINTRESOURCEW(IDD_DELETE_HISTORY
), hwnd
,
207 TRACE("not implemented for command: %d/%d\n", HIWORD(wparam
), LOWORD(wparam
));
213 /*********************************************************************
214 * general_on_initdialog [internal]
216 * handle WM_INITDIALOG
219 static VOID
general_on_initdialog(HWND hwnd
)
221 WCHAR buffer
[INTERNET_MAX_URL_LENGTH
];
225 DWORD
*ptr
= disabled_general_buttons
;
227 /* disable unimplemented buttons */
230 EnableWindow(GetDlgItem(hwnd
, *ptr
), FALSE
);
234 /* read current homepage from the registry. Try HCU first, then HKLM */
236 len
= sizeof(buffer
);
238 res
= SHRegGetUSValueW(reg_ie_main
, start_page
, &type
, buffer
, &len
, FALSE
, (LPBYTE
) about_blank
, sizeof(about_blank
));
240 if (!res
&& (type
== REG_SZ
))
242 SetDlgItemTextW(hwnd
, IDC_HOME_EDIT
, buffer
);
246 /*********************************************************************
247 * general_on_notify [internal]
252 static INT_PTR
general_on_notify(HWND hwnd
, WPARAM wparam
, LPARAM lparam
)
255 WCHAR buffer
[INTERNET_MAX_URL_LENGTH
];
256 WCHAR parsed
[INTERNET_MAX_URL_LENGTH
];
259 psn
= (PSHNOTIFY
*) lparam
;
260 TRACE("WM_NOTIFY (%p, 0x%lx, 0x%lx) from %p with code: %d\n", hwnd
, wparam
, lparam
,
261 psn
->hdr
.hwndFrom
, psn
->hdr
.code
);
263 if (psn
->hdr
.code
== PSN_APPLY
)
266 GetDlgItemTextW(hwnd
, IDC_HOME_EDIT
, buffer
, ARRAY_SIZE(buffer
));
267 TRACE("EDITTEXT has %s\n", debugstr_w(buffer
));
269 res
= parse_url_from_outside(buffer
, parsed
, ARRAY_SIZE(parsed
));
270 TRACE("got %d with %s\n", res
, debugstr_w(parsed
));
276 /* update the dialog, when needed */
277 if (lstrcmpW(buffer
, parsed
))
278 SetDlgItemTextW(hwnd
, IDC_HOME_EDIT
, parsed
);
280 /* update the registry */
281 res
= RegOpenKeyW(HKEY_CURRENT_USER
, reg_ie_main
, &hkey
);
284 res
= RegSetValueExW(hkey
, start_page
, 0, REG_SZ
, (const BYTE
*)parsed
,
285 (lstrlenW(parsed
) + 1) * sizeof(WCHAR
));
294 /*********************************************************************
295 * general_dlgproc [internal]
298 INT_PTR CALLBACK
general_dlgproc(HWND hwnd
, UINT msg
, WPARAM wparam
, LPARAM lparam
)
304 general_on_initdialog(hwnd
);
308 return general_on_command(hwnd
, wparam
);
311 return general_on_notify(hwnd
, wparam
, lparam
);
314 /* do not flood the log */
315 if ((msg
== WM_SETCURSOR
) || (msg
== WM_NCHITTEST
) || (msg
== WM_MOUSEMOVE
))
318 TRACE("(%p, 0x%08x/%d, 0x%lx, 0x%lx)\n", hwnd
, msg
, msg
, wparam
, lparam
);