mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-08-29 19:03:48 -07:00
keybinds: add an option to respect gaps out for floating to movewindow (#9360)
This commit is contained in:
@@ -32,6 +32,13 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
|
|||||||
.type = CONFIG_OPTION_STRING_SHORT,
|
.type = CONFIG_OPTION_STRING_SHORT,
|
||||||
.data = SConfigOptionDescription::SStringData{"20"},
|
.data = SConfigOptionDescription::SStringData{"20"},
|
||||||
},
|
},
|
||||||
|
SConfigOptionDescription{
|
||||||
|
.value = "general:float_gaps",
|
||||||
|
.description = "gaps between windows and monitor edges for floating windows\n\nsupports css style gaps (top, right, bottom, left -> 5 10 15 20). \n-1 means default "
|
||||||
|
"gaps_in/gaps_out\n0 means no gaps",
|
||||||
|
.type = CONFIG_OPTION_STRING_SHORT,
|
||||||
|
.data = SConfigOptionDescription::SStringData{"0"},
|
||||||
|
},
|
||||||
SConfigOptionDescription{
|
SConfigOptionDescription{
|
||||||
.value = "general:gaps_workspaces",
|
.value = "general:gaps_workspaces",
|
||||||
.description = "gaps between workspaces. Stacks with gaps_out.",
|
.description = "gaps between workspaces. Stacks with gaps_out.",
|
||||||
|
@@ -444,6 +444,7 @@ CConfigManager::CConfigManager() {
|
|||||||
registerConfigVar("general:no_border_on_floating", Hyprlang::INT{0});
|
registerConfigVar("general:no_border_on_floating", Hyprlang::INT{0});
|
||||||
registerConfigVar("general:gaps_in", Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, "5"});
|
registerConfigVar("general:gaps_in", Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, "5"});
|
||||||
registerConfigVar("general:gaps_out", Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, "20"});
|
registerConfigVar("general:gaps_out", Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, "20"});
|
||||||
|
registerConfigVar("general:float_gaps", Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, "0"});
|
||||||
registerConfigVar("general:gaps_workspaces", Hyprlang::INT{0});
|
registerConfigVar("general:gaps_workspaces", Hyprlang::INT{0});
|
||||||
registerConfigVar("general:no_focus_fallback", Hyprlang::INT{0});
|
registerConfigVar("general:no_focus_fallback", Hyprlang::INT{0});
|
||||||
registerConfigVar("general:resize_on_border", Hyprlang::INT{0});
|
registerConfigVar("general:resize_on_border", Hyprlang::INT{0});
|
||||||
@@ -1318,6 +1319,8 @@ SWorkspaceRule CConfigManager::mergeWorkspaceRules(const SWorkspaceRule& rule1,
|
|||||||
mergedRule.gapsIn = rule2.gapsIn;
|
mergedRule.gapsIn = rule2.gapsIn;
|
||||||
if (rule2.gapsOut.has_value())
|
if (rule2.gapsOut.has_value())
|
||||||
mergedRule.gapsOut = rule2.gapsOut;
|
mergedRule.gapsOut = rule2.gapsOut;
|
||||||
|
if (rule2.floatGaps)
|
||||||
|
mergedRule.floatGaps = rule2.floatGaps;
|
||||||
if (rule2.borderSize.has_value())
|
if (rule2.borderSize.has_value())
|
||||||
mergedRule.borderSize = rule2.borderSize;
|
mergedRule.borderSize = rule2.borderSize;
|
||||||
if (rule2.noBorder.has_value())
|
if (rule2.noBorder.has_value())
|
||||||
|
@@ -36,6 +36,7 @@ struct SWorkspaceRule {
|
|||||||
bool isPersistent = false;
|
bool isPersistent = false;
|
||||||
std::optional<CCssGapData> gapsIn;
|
std::optional<CCssGapData> gapsIn;
|
||||||
std::optional<CCssGapData> gapsOut;
|
std::optional<CCssGapData> gapsOut;
|
||||||
|
std::optional<CCssGapData> floatGaps = gapsOut;
|
||||||
std::optional<int64_t> borderSize;
|
std::optional<int64_t> borderSize;
|
||||||
std::optional<bool> decorate;
|
std::optional<bool> decorate;
|
||||||
std::optional<bool> noRounding;
|
std::optional<bool> noRounding;
|
||||||
|
@@ -1682,16 +1682,25 @@ SDispatchResult CKeybindManager::moveActiveTo(std::string args) {
|
|||||||
|
|
||||||
if (PLASTWINDOW->m_isFloating) {
|
if (PLASTWINDOW->m_isFloating) {
|
||||||
std::optional<float> vPosx, vPosy;
|
std::optional<float> vPosx, vPosy;
|
||||||
const auto PMONITOR = PLASTWINDOW->m_monitor.lock();
|
const auto PMONITOR = PLASTWINDOW->m_monitor.lock();
|
||||||
const auto BORDERSIZE = PLASTWINDOW->getRealBorderSize();
|
const auto BORDERSIZE = PLASTWINDOW->getRealBorderSize();
|
||||||
|
static auto PGAPSCUSTOMDATA = CConfigValue<Hyprlang::CUSTOMTYPE>("general:float_gaps");
|
||||||
|
static auto PGAPSOUTDATA = CConfigValue<Hyprlang::CUSTOMTYPE>("general:gaps_out");
|
||||||
|
auto* PGAPSOUT = (CCssGapData*)PGAPSCUSTOMDATA.ptr()->getData();
|
||||||
|
if (PGAPSOUT->m_left < 0 || PGAPSOUT->m_right < 0 || PGAPSOUT->m_top < 0 || PGAPSOUT->m_bottom < 0)
|
||||||
|
PGAPSOUT = (CCssGapData*)PGAPSOUTDATA.ptr()->getData();
|
||||||
|
|
||||||
switch (arg) {
|
switch (arg) {
|
||||||
case 'l': vPosx = PMONITOR->m_reservedTopLeft.x + BORDERSIZE + PMONITOR->m_position.x; break;
|
case 'l': vPosx = PMONITOR->m_reservedTopLeft.x + BORDERSIZE + PMONITOR->m_position.x + PGAPSOUT->m_left; break;
|
||||||
case 'r': vPosx = PMONITOR->m_size.x - PMONITOR->m_reservedBottomRight.x - PLASTWINDOW->m_realSize->goal().x - BORDERSIZE + PMONITOR->m_position.x; break;
|
case 'r':
|
||||||
|
vPosx = PMONITOR->m_size.x - PMONITOR->m_reservedBottomRight.x - PLASTWINDOW->m_realSize->goal().x - BORDERSIZE + PMONITOR->m_position.x - PGAPSOUT->m_right;
|
||||||
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
case 'u': vPosy = PMONITOR->m_reservedTopLeft.y + BORDERSIZE + PMONITOR->m_position.y; break;
|
case 'u': vPosy = PMONITOR->m_reservedTopLeft.y + BORDERSIZE + PMONITOR->m_position.y + PGAPSOUT->m_top; break;
|
||||||
case 'b':
|
case 'b':
|
||||||
case 'd': vPosy = PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y - PLASTWINDOW->m_realSize->goal().y - BORDERSIZE + PMONITOR->m_position.y; break;
|
case 'd':
|
||||||
|
vPosy = PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y - PLASTWINDOW->m_realSize->goal().y - BORDERSIZE + PMONITOR->m_position.y - PGAPSOUT->m_bottom;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
*PLASTWINDOW->m_realPosition = Vector2D(vPosx.value_or(PLASTWINDOW->m_realPosition->goal().x), vPosy.value_or(PLASTWINDOW->m_realPosition->goal().y));
|
*PLASTWINDOW->m_realPosition = Vector2D(vPosx.value_or(PLASTWINDOW->m_realPosition->goal().x), vPosy.value_or(PLASTWINDOW->m_realPosition->goal().y));
|
||||||
|
Reference in New Issue
Block a user