aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorvaxerski <[email protected]>2023-02-19 13:59:39 +0000
committervaxerski <[email protected]>2023-02-19 13:59:47 +0000
commit6e16627cbcb5d4712195c97e106f2198076c8aff (patch)
treed18aa7bc54d3248e39a60108f2b09d2d40e84875
parent67e13fbb64e38e303f20bb8c6d071096ab294978 (diff)
downloadHyprland-6e16627cbcb5d4712195c97e106f2198076c8aff.tar.gz
Hyprland-6e16627cbcb5d4712195c97e106f2198076c8aff.zip
Added execr
-rw-r--r--src/managers/KeybindManager.cpp33
-rw-r--r--src/managers/KeybindManager.hpp92
2 files changed, 67 insertions, 58 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp
index 1965c935..ef988c32 100644
--- a/src/managers/KeybindManager.cpp
+++ b/src/managers/KeybindManager.cpp
@@ -15,6 +15,7 @@ CKeybindManager::CKeybindManager() {
// initialize all dispatchers
m_mDispatchers["exec"] = spawn;
+ m_mDispatchers["execr"] = spawnRaw;
m_mDispatchers["killactive"] = killActive;
m_mDispatchers["closewindow"] = kill;
m_mDispatchers["togglefloating"] = toggleActiveFloating;
@@ -530,6 +531,20 @@ void CKeybindManager::spawn(std::string args) {
else
args = "WAYLAND_DISPLAY=" + std::string(g_pCompositor->m_szWLDisplaySocket) + " " + args;
+ const uint64_t PROC = spawnRaw(args);
+
+ if (!RULES.empty()) {
+ const auto RULESLIST = CVarList(RULES, 0, ';');
+
+ for (auto& r : RULESLIST) {
+ g_pConfigManager->addExecRule({r, (unsigned long)PROC});
+ }
+
+ Debug::log(LOG, "Applied %i rule arguments for exec.", RULESLIST.size());
+ }
+}
+
+uint64_t CKeybindManager::spawnRaw(std::string args) {
Debug::log(LOG, "Executing %s", args.c_str());
int socket[2];
@@ -543,7 +558,7 @@ void CKeybindManager::spawn(std::string args) {
close(socket[0]);
close(socket[1]);
Debug::log(LOG, "Fail to create the first fork");
- return;
+ return 0;
}
if (child == 0) {
// run in child
@@ -575,20 +590,12 @@ void CKeybindManager::spawn(std::string args) {
waitpid(child, NULL, 0);
if (child < 0) {
Debug::log(LOG, "Fail to create the second fork");
- return;
+ return 0;
}
Debug::log(LOG, "Process Created with pid %d", grandchild);
- if (!RULES.empty()) {
- const auto RULESLIST = CVarList(RULES, 0, ';');
-
- for (auto& r : RULESLIST) {
- g_pConfigManager->addExecRule({r, (unsigned long)grandchild});
- }
-
- Debug::log(LOG, "Applied %i rule arguments for exec.", RULESLIST.size());
- }
+ return grandchild;
}
void CKeybindManager::killActive(std::string args) {
@@ -1158,8 +1165,8 @@ void CKeybindManager::focusUrgentOrLast(std::string args) {
}
void CKeybindManager::focusCurrentOrLast(std::string args) {
- const auto PWINDOWPREV = g_pCompositor->m_pLastWindow ? (g_pCompositor->m_vWindowFocusHistory.size() < 2 ? nullptr : g_pCompositor->m_vWindowFocusHistory[1]) :
- (g_pCompositor->m_vWindowFocusHistory.empty() ? nullptr : g_pCompositor->m_vWindowFocusHistory[0]);
+ const auto PWINDOWPREV = g_pCompositor->m_pLastWindow ? (g_pCompositor->m_vWindowFocusHistory.size() < 2 ? nullptr : g_pCompositor->m_vWindowFocusHistory[1]) :
+ (g_pCompositor->m_vWindowFocusHistory.empty() ? nullptr : g_pCompositor->m_vWindowFocusHistory[0]);
if (!PWINDOWPREV)
return;
diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp
index 1c910873..6e31ccd9 100644
--- a/src/managers/KeybindManager.hpp
+++ b/src/managers/KeybindManager.hpp
@@ -25,7 +25,8 @@ struct SKeybind {
bool shadowed = false;
};
-enum eFocusWindowMode {
+enum eFocusWindowMode
+{
MODE_CLASS_REGEX = 0,
MODE_TITLE_REGEX,
MODE_ADDRESS,
@@ -87,50 +88,51 @@ class CKeybindManager {
bool ensureMouseBindState();
// -------------- Dispatchers -------------- //
- static void killActive(std::string);
- static void kill(std::string);
- static void spawn(std::string);
- static void toggleActiveFloating(std::string);
- static void toggleActivePseudo(std::string);
- static void changeworkspace(std::string);
- static void fullscreenActive(std::string);
- static void fakeFullscreenActive(std::string);
- static void moveActiveToWorkspace(std::string);
- static void moveActiveToWorkspaceSilent(std::string);
- static void moveFocusTo(std::string);
- static void focusUrgentOrLast(std::string);
- static void focusCurrentOrLast(std::string);
- static void centerWindow(std::string);
- static void moveActiveTo(std::string);
- static void toggleGroup(std::string);
- static void changeGroupActive(std::string);
- static void alterSplitRatio(std::string);
- static void focusMonitor(std::string);
- static void toggleSplit(std::string);
- static void moveCursorToCorner(std::string);
- static void workspaceOpt(std::string);
- static void renameWorkspace(std::string);
- static void exitHyprland(std::string);
- static void moveCurrentWorkspaceToMonitor(std::string);
- static void moveWorkspaceToMonitor(std::string);
- static void toggleSpecialWorkspace(std::string);
- static void forceRendererReload(std::string);
- static void resizeActive(std::string);
- static void moveActive(std::string);
- static void moveWindow(std::string);
- static void resizeWindow(std::string);
- static void circleNext(std::string);
- static void focusWindow(std::string);
- static void setSubmap(std::string);
- static void pass(std::string);
- static void layoutmsg(std::string);
- static void toggleOpaque(std::string);
- static void dpms(std::string);
- static void swapnext(std::string);
- static void swapActiveWorkspaces(std::string);
- static void pinActive(std::string);
- static void mouse(std::string);
- static void bringActiveToTop(std::string);
+ static void killActive(std::string);
+ static void kill(std::string);
+ static void spawn(std::string);
+ static uint64_t spawnRaw(std::string);
+ static void toggleActiveFloating(std::string);
+ static void toggleActivePseudo(std::string);
+ static void changeworkspace(std::string);
+ static void fullscreenActive(std::string);
+ static void fakeFullscreenActive(std::string);
+ static void moveActiveToWorkspace(std::string);
+ static void moveActiveToWorkspaceSilent(std::string);
+ static void moveFocusTo(std::string);
+ static void focusUrgentOrLast(std::string);
+ static void focusCurrentOrLast(std::string);
+ static void centerWindow(std::string);
+ static void moveActiveTo(std::string);
+ static void toggleGroup(std::string);
+ static void changeGroupActive(std::string);
+ static void alterSplitRatio(std::string);
+ static void focusMonitor(std::string);
+ static void toggleSplit(std::string);
+ static void moveCursorToCorner(std::string);
+ static void workspaceOpt(std::string);
+ static void renameWorkspace(std::string);
+ static void exitHyprland(std::string);
+ static void moveCurrentWorkspaceToMonitor(std::string);
+ static void moveWorkspaceToMonitor(std::string);
+ static void toggleSpecialWorkspace(std::string);
+ static void forceRendererReload(std::string);
+ static void resizeActive(std::string);
+ static void moveActive(std::string);
+ static void moveWindow(std::string);
+ static void resizeWindow(std::string);
+ static void circleNext(std::string);
+ static void focusWindow(std::string);
+ static void setSubmap(std::string);
+ static void pass(std::string);
+ static void layoutmsg(std::string);
+ static void toggleOpaque(std::string);
+ static void dpms(std::string);
+ static void swapnext(std::string);
+ static void swapActiveWorkspaces(std::string);
+ static void pinActive(std::string);
+ static void mouse(std::string);
+ static void bringActiveToTop(std::string);
friend class CCompositor;
friend class CInputManager;