diff --git a/src/wayland/hyprland/ipc/connection.cpp b/src/wayland/hyprland/ipc/connection.cpp index 6dcba3ea..5ee8fffe 100644 --- a/src/wayland/hyprland/ipc/connection.cpp +++ b/src/wayland/hyprland/ipc/connection.cpp @@ -465,10 +465,12 @@ HyprlandMonitor* HyprlandIpc::focusedMonitor() const { return this->mFocusedMoni HyprlandMonitor* HyprlandIpc::monitorFor(QuickshellScreenInfo* screen) { // Wayland monitors appear after hyprland ones are created and disappear after destruction - // so simply not doing any preemptive creation is enough. + // so simply not doing any preemptive creation is enough, however if this call creates + // the HyprlandIpc singleton then monitors won't be initialized, in which case we + // preemptively create one. if (screen == nullptr) return nullptr; - return this->findMonitorByName(screen->name(), false); + return this->findMonitorByName(screen->name(), !this->monitorsRequested); } void HyprlandIpc::setFocusedMonitor(HyprlandMonitor* monitor) { @@ -505,6 +507,8 @@ void HyprlandIpc::refreshMonitors(bool canCreate, bool tryAgain) { return; } + this->monitorsRequested = true; + qCDebug(logHyprlandIpc) << "parsing monitors response"; auto json = QJsonDocument::fromJson(resp).array(); diff --git a/src/wayland/hyprland/ipc/connection.hpp b/src/wayland/hyprland/ipc/connection.hpp index 0144ab43..1778460a 100644 --- a/src/wayland/hyprland/ipc/connection.hpp +++ b/src/wayland/hyprland/ipc/connection.hpp @@ -111,6 +111,7 @@ private: bool valid = false; bool requestingMonitors = false; bool requestingWorkspaces = false; + bool monitorsRequested = false; ObjectModel mMonitors {this}; ObjectModel mWorkspaces {this};