diff options
| author | Vaxry <vaxry@vaxry.net> | 2025-07-29 21:59:26 +0200 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2025-07-29 21:59:35 +0200 |
| commit | 43966cc787c4a8844ac1e7affaadeedde8f4cc60 (patch) | |
| tree | eba4c0e1b5b7367d4b30b6879930b162c0a93e76 /src/protocols | |
| parent | f51be7f20109cd8eae87db96641aead843a3ef0b (diff) | |
foreign-toplevel: update monitor properly on changed
fixes #11197
Diffstat (limited to 'src/protocols')
| -rw-r--r-- | src/protocols/ForeignToplevelWlr.cpp | 20 | ||||
| -rw-r--r-- | src/protocols/ForeignToplevelWlr.hpp | 2 |
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); |
