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