Commit 9f5e1712cb19bcd78e5591f08a416e1a715959dc
1 parent
1bf34335
Exists in
master
and in
3 other branches
Initializing toggle defaults from windows registry (when available).
Showing
1 changed file
with
53 additions
and
2 deletions
Show diff stats
src/core/toggles/init.c
... | ... | @@ -116,7 +116,7 @@ void initialize_toggles(H3270 *session) |
116 | 116 | LIB3270_TOGGLE_ID id; |
117 | 117 | void (*upcall)(H3270 *session, const struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt); |
118 | 118 | } |
119 | - upcalls[] = | |
119 | + upcalls[LIB3270_TOGGLE_COUNT] = | |
120 | 120 | { |
121 | 121 | { |
122 | 122 | LIB3270_TOGGLE_RECTANGLE_SELECT, |
... | ... | @@ -150,15 +150,66 @@ void initialize_toggles(H3270 *session) |
150 | 150 | |
151 | 151 | unsigned int f; |
152 | 152 | |
153 | + // Set defaults | |
153 | 154 | for(f=0;f<LIB3270_TOGGLE_COUNT;f++) |
155 | + { | |
154 | 156 | session->toggle[f].upcall = toggle_nop; |
157 | + session->toggle[f].value = toggle_descriptor[f].def; | |
158 | + } | |
155 | 159 | |
160 | + // Load upcalls | |
156 | 161 | for(f=0;f<(sizeof(upcalls)/sizeof(upcalls[0]));f++) |
157 | 162 | session->toggle[upcalls[f].id].upcall = upcalls[f].upcall; |
158 | 163 | |
164 | +#ifdef _WIN32 | |
165 | + { | |
166 | + HKEY hKey; | |
167 | + DWORD disp = 0; | |
168 | + LSTATUS rc = RegCreateKeyEx( | |
169 | + HKEY_LOCAL_MACHINE, | |
170 | + "Software\\" LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME) "\\toggles", | |
171 | + 0, | |
172 | + NULL, | |
173 | + REG_OPTION_NON_VOLATILE, | |
174 | + KEY_QUERY_VALUE|KEY_READ, | |
175 | + NULL, | |
176 | + &hKey, | |
177 | + &disp); | |
178 | + | |
179 | + if(rc == ERROR_SUCCESS) | |
180 | + { | |
181 | + debug("%s: Loading toggles from registry",__FUNCTION__); | |
182 | + for(f=0;f<LIB3270_TOGGLE_COUNT;f++) | |
183 | + { | |
184 | + DWORD val = 0; | |
185 | + DWORD cbData = sizeof(DWORD); | |
186 | + | |
187 | + DWORD dwRet = RegQueryValueEx( | |
188 | + hKey, | |
189 | + lib3270_toggle_get_from_id(f)->name, | |
190 | + NULL, | |
191 | + NULL, | |
192 | + (LPBYTE) &val, | |
193 | + &cbData | |
194 | + ); | |
195 | + | |
196 | + debug("get(%s)=%d",lib3270_toggle_get_from_id(f)->name,(int) dwRet); | |
197 | + if(dwRet == ERROR_SUCCESS) | |
198 | + { | |
199 | + debug("toggle.%s=%s",lib3270_toggle_get_from_id(f)->name,val ? "True" : "False"); | |
200 | + session->toggle[f].value = (val ? True : False); | |
201 | + } | |
202 | + | |
203 | + } | |
204 | + RegCloseKey(hKey); | |
205 | + } | |
206 | + | |
207 | + } | |
208 | +#endif // _WIN32 | |
209 | + | |
210 | + // Initialize upcalls. | |
159 | 211 | for(f=0;f<LIB3270_TOGGLE_COUNT;f++) |
160 | 212 | { |
161 | - session->toggle[f].value = toggle_descriptor[f].def; | |
162 | 213 | if(session->toggle[f].value) |
163 | 214 | session->toggle[f].upcall(session,&session->toggle[f],LIB3270_TOGGLE_TYPE_INITIAL); |
164 | 215 | } | ... | ... |