fixup: fix hook + layout breakage

fixes #102
This commit is contained in:
outfoxxed 2024-04-22 22:30:37 -07:00
parent 3331340702
commit e6cabcfa3d
No known key found for this signature in database
GPG key ID: 4C88A185FB89301E
4 changed files with 62 additions and 39 deletions

66
flake.lock generated
View file

@ -16,11 +16,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1712434681, "lastModified": 1713612213,
"narHash": "sha256-qwmR2p1oc48Bj7gUDvb1oGL19Rjs2PmEmk4ChV01A5o=", "narHash": "sha256-zJboXgWNpNhKyNF8H/3UYzWkx7w00TOCGKi3cwi+tsw=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprcursor", "repo": "hyprcursor",
"rev": "818d8c4b69e0997483d60b75f701fe14b561a7a3", "rev": "cab4746180f210a3c1dd3d53e45c510e309e90e1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -34,22 +34,23 @@
"hyprcursor": "hyprcursor", "hyprcursor": "hyprcursor",
"hyprland-protocols": "hyprland-protocols", "hyprland-protocols": "hyprland-protocols",
"hyprlang": "hyprlang", "hyprlang": "hyprlang",
"hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"systems": "systems", "systems": "systems",
"wlroots": "wlroots", "wlroots": "wlroots",
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1713283263, "lastModified": 1713819507,
"narHash": "sha256-Urb/njWiHYUudXpmK8EKl9Z58esTIG0PxXw5LuM2r5g=", "narHash": "sha256-mG0kD8HmkCsHRkTBmqGb/QvM1vAvkAmB5p2H5XQ0zLo=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "Hyprland", "repo": "Hyprland",
"rev": "fe7b748eb668136dd0558b7c8279bfcd7ab4d759", "rev": "da839f20f1b1a57ec78d6b041f8d1369150d253e",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "hyprwm", "owner": "hyprwm",
"ref": "fe7b748eb668136dd0558b7c8279bfcd7ab4d759", "ref": "da839f20f1b1a57ec78d6b041f8d1369150d253e",
"repo": "Hyprland", "repo": "Hyprland",
"type": "github" "type": "github"
} }
@ -91,11 +92,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1711671891, "lastModified": 1713121246,
"narHash": "sha256-C/Wwsy/RLxHP1axFFl+AnwJRWfd8gxDKKoa8nt8Qk3c=", "narHash": "sha256-502X0Q0fhN6tJK7iEUA8CghONKSatW/Mqj4Wappd++0=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlang", "repo": "hyprlang",
"rev": "c1402612146ba06606ebf64963a02bc1efe11e74", "rev": "78fcaa27ae9e1d782faa3ff06c8ea55ddce63706",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -104,13 +105,38 @@
"type": "github" "type": "github"
} }
}, },
"hyprwayland-scanner": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1713730424,
"narHash": "sha256-MqYjTvQCxwuDIuAaqIEuyqserm5PYr0auiHHPuYFN/k=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "7c9c8adfe7e424faa0c5ce6e8be90157fda53c06",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1712439257, "lastModified": 1713537308,
"narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=", "narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "ff0dbd94265ac470dda06a657d5fe49de93b4599", "rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -143,17 +169,17 @@
"wlroots": { "wlroots": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1713124002, "lastModified": 1713731601,
"narHash": "sha256-vPeZCY+sdiGsz4fl3AVVujfyZyQBz6+vZdkUE4hQ+HI=", "narHash": "sha256-bdcKdtLkusvv85DNuJsajZLFeq7bXp+x5AGP1Sd4wD8=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "wlroots-hyprland", "repo": "wlroots-hyprland",
"rev": "611a4f24cd2384378f6e500253983107c6656c64", "rev": "5c1d51c5a2793480f5b6c4341ad0797052aec2ea",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "hyprwm", "owner": "hyprwm",
"repo": "wlroots-hyprland", "repo": "wlroots-hyprland",
"rev": "611a4f24cd2384378f6e500253983107c6656c64", "rev": "5c1d51c5a2793480f5b6c4341ad0797052aec2ea",
"type": "github" "type": "github"
} }
}, },
@ -177,11 +203,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1709299639, "lastModified": 1713724432,
"narHash": "sha256-jYqJM5khksLIbqSxCLUUcqEgI+O2LdlSlcMEBs39CAU=", "narHash": "sha256-dtU1y4oj/0Y42oauzm93ucFg1AoqETnQ21bmXTIUng0=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland", "repo": "xdg-desktop-portal-hyprland",
"rev": "2d2fb547178ec025da643db57d40a971507b82fe", "rev": "9ace6f969ce495185df34cc6254fb9d297765478",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

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

View file

