MCPcopy Create free account
hub / github.com/AutoHotkey/AutoHotkey / KeyOpt

Method KeyOpt

source/input_object.cpp:207–261  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

205
206
207ResultType InputObject::KeyOpt(ResultToken &aResultToken, int aID, int aFlags, ExprTokenType *aParam[], int aParamCount)
208{
209 _f_param_string(keys, 0);
210 _f_param_string(options, 1);
211
212 bool adding = true;
213 UCHAR flag, add_flags = 0, remove_flags = 0;
214 for (LPTSTR cp = options; *cp; ++cp)
215 {
216 switch (ctoupper(*cp))
217 {
218 case '+': adding = true; continue;
219 case '-': adding = false; continue;
220 case ' ': case '\t': continue;
221 case 'E': flag = END_KEY_ENABLED; break;
222 case 'I': flag = INPUT_KEY_IGNORE_TEXT; break;
223 case 'N': flag = INPUT_KEY_NOTIFY; break;
224 case 'S':
225 flag = INPUT_KEY_SUPPRESS;
226 if (adding)
227 remove_flags |= INPUT_KEY_VISIBLE;
228 break;
229 case 'V':
230 flag = INPUT_KEY_VISIBLE;
231 if (adding)
232 remove_flags |= INPUT_KEY_SUPPRESS;
233 break;
234 case 'Z': // Zero (reset)
235 add_flags = 0;
236 remove_flags = INPUT_KEY_OPTION_MASK;
237 continue;
238 default: _o_throw_value(ERR_INVALID_OPTION, cp);
239 }
240 if (adding)
241 add_flags |= flag; // Add takes precedence over remove, so remove_flags isn't changed.
242 else
243 {
244 remove_flags |= flag;
245 add_flags &= ~flag; // Override any previous add.
246 }
247 }
248
249 if (!_tcsicmp(keys, _T("{All}")))
250 {
251 // Could optimize by using memset() when remove_flags == 0xFF, but that doesn't seem
252 // worthwhile since this mode is already faster than SetKeyFlags() with a single key.
253 for (int i = 0; i < _countof(input.KeyVK); ++i)
254 input.KeyVK[i] = (input.KeyVK[i] & ~remove_flags) | add_flags;
255 for (int i = 0; i < _countof(input.KeySC); ++i)
256 input.KeySC[i] = (input.KeySC[i] & ~remove_flags) | add_flags;
257 return OK;
258 }
259
260 return input.SetKeyFlags(keys, false, remove_flags, add_flags);
261}

Callers

nothing calls this directly

Calls 2

ctoupperFunction · 0.85
SetKeyFlagsMethod · 0.80

Tested by

no test coverage detected