summaryrefslogtreecommitdiff
path: root/src/protocols/ColorManagement.cpp
diff options
context:
space:
mode:
authorUjinT34 <41110182+UjinT34@users.noreply.github.com>2025-10-04 01:35:22 +0300
committerGitHub <noreply@github.com>2025-10-04 00:35:22 +0200
commit76d998743ac10e712238c1016db4d8e8d16f1049 (patch)
treea35c4b58afa42c46232bfcf6db7ddf1fde00665d /src/protocols/ColorManagement.cpp
parentb7ef892ecf9c07e742239102056da950ebb42eee (diff)
cm: handle inert cm outputs (#11916)
Diffstat (limited to 'src/protocols/ColorManagement.cpp')
-rw-r--r--src/protocols/ColorManagement.cpp24
1 files changed, 6 insertions, 18 deletions
diff --git a/src/protocols/ColorManagement.cpp b/src/protocols/ColorManagement.cpp
index 7309cf71..408ade4d 100644
--- a/src/protocols/ColorManagement.cpp
+++ b/src/protocols/ColorManagement.cpp
@@ -68,20 +68,8 @@ CColorManager::CColorManager(SP<CWpColorManagerV1> resource) : m_resource(resour
const auto OUTPUTRESOURCE = CWLOutputResource::fromResource(output);
- if UNLIKELY (!OUTPUTRESOURCE) {
- r->error(-1, "Invalid output (2)");
- return;
- }
-
- const auto PMONITOR = OUTPUTRESOURCE->m_monitor.lock();
-
- if UNLIKELY (!PMONITOR) {
- r->error(-1, "Invalid output (2)");
- return;
- }
-
- const auto RESOURCE =
- PROTO::colorManagement->m_outputs.emplace_back(makeShared<CColorManagementOutput>(makeShared<CWpColorManagementOutputV1>(r->client(), r->version(), id), PMONITOR));
+ const auto RESOURCE = PROTO::colorManagement->m_outputs.emplace_back(
+ makeShared<CColorManagementOutput>(makeShared<CWpColorManagementOutputV1>(r->client(), r->version(), id), OUTPUTRESOURCE));
if UNLIKELY (!RESOURCE->good()) {
r->noMemory();
@@ -206,7 +194,7 @@ wl_client* CColorManager::client() {
return m_resource->client();
}
-CColorManagementOutput::CColorManagementOutput(SP<CWpColorManagementOutputV1> resource, WP<CMonitor> monitor) : m_resource(resource), m_monitor(monitor) {
+CColorManagementOutput::CColorManagementOutput(SP<CWpColorManagementOutputV1> resource, WP<CWLOutputResource> output) : m_resource(resource), m_output(output) {
if UNLIKELY (!good())
return;
@@ -231,10 +219,10 @@ CColorManagementOutput::CColorManagementOutput(SP<CWpColorManagementOutputV1> re
}
RESOURCE->m_self = RESOURCE;
- if (!m_monitor.valid())
+ if (!m_output || !m_output->m_monitor.valid())
RESOURCE->m_resource->sendFailed(WP_IMAGE_DESCRIPTION_V1_CAUSE_NO_OUTPUT, "No output");
else {
- RESOURCE->m_settings = m_monitor->m_imageDescription;
+ RESOURCE->m_settings = m_output->m_monitor->m_imageDescription;
RESOURCE->m_resource->sendReady(RESOURCE->m_settings.updateId());
}
});
@@ -805,7 +793,7 @@ void CColorManagementProtocol::onImagePreferredChanged(uint32_t preferredId) {
void CColorManagementProtocol::onMonitorImageDescriptionChanged(WP<CMonitor> monitor) {
for (auto const& output : m_outputs) {
- if (output->m_monitor == monitor)
+ if (output->m_output && output->m_output->m_monitor == monitor)
output->m_resource->sendImageDescriptionChanged();
}
// recheck feedbacks