mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-15 08:25:59 +01:00
pointer: add default auto for no_hw_cursors
auto defaults to off on nvidia, on for everyone else. Gotta wait until we do fucking drm_dumb and it fucking works
This commit is contained in:
parent
d5689bb539
commit
3dd8db83f1
4 changed files with 21 additions and 11 deletions
|
@ -1244,8 +1244,8 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
|
||||||
SConfigOptionDescription{
|
SConfigOptionDescription{
|
||||||
.value = "cursor:no_hardware_cursors",
|
.value = "cursor:no_hardware_cursors",
|
||||||
.description = "disables hardware cursors",
|
.description = "disables hardware cursors",
|
||||||
.type = CONFIG_OPTION_BOOL,
|
.type = CONFIG_OPTION_CHOICE,
|
||||||
.data = SConfigOptionDescription::SBoolData{false},
|
.data = SConfigOptionDescription::SChoiceData{0, "Disabled,Enabled,Auto"},
|
||||||
},
|
},
|
||||||
SConfigOptionDescription{
|
SConfigOptionDescription{
|
||||||
.value = "cursor:no_break_fs_vrr",
|
.value = "cursor:no_break_fs_vrr",
|
||||||
|
|
|
@ -552,7 +552,7 @@ CConfigManager::CConfigManager() {
|
||||||
m_pConfig->addConfigValue("opengl:nvidia_anti_flicker", Hyprlang::INT{1});
|
m_pConfig->addConfigValue("opengl:nvidia_anti_flicker", Hyprlang::INT{1});
|
||||||
m_pConfig->addConfigValue("opengl:force_introspection", Hyprlang::INT{2});
|
m_pConfig->addConfigValue("opengl:force_introspection", Hyprlang::INT{2});
|
||||||
|
|
||||||
m_pConfig->addConfigValue("cursor:no_hardware_cursors", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("cursor:no_hardware_cursors", Hyprlang::INT{2});
|
||||||
m_pConfig->addConfigValue("cursor:no_break_fs_vrr", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("cursor:no_break_fs_vrr", Hyprlang::INT{0});
|
||||||
m_pConfig->addConfigValue("cursor:min_refresh_rate", Hyprlang::INT{24});
|
m_pConfig->addConfigValue("cursor:min_refresh_rate", Hyprlang::INT{24});
|
||||||
m_pConfig->addConfigValue("cursor:hotspot_padding", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("cursor:hotspot_padding", Hyprlang::INT{0});
|
||||||
|
@ -2778,6 +2778,18 @@ const std::vector<SConfigOptionDescription>& CConfigManager::getAllDescriptions(
|
||||||
return CONFIG_OPTIONS;
|
return CONFIG_OPTIONS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CConfigManager::shouldUseSoftwareCursors() {
|
||||||
|
static auto PNOHW = CConfigValue<Hyprlang::INT>("cursor:no_hardware_cursors");
|
||||||
|
|
||||||
|
switch (*PNOHW) {
|
||||||
|
case 0: return false;
|
||||||
|
case 1: return true;
|
||||||
|
default: return g_pHyprRenderer->isNvidia();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
std::string SConfigOptionDescription::jsonify() const {
|
std::string SConfigOptionDescription::jsonify() const {
|
||||||
auto parseData = [this]() -> std::string {
|
auto parseData = [this]() -> std::string {
|
||||||
return std::visit(
|
return std::visit(
|
||||||
|
|
|
@ -200,6 +200,8 @@ class CConfigManager {
|
||||||
void ensureMonitorStatus();
|
void ensureMonitorStatus();
|
||||||
void ensureVRR(PHLMONITOR pMonitor = nullptr);
|
void ensureVRR(PHLMONITOR pMonitor = nullptr);
|
||||||
|
|
||||||
|
bool shouldUseSoftwareCursors();
|
||||||
|
|
||||||
std::string parseKeyword(const std::string&, const std::string&);
|
std::string parseKeyword(const std::string&, const std::string&);
|
||||||
|
|
||||||
void addParseError(const std::string&);
|
void addParseError(const std::string&);
|
||||||
|
|
|
@ -247,9 +247,7 @@ void CPointerManager::resetCursorImage(bool apply) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPointerManager::updateCursorBackend() {
|
void CPointerManager::updateCursorBackend() {
|
||||||
static auto PNOHW = CConfigValue<Hyprlang::INT>("cursor:no_hardware_cursors");
|
const auto CURSORBOX = getCursorBoxGlobal();
|
||||||
|
|
||||||
const auto CURSORBOX = getCursorBoxGlobal();
|
|
||||||
|
|
||||||
for (auto const& m : g_pCompositor->m_vMonitors) {
|
for (auto const& m : g_pCompositor->m_vMonitors) {
|
||||||
auto state = stateFor(m);
|
auto state = stateFor(m);
|
||||||
|
@ -268,7 +266,7 @@ void CPointerManager::updateCursorBackend() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state->softwareLocks > 0 || *PNOHW || !attemptHardwareCursor(state)) {
|
if (state->softwareLocks > 0 || g_pConfigManager->shouldUseSoftwareCursors() || !attemptHardwareCursor(state)) {
|
||||||
Debug::log(TRACE, "Output {} rejected hardware cursors, falling back to sw", m->szName);
|
Debug::log(TRACE, "Output {} rejected hardware cursors, falling back to sw", m->szName);
|
||||||
state->box = getCursorBoxLogicalForMonitor(state->monitor.lock());
|
state->box = getCursorBoxLogicalForMonitor(state->monitor.lock());
|
||||||
state->hardwareFailed = true;
|
state->hardwareFailed = true;
|
||||||
|
@ -641,15 +639,13 @@ Vector2D CPointerManager::closestValid(const Vector2D& pos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPointerManager::damageIfSoftware() {
|
void CPointerManager::damageIfSoftware() {
|
||||||
auto b = getCursorBoxGlobal().expand(4);
|
auto b = getCursorBoxGlobal().expand(4);
|
||||||
|
|
||||||
static auto PNOHW = CConfigValue<Hyprlang::INT>("cursor:no_hardware_cursors");
|
|
||||||
|
|
||||||
for (auto const& mw : monitorStates) {
|
for (auto const& mw : monitorStates) {
|
||||||
if (mw->monitor.expired() || !mw->monitor->output)
|
if (mw->monitor.expired() || !mw->monitor->output)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ((mw->softwareLocks > 0 || mw->hardwareFailed || *PNOHW) && b.overlaps({mw->monitor->vecPosition, mw->monitor->vecSize})) {
|
if ((mw->softwareLocks > 0 || mw->hardwareFailed || g_pConfigManager->shouldUseSoftwareCursors()) && b.overlaps({mw->monitor->vecPosition, mw->monitor->vecSize})) {
|
||||||
g_pHyprRenderer->damageBox(&b, mw->monitor->shouldSkipScheduleFrameOnMouseEvent());
|
g_pHyprRenderer->damageBox(&b, mw->monitor->shouldSkipScheduleFrameOnMouseEvent());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue