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 #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};
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
);
56 const auto eventMsgInfo
= mozilla::widget::gAllEvents
.find(aMsg
);
57 if (eventMsgInfo
!= mozilla::widget::gAllEvents
.end()) {
58 name
= eventMsgInfo
->second
.mStr
;
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";
69 name
= "system message";
71 aWriter
.StringProperty("name", MakeStringSpan(name
));
74 aWriter
.IntProperty("wParam", aWParam
);
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
);
86 "{marker.data.messageLoop} | {marker.data.name} ({marker.data.uMsg})");
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
);
98 } // namespace geckoprofiler::markers
100 namespace mozilla::widget
{
102 AutoProfilerMessageMarker::AutoProfilerMessageMarker(
103 Span
<const char> aMsgLoopName
, HWND hWnd
, UINT msg
, WPARAM wParam
,
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
);
110 nsIWidgetListener
* wl
= win
->GetWidgetListener();
112 PresShell
* presShell
= wl
->GetPresShell();
114 dom::Document
* doc
= presShell
->GetDocument();
116 mOptions
->Set(MarkerInnerWindowId(doc
->InnerWindowID()));
124 AutoProfilerMessageMarker::~AutoProfilerMessageMarker() {
125 if (!profiler_thread_is_being_profiled_for_markers()) {
130 mOptions
->TimingRef().SetIntervalEnd();
132 mOptions
.emplace(MarkerOptions(MarkerTiming::IntervalEnd()));
135 "WindowProc", ::mozilla::baseprofiler::category::OTHER
,
136 std::move(*mOptions
), geckoprofiler::markers::WindowProcMarker
{},
137 ProfilerString8View::WrapNullTerminatedString(mMsgLoopName
.data()), mMsg
,
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)
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
, //
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()),
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
);
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.
195 if (mMsg
== WM_DESTROY
) {
196 // Remove any logged messages for this window.
201 void EventMsgInfo::LogParameters(nsCString
& str
, WPARAM wParam
, LPARAM lParam
,
204 str
= mParamInfoFn(wParam
, lParam
, isPreCall
);
207 mWParamInfoFn(str
, wParam
, mWParamName
, isPreCall
);
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
);
225 void AppendEnumValueInfo(
226 nsCString
& str
, uint64_t value
,
227 const std::unordered_map
<uint64_t, const char*>& valuesAndNames
,
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
);
236 str
.AppendASCII(entry
->second
);
240 bool AppendFlagsInfo(nsCString
& str
, uint64_t flags
,
241 const nsTArray
<EnumValueAndName
>& flagsAndNames
,
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
252 if (flags
== 0 && firstAppend
) {
254 str
.AppendASCII(flagAndName
.mName
);
256 } else if ((flags
& flagAndName
.mFlag
) == flagAndName
.mFlag
) {
257 if (MOZ_LIKELY(!firstAppend
)) {
261 str
.AppendASCII(flagAndName
.mName
);
262 flags
= flags
& ~flagAndName
.mFlag
;
266 if (MOZ_LIKELY(!firstAppend
)) {
270 str
.AppendPrintf("Unknown (0x%08llX)", flags
);
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
;
293 bool isPreCall
= mResult
.isNothing();
294 if (isPreCall
|| mShouldLogPostCall
) {
295 bool recordInAboutPage
= gEventsToRecordInAboutPage
.find(mMsg
) !=
296 gEventsToRecordInAboutPage
.end();
297 bool writeToWindowsLog
;
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
) {
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.
314 writeToWindowsLog
= true;
316 if (recordInAboutPage
) {
317 LogWindowMessage(mHwnd
, mMsg
, isPreCall
,
318 mEventCounter
.valueOr(gEventCounter
), mWParam
, mLParam
,
321 gLastEventMsg
= mMsg
;
322 if (writeToWindowsLog
) {
323 const auto& eventMsgInfo
= gAllEvents
.find(mMsg
);
324 const char* msgText
= eventMsgInfo
!= gAllEvents
.end()
325 ? eventMsgInfo
->second
.mStr
327 nsAutoCString paramInfo
;
328 if (eventMsgInfo
!= gAllEvents
.end()) {
329 eventMsgInfo
->second
.LogParameters(paramInfo
, mWParam
, mLParam
,
332 paramInfo
= DefaultParamInfo(mWParam
, mLParam
, isPreCall
);
334 const char* resultMsg
= mResult
.isSome()
335 ? (mResult
.value() ? "true" : "false")
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() ? "" : " ",
344 mResult
.isSome() ? static_cast<uint64_t>(mRetValue
) : 0, resultMsg
);
345 const char* logMessageData
= logMessage
.Data();
346 MOZ_LOG(gWindowsEventLog
, targetLogLevel
, ("%s", logMessageData
));
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?");
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) \
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?");
398 "%s: hInstance=%p hMenu=%p hwndParent=%p lpszName=%S lpszClass=%S x=%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
),
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
424 VALANDNAME_ENTRY(WS_EX_OVERLAPPEDWINDOW
),
425 VALANDNAME_ENTRY(WS_EX_PALETTEWINDOW
),
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
),
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
),
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
),
455 #if _WIN32_WINNT >= 0x0501
456 VALANDNAME_ENTRY(WS_EX_COMPOSITED
),
459 VALANDNAME_ENTRY(WS_EX_NOREDIRECTIONBITMAP
),
462 AppendFlagsInfo(str
, createStruct
->dwExStyle
, extendedWindowStyles
,
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
),
509 VALANDNAME_ENTRY(VK_IME_ON
),
511 VALANDNAME_ENTRY(VK_JUNJA
),
512 VALANDNAME_ENTRY(VK_FINAL
),
513 VALANDNAME_ENTRY(VK_HANJA
),
514 VALANDNAME_ENTRY(VK_KANJI
),
516 VALANDNAME_ENTRY(VK_IME_OFF
),
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
),
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
;
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
;
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 */,
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
),
755 VALANDNAME_ENTRY(SPI_GETLOGICALDPIOVERRIDE
),
756 VALANDNAME_ENTRY(SPI_SETLOGICALDPIOVERRIDE
),
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
),
812 VALANDNAME_ENTRY(SPI_GETCONTACTVISUALIZATION
),
813 VALANDNAME_ENTRY(SPI_SETCONTACTVISUALIZATION
),
815 VALANDNAME_ENTRY(SPI_GETDEFAULTINPUTLANG
),
817 VALANDNAME_ENTRY(SPI_GETGESTUREVISUALIZATION
),
818 VALANDNAME_ENTRY(SPI_SETGESTUREVISUALIZATION
),
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
),
830 VALANDNAME_ENTRY(SPI_GETMOUSEWHEELROUTING
),
831 VALANDNAME_ENTRY(SPI_SETMOUSEWHEELROUTING
),
834 VALANDNAME_ENTRY(SPI_GETPENVISUALIZATION
),
835 VALANDNAME_ENTRY(SPI_SETPENVISUALIZATION
),
837 VALANDNAME_ENTRY(SPI_GETSNAPTODEFBUTTON
),
839 VALANDNAME_ENTRY(SPI_GETSYSTEMLANGUAGEBAR
),
840 VALANDNAME_ENTRY(SPI_SETSYSTEMLANGUAGEBAR
),
841 VALANDNAME_ENTRY(SPI_GETTHREADLOCALINPUTSETTINGS
),
842 VALANDNAME_ENTRY(SPI_SETTHREADLOCALINPUTSETTINGS
),
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
)));
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?");
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?");
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?");
1031 str
.AppendPrintf("%s[0]: ", name
);
1032 RectParamInfo(str
, reinterpret_cast<uintptr_t>(¶ms
->rgrc
[0]), nullptr,
1034 str
.AppendPrintf(" %s[1]: ", name
);
1035 RectParamInfo(str
, reinterpret_cast<uintptr_t>(¶ms
->rgrc
[1]), nullptr,
1037 str
.AppendPrintf(" %s[2]: ", name
);
1038 RectParamInfo(str
, reinterpret_cast<uintptr_t>(¶ms
->rgrc
[2]), nullptr,
1040 str
.AppendASCII(" ");
1041 WindowPosParamInfo(str
, reinterpret_cast<uintptr_t>(params
->lppos
), nullptr,
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);
1053 RectParamInfo(result
, lParam
, "rect", false);
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?");
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
),
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) \
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,
1173 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KILLFOCUS
, HexParamInfo
, "handle", nullptr,
1175 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ENABLE
, TrueFalseParamInfo
, "enabled",
1177 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETREDRAW
, TrueFalseParamInfo
,
1178 "redrawState", nullptr, nullptr),
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,
1187 ENTRY(WM_QUERYOPEN
),
1188 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ERASEBKGND
, HexParamInfo
, "deviceContext",
1190 ENTRY(WM_SYSCOLORCHANGE
),
1191 ENTRY(WM_ENDSESSION
),
1192 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SHOWWINDOW
, TrueFalseParamInfo
,
1193 "windowBeingShown", ShowWindowReasonParamInfo
,
1195 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETTINGCHANGE
, UiActionParamInfo
,
1196 "uiAction", WideStringParamInfo
,
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
),
1218 ENTRY(WM_MEASUREITEM
),
1219 ENTRY(WM_DELETEITEM
),
1220 ENTRY(WM_VKEYTOITEM
),
1221 ENTRY(WM_CHARTOITEM
),
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"),
1237 ENTRY(WM_CANCELJOURNAL
),
1239 ENTRY(WM_INPUTLANGCHANGEREQUEST
),
1240 ENTRY(WM_INPUTLANGCHANGE
),
1243 ENTRY(WM_USERCHANGED
),
1244 ENTRY(WM_NOTIFYFORMAT
),
1245 ENTRY(WM_CONTEXTMENU
),
1246 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_STYLECHANGING
, StyleOrExtendedParamInfo
,
1247 "styleOrExtended", StyleStructParamInfo
,
1249 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_STYLECHANGED
, StyleOrExtendedParamInfo
,
1250 "styleOrExtended", StyleStructParamInfo
,
1252 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DISPLAYCHANGE
, IntParamInfo
, "bitsPerPixel",
1253 ResolutionParamInfo
, ""),
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",
1264 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCACTIVATE
, TrueFalseParamInfo
,
1265 "isTitleBarOrIconActive", HexParamInfo
,
1267 ENTRY(WM_GETDLGCODE
),
1268 ENTRY(WM_SYNCPAINT
),
1269 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMOUSEMOVE
, VirtualModifierKeysParamInfo
,
1270 "virtualKeys", XLowWordYHighWordParamInfo
,
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"),
1294 ENTRY(EM_SETRECTNP
),
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
),
1305 ENTRY(EM_LINELENGTH
),
1306 ENTRY(EM_REPLACESEL
),
1308 ENTRY(EM_LIMITTEXT
),
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
),
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
, ""),
1353 ENTRY(WM_IME_STARTCOMPOSITION
),
1354 ENTRY(WM_IME_ENDCOMPOSITION
),
1355 ENTRY(WM_IME_COMPOSITION
),
1356 ENTRY(WM_INITDIALOG
),
1358 ENTRY(WM_SYSCOMMAND
),
1363 ENTRY(WM_INITMENUPOPUP
),
1364 ENTRY(WM_MENUSELECT
),
1366 ENTRY(WM_ENTERIDLE
),
1367 ENTRY(WM_MENURBUTTONUP
),
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
),
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
),
1417 ENTRY(LB_ADDSTRING
),
1418 ENTRY(LB_INSERTSTRING
),
1419 ENTRY(LB_DELETESTRING
),
1420 ENTRY(LB_SELITEMRANGEEX
),
1421 ENTRY(LB_RESETCONTENT
),
1423 ENTRY(LB_SETCURSEL
),
1425 ENTRY(LB_GETCURSEL
),
1427 ENTRY(LB_GETTEXTLEN
),
1429 ENTRY(LB_SELECTSTRING
),
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
),
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
),
1455 ENTRY(LB_INITSTORAGE
),
1456 ENTRY(LB_ITEMFROMPOINT
),
1458 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEMOVE
, VirtualModifierKeysParamInfo
,
1459 "virtualKeys", XLowWordYHighWordParamInfo
,
1461 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONDOWN
, VirtualModifierKeysParamInfo
,
1462 "virtualKeys", XLowWordYHighWordParamInfo
,
1464 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONUP
, VirtualModifierKeysParamInfo
,
1465 "virtualKeys", XLowWordYHighWordParamInfo
,
1467 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONDBLCLK
, VirtualModifierKeysParamInfo
,
1468 "virtualKeys", XLowWordYHighWordParamInfo
,
1470 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONDOWN
, VirtualModifierKeysParamInfo
,
1471 "virtualKeys", XLowWordYHighWordParamInfo
,
1473 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONUP
, VirtualModifierKeysParamInfo
,
1474 "virtualKeys", XLowWordYHighWordParamInfo
,
1476 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONDBLCLK
, VirtualModifierKeysParamInfo
,
1477 "virtualKeys", XLowWordYHighWordParamInfo
,
1479 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONDOWN
, VirtualModifierKeysParamInfo
,
1480 "virtualKeys", XLowWordYHighWordParamInfo
,
1482 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONUP
, VirtualModifierKeysParamInfo
,
1483 "virtualKeys", XLowWordYHighWordParamInfo
,
1485 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONDBLCLK
, VirtualModifierKeysParamInfo
,
1486 "virtualKeys", XLowWordYHighWordParamInfo
,
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
),
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
,
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
),
1513 ENTRY(WM_MDIMAXIMIZE
),
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
),
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
,
1535 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEHOVER
, VirtualModifierKeysParamInfo
,
1536 "virtualKeys", XLowWordYHighWordParamInfo
,
1538 ENTRY_WITH_NO_PARAM_INFO(WM_NCMOUSELEAVE
),
1539 ENTRY_WITH_NO_PARAM_INFO(WM_MOUSELEAVE
),
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
),
1560 ENTRY(WM_PRINTCLIENT
),
1561 ENTRY(WM_THEMECHANGED
),
1562 ENTRY(WM_HANDHELDFIRST
),
1563 ENTRY(WM_HANDHELDLAST
),
1566 ENTRY(WM_PENWINFIRST
),
1567 ENTRY(WM_PENWINLAST
),
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
,
1575 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMWINDOWMAXIMIZEDCHANGE
,
1576 TrueFalseParamInfo
, "maximized", 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
),
1582 ENTRY(WM_GESTURENOTIFY
),
1583 ENTRY(WM_GETTITLEBARINFOEX
),
1584 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DPICHANGED
, XLowWordYHighWordParamInfo
,
1585 "newDPI", RectParamInfo
,
1586 "suggestedSizeAndPos"),
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
1596 void DDError(const char* msg
, HRESULT hr
) {
1598 MOZ_LOG(gWindowsLog
, LogLevel::Error
,
1599 ("DirectDraw error %s: 0x%08lx\n", msg
, hr
));
1604 bool is_vk_down(int vk
) {
1605 SHORT st
= GetKeyState(vk
);
1607 MOZ_LOG(gWindowsLog
, LogLevel::Info
, ("is_vk_down vk=%x st=%x\n", vk
, st
));