mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-07-25 17:21:54 -07:00
workspaces: Fix empty flag not selecting active workspace (#10237)
This commit is contained in:
@@ -337,19 +337,28 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||
if (PWINDOW->m_pinned && !PWINDOW->m_isFloating)
|
||||
PWINDOW->m_pinned = false;
|
||||
|
||||
const CVarList WORKSPACEARGS = CVarList(requestedWorkspace, 0, ' ');
|
||||
CVarList WORKSPACEARGS = CVarList(requestedWorkspace, 0, ' ');
|
||||
|
||||
if (!WORKSPACEARGS[0].empty()) {
|
||||
if (WORKSPACEARGS[WORKSPACEARGS.size() - 1].starts_with("silent"))
|
||||
WORKSPACEID requestedWorkspaceID;
|
||||
std::string requestedWorkspaceName;
|
||||
if (WORKSPACEARGS.contains("silent"))
|
||||
workspaceSilent = true;
|
||||
|
||||
const auto& [REQUESTEDWORKSPACEID, requestedWorkspaceName] = getWorkspaceIDNameFromString(WORKSPACEARGS.join(" ", 0, workspaceSilent ? WORKSPACEARGS.size() - 1 : 0));
|
||||
if (WORKSPACEARGS.contains("empty") && PWORKSPACE->getWindows() <= 1) {
|
||||
requestedWorkspaceID = PWORKSPACE->m_id;
|
||||
requestedWorkspaceName = PWORKSPACE->m_name;
|
||||
} else {
|
||||
auto result = getWorkspaceIDNameFromString(WORKSPACEARGS.join(" ", 0, workspaceSilent ? WORKSPACEARGS.size() - 1 : 0));
|
||||
requestedWorkspaceID = result.id;
|
||||
requestedWorkspaceName = result.name;
|
||||
}
|
||||
|
||||
if (REQUESTEDWORKSPACEID != WORKSPACE_INVALID) {
|
||||
auto pWorkspace = g_pCompositor->getWorkspaceByID(REQUESTEDWORKSPACEID);
|
||||
if (requestedWorkspaceID != WORKSPACE_INVALID) {
|
||||
auto pWorkspace = g_pCompositor->getWorkspaceByID(requestedWorkspaceID);
|
||||
|
||||
if (!pWorkspace)
|
||||
pWorkspace = g_pCompositor->createNewWorkspace(REQUESTEDWORKSPACEID, PWINDOW->monitorID(), requestedWorkspaceName, false);
|
||||
pWorkspace = g_pCompositor->createNewWorkspace(requestedWorkspaceID, PWINDOW->monitorID(), requestedWorkspaceName, false);
|
||||
|
||||
PWORKSPACE = pWorkspace;
|
||||
|
||||
@@ -362,7 +371,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||
if (!workspaceSilent) {
|
||||
if (pWorkspace->m_isSpecialWorkspace)
|
||||
pWorkspace->m_monitor->setSpecialWorkspace(pWorkspace);
|
||||
else if (PMONITOR->activeWorkspaceID() != REQUESTEDWORKSPACEID && !PWINDOW->m_noInitialFocus)
|
||||
else if (PMONITOR->activeWorkspaceID() != requestedWorkspaceID && !PWINDOW->m_noInitialFocus)
|
||||
g_pKeybindManager->m_dispatchers["workspace"](requestedWorkspaceName);
|
||||
|
||||
PMONITOR = g_pCompositor->m_lastMonitor.lock();
|
||||
|
Reference in New Issue
Block a user