/[winpt]/trunk/Src/wptPreferencesDlg.cpp
ViewVC logotype

Contents of /trunk/Src/wptPreferencesDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 147 - (show annotations)
Fri Jan 13 14:21:16 2006 UTC (19 years, 1 month ago) by twoaday
File size: 12812 byte(s)
2006-11-13  Timo Schulz  <ts@g10code.com>
 
        * wptPreferencesDlg.cpp (prefs_dlg_proc): Changed translation.
        * wptGPGPrefsDlg.cpp (gpgprefs_dlg_proc): Likewise.
        * wptAboutDlgs.cpp (about_dlg_proc): Make sure GPG about
        dialog isn't shown twice.
        * wptKeyCache.cpp (gpg_keycache_next_updated_key): New.
        (gpg_keycache_update_key): Set update flag.
        * wptKeyManagerDlg.cpp (refresh_keylist): New.
        (keymanager_dlg_proc): Use new refresh system for keyservers.
        * wptKeyserverSearchDlg.cpp (kserver_search_dlg_proc):
        Update keycache.
        * wptKeyserverDlg.cpp (hkp_dlg_proc): Likewise.
        * wptKeyserver.cpp (socket_read_ext): New.
        (kserver_recv_key_ext): New.
        (kserver_read_config, kserver_write_config): Removed.
         


