mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-25 23:46:00 +01:00
keybinds: Allow fullscreen/maximize in special workspace (#4921)
* allow fullscreen/maximize in special workspace * remove duplicate code * hide top layer * fix special fullscreen deco * edit * fix fade top layer when toggle special * remove double render
This commit is contained in:
parent
7a76ab01d1
commit
9c48c322d4
6 changed files with 24 additions and 11 deletions
|
@ -2281,7 +2281,7 @@ void CCompositor::updateFullscreenFadeOnWorkspace(CWorkspace* pWorkspace) {
|
||||||
|
|
||||||
const auto PMONITOR = getMonitorFromID(pWorkspace->m_iMonitorID);
|
const auto PMONITOR = getMonitorFromID(pWorkspace->m_iMonitorID);
|
||||||
|
|
||||||
if (pWorkspace->m_iID == PMONITOR->activeWorkspace) {
|
if (pWorkspace->m_iID == PMONITOR->activeWorkspace || pWorkspace->m_iID == PMONITOR->specialWorkspaceID) {
|
||||||
for (auto& ls : PMONITOR->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) {
|
for (auto& ls : PMONITOR->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) {
|
||||||
if (!ls->fadingOut)
|
if (!ls->fadingOut)
|
||||||
ls->alpha = FULLSCREEN && pWorkspace->m_efFullscreenMode == FULLSCREEN_FULL ? 0.f : 1.f;
|
ls->alpha = FULLSCREEN && pWorkspace->m_efFullscreenMode == FULLSCREEN_FULL ? 0.f : 1.f;
|
||||||
|
|
|
@ -628,6 +628,10 @@ void CMonitor::setSpecialWorkspace(CWorkspace* const pWorkspace) {
|
||||||
else
|
else
|
||||||
g_pInputManager->refocus();
|
g_pInputManager->refocus();
|
||||||
|
|
||||||
|
g_pCompositor->updateFullscreenFadeOnWorkspace(PWORKSPACE);
|
||||||
|
|
||||||
|
g_pConfigManager->ensureVRR(this);
|
||||||
|
|
||||||
g_pCompositor->updateSuspendedStates();
|
g_pCompositor->updateSuspendedStates();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -688,6 +692,10 @@ void CMonitor::setSpecialWorkspace(CWorkspace* const pWorkspace) {
|
||||||
|
|
||||||
g_pHyprRenderer->damageMonitor(this);
|
g_pHyprRenderer->damageMonitor(this);
|
||||||
|
|
||||||
|
g_pCompositor->updateFullscreenFadeOnWorkspace(pWorkspace);
|
||||||
|
|
||||||
|
g_pConfigManager->ensureVRR(this);
|
||||||
|
|
||||||
g_pCompositor->updateSuspendedStates();
|
g_pCompositor->updateSuspendedStates();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -216,7 +216,7 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode, bool for
|
||||||
calcPos = calcPos + RESERVED.topLeft;
|
calcPos = calcPos + RESERVED.topLeft;
|
||||||
calcSize = calcSize - (RESERVED.topLeft + RESERVED.bottomRight);
|
calcSize = calcSize - (RESERVED.topLeft + RESERVED.bottomRight);
|
||||||
|
|
||||||
if (g_pCompositor->isWorkspaceSpecial(PWINDOW->m_iWorkspaceID)) {
|
if (g_pCompositor->isWorkspaceSpecial(PWINDOW->m_iWorkspaceID) && !PWINDOW->m_bIsFullscreen) {
|
||||||
// if special, we adjust the coords a bit
|
// if special, we adjust the coords a bit
|
||||||
static auto PSCALEFACTOR = CConfigValue<Hyprlang::FLOAT>("dwindle:special_scale_factor");
|
static auto PSCALEFACTOR = CConfigValue<Hyprlang::FLOAT>("dwindle:special_scale_factor");
|
||||||
|
|
||||||
|
@ -792,7 +792,7 @@ void CHyprDwindleLayout::fullscreenRequestForWindow(CWindow* pWindow, eFullscree
|
||||||
if (!g_pCompositor->windowValidMapped(pWindow))
|
if (!g_pCompositor->windowValidMapped(pWindow))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (on == pWindow->m_bIsFullscreen || g_pCompositor->isWorkspaceSpecial(pWindow->m_iWorkspaceID))
|
if (on == pWindow->m_bIsFullscreen)
|
||||||
return; // ignore
|
return; // ignore
|
||||||
|
|
||||||
const auto PMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
|
const auto PMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
|
||||||
|
@ -854,8 +854,9 @@ void CHyprDwindleLayout::fullscreenRequestForWindow(CWindow* pWindow, eFullscree
|
||||||
fakeNode.workspaceID = pWindow->m_iWorkspaceID;
|
fakeNode.workspaceID = pWindow->m_iWorkspaceID;
|
||||||
pWindow->m_vPosition = fakeNode.box.pos();
|
pWindow->m_vPosition = fakeNode.box.pos();
|
||||||
pWindow->m_vSize = fakeNode.box.size();
|
pWindow->m_vSize = fakeNode.box.size();
|
||||||
|
fakeNode.ignoreFullscreenChecks = true;
|
||||||
|
|
||||||
applyNodeDataToWindow(&fakeNode, true);
|
applyNodeDataToWindow(&fakeNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -688,7 +688,7 @@ void CHyprMasterLayout::applyNodeDataToWindow(SMasterNodeData* pNode) {
|
||||||
calcPos = calcPos + RESERVED.topLeft;
|
calcPos = calcPos + RESERVED.topLeft;
|
||||||
calcSize = calcSize - (RESERVED.topLeft + RESERVED.bottomRight);
|
calcSize = calcSize - (RESERVED.topLeft + RESERVED.bottomRight);
|
||||||
|
|
||||||
if (g_pCompositor->isWorkspaceSpecial(PWINDOW->m_iWorkspaceID)) {
|
if (g_pCompositor->isWorkspaceSpecial(PWINDOW->m_iWorkspaceID) && !PWINDOW->m_bIsFullscreen) {
|
||||||
static auto PSCALEFACTOR = CConfigValue<Hyprlang::FLOAT>("master:special_scale_factor");
|
static auto PSCALEFACTOR = CConfigValue<Hyprlang::FLOAT>("master:special_scale_factor");
|
||||||
|
|
||||||
CBox wb = {calcPos + (calcSize - calcSize * *PSCALEFACTOR) / 2.f, calcSize * *PSCALEFACTOR};
|
CBox wb = {calcPos + (calcSize - calcSize * *PSCALEFACTOR) / 2.f, calcSize * *PSCALEFACTOR};
|
||||||
|
@ -871,7 +871,7 @@ void CHyprMasterLayout::fullscreenRequestForWindow(CWindow* pWindow, eFullscreen
|
||||||
if (!g_pCompositor->windowValidMapped(pWindow))
|
if (!g_pCompositor->windowValidMapped(pWindow))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (on == pWindow->m_bIsFullscreen || g_pCompositor->isWorkspaceSpecial(pWindow->m_iWorkspaceID))
|
if (on == pWindow->m_bIsFullscreen)
|
||||||
return; // ignore
|
return; // ignore
|
||||||
|
|
||||||
const auto PMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
|
const auto PMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
|
||||||
|
|
|
@ -988,9 +988,6 @@ void CKeybindManager::fullscreenActive(std::string args) {
|
||||||
if (!PWINDOW)
|
if (!PWINDOW)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (g_pCompositor->isWorkspaceSpecial(PWINDOW->m_iWorkspaceID))
|
|
||||||
return;
|
|
||||||
|
|
||||||
PWINDOW->m_bDontSendFullscreen = false;
|
PWINDOW->m_bDontSendFullscreen = false;
|
||||||
if (args == "2")
|
if (args == "2")
|
||||||
PWINDOW->m_bDontSendFullscreen = true;
|
PWINDOW->m_bDontSendFullscreen = true;
|
||||||
|
|
|
@ -295,6 +295,9 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(CMonitor* pMonitor, CWorksp
|
||||||
if (!w->m_bIsFullscreen)
|
if (!w->m_bIsFullscreen)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (w->m_iMonitorID == pWorkspace->m_iMonitorID && pWorkspace->m_bIsSpecialWorkspace != g_pCompositor->isWorkspaceSpecial(w->m_iWorkspaceID))
|
||||||
|
continue;
|
||||||
|
|
||||||
renderWindow(w.get(), pMonitor, time, pWorkspace->m_efFullscreenMode != FULLSCREEN_FULL, RENDER_PASS_ALL);
|
renderWindow(w.get(), pMonitor, time, pWorkspace->m_efFullscreenMode != FULLSCREEN_FULL, RENDER_PASS_ALL);
|
||||||
|
|
||||||
if (w->m_iWorkspaceID != pWorkspace->m_iID)
|
if (w->m_iWorkspaceID != pWorkspace->m_iID)
|
||||||
|
@ -759,8 +762,12 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace*
|
||||||
|
|
||||||
// special
|
// special
|
||||||
for (auto& ws : g_pCompositor->m_vWorkspaces) {
|
for (auto& ws : g_pCompositor->m_vWorkspaces) {
|
||||||
if (ws->m_iMonitorID == pMonitor->ID && ws->m_fAlpha.value() > 0.f && ws->m_bIsSpecialWorkspace)
|
if (ws->m_iMonitorID == pMonitor->ID && ws->m_fAlpha.value() > 0.f && ws->m_bIsSpecialWorkspace) {
|
||||||
renderWorkspaceWindows(pMonitor, ws.get(), time);
|
if (ws->m_bHasFullscreenWindow)
|
||||||
|
renderWorkspaceWindowsFullscreen(pMonitor, ws.get(), time);
|
||||||
|
else
|
||||||
|
renderWorkspaceWindows(pMonitor, ws.get(), time);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// pinned always above
|
// pinned always above
|
||||||
|
|
Loading…
Reference in a new issue