Diff
1diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp
2index 3e3b303870cdb5a5a61869d75ae2b985c85e16b2..a7eab18a26a7700a02ff963c1a02b1724e1cf036 100644
3--- a/src/Hy3Layout.cpp
4+++ b/src/Hy3Layout.cpp
5@@ -1017,11 +1017,11 @@ void Hy3Layout::onEnable() {
6 this->onWindowCreatedTiling(window.get());
7 }
8
9- setup_selection_hook();
10+ selection_hook::enable();
11 }
12
13 void Hy3Layout::onDisable() {
14- disable_selection_hook();
15+ selection_hook::disable();
16 this->nodes.clear();
17 }
18
19diff --git a/src/SelectionHook.cpp b/src/SelectionHook.cpp
20index 83ca2baa2aab392fededc4c23d983320d11fd41b..2441fe4e4e8dda983764d5f30d66619b534bcacc 100644
21--- a/src/SelectionHook.cpp
22+++ b/src/SelectionHook.cpp
23@@ -2,29 +2,30 @@
24 #include <hyprland/src/plugins/PluginAPI.hpp>
25 #include <hyprland/src/Compositor.hpp>
26
27-inline CFunctionHook* g_LastSelectionHook = nullptr;
28+namespace selection_hook {
29+ inline CFunctionHook* g_LastSelectionHook = nullptr;
30
31-void hook_update_decos(void* thisptr, CWindow* window) {
32- bool explicitly_selected = g_Hy3Layout->shouldRenderSelected(window);
33- Debug::log(LOG, "update decos for %p - selected: %d", window, explicitly_selected);
34+ void hook_updateDecos(void* thisptr, CWindow* window) {
35+ bool explicitly_selected = g_Hy3Layout->shouldRenderSelected(window);
36+ Debug::log(LOG, "update decos for %p - selected: %d", window, explicitly_selected);
37
38- auto* lastWindow = g_pCompositor->m_pLastWindow;
39- if (explicitly_selected) {
40- g_pCompositor->m_pLastWindow = window;
41- }
42+ auto* lastWindow = g_pCompositor->m_pLastWindow;
43+ if (explicitly_selected) {
44+ g_pCompositor->m_pLastWindow = window;
45+ }
46
47- ((void (*)(void*, CWindow*)) g_LastSelectionHook->m_pOriginal)(thisptr, window);
48+ ((void (*)(void*, CWindow*)) g_LastSelectionHook->m_pOriginal)(thisptr, window);
49
50- if (explicitly_selected) {
51- g_pCompositor->m_pLastWindow = lastWindow;
52+ if (explicitly_selected) {
53+ g_pCompositor->m_pLastWindow = lastWindow;
54+ }
55 }
56-}
57
58-void setup_selection_hook() {
59- if (g_LastSelectionHook == nullptr) {
60+ void init() {
61 static const auto decoUpdateCandidates = HyprlandAPI::findFunctionsByName(PHANDLE, "updateWindowAnimatedDecorationValues");
62
63 if (decoUpdateCandidates.size() != 1) {
64+ g_LastSelectionHook = nullptr;
65 Debug::log(ERR, "Expected one matching function to hook for \"updateWindowAnimatedDecorationValues\", found %d", decoUpdateCandidates.size());
66 HyprlandAPI::addNotificationV2(PHANDLE, {
67 {"text", "Failed to load function hooks: \"updateWindowAnimatedDecorationValues\""},
68@@ -35,14 +36,18 @@ void setup_selection_hook() {
69 return;
70 }
71
72- g_LastSelectionHook = HyprlandAPI::createFunctionHook(PHANDLE, decoUpdateCandidates[0].address, (void*)&hook_update_decos);
73+ g_LastSelectionHook = HyprlandAPI::createFunctionHook(PHANDLE, decoUpdateCandidates[0].address, (void*)&hook_updateDecos);
74 }
75
76- g_LastSelectionHook->hook();
77-}
78+ void enable() {
79+ if (g_LastSelectionHook != nullptr) {
80+ g_LastSelectionHook->hook();
81+ }
82+ }
83
84-void disable_selection_hook() {
85- if (g_LastSelectionHook != nullptr) {
86- g_LastSelectionHook->unhook();
87+ void disable() {
88+ if (g_LastSelectionHook != nullptr) {
89+ g_LastSelectionHook->unhook();
90+ }
91 }
92 }
93diff --git a/src/SelectionHook.hpp b/src/SelectionHook.hpp
94index f15fd2399f5f2f72e99195f5a68e0a3e447c1286..3f38e53871b1b11cd891d888966ac40ae35f3e18 100644
95--- a/src/SelectionHook.hpp
96+++ b/src/SelectionHook.hpp
97@@ -1,4 +1,7 @@
98 #pragma once
99
100-void setup_selection_hook();
101-void disable_selection_hook();
102+namespace selection_hook {
103+ void init();
104+ void enable();
105+ void disable();
106+}
107diff --git a/src/main.cpp b/src/main.cpp
108index 18cfb2b6e486c7534c9c454b4330cd5c44289fb2..1f2677e5b22aa9f16c6f9f0e7c1bf7a5613f6159 100644
109--- a/src/main.cpp
110+++ b/src/main.cpp
111@@ -2,7 +2,7 @@
112 #include <hyprland/src/Compositor.hpp>
113
114 #include "globals.hpp"
115-
116+#include "SelectionHook.hpp"
117
118 APICALL EXPORT std::string PLUGIN_API_VERSION() {
119 return HYPRLAND_API_VERSION;
120@@ -98,6 +98,8 @@ void dispatch_debug(std::string arg) {
121 APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
122 PHANDLE = handle;
123
124+ selection_hook::init();
125+
126 HyprlandAPI::addConfigValue(PHANDLE, "plugin:hy3:no_gaps_when_only", SConfigValue{.intValue = 0});
127
128 g_Hy3Layout = std::make_unique<Hy3Layout>();