Added monitor check

This commit is contained in:
willifan 2024-03-17 21:55:28 +01:00
parent d507864ec1
commit 618c02c14b
6 changed files with 143 additions and 76 deletions

View file

@ -81,13 +81,54 @@ std::string getIcon(std::string windowAddress)
}
void getWorkspaces()
json getWorkspace(json workspaceInput, char mode)
{
json workspaceOutput;
json monitorsInput = json::parse(command("hyprctl monitors -j"));
std::string keyValue;
if (mode == 'n')
{
keyValue = "id";
}
else if (mode == 's')
{
keyValue = "name";
}
workspaceOutput[keyValue] = workspaceInput[keyValue];
for (auto& monitor : monitorsInput)
{
if (monitor["activeWorkspace"][keyValue] == workspaceInput[keyValue])
{
workspaceOutput["activeOn"] = monitor[keyValue];
}
}
workspaceOutput["occupied"] = workspaceInput["windows"];
if (!(workspaceInput["lastwindow"] == "0x0"))
{
workspaceOutput["icon"] = getIcon(workspaceInput["lastwindow"]);
}
else
{
workspaceOutput["icon"] = "";
}
return workspaceOutput;
}
json getAllWorkspaces()
{
workspacesInput = json::parse(command("hyprctl workspaces -j"));
workspacesOutput.clear();
int specialIndex = 0;
for(auto& workspace : workspacesInput)
@ -96,49 +137,21 @@ void getWorkspaces()
{
int index = workspace["id"].get<int>() - 1;
workspacesOutput[index]["normal"]["ID"] = index + 1;
workspacesOutput[index]["normal"]["occupied"] = workspace["windows"];
workspacesOutput[index]["normal"]["monitorID"] = workspace["monitorID"];
if (!(workspace["lastwindow"] == "0x0"))
{
workspacesOutput[index]["normal"]["icon"] = getIcon(workspace["lastwindow"]);
}
else
{
workspacesOutput[index]["normal"]["icon"] = "";
}
workspacesOutput[index]["normal"].clear();
workspacesOutput[index]["normal"] = getWorkspace(workspace, 'n');
}
else if (std::string(workspace["name"]).find("special:") == 0)
{
workspacesOutput[specialIndex]["special"]["ID"] = specialIndex;
workspacesOutput[specialIndex]["special"]["name"] = workspace["name"];
workspacesOutput[specialIndex]["special"]["occupied"] = workspace["windows"];
workspacesOutput[specialIndex]["special"]["monitorID"] = workspace["monitorID"];
if (!(workspace["lastwindow"] == "0x0"))
{
workspacesOutput[specialIndex]["special"]["icon"] = getIcon(workspace["lastwindow"]);
}
workspacesOutput[specialIndex]["special"].clear();
workspacesOutput[specialIndex]["special"] = getWorkspace(workspace, 's');
specialIndex++;
}
}
std::cout << workspacesOutput << std::endl;
return workspacesOutput;
}
@ -173,27 +186,27 @@ void handle(std::string message)
if (message.find("workspace") == 0)
{
getWorkspaces();
std::cout << getAllWorkspaces() << std::endl;
}
else if (message.find("moveworkspace") == 0)
{
getWorkspaces();
std::cout << getAllWorkspaces() << std::endl;
}
else if (message.find("openwindow") == 0)
{
getWorkspaces();
std::cout << getAllWorkspaces() << std::endl;
}
else if (message.find("closewindow") == 0)
{
getWorkspaces();
std::cout << getAllWorkspaces() << std::endl;
}
else if (message.find("movewindow") == 0)
{
getWorkspaces();
std::cout << getAllWorkspaces() << std::endl;
}
else if (message.find("activewindow") == 0)
{
getWorkspaces();
std::cout << getAllWorkspaces() << std::endl;
}
@ -202,6 +215,8 @@ void handle(std::string message)
int main(int argc, char const *argv[])
{
std::cout << getAllWorkspaces() << std::endl;
std::string socketPath = "/tmp/hypr/" + std::string(std::getenv("HYPRLAND_INSTANCE_SIGNATURE")) + "/.socket2.sock";