summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNj0be <77834064+Nj0be@users.noreply.github.com>2025-10-08 12:07:55 +0200
committerGitHub <noreply@github.com>2025-10-08 11:07:55 +0100
commitba24547d3d784531f86aecfd145d590889302d5a (patch)
tree9f17c9d5bdc1f34840d125ca83901dd82518ecf7 /src
parent5ba2d2217b649c4ca2db7e3f383b3f6af6e70d65 (diff)
dispatchers: add set, unset and toggle to fullscreen (#11893)
Add set, unset and toggle to fullscreen
Diffstat (limited to 'src')
-rw-r--r--src/managers/KeybindManager.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp
index 58d451b3..81c88d63 100644
--- a/src/managers/KeybindManager.cpp
+++ b/src/managers/KeybindManager.cpp
@@ -28,6 +28,7 @@
#include <cstring>
#include <hyprutils/string/String.hpp>
+#include <hyprutils/string/ConstVarList.hpp>
#include <hyprutils/os/FileDescriptor.hpp>
using namespace Hyprutils::String;
using namespace Hyprutils::OS;
@@ -1310,23 +1311,31 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) {
SDispatchResult CKeybindManager::fullscreenActive(std::string args) {
const auto PWINDOW = g_pCompositor->m_lastWindow.lock();
+ const auto ARGS = CConstVarList(args, 2, ' ');
if (!PWINDOW)
return {.success = false, .error = "Window not found"};
- const eFullscreenMode MODE = args == "1" ? FSMODE_MAXIMIZED : FSMODE_FULLSCREEN;
+ const eFullscreenMode MODE = ARGS.size() > 0 && ARGS[0] == "1" ? FSMODE_MAXIMIZED : FSMODE_FULLSCREEN;
- if (PWINDOW->isEffectiveInternalFSMode(MODE))
- g_pCompositor->setWindowFullscreenInternal(PWINDOW, FSMODE_NONE);
- else
- g_pCompositor->setWindowFullscreenInternal(PWINDOW, MODE);
+ if (ARGS.size() <= 1 || ARGS[1] == "toggle") {
+ if (PWINDOW->isEffectiveInternalFSMode(MODE))
+ g_pCompositor->setWindowFullscreenInternal(PWINDOW, FSMODE_NONE);
+ else
+ g_pCompositor->setWindowFullscreenInternal(PWINDOW, MODE);
+ } else {
+ if (ARGS[1] == "set")
+ g_pCompositor->setWindowFullscreenInternal(PWINDOW, MODE);
+ else if (ARGS[1] == "unset")
+ g_pCompositor->setWindowFullscreenInternal(PWINDOW, FSMODE_NONE);
+ }
return {};
}
SDispatchResult CKeybindManager::fullscreenStateActive(std::string args) {
const auto PWINDOW = g_pCompositor->m_lastWindow.lock();
- const auto ARGS = CVarList(args, 2, ' ');
+ const auto ARGS = CVarList(args, 3, ' ');
if (!PWINDOW)
return {.success = false, .error = "Window not found"};
@@ -1344,14 +1353,18 @@ SDispatchResult CKeybindManager::fullscreenStateActive(std::string args) {
const SFullscreenState STATE = SFullscreenState{.internal = (internalMode != -1 ? sc<eFullscreenMode>(internalMode) : PWINDOW->m_fullscreenState.internal),
.client = (clientMode != -1 ? sc<eFullscreenMode>(clientMode) : PWINDOW->m_fullscreenState.client)};
- if (internalMode != -1 && clientMode != -1 && PWINDOW->m_fullscreenState.internal == STATE.internal && PWINDOW->m_fullscreenState.client == STATE.client)
- g_pCompositor->setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = FSMODE_NONE, .client = FSMODE_NONE});
- else if (internalMode != -1 && clientMode == -1 && PWINDOW->m_fullscreenState.internal == STATE.internal)
- g_pCompositor->setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = FSMODE_NONE, .client = PWINDOW->m_fullscreenState.client});
- else if (internalMode == -1 && clientMode != -1 && PWINDOW->m_fullscreenState.client == STATE.client)
- g_pCompositor->setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = PWINDOW->m_fullscreenState.internal, .client = FSMODE_NONE});
- else
+ if (ARGS.size() <= 2 || ARGS[2] == "toggle") {
+ if (internalMode != -1 && clientMode != -1 && PWINDOW->m_fullscreenState.internal == STATE.internal && PWINDOW->m_fullscreenState.client == STATE.client)
+ g_pCompositor->setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = FSMODE_NONE, .client = FSMODE_NONE});
+ else if (internalMode != -1 && clientMode == -1 && PWINDOW->m_fullscreenState.internal == STATE.internal)
+ g_pCompositor->setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = FSMODE_NONE, .client = PWINDOW->m_fullscreenState.client});
+ else if (internalMode == -1 && clientMode != -1 && PWINDOW->m_fullscreenState.client == STATE.client)
+ g_pCompositor->setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = PWINDOW->m_fullscreenState.internal, .client = FSMODE_NONE});
+ else
+ g_pCompositor->setWindowFullscreenState(PWINDOW, STATE);
+ } else if (ARGS[2] == "set") {
g_pCompositor->setWindowFullscreenState(PWINDOW, STATE);
+ }
PWINDOW->m_windowData.syncFullscreen = CWindowOverridableVar(PWINDOW->m_fullscreenState.internal == PWINDOW->m_fullscreenState.client, PRIORITY_SET_PROP);