input: add cursor:persistent_warps to maintain relative position within a window (#6338)
Allows the cursor to return to its last relative position within a window when the window is refocused. Allows the cursor to retain its relative position within a window when the window is swapped, moved, changed workspace, added to or removed from groups. controlled with cursor:persistent_warps
This commit is contained in:
parent
9bc00897fc
commit
41e1147dfc
4 changed files with 56 additions and 15 deletions
|
|
@ -1356,7 +1356,7 @@ void CWindow::activate(bool force) {
|
|||
g_pCompositor->changeWindowZOrder(m_pSelf.lock(), true);
|
||||
|
||||
g_pCompositor->focusWindow(m_pSelf.lock());
|
||||
g_pCompositor->warpCursorTo(middle());
|
||||
warpCursor();
|
||||
}
|
||||
|
||||
void CWindow::onUpdateState() {
|
||||
|
|
@ -1530,3 +1530,14 @@ void CWindow::onX11Configure(CBox box) {
|
|||
|
||||
g_pHyprRenderer->damageWindow(m_pSelf.lock());
|
||||
}
|
||||
|
||||
void CWindow::warpCursor() {
|
||||
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);
|
||||
else
|
||||
g_pCompositor->warpCursorTo(middle());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,8 +245,11 @@ class CWindow {
|
|||
Vector2D m_vFloatingOffset = Vector2D(0, 0);
|
||||
|
||||
// this is used for pseudotiling
|
||||
bool m_bIsPseudotiled = false;
|
||||
Vector2D m_vPseudoSize = Vector2D(1280, 720);
|
||||
bool m_bIsPseudotiled = false;
|
||||
Vector2D m_vPseudoSize = Vector2D(1280, 720);
|
||||
|
||||
// for recovering relative cursor position
|
||||
Vector2D m_vRelativeCursorCoordsOnLastWarp = Vector2D(-1, -1);
|
||||
|
||||
bool m_bFirstMap = false; // for layouts
|
||||
bool m_bIsFloating = false;
|
||||
|
|
@ -446,6 +449,7 @@ class CWindow {
|
|||
void onResourceChangeX11();
|
||||
std::string fetchTitle();
|
||||
std::string fetchClass();
|
||||
void warpCursor();
|
||||
|
||||
// listeners
|
||||
void onAck(uint32_t serial);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue