summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-18 23:16:15 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-18 23:16:15 +0100
commit7f8648fc8badc4c78d7a9f5a9d6eff8413680c85 (patch)
treeeb005238922178d01bcc547789f714ea1de7c73b /src
parentdbf566c78a0118fdfb58b759fc08e04951ff24e3 (diff)
fix crashes
Diffstat (limited to 'src')
-rw-r--r--src/Compositor.cpp18
-rw-r--r--src/Compositor.hpp1
-rw-r--r--src/Window.hpp1
-rw-r--r--src/events/Events.cpp6
4 files changed, 23 insertions, 3 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 356d6aeb..9b9643bd 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -151,7 +151,8 @@ SMonitor* CCompositor::getMonitorFromCursor() {
}
void CCompositor::removeWindowFromVectorSafe(CWindow* pWindow) {
- m_lWindows.remove(*pWindow);
+ if (windowExists(pWindow))
+ m_lWindows.remove(*pWindow);
}
bool CCompositor::windowExists(CWindow* pWindow) {
@@ -189,10 +190,23 @@ void CCompositor::focusWindow(CWindow* pWindow) {
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))
+ if (m_pLastFocus && windowValidMapped(m_pLastFocus))
g_pXWaylandManager->activateSurface(g_pXWaylandManager->getWindowSurface(m_pLastFocus), false);
m_pLastFocus = pWindow;
Debug::log(LOG, "Set focus to %x", pWindow);
+}
+
+bool CCompositor::windowValidMapped(CWindow* pWindow) {
+ if (!windowExists(pWindow))
+ return false;
+
+ if (pWindow->m_bIsX11 && !pWindow->m_bMappedX11)
+ return false;
+
+ if (!g_pXWaylandManager->getWindowSurface(pWindow))
+ return false;
+
+ return true;
} \ No newline at end of file
diff --git a/src/Compositor.hpp b/src/Compositor.hpp
index d35604a7..6963b6c7 100644
--- a/src/Compositor.hpp
+++ b/src/Compositor.hpp
@@ -60,6 +60,7 @@ public:
void removeWindowFromVectorSafe(CWindow*);
void focusWindow(CWindow*);
bool windowExists(CWindow*);
+ bool windowValidMapped(CWindow*);
CWindow* vectorToWindow(const Vector2D&);
};
diff --git a/src/Window.hpp b/src/Window.hpp
index 8c9c25ce..c1c0dfb0 100644
--- a/src/Window.hpp
+++ b/src/Window.hpp
@@ -41,6 +41,7 @@ public:
// XWayland stuff
bool m_bIsX11 = false;
+ bool m_bMappedX11 = false;
uint64_t m_iX11Type = 0;
DYNLISTENER(activateX11);
DYNLISTENER(configureX11);
diff --git a/src/events/Events.cpp b/src/events/Events.cpp
index fbc5c71f..a3a71d7f 100644
--- a/src/events/Events.cpp
+++ b/src/events/Events.cpp
@@ -200,6 +200,7 @@ void Events::listener_mapWindow(wl_listener* listener, void* data) {
const auto PMONITOR = g_pCompositor->getMonitorFromCursor();
PWINDOW->m_iMonitorID = PMONITOR->ID;
+ PWINDOW->m_bMappedX11 = true;
// test
g_pXWaylandManager->setWindowSize(PWINDOW, PMONITOR->vecSize);
@@ -395,7 +396,10 @@ void Events::listener_outputMgrTest(wl_listener* listener, void* data) {
}
void Events::listener_requestMouse(wl_listener* listener, void* data) {
-
+ const auto EVENT = (wlr_seat_pointer_request_set_cursor_event*)data;
+
+ if (EVENT->seat_client == g_pCompositor->m_sWLRSeat->pointer_state.focused_client)
+ wlr_cursor_set_surface(g_pCompositor->m_sWLRCursor, EVENT->surface, EVENT->hotspot_x, EVENT->hotspot_y);
}
void Events::listener_requestSetPrimarySel(wl_listener* listener, void* data) {