1 /* wptPreferencesDlg.cpp - Dialog for the preferences
2 * Copyright (C) 2001, 2002, 2003, 2005 Timo Schulz
3 *
4 * This file is part of WinPT.
5 *
6 * WinPT is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * WinPT 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
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with WinPT; if not, write to the Free Software Foundation,
18 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19 */
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23
24 #include <windows.h>
25 #include <shlobj.h>
26
27 #include "wptNLS.h"
28 #include "wptGPG.h"
29 #include "wptCommonCtl.h"
30 #include "wptDlgs.h"
31 #include "wptTypes.h"
32 #include "wptErrors.h"
33 #include "wptRegistry.h"
34 #include "wptHotkey.h"
35 #include "wptW32API.h"
36 #include "wptVersion.h"
37 #include "wptAgent.h"
38 #include "wptKeyserver.h"
39 #include "resource.h"
40
41
42 /* Dialog IDs of all hotkeys. */
43 static int hotkeys[] = {
44 IDC_PREFS_CLIP_ENCRYPT,
45 IDC_PREFS_CLIP_DECRYPT_VERIFY,
46 IDC_PREFS_CLIP_SIGN,
47 IDC_PREFS_CLIP_SIGNENC,
48 IDC_PREFS_CWS_ENCRYPT,
49 IDC_PREFS_CWS_DECRYPT_VERIFY,
50 IDC_PREFS_CWS_SIGN,
51 IDC_PREFS_CWS_SIGNENC,
52 0
53 };
54
55
56 /* Check that the given hotkey is in A..Z or a..z. */
57 static int
58 check_hotkey (char * key)
59 {
60 if (*key >= 'A' && *key <= 'Z')
61 return 1;
62 else if (*key >= 'a' && *key <= 'z') {
63 *key = *key - 32;
64 return 1;
65 }
66 return 0;
67 }
68
69
70 /* Disable all hotkey controls in the dialog @dlg if val is 1. */
71 static void
72 disable_hotkey_items (HWND dlg, int val)
73 {
74 int mode = val? FALSE : TRUE;
75 int i, id;
76
77 for (i=0; (id = hotkeys[i]); i++)
78 EnableWindow (GetDlgItem (dlg, id), mode);
79 }
80
81
82
83 /* En- or disable the backup items in the dialog @dlg.
84 If val != 0 activate them, disable them otherwise. */
85 static void
86 enable_backup_items (HWND dlg, int val)
87 {
88 int mode = val? TRUE : FALSE;
89
90 EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKHOME), mode);
91 EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKUSER), mode);
92 EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT), mode);
93 EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), mode);
94 }
95
96
97 /* Initialize the combox in the dialog @dlg with the valid list modes. */
98 static void
99 init_keylist_modes (HWND dlg)
100 {
101 HWND cb = GetDlgItem (dlg, IDC_PREFS_LISTMODE);
102 combox_add_string (cb, (char *)"NORMAL");
103 combox_add_string (cb, (char *)"MINIMAL");
104 SendMessage (cb, CB_SETCURSEL, (WPARAM)reg_prefs.keylist_mode, 0);
105 }
106
107
108 /* Initialize the combobox in the dialog @dlg with the valid wipe modes. */
109 static void
110 init_wipe_modes (HWND dlg)
111 {
112 HWND cb = GetDlgItem (dlg, IDC_PREFS_WIPEMODE);
113 combox_add_string (cb, (char *)"Simple");
114 combox_add_string (cb, (char *)"DoD");
115 combox_add_string (cb, (char *)"Gutmann");
116 SendMessage (cb, CB_SETCURSEL, (WPARAM)reg_prefs.wipe_mode, 0);
117 }
118
119
120 /* Dialog box procedure for the WinPT preferences. */
121 BOOL CALLBACK
122 prefs_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
123 {
124 int rc;
125 int i, id;
126 char t[2];
127 char path[256], * p;
128 HWND cb;
129
130 switch (msg) {
131 case WM_INITDIALOG:
132 SetWindowText (dlg, _("WinPT Preferences"));
133 SetDlgItemText (dlg, IDC_PREFS_SECMODE, _("Do not use any &temporary files"));
134 SetDlgItemText (dlg, IDC_PREFS_VIEWER, _("Use clipboard &viewer to display the plaintext"));
135 SetDlgItemText (dlg, IDC_PREFS_WWINFO, _("Word wrap cleartext &signatures at column"));
136 SetDlgItemText (dlg, IDC_PREFS_DISABLE_HOTKEYS, _("&Disable hotkeys (Not recommended!)"));
137 SetDlgItemText (dlg, IDC_PREFS_TRUST, _("Skip key validation and assume that keys are always fully trusted"));
138 SetDlgItemText (dlg, IDC_PREFS_AUTOBACKUP, _("&Automatic keyring backup when WinPT closes"));
139 SetDlgItemText (dlg, IDC_PREFS_BAKHOME, _("Backup to &keyring folder"));
140 SetDlgItemText (dlg, IDC_PREFS_BAKUSER, _("Backup to:"));
141 SetDlgItemText (dlg, IDC_PREFS_KEYLISTINF, _("Select &key list mode"));
142 SetDlgItemText (dlg, IDC_PREFS_WIPEINF, _("Select &wipe mode"));
143 SetDlgItemText (dlg, IDC_PREFS_KSINF, _("Keyserver &config"));
144 SetDlgItemText (dlg, IDC_PREFS_CACHEINF, _("Cache &passphrases for 'n' seconds"));
145 SetDlgItemText (dlg, IDC_PREFS_CACHEHINT, _("(CTRL+ALT+F to clear the cache)"));
146 SetDlgItemText (dlg, IDC_PREFS_ALLOPTINF, _("General options"));
147 SetDlgItemText (dlg, IDC_PREFS_CLIPINF, _("Clipboard hotkeys"));
148 SetDlgItemText (dlg, IDC_PREFS_CURRINF, _("Current window hotkeys"));
149 SetDlgItemText (dlg, IDC_PREFS_KSELFILE, _("Browse..."));
150 SetDlgItemText (dlg, IDC_PREFS_BAKSELECT, _("Browse..."));
151 SetDlgItemText (dlg, IDCANCEL, _("&Cancel"));
152
153 SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, reg_prefs.cache_time, TRUE);
154 SetDlgItemInt (dlg, IDC_PREFS_WORDWRAP, reg_prefs.word_wrap, TRUE);
155 if (reg_prefs.backup.path)
156 SetDlgItemText (dlg, IDC_PREFS_BAKPATH, reg_prefs.backup.path);
157 if (reg_prefs.kserv_conf)
158 SetDlgItemText (dlg, IDC_PREFS_KSERVER, reg_prefs.kserv_conf);
159
160 for (i=0; (id=hotkeys[i]); i++)
161 SetDlgItemText (dlg, id, reg_hotkeys[i].key);
162 CheckDlgButton( dlg, IDC_PREFS_DISABLE_HOTKEYS,
163 reg_prefs.no_hotkeys ? BST_CHECKED : BST_UNCHECKED );
164 CheckDlgButton( dlg, IDC_PREFS_SECMODE,
165 reg_prefs.use_tmpfiles ? BST_UNCHECKED : BST_CHECKED );
166 CheckDlgButton( dlg, IDC_PREFS_VIEWER,
167 reg_prefs.use_viewer ? BST_CHECKED: BST_UNCHECKED );
168 CheckDlgButton( dlg, IDC_PREFS_TRUST,
169 reg_prefs.always_trust? BST_CHECKED : BST_UNCHECKED );
170 CheckDlgButton( dlg, IDC_PREFS_AUTOBACKUP,
171 reg_prefs.auto_backup? BST_CHECKED : BST_UNCHECKED );
172 CheckDlgButton( dlg, IDC_PREFS_BAKHOME,
173 reg_prefs.backup.mode==1? BST_CHECKED : BST_UNCHECKED );
174 CheckDlgButton( dlg, IDC_PREFS_BAKUSER,
175 reg_prefs.backup.mode==2? BST_CHECKED : BST_UNCHECKED );
176 if (reg_prefs.no_hotkeys)
177 disable_hotkey_items (dlg, 1);
178 if (!reg_prefs.auto_backup)
179 enable_backup_items (dlg, 0);
180 EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH),
181 reg_prefs.backup.mode==1?FALSE : TRUE);
182 EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT),
183 reg_prefs.backup.mode==1? FALSE : TRUE);
184 init_keylist_modes (dlg);
185 init_wipe_modes (dlg);
186 center_window (dlg, NULL);
187 SetForegroundWindow (dlg);
188 return TRUE;
189
190 case WM_SYSCOMMAND:
191 if (LOWORD (wparam) == SC_CLOSE)
192 EndDialog (dlg, TRUE);
193 return FALSE;
194
195 case WM_COMMAND:
196 switch( HIWORD(wparam) ) {
197 case BN_CLICKED:
198 switch( (int)LOWORD( wparam ) ) {
199 case IDC_PREFS_DISABLE_HOTKEYS:
200 reg_prefs.no_hotkeys ^= 1;
201 disable_hotkey_items (dlg, reg_prefs.no_hotkeys);
202 break;
203
204 case IDC_PREFS_TRUST:
205 reg_prefs.always_trust ^= 1;
206 if (reg_prefs.always_trust) {
207 msg_box (dlg,
208 _("In most cases it is not a good idea to enable this setting.\n"
209 "If you know what you are doing let this flag enabled, otherwise\n"
210 "it is safe to leave this flag untouched."),
211 _("Preferences"), MB_ICONWARNING|MB_OK);
212 }
213 break;
214
215 case IDC_PREFS_AUTOBACKUP:
216 reg_prefs.auto_backup ^= 1;
217 enable_backup_items (dlg, reg_prefs.auto_backup);
218 if (reg_prefs.auto_backup == 1) {
219 if (!IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME) &&
220 !IsDlgButtonChecked (dlg, IDC_PREFS_BAKUSER))
221 CheckDlgButton (dlg, IDC_PREFS_BAKHOME, BST_CHECKED);
222 }
223 if (IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME))
224 EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), FALSE);
225 break;
226
227 case IDC_PREFS_BAKHOME:
228 EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT), FALSE);
229 EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), FALSE);
230 break;
231
232 case IDC_PREFS_BAKUSER:
233 EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT), TRUE);
234 EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), TRUE);
235 break;
236 }
237 break;
238 }
239 switch( LOWORD( wparam ) ) {
240 case IDC_PREFS_BAKSELECT:
241 const char *bpath;
242 bpath = get_folder_dlg (dlg, _("Select GPG backup path"), NULL);
243 if (bpath)
244 SetDlgItemText (dlg, IDC_PREFS_BAKPATH, bpath);
245 break;
246
247 case IDC_PREFS_KSELFILE: {
248 const char * name;
249 name = get_fileopen_dlg (dlg, _("Please select a keyserver.conf file"),
250 NULL, NULL);
251 if (name != NULL)
252 SetDlgItemText (dlg, IDC_PREFS_KSERVER, name);
253 break; }
254
255 case IDOK:
256 rc = GetDlgItemInt( dlg, IDC_PREFS_CACHETIME, NULL, FALSE );
257 if (!rc)
258 reg_prefs.cache_time = 0;
259 else if (rc > 3600) {
260 msg_box( dlg, _("Please enter a value that is between 1-3600.\nIt is not "
261 "a good idea to cache the passphrase more than one hour."),
262 _("Preferences"), MB_ERR);
263 SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, 0, FALSE);
264 return TRUE;
265 }
266 if (reg_prefs.cache_time != rc)
267 agent_flush_cache ();
268 reg_prefs.cache_time = rc;
269 rc = GetDlgItemInt (dlg, IDC_PREFS_WORDWRAP, NULL, FALSE);
270 if (!rc)
271 reg_prefs.word_wrap = 0;
272 else if (rc > 80) {
273 msg_box (dlg, _("Please enter a value between 1-80."), _("Preferences"), MB_ERR);
274 return TRUE;
275 }
276 reg_prefs.word_wrap = rc;
277 reg_prefs.use_tmpfiles = IsDlgButtonChecked( dlg, IDC_PREFS_SECMODE )? 0 : 1;
278 reg_prefs.use_viewer = IsDlgButtonChecked( dlg, IDC_PREFS_VIEWER )? 1 : 0;
279 reg_prefs.backup.mode = IsDlgButtonChecked( dlg, IDC_PREFS_BAKHOME ) ? 1 :
280 IsDlgButtonChecked( dlg, IDC_PREFS_BAKUSER )? 2 : 0;
281 if( reg_prefs.backup.mode == 2 ) {
282 if( !GetDlgItemText( dlg, IDC_PREFS_BAKPATH, path, sizeof (path)-1 )
283 || dir_exist_check( path ) ) {
284 msg_box( dlg, _("The specified backup folder is invalid."),
285 _("Preferences"), MB_ERR );
286 return TRUE;
287 }
288 free_if_alloc (reg_prefs.backup.path);
289 p = reg_prefs.backup.path = m_strdup (path);
290 if (!p)
291 BUG (0);
292 }
293 free_if_alloc (reg_prefs.kserv_conf);
294 if (!GetDlgItemText (dlg, IDC_PREFS_KSERVER, path, sizeof (path)-1)
295 || file_exist_check (path)) {
296 rc = msg_box (dlg, _("The specified keyserver config file is invalid.\n\n"
297 "Create new default config file?"),
298 _("Preferences"), MB_ERR|MB_YESNO);
299 if (rc == IDNO)
300 return TRUE;
301 else
302 {
303 char cwd[256], * fn;
304 FILE * fp = fopen ("keyserver.conf", "wb");
305 if (fp) {
306 fprintf (fp, "%s\r\n", DEF_HKP_KEYSERVER);
307 fclose (fp);
308 }
309 GetCurrentDirectory (DIM (cwd)-1, cwd);
310 fn = make_filename (cwd, "keyserver", "conf");
311 memset (path, 0, sizeof( path));
312 strncpy (path, fn, DIM (path)-1);
313 free_if_alloc (fn);
314 }
315 }
316 p = reg_prefs.kserv_conf = m_strdup (path);
317 if (!p)
318 BUG (0);
319
320 cb = GetDlgItem( dlg, IDC_PREFS_LISTMODE );
321 reg_prefs.keylist_mode = SendMessage( cb, CB_GETCURSEL, 0, 0 );
322
323 cb = GetDlgItem( dlg, IDC_PREFS_WIPEMODE );
324 reg_prefs.wipe_mode = SendMessage( cb, CB_GETCURSEL, 0, 0 );
325
326 if (IsDlgButtonChecked (dlg, IDC_PREFS_DISABLE_HOTKEYS)) {
327 hotkeys_unregister (glob_hwnd);
328 reg_prefs.no_hotkeys = 1;
329 }
330 else {
331 reg_prefs.no_hotkeys = 0;
332 for( i = 0; (id = hotkeys[i]); i++ ) {
333 rc = GetDlgItemText( dlg, id, t, 2 );
334 if( rc && check_hotkey( &t[0] ) )
335 hotkey_enable( &reg_hotkeys[i], t );
336 else
337 hotkey_disable( &reg_hotkeys[i] );
338 }
339 set_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "DisableHotkeys", "0");
340 reg_prefs.no_hotkeys = 0;
341 }
342
343 if ((rc = set_reg_winpt_prefs (&reg_prefs)))
344 msg_box (dlg, winpt_strerror (rc), _("Preferences"), MB_ERR);
345
346 if (reg_prefs.no_hotkeys == 0) {
347 hotkeys_unregister (glob_hwnd);
348 hotkeys_modify ();
349 if ((rc = hotkeys_register (glob_hwnd)))
350 msg_box (NULL, winpt_strerror (rc), _("Hotkeys"), MB_ERR);
351 }
352 EndDialog (dlg, TRUE);
353 return TRUE;
354
355 case IDCANCEL:
356 /* Reset backup mode if no mode was chosen. */
357 if (reg_prefs.auto_backup == 1 &&
358 !IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME) &&
359 !IsDlgButtonChecked (dlg, IDC_PREFS_BAKUSER))
360 reg_prefs.auto_backup = 0;
361 EndDialog (dlg, FALSE);
362 return FALSE;
363 }
364 break;
365 }
366
367 return FALSE;
368 }

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26