From f8def68e7e761e33dd51c197ac89194a51fcb60f Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Thu, 13 Jul 2023 18:05:34 +0200 Subject: [PATCH] idle: implement new protocol --- src/Compositor.cpp | 13 ++++++++++++- src/Compositor.hpp | 8 ++++++-- src/includes.hpp | 1 + src/managers/input/IdleInhibitor.cpp | 12 ++++++------ src/managers/input/InputManager.cpp | 8 ++++---- src/managers/input/Touch.cpp | 2 +- 6 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 445e2e04..aeb6f5f0 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -187,7 +187,8 @@ void CCompositor::initServer() { m_sWLRPresentation = wlr_presentation_create(m_sWLDisplay, m_sWLRBackend); - m_sWLRIdle = wlr_idle_create(m_sWLDisplay); + m_sWLRIdle = wlr_idle_create(m_sWLDisplay); + m_sWLRIdleNotifier = wlr_idle_notifier_v1_create(m_sWLDisplay); m_sWLRLayerShell = wlr_layer_shell_v1_create(m_sWLDisplay, 4); @@ -2435,3 +2436,13 @@ CWindow* CCompositor::getForceFocus() { return nullptr; } + +void CCompositor::notifyIdleActivity() { + wlr_idle_notify_activity(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat); + wlr_idle_notifier_v1_notify_activity(g_pCompositor->m_sWLRIdleNotifier, g_pCompositor->m_sSeat.seat); +} + +void CCompositor::setIdleActivityInhibit(bool inhibit) { + wlr_idle_set_enabled(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat, inhibit); + wlr_idle_notifier_v1_set_inhibited(g_pCompositor->m_sWLRIdleNotifier, inhibit); +} diff --git a/src/Compositor.hpp b/src/Compositor.hpp index 55633fc6..3f7cfac8 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -28,7 +28,8 @@ #include "hyprerror/HyprError.hpp" #include "plugins/PluginSystem.hpp" -enum eManagersInitStage { +enum eManagersInitStage +{ STAGE_PRIORITY = 0, STAGE_LATE }; @@ -53,6 +54,7 @@ class CCompositor { wlr_xdg_activation_v1* m_sWLRXDGActivation; wlr_output_layout* m_sWLROutputLayout; wlr_idle* m_sWLRIdle; + wlr_idle_notifier_v1* m_sWLRIdleNotifier; wlr_layer_shell_v1* m_sWLRLayerShell; wlr_xdg_shell* m_sWLRXDGShell; wlr_cursor* m_sWLRCursor; @@ -170,7 +172,7 @@ class CCompositor { CMonitor* getMonitorInDirection(const char&); void updateAllWindowsAnimatedDecorationValues(); void updateWindowAnimatedDecorationValues(CWindow*); - int getNextAvailableMonitorID(std::string const & name); + int getNextAvailableMonitorID(std::string const& name); void moveWorkspaceToMonitor(CWorkspace*, CMonitor*); void swapActiveWorkspaces(CMonitor*, CMonitor*); CMonitor* getMonitorFromString(const std::string&); @@ -197,6 +199,8 @@ class CCompositor { void performUserChecks(); void moveWindowToWorkspaceSafe(CWindow* pWindow, CWorkspace* pWorkspace); CWindow* getForceFocus(); + void notifyIdleActivity(); + void setIdleActivityInhibit(bool inhibit); std::string explicitConfigPath; diff --git a/src/includes.hpp b/src/includes.hpp index f64c3938..d7792101 100644 --- a/src/includes.hpp +++ b/src/includes.hpp @@ -103,6 +103,7 @@ extern "C" { #include #include #include +#include #include diff --git a/src/managers/input/IdleInhibitor.cpp b/src/managers/input/IdleInhibitor.cpp index d54ec96a..d30cf9de 100644 --- a/src/managers/input/IdleInhibitor.cpp +++ b/src/managers/input/IdleInhibitor.cpp @@ -42,10 +42,10 @@ void CInputManager::recheckIdleInhibitorStatus() { for (auto& ii : m_lIdleInhibitors) { if (!ii.pWindow) { - wlr_idle_set_enabled(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat, false); + g_pCompositor->setIdleActivityInhibit(false); return; } else if (g_pHyprRenderer->shouldRenderWindow(ii.pWindow)) { - wlr_idle_set_enabled(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat, false); + g_pCompositor->setIdleActivityInhibit(false); return; } } @@ -56,21 +56,21 @@ void CInputManager::recheckIdleInhibitorStatus() { continue; if (w->m_eIdleInhibitMode == IDLEINHIBIT_ALWAYS) { - wlr_idle_set_enabled(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat, false); + g_pCompositor->setIdleActivityInhibit(false); return; } if (w->m_eIdleInhibitMode == IDLEINHIBIT_FOCUS && g_pCompositor->isWindowActive(w.get())) { - wlr_idle_set_enabled(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat, false); + g_pCompositor->setIdleActivityInhibit(false); return; } if (w->m_eIdleInhibitMode == IDLEINHIBIT_FULLSCREEN && w->m_bIsFullscreen && g_pCompositor->isWorkspaceVisible(w->m_iWorkspaceID)) { - wlr_idle_set_enabled(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat, false); + g_pCompositor->setIdleActivityInhibit(false); return; } } - wlr_idle_set_enabled(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat, true); + g_pCompositor->setIdleActivityInhibit(true); return; } \ No newline at end of file diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index cf7dee6e..f423fd0d 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -320,7 +320,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) { m_bEmptyFocusCursorSet = false; if (time) - wlr_idle_notify_activity(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat); + g_pCompositor->notifyIdleActivity(); Vector2D surfaceLocal = surfacePos == Vector2D(-1337, -1337) ? surfaceCoords : mouseCoords - surfacePos; @@ -432,7 +432,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) { } void CInputManager::onMouseButton(wlr_pointer_button_event* e) { - wlr_idle_notify_activity(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat); + g_pCompositor->notifyIdleActivity(); EMIT_HOOK_EVENT("mouseButton", e); @@ -607,7 +607,7 @@ void CInputManager::onMouseWheel(wlr_pointer_axis_event* e) { bool passEvent = g_pKeybindManager->onAxisEvent(e); - wlr_idle_notify_activity(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat); + g_pCompositor->notifyIdleActivity(); if (passEvent) { wlr_seat_pointer_notify_axis(g_pCompositor->m_sSeat.seat, e->time_msec, e->orientation, factor * e->delta, std::round(factor * e->delta_discrete), e->source); @@ -1067,7 +1067,7 @@ void CInputManager::onKeyboardKey(wlr_keyboard_key_event* e, SKeyboard* pKeyboar bool passEvent = g_pKeybindManager->onKeyEvent(e, pKeyboard); - wlr_idle_notify_activity(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat); + g_pCompositor->notifyIdleActivity(); if (passEvent) { diff --git a/src/managers/input/Touch.cpp b/src/managers/input/Touch.cpp index 0826e384..19e29c1b 100644 --- a/src/managers/input/Touch.cpp +++ b/src/managers/input/Touch.cpp @@ -48,7 +48,7 @@ void CInputManager::onTouchDown(wlr_touch_down_event* e) { wlr_seat_touch_notify_down(g_pCompositor->m_sSeat.seat, m_sTouchData.touchFocusSurface, e->time_msec, e->touch_id, local.x, local.y); - wlr_idle_notify_activity(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat); + g_pCompositor->notifyIdleActivity(); } void CInputManager::onTouchUp(wlr_touch_up_event* e) {