aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorVaxry <[email protected]>2024-10-08 21:20:25 +0100
committerGitHub <[email protected]>2024-10-08 21:20:25 +0100
commit91299f7039d80b25b3f0296d3d0f4d2059d41869 (patch)
treec539245c644990c58fa998256c94d8b8e0861181 /src
parent60308a2bb576413cbc787d4bde4f8d0e3fa3c9d6 (diff)
downloadHyprland-91299f7039d80b25b3f0296d3d0f4d2059d41869.tar.gz
Hyprland-91299f7039d80b25b3f0296d3d0f4d2059d41869.zip
hyprerror: make hyprerror reserve space (#8040)
Diffstat (limited to 'src')
-rw-r--r--src/hyprerror/HyprError.cpp20
-rw-r--r--src/hyprerror/HyprError.hpp12
-rw-r--r--src/render/Renderer.cpp17
3 files changed, 45 insertions, 4 deletions
diff --git a/src/hyprerror/HyprError.cpp b/src/hyprerror/HyprError.cpp
index bbc3a006..5f63de24 100644
--- a/src/hyprerror/HyprError.cpp
+++ b/src/hyprerror/HyprError.cpp
@@ -3,6 +3,9 @@
#include "../Compositor.hpp"
#include "../config/ConfigValue.hpp"
+#include <hyprutils/utils/ScopeGuard.hpp>
+using namespace Hyprutils::Utils;
+
CHyprError::CHyprError() {
m_fFadeOpacity.create(AVARTYPE_FLOAT, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), AVARDAMAGE_NONE);
m_fFadeOpacity.registerVar();
@@ -130,6 +133,8 @@ void CHyprError::createQueued() {
}
m_szQueued = "";
+ m_fLastHeight = yoffset + PAD + 1;
+
pango_font_description_free(pangoFD);
g_object_unref(layoutText);
@@ -158,6 +163,8 @@ void CHyprError::createQueued() {
m_cQueued = CColor();
g_pHyprRenderer->damageMonitor(PMONITOR);
+
+ g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID);
}
void CHyprError::draw() {
@@ -174,6 +181,11 @@ void CHyprError::draw() {
m_pTexture->destroyTexture();
m_bIsCreated = false;
m_szQueued = "";
+
+ for (auto& m : g_pCompositor->m_vMonitors) {
+ g_pHyprRenderer->arrangeLayersForMonitor(m->ID);
+ }
+
return;
} else {
m_fFadeOpacity.setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeOut"));
@@ -203,3 +215,11 @@ void CHyprError::destroy() {
else
m_szQueued = "";
}
+
+bool CHyprError::active() {
+ return m_bIsCreated;
+}
+
+float CHyprError::height() {
+ return m_fLastHeight;
+}
diff --git a/src/hyprerror/HyprError.hpp b/src/hyprerror/HyprError.hpp
index 8dbb4521..a553614c 100644
--- a/src/hyprerror/HyprError.hpp
+++ b/src/hyprerror/HyprError.hpp
@@ -11,9 +11,12 @@ class CHyprError {
CHyprError();
~CHyprError();
- void queueCreate(std::string message, const CColor& color);
- void draw();
- void destroy();
+ void queueCreate(std::string message, const CColor& color);
+ void draw();
+ void destroy();
+
+ bool active();
+ float height(); // logical
private:
void createQueued();
@@ -23,7 +26,8 @@ class CHyprError {
bool m_bIsCreated = false;
SP<CTexture> m_pTexture;
CAnimatedVariable<float> m_fFadeOpacity;
- CBox m_bDamageBox = {0, 0, 0, 0};
+ CBox m_bDamageBox = {0, 0, 0, 0};
+ float m_fLastHeight = 0.F;
bool m_bMonitorChanged = false;
};
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index f388ec37..61f94014 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -97,6 +97,16 @@ CHyprRenderer::CHyprRenderer() {
ensureCursorRenderingMode();
});
+ static auto P3 = g_pHookSystem->hookDynamic("focusedMon", [&](void* self, SCallbackInfo& info, std::any param) {
+ g_pEventLoopManager->doLater([this]() {
+ if (!g_pHyprError->active())
+ return;
+ for (auto& m : g_pCompositor->m_vMonitors) {
+ arrangeLayersForMonitor(m->ID);
+ }
+ });
+ });
+
m_pCursorTicker = wl_event_loop_add_timer(g_pCompositor->m_sWLEventLoop, cursorTicker, nullptr);
wl_event_source_timer_update(m_pCursorTicker, 500);
@@ -1757,6 +1767,13 @@ void CHyprRenderer::arrangeLayersForMonitor(const MONITORID& monitor) {
CBox usableArea = {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y};
+ if (g_pHyprError->active() && g_pCompositor->m_pLastMonitor == PMONITOR->self) {
+ const auto HEIGHT = g_pHyprError->height();
+ PMONITOR->vecReservedTopLeft.y = HEIGHT;
+ usableArea.y += HEIGHT;
+ usableArea.h -= HEIGHT;
+ }
+
for (auto& la : PMONITOR->m_aLayerSurfaceLayers) {
std::stable_sort(la.begin(), la.end(), [](const PHLLSREF& a, const PHLLSREF& b) { return a->order > b->order; });
}