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