mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-23 03:09:48 +01:00
input: add cursor:warp_on_changeworkspace (#6480)
* input: add cursor:warp_on_changeworkspace If enabled, warp the cursor to the last focused window on the workspace in the `changeworkspace' dispatcher, except if the cursor is currently on the WLR top layer. Respect persistent warps. * warp_on_change_workspace: check if focused layer is a window.
This commit is contained in:
parent
1b5444494d
commit
43c75f17eb
2 changed files with 14 additions and 0 deletions
|
@ -529,6 +529,7 @@ CConfigManager::CConfigManager() {
|
||||||
m_pConfig->addConfigValue("cursor:inactive_timeout", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("cursor:inactive_timeout", Hyprlang::INT{0});
|
||||||
m_pConfig->addConfigValue("cursor:no_warps", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("cursor:no_warps", Hyprlang::INT{0});
|
||||||
m_pConfig->addConfigValue("cursor:persistent_warps", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("cursor:persistent_warps", Hyprlang::INT{0});
|
||||||
|
m_pConfig->addConfigValue("cursor:warp_on_change_workspace", Hyprlang::INT{0});
|
||||||
m_pConfig->addConfigValue("cursor:default_monitor", {STRVAL_EMPTY});
|
m_pConfig->addConfigValue("cursor:default_monitor", {STRVAL_EMPTY});
|
||||||
m_pConfig->addConfigValue("cursor:zoom_factor", {1.f});
|
m_pConfig->addConfigValue("cursor:zoom_factor", {1.f});
|
||||||
m_pConfig->addConfigValue("cursor:zoom_rigid", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("cursor:zoom_rigid", Hyprlang::INT{0});
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "../config/ConfigValue.hpp"
|
#include "../config/ConfigValue.hpp"
|
||||||
#include "../devices/IKeyboard.hpp"
|
#include "../devices/IKeyboard.hpp"
|
||||||
#include "../managers/SeatManager.hpp"
|
#include "../managers/SeatManager.hpp"
|
||||||
|
#include "../protocols/LayerShell.hpp"
|
||||||
#include "../protocols/ShortcutsInhibit.hpp"
|
#include "../protocols/ShortcutsInhibit.hpp"
|
||||||
#include "../render/decorations/CHyprGroupBarDecoration.hpp"
|
#include "../render/decorations/CHyprGroupBarDecoration.hpp"
|
||||||
#include "KeybindManager.hpp"
|
#include "KeybindManager.hpp"
|
||||||
|
@ -1087,6 +1088,8 @@ void CKeybindManager::changeworkspace(std::string args) {
|
||||||
if (!PMONITORWORKSPACEOWNER)
|
if (!PMONITORWORKSPACEOWNER)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
updateRelativeCursorCoords();
|
||||||
|
|
||||||
g_pCompositor->setActiveMonitor(PMONITORWORKSPACEOWNER);
|
g_pCompositor->setActiveMonitor(PMONITORWORKSPACEOWNER);
|
||||||
|
|
||||||
if (BISWORKSPACECURRENT) {
|
if (BISWORKSPACECURRENT) {
|
||||||
|
@ -1115,6 +1118,16 @@ void CKeybindManager::changeworkspace(std::string args) {
|
||||||
else
|
else
|
||||||
g_pInputManager->simulateMouseMovement();
|
g_pInputManager->simulateMouseMovement();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const static auto PWARPONWORKSPACECHANGE = CConfigValue<Hyprlang::INT>("cursor:warp_on_change_workspace");
|
||||||
|
|
||||||
|
if (*PWARPONWORKSPACECHANGE) {
|
||||||
|
auto PLAST = pWorkspaceToChangeTo->getLastFocusedWindow();
|
||||||
|
auto HLSurface = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock());
|
||||||
|
|
||||||
|
if (PLAST && (!HLSurface || HLSurface->getWindow()))
|
||||||
|
PLAST->warpCursor();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CKeybindManager::fullscreenActive(std::string args) {
|
void CKeybindManager::fullscreenActive(std::string args) {
|
||||||
|
|
Loading…
Reference in a new issue