diff options
| author | Dardo D Kleiner <dardokleiner@gmail.com> | 2025-01-09 17:38:38 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-09 22:38:38 +0000 |
| commit | f9c37ca43b14a4564d92b5788c81bf16f7bb719c (patch) | |
| tree | 2f6ffeb26d90062e8ed967145b5fdc89a33f6944 /src/desktop/Window.cpp | |
| parent | 9dc9366fc65ca8b4f18f6554d0b147baceda01f0 (diff) | |
windows: honor xdg_toplevel_set_fullscreen output hint (#8965)
Co-authored-by: Dardo D Kleiner <dardo.kleiner@nrl.navy.mil>
Diffstat (limited to 'src/desktop/Window.cpp')
| -rw-r--r-- | src/desktop/Window.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 2bd82ad3..65e1eb79 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1382,14 +1382,25 @@ void CWindow::activate(bool force) { } void CWindow::onUpdateState() { - std::optional<bool> requestsFS = m_pXDGSurface ? m_pXDGSurface->toplevel->state.requestsFullscreen : m_pXWaylandSurface->state.requestsFullscreen; - std::optional<bool> requestsMX = m_pXDGSurface ? m_pXDGSurface->toplevel->state.requestsMaximize : m_pXWaylandSurface->state.requestsMaximize; + std::optional<bool> requestsFS = m_pXDGSurface ? m_pXDGSurface->toplevel->state.requestsFullscreen : m_pXWaylandSurface->state.requestsFullscreen; + std::optional<MONITORID> requestsID = m_pXDGSurface ? m_pXDGSurface->toplevel->state.requestsFullscreenMonitor : MONITOR_INVALID; + std::optional<bool> requestsMX = m_pXDGSurface ? m_pXDGSurface->toplevel->state.requestsMaximize : m_pXWaylandSurface->state.requestsMaximize; if (requestsFS.has_value() && !(m_eSuppressedEvents & SUPPRESS_FULLSCREEN)) { + if (requestsID.has_value() && (requestsID.value() != MONITOR_INVALID) && !(m_eSuppressedEvents & SUPPRESS_FULLSCREEN_OUTPUT)) { + if (m_bIsMapped) { + const auto monitor = g_pCompositor->getMonitorFromID(requestsID.value()); + g_pCompositor->moveWindowToWorkspaceSafe(m_pSelf.lock(), monitor->activeWorkspace); + g_pCompositor->setActiveMonitor(monitor); + } + + if (!m_bIsMapped) + m_iWantsInitialFullscreenMonitor = requestsID.value(); + } + bool fs = requestsFS.value(); - if (m_bIsMapped) { + if (m_bIsMapped) g_pCompositor->changeWindowFullscreenModeClient(m_pSelf.lock(), FSMODE_FULLSCREEN, requestsFS.value()); - } if (!m_bIsMapped) m_bWantsInitialFullscreen = fs; |
