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 "nsWindowLoggedMessages.h"
12 #include "mozilla/Logging.h"
13 #include "mozilla/Maybe.h"
17 #include <unordered_set>
19 using namespace mozilla
;
20 using namespace mozilla::widget
;
21 extern mozilla::LazyLogModule gWindowsLog
;
22 static mozilla::LazyLogModule
gWindowsEventLog("WindowsEvent");
24 #if defined(POPUP_ROLLUP_DEBUG_OUTPUT)
25 MSGFEventMsgInfo gMSGFEvents
[] = {
26 "MSGF_DIALOGBOX", 0, "MSGF_MESSAGEBOX", 1, "MSGF_MENU", 2,
27 "MSGF_SCROLLBAR", 5, "MSGF_NEXTWINDOW", 6, "MSGF_MAX", 8,
28 "MSGF_USER", 4096, nullptr, 0};
31 static long gEventCounter
= 0;
32 static UINT gLastEventMsg
= 0;
34 namespace mozilla::widget
{
36 // Using an unordered_set so we can initialize this with nice syntax instead of
37 // having to add them one at a time to a mozilla::HashSet.
38 std::unordered_set
<UINT
> gEventsToLogOriginalParams
= {
39 WM_WINDOWPOSCHANGING
, // (dummy comments for clang-format)
48 // If you add an event here, you must add cases for these to
49 // MakeMessageSpecificData() and AppendFriendlyMessageSpecificData()
50 // in nsWindowLoggedMessages.cpp.
51 std::unordered_set
<UINT
> gEventsToRecordInAboutPage
= {
52 WM_WINDOWPOSCHANGING
, // (dummy comments for clang-format)
53 WM_WINDOWPOSCHANGED
, //
64 PrintEvent::PrintEvent(HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
69 mResult(mozilla::Nothing()),
70 mShouldLogPostCall(false) {
71 if (PrintEventInternal()) {
72 // this event was logged, so reserve this counter number for the post-call
73 mEventCounter
= mozilla::Some(gEventCounter
);
78 PrintEvent::~PrintEvent() {
79 // If mResult is Nothing, perhaps an exception was thrown or something
80 // before SetResult() was supposed to be called.
81 if (mResult
.isSome()) {
82 if (PrintEventInternal() && mEventCounter
.isNothing()) {
83 // We didn't reserve a counter in the pre-call, so reserve it here.
87 if (mMsg
== WM_DESTROY
) {
88 // Remove any logged messages for this window.
93 void EventMsgInfo::LogParameters(nsCString
& str
, WPARAM wParam
, LPARAM lParam
,
96 str
= mParamInfoFn(wParam
, lParam
, isPreCall
);
99 mWParamInfoFn(str
, wParam
, mWParamName
, isPreCall
);
103 str
.AppendASCII(" ");
105 mLParamInfoFn(str
, lParam
, mLParamName
, isPreCall
);
110 nsAutoCString
DefaultParamInfo(uint64_t wParam
, uint64_t lParam
,
111 bool /* isPreCall */) {
112 nsAutoCString result
;
113 result
.AppendPrintf("wParam=0x%08llX lParam=0x%08llX", wParam
, lParam
);
117 void AppendEnumValueInfo(
118 nsCString
& str
, uint64_t value
,
119 const std::unordered_map
<uint64_t, const char*>& valuesAndNames
,
121 if (name
!= nullptr) {
122 str
.AppendPrintf("%s=", name
);
124 auto entry
= valuesAndNames
.find(value
);
125 if (entry
== valuesAndNames
.end()) {
126 str
.AppendPrintf("Unknown (0x%08llX)", value
);
128 str
.AppendASCII(entry
->second
);
132 bool AppendFlagsInfo(nsCString
& str
, uint64_t flags
,
133 const nsTArray
<EnumValueAndName
>& flagsAndNames
,
135 if (name
!= nullptr) {
136 str
.AppendPrintf("%s=", name
);
138 bool firstAppend
= true;
139 for (const EnumValueAndName
& flagAndName
: flagsAndNames
) {
140 if (MOZ_UNLIKELY(flagAndName
.mFlag
== 0)) {
141 // Special case - only want to write this if nothing else was set.
142 // For this to make sense, 0 values should come at the end of
144 if (flags
== 0 && firstAppend
) {
146 str
.AppendASCII(flagAndName
.mName
);
148 } else if ((flags
& flagAndName
.mFlag
) == flagAndName
.mFlag
) {
149 if (MOZ_LIKELY(!firstAppend
)) {
153 str
.AppendASCII(flagAndName
.mName
);
154 flags
= flags
& ~flagAndName
.mFlag
;
158 if (MOZ_LIKELY(!firstAppend
)) {
162 str
.AppendPrintf("Unknown (0x%08llX)", flags
);
167 // if mResult is not set, this is used to log the parameters passed in the
168 // message, otherwise we are logging the parameters after we have handled the
169 // message. This is useful for events where we might change the parameters while
170 // handling the message (for example WM_GETTEXT and WM_NCCALCSIZE)
171 // Returns whether this message was logged, so we need to reserve a
172 // counter number for it.
173 bool PrintEvent::PrintEventInternal() {
174 mozilla::LogLevel
const targetLogLevel
= [&] {
175 // These messages often take up more than 90% of logs if not filtered out.
176 if (mMsg
== WM_SETCURSOR
|| mMsg
== WM_MOUSEMOVE
|| mMsg
== WM_NCHITTEST
) {
177 return LogLevel::Verbose
;
179 if (gLastEventMsg
== mMsg
) {
180 return LogLevel::Debug
;
182 return LogLevel::Info
;
185 bool isPreCall
= mResult
.isNothing();
186 if (isPreCall
|| mShouldLogPostCall
) {
187 bool recordInAboutPage
= gEventsToRecordInAboutPage
.find(mMsg
) !=
188 gEventsToRecordInAboutPage
.end();
189 bool writeToWindowsLog
;
191 writeToWindowsLog
= MOZ_LOG_TEST(gWindowsEventLog
, targetLogLevel
);
192 bool shouldLogAtAll
= recordInAboutPage
|| writeToWindowsLog
;
193 // Since calling mParamInfoFn() allocates a string, only go down this code
194 // path if we're going to log this message to reduce allocations.
195 if (!shouldLogAtAll
) {
198 mShouldLogPostCall
= true;
199 bool shouldLogPreCall
= gEventsToLogOriginalParams
.find(mMsg
) !=
200 gEventsToLogOriginalParams
.end();
201 if (!shouldLogPreCall
) {
202 // Pre-call and we don't want to log both, so skip this one.
206 writeToWindowsLog
= true;
208 if (recordInAboutPage
) {
209 LogWindowMessage(mHwnd
, mMsg
, isPreCall
,
210 mEventCounter
.valueOr(gEventCounter
), mWParam
, mLParam
,
213 gLastEventMsg
= mMsg
;
214 if (writeToWindowsLog
) {
215 const auto& eventMsgInfo
= gAllEvents
.find(mMsg
);
216 const char* msgText
= eventMsgInfo
!= gAllEvents
.end()
217 ? eventMsgInfo
->second
.mStr
219 nsAutoCString paramInfo
;
220 if (eventMsgInfo
!= gAllEvents
.end()) {
221 eventMsgInfo
->second
.LogParameters(paramInfo
, mWParam
, mLParam
,
224 paramInfo
= DefaultParamInfo(mWParam
, mLParam
, isPreCall
);
226 const char* resultMsg
= mResult
.isSome()
227 ? (mResult
.value() ? "true" : "false")
229 nsAutoCString logMessage
;
230 logMessage
.AppendPrintf(
231 "%6ld %08" PRIX64
" - 0x%04X %s%s%s: 0x%08" PRIX64
" (%s)\n",
232 mEventCounter
.valueOr(gEventCounter
),
233 reinterpret_cast<uint64_t>(mHwnd
), mMsg
,
234 msgText
? msgText
: "Unknown", paramInfo
.IsEmpty() ? "" : " ",
236 mResult
.isSome() ? static_cast<uint64_t>(mRetValue
) : 0, resultMsg
);
237 const char* logMessageData
= logMessage
.Data();
238 MOZ_LOG(gWindowsEventLog
, targetLogLevel
, ("%s", logMessageData
));
245 void TrueFalseParamInfo(nsCString
& result
, uint64_t value
, const char* name
,
246 bool /* isPreCall */) {
247 result
.AppendPrintf("%s=%s", name
, value
== TRUE
? "TRUE" : "FALSE");
250 void TrueFalseLowOrderWordParamInfo(nsCString
& result
, uint64_t value
,
251 const char* name
, bool /* isPreCall */) {
252 result
.AppendPrintf("%s=%s", name
, LOWORD(value
) == TRUE
? "TRUE" : "FALSE");
255 void HexParamInfo(nsCString
& result
, uint64_t value
, const char* name
,
256 bool /* isPreCall */) {
257 result
.AppendPrintf("%s=0x%08llX", name
, value
);
260 void IntParamInfo(nsCString
& result
, uint64_t value
, const char* name
,
261 bool /* isPreCall */) {
262 result
.AppendPrintf("%s=%lld", name
, value
);
265 void RectParamInfo(nsCString
& str
, uint64_t value
, const char* name
,
266 bool /* isPreCall */) {
267 LPRECT rect
= reinterpret_cast<LPRECT
>(value
);
268 if (rect
== nullptr) {
269 str
.AppendPrintf("NULL rect?");
272 if (name
!= nullptr) {
273 str
.AppendPrintf("%s ", name
);
275 str
.AppendPrintf("left=%ld top=%ld right=%ld bottom=%ld", rect
->left
,
276 rect
->top
, rect
->right
, rect
->bottom
);
279 #define VALANDNAME_ENTRY(_msg) \
282 void CreateStructParamInfo(nsCString
& str
, uint64_t value
, const char* name
,
283 bool /* isPreCall */) {
284 CREATESTRUCT
* createStruct
= reinterpret_cast<CREATESTRUCT
*>(value
);
285 if (createStruct
== nullptr) {
286 str
.AppendASCII("NULL createStruct?");
290 "%s: hInstance=%p hMenu=%p hwndParent=%p lpszName=%S lpszClass=%S x=%d "
292 name
, createStruct
->hInstance
, createStruct
->hMenu
,
293 createStruct
->hwndParent
, createStruct
->lpszName
, createStruct
->lpszClass
,
294 createStruct
->x
, createStruct
->y
, createStruct
->cx
, createStruct
->cy
);
295 str
.AppendASCII(" ");
296 const static nsTArray
<EnumValueAndName
> windowStyles
= {
297 // these combinations of other flags need to come first
298 VALANDNAME_ENTRY(WS_OVERLAPPEDWINDOW
), VALANDNAME_ENTRY(WS_POPUPWINDOW
),
299 VALANDNAME_ENTRY(WS_CAPTION
),
301 VALANDNAME_ENTRY(WS_POPUP
), VALANDNAME_ENTRY(WS_CHILD
),
302 VALANDNAME_ENTRY(WS_MINIMIZE
), VALANDNAME_ENTRY(WS_VISIBLE
),
303 VALANDNAME_ENTRY(WS_DISABLED
), VALANDNAME_ENTRY(WS_CLIPSIBLINGS
),
304 VALANDNAME_ENTRY(WS_CLIPCHILDREN
), VALANDNAME_ENTRY(WS_MAXIMIZE
),
305 VALANDNAME_ENTRY(WS_BORDER
), VALANDNAME_ENTRY(WS_DLGFRAME
),
306 VALANDNAME_ENTRY(WS_VSCROLL
), VALANDNAME_ENTRY(WS_HSCROLL
),
307 VALANDNAME_ENTRY(WS_SYSMENU
), VALANDNAME_ENTRY(WS_THICKFRAME
),
308 VALANDNAME_ENTRY(WS_GROUP
), VALANDNAME_ENTRY(WS_TABSTOP
),
309 // zero value needs to come last
310 VALANDNAME_ENTRY(WS_OVERLAPPED
)};
311 AppendFlagsInfo(str
, createStruct
->style
, windowStyles
, "style");
312 str
.AppendASCII(" ");
313 const nsTArray
<EnumValueAndName
> extendedWindowStyles
= {
314 // these combinations of other flags need to come first
316 VALANDNAME_ENTRY(WS_EX_OVERLAPPEDWINDOW
),
317 VALANDNAME_ENTRY(WS_EX_PALETTEWINDOW
),
320 VALANDNAME_ENTRY(WS_EX_DLGMODALFRAME
),
321 VALANDNAME_ENTRY(WS_EX_NOPARENTNOTIFY
),
322 VALANDNAME_ENTRY(WS_EX_TOPMOST
),
323 VALANDNAME_ENTRY(WS_EX_ACCEPTFILES
),
324 VALANDNAME_ENTRY(WS_EX_TRANSPARENT
),
326 VALANDNAME_ENTRY(WS_EX_MDICHILD
),
327 VALANDNAME_ENTRY(WS_EX_TOOLWINDOW
),
328 VALANDNAME_ENTRY(WS_EX_WINDOWEDGE
),
329 VALANDNAME_ENTRY(WS_EX_CLIENTEDGE
),
330 VALANDNAME_ENTRY(WS_EX_CONTEXTHELP
),
331 VALANDNAME_ENTRY(WS_EX_RIGHT
),
332 VALANDNAME_ENTRY(WS_EX_LEFT
),
333 VALANDNAME_ENTRY(WS_EX_RTLREADING
),
334 VALANDNAME_ENTRY(WS_EX_LTRREADING
),
335 VALANDNAME_ENTRY(WS_EX_LEFTSCROLLBAR
),
336 VALANDNAME_ENTRY(WS_EX_RIGHTSCROLLBAR
),
337 VALANDNAME_ENTRY(WS_EX_CONTROLPARENT
),
338 VALANDNAME_ENTRY(WS_EX_STATICEDGE
),
339 VALANDNAME_ENTRY(WS_EX_APPWINDOW
),
341 #if _WIN32_WINNT >= 0x0500
342 VALANDNAME_ENTRY(WS_EX_LAYERED
),
343 VALANDNAME_ENTRY(WS_EX_NOINHERITLAYOUT
),
344 VALANDNAME_ENTRY(WS_EX_LAYOUTRTL
),
345 VALANDNAME_ENTRY(WS_EX_NOACTIVATE
),
347 #if _WIN32_WINNT >= 0x0501
348 VALANDNAME_ENTRY(WS_EX_COMPOSITED
),
351 VALANDNAME_ENTRY(WS_EX_NOREDIRECTIONBITMAP
),
354 AppendFlagsInfo(str
, createStruct
->dwExStyle
, extendedWindowStyles
,
358 void XLowWordYHighWordParamInfo(nsCString
& str
, uint64_t value
,
359 const char* name
, bool /* isPreCall */) {
360 str
.AppendPrintf("%s: x=%d y=%d", name
, static_cast<int>(LOWORD(value
)),
361 static_cast<int>(HIWORD(value
)));
364 void PointParamInfo(nsCString
& str
, uint64_t value
, const char* name
,
365 bool /* isPreCall */) {
366 str
.AppendPrintf("%s: x=%d y=%d", name
, static_cast<int>(GET_X_LPARAM(value
)),
367 static_cast<int>(GET_Y_LPARAM(value
)));
370 void PointExplicitParamInfo(nsCString
& str
, POINT point
, const char* name
) {
371 str
.AppendPrintf("%s: x=%ld y=%ld", name
, point
.x
, point
.y
);
374 void PointsParamInfo(nsCString
& str
, uint64_t value
, const char* name
,
375 bool /* isPreCall */) {
376 PPOINTS points
= reinterpret_cast<PPOINTS
>(&value
);
377 str
.AppendPrintf("%s: x=%d y=%d", name
, points
->x
, points
->y
);
380 void VirtualKeyParamInfo(nsCString
& result
, uint64_t param
, const char* name
,
381 bool /* isPreCall */) {
382 const static std::unordered_map
<uint64_t, const char*> virtualKeys
{
383 VALANDNAME_ENTRY(VK_LBUTTON
),
384 VALANDNAME_ENTRY(VK_RBUTTON
),
385 VALANDNAME_ENTRY(VK_CANCEL
),
386 VALANDNAME_ENTRY(VK_MBUTTON
),
387 VALANDNAME_ENTRY(VK_XBUTTON1
),
388 VALANDNAME_ENTRY(VK_XBUTTON2
),
389 VALANDNAME_ENTRY(VK_BACK
),
390 VALANDNAME_ENTRY(VK_TAB
),
391 VALANDNAME_ENTRY(VK_CLEAR
),
392 VALANDNAME_ENTRY(VK_RETURN
),
393 VALANDNAME_ENTRY(VK_SHIFT
),
394 VALANDNAME_ENTRY(VK_CONTROL
),
395 VALANDNAME_ENTRY(VK_MENU
),
396 VALANDNAME_ENTRY(VK_PAUSE
),
397 VALANDNAME_ENTRY(VK_CAPITAL
),
398 VALANDNAME_ENTRY(VK_KANA
),
399 VALANDNAME_ENTRY(VK_HANGUL
),
401 VALANDNAME_ENTRY(VK_IME_ON
),
403 VALANDNAME_ENTRY(VK_JUNJA
),
404 VALANDNAME_ENTRY(VK_FINAL
),
405 VALANDNAME_ENTRY(VK_HANJA
),
406 VALANDNAME_ENTRY(VK_KANJI
),
408 VALANDNAME_ENTRY(VK_IME_OFF
),
410 VALANDNAME_ENTRY(VK_ESCAPE
),
411 VALANDNAME_ENTRY(VK_CONVERT
),
412 VALANDNAME_ENTRY(VK_NONCONVERT
),
413 VALANDNAME_ENTRY(VK_ACCEPT
),
414 VALANDNAME_ENTRY(VK_MODECHANGE
),
415 VALANDNAME_ENTRY(VK_SPACE
),
416 VALANDNAME_ENTRY(VK_PRIOR
),
417 VALANDNAME_ENTRY(VK_NEXT
),
418 VALANDNAME_ENTRY(VK_END
),
419 VALANDNAME_ENTRY(VK_HOME
),
420 VALANDNAME_ENTRY(VK_LEFT
),
421 VALANDNAME_ENTRY(VK_UP
),
422 VALANDNAME_ENTRY(VK_RIGHT
),
423 VALANDNAME_ENTRY(VK_DOWN
),
424 VALANDNAME_ENTRY(VK_SELECT
),
425 VALANDNAME_ENTRY(VK_PRINT
),
426 VALANDNAME_ENTRY(VK_EXECUTE
),
427 VALANDNAME_ENTRY(VK_SNAPSHOT
),
428 VALANDNAME_ENTRY(VK_INSERT
),
429 VALANDNAME_ENTRY(VK_DELETE
),
430 VALANDNAME_ENTRY(VK_HELP
),
431 VALANDNAME_ENTRY(VK_LWIN
),
432 VALANDNAME_ENTRY(VK_RWIN
),
433 VALANDNAME_ENTRY(VK_APPS
),
434 VALANDNAME_ENTRY(VK_SLEEP
),
435 VALANDNAME_ENTRY(VK_NUMPAD0
),
436 VALANDNAME_ENTRY(VK_NUMPAD1
),
437 VALANDNAME_ENTRY(VK_NUMPAD2
),
438 VALANDNAME_ENTRY(VK_NUMPAD3
),
439 VALANDNAME_ENTRY(VK_NUMPAD4
),
440 VALANDNAME_ENTRY(VK_NUMPAD5
),
441 VALANDNAME_ENTRY(VK_NUMPAD6
),
442 VALANDNAME_ENTRY(VK_NUMPAD7
),
443 VALANDNAME_ENTRY(VK_NUMPAD8
),
444 VALANDNAME_ENTRY(VK_NUMPAD9
),
445 VALANDNAME_ENTRY(VK_MULTIPLY
),
446 VALANDNAME_ENTRY(VK_ADD
),
447 VALANDNAME_ENTRY(VK_SEPARATOR
),
448 VALANDNAME_ENTRY(VK_SUBTRACT
),
449 VALANDNAME_ENTRY(VK_DECIMAL
),
450 VALANDNAME_ENTRY(VK_DIVIDE
),
451 VALANDNAME_ENTRY(VK_F1
),
452 VALANDNAME_ENTRY(VK_F2
),
453 VALANDNAME_ENTRY(VK_F3
),
454 VALANDNAME_ENTRY(VK_F4
),
455 VALANDNAME_ENTRY(VK_F5
),
456 VALANDNAME_ENTRY(VK_F6
),
457 VALANDNAME_ENTRY(VK_F7
),
458 VALANDNAME_ENTRY(VK_F8
),
459 VALANDNAME_ENTRY(VK_F9
),
460 VALANDNAME_ENTRY(VK_F10
),
461 VALANDNAME_ENTRY(VK_F11
),
462 VALANDNAME_ENTRY(VK_F12
),
463 VALANDNAME_ENTRY(VK_F13
),
464 VALANDNAME_ENTRY(VK_F14
),
465 VALANDNAME_ENTRY(VK_F15
),
466 VALANDNAME_ENTRY(VK_F16
),
467 VALANDNAME_ENTRY(VK_F17
),
468 VALANDNAME_ENTRY(VK_F18
),
469 VALANDNAME_ENTRY(VK_F19
),
470 VALANDNAME_ENTRY(VK_F20
),
471 VALANDNAME_ENTRY(VK_F21
),
472 VALANDNAME_ENTRY(VK_F22
),
473 VALANDNAME_ENTRY(VK_F23
),
474 VALANDNAME_ENTRY(VK_F24
),
475 VALANDNAME_ENTRY(VK_NUMLOCK
),
476 VALANDNAME_ENTRY(VK_SCROLL
),
477 VALANDNAME_ENTRY(VK_LSHIFT
),
478 VALANDNAME_ENTRY(VK_RSHIFT
),
479 VALANDNAME_ENTRY(VK_LCONTROL
),
480 VALANDNAME_ENTRY(VK_RCONTROL
),
481 VALANDNAME_ENTRY(VK_LMENU
),
482 VALANDNAME_ENTRY(VK_RMENU
),
483 VALANDNAME_ENTRY(VK_BROWSER_BACK
),
484 VALANDNAME_ENTRY(VK_BROWSER_FORWARD
),
485 VALANDNAME_ENTRY(VK_BROWSER_REFRESH
),
486 VALANDNAME_ENTRY(VK_BROWSER_STOP
),
487 VALANDNAME_ENTRY(VK_BROWSER_SEARCH
),
488 VALANDNAME_ENTRY(VK_BROWSER_FAVORITES
),
489 VALANDNAME_ENTRY(VK_BROWSER_HOME
),
490 VALANDNAME_ENTRY(VK_VOLUME_MUTE
),
491 VALANDNAME_ENTRY(VK_VOLUME_DOWN
),
492 VALANDNAME_ENTRY(VK_VOLUME_UP
),
493 VALANDNAME_ENTRY(VK_MEDIA_NEXT_TRACK
),
494 VALANDNAME_ENTRY(VK_MEDIA_PREV_TRACK
),
495 VALANDNAME_ENTRY(VK_MEDIA_STOP
),
496 VALANDNAME_ENTRY(VK_MEDIA_PLAY_PAUSE
),
497 VALANDNAME_ENTRY(VK_LAUNCH_MAIL
),
498 VALANDNAME_ENTRY(VK_LAUNCH_MEDIA_SELECT
),
499 VALANDNAME_ENTRY(VK_LAUNCH_APP1
),
500 VALANDNAME_ENTRY(VK_LAUNCH_APP2
),
501 VALANDNAME_ENTRY(VK_OEM_1
),
502 VALANDNAME_ENTRY(VK_OEM_PLUS
),
503 VALANDNAME_ENTRY(VK_OEM_COMMA
),
504 VALANDNAME_ENTRY(VK_OEM_MINUS
),
505 VALANDNAME_ENTRY(VK_OEM_PERIOD
),
506 VALANDNAME_ENTRY(VK_OEM_2
),
507 VALANDNAME_ENTRY(VK_OEM_3
),
508 VALANDNAME_ENTRY(VK_OEM_4
),
509 VALANDNAME_ENTRY(VK_OEM_5
),
510 VALANDNAME_ENTRY(VK_OEM_6
),
511 VALANDNAME_ENTRY(VK_OEM_7
),
512 VALANDNAME_ENTRY(VK_OEM_8
),
513 VALANDNAME_ENTRY(VK_OEM_102
),
514 VALANDNAME_ENTRY(VK_PROCESSKEY
),
515 VALANDNAME_ENTRY(VK_PACKET
),
516 VALANDNAME_ENTRY(VK_ATTN
),
517 VALANDNAME_ENTRY(VK_CRSEL
),
518 VALANDNAME_ENTRY(VK_EXSEL
),
519 VALANDNAME_ENTRY(VK_EREOF
),
520 VALANDNAME_ENTRY(VK_PLAY
),
521 VALANDNAME_ENTRY(VK_ZOOM
),
522 VALANDNAME_ENTRY(VK_NONAME
),
523 VALANDNAME_ENTRY(VK_PA1
),
524 VALANDNAME_ENTRY(VK_OEM_CLEAR
),
561 AppendEnumValueInfo(result
, param
, virtualKeys
, name
);
564 void VirtualModifierKeysParamInfo(nsCString
& result
, uint64_t param
,
565 const char* name
, bool /* isPreCall */) {
566 const static nsTArray
<EnumValueAndName
> virtualKeys
{
567 VALANDNAME_ENTRY(MK_CONTROL
), VALANDNAME_ENTRY(MK_LBUTTON
),
568 VALANDNAME_ENTRY(MK_MBUTTON
), VALANDNAME_ENTRY(MK_RBUTTON
),
569 VALANDNAME_ENTRY(MK_SHIFT
), VALANDNAME_ENTRY(MK_XBUTTON1
),
570 VALANDNAME_ENTRY(MK_XBUTTON2
), {0, "(none)"}};
571 AppendFlagsInfo(result
, param
, virtualKeys
, name
);
574 void ParentNotifyEventParamInfo(nsCString
& str
, uint64_t param
,
575 const char* /* name */, bool /* isPreCall */) {
576 const static std::unordered_map
<uint64_t, const char*> eventValues
{
577 VALANDNAME_ENTRY(WM_CREATE
), VALANDNAME_ENTRY(WM_DESTROY
),
578 VALANDNAME_ENTRY(WM_LBUTTONDOWN
), VALANDNAME_ENTRY(WM_MBUTTONDOWN
),
579 VALANDNAME_ENTRY(WM_RBUTTONDOWN
), VALANDNAME_ENTRY(WM_XBUTTONDOWN
),
580 VALANDNAME_ENTRY(WM_POINTERDOWN
)};
581 AppendEnumValueInfo(str
, LOWORD(param
), eventValues
, "event");
582 str
.AppendASCII(" ");
583 HexParamInfo(str
, HIWORD(param
), "hiWord", false);
586 void KeystrokeFlagsParamInfo(nsCString
& str
, uint64_t param
,
587 const char* /* name */, bool /* isPreCall */) {
588 WORD repeatCount
= LOWORD(param
);
589 WORD keyFlags
= HIWORD(param
);
590 WORD scanCode
= LOBYTE(keyFlags
);
591 bool isExtendedKey
= (keyFlags
& KF_EXTENDED
) == KF_EXTENDED
;
593 scanCode
= MAKEWORD(scanCode
, 0xE0);
595 bool contextCode
= (keyFlags
& KF_ALTDOWN
) == KF_ALTDOWN
;
596 bool wasKeyDown
= (keyFlags
& KF_REPEAT
) == KF_REPEAT
;
597 bool transitionState
= (keyFlags
& KF_UP
) == KF_UP
;
600 "repeatCount: %d scanCode: %d isExtended: %d, contextCode: %d "
601 "previousKeyState: %d transitionState: %d",
602 repeatCount
, scanCode
, isExtendedKey
? 1 : 0, contextCode
? 1 : 0,
603 wasKeyDown
? 1 : 0, transitionState
? 1 : 0);
606 void VirtualKeysLowWordDistanceHighWordParamInfo(nsCString
& str
, uint64_t value
,
607 const char* /* name */,
609 VirtualModifierKeysParamInfo(str
, LOWORD(value
), "virtualKeys", isPreCall
);
610 str
.AppendASCII(" ");
611 IntParamInfo(str
, HIWORD(value
), "distance", isPreCall
);
614 void ShowWindowReasonParamInfo(nsCString
& str
, uint64_t value
, const char* name
,
615 bool /* isPreCall */) {
616 const static std::unordered_map
<uint64_t, const char*> showWindowReasonValues
{
617 VALANDNAME_ENTRY(SW_OTHERUNZOOM
),
618 VALANDNAME_ENTRY(SW_OTHERZOOM
),
619 VALANDNAME_ENTRY(SW_PARENTCLOSING
),
620 VALANDNAME_ENTRY(SW_PARENTOPENING
),
621 {0, "Call to ShowWindow()"}};
622 AppendEnumValueInfo(str
, value
, showWindowReasonValues
, name
);
625 void WindowEdgeParamInfo(nsCString
& str
, uint64_t value
, const char* name
,
626 bool /* isPreCall */) {
627 const static std::unordered_map
<uint64_t, const char*> windowEdgeValues
{
628 VALANDNAME_ENTRY(WMSZ_BOTTOM
), VALANDNAME_ENTRY(WMSZ_BOTTOMLEFT
),
629 VALANDNAME_ENTRY(WMSZ_BOTTOMRIGHT
), VALANDNAME_ENTRY(WMSZ_LEFT
),
630 VALANDNAME_ENTRY(WMSZ_RIGHT
), VALANDNAME_ENTRY(WMSZ_TOP
),
631 VALANDNAME_ENTRY(WMSZ_TOPLEFT
), VALANDNAME_ENTRY(WMSZ_TOPRIGHT
)};
632 AppendEnumValueInfo(str
, value
, windowEdgeValues
, name
);
635 void UiActionParamInfo(nsCString
& str
, uint64_t value
, const char* name
,
636 bool /* isPreCall */) {
637 const static std::unordered_map
<uint64_t, const char*> uiActionValues
{
638 VALANDNAME_ENTRY(SPI_GETACCESSTIMEOUT
),
639 VALANDNAME_ENTRY(SPI_GETAUDIODESCRIPTION
),
640 VALANDNAME_ENTRY(SPI_GETCLIENTAREAANIMATION
),
641 VALANDNAME_ENTRY(SPI_GETDISABLEOVERLAPPEDCONTENT
),
642 VALANDNAME_ENTRY(SPI_GETFILTERKEYS
),
643 VALANDNAME_ENTRY(SPI_GETFOCUSBORDERHEIGHT
),
644 VALANDNAME_ENTRY(SPI_GETFOCUSBORDERWIDTH
),
645 VALANDNAME_ENTRY(SPI_GETHIGHCONTRAST
),
647 VALANDNAME_ENTRY(SPI_GETLOGICALDPIOVERRIDE
),
648 VALANDNAME_ENTRY(SPI_SETLOGICALDPIOVERRIDE
),
650 VALANDNAME_ENTRY(SPI_GETMESSAGEDURATION
),
651 VALANDNAME_ENTRY(SPI_GETMOUSECLICKLOCK
),
652 VALANDNAME_ENTRY(SPI_GETMOUSECLICKLOCKTIME
),
653 VALANDNAME_ENTRY(SPI_GETMOUSEKEYS
), VALANDNAME_ENTRY(SPI_GETMOUSESONAR
),
654 VALANDNAME_ENTRY(SPI_GETMOUSEVANISH
),
655 VALANDNAME_ENTRY(SPI_GETSCREENREADER
),
656 VALANDNAME_ENTRY(SPI_GETSERIALKEYS
),
657 VALANDNAME_ENTRY(SPI_GETSHOWSOUNDS
),
658 VALANDNAME_ENTRY(SPI_GETSOUNDSENTRY
),
659 VALANDNAME_ENTRY(SPI_GETSTICKYKEYS
),
660 VALANDNAME_ENTRY(SPI_GETTOGGLEKEYS
),
661 VALANDNAME_ENTRY(SPI_SETACCESSTIMEOUT
),
662 VALANDNAME_ENTRY(SPI_SETAUDIODESCRIPTION
),
663 VALANDNAME_ENTRY(SPI_SETCLIENTAREAANIMATION
),
664 VALANDNAME_ENTRY(SPI_SETDISABLEOVERLAPPEDCONTENT
),
665 VALANDNAME_ENTRY(SPI_SETFILTERKEYS
),
666 VALANDNAME_ENTRY(SPI_SETFOCUSBORDERHEIGHT
),
667 VALANDNAME_ENTRY(SPI_SETFOCUSBORDERWIDTH
),
668 VALANDNAME_ENTRY(SPI_SETHIGHCONTRAST
),
669 VALANDNAME_ENTRY(SPI_SETMESSAGEDURATION
),
670 VALANDNAME_ENTRY(SPI_SETMOUSECLICKLOCK
),
671 VALANDNAME_ENTRY(SPI_SETMOUSECLICKLOCKTIME
),
672 VALANDNAME_ENTRY(SPI_SETMOUSEKEYS
), VALANDNAME_ENTRY(SPI_SETMOUSESONAR
),
673 VALANDNAME_ENTRY(SPI_SETMOUSEVANISH
),
674 VALANDNAME_ENTRY(SPI_SETSCREENREADER
),
675 VALANDNAME_ENTRY(SPI_SETSERIALKEYS
),
676 VALANDNAME_ENTRY(SPI_SETSHOWSOUNDS
),
677 VALANDNAME_ENTRY(SPI_SETSOUNDSENTRY
),
678 VALANDNAME_ENTRY(SPI_SETSTICKYKEYS
),
679 VALANDNAME_ENTRY(SPI_SETTOGGLEKEYS
), VALANDNAME_ENTRY(SPI_GETCLEARTYPE
),
680 VALANDNAME_ENTRY(SPI_GETDESKWALLPAPER
),
681 VALANDNAME_ENTRY(SPI_GETDROPSHADOW
), VALANDNAME_ENTRY(SPI_GETFLATMENU
),
682 VALANDNAME_ENTRY(SPI_GETFONTSMOOTHING
),
683 VALANDNAME_ENTRY(SPI_GETFONTSMOOTHINGCONTRAST
),
684 VALANDNAME_ENTRY(SPI_GETFONTSMOOTHINGORIENTATION
),
685 VALANDNAME_ENTRY(SPI_GETFONTSMOOTHINGTYPE
),
686 VALANDNAME_ENTRY(SPI_GETWORKAREA
), VALANDNAME_ENTRY(SPI_SETCLEARTYPE
),
687 VALANDNAME_ENTRY(SPI_SETCURSORS
), VALANDNAME_ENTRY(SPI_SETDESKPATTERN
),
688 VALANDNAME_ENTRY(SPI_SETDESKWALLPAPER
),
689 VALANDNAME_ENTRY(SPI_SETDROPSHADOW
), VALANDNAME_ENTRY(SPI_SETFLATMENU
),
690 VALANDNAME_ENTRY(SPI_SETFONTSMOOTHING
),
691 VALANDNAME_ENTRY(SPI_SETFONTSMOOTHINGCONTRAST
),
692 VALANDNAME_ENTRY(SPI_SETFONTSMOOTHINGORIENTATION
),
693 VALANDNAME_ENTRY(SPI_SETFONTSMOOTHINGTYPE
),
694 VALANDNAME_ENTRY(SPI_SETWORKAREA
), VALANDNAME_ENTRY(SPI_GETICONMETRICS
),
695 VALANDNAME_ENTRY(SPI_GETICONTITLELOGFONT
),
696 VALANDNAME_ENTRY(SPI_GETICONTITLEWRAP
),
697 VALANDNAME_ENTRY(SPI_ICONHORIZONTALSPACING
),
698 VALANDNAME_ENTRY(SPI_ICONVERTICALSPACING
),
699 VALANDNAME_ENTRY(SPI_SETICONMETRICS
), VALANDNAME_ENTRY(SPI_SETICONS
),
700 VALANDNAME_ENTRY(SPI_SETICONTITLELOGFONT
),
701 VALANDNAME_ENTRY(SPI_SETICONTITLEWRAP
), VALANDNAME_ENTRY(SPI_GETBEEP
),
702 VALANDNAME_ENTRY(SPI_GETBLOCKSENDINPUTRESETS
),
704 VALANDNAME_ENTRY(SPI_GETCONTACTVISUALIZATION
),
705 VALANDNAME_ENTRY(SPI_SETCONTACTVISUALIZATION
),
707 VALANDNAME_ENTRY(SPI_GETDEFAULTINPUTLANG
),
709 VALANDNAME_ENTRY(SPI_GETGESTUREVISUALIZATION
),
710 VALANDNAME_ENTRY(SPI_SETGESTUREVISUALIZATION
),
712 VALANDNAME_ENTRY(SPI_GETKEYBOARDCUES
),
713 VALANDNAME_ENTRY(SPI_GETKEYBOARDDELAY
),
714 VALANDNAME_ENTRY(SPI_GETKEYBOARDPREF
),
715 VALANDNAME_ENTRY(SPI_GETKEYBOARDSPEED
), VALANDNAME_ENTRY(SPI_GETMOUSE
),
716 VALANDNAME_ENTRY(SPI_GETMOUSEHOVERHEIGHT
),
717 VALANDNAME_ENTRY(SPI_GETMOUSEHOVERTIME
),
718 VALANDNAME_ENTRY(SPI_GETMOUSEHOVERWIDTH
),
719 VALANDNAME_ENTRY(SPI_GETMOUSESPEED
),
720 VALANDNAME_ENTRY(SPI_GETMOUSETRAILS
),
722 VALANDNAME_ENTRY(SPI_GETMOUSEWHEELROUTING
),
723 VALANDNAME_ENTRY(SPI_SETMOUSEWHEELROUTING
),
726 VALANDNAME_ENTRY(SPI_GETPENVISUALIZATION
),
727 VALANDNAME_ENTRY(SPI_SETPENVISUALIZATION
),
729 VALANDNAME_ENTRY(SPI_GETSNAPTODEFBUTTON
),
731 VALANDNAME_ENTRY(SPI_GETSYSTEMLANGUAGEBAR
),
732 VALANDNAME_ENTRY(SPI_SETSYSTEMLANGUAGEBAR
),
733 VALANDNAME_ENTRY(SPI_GETTHREADLOCALINPUTSETTINGS
),
734 VALANDNAME_ENTRY(SPI_SETTHREADLOCALINPUTSETTINGS
),
736 VALANDNAME_ENTRY(SPI_GETWHEELSCROLLCHARS
),
737 VALANDNAME_ENTRY(SPI_GETWHEELSCROLLLINES
),
738 VALANDNAME_ENTRY(SPI_SETBEEP
),
739 VALANDNAME_ENTRY(SPI_SETBLOCKSENDINPUTRESETS
),
740 VALANDNAME_ENTRY(SPI_SETDEFAULTINPUTLANG
),
741 VALANDNAME_ENTRY(SPI_SETDOUBLECLICKTIME
),
742 VALANDNAME_ENTRY(SPI_SETDOUBLECLKHEIGHT
),
743 VALANDNAME_ENTRY(SPI_SETDOUBLECLKWIDTH
),
744 VALANDNAME_ENTRY(SPI_SETKEYBOARDCUES
),
745 VALANDNAME_ENTRY(SPI_SETKEYBOARDDELAY
),
746 VALANDNAME_ENTRY(SPI_SETKEYBOARDPREF
),
747 VALANDNAME_ENTRY(SPI_SETKEYBOARDSPEED
),
748 VALANDNAME_ENTRY(SPI_SETLANGTOGGLE
), VALANDNAME_ENTRY(SPI_SETMOUSE
),
749 VALANDNAME_ENTRY(SPI_SETMOUSEBUTTONSWAP
),
750 VALANDNAME_ENTRY(SPI_SETMOUSEHOVERHEIGHT
),
751 VALANDNAME_ENTRY(SPI_SETMOUSEHOVERTIME
),
752 VALANDNAME_ENTRY(SPI_SETMOUSEHOVERWIDTH
),
753 VALANDNAME_ENTRY(SPI_SETMOUSESPEED
),
754 VALANDNAME_ENTRY(SPI_SETMOUSETRAILS
),
755 VALANDNAME_ENTRY(SPI_SETSNAPTODEFBUTTON
),
756 VALANDNAME_ENTRY(SPI_SETWHEELSCROLLCHARS
),
757 VALANDNAME_ENTRY(SPI_SETWHEELSCROLLLINES
),
758 VALANDNAME_ENTRY(SPI_GETMENUDROPALIGNMENT
),
759 VALANDNAME_ENTRY(SPI_GETMENUFADE
),
760 VALANDNAME_ENTRY(SPI_GETMENUSHOWDELAY
),
761 VALANDNAME_ENTRY(SPI_SETMENUDROPALIGNMENT
),
762 VALANDNAME_ENTRY(SPI_SETMENUFADE
),
763 VALANDNAME_ENTRY(SPI_SETMENUSHOWDELAY
),
764 VALANDNAME_ENTRY(SPI_GETLOWPOWERACTIVE
),
765 VALANDNAME_ENTRY(SPI_GETLOWPOWERTIMEOUT
),
766 VALANDNAME_ENTRY(SPI_GETPOWEROFFACTIVE
),
767 VALANDNAME_ENTRY(SPI_GETPOWEROFFTIMEOUT
),
768 VALANDNAME_ENTRY(SPI_SETLOWPOWERACTIVE
),
769 VALANDNAME_ENTRY(SPI_SETLOWPOWERTIMEOUT
),
770 VALANDNAME_ENTRY(SPI_SETPOWEROFFACTIVE
),
771 VALANDNAME_ENTRY(SPI_SETPOWEROFFTIMEOUT
),
772 VALANDNAME_ENTRY(SPI_GETSCREENSAVEACTIVE
),
773 VALANDNAME_ENTRY(SPI_GETSCREENSAVERRUNNING
),
774 VALANDNAME_ENTRY(SPI_GETSCREENSAVESECURE
),
775 VALANDNAME_ENTRY(SPI_GETSCREENSAVETIMEOUT
),
776 VALANDNAME_ENTRY(SPI_SETSCREENSAVEACTIVE
),
777 VALANDNAME_ENTRY(SPI_SETSCREENSAVERRUNNING
),
778 VALANDNAME_ENTRY(SPI_SETSCREENSAVESECURE
),
779 VALANDNAME_ENTRY(SPI_SETSCREENSAVETIMEOUT
),
780 VALANDNAME_ENTRY(SPI_GETHUNGAPPTIMEOUT
),
781 VALANDNAME_ENTRY(SPI_GETWAITTOKILLTIMEOUT
),
782 VALANDNAME_ENTRY(SPI_GETWAITTOKILLSERVICETIMEOUT
),
783 VALANDNAME_ENTRY(SPI_SETHUNGAPPTIMEOUT
),
784 VALANDNAME_ENTRY(SPI_SETWAITTOKILLTIMEOUT
),
785 VALANDNAME_ENTRY(SPI_SETWAITTOKILLSERVICETIMEOUT
),
786 VALANDNAME_ENTRY(SPI_GETCOMBOBOXANIMATION
),
787 VALANDNAME_ENTRY(SPI_GETCURSORSHADOW
),
788 VALANDNAME_ENTRY(SPI_GETGRADIENTCAPTIONS
),
789 VALANDNAME_ENTRY(SPI_GETHOTTRACKING
),
790 VALANDNAME_ENTRY(SPI_GETLISTBOXSMOOTHSCROLLING
),
791 VALANDNAME_ENTRY(SPI_GETMENUANIMATION
),
792 VALANDNAME_ENTRY(SPI_GETMENUUNDERLINES
),
793 VALANDNAME_ENTRY(SPI_GETSELECTIONFADE
),
794 VALANDNAME_ENTRY(SPI_GETTOOLTIPANIMATION
),
795 VALANDNAME_ENTRY(SPI_GETTOOLTIPFADE
),
796 VALANDNAME_ENTRY(SPI_GETUIEFFECTS
),
797 VALANDNAME_ENTRY(SPI_SETCOMBOBOXANIMATION
),
798 VALANDNAME_ENTRY(SPI_SETCURSORSHADOW
),
799 VALANDNAME_ENTRY(SPI_SETGRADIENTCAPTIONS
),
800 VALANDNAME_ENTRY(SPI_SETHOTTRACKING
),
801 VALANDNAME_ENTRY(SPI_SETLISTBOXSMOOTHSCROLLING
),
802 VALANDNAME_ENTRY(SPI_SETMENUANIMATION
),
803 VALANDNAME_ENTRY(SPI_SETMENUUNDERLINES
),
804 VALANDNAME_ENTRY(SPI_SETSELECTIONFADE
),
805 VALANDNAME_ENTRY(SPI_SETTOOLTIPANIMATION
),
806 VALANDNAME_ENTRY(SPI_SETTOOLTIPFADE
),
807 VALANDNAME_ENTRY(SPI_SETUIEFFECTS
),
808 VALANDNAME_ENTRY(SPI_GETACTIVEWINDOWTRACKING
),
809 VALANDNAME_ENTRY(SPI_GETACTIVEWNDTRKZORDER
),
810 VALANDNAME_ENTRY(SPI_GETACTIVEWNDTRKTIMEOUT
),
811 VALANDNAME_ENTRY(SPI_GETANIMATION
), VALANDNAME_ENTRY(SPI_GETBORDER
),
812 VALANDNAME_ENTRY(SPI_GETCARETWIDTH
),
813 VALANDNAME_ENTRY(SPI_GETDOCKMOVING
),
814 VALANDNAME_ENTRY(SPI_GETDRAGFROMMAXIMIZE
),
815 VALANDNAME_ENTRY(SPI_GETDRAGFULLWINDOWS
),
816 VALANDNAME_ENTRY(SPI_GETFOREGROUNDFLASHCOUNT
),
817 VALANDNAME_ENTRY(SPI_GETFOREGROUNDLOCKTIMEOUT
),
818 VALANDNAME_ENTRY(SPI_GETMINIMIZEDMETRICS
),
819 VALANDNAME_ENTRY(SPI_GETMOUSEDOCKTHRESHOLD
),
820 VALANDNAME_ENTRY(SPI_GETMOUSEDRAGOUTTHRESHOLD
),
821 VALANDNAME_ENTRY(SPI_GETMOUSESIDEMOVETHRESHOLD
),
822 VALANDNAME_ENTRY(SPI_GETNONCLIENTMETRICS
),
823 VALANDNAME_ENTRY(SPI_GETPENDOCKTHRESHOLD
),
824 VALANDNAME_ENTRY(SPI_GETPENDRAGOUTTHRESHOLD
),
825 VALANDNAME_ENTRY(SPI_GETPENSIDEMOVETHRESHOLD
),
826 VALANDNAME_ENTRY(SPI_GETSHOWIMEUI
), VALANDNAME_ENTRY(SPI_GETSNAPSIZING
),
827 VALANDNAME_ENTRY(SPI_GETWINARRANGING
),
828 VALANDNAME_ENTRY(SPI_SETACTIVEWINDOWTRACKING
),
829 VALANDNAME_ENTRY(SPI_SETACTIVEWNDTRKZORDER
),
830 VALANDNAME_ENTRY(SPI_SETACTIVEWNDTRKTIMEOUT
),
831 VALANDNAME_ENTRY(SPI_SETANIMATION
), VALANDNAME_ENTRY(SPI_SETBORDER
),
832 VALANDNAME_ENTRY(SPI_SETCARETWIDTH
),
833 VALANDNAME_ENTRY(SPI_SETDOCKMOVING
),
834 VALANDNAME_ENTRY(SPI_SETDRAGFROMMAXIMIZE
),
835 VALANDNAME_ENTRY(SPI_SETDRAGFULLWINDOWS
),
836 VALANDNAME_ENTRY(SPI_SETFOREGROUNDFLASHCOUNT
),
837 VALANDNAME_ENTRY(SPI_SETFOREGROUNDLOCKTIMEOUT
),
838 VALANDNAME_ENTRY(SPI_SETMINIMIZEDMETRICS
),
839 VALANDNAME_ENTRY(SPI_SETMOUSEDOCKTHRESHOLD
),
840 VALANDNAME_ENTRY(SPI_SETMOUSEDRAGOUTTHRESHOLD
),
841 VALANDNAME_ENTRY(SPI_SETMOUSESIDEMOVETHRESHOLD
),
842 VALANDNAME_ENTRY(SPI_SETNONCLIENTMETRICS
),
843 VALANDNAME_ENTRY(SPI_SETPENDOCKTHRESHOLD
),
844 VALANDNAME_ENTRY(SPI_SETPENDRAGOUTTHRESHOLD
),
845 VALANDNAME_ENTRY(SPI_SETPENSIDEMOVETHRESHOLD
),
846 VALANDNAME_ENTRY(SPI_SETSHOWIMEUI
), VALANDNAME_ENTRY(SPI_SETSNAPSIZING
),
847 VALANDNAME_ENTRY(SPI_SETWINARRANGING
),
849 AppendEnumValueInfo(str
, value
, uiActionValues
, name
);
852 nsAutoCString
WmSizeParamInfo(uint64_t wParam
, uint64_t lParam
,
853 bool /* isPreCall */) {
854 nsAutoCString result
;
855 const static std::unordered_map
<uint64_t, const char*> sizeValues
{
856 VALANDNAME_ENTRY(SIZE_RESTORED
), VALANDNAME_ENTRY(SIZE_MINIMIZED
),
857 VALANDNAME_ENTRY(SIZE_MAXIMIZED
), VALANDNAME_ENTRY(SIZE_MAXSHOW
),
858 VALANDNAME_ENTRY(SIZE_MAXHIDE
)};
859 AppendEnumValueInfo(result
, wParam
, sizeValues
, "size");
860 result
.AppendPrintf(" width=%d height=%d", static_cast<int>(LOWORD(lParam
)),
861 static_cast<int>(HIWORD(lParam
)));
865 const nsTArray
<EnumValueAndName
> windowPositionFlags
= {
866 VALANDNAME_ENTRY(SWP_DRAWFRAME
), VALANDNAME_ENTRY(SWP_HIDEWINDOW
),
867 VALANDNAME_ENTRY(SWP_NOACTIVATE
), VALANDNAME_ENTRY(SWP_NOCOPYBITS
),
868 VALANDNAME_ENTRY(SWP_NOMOVE
), VALANDNAME_ENTRY(SWP_NOOWNERZORDER
),
869 VALANDNAME_ENTRY(SWP_NOREDRAW
), VALANDNAME_ENTRY(SWP_NOSENDCHANGING
),
870 VALANDNAME_ENTRY(SWP_NOSIZE
), VALANDNAME_ENTRY(SWP_NOZORDER
),
871 VALANDNAME_ENTRY(SWP_SHOWWINDOW
),
874 void WindowPosParamInfo(nsCString
& str
, uint64_t value
, const char* name
,
875 bool /* isPreCall */) {
876 LPWINDOWPOS windowPos
= reinterpret_cast<LPWINDOWPOS
>(value
);
877 if (windowPos
== nullptr) {
878 str
.AppendASCII("null windowPos?");
881 HexParamInfo(str
, reinterpret_cast<uint64_t>(windowPos
->hwnd
), "hwnd", false);
882 str
.AppendASCII(" ");
883 HexParamInfo(str
, reinterpret_cast<uint64_t>(windowPos
->hwndInsertAfter
),
884 "hwndInsertAfter", false);
885 str
.AppendASCII(" ");
886 IntParamInfo(str
, windowPos
->x
, "x", false);
887 str
.AppendASCII(" ");
888 IntParamInfo(str
, windowPos
->y
, "y", false);
889 str
.AppendASCII(" ");
890 IntParamInfo(str
, windowPos
->cx
, "cx", false);
891 str
.AppendASCII(" ");
892 IntParamInfo(str
, windowPos
->cy
, "cy", false);
893 str
.AppendASCII(" ");
894 AppendFlagsInfo(str
, windowPos
->flags
, windowPositionFlags
, "flags");
897 void StyleOrExtendedParamInfo(nsCString
& str
, uint64_t value
, const char* name
,
898 bool /* isPreCall */) {
899 const static std::unordered_map
<uint64_t, const char*> styleOrExtended
{
900 VALANDNAME_ENTRY(GWL_EXSTYLE
), VALANDNAME_ENTRY(GWL_STYLE
)};
901 AppendEnumValueInfo(str
, value
, styleOrExtended
, name
);
904 void StyleStructParamInfo(nsCString
& str
, uint64_t value
, const char* name
,
905 bool /* isPreCall */) {
906 LPSTYLESTRUCT styleStruct
= reinterpret_cast<LPSTYLESTRUCT
>(value
);
907 if (styleStruct
== nullptr) {
908 str
.AppendASCII("null STYLESTRUCT?");
911 HexParamInfo(str
, styleStruct
->styleOld
, "styleOld", false);
912 str
.AppendASCII(" ");
913 HexParamInfo(str
, styleStruct
->styleNew
, "styleNew", false);
916 void NcCalcSizeParamsParamInfo(nsCString
& str
, uint64_t value
, const char* name
,
917 bool /* isPreCall */) {
918 LPNCCALCSIZE_PARAMS params
= reinterpret_cast<LPNCCALCSIZE_PARAMS
>(value
);
919 if (params
== nullptr) {
920 str
.AppendASCII("null NCCALCSIZE_PARAMS?");
923 str
.AppendPrintf("%s[0]: ", name
);
924 RectParamInfo(str
, reinterpret_cast<uintptr_t>(¶ms
->rgrc
[0]), nullptr,
926 str
.AppendPrintf(" %s[1]: ", name
);
927 RectParamInfo(str
, reinterpret_cast<uintptr_t>(¶ms
->rgrc
[1]), nullptr,
929 str
.AppendPrintf(" %s[2]: ", name
);
930 RectParamInfo(str
, reinterpret_cast<uintptr_t>(¶ms
->rgrc
[2]), nullptr,
932 str
.AppendASCII(" ");
933 WindowPosParamInfo(str
, reinterpret_cast<uintptr_t>(params
->lppos
), nullptr,
937 nsAutoCString
WmNcCalcSizeParamInfo(uint64_t wParam
, uint64_t lParam
,
938 bool /* isPreCall */) {
939 nsAutoCString result
;
940 TrueFalseParamInfo(result
, wParam
, "shouldIndicateValidArea", false);
941 result
.AppendASCII(" ");
942 if (wParam
== TRUE
) {
943 NcCalcSizeParamsParamInfo(result
, lParam
, "ncCalcSizeParams", false);
945 RectParamInfo(result
, lParam
, "rect", false);
950 void ActivateWParamInfo(nsCString
& result
, uint64_t wParam
, const char* name
,
951 bool /* isPreCall */) {
952 const static std::unordered_map
<uint64_t, const char*> activateValues
{
953 VALANDNAME_ENTRY(WA_ACTIVE
), VALANDNAME_ENTRY(WA_CLICKACTIVE
),
954 VALANDNAME_ENTRY(WA_INACTIVE
)};
955 AppendEnumValueInfo(result
, wParam
, activateValues
, name
);
958 void HitTestParamInfo(nsCString
& result
, uint64_t param
, const char* name
,
959 bool /* isPreCall */) {
960 const static std::unordered_map
<uint64_t, const char*> hitTestResults
{
961 VALANDNAME_ENTRY(HTBORDER
), VALANDNAME_ENTRY(HTBOTTOM
),
962 VALANDNAME_ENTRY(HTBOTTOMLEFT
), VALANDNAME_ENTRY(HTBOTTOMRIGHT
),
963 VALANDNAME_ENTRY(HTCAPTION
), VALANDNAME_ENTRY(HTCLIENT
),
964 VALANDNAME_ENTRY(HTCLOSE
), VALANDNAME_ENTRY(HTERROR
),
965 VALANDNAME_ENTRY(HTGROWBOX
), VALANDNAME_ENTRY(HTHELP
),
966 VALANDNAME_ENTRY(HTHSCROLL
), VALANDNAME_ENTRY(HTLEFT
),
967 VALANDNAME_ENTRY(HTMENU
), VALANDNAME_ENTRY(HTMAXBUTTON
),
968 VALANDNAME_ENTRY(HTMINBUTTON
), VALANDNAME_ENTRY(HTNOWHERE
),
969 VALANDNAME_ENTRY(HTREDUCE
), VALANDNAME_ENTRY(HTRIGHT
),
970 VALANDNAME_ENTRY(HTSIZE
), VALANDNAME_ENTRY(HTSYSMENU
),
971 VALANDNAME_ENTRY(HTTOP
), VALANDNAME_ENTRY(HTTOPLEFT
),
972 VALANDNAME_ENTRY(HTTOPRIGHT
), VALANDNAME_ENTRY(HTTRANSPARENT
),
973 VALANDNAME_ENTRY(HTVSCROLL
), VALANDNAME_ENTRY(HTZOOM
),
975 AppendEnumValueInfo(result
, param
, hitTestResults
, name
);
978 void SetCursorLParamInfo(nsCString
& result
, uint64_t lParam
,
979 const char* /* name */, bool /* isPreCall */) {
980 HitTestParamInfo(result
, LOWORD(lParam
), "hitTestResult", false);
981 result
.AppendASCII(" ");
982 HexParamInfo(result
, HIWORD(lParam
), "message", false);
985 void MinMaxInfoParamInfo(nsCString
& result
, uint64_t value
,
986 const char* /* name */, bool /* isPreCall */) {
987 PMINMAXINFO minMaxInfo
= reinterpret_cast<PMINMAXINFO
>(value
);
988 if (minMaxInfo
== nullptr) {
989 result
.AppendPrintf("NULL minMaxInfo?");
992 PointExplicitParamInfo(result
, minMaxInfo
->ptMaxSize
, "maxSize");
993 result
.AppendASCII(" ");
994 PointExplicitParamInfo(result
, minMaxInfo
->ptMaxPosition
, "maxPosition");
995 result
.AppendASCII(" ");
996 PointExplicitParamInfo(result
, minMaxInfo
->ptMinTrackSize
, "minTrackSize");
997 result
.AppendASCII(" ");
998 PointExplicitParamInfo(result
, minMaxInfo
->ptMaxTrackSize
, "maxTrackSize");
1001 void WideStringParamInfo(nsCString
& result
, uint64_t value
, const char* name
,
1002 bool /* isPreCall */) {
1003 result
.AppendPrintf("%s=%S", name
, reinterpret_cast<LPCWSTR
>(value
));
1006 void DeviceEventParamInfo(nsCString
& result
, uint64_t value
, const char* name
,
1007 bool /* isPreCall */) {
1008 const static std::unordered_map
<uint64_t, const char*> deviceEventValues
{
1009 VALANDNAME_ENTRY(DBT_DEVNODES_CHANGED
),
1010 VALANDNAME_ENTRY(DBT_QUERYCHANGECONFIG
),
1011 VALANDNAME_ENTRY(DBT_CONFIGCHANGED
),
1012 VALANDNAME_ENTRY(DBT_CONFIGCHANGECANCELED
),
1013 VALANDNAME_ENTRY(DBT_DEVICEARRIVAL
),
1014 VALANDNAME_ENTRY(DBT_DEVICEQUERYREMOVE
),
1015 VALANDNAME_ENTRY(DBT_DEVICEQUERYREMOVEFAILED
),
1016 VALANDNAME_ENTRY(DBT_DEVICEREMOVEPENDING
),
1017 VALANDNAME_ENTRY(DBT_DEVICEREMOVECOMPLETE
),
1018 VALANDNAME_ENTRY(DBT_DEVICETYPESPECIFIC
),
1019 VALANDNAME_ENTRY(DBT_CUSTOMEVENT
),
1020 VALANDNAME_ENTRY(DBT_USERDEFINED
)};
1021 AppendEnumValueInfo(result
, value
, deviceEventValues
, name
);
1024 void ResolutionParamInfo(nsCString
& result
, uint64_t value
, const char* name
,
1025 bool /* isPreCall */) {
1026 result
.AppendPrintf("horizontalRes=%d verticalRes=%d", LOWORD(value
),
1030 // Window message with default wParam/lParam logging
1031 #define ENTRY(_msg) \
1034 # _msg, _msg, DefaultParamInfo \
1037 // Window message with no parameters
1038 #define ENTRY_WITH_NO_PARAM_INFO(_msg) \
1041 # _msg, _msg, nullptr \
1044 // Window message with custom parameter logging functions
1045 #define ENTRY_WITH_CUSTOM_PARAM_INFO(_msg, paramInfoFn) \
1048 # _msg, _msg, paramInfoFn \
1051 // Window message with separate custom wParam and lParam logging functions
1052 #define ENTRY_WITH_SPLIT_PARAM_INFOS(_msg, wParamInfoFn, wParamName, \
1053 lParamInfoFn, lParamName) \
1056 # _msg, _msg, nullptr, wParamInfoFn, wParamName, lParamInfoFn, lParamName \
1059 std::unordered_map
<UINT
, EventMsgInfo
> gAllEvents
= {
1060 ENTRY_WITH_NO_PARAM_INFO(WM_NULL
),
1061 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_CREATE
, nullptr, nullptr,
1062 CreateStructParamInfo
, "createStruct"),
1063 ENTRY_WITH_NO_PARAM_INFO(WM_DESTROY
),
1064 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOVE
, nullptr, nullptr,
1065 XLowWordYHighWordParamInfo
, "upperLeft"),
1066 ENTRY_WITH_CUSTOM_PARAM_INFO(WM_SIZE
, WmSizeParamInfo
),
1067 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ACTIVATE
, ActivateWParamInfo
, "wParam",
1068 HexParamInfo
, "handle"),
1069 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETFOCUS
, HexParamInfo
, "handle", nullptr,
1071 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KILLFOCUS
, HexParamInfo
, "handle", nullptr,
1073 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ENABLE
, TrueFalseParamInfo
, "enabled",
1075 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETREDRAW
, TrueFalseParamInfo
,
1076 "redrawState", nullptr, nullptr),
1079 ENTRY(WM_GETTEXTLENGTH
),
1080 ENTRY_WITH_NO_PARAM_INFO(WM_PAINT
),
1081 ENTRY_WITH_NO_PARAM_INFO(WM_CLOSE
),
1082 ENTRY(WM_QUERYENDSESSION
),
1083 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_QUIT
, HexParamInfo
, "exitCode", nullptr,
1085 ENTRY(WM_QUERYOPEN
),
1086 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ERASEBKGND
, HexParamInfo
, "deviceContext",
1088 ENTRY(WM_SYSCOLORCHANGE
),
1089 ENTRY(WM_ENDSESSION
),
1090 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SHOWWINDOW
, TrueFalseParamInfo
,
1091 "windowBeingShown", ShowWindowReasonParamInfo
,
1093 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETTINGCHANGE
, UiActionParamInfo
,
1094 "uiAction", WideStringParamInfo
,
1096 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DEVMODECHANGE
, nullptr, nullptr,
1097 WideStringParamInfo
, "deviceName"),
1098 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ACTIVATEAPP
, TrueFalseParamInfo
,
1099 "activated", HexParamInfo
, "threadId"),
1100 ENTRY(WM_FONTCHANGE
),
1101 ENTRY(WM_TIMECHANGE
),
1102 ENTRY(WM_CANCELMODE
),
1103 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETCURSOR
, HexParamInfo
, "windowHandle",
1104 SetCursorLParamInfo
, ""),
1105 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEACTIVATE
, HexParamInfo
, "windowHandle",
1106 SetCursorLParamInfo
, ""),
1107 ENTRY(WM_CHILDACTIVATE
),
1108 ENTRY(WM_QUEUESYNC
),
1109 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_GETMINMAXINFO
, nullptr, nullptr,
1110 MinMaxInfoParamInfo
, ""),
1111 ENTRY(WM_PAINTICON
),
1112 ENTRY(WM_ICONERASEBKGND
),
1113 ENTRY(WM_NEXTDLGCTL
),
1114 ENTRY(WM_SPOOLERSTATUS
),
1116 ENTRY(WM_MEASUREITEM
),
1117 ENTRY(WM_DELETEITEM
),
1118 ENTRY(WM_VKEYTOITEM
),
1119 ENTRY(WM_CHARTOITEM
),
1122 ENTRY(WM_SETHOTKEY
),
1123 ENTRY(WM_GETHOTKEY
),
1124 ENTRY(WM_QUERYDRAGICON
),
1125 ENTRY(WM_COMPAREITEM
),
1126 ENTRY(WM_GETOBJECT
),
1127 ENTRY(WM_COMPACTING
),
1128 ENTRY(WM_COMMNOTIFY
),
1129 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_WINDOWPOSCHANGING
, nullptr, nullptr,
1130 WindowPosParamInfo
, "newSizeAndPos"),
1131 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_WINDOWPOSCHANGED
, nullptr, nullptr,
1132 WindowPosParamInfo
, "newSizeAndPos"),
1135 ENTRY(WM_CANCELJOURNAL
),
1137 ENTRY(WM_INPUTLANGCHANGEREQUEST
),
1138 ENTRY(WM_INPUTLANGCHANGE
),
1141 ENTRY(WM_USERCHANGED
),
1142 ENTRY(WM_NOTIFYFORMAT
),
1143 ENTRY(WM_CONTEXTMENU
),
1144 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_STYLECHANGING
, StyleOrExtendedParamInfo
,
1145 "styleOrExtended", StyleStructParamInfo
,
1147 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_STYLECHANGED
, StyleOrExtendedParamInfo
,
1148 "styleOrExtended", StyleStructParamInfo
,
1150 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DISPLAYCHANGE
, IntParamInfo
, "bitsPerPixel",
1151 ResolutionParamInfo
, ""),
1154 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCCREATE
, nullptr, nullptr,
1155 CreateStructParamInfo
, "createStruct"),
1156 ENTRY_WITH_NO_PARAM_INFO(WM_NCDESTROY
),
1157 ENTRY_WITH_CUSTOM_PARAM_INFO(WM_NCCALCSIZE
, WmNcCalcSizeParamInfo
),
1158 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCHITTEST
, nullptr, nullptr,
1159 XLowWordYHighWordParamInfo
, "mousePos"),
1160 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCPAINT
, HexParamInfo
, "updateRegionHandle",
1162 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCACTIVATE
, TrueFalseParamInfo
,
1163 "isTitleBarOrIconActive", HexParamInfo
,
1165 ENTRY(WM_GETDLGCODE
),
1166 ENTRY(WM_SYNCPAINT
),
1167 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMOUSEMOVE
, VirtualModifierKeysParamInfo
,
1168 "virtualKeys", XLowWordYHighWordParamInfo
,
1170 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCLBUTTONDOWN
, HitTestParamInfo
,
1171 "hitTestValue", PointsParamInfo
, "mousePos"),
1172 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCLBUTTONUP
, HitTestParamInfo
,
1173 "hitTestValue", PointsParamInfo
, "mousePos"),
1174 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCLBUTTONDBLCLK
, HitTestParamInfo
,
1175 "hitTestValue", PointsParamInfo
, "mousePos"),
1176 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCRBUTTONDOWN
, HitTestParamInfo
,
1177 "hitTestValue", PointsParamInfo
, "mousePos"),
1178 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCRBUTTONUP
, HitTestParamInfo
,
1179 "hitTestValue", PointsParamInfo
, "mousePos"),
1180 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCRBUTTONDBLCLK
, HitTestParamInfo
,
1181 "hitTestValue", PointsParamInfo
, "mousePos"),
1182 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMBUTTONDOWN
, HitTestParamInfo
,
1183 "hitTestValue", PointsParamInfo
, "mousePos"),
1184 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMBUTTONUP
, HitTestParamInfo
,
1185 "hitTestValue", PointsParamInfo
, "mousePos"),
1186 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMBUTTONDBLCLK
, HitTestParamInfo
,
1187 "hitTestValue", PointsParamInfo
, "mousePos"),
1192 ENTRY(EM_SETRECTNP
),
1194 ENTRY(EM_LINESCROLL
),
1195 ENTRY(EM_SCROLLCARET
),
1196 ENTRY(EM_GETMODIFY
),
1197 ENTRY(EM_SETMODIFY
),
1198 ENTRY(EM_GETLINECOUNT
),
1199 ENTRY(EM_LINEINDEX
),
1200 ENTRY(EM_SETHANDLE
),
1201 ENTRY(EM_GETHANDLE
),
1203 ENTRY(EM_LINELENGTH
),
1204 ENTRY(EM_REPLACESEL
),
1206 ENTRY(EM_LIMITTEXT
),
1210 ENTRY(EM_LINEFROMCHAR
),
1211 ENTRY(EM_SETTABSTOPS
),
1212 ENTRY(EM_SETPASSWORDCHAR
),
1213 ENTRY(EM_EMPTYUNDOBUFFER
),
1214 ENTRY(EM_GETFIRSTVISIBLELINE
),
1215 ENTRY(EM_SETREADONLY
),
1216 ENTRY(EM_SETWORDBREAKPROC
),
1217 ENTRY(EM_GETWORDBREAKPROC
),
1218 ENTRY(EM_GETPASSWORDCHAR
),
1219 ENTRY(EM_SETMARGINS
),
1220 ENTRY(EM_GETMARGINS
),
1221 ENTRY(EM_GETLIMITTEXT
),
1222 ENTRY(EM_POSFROMCHAR
),
1223 ENTRY(EM_CHARFROMPOS
),
1224 ENTRY(EM_SETIMESTATUS
),
1225 ENTRY(EM_GETIMESTATUS
),
1228 ENTRY(SBM_SETRANGE
),
1229 ENTRY(SBM_SETRANGEREDRAW
),
1230 ENTRY(SBM_GETRANGE
),
1231 ENTRY(SBM_ENABLE_ARROWS
),
1232 ENTRY(SBM_SETSCROLLINFO
),
1233 ENTRY(SBM_GETSCROLLINFO
),
1234 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KEYDOWN
, VirtualKeyParamInfo
, "vKey",
1235 KeystrokeFlagsParamInfo
, ""),
1236 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KEYUP
, VirtualKeyParamInfo
, "vKey",
1237 KeystrokeFlagsParamInfo
, ""),
1238 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_CHAR
, IntParamInfo
, "charCode",
1239 KeystrokeFlagsParamInfo
, ""),
1240 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DEADCHAR
, IntParamInfo
, "charCode",
1241 KeystrokeFlagsParamInfo
, ""),
1242 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSKEYDOWN
, VirtualKeyParamInfo
, "vKey",
1243 KeystrokeFlagsParamInfo
, ""),
1244 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSKEYUP
, VirtualKeyParamInfo
, "vKey",
1245 KeystrokeFlagsParamInfo
, ""),
1246 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSCHAR
, IntParamInfo
, "charCode",
1247 KeystrokeFlagsParamInfo
, ""),
1248 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSDEADCHAR
, IntParamInfo
, "charCode",
1249 KeystrokeFlagsParamInfo
, ""),
1251 ENTRY(WM_IME_STARTCOMPOSITION
),
1252 ENTRY(WM_IME_ENDCOMPOSITION
),
1253 ENTRY(WM_IME_COMPOSITION
),
1254 ENTRY(WM_INITDIALOG
),
1256 ENTRY(WM_SYSCOMMAND
),
1261 ENTRY(WM_INITMENUPOPUP
),
1262 ENTRY(WM_MENUSELECT
),
1264 ENTRY(WM_ENTERIDLE
),
1265 ENTRY(WM_MENURBUTTONUP
),
1267 ENTRY(WM_MENUGETOBJECT
),
1268 ENTRY(WM_UNINITMENUPOPUP
),
1269 ENTRY(WM_MENUCOMMAND
),
1270 ENTRY(WM_CHANGEUISTATE
),
1271 ENTRY(WM_QUERYUISTATE
),
1272 ENTRY(WM_UPDATEUISTATE
),
1273 ENTRY(WM_CTLCOLORMSGBOX
),
1274 ENTRY(WM_CTLCOLOREDIT
),
1275 ENTRY(WM_CTLCOLORLISTBOX
),
1276 ENTRY(WM_CTLCOLORBTN
),
1277 ENTRY(WM_CTLCOLORDLG
),
1278 ENTRY(WM_CTLCOLORSCROLLBAR
),
1279 ENTRY(WM_CTLCOLORSTATIC
),
1280 ENTRY(CB_GETEDITSEL
),
1281 ENTRY(CB_LIMITTEXT
),
1282 ENTRY(CB_SETEDITSEL
),
1283 ENTRY(CB_ADDSTRING
),
1284 ENTRY(CB_DELETESTRING
),
1287 ENTRY(CB_GETCURSEL
),
1288 ENTRY(CB_GETLBTEXT
),
1289 ENTRY(CB_GETLBTEXTLEN
),
1290 ENTRY(CB_INSERTSTRING
),
1291 ENTRY(CB_RESETCONTENT
),
1292 ENTRY(CB_FINDSTRING
),
1293 ENTRY(CB_SELECTSTRING
),
1294 ENTRY(CB_SETCURSEL
),
1295 ENTRY(CB_SHOWDROPDOWN
),
1296 ENTRY(CB_GETITEMDATA
),
1297 ENTRY(CB_SETITEMDATA
),
1298 ENTRY(CB_GETDROPPEDCONTROLRECT
),
1299 ENTRY(CB_SETITEMHEIGHT
),
1300 ENTRY(CB_GETITEMHEIGHT
),
1301 ENTRY(CB_SETEXTENDEDUI
),
1302 ENTRY(CB_GETEXTENDEDUI
),
1303 ENTRY(CB_GETDROPPEDSTATE
),
1304 ENTRY(CB_FINDSTRINGEXACT
),
1305 ENTRY(CB_SETLOCALE
),
1306 ENTRY(CB_GETLOCALE
),
1307 ENTRY(CB_GETTOPINDEX
),
1308 ENTRY(CB_SETTOPINDEX
),
1309 ENTRY(CB_GETHORIZONTALEXTENT
),
1310 ENTRY(CB_SETHORIZONTALEXTENT
),
1311 ENTRY(CB_GETDROPPEDWIDTH
),
1312 ENTRY(CB_SETDROPPEDWIDTH
),
1313 ENTRY(CB_INITSTORAGE
),
1315 ENTRY(LB_ADDSTRING
),
1316 ENTRY(LB_INSERTSTRING
),
1317 ENTRY(LB_DELETESTRING
),
1318 ENTRY(LB_SELITEMRANGEEX
),
1319 ENTRY(LB_RESETCONTENT
),
1321 ENTRY(LB_SETCURSEL
),
1323 ENTRY(LB_GETCURSEL
),
1325 ENTRY(LB_GETTEXTLEN
),
1327 ENTRY(LB_SELECTSTRING
),
1329 ENTRY(LB_GETTOPINDEX
),
1330 ENTRY(LB_FINDSTRING
),
1331 ENTRY(LB_GETSELCOUNT
),
1332 ENTRY(LB_GETSELITEMS
),
1333 ENTRY(LB_SETTABSTOPS
),
1334 ENTRY(LB_GETHORIZONTALEXTENT
),
1335 ENTRY(LB_SETHORIZONTALEXTENT
),
1336 ENTRY(LB_SETCOLUMNWIDTH
),
1338 ENTRY(LB_SETTOPINDEX
),
1339 ENTRY(LB_GETITEMRECT
),
1340 ENTRY(LB_GETITEMDATA
),
1341 ENTRY(LB_SETITEMDATA
),
1342 ENTRY(LB_SELITEMRANGE
),
1343 ENTRY(LB_SETANCHORINDEX
),
1344 ENTRY(LB_GETANCHORINDEX
),
1345 ENTRY(LB_SETCARETINDEX
),
1346 ENTRY(LB_GETCARETINDEX
),
1347 ENTRY(LB_SETITEMHEIGHT
),
1348 ENTRY(LB_GETITEMHEIGHT
),
1349 ENTRY(LB_FINDSTRINGEXACT
),
1350 ENTRY(LB_SETLOCALE
),
1351 ENTRY(LB_GETLOCALE
),
1353 ENTRY(LB_INITSTORAGE
),
1354 ENTRY(LB_ITEMFROMPOINT
),
1356 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEMOVE
, VirtualModifierKeysParamInfo
,
1357 "virtualKeys", XLowWordYHighWordParamInfo
,
1359 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONDOWN
, VirtualModifierKeysParamInfo
,
1360 "virtualKeys", XLowWordYHighWordParamInfo
,
1362 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONUP
, VirtualModifierKeysParamInfo
,
1363 "virtualKeys", XLowWordYHighWordParamInfo
,
1365 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONDBLCLK
, VirtualModifierKeysParamInfo
,
1366 "virtualKeys", XLowWordYHighWordParamInfo
,
1368 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONDOWN
, VirtualModifierKeysParamInfo
,
1369 "virtualKeys", XLowWordYHighWordParamInfo
,
1371 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONUP
, VirtualModifierKeysParamInfo
,
1372 "virtualKeys", XLowWordYHighWordParamInfo
,
1374 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONDBLCLK
, VirtualModifierKeysParamInfo
,
1375 "virtualKeys", XLowWordYHighWordParamInfo
,
1377 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONDOWN
, VirtualModifierKeysParamInfo
,
1378 "virtualKeys", XLowWordYHighWordParamInfo
,
1380 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONUP
, VirtualModifierKeysParamInfo
,
1381 "virtualKeys", XLowWordYHighWordParamInfo
,
1383 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONDBLCLK
, VirtualModifierKeysParamInfo
,
1384 "virtualKeys", XLowWordYHighWordParamInfo
,
1386 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEWHEEL
,
1387 VirtualKeysLowWordDistanceHighWordParamInfo
,
1388 "", XLowWordYHighWordParamInfo
, "mousePos"),
1389 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEHWHEEL
,
1390 VirtualKeysLowWordDistanceHighWordParamInfo
,
1391 "", XLowWordYHighWordParamInfo
, "mousePos"),
1392 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_PARENTNOTIFY
, ParentNotifyEventParamInfo
,
1393 "", PointParamInfo
, "pointerLocation"),
1394 ENTRY(WM_ENTERMENULOOP
),
1395 ENTRY(WM_EXITMENULOOP
),
1397 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SIZING
, WindowEdgeParamInfo
, "edge",
1398 RectParamInfo
, "rect"),
1399 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_CAPTURECHANGED
, nullptr, nullptr,
1400 HexParamInfo
, "windowHandle"),
1401 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOVING
, nullptr, nullptr, RectParamInfo
,
1403 ENTRY(WM_POWERBROADCAST
),
1404 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DEVICECHANGE
, DeviceEventParamInfo
, "event",
1405 HexParamInfo
, "data"),
1406 ENTRY(WM_MDICREATE
),
1407 ENTRY(WM_MDIDESTROY
),
1408 ENTRY(WM_MDIACTIVATE
),
1409 ENTRY(WM_MDIRESTORE
),
1411 ENTRY(WM_MDIMAXIMIZE
),
1413 ENTRY(WM_MDICASCADE
),
1414 ENTRY(WM_MDIICONARRANGE
),
1415 ENTRY(WM_MDIGETACTIVE
),
1416 ENTRY(WM_MDISETMENU
),
1417 ENTRY(WM_ENTERSIZEMOVE
),
1418 ENTRY(WM_EXITSIZEMOVE
),
1419 ENTRY(WM_DROPFILES
),
1420 ENTRY(WM_MDIREFRESHMENU
),
1421 ENTRY(WM_IME_SETCONTEXT
),
1422 ENTRY(WM_IME_NOTIFY
),
1423 ENTRY(WM_IME_CONTROL
),
1424 ENTRY(WM_IME_COMPOSITIONFULL
),
1425 ENTRY(WM_IME_SELECT
),
1427 ENTRY(WM_IME_REQUEST
),
1428 ENTRY(WM_IME_KEYDOWN
),
1429 ENTRY(WM_IME_KEYUP
),
1430 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMOUSEHOVER
, VirtualModifierKeysParamInfo
,
1431 "virtualKeys", XLowWordYHighWordParamInfo
,
1433 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEHOVER
, VirtualModifierKeysParamInfo
,
1434 "virtualKeys", XLowWordYHighWordParamInfo
,
1436 ENTRY_WITH_NO_PARAM_INFO(WM_NCMOUSELEAVE
),
1437 ENTRY_WITH_NO_PARAM_INFO(WM_MOUSELEAVE
),
1443 ENTRY(WM_RENDERFORMAT
),
1444 ENTRY(WM_RENDERALLFORMATS
),
1445 ENTRY(WM_DESTROYCLIPBOARD
),
1446 ENTRY(WM_DRAWCLIPBOARD
),
1447 ENTRY(WM_PAINTCLIPBOARD
),
1448 ENTRY(WM_VSCROLLCLIPBOARD
),
1449 ENTRY(WM_SIZECLIPBOARD
),
1450 ENTRY(WM_ASKCBFORMATNAME
),
1451 ENTRY(WM_CHANGECBCHAIN
),
1452 ENTRY(WM_HSCROLLCLIPBOARD
),
1453 ENTRY(WM_QUERYNEWPALETTE
),
1454 ENTRY(WM_PALETTEISCHANGING
),
1455 ENTRY(WM_PALETTECHANGED
),
1458 ENTRY(WM_PRINTCLIENT
),
1459 ENTRY(WM_THEMECHANGED
),
1460 ENTRY(WM_HANDHELDFIRST
),
1461 ENTRY(WM_HANDHELDLAST
),
1464 ENTRY(WM_PENWINFIRST
),
1465 ENTRY(WM_PENWINLAST
),
1467 ENTRY_WITH_NO_PARAM_INFO(WM_DWMCOMPOSITIONCHANGED
),
1468 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMNCRENDERINGCHANGED
, TrueFalseParamInfo
,
1469 "DwmNcRendering", nullptr, nullptr),
1470 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMCOLORIZATIONCOLORCHANGED
, HexParamInfo
,
1471 "color:AARRGGBB", TrueFalseParamInfo
,
1473 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMWINDOWMAXIMIZEDCHANGE
,
1474 TrueFalseParamInfo
, "maximized", nullptr,
1476 ENTRY(WM_DWMSENDICONICTHUMBNAIL
), // lParam: HIWORD is x, LOWORD is y
1477 ENTRY_WITH_NO_PARAM_INFO(WM_DWMSENDICONICLIVEPREVIEWBITMAP
),
1478 ENTRY(WM_TABLET_QUERYSYSTEMGESTURESTATUS
),
1480 ENTRY(WM_GESTURENOTIFY
),
1481 ENTRY(WM_GETTITLEBARINFOEX
),
1482 ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DPICHANGED
, XLowWordYHighWordParamInfo
,
1483 "newDPI", RectParamInfo
,
1484 "suggestedSizeAndPos"),
1487 #undef ENTRY_WITH_NO_PARAM_INFO
1488 #undef ENTRY_WITH_CUSTOM_PARAM_INFO
1489 #undef ENTRY_WITH_SPLIT_PARAM_INFO
1491 } // namespace mozilla::widget
1494 void DDError(const char* msg
, HRESULT hr
) {
1496 MOZ_LOG(gWindowsLog
, LogLevel::Error
,
1497 ("DirectDraw error %s: 0x%08lx\n", msg
, hr
));
1502 bool is_vk_down(int vk
) {
1503 SHORT st
= GetKeyState(vk
);
1505 MOZ_LOG(gWindowsLog
, LogLevel::Info
, ("is_vk_down vk=%x st=%x\n", vk
, st
));