mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-23 17:45:58 +01:00
core: workspace-related function cleanup / refactor
CCompositor is massive, and has a lot of functions that could be better optimized if in CWorkspace
This commit is contained in:
parent
a847bc67b1
commit
745a82ce8a
19 changed files with 267 additions and 260 deletions
|
@ -833,6 +833,9 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper
|
||||||
if (special && !w->onSpecialWorkspace()) // because special floating may creep up into regular
|
if (special && !w->onSpecialWorkspace()) // because special floating may creep up into regular
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (!w->m_pWorkspace)
|
||||||
|
continue;
|
||||||
|
|
||||||
const auto PWINDOWMONITOR = w->m_pMonitor.lock();
|
const auto PWINDOWMONITOR = w->m_pMonitor.lock();
|
||||||
|
|
||||||
// to avoid focusing windows behind special workspaces from other monitors
|
// to avoid focusing windows behind special workspaces from other monitors
|
||||||
|
@ -844,7 +847,7 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (w->m_bIsFloating && w->m_bIsMapped && isWorkspaceVisible(w->m_pWorkspace) && !w->isHidden() && !w->m_bPinned && !w->m_sWindowData.noFocus.valueOrDefault() &&
|
if (w->m_bIsFloating && w->m_bIsMapped && w->m_pWorkspace->isVisible() && !w->isHidden() && !w->m_bPinned && !w->m_sWindowData.noFocus.valueOrDefault() &&
|
||||||
w != pIgnoreWindow && (!aboveFullscreen || w->m_bCreatedOverFullscreen)) {
|
w != pIgnoreWindow && (!aboveFullscreen || w->m_bCreatedOverFullscreen)) {
|
||||||
// OR windows should add focus to parent
|
// OR windows should add focus to parent
|
||||||
if (w->m_bX11ShouldntFocus && !w->isX11OverrideRedirect())
|
if (w->m_bX11ShouldntFocus && !w->isX11OverrideRedirect())
|
||||||
|
@ -887,7 +890,7 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper
|
||||||
const auto PWORKSPACE = getWorkspaceByID(WSPID);
|
const auto PWORKSPACE = getWorkspaceByID(WSPID);
|
||||||
|
|
||||||
if (PWORKSPACE->m_bHasFullscreenWindow)
|
if (PWORKSPACE->m_bHasFullscreenWindow)
|
||||||
return getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
|
return PWORKSPACE->getFullscreenWindow();
|
||||||
|
|
||||||
auto found = floating(false);
|
auto found = floating(false);
|
||||||
if (found)
|
if (found)
|
||||||
|
@ -898,6 +901,9 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper
|
||||||
if (special != w->onSpecialWorkspace())
|
if (special != w->onSpecialWorkspace())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (!w->m_pWorkspace)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!w->m_bIsX11 && !w->m_bIsFloating && w->m_bIsMapped && w->workspaceID() == WSPID && !w->isHidden() && !w->m_bX11ShouldntFocus &&
|
if (!w->m_bIsX11 && !w->m_bIsFloating && w->m_bIsMapped && w->workspaceID() == WSPID && !w->isHidden() && !w->m_bX11ShouldntFocus &&
|
||||||
!w->m_sWindowData.noFocus.valueOrDefault() && w != pIgnoreWindow) {
|
!w->m_sWindowData.noFocus.valueOrDefault() && w != pIgnoreWindow) {
|
||||||
if (w->hasPopupAt(pos))
|
if (w->hasPopupAt(pos))
|
||||||
|
@ -909,6 +915,9 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper
|
||||||
if (special != w->onSpecialWorkspace())
|
if (special != w->onSpecialWorkspace())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (!w->m_pWorkspace)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!w->m_bIsFloating && w->m_bIsMapped && w->workspaceID() == WSPID && !w->isHidden() && !w->m_bX11ShouldntFocus && !w->m_sWindowData.noFocus.valueOrDefault() &&
|
if (!w->m_bIsFloating && w->m_bIsMapped && w->workspaceID() == WSPID && !w->isHidden() && !w->m_bX11ShouldntFocus && !w->m_sWindowData.noFocus.valueOrDefault() &&
|
||||||
w != pIgnoreWindow) {
|
w != pIgnoreWindow) {
|
||||||
CBox box = (properties & USE_PROP_TILED) ? w->getWindowBoxUnified(properties) : CBox{w->m_vPosition, w->m_vSize};
|
CBox box = (properties & USE_PROP_TILED) ? w->getWindowBoxUnified(properties) : CBox{w->m_vPosition, w->m_vSize};
|
||||||
|
@ -1070,7 +1079,7 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP<CWLSurfaceResource> pSurface
|
||||||
|
|
||||||
const auto PMONITOR = pWindow->m_pMonitor.lock();
|
const auto PMONITOR = pWindow->m_pMonitor.lock();
|
||||||
|
|
||||||
if (!isWorkspaceVisible(pWindow->m_pWorkspace)) {
|
if (!pWindow->m_pWorkspace || !pWindow->m_pWorkspace->isVisible()) {
|
||||||
const auto PWORKSPACE = pWindow->m_pWorkspace;
|
const auto PWORKSPACE = pWindow->m_pWorkspace;
|
||||||
// This is to fix incorrect feedback on the focus history.
|
// This is to fix incorrect feedback on the focus history.
|
||||||
PWORKSPACE->m_pLastFocusedWindow = pWindow;
|
PWORKSPACE->m_pLastFocusedWindow = pWindow;
|
||||||
|
@ -1247,30 +1256,6 @@ PHLWINDOW CCompositor::getWindowFromHandle(uint32_t handle) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHLWINDOW CCompositor::getFullscreenWindowOnWorkspace(const WORKSPACEID& ID) {
|
|
||||||
for (auto const& w : m_vWindows) {
|
|
||||||
if (w->workspaceID() == ID && w->isFullscreen())
|
|
||||||
return w;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CCompositor::isWorkspaceVisible(PHLWORKSPACE w) {
|
|
||||||
return valid(w) && w->m_bVisible;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CCompositor::isWorkspaceVisibleNotCovered(PHLWORKSPACE w) {
|
|
||||||
if (!valid(w))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
const auto PMONITOR = w->m_pMonitor.lock();
|
|
||||||
if (PMONITOR->activeSpecialWorkspace)
|
|
||||||
return PMONITOR->activeSpecialWorkspace->m_iID == w->m_iID;
|
|
||||||
|
|
||||||
return PMONITOR->activeWorkspace->m_iID == w->m_iID;
|
|
||||||
}
|
|
||||||
|
|
||||||
PHLWORKSPACE CCompositor::getWorkspaceByID(const WORKSPACEID& id) {
|
PHLWORKSPACE CCompositor::getWorkspaceByID(const WORKSPACEID& id) {
|
||||||
for (auto const& w : m_vWorkspaces) {
|
for (auto const& w : m_vWorkspaces) {
|
||||||
if (w->m_iID == id && !w->inert())
|
if (w->m_iID == id && !w->inert())
|
||||||
|
@ -1295,37 +1280,6 @@ void CCompositor::sanityCheckWorkspaces() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int CCompositor::getWindowsOnWorkspace(const WORKSPACEID& id, std::optional<bool> onlyTiled, std::optional<bool> onlyVisible) {
|
|
||||||
int no = 0;
|
|
||||||
for (auto const& w : m_vWindows) {
|
|
||||||
if (w->workspaceID() != id || !w->m_bIsMapped)
|
|
||||||
continue;
|
|
||||||
if (onlyTiled.has_value() && w->m_bIsFloating == onlyTiled.value())
|
|
||||||
continue;
|
|
||||||
if (onlyVisible.has_value() && w->isHidden() == onlyVisible.value())
|
|
||||||
continue;
|
|
||||||
no++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return no;
|
|
||||||
}
|
|
||||||
|
|
||||||
int CCompositor::getGroupsOnWorkspace(const WORKSPACEID& id, std::optional<bool> onlyTiled, std::optional<bool> onlyVisible) {
|
|
||||||
int no = 0;
|
|
||||||
for (auto const& w : m_vWindows) {
|
|
||||||
if (w->workspaceID() != id || !w->m_bIsMapped)
|
|
||||||
continue;
|
|
||||||
if (!w->m_sGroupData.head)
|
|
||||||
continue;
|
|
||||||
if (onlyTiled.has_value() && w->m_bIsFloating == onlyTiled.value())
|
|
||||||
continue;
|
|
||||||
if (onlyVisible.has_value() && w->isHidden() == onlyVisible.value())
|
|
||||||
continue;
|
|
||||||
no++;
|
|
||||||
}
|
|
||||||
return no;
|
|
||||||
}
|
|
||||||
|
|
||||||
PHLWINDOW CCompositor::getUrgentWindow() {
|
PHLWINDOW CCompositor::getUrgentWindow() {
|
||||||
for (auto const& w : m_vWindows) {
|
for (auto const& w : m_vWindows) {
|
||||||
if (w->m_bIsMapped && w->m_bIsUrgent)
|
if (w->m_bIsMapped && w->m_bIsUrgent)
|
||||||
|
@ -1335,44 +1289,6 @@ PHLWINDOW CCompositor::getUrgentWindow() {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CCompositor::hasUrgentWindowOnWorkspace(const WORKSPACEID& id) {
|
|
||||||
for (auto const& w : m_vWindows) {
|
|
||||||
if (w->workspaceID() == id && w->m_bIsMapped && w->m_bIsUrgent)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
PHLWINDOW CCompositor::getFirstWindowOnWorkspace(const WORKSPACEID& id) {
|
|
||||||
for (auto const& w : m_vWindows) {
|
|
||||||
if (w->workspaceID() == id && w->m_bIsMapped && !w->isHidden())
|
|
||||||
return w;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
PHLWINDOW CCompositor::getTopLeftWindowOnWorkspace(const WORKSPACEID& id) {
|
|
||||||
const auto PWORKSPACE = getWorkspaceByID(id);
|
|
||||||
|
|
||||||
if (!PWORKSPACE)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
const auto PMONITOR = PWORKSPACE->m_pMonitor.lock();
|
|
||||||
|
|
||||||
for (auto const& w : m_vWindows) {
|
|
||||||
if (w->workspaceID() != id || !w->m_bIsMapped || w->isHidden())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
const auto WINDOWIDEALBB = w->getWindowIdealBoundingBoxIgnoreReserved();
|
|
||||||
|
|
||||||
if (WINDOWIDEALBB.x <= PMONITOR->vecPosition.x + 1 && WINDOWIDEALBB.y <= PMONITOR->vecPosition.y + 1)
|
|
||||||
return w;
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CCompositor::isWindowActive(PHLWINDOW pWindow) {
|
bool CCompositor::isWindowActive(PHLWINDOW pWindow) {
|
||||||
if (m_pLastWindow.expired() && !m_pLastFocus)
|
if (m_pLastWindow.expired() && !m_pLastFocus)
|
||||||
return false;
|
return false;
|
||||||
|
@ -1560,7 +1476,7 @@ PHLWINDOW CCompositor::getWindowInDirection(PHLWINDOW pWindow, char dir) {
|
||||||
|
|
||||||
// for tiled windows, we calc edges
|
// for tiled windows, we calc edges
|
||||||
for (auto const& w : m_vWindows) {
|
for (auto const& w : m_vWindows) {
|
||||||
if (w == pWindow || !w->m_bIsMapped || w->isHidden() || (!w->isFullscreen() && w->m_bIsFloating) || !isWorkspaceVisible(w->m_pWorkspace))
|
if (w == pWindow || !w->m_pWorkspace || !w->m_bIsMapped || w->isHidden() || (!w->isFullscreen() && w->m_bIsFloating) || !w->m_pWorkspace->isVisible())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (pWindow->m_pMonitor == w->m_pMonitor && pWindow->m_pWorkspace != w->m_pWorkspace)
|
if (pWindow->m_pMonitor == w->m_pMonitor && pWindow->m_pWorkspace != w->m_pWorkspace)
|
||||||
|
@ -1652,7 +1568,7 @@ PHLWINDOW CCompositor::getWindowInDirection(PHLWINDOW pWindow, char dir) {
|
||||||
constexpr float THRESHOLD = 0.3 * M_PI;
|
constexpr float THRESHOLD = 0.3 * M_PI;
|
||||||
|
|
||||||
for (auto const& w : m_vWindows) {
|
for (auto const& w : m_vWindows) {
|
||||||
if (w == pWindow || !w->m_bIsMapped || w->isHidden() || (!w->isFullscreen() && !w->m_bIsFloating) || !isWorkspaceVisible(w->m_pWorkspace))
|
if (w == pWindow || !w->m_bIsMapped || !w->m_pWorkspace || w->isHidden() || (!w->isFullscreen() && !w->m_bIsFloating) || !w->m_pWorkspace->isVisible())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (pWindow->m_pMonitor == w->m_pMonitor && pWindow->m_pWorkspace != w->m_pWorkspace)
|
if (pWindow->m_pMonitor == w->m_pMonitor && pWindow->m_pWorkspace != w->m_pWorkspace)
|
||||||
|
@ -1678,7 +1594,7 @@ PHLWINDOW CCompositor::getWindowInDirection(PHLWINDOW pWindow, char dir) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!leaderWindow && PWORKSPACE->m_bHasFullscreenWindow)
|
if (!leaderWindow && PWORKSPACE->m_bHasFullscreenWindow)
|
||||||
leaderWindow = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
|
leaderWindow = PWORKSPACE->getFullscreenWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (leaderValue != -1)
|
if (leaderValue != -1)
|
||||||
|
@ -1871,15 +1787,6 @@ void CCompositor::updateAllWindowsAnimatedDecorationValues() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCompositor::updateWorkspaceWindows(const int64_t& id) {
|
|
||||||
for (auto const& w : m_vWindows) {
|
|
||||||
if (!w->m_bIsMapped || w->workspaceID() != id)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
w->updateDynamicRules();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCompositor::updateWindowAnimatedDecorationValues(PHLWINDOW pWindow) {
|
void CCompositor::updateWindowAnimatedDecorationValues(PHLWINDOW pWindow) {
|
||||||
// optimization
|
// optimization
|
||||||
static auto PACTIVECOL = CConfigValue<Hyprlang::CUSTOMTYPE>("general:col.active_border");
|
static auto PACTIVECOL = CConfigValue<Hyprlang::CUSTOMTYPE>("general:col.active_border");
|
||||||
|
@ -2391,7 +2298,7 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, sFullscreenS
|
||||||
|
|
||||||
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goal(), true);
|
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goal(), true);
|
||||||
|
|
||||||
forceReportSizesToWindowsOnWorkspace(PWINDOW->workspaceID());
|
PWORKSPACE->forceReportSizesToWindows();
|
||||||
|
|
||||||
g_pInputManager->recheckIdleInhibitorStatus();
|
g_pInputManager->recheckIdleInhibitorStatus();
|
||||||
|
|
||||||
|
@ -2422,27 +2329,6 @@ PHLWINDOW CCompositor::getX11Parent(PHLWINDOW pWindow) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCompositor::updateWorkspaceWindowDecos(const WORKSPACEID& id) {
|
|
||||||
for (auto const& w : m_vWindows) {
|
|
||||||
if (w->workspaceID() != id)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
w->updateWindowDecos();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCompositor::updateWorkspaceWindowData(const WORKSPACEID& id) {
|
|
||||||
const auto PWORKSPACE = getWorkspaceByID(id);
|
|
||||||
const auto WORKSPACERULE = PWORKSPACE ? g_pConfigManager->getWorkspaceRuleFor(PWORKSPACE) : SWorkspaceRule{};
|
|
||||||
|
|
||||||
for (auto const& w : m_vWindows) {
|
|
||||||
if (w->workspaceID() != id)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
w->updateWindowData(WORKSPACERULE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCompositor::scheduleFrameForMonitor(PHLMONITOR pMonitor, IOutput::scheduleFrameReason reason) {
|
void CCompositor::scheduleFrameForMonitor(PHLMONITOR pMonitor, IOutput::scheduleFrameReason reason) {
|
||||||
if ((m_pAqBackend->hasSession() && !m_pAqBackend->session->active) || !m_bSessionActive)
|
if ((m_pAqBackend->hasSession() && !m_pAqBackend->session->active) || !m_bSessionActive)
|
||||||
return;
|
return;
|
||||||
|
@ -2654,14 +2540,6 @@ Vector2D CCompositor::parseWindowVectorArgsRelative(const std::string& args, con
|
||||||
return Vector2D(X, Y);
|
return Vector2D(X, Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCompositor::forceReportSizesToWindowsOnWorkspace(const WORKSPACEID& wid) {
|
|
||||||
for (auto const& w : m_vWindows) {
|
|
||||||
if (w->workspaceID() == wid && w->m_bIsMapped && !w->isHidden()) {
|
|
||||||
g_pXWaylandManager->setWindowSize(w, w->m_vRealSize.value(), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PHLWORKSPACE CCompositor::createNewWorkspace(const WORKSPACEID& id, const MONITORID& monid, const std::string& name, bool isEmpty) {
|
PHLWORKSPACE CCompositor::createNewWorkspace(const WORKSPACEID& id, const MONITORID& monid, const std::string& name, bool isEmpty) {
|
||||||
const auto NAME = name == "" ? std::to_string(id) : name;
|
const auto NAME = name == "" ? std::to_string(id) : name;
|
||||||
auto monID = monid;
|
auto monID = monid;
|
||||||
|
@ -2679,21 +2557,6 @@ PHLWORKSPACE CCompositor::createNewWorkspace(const WORKSPACEID& id, const MONITO
|
||||||
return PWORKSPACE;
|
return PWORKSPACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCompositor::renameWorkspace(const WORKSPACEID& id, const std::string& name) {
|
|
||||||
const auto PWORKSPACE = getWorkspaceByID(id);
|
|
||||||
|
|
||||||
if (!PWORKSPACE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (isWorkspaceSpecial(id))
|
|
||||||
return;
|
|
||||||
|
|
||||||
Debug::log(LOG, "renameWorkspace: Renaming workspace {} to '{}'", id, name);
|
|
||||||
PWORKSPACE->m_szName = name;
|
|
||||||
|
|
||||||
g_pEventManager->postEvent({"renameworkspace", std::to_string(PWORKSPACE->m_iID) + "," + PWORKSPACE->m_szName});
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCompositor::setActiveMonitor(PHLMONITOR pMonitor) {
|
void CCompositor::setActiveMonitor(PHLMONITOR pMonitor) {
|
||||||
if (m_pLastMonitor == pMonitor)
|
if (m_pLastMonitor == pMonitor)
|
||||||
return;
|
return;
|
||||||
|
@ -2758,8 +2621,8 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor
|
||||||
if (FULLSCREEN)
|
if (FULLSCREEN)
|
||||||
setWindowFullscreenInternal(pWindow, FSMODE_NONE);
|
setWindowFullscreenInternal(pWindow, FSMODE_NONE);
|
||||||
|
|
||||||
const PHLWINDOW pFirstWindowOnWorkspace = g_pCompositor->getFirstWindowOnWorkspace(pWorkspace->m_iID);
|
const PHLWINDOW pFirstWindowOnWorkspace = pWorkspace->getFirstWindow();
|
||||||
const int visibleWindowsOnWorkspace = g_pCompositor->getWindowsOnWorkspace(pWorkspace->m_iID, std::nullopt, true);
|
const int visibleWindowsOnWorkspace = pWorkspace->getWindows(std::nullopt, true);
|
||||||
const auto PWINDOWMONITOR = pWindow->m_pMonitor.lock();
|
const auto PWINDOWMONITOR = pWindow->m_pMonitor.lock();
|
||||||
const auto POSTOMON = pWindow->m_vRealPosition.goal() - PWINDOWMONITOR->vecPosition;
|
const auto POSTOMON = pWindow->m_vRealPosition.goal() - PWINDOWMONITOR->vecPosition;
|
||||||
const auto PWORKSPACEMONITOR = pWorkspace->m_pMonitor.lock();
|
const auto PWORKSPACEMONITOR = pWorkspace->m_pMonitor.lock();
|
||||||
|
@ -2817,14 +2680,15 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor
|
||||||
if (FULLSCREEN)
|
if (FULLSCREEN)
|
||||||
setWindowFullscreenInternal(pWindow, FULLSCREENMODE);
|
setWindowFullscreenInternal(pWindow, FULLSCREENMODE);
|
||||||
|
|
||||||
g_pCompositor->updateWorkspaceWindows(pWorkspace->m_iID);
|
pWorkspace->updateWindows();
|
||||||
g_pCompositor->updateWorkspaceWindows(pWindow->workspaceID());
|
if (pWindow->m_pWorkspace)
|
||||||
|
pWindow->m_pWorkspace->updateWindows();
|
||||||
g_pCompositor->updateSuspendedStates();
|
g_pCompositor->updateSuspendedStates();
|
||||||
}
|
}
|
||||||
|
|
||||||
PHLWINDOW CCompositor::getForceFocus() {
|
PHLWINDOW CCompositor::getForceFocus() {
|
||||||
for (auto const& w : m_vWindows) {
|
for (auto const& w : m_vWindows) {
|
||||||
if (!w->m_bIsMapped || w->isHidden() || !isWorkspaceVisible(w->m_pWorkspace))
|
if (!w->m_bIsMapped || w->isHidden() || !w->m_pWorkspace || !w->m_pWorkspace->isVisible())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!w->m_bStayFocused)
|
if (!w->m_bStayFocused)
|
||||||
|
@ -3002,7 +2866,7 @@ void CCompositor::updateSuspendedStates() {
|
||||||
if (!w->m_bIsMapped)
|
if (!w->m_bIsMapped)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
w->setSuspended(w->isHidden() || !isWorkspaceVisible(w->m_pWorkspace));
|
w->setSuspended(w->isHidden() || !w->m_pWorkspace || !w->m_pWorkspace->isVisible());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -115,21 +115,11 @@ class CCompositor {
|
||||||
PHLMONITOR getRealMonitorFromOutput(SP<Aquamarine::IOutput>);
|
PHLMONITOR getRealMonitorFromOutput(SP<Aquamarine::IOutput>);
|
||||||
PHLWINDOW getWindowFromSurface(SP<CWLSurfaceResource>);
|
PHLWINDOW getWindowFromSurface(SP<CWLSurfaceResource>);
|
||||||
PHLWINDOW getWindowFromHandle(uint32_t);
|
PHLWINDOW getWindowFromHandle(uint32_t);
|
||||||
bool isWorkspaceVisible(PHLWORKSPACE);
|
|
||||||
bool isWorkspaceVisibleNotCovered(PHLWORKSPACE);
|
|
||||||
PHLWORKSPACE getWorkspaceByID(const WORKSPACEID&);
|
PHLWORKSPACE getWorkspaceByID(const WORKSPACEID&);
|
||||||
PHLWORKSPACE getWorkspaceByName(const std::string&);
|
PHLWORKSPACE getWorkspaceByName(const std::string&);
|
||||||
PHLWORKSPACE getWorkspaceByString(const std::string&);
|
PHLWORKSPACE getWorkspaceByString(const std::string&);
|
||||||
void sanityCheckWorkspaces();
|
void sanityCheckWorkspaces();
|
||||||
void updateWorkspaceWindowDecos(const WORKSPACEID&);
|
|
||||||
void updateWorkspaceWindowData(const WORKSPACEID&);
|
|
||||||
int getWindowsOnWorkspace(const WORKSPACEID& id, std::optional<bool> onlyTiled = {}, std::optional<bool> onlyVisible = {});
|
|
||||||
int getGroupsOnWorkspace(const WORKSPACEID& id, std::optional<bool> onlyTiled = {}, std::optional<bool> onlyVisible = {});
|
|
||||||
PHLWINDOW getUrgentWindow();
|
PHLWINDOW getUrgentWindow();
|
||||||
bool hasUrgentWindowOnWorkspace(const WORKSPACEID&);
|
|
||||||
PHLWINDOW getFirstWindowOnWorkspace(const WORKSPACEID&);
|
|
||||||
PHLWINDOW getTopLeftWindowOnWorkspace(const WORKSPACEID&);
|
|
||||||
PHLWINDOW getFullscreenWindowOnWorkspace(const WORKSPACEID&);
|
|
||||||
bool isWindowActive(PHLWINDOW);
|
bool isWindowActive(PHLWINDOW);
|
||||||
void changeWindowZOrder(PHLWINDOW, bool);
|
void changeWindowZOrder(PHLWINDOW, bool);
|
||||||
void cleanupFadingOut(const MONITORID& monid);
|
void cleanupFadingOut(const MONITORID& monid);
|
||||||
|
@ -142,7 +132,6 @@ class CCompositor {
|
||||||
PHLMONITOR getMonitorInDirection(const char&);
|
PHLMONITOR getMonitorInDirection(const char&);
|
||||||
PHLMONITOR getMonitorInDirection(PHLMONITOR, const char&);
|
PHLMONITOR getMonitorInDirection(PHLMONITOR, const char&);
|
||||||
void updateAllWindowsAnimatedDecorationValues();
|
void updateAllWindowsAnimatedDecorationValues();
|
||||||
void updateWorkspaceWindows(const WORKSPACEID& id);
|
|
||||||
void updateWindowAnimatedDecorationValues(PHLWINDOW);
|
void updateWindowAnimatedDecorationValues(PHLWINDOW);
|
||||||
MONITORID getNextAvailableMonitorID(std::string const& name);
|
MONITORID getNextAvailableMonitorID(std::string const& name);
|
||||||
void moveWorkspaceToMonitor(PHLWORKSPACE, PHLMONITOR, bool noWarpCursor = false);
|
void moveWorkspaceToMonitor(PHLWORKSPACE, PHLMONITOR, bool noWarpCursor = false);
|
||||||
|
@ -165,10 +154,8 @@ class CCompositor {
|
||||||
PHLLS getLayerSurfaceFromSurface(SP<CWLSurfaceResource>);
|
PHLLS getLayerSurfaceFromSurface(SP<CWLSurfaceResource>);
|
||||||
void closeWindow(PHLWINDOW);
|
void closeWindow(PHLWINDOW);
|
||||||
Vector2D parseWindowVectorArgsRelative(const std::string&, const Vector2D&);
|
Vector2D parseWindowVectorArgsRelative(const std::string&, const Vector2D&);
|
||||||
void forceReportSizesToWindowsOnWorkspace(const WORKSPACEID&);
|
|
||||||
PHLWORKSPACE createNewWorkspace(const WORKSPACEID&, const MONITORID&, const std::string& name = "",
|
PHLWORKSPACE createNewWorkspace(const WORKSPACEID&, const MONITORID&, const std::string& name = "",
|
||||||
bool isEmpty = true); // will be deleted next frame if left empty and unfocused!
|
bool isEmpty = true); // will be deleted next frame if left empty and unfocused!
|
||||||
void renameWorkspace(const WORKSPACEID&, const std::string& name = "");
|
|
||||||
void setActiveMonitor(PHLMONITOR);
|
void setActiveMonitor(PHLMONITOR);
|
||||||
bool isWorkspaceSpecial(const WORKSPACEID&);
|
bool isWorkspaceSpecial(const WORKSPACEID&);
|
||||||
WORKSPACEID getNewSpecialID();
|
WORKSPACEID getNewSpecialID();
|
||||||
|
|
|
@ -927,8 +927,8 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) {
|
||||||
for (auto const& w : g_pCompositor->m_vWorkspaces) {
|
for (auto const& w : g_pCompositor->m_vWorkspaces) {
|
||||||
if (w->inert())
|
if (w->inert())
|
||||||
continue;
|
continue;
|
||||||
g_pCompositor->updateWorkspaceWindows(w->m_iID);
|
w->updateWindows();
|
||||||
g_pCompositor->updateWorkspaceWindowData(w->m_iID);
|
w->updateWindowData();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update window border colors
|
// Update window border colors
|
||||||
|
|
|
@ -306,12 +306,12 @@ std::string CHyprCtl::getWorkspaceData(PHLWORKSPACE w, eHyprCtlOutputFormat form
|
||||||
"lastwindowtitle": "{}"
|
"lastwindowtitle": "{}"
|
||||||
}})#",
|
}})#",
|
||||||
w->m_iID, escapeJSONStrings(w->m_szName), escapeJSONStrings(PMONITOR ? PMONITOR->szName : "?"),
|
w->m_iID, escapeJSONStrings(w->m_szName), escapeJSONStrings(PMONITOR ? PMONITOR->szName : "?"),
|
||||||
escapeJSONStrings(PMONITOR ? std::to_string(PMONITOR->ID) : "null"), g_pCompositor->getWindowsOnWorkspace(w->m_iID),
|
escapeJSONStrings(PMONITOR ? std::to_string(PMONITOR->ID) : "null"), w->getWindows(), ((int)w->m_bHasFullscreenWindow == 1 ? "true" : "false"),
|
||||||
((int)w->m_bHasFullscreenWindow == 1 ? "true" : "false"), (uintptr_t)PLASTW.get(), PLASTW ? escapeJSONStrings(PLASTW->m_szTitle) : "");
|
(uintptr_t)PLASTW.get(), PLASTW ? escapeJSONStrings(PLASTW->m_szTitle) : "");
|
||||||
} else {
|
} else {
|
||||||
return std::format("workspace ID {} ({}) on monitor {}:\n\tmonitorID: {}\n\twindows: {}\n\thasfullscreen: {}\n\tlastwindow: 0x{:x}\n\tlastwindowtitle: {}\n\n", w->m_iID,
|
return std::format("workspace ID {} ({}) on monitor {}:\n\tmonitorID: {}\n\twindows: {}\n\thasfullscreen: {}\n\tlastwindow: 0x{:x}\n\tlastwindowtitle: {}\n\n", w->m_iID,
|
||||||
w->m_szName, PMONITOR ? PMONITOR->szName : "?", PMONITOR ? std::to_string(PMONITOR->ID) : "null", g_pCompositor->getWindowsOnWorkspace(w->m_iID),
|
w->m_szName, PMONITOR ? PMONITOR->szName : "?", PMONITOR ? std::to_string(PMONITOR->ID) : "null", w->getWindows(), (int)w->m_bHasFullscreenWindow,
|
||||||
(int)w->m_bHasFullscreenWindow, (uintptr_t)PLASTW.get(), PLASTW ? PLASTW->m_szTitle : "");
|
(uintptr_t)PLASTW.get(), PLASTW ? PLASTW->m_szTitle : "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1764,7 +1764,7 @@ std::string CHyprCtl::getReply(std::string request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto const& w : g_pCompositor->m_vWindows) {
|
for (auto const& w : g_pCompositor->m_vWindows) {
|
||||||
if (!w->m_bIsMapped || !g_pCompositor->isWorkspaceVisible(w->m_pWorkspace))
|
if (!w->m_bIsMapped || !w->m_pWorkspace || !w->m_pWorkspace->isVisible())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
w->updateDynamicRules();
|
w->updateDynamicRules();
|
||||||
|
|
|
@ -413,12 +413,12 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) {
|
||||||
|
|
||||||
setAnimationsToMove();
|
setAnimationsToMove();
|
||||||
|
|
||||||
g_pCompositor->updateWorkspaceWindows(OLDWORKSPACE->m_iID);
|
OLDWORKSPACE->updateWindows();
|
||||||
g_pCompositor->updateWorkspaceWindowData(OLDWORKSPACE->m_iID);
|
OLDWORKSPACE->updateWindowData();
|
||||||
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(OLDWORKSPACE->monitorID());
|
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(OLDWORKSPACE->monitorID());
|
||||||
|
|
||||||
g_pCompositor->updateWorkspaceWindows(workspaceID());
|
pWorkspace->updateWindows();
|
||||||
g_pCompositor->updateWorkspaceWindowData(workspaceID());
|
pWorkspace->updateWindowData();
|
||||||
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID());
|
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID());
|
||||||
|
|
||||||
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
||||||
|
@ -437,7 +437,7 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) {
|
||||||
// update xwayland coords
|
// update xwayland coords
|
||||||
g_pXWaylandManager->setWindowSize(m_pSelf.lock(), m_vRealSize.value());
|
g_pXWaylandManager->setWindowSize(m_pSelf.lock(), m_vRealSize.value());
|
||||||
|
|
||||||
if (OLDWORKSPACE && g_pCompositor->isWorkspaceSpecial(OLDWORKSPACE->m_iID) && g_pCompositor->getWindowsOnWorkspace(OLDWORKSPACE->m_iID) == 0 && *PCLOSEONLASTSPECIAL) {
|
if (OLDWORKSPACE && g_pCompositor->isWorkspaceSpecial(OLDWORKSPACE->m_iID) && OLDWORKSPACE->getWindows() == 0 && *PCLOSEONLASTSPECIAL) {
|
||||||
if (const auto PMONITOR = OLDWORKSPACE->m_pMonitor.lock(); PMONITOR)
|
if (const auto PMONITOR = OLDWORKSPACE->m_pMonitor.lock(); PMONITOR)
|
||||||
PMONITOR->setSpecialWorkspace(nullptr);
|
PMONITOR->setSpecialWorkspace(nullptr);
|
||||||
}
|
}
|
||||||
|
@ -516,7 +516,7 @@ void CWindow::onUnmap() {
|
||||||
|
|
||||||
std::erase_if(g_pCompositor->m_vWindowFocusHistory, [&](const auto& other) { return other.expired() || other.lock().get() == this; });
|
std::erase_if(g_pCompositor->m_vWindowFocusHistory, [&](const auto& other) { return other.expired() || other.lock().get() == this; });
|
||||||
|
|
||||||
if (*PCLOSEONLASTSPECIAL && g_pCompositor->getWindowsOnWorkspace(workspaceID()) == 0 && onSpecialWorkspace()) {
|
if (*PCLOSEONLASTSPECIAL && m_pWorkspace && m_pWorkspace->getWindows() == 0 && onSpecialWorkspace()) {
|
||||||
const auto PMONITOR = m_pMonitor.lock();
|
const auto PMONITOR = m_pMonitor.lock();
|
||||||
if (PMONITOR && PMONITOR->activeSpecialWorkspace && PMONITOR->activeSpecialWorkspace == m_pWorkspace)
|
if (PMONITOR && PMONITOR->activeSpecialWorkspace && PMONITOR->activeSpecialWorkspace == m_pWorkspace)
|
||||||
PMONITOR->setSpecialWorkspace(nullptr);
|
PMONITOR->setSpecialWorkspace(nullptr);
|
||||||
|
@ -527,8 +527,10 @@ void CWindow::onUnmap() {
|
||||||
if (PMONITOR && PMONITOR->solitaryClient.lock().get() == this)
|
if (PMONITOR && PMONITOR->solitaryClient.lock().get() == this)
|
||||||
PMONITOR->solitaryClient.reset();
|
PMONITOR->solitaryClient.reset();
|
||||||
|
|
||||||
g_pCompositor->updateWorkspaceWindows(workspaceID());
|
if (m_pWorkspace) {
|
||||||
g_pCompositor->updateWorkspaceWindowData(workspaceID());
|
m_pWorkspace->updateWindows();
|
||||||
|
m_pWorkspace->updateWindowData();
|
||||||
|
}
|
||||||
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID());
|
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID());
|
||||||
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
||||||
|
|
||||||
|
@ -855,8 +857,10 @@ void CWindow::createGroup() {
|
||||||
|
|
||||||
addWindowDeco(std::make_unique<CHyprGroupBarDecoration>(m_pSelf.lock()));
|
addWindowDeco(std::make_unique<CHyprGroupBarDecoration>(m_pSelf.lock()));
|
||||||
|
|
||||||
g_pCompositor->updateWorkspaceWindows(workspaceID());
|
if (m_pWorkspace) {
|
||||||
g_pCompositor->updateWorkspaceWindowData(workspaceID());
|
m_pWorkspace->updateWindows();
|
||||||
|
m_pWorkspace->updateWindowData();
|
||||||
|
}
|
||||||
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID());
|
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID());
|
||||||
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
||||||
|
|
||||||
|
@ -873,8 +877,10 @@ void CWindow::destroyGroup() {
|
||||||
m_sGroupData.pNextWindow.reset();
|
m_sGroupData.pNextWindow.reset();
|
||||||
m_sGroupData.head = false;
|
m_sGroupData.head = false;
|
||||||
updateWindowDecos();
|
updateWindowDecos();
|
||||||
g_pCompositor->updateWorkspaceWindows(workspaceID());
|
if (m_pWorkspace) {
|
||||||
g_pCompositor->updateWorkspaceWindowData(workspaceID());
|
m_pWorkspace->updateWindows();
|
||||||
|
m_pWorkspace->updateWindowData();
|
||||||
|
}
|
||||||
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID());
|
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID());
|
||||||
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
||||||
|
|
||||||
|
@ -909,8 +915,10 @@ void CWindow::destroyGroup() {
|
||||||
}
|
}
|
||||||
g_pKeybindManager->m_bGroupsLocked = GROUPSLOCKEDPREV;
|
g_pKeybindManager->m_bGroupsLocked = GROUPSLOCKEDPREV;
|
||||||
|
|
||||||
g_pCompositor->updateWorkspaceWindows(workspaceID());
|
if (m_pWorkspace) {
|
||||||
g_pCompositor->updateWorkspaceWindowData(workspaceID());
|
m_pWorkspace->updateWindows();
|
||||||
|
m_pWorkspace->updateWindowData();
|
||||||
|
}
|
||||||
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID());
|
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID());
|
||||||
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
||||||
|
|
||||||
|
@ -1507,7 +1515,7 @@ void CWindow::onX11Configure(CBox box) {
|
||||||
|
|
||||||
updateWindowDecos();
|
updateWindowDecos();
|
||||||
|
|
||||||
if (!g_pCompositor->isWorkspaceVisible(m_pWorkspace))
|
if (!m_pWorkspace || !m_pWorkspace->isVisible())
|
||||||
return; // further things are only for visible windows
|
return; // further things are only for visible windows
|
||||||
|
|
||||||
m_pWorkspace = g_pCompositor->getMonitorFromVector(m_vRealPosition.value() + m_vRealSize.value() / 2.f)->activeWorkspace;
|
m_pWorkspace = g_pCompositor->getMonitorFromVector(m_vRealPosition.value() + m_vRealSize.value() / 2.f)->activeWorkspace;
|
||||||
|
|
|
@ -422,10 +422,10 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) {
|
||||||
|
|
||||||
int count;
|
int count;
|
||||||
if (wantsCountGroup)
|
if (wantsCountGroup)
|
||||||
count = g_pCompositor->getGroupsOnWorkspace(m_iID, wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled),
|
count = getGroups(wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled),
|
||||||
wantsCountVisible ? std::optional<bool>(wantsCountVisible) : std::nullopt);
|
wantsCountVisible ? std::optional<bool>(wantsCountVisible) : std::nullopt);
|
||||||
else
|
else
|
||||||
count = g_pCompositor->getWindowsOnWorkspace(m_iID, wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled),
|
count = getWindows(wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled),
|
||||||
wantsCountVisible ? std::optional<bool>(wantsCountVisible) : std::nullopt);
|
wantsCountVisible ? std::optional<bool>(wantsCountVisible) : std::nullopt);
|
||||||
|
|
||||||
if (count != from)
|
if (count != from)
|
||||||
|
@ -456,10 +456,10 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) {
|
||||||
|
|
||||||
WORKSPACEID count;
|
WORKSPACEID count;
|
||||||
if (wantsCountGroup)
|
if (wantsCountGroup)
|
||||||
count = g_pCompositor->getGroupsOnWorkspace(m_iID, wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled),
|
count = getGroups(wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled),
|
||||||
wantsCountVisible ? std::optional<bool>(wantsCountVisible) : std::nullopt);
|
wantsCountVisible ? std::optional<bool>(wantsCountVisible) : std::nullopt);
|
||||||
else
|
else
|
||||||
count = g_pCompositor->getWindowsOnWorkspace(m_iID, wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled),
|
count = getWindows(wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled),
|
||||||
wantsCountVisible ? std::optional<bool>(wantsCountVisible) : std::nullopt);
|
wantsCountVisible ? std::optional<bool>(wantsCountVisible) : std::nullopt);
|
||||||
|
|
||||||
if (std::clamp(count, from, to) != count)
|
if (std::clamp(count, from, to) != count)
|
||||||
|
@ -525,3 +525,136 @@ bool CWorkspace::inert() {
|
||||||
MONITORID CWorkspace::monitorID() {
|
MONITORID CWorkspace::monitorID() {
|
||||||
return m_pMonitor ? m_pMonitor->ID : MONITOR_INVALID;
|
return m_pMonitor ? m_pMonitor->ID : MONITOR_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PHLWINDOW CWorkspace::getFullscreenWindow() {
|
||||||
|
for (auto const& w : g_pCompositor->m_vWindows) {
|
||||||
|
if (w->m_pWorkspace == m_pSelf && w->isFullscreen())
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CWorkspace::isVisible() {
|
||||||
|
return m_bVisible;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CWorkspace::isVisibleNotCovered() {
|
||||||
|
const auto PMONITOR = m_pMonitor.lock();
|
||||||
|
if (PMONITOR->activeSpecialWorkspace)
|
||||||
|
return PMONITOR->activeSpecialWorkspace->m_iID == m_iID;
|
||||||
|
|
||||||
|
return PMONITOR->activeWorkspace->m_iID == m_iID;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CWorkspace::getWindows(std::optional<bool> onlyTiled, std::optional<bool> onlyVisible) {
|
||||||
|
int no = 0;
|
||||||
|
for (auto const& w : g_pCompositor->m_vWindows) {
|
||||||
|
if (w->workspaceID() != m_iID || !w->m_bIsMapped)
|
||||||
|
continue;
|
||||||
|
if (onlyTiled.has_value() && w->m_bIsFloating == onlyTiled.value())
|
||||||
|
continue;
|
||||||
|
if (onlyVisible.has_value() && w->isHidden() == onlyVisible.value())
|
||||||
|
continue;
|
||||||
|
no++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return no;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CWorkspace::getGroups(std::optional<bool> onlyTiled, std::optional<bool> onlyVisible) {
|
||||||
|
int no = 0;
|
||||||
|
for (auto const& w : g_pCompositor->m_vWindows) {
|
||||||
|
if (w->workspaceID() != m_iID || !w->m_bIsMapped)
|
||||||
|
continue;
|
||||||
|
if (!w->m_sGroupData.head)
|
||||||
|
continue;
|
||||||
|
if (onlyTiled.has_value() && w->m_bIsFloating == onlyTiled.value())
|
||||||
|
continue;
|
||||||
|
if (onlyVisible.has_value() && w->isHidden() == onlyVisible.value())
|
||||||
|
continue;
|
||||||
|
no++;
|
||||||
|
}
|
||||||
|
return no;
|
||||||
|
}
|
||||||
|
|
||||||
|
PHLWINDOW CWorkspace::getFirstWindow() {
|
||||||
|
for (auto const& w : g_pCompositor->m_vWindows) {
|
||||||
|
if (w->m_pWorkspace == m_pSelf && w->m_bIsMapped && !w->isHidden())
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
PHLWINDOW CWorkspace::getTopLeftWindow() {
|
||||||
|
const auto PMONITOR = m_pMonitor.lock();
|
||||||
|
|
||||||
|
for (auto const& w : g_pCompositor->m_vWindows) {
|
||||||
|
if (w->m_pWorkspace != m_pSelf || !w->m_bIsMapped || w->isHidden())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const auto WINDOWIDEALBB = w->getWindowIdealBoundingBoxIgnoreReserved();
|
||||||
|
|
||||||
|
if (WINDOWIDEALBB.x <= PMONITOR->vecPosition.x + 1 && WINDOWIDEALBB.y <= PMONITOR->vecPosition.y + 1)
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CWorkspace::hasUrgentWindow() {
|
||||||
|
for (auto const& w : g_pCompositor->m_vWindows) {
|
||||||
|
if (w->m_pWorkspace == m_pSelf && w->m_bIsMapped && w->m_bIsUrgent)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWorkspace::updateWindowDecos() {
|
||||||
|
for (auto const& w : g_pCompositor->m_vWindows) {
|
||||||
|
if (w->m_pWorkspace != m_pSelf)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
w->updateWindowDecos();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWorkspace::updateWindowData() {
|
||||||
|
const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(m_pSelf.lock());
|
||||||
|
|
||||||
|
for (auto const& w : g_pCompositor->m_vWindows) {
|
||||||
|
if (w->m_pWorkspace != m_pSelf)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
w->updateWindowData(WORKSPACERULE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWorkspace::forceReportSizesToWindows() {
|
||||||
|
for (auto const& w : g_pCompositor->m_vWindows) {
|
||||||
|
if (w->m_pWorkspace != m_pSelf || !w->m_bIsMapped || w->isHidden())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
g_pXWaylandManager->setWindowSize(w, w->m_vRealSize.value(), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWorkspace::rename(const std::string& name) {
|
||||||
|
if (g_pCompositor->isWorkspaceSpecial(m_iID))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Debug::log(LOG, "CWorkspace::rename: Renaming workspace {} to '{}'", m_iID, name);
|
||||||
|
m_szName = name;
|
||||||
|
|
||||||
|
g_pEventManager->postEvent({"renameworkspace", std::to_string(m_iID) + "," + m_szName});
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWorkspace::updateWindows() {
|
||||||
|
for (auto const& w : g_pCompositor->m_vWindows) {
|
||||||
|
if (!w->m_bIsMapped || w->m_pWorkspace != m_pSelf)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
w->updateDynamicRules();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -63,23 +63,29 @@ class CWorkspace {
|
||||||
|
|
||||||
// Inert: destroyed and invalid. If this is true, release the ptr you have.
|
// Inert: destroyed and invalid. If this is true, release the ptr you have.
|
||||||
bool inert();
|
bool inert();
|
||||||
|
|
||||||
void startAnim(bool in, bool left, bool instant = false);
|
void startAnim(bool in, bool left, bool instant = false);
|
||||||
void setActive(bool on);
|
void setActive(bool on);
|
||||||
|
|
||||||
void moveToMonitor(const MONITORID&);
|
void moveToMonitor(const MONITORID&);
|
||||||
MONITORID monitorID();
|
MONITORID monitorID();
|
||||||
|
|
||||||
PHLWINDOW getLastFocusedWindow();
|
PHLWINDOW getLastFocusedWindow();
|
||||||
void rememberPrevWorkspace(const PHLWORKSPACE& prevWorkspace);
|
void rememberPrevWorkspace(const PHLWORKSPACE& prevWorkspace);
|
||||||
|
|
||||||
std::string getConfigName();
|
std::string getConfigName();
|
||||||
|
|
||||||
bool matchesStaticSelector(const std::string& selector);
|
bool matchesStaticSelector(const std::string& selector);
|
||||||
|
|
||||||
void markInert();
|
void markInert();
|
||||||
|
|
||||||
SWorkspaceIDName getPrevWorkspaceIDName(bool perMonitor) const;
|
SWorkspaceIDName getPrevWorkspaceIDName(bool perMonitor) const;
|
||||||
|
void updateWindowDecos();
|
||||||
|
void updateWindowData();
|
||||||
|
int getWindows(std::optional<bool> onlyTiled = {}, std::optional<bool> onlyVisible = {});
|
||||||
|
int getGroups(std::optional<bool> onlyTiled = {}, std::optional<bool> onlyVisible = {});
|
||||||
|
bool hasUrgentWindow();
|
||||||
|
PHLWINDOW getFirstWindow();
|
||||||
|
PHLWINDOW getTopLeftWindow();
|
||||||
|
PHLWINDOW getFullscreenWindow();
|
||||||
|
bool isVisible();
|
||||||
|
bool isVisibleNotCovered();
|
||||||
|
void rename(const std::string& name = "");
|
||||||
|
void forceReportSizesToWindows();
|
||||||
|
void updateWindows();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void init(PHLWORKSPACE self);
|
void init(PHLWORKSPACE self);
|
||||||
|
|
|
@ -509,7 +509,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
else if (*PNEWTAKESOVERFS == 1)
|
else if (*PNEWTAKESOVERFS == 1)
|
||||||
requestedInternalFSMode = PWINDOW->m_pWorkspace->m_efFullscreenMode;
|
requestedInternalFSMode = PWINDOW->m_pWorkspace->m_efFullscreenMode;
|
||||||
else if (*PNEWTAKESOVERFS == 2)
|
else if (*PNEWTAKESOVERFS == 2)
|
||||||
g_pCompositor->setWindowFullscreenInternal(g_pCompositor->getFullscreenWindowOnWorkspace(PWINDOW->m_pWorkspace->m_iID), FSMODE_NONE);
|
g_pCompositor->setWindowFullscreenInternal(PWINDOW->m_pWorkspace->getFullscreenWindow(), FSMODE_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PWINDOW->m_sWindowData.noFocus.valueOrDefault() && !PWINDOW->m_bNoInitialFocus &&
|
if (!PWINDOW->m_sWindowData.noFocus.valueOrDefault() && !PWINDOW->m_bNoInitialFocus &&
|
||||||
|
@ -531,7 +531,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
if (!PWINDOW->m_bNoInitialFocus && (requestedInternalFSMode.has_value() || requestedClientFSMode.has_value() || requestedFSState.has_value())) {
|
if (!PWINDOW->m_bNoInitialFocus && (requestedInternalFSMode.has_value() || requestedClientFSMode.has_value() || requestedFSState.has_value())) {
|
||||||
// fix fullscreen on requested (basically do a switcheroo)
|
// fix fullscreen on requested (basically do a switcheroo)
|
||||||
if (PWINDOW->m_pWorkspace->m_bHasFullscreenWindow)
|
if (PWINDOW->m_pWorkspace->m_bHasFullscreenWindow)
|
||||||
g_pCompositor->setWindowFullscreenInternal(g_pCompositor->getFullscreenWindowOnWorkspace(PWINDOW->m_pWorkspace->m_iID), FSMODE_NONE);
|
g_pCompositor->setWindowFullscreenInternal(PWINDOW->m_pWorkspace->getFullscreenWindow(), FSMODE_NONE);
|
||||||
|
|
||||||
PWINDOW->m_vRealPosition.warp();
|
PWINDOW->m_vRealPosition.warp();
|
||||||
PWINDOW->m_vRealSize.warp();
|
PWINDOW->m_vRealSize.warp();
|
||||||
|
@ -603,7 +603,8 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
// fix some xwayland apps that don't behave nicely
|
// fix some xwayland apps that don't behave nicely
|
||||||
PWINDOW->m_vReportedSize = PWINDOW->m_vPendingReportedSize;
|
PWINDOW->m_vReportedSize = PWINDOW->m_vPendingReportedSize;
|
||||||
|
|
||||||
g_pCompositor->updateWorkspaceWindows(PWINDOW->workspaceID());
|
if (PWINDOW->m_pWorkspace)
|
||||||
|
PWINDOW->m_pWorkspace->updateWindows();
|
||||||
|
|
||||||
if (PMONITOR && PWINDOW->isX11OverrideRedirect())
|
if (PMONITOR && PWINDOW->isX11OverrideRedirect())
|
||||||
PWINDOW->m_fX11SurfaceScaledBy = PMONITOR->scale;
|
PWINDOW->m_fX11SurfaceScaledBy = PMONITOR->scale;
|
||||||
|
@ -699,7 +700,7 @@ void Events::listener_unmapWindow(void* owner, void* data) {
|
||||||
g_pCompositor->setWindowFullscreenInternal(PWINDOWCANDIDATE, CURRENTFSMODE);
|
g_pCompositor->setWindowFullscreenInternal(PWINDOWCANDIDATE, CURRENTFSMODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PWINDOWCANDIDATE && g_pCompositor->getWindowsOnWorkspace(PWINDOW->workspaceID()) == 0)
|
if (!PWINDOWCANDIDATE && PWINDOW->m_pWorkspace && PWINDOW->m_pWorkspace->getWindows() == 0)
|
||||||
g_pInputManager->refocus();
|
g_pInputManager->refocus();
|
||||||
|
|
||||||
g_pInputManager->sendMotionEventsToFocused();
|
g_pInputManager->sendMotionEventsToFocused();
|
||||||
|
@ -729,7 +730,8 @@ void Events::listener_unmapWindow(void* owner, void* data) {
|
||||||
g_pInputManager->recheckIdleInhibitorStatus();
|
g_pInputManager->recheckIdleInhibitorStatus();
|
||||||
|
|
||||||
// force report all sizes (QT sometimes has an issue with this)
|
// force report all sizes (QT sometimes has an issue with this)
|
||||||
g_pCompositor->forceReportSizesToWindowsOnWorkspace(PWINDOW->workspaceID());
|
if (PWINDOW->m_pWorkspace)
|
||||||
|
PWINDOW->m_pWorkspace->forceReportSizesToWindows();
|
||||||
|
|
||||||
// update lastwindow after focus
|
// update lastwindow after focus
|
||||||
PWINDOW->onUnmap();
|
PWINDOW->onUnmap();
|
||||||
|
|
|
@ -264,7 +264,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) {
|
||||||
WORKSPACEID id = next ? g_pCompositor->m_pLastMonitor->activeWorkspaceID() : 0;
|
WORKSPACEID id = next ? g_pCompositor->m_pLastMonitor->activeWorkspaceID() : 0;
|
||||||
while (++id < LONG_MAX) {
|
while (++id < LONG_MAX) {
|
||||||
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(id);
|
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(id);
|
||||||
if (!invalidWSes.contains(id) && (!PWORKSPACE || g_pCompositor->getWindowsOnWorkspace(id) == 0)) {
|
if (!invalidWSes.contains(id) && (!PWORKSPACE || PWORKSPACE->getWindows() == 0)) {
|
||||||
result.id = id;
|
result.id = id;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -629,17 +629,17 @@ void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bo
|
||||||
if (!noFocus && !g_pCompositor->m_pLastMonitor->activeSpecialWorkspace &&
|
if (!noFocus && !g_pCompositor->m_pLastMonitor->activeSpecialWorkspace &&
|
||||||
!(g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_bPinned && g_pCompositor->m_pLastWindow->m_pMonitor == self)) {
|
!(g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_bPinned && g_pCompositor->m_pLastWindow->m_pMonitor == self)) {
|
||||||
static auto PFOLLOWMOUSE = CConfigValue<Hyprlang::INT>("input:follow_mouse");
|
static auto PFOLLOWMOUSE = CConfigValue<Hyprlang::INT>("input:follow_mouse");
|
||||||
auto pWindow = pWorkspace->m_bHasFullscreenWindow ? g_pCompositor->getFullscreenWindowOnWorkspace(pWorkspace->m_iID) : pWorkspace->getLastFocusedWindow();
|
auto pWindow = pWorkspace->m_bHasFullscreenWindow ? pWorkspace->getFullscreenWindow() : pWorkspace->getLastFocusedWindow();
|
||||||
|
|
||||||
if (!pWindow) {
|
if (!pWindow) {
|
||||||
if (*PFOLLOWMOUSE == 1)
|
if (*PFOLLOWMOUSE == 1)
|
||||||
pWindow = g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(), RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING);
|
pWindow = g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(), RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING);
|
||||||
|
|
||||||
if (!pWindow)
|
if (!pWindow)
|
||||||
pWindow = g_pCompositor->getTopLeftWindowOnWorkspace(pWorkspace->m_iID);
|
pWindow = pWorkspace->getTopLeftWindow();
|
||||||
|
|
||||||
if (!pWindow)
|
if (!pWindow)
|
||||||
pWindow = g_pCompositor->getFirstWindowOnWorkspace(pWorkspace->m_iID);
|
pWindow = pWorkspace->getFirstWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pCompositor->focusWindow(pWindow);
|
g_pCompositor->focusWindow(pWindow);
|
||||||
|
|
|
@ -514,7 +514,7 @@ void CHyprDwindleLayout::calculateWorkspace(const PHLWORKSPACE& pWorkspace) {
|
||||||
|
|
||||||
if (pWorkspace->m_bHasFullscreenWindow) {
|
if (pWorkspace->m_bHasFullscreenWindow) {
|
||||||
// massive hack from the fullscreen func
|
// massive hack from the fullscreen func
|
||||||
const auto PFULLWINDOW = g_pCompositor->getFullscreenWindowOnWorkspace(pWorkspace->m_iID);
|
const auto PFULLWINDOW = pWorkspace->getFullscreenWindow();
|
||||||
|
|
||||||
if (pWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN) {
|
if (pWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN) {
|
||||||
PFULLWINDOW->m_vRealPosition = PMONITOR->vecPosition;
|
PFULLWINDOW->m_vRealPosition = PMONITOR->vecPosition;
|
||||||
|
@ -1054,7 +1054,7 @@ void CHyprDwindleLayout::moveToRoot(PHLWINDOW pWindow, bool stable) {
|
||||||
std::swap(pRoot->children[0], pRoot->children[1]);
|
std::swap(pRoot->children[0], pRoot->children[1]);
|
||||||
|
|
||||||
// if the workspace is visible, recalculate layout
|
// if the workspace is visible, recalculate layout
|
||||||
if (g_pCompositor->isWorkspaceVisible(pWindow->m_pWorkspace))
|
if (pWindow->m_pWorkspace && pWindow->m_pWorkspace->isVisible())
|
||||||
pRoot->recalcSizePosRecursive();
|
pRoot->recalcSizePosRecursive();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1094,7 +1094,7 @@ Vector2D CHyprDwindleLayout::predictSizeForNewWindowTiled() {
|
||||||
PHLWINDOW candidate = g_pCompositor->m_pLastWindow.lock();
|
PHLWINDOW candidate = g_pCompositor->m_pLastWindow.lock();
|
||||||
|
|
||||||
if (!candidate)
|
if (!candidate)
|
||||||
candidate = g_pCompositor->getFirstWindowOnWorkspace(g_pCompositor->m_pLastMonitor->activeWorkspace->m_iID);
|
candidate = g_pCompositor->m_pLastMonitor->activeWorkspace->getFirstWindow();
|
||||||
|
|
||||||
// create a fake node
|
// create a fake node
|
||||||
SDwindleNodeData node;
|
SDwindleNodeData node;
|
||||||
|
|
|
@ -187,7 +187,7 @@ bool IHyprLayout::onWindowCreatedAutoGroup(PHLWINDOW pWindow) {
|
||||||
static auto PAUTOGROUP = CConfigValue<Hyprlang::INT>("group:auto_group");
|
static auto PAUTOGROUP = CConfigValue<Hyprlang::INT>("group:auto_group");
|
||||||
const PHLWINDOW OPENINGON = g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_pWorkspace == pWindow->m_pWorkspace ?
|
const PHLWINDOW OPENINGON = g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_pWorkspace == pWindow->m_pWorkspace ?
|
||||||
g_pCompositor->m_pLastWindow.lock() :
|
g_pCompositor->m_pLastWindow.lock() :
|
||||||
g_pCompositor->getFirstWindowOnWorkspace(pWindow->workspaceID());
|
(pWindow->m_pWorkspace ? pWindow->m_pWorkspace->getFirstWindow() : nullptr);
|
||||||
const bool FLOATEDINTOTILED = pWindow->m_bIsFloating && !OPENINGON->m_bIsFloating;
|
const bool FLOATEDINTOTILED = pWindow->m_bIsFloating && !OPENINGON->m_bIsFloating;
|
||||||
const bool SWALLOWING = pWindow->m_pSwallowed || pWindow->m_bGroupSwallowed;
|
const bool SWALLOWING = pWindow->m_pSwallowed || pWindow->m_bGroupSwallowed;
|
||||||
|
|
||||||
|
@ -714,7 +714,7 @@ void IHyprLayout::changeWindowFloatingMode(PHLWINDOW pWindow) {
|
||||||
const auto PWORKSPACE = PNEWMON->activeSpecialWorkspace ? PNEWMON->activeSpecialWorkspace : PNEWMON->activeWorkspace;
|
const auto PWORKSPACE = PNEWMON->activeSpecialWorkspace ? PNEWMON->activeSpecialWorkspace : PNEWMON->activeWorkspace;
|
||||||
|
|
||||||
if (PWORKSPACE->m_bHasFullscreenWindow)
|
if (PWORKSPACE->m_bHasFullscreenWindow)
|
||||||
g_pCompositor->setWindowFullscreenInternal(g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID), FSMODE_NONE);
|
g_pCompositor->setWindowFullscreenInternal(PWORKSPACE->getFullscreenWindow(), FSMODE_NONE);
|
||||||
|
|
||||||
// save real pos cuz the func applies the default 5,5 mid
|
// save real pos cuz the func applies the default 5,5 mid
|
||||||
const auto PSAVEDPOS = pWindow->m_vRealPosition.goal();
|
const auto PSAVEDPOS = pWindow->m_vRealPosition.goal();
|
||||||
|
@ -803,7 +803,7 @@ PHLWINDOW IHyprLayout::getNextWindowCandidate(PHLWINDOW pWindow) {
|
||||||
|
|
||||||
// first of all, if this is a fullscreen workspace,
|
// first of all, if this is a fullscreen workspace,
|
||||||
if (PWORKSPACE->m_bHasFullscreenWindow)
|
if (PWORKSPACE->m_bHasFullscreenWindow)
|
||||||
return g_pCompositor->getFullscreenWindowOnWorkspace(pWindow->workspaceID());
|
return PWORKSPACE->getFullscreenWindow();
|
||||||
|
|
||||||
if (pWindow->m_bIsFloating) {
|
if (pWindow->m_bIsFloating) {
|
||||||
|
|
||||||
|
@ -842,10 +842,10 @@ PHLWINDOW IHyprLayout::getNextWindowCandidate(PHLWINDOW pWindow) {
|
||||||
auto pWindowCandidate = g_pCompositor->vectorToWindowUnified(pWindow->middle(), RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING);
|
auto pWindowCandidate = g_pCompositor->vectorToWindowUnified(pWindow->middle(), RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING);
|
||||||
|
|
||||||
if (!pWindowCandidate)
|
if (!pWindowCandidate)
|
||||||
pWindowCandidate = g_pCompositor->getTopLeftWindowOnWorkspace(pWindow->workspaceID());
|
pWindowCandidate = PWORKSPACE->getTopLeftWindow();
|
||||||
|
|
||||||
if (!pWindowCandidate)
|
if (!pWindowCandidate)
|
||||||
pWindowCandidate = g_pCompositor->getFirstWindowOnWorkspace(pWindow->workspaceID());
|
pWindowCandidate = PWORKSPACE->getFirstWindow();
|
||||||
|
|
||||||
if (!pWindowCandidate || pWindow == pWindowCandidate || !pWindowCandidate->m_bIsMapped || pWindowCandidate->isHidden() || pWindowCandidate->m_bX11ShouldntFocus ||
|
if (!pWindowCandidate || pWindow == pWindowCandidate || !pWindowCandidate->m_bIsMapped || pWindowCandidate->isHidden() || pWindowCandidate->m_bX11ShouldntFocus ||
|
||||||
pWindowCandidate->isX11OverrideRedirect() || pWindowCandidate->m_pMonitor != g_pCompositor->m_pLastMonitor)
|
pWindowCandidate->isX11OverrideRedirect() || pWindowCandidate->m_pMonitor != g_pCompositor->m_pLastMonitor)
|
||||||
|
|
|
@ -298,7 +298,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) {
|
||||||
|
|
||||||
if (pWorkspace->m_bHasFullscreenWindow) {
|
if (pWorkspace->m_bHasFullscreenWindow) {
|
||||||
// massive hack from the fullscreen func
|
// massive hack from the fullscreen func
|
||||||
const auto PFULLWINDOW = g_pCompositor->getFullscreenWindowOnWorkspace(pWorkspace->m_iID);
|
const auto PFULLWINDOW = pWorkspace->getFullscreenWindow();
|
||||||
|
|
||||||
if (pWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN) {
|
if (pWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN) {
|
||||||
PFULLWINDOW->m_vRealPosition = PMONITOR->vecPosition;
|
PFULLWINDOW->m_vRealPosition = PMONITOR->vecPosition;
|
||||||
|
|
|
@ -149,7 +149,7 @@ void CAnimationManager::tick() {
|
||||||
animationsDisabled = animationsDisabled || PLAYER->noAnimations;
|
animationsDisabled = animationsDisabled || PLAYER->noAnimations;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool VISIBLE = PWINDOW && PWINDOW->m_pWorkspace ? g_pCompositor->isWorkspaceVisible(PWINDOW->m_pWorkspace) : true;
|
const bool VISIBLE = PWINDOW && PWINDOW->m_pWorkspace ? PWINDOW->m_pWorkspace->isVisible() : true;
|
||||||
|
|
||||||
// beziers are with a switch unforto
|
// beziers are with a switch unforto
|
||||||
// TODO: maybe do something cleaner
|
// TODO: maybe do something cleaner
|
||||||
|
|
|
@ -1036,8 +1036,12 @@ static SDispatchResult toggleActiveFloatingCore(std::string args, std::optional<
|
||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->changeWindowFloatingMode(PWINDOW);
|
g_pLayoutManager->getCurrentLayout()->changeWindowFloatingMode(PWINDOW);
|
||||||
}
|
}
|
||||||
g_pCompositor->updateWorkspaceWindows(PWINDOW->workspaceID());
|
|
||||||
g_pCompositor->updateWorkspaceWindowData(PWINDOW->workspaceID());
|
if (PWINDOW->m_pWorkspace) {
|
||||||
|
PWINDOW->m_pWorkspace->updateWindows();
|
||||||
|
PWINDOW->m_pWorkspace->updateWindowData();
|
||||||
|
}
|
||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PWINDOW->monitorID());
|
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PWINDOW->monitorID());
|
||||||
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
||||||
|
|
||||||
|
@ -1305,7 +1309,7 @@ SDispatchResult CKeybindManager::moveActiveToWorkspace(std::string args) {
|
||||||
g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW, pWorkspace);
|
g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW, pWorkspace);
|
||||||
}
|
}
|
||||||
|
|
||||||
POLDWS->m_pLastFocusedWindow = g_pCompositor->getFirstWindowOnWorkspace(POLDWS->m_iID);
|
POLDWS->m_pLastFocusedWindow = POLDWS->getFirstWindow();
|
||||||
|
|
||||||
if (pWorkspace->m_bIsSpecialWorkspace)
|
if (pWorkspace->m_bIsSpecialWorkspace)
|
||||||
pMonitor->setSpecialWorkspace(pWorkspace);
|
pMonitor->setSpecialWorkspace(pWorkspace);
|
||||||
|
@ -1799,10 +1803,14 @@ SDispatchResult CKeybindManager::renameWorkspace(std::string args) {
|
||||||
if (FIRSTSPACEPOS != std::string::npos) {
|
if (FIRSTSPACEPOS != std::string::npos) {
|
||||||
int workspace = std::stoi(args.substr(0, FIRSTSPACEPOS));
|
int workspace = std::stoi(args.substr(0, FIRSTSPACEPOS));
|
||||||
std::string name = args.substr(FIRSTSPACEPOS + 1);
|
std::string name = args.substr(FIRSTSPACEPOS + 1);
|
||||||
g_pCompositor->renameWorkspace(workspace, name);
|
if (const auto& PWS = g_pCompositor->getWorkspaceByID(workspace); PWS)
|
||||||
} else {
|
PWS->rename(name);
|
||||||
g_pCompositor->renameWorkspace(std::stoi(args), "");
|
else
|
||||||
}
|
return {.success = false, .error = "No such workspace"};
|
||||||
|
} else if (const auto& PWS = g_pCompositor->getWorkspaceByID(std::stoi(args)); PWS)
|
||||||
|
PWS->rename("");
|
||||||
|
else
|
||||||
|
return {.success = false, .error = "No such workspace"};
|
||||||
} catch (std::exception& e) {
|
} catch (std::exception& e) {
|
||||||
Debug::log(ERR, "Invalid arg in renameWorkspace, expected numeric id only or a numeric id and string name. \"{}\": \"{}\"", args, e.what());
|
Debug::log(ERR, "Invalid arg in renameWorkspace, expected numeric id only or a numeric id and string name. \"{}\": \"{}\"", args, e.what());
|
||||||
return {.success = false, .error = std::format("Invalid arg in renameWorkspace, expected numeric id only or a numeric id and string name. \"{}\": \"{}\"", args, e.what())};
|
return {.success = false, .error = std::format("Invalid arg in renameWorkspace, expected numeric id only or a numeric id and string name. \"{}\": \"{}\"", args, e.what())};
|
||||||
|
@ -2069,9 +2077,9 @@ SDispatchResult CKeybindManager::circleNext(std::string arg) {
|
||||||
|
|
||||||
if (g_pCompositor->m_pLastWindow.expired()) {
|
if (g_pCompositor->m_pLastWindow.expired()) {
|
||||||
// if we have a clear focus, find the first window and get the next focusable.
|
// if we have a clear focus, find the first window and get the next focusable.
|
||||||
if (g_pCompositor->getWindowsOnWorkspace(g_pCompositor->m_pLastMonitor->activeWorkspaceID()) > 0) {
|
const auto PWS = g_pCompositor->m_pLastMonitor->activeWorkspace;
|
||||||
const auto PWINDOW = g_pCompositor->getFirstWindowOnWorkspace(g_pCompositor->m_pLastMonitor->activeWorkspaceID());
|
if (PWS && PWS->getWindows() > 0) {
|
||||||
|
const auto PWINDOW = PWS->getFirstWindow();
|
||||||
switchToWindow(PWINDOW);
|
switchToWindow(PWINDOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2117,7 +2125,7 @@ SDispatchResult CKeybindManager::focusWindow(std::string regexp) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PWORKSPACE->m_bHasFullscreenWindow) {
|
if (PWORKSPACE->m_bHasFullscreenWindow) {
|
||||||
const auto FSWINDOW = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
|
const auto FSWINDOW = PWORKSPACE->getFullscreenWindow();
|
||||||
const auto FSMODE = PWORKSPACE->m_efFullscreenMode;
|
const auto FSMODE = PWORKSPACE->m_efFullscreenMode;
|
||||||
|
|
||||||
if (PWINDOW->m_bIsFloating) {
|
if (PWINDOW->m_bIsFloating) {
|
||||||
|
|
|
@ -63,7 +63,7 @@ void CInputManager::recheckIdleInhibitorStatus() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (w->m_eIdleInhibitMode == IDLEINHIBIT_FULLSCREEN && w->isFullscreen() && g_pCompositor->isWorkspaceVisible(w->m_pWorkspace)) {
|
if (w->m_eIdleInhibitMode == IDLEINHIBIT_FULLSCREEN && w->isFullscreen() && w->m_pWorkspace && w->m_pWorkspace->isVisible()) {
|
||||||
PROTO::idle->setInhibit(true);
|
PROTO::idle->setInhibit(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -294,7 +294,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
||||||
const auto PWORKSPACE = PMONITOR->activeWorkspace;
|
const auto PWORKSPACE = PMONITOR->activeWorkspace;
|
||||||
const auto PWINDOWIDEAL = g_pCompositor->vectorToWindowUnified(mouseCoords, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING);
|
const auto PWINDOWIDEAL = g_pCompositor->vectorToWindowUnified(mouseCoords, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING);
|
||||||
if (PWORKSPACE->m_bHasFullscreenWindow && !foundSurface && PWORKSPACE->m_efFullscreenMode == FSMODE_FULLSCREEN) {
|
if (PWORKSPACE->m_bHasFullscreenWindow && !foundSurface && PWORKSPACE->m_efFullscreenMode == FSMODE_FULLSCREEN) {
|
||||||
pFoundWindow = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
|
pFoundWindow = PWORKSPACE->getFullscreenWindow();
|
||||||
|
|
||||||
if (!pFoundWindow) {
|
if (!pFoundWindow) {
|
||||||
// what the fuck, somehow happens occasionally??
|
// what the fuck, somehow happens occasionally??
|
||||||
|
@ -325,7 +325,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
||||||
pFoundWindow = g_pCompositor->vectorToWindowUnified(mouseCoords, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING);
|
pFoundWindow = g_pCompositor->vectorToWindowUnified(mouseCoords, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING);
|
||||||
|
|
||||||
if (pFoundWindow && !pFoundWindow->onSpecialWorkspace()) {
|
if (pFoundWindow && !pFoundWindow->onSpecialWorkspace()) {
|
||||||
pFoundWindow = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
|
pFoundWindow = PWORKSPACE->getFullscreenWindow();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// if we have a maximized window, allow focusing on a bar or something if in reserved area.
|
// if we have a maximized window, allow focusing on a bar or something if in reserved area.
|
||||||
|
@ -339,7 +339,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
||||||
pFoundWindow = g_pCompositor->vectorToWindowUnified(mouseCoords, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING);
|
pFoundWindow = g_pCompositor->vectorToWindowUnified(mouseCoords, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING);
|
||||||
|
|
||||||
if (!(pFoundWindow && pFoundWindow->m_bIsFloating && pFoundWindow->m_bCreatedOverFullscreen))
|
if (!(pFoundWindow && pFoundWindow->m_bIsFloating && pFoundWindow->m_bCreatedOverFullscreen))
|
||||||
pFoundWindow = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
|
pFoundWindow = PWORKSPACE->getFullscreenWindow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1402,7 +1402,7 @@ void CInputManager::refocusLastWindow(PHLMONITOR pMonitor) {
|
||||||
foundSurface = nullptr;
|
foundSurface = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!foundSurface && g_pCompositor->m_pLastWindow.lock() && g_pCompositor->isWorkspaceVisibleNotCovered(g_pCompositor->m_pLastWindow->m_pWorkspace)) {
|
if (!foundSurface && g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_pWorkspace && g_pCompositor->m_pLastWindow->m_pWorkspace->isVisibleNotCovered()) {
|
||||||
// then the last focused window if we're on the same workspace as it
|
// then the last focused window if we're on the same workspace as it
|
||||||
const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock();
|
const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock();
|
||||||
g_pCompositor->focusWindow(PLASTWINDOW);
|
g_pCompositor->focusWindow(PLASTWINDOW);
|
||||||
|
|
|
@ -243,8 +243,7 @@ void CInputManager::updateWorkspaceSwipe(double delta) {
|
||||||
m_sActiveSwipe.delta = std::clamp(m_sActiveSwipe.delta, (double)-SWIPEDISTANCE, (double)SWIPEDISTANCE);
|
m_sActiveSwipe.delta = std::clamp(m_sActiveSwipe.delta, (double)-SWIPEDISTANCE, (double)SWIPEDISTANCE);
|
||||||
|
|
||||||
if ((m_sActiveSwipe.pWorkspaceBegin->m_iID == workspaceIDLeft && *PSWIPENEW && (m_sActiveSwipe.delta < 0)) ||
|
if ((m_sActiveSwipe.pWorkspaceBegin->m_iID == workspaceIDLeft && *PSWIPENEW && (m_sActiveSwipe.delta < 0)) ||
|
||||||
(m_sActiveSwipe.delta > 0 && g_pCompositor->getWindowsOnWorkspace(m_sActiveSwipe.pWorkspaceBegin->m_iID) == 0 &&
|
(m_sActiveSwipe.delta > 0 && m_sActiveSwipe.pWorkspaceBegin->getWindows() == 0 && workspaceIDRight <= m_sActiveSwipe.pWorkspaceBegin->m_iID) ||
|
||||||
workspaceIDRight <= m_sActiveSwipe.pWorkspaceBegin->m_iID) ||
|
|
||||||
(m_sActiveSwipe.delta < 0 && m_sActiveSwipe.pWorkspaceBegin->m_iID <= workspaceIDLeft)) {
|
(m_sActiveSwipe.delta < 0 && m_sActiveSwipe.pWorkspaceBegin->m_iID <= workspaceIDLeft)) {
|
||||||
|
|
||||||
m_sActiveSwipe.delta = 0;
|
m_sActiveSwipe.delta = 0;
|
||||||
|
@ -270,7 +269,7 @@ void CInputManager::updateWorkspaceSwipe(double delta) {
|
||||||
else
|
else
|
||||||
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0));
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0));
|
||||||
|
|
||||||
g_pCompositor->updateWorkspaceWindowDecos(m_sActiveSwipe.pWorkspaceBegin->m_iID);
|
m_sActiveSwipe.pWorkspaceBegin->updateWindowDecos();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_sActiveSwipe.delta = 0;
|
m_sActiveSwipe.delta = 0;
|
||||||
|
@ -297,7 +296,7 @@ void CInputManager::updateWorkspaceSwipe(double delta) {
|
||||||
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0));
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pCompositor->updateWorkspaceWindowDecos(workspaceIDLeft);
|
PWORKSPACE->updateWindowDecos();
|
||||||
} else {
|
} else {
|
||||||
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceIDRight);
|
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceIDRight);
|
||||||
|
|
||||||
|
@ -310,7 +309,7 @@ void CInputManager::updateWorkspaceSwipe(double delta) {
|
||||||
else
|
else
|
||||||
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0));
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0));
|
||||||
|
|
||||||
g_pCompositor->updateWorkspaceWindowDecos(m_sActiveSwipe.pWorkspaceBegin->m_iID);
|
m_sActiveSwipe.pWorkspaceBegin->updateWindowDecos();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_sActiveSwipe.delta = 0;
|
m_sActiveSwipe.delta = 0;
|
||||||
|
@ -337,12 +336,12 @@ void CInputManager::updateWorkspaceSwipe(double delta) {
|
||||||
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0));
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pCompositor->updateWorkspaceWindowDecos(workspaceIDRight);
|
PWORKSPACE->updateWindowDecos();
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor.lock());
|
g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor.lock());
|
||||||
|
|
||||||
g_pCompositor->updateWorkspaceWindowDecos(m_sActiveSwipe.pWorkspaceBegin->m_iID);
|
m_sActiveSwipe.pWorkspaceBegin->updateWindowDecos();
|
||||||
|
|
||||||
if (*PSWIPEFOREVER) {
|
if (*PSWIPEFOREVER) {
|
||||||
if (abs(m_sActiveSwipe.delta) >= SWIPEDISTANCE) {
|
if (abs(m_sActiveSwipe.delta) >= SWIPEDISTANCE) {
|
||||||
|
|
|
@ -310,8 +310,8 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor) {
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// if the window is being moved to a workspace that is not invisible, and the alpha is > 0.F, render it.
|
// if the window is being moved to a workspace that is not invisible, and the alpha is > 0.F, render it.
|
||||||
if (pWindow->m_iMonitorMovedFrom != -1 && pWindow->m_fMovingToWorkspaceAlpha.isBeingAnimated() && pWindow->m_fMovingToWorkspaceAlpha.value() > 0.F &&
|
if (pWindow->m_iMonitorMovedFrom != -1 && pWindow->m_fMovingToWorkspaceAlpha.isBeingAnimated() && pWindow->m_fMovingToWorkspaceAlpha.value() > 0.F && pWindow->m_pWorkspace &&
|
||||||
!g_pCompositor->isWorkspaceVisible(pWindow->m_pWorkspace))
|
!pWindow->m_pWorkspace->isVisible())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
const auto PWINDOWWORKSPACE = pWindow->m_pWorkspace;
|
const auto PWINDOWWORKSPACE = pWindow->m_pWorkspace;
|
||||||
|
@ -324,18 +324,18 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor) {
|
||||||
pWindow->m_fAlpha.value() == 0)
|
pWindow->m_fAlpha.value() == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!PWINDOWWORKSPACE->m_vRenderOffset.isBeingAnimated() && !PWINDOWWORKSPACE->m_fAlpha.isBeingAnimated() && !g_pCompositor->isWorkspaceVisible(pWindow->m_pWorkspace))
|
if (!PWINDOWWORKSPACE->m_vRenderOffset.isBeingAnimated() && !PWINDOWWORKSPACE->m_fAlpha.isBeingAnimated() && !PWINDOWWORKSPACE->isVisible())
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pWindow->m_pMonitor == pMonitor)
|
if (pWindow->m_pMonitor == pMonitor)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (!g_pCompositor->isWorkspaceVisible(pWindow->m_pWorkspace) && pWindow->m_pMonitor != pMonitor)
|
if (!(!pWindow->m_pWorkspace || !pWindow->m_pWorkspace->isVisible()) && pWindow->m_pMonitor != pMonitor)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// if not, check if it maybe is active on a different monitor.
|
// if not, check if it maybe is active on a different monitor.
|
||||||
if (g_pCompositor->isWorkspaceVisible(pWindow->m_pWorkspace) && pWindow->m_bIsFloating /* tiled windows can't be multi-ws */)
|
if (pWindow->m_pWorkspace && pWindow->m_pWorkspace->isVisible() && pWindow->m_bIsFloating /* tiled windows can't be multi-ws */)
|
||||||
return !pWindow->isFullscreen(); // Do not draw fullscreen windows on other monitors
|
return !pWindow->isFullscreen(); // Do not draw fullscreen windows on other monitors
|
||||||
|
|
||||||
if (pMonitor->activeSpecialWorkspace == pWindow->m_pWorkspace)
|
if (pMonitor->activeSpecialWorkspace == pWindow->m_pWorkspace)
|
||||||
|
@ -376,7 +376,7 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow) {
|
||||||
if (pWindow->m_bPinned || PWORKSPACE->m_bForceRendering)
|
if (pWindow->m_bPinned || PWORKSPACE->m_bForceRendering)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (g_pCompositor->isWorkspaceVisible(pWindow->m_pWorkspace))
|
if (PWORKSPACE && PWORKSPACE->isVisible())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
for (auto const& m : g_pCompositor->m_vMonitors) {
|
for (auto const& m : g_pCompositor->m_vMonitors) {
|
||||||
|
@ -591,7 +591,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, timespe
|
||||||
decorate = false;
|
decorate = false;
|
||||||
|
|
||||||
// whether to use m_fMovingToWorkspaceAlpha, only if fading out into an invisible ws
|
// whether to use m_fMovingToWorkspaceAlpha, only if fading out into an invisible ws
|
||||||
const bool USE_WORKSPACE_FADE_ALPHA = pWindow->m_iMonitorMovedFrom != -1 && !g_pCompositor->isWorkspaceVisible(pWindow->m_pWorkspace);
|
const bool USE_WORKSPACE_FADE_ALPHA = pWindow->m_iMonitorMovedFrom != -1 && (!PWORKSPACE || !PWORKSPACE->isVisible());
|
||||||
const bool DONT_BLUR = pWindow->m_sWindowData.noBlur.valueOrDefault() || pWindow->m_sWindowData.RGBX.valueOrDefault() || pWindow->opaque();
|
const bool DONT_BLUR = pWindow->m_sWindowData.noBlur.valueOrDefault() || pWindow->m_sWindowData.RGBX.valueOrDefault() || pWindow->opaque();
|
||||||
|
|
||||||
renderdata.surface = pWindow->m_pWLSurface->resource();
|
renderdata.surface = pWindow->m_pWLSurface->resource();
|
||||||
|
@ -933,7 +933,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
|
||||||
// Render layer surfaces below windows for monitor
|
// Render layer surfaces below windows for monitor
|
||||||
// if we have a fullscreen, opaque window that convers the screen, we can skip this.
|
// if we have a fullscreen, opaque window that convers the screen, we can skip this.
|
||||||
// TODO: check better with solitary after MR for tearing.
|
// TODO: check better with solitary after MR for tearing.
|
||||||
const auto PFULLWINDOW = pWorkspace ? g_pCompositor->getFullscreenWindowOnWorkspace(pWorkspace->m_iID) : nullptr;
|
const auto PFULLWINDOW = pWorkspace ? pWorkspace->getFullscreenWindow() : nullptr;
|
||||||
if (!pWorkspace->m_bHasFullscreenWindow || pWorkspace->m_efFullscreenMode != FSMODE_FULLSCREEN || !PFULLWINDOW || PFULLWINDOW->m_vRealSize.isBeingAnimated() ||
|
if (!pWorkspace->m_bHasFullscreenWindow || pWorkspace->m_efFullscreenMode != FSMODE_FULLSCREEN || !PFULLWINDOW || PFULLWINDOW->m_vRealSize.isBeingAnimated() ||
|
||||||
!PFULLWINDOW->opaque() || pWorkspace->m_vRenderOffset.value() != Vector2D{} || g_pHyprOpenGL->preBlurQueued()) {
|
!PFULLWINDOW->opaque() || pWorkspace->m_vRenderOffset.value() != Vector2D{} || g_pHyprOpenGL->preBlurQueued()) {
|
||||||
|
|
||||||
|
@ -2639,7 +2639,7 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) {
|
||||||
PWORKSPACE->m_vRenderOffset.value() != Vector2D{})
|
PWORKSPACE->m_vRenderOffset.value() != Vector2D{})
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto PCANDIDATE = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
|
const auto PCANDIDATE = PWORKSPACE->getFullscreenWindow();
|
||||||
|
|
||||||
if (!PCANDIDATE)
|
if (!PCANDIDATE)
|
||||||
return; // ????
|
return; // ????
|
||||||
|
|
Loading…
Reference in a new issue