summaryrefslogtreecommitdiff
path: root/src/protocols/core/Compositor.cpp
diff options
context:
space:
mode:
authorUjinT34 <41110182+UjinT34@users.noreply.github.com>2025-07-15 20:33:14 +0300
committerGitHub <noreply@github.com>2025-07-15 19:33:14 +0200
commite15014e031589e1df2dc29a5ce94325676796ac4 (patch)
tree5d56992b9e6c458dd1830c4b9ea235c0391fedd8 /src/protocols/core/Compositor.cpp
parentbc764f7065c8e46b4e62cbb511b419034712c509 (diff)
protocols/cm: Fix preferred image description (#11026)
Diffstat (limited to 'src/protocols/core/Compositor.cpp')
-rw-r--r--src/protocols/core/Compositor.cpp15
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) {