mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-26 09:05:59 +01:00
parent
534fdb5a37
commit
963816b9a6
3 changed files with 14 additions and 1 deletions
|
@ -212,8 +212,11 @@ void CLayerSurface::onUnmap() {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// refocus if needed
|
// refocus if needed
|
||||||
if (WASLASTFOCUS)
|
// vvvvvvvvvvvvv if there is a last focus and the last focus is not keyboard focusable, fallback to window
|
||||||
|
if (WASLASTFOCUS || (g_pCompositor->m_pLastFocus && !g_pCompositor->m_pLastFocus->hlSurface->keyboardFocusable()))
|
||||||
g_pInputManager->refocusLastWindow(PMONITOR);
|
g_pInputManager->refocusLastWindow(PMONITOR);
|
||||||
|
else if (g_pCompositor->m_pLastFocus)
|
||||||
|
g_pSeatManager->setKeyboardFocus(g_pCompositor->m_pLastFocus.lock());
|
||||||
|
|
||||||
CBox geomFixed = {geometry.x + PMONITOR->vecPosition.x, geometry.y + PMONITOR->vecPosition.y, geometry.width, geometry.height};
|
CBox geomFixed = {geometry.x + PMONITOR->vecPosition.x, geometry.y + PMONITOR->vecPosition.y, geometry.width, geometry.height};
|
||||||
g_pHyprRenderer->damageBox(&geomFixed);
|
g_pHyprRenderer->damageBox(&geomFixed);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "WLSurface.hpp"
|
#include "WLSurface.hpp"
|
||||||
#include "../Compositor.hpp"
|
#include "../Compositor.hpp"
|
||||||
#include "../protocols/core/Compositor.hpp"
|
#include "../protocols/core/Compositor.hpp"
|
||||||
|
#include "../protocols/LayerShell.hpp"
|
||||||
|
|
||||||
void CWLSurface::assign(SP<CWLSurfaceResource> pSurface) {
|
void CWLSurface::assign(SP<CWLSurfaceResource> pSurface) {
|
||||||
m_pResource = pSurface;
|
m_pResource = pSurface;
|
||||||
|
@ -222,3 +223,11 @@ SP<CWLSurface> CWLSurface::fromResource(SP<CWLSurfaceResource> pSurface) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return pSurface->hlSurface.lock();
|
return pSurface->hlSurface.lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CWLSurface::keyboardFocusable() const {
|
||||||
|
if (m_pWindowOwner || m_pPopupOwner || m_pSubsurfaceOwner)
|
||||||
|
return true;
|
||||||
|
if (m_pLayerOwner)
|
||||||
|
return m_pLayerOwner->layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ class CWLSurface {
|
||||||
Vector2D getViewporterCorrectedSize() const;
|
Vector2D getViewporterCorrectedSize() const;
|
||||||
CRegion computeDamage() const; // logical coordinates. May be wrong if the surface is unassigned
|
CRegion computeDamage() const; // logical coordinates. May be wrong if the surface is unassigned
|
||||||
bool visible();
|
bool visible();
|
||||||
|
bool keyboardFocusable() const;
|
||||||
|
|
||||||
// getters for owners.
|
// getters for owners.
|
||||||
PHLWINDOW getWindow() const;
|
PHLWINDOW getWindow() const;
|
||||||
|
|
Loading…
Reference in a new issue