ReactOS 0.4.16-dev-329-g9223134
general.c
Go to the documentation of this file.
1/*
2 * Internet control panel applet: general propsheet
3 *
4 * Copyright 2010 Detlef Riekenberg
5 *
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.
10 *
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.
15 *
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
19 *
20 */
21
22#include <stdarg.h>
23#include <windef.h>
24#include <winbase.h>
25#include <winuser.h>
26#include <wininet.h>
27#include <winreg.h>
28#include <shlwapi.h>
29#include <prsht.h>
30#include <shlobj.h>
31
32#include "inetcpl.h"
33#include "wine/debug.h"
34
36
37static const WCHAR about_blank[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
38static const WCHAR start_page[] = {'S','t','a','r','t',' ','P','a','g','e',0};
39static const WCHAR default_page[] = {'D','e','f','a','u','l','t','_','P','a','g','e','_','U','R','L',0};
40static 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','\\',
43 'M','a','i','n',0};
44
45/* list of unimplemented buttons */
48 0};
51 0};
52
53/*********************************************************************
54 * delhist_on_command [internal]
55 *
56 * handle WM_COMMAND in Delete browsing history dialog
57 *
58 */
60{
61 switch (wparam)
62 {
65 FreeUrlCacheSpaceW(NULL, 100, 0);
66
68 {
69 WCHAR pathW[MAX_PATH];
70
72 FreeUrlCacheSpaceW(pathW, 100, 0);
73 }
74
76 {
77 WCHAR pathW[MAX_PATH];
78
80 FreeUrlCacheSpaceW(pathW, 100, 0);
81 }
82
83 EndDialog(hdlg, IDOK);
84 return TRUE;
85
87 EndDialog(hdlg, IDCANCEL);
88 return TRUE;
89
95 {
101 EnableWindow(GetDlgItem(hdlg, IDOK), any);
102 break;
103 }
104
105 default:
106 break;
107 }
108 return FALSE;
109}
110
111
112/*********************************************************************
113 * delhist_dlgproc [internal]
114 *
115 * Delete browsing history dialog procedure
116 *
117 */
119{
120 switch (msg)
121 {
122 case WM_COMMAND:
123 return delhist_on_command(hdlg, wparam);
124
125 case WM_INITDIALOG:
126 {
128 while (*ptr)
129 {
131 ptr++;
132 }
134 break;
135 }
136
137 default:
138 break;
139 }
140 return FALSE;
141}
142
143/*********************************************************************
144 * parse_url_from_outside [internal]
145 *
146 * Filter an URL, add a usable scheme, when needed
147 *
148 */
150{
152 DWORD (WINAPI *pParseURLFromOutsideSourceW)(LPCWSTR, LPWSTR, LPDWORD, LPDWORD);
153 DWORD res;
154
155 hdll = LoadLibraryA("shdocvw.dll");
156 pParseURLFromOutsideSourceW = (void *) GetProcAddress(hdll, (LPSTR) 170);
157
158 if (pParseURLFromOutsideSourceW)
159 {
160 res = pParseURLFromOutsideSourceW(url, out, &maxlen, NULL);
162 return res;
163 }
164
165 ERR("failed to get ordinal 170: %d\n", GetLastError());
167 return 0;
168}
169
170/*********************************************************************
171 * general_on_command [internal]
172 *
173 * handle WM_COMMAND
174 *
175 */
177{
179 DWORD len;
180 DWORD type;
181 LONG res;
182
183 switch (wparam)
184 {
186 /* enable apply button */
188 break;
189
192 break;
193
195 len = sizeof(buffer);
196 type = REG_SZ;
199 break;
200
204 break;
205
206 default:
207 TRACE("not implemented for command: %d/%d\n", HIWORD(wparam), LOWORD(wparam));
208 return FALSE;
209 }
210 return TRUE;
211}
212
213/*********************************************************************
214 * general_on_initdialog [internal]
215 *
216 * handle WM_INITDIALOG
217 *
218 */
220{
222 DWORD len;
223 DWORD type;
224 LONG res;
226
227 /* disable unimplemented buttons */
228 while (*ptr)
229 {
231 ptr++;
232 }
233
234 /* read current homepage from the registry. Try HCU first, then HKLM */
235 *buffer = 0;
236 len = sizeof(buffer);
237 type = REG_SZ;
239
240 if (!res && (type == REG_SZ))
241 {
243 }
244}
245
246/*********************************************************************
247 * general_on_notify [internal]
248 *
249 * handle WM_NOTIFY
250 *
251 */
253{
254 PSHNOTIFY *psn;
257 LONG res;
258
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);
262
263 if (psn->hdr.code == PSN_APPLY)
264 {
265 *buffer = 0;
267 TRACE("EDITTEXT has %s\n", debugstr_w(buffer));
268
269 res = parse_url_from_outside(buffer, parsed, ARRAY_SIZE(parsed));
270 TRACE("got %d with %s\n", res, debugstr_w(parsed));
271
272 if (res)
273 {
274 HKEY hkey;
275
276 /* update the dialog, when needed */
277 if (lstrcmpW(buffer, parsed))
279
280 /* update the registry */
282 if (!res)
283 {
284 res = RegSetValueExW(hkey, start_page, 0, REG_SZ, (const BYTE *)parsed,
285 (lstrlenW(parsed) + 1) * sizeof(WCHAR));
286 RegCloseKey(hkey);
287 return !res;
288 }
289 }
290 }
291 return FALSE;
292}
293
294/*********************************************************************
295 * general_dlgproc [internal]
296 *
297 */
299{
300
301 switch (msg)
302 {
303 case WM_INITDIALOG:
305 return TRUE;
306
307 case WM_COMMAND:
309
310 case WM_NOTIFY:
312
313 default:
314 /* do not flood the log */
315 if ((msg == WM_SETCURSOR) || (msg == WM_NCHITTEST) || (msg == WM_MOUSEMOVE))
316 return FALSE;
317
318 TRACE("(%p, 0x%08x/%d, 0x%lx, 0x%lx)\n", hwnd, msg, msg, wparam, lparam);
319
320 }
321 return FALSE;
322}
@ lparam
Definition: SystemMenu.c:31
@ wparam
Definition: SystemMenu.c:30
#define msg(x)
Definition: auth_time.c:54
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:20
#define ERR(fmt,...)
Definition: precomp.h:57
#define RegCloseKey(hKey)
Definition: registry.h:49
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static INT_PTR general_on_command(HWND hwnd, WPARAM wparam)
Definition: general.c:176
INT_PTR CALLBACK general_dlgproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
Definition: general.c:298
static DWORD disabled_general_buttons[]
Definition: general.c:46
static const WCHAR reg_ie_main[]
Definition: general.c:40
static INT_PTR general_on_notify(HWND hwnd, WPARAM wparam, LPARAM lparam)
Definition: general.c:252
static DWORD disabled_delhist_buttons[]
Definition: general.c:49
static const WCHAR default_page[]
Definition: general.c:39
static VOID general_on_initdialog(HWND hwnd)
Definition: general.c:219
static const WCHAR about_blank[]
Definition: general.c:37
static DWORD parse_url_from_outside(LPCWSTR url, LPWSTR out, DWORD maxlen)
Definition: general.c:149
static INT_PTR CALLBACK delhist_dlgproc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
Definition: general.c:118
static INT_PTR delhist_on_command(HWND hdlg, WPARAM wparam)
Definition: general.c:59
static const WCHAR start_page[]
Definition: general.c:38
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3268
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
#define lstrlenW
Definition: compat.h:750
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4243
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
Definition: shellpath.c:3092
LONG WINAPI SHRegGetUSValueW(LPCWSTR pSubKey, LPCWSTR pValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData, BOOL flagIgnoreHKCU, LPVOID pDefaultData, DWORD wDefaultDataSize)
Definition: reg.c:594
#define INTERNET_MAX_URL_LENGTH
Definition: session.c:1418
BOOL WINAPI FreeUrlCacheSpaceW(LPCWSTR cache_path, DWORD size, DWORD filter)
Definition: urlcache.c:2374
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint res
Definition: glext.h:9613
GLuint buffer
Definition: glext.h:5915
GLenum GLsizei len
Definition: glext.h:6722
DECLSPEC_HIDDEN HMODULE hcpl
Definition: inetcpl.c:42
#define IDC_HOME_DEFAULT
Definition: inetcpl.h:71
#define IDD_DELETE_HISTORY
Definition: inetcpl.h:76
#define IDC_DELETE_HISTORY
Definition: inetcpl.h:79
#define IDC_HOME_EDIT
Definition: inetcpl.h:69
#define IDC_HISTORY_SETTINGS
Definition: inetcpl.h:74
#define IDC_DELETE_COOKIES
Definition: inetcpl.h:78
#define IDC_HISTORY_DELETE
Definition: inetcpl.h:73
#define IDC_HOME_BLANK
Definition: inetcpl.h:72
#define IDC_DELETE_PASSWORDS
Definition: inetcpl.h:81
#define IDC_HOME_CURRENT
Definition: inetcpl.h:70
#define IDC_DELETE_TEMP_FILES
Definition: inetcpl.h:77
#define IDC_DELETE_FORM_DATA
Definition: inetcpl.h:80
#define debugstr_w
Definition: kernel32.h:32
#define REG_SZ
Definition: layer.c:22
static PVOID ptr
Definition: dispmode.c:27
static const WCHAR url[]
Definition: encode.c:1432
unsigned int UINT
Definition: ndis.h:50
#define LPDWORD
Definition: nt_native.h:46
#define DWORD
Definition: nt_native.h:44
#define LOWORD(l)
Definition: pedump.c:82
long LONG
Definition: pedump.c:60
#define PSM_CHANGED
Definition: prsht.h:164
#define PSN_APPLY
Definition: prsht.h:117
static FILE * out
Definition: regtests2xml.c:44
#define WM_NOTIFY
Definition: richedit.h:61
static PVOID hdll
Definition: shimdbg.c:126
#define CSIDL_COOKIES
Definition: shlobj.h:2205
#define CSIDL_HISTORY
Definition: shlobj.h:2206
#define TRACE(s)
Definition: solgame.cpp:4
NMHDR hdr
Definition: prsht.h:330
UINT code
Definition: winuser.h:3162
HWND hwndFrom
Definition: winuser.h:3160
int32_t INT_PTR
Definition: typedefs.h:64
unsigned char * LPBYTE
Definition: typedefs.h:53
#define HIWORD(l)
Definition: typedefs.h:247
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
Definition: dialog.c:2263
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define MAKEWPARAM(l, h)
Definition: winuser.h:4012
BOOL WINAPI CheckDlgButton(_In_ HWND, _In_ int, _In_ UINT)
#define IDCANCEL
Definition: winuser.h:834
#define DialogBoxW(i, t, p, f)
Definition: winuser.h:4402
#define WM_COMMAND
Definition: winuser.h:1743
#define WM_NCHITTEST
Definition: winuser.h:1689
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
#define WM_MOUSEMOVE
Definition: winuser.h:1778
#define WM_INITDIALOG
Definition: winuser.h:1742
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define IDOK
Definition: winuser.h:833
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
HWND WINAPI GetParent(_In_ HWND)
#define WM_SETCURSOR
Definition: winuser.h:1639
#define BN_CLICKED
Definition: winuser.h:1928
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define BST_CHECKED
Definition: winuser.h:197
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define EN_CHANGE
Definition: winuser.h:2025
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193