summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-06-24 23:27:02 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-06-24 23:27:02 +0200
commit72c86b99eb87b23c11fdc795ec6f3668f283b95c (patch)
tree2d612e505a465b29f2d95a500d77a2f91485ea50 /src/render
parenteb13be1240dfe83b42e26621069aeb09ecf39b66 (diff)
added general:cursor_inactive_timeout
Diffstat (limited to 'src/render')
-rw-r--r--src/render/Renderer.cpp30
-rw-r--r--src/render/Renderer.hpp3
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;
};