minor fixes for fakefullscreen

This commit is contained in:
Vaxry 2023-01-06 13:29:43 +01:00
parent e9a6c3b498
commit 461fab0f27
4 changed files with 18 additions and 6 deletions

View file

@ -158,7 +158,7 @@ class CWindow {
bool m_bPinned = false; bool m_bPinned = false;
// fakefullscreen // fakefullscreen
bool m_bInFullscreenReported = false; bool m_bFakeFullscreenState = false;
// for proper cycling. While cycling we can't just move the pointers, so we need to keep track of the last cycled window. // for proper cycling. While cycling we can't just move the pointers, so we need to keep track of the last cycled window.
CWindow* m_pLastCycledWindow = nullptr; CWindow* m_pLastCycledWindow = nullptr;

View file

@ -756,18 +756,30 @@ void Events::listener_fullscreenWindow(void* owner, void* data) {
if (PWINDOW->isHidden() || PWINDOW->m_bNoFullscreenRequest) if (PWINDOW->isHidden() || PWINDOW->m_bNoFullscreenRequest)
return; return;
bool requestedFullState = false;
if (!PWINDOW->m_bIsX11) { if (!PWINDOW->m_bIsX11) {
const auto REQUESTED = &PWINDOW->m_uSurface.xdg->toplevel->requested; const auto REQUESTED = &PWINDOW->m_uSurface.xdg->toplevel->requested;
if (REQUESTED->fullscreen != PWINDOW->m_bIsFullscreen) if (REQUESTED->fullscreen != PWINDOW->m_bIsFullscreen && !PWINDOW->m_bFakeFullscreenState)
g_pCompositor->setWindowFullscreen(PWINDOW, REQUESTED->fullscreen, FULLSCREEN_FULL); g_pCompositor->setWindowFullscreen(PWINDOW, REQUESTED->fullscreen, FULLSCREEN_FULL);
requestedFullState = REQUESTED->fullscreen;
wlr_xdg_surface_schedule_configure(PWINDOW->m_uSurface.xdg); wlr_xdg_surface_schedule_configure(PWINDOW->m_uSurface.xdg);
} else { } else {
if (!PWINDOW->m_uSurface.xwayland->mapped) if (!PWINDOW->m_uSurface.xwayland->mapped)
return; return;
if (!PWINDOW->m_bFakeFullscreenState)
g_pCompositor->setWindowFullscreen(PWINDOW, PWINDOW->m_uSurface.xwayland->fullscreen, FULLSCREEN_FULL); g_pCompositor->setWindowFullscreen(PWINDOW, PWINDOW->m_uSurface.xwayland->fullscreen, FULLSCREEN_FULL);
requestedFullState = PWINDOW->m_uSurface.xwayland->fullscreen;
}
if (!requestedFullState && PWINDOW->m_bFakeFullscreenState) {
g_pXWaylandManager->setWindowFullscreen(PWINDOW, false); // fixes for apps expecting a de-fullscreen (e.g. ff)
g_pXWaylandManager->setWindowFullscreen(PWINDOW, true);
} }
PWINDOW->updateToplevel(); PWINDOW->updateToplevel();

View file

@ -1823,6 +1823,8 @@ void CKeybindManager::bringActiveToTop(std::string args) {
void CKeybindManager::fakeFullscreenActive(std::string args) { void CKeybindManager::fakeFullscreenActive(std::string args) {
if (g_pCompositor->m_pLastWindow) { if (g_pCompositor->m_pLastWindow) {
// will also set the flag // will also set the flag
g_pXWaylandManager->setWindowFullscreen(g_pCompositor->m_pLastWindow, !g_pCompositor->m_pLastWindow->m_bInFullscreenReported); g_pCompositor->m_pLastWindow->m_bFakeFullscreenState = !g_pCompositor->m_pLastWindow->m_bFakeFullscreenState;
g_pXWaylandManager->setWindowFullscreen(g_pCompositor->m_pLastWindow,
g_pCompositor->m_pLastWindow->m_bFakeFullscreenState || g_pCompositor->m_pLastWindow->m_bIsFullscreen);
} }
} }

View file

@ -257,8 +257,6 @@ void CHyprXWaylandManager::setWindowFullscreen(CWindow* pWindow, bool fullscreen
if (pWindow->m_phForeignToplevel) if (pWindow->m_phForeignToplevel)
wlr_foreign_toplevel_handle_v1_set_fullscreen(pWindow->m_phForeignToplevel, fullscreen); wlr_foreign_toplevel_handle_v1_set_fullscreen(pWindow->m_phForeignToplevel, fullscreen);
pWindow->m_bInFullscreenReported = fullscreen;
} }
Vector2D CHyprXWaylandManager::getMaxSizeForWindow(CWindow* pWindow) { Vector2D CHyprXWaylandManager::getMaxSizeForWindow(CWindow* pWindow) {