diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-06-24 23:27:02 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-06-24 23:27:02 +0200 |
| commit | 72c86b99eb87b23c11fdc795ec6f3668f283b95c (patch) | |
| tree | 2d612e505a465b29f2d95a500d77a2f91485ea50 /src/render | |
| parent | eb13be1240dfe83b42e26621069aeb09ecf39b66 (diff) | |
added general:cursor_inactive_timeout
Diffstat (limited to 'src/render')
| -rw-r--r-- | src/render/Renderer.cpp | 30 | ||||
| -rw-r--r-- | src/render/Renderer.hpp | 3 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 4525dde8..a917a1cc 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -754,3 +754,33 @@ void CHyprRenderer::applyMonitorRule(SMonitor* pMonitor, SMonitorRule* pMonitorR // frame skip pMonitor->framesToSkip = 1; } + +void CHyprRenderer::ensureCursorRenderingMode() { + static auto *const PCURSORTIMEOUT = &g_pConfigManager->getConfigValuePtr("general:cursor_inactive_timeout")->intValue; + + const auto PASSEDCURSORSECONDS = g_pInputManager->m_tmrLastCursorMovement.getSeconds(); + + if (*PCURSORTIMEOUT > 0) { + if (*PCURSORTIMEOUT < PASSEDCURSORSECONDS && m_bHasARenderedCursor) { + m_bHasARenderedCursor = false; + + wlr_cursor_set_surface(g_pCompositor->m_sWLRCursor, nullptr, 0, 0); // hide + + Debug::log(LOG, "Hiding the cursor (timeout)"); + + for (auto& m : g_pCompositor->m_lMonitors) + g_pHyprRenderer->damageMonitor(&m); // TODO: maybe just damage the cursor area? + } else if (*PCURSORTIMEOUT > PASSEDCURSORSECONDS && !m_bHasARenderedCursor) { + m_bHasARenderedCursor = true; + + wlr_xcursor_manager_set_cursor_image(g_pCompositor->m_sWLRXCursorMgr, "left_ptr", g_pCompositor->m_sWLRCursor); + + Debug::log(LOG, "Showing the cursor (timeout)"); + + for (auto& m : g_pCompositor->m_lMonitors) + g_pHyprRenderer->damageMonitor(&m); // TODO: maybe just damage the cursor area? + } + } else { + m_bHasARenderedCursor = true; + } +}
\ No newline at end of file diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index 24caa09d..73508623 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -31,6 +31,7 @@ public: void applyMonitorRule(SMonitor*, SMonitorRule*, bool force = false); bool shouldRenderWindow(CWindow*, SMonitor*); bool shouldRenderWindow(CWindow*); + void ensureCursorRenderingMode(); DAMAGETRACKINGMODES damageTrackingModeFromStr(const std::string&); @@ -41,6 +42,8 @@ private: void renderLayer(SLayerSurface*, SMonitor*, timespec*); void renderDragIcon(SMonitor*, timespec*); + bool m_bHasARenderedCursor = true; + friend class CHyprOpenGLImpl; }; |
