diff --git a/flake.lock b/flake.lock index df88212..7b5053a 100644 --- a/flake.lock +++ b/flake.lock @@ -16,11 +16,11 @@ ] }, "locked": { - "lastModified": 1712434681, - "narHash": "sha256-qwmR2p1oc48Bj7gUDvb1oGL19Rjs2PmEmk4ChV01A5o=", + "lastModified": 1713612213, + "narHash": "sha256-zJboXgWNpNhKyNF8H/3UYzWkx7w00TOCGKi3cwi+tsw=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "818d8c4b69e0997483d60b75f701fe14b561a7a3", + "rev": "cab4746180f210a3c1dd3d53e45c510e309e90e1", "type": "github" }, "original": { @@ -34,22 +34,23 @@ "hyprcursor": "hyprcursor", "hyprland-protocols": "hyprland-protocols", "hyprlang": "hyprlang", + "hyprwayland-scanner": "hyprwayland-scanner", "nixpkgs": "nixpkgs", "systems": "systems", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1713283263, - "narHash": "sha256-Urb/njWiHYUudXpmK8EKl9Z58esTIG0PxXw5LuM2r5g=", + "lastModified": 1713819507, + "narHash": "sha256-mG0kD8HmkCsHRkTBmqGb/QvM1vAvkAmB5p2H5XQ0zLo=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "fe7b748eb668136dd0558b7c8279bfcd7ab4d759", + "rev": "da839f20f1b1a57ec78d6b041f8d1369150d253e", "type": "github" }, "original": { "owner": "hyprwm", - "ref": "fe7b748eb668136dd0558b7c8279bfcd7ab4d759", + "ref": "da839f20f1b1a57ec78d6b041f8d1369150d253e", "repo": "Hyprland", "type": "github" } @@ -91,11 +92,11 @@ ] }, "locked": { - "lastModified": 1711671891, - "narHash": "sha256-C/Wwsy/RLxHP1axFFl+AnwJRWfd8gxDKKoa8nt8Qk3c=", + "lastModified": 1713121246, + "narHash": "sha256-502X0Q0fhN6tJK7iEUA8CghONKSatW/Mqj4Wappd++0=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "c1402612146ba06606ebf64963a02bc1efe11e74", + "rev": "78fcaa27ae9e1d782faa3ff06c8ea55ddce63706", "type": "github" }, "original": { @@ -104,13 +105,38 @@ "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": { "locked": { - "lastModified": 1712439257, - "narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=", + "lastModified": 1713537308, + "narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ff0dbd94265ac470dda06a657d5fe49de93b4599", + "rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f", "type": "github" }, "original": { @@ -143,17 +169,17 @@ "wlroots": { "flake": false, "locked": { - "lastModified": 1713124002, - "narHash": "sha256-vPeZCY+sdiGsz4fl3AVVujfyZyQBz6+vZdkUE4hQ+HI=", + "lastModified": 1713731601, + "narHash": "sha256-bdcKdtLkusvv85DNuJsajZLFeq7bXp+x5AGP1Sd4wD8=", "owner": "hyprwm", "repo": "wlroots-hyprland", - "rev": "611a4f24cd2384378f6e500253983107c6656c64", + "rev": "5c1d51c5a2793480f5b6c4341ad0797052aec2ea", "type": "github" }, "original": { "owner": "hyprwm", "repo": "wlroots-hyprland", - "rev": "611a4f24cd2384378f6e500253983107c6656c64", + "rev": "5c1d51c5a2793480f5b6c4341ad0797052aec2ea", "type": "github" } }, @@ -177,11 +203,11 @@ ] }, "locked": { - "lastModified": 1709299639, - "narHash": "sha256-jYqJM5khksLIbqSxCLUUcqEgI+O2LdlSlcMEBs39CAU=", + "lastModified": 1713724432, + "narHash": "sha256-dtU1y4oj/0Y42oauzm93ucFg1AoqETnQ21bmXTIUng0=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "2d2fb547178ec025da643db57d40a971507b82fe", + "rev": "9ace6f969ce495185df34cc6254fb9d297765478", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index b6c1b26..998ea51 100644 --- a/flake.nix +++ b/flake.nix @@ -1,6 +1,6 @@ { inputs = { - hyprland.url = "github:hyprwm/Hyprland?ref=fe7b748eb668136dd0558b7c8279bfcd7ab4d759"; + hyprland.url = "github:hyprwm/Hyprland?ref=da839f20f1b1a57ec78d6b041f8d1369150d253e"; }; outputs = { self, hyprland, ... }: let diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp index d54b90d..ca60aa0 100644 --- a/src/Hy3Layout.cpp +++ b/src/Hy3Layout.cpp @@ -10,14 +10,10 @@ #include "SelectionHook.hpp" #include "globals.hpp" -std::unique_ptr renderHookPtr = - std::make_unique(Hy3Layout::renderHook); -std::unique_ptr windowTitleHookPtr = - std::make_unique(Hy3Layout::windowGroupUpdateRecursiveHook); -std::unique_ptr urgentHookPtr = - std::make_unique(Hy3Layout::windowGroupUrgentHook); -std::unique_ptr tickHookPtr = - std::make_unique(Hy3Layout::tickHook); +std::shared_ptr renderHookPtr; +std::shared_ptr windowTitleHookPtr; +std::shared_ptr urgentHookPtr; +std::shared_ptr tickHookPtr; bool performContainment(Hy3Node& node, bool contained, CWindow* window) { if (node.data.type == Hy3NodeType::Group) { @@ -604,7 +600,8 @@ void Hy3Layout::switchWindows(CWindow* pWindowA, CWindow* pWindowB) { // 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); if (node == nullptr) return; @@ -677,18 +674,18 @@ void Hy3Layout::onEnable() { this->onWindowCreatedTiling(window.get()); } - HyprlandAPI::registerCallbackStatic(PHANDLE, "render", renderHookPtr.get()); - HyprlandAPI::registerCallbackStatic(PHANDLE, "windowTitle", windowTitleHookPtr.get()); - HyprlandAPI::registerCallbackStatic(PHANDLE, "urgent", urgentHookPtr.get()); - HyprlandAPI::registerCallbackStatic(PHANDLE, "tick", tickHookPtr.get()); + renderHookPtr = HyprlandAPI::registerCallbackDynamic(PHANDLE, "render", &Hy3Layout::renderHook); + windowTitleHookPtr = HyprlandAPI::registerCallbackDynamic(PHANDLE, "windowTitle", &Hy3Layout::windowGroupUpdateRecursiveHook); + urgentHookPtr = HyprlandAPI::registerCallbackDynamic(PHANDLE, "urgent", &Hy3Layout::windowGroupUrgentHook); + tickHookPtr = HyprlandAPI::registerCallbackDynamic(PHANDLE, "tick", &Hy3Layout::tickHook); selection_hook::enable(); } void Hy3Layout::onDisable() { - HyprlandAPI::unregisterCallback(PHANDLE, renderHookPtr.get()); - HyprlandAPI::unregisterCallback(PHANDLE, windowTitleHookPtr.get()); - HyprlandAPI::unregisterCallback(PHANDLE, urgentHookPtr.get()); - HyprlandAPI::unregisterCallback(PHANDLE, tickHookPtr.get()); + renderHookPtr.reset(); + windowTitleHookPtr.reset(); + urgentHookPtr.reset(); + tickHookPtr.reset(); selection_hook::disable(); for (auto& node: this->nodes) { diff --git a/src/Hy3Layout.hpp b/src/Hy3Layout.hpp index 930d91d..3bb27de 100644 --- a/src/Hy3Layout.hpp +++ b/src/Hy3Layout.hpp @@ -83,7 +83,7 @@ public: virtual std::any layoutMessage(SLayoutMessageHeader header, std::string content); virtual SWindowRenderLayoutHints requestRenderHints(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 std::string getLayoutName(); virtual CWindow* getNextWindowCandidate(CWindow*);