Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 24 additions & 19 deletions src/desktop/types/OverridableVar.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#include <cstdint>
#include <type_traits>
#include <any>
#include <map>
#include <ranges>
#include "../../config/ConfigValue.hpp"

namespace Desktop::Types {
Expand All @@ -25,6 +25,8 @@ namespace Desktop::Types {
PRIORITY_WORKSPACE_RULE,
PRIORITY_WINDOW_RULE,
PRIORITY_SET_PROP,

PRIORITY_END,
};

template <typename T>
Expand Down Expand Up @@ -56,11 +58,11 @@ namespace Desktop::Types {
if (this == &other)
return *this;

for (auto const& value : other.m_values) {
for (size_t i = 0; i < PRIORITY_END; ++i) {
if constexpr (Extended && !std::is_same_v<T, bool>)
m_values[value.first] = clampOptional(value.second, m_minValue, m_maxValue);
m_values[i] = clampOptional(*other.m_values[i], m_minValue, m_maxValue);
else
m_values[value.first] = value.second;
m_values[i] = other.m_values[i];
}

return *this;
Expand All @@ -71,18 +73,19 @@ namespace Desktop::Types {
}

void unset(eOverridePriority priority) {
m_values.erase(priority);
m_values[priority] = std::nullopt;
}

bool hasValue() const {
return !m_values.empty();
return std::ranges::any_of(m_values, [](const auto& e) { return e.has_value(); });
}

T value() const {
if (!m_values.empty())
return std::prev(m_values.end())->second;
else
throw std::bad_optional_access();
for (const auto& v : m_values | std::ranges::views::reverse) {
if (v)
return *v;
}
throw std::bad_optional_access();
}

T valueOr(T const& other) const {
Expand Down Expand Up @@ -115,10 +118,12 @@ namespace Desktop::Types {
}

eOverridePriority getPriority() const {
if (!m_values.empty())
return std::prev(m_values.end())->first;
else
throw std::bad_optional_access();
for (int i = PRIORITY_END - 1; i >= 0; --i) {
if (m_values[i])
return sc<eOverridePriority>(i);
}

throw std::bad_optional_access();
}

void increment(T const& other, eOverridePriority priority) {
Expand All @@ -143,11 +148,11 @@ namespace Desktop::Types {
}

private:
std::map<eOverridePriority, T> m_values;
std::optional<T> m_defaultValue; // used for toggling, so required for bool
std::optional<T> m_minValue;
std::optional<T> m_maxValue;
std::any m_configValue; // only there for select variables
std::array<std::optional<T>, PRIORITY_END> m_values;
std::optional<T> m_defaultValue; // used for toggling, so required for bool
std::optional<T> m_minValue;
std::optional<T> m_maxValue;
std::any m_configValue; // only there for select variables
};

}
40 changes: 40 additions & 0 deletions src/i18n/Engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,46 @@ I18n::CI18nEngine::CI18nEngine() {

huEngine->registerEntry("fa_IR", TXT_KEY_NOTIF_WIDE_COLOR_NOT_10B, "مانیتور {name}: گسترهٔ رنگ وسیع فعال است اما نمایشگر در حالت ۱۰ بیتی نیست.");

// fi_FI (Finnish)
huEngine->registerEntry("fi_FI", TXT_KEY_ANR_TITLE, "Sovellus ei vastaa");
huEngine->registerEntry("fi_FI", TXT_KEY_ANR_CONTENT, "Sovellus {title} - {class} ei vastaa.\nMitä haluat tehdä sille?");
huEngine->registerEntry("fi_FI", TXT_KEY_ANR_OPTION_TERMINATE, "Lopeta");
huEngine->registerEntry("fi_FI", TXT_KEY_ANR_OPTION_WAIT, "Odota");
huEngine->registerEntry("fi_FI", TXT_KEY_ANR_PROP_UNKNOWN, "(tuntematon)");

huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_REQUEST_UNKNOWN, "Sovellus <b>{app}<b> pyytää tuntematonta käyttöoikeutta.");
huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_REQUEST_SCREENCOPY, "Sovellus <b>{app}<b> yrittää nauhoittaa näyttöäsi.\n\nHaluatko sallia nauhoituksen?");
huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_REQUEST_PLUGIN, "Sovellus <b>{app}<b> yrittää ladata laajennusta: <b>{plugin}<p>.\n\nHaluatko sallia latauksen?");
huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_REQUEST_KEYBOARD, "Uusi näppäimistö havaittu: <b>{keyboard}<b>.\n\nHaluatko sallia sen toiminnan?");
huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_UNKNOWN_NAME, "(tuntematon)");
huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_TITLE, "Käyttöoikeuspyyntö");
huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_PERSISTENCE_HINT, "Vihje: voit asettaa nämä säännöt pysyvästi Hyprland konfiguraatio tiedostossa.");
huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_ALLOW, "Salli");
huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_ALLOW_AND_REMEMBER, "Salli ja muista");
huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_ALLOW_ONCE, "Salli kerran");
huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_DENY, "Kiellä");
huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_UNKNOWN_WAYLAND_APP, "Tuntematon sovellus (wayland client ID {wayland_id})");

