diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-03-20 14:36:55 +0100 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-03-20 14:36:55 +0100 |
| commit | f8a731b10b653a6450fe7c8beea48db9373b32f8 (patch) | |
| tree | 2f527139b63ea95298ac5611df46aff8d265359d /src/Compositor.cpp | |
| parent | decb2f638d875900c859d968726d5941058095e8 (diff) | |
focus to layers
Diffstat (limited to 'src/Compositor.cpp')
| -rw-r--r-- | src/Compositor.cpp | 47 |
1 files changed, 37 insertions, 10 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 9636be9d..9e414a53 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -282,21 +282,25 @@ void CCompositor::focusWindow(CWindow* pWindow) { const auto PWINDOWSURFACE = g_pXWaylandManager->getWindowSurface(pWindow); - if (m_sWLRSeat->keyboard_state.focused_surface == PWINDOWSURFACE) - return; // Don't focus when already focused on this. + focusSurface(PWINDOWSURFACE); - // Unfocus last window - if (m_pLastFocus && windowValidMapped(m_pLastFocus)) - g_pXWaylandManager->activateSurface(g_pXWaylandManager->getWindowSurface(m_pLastFocus), false); + Debug::log(LOG, "Set keyboard focus to %x, with name: %s", pWindow, pWindow->m_szTitle.c_str()); +} + +void CCompositor::focusSurface(wlr_surface* pSurface) { + if (m_sWLRSeat->keyboard_state.focused_surface == pSurface) + return; // Don't focus when already focused on this. + + // Unfocus last surface + if (m_pLastFocus) + g_pXWaylandManager->activateSurface(m_pLastFocus, false); const auto KEYBOARD = wlr_seat_get_keyboard(m_sWLRSeat); - wlr_seat_keyboard_notify_enter(m_sWLRSeat, PWINDOWSURFACE, KEYBOARD->keycodes, KEYBOARD->num_keycodes, &KEYBOARD->modifiers); + wlr_seat_keyboard_notify_enter(m_sWLRSeat, pSurface, KEYBOARD->keycodes, KEYBOARD->num_keycodes, &KEYBOARD->modifiers); - g_pXWaylandManager->activateSurface(PWINDOWSURFACE, true); - - m_pLastFocus = pWindow; + m_pLastFocus = pSurface; - Debug::log(LOG, "Set keyboard %x focus to %x, with name: %s", KEYBOARD, pWindow, pWindow->m_szTitle.c_str()); + g_pXWaylandManager->activateSurface(pSurface, true); } bool CCompositor::windowValidMapped(CWindow* pWindow) { @@ -333,4 +337,27 @@ CWindow* CCompositor::getWindowForPopup(wlr_xdg_popup* popup) { } return nullptr; +} + +wlr_surface* CCompositor::vectorToLayerSurface(const Vector2D& pos, std::list<SLayerSurface*>* layerSurfaces, Vector2D* sCoords) { + for (auto& l : *layerSurfaces) { + if (!l->layerSurface->mapped) + continue; + + const auto SURFACEAT = wlr_layer_surface_v1_surface_at(l->layerSurface, pos.x - l->geometry.x, pos.y - l->geometry.y, &sCoords->x, &sCoords->y); + + if (SURFACEAT) + return SURFACEAT; + } + + return nullptr; +} + +CWindow* CCompositor::getWindowFromSurface(wlr_surface* pSurface) { + for (auto& w : m_lWindows) { + if (g_pXWaylandManager->getWindowSurface(&w) == pSurface) + return &w; + } + + return nullptr; }
\ No newline at end of file |
