mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-23 15:49:50 +01:00
config: add 'force' option for 'cursor:warp_on_change_workspace' (#8681)
* config: add 'force' option for 'cursor:warp_on_change_workspace' * manager: throw the expression into the function arguments * config: fix description of `cursor:warp_on_change_workspace`
This commit is contained in:
parent
c16044a5c8
commit
4d05677e8d
4 changed files with 9 additions and 9 deletions
|
@ -1339,9 +1339,9 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
|
||||||
},
|
},
|
||||||
SConfigOptionDescription{
|
SConfigOptionDescription{
|
||||||
.value = "cursor:warp_on_change_workspace",
|
.value = "cursor:warp_on_change_workspace",
|
||||||
.description = "If true, move the cursor to the last focused window after changing the workspace.",
|
.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_BOOL,
|
.type = CONFIG_OPTION_CHOICE,
|
||||||
.data = SConfigOptionDescription::SBoolData{false},
|
.data = SConfigOptionDescription::SChoiceData{0, "Disabled,Enabled,Force"},
|
||||||
},
|
},
|
||||||
SConfigOptionDescription{
|
SConfigOptionDescription{
|
||||||
.value = "cursor:default_monitor",
|
.value = "cursor:default_monitor",
|
||||||
|
|
|
@ -1529,15 +1529,15 @@ void CWindow::onX11Configure(CBox box) {
|
||||||
g_pHyprRenderer->damageWindow(m_pSelf.lock());
|
g_pHyprRenderer->damageWindow(m_pSelf.lock());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWindow::warpCursor() {
|
void CWindow::warpCursor(bool force) {
|
||||||
static auto PERSISTENTWARPS = CConfigValue<Hyprlang::INT>("cursor:persistent_warps");
|
static auto PERSISTENTWARPS = CConfigValue<Hyprlang::INT>("cursor:persistent_warps");
|
||||||
const auto coords = m_vRelativeCursorCoordsOnLastWarp;
|
const auto coords = m_vRelativeCursorCoordsOnLastWarp;
|
||||||
m_vRelativeCursorCoordsOnLastWarp.x = -1; // reset 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
|
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
|
else
|
||||||
g_pCompositor->warpCursorTo(middle());
|
g_pCompositor->warpCursorTo(middle(), force);
|
||||||
}
|
}
|
||||||
|
|
||||||
PHLWINDOW CWindow::getSwallower() {
|
PHLWINDOW CWindow::getSwallower() {
|
||||||
|
|
|
@ -470,7 +470,7 @@ class CWindow {
|
||||||
void onResourceChangeX11();
|
void onResourceChangeX11();
|
||||||
std::string fetchTitle();
|
std::string fetchTitle();
|
||||||
std::string fetchClass();
|
std::string fetchClass();
|
||||||
void warpCursor();
|
void warpCursor(bool force = false);
|
||||||
PHLWINDOW getSwallower();
|
PHLWINDOW getSwallower();
|
||||||
void unsetWindowData(eOverridePriority priority);
|
void unsetWindowData(eOverridePriority priority);
|
||||||
bool isX11OverrideRedirect();
|
bool isX11OverrideRedirect();
|
||||||
|
|
|
@ -1202,12 +1202,12 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) {
|
||||||
|
|
||||||
const static auto PWARPONWORKSPACECHANGE = CConfigValue<Hyprlang::INT>("cursor:warp_on_change_workspace");
|
const static auto PWARPONWORKSPACECHANGE = CConfigValue<Hyprlang::INT>("cursor:warp_on_change_workspace");
|
||||||
|
|
||||||
if (*PWARPONWORKSPACECHANGE) {
|
if (*PWARPONWORKSPACECHANGE > 0) {
|
||||||
auto PLAST = pWorkspaceToChangeTo->getLastFocusedWindow();
|
auto PLAST = pWorkspaceToChangeTo->getLastFocusedWindow();
|
||||||
auto HLSurface = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock());
|
auto HLSurface = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock());
|
||||||
|
|
||||||
if (PLAST && (!HLSurface || HLSurface->getWindow()))
|
if (PLAST && (!HLSurface || HLSurface->getWindow()))
|
||||||
PLAST->warpCursor();
|
PLAST->warpCursor(*PWARPONWORKSPACECHANGE == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
|
|
Loading…
Reference in a new issue