diff --git a/src/events/events.cpp b/src/events/events.cpp index fcfb7a0..0b1ba1c 100644 --- a/src/events/events.cpp +++ b/src/events/events.cpp @@ -307,6 +307,16 @@ CWindow* Events::remapFloatingWindow(int windowID, int forcemonitor) { + ", " + std::to_string(PWINDOWINARR->getDefaultSize().x) + ", " + std::to_string(PWINDOWINARR->getDefaultSize().y)); PWINDOWINARR->setDock(true); + + // since it's a dock get its monitor from the coords + const auto CENTERVEC = PWINDOWINARR->getDefaultPosition() + (PWINDOWINARR->getDefaultSize() / 2.f); + const auto MONITOR = g_pWindowManager->getMonitorFromCoord(CENTERVEC); + if (MONITOR) { + PWINDOWINARR->setMonitor(MONITOR->ID); + Debug::log(LOG, "Guessed dock's monitor to be " + std::to_string(MONITOR->ID) + "."); + } else { + Debug::log(LOG, "Couldn't guess dock's monitor. Leaving at " + std::to_string(PWINDOWINARR->getMonitor()) + "."); + } } } } diff --git a/src/windowManager.cpp b/src/windowManager.cpp index f437f2c..8cbdad0 100644 --- a/src/windowManager.cpp +++ b/src/windowManager.cpp @@ -2390,4 +2390,13 @@ bool CWindowManager::shouldBeManaged(const int& window) { int CWindowManager::getBarHeightForMonitor(const int& mon) { return (mon == ConfigManager::getInt("bar:monitor") ? (ConfigManager::getInt("bar:enabled") == 1 ? ConfigManager::getInt("bar:height") : ConfigManager::parseError == "" ? 0 : ConfigManager::getInt("bar:height")) : 0); +} + +SMonitor* CWindowManager::getMonitorFromCoord(const Vector2D coord) { + for (auto& m : monitors) { + if (VECINRECT(coord, m.vecPosition.x, m.vecPosition.y, m.vecPosition.x + m.vecSize.x, m.vecPosition.y + m.vecSize.y)) + return &m; + } + + return nullptr; } \ No newline at end of file diff --git a/src/windowManager.hpp b/src/windowManager.hpp index 9bae3a1..9d785ca 100644 --- a/src/windowManager.hpp +++ b/src/windowManager.hpp @@ -107,6 +107,7 @@ public: SMonitor* getMonitorFromWindow(CWindow*); SMonitor* getMonitorFromCursor(); + SMonitor* getMonitorFromCoord(const Vector2D); Vector2D getCursorPos();