From 32e4d99929ea0dcea8f84041ad483d56a183e569 Mon Sep 17 00:00:00 2001 From: imaphatduc Date: Fri, 7 Jan 2022 19:06:54 +0700 Subject: [PATCH 1/5] Add lastworkspace configuration handler option --- src/config/ConfigManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 43700b4..6094bc2 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -119,6 +119,7 @@ void handleBind(const std::string& command, const std::string& value) { if (HANDLER == "movefocus") dispatcher = KeybindManager::movefocus; if (HANDLER == "movetoworkspace") dispatcher = KeybindManager::movetoworkspace; if (HANDLER == "workspace") dispatcher = KeybindManager::changeworkspace; + if (HANDLER == "lastworkspace") dispatcher = KeybindManager::changetolastworkspace; if (HANDLER == "togglefloating") dispatcher = KeybindManager::toggleActiveWindowFloating; if (dispatcher && KEY != 0) @@ -543,4 +544,4 @@ std::vector ConfigManager::getMatchingRules(xcb_window_t w) { } return returns; -} \ No newline at end of file +} From 22a2526ddf4039268066cda83be7f2b8752f3543 Mon Sep 17 00:00:00 2001 From: imaphatduc Date: Fri, 7 Jan 2022 19:09:45 +0700 Subject: [PATCH 2/5] Add trigger method when pressing lastworkspace hotkey --- src/KeybindManager.cpp | 9 +++++++-- src/KeybindManager.hpp | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/KeybindManager.cpp b/src/KeybindManager.cpp index 443c639..6ba09dc 100644 --- a/src/KeybindManager.cpp +++ b/src/KeybindManager.cpp @@ -1,6 +1,7 @@ #include "KeybindManager.hpp" #include "utilities/Util.hpp" #include "events/events.hpp" +#include "windowManager.hpp" #include #include @@ -157,11 +158,15 @@ void KeybindManager::changeworkspace(std::string arg) { if (ID != -1) { Debug::log(LOG, "Changing the current workspace to " + std::to_string(ID)); - g_pWindowManager->changeWorkspaceByID(ID); } } +void KeybindManager::changetolastworkspace(std::string arg) { + Debug::log(LOG, "Changing the current workspace to the last workspace"); + g_pWindowManager->changeToLastWorkspace(); +} + void KeybindManager::toggleActiveWindowFullscreen(std::string unusedArg) { g_pWindowManager->toggleWindowFullscrenn(g_pWindowManager->LastWindow); } @@ -206,4 +211,4 @@ void KeybindManager::toggleActiveWindowFloating(std::string unusedArg) { g_pWindowManager->setAllFloatingWindowsTop(); } -} \ No newline at end of file +} diff --git a/src/KeybindManager.hpp b/src/KeybindManager.hpp index eb0948a..08834c0 100644 --- a/src/KeybindManager.hpp +++ b/src/KeybindManager.hpp @@ -23,7 +23,8 @@ namespace KeybindManager { void movewindow(std::string args); void movefocus(std::string args); void changeworkspace(std::string args); + void changetolastworkspace(std::string args); void toggleActiveWindowFullscreen(std::string args); void toggleActiveWindowFloating(std::string args); void movetoworkspace(std::string args); -}; \ No newline at end of file +}; From 2ae7c09e179b2fa9d9670adc48d965d017a367a0 Mon Sep 17 00:00:00 2001 From: imaphatduc Date: Fri, 7 Jan 2022 19:11:55 +0700 Subject: [PATCH 3/5] Add `changeToLastWorkspace` method to `windowManager.cpp` --- src/windowManager.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/windowManager.cpp b/src/windowManager.cpp index 479b0ec..124cd6e 100644 --- a/src/windowManager.cpp +++ b/src/windowManager.cpp @@ -1667,6 +1667,12 @@ void CWindowManager::changeWorkspaceByID(int ID) { QueuedPointerWarp = Vector2D(MONITOR->vecPosition + MONITOR->vecSize / 2.f); // no need for the new dirty, it's empty + + lastActiveWorkspaceID = ID; +} + +void CWindowManager::changeToLastWorkspace() { + changeWorkspaceByID(lastActiveWorkspaceID); } void CWindowManager::focusOnWorkspace(const int& work) { From 29394650ddf1b9f4f7fe4772836c947847c6dead Mon Sep 17 00:00:00 2001 From: imaphatduc Date: Fri, 7 Jan 2022 19:12:57 +0700 Subject: [PATCH 4/5] Add `lastActiveWorkspaceID` and `changeToLastWorkspace` definition to header file --- src/windowManager.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/windowManager.hpp b/src/windowManager.hpp index 3398b1b..4fd7fa4 100644 --- a/src/windowManager.hpp +++ b/src/windowManager.hpp @@ -47,6 +47,7 @@ public: std::deque workspaces; std::deque activeWorkspaces; + int lastActiveWorkspaceID = 1; // Pipes SIPCPipe m_sIPCBarPipeIn = {ISDEBUG ? "/tmp/hypr/hyprbarind" : "/tmp/hypr/hyprbarin", 0}; @@ -90,6 +91,7 @@ public: void recalcAllDocks(); void changeWorkspaceByID(int); + void changeToLastWorkspace(); void setAllWorkspaceWindowsDirtyByID(int); int getHighestWorkspaceID(); CWorkspace* getWorkspaceByID(int); From 86df22e95bf34dab51db1092825b005e577a76ae Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Fri, 7 Jan 2022 14:58:04 +0100 Subject: [PATCH 5/5] fixed wrong behavior with switching workspaces --- src/windowManager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/windowManager.cpp b/src/windowManager.cpp index 124cd6e..4cb64fd 100644 --- a/src/windowManager.cpp +++ b/src/windowManager.cpp @@ -1617,6 +1617,7 @@ void CWindowManager::changeWorkspaceByID(int ID) { // save old workspace for anim auto OLDWORKSPACE = activeWorkspaces[MONITOR->ID]; + lastActiveWorkspaceID = OLDWORKSPACE; for (auto& workspace : workspaces) { if (workspace.getID() == ID) { @@ -1667,8 +1668,6 @@ void CWindowManager::changeWorkspaceByID(int ID) { QueuedPointerWarp = Vector2D(MONITOR->vecPosition + MONITOR->vecSize / 2.f); // no need for the new dirty, it's empty - - lastActiveWorkspaceID = ID; } void CWindowManager::changeToLastWorkspace() {