fix: only update if hyprland is done initializing

We check whether the most hz monitor is non-null, as a measure to
whether hyprland is intialized. This is nessecary as plugins loaded with
`plugin =` otherwise cause a ton of weird crashes.
This commit is contained in:
Virt 2024-11-04 20:34:17 +01:00
commit 1ae25556a1
4 changed files with 11 additions and 8 deletions

View file

@ -1,10 +1,17 @@
#include "../globals.hpp"
#include "../cursor.hpp"
#include "src/render/Renderer.hpp"
#include "config.hpp"
#include <hyprland/src/plugins/PluginAPI.hpp>
#include <hyprlang.hpp>
#include <stdexcept>
#include <variant>
bool isEnabled() {
static auto* const* PENABLED = (Hyprlang::INT* const*) getConfig(CONFIG_ENABLED);
return **PENABLED && g_pHyprRenderer->m_pMostHzMonitor && g_pDynamicCursors; // make sure the compositor is properly initialized
}
Hyprlang::CConfigValue toHyprlang(std::variant<std::string, float, int> value) {
if (std::holds_alternative<std::string>(value))

View file

@ -33,6 +33,9 @@
#define CONFIG_SHAPERULE "shaperule"
/* is the plugin enabled */
bool isEnabled();
/* initializes stuff so config can be set up */
void startConfig();
/* finishes config setup */

View file

@ -24,9 +24,7 @@
#include "renderer.hpp"
void tickRaw(SP<CEventLoopTimer> self, void* data) {
static auto* const* PENABLED = (Hyprlang::INT* const*) getConfig(CONFIG_ENABLED);
if (**PENABLED && g_pDynamicCursors)
if (isEnabled())
g_pDynamicCursors->onTick(g_pPointerManager.get());
const int TIMEOUT = g_pHyprRenderer->m_pMostHzMonitor ? 1000.0 / g_pHyprRenderer->m_pMostHzMonitor->refreshRate : 16;

View file

@ -13,11 +13,6 @@
#include "src/managers/PointerManager.hpp"
#include "src/version.h"
bool isEnabled() {
static auto* const* PENABLED = (Hyprlang::INT* const*) getConfig(CONFIG_ENABLED);
return **PENABLED;
}
typedef void (*origRenderSofwareCursorsFor)(void*, SP<CMonitor>, timespec*, CRegion&, std::optional<Vector2D>);
inline CFunctionHook* g_pRenderSoftwareCursorsForHook = nullptr;
void hkRenderSoftwareCursorsFor(void* thisptr, SP<CMonitor> pMonitor, timespec* now, CRegion& damage, std::optional<Vector2D> overridePos) {