mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-22 17:45:59 +01:00
fixed layersurface focus quirks
This commit is contained in:
parent
92e17f2925
commit
8482063157
2 changed files with 14 additions and 3 deletions
|
@ -619,6 +619,9 @@ void CCompositor::focusSurface(wlr_surface* pSurface, CWindow* pWindowOwner) {
|
||||||
Debug::log(LOG, "Set keyboard focus to surface %x, with window name: %s", pSurface, pWindowOwner->m_szTitle.c_str());
|
Debug::log(LOG, "Set keyboard focus to surface %x, with window name: %s", pSurface, pWindowOwner->m_szTitle.c_str());
|
||||||
else
|
else
|
||||||
Debug::log(LOG, "Set keyboard focus to surface %x", pSurface);
|
Debug::log(LOG, "Set keyboard focus to surface %x", pSurface);
|
||||||
|
|
||||||
|
g_pXWaylandManager->activateSurface(pSurface, false);
|
||||||
|
m_pLastFocus = pSurface;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CCompositor::windowValidMapped(CWindow* pWindow) {
|
bool CCompositor::windowValidMapped(CWindow* pWindow) {
|
||||||
|
|
|
@ -121,6 +121,11 @@ void Events::listener_mapLayerSurface(void* owner, void* data) {
|
||||||
if (layersurface->layerSurface->current.keyboard_interactive)
|
if (layersurface->layerSurface->current.keyboard_interactive)
|
||||||
g_pCompositor->focusSurface(layersurface->layerSurface->surface);
|
g_pCompositor->focusSurface(layersurface->layerSurface->surface);
|
||||||
|
|
||||||
|
// mouse enter always, keeb only when needed
|
||||||
|
const auto LOCAL = g_pInputManager->getMouseCoordsInternal() - Vector2D(layersurface->geometry.x + PMONITOR->vecPosition.x, layersurface->geometry.y + PMONITOR->vecPosition.y);
|
||||||
|
wlr_seat_pointer_notify_enter(g_pCompositor->m_sSeat.seat, layersurface->layerSurface->surface, LOCAL.x, LOCAL.y);
|
||||||
|
wlr_seat_pointer_notify_motion(g_pCompositor->m_sSeat.seat, 0, LOCAL.x, LOCAL.y);
|
||||||
|
|
||||||
layersurface->position = Vector2D(layersurface->geometry.x, layersurface->geometry.y);
|
layersurface->position = Vector2D(layersurface->geometry.x, layersurface->geometry.y);
|
||||||
|
|
||||||
wlr_box geomFixed = {layersurface->geometry.x + PMONITOR->vecPosition.x, layersurface->geometry.y + PMONITOR->vecPosition.y, layersurface->geometry.width, layersurface->geometry.height};
|
wlr_box geomFixed = {layersurface->geometry.x + PMONITOR->vecPosition.x, layersurface->geometry.y + PMONITOR->vecPosition.y, layersurface->geometry.width, layersurface->geometry.height};
|
||||||
|
@ -153,14 +158,17 @@ void Events::listener_unmapLayerSurface(void* owner, void* data) {
|
||||||
if (layersurface->layerSurface->mapped)
|
if (layersurface->layerSurface->mapped)
|
||||||
layersurface->layerSurface->mapped = false;
|
layersurface->layerSurface->mapped = false;
|
||||||
|
|
||||||
if (layersurface->layerSurface->surface == g_pCompositor->m_pLastFocus)
|
|
||||||
g_pCompositor->m_pLastFocus = nullptr;
|
|
||||||
|
|
||||||
const auto PMONITOR = g_pCompositor->getMonitorFromOutput(layersurface->layerSurface->output);
|
const auto PMONITOR = g_pCompositor->getMonitorFromOutput(layersurface->layerSurface->output);
|
||||||
|
|
||||||
if (!PMONITOR)
|
if (!PMONITOR)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// refocus if needed
|
||||||
|
if (layersurface->layerSurface->surface == g_pCompositor->m_pLastFocus) {
|
||||||
|
g_pCompositor->m_pLastFocus = nullptr;
|
||||||
|
g_pInputManager->refocus();
|
||||||
|
}
|
||||||
|
|
||||||
wlr_box geomFixed = {layersurface->geometry.x + PMONITOR->vecPosition.x, layersurface->geometry.y + PMONITOR->vecPosition.y, layersurface->geometry.width, layersurface->geometry.height};
|
wlr_box geomFixed = {layersurface->geometry.x + PMONITOR->vecPosition.x, layersurface->geometry.y + PMONITOR->vecPosition.y, layersurface->geometry.width, layersurface->geometry.height};
|
||||||
g_pHyprRenderer->damageBox(&geomFixed);
|
g_pHyprRenderer->damageBox(&geomFixed);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue