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