Skip to content

Commit

Permalink
Merge branch 'hyprwm:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
Jakenv authored Jan 5, 2025
2 parents cf8dcd1 + b0bae15 commit 563ea60
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 19 deletions.
26 changes: 13 additions & 13 deletions src/events/Windows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,16 +121,6 @@ void Events::listener_mapWindow(void* owner, void* data) {

PWINDOW->m_bX11ShouldntFocus = PWINDOW->m_bX11ShouldntFocus || (PWINDOW->m_bIsX11 && PWINDOW->isX11OverrideRedirect() && !PWINDOW->m_pXWaylandSurface->wantsFocus());

if (PWORKSPACE->m_bDefaultFloating)
PWINDOW->m_bIsFloating = true;

if (PWORKSPACE->m_bDefaultPseudo) {
PWINDOW->m_bIsPseudotiled = true;
CBox desiredGeometry = {0};
g_pXWaylandManager->getGeometryForWindow(PWINDOW, &desiredGeometry);
PWINDOW->m_vPseudoSize = Vector2D(desiredGeometry.width, desiredGeometry.height);
}

// window rules
PWINDOW->m_vMatchedRules = g_pConfigManager->getMatchingRules(PWINDOW, false);
std::optional<eFullscreenMode> requestedInternalFSMode, requestedClientFSMode;
Expand Down Expand Up @@ -171,6 +161,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
PMONITOR = PMONITORFROMID;
}
PWINDOW->m_pWorkspace = PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace;
PWORKSPACE = PWINDOW->m_pWorkspace;

