Skip to content

Commit

Permalink
core: fix crash on monitor removed with gammaControl (#7601)
Browse files Browse the repository at this point in the history
* fix crash on monitor removed with gammaControl

* Update GammaControl.cpp
  • Loading branch information
ikalco authored Aug 31, 2024
1 parent cac59fe commit a6315b0
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 8 deletions.
14 changes: 7 additions & 7 deletions src/protocols/GammaControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ CGammaControl::CGammaControl(SP<CZwlrGammaControlV1> resource_, wl_resource* out
return;
}

pMonitor = OUTPUTRES->monitor.get();
pMonitor = OUTPUTRES->monitor;

if (!pMonitor) {
LOGM(ERR, "No CMonitor");
Expand Down Expand Up @@ -103,7 +103,7 @@ CGammaControl::CGammaControl(SP<CZwlrGammaControlV1> resource_, wl_resource* out
resource->sendGammaSize(gammaSize);

listeners.monitorDestroy = pMonitor->events.destroy.registerListener([this](std::any) { this->onMonitorDestroy(); });
listeners.monitorDisconnect = pMonitor->events.destroy.registerListener([this](std::any) { this->onMonitorDestroy(); });
listeners.monitorDisconnect = pMonitor->events.disconnect.registerListener([this](std::any) { this->onMonitorDestroy(); });
}

CGammaControl::~CGammaControl() {
Expand All @@ -119,7 +119,7 @@ bool CGammaControl::good() {
}

void CGammaControl::applyToMonitor() {
if (!pMonitor)
if (!pMonitor || !pMonitor->output)
return; // ??

LOGM(LOG, "setting to monitor {}", pMonitor->szName);
Expand All @@ -136,16 +136,16 @@ void CGammaControl::applyToMonitor() {
pMonitor->output->state->setGammaLut({});
}

g_pHyprRenderer->damageMonitor(pMonitor);
g_pHyprRenderer->damageMonitor(pMonitor.get());
}

CMonitor* CGammaControl::getMonitor() {
return pMonitor;
return pMonitor ? pMonitor.get() : nullptr;
}

void CGammaControl::onMonitorDestroy() {
LOGM(LOG, "Destroying gamma control for {}", pMonitor->szName);
resource->sendFailed();
pMonitor = nullptr;
}

CGammaControlProtocol::CGammaControlProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) {
Expand Down Expand Up @@ -187,4 +187,4 @@ void CGammaControlProtocol::applyGammaToState(CMonitor* pMonitor) {
g->applyToMonitor();
break;
}
}
}
2 changes: 1 addition & 1 deletion src/protocols/GammaControl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class CGammaControl {

private:
SP<CZwlrGammaControlV1> resource;
CMonitor* pMonitor = nullptr;
WP<CMonitor> pMonitor;
size_t gammaSize = 0;
bool gammaTableSet = false;
std::vector<uint16_t> gammaTable; // [r,g,b]+
Expand Down

0 comments on commit a6315b0

Please sign in to comment.