From 4fb7ddec58dc4155dfadde81943ae97f3a37cbaf Mon Sep 17 00:00:00 2001 From: sdottaka Date: Sun, 13 Oct 2024 16:33:36 +0900 Subject: [PATCH] Add One-Hand mice wheel scroll diff and merge (#2435) (10) --- Src/DirView.cpp | 3 +++ Src/MergeEditView.cpp | 4 ++++ Src/MouseHook.cpp | 17 +++++++---------- Src/MouseHook.h | 5 ++++- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/Src/DirView.cpp b/Src/DirView.cpp index 57a68e0a7bf..61325181d89 100644 --- a/Src/DirView.cpp +++ b/Src/DirView.cpp @@ -49,6 +49,7 @@ #include "SyntaxColors.h" #include "Shell.h" #include "DirTravel.h" +#include "MouseHook.h" #include #include @@ -638,6 +639,8 @@ void CDirView::Redisplay() */ void CDirView::OnContextMenu(CWnd*, CPoint point) { + if (CMouseHook::IsRightWheelScrolling()) + return; if (GetListCtrl().GetItemCount() == 0) return; // Make sure window is active diff --git a/Src/MergeEditView.cpp b/Src/MergeEditView.cpp index 2cbf3245186..a8336a032a5 100644 --- a/Src/MergeEditView.cpp +++ b/Src/MergeEditView.cpp @@ -33,6 +33,7 @@ #include "Shell.h" #include "SelectPluginDlg.h" #include "Constants.h" +#include "MouseHook.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -2868,6 +2869,9 @@ void CMergeEditView::OnUpdateEditReplace(CCmdUI* pCmdUI) */ void CMergeEditView::OnContextMenu(CWnd* pWnd, CPoint point) { + if (CMouseHook::IsRightWheelScrolling()) + return; + CRect rect; GetClientRect(rect); ClientToScreen(rect); diff --git a/Src/MouseHook.cpp b/Src/MouseHook.cpp index 55d81e0a2b5..daa73493fcb 100644 --- a/Src/MouseHook.cpp +++ b/Src/MouseHook.cpp @@ -1,5 +1,6 @@ #include #include "MouseHook.h" +#include #ifndef WM_MOUSEHWHEEL # define WM_MOUSEHWHEEL 0x20e @@ -12,7 +13,7 @@ LRESULT CALLBACK CMouseHook::MouseProc(int nCode, WPARAM wParam, LPARAM lParam) if (wParam == WM_LBUTTONDOWN) { - m_bIgnoreRBUp = false; + EndRightWheelScrolling(); } else if (wParam == WM_RBUTTONDOWN) { @@ -21,11 +22,7 @@ LRESULT CALLBACK CMouseHook::MouseProc(int nCode, WPARAM wParam, LPARAM lParam) else if (wParam == WM_RBUTTONUP) { m_bRButtonDown = false; - if (m_bIgnoreRBUp) - { - m_bIgnoreRBUp = false; - return 1; - } + EndRightWheelScrolling(); } else if (wParam == WM_MOUSEWHEEL) { @@ -92,14 +89,14 @@ LRESULT CALLBACK CMouseHook::MouseProc(int nCode, WPARAM wParam, LPARAM lParam) if (zDelta > 0) { // RButton+ScrollUp as Alt+Up - m_bIgnoreRBUp = true; + StartRightWheelScrolling(); PostMessage(hwndTarget, WM_COMMAND, ID_PREVDIFF, 0); return 1; } else if (zDelta < 0) { // RButton+ScrollDown as Alt+Down - m_bIgnoreRBUp = true; + StartRightWheelScrolling(); PostMessage(hwndTarget, WM_COMMAND, ID_NEXTDIFF, 0); return 1; } @@ -154,14 +151,14 @@ LRESULT CALLBACK CMouseHook::MouseProc(int nCode, WPARAM wParam, LPARAM lParam) if (zDelta > 0) { // RButton+ScrollRight as Alt+Right - m_bIgnoreRBUp = true; + StartRightWheelScrolling(); PostMessage(hwndTarget, WM_COMMAND, ID_L2R, 0); return 1; } else if (zDelta < 0) { // RButton+ScrollLeft as Alt+Left - m_bIgnoreRBUp = true; + StartRightWheelScrolling(); PostMessage(hwndTarget, WM_COMMAND, ID_R2L, 0); return 1; } diff --git a/Src/MouseHook.h b/Src/MouseHook.h index a819cfcb921..58125467f64 100644 --- a/Src/MouseHook.h +++ b/Src/MouseHook.h @@ -3,10 +3,13 @@ class CMouseHook public: static void SetMouseHook(); static void UnhookMouseHook(); - static bool IsRightWheelScrolling() { return m_bIgnoreRBUp; } + static bool IsRightWheelScrolling() { return std::chrono::duration_cast(std::chrono::system_clock::now() - m_endTimeRightWheelScrolling).count() < 100; } private: static LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam); + inline static void StartRightWheelScrolling() { m_bIgnoreRBUp = true; } + inline static void EndRightWheelScrolling() { if (!m_bIgnoreRBUp) return; m_endTimeRightWheelScrolling = std::chrono::system_clock::now(); m_bIgnoreRBUp = false; } inline static HHOOK m_hMouseHook; inline static bool m_bIgnoreRBUp; inline static bool m_bRButtonDown; + inline static std::chrono::system_clock::time_point m_endTimeRightWheelScrolling; };