Debug::log(LOG, "Rule monitor, applying to {:mw}", PWINDOW);
} catch (std::exception& e) { Debug::log(ERR, "Rule monitor failed, rule: {} -> {} | err: {}", r->szRule, r->szValue, e.what()); }
Expand All @@ -180,11 +171,10 @@ void Events::listener_mapWindow(void* owner, void* data) {
// check if it isnt unset
const auto WORKSPACERQ = r->szRule.substr(r->szRule.find_first_of(' ') + 1);

if (WORKSPACERQ == "unset") {
if (WORKSPACERQ == "unset")
requestedWorkspace = "";
} else {
else
requestedWorkspace = WORKSPACERQ;
}

const auto JUSTWORKSPACE = WORKSPACERQ.contains(' ') ? WORKSPACERQ.substr(0, WORKSPACERQ.find_first_of(' ')) : WORKSPACERQ;

Expand Down Expand Up @@ -347,6 +337,16 @@ void Events::listener_mapWindow(void* owner, void* data) {
workspaceSilent = false;
}

if (PWORKSPACE->m_bDefaultFloating)
PWINDOW->m_bIsFloating = true;

if (PWORKSPACE->m_bDefaultPseudo) {
PWINDOW->m_bIsPseudotiled = true;
CBox desiredGeometry = {0};
g_pXWaylandManager->getGeometryForWindow(PWINDOW, &desiredGeometry);
PWINDOW->m_vPseudoSize = Vector2D(desiredGeometry.width, desiredGeometry.height);
}

PWINDOW->updateWindowData();

// Verify window swallowing. Get the swallower before calling onWindowCreated(PWINDOW) because getSwallower() wouldn't get it after if PWINDOW gets auto grouped.
Expand Down
21 changes: 16 additions & 5 deletions src/layout/MasterLayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -978,7 +978,7 @@ void CHyprMasterLayout::alterSplitRatio(PHLWINDOW pWindow, float ratio, bool exa
recalculateMonitor(pWindow->monitorID());
}

PHLWINDOW CHyprMasterLayout::getNextWindow(PHLWINDOW pWindow, bool next) {
PHLWINDOW CHyprMasterLayout::getNextWindow(PHLWINDOW pWindow, bool next, bool loop) {
if (!isWindowTiled(pWindow))
return nullptr;

Expand All @@ -997,6 +997,13 @@ PHLWINDOW CHyprMasterLayout::getNextWindow(PHLWINDOW pWindow, bool next) {
CANDIDATE =
std::find_if(nodes.begin(), nodes.end(), [&](const auto& other) { return other != *PNODE && ISMASTER != other.isMaster && other.workspaceID == PNODE->workspaceID; });

if (CANDIDATE != nodes.end() && !loop) {
if (CANDIDATE->isMaster && next)
return nullptr;
if (!CANDIDATE->isMaster && ISMASTER && !next)
return nullptr;
}

return CANDIDATE == nodes.end() ? nullptr : CANDIDATE->pWindow.lock();
}

Expand Down Expand Up @@ -1110,15 +1117,17 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri
if (!PWINDOW)
return 0;

const auto PNEXTWINDOW = getNextWindow(PWINDOW, true);
const bool NOLOOP = vars.size() >= 2 && vars[1] == "noloop";
const auto PNEXTWINDOW = getNextWindow(PWINDOW, true, !NOLOOP);
switchToWindow(PNEXTWINDOW);
} else if (command == "cycleprev") {
const auto PWINDOW = header.pWindow;

if (!PWINDOW)
return 0;

const auto PPREVWINDOW = getNextWindow(PWINDOW, false);
const bool NOLOOP = vars.size() >= 2 && vars[1] == "noloop";
const auto PPREVWINDOW = getNextWindow(PWINDOW, false, !NOLOOP);
switchToWindow(PPREVWINDOW);
} else if (command == "swapnext") {
if (!validMapped(header.pWindow))
Expand All @@ -1129,7 +1138,8 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri
return 0;
}

const auto PWINDOWTOSWAPWITH = getNextWindow(header.pWindow, true);
const bool NOLOOP = vars.size() >= 2 && vars[1] == "noloop";
const auto PWINDOWTOSWAPWITH = getNextWindow(header.pWindow, true, !NOLOOP);

if (PWINDOWTOSWAPWITH) {
g_pCompositor->setWindowFullscreenInternal(header.pWindow, FSMODE_NONE);
Expand All @@ -1145,7 +1155,8 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri
return 0;
}

const auto PWINDOWTOSWAPWITH = getNextWindow(header.pWindow, false);
const bool NOLOOP = vars.size() >= 2 && vars[1] == "noloop";
const auto PWINDOWTOSWAPWITH = getNextWindow(header.pWindow, false, !NOLOOP);

if (PWINDOWTOSWAPWITH) {
g_pCompositor->setWindowFullscreenClient(header.pWindow, FSMODE_NONE);
Expand Down
2 changes: 1 addition & 1 deletion src/layout/MasterLayout.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ class CHyprMasterLayout : public IHyprLayout {
SMasterNodeData* getMasterNodeOnWorkspace(const WORKSPACEID&);
SMasterWorkspaceData* getMasterWorkspaceData(const WORKSPACEID&);
void calculateWorkspace(PHLWORKSPACE);
PHLWINDOW getNextWindow(PHLWINDOW, bool);
PHLWINDOW getNextWindow(PHLWINDOW, bool, bool);
int getMastersOnWorkspace(const WORKSPACEID&);

friend struct SMasterNodeData;
Expand Down
2 changes: 2 additions & 0 deletions src/xwayland/XWayland.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class CXWayland {
inline std::unique_ptr<CXWayland> g_pXWayland;

inline std::unordered_map<std::string, uint32_t> HYPRATOMS = {
#ifndef NO_XWAYLAND
HYPRATOM("_NET_SUPPORTED"),
HYPRATOM("_NET_SUPPORTING_WM_CHECK"),
HYPRATOM("_NET_WM_NAME"),
Expand Down Expand Up @@ -126,4 +127,5 @@ inline std::unordered_map<std::string, uint32_t> HYPRATOMS = {
HYPRATOM("DELETE"),
HYPRATOM("TEXT"),
HYPRATOM("INCR"),
#endif
};

0 comments on commit 563ea60

Please sign in to comment.