From acf3c62aae3bef97c2178e57be46da6e024d8fbc Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Wed, 19 Jul 2023 04:05:23 -0700 Subject: [PATCH] Fix support for window focus requests Closes #7 --- flake.lock | 6 +++--- src/Hy3Layout.cpp | 6 ++++++ src/Hy3Layout.hpp | 1 + src/Hy3Node.cpp | 1 + 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index a32c989..ed88db1 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1689720698, - "narHash": "sha256-DjW5GZlzULXKdEVag13OEV3/hog1k/5ZjSIRIPOHrcQ=", + "lastModified": 1689763185, + "narHash": "sha256-YOkboQ2w9Zz+jEeQBtFKQGBSYMPPNpFUrN+XYaslH8Q=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "81f4a4f47182c15ee9436d9ab7b2e425a096ce5b", + "rev": "5cd5631fb226e315a233473c961714ed1c73840f", "type": "github" }, "original": { diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp index d6ff9f3..525379e 100644 --- a/src/Hy3Layout.cpp +++ b/src/Hy3Layout.cpp @@ -605,6 +605,12 @@ void Hy3Layout::replaceWindowDataWith(CWindow* from, CWindow* to) { this->applyNodeDataToWindow(node); } +void Hy3Layout::requestFocusForWindow(CWindow* window) { + auto node = this->getNodeFromWindow(window); + if (node == nullptr) return; + node->focusWindow(); +} + void Hy3Layout::onEnable() { for (auto& window: g_pCompositor->m_vWindows) { if (window->isHidden() || !window->m_bIsMapped || window->m_bFadingOut || window->m_bIsFloating) diff --git a/src/Hy3Layout.hpp b/src/Hy3Layout.hpp index dfe1beb..1a35249 100644 --- a/src/Hy3Layout.hpp +++ b/src/Hy3Layout.hpp @@ -62,6 +62,7 @@ public: virtual std::string getLayoutName(); virtual CWindow* getNextWindowCandidate(CWindow*); virtual void replaceWindowDataWith(CWindow* from, CWindow* to); + virtual void requestFocusForWindow(CWindow*); virtual void onEnable(); virtual void onDisable(); diff --git a/src/Hy3Node.cpp b/src/Hy3Node.cpp index 6a35409..85b1055 100644 --- a/src/Hy3Node.cpp +++ b/src/Hy3Node.cpp @@ -132,6 +132,7 @@ bool Hy3Node::focusWindow() { switch (this->data.type) { case Hy3NodeType::Window: this->markFocused(); + this->data.as_window->setHidden(false); g_pCompositor->focusWindow(this->data.as_window); return true;