aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/config/ConfigDescriptions.hpp6
-rw-r--r--src/desktop/Window.cpp6
-rw-r--r--src/desktop/Window.hpp2
-rw-r--r--src/managers/KeybindManager.cpp4
4 files changed, 9 insertions, 9 deletions
diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp
index a1d4858c..a9ac223a 100644
--- a/src/config/ConfigDescriptions.hpp
+++ b/src/config/ConfigDescriptions.hpp
@@ -1339,9 +1339,9 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
},
SConfigOptionDescription{
.value = "cursor:warp_on_change_workspace",
- .description = "If true, move the cursor to the last focused window after changing the workspace.",
- .type = CONFIG_OPTION_BOOL,
- .data = SConfigOptionDescription::SBoolData{false},
+ .description = "Move the cursor to the last focused window after changing the workspace. Options: 0 (Disabled), 1 (Enabled), 2 (Force - ignores cursor:no_warps option)",
+ .type = CONFIG_OPTION_CHOICE,
+ .data = SConfigOptionDescription::SChoiceData{0, "Disabled,Enabled,Force"},
},
SConfigOptionDescription{
.value = "cursor:default_monitor",
diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp
index 7dedaea0..e4651e61 100644
--- a/src/desktop/Window.cpp
+++ b/src/desktop/Window.cpp
@@ -1529,15 +1529,15 @@ void CWindow::onX11Configure(CBox box) {
g_pHyprRenderer->damageWindow(m_pSelf.lock());
}
-void CWindow::warpCursor() {
+void CWindow::warpCursor(bool force) {
static auto PERSISTENTWARPS = CConfigValue<Hyprlang::INT>("cursor:persistent_warps");
const auto coords = m_vRelativeCursorCoordsOnLastWarp;
m_vRelativeCursorCoordsOnLastWarp.x = -1; // reset m_vRelativeCursorCoordsOnLastWarp
if (*PERSISTENTWARPS && coords.x > 0 && coords.y > 0 && coords < m_vSize) // don't warp cursor outside the window
- g_pCompositor->warpCursorTo(m_vPosition + coords);
+ g_pCompositor->warpCursorTo(m_vPosition + coords, force);
else
- g_pCompositor->warpCursorTo(middle());
+ g_pCompositor->warpCursorTo(middle(), force);
}
PHLWINDOW CWindow::getSwallower() {
diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp
index 35da010c..fc7ead24 100644
--- a/src/desktop/Window.hpp
+++ b/src/desktop/Window.hpp
@@ -470,7 +470,7 @@ class CWindow {
void onResourceChangeX11();
std::string fetchTitle();
std::string fetchClass();
- void warpCursor();
+ void warpCursor(bool force = false);
PHLWINDOW getSwallower();
void unsetWindowData(eOverridePriority priority);
bool isX11OverrideRedirect();
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp
index 025a7eb6..2eb04d41 100644
--- a/src/managers/KeybindManager.cpp
+++ b/src/managers/KeybindManager.cpp
@@ -1202,12 +1202,12 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) {
const static auto PWARPONWORKSPACECHANGE = CConfigValue<Hyprlang::INT>("cursor:warp_on_change_workspace");
- if (*PWARPONWORKSPACECHANGE) {
+ if (*PWARPONWORKSPACECHANGE > 0) {
auto PLAST = pWorkspaceToChangeTo->getLastFocusedWindow();
auto HLSurface = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock());
if (PLAST && (!HLSurface || HLSurface->getWindow()))
- PLAST->warpCursor();
+ PLAST->warpCursor(*PWARPONWORKSPACECHANGE == 2);
}
return {};