Merge branch 'DRAGONTOS-master'

This commit is contained in:
Kaley, Fischer 2024-04-01 22:01:04 +02:00
commit 0b6a44f5ff
7 changed files with 134 additions and 61 deletions

View file

@ -1,5 +1,10 @@
# Changelog
## hl0.37.1 and before
- Added `no_gaps_when_only = 2`
- Fixed fullscreen not working on workspaces with only floating windows
## hl0.36.0 and before
- Implement `resizeactivewindow` for floating windows

View file

@ -162,7 +162,10 @@ configuration options, and some explanation as to what they do.
plugin {
hy3 {
# disable gaps when only one window is onscreen
no_gaps_when_only = <bool> # default: false
# 0 - always show gaps
# 1 - hide gaps with a single window onscreen
# 2 - 1 but also show the window border
no_gaps_when_only = <int> # default: 0
# policy controlling what happens when a node is removed from a group,
# leaving only a group

112
flake.lock generated
View file

@ -1,34 +1,52 @@
{
"nodes": {
"hyprcursor": {
"inputs": {
"hyprlang": "hyprlang",
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1710257359,
"narHash": "sha256-43re5pzE/cswFAgw92/ugsB3+d5ufDaCcLtl9ztKfBo=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "1761f6cefd77f4fcd2039d930c88d6716ddc4974",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprcursor",
"type": "github"
}
},
"hyprland": {
"inputs": {
"hyprcursor": "hyprcursor",
"hyprland-protocols": "hyprland-protocols",
"hyprlang": "hyprlang",
"hyprlang": "hyprlang_2",
"nixpkgs": "nixpkgs",
"systems": "systems",
"systems": "systems_2",
"wlroots": "wlroots",
"xdph": "xdph"
},
"locked": {
<<<<<<< HEAD
"lastModified": 1709720053,
"narHash": "sha256-hR0RSeqFOXCggqbGhkFZT3ZAbGc2cAoeeyXU3V5J4hU=",
"lastModified": 1710600709,
"narHash": "sha256-W+34KhCnqscRXN/IkvuJMiVx0Fa64RcYn8H4sZjzceI=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "d6f1b151b2fe85ffbb131cbdd05acefc6a357e81",
"rev": "c5e28ebcfe00a510922779b2c568cfa52a317445",
"type": "github"
=======
"lastModified": 1709080360,
"narHash": "sha256-oZe4k6jtO/0govmERGcbeyvE9EfTvXY5bnyIs6AsL9U=",
"ref": "v0.36.0",
"rev": "1c460e98f870676b15871fe4e5bfeb1a32a3d6d8",
"revCount": 4102,
"type": "git",
"url": "file:///home/admin/programming/outfoxxed/hyprland/Hyprland"
>>>>>>> parent of a392bfd (Fix breakage after hyprland#4911)
},
"original": {
"owner": "hyprwm",
"ref": "v0.37.1",
"repo": "Hyprland",
"type": "github"
}
@ -59,6 +77,29 @@
}
},
"hyprlang": {
"inputs": {
"nixpkgs": [
"hyprland",
"hyprcursor",
"nixpkgs"
],
"systems": "systems"
},
"locked": {
"lastModified": 1709914708,
"narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprlang_2": {
"inputs": {
"nixpkgs": [
"hyprland",
@ -70,11 +111,11 @@
]
},
"locked": {
"lastModified": 1708787654,
"narHash": "sha256-7ACgM3ZuAhPqurXHUvR2nWMRcnmzGGPjLK6q4DSTelI=",
"lastModified": 1709914708,
"narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "0fce791ba2334aca183f2ed42399518947550d0d",
"rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2",
"type": "github"
},
"original": {
@ -85,11 +126,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1708807242,
"narHash": "sha256-sRTRkhMD4delO/hPxxi+XwLqPn8BuUq6nnj4JqLwOu0=",
"lastModified": 1710272261,
"narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "73de017ef2d18a04ac4bfd0c02650007ccb31c2a",
"rev": "0ad13a6833440b8e238947e47bea7f11071dc2b2",
"type": "github"
},
"original": {
@ -119,22 +160,37 @@
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"wlroots": {
"flake": false,
"locked": {
"host": "gitlab.freedesktop.org",
"lastModified": 1708558866,
"narHash": "sha256-Mz6hCtommq7RQfcPnxLINigO4RYSNt23HeJHC6mVmWI=",
"lastModified": 1709983277,
"narHash": "sha256-wXWIJLd4F2JZeMaihWVDW/yYXCLEC8OpeNJZg9a9ly8=",
"owner": "wlroots",
"repo": "wlroots",
"rev": "0cb091f1a2d345f37d2ee445f4ffd04f7f4ec9e5",
"rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b",
"type": "gitlab"
},
"original": {
"host": "gitlab.freedesktop.org",
"owner": "wlroots",
"repo": "wlroots",
"rev": "0cb091f1a2d345f37d2ee445f4ffd04f7f4ec9e5",
"rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b",
"type": "gitlab"
}
},
@ -158,11 +214,11 @@
]
},
"locked": {
"lastModified": 1708696469,
"narHash": "sha256-shh5wmpeYy3MmsBfkm4f76yPsBDGk6OLYRVG+ARy2F0=",
"lastModified": 1709299639,
"narHash": "sha256-jYqJM5khksLIbqSxCLUUcqEgI+O2LdlSlcMEBs39CAU=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "1b713911c2f12b96c2574474686e4027ac4bf826",
"rev": "2d2fb547178ec025da643db57d40a971507b82fe",
"type": "github"
},
"original": {

View file

@ -1,6 +1,6 @@
{
inputs = {
hyprland.url = "github:hyprwm/Hyprland";
hyprland.url = "github:hyprwm/Hyprland?ref=v0.37.1";
};
outputs = { self, hyprland, ... }: let

View file

@ -1,6 +1,12 @@
[repository]
name = "hy3"
authors = ["outfoxxed, DRAGONTOS"]
commit_pins = [
["03ebbe18ed8517ee22591eac82cd54322f42cb7d", "2f28dc810c0e1f42763a1f14fb011c4fce6db8be"],
["84ab8d11e8951a6551d1e1bf87796a8589da6d47", "d3e20856a9896f28b506195b31407eddc6df2e20"],
["1c460e98f870676b15871fe4e5bfeb1a32a3d6d8", "c880e0f00946273ee0304bba9c1de276062d496f"],
["c5e28ebcfe00a510922779b2c568cfa52a317445", "8ac36f3954619a9a5c1a1bb3296f782452987e82"]
]
[hy3]
description = "i3 like tiling for hyprland"

View file

@ -1508,7 +1508,9 @@ Hy3Node* findTabBarAt(Hy3Node& node, Vector2D pos, Hy3Node** focused_node) {
for (auto& tab: tab_bar.bar.entries) {
if (child_iter == children.end()) break;
if (x > tab.offset.fl() * size.x && x < (tab.offset.fl() + tab.width.fl()) * size.x) {
if (x > tab.offset.value() * size.x
&& x < (tab.offset.value() + tab.width.value()) * size.x)
{
*focused_node = *child_iter;
return &node;
}
@ -1864,10 +1866,11 @@ void Hy3Layout::applyNodeDataToWindow(Hy3Node* node, bool no_animation) {
if (node->data.type != Hy3NodeType::Window) return;
auto* window = node->data.as_window;
auto root_node = this->getWorkspaceRootGroup(window->m_iWorkspaceID);
if (root_node == nullptr) return;
CMonitor* monitor = nullptr;
auto* workspace = g_pCompositor->getWorkspaceByID(node->workspace_id);
if (g_pCompositor->isWorkspaceSpecial(node->workspace_id)) {
for (auto& m: g_pCompositor->m_vMonitors) {
if (m->specialWorkspaceID == node->workspace_id) {
@ -1875,12 +1878,8 @@ void Hy3Layout::applyNodeDataToWindow(Hy3Node* node, bool no_animation) {
break;
}
}
}
if (monitor == nullptr) {
monitor = g_pCompositor->getMonitorFromID(
g_pCompositor->getWorkspaceByID(node->workspace_id)->m_iMonitorID
);
} else {
monitor = g_pCompositor->getMonitorFromID(workspace->m_iMonitorID);
}
if (monitor == nullptr) {
@ -1893,9 +1892,11 @@ void Hy3Layout::applyNodeDataToWindow(Hy3Node* node, bool no_animation) {
return;
}
const auto workspace_rule = g_pConfigManager->getWorkspaceRuleFor(workspace);
// clang-format off
static const auto gaps_in = ConfigValue<Hyprlang::CUSTOMTYPE, CCssGapData>("general:gaps_in");
static const auto single_window_no_gaps = ConfigValue<Hyprlang::INT>("plugin:hy3:no_gaps_when_only");
static const auto no_gaps_when_only = ConfigValue<Hyprlang::INT>("plugin:hy3:no_gaps_when_only");
// clang-format on
if (!g_pCompositor->windowExists(window) || !window->m_bIsMapped) {
@ -1911,35 +1912,36 @@ void Hy3Layout::applyNodeDataToWindow(Hy3Node* node, bool no_animation) {
return;
}
window->m_vSize = node->size;
window->m_vPosition = node->position;
window->updateSpecialRenderData();
auto only_node = root_node->data.as_group.children.size() == 1
auto nodeBox = CBox(node->position, node->size);
nodeBox.round();
window->m_vSize = nodeBox.size();
window->m_vPosition = nodeBox.pos();
auto only_node = root_node != nullptr && root_node->data.as_group.children.size() == 1
&& root_node->data.as_group.children.front()->data.type == Hy3NodeType::Window;
if (!g_pCompositor->isWorkspaceSpecial(window->m_iWorkspaceID)
&& ((*single_window_no_gaps && (only_node || window->m_bIsFullscreen))
&& ((*no_gaps_when_only != 0 && (only_node || window->m_bIsFullscreen))
|| (window->m_bIsFullscreen
&& g_pCompositor->getWorkspaceByID(window->m_iWorkspaceID)->m_efFullscreenMode
== FULLSCREEN_FULL)))
{
CBox wb = {window->m_vPosition, window->m_vSize};
wb.round();
window->m_vRealPosition = wb.pos();
window->m_vRealSize = wb.size();
window->m_sSpecialRenderData.border = workspace_rule.border.value_or(*no_gaps_when_only == 2);
window->m_sSpecialRenderData.rounding = false;
window->m_sSpecialRenderData.shadow = false;
window->updateWindowDecos();
window->m_sSpecialRenderData.rounding = false;
window->m_sSpecialRenderData.border = false;
window->m_sSpecialRenderData.decorate = false;
} else {
window->m_sSpecialRenderData.rounding = true;
window->m_sSpecialRenderData.border = true;
window->m_sSpecialRenderData.decorate = true;
const auto reserved = window->getFullWindowReservedArea();
window->m_vRealPosition = window->m_vPosition + reserved.topLeft;
window->m_vRealSize = window->m_vSize - (reserved.topLeft + reserved.bottomRight);
g_pXWaylandManager->setWindowSize(window, window->m_vRealSize.goal());
} else {
auto calcPos = window->m_vPosition;
auto calcSize = window->m_vSize;
@ -1968,7 +1970,7 @@ void Hy3Layout::applyNodeDataToWindow(Hy3Node* node, bool no_animation) {
window->m_vRealPosition = wb.pos();
window->m_vRealSize = wb.size();
g_pXWaylandManager->setWindowSize(window, calcSize);
g_pXWaylandManager->setWindowSize(window, wb.size());
if (no_animation) {
g_pHyprRenderer->damageWindow(window);

View file

@ -396,8 +396,9 @@ void Hy3TabBar::updateAnimations(bool warp) {
auto entry = this->entries.begin();
while (entry != this->entries.end()) {
if (warp) {
if (entry->width.goalf() == 0.0) {
this->entries.erase(entry++);
if (entry->width.goal() == 0.0) {
// this->entries.erase(entry++);
entry = std::next(entry);
continue;
}
@ -613,8 +614,8 @@ void Hy3TabGroup::renderTabBar() {
Vector2D entry_pos = {
(pos.x + (entry.offset.fl() * size.x) + (*padding * 0.5)) * scale,
scaled_pos.y
+ ((entry.vertical_pos.fl() * (size.y + *padding) * scale) * (*enter_from_top ? -1 : 1)
),
+ ((entry.vertical_pos.value() * (size.y + *padding) * scale)
* (*enter_from_top ? -1 : 1)),
};
Vector2D entry_size = {((entry.width.fl() * size.x) - *padding) * scale, scaled_size.y};
if (entry_size.x < 0 || entry_size.y < 0 || fade_opacity == 0.0) return;