summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2026-02-22 23:30:10 +0000
committerGitHub <noreply@github.com>2026-02-22 23:30:10 +0000
commitb88813c7efa4b7b0c5fe01471c5fa5b67a61dc7e (patch)
tree4454e82bc033d7e28a23ee372d0e3f48341d0aaa /src/render
parentb4ee4674f9a74e3d602c7fb17bc09f79d221583c (diff)
event: refactor HookSystem into a typed event bus (#13333)
Refactors the old HookSystem into a typed event bus with clear separation, discovery and types.
Diffstat (limited to 'src/render')
-rw-r--r--src/render/OpenGL.cpp18
-rw-r--r--src/render/Renderer.cpp43
-rw-r--r--src/render/decorations/CHyprBorderDecoration.cpp1
-rw-r--r--src/render/decorations/DecorationPositioner.cpp13
4 files changed, 31 insertions, 44 deletions
diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp
index 351df0c3..d6c2c024 100644
--- a/src/render/OpenGL.cpp
+++ b/src/render/OpenGL.cpp
@@ -19,7 +19,6 @@
#include "../protocols/core/Compositor.hpp"
#include "../protocols/ColorManagement.hpp"
#include "../protocols/types/ColorManagement.hpp"
-#include "../managers/HookSystemManager.hpp"
#include "../managers/input/InputManager.hpp"
#include "../managers/eventLoop/EventLoopManager.hpp"
#include "../managers/CursorManager.hpp"
@@ -27,6 +26,7 @@
#include "../helpers/env/Env.hpp"
#include "../helpers/MainLoopExecutor.hpp"
#include "../i18n/Engine.hpp"
+#include "../event/EventBus.hpp"
#include "debug/HyprNotificationOverlay.hpp"
#include "hyprerror/HyprError.hpp"
#include "pass/TexPassElement.hpp"
@@ -391,7 +391,7 @@ CHyprOpenGLImpl::CHyprOpenGLImpl() : m_drmFD(g_pCompositor->m_drmRenderNode.fd >
initAssets();
- static auto P = g_pHookSystem->hookDynamic("preRender", [&](void* self, SCallbackInfo& info, std::any data) { preRender(std::any_cast<PHLMONITOR>(data)); });
+ static auto P = Event::bus()->m_events.render.pre.listen([&](PHLMONITOR mon) { preRender(mon); });
RASSERT(eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT), "Couldn't unset current EGL!");
@@ -422,23 +422,19 @@ CHyprOpenGLImpl::CHyprOpenGLImpl() : m_drmFD(g_pCompositor->m_drmRenderNode.fd >
#endif
};
- static auto P2 = g_pHookSystem->hookDynamic("mouseButton", [](void* self, SCallbackInfo& info, std::any e) {
- auto E = std::any_cast<IPointer::SButtonEvent>(e);
-
- if (E.state != WL_POINTER_BUTTON_STATE_PRESSED)
+ static auto P2 = Event::bus()->m_events.input.mouse.button.listen([](IPointer::SButtonEvent e, Event::SCallbackInfo&) {
+ if (e.state != WL_POINTER_BUTTON_STATE_PRESSED)
return;
addLastPressToHistory(g_pInputManager->getMouseCoordsInternal(), g_pInputManager->getClickMode() == CLICKMODE_KILL, false);
});
- static auto P3 = g_pHookSystem->hookDynamic("touchDown", [](void* self, SCallbackInfo& info, std::any e) {
- auto E = std::any_cast<ITouch::SDownEvent>(e);
-
- auto PMONITOR = g_pCompositor->getMonitorFromName(!E.device->m_boundOutput.empty() ? E.device->m_boundOutput : "");
+ static auto P3 = Event::bus()->m_events.input.touch.down.listen([](ITouch::SDownEvent e, Event::SCallbackInfo&) {
+ auto PMONITOR = g_pCompositor->getMonitorFromName(!e.device->m_boundOutput.empty() ? e.device->m_boundOutput : "");
PMONITOR = PMONITOR ? PMONITOR : Desktop::focusState()->monitor();
- const auto TOUCH_COORDS = PMONITOR->m_position + (E.pos * PMONITOR->m_size);
+ const auto TOUCH_COORDS = PMONITOR->m_position + (e.pos * PMONITOR->m_size);
addLastPressToHistory(TOUCH_COORDS, g_pInputManager->getClickMode() == CLICKMODE_KILL, true);
});
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index b45a2cdc..fbc34910 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -9,7 +9,6 @@
#include "../managers/CursorManager.hpp"
#include "../managers/PointerManager.hpp"
#include "../managers/input/InputManager.hpp"
-#include "../managers/HookSystemManager.hpp"
#include "../managers/animation/AnimationManager.hpp"
#include "../desktop/view/Window.hpp"
#include "../desktop/view/LayerSurface.hpp"
@@ -30,6 +29,7 @@
#include "../layout/LayoutManager.hpp"
#include "../layout/space/Space.hpp"
#include "../i18n/Engine.hpp"
+#include "../event/EventBus.hpp"
#include "helpers/CursorShapes.hpp"
#include "helpers/Monitor.hpp"
#include "pass/TexPassElement.hpp"
@@ -41,6 +41,7 @@
#include "../protocols/ColorManagement.hpp"
#include "../protocols/types/ContentType.hpp"
#include "../helpers/MiscFunctions.hpp"
+#include "../event/EventBus.hpp"
#include "render/OpenGL.hpp"
#include <hyprutils/utils/ScopeGuard.hpp>
@@ -113,7 +114,7 @@ CHyprRenderer::CHyprRenderer() {
// cursor hiding stuff
- static auto P = g_pHookSystem->hookDynamic("keyPress", [&](void* self, SCallbackInfo& info, std::any param) {
+ static auto P = Event::bus()->m_events.input.keyboard.key.listen([&](IKeyboard::SKeyEvent e, Event::SCallbackInfo&) {
if (m_cursorHiddenConditions.hiddenOnKeyboard)
return;
@@ -121,7 +122,7 @@ CHyprRenderer::CHyprRenderer() {
ensureCursorRenderingMode();
});
- static auto P2 = g_pHookSystem->hookDynamic("mouseMove", [&](void* self, SCallbackInfo& info, std::any param) {
+ static auto P2 = Event::bus()->m_events.input.mouse.move.listen([&](Vector2D pos, Event::SCallbackInfo&) {
if (!m_cursorHiddenConditions.hiddenOnKeyboard && m_cursorHiddenConditions.hiddenOnTouch == g_pInputManager->m_lastInputTouch &&
m_cursorHiddenConditions.hiddenOnTablet == g_pInputManager->m_lastInputTablet && !m_cursorHiddenConditions.hiddenOnTimeout)
return;
@@ -133,7 +134,7 @@ CHyprRenderer::CHyprRenderer() {
ensureCursorRenderingMode();
});
- static auto P3 = g_pHookSystem->hookDynamic("focusedMon", [&](void* self, SCallbackInfo& info, std::any param) {
+ static auto P3 = Event::bus()->m_events.monitor.focused.listen([&](PHLMONITOR mon) {
g_pEventLoopManager->doLater([this]() {
if (!g_pHyprError->active())
return;
@@ -143,11 +144,9 @@ CHyprRenderer::CHyprRenderer() {
});
});
- static auto P4 = g_pHookSystem->hookDynamic("windowUpdateRules", [&](void* self, SCallbackInfo& info, std::any param) {
- const auto PWINDOW = std::any_cast<PHLWINDOW>(param);
-
- if (PWINDOW->m_ruleApplicator->renderUnfocused().valueOrDefault())
- addWindowToRenderUnfocused(PWINDOW);
+ static auto P4 = Event::bus()->m_events.window.updateRules.listen([&](PHLWINDOW window) {
+ if (window->m_ruleApplicator->renderUnfocused().valueOrDefault())
+ addWindowToRenderUnfocused(window);
});
m_cursorTicker = wl_event_loop_add_timer(g_pCompositor->m_wlEventLoop, cursorTicker, nullptr);
@@ -290,7 +289,7 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow) {
void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& time) {
PHLWINDOW pWorkspaceWindow = nullptr;
- EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOWS);
+ Event::bus()->m_events.render.stage.emit(RENDER_PRE_WINDOWS);
// loop over the tiled windows that are fading out
for (auto const& w : g_pCompositor->m_windows) {
@@ -381,7 +380,7 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR
void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& time) {
PHLWINDOW lastWindow;
- EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOWS);
+ Event::bus()->m_events.render.stage.emit(RENDER_PRE_WINDOWS);
std::vector<PHLWINDOWREF> windows, tiledFadingOut;
windows.reserve(g_pCompositor->m_windows.size());
@@ -545,7 +544,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T
// for plugins
g_pHyprOpenGL->m_renderData.currentWindow = pWindow;
- EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOW);
+ Event::bus()->m_events.render.stage.emit(RENDER_PRE_WINDOW);
const auto fullAlpha = renderdata.alpha * renderdata.fadeAlpha;
@@ -729,7 +728,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T
}
}
- EMIT_HOOK_EVENT("render", RENDER_POST_WINDOW);
+ Event::bus()->m_events.render.stage.emit(RENDER_POST_WINDOW);
g_pHyprOpenGL->m_renderData.currentWindow.reset();
}
@@ -941,7 +940,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
renderLayer(ls.lock(), pMonitor, time);
}
- EMIT_HOOK_EVENT("render", RENDER_POST_WALLPAPER);
+ Event::bus()->m_events.render.stage.emit(RENDER_POST_WALLPAPER);
for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]) {
renderLayer(ls.lock(), pMonitor, time);
@@ -965,7 +964,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
renderLayer(ls.lock(), pMonitor, time);
}
- EMIT_HOOK_EVENT("render", RENDER_POST_WALLPAPER);
+ Event::bus()->m_events.render.stage.emit(RENDER_POST_WALLPAPER);
for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]) {
renderLayer(ls.lock(), pMonitor, time);
@@ -1030,7 +1029,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
renderWindow(w, pMonitor, time, true, RENDER_PASS_ALL);
}
- EMIT_HOOK_EVENT("render", RENDER_POST_WINDOWS);
+ Event::bus()->m_events.render.stage.emit(RENDER_POST_WINDOWS);
// Render surfaces above windows for monitor
for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) {
@@ -1330,7 +1329,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) {
pMonitor->m_drmFormat = pMonitor->m_prevDrmFormat;
}
- EMIT_HOOK_EVENT("preRender", pMonitor);
+ Event::bus()->m_events.render.pre.emit(pMonitor);
const auto NOW = Time::steadyNow();
@@ -1345,7 +1344,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) {
return;
}
- EMIT_HOOK_EVENT("render", RENDER_PRE);
+ Event::bus()->m_events.render.stage.emit(RENDER_PRE);
pMonitor->m_renderingActive = true;
@@ -1398,7 +1397,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) {
pMonitor->m_forceFullFrames = 0;
}
- EMIT_HOOK_EVENT("render", RENDER_BEGIN);
+ Event::bus()->m_events.render.stage.emit(RENDER_BEGIN);
bool renderCursor = true;
@@ -1409,7 +1408,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) {
g_pHyprOpenGL->blend(false);
g_pHyprOpenGL->renderMirrored();
g_pHyprOpenGL->blend(true);
- EMIT_HOOK_EVENT("render", RENDER_POST_MIRROR);
+ Event::bus()->m_events.render.stage.emit(RENDER_POST_MIRROR);
renderCursor = false;
} else {
CBox renderBox = {0, 0, sc<int>(pMonitor->m_pixelSize.x), sc<int>(pMonitor->m_pixelSize.y)};
@@ -1462,7 +1461,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) {
m_renderPass.add(makeUnique<CRectPassElement>(data));
}
- EMIT_HOOK_EVENT("render", RENDER_LAST_MOMENT);
+ Event::bus()->m_events.render.stage.emit(RENDER_LAST_MOMENT);
endRender();
@@ -1484,7 +1483,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) {
pMonitor->m_renderingActive = false;
- EMIT_HOOK_EVENT("render", RENDER_POST);
+ Event::bus()->m_events.render.stage.emit(RENDER_POST);
pMonitor->m_output->state->addDamage(frameDamage);
pMonitor->m_output->state->setPresentationMode(shouldTear ? Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_IMMEDIATE :
diff --git a/src/render/decorations/CHyprBorderDecoration.cpp b/src/render/decorations/CHyprBorderDecoration.cpp
index 686511d5..66a15fc8 100644
--- a/src/render/decorations/CHyprBorderDecoration.cpp
+++ b/src/render/decorations/CHyprBorderDecoration.cpp
@@ -4,7 +4,6 @@
#include "../../managers/eventLoop/EventLoopManager.hpp"
#include "../pass/BorderPassElement.hpp"
#include "../Renderer.hpp"
-#include "../../managers/HookSystemManager.hpp"
CHyprBorderDecoration::CHyprBorderDecoration(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow), m_window(pWindow) {
;
diff --git a/src/render/decorations/DecorationPositioner.cpp b/src/render/decorations/DecorationPositioner.cpp
index ce3a7a37..470b5bb7 100644
--- a/src/render/decorations/DecorationPositioner.cpp
+++ b/src/render/decorations/DecorationPositioner.cpp
@@ -1,18 +1,11 @@
#include "DecorationPositioner.hpp"
#include "../../desktop/view/Window.hpp"
-#include "../../managers/HookSystemManager.hpp"
#include "../../layout/target/Target.hpp"
+#include "../../event/EventBus.hpp"
CDecorationPositioner::CDecorationPositioner() {
- static auto P = g_pHookSystem->hookDynamic("closeWindow", [this](void* call, SCallbackInfo& info, std::any data) {
- auto PWINDOW = std::any_cast<PHLWINDOW>(data);
- this->onWindowUnmap(PWINDOW);
- });
-
- static auto P2 = g_pHookSystem->hookDynamic("openWindow", [this](void* call, SCallbackInfo& info, std::any data) {
- auto PWINDOW = std::any_cast<PHLWINDOW>(data);
- this->onWindowMap(PWINDOW);
- });
+ static auto P = Event::bus()->m_events.window.close.listen([this](PHLWINDOW window) { onWindowUnmap(window); });
+ static auto P2 = Event::bus()->m_events.window.open.listen([this](PHLWINDOW window) { onWindowMap(window); });
}
Vector2D CDecorationPositioner::getEdgeDefinedPoint(uint32_t edges, PHLWINDOWREF pWindow) {