mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-23 00:09:49 +01:00
Added movetoworkspacesilent
This commit is contained in:
parent
5fa4b9a777
commit
f70d0ec5aa
5 changed files with 93 additions and 30 deletions
|
@ -1,6 +1,7 @@
|
||||||
#include "MiscFunctions.hpp"
|
#include "MiscFunctions.hpp"
|
||||||
#include "../defines.hpp"
|
#include "../defines.hpp"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include "../Compositor.hpp"
|
||||||
|
|
||||||
void addWLSignal(wl_signal* pSignal, wl_listener* pListener, void* pOwner, std::string ownerString) {
|
void addWLSignal(wl_signal* pSignal, wl_listener* pListener, void* pOwner, std::string ownerString) {
|
||||||
ASSERT(pSignal);
|
ASSERT(pSignal);
|
||||||
|
@ -120,4 +121,23 @@ bool isNumber(const std::string& str) {
|
||||||
|
|
||||||
bool isDirection(const std::string& arg) {
|
bool isDirection(const std::string& arg) {
|
||||||
return arg == "l" || arg == "r" || arg == "u" || arg == "d" || arg == "t" || arg == "b";
|
return arg == "l" || arg == "r" || arg == "u" || arg == "d" || arg == "t" || arg == "b";
|
||||||
|
}
|
||||||
|
|
||||||
|
int getWorkspaceIDFromString(const std::string& in, std::string& outName) {
|
||||||
|
int result = INT_MAX;
|
||||||
|
if (in.find("name:") == 0) {
|
||||||
|
const auto WORKSPACENAME = in.substr(in.find_first_of(':') + 1);
|
||||||
|
const auto WORKSPACE = g_pCompositor->getWorkspaceByName(WORKSPACENAME);
|
||||||
|
if (!WORKSPACE) {
|
||||||
|
result = g_pCompositor->getNextAvailableNamedWorkspace();
|
||||||
|
} else {
|
||||||
|
result = WORKSPACE->m_iID;
|
||||||
|
}
|
||||||
|
outName = WORKSPACENAME;
|
||||||
|
} else {
|
||||||
|
result = std::clamp((int)getPlusMinusKeywordResult(in, g_pCompositor->m_pLastMonitor->activeWorkspace), 1, INT_MAX);
|
||||||
|
outName = std::to_string(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
|
@ -9,5 +9,6 @@ void scaleBox(wlr_box*, float);
|
||||||
std::string removeBeginEndSpacesTabs(std::string);
|
std::string removeBeginEndSpacesTabs(std::string);
|
||||||
bool isNumber(const std::string&);
|
bool isNumber(const std::string&);
|
||||||
bool isDirection(const std::string&);
|
bool isDirection(const std::string&);
|
||||||
|
int getWorkspaceIDFromString(const std::string&, std::string&);
|
||||||
|
|
||||||
float getPlusMinusKeywordResult(std::string in, float relative);
|
float getPlusMinusKeywordResult(std::string in, float relative);
|
|
@ -176,7 +176,7 @@ void CHyprDwindleLayout::onWindowCreated(CWindow* pWindow) {
|
||||||
const auto PMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
|
const auto PMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
|
||||||
|
|
||||||
// Populate the node with our window's data
|
// Populate the node with our window's data
|
||||||
PNODE->workspaceID = PMONITOR->activeWorkspace;
|
PNODE->workspaceID = pWindow->m_iWorkspaceID;
|
||||||
PNODE->pWindow = pWindow;
|
PNODE->pWindow = pWindow;
|
||||||
PNODE->isNode = false;
|
PNODE->isNode = false;
|
||||||
PNODE->layout = this;
|
PNODE->layout = this;
|
||||||
|
@ -184,7 +184,7 @@ void CHyprDwindleLayout::onWindowCreated(CWindow* pWindow) {
|
||||||
SDwindleNodeData* OPENINGON;
|
SDwindleNodeData* OPENINGON;
|
||||||
const auto MONFROMCURSOR = g_pCompositor->getMonitorFromCursor();
|
const auto MONFROMCURSOR = g_pCompositor->getMonitorFromCursor();
|
||||||
|
|
||||||
if (PMONITOR->ID == MONFROMCURSOR->ID)
|
if (PMONITOR->ID == MONFROMCURSOR->ID && PNODE->workspaceID == PMONITOR->activeWorkspace)
|
||||||
OPENINGON = getNodeFromWindow(g_pCompositor->vectorToWindowTiled(g_pInputManager->getMouseCoordsInternal()));
|
OPENINGON = getNodeFromWindow(g_pCompositor->vectorToWindowTiled(g_pInputManager->getMouseCoordsInternal()));
|
||||||
else
|
else
|
||||||
OPENINGON = getFirstNodeOnWorkspace(PMONITOR->activeWorkspace);
|
OPENINGON = getFirstNodeOnWorkspace(PMONITOR->activeWorkspace);
|
||||||
|
|
|
@ -3,20 +3,21 @@
|
||||||
CKeybindManager::CKeybindManager() {
|
CKeybindManager::CKeybindManager() {
|
||||||
// initialize all dispatchers
|
// initialize all dispatchers
|
||||||
|
|
||||||
m_mDispatchers["exec"] = spawn;
|
m_mDispatchers["exec"] = spawn;
|
||||||
m_mDispatchers["killactive"] = killActive;
|
m_mDispatchers["killactive"] = killActive;
|
||||||
m_mDispatchers["togglefloating"] = toggleActiveFloating;
|
m_mDispatchers["togglefloating"] = toggleActiveFloating;
|
||||||
m_mDispatchers["workspace"] = changeworkspace;
|
m_mDispatchers["workspace"] = changeworkspace;
|
||||||
m_mDispatchers["fullscreen"] = fullscreenActive;
|
m_mDispatchers["fullscreen"] = fullscreenActive;
|
||||||
m_mDispatchers["movetoworkspace"] = moveActiveToWorkspace;
|
m_mDispatchers["movetoworkspace"] = moveActiveToWorkspace;
|
||||||
m_mDispatchers["pseudo"] = toggleActivePseudo;
|
m_mDispatchers["movetoworkspacesilent"] = moveActiveToWorkspaceSilent;
|
||||||
m_mDispatchers["movefocus"] = moveFocusTo;
|
m_mDispatchers["pseudo"] = toggleActivePseudo;
|
||||||
m_mDispatchers["movewindow"] = moveActiveTo;
|
m_mDispatchers["movefocus"] = moveFocusTo;
|
||||||
m_mDispatchers["togglegroup"] = toggleGroup;
|
m_mDispatchers["movewindow"] = moveActiveTo;
|
||||||
m_mDispatchers["changegroupactive"] = changeGroupActive;
|
m_mDispatchers["togglegroup"] = toggleGroup;
|
||||||
m_mDispatchers["togglesplit"] = toggleSplit;
|
m_mDispatchers["changegroupactive"] = changeGroupActive;
|
||||||
m_mDispatchers["splitratio"] = alterSplitRatio;
|
m_mDispatchers["togglesplit"] = toggleSplit;
|
||||||
m_mDispatchers["focusmonitor"] = focusMonitor;
|
m_mDispatchers["splitratio"] = alterSplitRatio;
|
||||||
|
m_mDispatchers["focusmonitor"] = focusMonitor;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CKeybindManager::addKeybind(SKeybind kb) {
|
void CKeybindManager::addKeybind(SKeybind kb) {
|
||||||
|
@ -167,19 +168,7 @@ void CKeybindManager::changeworkspace(std::string args) {
|
||||||
int workspaceToChangeTo = 0;
|
int workspaceToChangeTo = 0;
|
||||||
std::string workspaceName = "";
|
std::string workspaceName = "";
|
||||||
|
|
||||||
if (args.find("name:") == 0) {
|
workspaceToChangeTo = getWorkspaceIDFromString(args, workspaceName);
|
||||||
const auto WORKSPACENAME = args.substr(args.find_first_of(':') + 1);
|
|
||||||
const auto WORKSPACE = g_pCompositor->getWorkspaceByName(WORKSPACENAME);
|
|
||||||
if (!WORKSPACE) {
|
|
||||||
workspaceToChangeTo = g_pCompositor->getNextAvailableNamedWorkspace();
|
|
||||||
} else {
|
|
||||||
workspaceToChangeTo = WORKSPACE->m_iID;
|
|
||||||
}
|
|
||||||
workspaceName = WORKSPACENAME;
|
|
||||||
} else {
|
|
||||||
workspaceToChangeTo = std::clamp((int)getPlusMinusKeywordResult(args, g_pCompositor->m_pLastMonitor->activeWorkspace), 1, INT_MAX);
|
|
||||||
workspaceName = std::to_string(workspaceToChangeTo);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (workspaceToChangeTo == INT_MAX) {
|
if (workspaceToChangeTo == INT_MAX) {
|
||||||
Debug::log(ERR, "Error in changeworkspace, invalid value");
|
Debug::log(ERR, "Error in changeworkspace, invalid value");
|
||||||
|
@ -349,6 +338,58 @@ void CKeybindManager::moveActiveToWorkspace(std::string args) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CKeybindManager::moveActiveToWorkspaceSilent(std::string args) {
|
||||||
|
// hacky, but works lol
|
||||||
|
|
||||||
|
int workspaceToMoveTo = 0;
|
||||||
|
std::string workspaceName = "";
|
||||||
|
|
||||||
|
workspaceToMoveTo = getWorkspaceIDFromString(args, workspaceName);
|
||||||
|
|
||||||
|
if (workspaceToMoveTo == INT_MAX) {
|
||||||
|
Debug::log(ERR, "Error in moveActiveToWorkspaceSilent, invalid value");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto PWINDOW = g_pCompositor->m_pLastWindow;
|
||||||
|
|
||||||
|
if (!g_pCompositor->windowValidMapped(PWINDOW))
|
||||||
|
return;
|
||||||
|
|
||||||
|
const auto PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID);
|
||||||
|
|
||||||
|
if (workspaceToMoveTo == PMONITOR->activeWorkspace)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// may be null until later!
|
||||||
|
auto PWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceToMoveTo);
|
||||||
|
|
||||||
|
const auto PMONITORNEW = PWORKSPACE ? g_pCompositor->getMonitorFromID(PWORKSPACE->m_iMonitorID) : PMONITOR;
|
||||||
|
|
||||||
|
const auto OLDWORKSPACEIDONMONITOR = PMONITORNEW->activeWorkspace;
|
||||||
|
const auto OLDWORKSPACEIDRETURN = PMONITOR->activeWorkspace;
|
||||||
|
|
||||||
|
const auto POLDWORKSPACEONMON = g_pCompositor->getWorkspaceByID(OLDWORKSPACEIDONMONITOR);
|
||||||
|
const auto POLDWORKSPACEIDRETURN = g_pCompositor->getWorkspaceByID(OLDWORKSPACEIDRETURN);
|
||||||
|
|
||||||
|
moveActiveToWorkspace(args);
|
||||||
|
|
||||||
|
PWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceToMoveTo);
|
||||||
|
|
||||||
|
changeworkspace(std::to_string(OLDWORKSPACEIDONMONITOR));
|
||||||
|
changeworkspace(std::to_string(OLDWORKSPACEIDRETURN));
|
||||||
|
|
||||||
|
// revert animations
|
||||||
|
PWORKSPACE->m_vRenderOffset.setValueAndWarp(Vector2D(0,0));
|
||||||
|
PWORKSPACE->m_fAlpha.setValueAndWarp(0.f);
|
||||||
|
|
||||||
|
POLDWORKSPACEIDRETURN->m_vRenderOffset.setValueAndWarp(Vector2D(0, 0));
|
||||||
|
POLDWORKSPACEIDRETURN->m_fAlpha.setValueAndWarp(255.f);
|
||||||
|
|
||||||
|
POLDWORKSPACEONMON->m_vRenderOffset.setValueAndWarp(Vector2D(0, 0));
|
||||||
|
POLDWORKSPACEONMON->m_fAlpha.setValueAndWarp(255.f);
|
||||||
|
}
|
||||||
|
|
||||||
void CKeybindManager::moveFocusTo(std::string args) {
|
void CKeybindManager::moveFocusTo(std::string args) {
|
||||||
char arg = args[0];
|
char arg = args[0];
|
||||||
|
|
||||||
|
@ -508,4 +549,4 @@ void CKeybindManager::focusMonitor(std::string arg) {
|
||||||
|
|
||||||
Debug::log(ERR, "Error in focusMonitor: no such monitor");
|
Debug::log(ERR, "Error in focusMonitor: no such monitor");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@ private:
|
||||||
static void changeworkspace(std::string);
|
static void changeworkspace(std::string);
|
||||||
static void fullscreenActive(std::string);
|
static void fullscreenActive(std::string);
|
||||||
static void moveActiveToWorkspace(std::string);
|
static void moveActiveToWorkspace(std::string);
|
||||||
|
static void moveActiveToWorkspaceSilent(std::string);
|
||||||
static void moveFocusTo(std::string);
|
static void moveFocusTo(std::string);
|
||||||
static void moveActiveTo(std::string);
|
static void moveActiveTo(std::string);
|
||||||
static void toggleGroup(std::string);
|
static void toggleGroup(std::string);
|
||||||
|
|
Loading…
Reference in a new issue