mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-10 09:05:58 +01:00
fix mouse focus not returning from a LS on follow mouse 0
This commit is contained in:
parent
f6ecef0959
commit
ba0c5fe0bb
2 changed files with 14 additions and 3 deletions
|
@ -269,26 +269,34 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
||||||
wlr_seat_pointer_notify_enter(g_pCompositor->m_sSeat.seat, foundSurface, surfaceLocal.x, surfaceLocal.y);
|
wlr_seat_pointer_notify_enter(g_pCompositor->m_sSeat.seat, foundSurface, surfaceLocal.x, surfaceLocal.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pFoundWindow == g_pCompositor->m_pLastWindow && foundSurface != g_pCompositor->m_pLastFocus) {
|
if (pFoundWindow == g_pCompositor->m_pLastWindow) {
|
||||||
// we changed the subsurface
|
if (foundSurface != g_pCompositor->m_pLastFocus || m_bLastFocusOnLS) {
|
||||||
|
// ^^^ changed the subsurface ^^^ came back from a LS
|
||||||
wlr_seat_pointer_notify_enter(g_pCompositor->m_sSeat.seat, foundSurface, surfaceLocal.x, surfaceLocal.y);
|
wlr_seat_pointer_notify_enter(g_pCompositor->m_sSeat.seat, foundSurface, surfaceLocal.x, surfaceLocal.y);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (*PFOLLOWONDND && m_sDrag.dragIcon) {
|
if (*PFOLLOWONDND && m_sDrag.dragIcon) {
|
||||||
wlr_seat_pointer_notify_enter(g_pCompositor->m_sSeat.seat, foundSurface, surfaceLocal.x, surfaceLocal.y);
|
wlr_seat_pointer_notify_enter(g_pCompositor->m_sSeat.seat, foundSurface, surfaceLocal.x, surfaceLocal.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
wlr_seat_pointer_notify_motion(g_pCompositor->m_sSeat.seat, time, surfaceLocal.x, surfaceLocal.y);
|
wlr_seat_pointer_notify_motion(g_pCompositor->m_sSeat.seat, time, surfaceLocal.x, surfaceLocal.y);
|
||||||
|
m_bLastFocusOnLS = false;
|
||||||
return; // don't enter any new surfaces
|
return; // don't enter any new surfaces
|
||||||
} else {
|
} else {
|
||||||
if ((*PFOLLOWMOUSE != 3 && allowKeyboardRefocus) || refocus)
|
if ((*PFOLLOWMOUSE != 3 && allowKeyboardRefocus) || refocus)
|
||||||
g_pCompositor->focusWindow(pFoundWindow, foundSurface);
|
g_pCompositor->focusWindow(pFoundWindow, foundSurface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_bLastFocusOnLS = false;
|
||||||
} else {
|
} else {
|
||||||
if (pFoundLayerSurface && pFoundLayerSurface->layerSurface->current.keyboard_interactive && *PFOLLOWMOUSE != 3 && allowKeyboardRefocus) {
|
if (pFoundLayerSurface && pFoundLayerSurface->layerSurface->current.keyboard_interactive && *PFOLLOWMOUSE != 3 && allowKeyboardRefocus) {
|
||||||
g_pCompositor->focusSurface(foundSurface);
|
g_pCompositor->focusSurface(foundSurface);
|
||||||
g_pCompositor->m_pLastWindow = nullptr; // reset last window as we have a full focus on a LS
|
g_pCompositor->m_pLastWindow = nullptr; // reset last window as we have a full focus on a LS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pFoundLayerSurface)
|
||||||
|
m_bLastFocusOnLS = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
wlr_seat_pointer_notify_enter(g_pCompositor->m_sSeat.seat, foundSurface, surfaceLocal.x, surfaceLocal.y);
|
wlr_seat_pointer_notify_enter(g_pCompositor->m_sSeat.seat, foundSurface, surfaceLocal.x, surfaceLocal.y);
|
||||||
|
|
|
@ -105,6 +105,9 @@ private:
|
||||||
bool m_bEmptyFocusCursorSet = false;
|
bool m_bEmptyFocusCursorSet = false;
|
||||||
Vector2D m_vLastCursorPosFloored = Vector2D();
|
Vector2D m_vLastCursorPosFloored = Vector2D();
|
||||||
|
|
||||||
|
// for some bugs in follow mouse 0
|
||||||
|
bool m_bLastFocusOnLS = false;
|
||||||
|
|
||||||
void processMouseDownNormal(wlr_pointer_button_event* e);
|
void processMouseDownNormal(wlr_pointer_button_event* e);
|
||||||
void processMouseDownKill(wlr_pointer_button_event* e);
|
void processMouseDownKill(wlr_pointer_button_event* e);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue