summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-18 22:53:27 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-18 22:53:27 +0100
commit5811d968bffee6fbc68c198fb92e6700547a72b0 (patch)
tree3a262be3065465c3090f184527182ad2f8717fc5 /src/Compositor.cpp
parenta1a8f3b6d579d5df3a46dff92a221b7ad48f3e84 (diff)
focus and move mouse to inputmanager
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 78ea320d..86098bbb 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -152,4 +152,45 @@ SMonitor* CCompositor::getMonitorFromCursor() {
void CCompositor::removeWindowFromVectorSafe(CWindow* pWindow) {
m_lWindows.remove(*pWindow);
+}
+
+bool CCompositor::windowExists(CWindow* pWindow) {
+ for (auto& w : m_lWindows) {
+ if (&w == pWindow)
+ return true;
+ }
+
+ return false;
+}
+
+CWindow* CCompositor::vectorToWindow(const Vector2D& pos) {
+ for (auto& w : m_lWindows) {
+ wlr_box box = {w.m_vPosition.x, w.m_vPosition.y, w.m_vSize.x, w.m_vSize.y};
+ if (wlr_box_contains_point(&box, pos.x, pos.y))
+ return &w;
+ }
+
+ return nullptr;
+}
+
+void CCompositor::focusWindow(CWindow* pWindow) {
+
+ if (!pWindow) {
+ wlr_seat_keyboard_notify_clear_focus(m_sWLRSeat);
+ return;
+ }
+
+ const auto PWINDOWSURFACE = g_pXWaylandManager->getWindowSurface(pWindow);
+
+ if (m_sWLRSeat->keyboard_state.focused_surface == PWINDOWSURFACE)
+ return; // Don't focus when already focused on this.
+
+ const auto KEYBOARD = wlr_seat_get_keyboard(m_sWLRSeat);
+ wlr_seat_keyboard_notify_enter(m_sWLRSeat, PWINDOWSURFACE, KEYBOARD->keycodes, KEYBOARD->num_keycodes, &KEYBOARD->modifiers);
+
+ g_pXWaylandManager->activateSurface(PWINDOWSURFACE, true);
+ if (m_pLastFocus && windowExists(m_pLastFocus))
+ g_pXWaylandManager->activateSurface(g_pXWaylandManager->getWindowSurface(m_pLastFocus), false);
+
+ m_pLastFocus = pWindow;
} \ No newline at end of file