hyprland/ipc: fix monitorFor returning null during HyprlandIpc init

This commit is contained in:
outfoxxed 2024-06-06 00:59:17 -07:00
parent bc349998df
commit 5d1def3e49
Signed by: outfoxxed
GPG Key ID: 4C88A185FB89301E
2 changed files with 7 additions and 2 deletions

View File

@ -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();

View File

@ -111,6 +111,7 @@ private:
bool valid = false;
bool requestingMonitors = false;
bool requestingWorkspaces = false;
bool monitorsRequested = false;
ObjectModel<HyprlandMonitor> mMonitors {this};
ObjectModel<HyprlandWorkspace> mWorkspaces {this};