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