diff options
Diffstat (limited to 'src/protocols/ForeignToplevelWlr.cpp')
| -rw-r--r-- | src/protocols/ForeignToplevelWlr.cpp | 20 |
1 files changed, 10 insertions, 10 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()); } }); |
