Backed out changeset 1410c62b886e (bug 1851518) for causing geckoview failures on...
[gecko.git] / widget / windows / nsWindowDbg.cpp
blobea4820c87d3d18a38e2782b417b6c582e2ac79cf
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 #if WINVER >= 0x0400
424 VALANDNAME_ENTRY(WS_EX_OVERLAPPEDWINDOW),
425 VALANDNAME_ENTRY(WS_EX_PALETTEWINDOW),
426 #endif
427 // regular flags
428 VALANDNAME_ENTRY(WS_EX_DLGMODALFRAME),
429 VALANDNAME_ENTRY(WS_EX_NOPARENTNOTIFY),
430 VALANDNAME_ENTRY(WS_EX_TOPMOST),
431 VALANDNAME_ENTRY(WS_EX_ACCEPTFILES),
432 VALANDNAME_ENTRY(WS_EX_TRANSPARENT),
433 #if WINVER >= 0x0400
434 VALANDNAME_ENTRY(WS_EX_MDICHILD),
435 VALANDNAME_ENTRY(WS_EX_TOOLWINDOW),
436 VALANDNAME_ENTRY(WS_EX_WINDOWEDGE),
437 VALANDNAME_ENTRY(WS_EX_CLIENTEDGE),
438 VALANDNAME_ENTRY(WS_EX_CONTEXTHELP),
439 VALANDNAME_ENTRY(WS_EX_RIGHT),
440 VALANDNAME_ENTRY(WS_EX_LEFT),
441 VALANDNAME_ENTRY(WS_EX_RTLREADING),
442 VALANDNAME_ENTRY(WS_EX_LTRREADING),
443 VALANDNAME_ENTRY(WS_EX_LEFTSCROLLBAR),
444 VALANDNAME_ENTRY(WS_EX_RIGHTSCROLLBAR),
445 VALANDNAME_ENTRY(WS_EX_CONTROLPARENT),
446 VALANDNAME_ENTRY(WS_EX_STATICEDGE),
447 VALANDNAME_ENTRY(WS_EX_APPWINDOW),
448 #endif
449 #if _WIN32_WINNT >= 0x0500
450 VALANDNAME_ENTRY(WS_EX_LAYERED),
451 VALANDNAME_ENTRY(WS_EX_NOINHERITLAYOUT),
452 VALANDNAME_ENTRY(WS_EX_LAYOUTRTL),
453 VALANDNAME_ENTRY(WS_EX_NOACTIVATE),
454 #endif
455 #if _WIN32_WINNT >= 0x0501
456 VALANDNAME_ENTRY(WS_EX_COMPOSITED),
457 #endif
458 #if WINVER >= 0x0602
459 VALANDNAME_ENTRY(WS_EX_NOREDIRECTIONBITMAP),
460 #endif
462 AppendFlagsInfo(str, createStruct->dwExStyle, extendedWindowStyles,
463 "dwExStyle");
466 void XLowWordYHighWordParamInfo(nsCString& str, uint64_t value,
467 const char* name, bool /* isPreCall */) {
468 str.AppendPrintf("%s: x=%d y=%d", name, static_cast<int>(LOWORD(value)),
469 static_cast<int>(HIWORD(value)));
472 void PointParamInfo(nsCString& str, uint64_t value, const char* name,
473 bool /* isPreCall */) {
474 str.AppendPrintf("%s: x=%d y=%d", name, static_cast<int>(GET_X_LPARAM(value)),
475 static_cast<int>(GET_Y_LPARAM(value)));
478 void PointExplicitParamInfo(nsCString& str, POINT point, const char* name) {
479 str.AppendPrintf("%s: x=%ld y=%ld", name, point.x, point.y);
482 void PointsParamInfo(nsCString& str, uint64_t value, const char* name,
483 bool /* isPreCall */) {
484 PPOINTS points = reinterpret_cast<PPOINTS>(&value);
485 str.AppendPrintf("%s: x=%d y=%d", name, points->x, points->y);
488 void VirtualKeyParamInfo(nsCString& result, uint64_t param, const char* name,
489 bool /* isPreCall */) {
490 const static std::unordered_map<uint64_t, const char*> virtualKeys{
491 VALANDNAME_ENTRY(VK_LBUTTON),
492 VALANDNAME_ENTRY(VK_RBUTTON),
493 VALANDNAME_ENTRY(VK_CANCEL),
494 VALANDNAME_ENTRY(VK_MBUTTON),
495 VALANDNAME_ENTRY(VK_XBUTTON1),
496 VALANDNAME_ENTRY(VK_XBUTTON2),
497 VALANDNAME_ENTRY(VK_BACK),
498 VALANDNAME_ENTRY(VK_TAB),
499 VALANDNAME_ENTRY(VK_CLEAR),
500 VALANDNAME_ENTRY(VK_RETURN),
501 VALANDNAME_ENTRY(VK_SHIFT),
502 VALANDNAME_ENTRY(VK_CONTROL),
503 VALANDNAME_ENTRY(VK_MENU),
504 VALANDNAME_ENTRY(VK_PAUSE),
505 VALANDNAME_ENTRY(VK_CAPITAL),
506 VALANDNAME_ENTRY(VK_KANA),
507 VALANDNAME_ENTRY(VK_HANGUL),
508 #ifdef VK_IME_ON
509 VALANDNAME_ENTRY(VK_IME_ON),
510 #endif
511 VALANDNAME_ENTRY(VK_JUNJA),
512 VALANDNAME_ENTRY(VK_FINAL),
513 VALANDNAME_ENTRY(VK_HANJA),
514 VALANDNAME_ENTRY(VK_KANJI),
515 #ifdef VK_IME_OFF
516 VALANDNAME_ENTRY(VK_IME_OFF),
517 #endif
518 VALANDNAME_ENTRY(VK_ESCAPE),
519 VALANDNAME_ENTRY(VK_CONVERT),
520 VALANDNAME_ENTRY(VK_NONCONVERT),
521 VALANDNAME_ENTRY(VK_ACCEPT),
522 VALANDNAME_ENTRY(VK_MODECHANGE),
523 VALANDNAME_ENTRY(VK_SPACE),
524 VALANDNAME_ENTRY(VK_PRIOR),
525 VALANDNAME_ENTRY(VK_NEXT),
526 VALANDNAME_ENTRY(VK_END),
527 VALANDNAME_ENTRY(VK_HOME),
528 VALANDNAME_ENTRY(VK_LEFT),
529 VALANDNAME_ENTRY(VK_UP),
530 VALANDNAME_ENTRY(VK_RIGHT),
531 VALANDNAME_ENTRY(VK_DOWN),
532 VALANDNAME_ENTRY(VK_SELECT),
533 VALANDNAME_ENTRY(VK_PRINT),
534 VALANDNAME_ENTRY(VK_EXECUTE),
535 VALANDNAME_ENTRY(VK_SNAPSHOT),
536 VALANDNAME_ENTRY(VK_INSERT),
537 VALANDNAME_ENTRY(VK_DELETE),
538 VALANDNAME_ENTRY(VK_HELP),
539 VALANDNAME_ENTRY(VK_LWIN),
540 VALANDNAME_ENTRY(VK_RWIN),
541 VALANDNAME_ENTRY(VK_APPS),
542 VALANDNAME_ENTRY(VK_SLEEP),
543 VALANDNAME_ENTRY(VK_NUMPAD0),
544 VALANDNAME_ENTRY(VK_NUMPAD1),
545 VALANDNAME_ENTRY(VK_NUMPAD2),
546 VALANDNAME_ENTRY(VK_NUMPAD3),
547 VALANDNAME_ENTRY(VK_NUMPAD4),
548 VALANDNAME_ENTRY(VK_NUMPAD5),
549 VALANDNAME_ENTRY(VK_NUMPAD6),
550 VALANDNAME_ENTRY(VK_NUMPAD7),
551 VALANDNAME_ENTRY(VK_NUMPAD8),
552 VALANDNAME_ENTRY(VK_NUMPAD9),
553 VALANDNAME_ENTRY(VK_MULTIPLY),
554 VALANDNAME_ENTRY(VK_ADD),
555 VALANDNAME_ENTRY(VK_SEPARATOR),
556 VALANDNAME_ENTRY(VK_SUBTRACT),
557 VALANDNAME_ENTRY(VK_DECIMAL),
558 VALANDNAME_ENTRY(VK_DIVIDE),
559 VALANDNAME_ENTRY(VK_F1),
560 VALANDNAME_ENTRY(VK_F2),
561 VALANDNAME_ENTRY(VK_F3),
562 VALANDNAME_ENTRY(VK_F4),
563 VALANDNAME_ENTRY(VK_F5),
564 VALANDNAME_ENTRY(VK_F6),
565 VALANDNAME_ENTRY(VK_F7),
566 VALANDNAME_ENTRY(VK_F8),
567 VALANDNAME_ENTRY(VK_F9),
568 VALANDNAME_ENTRY(VK_F10),
569 VALANDNAME_ENTRY(VK_F11),
570 VALANDNAME_ENTRY(VK_F12),
571 VALANDNAME_ENTRY(VK_F13),
572 VALANDNAME_ENTRY(VK_F14),
573 VALANDNAME_ENTRY(VK_F15),
574 VALANDNAME_ENTRY(VK_F16),
575 VALANDNAME_ENTRY(VK_F17),
576 VALANDNAME_ENTRY(VK_F18),
577 VALANDNAME_ENTRY(VK_F19),
578 VALANDNAME_ENTRY(VK_F20),
579 VALANDNAME_ENTRY(VK_F21),
580 VALANDNAME_ENTRY(VK_F22),
581 VALANDNAME_ENTRY(VK_F23),
582 VALANDNAME_ENTRY(VK_F24),
583 VALANDNAME_ENTRY(VK_NUMLOCK),
584 VALANDNAME_ENTRY(VK_SCROLL),
585 VALANDNAME_ENTRY(VK_LSHIFT),
586 VALANDNAME_ENTRY(VK_RSHIFT),
587 VALANDNAME_ENTRY(VK_LCONTROL),
588 VALANDNAME_ENTRY(VK_RCONTROL),
589 VALANDNAME_ENTRY(VK_LMENU),
590 VALANDNAME_ENTRY(VK_RMENU),
591 VALANDNAME_ENTRY(VK_BROWSER_BACK),
592 VALANDNAME_ENTRY(VK_BROWSER_FORWARD),
593 VALANDNAME_ENTRY(VK_BROWSER_REFRESH),
594 VALANDNAME_ENTRY(VK_BROWSER_STOP),
595 VALANDNAME_ENTRY(VK_BROWSER_SEARCH),
596 VALANDNAME_ENTRY(VK_BROWSER_FAVORITES),
597 VALANDNAME_ENTRY(VK_BROWSER_HOME),
598 VALANDNAME_ENTRY(VK_VOLUME_MUTE),
599 VALANDNAME_ENTRY(VK_VOLUME_DOWN),
600 VALANDNAME_ENTRY(VK_VOLUME_UP),
601 VALANDNAME_ENTRY(VK_MEDIA_NEXT_TRACK),
602 VALANDNAME_ENTRY(VK_MEDIA_PREV_TRACK),
603 VALANDNAME_ENTRY(VK_MEDIA_STOP),
604 VALANDNAME_ENTRY(VK_MEDIA_PLAY_PAUSE),
605 VALANDNAME_ENTRY(VK_LAUNCH_MAIL),
606 VALANDNAME_ENTRY(VK_LAUNCH_MEDIA_SELECT),
607 VALANDNAME_ENTRY(VK_LAUNCH_APP1),
608 VALANDNAME_ENTRY(VK_LAUNCH_APP2),
609 VALANDNAME_ENTRY(VK_OEM_1),
610 VALANDNAME_ENTRY(VK_OEM_PLUS),
611 VALANDNAME_ENTRY(VK_OEM_COMMA),
612 VALANDNAME_ENTRY(VK_OEM_MINUS),
613 VALANDNAME_ENTRY(VK_OEM_PERIOD),
614 VALANDNAME_ENTRY(VK_OEM_2),
615 VALANDNAME_ENTRY(VK_OEM_3),
616 VALANDNAME_ENTRY(VK_OEM_4),
617 VALANDNAME_ENTRY(VK_OEM_5),
618 VALANDNAME_ENTRY(VK_OEM_6),
619 VALANDNAME_ENTRY(VK_OEM_7),
620 VALANDNAME_ENTRY(VK_OEM_8),
621 VALANDNAME_ENTRY(VK_OEM_102),
622 VALANDNAME_ENTRY(VK_PROCESSKEY),
623 VALANDNAME_ENTRY(VK_PACKET),
624 VALANDNAME_ENTRY(VK_ATTN),
625 VALANDNAME_ENTRY(VK_CRSEL),
626 VALANDNAME_ENTRY(VK_EXSEL),
627 VALANDNAME_ENTRY(VK_EREOF),
628 VALANDNAME_ENTRY(VK_PLAY),
629 VALANDNAME_ENTRY(VK_ZOOM),
630 VALANDNAME_ENTRY(VK_NONAME),
631 VALANDNAME_ENTRY(VK_PA1),
632 VALANDNAME_ENTRY(VK_OEM_CLEAR),
633 {0x30, "0"},
634 {0x31, "1"},
635 {0x32, "2"},
636 {0x33, "3"},
637 {0x34, "4"},
638 {0x35, "5"},
639 {0x36, "6"},
640 {0x37, "7"},
641 {0x38, "8"},
642 {0x39, "9"},
643 {0x41, "A"},
644 {0x42, "B"},
645 {0x43, "C"},
646 {0x44, "D"},
647 {0x45, "E"},
648 {0x46, "F"},
649 {0x47, "G"},
650 {0x48, "H"},
651 {0x49, "I"},
652 {0x4A, "J"},
653 {0x4B, "K"},
654 {0x4C, "L"},
655 {0x4D, "M"},
656 {0x4E, "N"},
657 {0x4F, "O"},
658 {0x50, "P"},
659 {0x51, "Q"},
660 {0x52, "S"},
661 {0x53, "T"},
662 {0x54, "U"},
663 {0x55, "V"},
664 {0x56, "W"},
665 {0x57, "X"},
666 {0x58, "Y"},
667 {0x59, "Z"},
669 AppendEnumValueInfo(result, param, virtualKeys, name);
672 void VirtualModifierKeysParamInfo(nsCString& result, uint64_t param,
673 const char* name, bool /* isPreCall */) {
674 const static nsTArray<EnumValueAndName> virtualKeys{
675 VALANDNAME_ENTRY(MK_CONTROL), VALANDNAME_ENTRY(MK_LBUTTON),
676 VALANDNAME_ENTRY(MK_MBUTTON), VALANDNAME_ENTRY(MK_RBUTTON),
677 VALANDNAME_ENTRY(MK_SHIFT), VALANDNAME_ENTRY(MK_XBUTTON1),
678 VALANDNAME_ENTRY(MK_XBUTTON2), {0, "(none)"}};
679 AppendFlagsInfo(result, param, virtualKeys, name);
682 void ParentNotifyEventParamInfo(nsCString& str, uint64_t param,
683 const char* /* name */, bool /* isPreCall */) {
684 const static std::unordered_map<uint64_t, const char*> eventValues{
685 VALANDNAME_ENTRY(WM_CREATE), VALANDNAME_ENTRY(WM_DESTROY),
686 VALANDNAME_ENTRY(WM_LBUTTONDOWN), VALANDNAME_ENTRY(WM_MBUTTONDOWN),
687 VALANDNAME_ENTRY(WM_RBUTTONDOWN), VALANDNAME_ENTRY(WM_XBUTTONDOWN),
688 VALANDNAME_ENTRY(WM_POINTERDOWN)};
689 AppendEnumValueInfo(str, LOWORD(param), eventValues, "event");
690 str.AppendASCII(" ");
691 HexParamInfo(str, HIWORD(param), "hiWord", false);
694 void KeystrokeFlagsParamInfo(nsCString& str, uint64_t param,
695 const char* /* name */, bool /* isPreCall */) {
696 WORD repeatCount = LOWORD(param);
697 WORD keyFlags = HIWORD(param);
698 WORD scanCode = LOBYTE(keyFlags);
699 bool isExtendedKey = (keyFlags & KF_EXTENDED) == KF_EXTENDED;
700 if (isExtendedKey) {
701 scanCode = MAKEWORD(scanCode, 0xE0);
703 bool contextCode = (keyFlags & KF_ALTDOWN) == KF_ALTDOWN;
704 bool wasKeyDown = (keyFlags & KF_REPEAT) == KF_REPEAT;
705 bool transitionState = (keyFlags & KF_UP) == KF_UP;
707 str.AppendPrintf(
708 "repeatCount: %d scanCode: %d isExtended: %d, contextCode: %d "
709 "previousKeyState: %d transitionState: %d",
710 repeatCount, scanCode, isExtendedKey ? 1 : 0, contextCode ? 1 : 0,
711 wasKeyDown ? 1 : 0, transitionState ? 1 : 0);
714 void VirtualKeysLowWordDistanceHighWordParamInfo(nsCString& str, uint64_t value,
715 const char* /* name */,
716 bool isPreCall) {
717 VirtualModifierKeysParamInfo(str, LOWORD(value), "virtualKeys", isPreCall);
718 str.AppendASCII(" ");
719 IntParamInfo(str, HIWORD(value), "distance", isPreCall);
722 void ShowWindowReasonParamInfo(nsCString& str, uint64_t value, const char* name,
723 bool /* isPreCall */) {
724 const static std::unordered_map<uint64_t, const char*> showWindowReasonValues{
725 VALANDNAME_ENTRY(SW_OTHERUNZOOM),
726 VALANDNAME_ENTRY(SW_OTHERZOOM),
727 VALANDNAME_ENTRY(SW_PARENTCLOSING),
728 VALANDNAME_ENTRY(SW_PARENTOPENING),
729 {0, "Call to ShowWindow()"}};
730 AppendEnumValueInfo(str, value, showWindowReasonValues, name);
733 void WindowEdgeParamInfo(nsCString& str, uint64_t value, const char* name,
734 bool /* isPreCall */) {
735 const static std::unordered_map<uint64_t, const char*> windowEdgeValues{
736 VALANDNAME_ENTRY(WMSZ_BOTTOM), VALANDNAME_ENTRY(WMSZ_BOTTOMLEFT),
737 VALANDNAME_ENTRY(WMSZ_BOTTOMRIGHT), VALANDNAME_ENTRY(WMSZ_LEFT),
738 VALANDNAME_ENTRY(WMSZ_RIGHT), VALANDNAME_ENTRY(WMSZ_TOP),
739 VALANDNAME_ENTRY(WMSZ_TOPLEFT), VALANDNAME_ENTRY(WMSZ_TOPRIGHT)};
740 AppendEnumValueInfo(str, value, windowEdgeValues, name);
743 void UiActionParamInfo(nsCString& str, uint64_t value, const char* name,
744 bool /* isPreCall */) {
745 const static std::unordered_map<uint64_t, const char*> uiActionValues {
746 VALANDNAME_ENTRY(SPI_GETACCESSTIMEOUT),
747 VALANDNAME_ENTRY(SPI_GETAUDIODESCRIPTION),
748 VALANDNAME_ENTRY(SPI_GETCLIENTAREAANIMATION),
749 VALANDNAME_ENTRY(SPI_GETDISABLEOVERLAPPEDCONTENT),
750 VALANDNAME_ENTRY(SPI_GETFILTERKEYS),
751 VALANDNAME_ENTRY(SPI_GETFOCUSBORDERHEIGHT),
752 VALANDNAME_ENTRY(SPI_GETFOCUSBORDERWIDTH),
753 VALANDNAME_ENTRY(SPI_GETHIGHCONTRAST),
754 #if WINVER >= 0x602
755 VALANDNAME_ENTRY(SPI_GETLOGICALDPIOVERRIDE),
756 VALANDNAME_ENTRY(SPI_SETLOGICALDPIOVERRIDE),
757 #endif
758 VALANDNAME_ENTRY(SPI_GETMESSAGEDURATION),
759 VALANDNAME_ENTRY(SPI_GETMOUSECLICKLOCK),
760 VALANDNAME_ENTRY(SPI_GETMOUSECLICKLOCKTIME),
761 VALANDNAME_ENTRY(SPI_GETMOUSEKEYS), VALANDNAME_ENTRY(SPI_GETMOUSESONAR),
762 VALANDNAME_ENTRY(SPI_GETMOUSEVANISH),
763 VALANDNAME_ENTRY(SPI_GETSCREENREADER),
764 VALANDNAME_ENTRY(SPI_GETSERIALKEYS),
765 VALANDNAME_ENTRY(SPI_GETSHOWSOUNDS),
766 VALANDNAME_ENTRY(SPI_GETSOUNDSENTRY),
767 VALANDNAME_ENTRY(SPI_GETSTICKYKEYS),
768 VALANDNAME_ENTRY(SPI_GETTOGGLEKEYS),
769 VALANDNAME_ENTRY(SPI_SETACCESSTIMEOUT),
770 VALANDNAME_ENTRY(SPI_SETAUDIODESCRIPTION),
771 VALANDNAME_ENTRY(SPI_SETCLIENTAREAANIMATION),
772 VALANDNAME_ENTRY(SPI_SETDISABLEOVERLAPPEDCONTENT),
773 VALANDNAME_ENTRY(SPI_SETFILTERKEYS),
774 VALANDNAME_ENTRY(SPI_SETFOCUSBORDERHEIGHT),
775 VALANDNAME_ENTRY(SPI_SETFOCUSBORDERWIDTH),
776 VALANDNAME_ENTRY(SPI_SETHIGHCONTRAST),
777 VALANDNAME_ENTRY(SPI_SETMESSAGEDURATION),
778 VALANDNAME_ENTRY(SPI_SETMOUSECLICKLOCK),
779 VALANDNAME_ENTRY(SPI_SETMOUSECLICKLOCKTIME),
780 VALANDNAME_ENTRY(SPI_SETMOUSEKEYS), VALANDNAME_ENTRY(SPI_SETMOUSESONAR),
781 VALANDNAME_ENTRY(SPI_SETMOUSEVANISH),
782 VALANDNAME_ENTRY(SPI_SETSCREENREADER),
783 VALANDNAME_ENTRY(SPI_SETSERIALKEYS),
784 VALANDNAME_ENTRY(SPI_SETSHOWSOUNDS),
785 VALANDNAME_ENTRY(SPI_SETSOUNDSENTRY),
786 VALANDNAME_ENTRY(SPI_SETSTICKYKEYS),
787 VALANDNAME_ENTRY(SPI_SETTOGGLEKEYS), VALANDNAME_ENTRY(SPI_GETCLEARTYPE),
788 VALANDNAME_ENTRY(SPI_GETDESKWALLPAPER),
789 VALANDNAME_ENTRY(SPI_GETDROPSHADOW), VALANDNAME_ENTRY(SPI_GETFLATMENU),
790 VALANDNAME_ENTRY(SPI_GETFONTSMOOTHING),
791 VALANDNAME_ENTRY(SPI_GETFONTSMOOTHINGCONTRAST),
792 VALANDNAME_ENTRY(SPI_GETFONTSMOOTHINGORIENTATION),
793 VALANDNAME_ENTRY(SPI_GETFONTSMOOTHINGTYPE),
794 VALANDNAME_ENTRY(SPI_GETWORKAREA), VALANDNAME_ENTRY(SPI_SETCLEARTYPE),
795 VALANDNAME_ENTRY(SPI_SETCURSORS), VALANDNAME_ENTRY(SPI_SETDESKPATTERN),
796 VALANDNAME_ENTRY(SPI_SETDESKWALLPAPER),
797 VALANDNAME_ENTRY(SPI_SETDROPSHADOW), VALANDNAME_ENTRY(SPI_SETFLATMENU),
798 VALANDNAME_ENTRY(SPI_SETFONTSMOOTHING),
799 VALANDNAME_ENTRY(SPI_SETFONTSMOOTHINGCONTRAST),
800 VALANDNAME_ENTRY(SPI_SETFONTSMOOTHINGORIENTATION),
801 VALANDNAME_ENTRY(SPI_SETFONTSMOOTHINGTYPE),
802 VALANDNAME_ENTRY(SPI_SETWORKAREA), VALANDNAME_ENTRY(SPI_GETICONMETRICS),
803 VALANDNAME_ENTRY(SPI_GETICONTITLELOGFONT),
804 VALANDNAME_ENTRY(SPI_GETICONTITLEWRAP),
805 VALANDNAME_ENTRY(SPI_ICONHORIZONTALSPACING),
806 VALANDNAME_ENTRY(SPI_ICONVERTICALSPACING),
807 VALANDNAME_ENTRY(SPI_SETICONMETRICS), VALANDNAME_ENTRY(SPI_SETICONS),
808 VALANDNAME_ENTRY(SPI_SETICONTITLELOGFONT),
809 VALANDNAME_ENTRY(SPI_SETICONTITLEWRAP), VALANDNAME_ENTRY(SPI_GETBEEP),
810 VALANDNAME_ENTRY(SPI_GETBLOCKSENDINPUTRESETS),
811 #if WINVER >= 0x602
812 VALANDNAME_ENTRY(SPI_GETCONTACTVISUALIZATION),
813 VALANDNAME_ENTRY(SPI_SETCONTACTVISUALIZATION),
814 #endif
815 VALANDNAME_ENTRY(SPI_GETDEFAULTINPUTLANG),
816 #if WINVER >= 0x602
817 VALANDNAME_ENTRY(SPI_GETGESTUREVISUALIZATION),
818 VALANDNAME_ENTRY(SPI_SETGESTUREVISUALIZATION),
819 #endif
820 VALANDNAME_ENTRY(SPI_GETKEYBOARDCUES),
821 VALANDNAME_ENTRY(SPI_GETKEYBOARDDELAY),
822 VALANDNAME_ENTRY(SPI_GETKEYBOARDPREF),
823 VALANDNAME_ENTRY(SPI_GETKEYBOARDSPEED), VALANDNAME_ENTRY(SPI_GETMOUSE),
824 VALANDNAME_ENTRY(SPI_GETMOUSEHOVERHEIGHT),
825 VALANDNAME_ENTRY(SPI_GETMOUSEHOVERTIME),
826 VALANDNAME_ENTRY(SPI_GETMOUSEHOVERWIDTH),
827 VALANDNAME_ENTRY(SPI_GETMOUSESPEED),
828 VALANDNAME_ENTRY(SPI_GETMOUSETRAILS),
829 #if WINVER >= 0x602
830 VALANDNAME_ENTRY(SPI_GETMOUSEWHEELROUTING),
831 VALANDNAME_ENTRY(SPI_SETMOUSEWHEELROUTING),
832 #endif
833 #if WINVER >= 0x604
834 VALANDNAME_ENTRY(SPI_GETPENVISUALIZATION),
835 VALANDNAME_ENTRY(SPI_SETPENVISUALIZATION),
836 #endif
837 VALANDNAME_ENTRY(SPI_GETSNAPTODEFBUTTON),
838 #if WINVER >= 0x601
839 VALANDNAME_ENTRY(SPI_GETSYSTEMLANGUAGEBAR),
840 VALANDNAME_ENTRY(SPI_SETSYSTEMLANGUAGEBAR),
841 VALANDNAME_ENTRY(SPI_GETTHREADLOCALINPUTSETTINGS),
842 VALANDNAME_ENTRY(SPI_SETTHREADLOCALINPUTSETTINGS),
843 #endif
844 VALANDNAME_ENTRY(SPI_GETWHEELSCROLLCHARS),
845 VALANDNAME_ENTRY(SPI_GETWHEELSCROLLLINES),
846 VALANDNAME_ENTRY(SPI_SETBEEP),
847 VALANDNAME_ENTRY(SPI_SETBLOCKSENDINPUTRESETS),
848 VALANDNAME_ENTRY(SPI_SETDEFAULTINPUTLANG),
849 VALANDNAME_ENTRY(SPI_SETDOUBLECLICKTIME),
850 VALANDNAME_ENTRY(SPI_SETDOUBLECLKHEIGHT),
851 VALANDNAME_ENTRY(SPI_SETDOUBLECLKWIDTH),
852 VALANDNAME_ENTRY(SPI_SETKEYBOARDCUES),
853 VALANDNAME_ENTRY(SPI_SETKEYBOARDDELAY),
854 VALANDNAME_ENTRY(SPI_SETKEYBOARDPREF),
855 VALANDNAME_ENTRY(SPI_SETKEYBOARDSPEED),
856 VALANDNAME_ENTRY(SPI_SETLANGTOGGLE), VALANDNAME_ENTRY(SPI_SETMOUSE),
857 VALANDNAME_ENTRY(SPI_SETMOUSEBUTTONSWAP),
858 VALANDNAME_ENTRY(SPI_SETMOUSEHOVERHEIGHT),
859 VALANDNAME_ENTRY(SPI_SETMOUSEHOVERTIME),
860 VALANDNAME_ENTRY(SPI_SETMOUSEHOVERWIDTH),
861 VALANDNAME_ENTRY(SPI_SETMOUSESPEED),
862 VALANDNAME_ENTRY(SPI_SETMOUSETRAILS),
863 VALANDNAME_ENTRY(SPI_SETSNAPTODEFBUTTON),
864 VALANDNAME_ENTRY(SPI_SETWHEELSCROLLCHARS),
865 VALANDNAME_ENTRY(SPI_SETWHEELSCROLLLINES),
866 VALANDNAME_ENTRY(SPI_GETMENUDROPALIGNMENT),
867 VALANDNAME_ENTRY(SPI_GETMENUFADE),
868 VALANDNAME_ENTRY(SPI_GETMENUSHOWDELAY),
869 VALANDNAME_ENTRY(SPI_SETMENUDROPALIGNMENT),
870 VALANDNAME_ENTRY(SPI_SETMENUFADE),
871 VALANDNAME_ENTRY(SPI_SETMENUSHOWDELAY),
872 VALANDNAME_ENTRY(SPI_GETLOWPOWERACTIVE),
873 VALANDNAME_ENTRY(SPI_GETLOWPOWERTIMEOUT),
874 VALANDNAME_ENTRY(SPI_GETPOWEROFFACTIVE),
875 VALANDNAME_ENTRY(SPI_GETPOWEROFFTIMEOUT),
876 VALANDNAME_ENTRY(SPI_SETLOWPOWERACTIVE),
877 VALANDNAME_ENTRY(SPI_SETLOWPOWERTIMEOUT),
878 VALANDNAME_ENTRY(SPI_SETPOWEROFFACTIVE),
879 VALANDNAME_ENTRY(SPI_SETPOWEROFFTIMEOUT),
880 VALANDNAME_ENTRY(SPI_GETSCREENSAVEACTIVE),
881 VALANDNAME_ENTRY(SPI_GETSCREENSAVERRUNNING),
882 VALANDNAME_ENTRY(SPI_GETSCREENSAVESECURE),
883 VALANDNAME_ENTRY(SPI_GETSCREENSAVETIMEOUT),
884 VALANDNAME_ENTRY(SPI_SETSCREENSAVEACTIVE),
885 VALANDNAME_ENTRY(SPI_SETSCREENSAVERRUNNING),
886 VALANDNAME_ENTRY(SPI_SETSCREENSAVESECURE),
887 VALANDNAME_ENTRY(SPI_SETSCREENSAVETIMEOUT),
888 VALANDNAME_ENTRY(SPI_GETHUNGAPPTIMEOUT),
889 VALANDNAME_ENTRY(SPI_GETWAITTOKILLTIMEOUT),
890 VALANDNAME_ENTRY(SPI_GETWAITTOKILLSERVICETIMEOUT),
891 VALANDNAME_ENTRY(SPI_SETHUNGAPPTIMEOUT),
892 VALANDNAME_ENTRY(SPI_SETWAITTOKILLTIMEOUT),
893 VALANDNAME_ENTRY(SPI_SETWAITTOKILLSERVICETIMEOUT),
894 VALANDNAME_ENTRY(SPI_GETCOMBOBOXANIMATION),
895 VALANDNAME_ENTRY(SPI_GETCURSORSHADOW),
896 VALANDNAME_ENTRY(SPI_GETGRADIENTCAPTIONS),
897 VALANDNAME_ENTRY(SPI_GETHOTTRACKING),
898 VALANDNAME_ENTRY(SPI_GETLISTBOXSMOOTHSCROLLING),
899 VALANDNAME_ENTRY(SPI_GETMENUANIMATION),
900 VALANDNAME_ENTRY(SPI_GETMENUUNDERLINES),
901 VALANDNAME_ENTRY(SPI_GETSELECTIONFADE),
902 VALANDNAME_ENTRY(SPI_GETTOOLTIPANIMATION),
903 VALANDNAME_ENTRY(SPI_GETTOOLTIPFADE),
904 VALANDNAME_ENTRY(SPI_GETUIEFFECTS),
905 VALANDNAME_ENTRY(SPI_SETCOMBOBOXANIMATION),
906 VALANDNAME_ENTRY(SPI_SETCURSORSHADOW),
907 VALANDNAME_ENTRY(SPI_SETGRADIENTCAPTIONS),
908 VALANDNAME_ENTRY(SPI_SETHOTTRACKING),
909 VALANDNAME_ENTRY(SPI_SETLISTBOXSMOOTHSCROLLING),
910 VALANDNAME_ENTRY(SPI_SETMENUANIMATION),
911 VALANDNAME_ENTRY(SPI_SETMENUUNDERLINES),
912 VALANDNAME_ENTRY(SPI_SETSELECTIONFADE),
913 VALANDNAME_ENTRY(SPI_SETTOOLTIPANIMATION),
914 VALANDNAME_ENTRY(SPI_SETTOOLTIPFADE),
915 VALANDNAME_ENTRY(SPI_SETUIEFFECTS),
916 VALANDNAME_ENTRY(SPI_GETACTIVEWINDOWTRACKING),
917 VALANDNAME_ENTRY(SPI_GETACTIVEWNDTRKZORDER),
918 VALANDNAME_ENTRY(SPI_GETACTIVEWNDTRKTIMEOUT),
919 VALANDNAME_ENTRY(SPI_GETANIMATION), VALANDNAME_ENTRY(SPI_GETBORDER),
920 VALANDNAME_ENTRY(SPI_GETCARETWIDTH),
921 VALANDNAME_ENTRY(SPI_GETDOCKMOVING),
922 VALANDNAME_ENTRY(SPI_GETDRAGFROMMAXIMIZE),
923 VALANDNAME_ENTRY(SPI_GETDRAGFULLWINDOWS),
924 VALANDNAME_ENTRY(SPI_GETFOREGROUNDFLASHCOUNT),
925 VALANDNAME_ENTRY(SPI_GETFOREGROUNDLOCKTIMEOUT),
926 VALANDNAME_ENTRY(SPI_GETMINIMIZEDMETRICS),
927 VALANDNAME_ENTRY(SPI_GETMOUSEDOCKTHRESHOLD),
928 VALANDNAME_ENTRY(SPI_GETMOUSEDRAGOUTTHRESHOLD),
929 VALANDNAME_ENTRY(SPI_GETMOUSESIDEMOVETHRESHOLD),
930 VALANDNAME_ENTRY(SPI_GETNONCLIENTMETRICS),
931 VALANDNAME_ENTRY(SPI_GETPENDOCKTHRESHOLD),
932 VALANDNAME_ENTRY(SPI_GETPENDRAGOUTTHRESHOLD),
933 VALANDNAME_ENTRY(SPI_GETPENSIDEMOVETHRESHOLD),
934 VALANDNAME_ENTRY(SPI_GETSHOWIMEUI), VALANDNAME_ENTRY(SPI_GETSNAPSIZING),
935 VALANDNAME_ENTRY(SPI_GETWINARRANGING),
936 VALANDNAME_ENTRY(SPI_SETACTIVEWINDOWTRACKING),
937 VALANDNAME_ENTRY(SPI_SETACTIVEWNDTRKZORDER),
938 VALANDNAME_ENTRY(SPI_SETACTIVEWNDTRKTIMEOUT),
939 VALANDNAME_ENTRY(SPI_SETANIMATION), 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), VALANDNAME_ENTRY(SPI_SETSNAPSIZING),
955 VALANDNAME_ENTRY(SPI_SETWINARRANGING),
957 AppendEnumValueInfo(str, value, uiActionValues, name);
960 nsAutoCString WmSizeParamInfo(uint64_t wParam, uint64_t lParam,
961 bool /* isPreCall */) {
962 nsAutoCString result;
963 const static std::unordered_map<uint64_t, const char*> sizeValues{
964 VALANDNAME_ENTRY(SIZE_RESTORED), VALANDNAME_ENTRY(SIZE_MINIMIZED),
965 VALANDNAME_ENTRY(SIZE_MAXIMIZED), VALANDNAME_ENTRY(SIZE_MAXSHOW),
966 VALANDNAME_ENTRY(SIZE_MAXHIDE)};
967 AppendEnumValueInfo(result, wParam, sizeValues, "size");
968 result.AppendPrintf(" width=%d height=%d", static_cast<int>(LOWORD(lParam)),
969 static_cast<int>(HIWORD(lParam)));
970 return result;
973 const nsTArray<EnumValueAndName> windowPositionFlags = {
974 VALANDNAME_ENTRY(SWP_DRAWFRAME), VALANDNAME_ENTRY(SWP_HIDEWINDOW),
975 VALANDNAME_ENTRY(SWP_NOACTIVATE), VALANDNAME_ENTRY(SWP_NOCOPYBITS),
976 VALANDNAME_ENTRY(SWP_NOMOVE), VALANDNAME_ENTRY(SWP_NOOWNERZORDER),
977 VALANDNAME_ENTRY(SWP_NOREDRAW), VALANDNAME_ENTRY(SWP_NOSENDCHANGING),
978 VALANDNAME_ENTRY(SWP_NOSIZE), VALANDNAME_ENTRY(SWP_NOZORDER),
979 VALANDNAME_ENTRY(SWP_SHOWWINDOW),
982 void WindowPosParamInfo(nsCString& str, uint64_t value, const char* name,
983 bool /* isPreCall */) {
984 LPWINDOWPOS windowPos = reinterpret_cast<LPWINDOWPOS>(value);
985 if (windowPos == nullptr) {
986 str.AppendASCII("null windowPos?");
987 return;
989 HexParamInfo(str, reinterpret_cast<uint64_t>(windowPos->hwnd), "hwnd", false);
990 str.AppendASCII(" ");
991 HexParamInfo(str, reinterpret_cast<uint64_t>(windowPos->hwndInsertAfter),
992 "hwndInsertAfter", false);
993 str.AppendASCII(" ");
994 IntParamInfo(str, windowPos->x, "x", false);
995 str.AppendASCII(" ");
996 IntParamInfo(str, windowPos->y, "y", false);
997 str.AppendASCII(" ");
998 IntParamInfo(str, windowPos->cx, "cx", false);
999 str.AppendASCII(" ");
1000 IntParamInfo(str, windowPos->cy, "cy", false);
1001 str.AppendASCII(" ");
1002 AppendFlagsInfo(str, windowPos->flags, windowPositionFlags, "flags");
1005 void StyleOrExtendedParamInfo(nsCString& str, uint64_t value, const char* name,
1006 bool /* isPreCall */) {
1007 const static std::unordered_map<uint64_t, const char*> styleOrExtended{
1008 VALANDNAME_ENTRY(GWL_EXSTYLE), VALANDNAME_ENTRY(GWL_STYLE)};
1009 AppendEnumValueInfo(str, value, styleOrExtended, name);
1012 void StyleStructParamInfo(nsCString& str, uint64_t value, const char* name,
1013 bool /* isPreCall */) {
1014 LPSTYLESTRUCT styleStruct = reinterpret_cast<LPSTYLESTRUCT>(value);
1015 if (styleStruct == nullptr) {
1016 str.AppendASCII("null STYLESTRUCT?");
1017 return;
1019 HexParamInfo(str, styleStruct->styleOld, "styleOld", false);
1020 str.AppendASCII(" ");
1021 HexParamInfo(str, styleStruct->styleNew, "styleNew", false);
1024 void NcCalcSizeParamsParamInfo(nsCString& str, uint64_t value, const char* name,
1025 bool /* isPreCall */) {
1026 LPNCCALCSIZE_PARAMS params = reinterpret_cast<LPNCCALCSIZE_PARAMS>(value);
1027 if (params == nullptr) {
1028 str.AppendASCII("null NCCALCSIZE_PARAMS?");
1029 return;
1031 str.AppendPrintf("%s[0]: ", name);
1032 RectParamInfo(str, reinterpret_cast<uintptr_t>(&params->rgrc[0]), nullptr,
1033 false);
1034 str.AppendPrintf(" %s[1]: ", name);
1035 RectParamInfo(str, reinterpret_cast<uintptr_t>(&params->rgrc[1]), nullptr,
1036 false);
1037 str.AppendPrintf(" %s[2]: ", name);
1038 RectParamInfo(str, reinterpret_cast<uintptr_t>(&params->rgrc[2]), nullptr,
1039 false);
1040 str.AppendASCII(" ");
1041 WindowPosParamInfo(str, reinterpret_cast<uintptr_t>(params->lppos), nullptr,
1042 false);
1045 nsAutoCString WmNcCalcSizeParamInfo(uint64_t wParam, uint64_t lParam,
1046 bool /* isPreCall */) {
1047 nsAutoCString result;
1048 TrueFalseParamInfo(result, wParam, "shouldIndicateValidArea", false);
1049 result.AppendASCII(" ");
1050 if (wParam == TRUE) {
1051 NcCalcSizeParamsParamInfo(result, lParam, "ncCalcSizeParams", false);
1052 } else {
1053 RectParamInfo(result, lParam, "rect", false);
1055 return result;
1058 void ActivateWParamInfo(nsCString& result, uint64_t wParam, const char* name,
1059 bool /* isPreCall */) {
1060 const static std::unordered_map<uint64_t, const char*> activateValues{
1061 VALANDNAME_ENTRY(WA_ACTIVE), VALANDNAME_ENTRY(WA_CLICKACTIVE),
1062 VALANDNAME_ENTRY(WA_INACTIVE)};
1063 AppendEnumValueInfo(result, wParam, activateValues, name);
1066 void HitTestParamInfo(nsCString& result, uint64_t param, const char* name,
1067 bool /* isPreCall */) {
1068 const static std::unordered_map<uint64_t, const char*> hitTestResults{
1069 VALANDNAME_ENTRY(HTBORDER), VALANDNAME_ENTRY(HTBOTTOM),
1070 VALANDNAME_ENTRY(HTBOTTOMLEFT), VALANDNAME_ENTRY(HTBOTTOMRIGHT),
1071 VALANDNAME_ENTRY(HTCAPTION), VALANDNAME_ENTRY(HTCLIENT),
1072 VALANDNAME_ENTRY(HTCLOSE), VALANDNAME_ENTRY(HTERROR),
1073 VALANDNAME_ENTRY(HTGROWBOX), VALANDNAME_ENTRY(HTHELP),
1074 VALANDNAME_ENTRY(HTHSCROLL), VALANDNAME_ENTRY(HTLEFT),
1075 VALANDNAME_ENTRY(HTMENU), VALANDNAME_ENTRY(HTMAXBUTTON),
1076 VALANDNAME_ENTRY(HTMINBUTTON), VALANDNAME_ENTRY(HTNOWHERE),
1077 VALANDNAME_ENTRY(HTREDUCE), VALANDNAME_ENTRY(HTRIGHT),
1078 VALANDNAME_ENTRY(HTSIZE), VALANDNAME_ENTRY(HTSYSMENU),
1079 VALANDNAME_ENTRY(HTTOP), VALANDNAME_ENTRY(HTTOPLEFT),
1080 VALANDNAME_ENTRY(HTTOPRIGHT), VALANDNAME_ENTRY(HTTRANSPARENT),
1081 VALANDNAME_ENTRY(HTVSCROLL), VALANDNAME_ENTRY(HTZOOM),
1083 AppendEnumValueInfo(result, param, hitTestResults, name);
1086 void SetCursorLParamInfo(nsCString& result, uint64_t lParam,
1087 const char* /* name */, bool /* isPreCall */) {
1088 HitTestParamInfo(result, LOWORD(lParam), "hitTestResult", false);
1089 result.AppendASCII(" ");
1090 HexParamInfo(result, HIWORD(lParam), "message", false);
1093 void MinMaxInfoParamInfo(nsCString& result, uint64_t value,
1094 const char* /* name */, bool /* isPreCall */) {
1095 PMINMAXINFO minMaxInfo = reinterpret_cast<PMINMAXINFO>(value);
1096 if (minMaxInfo == nullptr) {
1097 result.AppendPrintf("NULL minMaxInfo?");
1098 return;
1100 PointExplicitParamInfo(result, minMaxInfo->ptMaxSize, "maxSize");
1101 result.AppendASCII(" ");
1102 PointExplicitParamInfo(result, minMaxInfo->ptMaxPosition, "maxPosition");
1103 result.AppendASCII(" ");
1104 PointExplicitParamInfo(result, minMaxInfo->ptMinTrackSize, "minTrackSize");
1105 result.AppendASCII(" ");
1106 PointExplicitParamInfo(result, minMaxInfo->ptMaxTrackSize, "maxTrackSize");
1109 void WideStringParamInfo(nsCString& result, uint64_t value, const char* name,
1110 bool /* isPreCall */) {
1111 result.AppendPrintf("%s=%S", name, reinterpret_cast<LPCWSTR>(value));
1114 void DeviceEventParamInfo(nsCString& result, uint64_t value, const char* name,
1115 bool /* isPreCall */) {
1116 const static std::unordered_map<uint64_t, const char*> deviceEventValues{
1117 VALANDNAME_ENTRY(DBT_DEVNODES_CHANGED),
1118 VALANDNAME_ENTRY(DBT_QUERYCHANGECONFIG),
1119 VALANDNAME_ENTRY(DBT_CONFIGCHANGED),
1120 VALANDNAME_ENTRY(DBT_CONFIGCHANGECANCELED),
1121 VALANDNAME_ENTRY(DBT_DEVICEARRIVAL),
1122 VALANDNAME_ENTRY(DBT_DEVICEQUERYREMOVE),
1123 VALANDNAME_ENTRY(DBT_DEVICEQUERYREMOVEFAILED),
1124 VALANDNAME_ENTRY(DBT_DEVICEREMOVEPENDING),
1125 VALANDNAME_ENTRY(DBT_DEVICEREMOVECOMPLETE),
1126 VALANDNAME_ENTRY(DBT_DEVICETYPESPECIFIC),
1127 VALANDNAME_ENTRY(DBT_CUSTOMEVENT),
1128 VALANDNAME_ENTRY(DBT_USERDEFINED)};
1129 AppendEnumValueInfo(result, value, deviceEventValues, name);
1132 void ResolutionParamInfo(nsCString& result, uint64_t value, const char* name,
1133 bool /* isPreCall */) {
1134 result.AppendPrintf("horizontalRes=%d verticalRes=%d", LOWORD(value),
1135 HIWORD(value));
1138 // Window message with default wParam/lParam logging
1139 #define ENTRY(_msg) \
1141 _msg, { #_msg, _msg, DefaultParamInfo } \
1143 // Window message with no parameters
1144 #define ENTRY_WITH_NO_PARAM_INFO(_msg) \
1146 _msg, { #_msg, _msg, nullptr } \
1148 // Window message with custom parameter logging functions
1149 #define ENTRY_WITH_CUSTOM_PARAM_INFO(_msg, paramInfoFn) \
1151 _msg, { #_msg, _msg, paramInfoFn } \
1153 // Window message with separate custom wParam and lParam logging functions
1154 #define ENTRY_WITH_SPLIT_PARAM_INFOS(_msg, wParamInfoFn, wParamName, \
1155 lParamInfoFn, lParamName) \
1157 _msg, { \
1158 #_msg, _msg, nullptr, wParamInfoFn, wParamName, lParamInfoFn, lParamName \
1161 std::unordered_map<UINT, EventMsgInfo> gAllEvents = {
1162 ENTRY_WITH_NO_PARAM_INFO(WM_NULL),
1163 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_CREATE, nullptr, nullptr,
1164 CreateStructParamInfo, "createStruct"),
1165 ENTRY_WITH_NO_PARAM_INFO(WM_DESTROY),
1166 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOVE, nullptr, nullptr,
1167 XLowWordYHighWordParamInfo, "upperLeft"),
1168 ENTRY_WITH_CUSTOM_PARAM_INFO(WM_SIZE, WmSizeParamInfo),
1169 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ACTIVATE, ActivateWParamInfo, "wParam",
1170 HexParamInfo, "handle"),
1171 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETFOCUS, HexParamInfo, "handle", nullptr,
1172 nullptr),
1173 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KILLFOCUS, HexParamInfo, "handle", nullptr,
1174 nullptr),
1175 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ENABLE, TrueFalseParamInfo, "enabled",
1176 nullptr, nullptr),
1177 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETREDRAW, TrueFalseParamInfo,
1178 "redrawState", nullptr, nullptr),
1179 ENTRY(WM_SETTEXT),
1180 ENTRY(WM_GETTEXT),
1181 ENTRY(WM_GETTEXTLENGTH),
1182 ENTRY_WITH_NO_PARAM_INFO(WM_PAINT),
1183 ENTRY_WITH_NO_PARAM_INFO(WM_CLOSE),
1184 ENTRY(WM_QUERYENDSESSION),
1185 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_QUIT, HexParamInfo, "exitCode", nullptr,
1186 nullptr),
1187 ENTRY(WM_QUERYOPEN),
1188 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ERASEBKGND, HexParamInfo, "deviceContext",
1189 nullptr, nullptr),
1190 ENTRY(WM_SYSCOLORCHANGE),
1191 ENTRY(WM_ENDSESSION),
1192 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SHOWWINDOW, TrueFalseParamInfo,
1193 "windowBeingShown", ShowWindowReasonParamInfo,
1194 "status"),
1195 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETTINGCHANGE, UiActionParamInfo,
1196 "uiAction", WideStringParamInfo,
1197 "paramChanged"),
1198 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DEVMODECHANGE, nullptr, nullptr,
1199 WideStringParamInfo, "deviceName"),
1200 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ACTIVATEAPP, TrueFalseParamInfo,
1201 "activated", HexParamInfo, "threadId"),
1202 ENTRY(WM_FONTCHANGE),
1203 ENTRY(WM_TIMECHANGE),
1204 ENTRY(WM_CANCELMODE),
1205 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETCURSOR, HexParamInfo, "windowHandle",
1206 SetCursorLParamInfo, ""),
1207 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEACTIVATE, HexParamInfo, "windowHandle",
1208 SetCursorLParamInfo, ""),
1209 ENTRY(WM_CHILDACTIVATE),
1210 ENTRY(WM_QUEUESYNC),
1211 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_GETMINMAXINFO, nullptr, nullptr,
1212 MinMaxInfoParamInfo, ""),
1213 ENTRY(WM_PAINTICON),
1214 ENTRY(WM_ICONERASEBKGND),
1215 ENTRY(WM_NEXTDLGCTL),
1216 ENTRY(WM_SPOOLERSTATUS),
1217 ENTRY(WM_DRAWITEM),
1218 ENTRY(WM_MEASUREITEM),
1219 ENTRY(WM_DELETEITEM),
1220 ENTRY(WM_VKEYTOITEM),
1221 ENTRY(WM_CHARTOITEM),
1222 ENTRY(WM_SETFONT),
1223 ENTRY(WM_GETFONT),
1224 ENTRY(WM_SETHOTKEY),
1225 ENTRY(WM_GETHOTKEY),
1226 ENTRY(WM_QUERYDRAGICON),
1227 ENTRY(WM_COMPAREITEM),
1228 ENTRY(WM_GETOBJECT),
1229 ENTRY(WM_COMPACTING),
1230 ENTRY(WM_COMMNOTIFY),
1231 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_WINDOWPOSCHANGING, nullptr, nullptr,
1232 WindowPosParamInfo, "newSizeAndPos"),
1233 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_WINDOWPOSCHANGED, nullptr, nullptr,
1234 WindowPosParamInfo, "newSizeAndPos"),
1235 ENTRY(WM_POWER),
1236 ENTRY(WM_COPYDATA),
1237 ENTRY(WM_CANCELJOURNAL),
1238 ENTRY(WM_NOTIFY),
1239 ENTRY(WM_INPUTLANGCHANGEREQUEST),
1240 ENTRY(WM_INPUTLANGCHANGE),
1241 ENTRY(WM_TCARD),
1242 ENTRY(WM_HELP),
1243 ENTRY(WM_USERCHANGED),
1244 ENTRY(WM_NOTIFYFORMAT),
1245 ENTRY(WM_CONTEXTMENU),
1246 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_STYLECHANGING, StyleOrExtendedParamInfo,
1247 "styleOrExtended", StyleStructParamInfo,
1248 "newStyles"),
1249 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_STYLECHANGED, StyleOrExtendedParamInfo,
1250 "styleOrExtended", StyleStructParamInfo,
1251 "newStyles"),
1252 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DISPLAYCHANGE, IntParamInfo, "bitsPerPixel",
1253 ResolutionParamInfo, ""),
1254 ENTRY(WM_GETICON),
1255 ENTRY(WM_SETICON),
1256 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCCREATE, nullptr, nullptr,
1257 CreateStructParamInfo, "createStruct"),
1258 ENTRY_WITH_NO_PARAM_INFO(WM_NCDESTROY),
1259 ENTRY_WITH_CUSTOM_PARAM_INFO(WM_NCCALCSIZE, WmNcCalcSizeParamInfo),
1260 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCHITTEST, nullptr, nullptr,
1261 XLowWordYHighWordParamInfo, "mousePos"),
1262 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCPAINT, HexParamInfo, "updateRegionHandle",
1263 nullptr, nullptr),
1264 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCACTIVATE, TrueFalseParamInfo,
1265 "isTitleBarOrIconActive", HexParamInfo,
1266 "updateRegion"),
1267 ENTRY(WM_GETDLGCODE),
1268 ENTRY(WM_SYNCPAINT),
1269 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMOUSEMOVE, VirtualModifierKeysParamInfo,
1270 "virtualKeys", XLowWordYHighWordParamInfo,
1271 "mousePos"),
1272 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCLBUTTONDOWN, HitTestParamInfo,
1273 "hitTestValue", PointsParamInfo, "mousePos"),
1274 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCLBUTTONUP, HitTestParamInfo,
1275 "hitTestValue", PointsParamInfo, "mousePos"),
1276 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCLBUTTONDBLCLK, HitTestParamInfo,
1277 "hitTestValue", PointsParamInfo, "mousePos"),
1278 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCRBUTTONDOWN, HitTestParamInfo,
1279 "hitTestValue", PointsParamInfo, "mousePos"),
1280 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCRBUTTONUP, HitTestParamInfo,
1281 "hitTestValue", PointsParamInfo, "mousePos"),
1282 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCRBUTTONDBLCLK, HitTestParamInfo,
1283 "hitTestValue", PointsParamInfo, "mousePos"),
1284 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMBUTTONDOWN, HitTestParamInfo,
1285 "hitTestValue", PointsParamInfo, "mousePos"),
1286 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMBUTTONUP, HitTestParamInfo,
1287 "hitTestValue", PointsParamInfo, "mousePos"),
1288 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMBUTTONDBLCLK, HitTestParamInfo,
1289 "hitTestValue", PointsParamInfo, "mousePos"),
1290 ENTRY(EM_GETSEL),
1291 ENTRY(EM_SETSEL),
1292 ENTRY(EM_GETRECT),
1293 ENTRY(EM_SETRECT),
1294 ENTRY(EM_SETRECTNP),
1295 ENTRY(EM_SCROLL),
1296 ENTRY(EM_LINESCROLL),
1297 ENTRY(EM_SCROLLCARET),
1298 ENTRY(EM_GETMODIFY),
1299 ENTRY(EM_SETMODIFY),
1300 ENTRY(EM_GETLINECOUNT),
1301 ENTRY(EM_LINEINDEX),
1302 ENTRY(EM_SETHANDLE),
1303 ENTRY(EM_GETHANDLE),
1304 ENTRY(EM_GETTHUMB),
1305 ENTRY(EM_LINELENGTH),
1306 ENTRY(EM_REPLACESEL),
1307 ENTRY(EM_GETLINE),
1308 ENTRY(EM_LIMITTEXT),
1309 ENTRY(EM_CANUNDO),
1310 ENTRY(EM_UNDO),
1311 ENTRY(EM_FMTLINES),
1312 ENTRY(EM_LINEFROMCHAR),
1313 ENTRY(EM_SETTABSTOPS),
1314 ENTRY(EM_SETPASSWORDCHAR),
1315 ENTRY(EM_EMPTYUNDOBUFFER),
1316 ENTRY(EM_GETFIRSTVISIBLELINE),
1317 ENTRY(EM_SETREADONLY),
1318 ENTRY(EM_SETWORDBREAKPROC),
1319 ENTRY(EM_GETWORDBREAKPROC),
1320 ENTRY(EM_GETPASSWORDCHAR),
1321 ENTRY(EM_SETMARGINS),
1322 ENTRY(EM_GETMARGINS),
1323 ENTRY(EM_GETLIMITTEXT),
1324 ENTRY(EM_POSFROMCHAR),
1325 ENTRY(EM_CHARFROMPOS),
1326 ENTRY(EM_SETIMESTATUS),
1327 ENTRY(EM_GETIMESTATUS),
1328 ENTRY(SBM_SETPOS),
1329 ENTRY(SBM_GETPOS),
1330 ENTRY(SBM_SETRANGE),
1331 ENTRY(SBM_SETRANGEREDRAW),
1332 ENTRY(SBM_GETRANGE),
1333 ENTRY(SBM_ENABLE_ARROWS),
1334 ENTRY(SBM_SETSCROLLINFO),
1335 ENTRY(SBM_GETSCROLLINFO),
1336 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KEYDOWN, VirtualKeyParamInfo, "vKey",
1337 KeystrokeFlagsParamInfo, ""),
1338 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KEYUP, VirtualKeyParamInfo, "vKey",
1339 KeystrokeFlagsParamInfo, ""),
1340 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_CHAR, IntParamInfo, "charCode",
1341 KeystrokeFlagsParamInfo, ""),
1342 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DEADCHAR, IntParamInfo, "charCode",
1343 KeystrokeFlagsParamInfo, ""),
1344 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSKEYDOWN, VirtualKeyParamInfo, "vKey",
1345 KeystrokeFlagsParamInfo, ""),
1346 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSKEYUP, VirtualKeyParamInfo, "vKey",
1347 KeystrokeFlagsParamInfo, ""),
1348 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSCHAR, IntParamInfo, "charCode",
1349 KeystrokeFlagsParamInfo, ""),
1350 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSDEADCHAR, IntParamInfo, "charCode",
1351 KeystrokeFlagsParamInfo, ""),
1352 ENTRY(WM_KEYLAST),
1353 ENTRY(WM_IME_STARTCOMPOSITION),
1354 ENTRY(WM_IME_ENDCOMPOSITION),
1355 ENTRY(WM_IME_COMPOSITION),
1356 ENTRY(WM_INITDIALOG),
1357 ENTRY(WM_COMMAND),
1358 ENTRY(WM_SYSCOMMAND),
1359 ENTRY(WM_TIMER),
1360 ENTRY(WM_HSCROLL),
1361 ENTRY(WM_VSCROLL),
1362 ENTRY(WM_INITMENU),
1363 ENTRY(WM_INITMENUPOPUP),
1364 ENTRY(WM_MENUSELECT),
1365 ENTRY(WM_MENUCHAR),
1366 ENTRY(WM_ENTERIDLE),
1367 ENTRY(WM_MENURBUTTONUP),
1368 ENTRY(WM_MENUDRAG),
1369 ENTRY(WM_MENUGETOBJECT),
1370 ENTRY(WM_UNINITMENUPOPUP),
1371 ENTRY(WM_MENUCOMMAND),
1372 ENTRY(WM_CHANGEUISTATE),
1373 ENTRY(WM_QUERYUISTATE),
1374 ENTRY(WM_UPDATEUISTATE),
1375 ENTRY(WM_CTLCOLORMSGBOX),
1376 ENTRY(WM_CTLCOLOREDIT),
1377 ENTRY(WM_CTLCOLORLISTBOX),
1378 ENTRY(WM_CTLCOLORBTN),
1379 ENTRY(WM_CTLCOLORDLG),
1380 ENTRY(WM_CTLCOLORSCROLLBAR),
1381 ENTRY(WM_CTLCOLORSTATIC),
1382 ENTRY(CB_GETEDITSEL),
1383 ENTRY(CB_LIMITTEXT),
1384 ENTRY(CB_SETEDITSEL),
1385 ENTRY(CB_ADDSTRING),
1386 ENTRY(CB_DELETESTRING),
1387 ENTRY(CB_DIR),
1388 ENTRY(CB_GETCOUNT),
1389 ENTRY(CB_GETCURSEL),
1390 ENTRY(CB_GETLBTEXT),
1391 ENTRY(CB_GETLBTEXTLEN),
1392 ENTRY(CB_INSERTSTRING),
1393 ENTRY(CB_RESETCONTENT),
1394 ENTRY(CB_FINDSTRING),
1395 ENTRY(CB_SELECTSTRING),
1396 ENTRY(CB_SETCURSEL),
1397 ENTRY(CB_SHOWDROPDOWN),
1398 ENTRY(CB_GETITEMDATA),
1399 ENTRY(CB_SETITEMDATA),
1400 ENTRY(CB_GETDROPPEDCONTROLRECT),
1401 ENTRY(CB_SETITEMHEIGHT),
1402 ENTRY(CB_GETITEMHEIGHT),
1403 ENTRY(CB_SETEXTENDEDUI),
1404 ENTRY(CB_GETEXTENDEDUI),
1405 ENTRY(CB_GETDROPPEDSTATE),
1406 ENTRY(CB_FINDSTRINGEXACT),
1407 ENTRY(CB_SETLOCALE),
1408 ENTRY(CB_GETLOCALE),
1409 ENTRY(CB_GETTOPINDEX),
1410 ENTRY(CB_SETTOPINDEX),
1411 ENTRY(CB_GETHORIZONTALEXTENT),
1412 ENTRY(CB_SETHORIZONTALEXTENT),
1413 ENTRY(CB_GETDROPPEDWIDTH),
1414 ENTRY(CB_SETDROPPEDWIDTH),
1415 ENTRY(CB_INITSTORAGE),
1416 ENTRY(CB_MSGMAX),
1417 ENTRY(LB_ADDSTRING),
1418 ENTRY(LB_INSERTSTRING),
1419 ENTRY(LB_DELETESTRING),
1420 ENTRY(LB_SELITEMRANGEEX),
1421 ENTRY(LB_RESETCONTENT),
1422 ENTRY(LB_SETSEL),
1423 ENTRY(LB_SETCURSEL),
1424 ENTRY(LB_GETSEL),
1425 ENTRY(LB_GETCURSEL),
1426 ENTRY(LB_GETTEXT),
1427 ENTRY(LB_GETTEXTLEN),
1428 ENTRY(LB_GETCOUNT),
1429 ENTRY(LB_SELECTSTRING),
1430 ENTRY(LB_DIR),
1431 ENTRY(LB_GETTOPINDEX),
1432 ENTRY(LB_FINDSTRING),
1433 ENTRY(LB_GETSELCOUNT),
1434 ENTRY(LB_GETSELITEMS),
1435 ENTRY(LB_SETTABSTOPS),
1436 ENTRY(LB_GETHORIZONTALEXTENT),
1437 ENTRY(LB_SETHORIZONTALEXTENT),
1438 ENTRY(LB_SETCOLUMNWIDTH),
1439 ENTRY(LB_ADDFILE),
1440 ENTRY(LB_SETTOPINDEX),
1441 ENTRY(LB_GETITEMRECT),
1442 ENTRY(LB_GETITEMDATA),
1443 ENTRY(LB_SETITEMDATA),
1444 ENTRY(LB_SELITEMRANGE),
1445 ENTRY(LB_SETANCHORINDEX),
1446 ENTRY(LB_GETANCHORINDEX),
1447 ENTRY(LB_SETCARETINDEX),
1448 ENTRY(LB_GETCARETINDEX),
1449 ENTRY(LB_SETITEMHEIGHT),
1450 ENTRY(LB_GETITEMHEIGHT),
1451 ENTRY(LB_FINDSTRINGEXACT),
1452 ENTRY(LB_SETLOCALE),
1453 ENTRY(LB_GETLOCALE),
1454 ENTRY(LB_SETCOUNT),
1455 ENTRY(LB_INITSTORAGE),
1456 ENTRY(LB_ITEMFROMPOINT),
1457 ENTRY(LB_MSGMAX),
1458 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEMOVE, VirtualModifierKeysParamInfo,
1459 "virtualKeys", XLowWordYHighWordParamInfo,
1460 "mousePos"),
1461 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONDOWN, VirtualModifierKeysParamInfo,
1462 "virtualKeys", XLowWordYHighWordParamInfo,
1463 "mousePos"),
1464 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONUP, VirtualModifierKeysParamInfo,
1465 "virtualKeys", XLowWordYHighWordParamInfo,
1466 "mousePos"),
1467 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONDBLCLK, VirtualModifierKeysParamInfo,
1468 "virtualKeys", XLowWordYHighWordParamInfo,
1469 "mousePos"),
1470 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONDOWN, VirtualModifierKeysParamInfo,
1471 "virtualKeys", XLowWordYHighWordParamInfo,
1472 "mousePos"),
1473 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONUP, VirtualModifierKeysParamInfo,
1474 "virtualKeys", XLowWordYHighWordParamInfo,
1475 "mousePos"),
1476 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONDBLCLK, VirtualModifierKeysParamInfo,
1477 "virtualKeys", XLowWordYHighWordParamInfo,
1478 "mousePos"),
1479 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONDOWN, VirtualModifierKeysParamInfo,
1480 "virtualKeys", XLowWordYHighWordParamInfo,
1481 "mousePos"),
1482 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONUP, VirtualModifierKeysParamInfo,
1483 "virtualKeys", XLowWordYHighWordParamInfo,
1484 "mousePos"),
1485 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONDBLCLK, VirtualModifierKeysParamInfo,
1486 "virtualKeys", XLowWordYHighWordParamInfo,
1487 "mousePos"),
1488 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEWHEEL,
1489 VirtualKeysLowWordDistanceHighWordParamInfo,
1490 "", XLowWordYHighWordParamInfo, "mousePos"),
1491 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEHWHEEL,
1492 VirtualKeysLowWordDistanceHighWordParamInfo,
1493 "", XLowWordYHighWordParamInfo, "mousePos"),
1494 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_PARENTNOTIFY, ParentNotifyEventParamInfo,
1495 "", PointParamInfo, "pointerLocation"),
1496 ENTRY(WM_ENTERMENULOOP),
1497 ENTRY(WM_EXITMENULOOP),
1498 ENTRY(WM_NEXTMENU),
1499 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SIZING, WindowEdgeParamInfo, "edge",
1500 RectParamInfo, "rect"),
1501 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_CAPTURECHANGED, nullptr, nullptr,
1502 HexParamInfo, "windowHandle"),
1503 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOVING, nullptr, nullptr, RectParamInfo,
1504 "rect"),
1505 ENTRY(WM_POWERBROADCAST),
1506 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DEVICECHANGE, DeviceEventParamInfo, "event",
1507 HexParamInfo, "data"),
1508 ENTRY(WM_MDICREATE),
1509 ENTRY(WM_MDIDESTROY),
1510 ENTRY(WM_MDIACTIVATE),
1511 ENTRY(WM_MDIRESTORE),
1512 ENTRY(WM_MDINEXT),
1513 ENTRY(WM_MDIMAXIMIZE),
1514 ENTRY(WM_MDITILE),
1515 ENTRY(WM_MDICASCADE),
1516 ENTRY(WM_MDIICONARRANGE),
1517 ENTRY(WM_MDIGETACTIVE),
1518 ENTRY(WM_MDISETMENU),
1519 ENTRY(WM_ENTERSIZEMOVE),
1520 ENTRY(WM_EXITSIZEMOVE),
1521 ENTRY(WM_DROPFILES),
1522 ENTRY(WM_MDIREFRESHMENU),
1523 ENTRY(WM_IME_SETCONTEXT),
1524 ENTRY(WM_IME_NOTIFY),
1525 ENTRY(WM_IME_CONTROL),
1526 ENTRY(WM_IME_COMPOSITIONFULL),
1527 ENTRY(WM_IME_SELECT),
1528 ENTRY(WM_IME_CHAR),
1529 ENTRY(WM_IME_REQUEST),
1530 ENTRY(WM_IME_KEYDOWN),
1531 ENTRY(WM_IME_KEYUP),
1532 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMOUSEHOVER, VirtualModifierKeysParamInfo,
1533 "virtualKeys", XLowWordYHighWordParamInfo,
1534 "mousePos"),
1535 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEHOVER, VirtualModifierKeysParamInfo,
1536 "virtualKeys", XLowWordYHighWordParamInfo,
1537 "mousePos"),
1538 ENTRY_WITH_NO_PARAM_INFO(WM_NCMOUSELEAVE),
1539 ENTRY_WITH_NO_PARAM_INFO(WM_MOUSELEAVE),
1540 ENTRY(WM_CUT),
1541 ENTRY(WM_COPY),
1542 ENTRY(WM_PASTE),
1543 ENTRY(WM_CLEAR),
1544 ENTRY(WM_UNDO),
1545 ENTRY(WM_RENDERFORMAT),
1546 ENTRY(WM_RENDERALLFORMATS),
1547 ENTRY(WM_DESTROYCLIPBOARD),
1548 ENTRY(WM_DRAWCLIPBOARD),
1549 ENTRY(WM_PAINTCLIPBOARD),
1550 ENTRY(WM_VSCROLLCLIPBOARD),
1551 ENTRY(WM_SIZECLIPBOARD),
1552 ENTRY(WM_ASKCBFORMATNAME),
1553 ENTRY(WM_CHANGECBCHAIN),
1554 ENTRY(WM_HSCROLLCLIPBOARD),
1555 ENTRY(WM_QUERYNEWPALETTE),
1556 ENTRY(WM_PALETTEISCHANGING),
1557 ENTRY(WM_PALETTECHANGED),
1558 ENTRY(WM_HOTKEY),
1559 ENTRY(WM_PRINT),
1560 ENTRY(WM_PRINTCLIENT),
1561 ENTRY(WM_THEMECHANGED),
1562 ENTRY(WM_HANDHELDFIRST),
1563 ENTRY(WM_HANDHELDLAST),
1564 ENTRY(WM_AFXFIRST),
1565 ENTRY(WM_AFXLAST),
1566 ENTRY(WM_PENWINFIRST),
1567 ENTRY(WM_PENWINLAST),
1568 ENTRY(WM_APP),
1569 ENTRY_WITH_NO_PARAM_INFO(WM_DWMCOMPOSITIONCHANGED),
1570 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMNCRENDERINGCHANGED, TrueFalseParamInfo,
1571 "DwmNcRendering", nullptr, nullptr),
1572 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMCOLORIZATIONCOLORCHANGED, HexParamInfo,
1573 "color:AARRGGBB", TrueFalseParamInfo,
1574 "isOpaque"),
1575 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMWINDOWMAXIMIZEDCHANGE,
1576 TrueFalseParamInfo, "maximized", nullptr,
1577 nullptr),
1578 ENTRY(WM_DWMSENDICONICTHUMBNAIL), // lParam: HIWORD is x, LOWORD is y
1579 ENTRY_WITH_NO_PARAM_INFO(WM_DWMSENDICONICLIVEPREVIEWBITMAP),
1580 ENTRY(WM_TABLET_QUERYSYSTEMGESTURESTATUS),
1581 ENTRY(WM_GESTURE),
1582 ENTRY(WM_GESTURENOTIFY),
1583 ENTRY(WM_GETTITLEBARINFOEX),
1584 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DPICHANGED, XLowWordYHighWordParamInfo,
1585 "newDPI", RectParamInfo,
1586 "suggestedSizeAndPos"),
1588 #undef ENTRY
1589 #undef ENTRY_WITH_NO_PARAM_INFO
1590 #undef ENTRY_WITH_CUSTOM_PARAM_INFO
1591 #undef ENTRY_WITH_SPLIT_PARAM_INFO
1593 } // namespace mozilla::widget
1595 #ifdef DEBUG
1596 void DDError(const char* msg, HRESULT hr) {
1597 /*XXX make nicer */
1598 MOZ_LOG(gWindowsLog, LogLevel::Error,
1599 ("DirectDraw error %s: 0x%08lx\n", msg, hr));
1601 #endif
1603 #ifdef DEBUG_VK
1604 bool is_vk_down(int vk) {
1605 SHORT st = GetKeyState(vk);
1606 # ifdef DEBUG
1607 MOZ_LOG(gWindowsLog, LogLevel::Info, ("is_vk_down vk=%x st=%x\n", vk, st));
1608 # endif
1609 return (st < 0);
1611 #endif