mirror of
https://github.com/Trensa-Organization/hy3.git
synced 2025-03-15 18:53:40 +01:00
Merge branch 'master' of https://github.com/DRAGONTOS/hy3 into DRAGONTOS-master
This commit is contained in:
commit
ee6d573296
7 changed files with 134 additions and 61 deletions
|
@ -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
|
||||
|
|
|
@ -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
112
flake.lock
generated
|
@ -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": {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
inputs = {
|
||||
hyprland.url = "github:hyprwm/Hyprland";
|
||||
hyprland.url = "github:hyprwm/Hyprland?ref=v0.37.1";
|
||||
};
|
||||
|
||||
outputs = { self, hyprland, ... }: let
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue