summaryrefslogtreecommitdiff
path: root/src/protocols/XDGOutput.cpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2023-11-01 18:53:36 +0000
committerGitHub <noreply@github.com>2023-11-01 18:53:36 +0000
commit21e9313c100e005ec2a9a5100c29258a2885546b (patch)
treedcda791982f3aa2b3e4939be67cdda11fd7023e3 /src/protocols/XDGOutput.cpp
parent7b32b4214d028a173c8192bddaa9e43503326080 (diff)
Core: various unsafe state improvements (#3713)
Fixes #3637
Diffstat (limited to 'src/protocols/XDGOutput.cpp')
-rw-r--r--src/protocols/XDGOutput.cpp20
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);