create workspace now respects selected output again

This commit is contained in:
LordGrimmauld 2024-04-01 11:53:37 +02:00
parent 582ed32c9e
commit 7fce5f1063
2 changed files with 7 additions and 6 deletions

View File

@ -23,7 +23,7 @@ public:
if (selectedOutput != nullptr) if (selectedOutput != nullptr)
cmd << "focus output " << selectedOutput->node.name << " , "; cmd << "focus output " << selectedOutput->node.name << " , ";
cmd << "workspace " << createNewWorkspaceId({}); cmd << "workspace " << createNewWorkspaceId({}, selectedOutput);
auto resp = SwayTreeModel::sway.sendIPC(swaymsg(0, cmd.str())); auto resp = SwayTreeModel::sway.sendIPC(swaymsg(0, cmd.str()));
std::cout << resp.msg << "\n"; std::cout << resp.msg << "\n";
QApplication::quit(); QApplication::quit();

View File

@ -32,7 +32,7 @@ protected:
return containerIds; return containerIds;
} }
[[nodiscard]] std::string createNewWorkspaceId(const std::set<const SwayTreeNode *> &allowedContainers) const { [[nodiscard]] std::string createNewWorkspaceId(const std::set<const SwayTreeNode *> &allowedContainers, const SwayTreeNode* preferredOutput = nullptr) const {
std::set<std::string> candidates; std::set<std::string> candidates;
for (auto *con: allowedContainers) { for (auto *con: allowedContainers) {
@ -40,14 +40,14 @@ protected:
if (workspace == nullptr) if (workspace == nullptr)
continue; continue;
if (allowedContainers.contains(workspace)) { if (allowedContainers.contains(workspace) && (preferredOutput == nullptr || preferredOutput == workspace->findOutput())) {
candidates.insert(workspace->node.name); candidates.insert(workspace->node.name);
continue; continue;
} }
auto containers = workspace->accumulateContainers(); auto containers = workspace->accumulateContainers();
if (std::all_of(containers.begin(), containers.end(), [allowedContainers](const SwayTreeNode *container) { if (std::all_of(containers.begin(), containers.end(), [allowedContainers, preferredOutput](const SwayTreeNode *container) {
return allowedContainers.contains(container); return allowedContainers.contains(container) && (preferredOutput == nullptr || preferredOutput == container->findOutput());
})) { })) {
candidates.insert(workspace->node.name); candidates.insert(workspace->node.name);
} }
@ -63,7 +63,8 @@ protected:
do { do {
newWorkspace++; newWorkspace++;
workspaceNode = getModel()->getRoot()->findWorkspaceByName(std::to_string(newWorkspace)); workspaceNode = getModel()->getRoot()->findWorkspaceByName(std::to_string(newWorkspace));
} while (workspaceNode != nullptr && workspaceNode->childCount() != 0); } while (workspaceNode != nullptr && workspaceNode->childCount() != 0
&& (preferredOutput != nullptr && preferredOutput == workspaceNode->findOutput()));
return std::to_string(newWorkspace); return std::to_string(newWorkspace);
} }