diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 788e8238..219c44c1 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1493,6 +1493,12 @@ inline static const std::vector CONFIG_OPTIONS = { * cursor: */ + SConfigOptionDescription{ + .value = "cursor:invisible", + .description = "don't render cursors", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{false}, + }, SConfigOptionDescription{ .value = "cursor:no_hardware_cursors", .description = "disables hardware cursors. Auto = disable when multi-gpu on nvidia", diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 14d6cf03..635c7977 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -709,6 +709,7 @@ CConfigManager::CConfigManager() { registerConfigVar("opengl:nvidia_anti_flicker", Hyprlang::INT{1}); + registerConfigVar("cursor:invisible", Hyprlang::INT{0}); registerConfigVar("cursor:no_hardware_cursors", Hyprlang::INT{2}); registerConfigVar("cursor:no_break_fs_vrr", Hyprlang::INT{2}); registerConfigVar("cursor:min_refresh_rate", Hyprlang::INT{24}); @@ -3129,11 +3130,15 @@ const std::vector& CConfigManager::getAllDescriptions( } bool CConfigManager::shouldUseSoftwareCursors(PHLMONITOR pMonitor) { - static auto PNOHW = CConfigValue("cursor:no_hardware_cursors"); + static auto PNOHW = CConfigValue("cursor:no_hardware_cursors"); + static auto PINVISIBLE = CConfigValue("cursor:invisible"); if (pMonitor->m_tearingState.activelyTearing) return true; + if (*PINVISIBLE != 0) + return true; + switch (*PNOHW) { case 0: return false; case 1: return true; diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 13f8ff4d..e09de913 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -2030,6 +2030,7 @@ void CHyprRenderer::setCursorFromName(const std::string& name, bool force) { } void CHyprRenderer::ensureCursorRenderingMode() { + static auto PINVISIBLE = CConfigValue("cursor:invisible"); static auto PCURSORTIMEOUT = CConfigValue("cursor:inactive_timeout"); static auto PHIDEONTOUCH = CConfigValue("cursor:hide_on_touch"); static auto PHIDEONKEY = CConfigValue("cursor:hide_on_key_press"); @@ -2044,7 +2045,7 @@ void CHyprRenderer::ensureCursorRenderingMode() { if (*PCURSORTIMEOUT > 0) m_cursorHiddenConditions.hiddenOnTimeout = *PCURSORTIMEOUT < g_pInputManager->m_lastCursorMovement.getSeconds(); - const bool HIDE = m_cursorHiddenConditions.hiddenOnTimeout || m_cursorHiddenConditions.hiddenOnTouch || m_cursorHiddenConditions.hiddenOnKeyboard; + const bool HIDE = m_cursorHiddenConditions.hiddenOnTimeout || m_cursorHiddenConditions.hiddenOnTouch || m_cursorHiddenConditions.hiddenOnKeyboard || (*PINVISIBLE != 0); if (HIDE == m_cursorHidden) return;