summaryrefslogtreecommitdiff
path: root/src/protocols
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-07-29 21:59:26 +0200
committerVaxry <vaxry@vaxry.net>2025-07-29 21:59:35 +0200
commit43966cc787c4a8844ac1e7affaadeedde8f4cc60 (patch)
treeeba4c0e1b5b7367d4b30b6879930b162c0a93e76 /src/protocols
parentf51be7f20109cd8eae87db96641aead843a3ef0b (diff)
foreign-toplevel: update monitor properly on changed
fixes #11197
Diffstat (limited to 'src/protocols')
-rw-r--r--src/protocols/ForeignToplevelWlr.cpp20
-rw-r--r--src/protocols/ForeignToplevelWlr.hpp2
2 files changed, 11 insertions, 11 deletions
diff --git a/src/protocols/ForeignToplevelWlr.cpp b/src/protocols/ForeignToplevelWlr.cpp
index 600412cb..8eb1a653 100644
--- a/src/protocols/ForeignToplevelWlr.cpp
+++ b/src/protocols/ForeignToplevelWlr.cpp
@@ -288,20 +288,15 @@ void CForeignToplevelWlrManager::onUnmap(PHLWINDOW pWindow) {
H->m_closed = true;
}
-void CForeignToplevelWlrManager::onMoveMonitor(PHLWINDOW pWindow) {
+void CForeignToplevelWlrManager::onMoveMonitor(PHLWINDOW pWindow, PHLMONITOR pMonitor) {
if UNLIKELY (m_finished)
return;
const auto H = handleForWindow(pWindow);
- if UNLIKELY (!H || H->m_closed)
- return;
-
- const auto PMONITOR = pWindow->m_monitor.lock();
-
- if UNLIKELY (!PMONITOR)
+ if UNLIKELY (!H || H->m_closed || !pMonitor)
return;
- H->sendMonitor(PMONITOR);
+ H->sendMonitor(pMonitor);
H->m_resource->sendDone();
}
@@ -386,9 +381,14 @@ CForeignToplevelWlrProtocol::CForeignToplevelWlrProtocol(const wl_interface* ifa
});
static auto P4 = g_pHookSystem->hookDynamic("moveWindow", [this](void* self, SCallbackInfo& info, std::any data) {
- const auto PWINDOW = std::any_cast<PHLWINDOW>(std::any_cast<std::vector<std::any>>(data).at(0));
+ const auto PWINDOW = std::any_cast<PHLWINDOW>(std::any_cast<std::vector<std::any>>(data).at(0));
+ const auto PWORKSPACE = std::any_cast<PHLWORKSPACE>(std::any_cast<std::vector<std::any>>(data).at(1));
+
+ if (!PWORKSPACE)
+ return;
+
for (auto const& m : m_managers) {
- m->onMoveMonitor(PWINDOW);
+ m->onMoveMonitor(PWINDOW, PWORKSPACE->m_monitor.lock());
}
});
diff --git a/src/protocols/ForeignToplevelWlr.hpp b/src/protocols/ForeignToplevelWlr.hpp
index c72344c1..abfadf59 100644
--- a/src/protocols/ForeignToplevelWlr.hpp
+++ b/src/protocols/ForeignToplevelWlr.hpp
@@ -34,7 +34,7 @@ class CForeignToplevelWlrManager {
void onMap(PHLWINDOW pWindow);
void onTitle(PHLWINDOW pWindow);
void onClass(PHLWINDOW pWindow);
- void onMoveMonitor(PHLWINDOW pWindow);
+ void onMoveMonitor(PHLWINDOW pWindow, PHLMONITOR pMonitor);
void onFullscreen(PHLWINDOW pWindow);
void onNewFocus(PHLWINDOW pWindow);
void onUnmap(PHLWINDOW pWindow);