Bug 1799258 - Fix constexpr issue on base toolchain builds. r=gfx-reviewers,lsalzman
[gecko.git] / widget / windows / nsWindowDbg.cpp
blob8d3cf7f1c9c44cd3278663e9e905845f202e798a
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 /*
7 * nsWindowDbg - Debug related utilities for nsWindow.
8 */
10 #include "nsWindowDbg.h"
11 #include "nsWindowLoggedMessages.h"
12 #include "mozilla/Logging.h"
13 #include "mozilla/Maybe.h"
14 #include <winuser.h>
15 #include <dbt.h>
16 #include <imm.h>
17 #include <unordered_set>
19 using namespace mozilla;
20 using namespace mozilla::widget;
21 extern mozilla::LazyLogModule gWindowsLog;
22 static mozilla::LazyLogModule gWindowsEventLog("WindowsEvent");
24 #if defined(POPUP_ROLLUP_DEBUG_OUTPUT)
25 MSGFEventMsgInfo gMSGFEvents[] = {
26 "MSGF_DIALOGBOX", 0, "MSGF_MESSAGEBOX", 1, "MSGF_MENU", 2,
27 "MSGF_SCROLLBAR", 5, "MSGF_NEXTWINDOW", 6, "MSGF_MAX", 8,
28 "MSGF_USER", 4096, nullptr, 0};
29 #endif
31 static long gEventCounter = 0;
32 static UINT gLastEventMsg = 0;
34 namespace mozilla::widget {
36 // Using an unordered_set so we can initialize this with nice syntax instead of
37 // having to add them one at a time to a mozilla::HashSet.
38 std::unordered_set<UINT> gEventsToLogOriginalParams = {
39 WM_WINDOWPOSCHANGING, // (dummy comments for clang-format)
40 WM_SIZING, //
41 WM_STYLECHANGING,
42 WM_GETTEXT,
43 WM_GETMINMAXINFO,
44 WM_MEASUREITEM,
45 WM_NCCALCSIZE,
48 // If you add an event here, you must add cases for these to
49 // MakeMessageSpecificData() and AppendFriendlyMessageSpecificData()
50 // in nsWindowLoggedMessages.cpp.
51 std::unordered_set<UINT> gEventsToRecordInAboutPage = {
52 WM_WINDOWPOSCHANGING, // (dummy comments for clang-format)
53 WM_WINDOWPOSCHANGED, //
54 WM_SIZING,
55 WM_SIZE,
56 WM_DPICHANGED,
57 WM_SETTINGCHANGE,
58 WM_NCCALCSIZE,
59 WM_MOVE,
60 WM_MOVING,
61 WM_GETMINMAXINFO,
64 PrintEvent::PrintEvent(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
65 : mHwnd(hwnd),
66 mMsg(msg),
67 mWParam(wParam),
68 mLParam(lParam),
69 mResult(mozilla::Nothing()),
70 mShouldLogPostCall(false) {
71 if (PrintEventInternal()) {
72 // this event was logged, so reserve this counter number for the post-call
73 mEventCounter = mozilla::Some(gEventCounter);
74 ++gEventCounter;
78 PrintEvent::~PrintEvent() {
79 // If mResult is Nothing, perhaps an exception was thrown or something
80 // before SetResult() was supposed to be called.
81 if (mResult.isSome()) {
82 if (PrintEventInternal() && mEventCounter.isNothing()) {
83 // We didn't reserve a counter in the pre-call, so reserve it here.
84 ++gEventCounter;
87 if (mMsg == WM_DESTROY) {
88 // Remove any logged messages for this window.
89 WindowClosed(mHwnd);
93 void EventMsgInfo::LogParameters(nsCString& str, WPARAM wParam, LPARAM lParam,
94 bool isPreCall) {
95 if (mParamInfoFn) {
96 str = mParamInfoFn(wParam, lParam, isPreCall);
97 } else {
98 if (mWParamInfoFn) {
99 mWParamInfoFn(str, wParam, mWParamName, isPreCall);
101 if (mLParamInfoFn) {
102 if (mWParamInfoFn) {
103 str.AppendASCII(" ");
105 mLParamInfoFn(str, lParam, mLParamName, isPreCall);
110 nsAutoCString DefaultParamInfo(uint64_t wParam, uint64_t lParam,
111 bool /* isPreCall */) {
112 nsAutoCString result;
113 result.AppendPrintf("wParam=0x%08llX lParam=0x%08llX", wParam, lParam);
114 return result;
117 void AppendEnumValueInfo(
118 nsCString& str, uint64_t value,
119 const std::unordered_map<uint64_t, const char*>& valuesAndNames,
120 const char* name) {
121 if (name != nullptr) {
122 str.AppendPrintf("%s=", name);
124 auto entry = valuesAndNames.find(value);
125 if (entry == valuesAndNames.end()) {
126 str.AppendPrintf("Unknown (0x%08llX)", value);
127 } else {
128 str.AppendASCII(entry->second);
132 bool AppendFlagsInfo(nsCString& str, uint64_t flags,
133 const nsTArray<EnumValueAndName>& flagsAndNames,
134 const char* name) {
135 if (name != nullptr) {
136 str.AppendPrintf("%s=", name);
138 bool firstAppend = true;
139 for (const EnumValueAndName& flagAndName : flagsAndNames) {
140 if (MOZ_UNLIKELY(flagAndName.mFlag == 0)) {
141 // Special case - only want to write this if nothing else was set.
142 // For this to make sense, 0 values should come at the end of
143 // flagsAndNames.
144 if (flags == 0 && firstAppend) {
145 firstAppend = false;
146 str.AppendASCII(flagAndName.mName);
148 } else if ((flags & flagAndName.mFlag) == flagAndName.mFlag) {
149 if (MOZ_LIKELY(!firstAppend)) {
150 str.Append('|');
152 firstAppend = false;
153 str.AppendASCII(flagAndName.mName);
154 flags = flags & ~flagAndName.mFlag;
157 if (flags != 0) {
158 if (MOZ_LIKELY(!firstAppend)) {
159 str.Append('|');
161 firstAppend = false;
162 str.AppendPrintf("Unknown (0x%08llX)", flags);
164 return !firstAppend;
167 // if mResult is not set, this is used to log the parameters passed in the
168 // message, otherwise we are logging the parameters after we have handled the
169 // message. This is useful for events where we might change the parameters while
170 // handling the message (for example WM_GETTEXT and WM_NCCALCSIZE)
171 // Returns whether this message was logged, so we need to reserve a
172 // counter number for it.
173 bool PrintEvent::PrintEventInternal() {
174 mozilla::LogLevel const targetLogLevel = [&] {
175 // These messages often take up more than 90% of logs if not filtered out.
176 if (mMsg == WM_SETCURSOR || mMsg == WM_MOUSEMOVE || mMsg == WM_NCHITTEST) {
177 return LogLevel::Verbose;
179 if (gLastEventMsg == mMsg) {
180 return LogLevel::Debug;
182 return LogLevel::Info;
183 }();
185 bool isPreCall = mResult.isNothing();
186 if (isPreCall || mShouldLogPostCall) {
187 bool recordInAboutPage = gEventsToRecordInAboutPage.find(mMsg) !=
188 gEventsToRecordInAboutPage.end();
189 bool writeToWindowsLog;
190 if (isPreCall) {
191 writeToWindowsLog = MOZ_LOG_TEST(gWindowsEventLog, targetLogLevel);
192 bool shouldLogAtAll = recordInAboutPage || writeToWindowsLog;
193 // Since calling mParamInfoFn() allocates a string, only go down this code
194 // path if we're going to log this message to reduce allocations.
195 if (!shouldLogAtAll) {
196 return false;
198 mShouldLogPostCall = true;
199 bool shouldLogPreCall = gEventsToLogOriginalParams.find(mMsg) !=
200 gEventsToLogOriginalParams.end();
201 if (!shouldLogPreCall) {
202 // Pre-call and we don't want to log both, so skip this one.
203 return false;
205 } else {
206 writeToWindowsLog = true;
208 if (recordInAboutPage) {
209 LogWindowMessage(mHwnd, mMsg, isPreCall,
210 mEventCounter.valueOr(gEventCounter), mWParam, mLParam,
211 mResult, mRetValue);
213 gLastEventMsg = mMsg;
214 if (writeToWindowsLog) {
215 const auto& eventMsgInfo = gAllEvents.find(mMsg);
216 const char* msgText = eventMsgInfo != gAllEvents.end()
217 ? eventMsgInfo->second.mStr
218 : nullptr;
219 nsAutoCString paramInfo;
220 if (eventMsgInfo != gAllEvents.end()) {
221 eventMsgInfo->second.LogParameters(paramInfo, mWParam, mLParam,
222 isPreCall);
223 } else {
224 paramInfo = DefaultParamInfo(mWParam, mLParam, isPreCall);
226 const char* resultMsg = mResult.isSome()
227 ? (mResult.value() ? "true" : "false")
228 : "initial call";
229 nsAutoCString logMessage;
230 logMessage.AppendPrintf(
231 "%6ld %08" PRIX64 " - 0x%04X %s%s%s: 0x%08" PRIX64 " (%s)\n",
232 mEventCounter.valueOr(gEventCounter),
233 reinterpret_cast<uint64_t>(mHwnd), mMsg,
234 msgText ? msgText : "Unknown", paramInfo.IsEmpty() ? "" : " ",
235 paramInfo.get(),
236 mResult.isSome() ? static_cast<uint64_t>(mRetValue) : 0, resultMsg);
237 const char* logMessageData = logMessage.Data();
238 MOZ_LOG(gWindowsEventLog, targetLogLevel, ("%s", logMessageData));
240 return true;
242 return false;
245 void TrueFalseParamInfo(nsCString& result, uint64_t value, const char* name,
246 bool /* isPreCall */) {
247 result.AppendPrintf("%s=%s", name, value == TRUE ? "TRUE" : "FALSE");
250 void TrueFalseLowOrderWordParamInfo(nsCString& result, uint64_t value,
251 const char* name, bool /* isPreCall */) {
252 result.AppendPrintf("%s=%s", name, LOWORD(value) == TRUE ? "TRUE" : "FALSE");
255 void HexParamInfo(nsCString& result, uint64_t value, const char* name,
256 bool /* isPreCall */) {
257 result.AppendPrintf("%s=0x%08llX", name, value);
260 void IntParamInfo(nsCString& result, uint64_t value, const char* name,
261 bool /* isPreCall */) {
262 result.AppendPrintf("%s=%lld", name, value);
265 void RectParamInfo(nsCString& str, uint64_t value, const char* name,
266 bool /* isPreCall */) {
267 LPRECT rect = reinterpret_cast<LPRECT>(value);
268 if (rect == nullptr) {
269 str.AppendPrintf("NULL rect?");
270 return;
272 if (name != nullptr) {
273 str.AppendPrintf("%s ", name);
275 str.AppendPrintf("left=%ld top=%ld right=%ld bottom=%ld", rect->left,
276 rect->top, rect->right, rect->bottom);
279 #define VALANDNAME_ENTRY(_msg) \
280 { _msg, #_msg }
282 void CreateStructParamInfo(nsCString& str, uint64_t value, const char* name,
283 bool /* isPreCall */) {
284 CREATESTRUCT* createStruct = reinterpret_cast<CREATESTRUCT*>(value);
285 if (createStruct == nullptr) {
286 str.AppendASCII("NULL createStruct?");
287 return;
289 str.AppendPrintf(
290 "%s: hInstance=%p hMenu=%p hwndParent=%p lpszName=%S lpszClass=%S x=%d "
291 "y=%d cx=%d cy=%d",
292 name, createStruct->hInstance, createStruct->hMenu,
293 createStruct->hwndParent, createStruct->lpszName, createStruct->lpszClass,
294 createStruct->x, createStruct->y, createStruct->cx, createStruct->cy);
295 str.AppendASCII(" ");
296 const static nsTArray<EnumValueAndName> windowStyles = {
297 // these combinations of other flags need to come first
298 VALANDNAME_ENTRY(WS_OVERLAPPEDWINDOW), VALANDNAME_ENTRY(WS_POPUPWINDOW),
299 VALANDNAME_ENTRY(WS_CAPTION),
300 // regular flags
301 VALANDNAME_ENTRY(WS_POPUP), VALANDNAME_ENTRY(WS_CHILD),
302 VALANDNAME_ENTRY(WS_MINIMIZE), VALANDNAME_ENTRY(WS_VISIBLE),
303 VALANDNAME_ENTRY(WS_DISABLED), VALANDNAME_ENTRY(WS_CLIPSIBLINGS),
304 VALANDNAME_ENTRY(WS_CLIPCHILDREN), VALANDNAME_ENTRY(WS_MAXIMIZE),
305 VALANDNAME_ENTRY(WS_BORDER), VALANDNAME_ENTRY(WS_DLGFRAME),
306 VALANDNAME_ENTRY(WS_VSCROLL), VALANDNAME_ENTRY(WS_HSCROLL),
307 VALANDNAME_ENTRY(WS_SYSMENU), VALANDNAME_ENTRY(WS_THICKFRAME),
308 VALANDNAME_ENTRY(WS_GROUP), VALANDNAME_ENTRY(WS_TABSTOP),
309 // zero value needs to come last
310 VALANDNAME_ENTRY(WS_OVERLAPPED)};
311 AppendFlagsInfo(str, createStruct->style, windowStyles, "style");
312 str.AppendASCII(" ");
313 const nsTArray<EnumValueAndName> extendedWindowStyles = {
314 // these combinations of other flags need to come first
315 #if WINVER >= 0x0400
316 VALANDNAME_ENTRY(WS_EX_OVERLAPPEDWINDOW),
317 VALANDNAME_ENTRY(WS_EX_PALETTEWINDOW),
318 #endif
319 // regular flags
320 VALANDNAME_ENTRY(WS_EX_DLGMODALFRAME),
321 VALANDNAME_ENTRY(WS_EX_NOPARENTNOTIFY),
322 VALANDNAME_ENTRY(WS_EX_TOPMOST),
323 VALANDNAME_ENTRY(WS_EX_ACCEPTFILES),
324 VALANDNAME_ENTRY(WS_EX_TRANSPARENT),
325 #if WINVER >= 0x0400
326 VALANDNAME_ENTRY(WS_EX_MDICHILD),
327 VALANDNAME_ENTRY(WS_EX_TOOLWINDOW),
328 VALANDNAME_ENTRY(WS_EX_WINDOWEDGE),
329 VALANDNAME_ENTRY(WS_EX_CLIENTEDGE),
330 VALANDNAME_ENTRY(WS_EX_CONTEXTHELP),
331 VALANDNAME_ENTRY(WS_EX_RIGHT),
332 VALANDNAME_ENTRY(WS_EX_LEFT),
333 VALANDNAME_ENTRY(WS_EX_RTLREADING),
334 VALANDNAME_ENTRY(WS_EX_LTRREADING),
335 VALANDNAME_ENTRY(WS_EX_LEFTSCROLLBAR),
336 VALANDNAME_ENTRY(WS_EX_RIGHTSCROLLBAR),
337 VALANDNAME_ENTRY(WS_EX_CONTROLPARENT),
338 VALANDNAME_ENTRY(WS_EX_STATICEDGE),
339 VALANDNAME_ENTRY(WS_EX_APPWINDOW),
340 #endif
341 #if _WIN32_WINNT >= 0x0500
342 VALANDNAME_ENTRY(WS_EX_LAYERED),
343 VALANDNAME_ENTRY(WS_EX_NOINHERITLAYOUT),
344 VALANDNAME_ENTRY(WS_EX_LAYOUTRTL),
345 VALANDNAME_ENTRY(WS_EX_NOACTIVATE),
346 #endif
347 #if _WIN32_WINNT >= 0x0501
348 VALANDNAME_ENTRY(WS_EX_COMPOSITED),
349 #endif
350 #if WINVER >= 0x0602
351 VALANDNAME_ENTRY(WS_EX_NOREDIRECTIONBITMAP),
352 #endif
354 AppendFlagsInfo(str, createStruct->dwExStyle, extendedWindowStyles,
355 "dwExStyle");
358 void XLowWordYHighWordParamInfo(nsCString& str, uint64_t value,
359 const char* name, bool /* isPreCall */) {
360 str.AppendPrintf("%s: x=%d y=%d", name, static_cast<int>(LOWORD(value)),
361 static_cast<int>(HIWORD(value)));
364 void PointParamInfo(nsCString& str, uint64_t value, const char* name,
365 bool /* isPreCall */) {
366 str.AppendPrintf("%s: x=%d y=%d", name, static_cast<int>(GET_X_LPARAM(value)),
367 static_cast<int>(GET_Y_LPARAM(value)));
370 void PointExplicitParamInfo(nsCString& str, POINT point, const char* name) {
371 str.AppendPrintf("%s: x=%ld y=%ld", name, point.x, point.y);
374 void PointsParamInfo(nsCString& str, uint64_t value, const char* name,
375 bool /* isPreCall */) {
376 PPOINTS points = reinterpret_cast<PPOINTS>(&value);
377 str.AppendPrintf("%s: x=%d y=%d", name, points->x, points->y);
380 void VirtualKeyParamInfo(nsCString& result, uint64_t param, const char* name,
381 bool /* isPreCall */) {
382 const static std::unordered_map<uint64_t, const char*> virtualKeys{
383 VALANDNAME_ENTRY(VK_LBUTTON),
384 VALANDNAME_ENTRY(VK_RBUTTON),
385 VALANDNAME_ENTRY(VK_CANCEL),
386 VALANDNAME_ENTRY(VK_MBUTTON),
387 VALANDNAME_ENTRY(VK_XBUTTON1),
388 VALANDNAME_ENTRY(VK_XBUTTON2),
389 VALANDNAME_ENTRY(VK_BACK),
390 VALANDNAME_ENTRY(VK_TAB),
391 VALANDNAME_ENTRY(VK_CLEAR),
392 VALANDNAME_ENTRY(VK_RETURN),
393 VALANDNAME_ENTRY(VK_SHIFT),
394 VALANDNAME_ENTRY(VK_CONTROL),
395 VALANDNAME_ENTRY(VK_MENU),
396 VALANDNAME_ENTRY(VK_PAUSE),
397 VALANDNAME_ENTRY(VK_CAPITAL),
398 VALANDNAME_ENTRY(VK_KANA),
399 VALANDNAME_ENTRY(VK_HANGUL),
400 #ifdef VK_IME_ON
401 VALANDNAME_ENTRY(VK_IME_ON),
402 #endif
403 VALANDNAME_ENTRY(VK_JUNJA),
404 VALANDNAME_ENTRY(VK_FINAL),
405 VALANDNAME_ENTRY(VK_HANJA),
406 VALANDNAME_ENTRY(VK_KANJI),
407 #ifdef VK_IME_OFF
408 VALANDNAME_ENTRY(VK_IME_OFF),
409 #endif
410 VALANDNAME_ENTRY(VK_ESCAPE),
411 VALANDNAME_ENTRY(VK_CONVERT),
412 VALANDNAME_ENTRY(VK_NONCONVERT),
413 VALANDNAME_ENTRY(VK_ACCEPT),
414 VALANDNAME_ENTRY(VK_MODECHANGE),
415 VALANDNAME_ENTRY(VK_SPACE),
416 VALANDNAME_ENTRY(VK_PRIOR),
417 VALANDNAME_ENTRY(VK_NEXT),
418 VALANDNAME_ENTRY(VK_END),
419 VALANDNAME_ENTRY(VK_HOME),
420 VALANDNAME_ENTRY(VK_LEFT),
421 VALANDNAME_ENTRY(VK_UP),
422 VALANDNAME_ENTRY(VK_RIGHT),
423 VALANDNAME_ENTRY(VK_DOWN),
424 VALANDNAME_ENTRY(VK_SELECT),
425 VALANDNAME_ENTRY(VK_PRINT),
426 VALANDNAME_ENTRY(VK_EXECUTE),
427 VALANDNAME_ENTRY(VK_SNAPSHOT),
428 VALANDNAME_ENTRY(VK_INSERT),
429 VALANDNAME_ENTRY(VK_DELETE),
430 VALANDNAME_ENTRY(VK_HELP),
431 VALANDNAME_ENTRY(VK_LWIN),
432 VALANDNAME_ENTRY(VK_RWIN),
433 VALANDNAME_ENTRY(VK_APPS),
434 VALANDNAME_ENTRY(VK_SLEEP),
435 VALANDNAME_ENTRY(VK_NUMPAD0),
436 VALANDNAME_ENTRY(VK_NUMPAD1),
437 VALANDNAME_ENTRY(VK_NUMPAD2),
438 VALANDNAME_ENTRY(VK_NUMPAD3),
439 VALANDNAME_ENTRY(VK_NUMPAD4),
440 VALANDNAME_ENTRY(VK_NUMPAD5),
441 VALANDNAME_ENTRY(VK_NUMPAD6),
442 VALANDNAME_ENTRY(VK_NUMPAD7),
443 VALANDNAME_ENTRY(VK_NUMPAD8),
444 VALANDNAME_ENTRY(VK_NUMPAD9),
445 VALANDNAME_ENTRY(VK_MULTIPLY),
446 VALANDNAME_ENTRY(VK_ADD),
447 VALANDNAME_ENTRY(VK_SEPARATOR),
448 VALANDNAME_ENTRY(VK_SUBTRACT),
449 VALANDNAME_ENTRY(VK_DECIMAL),
450 VALANDNAME_ENTRY(VK_DIVIDE),
451 VALANDNAME_ENTRY(VK_F1),
452 VALANDNAME_ENTRY(VK_F2),
453 VALANDNAME_ENTRY(VK_F3),
454 VALANDNAME_ENTRY(VK_F4),
455 VALANDNAME_ENTRY(VK_F5),
456 VALANDNAME_ENTRY(VK_F6),
457 VALANDNAME_ENTRY(VK_F7),
458 VALANDNAME_ENTRY(VK_F8),
459 VALANDNAME_ENTRY(VK_F9),
460 VALANDNAME_ENTRY(VK_F10),
461 VALANDNAME_ENTRY(VK_F11),
462 VALANDNAME_ENTRY(VK_F12),
463 VALANDNAME_ENTRY(VK_F13),
464 VALANDNAME_ENTRY(VK_F14),
465 VALANDNAME_ENTRY(VK_F15),
466 VALANDNAME_ENTRY(VK_F16),
467 VALANDNAME_ENTRY(VK_F17),
468 VALANDNAME_ENTRY(VK_F18),
469 VALANDNAME_ENTRY(VK_F19),
470 VALANDNAME_ENTRY(VK_F20),
471 VALANDNAME_ENTRY(VK_F21),
472 VALANDNAME_ENTRY(VK_F22),
473 VALANDNAME_ENTRY(VK_F23),
474 VALANDNAME_ENTRY(VK_F24),
475 VALANDNAME_ENTRY(VK_NUMLOCK),
476 VALANDNAME_ENTRY(VK_SCROLL),
477 VALANDNAME_ENTRY(VK_LSHIFT),
478 VALANDNAME_ENTRY(VK_RSHIFT),
479 VALANDNAME_ENTRY(VK_LCONTROL),
480 VALANDNAME_ENTRY(VK_RCONTROL),
481 VALANDNAME_ENTRY(VK_LMENU),
482 VALANDNAME_ENTRY(VK_RMENU),
483 VALANDNAME_ENTRY(VK_BROWSER_BACK),
484 VALANDNAME_ENTRY(VK_BROWSER_FORWARD),
485 VALANDNAME_ENTRY(VK_BROWSER_REFRESH),
486 VALANDNAME_ENTRY(VK_BROWSER_STOP),
487 VALANDNAME_ENTRY(VK_BROWSER_SEARCH),
488 VALANDNAME_ENTRY(VK_BROWSER_FAVORITES),
489 VALANDNAME_ENTRY(VK_BROWSER_HOME),
490 VALANDNAME_ENTRY(VK_VOLUME_MUTE),
491 VALANDNAME_ENTRY(VK_VOLUME_DOWN),
492 VALANDNAME_ENTRY(VK_VOLUME_UP),
493 VALANDNAME_ENTRY(VK_MEDIA_NEXT_TRACK),
494 VALANDNAME_ENTRY(VK_MEDIA_PREV_TRACK),
495 VALANDNAME_ENTRY(VK_MEDIA_STOP),
496 VALANDNAME_ENTRY(VK_MEDIA_PLAY_PAUSE),
497 VALANDNAME_ENTRY(VK_LAUNCH_MAIL),
498 VALANDNAME_ENTRY(VK_LAUNCH_MEDIA_SELECT),
499 VALANDNAME_ENTRY(VK_LAUNCH_APP1),
500 VALANDNAME_ENTRY(VK_LAUNCH_APP2),
501 VALANDNAME_ENTRY(VK_OEM_1),
502 VALANDNAME_ENTRY(VK_OEM_PLUS),
503 VALANDNAME_ENTRY(VK_OEM_COMMA),
504 VALANDNAME_ENTRY(VK_OEM_MINUS),
505 VALANDNAME_ENTRY(VK_OEM_PERIOD),
506 VALANDNAME_ENTRY(VK_OEM_2),
507 VALANDNAME_ENTRY(VK_OEM_3),
508 VALANDNAME_ENTRY(VK_OEM_4),
509 VALANDNAME_ENTRY(VK_OEM_5),
510 VALANDNAME_ENTRY(VK_OEM_6),
511 VALANDNAME_ENTRY(VK_OEM_7),
512 VALANDNAME_ENTRY(VK_OEM_8),
513 VALANDNAME_ENTRY(VK_OEM_102),
514 VALANDNAME_ENTRY(VK_PROCESSKEY),
515 VALANDNAME_ENTRY(VK_PACKET),
516 VALANDNAME_ENTRY(VK_ATTN),
517 VALANDNAME_ENTRY(VK_CRSEL),
518 VALANDNAME_ENTRY(VK_EXSEL),
519 VALANDNAME_ENTRY(VK_EREOF),
520 VALANDNAME_ENTRY(VK_PLAY),
521 VALANDNAME_ENTRY(VK_ZOOM),
522 VALANDNAME_ENTRY(VK_NONAME),
523 VALANDNAME_ENTRY(VK_PA1),
524 VALANDNAME_ENTRY(VK_OEM_CLEAR),
525 {0x30, "0"},
526 {0x31, "1"},
527 {0x32, "2"},
528 {0x33, "3"},
529 {0x34, "4"},
530 {0x35, "5"},
531 {0x36, "6"},
532 {0x37, "7"},
533 {0x38, "8"},
534 {0x39, "9"},
535 {0x41, "A"},
536 {0x42, "B"},
537 {0x43, "C"},
538 {0x44, "D"},
539 {0x45, "E"},
540 {0x46, "F"},
541 {0x47, "G"},
542 {0x48, "H"},
543 {0x49, "I"},
544 {0x4A, "J"},
545 {0x4B, "K"},
546 {0x4C, "L"},
547 {0x4D, "M"},
548 {0x4E, "N"},
549 {0x4F, "O"},
550 {0x50, "P"},
551 {0x51, "Q"},
552 {0x52, "S"},
553 {0x53, "T"},
554 {0x54, "U"},
555 {0x55, "V"},
556 {0x56, "W"},
557 {0x57, "X"},
558 {0x58, "Y"},
559 {0x59, "Z"},
561 AppendEnumValueInfo(result, param, virtualKeys, name);
564 void VirtualModifierKeysParamInfo(nsCString& result, uint64_t param,
565 const char* name, bool /* isPreCall */) {
566 const static nsTArray<EnumValueAndName> virtualKeys{
567 VALANDNAME_ENTRY(MK_CONTROL), VALANDNAME_ENTRY(MK_LBUTTON),
568 VALANDNAME_ENTRY(MK_MBUTTON), VALANDNAME_ENTRY(MK_RBUTTON),
569 VALANDNAME_ENTRY(MK_SHIFT), VALANDNAME_ENTRY(MK_XBUTTON1),
570 VALANDNAME_ENTRY(MK_XBUTTON2), {0, "(none)"}};
571 AppendFlagsInfo(result, param, virtualKeys, name);
574 void ParentNotifyEventParamInfo(nsCString& str, uint64_t param,
575 const char* /* name */, bool /* isPreCall */) {
576 const static std::unordered_map<uint64_t, const char*> eventValues{
577 VALANDNAME_ENTRY(WM_CREATE), VALANDNAME_ENTRY(WM_DESTROY),
578 VALANDNAME_ENTRY(WM_LBUTTONDOWN), VALANDNAME_ENTRY(WM_MBUTTONDOWN),
579 VALANDNAME_ENTRY(WM_RBUTTONDOWN), VALANDNAME_ENTRY(WM_XBUTTONDOWN),
580 VALANDNAME_ENTRY(WM_POINTERDOWN)};
581 AppendEnumValueInfo(str, LOWORD(param), eventValues, "event");
582 str.AppendASCII(" ");
583 HexParamInfo(str, HIWORD(param), "hiWord", false);
586 void KeystrokeFlagsParamInfo(nsCString& str, uint64_t param,
587 const char* /* name */, bool /* isPreCall */) {
588 WORD repeatCount = LOWORD(param);
589 WORD keyFlags = HIWORD(param);
590 WORD scanCode = LOBYTE(keyFlags);
591 bool isExtendedKey = (keyFlags & KF_EXTENDED) == KF_EXTENDED;
592 if (isExtendedKey) {
593 scanCode = MAKEWORD(scanCode, 0xE0);
595 bool contextCode = (keyFlags & KF_ALTDOWN) == KF_ALTDOWN;
596 bool wasKeyDown = (keyFlags & KF_REPEAT) == KF_REPEAT;
597 bool transitionState = (keyFlags & KF_UP) == KF_UP;
599 str.AppendPrintf(
600 "repeatCount: %d scanCode: %d isExtended: %d, contextCode: %d "
601 "previousKeyState: %d transitionState: %d",
602 repeatCount, scanCode, isExtendedKey ? 1 : 0, contextCode ? 1 : 0,
603 wasKeyDown ? 1 : 0, transitionState ? 1 : 0);
606 void VirtualKeysLowWordDistanceHighWordParamInfo(nsCString& str, uint64_t value,
607 const char* /* name */,
608 bool isPreCall) {
609 VirtualModifierKeysParamInfo(str, LOWORD(value), "virtualKeys", isPreCall);
610 str.AppendASCII(" ");
611 IntParamInfo(str, HIWORD(value), "distance", isPreCall);
614 void ShowWindowReasonParamInfo(nsCString& str, uint64_t value, const char* name,
615 bool /* isPreCall */) {
616 const static std::unordered_map<uint64_t, const char*> showWindowReasonValues{
617 VALANDNAME_ENTRY(SW_OTHERUNZOOM),
618 VALANDNAME_ENTRY(SW_OTHERZOOM),
619 VALANDNAME_ENTRY(SW_PARENTCLOSING),
620 VALANDNAME_ENTRY(SW_PARENTOPENING),
621 {0, "Call to ShowWindow()"}};
622 AppendEnumValueInfo(str, value, showWindowReasonValues, name);
625 void WindowEdgeParamInfo(nsCString& str, uint64_t value, const char* name,
626 bool /* isPreCall */) {
627 const static std::unordered_map<uint64_t, const char*> windowEdgeValues{
628 VALANDNAME_ENTRY(WMSZ_BOTTOM), VALANDNAME_ENTRY(WMSZ_BOTTOMLEFT),
629 VALANDNAME_ENTRY(WMSZ_BOTTOMRIGHT), VALANDNAME_ENTRY(WMSZ_LEFT),
630 VALANDNAME_ENTRY(WMSZ_RIGHT), VALANDNAME_ENTRY(WMSZ_TOP),
631 VALANDNAME_ENTRY(WMSZ_TOPLEFT), VALANDNAME_ENTRY(WMSZ_TOPRIGHT)};
632 AppendEnumValueInfo(str, value, windowEdgeValues, name);
635 void UiActionParamInfo(nsCString& str, uint64_t value, const char* name,
636 bool /* isPreCall */) {
637 const static std::unordered_map<uint64_t, const char*> uiActionValues {
638 VALANDNAME_ENTRY(SPI_GETACCESSTIMEOUT),
639 VALANDNAME_ENTRY(SPI_GETAUDIODESCRIPTION),
640 VALANDNAME_ENTRY(SPI_GETCLIENTAREAANIMATION),
641 VALANDNAME_ENTRY(SPI_GETDISABLEOVERLAPPEDCONTENT),
642 VALANDNAME_ENTRY(SPI_GETFILTERKEYS),
643 VALANDNAME_ENTRY(SPI_GETFOCUSBORDERHEIGHT),
644 VALANDNAME_ENTRY(SPI_GETFOCUSBORDERWIDTH),
645 VALANDNAME_ENTRY(SPI_GETHIGHCONTRAST),
646 #if WINVER >= 0x602
647 VALANDNAME_ENTRY(SPI_GETLOGICALDPIOVERRIDE),
648 VALANDNAME_ENTRY(SPI_SETLOGICALDPIOVERRIDE),
649 #endif
650 VALANDNAME_ENTRY(SPI_GETMESSAGEDURATION),
651 VALANDNAME_ENTRY(SPI_GETMOUSECLICKLOCK),
652 VALANDNAME_ENTRY(SPI_GETMOUSECLICKLOCKTIME),
653 VALANDNAME_ENTRY(SPI_GETMOUSEKEYS), VALANDNAME_ENTRY(SPI_GETMOUSESONAR),
654 VALANDNAME_ENTRY(SPI_GETMOUSEVANISH),
655 VALANDNAME_ENTRY(SPI_GETSCREENREADER),
656 VALANDNAME_ENTRY(SPI_GETSERIALKEYS),
657 VALANDNAME_ENTRY(SPI_GETSHOWSOUNDS),
658 VALANDNAME_ENTRY(SPI_GETSOUNDSENTRY),
659 VALANDNAME_ENTRY(SPI_GETSTICKYKEYS),
660 VALANDNAME_ENTRY(SPI_GETTOGGLEKEYS),
661 VALANDNAME_ENTRY(SPI_SETACCESSTIMEOUT),
662 VALANDNAME_ENTRY(SPI_SETAUDIODESCRIPTION),
663 VALANDNAME_ENTRY(SPI_SETCLIENTAREAANIMATION),
664 VALANDNAME_ENTRY(SPI_SETDISABLEOVERLAPPEDCONTENT),
665 VALANDNAME_ENTRY(SPI_SETFILTERKEYS),
666 VALANDNAME_ENTRY(SPI_SETFOCUSBORDERHEIGHT),
667 VALANDNAME_ENTRY(SPI_SETFOCUSBORDERWIDTH),
668 VALANDNAME_ENTRY(SPI_SETHIGHCONTRAST),
669 VALANDNAME_ENTRY(SPI_SETMESSAGEDURATION),
670 VALANDNAME_ENTRY(SPI_SETMOUSECLICKLOCK),
671 VALANDNAME_ENTRY(SPI_SETMOUSECLICKLOCKTIME),
672 VALANDNAME_ENTRY(SPI_SETMOUSEKEYS), VALANDNAME_ENTRY(SPI_SETMOUSESONAR),
673 VALANDNAME_ENTRY(SPI_SETMOUSEVANISH),
674 VALANDNAME_ENTRY(SPI_SETSCREENREADER),
675 VALANDNAME_ENTRY(SPI_SETSERIALKEYS),
676 VALANDNAME_ENTRY(SPI_SETSHOWSOUNDS),
677 VALANDNAME_ENTRY(SPI_SETSOUNDSENTRY),
678 VALANDNAME_ENTRY(SPI_SETSTICKYKEYS),
679 VALANDNAME_ENTRY(SPI_SETTOGGLEKEYS), VALANDNAME_ENTRY(SPI_GETCLEARTYPE),
680 VALANDNAME_ENTRY(SPI_GETDESKWALLPAPER),
681 VALANDNAME_ENTRY(SPI_GETDROPSHADOW), VALANDNAME_ENTRY(SPI_GETFLATMENU),
682 VALANDNAME_ENTRY(SPI_GETFONTSMOOTHING),
683 VALANDNAME_ENTRY(SPI_GETFONTSMOOTHINGCONTRAST),
684 VALANDNAME_ENTRY(SPI_GETFONTSMOOTHINGORIENTATION),
685 VALANDNAME_ENTRY(SPI_GETFONTSMOOTHINGTYPE),
686 VALANDNAME_ENTRY(SPI_GETWORKAREA), VALANDNAME_ENTRY(SPI_SETCLEARTYPE),
687 VALANDNAME_ENTRY(SPI_SETCURSORS), VALANDNAME_ENTRY(SPI_SETDESKPATTERN),
688 VALANDNAME_ENTRY(SPI_SETDESKWALLPAPER),
689 VALANDNAME_ENTRY(SPI_SETDROPSHADOW), VALANDNAME_ENTRY(SPI_SETFLATMENU),
690 VALANDNAME_ENTRY(SPI_SETFONTSMOOTHING),
691 VALANDNAME_ENTRY(SPI_SETFONTSMOOTHINGCONTRAST),
692 VALANDNAME_ENTRY(SPI_SETFONTSMOOTHINGORIENTATION),
693 VALANDNAME_ENTRY(SPI_SETFONTSMOOTHINGTYPE),
694 VALANDNAME_ENTRY(SPI_SETWORKAREA), VALANDNAME_ENTRY(SPI_GETICONMETRICS),
695 VALANDNAME_ENTRY(SPI_GETICONTITLELOGFONT),
696 VALANDNAME_ENTRY(SPI_GETICONTITLEWRAP),
697 VALANDNAME_ENTRY(SPI_ICONHORIZONTALSPACING),
698 VALANDNAME_ENTRY(SPI_ICONVERTICALSPACING),
699 VALANDNAME_ENTRY(SPI_SETICONMETRICS), VALANDNAME_ENTRY(SPI_SETICONS),
700 VALANDNAME_ENTRY(SPI_SETICONTITLELOGFONT),
701 VALANDNAME_ENTRY(SPI_SETICONTITLEWRAP), VALANDNAME_ENTRY(SPI_GETBEEP),
702 VALANDNAME_ENTRY(SPI_GETBLOCKSENDINPUTRESETS),
703 #if WINVER >= 0x602
704 VALANDNAME_ENTRY(SPI_GETCONTACTVISUALIZATION),
705 VALANDNAME_ENTRY(SPI_SETCONTACTVISUALIZATION),
706 #endif
707 VALANDNAME_ENTRY(SPI_GETDEFAULTINPUTLANG),
708 #if WINVER >= 0x602
709 VALANDNAME_ENTRY(SPI_GETGESTUREVISUALIZATION),
710 VALANDNAME_ENTRY(SPI_SETGESTUREVISUALIZATION),
711 #endif
712 VALANDNAME_ENTRY(SPI_GETKEYBOARDCUES),
713 VALANDNAME_ENTRY(SPI_GETKEYBOARDDELAY),
714 VALANDNAME_ENTRY(SPI_GETKEYBOARDPREF),
715 VALANDNAME_ENTRY(SPI_GETKEYBOARDSPEED), VALANDNAME_ENTRY(SPI_GETMOUSE),
716 VALANDNAME_ENTRY(SPI_GETMOUSEHOVERHEIGHT),
717 VALANDNAME_ENTRY(SPI_GETMOUSEHOVERTIME),
718 VALANDNAME_ENTRY(SPI_GETMOUSEHOVERWIDTH),
719 VALANDNAME_ENTRY(SPI_GETMOUSESPEED),
720 VALANDNAME_ENTRY(SPI_GETMOUSETRAILS),
721 #if WINVER >= 0x602
722 VALANDNAME_ENTRY(SPI_GETMOUSEWHEELROUTING),
723 VALANDNAME_ENTRY(SPI_SETMOUSEWHEELROUTING),
724 #endif
725 #if WINVER >= 0x604
726 VALANDNAME_ENTRY(SPI_GETPENVISUALIZATION),
727 VALANDNAME_ENTRY(SPI_SETPENVISUALIZATION),
728 #endif
729 VALANDNAME_ENTRY(SPI_GETSNAPTODEFBUTTON),
730 #if WINVER >= 0x601
731 VALANDNAME_ENTRY(SPI_GETSYSTEMLANGUAGEBAR),
732 VALANDNAME_ENTRY(SPI_SETSYSTEMLANGUAGEBAR),
733 VALANDNAME_ENTRY(SPI_GETTHREADLOCALINPUTSETTINGS),
734 VALANDNAME_ENTRY(SPI_SETTHREADLOCALINPUTSETTINGS),
735 #endif
736 VALANDNAME_ENTRY(SPI_GETWHEELSCROLLCHARS),
737 VALANDNAME_ENTRY(SPI_GETWHEELSCROLLLINES),
738 VALANDNAME_ENTRY(SPI_SETBEEP),
739 VALANDNAME_ENTRY(SPI_SETBLOCKSENDINPUTRESETS),
740 VALANDNAME_ENTRY(SPI_SETDEFAULTINPUTLANG),
741 VALANDNAME_ENTRY(SPI_SETDOUBLECLICKTIME),
742 VALANDNAME_ENTRY(SPI_SETDOUBLECLKHEIGHT),
743 VALANDNAME_ENTRY(SPI_SETDOUBLECLKWIDTH),
744 VALANDNAME_ENTRY(SPI_SETKEYBOARDCUES),
745 VALANDNAME_ENTRY(SPI_SETKEYBOARDDELAY),
746 VALANDNAME_ENTRY(SPI_SETKEYBOARDPREF),
747 VALANDNAME_ENTRY(SPI_SETKEYBOARDSPEED),
748 VALANDNAME_ENTRY(SPI_SETLANGTOGGLE), VALANDNAME_ENTRY(SPI_SETMOUSE),
749 VALANDNAME_ENTRY(SPI_SETMOUSEBUTTONSWAP),
750 VALANDNAME_ENTRY(SPI_SETMOUSEHOVERHEIGHT),
751 VALANDNAME_ENTRY(SPI_SETMOUSEHOVERTIME),
752 VALANDNAME_ENTRY(SPI_SETMOUSEHOVERWIDTH),
753 VALANDNAME_ENTRY(SPI_SETMOUSESPEED),
754 VALANDNAME_ENTRY(SPI_SETMOUSETRAILS),
755 VALANDNAME_ENTRY(SPI_SETSNAPTODEFBUTTON),
756 VALANDNAME_ENTRY(SPI_SETWHEELSCROLLCHARS),
757 VALANDNAME_ENTRY(SPI_SETWHEELSCROLLLINES),
758 VALANDNAME_ENTRY(SPI_GETMENUDROPALIGNMENT),
759 VALANDNAME_ENTRY(SPI_GETMENUFADE),
760 VALANDNAME_ENTRY(SPI_GETMENUSHOWDELAY),
761 VALANDNAME_ENTRY(SPI_SETMENUDROPALIGNMENT),
762 VALANDNAME_ENTRY(SPI_SETMENUFADE),
763 VALANDNAME_ENTRY(SPI_SETMENUSHOWDELAY),
764 VALANDNAME_ENTRY(SPI_GETLOWPOWERACTIVE),
765 VALANDNAME_ENTRY(SPI_GETLOWPOWERTIMEOUT),
766 VALANDNAME_ENTRY(SPI_GETPOWEROFFACTIVE),
767 VALANDNAME_ENTRY(SPI_GETPOWEROFFTIMEOUT),
768 VALANDNAME_ENTRY(SPI_SETLOWPOWERACTIVE),
769 VALANDNAME_ENTRY(SPI_SETLOWPOWERTIMEOUT),
770 VALANDNAME_ENTRY(SPI_SETPOWEROFFACTIVE),
771 VALANDNAME_ENTRY(SPI_SETPOWEROFFTIMEOUT),
772 VALANDNAME_ENTRY(SPI_GETSCREENSAVEACTIVE),
773 VALANDNAME_ENTRY(SPI_GETSCREENSAVERRUNNING),
774 VALANDNAME_ENTRY(SPI_GETSCREENSAVESECURE),
775 VALANDNAME_ENTRY(SPI_GETSCREENSAVETIMEOUT),
776 VALANDNAME_ENTRY(SPI_SETSCREENSAVEACTIVE),
777 VALANDNAME_ENTRY(SPI_SETSCREENSAVERRUNNING),
778 VALANDNAME_ENTRY(SPI_SETSCREENSAVESECURE),
779 VALANDNAME_ENTRY(SPI_SETSCREENSAVETIMEOUT),
780 VALANDNAME_ENTRY(SPI_GETHUNGAPPTIMEOUT),
781 VALANDNAME_ENTRY(SPI_GETWAITTOKILLTIMEOUT),
782 VALANDNAME_ENTRY(SPI_GETWAITTOKILLSERVICETIMEOUT),
783 VALANDNAME_ENTRY(SPI_SETHUNGAPPTIMEOUT),
784 VALANDNAME_ENTRY(SPI_SETWAITTOKILLTIMEOUT),
785 VALANDNAME_ENTRY(SPI_SETWAITTOKILLSERVICETIMEOUT),
786 VALANDNAME_ENTRY(SPI_GETCOMBOBOXANIMATION),
787 VALANDNAME_ENTRY(SPI_GETCURSORSHADOW),
788 VALANDNAME_ENTRY(SPI_GETGRADIENTCAPTIONS),
789 VALANDNAME_ENTRY(SPI_GETHOTTRACKING),
790 VALANDNAME_ENTRY(SPI_GETLISTBOXSMOOTHSCROLLING),
791 VALANDNAME_ENTRY(SPI_GETMENUANIMATION),
792 VALANDNAME_ENTRY(SPI_GETMENUUNDERLINES),
793 VALANDNAME_ENTRY(SPI_GETSELECTIONFADE),
794 VALANDNAME_ENTRY(SPI_GETTOOLTIPANIMATION),
795 VALANDNAME_ENTRY(SPI_GETTOOLTIPFADE),
796 VALANDNAME_ENTRY(SPI_GETUIEFFECTS),
797 VALANDNAME_ENTRY(SPI_SETCOMBOBOXANIMATION),
798 VALANDNAME_ENTRY(SPI_SETCURSORSHADOW),
799 VALANDNAME_ENTRY(SPI_SETGRADIENTCAPTIONS),
800 VALANDNAME_ENTRY(SPI_SETHOTTRACKING),
801 VALANDNAME_ENTRY(SPI_SETLISTBOXSMOOTHSCROLLING),
802 VALANDNAME_ENTRY(SPI_SETMENUANIMATION),
803 VALANDNAME_ENTRY(SPI_SETMENUUNDERLINES),
804 VALANDNAME_ENTRY(SPI_SETSELECTIONFADE),
805 VALANDNAME_ENTRY(SPI_SETTOOLTIPANIMATION),
806 VALANDNAME_ENTRY(SPI_SETTOOLTIPFADE),
807 VALANDNAME_ENTRY(SPI_SETUIEFFECTS),
808 VALANDNAME_ENTRY(SPI_GETACTIVEWINDOWTRACKING),
809 VALANDNAME_ENTRY(SPI_GETACTIVEWNDTRKZORDER),
810 VALANDNAME_ENTRY(SPI_GETACTIVEWNDTRKTIMEOUT),
811 VALANDNAME_ENTRY(SPI_GETANIMATION), VALANDNAME_ENTRY(SPI_GETBORDER),
812 VALANDNAME_ENTRY(SPI_GETCARETWIDTH),
813 VALANDNAME_ENTRY(SPI_GETDOCKMOVING),
814 VALANDNAME_ENTRY(SPI_GETDRAGFROMMAXIMIZE),
815 VALANDNAME_ENTRY(SPI_GETDRAGFULLWINDOWS),
816 VALANDNAME_ENTRY(SPI_GETFOREGROUNDFLASHCOUNT),
817 VALANDNAME_ENTRY(SPI_GETFOREGROUNDLOCKTIMEOUT),
818 VALANDNAME_ENTRY(SPI_GETMINIMIZEDMETRICS),
819 VALANDNAME_ENTRY(SPI_GETMOUSEDOCKTHRESHOLD),
820 VALANDNAME_ENTRY(SPI_GETMOUSEDRAGOUTTHRESHOLD),
821 VALANDNAME_ENTRY(SPI_GETMOUSESIDEMOVETHRESHOLD),
822 VALANDNAME_ENTRY(SPI_GETNONCLIENTMETRICS),
823 VALANDNAME_ENTRY(SPI_GETPENDOCKTHRESHOLD),
824 VALANDNAME_ENTRY(SPI_GETPENDRAGOUTTHRESHOLD),
825 VALANDNAME_ENTRY(SPI_GETPENSIDEMOVETHRESHOLD),
826 VALANDNAME_ENTRY(SPI_GETSHOWIMEUI), VALANDNAME_ENTRY(SPI_GETSNAPSIZING),
827 VALANDNAME_ENTRY(SPI_GETWINARRANGING),
828 VALANDNAME_ENTRY(SPI_SETACTIVEWINDOWTRACKING),
829 VALANDNAME_ENTRY(SPI_SETACTIVEWNDTRKZORDER),
830 VALANDNAME_ENTRY(SPI_SETACTIVEWNDTRKTIMEOUT),
831 VALANDNAME_ENTRY(SPI_SETANIMATION), VALANDNAME_ENTRY(SPI_SETBORDER),
832 VALANDNAME_ENTRY(SPI_SETCARETWIDTH),
833 VALANDNAME_ENTRY(SPI_SETDOCKMOVING),
834 VALANDNAME_ENTRY(SPI_SETDRAGFROMMAXIMIZE),
835 VALANDNAME_ENTRY(SPI_SETDRAGFULLWINDOWS),
836 VALANDNAME_ENTRY(SPI_SETFOREGROUNDFLASHCOUNT),
837 VALANDNAME_ENTRY(SPI_SETFOREGROUNDLOCKTIMEOUT),
838 VALANDNAME_ENTRY(SPI_SETMINIMIZEDMETRICS),
839 VALANDNAME_ENTRY(SPI_SETMOUSEDOCKTHRESHOLD),
840 VALANDNAME_ENTRY(SPI_SETMOUSEDRAGOUTTHRESHOLD),
841 VALANDNAME_ENTRY(SPI_SETMOUSESIDEMOVETHRESHOLD),
842 VALANDNAME_ENTRY(SPI_SETNONCLIENTMETRICS),
843 VALANDNAME_ENTRY(SPI_SETPENDOCKTHRESHOLD),
844 VALANDNAME_ENTRY(SPI_SETPENDRAGOUTTHRESHOLD),
845 VALANDNAME_ENTRY(SPI_SETPENSIDEMOVETHRESHOLD),
846 VALANDNAME_ENTRY(SPI_SETSHOWIMEUI), VALANDNAME_ENTRY(SPI_SETSNAPSIZING),
847 VALANDNAME_ENTRY(SPI_SETWINARRANGING),
849 AppendEnumValueInfo(str, value, uiActionValues, name);
852 nsAutoCString WmSizeParamInfo(uint64_t wParam, uint64_t lParam,
853 bool /* isPreCall */) {
854 nsAutoCString result;
855 const static std::unordered_map<uint64_t, const char*> sizeValues{
856 VALANDNAME_ENTRY(SIZE_RESTORED), VALANDNAME_ENTRY(SIZE_MINIMIZED),
857 VALANDNAME_ENTRY(SIZE_MAXIMIZED), VALANDNAME_ENTRY(SIZE_MAXSHOW),
858 VALANDNAME_ENTRY(SIZE_MAXHIDE)};
859 AppendEnumValueInfo(result, wParam, sizeValues, "size");
860 result.AppendPrintf(" width=%d height=%d", static_cast<int>(LOWORD(lParam)),
861 static_cast<int>(HIWORD(lParam)));
862 return result;
865 const nsTArray<EnumValueAndName> windowPositionFlags = {
866 VALANDNAME_ENTRY(SWP_DRAWFRAME), VALANDNAME_ENTRY(SWP_HIDEWINDOW),
867 VALANDNAME_ENTRY(SWP_NOACTIVATE), VALANDNAME_ENTRY(SWP_NOCOPYBITS),
868 VALANDNAME_ENTRY(SWP_NOMOVE), VALANDNAME_ENTRY(SWP_NOOWNERZORDER),
869 VALANDNAME_ENTRY(SWP_NOREDRAW), VALANDNAME_ENTRY(SWP_NOSENDCHANGING),
870 VALANDNAME_ENTRY(SWP_NOSIZE), VALANDNAME_ENTRY(SWP_NOZORDER),
871 VALANDNAME_ENTRY(SWP_SHOWWINDOW),
874 void WindowPosParamInfo(nsCString& str, uint64_t value, const char* name,
875 bool /* isPreCall */) {
876 LPWINDOWPOS windowPos = reinterpret_cast<LPWINDOWPOS>(value);
877 if (windowPos == nullptr) {
878 str.AppendASCII("null windowPos?");
879 return;
881 HexParamInfo(str, reinterpret_cast<uint64_t>(windowPos->hwnd), "hwnd", false);
882 str.AppendASCII(" ");
883 HexParamInfo(str, reinterpret_cast<uint64_t>(windowPos->hwndInsertAfter),
884 "hwndInsertAfter", false);
885 str.AppendASCII(" ");
886 IntParamInfo(str, windowPos->x, "x", false);
887 str.AppendASCII(" ");
888 IntParamInfo(str, windowPos->y, "y", false);
889 str.AppendASCII(" ");
890 IntParamInfo(str, windowPos->cx, "cx", false);
891 str.AppendASCII(" ");
892 IntParamInfo(str, windowPos->cy, "cy", false);
893 str.AppendASCII(" ");
894 AppendFlagsInfo(str, windowPos->flags, windowPositionFlags, "flags");
897 void StyleOrExtendedParamInfo(nsCString& str, uint64_t value, const char* name,
898 bool /* isPreCall */) {
899 const static std::unordered_map<uint64_t, const char*> styleOrExtended{
900 VALANDNAME_ENTRY(GWL_EXSTYLE), VALANDNAME_ENTRY(GWL_STYLE)};
901 AppendEnumValueInfo(str, value, styleOrExtended, name);
904 void StyleStructParamInfo(nsCString& str, uint64_t value, const char* name,
905 bool /* isPreCall */) {
906 LPSTYLESTRUCT styleStruct = reinterpret_cast<LPSTYLESTRUCT>(value);
907 if (styleStruct == nullptr) {
908 str.AppendASCII("null STYLESTRUCT?");
909 return;
911 HexParamInfo(str, styleStruct->styleOld, "styleOld", false);
912 str.AppendASCII(" ");
913 HexParamInfo(str, styleStruct->styleNew, "styleNew", false);
916 void NcCalcSizeParamsParamInfo(nsCString& str, uint64_t value, const char* name,
917 bool /* isPreCall */) {
918 LPNCCALCSIZE_PARAMS params = reinterpret_cast<LPNCCALCSIZE_PARAMS>(value);
919 if (params == nullptr) {
920 str.AppendASCII("null NCCALCSIZE_PARAMS?");
921 return;
923 str.AppendPrintf("%s[0]: ", name);
924 RectParamInfo(str, reinterpret_cast<uintptr_t>(&params->rgrc[0]), nullptr,
925 false);
926 str.AppendPrintf(" %s[1]: ", name);
927 RectParamInfo(str, reinterpret_cast<uintptr_t>(&params->rgrc[1]), nullptr,
928 false);
929 str.AppendPrintf(" %s[2]: ", name);
930 RectParamInfo(str, reinterpret_cast<uintptr_t>(&params->rgrc[2]), nullptr,
931 false);
932 str.AppendASCII(" ");
933 WindowPosParamInfo(str, reinterpret_cast<uintptr_t>(params->lppos), nullptr,
934 false);
937 nsAutoCString WmNcCalcSizeParamInfo(uint64_t wParam, uint64_t lParam,
938 bool /* isPreCall */) {
939 nsAutoCString result;
940 TrueFalseParamInfo(result, wParam, "shouldIndicateValidArea", false);
941 result.AppendASCII(" ");
942 if (wParam == TRUE) {
943 NcCalcSizeParamsParamInfo(result, lParam, "ncCalcSizeParams", false);
944 } else {
945 RectParamInfo(result, lParam, "rect", false);
947 return result;
950 void ActivateWParamInfo(nsCString& result, uint64_t wParam, const char* name,
951 bool /* isPreCall */) {
952 const static std::unordered_map<uint64_t, const char*> activateValues{
953 VALANDNAME_ENTRY(WA_ACTIVE), VALANDNAME_ENTRY(WA_CLICKACTIVE),
954 VALANDNAME_ENTRY(WA_INACTIVE)};
955 AppendEnumValueInfo(result, wParam, activateValues, name);
958 void HitTestParamInfo(nsCString& result, uint64_t param, const char* name,
959 bool /* isPreCall */) {
960 const static std::unordered_map<uint64_t, const char*> hitTestResults{
961 VALANDNAME_ENTRY(HTBORDER), VALANDNAME_ENTRY(HTBOTTOM),
962 VALANDNAME_ENTRY(HTBOTTOMLEFT), VALANDNAME_ENTRY(HTBOTTOMRIGHT),
963 VALANDNAME_ENTRY(HTCAPTION), VALANDNAME_ENTRY(HTCLIENT),
964 VALANDNAME_ENTRY(HTCLOSE), VALANDNAME_ENTRY(HTERROR),
965 VALANDNAME_ENTRY(HTGROWBOX), VALANDNAME_ENTRY(HTHELP),
966 VALANDNAME_ENTRY(HTHSCROLL), VALANDNAME_ENTRY(HTLEFT),
967 VALANDNAME_ENTRY(HTMENU), VALANDNAME_ENTRY(HTMAXBUTTON),
968 VALANDNAME_ENTRY(HTMINBUTTON), VALANDNAME_ENTRY(HTNOWHERE),
969 VALANDNAME_ENTRY(HTREDUCE), VALANDNAME_ENTRY(HTRIGHT),
970 VALANDNAME_ENTRY(HTSIZE), VALANDNAME_ENTRY(HTSYSMENU),
971 VALANDNAME_ENTRY(HTTOP), VALANDNAME_ENTRY(HTTOPLEFT),
972 VALANDNAME_ENTRY(HTTOPRIGHT), VALANDNAME_ENTRY(HTTRANSPARENT),
973 VALANDNAME_ENTRY(HTVSCROLL), VALANDNAME_ENTRY(HTZOOM),
975 AppendEnumValueInfo(result, param, hitTestResults, name);
978 void SetCursorLParamInfo(nsCString& result, uint64_t lParam,
979 const char* /* name */, bool /* isPreCall */) {
980 HitTestParamInfo(result, LOWORD(lParam), "hitTestResult", false);
981 result.AppendASCII(" ");
982 HexParamInfo(result, HIWORD(lParam), "message", false);
985 void MinMaxInfoParamInfo(nsCString& result, uint64_t value,
986 const char* /* name */, bool /* isPreCall */) {
987 PMINMAXINFO minMaxInfo = reinterpret_cast<PMINMAXINFO>(value);
988 if (minMaxInfo == nullptr) {
989 result.AppendPrintf("NULL minMaxInfo?");
990 return;
992 PointExplicitParamInfo(result, minMaxInfo->ptMaxSize, "maxSize");
993 result.AppendASCII(" ");
994 PointExplicitParamInfo(result, minMaxInfo->ptMaxPosition, "maxPosition");
995 result.AppendASCII(" ");
996 PointExplicitParamInfo(result, minMaxInfo->ptMinTrackSize, "minTrackSize");
997 result.AppendASCII(" ");
998 PointExplicitParamInfo(result, minMaxInfo->ptMaxTrackSize, "maxTrackSize");
1001 void WideStringParamInfo(nsCString& result, uint64_t value, const char* name,
1002 bool /* isPreCall */) {
1003 result.AppendPrintf("%s=%S", name, reinterpret_cast<LPCWSTR>(value));
1006 void DeviceEventParamInfo(nsCString& result, uint64_t value, const char* name,
1007 bool /* isPreCall */) {
1008 const static std::unordered_map<uint64_t, const char*> deviceEventValues{
1009 VALANDNAME_ENTRY(DBT_DEVNODES_CHANGED),
1010 VALANDNAME_ENTRY(DBT_QUERYCHANGECONFIG),
1011 VALANDNAME_ENTRY(DBT_CONFIGCHANGED),
1012 VALANDNAME_ENTRY(DBT_CONFIGCHANGECANCELED),
1013 VALANDNAME_ENTRY(DBT_DEVICEARRIVAL),
1014 VALANDNAME_ENTRY(DBT_DEVICEQUERYREMOVE),
1015 VALANDNAME_ENTRY(DBT_DEVICEQUERYREMOVEFAILED),
1016 VALANDNAME_ENTRY(DBT_DEVICEREMOVEPENDING),
1017 VALANDNAME_ENTRY(DBT_DEVICEREMOVECOMPLETE),
1018 VALANDNAME_ENTRY(DBT_DEVICETYPESPECIFIC),
1019 VALANDNAME_ENTRY(DBT_CUSTOMEVENT),
1020 VALANDNAME_ENTRY(DBT_USERDEFINED)};
1021 AppendEnumValueInfo(result, value, deviceEventValues, name);
1024 void ResolutionParamInfo(nsCString& result, uint64_t value, const char* name,
1025 bool /* isPreCall */) {
1026 result.AppendPrintf("horizontalRes=%d verticalRes=%d", LOWORD(value),
1027 HIWORD(value));
1030 // Window message with default wParam/lParam logging
1031 #define ENTRY(_msg) \
1033 _msg, { \
1034 # _msg, _msg, DefaultParamInfo \
1037 // Window message with no parameters
1038 #define ENTRY_WITH_NO_PARAM_INFO(_msg) \
1040 _msg, { \
1041 # _msg, _msg, nullptr \
1044 // Window message with custom parameter logging functions
1045 #define ENTRY_WITH_CUSTOM_PARAM_INFO(_msg, paramInfoFn) \
1047 _msg, { \
1048 # _msg, _msg, paramInfoFn \
1051 // Window message with separate custom wParam and lParam logging functions
1052 #define ENTRY_WITH_SPLIT_PARAM_INFOS(_msg, wParamInfoFn, wParamName, \
1053 lParamInfoFn, lParamName) \
1055 _msg, { \
1056 # _msg, _msg, nullptr, wParamInfoFn, wParamName, lParamInfoFn, lParamName \
1059 std::unordered_map<UINT, EventMsgInfo> gAllEvents = {
1060 ENTRY_WITH_NO_PARAM_INFO(WM_NULL),
1061 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_CREATE, nullptr, nullptr,
1062 CreateStructParamInfo, "createStruct"),
1063 ENTRY_WITH_NO_PARAM_INFO(WM_DESTROY),
1064 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOVE, nullptr, nullptr,
1065 XLowWordYHighWordParamInfo, "upperLeft"),
1066 ENTRY_WITH_CUSTOM_PARAM_INFO(WM_SIZE, WmSizeParamInfo),
1067 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ACTIVATE, ActivateWParamInfo, "wParam",
1068 HexParamInfo, "handle"),
1069 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETFOCUS, HexParamInfo, "handle", nullptr,
1070 nullptr),
1071 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KILLFOCUS, HexParamInfo, "handle", nullptr,
1072 nullptr),
1073 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ENABLE, TrueFalseParamInfo, "enabled",
1074 nullptr, nullptr),
1075 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETREDRAW, TrueFalseParamInfo,
1076 "redrawState", nullptr, nullptr),
1077 ENTRY(WM_SETTEXT),
1078 ENTRY(WM_GETTEXT),
1079 ENTRY(WM_GETTEXTLENGTH),
1080 ENTRY_WITH_NO_PARAM_INFO(WM_PAINT),
1081 ENTRY_WITH_NO_PARAM_INFO(WM_CLOSE),
1082 ENTRY(WM_QUERYENDSESSION),
1083 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_QUIT, HexParamInfo, "exitCode", nullptr,
1084 nullptr),
1085 ENTRY(WM_QUERYOPEN),
1086 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ERASEBKGND, HexParamInfo, "deviceContext",
1087 nullptr, nullptr),
1088 ENTRY(WM_SYSCOLORCHANGE),
1089 ENTRY(WM_ENDSESSION),
1090 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SHOWWINDOW, TrueFalseParamInfo,
1091 "windowBeingShown", ShowWindowReasonParamInfo,
1092 "status"),
1093 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETTINGCHANGE, UiActionParamInfo,
1094 "uiAction", WideStringParamInfo,
1095 "paramChanged"),
1096 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DEVMODECHANGE, nullptr, nullptr,
1097 WideStringParamInfo, "deviceName"),
1098 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ACTIVATEAPP, TrueFalseParamInfo,
1099 "activated", HexParamInfo, "threadId"),
1100 ENTRY(WM_FONTCHANGE),
1101 ENTRY(WM_TIMECHANGE),
1102 ENTRY(WM_CANCELMODE),
1103 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETCURSOR, HexParamInfo, "windowHandle",
1104 SetCursorLParamInfo, ""),
1105 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEACTIVATE, HexParamInfo, "windowHandle",
1106 SetCursorLParamInfo, ""),
1107 ENTRY(WM_CHILDACTIVATE),
1108 ENTRY(WM_QUEUESYNC),
1109 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_GETMINMAXINFO, nullptr, nullptr,
1110 MinMaxInfoParamInfo, ""),
1111 ENTRY(WM_PAINTICON),
1112 ENTRY(WM_ICONERASEBKGND),
1113 ENTRY(WM_NEXTDLGCTL),
1114 ENTRY(WM_SPOOLERSTATUS),
1115 ENTRY(WM_DRAWITEM),
1116 ENTRY(WM_MEASUREITEM),
1117 ENTRY(WM_DELETEITEM),
1118 ENTRY(WM_VKEYTOITEM),
1119 ENTRY(WM_CHARTOITEM),
1120 ENTRY(WM_SETFONT),
1121 ENTRY(WM_GETFONT),
1122 ENTRY(WM_SETHOTKEY),
1123 ENTRY(WM_GETHOTKEY),
1124 ENTRY(WM_QUERYDRAGICON),
1125 ENTRY(WM_COMPAREITEM),
1126 ENTRY(WM_GETOBJECT),
1127 ENTRY(WM_COMPACTING),
1128 ENTRY(WM_COMMNOTIFY),
1129 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_WINDOWPOSCHANGING, nullptr, nullptr,
1130 WindowPosParamInfo, "newSizeAndPos"),
1131 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_WINDOWPOSCHANGED, nullptr, nullptr,
1132 WindowPosParamInfo, "newSizeAndPos"),
1133 ENTRY(WM_POWER),
1134 ENTRY(WM_COPYDATA),
1135 ENTRY(WM_CANCELJOURNAL),
1136 ENTRY(WM_NOTIFY),
1137 ENTRY(WM_INPUTLANGCHANGEREQUEST),
1138 ENTRY(WM_INPUTLANGCHANGE),
1139 ENTRY(WM_TCARD),
1140 ENTRY(WM_HELP),
1141 ENTRY(WM_USERCHANGED),
1142 ENTRY(WM_NOTIFYFORMAT),
1143 ENTRY(WM_CONTEXTMENU),
1144 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_STYLECHANGING, StyleOrExtendedParamInfo,
1145 "styleOrExtended", StyleStructParamInfo,
1146 "newStyles"),
1147 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_STYLECHANGED, StyleOrExtendedParamInfo,
1148 "styleOrExtended", StyleStructParamInfo,
1149 "newStyles"),
1150 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DISPLAYCHANGE, IntParamInfo, "bitsPerPixel",
1151 ResolutionParamInfo, ""),
1152 ENTRY(WM_GETICON),
1153 ENTRY(WM_SETICON),
1154 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCCREATE, nullptr, nullptr,
1155 CreateStructParamInfo, "createStruct"),
1156 ENTRY_WITH_NO_PARAM_INFO(WM_NCDESTROY),
1157 ENTRY_WITH_CUSTOM_PARAM_INFO(WM_NCCALCSIZE, WmNcCalcSizeParamInfo),
1158 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCHITTEST, nullptr, nullptr,
1159 XLowWordYHighWordParamInfo, "mousePos"),
1160 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCPAINT, HexParamInfo, "updateRegionHandle",
1161 nullptr, nullptr),
1162 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCACTIVATE, TrueFalseParamInfo,
1163 "isTitleBarOrIconActive", HexParamInfo,
1164 "updateRegion"),
1165 ENTRY(WM_GETDLGCODE),
1166 ENTRY(WM_SYNCPAINT),
1167 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMOUSEMOVE, VirtualModifierKeysParamInfo,
1168 "virtualKeys", XLowWordYHighWordParamInfo,
1169 "mousePos"),
1170 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCLBUTTONDOWN, HitTestParamInfo,
1171 "hitTestValue", PointsParamInfo, "mousePos"),
1172 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCLBUTTONUP, HitTestParamInfo,
1173 "hitTestValue", PointsParamInfo, "mousePos"),
1174 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCLBUTTONDBLCLK, HitTestParamInfo,
1175 "hitTestValue", PointsParamInfo, "mousePos"),
1176 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCRBUTTONDOWN, HitTestParamInfo,
1177 "hitTestValue", PointsParamInfo, "mousePos"),
1178 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCRBUTTONUP, HitTestParamInfo,
1179 "hitTestValue", PointsParamInfo, "mousePos"),
1180 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCRBUTTONDBLCLK, HitTestParamInfo,
1181 "hitTestValue", PointsParamInfo, "mousePos"),
1182 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMBUTTONDOWN, HitTestParamInfo,
1183 "hitTestValue", PointsParamInfo, "mousePos"),
1184 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMBUTTONUP, HitTestParamInfo,
1185 "hitTestValue", PointsParamInfo, "mousePos"),
1186 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMBUTTONDBLCLK, HitTestParamInfo,
1187 "hitTestValue", PointsParamInfo, "mousePos"),
1188 ENTRY(EM_GETSEL),
1189 ENTRY(EM_SETSEL),
1190 ENTRY(EM_GETRECT),
1191 ENTRY(EM_SETRECT),
1192 ENTRY(EM_SETRECTNP),
1193 ENTRY(EM_SCROLL),
1194 ENTRY(EM_LINESCROLL),
1195 ENTRY(EM_SCROLLCARET),
1196 ENTRY(EM_GETMODIFY),
1197 ENTRY(EM_SETMODIFY),
1198 ENTRY(EM_GETLINECOUNT),
1199 ENTRY(EM_LINEINDEX),
1200 ENTRY(EM_SETHANDLE),
1201 ENTRY(EM_GETHANDLE),
1202 ENTRY(EM_GETTHUMB),
1203 ENTRY(EM_LINELENGTH),
1204 ENTRY(EM_REPLACESEL),
1205 ENTRY(EM_GETLINE),
1206 ENTRY(EM_LIMITTEXT),
1207 ENTRY(EM_CANUNDO),
1208 ENTRY(EM_UNDO),
1209 ENTRY(EM_FMTLINES),
1210 ENTRY(EM_LINEFROMCHAR),
1211 ENTRY(EM_SETTABSTOPS),
1212 ENTRY(EM_SETPASSWORDCHAR),
1213 ENTRY(EM_EMPTYUNDOBUFFER),
1214 ENTRY(EM_GETFIRSTVISIBLELINE),
1215 ENTRY(EM_SETREADONLY),
1216 ENTRY(EM_SETWORDBREAKPROC),
1217 ENTRY(EM_GETWORDBREAKPROC),
1218 ENTRY(EM_GETPASSWORDCHAR),
1219 ENTRY(EM_SETMARGINS),
1220 ENTRY(EM_GETMARGINS),
1221 ENTRY(EM_GETLIMITTEXT),
1222 ENTRY(EM_POSFROMCHAR),
1223 ENTRY(EM_CHARFROMPOS),
1224 ENTRY(EM_SETIMESTATUS),
1225 ENTRY(EM_GETIMESTATUS),
1226 ENTRY(SBM_SETPOS),
1227 ENTRY(SBM_GETPOS),
1228 ENTRY(SBM_SETRANGE),
1229 ENTRY(SBM_SETRANGEREDRAW),
1230 ENTRY(SBM_GETRANGE),
1231 ENTRY(SBM_ENABLE_ARROWS),
1232 ENTRY(SBM_SETSCROLLINFO),
1233 ENTRY(SBM_GETSCROLLINFO),
1234 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KEYDOWN, VirtualKeyParamInfo, "vKey",
1235 KeystrokeFlagsParamInfo, ""),
1236 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KEYUP, VirtualKeyParamInfo, "vKey",
1237 KeystrokeFlagsParamInfo, ""),
1238 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_CHAR, IntParamInfo, "charCode",
1239 KeystrokeFlagsParamInfo, ""),
1240 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DEADCHAR, IntParamInfo, "charCode",
1241 KeystrokeFlagsParamInfo, ""),
1242 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSKEYDOWN, VirtualKeyParamInfo, "vKey",
1243 KeystrokeFlagsParamInfo, ""),
1244 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSKEYUP, VirtualKeyParamInfo, "vKey",
1245 KeystrokeFlagsParamInfo, ""),
1246 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSCHAR, IntParamInfo, "charCode",
1247 KeystrokeFlagsParamInfo, ""),
1248 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSDEADCHAR, IntParamInfo, "charCode",
1249 KeystrokeFlagsParamInfo, ""),
1250 ENTRY(WM_KEYLAST),
1251 ENTRY(WM_IME_STARTCOMPOSITION),
1252 ENTRY(WM_IME_ENDCOMPOSITION),
1253 ENTRY(WM_IME_COMPOSITION),
1254 ENTRY(WM_INITDIALOG),
1255 ENTRY(WM_COMMAND),
1256 ENTRY(WM_SYSCOMMAND),
1257 ENTRY(WM_TIMER),
1258 ENTRY(WM_HSCROLL),
1259 ENTRY(WM_VSCROLL),
1260 ENTRY(WM_INITMENU),
1261 ENTRY(WM_INITMENUPOPUP),
1262 ENTRY(WM_MENUSELECT),
1263 ENTRY(WM_MENUCHAR),
1264 ENTRY(WM_ENTERIDLE),
1265 ENTRY(WM_MENURBUTTONUP),
1266 ENTRY(WM_MENUDRAG),
1267 ENTRY(WM_MENUGETOBJECT),
1268 ENTRY(WM_UNINITMENUPOPUP),
1269 ENTRY(WM_MENUCOMMAND),
1270 ENTRY(WM_CHANGEUISTATE),
1271 ENTRY(WM_QUERYUISTATE),
1272 ENTRY(WM_UPDATEUISTATE),
1273 ENTRY(WM_CTLCOLORMSGBOX),
1274 ENTRY(WM_CTLCOLOREDIT),
1275 ENTRY(WM_CTLCOLORLISTBOX),
1276 ENTRY(WM_CTLCOLORBTN),
1277 ENTRY(WM_CTLCOLORDLG),
1278 ENTRY(WM_CTLCOLORSCROLLBAR),
1279 ENTRY(WM_CTLCOLORSTATIC),
1280 ENTRY(CB_GETEDITSEL),
1281 ENTRY(CB_LIMITTEXT),
1282 ENTRY(CB_SETEDITSEL),
1283 ENTRY(CB_ADDSTRING),
1284 ENTRY(CB_DELETESTRING),
1285 ENTRY(CB_DIR),
1286 ENTRY(CB_GETCOUNT),
1287 ENTRY(CB_GETCURSEL),
1288 ENTRY(CB_GETLBTEXT),
1289 ENTRY(CB_GETLBTEXTLEN),
1290 ENTRY(CB_INSERTSTRING),
1291 ENTRY(CB_RESETCONTENT),
1292 ENTRY(CB_FINDSTRING),
1293 ENTRY(CB_SELECTSTRING),
1294 ENTRY(CB_SETCURSEL),
1295 ENTRY(CB_SHOWDROPDOWN),
1296 ENTRY(CB_GETITEMDATA),
1297 ENTRY(CB_SETITEMDATA),
1298 ENTRY(CB_GETDROPPEDCONTROLRECT),
1299 ENTRY(CB_SETITEMHEIGHT),
1300 ENTRY(CB_GETITEMHEIGHT),
1301 ENTRY(CB_SETEXTENDEDUI),
1302 ENTRY(CB_GETEXTENDEDUI),
1303 ENTRY(CB_GETDROPPEDSTATE),
1304 ENTRY(CB_FINDSTRINGEXACT),
1305 ENTRY(CB_SETLOCALE),
1306 ENTRY(CB_GETLOCALE),
1307 ENTRY(CB_GETTOPINDEX),
1308 ENTRY(CB_SETTOPINDEX),
1309 ENTRY(CB_GETHORIZONTALEXTENT),
1310 ENTRY(CB_SETHORIZONTALEXTENT),
1311 ENTRY(CB_GETDROPPEDWIDTH),
1312 ENTRY(CB_SETDROPPEDWIDTH),
1313 ENTRY(CB_INITSTORAGE),
1314 ENTRY(CB_MSGMAX),
1315 ENTRY(LB_ADDSTRING),
1316 ENTRY(LB_INSERTSTRING),
1317 ENTRY(LB_DELETESTRING),
1318 ENTRY(LB_SELITEMRANGEEX),
1319 ENTRY(LB_RESETCONTENT),
1320 ENTRY(LB_SETSEL),
1321 ENTRY(LB_SETCURSEL),
1322 ENTRY(LB_GETSEL),
1323 ENTRY(LB_GETCURSEL),
1324 ENTRY(LB_GETTEXT),
1325 ENTRY(LB_GETTEXTLEN),
1326 ENTRY(LB_GETCOUNT),
1327 ENTRY(LB_SELECTSTRING),
1328 ENTRY(LB_DIR),
1329 ENTRY(LB_GETTOPINDEX),
1330 ENTRY(LB_FINDSTRING),
1331 ENTRY(LB_GETSELCOUNT),
1332 ENTRY(LB_GETSELITEMS),
1333 ENTRY(LB_SETTABSTOPS),
1334 ENTRY(LB_GETHORIZONTALEXTENT),
1335 ENTRY(LB_SETHORIZONTALEXTENT),
1336 ENTRY(LB_SETCOLUMNWIDTH),
1337 ENTRY(LB_ADDFILE),
1338 ENTRY(LB_SETTOPINDEX),
1339 ENTRY(LB_GETITEMRECT),
1340 ENTRY(LB_GETITEMDATA),
1341 ENTRY(LB_SETITEMDATA),
1342 ENTRY(LB_SELITEMRANGE),
1343 ENTRY(LB_SETANCHORINDEX),
1344 ENTRY(LB_GETANCHORINDEX),
1345 ENTRY(LB_SETCARETINDEX),
1346 ENTRY(LB_GETCARETINDEX),
1347 ENTRY(LB_SETITEMHEIGHT),
1348 ENTRY(LB_GETITEMHEIGHT),
1349 ENTRY(LB_FINDSTRINGEXACT),
1350 ENTRY(LB_SETLOCALE),
1351 ENTRY(LB_GETLOCALE),
1352 ENTRY(LB_SETCOUNT),
1353 ENTRY(LB_INITSTORAGE),
1354 ENTRY(LB_ITEMFROMPOINT),
1355 ENTRY(LB_MSGMAX),
1356 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEMOVE, VirtualModifierKeysParamInfo,
1357 "virtualKeys", XLowWordYHighWordParamInfo,
1358 "mousePos"),
1359 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONDOWN, VirtualModifierKeysParamInfo,
1360 "virtualKeys", XLowWordYHighWordParamInfo,
1361 "mousePos"),
1362 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONUP, VirtualModifierKeysParamInfo,
1363 "virtualKeys", XLowWordYHighWordParamInfo,
1364 "mousePos"),
1365 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONDBLCLK, VirtualModifierKeysParamInfo,
1366 "virtualKeys", XLowWordYHighWordParamInfo,
1367 "mousePos"),
1368 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONDOWN, VirtualModifierKeysParamInfo,
1369 "virtualKeys", XLowWordYHighWordParamInfo,
1370 "mousePos"),
1371 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONUP, VirtualModifierKeysParamInfo,
1372 "virtualKeys", XLowWordYHighWordParamInfo,
1373 "mousePos"),
1374 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONDBLCLK, VirtualModifierKeysParamInfo,
1375 "virtualKeys", XLowWordYHighWordParamInfo,
1376 "mousePos"),
1377 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONDOWN, VirtualModifierKeysParamInfo,
1378 "virtualKeys", XLowWordYHighWordParamInfo,
1379 "mousePos"),
1380 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONUP, VirtualModifierKeysParamInfo,
1381 "virtualKeys", XLowWordYHighWordParamInfo,
1382 "mousePos"),
1383 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONDBLCLK, VirtualModifierKeysParamInfo,
1384 "virtualKeys", XLowWordYHighWordParamInfo,
1385 "mousePos"),
1386 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEWHEEL,
1387 VirtualKeysLowWordDistanceHighWordParamInfo,
1388 "", XLowWordYHighWordParamInfo, "mousePos"),
1389 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEHWHEEL,
1390 VirtualKeysLowWordDistanceHighWordParamInfo,
1391 "", XLowWordYHighWordParamInfo, "mousePos"),
1392 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_PARENTNOTIFY, ParentNotifyEventParamInfo,
1393 "", PointParamInfo, "pointerLocation"),
1394 ENTRY(WM_ENTERMENULOOP),
1395 ENTRY(WM_EXITMENULOOP),
1396 ENTRY(WM_NEXTMENU),
1397 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SIZING, WindowEdgeParamInfo, "edge",
1398 RectParamInfo, "rect"),
1399 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_CAPTURECHANGED, nullptr, nullptr,
1400 HexParamInfo, "windowHandle"),
1401 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOVING, nullptr, nullptr, RectParamInfo,
1402 "rect"),
1403 ENTRY(WM_POWERBROADCAST),
1404 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DEVICECHANGE, DeviceEventParamInfo, "event",
1405 HexParamInfo, "data"),
1406 ENTRY(WM_MDICREATE),
1407 ENTRY(WM_MDIDESTROY),
1408 ENTRY(WM_MDIACTIVATE),
1409 ENTRY(WM_MDIRESTORE),
1410 ENTRY(WM_MDINEXT),
1411 ENTRY(WM_MDIMAXIMIZE),
1412 ENTRY(WM_MDITILE),
1413 ENTRY(WM_MDICASCADE),
1414 ENTRY(WM_MDIICONARRANGE),
1415 ENTRY(WM_MDIGETACTIVE),
1416 ENTRY(WM_MDISETMENU),
1417 ENTRY(WM_ENTERSIZEMOVE),
1418 ENTRY(WM_EXITSIZEMOVE),
1419 ENTRY(WM_DROPFILES),
1420 ENTRY(WM_MDIREFRESHMENU),
1421 ENTRY(WM_IME_SETCONTEXT),
1422 ENTRY(WM_IME_NOTIFY),
1423 ENTRY(WM_IME_CONTROL),
1424 ENTRY(WM_IME_COMPOSITIONFULL),
1425 ENTRY(WM_IME_SELECT),
1426 ENTRY(WM_IME_CHAR),
1427 ENTRY(WM_IME_REQUEST),
1428 ENTRY(WM_IME_KEYDOWN),
1429 ENTRY(WM_IME_KEYUP),
1430 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMOUSEHOVER, VirtualModifierKeysParamInfo,
1431 "virtualKeys", XLowWordYHighWordParamInfo,
1432 "mousePos"),
1433 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEHOVER, VirtualModifierKeysParamInfo,
1434 "virtualKeys", XLowWordYHighWordParamInfo,
1435 "mousePos"),
1436 ENTRY_WITH_NO_PARAM_INFO(WM_NCMOUSELEAVE),
1437 ENTRY_WITH_NO_PARAM_INFO(WM_MOUSELEAVE),
1438 ENTRY(WM_CUT),
1439 ENTRY(WM_COPY),
1440 ENTRY(WM_PASTE),
1441 ENTRY(WM_CLEAR),
1442 ENTRY(WM_UNDO),
1443 ENTRY(WM_RENDERFORMAT),
1444 ENTRY(WM_RENDERALLFORMATS),
1445 ENTRY(WM_DESTROYCLIPBOARD),
1446 ENTRY(WM_DRAWCLIPBOARD),
1447 ENTRY(WM_PAINTCLIPBOARD),
1448 ENTRY(WM_VSCROLLCLIPBOARD),
1449 ENTRY(WM_SIZECLIPBOARD),
1450 ENTRY(WM_ASKCBFORMATNAME),
1451 ENTRY(WM_CHANGECBCHAIN),
1452 ENTRY(WM_HSCROLLCLIPBOARD),
1453 ENTRY(WM_QUERYNEWPALETTE),
1454 ENTRY(WM_PALETTEISCHANGING),
1455 ENTRY(WM_PALETTECHANGED),
1456 ENTRY(WM_HOTKEY),
1457 ENTRY(WM_PRINT),
1458 ENTRY(WM_PRINTCLIENT),
1459 ENTRY(WM_THEMECHANGED),
1460 ENTRY(WM_HANDHELDFIRST),
1461 ENTRY(WM_HANDHELDLAST),
1462 ENTRY(WM_AFXFIRST),
1463 ENTRY(WM_AFXLAST),
1464 ENTRY(WM_PENWINFIRST),
1465 ENTRY(WM_PENWINLAST),
1466 ENTRY(WM_APP),
1467 ENTRY_WITH_NO_PARAM_INFO(WM_DWMCOMPOSITIONCHANGED),
1468 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMNCRENDERINGCHANGED, TrueFalseParamInfo,
1469 "DwmNcRendering", nullptr, nullptr),
1470 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMCOLORIZATIONCOLORCHANGED, HexParamInfo,
1471 "color:AARRGGBB", TrueFalseParamInfo,
1472 "isOpaque"),
1473 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMWINDOWMAXIMIZEDCHANGE,
1474 TrueFalseParamInfo, "maximized", nullptr,
1475 nullptr),
1476 ENTRY(WM_DWMSENDICONICTHUMBNAIL), // lParam: HIWORD is x, LOWORD is y
1477 ENTRY_WITH_NO_PARAM_INFO(WM_DWMSENDICONICLIVEPREVIEWBITMAP),
1478 ENTRY(WM_TABLET_QUERYSYSTEMGESTURESTATUS),
1479 ENTRY(WM_GESTURE),
1480 ENTRY(WM_GESTURENOTIFY),
1481 ENTRY(WM_GETTITLEBARINFOEX),
1482 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DPICHANGED, XLowWordYHighWordParamInfo,
1483 "newDPI", RectParamInfo,
1484 "suggestedSizeAndPos"),
1486 #undef ENTRY
1487 #undef ENTRY_WITH_NO_PARAM_INFO
1488 #undef ENTRY_WITH_CUSTOM_PARAM_INFO
1489 #undef ENTRY_WITH_SPLIT_PARAM_INFO
1491 } // namespace mozilla::widget
1493 #ifdef DEBUG
1494 void DDError(const char* msg, HRESULT hr) {
1495 /*XXX make nicer */
1496 MOZ_LOG(gWindowsLog, LogLevel::Error,
1497 ("DirectDraw error %s: 0x%08lx\n", msg, hr));
1499 #endif
1501 #ifdef DEBUG_VK
1502 bool is_vk_down(int vk) {
1503 SHORT st = GetKeyState(vk);
1504 # ifdef DEBUG
1505 MOZ_LOG(gWindowsLog, LogLevel::Info, ("is_vk_down vk=%x st=%x\n", vk, st));
1506 # endif
1507 return (st < 0);
1509 #endif