@ -10,14 +10,10 @@
#include "SelectionHook.hpp" #include "SelectionHook.hpp"
#include "globals.hpp" #include "globals.hpp"
std::unique_ptr<HOOK_CALLBACK_FN> renderHookPtr = std::shared_ptr<HOOK_CALLBACK_FN> renderHookPtr;
std::make_unique<HOOK_CALLBACK_FN>(Hy3Layout::renderHook); std::shared_ptr<HOOK_CALLBACK_FN> windowTitleHookPtr;
std::unique_ptr<HOOK_CALLBACK_FN> windowTitleHookPtr = std::shared_ptr<HOOK_CALLBACK_FN> urgentHookPtr;
std::make_unique<HOOK_CALLBACK_FN>(Hy3Layout::windowGroupUpdateRecursiveHook); std::shared_ptr<HOOK_CALLBACK_FN> tickHookPtr;
std::unique_ptr<HOOK_CALLBACK_FN> urgentHookPtr =
std::make_unique<HOOK_CALLBACK_FN>(Hy3Layout::windowGroupUrgentHook);
std::unique_ptr<HOOK_CALLBACK_FN> tickHookPtr =
std::make_unique<HOOK_CALLBACK_FN>(Hy3Layout::tickHook);
bool performContainment(Hy3Node& node, bool contained, CWindow* window) { bool performContainment(Hy3Node& node, bool contained, CWindow* window) {
if (node.data.type == Hy3NodeType::Group) { if (node.data.type == Hy3NodeType::Group) {
@ -604,7 +600,8 @@ void Hy3Layout::switchWindows(CWindow* pWindowA, CWindow* pWindowB) {
// todo // todo
} }
void Hy3Layout::moveWindowTo(CWindow* window, const std::string& direction) { void Hy3Layout::moveWindowTo(CWindow* window, const std::string& direction, bool silent) {
// todo: support silent
auto* node = this->getNodeFromWindow(window); auto* node = this->getNodeFromWindow(window);
if (node == nullptr) return; if (node == nullptr) return;
@ -677,18 +674,18 @@ void Hy3Layout::onEnable() {
this->onWindowCreatedTiling(window.get()); this->onWindowCreatedTiling(window.get());
} }
HyprlandAPI::registerCallbackStatic(PHANDLE, "render", renderHookPtr.get()); renderHookPtr = HyprlandAPI::registerCallbackDynamic(PHANDLE, "render", &Hy3Layout::renderHook);
HyprlandAPI::registerCallbackStatic(PHANDLE, "windowTitle", windowTitleHookPtr.get()); windowTitleHookPtr = HyprlandAPI::registerCallbackDynamic(PHANDLE, "windowTitle", &Hy3Layout::windowGroupUpdateRecursiveHook);
HyprlandAPI::registerCallbackStatic(PHANDLE, "urgent", urgentHookPtr.get()); urgentHookPtr = HyprlandAPI::registerCallbackDynamic(PHANDLE, "urgent", &Hy3Layout::windowGroupUrgentHook);
HyprlandAPI::registerCallbackStatic(PHANDLE, "tick", tickHookPtr.get()); tickHookPtr = HyprlandAPI::registerCallbackDynamic(PHANDLE, "tick", &Hy3Layout::tickHook);
selection_hook::enable(); selection_hook::enable();
} }
void Hy3Layout::onDisable() { void Hy3Layout::onDisable() {
HyprlandAPI::unregisterCallback(PHANDLE, renderHookPtr.get()); renderHookPtr.reset();
HyprlandAPI::unregisterCallback(PHANDLE, windowTitleHookPtr.get()); windowTitleHookPtr.reset();
HyprlandAPI::unregisterCallback(PHANDLE, urgentHookPtr.get()); urgentHookPtr.reset();
HyprlandAPI::unregisterCallback(PHANDLE, tickHookPtr.get()); tickHookPtr.reset();
selection_hook::disable(); selection_hook::disable();
for (auto& node: this->nodes) { for (auto& node: this->nodes) {

View file

@ -83,7 +83,7 @@ public:
virtual std::any layoutMessage(SLayoutMessageHeader header, std::string content); virtual std::any layoutMessage(SLayoutMessageHeader header, std::string content);
virtual SWindowRenderLayoutHints requestRenderHints(CWindow*); virtual SWindowRenderLayoutHints requestRenderHints(CWindow*);
virtual void switchWindows(CWindow*, CWindow*); virtual void switchWindows(CWindow*, CWindow*);
virtual void moveWindowTo(CWindow*, const std::string& direction); virtual void moveWindowTo(CWindow*, const std::string& direction, bool silent);
virtual void alterSplitRatio(CWindow*, float, bool); virtual void alterSplitRatio(CWindow*, float, bool);
virtual std::string getLayoutName(); virtual std::string getLayoutName();
virtual CWindow* getNextWindowCandidate(CWindow*); virtual CWindow* getNextWindowCandidate(CWindow*);