huEngine->registerEntry(
"fi_FI", TXT_KEY_NOTIF_EXTERNAL_XDG_DESKTOP,
"XDG_CURRENT_DESKTOP ympäristösi näyttäisi olevan ulkoisesti hallittu, ja sen nykyinen arvo on {value}.\nTämä voi aiheuttaa ongelmia, ellei se ole tarkoituksellista.");
huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_NO_GUIUTILS,
"Paketti hyprland-guiutils ei ole asennettuna järjestelmääsi. Jotkin dialogit tarvitsevat sitä. Harkitse sen asentamista.");
huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_FAILED_ASSETS, [](const Hyprutils::I18n::translationVarMap& vars) {
int assetsNo = std::stoi(vars.at("count"));
if (assetsNo <= 1)
return "Hyprland epäonnistui olennaisen resurssin ({count}) latauksessa. Syytä distrosi pakkajaa huonosta pakkauksesta!";
return "Hyprland epäonnistui olennaisten resurssien ({count}) latauksessa. Syytä distrosi pakkajaa huonosta pakkauksesta!";
});
huEngine->registerEntry(
"fi_FI", TXT_KEY_NOTIF_INVALID_MONITOR_LAYOUT,
"Näyttöjesi asettelu on virheellinen. Näyttö {name} on muiden näyttöjen päällä.\nLisätietoja löydät wikistä (Monitors sivu). Tämä <b>tulee aiheuttamaan<b> ongelmia.");
huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_MONITOR_MODE_FAIL, "Näyttö {name} epäonnistui pyydetyn tilan asettamisessa, palataan tilaan {mode}.");
huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_MONITOR_AUTO_SCALE, "Näytölle {name} asetettu skaalaus: {scale} on virheellinen, asetetaan suositeltu skaalaus: {fixed_scale}.");
huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_FAILED_TO_LOAD_PLUGIN, "Laajennuksen {name} lataus epäonnistui: {error}");
huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_CM_RELOAD_FAILED, "CM varjostimen uudelleenlataus epäonnistui, palataan takaisin rgba/rgbx tilaan.");
huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_WIDE_COLOR_NOT_10B, "Näyttö {name}: laaja väriskaala on otettu käyttöön, mutta näyttö ei ole 10-bit tilassa.");

// fr_FR (French)
huEngine->registerEntry("fr_FR", TXT_KEY_ANR_TITLE, "L'application ne répond plus");
huEngine->registerEntry("fr_FR", TXT_KEY_ANR_CONTENT, "L'application {title} - {class} ne répond plus.\nQue voulez-vous faire?");
Expand Down