From d0e9eea1643c7f5b27f75f8fe164f82fa824353c Mon Sep 17 00:00:00 2001 From: reuk Date: Thu, 15 Aug 2024 20:27:24 +0100 Subject: [PATCH] Windows: Remove mousewheel hook From Windows 10 onwards, the window under the mouse will receive WM_MOUSEWHEEL messages regardless of focus state, so this hook appears to be unnecessary. --- .../native/juce_WindowsHooks_windows.cpp | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_WindowsHooks_windows.cpp b/modules/juce_gui_basics/native/juce_WindowsHooks_windows.cpp index 33f00dc6cc..6fd241da1a 100644 --- a/modules/juce_gui_basics/native/juce_WindowsHooks_windows.cpp +++ b/modules/juce_gui_basics/native/juce_WindowsHooks_windows.cpp @@ -44,9 +44,6 @@ public: ~Hooks() { - if (mouseWheelHook != nullptr) - UnhookWindowsHookEx (mouseWheelHook); - if (keyboardHook != nullptr) UnhookWindowsHookEx (keyboardHook); } @@ -54,29 +51,6 @@ public: static inline std::weak_ptr weak; private: - static LRESULT CALLBACK mouseWheelHookCallback (int nCode, WPARAM wParam, LPARAM lParam) - { - if (nCode >= 0 && wParam == WM_MOUSEWHEEL) - { - // using a local copy of this struct to support old mingw libraries - struct MOUSEHOOKSTRUCTEX_ final : public MOUSEHOOKSTRUCT { DWORD mouseData; }; - - auto& hs = *(MOUSEHOOKSTRUCTEX_*) lParam; - - if (auto* comp = Desktop::getInstance().findComponentAt ({ hs.pt.x, hs.pt.y })) - { - if (auto* target = static_cast (comp->getWindowHandle())) - { - const ScopedThreadDPIAwarenessSetter scope { target }; - return PostMessage (target, WM_MOUSEWHEEL, - hs.mouseData & 0xffff0000, MAKELPARAM (hs.pt.x, hs.pt.y)); - } - } - } - - return CallNextHookEx (getSingleton()->mouseWheelHook, nCode, wParam, lParam); - } - static LRESULT CALLBACK keyboardHookCallback (int nCode, WPARAM wParam, LPARAM lParam) { auto& msg = *reinterpret_cast (lParam); @@ -91,10 +65,6 @@ private: return CallNextHookEx (getSingleton()->keyboardHook, nCode, wParam, lParam); } - HHOOK mouseWheelHook = SetWindowsHookEx (WH_MOUSE, - mouseWheelHookCallback, - (HINSTANCE) juce::Process::getCurrentModuleInstanceHandle(), - GetCurrentThreadId()); HHOOK keyboardHook = SetWindowsHookEx (WH_GETMESSAGE, keyboardHookCallback, (HINSTANCE) juce::Process::getCurrentModuleInstanceHandle(),