summaryrefslogtreecommitdiffstats
path: root/widget/windows/nsWindowDbg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'widget/windows/nsWindowDbg.cpp')
-rw-r--r--widget/windows/nsWindowDbg.cpp1612
1 files changed, 1612 insertions, 0 deletions
diff --git a/widget/windows/nsWindowDbg.cpp b/widget/windows/nsWindowDbg.cpp
new file mode 100644
index 0000000000..8125a8532b
--- /dev/null
+++ b/widget/windows/nsWindowDbg.cpp
@@ -0,0 +1,1612 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * nsWindowDbg - Debug related utilities for nsWindow.
+ */
+
+#include "nsWindowDbg.h"
+#include "nsToolkit.h"
+#include "WinPointerEvents.h"
+#include "nsWindowLoggedMessages.h"
+#include "mozilla/Logging.h"
+#include "mozilla/Maybe.h"
+#include "nsWindow.h"
+#include "GeckoProfiler.h"
+#include "mozilla/PresShell.h"
+#include "mozilla/dom/Document.h"
+
+#include <winuser.h>
+#include <dbt.h>
+#include <imm.h>
+#include <tpcshrd.h>
+
+#include <unordered_set>
+
+using namespace mozilla;
+using namespace mozilla::widget;
+extern mozilla::LazyLogModule gWindowsLog;
+static mozilla::LazyLogModule gWindowsEventLog("WindowsEvent");
+
+// currently defined in widget/windows/nsAppShell.cpp
+extern UINT sAppShellGeckoMsgId;
+
+#if defined(POPUP_ROLLUP_DEBUG_OUTPUT)
+MSGFEventMsgInfo gMSGFEvents[] = {
+ "MSGF_DIALOGBOX", 0, "MSGF_MESSAGEBOX", 1, "MSGF_MENU", 2,
+ "MSGF_SCROLLBAR", 5, "MSGF_NEXTWINDOW", 6, "MSGF_MAX", 8,
+ "MSGF_USER", 4096, nullptr, 0};
+#endif
+
+static long gEventCounter = 0;
+static UINT gLastEventMsg = 0;
+
+namespace geckoprofiler::markers {
+
+struct WindowProcMarker {
+ static constexpr Span<const char> MarkerTypeName() {
+ return MakeStringSpan("WindowProc");
+ }
+ static void StreamJSONMarkerData(baseprofiler::SpliceableJSONWriter& aWriter,
+ const ProfilerString8View& aMsgLoopName,
+ UINT aMsg, WPARAM aWParam, LPARAM aLParam) {
+ aWriter.StringProperty("messageLoop", aMsgLoopName);
+ aWriter.IntProperty("uMsg", aMsg);
+ const char* name;
+ if (aMsg < WM_USER) {
+ const auto eventMsgInfo = mozilla::widget::gAllEvents.find(aMsg);
+ if (eventMsgInfo != mozilla::widget::gAllEvents.end()) {
+ name = eventMsgInfo->second.mStr;
+ } else {
+ name = "ui message";
+ }
+ } else if (aMsg >= WM_USER && aMsg < WM_APP) {
+ name = "WM_USER message";
+ } else if (aMsg >= WM_APP && aMsg < 0xC000) {
+ name = "WM_APP message";
+ } else if (aMsg >= 0xC000 && aMsg < 0x10000) {
+ if (aMsg == sAppShellGeckoMsgId) {
+ name = "nsAppShell:EventID";
+ } else {
+ name = "registered Windows message";
+ }
+ } else {
+ name = "system message";
+ }
+ aWriter.StringProperty("name", MakeStringSpan(name));
+
+ if (aWParam) {
+ aWriter.IntProperty("wParam", aWParam);
+ }
+ if (aLParam) {
+ aWriter.IntProperty("lParam", aLParam);
+ }
+ }
+
+ static MarkerSchema MarkerTypeDisplay() {
+ using MS = MarkerSchema;
+ MS schema{MS::Location::MarkerChart, MS::Location::MarkerTable};
+ schema.AddKeyFormat("uMsg", MS::Format::Integer);
+ schema.SetChartLabel(
+ "{marker.data.messageLoop} | {marker.data.name} ({marker.data.uMsg})");
+ schema.SetTableLabel(
+ "{marker.name} - {marker.data.messageLoop} - {marker.data.name} "
+ "({marker.data.uMsg})");
+ schema.SetTooltipLabel(
+ "{marker.data.messageLoop} - {marker.name} - {marker.data.name}");
+ schema.AddKeyFormat("wParam", MS::Format::Integer);
+ schema.AddKeyFormat("lParam", MS::Format::Integer);
+ return schema;
+ }
+};
+
+} // namespace geckoprofiler::markers
+
+namespace mozilla::widget {
+
+AutoProfilerMessageMarker::AutoProfilerMessageMarker(
+ Span<const char> aMsgLoopName, HWND hWnd, UINT msg, WPARAM wParam,
+ LPARAM lParam)
+ : mMsgLoopName(aMsgLoopName), mMsg(msg), mWParam(wParam), mLParam(lParam) {
+ if (profiler_thread_is_being_profiled_for_markers()) {
+ mOptions.emplace(MarkerOptions(MarkerTiming::IntervalStart()));
+ nsWindow* win = WinUtils::GetNSWindowPtr(hWnd);
+ if (win) {
+ nsIWidgetListener* wl = win->GetWidgetListener();
+ if (wl) {
+ PresShell* presShell = wl->GetPresShell();
+ if (presShell) {
+ dom::Document* doc = presShell->GetDocument();
+ if (doc) {
+ mOptions->Set(MarkerInnerWindowId(doc->InnerWindowID()));
+ }
+ }
+ }
+ }
+ }
+}
+
+AutoProfilerMessageMarker::~AutoProfilerMessageMarker() {
+ if (!profiler_thread_is_being_profiled_for_markers()) {
+ return;
+ }
+
+ if (mOptions) {
+ mOptions->TimingRef().SetIntervalEnd();
+ } else {
+ mOptions.emplace(MarkerOptions(MarkerTiming::IntervalEnd()));
+ }
+ profiler_add_marker(
+ "WindowProc", ::mozilla::baseprofiler::category::OTHER,
+ std::move(*mOptions), geckoprofiler::markers::WindowProcMarker{},
+ ProfilerString8View::WrapNullTerminatedString(mMsgLoopName.data()), mMsg,
+ mWParam, mLParam);
+}
+
+// Using an unordered_set so we can initialize this with nice syntax instead of
+// having to add them one at a time to a mozilla::HashSet.
+std::unordered_set<UINT> gEventsToLogOriginalParams = {
+ WM_WINDOWPOSCHANGING, // (dummy comments for clang-format)
+ WM_SIZING, //
+ WM_STYLECHANGING,
+ WM_GETTEXT,
+ WM_GETMINMAXINFO,
+ WM_MEASUREITEM,
+ WM_NCCALCSIZE,
+};
+
+// If you add an event here, you must add cases for these to
+// MakeMessageSpecificData() and AppendFriendlyMessageSpecificData()
+// in nsWindowLoggedMessages.cpp.
+std::unordered_set<UINT> gEventsToRecordInAboutPage = {
+ WM_WINDOWPOSCHANGING, // (dummy comments for clang-format)
+ WM_WINDOWPOSCHANGED, //
+ WM_SIZING,
+ WM_SIZE,
+ WM_DPICHANGED,
+ WM_SETTINGCHANGE,
+ WM_NCCALCSIZE,
+ WM_MOVE,
+ WM_MOVING,
+ WM_GETMINMAXINFO,
+};
+
+NativeEventLogger::NativeEventLogger(Span<const char> aMsgLoopName, HWND hwnd,
+ UINT msg, WPARAM wParam, LPARAM lParam)
+ : mProfilerMarker(aMsgLoopName, hwnd, msg, wParam, lParam),
+ mMsgLoopName(aMsgLoopName.data()),
+ mHwnd(hwnd),
+ mMsg(msg),
+ mWParam(wParam),
+ mLParam(lParam),
+ mResult(mozilla::Nothing()),
+ mShouldLogPostCall(false) {
+ if (NativeEventLoggerInternal()) {
+ // this event was logged, so reserve this counter number for the post-call
+ mEventCounter = mozilla::Some(gEventCounter);
+ ++gEventCounter;
+ }
+}
+
+NativeEventLogger::~NativeEventLogger() {
+ // If mResult is Nothing, perhaps an exception was thrown or something
+ // before SetResult() was supposed to be called.
+ if (mResult.isSome()) {
+ if (NativeEventLoggerInternal() && mEventCounter.isNothing()) {
+ // We didn't reserve a counter in the pre-call, so reserve it here.
+ ++gEventCounter;
+ }
+ }
+ if (mMsg == WM_DESTROY) {
+ // Remove any logged messages for this window.
+ WindowClosed(mHwnd);
+ }
+}
+
+void EventMsgInfo::LogParameters(nsCString& str, WPARAM wParam, LPARAM lParam,
+ bool isPreCall) {
+ if (mParamInfoFn) {
+ str = mParamInfoFn(wParam, lParam, isPreCall);
+ } else {
+ if (mWParamInfoFn) {
+ mWParamInfoFn(str, wParam, mWParamName, isPreCall);
+ }
+ if (mLParamInfoFn) {
+ if (mWParamInfoFn) {
+ str.AppendASCII(" ");
+ }
+ mLParamInfoFn(str, lParam, mLParamName, isPreCall);
+ }
+ }
+}
+
+nsAutoCString DefaultParamInfo(uint64_t wParam, uint64_t lParam,
+ bool /* isPreCall */) {
+ nsAutoCString result;
+ result.AppendPrintf("wParam=0x%08llX lParam=0x%08llX", wParam, lParam);
+ return result;
+}
+
+void AppendEnumValueInfo(
+ nsCString& str, uint64_t value,
+ const std::unordered_map<uint64_t, const char*>& valuesAndNames,
+ const char* name) {
+ if (name != nullptr) {
+ str.AppendPrintf("%s=", name);
+ }
+ auto entry = valuesAndNames.find(value);
+ if (entry == valuesAndNames.end()) {
+ str.AppendPrintf("Unknown (0x%08llX)", value);
+ } else {
+ str.AppendASCII(entry->second);
+ }
+}
+
+bool AppendFlagsInfo(nsCString& str, uint64_t flags,
+ const nsTArray<EnumValueAndName>& flagsAndNames,
+ const char* name) {
+ if (name != nullptr) {
+ str.AppendPrintf("%s=", name);
+ }
+ bool firstAppend = true;
+ for (const EnumValueAndName& flagAndName : flagsAndNames) {
+ if (MOZ_UNLIKELY(flagAndName.mFlag == 0)) {
+ // Special case - only want to write this if nothing else was set.
+ // For this to make sense, 0 values should come at the end of
+ // flagsAndNames.
+ if (flags == 0 && firstAppend) {
+ firstAppend = false;
+ str.AppendASCII(flagAndName.mName);
+ }
+ } else if ((flags & flagAndName.mFlag) == flagAndName.mFlag) {
+ if (MOZ_LIKELY(!firstAppend)) {
+ str.Append('|');
+ }
+ firstAppend = false;
+ str.AppendASCII(flagAndName.mName);
+ flags = flags & ~flagAndName.mFlag;
+ }
+ }
+ if (flags != 0) {
+ if (MOZ_LIKELY(!firstAppend)) {
+ str.Append('|');
+ }
+ firstAppend = false;
+ str.AppendPrintf("Unknown (0x%08llX)", flags);
+ }
+ return !firstAppend;
+}
+
+// if mResult is not set, this is used to log the parameters passed in the
+// message, otherwise we are logging the parameters after we have handled the
+// message. This is useful for events where we might change the parameters while
+// handling the message (for example WM_GETTEXT and WM_NCCALCSIZE)
+// Returns whether this message was logged, so we need to reserve a
+// counter number for it.
+bool NativeEventLogger::NativeEventLoggerInternal() {
+ mozilla::LogLevel const targetLogLevel = [&] {
+ // These messages often take up more than 90% of logs if not filtered out.
+ if (mMsg == WM_SETCURSOR || mMsg == WM_MOUSEMOVE || mMsg == WM_NCHITTEST) {
+ return LogLevel::Verbose;
+ }
+ if (gLastEventMsg == mMsg) {
+ return LogLevel::Debug;
+ }
+ return LogLevel::Info;
+ }();
+
+ bool isPreCall = mResult.isNothing();
+ if (isPreCall || mShouldLogPostCall) {
+ bool recordInAboutPage = gEventsToRecordInAboutPage.find(mMsg) !=
+ gEventsToRecordInAboutPage.end();
+ bool writeToWindowsLog;
+ if (isPreCall) {
+ writeToWindowsLog = MOZ_LOG_TEST(gWindowsEventLog, targetLogLevel);
+ bool shouldLogAtAll = recordInAboutPage || writeToWindowsLog;
+ // Since calling mParamInfoFn() allocates a string, only go down this code
+ // path if we're going to log this message to reduce allocations.
+ if (!shouldLogAtAll) {
+ return false;
+ }
+ mShouldLogPostCall = true;
+ bool shouldLogPreCall = gEventsToLogOriginalParams.find(mMsg) !=
+ gEventsToLogOriginalParams.end();
+ if (!shouldLogPreCall) {
+ // Pre-call and we don't want to log both, so skip this one.
+ return false;
+ }
+ } else {
+ writeToWindowsLog = true;
+ }
+ if (recordInAboutPage) {
+ LogWindowMessage(mHwnd, mMsg, isPreCall,
+ mEventCounter.valueOr(gEventCounter), mWParam, mLParam,
+ mResult, mRetValue);
+ }
+ gLastEventMsg = mMsg;
+ if (writeToWindowsLog) {
+ const auto& eventMsgInfo = gAllEvents.find(mMsg);
+ const char* msgText = eventMsgInfo != gAllEvents.end()
+ ? eventMsgInfo->second.mStr
+ : nullptr;
+ nsAutoCString paramInfo;
+ if (eventMsgInfo != gAllEvents.end()) {
+ eventMsgInfo->second.LogParameters(paramInfo, mWParam, mLParam,
+ isPreCall);
+ } else {
+ paramInfo = DefaultParamInfo(mWParam, mLParam, isPreCall);
+ }
+ const char* resultMsg = mResult.isSome()
+ ? (mResult.value() ? "true" : "false")
+ : "initial call";
+ nsAutoCString logMessage;
+ logMessage.AppendPrintf(
+ "%s | %6ld %08" PRIX64 " - 0x%04X %s%s%s: 0x%08" PRIX64 " (%s)\n",
+ mMsgLoopName, mEventCounter.valueOr(gEventCounter),
+ reinterpret_cast<uint64_t>(mHwnd), mMsg,
+ msgText ? msgText : "Unknown", paramInfo.IsEmpty() ? "" : " ",
+ paramInfo.get(),
+ mResult.isSome() ? static_cast<uint64_t>(mRetValue) : 0, resultMsg);
+ const char* logMessageData = logMessage.Data();
+ MOZ_LOG(gWindowsEventLog, targetLogLevel, ("%s", logMessageData));
+ }
+ return true;
+ }
+ return false;
+}
+
+void TrueFalseParamInfo(nsCString& result, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ result.AppendPrintf("%s=%s", name, value == TRUE ? "TRUE" : "FALSE");
+}
+
+void TrueFalseLowOrderWordParamInfo(nsCString& result, uint64_t value,
+ const char* name, bool /* isPreCall */) {
+ result.AppendPrintf("%s=%s", name, LOWORD(value) == TRUE ? "TRUE" : "FALSE");
+}
+
+void HexParamInfo(nsCString& result, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ result.AppendPrintf("%s=0x%08llX", name, value);
+}
+
+void IntParamInfo(nsCString& result, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ result.AppendPrintf("%s=%lld", name, value);
+}
+
+void RectParamInfo(nsCString& str, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ LPRECT rect = reinterpret_cast<LPRECT>(value);
+ if (rect == nullptr) {
+ str.AppendPrintf("NULL rect?");
+ return;
+ }
+ if (name != nullptr) {
+ str.AppendPrintf("%s ", name);
+ }
+ str.AppendPrintf("left=%ld top=%ld right=%ld bottom=%ld", rect->left,
+ rect->top, rect->right, rect->bottom);
+}
+
+#define VALANDNAME_ENTRY(_msg) \
+ { _msg, #_msg }
+
+void CreateStructParamInfo(nsCString& str, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ CREATESTRUCT* createStruct = reinterpret_cast<CREATESTRUCT*>(value);
+ if (createStruct == nullptr) {
+ str.AppendASCII("NULL createStruct?");
+ return;
+ }
+ str.AppendPrintf(
+ "%s: hInstance=%p hMenu=%p hwndParent=%p lpszName=%S lpszClass=%S x=%d "
+ "y=%d cx=%d cy=%d",
+ name, createStruct->hInstance, createStruct->hMenu,
+ createStruct->hwndParent, createStruct->lpszName, createStruct->lpszClass,
+ createStruct->x, createStruct->y, createStruct->cx, createStruct->cy);
+ str.AppendASCII(" ");
+ const static nsTArray<EnumValueAndName> windowStyles = {
+ // these combinations of other flags need to come first
+ VALANDNAME_ENTRY(WS_OVERLAPPEDWINDOW), VALANDNAME_ENTRY(WS_POPUPWINDOW),
+ VALANDNAME_ENTRY(WS_CAPTION),
+ // regular flags
+ VALANDNAME_ENTRY(WS_POPUP), VALANDNAME_ENTRY(WS_CHILD),
+ VALANDNAME_ENTRY(WS_MINIMIZE), VALANDNAME_ENTRY(WS_VISIBLE),
+ VALANDNAME_ENTRY(WS_DISABLED), VALANDNAME_ENTRY(WS_CLIPSIBLINGS),
+ VALANDNAME_ENTRY(WS_CLIPCHILDREN), VALANDNAME_ENTRY(WS_MAXIMIZE),
+ VALANDNAME_ENTRY(WS_BORDER), VALANDNAME_ENTRY(WS_DLGFRAME),
+ VALANDNAME_ENTRY(WS_VSCROLL), VALANDNAME_ENTRY(WS_HSCROLL),
+ VALANDNAME_ENTRY(WS_SYSMENU), VALANDNAME_ENTRY(WS_THICKFRAME),
+ VALANDNAME_ENTRY(WS_GROUP), VALANDNAME_ENTRY(WS_TABSTOP),
+ // zero value needs to come last
+ VALANDNAME_ENTRY(WS_OVERLAPPED)};
+ AppendFlagsInfo(str, createStruct->style, windowStyles, "style");
+ str.AppendASCII(" ");
+ const nsTArray<EnumValueAndName> extendedWindowStyles = {
+ // these combinations of other flags need to come first
+ VALANDNAME_ENTRY(WS_EX_OVERLAPPEDWINDOW),
+ VALANDNAME_ENTRY(WS_EX_PALETTEWINDOW),
+ // regular flags
+ VALANDNAME_ENTRY(WS_EX_DLGMODALFRAME),
+ VALANDNAME_ENTRY(WS_EX_NOPARENTNOTIFY),
+ VALANDNAME_ENTRY(WS_EX_TOPMOST),
+ VALANDNAME_ENTRY(WS_EX_ACCEPTFILES),
+ VALANDNAME_ENTRY(WS_EX_TRANSPARENT),
+ VALANDNAME_ENTRY(WS_EX_MDICHILD),
+ VALANDNAME_ENTRY(WS_EX_TOOLWINDOW),
+ VALANDNAME_ENTRY(WS_EX_WINDOWEDGE),
+ VALANDNAME_ENTRY(WS_EX_CLIENTEDGE),
+ VALANDNAME_ENTRY(WS_EX_CONTEXTHELP),
+ VALANDNAME_ENTRY(WS_EX_RIGHT),
+ VALANDNAME_ENTRY(WS_EX_LEFT),
+ VALANDNAME_ENTRY(WS_EX_RTLREADING),
+ VALANDNAME_ENTRY(WS_EX_LTRREADING),
+ VALANDNAME_ENTRY(WS_EX_LEFTSCROLLBAR),
+ VALANDNAME_ENTRY(WS_EX_RIGHTSCROLLBAR),
+ VALANDNAME_ENTRY(WS_EX_CONTROLPARENT),
+ VALANDNAME_ENTRY(WS_EX_STATICEDGE),
+ VALANDNAME_ENTRY(WS_EX_APPWINDOW),
+ VALANDNAME_ENTRY(WS_EX_LAYERED),
+ VALANDNAME_ENTRY(WS_EX_NOINHERITLAYOUT),
+ VALANDNAME_ENTRY(WS_EX_LAYOUTRTL),
+ VALANDNAME_ENTRY(WS_EX_NOACTIVATE),
+ VALANDNAME_ENTRY(WS_EX_COMPOSITED),
+ VALANDNAME_ENTRY(WS_EX_NOREDIRECTIONBITMAP),
+ };
+ AppendFlagsInfo(str, createStruct->dwExStyle, extendedWindowStyles,
+ "dwExStyle");
+}
+
+void XLowWordYHighWordParamInfo(nsCString& str, uint64_t value,
+ const char* name, bool /* isPreCall */) {
+ str.AppendPrintf("%s: x=%d y=%d", name, static_cast<int>(LOWORD(value)),
+ static_cast<int>(HIWORD(value)));
+}
+
+void PointParamInfo(nsCString& str, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ str.AppendPrintf("%s: x=%d y=%d", name, static_cast<int>(GET_X_LPARAM(value)),
+ static_cast<int>(GET_Y_LPARAM(value)));
+}
+
+void PointExplicitParamInfo(nsCString& str, POINT point, const char* name) {
+ str.AppendPrintf("%s: x=%ld y=%ld", name, point.x, point.y);
+}
+
+void PointsParamInfo(nsCString& str, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ PPOINTS points = reinterpret_cast<PPOINTS>(&value);
+ str.AppendPrintf("%s: x=%d y=%d", name, points->x, points->y);
+}
+
+void VirtualKeyParamInfo(nsCString& result, uint64_t param, const char* name,
+ bool /* isPreCall */) {
+ const static std::unordered_map<uint64_t, const char*> virtualKeys{
+ VALANDNAME_ENTRY(VK_LBUTTON),
+ VALANDNAME_ENTRY(VK_RBUTTON),
+ VALANDNAME_ENTRY(VK_CANCEL),
+ VALANDNAME_ENTRY(VK_MBUTTON),
+ VALANDNAME_ENTRY(VK_XBUTTON1),
+ VALANDNAME_ENTRY(VK_XBUTTON2),
+ VALANDNAME_ENTRY(VK_BACK),
+ VALANDNAME_ENTRY(VK_TAB),
+ VALANDNAME_ENTRY(VK_CLEAR),
+ VALANDNAME_ENTRY(VK_RETURN),
+ VALANDNAME_ENTRY(VK_SHIFT),
+ VALANDNAME_ENTRY(VK_CONTROL),
+ VALANDNAME_ENTRY(VK_MENU),
+ VALANDNAME_ENTRY(VK_PAUSE),
+ VALANDNAME_ENTRY(VK_CAPITAL),
+ VALANDNAME_ENTRY(VK_KANA),
+ VALANDNAME_ENTRY(VK_HANGUL),
+#ifdef VK_IME_ON
+ VALANDNAME_ENTRY(VK_IME_ON),
+#endif
+ VALANDNAME_ENTRY(VK_JUNJA),
+ VALANDNAME_ENTRY(VK_FINAL),
+ VALANDNAME_ENTRY(VK_HANJA),
+ VALANDNAME_ENTRY(VK_KANJI),
+#ifdef VK_IME_OFF
+ VALANDNAME_ENTRY(VK_IME_OFF),
+#endif
+ VALANDNAME_ENTRY(VK_ESCAPE),
+ VALANDNAME_ENTRY(VK_CONVERT),
+ VALANDNAME_ENTRY(VK_NONCONVERT),
+ VALANDNAME_ENTRY(VK_ACCEPT),
+ VALANDNAME_ENTRY(VK_MODECHANGE),
+ VALANDNAME_ENTRY(VK_SPACE),
+ VALANDNAME_ENTRY(VK_PRIOR),
+ VALANDNAME_ENTRY(VK_NEXT),
+ VALANDNAME_ENTRY(VK_END),
+ VALANDNAME_ENTRY(VK_HOME),
+ VALANDNAME_ENTRY(VK_LEFT),
+ VALANDNAME_ENTRY(VK_UP),
+ VALANDNAME_ENTRY(VK_RIGHT),
+ VALANDNAME_ENTRY(VK_DOWN),
+ VALANDNAME_ENTRY(VK_SELECT),
+ VALANDNAME_ENTRY(VK_PRINT),
+ VALANDNAME_ENTRY(VK_EXECUTE),
+ VALANDNAME_ENTRY(VK_SNAPSHOT),
+ VALANDNAME_ENTRY(VK_INSERT),
+ VALANDNAME_ENTRY(VK_DELETE),
+ VALANDNAME_ENTRY(VK_HELP),
+ VALANDNAME_ENTRY(VK_LWIN),
+ VALANDNAME_ENTRY(VK_RWIN),
+ VALANDNAME_ENTRY(VK_APPS),
+ VALANDNAME_ENTRY(VK_SLEEP),
+ VALANDNAME_ENTRY(VK_NUMPAD0),
+ VALANDNAME_ENTRY(VK_NUMPAD1),
+ VALANDNAME_ENTRY(VK_NUMPAD2),
+ VALANDNAME_ENTRY(VK_NUMPAD3),
+ VALANDNAME_ENTRY(VK_NUMPAD4),
+ VALANDNAME_ENTRY(VK_NUMPAD5),
+ VALANDNAME_ENTRY(VK_NUMPAD6),
+ VALANDNAME_ENTRY(VK_NUMPAD7),
+ VALANDNAME_ENTRY(VK_NUMPAD8),
+ VALANDNAME_ENTRY(VK_NUMPAD9),
+ VALANDNAME_ENTRY(VK_MULTIPLY),
+ VALANDNAME_ENTRY(VK_ADD),
+ VALANDNAME_ENTRY(VK_SEPARATOR),
+ VALANDNAME_ENTRY(VK_SUBTRACT),
+ VALANDNAME_ENTRY(VK_DECIMAL),
+ VALANDNAME_ENTRY(VK_DIVIDE),
+ VALANDNAME_ENTRY(VK_F1),
+ VALANDNAME_ENTRY(VK_F2),
+ VALANDNAME_ENTRY(VK_F3),
+ VALANDNAME_ENTRY(VK_F4),
+ VALANDNAME_ENTRY(VK_F5),
+ VALANDNAME_ENTRY(VK_F6),
+ VALANDNAME_ENTRY(VK_F7),
+ VALANDNAME_ENTRY(VK_F8),
+ VALANDNAME_ENTRY(VK_F9),
+ VALANDNAME_ENTRY(VK_F10),
+ VALANDNAME_ENTRY(VK_F11),
+ VALANDNAME_ENTRY(VK_F12),
+ VALANDNAME_ENTRY(VK_F13),
+ VALANDNAME_ENTRY(VK_F14),
+ VALANDNAME_ENTRY(VK_F15),
+ VALANDNAME_ENTRY(VK_F16),
+ VALANDNAME_ENTRY(VK_F17),
+ VALANDNAME_ENTRY(VK_F18),
+ VALANDNAME_ENTRY(VK_F19),
+ VALANDNAME_ENTRY(VK_F20),
+ VALANDNAME_ENTRY(VK_F21),
+ VALANDNAME_ENTRY(VK_F22),
+ VALANDNAME_ENTRY(VK_F23),
+ VALANDNAME_ENTRY(VK_F24),
+ VALANDNAME_ENTRY(VK_NUMLOCK),
+ VALANDNAME_ENTRY(VK_SCROLL),
+ VALANDNAME_ENTRY(VK_LSHIFT),
+ VALANDNAME_ENTRY(VK_RSHIFT),
+ VALANDNAME_ENTRY(VK_LCONTROL),
+ VALANDNAME_ENTRY(VK_RCONTROL),
+ VALANDNAME_ENTRY(VK_LMENU),
+ VALANDNAME_ENTRY(VK_RMENU),
+ VALANDNAME_ENTRY(VK_BROWSER_BACK),
+ VALANDNAME_ENTRY(VK_BROWSER_FORWARD),
+ VALANDNAME_ENTRY(VK_BROWSER_REFRESH),
+ VALANDNAME_ENTRY(VK_BROWSER_STOP),
+ VALANDNAME_ENTRY(VK_BROWSER_SEARCH),
+ VALANDNAME_ENTRY(VK_BROWSER_FAVORITES),
+ VALANDNAME_ENTRY(VK_BROWSER_HOME),
+ VALANDNAME_ENTRY(VK_VOLUME_MUTE),
+ VALANDNAME_ENTRY(VK_VOLUME_DOWN),
+ VALANDNAME_ENTRY(VK_VOLUME_UP),
+ VALANDNAME_ENTRY(VK_MEDIA_NEXT_TRACK),
+ VALANDNAME_ENTRY(VK_MEDIA_PREV_TRACK),
+ VALANDNAME_ENTRY(VK_MEDIA_STOP),
+ VALANDNAME_ENTRY(VK_MEDIA_PLAY_PAUSE),
+ VALANDNAME_ENTRY(VK_LAUNCH_MAIL),
+ VALANDNAME_ENTRY(VK_LAUNCH_MEDIA_SELECT),
+ VALANDNAME_ENTRY(VK_LAUNCH_APP1),
+ VALANDNAME_ENTRY(VK_LAUNCH_APP2),
+ VALANDNAME_ENTRY(VK_OEM_1),
+ VALANDNAME_ENTRY(VK_OEM_PLUS),
+ VALANDNAME_ENTRY(VK_OEM_COMMA),
+ VALANDNAME_ENTRY(VK_OEM_MINUS),
+ VALANDNAME_ENTRY(VK_OEM_PERIOD),
+ VALANDNAME_ENTRY(VK_OEM_2),
+ VALANDNAME_ENTRY(VK_OEM_3),
+ VALANDNAME_ENTRY(VK_OEM_4),
+ VALANDNAME_ENTRY(VK_OEM_5),
+ VALANDNAME_ENTRY(VK_OEM_6),
+ VALANDNAME_ENTRY(VK_OEM_7),
+ VALANDNAME_ENTRY(VK_OEM_8),
+ VALANDNAME_ENTRY(VK_OEM_102),
+ VALANDNAME_ENTRY(VK_PROCESSKEY),
+ VALANDNAME_ENTRY(VK_PACKET),
+ VALANDNAME_ENTRY(VK_ATTN),
+ VALANDNAME_ENTRY(VK_CRSEL),
+ VALANDNAME_ENTRY(VK_EXSEL),
+ VALANDNAME_ENTRY(VK_EREOF),
+ VALANDNAME_ENTRY(VK_PLAY),
+ VALANDNAME_ENTRY(VK_ZOOM),
+ VALANDNAME_ENTRY(VK_NONAME),
+ VALANDNAME_ENTRY(VK_PA1),
+ VALANDNAME_ENTRY(VK_OEM_CLEAR),
+ {0x30, "0"},
+ {0x31, "1"},
+ {0x32, "2"},
+ {0x33, "3"},
+ {0x34, "4"},
+ {0x35, "5"},
+ {0x36, "6"},
+ {0x37, "7"},
+ {0x38, "8"},
+ {0x39, "9"},
+ {0x41, "A"},
+ {0x42, "B"},
+ {0x43, "C"},
+ {0x44, "D"},
+ {0x45, "E"},
+ {0x46, "F"},
+ {0x47, "G"},
+ {0x48, "H"},
+ {0x49, "I"},
+ {0x4A, "J"},
+ {0x4B, "K"},
+ {0x4C, "L"},
+ {0x4D, "M"},
+ {0x4E, "N"},
+ {0x4F, "O"},
+ {0x50, "P"},
+ {0x51, "Q"},
+ {0x52, "S"},
+ {0x53, "T"},
+ {0x54, "U"},
+ {0x55, "V"},
+ {0x56, "W"},
+ {0x57, "X"},
+ {0x58, "Y"},
+ {0x59, "Z"},
+ };
+ AppendEnumValueInfo(result, param, virtualKeys, name);
+}
+
+void VirtualModifierKeysParamInfo(nsCString& result, uint64_t param,
+ const char* name, bool /* isPreCall */) {
+ const static nsTArray<EnumValueAndName> virtualKeys{
+ VALANDNAME_ENTRY(MK_CONTROL), VALANDNAME_ENTRY(MK_LBUTTON),
+ VALANDNAME_ENTRY(MK_MBUTTON), VALANDNAME_ENTRY(MK_RBUTTON),
+ VALANDNAME_ENTRY(MK_SHIFT), VALANDNAME_ENTRY(MK_XBUTTON1),
+ VALANDNAME_ENTRY(MK_XBUTTON2), {0, "(none)"}};
+ AppendFlagsInfo(result, param, virtualKeys, name);
+}
+
+void ParentNotifyEventParamInfo(nsCString& str, uint64_t param,
+ const char* /* name */, bool /* isPreCall */) {
+ const static std::unordered_map<uint64_t, const char*> eventValues{
+ VALANDNAME_ENTRY(WM_CREATE), VALANDNAME_ENTRY(WM_DESTROY),
+ VALANDNAME_ENTRY(WM_LBUTTONDOWN), VALANDNAME_ENTRY(WM_MBUTTONDOWN),
+ VALANDNAME_ENTRY(WM_RBUTTONDOWN), VALANDNAME_ENTRY(WM_XBUTTONDOWN),
+ VALANDNAME_ENTRY(WM_POINTERDOWN)};
+ AppendEnumValueInfo(str, LOWORD(param), eventValues, "event");
+ str.AppendASCII(" ");
+ HexParamInfo(str, HIWORD(param), "hiWord", false);
+}
+
+void KeystrokeFlagsParamInfo(nsCString& str, uint64_t param,
+ const char* /* name */, bool /* isPreCall */) {
+ WORD repeatCount = LOWORD(param);
+ WORD keyFlags = HIWORD(param);
+ WORD scanCode = LOBYTE(keyFlags);
+ bool isExtendedKey = (keyFlags & KF_EXTENDED) == KF_EXTENDED;
+ if (isExtendedKey) {
+ scanCode = MAKEWORD(scanCode, 0xE0);
+ }
+ bool contextCode = (keyFlags & KF_ALTDOWN) == KF_ALTDOWN;
+ bool wasKeyDown = (keyFlags & KF_REPEAT) == KF_REPEAT;
+ bool transitionState = (keyFlags & KF_UP) == KF_UP;
+
+ str.AppendPrintf(
+ "repeatCount: %d scanCode: %d isExtended: %d, contextCode: %d "
+ "previousKeyState: %d transitionState: %d",
+ repeatCount, scanCode, isExtendedKey ? 1 : 0, contextCode ? 1 : 0,
+ wasKeyDown ? 1 : 0, transitionState ? 1 : 0);
+};
+
+void VirtualKeysLowWordDistanceHighWordParamInfo(nsCString& str, uint64_t value,
+ const char* /* name */,
+ bool isPreCall) {
+ VirtualModifierKeysParamInfo(str, LOWORD(value), "virtualKeys", isPreCall);
+ str.AppendASCII(" ");
+ IntParamInfo(str, HIWORD(value), "distance", isPreCall);
+}
+
+void ShowWindowReasonParamInfo(nsCString& str, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ const static std::unordered_map<uint64_t, const char*> showWindowReasonValues{
+ VALANDNAME_ENTRY(SW_OTHERUNZOOM),
+ VALANDNAME_ENTRY(SW_OTHERZOOM),
+ VALANDNAME_ENTRY(SW_PARENTCLOSING),
+ VALANDNAME_ENTRY(SW_PARENTOPENING),
+ {0, "Call to ShowWindow()"}};
+ AppendEnumValueInfo(str, value, showWindowReasonValues, name);
+}
+
+void WindowEdgeParamInfo(nsCString& str, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ const static std::unordered_map<uint64_t, const char*> windowEdgeValues{
+ VALANDNAME_ENTRY(WMSZ_BOTTOM), VALANDNAME_ENTRY(WMSZ_BOTTOMLEFT),
+ VALANDNAME_ENTRY(WMSZ_BOTTOMRIGHT), VALANDNAME_ENTRY(WMSZ_LEFT),
+ VALANDNAME_ENTRY(WMSZ_RIGHT), VALANDNAME_ENTRY(WMSZ_TOP),
+ VALANDNAME_ENTRY(WMSZ_TOPLEFT), VALANDNAME_ENTRY(WMSZ_TOPRIGHT)};
+ AppendEnumValueInfo(str, value, windowEdgeValues, name);
+}
+
+void UiActionParamInfo(nsCString& str, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ const static std::unordered_map<uint64_t, const char*> uiActionValues{
+ VALANDNAME_ENTRY(SPI_GETACCESSTIMEOUT),
+ VALANDNAME_ENTRY(SPI_GETAUDIODESCRIPTION),
+ VALANDNAME_ENTRY(SPI_GETCLIENTAREAANIMATION),
+ VALANDNAME_ENTRY(SPI_GETDISABLEOVERLAPPEDCONTENT),
+ VALANDNAME_ENTRY(SPI_GETFILTERKEYS),
+ VALANDNAME_ENTRY(SPI_GETFOCUSBORDERHEIGHT),
+ VALANDNAME_ENTRY(SPI_GETFOCUSBORDERWIDTH),
+ VALANDNAME_ENTRY(SPI_GETHIGHCONTRAST),
+ VALANDNAME_ENTRY(SPI_GETLOGICALDPIOVERRIDE),
+ VALANDNAME_ENTRY(SPI_SETLOGICALDPIOVERRIDE),
+ VALANDNAME_ENTRY(SPI_GETMESSAGEDURATION),
+ VALANDNAME_ENTRY(SPI_GETMOUSECLICKLOCK),
+ VALANDNAME_ENTRY(SPI_GETMOUSECLICKLOCKTIME),
+ VALANDNAME_ENTRY(SPI_GETMOUSEKEYS),
+ VALANDNAME_ENTRY(SPI_GETMOUSESONAR),
+ VALANDNAME_ENTRY(SPI_GETMOUSEVANISH),
+ VALANDNAME_ENTRY(SPI_GETSCREENREADER),
+ VALANDNAME_ENTRY(SPI_GETSERIALKEYS),
+ VALANDNAME_ENTRY(SPI_GETSHOWSOUNDS),
+ VALANDNAME_ENTRY(SPI_GETSOUNDSENTRY),
+ VALANDNAME_ENTRY(SPI_GETSTICKYKEYS),
+ VALANDNAME_ENTRY(SPI_GETTOGGLEKEYS),
+ VALANDNAME_ENTRY(SPI_SETACCESSTIMEOUT),
+ VALANDNAME_ENTRY(SPI_SETAUDIODESCRIPTION),
+ VALANDNAME_ENTRY(SPI_SETCLIENTAREAANIMATION),
+ VALANDNAME_ENTRY(SPI_SETDISABLEOVERLAPPEDCONTENT),
+ VALANDNAME_ENTRY(SPI_SETFILTERKEYS),
+ VALANDNAME_ENTRY(SPI_SETFOCUSBORDERHEIGHT),
+ VALANDNAME_ENTRY(SPI_SETFOCUSBORDERWIDTH),
+ VALANDNAME_ENTRY(SPI_SETHIGHCONTRAST),
+ VALANDNAME_ENTRY(SPI_SETMESSAGEDURATION),
+ VALANDNAME_ENTRY(SPI_SETMOUSECLICKLOCK),
+ VALANDNAME_ENTRY(SPI_SETMOUSECLICKLOCKTIME),
+ VALANDNAME_ENTRY(SPI_SETMOUSEKEYS),
+ VALANDNAME_ENTRY(SPI_SETMOUSESONAR),
+ VALANDNAME_ENTRY(SPI_SETMOUSEVANISH),
+ VALANDNAME_ENTRY(SPI_SETSCREENREADER),
+ VALANDNAME_ENTRY(SPI_SETSERIALKEYS),
+ VALANDNAME_ENTRY(SPI_SETSHOWSOUNDS),
+ VALANDNAME_ENTRY(SPI_SETSOUNDSENTRY),
+ VALANDNAME_ENTRY(SPI_SETSTICKYKEYS),
+ VALANDNAME_ENTRY(SPI_SETTOGGLEKEYS),
+ VALANDNAME_ENTRY(SPI_GETCLEARTYPE),
+ VALANDNAME_ENTRY(SPI_GETDESKWALLPAPER),
+ VALANDNAME_ENTRY(SPI_GETDROPSHADOW),
+ VALANDNAME_ENTRY(SPI_GETFLATMENU),
+ VALANDNAME_ENTRY(SPI_GETFONTSMOOTHING),
+ VALANDNAME_ENTRY(SPI_GETFONTSMOOTHINGCONTRAST),
+ VALANDNAME_ENTRY(SPI_GETFONTSMOOTHINGORIENTATION),
+ VALANDNAME_ENTRY(SPI_GETFONTSMOOTHINGTYPE),
+ VALANDNAME_ENTRY(SPI_GETWORKAREA),
+ VALANDNAME_ENTRY(SPI_SETCLEARTYPE),
+ VALANDNAME_ENTRY(SPI_SETCURSORS),
+ VALANDNAME_ENTRY(SPI_SETDESKPATTERN),
+ VALANDNAME_ENTRY(SPI_SETDESKWALLPAPER),
+ VALANDNAME_ENTRY(SPI_SETDROPSHADOW),
+ VALANDNAME_ENTRY(SPI_SETFLATMENU),
+ VALANDNAME_ENTRY(SPI_SETFONTSMOOTHING),
+ VALANDNAME_ENTRY(SPI_SETFONTSMOOTHINGCONTRAST),
+ VALANDNAME_ENTRY(SPI_SETFONTSMOOTHINGORIENTATION),
+ VALANDNAME_ENTRY(SPI_SETFONTSMOOTHINGTYPE),
+ VALANDNAME_ENTRY(SPI_SETWORKAREA),
+ VALANDNAME_ENTRY(SPI_GETICONMETRICS),
+ VALANDNAME_ENTRY(SPI_GETICONTITLELOGFONT),
+ VALANDNAME_ENTRY(SPI_GETICONTITLEWRAP),
+ VALANDNAME_ENTRY(SPI_ICONHORIZONTALSPACING),
+ VALANDNAME_ENTRY(SPI_ICONVERTICALSPACING),
+ VALANDNAME_ENTRY(SPI_SETICONMETRICS),
+ VALANDNAME_ENTRY(SPI_SETICONS),
+ VALANDNAME_ENTRY(SPI_SETICONTITLELOGFONT),
+ VALANDNAME_ENTRY(SPI_SETICONTITLEWRAP),
+ VALANDNAME_ENTRY(SPI_GETBEEP),
+ VALANDNAME_ENTRY(SPI_GETBLOCKSENDINPUTRESETS),
+ VALANDNAME_ENTRY(SPI_GETCONTACTVISUALIZATION),
+ VALANDNAME_ENTRY(SPI_SETCONTACTVISUALIZATION),
+ VALANDNAME_ENTRY(SPI_GETDEFAULTINPUTLANG),
+ VALANDNAME_ENTRY(SPI_GETGESTUREVISUALIZATION),
+ VALANDNAME_ENTRY(SPI_SETGESTUREVISUALIZATION),
+ VALANDNAME_ENTRY(SPI_GETKEYBOARDCUES),
+ VALANDNAME_ENTRY(SPI_GETKEYBOARDDELAY),
+ VALANDNAME_ENTRY(SPI_GETKEYBOARDPREF),
+ VALANDNAME_ENTRY(SPI_GETKEYBOARDSPEED),
+ VALANDNAME_ENTRY(SPI_GETMOUSE),
+ VALANDNAME_ENTRY(SPI_GETMOUSEHOVERHEIGHT),
+ VALANDNAME_ENTRY(SPI_GETMOUSEHOVERTIME),
+ VALANDNAME_ENTRY(SPI_GETMOUSEHOVERWIDTH),
+ VALANDNAME_ENTRY(SPI_GETMOUSESPEED),
+ VALANDNAME_ENTRY(SPI_GETMOUSETRAILS),
+ VALANDNAME_ENTRY(SPI_GETMOUSEWHEELROUTING),
+ VALANDNAME_ENTRY(SPI_SETMOUSEWHEELROUTING),
+ VALANDNAME_ENTRY(SPI_GETPENVISUALIZATION),
+ VALANDNAME_ENTRY(SPI_SETPENVISUALIZATION),
+ VALANDNAME_ENTRY(SPI_GETSNAPTODEFBUTTON),
+ VALANDNAME_ENTRY(SPI_GETSYSTEMLANGUAGEBAR),
+ VALANDNAME_ENTRY(SPI_SETSYSTEMLANGUAGEBAR),
+ VALANDNAME_ENTRY(SPI_GETTHREADLOCALINPUTSETTINGS),
+ VALANDNAME_ENTRY(SPI_SETTHREADLOCALINPUTSETTINGS),
+ VALANDNAME_ENTRY(SPI_GETWHEELSCROLLCHARS),
+ VALANDNAME_ENTRY(SPI_GETWHEELSCROLLLINES),
+ VALANDNAME_ENTRY(SPI_SETBEEP),
+ VALANDNAME_ENTRY(SPI_SETBLOCKSENDINPUTRESETS),
+ VALANDNAME_ENTRY(SPI_SETDEFAULTINPUTLANG),
+ VALANDNAME_ENTRY(SPI_SETDOUBLECLICKTIME),
+ VALANDNAME_ENTRY(SPI_SETDOUBLECLKHEIGHT),
+ VALANDNAME_ENTRY(SPI_SETDOUBLECLKWIDTH),
+ VALANDNAME_ENTRY(SPI_SETKEYBOARDCUES),
+ VALANDNAME_ENTRY(SPI_SETKEYBOARDDELAY),
+ VALANDNAME_ENTRY(SPI_SETKEYBOARDPREF),
+ VALANDNAME_ENTRY(SPI_SETKEYBOARDSPEED),
+ VALANDNAME_ENTRY(SPI_SETLANGTOGGLE),
+ VALANDNAME_ENTRY(SPI_SETMOUSE),
+ VALANDNAME_ENTRY(SPI_SETMOUSEBUTTONSWAP),
+ VALANDNAME_ENTRY(SPI_SETMOUSEHOVERHEIGHT),
+ VALANDNAME_ENTRY(SPI_SETMOUSEHOVERTIME),
+ VALANDNAME_ENTRY(SPI_SETMOUSEHOVERWIDTH),
+ VALANDNAME_ENTRY(SPI_SETMOUSESPEED),
+ VALANDNAME_ENTRY(SPI_SETMOUSETRAILS),
+ VALANDNAME_ENTRY(SPI_SETSNAPTODEFBUTTON),
+ VALANDNAME_ENTRY(SPI_SETWHEELSCROLLCHARS),
+ VALANDNAME_ENTRY(SPI_SETWHEELSCROLLLINES),
+ VALANDNAME_ENTRY(SPI_GETMENUDROPALIGNMENT),
+ VALANDNAME_ENTRY(SPI_GETMENUFADE),
+ VALANDNAME_ENTRY(SPI_GETMENUSHOWDELAY),
+ VALANDNAME_ENTRY(SPI_SETMENUDROPALIGNMENT),
+ VALANDNAME_ENTRY(SPI_SETMENUFADE),
+ VALANDNAME_ENTRY(SPI_SETMENUSHOWDELAY),
+ VALANDNAME_ENTRY(SPI_GETLOWPOWERACTIVE),
+ VALANDNAME_ENTRY(SPI_GETLOWPOWERTIMEOUT),
+ VALANDNAME_ENTRY(SPI_GETPOWEROFFACTIVE),
+ VALANDNAME_ENTRY(SPI_GETPOWEROFFTIMEOUT),
+ VALANDNAME_ENTRY(SPI_SETLOWPOWERACTIVE),
+ VALANDNAME_ENTRY(SPI_SETLOWPOWERTIMEOUT),
+ VALANDNAME_ENTRY(SPI_SETPOWEROFFACTIVE),
+ VALANDNAME_ENTRY(SPI_SETPOWEROFFTIMEOUT),
+ VALANDNAME_ENTRY(SPI_GETSCREENSAVEACTIVE),
+ VALANDNAME_ENTRY(SPI_GETSCREENSAVERRUNNING),
+ VALANDNAME_ENTRY(SPI_GETSCREENSAVESECURE),
+ VALANDNAME_ENTRY(SPI_GETSCREENSAVETIMEOUT),
+ VALANDNAME_ENTRY(SPI_SETSCREENSAVEACTIVE),
+ VALANDNAME_ENTRY(SPI_SETSCREENSAVERRUNNING),
+ VALANDNAME_ENTRY(SPI_SETSCREENSAVESECURE),
+ VALANDNAME_ENTRY(SPI_SETSCREENSAVETIMEOUT),
+ VALANDNAME_ENTRY(SPI_GETHUNGAPPTIMEOUT),
+ VALANDNAME_ENTRY(SPI_GETWAITTOKILLTIMEOUT),
+ VALANDNAME_ENTRY(SPI_GETWAITTOKILLSERVICETIMEOUT),
+ VALANDNAME_ENTRY(SPI_SETHUNGAPPTIMEOUT),
+ VALANDNAME_ENTRY(SPI_SETWAITTOKILLTIMEOUT),
+ VALANDNAME_ENTRY(SPI_SETWAITTOKILLSERVICETIMEOUT),
+ VALANDNAME_ENTRY(SPI_GETCOMBOBOXANIMATION),
+ VALANDNAME_ENTRY(SPI_GETCURSORSHADOW),
+ VALANDNAME_ENTRY(SPI_GETGRADIENTCAPTIONS),
+ VALANDNAME_ENTRY(SPI_GETHOTTRACKING),
+ VALANDNAME_ENTRY(SPI_GETLISTBOXSMOOTHSCROLLING),
+ VALANDNAME_ENTRY(SPI_GETMENUANIMATION),
+ VALANDNAME_ENTRY(SPI_GETMENUUNDERLINES),
+ VALANDNAME_ENTRY(SPI_GETSELECTIONFADE),
+ VALANDNAME_ENTRY(SPI_GETTOOLTIPANIMATION),
+ VALANDNAME_ENTRY(SPI_GETTOOLTIPFADE),
+ VALANDNAME_ENTRY(SPI_GETUIEFFECTS),
+ VALANDNAME_ENTRY(SPI_SETCOMBOBOXANIMATION),
+ VALANDNAME_ENTRY(SPI_SETCURSORSHADOW),
+ VALANDNAME_ENTRY(SPI_SETGRADIENTCAPTIONS),
+ VALANDNAME_ENTRY(SPI_SETHOTTRACKING),
+ VALANDNAME_ENTRY(SPI_SETLISTBOXSMOOTHSCROLLING),
+ VALANDNAME_ENTRY(SPI_SETMENUANIMATION),
+ VALANDNAME_ENTRY(SPI_SETMENUUNDERLINES),
+ VALANDNAME_ENTRY(SPI_SETSELECTIONFADE),
+ VALANDNAME_ENTRY(SPI_SETTOOLTIPANIMATION),
+ VALANDNAME_ENTRY(SPI_SETTOOLTIPFADE),
+ VALANDNAME_ENTRY(SPI_SETUIEFFECTS),
+ VALANDNAME_ENTRY(SPI_GETACTIVEWINDOWTRACKING),
+ VALANDNAME_ENTRY(SPI_GETACTIVEWNDTRKZORDER),
+ VALANDNAME_ENTRY(SPI_GETACTIVEWNDTRKTIMEOUT),
+ VALANDNAME_ENTRY(SPI_GETANIMATION),
+ VALANDNAME_ENTRY(SPI_GETBORDER),
+ VALANDNAME_ENTRY(SPI_GETCARETWIDTH),
+ VALANDNAME_ENTRY(SPI_GETDOCKMOVING),
+ VALANDNAME_ENTRY(SPI_GETDRAGFROMMAXIMIZE),
+ VALANDNAME_ENTRY(SPI_GETDRAGFULLWINDOWS),
+ VALANDNAME_ENTRY(SPI_GETFOREGROUNDFLASHCOUNT),
+ VALANDNAME_ENTRY(SPI_GETFOREGROUNDLOCKTIMEOUT),
+ VALANDNAME_ENTRY(SPI_GETMINIMIZEDMETRICS),
+ VALANDNAME_ENTRY(SPI_GETMOUSEDOCKTHRESHOLD),
+ VALANDNAME_ENTRY(SPI_GETMOUSEDRAGOUTTHRESHOLD),
+ VALANDNAME_ENTRY(SPI_GETMOUSESIDEMOVETHRESHOLD),
+ VALANDNAME_ENTRY(SPI_GETNONCLIENTMETRICS),
+ VALANDNAME_ENTRY(SPI_GETPENDOCKTHRESHOLD),
+ VALANDNAME_ENTRY(SPI_GETPENDRAGOUTTHRESHOLD),
+ VALANDNAME_ENTRY(SPI_GETPENSIDEMOVETHRESHOLD),
+ VALANDNAME_ENTRY(SPI_GETSHOWIMEUI),
+ VALANDNAME_ENTRY(SPI_GETSNAPSIZING),
+ VALANDNAME_ENTRY(SPI_GETWINARRANGING),
+ VALANDNAME_ENTRY(SPI_SETACTIVEWINDOWTRACKING),
+ VALANDNAME_ENTRY(SPI_SETACTIVEWNDTRKZORDER),
+ VALANDNAME_ENTRY(SPI_SETACTIVEWNDTRKTIMEOUT),
+ VALANDNAME_ENTRY(SPI_SETANIMATION),
+ VALANDNAME_ENTRY(SPI_SETBORDER),
+ VALANDNAME_ENTRY(SPI_SETCARETWIDTH),
+ VALANDNAME_ENTRY(SPI_SETDOCKMOVING),
+ VALANDNAME_ENTRY(SPI_SETDRAGFROMMAXIMIZE),
+ VALANDNAME_ENTRY(SPI_SETDRAGFULLWINDOWS),
+ VALANDNAME_ENTRY(SPI_SETFOREGROUNDFLASHCOUNT),
+ VALANDNAME_ENTRY(SPI_SETFOREGROUNDLOCKTIMEOUT),
+ VALANDNAME_ENTRY(SPI_SETMINIMIZEDMETRICS),
+ VALANDNAME_ENTRY(SPI_SETMOUSEDOCKTHRESHOLD),
+ VALANDNAME_ENTRY(SPI_SETMOUSEDRAGOUTTHRESHOLD),
+ VALANDNAME_ENTRY(SPI_SETMOUSESIDEMOVETHRESHOLD),
+ VALANDNAME_ENTRY(SPI_SETNONCLIENTMETRICS),
+ VALANDNAME_ENTRY(SPI_SETPENDOCKTHRESHOLD),
+ VALANDNAME_ENTRY(SPI_SETPENDRAGOUTTHRESHOLD),
+ VALANDNAME_ENTRY(SPI_SETPENSIDEMOVETHRESHOLD),
+ VALANDNAME_ENTRY(SPI_SETSHOWIMEUI),
+ VALANDNAME_ENTRY(SPI_SETSNAPSIZING),
+ VALANDNAME_ENTRY(SPI_SETWINARRANGING),
+ };
+ AppendEnumValueInfo(str, value, uiActionValues, name);
+}
+
+nsAutoCString WmSizeParamInfo(uint64_t wParam, uint64_t lParam,
+ bool /* isPreCall */) {
+ nsAutoCString result;
+ const static std::unordered_map<uint64_t, const char*> sizeValues{
+ VALANDNAME_ENTRY(SIZE_RESTORED), VALANDNAME_ENTRY(SIZE_MINIMIZED),
+ VALANDNAME_ENTRY(SIZE_MAXIMIZED), VALANDNAME_ENTRY(SIZE_MAXSHOW),
+ VALANDNAME_ENTRY(SIZE_MAXHIDE)};
+ AppendEnumValueInfo(result, wParam, sizeValues, "size");
+ result.AppendPrintf(" width=%d height=%d", static_cast<int>(LOWORD(lParam)),
+ static_cast<int>(HIWORD(lParam)));
+ return result;
+}
+
+const nsTArray<EnumValueAndName> windowPositionFlags = {
+ VALANDNAME_ENTRY(SWP_DRAWFRAME), VALANDNAME_ENTRY(SWP_HIDEWINDOW),
+ VALANDNAME_ENTRY(SWP_NOACTIVATE), VALANDNAME_ENTRY(SWP_NOCOPYBITS),
+ VALANDNAME_ENTRY(SWP_NOMOVE), VALANDNAME_ENTRY(SWP_NOOWNERZORDER),
+ VALANDNAME_ENTRY(SWP_NOREDRAW), VALANDNAME_ENTRY(SWP_NOSENDCHANGING),
+ VALANDNAME_ENTRY(SWP_NOSIZE), VALANDNAME_ENTRY(SWP_NOZORDER),
+ VALANDNAME_ENTRY(SWP_SHOWWINDOW),
+};
+
+void WindowPosParamInfo(nsCString& str, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ LPWINDOWPOS windowPos = reinterpret_cast<LPWINDOWPOS>(value);
+ if (windowPos == nullptr) {
+ str.AppendASCII("null windowPos?");
+ return;
+ }
+ HexParamInfo(str, reinterpret_cast<uint64_t>(windowPos->hwnd), "hwnd", false);
+ str.AppendASCII(" ");
+ HexParamInfo(str, reinterpret_cast<uint64_t>(windowPos->hwndInsertAfter),
+ "hwndInsertAfter", false);
+ str.AppendASCII(" ");
+ IntParamInfo(str, windowPos->x, "x", false);
+ str.AppendASCII(" ");
+ IntParamInfo(str, windowPos->y, "y", false);
+ str.AppendASCII(" ");
+ IntParamInfo(str, windowPos->cx, "cx", false);
+ str.AppendASCII(" ");
+ IntParamInfo(str, windowPos->cy, "cy", false);
+ str.AppendASCII(" ");
+ AppendFlagsInfo(str, windowPos->flags, windowPositionFlags, "flags");
+}
+
+void StyleOrExtendedParamInfo(nsCString& str, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ const static std::unordered_map<uint64_t, const char*> styleOrExtended{
+ VALANDNAME_ENTRY(GWL_EXSTYLE), VALANDNAME_ENTRY(GWL_STYLE)};
+ AppendEnumValueInfo(str, value, styleOrExtended, name);
+}
+
+void StyleStructParamInfo(nsCString& str, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ LPSTYLESTRUCT styleStruct = reinterpret_cast<LPSTYLESTRUCT>(value);
+ if (styleStruct == nullptr) {
+ str.AppendASCII("null STYLESTRUCT?");
+ return;
+ }
+ HexParamInfo(str, styleStruct->styleOld, "styleOld", false);
+ str.AppendASCII(" ");
+ HexParamInfo(str, styleStruct->styleNew, "styleNew", false);
+}
+
+void NcCalcSizeParamsParamInfo(nsCString& str, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ LPNCCALCSIZE_PARAMS params = reinterpret_cast<LPNCCALCSIZE_PARAMS>(value);
+ if (params == nullptr) {
+ str.AppendASCII("null NCCALCSIZE_PARAMS?");
+ return;
+ }
+ str.AppendPrintf("%s[0]: ", name);
+ RectParamInfo(str, reinterpret_cast<uintptr_t>(&params->rgrc[0]), nullptr,
+ false);
+ str.AppendPrintf(" %s[1]: ", name);
+ RectParamInfo(str, reinterpret_cast<uintptr_t>(&params->rgrc[1]), nullptr,
+ false);
+ str.AppendPrintf(" %s[2]: ", name);
+ RectParamInfo(str, reinterpret_cast<uintptr_t>(&params->rgrc[2]), nullptr,
+ false);
+ str.AppendASCII(" ");
+ WindowPosParamInfo(str, reinterpret_cast<uintptr_t>(params->lppos), nullptr,
+ false);
+}
+
+nsAutoCString WmNcCalcSizeParamInfo(uint64_t wParam, uint64_t lParam,
+ bool /* isPreCall */) {
+ nsAutoCString result;
+ TrueFalseParamInfo(result, wParam, "shouldIndicateValidArea", false);
+ result.AppendASCII(" ");
+ if (wParam == TRUE) {
+ NcCalcSizeParamsParamInfo(result, lParam, "ncCalcSizeParams", false);
+ } else {
+ RectParamInfo(result, lParam, "rect", false);
+ }
+ return result;
+}
+
+void ActivateWParamInfo(nsCString& result, uint64_t wParam, const char* name,
+ bool /* isPreCall */) {
+ const static std::unordered_map<uint64_t, const char*> activateValues{
+ VALANDNAME_ENTRY(WA_ACTIVE), VALANDNAME_ENTRY(WA_CLICKACTIVE),
+ VALANDNAME_ENTRY(WA_INACTIVE)};
+ AppendEnumValueInfo(result, wParam, activateValues, name);
+}
+
+void HitTestParamInfo(nsCString& result, uint64_t param, const char* name,
+ bool /* isPreCall */) {
+ const static std::unordered_map<uint64_t, const char*> hitTestResults{
+ VALANDNAME_ENTRY(HTBORDER), VALANDNAME_ENTRY(HTBOTTOM),
+ VALANDNAME_ENTRY(HTBOTTOMLEFT), VALANDNAME_ENTRY(HTBOTTOMRIGHT),
+ VALANDNAME_ENTRY(HTCAPTION), VALANDNAME_ENTRY(HTCLIENT),
+ VALANDNAME_ENTRY(HTCLOSE), VALANDNAME_ENTRY(HTERROR),
+ VALANDNAME_ENTRY(HTGROWBOX), VALANDNAME_ENTRY(HTHELP),
+ VALANDNAME_ENTRY(HTHSCROLL), VALANDNAME_ENTRY(HTLEFT),
+ VALANDNAME_ENTRY(HTMENU), VALANDNAME_ENTRY(HTMAXBUTTON),
+ VALANDNAME_ENTRY(HTMINBUTTON), VALANDNAME_ENTRY(HTNOWHERE),
+ VALANDNAME_ENTRY(HTREDUCE), VALANDNAME_ENTRY(HTRIGHT),
+ VALANDNAME_ENTRY(HTSIZE), VALANDNAME_ENTRY(HTSYSMENU),
+ VALANDNAME_ENTRY(HTTOP), VALANDNAME_ENTRY(HTTOPLEFT),
+ VALANDNAME_ENTRY(HTTOPRIGHT), VALANDNAME_ENTRY(HTTRANSPARENT),
+ VALANDNAME_ENTRY(HTVSCROLL), VALANDNAME_ENTRY(HTZOOM),
+ };
+ AppendEnumValueInfo(result, param, hitTestResults, name);
+}
+
+void SetCursorLParamInfo(nsCString& result, uint64_t lParam,
+ const char* /* name */, bool /* isPreCall */) {
+ HitTestParamInfo(result, LOWORD(lParam), "hitTestResult", false);
+ result.AppendASCII(" ");
+ HexParamInfo(result, HIWORD(lParam), "message", false);
+}
+
+void MinMaxInfoParamInfo(nsCString& result, uint64_t value,
+ const char* /* name */, bool /* isPreCall */) {
+ PMINMAXINFO minMaxInfo = reinterpret_cast<PMINMAXINFO>(value);
+ if (minMaxInfo == nullptr) {
+ result.AppendPrintf("NULL minMaxInfo?");
+ return;
+ }
+ PointExplicitParamInfo(result, minMaxInfo->ptMaxSize, "maxSize");
+ result.AppendASCII(" ");
+ PointExplicitParamInfo(result, minMaxInfo->ptMaxPosition, "maxPosition");
+ result.AppendASCII(" ");
+ PointExplicitParamInfo(result, minMaxInfo->ptMinTrackSize, "minTrackSize");
+ result.AppendASCII(" ");
+ PointExplicitParamInfo(result, minMaxInfo->ptMaxTrackSize, "maxTrackSize");
+}
+
+void WideStringParamInfo(nsCString& result, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ result.AppendPrintf("%s=%S", name, reinterpret_cast<LPCWSTR>(value));
+}
+
+void DeviceEventParamInfo(nsCString& result, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ const static std::unordered_map<uint64_t, const char*> deviceEventValues{
+ VALANDNAME_ENTRY(DBT_DEVNODES_CHANGED),
+ VALANDNAME_ENTRY(DBT_QUERYCHANGECONFIG),
+ VALANDNAME_ENTRY(DBT_CONFIGCHANGED),
+ VALANDNAME_ENTRY(DBT_CONFIGCHANGECANCELED),
+ VALANDNAME_ENTRY(DBT_DEVICEARRIVAL),
+ VALANDNAME_ENTRY(DBT_DEVICEQUERYREMOVE),
+ VALANDNAME_ENTRY(DBT_DEVICEQUERYREMOVEFAILED),
+ VALANDNAME_ENTRY(DBT_DEVICEREMOVEPENDING),
+ VALANDNAME_ENTRY(DBT_DEVICEREMOVECOMPLETE),
+ VALANDNAME_ENTRY(DBT_DEVICETYPESPECIFIC),
+ VALANDNAME_ENTRY(DBT_CUSTOMEVENT),
+ VALANDNAME_ENTRY(DBT_USERDEFINED)};
+ AppendEnumValueInfo(result, value, deviceEventValues, name);
+}
+
+void ResolutionParamInfo(nsCString& result, uint64_t value, const char* name,
+ bool /* isPreCall */) {
+ result.AppendPrintf("horizontalRes=%d verticalRes=%d", LOWORD(value),
+ HIWORD(value));
+}
+
+// Window message with default wParam/lParam logging
+#define ENTRY(_msg) \
+ { \
+ _msg, { #_msg, _msg, DefaultParamInfo } \
+ }
+// Window message with no parameters
+#define ENTRY_WITH_NO_PARAM_INFO(_msg) \
+ { \
+ _msg, { #_msg, _msg, nullptr } \
+ }
+// Window message with custom parameter logging functions
+#define ENTRY_WITH_CUSTOM_PARAM_INFO(_msg, paramInfoFn) \
+ { \
+ _msg, { #_msg, _msg, paramInfoFn } \
+ }
+// Window message with separate custom wParam and lParam logging functions
+#define ENTRY_WITH_SPLIT_PARAM_INFOS(_msg, wParamInfoFn, wParamName, \
+ lParamInfoFn, lParamName) \
+ { \
+ _msg, { \
+ #_msg, _msg, nullptr, wParamInfoFn, wParamName, lParamInfoFn, lParamName \
+ } \
+ }
+std::unordered_map<UINT, EventMsgInfo> gAllEvents = {
+ ENTRY_WITH_NO_PARAM_INFO(WM_NULL),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_CREATE, nullptr, nullptr,
+ CreateStructParamInfo, "createStruct"),
+ ENTRY_WITH_NO_PARAM_INFO(WM_DESTROY),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOVE, nullptr, nullptr,
+ XLowWordYHighWordParamInfo, "upperLeft"),
+ ENTRY_WITH_CUSTOM_PARAM_INFO(WM_SIZE, WmSizeParamInfo),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ACTIVATE, ActivateWParamInfo, "wParam",
+ HexParamInfo, "handle"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETFOCUS, HexParamInfo, "handle", nullptr,
+ nullptr),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KILLFOCUS, HexParamInfo, "handle", nullptr,
+ nullptr),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ENABLE, TrueFalseParamInfo, "enabled",
+ nullptr, nullptr),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETREDRAW, TrueFalseParamInfo,
+ "redrawState", nullptr, nullptr),
+ ENTRY(WM_SETTEXT),
+ ENTRY(WM_GETTEXT),
+ ENTRY(WM_GETTEXTLENGTH),
+ ENTRY_WITH_NO_PARAM_INFO(WM_PAINT),
+ ENTRY_WITH_NO_PARAM_INFO(WM_CLOSE),
+ ENTRY(WM_QUERYENDSESSION),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_QUIT, HexParamInfo, "exitCode", nullptr,
+ nullptr),
+ ENTRY(WM_QUERYOPEN),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ERASEBKGND, HexParamInfo, "deviceContext",
+ nullptr, nullptr),
+ ENTRY(WM_SYSCOLORCHANGE),
+ ENTRY(WM_ENDSESSION),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SHOWWINDOW, TrueFalseParamInfo,
+ "windowBeingShown", ShowWindowReasonParamInfo,
+ "status"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETTINGCHANGE, UiActionParamInfo,
+ "uiAction", WideStringParamInfo,
+ "paramChanged"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DEVMODECHANGE, nullptr, nullptr,
+ WideStringParamInfo, "deviceName"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_ACTIVATEAPP, TrueFalseParamInfo,
+ "activated", HexParamInfo, "threadId"),
+ ENTRY(WM_FONTCHANGE),
+ ENTRY(WM_TIMECHANGE),
+ ENTRY(WM_CANCELMODE),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SETCURSOR, HexParamInfo, "windowHandle",
+ SetCursorLParamInfo, ""),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEACTIVATE, HexParamInfo, "windowHandle",
+ SetCursorLParamInfo, ""),
+ ENTRY(WM_CHILDACTIVATE),
+ ENTRY(WM_QUEUESYNC),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_GETMINMAXINFO, nullptr, nullptr,
+ MinMaxInfoParamInfo, ""),
+ ENTRY(WM_PAINTICON),
+ ENTRY(WM_ICONERASEBKGND),
+ ENTRY(WM_NEXTDLGCTL),
+ ENTRY(WM_SPOOLERSTATUS),
+ ENTRY(WM_DRAWITEM),
+ ENTRY(WM_MEASUREITEM),
+ ENTRY(WM_DELETEITEM),
+ ENTRY(WM_VKEYTOITEM),
+ ENTRY(WM_CHARTOITEM),
+ ENTRY(WM_SETFONT),
+ ENTRY(WM_GETFONT),
+ ENTRY(WM_SETHOTKEY),
+ ENTRY(WM_GETHOTKEY),
+ ENTRY(WM_QUERYDRAGICON),
+ ENTRY(WM_COMPAREITEM),
+ ENTRY(WM_GETOBJECT),
+ ENTRY(WM_COMPACTING),
+ ENTRY(WM_COMMNOTIFY),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_WINDOWPOSCHANGING, nullptr, nullptr,
+ WindowPosParamInfo, "newSizeAndPos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_WINDOWPOSCHANGED, nullptr, nullptr,
+ WindowPosParamInfo, "newSizeAndPos"),
+ ENTRY(WM_POWER),
+ ENTRY(WM_COPYDATA),
+ ENTRY(WM_CANCELJOURNAL),
+ ENTRY(WM_NOTIFY),
+ ENTRY(WM_INPUTLANGCHANGEREQUEST),
+ ENTRY(WM_INPUTLANGCHANGE),
+ ENTRY(WM_TCARD),
+ ENTRY(WM_HELP),
+ ENTRY(WM_USERCHANGED),
+ ENTRY(WM_NOTIFYFORMAT),
+ ENTRY(WM_CONTEXTMENU),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_STYLECHANGING, StyleOrExtendedParamInfo,
+ "styleOrExtended", StyleStructParamInfo,
+ "newStyles"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_STYLECHANGED, StyleOrExtendedParamInfo,
+ "styleOrExtended", StyleStructParamInfo,
+ "newStyles"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DISPLAYCHANGE, IntParamInfo, "bitsPerPixel",
+ ResolutionParamInfo, ""),
+ ENTRY(WM_GETICON),
+ ENTRY(WM_SETICON),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCCREATE, nullptr, nullptr,
+ CreateStructParamInfo, "createStruct"),
+ ENTRY_WITH_NO_PARAM_INFO(WM_NCDESTROY),
+ ENTRY_WITH_CUSTOM_PARAM_INFO(WM_NCCALCSIZE, WmNcCalcSizeParamInfo),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCHITTEST, nullptr, nullptr,
+ XLowWordYHighWordParamInfo, "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCPAINT, HexParamInfo, "updateRegionHandle",
+ nullptr, nullptr),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCACTIVATE, TrueFalseParamInfo,
+ "isTitleBarOrIconActive", HexParamInfo,
+ "updateRegion"),
+ ENTRY(WM_GETDLGCODE),
+ ENTRY(WM_SYNCPAINT),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMOUSEMOVE, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCLBUTTONDOWN, HitTestParamInfo,
+ "hitTestValue", PointsParamInfo, "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCLBUTTONUP, HitTestParamInfo,
+ "hitTestValue", PointsParamInfo, "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCLBUTTONDBLCLK, HitTestParamInfo,
+ "hitTestValue", PointsParamInfo, "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCRBUTTONDOWN, HitTestParamInfo,
+ "hitTestValue", PointsParamInfo, "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCRBUTTONUP, HitTestParamInfo,
+ "hitTestValue", PointsParamInfo, "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCRBUTTONDBLCLK, HitTestParamInfo,
+ "hitTestValue", PointsParamInfo, "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMBUTTONDOWN, HitTestParamInfo,
+ "hitTestValue", PointsParamInfo, "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMBUTTONUP, HitTestParamInfo,
+ "hitTestValue", PointsParamInfo, "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMBUTTONDBLCLK, HitTestParamInfo,
+ "hitTestValue", PointsParamInfo, "mousePos"),
+ ENTRY(EM_GETSEL),
+ ENTRY(EM_SETSEL),
+ ENTRY(EM_GETRECT),
+ ENTRY(EM_SETRECT),
+ ENTRY(EM_SETRECTNP),
+ ENTRY(EM_SCROLL),
+ ENTRY(EM_LINESCROLL),
+ ENTRY(EM_SCROLLCARET),
+ ENTRY(EM_GETMODIFY),
+ ENTRY(EM_SETMODIFY),
+ ENTRY(EM_GETLINECOUNT),
+ ENTRY(EM_LINEINDEX),
+ ENTRY(EM_SETHANDLE),
+ ENTRY(EM_GETHANDLE),
+ ENTRY(EM_GETTHUMB),
+ ENTRY(EM_LINELENGTH),
+ ENTRY(EM_REPLACESEL),
+ ENTRY(EM_GETLINE),
+ ENTRY(EM_LIMITTEXT),
+ ENTRY(EM_CANUNDO),
+ ENTRY(EM_UNDO),
+ ENTRY(EM_FMTLINES),
+ ENTRY(EM_LINEFROMCHAR),
+ ENTRY(EM_SETTABSTOPS),
+ ENTRY(EM_SETPASSWORDCHAR),
+ ENTRY(EM_EMPTYUNDOBUFFER),
+ ENTRY(EM_GETFIRSTVISIBLELINE),
+ ENTRY(EM_SETREADONLY),
+ ENTRY(EM_SETWORDBREAKPROC),
+ ENTRY(EM_GETWORDBREAKPROC),
+ ENTRY(EM_GETPASSWORDCHAR),
+ ENTRY(EM_SETMARGINS),
+ ENTRY(EM_GETMARGINS),
+ ENTRY(EM_GETLIMITTEXT),
+ ENTRY(EM_POSFROMCHAR),
+ ENTRY(EM_CHARFROMPOS),
+ ENTRY(EM_SETIMESTATUS),
+ ENTRY(EM_GETIMESTATUS),
+ ENTRY(SBM_SETPOS),
+ ENTRY(SBM_GETPOS),
+ ENTRY(SBM_SETRANGE),
+ ENTRY(SBM_SETRANGEREDRAW),
+ ENTRY(SBM_GETRANGE),
+ ENTRY(SBM_ENABLE_ARROWS),
+ ENTRY(SBM_SETSCROLLINFO),
+ ENTRY(SBM_GETSCROLLINFO),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KEYDOWN, VirtualKeyParamInfo, "vKey",
+ KeystrokeFlagsParamInfo, ""),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_KEYUP, VirtualKeyParamInfo, "vKey",
+ KeystrokeFlagsParamInfo, ""),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_CHAR, IntParamInfo, "charCode",
+ KeystrokeFlagsParamInfo, ""),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DEADCHAR, IntParamInfo, "charCode",
+ KeystrokeFlagsParamInfo, ""),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSKEYDOWN, VirtualKeyParamInfo, "vKey",
+ KeystrokeFlagsParamInfo, ""),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSKEYUP, VirtualKeyParamInfo, "vKey",
+ KeystrokeFlagsParamInfo, ""),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSCHAR, IntParamInfo, "charCode",
+ KeystrokeFlagsParamInfo, ""),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SYSDEADCHAR, IntParamInfo, "charCode",
+ KeystrokeFlagsParamInfo, ""),
+ ENTRY(WM_KEYLAST),
+ ENTRY(WM_IME_STARTCOMPOSITION),
+ ENTRY(WM_IME_ENDCOMPOSITION),
+ ENTRY(WM_IME_COMPOSITION),
+ ENTRY(WM_INITDIALOG),
+ ENTRY(WM_COMMAND),
+ ENTRY(WM_SYSCOMMAND),
+ ENTRY(WM_TIMER),
+ ENTRY(WM_HSCROLL),
+ ENTRY(WM_VSCROLL),
+ ENTRY(WM_INITMENU),
+ ENTRY(WM_INITMENUPOPUP),
+ ENTRY(WM_MENUSELECT),
+ ENTRY(WM_MENUCHAR),
+ ENTRY(WM_ENTERIDLE),
+ ENTRY(WM_MENURBUTTONUP),
+ ENTRY(WM_MENUDRAG),
+ ENTRY(WM_MENUGETOBJECT),
+ ENTRY(WM_UNINITMENUPOPUP),
+ ENTRY(WM_MENUCOMMAND),
+ ENTRY(WM_CHANGEUISTATE),
+ ENTRY(WM_QUERYUISTATE),
+ ENTRY(WM_UPDATEUISTATE),
+ ENTRY(WM_CTLCOLORMSGBOX),
+ ENTRY(WM_CTLCOLOREDIT),
+ ENTRY(WM_CTLCOLORLISTBOX),
+ ENTRY(WM_CTLCOLORBTN),
+ ENTRY(WM_CTLCOLORDLG),
+ ENTRY(WM_CTLCOLORSCROLLBAR),
+ ENTRY(WM_CTLCOLORSTATIC),
+ ENTRY(CB_GETEDITSEL),
+ ENTRY(CB_LIMITTEXT),
+ ENTRY(CB_SETEDITSEL),
+ ENTRY(CB_ADDSTRING),
+ ENTRY(CB_DELETESTRING),
+ ENTRY(CB_DIR),
+ ENTRY(CB_GETCOUNT),
+ ENTRY(CB_GETCURSEL),
+ ENTRY(CB_GETLBTEXT),
+ ENTRY(CB_GETLBTEXTLEN),
+ ENTRY(CB_INSERTSTRING),
+ ENTRY(CB_RESETCONTENT),
+ ENTRY(CB_FINDSTRING),
+ ENTRY(CB_SELECTSTRING),
+ ENTRY(CB_SETCURSEL),
+ ENTRY(CB_SHOWDROPDOWN),
+ ENTRY(CB_GETITEMDATA),
+ ENTRY(CB_SETITEMDATA),
+ ENTRY(CB_GETDROPPEDCONTROLRECT),
+ ENTRY(CB_SETITEMHEIGHT),
+ ENTRY(CB_GETITEMHEIGHT),
+ ENTRY(CB_SETEXTENDEDUI),
+ ENTRY(CB_GETEXTENDEDUI),
+ ENTRY(CB_GETDROPPEDSTATE),
+ ENTRY(CB_FINDSTRINGEXACT),
+ ENTRY(CB_SETLOCALE),
+ ENTRY(CB_GETLOCALE),
+ ENTRY(CB_GETTOPINDEX),
+ ENTRY(CB_SETTOPINDEX),
+ ENTRY(CB_GETHORIZONTALEXTENT),
+ ENTRY(CB_SETHORIZONTALEXTENT),
+ ENTRY(CB_GETDROPPEDWIDTH),
+ ENTRY(CB_SETDROPPEDWIDTH),
+ ENTRY(CB_INITSTORAGE),
+ ENTRY(CB_MSGMAX),
+ ENTRY(LB_ADDSTRING),
+ ENTRY(LB_INSERTSTRING),
+ ENTRY(LB_DELETESTRING),
+ ENTRY(LB_SELITEMRANGEEX),
+ ENTRY(LB_RESETCONTENT),
+ ENTRY(LB_SETSEL),
+ ENTRY(LB_SETCURSEL),
+ ENTRY(LB_GETSEL),
+ ENTRY(LB_GETCURSEL),
+ ENTRY(LB_GETTEXT),
+ ENTRY(LB_GETTEXTLEN),
+ ENTRY(LB_GETCOUNT),
+ ENTRY(LB_SELECTSTRING),
+ ENTRY(LB_DIR),
+ ENTRY(LB_GETTOPINDEX),
+ ENTRY(LB_FINDSTRING),
+ ENTRY(LB_GETSELCOUNT),
+ ENTRY(LB_GETSELITEMS),
+ ENTRY(LB_SETTABSTOPS),
+ ENTRY(LB_GETHORIZONTALEXTENT),
+ ENTRY(LB_SETHORIZONTALEXTENT),
+ ENTRY(LB_SETCOLUMNWIDTH),
+ ENTRY(LB_ADDFILE),
+ ENTRY(LB_SETTOPINDEX),
+ ENTRY(LB_GETITEMRECT),
+ ENTRY(LB_GETITEMDATA),
+ ENTRY(LB_SETITEMDATA),
+ ENTRY(LB_SELITEMRANGE),
+ ENTRY(LB_SETANCHORINDEX),
+ ENTRY(LB_GETANCHORINDEX),
+ ENTRY(LB_SETCARETINDEX),
+ ENTRY(LB_GETCARETINDEX),
+ ENTRY(LB_SETITEMHEIGHT),
+ ENTRY(LB_GETITEMHEIGHT),
+ ENTRY(LB_FINDSTRINGEXACT),
+ ENTRY(LB_SETLOCALE),
+ ENTRY(LB_GETLOCALE),
+ ENTRY(LB_SETCOUNT),
+ ENTRY(LB_INITSTORAGE),
+ ENTRY(LB_ITEMFROMPOINT),
+ ENTRY(LB_MSGMAX),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEMOVE, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONDOWN, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONUP, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_LBUTTONDBLCLK, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONDOWN, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONUP, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_RBUTTONDBLCLK, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONDOWN, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONUP, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MBUTTONDBLCLK, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEWHEEL,
+ VirtualKeysLowWordDistanceHighWordParamInfo,
+ "", XLowWordYHighWordParamInfo, "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEHWHEEL,
+ VirtualKeysLowWordDistanceHighWordParamInfo,
+ "", XLowWordYHighWordParamInfo, "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_PARENTNOTIFY, ParentNotifyEventParamInfo,
+ "", PointParamInfo, "pointerLocation"),
+ ENTRY(WM_ENTERMENULOOP),
+ ENTRY(WM_EXITMENULOOP),
+ ENTRY(WM_NEXTMENU),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_SIZING, WindowEdgeParamInfo, "edge",
+ RectParamInfo, "rect"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_CAPTURECHANGED, nullptr, nullptr,
+ HexParamInfo, "windowHandle"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOVING, nullptr, nullptr, RectParamInfo,
+ "rect"),
+ ENTRY(WM_POWERBROADCAST),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DEVICECHANGE, DeviceEventParamInfo, "event",
+ HexParamInfo, "data"),
+ ENTRY(WM_MDICREATE),
+ ENTRY(WM_MDIDESTROY),
+ ENTRY(WM_MDIACTIVATE),
+ ENTRY(WM_MDIRESTORE),
+ ENTRY(WM_MDINEXT),
+ ENTRY(WM_MDIMAXIMIZE),
+ ENTRY(WM_MDITILE),
+ ENTRY(WM_MDICASCADE),
+ ENTRY(WM_MDIICONARRANGE),
+ ENTRY(WM_MDIGETACTIVE),
+ ENTRY(WM_MDISETMENU),
+ ENTRY(WM_ENTERSIZEMOVE),
+ ENTRY(WM_EXITSIZEMOVE),
+ ENTRY(WM_DROPFILES),
+ ENTRY(WM_MDIREFRESHMENU),
+ ENTRY(WM_IME_SETCONTEXT),
+ ENTRY(WM_IME_NOTIFY),
+ ENTRY(WM_IME_CONTROL),
+ ENTRY(WM_IME_COMPOSITIONFULL),
+ ENTRY(WM_IME_SELECT),
+ ENTRY(WM_IME_CHAR),
+ ENTRY(WM_IME_REQUEST),
+ ENTRY(WM_IME_KEYDOWN),
+ ENTRY(WM_IME_KEYUP),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_NCMOUSEHOVER, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_MOUSEHOVER, VirtualModifierKeysParamInfo,
+ "virtualKeys", XLowWordYHighWordParamInfo,
+ "mousePos"),
+ ENTRY_WITH_NO_PARAM_INFO(WM_NCMOUSELEAVE),
+ ENTRY_WITH_NO_PARAM_INFO(WM_MOUSELEAVE),
+ ENTRY(WM_CUT),
+ ENTRY(WM_COPY),
+ ENTRY(WM_PASTE),
+ ENTRY(WM_CLEAR),
+ ENTRY(WM_UNDO),
+ ENTRY(WM_RENDERFORMAT),
+ ENTRY(WM_RENDERALLFORMATS),
+ ENTRY(WM_DESTROYCLIPBOARD),
+ ENTRY(WM_DRAWCLIPBOARD),
+ ENTRY(WM_PAINTCLIPBOARD),
+ ENTRY(WM_VSCROLLCLIPBOARD),
+ ENTRY(WM_SIZECLIPBOARD),
+ ENTRY(WM_ASKCBFORMATNAME),
+ ENTRY(WM_CHANGECBCHAIN),
+ ENTRY(WM_HSCROLLCLIPBOARD),
+ ENTRY(WM_QUERYNEWPALETTE),
+ ENTRY(WM_PALETTEISCHANGING),
+ ENTRY(WM_PALETTECHANGED),
+ ENTRY(WM_HOTKEY),
+ ENTRY(WM_PRINT),
+ ENTRY(WM_PRINTCLIENT),
+ ENTRY(WM_THEMECHANGED),
+ ENTRY(WM_HANDHELDFIRST),
+ ENTRY(WM_HANDHELDLAST),
+ ENTRY(WM_AFXFIRST),
+ ENTRY(WM_AFXLAST),
+ ENTRY(WM_PENWINFIRST),
+ ENTRY(WM_PENWINLAST),
+ ENTRY(WM_APP),
+ ENTRY_WITH_NO_PARAM_INFO(WM_DWMCOMPOSITIONCHANGED),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMNCRENDERINGCHANGED, TrueFalseParamInfo,
+ "DwmNcRendering", nullptr, nullptr),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMCOLORIZATIONCOLORCHANGED, HexParamInfo,
+ "color:AARRGGBB", TrueFalseParamInfo,
+ "isOpaque"),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DWMWINDOWMAXIMIZEDCHANGE,
+ TrueFalseParamInfo, "maximized", nullptr,
+ nullptr),
+ ENTRY(WM_DWMSENDICONICTHUMBNAIL), // lParam: HIWORD is x, LOWORD is y
+ ENTRY_WITH_NO_PARAM_INFO(WM_DWMSENDICONICLIVEPREVIEWBITMAP),
+ ENTRY(WM_TABLET_QUERYSYSTEMGESTURESTATUS),
+ ENTRY(WM_GESTURE),
+ ENTRY(WM_GESTURENOTIFY),
+ ENTRY(WM_GETTITLEBARINFOEX),
+ ENTRY_WITH_SPLIT_PARAM_INFOS(WM_DPICHANGED, XLowWordYHighWordParamInfo,
+ "newDPI", RectParamInfo,
+ "suggestedSizeAndPos"),
+};
+#undef ENTRY
+#undef ENTRY_WITH_NO_PARAM_INFO
+#undef ENTRY_WITH_CUSTOM_PARAM_INFO
+#undef ENTRY_WITH_SPLIT_PARAM_INFO
+
+} // namespace mozilla::widget
+
+#ifdef DEBUG
+void DDError(const char* msg, HRESULT hr) {
+ /*XXX make nicer */
+ MOZ_LOG(gWindowsLog, LogLevel::Error,
+ ("DirectDraw error %s: 0x%08lx\n", msg, hr));
+}
+#endif
+
+#ifdef DEBUG_VK
+bool is_vk_down(int vk) {
+ SHORT st = GetKeyState(vk);
+# ifdef DEBUG
+ MOZ_LOG(gWindowsLog, LogLevel::Info, ("is_vk_down vk=%x st=%x\n", vk, st));
+# endif
+ return (st < 0);
+}
+#endif