This commit is contained in:
CyrenArkade 2025-12-19 12:56:45 +01:00 committed by GitHub
commit bc6582697d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 34 additions and 18 deletions

View file

@ -125,7 +125,7 @@ static bool test() {
}
OK(getFromSocket("/keyword gestures:workspace_swipe_invert 1"));
OK(getFromSocket("/keyword gestures:workspace_swipe_create_new 0"));
OK(getFromSocket("/keyword gestures:workspace_swipe_bound 0"));
OK(getFromSocket("/dispatch plugin:test:gesture left,3"));

14
pointer-scroll.txt Normal file
View file

@ -0,0 +1,14 @@
> binding to global: wl_seat (version 9) with id 1
> binding to global: wl_compositor (version 6) with id 3
> binding to global: wl_shm (version 1) with id 5
> binding to global: xdg_wm_base (version 7) with id 37
started
Got pointer enter event, serial 807, x 240128, y 132608
axis: ax 0 delta 10
10.00
axis: ax 0 delta 20
20.00
axis: ax 0 delta 30
30.00
axis: ax 0 delta 40
40.00

View file

@ -812,10 +812,11 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
.data = SConfigOptionDescription::SFloatData{0.5, 0, 1},
},
SConfigOptionDescription{
.value = "gestures:workspace_swipe_create_new",
.description = "whether a swipe right on the last workspace should create a new one.",
.type = CONFIG_OPTION_BOOL,
.data = SConfigOptionDescription::SBoolData{true},
.value = "gestures:workspace_swipe_bound",
.description =
"what to do when swiping to before the first or after the last workspace. Options: 0 (do nothing), 1 (create new after last), 2 (wrap between first and last)",
.type = CONFIG_OPTION_INT,
.data = SConfigOptionDescription::SRangeData{1, 0, 2},
},
SConfigOptionDescription{
.value = "gestures:workspace_swipe_direction_lock",

View file

@ -704,7 +704,7 @@ CConfigManager::CConfigManager() {
registerConfigVar("gestures:workspace_swipe_invert", Hyprlang::INT{1});
registerConfigVar("gestures:workspace_swipe_min_speed_to_force", Hyprlang::INT{30});
registerConfigVar("gestures:workspace_swipe_cancel_ratio", {0.5f});
registerConfigVar("gestures:workspace_swipe_create_new", Hyprlang::INT{1});
registerConfigVar("gestures:workspace_swipe_bound", Hyprlang::INT{1});
registerConfigVar("gestures:workspace_swipe_direction_lock", Hyprlang::INT{1});
registerConfigVar("gestures:workspace_swipe_direction_lock_threshold", Hyprlang::INT{10});
registerConfigVar("gestures:workspace_swipe_forever", Hyprlang::INT{0});

View file

@ -35,7 +35,7 @@ void CUnifiedWorkspaceSwipeGesture::update(double delta) {
return;
static auto PSWIPEDIST = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_distance");
static auto PSWIPENEW = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_create_new");
static auto PSWIPEBOUND = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_bound");
static auto PSWIPEDIRLOCK = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_direction_lock");
static auto PSWIPEDIRLOCKTHRESHOLD = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_direction_lock_threshold");
static auto PSWIPEFOREVER = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_forever");
@ -56,7 +56,7 @@ void CUnifiedWorkspaceSwipeGesture::update(double delta) {
auto workspaceIDLeft = getWorkspaceIDNameFromString((*PSWIPEUSER ? "r-1" : "m-1")).id;
auto workspaceIDRight = getWorkspaceIDNameFromString((*PSWIPEUSER ? "r+1" : "m+1")).id;
if ((workspaceIDLeft == WORKSPACE_INVALID || workspaceIDRight == WORKSPACE_INVALID || workspaceIDLeft == m_workspaceBegin->m_id) && !*PSWIPENEW) {
if ((workspaceIDLeft == WORKSPACE_INVALID || workspaceIDRight == WORKSPACE_INVALID || workspaceIDLeft == m_workspaceBegin->m_id) && *PSWIPEBOUND != 1) {
m_workspaceBegin = nullptr; // invalidate the swipe
return;
}
@ -65,8 +65,9 @@ void CUnifiedWorkspaceSwipeGesture::update(double delta) {
m_delta = std::clamp(m_delta, sc<double>(-SWIPEDISTANCE), sc<double>(SWIPEDISTANCE));
if ((m_workspaceBegin->m_id == workspaceIDLeft && *PSWIPENEW && (m_delta < 0)) ||
(m_delta > 0 && m_workspaceBegin->getWindows() == 0 && workspaceIDRight <= m_workspaceBegin->m_id) || (m_delta < 0 && m_workspaceBegin->m_id <= workspaceIDLeft)) {
if ((m_workspaceBegin->m_id == workspaceIDLeft && *PSWIPEBOUND == 1 && (m_delta < 0)) ||
(m_delta > 0 && m_workspaceBegin->getWindows() == 0 && workspaceIDRight <= m_workspaceBegin->m_id) ||
(m_delta < 0 && m_workspaceBegin->m_id <= workspaceIDLeft && *PSWIPEBOUND != 2)) {
m_delta = 0;
g_pHyprRenderer->damageMonitor(m_monitor.lock());
@ -84,8 +85,8 @@ void CUnifiedWorkspaceSwipeGesture::update(double delta) {
if (m_delta < 0) {
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceIDLeft);
if (workspaceIDLeft > m_workspaceBegin->m_id || !PWORKSPACE) {
if (*PSWIPENEW) {
if ((workspaceIDLeft > m_workspaceBegin->m_id && *PSWIPEBOUND != 2) || !PWORKSPACE) {
if (*PSWIPEBOUND == 1) {
g_pHyprRenderer->damageMonitor(m_monitor.lock());
if (VERTANIMS)
@ -124,8 +125,8 @@ void CUnifiedWorkspaceSwipeGesture::update(double delta) {
} else {
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceIDRight);
if (workspaceIDRight < m_workspaceBegin->m_id || !PWORKSPACE) {
if (*PSWIPENEW) {
if ((workspaceIDRight < m_workspaceBegin->m_id && *PSWIPEBOUND != 2) || !PWORKSPACE) {
if (*PSWIPEBOUND) {
g_pHyprRenderer->damageMonitor(m_monitor.lock());
if (VERTANIMS)
@ -182,7 +183,7 @@ void CUnifiedWorkspaceSwipeGesture::end() {
static auto PSWIPEPERC = CConfigValue<Hyprlang::FLOAT>("gestures:workspace_swipe_cancel_ratio");
static auto PSWIPEDIST = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_distance");
static auto PSWIPEFORC = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_min_speed_to_force");
static auto PSWIPENEW = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_create_new");
static auto PSWIPEBOUND = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_bound");
static auto PSWIPEUSER = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_use_r");
static auto PWORKSPACEGAP = CConfigValue<Hyprlang::INT>("general:gaps_workspaces");
const auto ANIMSTYLE = m_workspaceBegin->m_renderOffset->getStyle();
@ -195,7 +196,7 @@ void CUnifiedWorkspaceSwipeGesture::end() {
// If we've been swiping off the right end with PSWIPENEW enabled, there is
// no workspace there yet, and we need to choose an ID for a new one now.
if (workspaceIDRight <= m_workspaceBegin->m_id && *PSWIPENEW)
if (workspaceIDRight <= m_workspaceBegin->m_id && *PSWIPEBOUND == 1)
workspaceIDRight = getWorkspaceIDNameFromString("r+1").id;
auto PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); // not guaranteed if PSWIPENEW || PSWIPENUMBER

View file

@ -9,7 +9,7 @@
void CWorkspaceSwipeGesture::begin(const ITrackpadGesture::STrackpadGestureBegin& e) {
ITrackpadGesture::begin(e);
static auto PSWIPENEW = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_create_new");
static auto PSWIPEBOUND = CConfigValue<Hyprlang::INT>("gestures:workspace_swipe_bound");
if (g_pSessionLockManager->isSessionLocked() || g_pUnifiedWorkspaceSwipe->isGestureInProgress())
return;
@ -20,7 +20,7 @@ void CWorkspaceSwipeGesture::begin(const ITrackpadGesture::STrackpadGestureBegin
onMonitor++;
}
if (onMonitor < 2 && !*PSWIPENEW)
if (onMonitor < 2 && *PSWIPEBOUND != 1)
return; // disallow swiping when there's 1 workspace on a monitor
g_pUnifiedWorkspaceSwipe->begin();