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/core/Compositor.cpp | |
| parent | bc764f7065c8e46b4e62cbb511b419034712c509 (diff) | |
protocols/cm: Fix preferred image description (#11026)
Diffstat (limited to 'src/protocols/core/Compositor.cpp')
| -rw-r--r-- | src/protocols/core/Compositor.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index 58d7810c..21f9e0a7 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -307,6 +307,7 @@ void CWLSurfaceResource::enter(PHLMONITOR monitor) { m_enteredOutputs.emplace_back(monitor); m_resource->sendEnter(output->getResource().get()); + m_events.enter.emit(monitor); } void CWLSurfaceResource::leave(PHLMONITOR monitor) { @@ -323,6 +324,7 @@ void CWLSurfaceResource::leave(PHLMONITOR monitor) { std::erase(m_enteredOutputs, monitor); m_resource->sendLeave(output->getResource().get()); + m_events.leave.emit(monitor); } void CWLSurfaceResource::sendPreferredTransform(wl_output_transform t) { @@ -539,7 +541,18 @@ void CWLSurfaceResource::commitState(SSurfaceState& state) { } SImageDescription CWLSurfaceResource::getPreferredImageDescription() { - return m_enteredOutputs.size() == 1 ? m_enteredOutputs[0]->m_imageDescription : g_pCompositor->getPreferredImageDescription(); + auto parent = m_self; + if (parent->m_role->role() == SURFACE_ROLE_SUBSURFACE) { + auto subsurface = ((CSubsurfaceRole*)parent->m_role.get())->m_subsurface.lock(); + parent = subsurface->t1Parent(); + } + WP<CMonitor> monitor; + if (parent->m_enteredOutputs.size() == 1) + monitor = parent->m_enteredOutputs[0]; + else if (m_hlSurface.valid() && m_hlSurface->getWindow()) + monitor = m_hlSurface->getWindow()->m_monitor; + + return monitor ? monitor->m_imageDescription : g_pCompositor->getPreferredImageDescription(); } void CWLSurfaceResource::updateCursorShm(CRegion damage) { |
