Repository :
https://github.com/FarGroup/FarManager
On branch : master
Link :
https://github.com/FarGroup/FarManager/commit/ca7c33dce4bc57e188184fb5fce70c790f20bc2c
>---------------------------------------------------------------
commit ca7c33dce4bc57e188184fb5fce70c790f20bc2c
Author: Alex Alabuzhev <
alab...@gmail.com>
Date: Wed Jun 7 22:33:09 2023 +0100
Improve mouse wheel handling
Take into account that one mouse event can describe more than one wheel detent
Use OS wheel settings when System.Ms[H]WheelDelta* parameters are set to 0
>---------------------------------------------------------------
ca7c33dce4bc57e188184fb5fce70c790f20bc2c
far/FarCze.hlf.m4 | 2 +-
far/FarEng.hlf.m4 | 2 +-
far/FarGer.hlf.m4 | 2 +-
far/FarHun.hlf.m4 | 2 +-
far/FarPol.hlf.m4 | 2 +-
far/FarRus.hlf.m4 | 2 +-
far/FarSky.hlf.m4 | 2 +-
far/FarUkr.hlf.m4 | 2 +-
far/changelog | 7 +++++++
far/config.cpp | 14 +++++++-------
far/editor.cpp | 24 ++++++++++++------------
far/filelist.cpp | 8 ++++----
far/help.cpp | 4 ++--
far/keyboard.cpp | 21 +++++++++++++++++++++
far/keyboard.hpp | 2 ++
far/manager.cpp | 8 ++++++++
far/manager.hpp | 1 +
far/treelist.cpp | 8 ++++----
far/vbuild.m4 | 2 +-
far/viewer.cpp | 24 ++++++++++++------------
20 files changed, 89 insertions(+), 50 deletions(-)
diff --git a/far/FarCze.hlf.m4 b/far/FarCze.hlf.m4
index ed1d37f68..fa269c4df 100644
--- a/far/FarCze.hlf.m4
+++ b/far/FarCze.hlf.m4
@@ -6439,7 +6439,7 @@ horizontally (Windows Vista and above):
System.MsHWheelDeltaEdit - in the internal Editor
System.MsHWheelDelta - in other areas
- Default value: 1 (for all parameters).
+ Default value for all parameters: 0 (use system settings).
Note: Rolling or tilting mouse wheel while holding #Alt# key always
scrolls one line or character at a time.
diff --git a/far/FarEng.hlf.m4 b/far/FarEng.hlf.m4
index 8ef0da155..f49ba2536 100644
--- a/far/FarEng.hlf.m4
+++ b/far/FarEng.hlf.m4
@@ -6406,7 +6406,7 @@ horizontally (Windows Vista and above):
System.MsHWheelDeltaEdit - in the internal Editor
System.MsHWheelDelta - in other areas
- Default value: 1 (for all parameters).
+ Default value for all parameters: 0 (use system settings).
Note: Rolling or tilting mouse wheel while holding #Alt# key always
scrolls one line or character at a time.
diff --git a/far/FarGer.hlf.m4 b/far/FarGer.hlf.m4
index b053e9bdd..ee4279dc2 100644
--- a/far/FarGer.hlf.m4
+++ b/far/FarGer.hlf.m4
@@ -6497,7 +6497,7 @@ horizontally (Windows Vista and above):
System.MsHWheelDeltaEdit - in the internal Editor
System.MsHWheelDelta - in other areas
- Default value: 1 (for all parameters).
+ Default value for all parameters: 0 (use system settings).
Note: Rolling or tilting mouse wheel while holding #Alt# key always
scrolls one line or character at a time.
diff --git a/far/FarHun.hlf.m4 b/far/FarHun.hlf.m4
index 6c2e5cfdf..c930a0e40 100644
--- a/far/FarHun.hlf.m4
+++ b/far/FarHun.hlf.m4
@@ -6517,7 +6517,7 @@ horizontally (Windows Vista and above):
System.MsHWheelDeltaEdit - in the internal Editor
System.MsHWheelDelta - in other areas
- Default value: 1 (for all parameters).
+ Default value for all parameters: 0 (use system settings).
Note: Rolling or tilting mouse wheel while holding #Alt# key always
scrolls one line or character at a time.
diff --git a/far/FarPol.hlf.m4 b/far/FarPol.hlf.m4
index 453883f0d..b57ea2e8e 100644
--- a/far/FarPol.hlf.m4
+++ b/far/FarPol.hlf.m4
@@ -6416,7 +6416,7 @@ obrócić rolkę o jeden przeskok w pionie:
System.MsHWheelDeltaEdit - w wewnętrznym Edytorze
System.MsHWheelDelta - w innych obszarach
- Domyślna wartość: 1 (dla wszystkich parametrów).
+ Domyślna wartość: dla wszystkich parametrów: 0 (używać ustawień systemowych).
Uwaga: Rolowanie lub przechylanie rolki myszki przy wciśniętym
klawiszu #Alt# zawsze przewija o jedną linię lub jeden znak na raz.
diff --git a/far/FarRus.hlf.m4 b/far/FarRus.hlf.m4
index 30b018fce..db99345d4 100644
--- a/far/FarRus.hlf.m4
+++ b/far/FarRus.hlf.m4
@@ -6508,7 +6508,7 @@ $ #far:config System.MsWheelDelta* & System.MsHWheelDelta*#
System.MsHWheelDeltaEdit - во встроенном редакторе
System.MsHWheelDelta - в прочих областях
- Значение по умолчанию: 1 (для всех параметров).
+ Значение по умолчанию для всех параметров: 0 (использовать системные настройки).
Примечание: Поворот или наклон колёсика при нажатой клавише #Alt#
всегда прокручивает на одну строку или один знак.
diff --git a/far/FarSky.hlf.m4 b/far/FarSky.hlf.m4
index 843045380..dbb8a229e 100644
--- a/far/FarSky.hlf.m4
+++ b/far/FarSky.hlf.m4
@@ -6400,7 +6400,7 @@ horizontally (Windows Vista and above):
System.MsHWheelDeltaEdit - in the internal Editor
System.MsHWheelDelta - in other areas
- Default value: 1 (for all parameters).
+ Default value for all parameters: 0 (use system settings).
Note: Rolling or tilting mouse wheel while holding #Alt# key always
scrolls one line or character at a time.
diff --git a/far/FarUkr.hlf.m4 b/far/FarUkr.hlf.m4
index 39c05073a..c35e3f416 100644
--- a/far/FarUkr.hlf.m4
+++ b/far/FarUkr.hlf.m4
@@ -6492,7 +6492,7 @@ horizontally (Windows Vista and above):
System.MsHWheelDeltaEdit - in the internal Editor
System.MsHWheelDelta - in other areas
- Default value: 1 (for all parameters).
+ Default value for all parameters: 0 (use system settings).
Note: Rolling or tilting mouse wheel while holding #Alt# key always
scrolls one line or character at a time.
diff --git a/far/changelog b/far/changelog
index 53800f0ab..bb78397a9 100644
--- a/far/changelog
+++ b/far/changelog
@@ -1,3 +1,10 @@
+--------------------------------------------------------------------------------
+drkns 2023-06-07 22:32:00+01:00 - build 6159
+
+1. Improve mouse wheel handling:
+ - Take into account that one mouse event can describe more than one wheel detent.
+ - Use OS wheel settings when System.Ms[H]WheelDelta* parameters are set to 0.
+
--------------------------------------------------------------------------------
drkns 2023-06-02 20:53:21+01:00 - build 6158
diff --git a/far/config.cpp b/far/config.cpp
index 79fd5925a..45dfbdcee 100644
--- a/far/config.cpp
+++ b/far/config.cpp
@@ -2029,13 +2029,13 @@ void Options::InitConfigsData()
{FSSF_PRIVATE, NKeySystem, L"FindFolders"sv, FindOpt.FindFolders, true},
{FSSF_PRIVATE, NKeySystem, L"FindSymLinks"sv, FindOpt.FindSymLinks, true},
{FSSF_PRIVATE, NKeySystem, L"FolderInfo"sv, InfoPanel.strFolderInfoFiles, L"DirInfo,File_Id.diz,Descript.ion,ReadMe.*,Read.Me"sv},
- {FSSF_PRIVATE, NKeySystem, L"MsWheelDelta"sv, MsWheelDelta, 1},
- {FSSF_PRIVATE, NKeySystem, L"MsWheelDeltaEdit"sv, MsWheelDeltaEdit, 1},
- {FSSF_PRIVATE, NKeySystem, L"MsWheelDeltaHelp"sv, MsWheelDeltaHelp, 1},
- {FSSF_PRIVATE, NKeySystem, L"MsWheelDeltaView"sv, MsWheelDeltaView, 1},
- {FSSF_PRIVATE, NKeySystem, L"MsHWheelDelta"sv, MsHWheelDelta, 1},
- {FSSF_PRIVATE, NKeySystem, L"MsHWheelDeltaEdit"sv, MsHWheelDeltaEdit, 1},
- {FSSF_PRIVATE, NKeySystem, L"MsHWheelDeltaView"sv, MsHWheelDeltaView, 1},
+ {FSSF_PRIVATE, NKeySystem, L"MsWheelDelta"sv, MsWheelDelta, 0},
+ {FSSF_PRIVATE, NKeySystem, L"MsWheelDeltaEdit"sv, MsWheelDeltaEdit, 0},
+ {FSSF_PRIVATE, NKeySystem, L"MsWheelDeltaHelp"sv, MsWheelDeltaHelp, 0},
+ {FSSF_PRIVATE, NKeySystem, L"MsWheelDeltaView"sv, MsWheelDeltaView, 0},
+ {FSSF_PRIVATE, NKeySystem, L"MsHWheelDelta"sv, MsHWheelDelta, 0},
+ {FSSF_PRIVATE, NKeySystem, L"MsHWheelDeltaEdit"sv, MsHWheelDeltaEdit, 0},
+ {FSSF_PRIVATE, NKeySystem, L"MsHWheelDeltaView"sv, MsHWheelDeltaView, 0},
{FSSF_PRIVATE, NKeySystem, L"MultiCopy"sv, CMOpt.MultiCopy, false},
{FSSF_PRIVATE, NKeySystem, L"MultiMakeDir"sv, MultiMakeDir, false},
#ifndef NO_WRAPPER
diff --git a/far/editor.cpp b/far/editor.cpp
index a44197550..cf11206fc 100644
--- a/far/editor.cpp
+++ b/far/editor.cpp
@@ -1680,37 +1680,37 @@ bool Editor::ProcessKeyInternal(const Manager::Key& Key, bool& Refresh)
}
case KEY_MSWHEEL_UP:
- case(KEY_MSWHEEL_UP | KEY_ALT):
- case(KEY_MSWHEEL_UP | KEY_RALT):
+ case KEY_MSWHEEL_UP | KEY_ALT:
+ case KEY_MSWHEEL_UP | KEY_RALT:
{
- const auto Roll = LocalKey() & (KEY_ALT|KEY_RALT)? 1 : Global->Opt->MsWheelDeltaEdit;
+ const auto Roll = (LocalKey() == KEY_MSWHEEL_UP? get_wheel_scroll_lines(Global->Opt->MsWheelDeltaEdit) : 1) * Key.NumberOfWheelEvents();
repeat(Roll, [&] { ProcessKeyInternal(Manager::Key(KEY_CTRLUP), Refresh); });
return true;
}
case KEY_MSWHEEL_DOWN:
- case(KEY_MSWHEEL_DOWN | KEY_ALT):
- case(KEY_MSWHEEL_DOWN | KEY_RALT):
+ case KEY_MSWHEEL_DOWN | KEY_ALT:
+ case KEY_MSWHEEL_DOWN | KEY_RALT:
{
- const auto Roll = LocalKey() & (KEY_ALT | KEY_RALT)? 1 : Global->Opt->MsWheelDeltaEdit;
+ const auto Roll = (LocalKey() == KEY_MSWHEEL_DOWN? get_wheel_scroll_lines(Global->Opt->MsWheelDeltaEdit) : 1) * Key.NumberOfWheelEvents();
repeat(Roll, [&] { ProcessKeyInternal(Manager::Key(KEY_CTRLDOWN), Refresh); });
return true;
}
case KEY_MSWHEEL_LEFT:
- case(KEY_MSWHEEL_LEFT | KEY_ALT):
- case(KEY_MSWHEEL_LEFT | KEY_RALT):
+ case KEY_MSWHEEL_LEFT | KEY_ALT:
+ case KEY_MSWHEEL_LEFT | KEY_RALT:
{
- const auto Roll = LocalKey() & (KEY_ALT | KEY_RALT)? 1 : Global->Opt->MsWheelDeltaEdit;
+ const auto Roll = (LocalKey() == KEY_MSWHEEL_LEFT? get_wheel_scroll_chars(Global->Opt->MsHWheelDeltaEdit) : 1) * Key.NumberOfWheelEvents();
repeat(Roll, [&] { ProcessKeyInternal(Manager::Key(KEY_LEFT), Refresh); });
return true;
}
case KEY_MSWHEEL_RIGHT:
- case(KEY_MSWHEEL_RIGHT | KEY_ALT):
- case(KEY_MSWHEEL_RIGHT | KEY_RALT):
+ case KEY_MSWHEEL_RIGHT | KEY_ALT:
+ case KEY_MSWHEEL_RIGHT | KEY_RALT:
{
- const auto Roll = LocalKey() & (KEY_ALT | KEY_RALT)? 1 : Global->Opt->MsWheelDeltaEdit;
+ const auto Roll = (LocalKey() == KEY_MSWHEEL_RIGHT? get_wheel_scroll_chars(Global->Opt->MsHWheelDeltaEdit) : 1) * Key.NumberOfWheelEvents();
repeat(Roll, [&] { ProcessKeyInternal(Manager::Key(KEY_RIGHT), Refresh); });
return true;
}
diff --git a/far/filelist.cpp b/far/filelist.cpp
index baa3f1021..28944bd21 100644
--- a/far/filelist.cpp
+++ b/far/filelist.cpp
@@ -2288,20 +2288,20 @@ bool FileList::ProcessKey(const Manager::Key& Key)
case KEY_MSWHEEL_UP:
case KEY_MSWHEEL_UP | KEY_ALT:
case KEY_MSWHEEL_UP | KEY_RALT:
- Scroll(LocalKey & (KEY_ALT | KEY_RALT)? -1 : static_cast<int>(-Global->Opt->MsWheelDelta));
+ Scroll(-static_cast<int>((LocalKey == KEY_MSWHEEL_UP? get_wheel_scroll_lines(Global->Opt->MsWheelDelta) : 1) * Key.NumberOfWheelEvents()));
return true;
case KEY_MSWHEEL_DOWN:
case KEY_MSWHEEL_DOWN | KEY_ALT:
case KEY_MSWHEEL_DOWN | KEY_RALT:
- Scroll(LocalKey & (KEY_ALT | KEY_RALT)? 1 : static_cast<int>(Global->Opt->MsWheelDelta));
+ Scroll(static_cast<int>((LocalKey == KEY_MSWHEEL_DOWN? get_wheel_scroll_lines(Global->Opt->MsWheelDelta) : 1) * Key.NumberOfWheelEvents()));
return true;
case KEY_MSWHEEL_LEFT:
case KEY_MSWHEEL_LEFT | KEY_ALT:
case KEY_MSWHEEL_LEFT | KEY_RALT:
{
- int Roll = LocalKey & (KEY_ALT | KEY_RALT)? 1 : static_cast<int>(Global->Opt->MsHWheelDelta);
+ const auto Roll = static_cast<int>((LocalKey == KEY_MSWHEEL_LEFT? get_wheel_scroll_chars(Global->Opt->MsHWheelDelta) : 1) * Key.NumberOfWheelEvents());
repeat(Roll, [&]{ ProcessKey(Manager::Key(KEY_LEFT)); });
return true;
}
@@ -2310,7 +2310,7 @@ bool FileList::ProcessKey(const Manager::Key& Key)
case KEY_MSWHEEL_RIGHT | KEY_ALT:
case KEY_MSWHEEL_RIGHT | KEY_RALT:
{
- int Roll = LocalKey & (KEY_ALT | KEY_RALT)? 1 : static_cast<int>(Global->Opt->MsHWheelDelta);
+ const auto Roll = static_cast<int>((LocalKey == KEY_MSWHEEL_RIGHT? get_wheel_scroll_chars(Global->Opt->MsHWheelDelta) : 1) * Key.NumberOfWheelEvents());
repeat(Roll, [&]{ ProcessKey(Manager::Key(KEY_RIGHT)); });
return true;
}
diff --git a/far/help.cpp b/far/help.cpp
index 03653c74d..cb782f4e0 100644
--- a/far/help.cpp
+++ b/far/help.cpp
@@ -1358,7 +1358,7 @@ bool Help::ProcessKey(const Manager::Key& Key)
case KEY_MSWHEEL_UP | KEY_ALT:
case KEY_MSWHEEL_UP | KEY_RALT:
{
- auto n = LocalKey == KEY_MSWHEEL_UP? Global->Opt->MsWheelDeltaHelp : 1;
+ auto n = static_cast<int>((LocalKey == KEY_MSWHEEL_UP? get_wheel_scroll_lines(Global->Opt->MsWheelDeltaHelp) : 1) * Key.NumberOfWheelEvents());
while (n-- > 0)
ProcessKey(Manager::Key(KEY_UP));
@@ -1368,7 +1368,7 @@ bool Help::ProcessKey(const Manager::Key& Key)
case KEY_MSWHEEL_DOWN | KEY_ALT:
case KEY_MSWHEEL_DOWN | KEY_RALT:
{
- auto n = LocalKey == KEY_MSWHEEL_DOWN? Global->Opt->MsWheelDeltaHelp : 1;
+ auto n = static_cast<int>((LocalKey == KEY_MSWHEEL_DOWN? get_wheel_scroll_lines(Global->Opt->MsWheelDeltaHelp) : 1) * Key.NumberOfWheelEvents());
while (n-- > 0)
ProcessKey(Manager::Key(KEY_DOWN));
diff --git a/far/keyboard.cpp b/far/keyboard.cpp
index f960079dc..c6e6f49d6 100644
--- a/far/keyboard.cpp
+++ b/far/keyboard.cpp
@@ -534,6 +534,27 @@ bool while_mouse_button_pressed(function_ref<bool(DWORD)> const Action)
return true;
}
+static int get_wheel_scroll(unsigned const Type, int const ConfigValue)
+{
+ if (ConfigValue)
+ return ConfigValue;
+
+ if (UINT Value; SystemParametersInfo(Type, 0, &Value, 0))
+ return Value;
+
+ return 1;
+}
+
+int get_wheel_scroll_lines(int const ConfigValue)
+{
+ return get_wheel_scroll(SPI_GETWHEELSCROLLLINES, ConfigValue);
+}
+
+int get_wheel_scroll_chars(int const ConfigValue)
+{
+ return get_wheel_scroll(SPI_GETWHEELSCROLLCHARS, ConfigValue);
+}
+
static auto ButtonStateToKeyMsClick(DWORD ButtonState)
{
switch (ButtonState)
diff --git a/far/keyboard.hpp b/far/keyboard.hpp
index 6588cceca..fa7dbedae 100644
--- a/far/keyboard.hpp
+++ b/far/keyboard.hpp
@@ -121,6 +121,8 @@ private:
// возвращает: 1 - LeftPressed, 2 - Right Pressed, 3 - Middle Pressed, 0 - none
DWORD IsMouseButtonPressed();
bool while_mouse_button_pressed(function_ref<bool(DWORD)> Action);
+int get_wheel_scroll_lines(int ConfigValue);
+int get_wheel_scroll_chars(int ConfigValue);
int TranslateKeyToVK(int Key, INPUT_RECORD* Rec = nullptr);
int KeyNameToKey(string_view Name);
string InputRecordToText(const INPUT_RECORD *Rec);
diff --git a/far/manager.cpp b/far/manager.cpp
index 1dcc32115..38cb20d00 100644
--- a/far/manager.cpp
+++ b/far/manager.cpp
@@ -114,6 +114,14 @@ Manager::Key& Manager::Key::operator&=(unsigned int Key)
return *this;
}
+size_t Manager::Key::NumberOfWheelEvents() const
+{
+ if (!m_EventFilled || m_Event.EventType != MOUSE_EVENT || !(m_Event.Event.MouseEvent.dwEventFlags & MOUSE_WHEELED | MOUSE_HWHEELED))
+ return 1;
+
+ return std::abs(static_cast<short>(extract_integer<WORD, 1>(m_Event.Event.MouseEvent.dwButtonState)) / WHEEL_DELTA);
+}
+
static bool CASHook(const Manager::Key& key)
{
if (!key.IsEvent())
diff --git a/far/manager.hpp b/far/manager.hpp
index c6b65b92d..c083e891e 100644
--- a/far/manager.hpp
+++ b/far/manager.hpp
@@ -64,6 +64,7 @@ public:
Key& operator=(unsigned int Key);
Key& operator&=(unsigned int Key);
unsigned int operator()() const {return m_FarKey;}
+ size_t NumberOfWheelEvents() const;
private:
INPUT_RECORD m_Event{};
diff --git a/far/treelist.cpp b/far/treelist.cpp
index 45864e4a3..9619af15a 100644
--- a/far/treelist.cpp
+++ b/far/treelist.cpp
@@ -1212,21 +1212,21 @@ bool TreeList::ProcessKey(const Manager::Key& Key)
case(KEY_MSWHEEL_UP | KEY_ALT):
case(KEY_MSWHEEL_UP | KEY_RALT):
{
- Scroll(LocalKey & (KEY_ALT | KEY_RALT)? -1 : static_cast<int>(-Global->Opt->MsWheelDelta));
+ Scroll(-static_cast<int>((LocalKey == KEY_MSWHEEL_UP? get_wheel_scroll_lines(Global->Opt->MsWheelDelta) : 1) * Key.NumberOfWheelEvents()));
return true;
}
case KEY_MSWHEEL_DOWN:
case(KEY_MSWHEEL_DOWN | KEY_ALT):
case(KEY_MSWHEEL_DOWN | KEY_RALT):
{
- Scroll(LocalKey& (KEY_ALT | KEY_RALT)? 1 : static_cast<int>(Global->Opt->MsWheelDelta));
+ Scroll(static_cast<int>((LocalKey == KEY_MSWHEEL_DOWN? get_wheel_scroll_lines(Global->Opt->MsWheelDelta) : 1) * Key.NumberOfWheelEvents()));
return true;
}
case KEY_MSWHEEL_LEFT:
case(KEY_MSWHEEL_LEFT | KEY_ALT):
case(KEY_MSWHEEL_LEFT | KEY_RALT):
{
- const auto Roll = LocalKey & (KEY_ALT | KEY_RALT)? 1 : static_cast<int>(Global->Opt->MsHWheelDelta);
+ const auto Roll = (LocalKey == KEY_MSWHEEL_LEFT? get_wheel_scroll_chars(Global->Opt->MsHWheelDelta) : 1) * Key.NumberOfWheelEvents();
repeat(Roll, [&]{ ProcessKey(Manager::Key(KEY_LEFT));});
return true;
}
@@ -1234,7 +1234,7 @@ bool TreeList::ProcessKey(const Manager::Key& Key)
case(KEY_MSWHEEL_RIGHT | KEY_ALT):
case(KEY_MSWHEEL_RIGHT | KEY_RALT):
{
- const auto Roll = LocalKey & (KEY_ALT | KEY_RALT)? 1 : static_cast<int>(Global->Opt->MsHWheelDelta);
+ const auto Roll = (LocalKey == KEY_MSWHEEL_RIGHT? get_wheel_scroll_chars(Global->Opt->MsHWheelDelta) : 1) * Key.NumberOfWheelEvents();
repeat(Roll, [&]{ ProcessKey(Manager::Key(KEY_RIGHT));});
return true;
}
diff --git a/far/vbuild.m4 b/far/vbuild.m4
index 25a0acbc7..6573b735e 100644
--- a/far/vbuild.m4
+++ b/far/vbuild.m4
@@ -1 +1 @@
-6158
+6159
diff --git a/far/viewer.cpp b/far/viewer.cpp
index f21961c50..743aa12f9 100644
--- a/far/viewer.cpp
+++ b/far/viewer.cpp
@@ -1693,34 +1693,34 @@ bool Viewer::process_key(const Manager::Key& Key)
return true;
}
case KEY_MSWHEEL_UP:
- case(KEY_MSWHEEL_UP | KEY_ALT):
- case(KEY_MSWHEEL_UP | KEY_RALT):
+ case KEY_MSWHEEL_UP | KEY_ALT:
+ case KEY_MSWHEEL_UP | KEY_RALT:
{
- const auto Roll = (LocalKey & (KEY_ALT | KEY_RALT))? 1 : static_cast<int>(Global->Opt->MsWheelDeltaView);
+ const auto Roll = (LocalKey == KEY_MSWHEEL_UP? get_wheel_scroll_lines(Global->Opt->MsWheelDeltaView) : 1) * Key.NumberOfWheelEvents();
repeat(Roll, [&]{ ProcessKey(Manager::Key(KEY_UP)); });
return true;
}
case KEY_MSWHEEL_DOWN:
- case(KEY_MSWHEEL_DOWN | KEY_ALT):
- case(KEY_MSWHEEL_DOWN | KEY_RALT):
+ case KEY_MSWHEEL_DOWN | KEY_ALT:
+ case KEY_MSWHEEL_DOWN | KEY_RALT:
{
- const auto Roll = (LocalKey & (KEY_ALT | KEY_RALT))? 1 : static_cast<int>(Global->Opt->MsWheelDeltaView);
+ const auto Roll = (LocalKey == KEY_MSWHEEL_DOWN? get_wheel_scroll_lines(Global->Opt->MsWheelDeltaView) : 1) * Key.NumberOfWheelEvents();
repeat(Roll, [&]{ ProcessKey(Manager::Key(KEY_DOWN)); });
return true;
}
case KEY_MSWHEEL_LEFT:
- case(KEY_MSWHEEL_LEFT | KEY_ALT):
- case(KEY_MSWHEEL_LEFT | KEY_RALT):
+ case KEY_MSWHEEL_LEFT | KEY_ALT:
+ case KEY_MSWHEEL_LEFT | KEY_RALT:
{
- const auto Roll = (LocalKey & (KEY_ALT | KEY_RALT))? 1 : static_cast<int>(Global->Opt->MsHWheelDeltaView);
+ const auto Roll = (LocalKey == KEY_MSWHEEL_LEFT? get_wheel_scroll_chars(Global->Opt->MsHWheelDeltaView) : 1) * Key.NumberOfWheelEvents();
repeat(Roll, [&]{ ProcessKey(Manager::Key(KEY_LEFT)); });
return true;
}
case KEY_MSWHEEL_RIGHT:
- case(KEY_MSWHEEL_RIGHT | KEY_ALT):
- case(KEY_MSWHEEL_RIGHT | KEY_RALT):
+ case KEY_MSWHEEL_RIGHT | KEY_ALT:
+ case KEY_MSWHEEL_RIGHT | KEY_RALT:
{
- const auto Roll = (LocalKey & (KEY_ALT | KEY_RALT))? 1 : static_cast<int>(Global->Opt->MsHWheelDeltaView);
+ const auto Roll = (LocalKey == KEY_MSWHEEL_RIGHT? get_wheel_scroll_chars(Global->Opt->MsHWheelDeltaView) : 1) * Key.NumberOfWheelEvents();
repeat(Roll, [&]{ ProcessKey(Manager::Key(KEY_RIGHT)); });
return true;
}