mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-09-30 23:28:28 +00:00
config: Config error limit/hyprctl (#5165)
* Add error_limit to limit the number of config error messages shown in notification * Add configerrors hyprctl command * Formatting * Formatting for not my code * Use CVarList, add escapeJSONStrings * Add indication there are more undisplayed errors * Restore suppress_errors; move getErrors() to ConfigManager * Formatting, wtf * Format
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#include "HyprError.hpp"
|
||||
#include "../Compositor.hpp"
|
||||
#include "../config/ConfigValue.hpp"
|
||||
|
||||
CHyprError::CHyprError() {
|
||||
m_fFadeOpacity.create(AVARTYPE_FLOAT, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), nullptr, AVARDAMAGE_NONE);
|
||||
@@ -58,6 +59,10 @@ void CHyprError::createQueued() {
|
||||
cairo_restore(CAIRO);
|
||||
|
||||
const auto LINECOUNT = 1 + std::count(m_szQueued.begin(), m_szQueued.end(), '\n');
|
||||
static auto LINELIMIT = CConfigValue<Hyprlang::INT>("debug:error_limit");
|
||||
|
||||
const auto VISLINECOUNT = std::min(LINECOUNT, *LINELIMIT);
|
||||
const auto EXTRALINES = (VISLINECOUNT < LINECOUNT) ? 1 : 0;
|
||||
|
||||
const double DEGREES = M_PI / 180.0;
|
||||
|
||||
@@ -66,7 +71,7 @@ void CHyprError::createQueued() {
|
||||
const double X = PAD;
|
||||
const double Y = PAD;
|
||||
const double WIDTH = PMONITOR->vecPixelSize.x - PAD * 2;
|
||||
const double HEIGHT = (FONTSIZE + 2 * (FONTSIZE / 10.0)) * LINECOUNT + 3;
|
||||
const double HEIGHT = (FONTSIZE + 2 * (FONTSIZE / 10.0)) * (VISLINECOUNT + EXTRALINES) + 3;
|
||||
const double RADIUS = PAD > HEIGHT / 2 ? HEIGHT / 2 - 1 : PAD;
|
||||
|
||||
m_bDamageBox = {0, 0, (int)PMONITOR->vecPixelSize.x, (int)HEIGHT + (int)PAD * 2};
|
||||
@@ -91,8 +96,9 @@ void CHyprError::createQueued() {
|
||||
cairo_set_font_size(CAIRO, FONTSIZE);
|
||||
cairo_set_source_rgba(CAIRO, textColor.r, textColor.g, textColor.b, textColor.a);
|
||||
|
||||
float yoffset = FONTSIZE;
|
||||
while (m_szQueued != "") {
|
||||
float yoffset = FONTSIZE;
|
||||
int renderedcnt = 0;
|
||||
while (m_szQueued != "" && renderedcnt < VISLINECOUNT) {
|
||||
std::string current = m_szQueued.substr(0, m_szQueued.find('\n'));
|
||||
if (const auto NEWLPOS = m_szQueued.find('\n'); NEWLPOS != std::string::npos)
|
||||
m_szQueued = m_szQueued.substr(NEWLPOS + 1);
|
||||
@@ -101,7 +107,14 @@ void CHyprError::createQueued() {
|
||||
cairo_move_to(CAIRO, PAD + 1 + RADIUS, yoffset + PAD + 1);
|
||||
cairo_show_text(CAIRO, current.c_str());
|
||||
yoffset += FONTSIZE + (FONTSIZE / 10.f);
|
||||
renderedcnt++;
|
||||
}
|
||||
if (VISLINECOUNT < LINECOUNT) {
|
||||
std::string moreString = std::format("({} more...)", LINECOUNT - VISLINECOUNT);
|
||||
cairo_move_to(CAIRO, PAD + 1 + RADIUS, yoffset + PAD + 1);
|
||||
cairo_show_text(CAIRO, moreString.c_str());
|
||||
}
|
||||
m_szQueued = "";
|
||||
|
||||
cairo_surface_flush(CAIROSURFACE);
|
||||
|
||||
|
Reference in New Issue
Block a user