summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAqa-Ib <victorcana@gmx.com>2024-11-06 17:52:10 +0100
committerGitHub <noreply@github.com>2024-11-06 16:52:10 +0000
commit8f42401aa8ac5a7778e29024be7ef3e0a063de13 (patch)
treefd5891a72a6a218471e54ff81d3a80e4983daa2d /src
parent97a309b7844aea82b200139febc99998e7f06402 (diff)
groups: add merge_groups_on_groupbar (#8362)
Diffstat (limited to 'src')
-rw-r--r--src/config/ConfigDescriptions.hpp6
-rw-r--r--src/config/ConfigManager.cpp1
-rw-r--r--src/layout/DwindleLayout.cpp5
-rw-r--r--src/layout/IHyprLayout.cpp10
-rw-r--r--src/layout/MasterLayout.cpp20
-rw-r--r--src/render/decorations/CHyprGroupBarDecoration.cpp8
6 files changed, 24 insertions, 26 deletions
diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp
index 5327c599..12e81f2a 100644
--- a/src/config/ConfigDescriptions.hpp
+++ b/src/config/ConfigDescriptions.hpp
@@ -779,6 +779,12 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
.data = SConfigOptionDescription::SBoolData{true},
},
SConfigOptionDescription{
+ .value = "group:merge_groups_on_groupbar",
+ .description = "whether one group will be merged with another when dragged into its groupbar",
+ .type = CONFIG_OPTION_BOOL,
+ .data = SConfigOptionDescription::SBoolData{true},
+ },
+ SConfigOptionDescription{
.value = "general:col.border_active",
.description = "border color for inactive windows",
.type = CONFIG_OPTION_GRADIENT,
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index eafe4cbb..769a7525 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -381,6 +381,7 @@ CConfigManager::CConfigManager() {
m_pConfig->addConfigValue("group:insert_after_current", Hyprlang::INT{1});
m_pConfig->addConfigValue("group:focus_removed_window", Hyprlang::INT{1});
m_pConfig->addConfigValue("group:merge_groups_on_drag", Hyprlang::INT{1});
+ m_pConfig->addConfigValue("group:merge_groups_on_groupbar", Hyprlang::INT{1});
m_pConfig->addConfigValue("group:merge_floated_into_tiled_on_groupbar", Hyprlang::INT{0});
m_pConfig->addConfigValue("group:auto_group", Hyprlang::INT{1});
m_pConfig->addConfigValue("group:drag_into_group", Hyprlang::INT{1});
diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp
index 32f64e4e..e6e9090f 100644
--- a/src/layout/DwindleLayout.cpp
+++ b/src/layout/DwindleLayout.cpp
@@ -310,11 +310,6 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir
return;
}
- if (!m_vOverrideFocalPoint && g_pInputManager->m_bWasDraggingWindow) {
- if (OPENINGON->pWindow->checkInputOnDecos(INPUT_TYPE_DRAG_END, MOUSECOORDS, pWindow))
- return;
- }
-
// get the node under our cursor
m_lDwindleNodesData.push_back(SDwindleNodeData());
diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp
index 980311d6..a312555f 100644
--- a/src/layout/IHyprLayout.cpp
+++ b/src/layout/IHyprLayout.cpp
@@ -344,12 +344,6 @@ void IHyprLayout::onEndDragWindow() {
if (pWindow->m_sGroupData.pNextWindow.lock() && DRAGGINGWINDOW->canBeGroupedInto(pWindow) && *PDRAGINTOGROUP == 1 && !FLOATEDINTOTILED) {
- if (DRAGGINGWINDOW->m_bDraggingTiled) {
- changeWindowFloatingMode(DRAGGINGWINDOW);
- DRAGGINGWINDOW->m_vLastFloatingSize = m_vDraggingWindowOriginalFloatSize;
- DRAGGINGWINDOW->m_bDraggingTiled = false;
- }
-
if (DRAGGINGWINDOW->m_sGroupData.pNextWindow) {
PHLWINDOW next = DRAGGINGWINDOW->m_sGroupData.pNextWindow.lock();
while (next != DRAGGINGWINDOW) {
@@ -360,7 +354,9 @@ void IHyprLayout::onEndDragWindow() {
}
}
- DRAGGINGWINDOW->m_bIsFloating = pWindow->m_bIsFloating; // match the floating state of the window
+ DRAGGINGWINDOW->m_bIsFloating = pWindow->m_bIsFloating; // match the floating state of the window
+ DRAGGINGWINDOW->m_vLastFloatingSize = m_vDraggingWindowOriginalFloatSize;
+ DRAGGINGWINDOW->m_bDraggingTiled = false;
if (pWindow->m_bIsFloating)
g_pXWaylandManager->setWindowSize(DRAGGINGWINDOW, pWindow->m_vRealSize.goal()); // match the size of the window
diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp
index afe79ecf..b8b3efea 100644
--- a/src/layout/MasterLayout.cpp
+++ b/src/layout/MasterLayout.cpp
@@ -101,21 +101,15 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire
PNODE->workspaceID = pWindow->workspaceID();
PNODE->pWindow = pWindow;
- const auto WINDOWSONWORKSPACE = getNodesOnWorkspace(PNODE->workspaceID);
- static auto PMFACT = CConfigValue<Hyprlang::FLOAT>("master:mfact");
- float lastSplitPercent = *PMFACT;
+ const auto WINDOWSONWORKSPACE = getNodesOnWorkspace(PNODE->workspaceID);
+ static auto PMFACT = CConfigValue<Hyprlang::FLOAT>("master:mfact");
+ float lastSplitPercent = *PMFACT;
- auto OPENINGON = isWindowTiled(g_pCompositor->m_pLastWindow.lock()) && g_pCompositor->m_pLastWindow->m_pWorkspace == pWindow->m_pWorkspace ?
- getNodeFromWindow(g_pCompositor->m_pLastWindow.lock()) :
- getMasterNodeOnWorkspace(pWindow->workspaceID());
-
- const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal();
-
- if (g_pInputManager->m_bWasDraggingWindow && OPENINGON) {
- if (OPENINGON->pWindow->checkInputOnDecos(INPUT_TYPE_DRAG_END, MOUSECOORDS, pWindow))
- return;
- }
+ auto OPENINGON = isWindowTiled(g_pCompositor->m_pLastWindow.lock()) && g_pCompositor->m_pLastWindow->m_pWorkspace == pWindow->m_pWorkspace ?
+ getNodeFromWindow(g_pCompositor->m_pLastWindow.lock()) :
+ getMasterNodeOnWorkspace(pWindow->workspaceID());
+ const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal();
static auto PDROPATCURSOR = CConfigValue<Hyprlang::INT>("master:drop_at_cursor");
eOrientation orientation = getDynamicOrientation(pWindow->m_pWorkspace);
const auto NODEIT = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), *PNODE);
diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp
index ec9f876b..b5189be5 100644
--- a/src/render/decorations/CHyprGroupBarDecoration.cpp
+++ b/src/render/decorations/CHyprGroupBarDecoration.cpp
@@ -405,10 +405,16 @@ bool CHyprGroupBarDecoration::onEndWindowDragOnDeco(const Vector2D& pos, PHLWIND
static auto PSTACKED = CConfigValue<Hyprlang::INT>("group:groupbar:stacked");
static auto PDRAGINTOGROUP = CConfigValue<Hyprlang::INT>("group:drag_into_group");
static auto PMERGEFLOATEDINTOTILEDONGROUPBAR = CConfigValue<Hyprlang::INT>("group:merge_floated_into_tiled_on_groupbar");
+ static auto PMERGEGROUPSONGROUPBAR = CConfigValue<Hyprlang::INT>("group:merge_groups_on_groupbar");
const bool FLOATEDINTOTILED = !m_pWindow->m_bIsFloating && !pDraggedWindow->m_bDraggingTiled;
- if (!pDraggedWindow->canBeGroupedInto(m_pWindow.lock()) || (*PDRAGINTOGROUP != 1 && *PDRAGINTOGROUP != 2) || (FLOATEDINTOTILED && !*PMERGEFLOATEDINTOTILEDONGROUPBAR))
+ g_pInputManager->m_bWasDraggingWindow = false;
+
+ if (!pDraggedWindow->canBeGroupedInto(m_pWindow.lock()) || (*PDRAGINTOGROUP != 1 && *PDRAGINTOGROUP != 2) || (FLOATEDINTOTILED && !*PMERGEFLOATEDINTOTILEDONGROUPBAR) ||
+ (!*PMERGEGROUPSONGROUPBAR && pDraggedWindow->m_sGroupData.pNextWindow.lock() && m_pWindow->m_sGroupData.pNextWindow.lock())) {
+ g_pInputManager->m_bWasDraggingWindow = true;
return false;
+ }
const float BARRELATIVE = *PSTACKED ? pos.y - assignedBoxGlobal().y - (m_fBarHeight + BAR_PADDING_OUTER_VERT) / 2 : pos.x - assignedBoxGlobal().x - m_fBarWidth / 2;
const float BARSIZE = *PSTACKED ? m_fBarHeight + BAR_PADDING_OUTER_VERT : m_fBarWidth + BAR_HORIZONTAL_PADDING;