mirror of
https://github.com/hyprwm/Hypr.git
synced 2024-11-24 06:15:57 +01:00
Added pinning windows
This commit is contained in:
parent
1a5ed05758
commit
83d69cb233
6 changed files with 20 additions and 4 deletions
|
@ -182,6 +182,7 @@ void KeybindManager::toggleActiveWindowFloating(std::string arg) {
|
||||||
if (const auto PWINDOW = g_pWindowManager->getWindowFromDrawable(g_pWindowManager->LastWindow); PWINDOW) {
|
if (const auto PWINDOW = g_pWindowManager->getWindowFromDrawable(g_pWindowManager->LastWindow); PWINDOW) {
|
||||||
PWINDOW->setIsFloating(!PWINDOW->getIsFloating());
|
PWINDOW->setIsFloating(!PWINDOW->getIsFloating());
|
||||||
PWINDOW->setDirty(true);
|
PWINDOW->setDirty(true);
|
||||||
|
PWINDOW->setPinned(false);
|
||||||
|
|
||||||
// Fix window as if it's closed if we just made it floating
|
// Fix window as if it's closed if we just made it floating
|
||||||
if (PWINDOW->getIsFloating()) {
|
if (PWINDOW->getIsFloating()) {
|
||||||
|
@ -277,3 +278,13 @@ void KeybindManager::lastWorkspace(std::string args) {
|
||||||
|
|
||||||
g_pWindowManager->changeWorkspaceByID(g_pWindowManager->activeWorkspaces[PMONITOR->ID] < 2 ? 1 : g_pWindowManager->activeWorkspaces[PMONITOR->ID] - 1);
|
g_pWindowManager->changeWorkspaceByID(g_pWindowManager->activeWorkspaces[PMONITOR->ID] < 2 ? 1 : g_pWindowManager->activeWorkspaces[PMONITOR->ID] - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KeybindManager::pinActive(std::string agrs) {
|
||||||
|
const auto PWINDOW = g_pWindowManager->getWindowFromDrawable(g_pWindowManager->LastWindow);
|
||||||
|
|
||||||
|
if (!PWINDOW)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (PWINDOW->getIsFloating())
|
||||||
|
PWINDOW->setPinned(!PWINDOW->getPinned());
|
||||||
|
}
|
|
@ -32,4 +32,5 @@ namespace KeybindManager {
|
||||||
void toggleScratchpad(std::string args);
|
void toggleScratchpad(std::string args);
|
||||||
void nextWorkspace(std::string args);
|
void nextWorkspace(std::string args);
|
||||||
void lastWorkspace(std::string args);
|
void lastWorkspace(std::string args);
|
||||||
|
void pinActive(std::string args);
|
||||||
};
|
};
|
||||||
|
|
|
@ -130,6 +130,7 @@ void handleBind(const std::string& command, const std::string& value) {
|
||||||
if (HANDLER == "scratchpad") dispatcher = KeybindManager::toggleScratchpad;
|
if (HANDLER == "scratchpad") dispatcher = KeybindManager::toggleScratchpad;
|
||||||
if (HANDLER == "nextworkspace") dispatcher = KeybindManager::nextWorkspace;
|
if (HANDLER == "nextworkspace") dispatcher = KeybindManager::nextWorkspace;
|
||||||
if (HANDLER == "lastworkspace") dispatcher = KeybindManager::lastWorkspace;
|
if (HANDLER == "lastworkspace") dispatcher = KeybindManager::lastWorkspace;
|
||||||
|
if (HANDLER == "pin") dispatcher = KeybindManager::pinActive;
|
||||||
|
|
||||||
if (dispatcher && KEY != 0)
|
if (dispatcher && KEY != 0)
|
||||||
KeybindManager::keybinds.push_back(Keybind(KeybindManager::modToMask(MOD), KEY, COMMAND, dispatcher));
|
KeybindManager::keybinds.push_back(Keybind(KeybindManager::modToMask(MOD), KEY, COMMAND, dispatcher));
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "window.hpp"
|
#include "window.hpp"
|
||||||
#include "windowManager.hpp"
|
#include "windowManager.hpp"
|
||||||
|
|
||||||
CWindow::CWindow() { this->setDraggingTiled(false); this->setIsPseudotiled(false); this->setSplitRatio(1); this->setDockHidden(false); this->setRealBorderColor(0); this->setEffectiveBorderColor(0); this->setFirstOpen(true); this->setConstructed(false); this->setTransient(false); this->setLastUpdatePosition(Vector2D(0,0)); this->setLastUpdateSize(Vector2D(0,0)); this->setDock(false); this->setUnderFullscreen(false); this->setIsSleeping(true); this->setFirstAnimFrame(true); this->setIsAnimated(false); this->setDead(false); this->setMasterChildIndex(0); this->setMaster(false); this->setCanKill(false); this->setImmovable(false); this->setNoInterventions(false); this->setDirty(true); this->setFullscreen(false); this->setIsFloating(false); this->setParentNodeID(0); this->setChildNodeAID(0); this->setChildNodeBID(0); this->setName(""); }
|
CWindow::CWindow() { this->setPinned(false); this->setDraggingTiled(false); this->setIsPseudotiled(false); this->setSplitRatio(1); this->setDockHidden(false); this->setRealBorderColor(0); this->setEffectiveBorderColor(0); this->setFirstOpen(true); this->setConstructed(false); this->setTransient(false); this->setLastUpdatePosition(Vector2D(0,0)); this->setLastUpdateSize(Vector2D(0,0)); this->setDock(false); this->setUnderFullscreen(false); this->setIsSleeping(true); this->setFirstAnimFrame(true); this->setIsAnimated(false); this->setDead(false); this->setMasterChildIndex(0); this->setMaster(false); this->setCanKill(false); this->setImmovable(false); this->setNoInterventions(false); this->setDirty(true); this->setFullscreen(false); this->setIsFloating(false); this->setParentNodeID(0); this->setChildNodeAID(0); this->setChildNodeBID(0); this->setName(""); }
|
||||||
CWindow::~CWindow() { }
|
CWindow::~CWindow() { }
|
||||||
|
|
||||||
void CWindow::generateNodeID() {
|
void CWindow::generateNodeID() {
|
||||||
|
|
|
@ -115,6 +115,9 @@ public:
|
||||||
// For dragging tiled windows
|
// For dragging tiled windows
|
||||||
EXPOSED_MEMBER(DraggingTiled, bool, b);
|
EXPOSED_MEMBER(DraggingTiled, bool, b);
|
||||||
|
|
||||||
|
// For pinning floating
|
||||||
|
EXPOSED_MEMBER(Pinned, bool, b);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
};
|
};
|
|
@ -406,7 +406,7 @@ void CWindowManager::refreshDirtyWindows() {
|
||||||
if (window.getChildNodeAID() != 0 || window.getNoInterventions() || window.getDock())
|
if (window.getChildNodeAID() != 0 || window.getNoInterventions() || window.getDock())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
setEffectiveSizePosUsingConfig(&window);
|
setEffectiveSizePosUsingConrgifig(&window);
|
||||||
|
|
||||||
const auto PWORKSPACE = getWorkspaceByID(window.getWorkspaceID());
|
const auto PWORKSPACE = getWorkspaceByID(window.getWorkspaceID());
|
||||||
|
|
||||||
|
@ -416,7 +416,7 @@ void CWindowManager::refreshDirtyWindows() {
|
||||||
// first and foremost, let's check if the window isn't on a hidden workspace
|
// first and foremost, let's check if the window isn't on a hidden workspace
|
||||||
// or an animated workspace
|
// or an animated workspace
|
||||||
if (PWORKSPACE && (!isWorkspaceVisible(window.getWorkspaceID())
|
if (PWORKSPACE && (!isWorkspaceVisible(window.getWorkspaceID())
|
||||||
|| PWORKSPACE->getAnimationInProgress())) {
|
|| PWORKSPACE->getAnimationInProgress()) && !window.getPinned()) {
|
||||||
|
|
||||||
const auto MONITOR = getMonitorFromWindow(&window);
|
const auto MONITOR = getMonitorFromWindow(&window);
|
||||||
|
|
||||||
|
@ -447,7 +447,7 @@ void CWindowManager::refreshDirtyWindows() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// or that it is not a non-fullscreen window in a fullscreen workspace thats under
|
// or that it is not a non-fullscreen window in a fullscreen workspace thats under
|
||||||
if (bHasFullscreenWindow && !window.getFullscreen() && (window.getUnderFullscreen() || !window.getIsFloating())) {
|
if (bHasFullscreenWindow && !window.getFullscreen() && (window.getUnderFullscreen() || !window.getIsFloating()) && !window.getPinned()) {
|
||||||
Values[0] = 150000;
|
Values[0] = 150000;
|
||||||
Values[1] = 150000;
|
Values[1] = 150000;
|
||||||
if (VECTORDELTANONZERO(window.getLastUpdatePosition(), Vector2D(Values[0], Values[1]))) {
|
if (VECTORDELTANONZERO(window.getLastUpdatePosition(), Vector2D(Values[0], Values[1]))) {
|
||||||
|
|
Loading…
Reference in a new issue