summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-22 20:53:11 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-22 20:53:11 +0100
commite6a848adc0648bed29bb232ca5ee421ac6f575f9 (patch)
treeac4fb19b4aa248019c1ed8bdb60919333a1b359e /src
parentb6f3aa5d01d5f02f92167674bc29f4379fd5afbb (diff)
handle modals a bit better
Diffstat (limited to 'src')
-rw-r--r--src/Compositor.cpp5
-rw-r--r--src/Window.hpp2
-rw-r--r--src/events/Windows.cpp4
-rw-r--r--src/managers/InputManager.cpp2
4 files changed, 9 insertions, 4 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 4d3cfc85..e747e597 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -249,7 +249,7 @@ CWindow* CCompositor::vectorToWindowIdeal(const Vector2D& pos) {
// TODO: make an actual Z-system
for (auto& w : m_lWindows) {
wlr_box box = {w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y};
- if (w.m_bIsFloating && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && isWorkspaceVisible(w.m_iWorkspaceID) && !w.m_bIsModal)
+ if (w.m_bIsFloating && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && isWorkspaceVisible(w.m_iWorkspaceID))
return &w;
}
@@ -339,6 +339,9 @@ bool CCompositor::windowValidMapped(CWindow* pWindow) {
if (pWindow->m_bIsX11 && !pWindow->m_bMappedX11)
return false;
+ if (!pWindow->m_bIsMapped)
+ return false;
+
if (!g_pXWaylandManager->getWindowSurface(pWindow))
return false;
diff --git a/src/Window.hpp b/src/Window.hpp
index bfa9a795..ea0a3bd4 100644
--- a/src/Window.hpp
+++ b/src/Window.hpp
@@ -42,6 +42,8 @@ public:
std::string m_szTitle = "";
int m_iWorkspaceID = -1;
+ bool m_bIsMapped = false;
+
// XWayland stuff
bool m_bIsX11 = false;
bool m_bMappedX11 = false;
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index cafcf1e5..e353dc2f 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -22,6 +22,7 @@ void Events::listener_mapWindow(wl_listener* listener, void* data) {
PWINDOW->m_iMonitorID = PMONITOR->ID;
PWINDOW->m_bMappedX11 = true;
PWINDOW->m_iWorkspaceID = PMONITOR->activeWorkspace;
+ PWINDOW->m_bIsMapped = true;
const auto PWINDOWSURFACE = g_pXWaylandManager->getWindowSurface(PWINDOW);
@@ -52,6 +53,7 @@ void Events::listener_unmapWindow(wl_listener* listener, void* data) {
g_pCompositor->m_pLastFocus = nullptr;
PWINDOW->m_bMappedX11 = false;
+ PWINDOW->m_bIsMapped = false;
// remove the fullscreen window status from workspace if we closed it
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID);
@@ -61,8 +63,6 @@ void Events::listener_unmapWindow(wl_listener* listener, void* data) {
g_pLayoutManager->getCurrentLayout()->onWindowRemoved(PWINDOW);
- g_pCompositor->removeWindowFromVectorSafe(PWINDOW);
-
// refocus on a new window
// TODO: investigate.
// If a parent window has focus, any popups (XWayland) will be broken (they will disappear instantly)
diff --git a/src/managers/InputManager.cpp b/src/managers/InputManager.cpp
index f838408a..baf88402 100644
--- a/src/managers/InputManager.cpp
+++ b/src/managers/InputManager.cpp
@@ -47,7 +47,7 @@ void CInputManager::mouseMoveUnified(uint32_t time) {
// then windows
const auto PWINDOWIDEAL = g_pCompositor->vectorToWindowIdeal(mouseCoords);
- if (!foundSurface && PWINDOWIDEAL && !PWINDOWIDEAL->m_bIsModal) {
+ if (!foundSurface && PWINDOWIDEAL) {
foundSurface = g_pXWaylandManager->getWindowSurface(PWINDOWIDEAL);
if (foundSurface)
surfacePos = PWINDOWIDEAL->m_vRealPosition;