diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2023-11-01 18:53:36 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-01 18:53:36 +0000 |
| commit | 21e9313c100e005ec2a9a5100c29258a2885546b (patch) | |
| tree | dcda791982f3aa2b3e4939be67cdda11fd7023e3 /src/protocols/XDGOutput.cpp | |
| parent | 7b32b4214d028a173c8192bddaa9e43503326080 (diff) | |
Core: various unsafe state improvements (#3713)
Fixes #3637
Diffstat (limited to 'src/protocols/XDGOutput.cpp')
| -rw-r--r-- | src/protocols/XDGOutput.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/protocols/XDGOutput.cpp b/src/protocols/XDGOutput.cpp index 2ef0c3a6..49845b94 100644 --- a/src/protocols/XDGOutput.cpp +++ b/src/protocols/XDGOutput.cpp @@ -72,15 +72,9 @@ CXDGOutputProtocol::CXDGOutputProtocol(const wl_interface* iface, const int& ver } void CXDGOutputProtocol::onManagerGetXDGOutput(wl_client* client, wl_resource* resource, uint32_t id, wl_resource* outputResource) { - const auto OUTPUT = wlr_output_from_resource(outputResource); + const auto OUTPUT = wlr_output_from_resource(outputResource); - if (!OUTPUT) - return; - - const auto PMONITOR = g_pCompositor->getMonitorFromOutput(OUTPUT); - - if (!PMONITOR) - return; + const auto PMONITOR = g_pCompositor->getMonitorFromOutput(OUTPUT); SXDGOutput* pXDGOutput = m_vXDGOutputs.emplace_back(std::make_unique<SXDGOutput>(PMONITOR)).get(); #ifndef NO_XWAYLAND @@ -99,6 +93,10 @@ void CXDGOutputProtocol::onManagerGetXDGOutput(wl_client* client, wl_resource* r pXDGOutput->resource->setImplementation(&OUTPUT_IMPL, nullptr); pXDGOutput->resource->setData(this); + + if (!PMONITOR) + return; + const auto XDGVER = pXDGOutput->resource->version(); if (XDGVER >= ZXDG_OUTPUT_V1_NAME_SINCE_VERSION) @@ -116,7 +114,7 @@ void CXDGOutputProtocol::onManagerGetXDGOutput(wl_client* client, wl_resource* r void CXDGOutputProtocol::updateOutputDetails(SXDGOutput* pOutput) { static auto* const PXWLFORCESCALEZERO = &g_pConfigManager->getConfigValuePtr("xwayland:force_zero_scaling")->intValue; - if (!pOutput->resource->good()) + if (!pOutput->resource->good() || !pOutput->monitor) return; const auto POS = pOutput->isXWayland ? pOutput->monitor->vecXWaylandPosition : pOutput->monitor->vecPosition; @@ -133,6 +131,10 @@ void CXDGOutputProtocol::updateOutputDetails(SXDGOutput* pOutput) { void CXDGOutputProtocol::updateAllOutputs() { for (auto& o : m_vXDGOutputs) { + + if (!o->monitor) + continue; + updateOutputDetails(o.get()); wlr_output_schedule_done(o->monitor->output); |
