diff options
| author | UjinT34 <41110182+UjinT34@users.noreply.github.com> | 2025-07-15 20:33:14 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-15 19:33:14 +0200 |
| commit | e15014e031589e1df2dc29a5ce94325676796ac4 (patch) | |
| tree | 5d56992b9e6c458dd1830c4b9ea235c0391fedd8 /src/protocols/ColorManagement.cpp | |
| parent | bc764f7065c8e46b4e62cbb511b419034712c509 (diff) | |
protocols/cm: Fix preferred image description (#11026)
Diffstat (limited to 'src/protocols/ColorManagement.cpp')
| -rw-r--r-- | src/protocols/ColorManagement.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/protocols/ColorManagement.cpp b/src/protocols/ColorManagement.cpp index 502fbe45..aa01a365 100644 --- a/src/protocols/ColorManagement.cpp +++ b/src/protocols/ColorManagement.cpp @@ -410,14 +410,27 @@ CColorManagementFeedbackSurface::CColorManagementFeedbackSurface(SP<CWpColorMana m_currentPreferred = RESOURCE; m_currentPreferred->m_settings = m_surface->getPreferredImageDescription(); - if (!PROTO::colorManagement->m_debug && m_currentPreferred->m_settings.icc.fd) { + m_currentPreferredId = m_currentPreferred->m_settings.updateId(); + + if (!PROTO::colorManagement->m_debug && m_currentPreferred->m_settings.icc.fd >= 0) { LOGM(ERR, "FIXME: parse icc profile"); r->error(WP_COLOR_MANAGER_V1_ERROR_UNSUPPORTED_FEATURE, "ICC profiles are not supported"); return; } - RESOURCE->resource()->sendReady(m_currentPreferred->m_settings.updateId()); + RESOURCE->resource()->sendReady(m_currentPreferredId); }); + + m_listeners.enter = m_surface->m_events.enter.listen([this](const auto& monitor) { onPreferredChanged(); }); + m_listeners.leave = m_surface->m_events.leave.listen([this](const auto& monitor) { onPreferredChanged(); }); +} + +void CColorManagementFeedbackSurface::onPreferredChanged() { + if (m_surface->m_enteredOutputs.size() == 1) { + const auto newId = m_surface->getPreferredImageDescription().updateId(); + if (m_currentPreferredId != newId) + m_resource->sendPreferredChanged(newId); + } } bool CColorManagementFeedbackSurface::good() { @@ -796,6 +809,9 @@ void CColorManagementProtocol::onMonitorImageDescriptionChanged(WP<CMonitor> mon if (output->m_monitor == monitor) output->m_resource->sendImageDescriptionChanged(); } + // recheck feedbacks + for (auto const& feedback : m_feedbackSurfaces) + feedback->onPreferredChanged(); } void CColorManagementProtocol::destroyResource(CColorManager* resource) { |
