mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
Merge branch 'main' into bluetooth-clean
This commit is contained in:
+3
-1
@@ -1,4 +1,6 @@
|
||||
.qmlls.ini
|
||||
.zed
|
||||
.idea
|
||||
.vscode
|
||||
.vscode
|
||||
*.code-workspace
|
||||
RELEASE.md
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
"name": "punctuation.definition",
|
||||
"scope": "punctuation.definition.string.begin,punctuation.definition.string.end",
|
||||
"settings": {
|
||||
"foreground": "{{colors.secondary.default.hex}}"
|
||||
"foreground": "{{colors.primary.default.hex}}"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1787,6 +1787,7 @@
|
||||
"editorOverviewRuler.wordHighlightForeground": "{{colors.secondary.default.hex}}",
|
||||
"editorOverviewRuler.wordHighlightStrongForeground": "{{colors.secondary.default.hex}}",
|
||||
"editorRuler.foreground": "{{colors.outline_variant.default.hex}}",
|
||||
"editorStickyScrollHover.background": "{{colors.surface_variant.default.hex}}",
|
||||
"editorSuggestWidget.background": "{{colors.surface.default.hex}}",
|
||||
"editorSuggestWidget.border": "{{colors.outline.default.hex}}",
|
||||
"editorSuggestWidget.foreground": "{{colors.on_surface.default.hex}}",
|
||||
@@ -1983,4 +1984,4 @@
|
||||
"welcomePage.buttonHoverBackground": "{{colors.primary.default.hex}}20",
|
||||
"widget.shadow": "{{colors.background.default.hex}}5c"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -88,7 +88,7 @@ body {
|
||||
--bg-2: {{colors.surface_container_low.default.hex}}; /* dark buttons */
|
||||
--bg-3: {{colors.surface_container.default.hex}}; /* spacing, secondary elements */
|
||||
--bg-4: {{colors.surface.default.hex}}; /* main background color */
|
||||
--hover: {{colors.surface_container_high.default.hex}}20; /* channels and buttons when hovered */
|
||||
--hover: {{colors.on_surface.default.hex}}15; /* channels and buttons when hovered */
|
||||
--active: {{colors.surface_container_highest.default.hex}}40; /* channels and buttons when clicked or selected */
|
||||
--active-2: {{colors.surface.default.hex}}30; /* extra state for transparent buttons */
|
||||
--message-hover: {{colors.surface_variant.default.hex}}40; /* messages when hovered */
|
||||
|
||||
@@ -3,11 +3,6 @@
|
||||
[mgr]
|
||||
cwd = { fg = "{{colors.on_surface.default.hex}}" }
|
||||
|
||||
# Tab
|
||||
tab_active = { fg = "{{colors.on_primary.default.hex}}", bg = "{{colors.primary.default.hex}}", bold = true }
|
||||
tab_inactive = { fg = "{{colors.primary_container.default.hex}}", bg = "{{colors.on_primary_container.default.hex}}" }
|
||||
tab_width = 1
|
||||
|
||||
# Find
|
||||
find_keyword = { fg = "{{colors.error.default.hex}}", bold = true, italic = true, underline = true }
|
||||
find_position = { fg = "{{colors.error.default.hex}}", bold = true, italic = true }
|
||||
@@ -32,20 +27,9 @@ border_style = { fg = "{{colors.primary.default.hex}}" }
|
||||
# : Status [[[
|
||||
|
||||
[status]
|
||||
separator_style = { bg = "{{colors.on_primary.default.hex}}", fg = "#F4A261" }
|
||||
|
||||
[mode]
|
||||
# Mode
|
||||
normal_main = { bg = "{{colors.primary.default.hex}}", fg = "{{colors.on_primary.default.hex}}", bold = true }
|
||||
normal_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" }
|
||||
|
||||
# Select mode
|
||||
select_main = { bg = "{{colors.secondary.default.hex}}", fg = "{{colors.on_secondary.default.hex}}", bold = true }
|
||||
select_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" }
|
||||
|
||||
# Unset mode
|
||||
unset_main = { bg = "{{colors.tertiary.default.hex}}", fg = "{{colors.on_tertiary.default.hex}}", bold = true }
|
||||
unset_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" }
|
||||
overall = { fg = "{{colors.primary.default.hex}}" }
|
||||
sep_left = { open = "", close = "" }
|
||||
sep_right = { open = "", close = "" }
|
||||
|
||||
# Progress
|
||||
progress_label = { bold = true }
|
||||
@@ -53,20 +37,27 @@ progress_normal = { fg = "{{colors.primary.default.hex}}", bg = "{{colors.surfac
|
||||
progress_error = { fg = "{{colors.error.default.hex}}", bg = "{{colors.surface.default.hex}}" }
|
||||
|
||||
# Permissions
|
||||
permissions_t = { fg = "{{colors.secondary.default.hex}}" }
|
||||
permissions_w = { fg = "{{colors.tertiary.default.hex}}" }
|
||||
permissions_x = { fg = "{{colors.error.default.hex}}" }
|
||||
permissions_r = { fg = "{{colors.tertiary_container.default.hex}}" }
|
||||
permissions_s = { fg = "{{colors.primary_container.default.hex}}" }
|
||||
perm_type = { fg = "{{colors.secondary.default.hex}}" }
|
||||
perm_write = { fg = "{{colors.tertiary.default.hex}}" }
|
||||
perm_exec = { fg = "{{colors.error.default.hex}}" }
|
||||
perm_read = { fg = "{{colors.tertiary_container.default.hex}}" }
|
||||
perm_sep = { fg = "{{colors.primary_container.default.hex}}" }
|
||||
|
||||
# : ]]]
|
||||
|
||||
|
||||
# : Select [[[
|
||||
# : Mode [[[
|
||||
|
||||
[select]
|
||||
border = { fg = "{{colors.primary.default.hex}}" }
|
||||
active = { fg = "{{colors.tertiary.default.hex}}", bold = true }
|
||||
[mode]
|
||||
|
||||
normal_main = { bg = "{{colors.primary.default.hex}}", fg = "{{colors.on_primary.default.hex}}", bold = true }
|
||||
normal_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" }
|
||||
|
||||
select_main = { bg = "{{colors.secondary.default.hex}}", fg = "{{colors.on_secondary.default.hex}}", bold = true }
|
||||
select_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" }
|
||||
|
||||
unset_main = { bg = "{{colors.tertiary.default.hex}}", fg = "{{colors.on_tertiary.default.hex}}", bold = true }
|
||||
unset_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" }
|
||||
|
||||
# : ]]]
|
||||
|
||||
@@ -75,10 +66,13 @@ active = { fg = "{{colors.tertiary.default.hex}}", bold = true }
|
||||
|
||||
[input]
|
||||
border = { fg = "{{colors.primary.default.hex}}" }
|
||||
title = {}
|
||||
value = { fg = "{{colors.on_surface.default.hex}}" }
|
||||
selected = { reversed = true }
|
||||
|
||||
# : ]]]
|
||||
|
||||
|
||||
# : Tabs [[[
|
||||
|
||||
[tabs]
|
||||
@@ -91,7 +85,7 @@ sep_inner = { open = "[", close = "]" }
|
||||
|
||||
# : Completion [[[
|
||||
|
||||
[completion]
|
||||
[cmp]
|
||||
border = { fg = "{{colors.primary.default.hex}}", bg = "{{colors.on_primary.default.hex}}" }
|
||||
|
||||
# : ]]]
|
||||
@@ -120,12 +114,23 @@ separator_style = { fg = "{{colors.on_surface.default.hex}}" }
|
||||
|
||||
# : ]]]
|
||||
|
||||
# : Spotter [[[
|
||||
|
||||
[spot]
|
||||
border = { fg = "{{colors.primary.default.hex}}" }
|
||||
title = { fg = "{{colors.primary.default.hex}}" }
|
||||
tbl_col = { fg = "{{colors.on_surface.default.hex}}" }
|
||||
tbl_cell = { fg = "{{colors.on_surface.default.hex}}", bg = "{{colors.surface.default.hex}}" }
|
||||
|
||||
# : ]]]
|
||||
|
||||
|
||||
# : Help [[[
|
||||
|
||||
[help]
|
||||
on = { fg = "{{colors.on_surface.default.hex}}" }
|
||||
run = { fg = "{{colors.on_surface.default.hex}}" }
|
||||
hovered = { reversed = true, bold = true }
|
||||
footer = { fg = "{{colors.on_secondary.default.hex}}", bg = "{{colors.secondary.default.hex}}" }
|
||||
|
||||
# : ]]]
|
||||
@@ -159,12 +164,12 @@ rules = [
|
||||
{ mime = "application/{pdf,doc,rtf}", fg = "#a6e3a1" },
|
||||
|
||||
# Special files
|
||||
{ name = "*", is = "orphan", bg = "{{colors.error_container.default.hex}}" },
|
||||
{ name = "*", is = "exec", fg = "{{colors.on_error_container.default.hex}}" },
|
||||
{ mime = "*", is = "orphan", fg = "{{colors.on_error_container.default.hex}}", bg = "{{colors.error_container.default.hex}}" },
|
||||
{ mime = "application/*exec*", fg = "{{colors.error.default.hex}}" },
|
||||
|
||||
# Fallback
|
||||
{ name = "*", fg = "{{colors.on_surface.default.hex}}" },
|
||||
{ name = "*/", fg = "{{colors.primary.default.hex}}" },
|
||||
{ url = "*", fg = "{{colors.on_surface.default.hex}}" },
|
||||
{ url = "*/", fg = "{{colors.primary.default.hex}}" },
|
||||
]
|
||||
|
||||
# : ]]]
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
* {
|
||||
--base: {{colors.surface_container_lowest.default.hex}};
|
||||
--surface: {{colors.surface_container_low.default.hex}};
|
||||
--overlay: {{colors.surface_container.default.hex}};
|
||||
--muted: {{colors.surface_container_high.default.hex}};
|
||||
--subtle: {{colors.surface_container_highest.default.hex}};
|
||||
--text: {{colors.on_surface.default.hex}};
|
||||
--secondary: {{colors.secondary.default.hex}};
|
||||
--primary: {{colors.primary.default.hex}};
|
||||
--on_primary: {{colors.on_primary.default.hex}};
|
||||
}
|
||||
|
||||
:root {
|
||||
/* Core Color Palette Overrides */
|
||||
--zen-colors-primary: var(--base) !important;
|
||||
--zen-primary-color: var(--base) !important;
|
||||
--zen-colors-secondary: var(--surface) !important;
|
||||
--zen-colors-tertiary: var(--overlay) !important;
|
||||
--zen-colors-border: var(--primary) !important;
|
||||
|
||||
/* Backgrounds */
|
||||
--toolbar-bgcolor: var(--base) !important;
|
||||
--newtab-background-color: var(--overlay) !important;
|
||||
--zen-themed-toolbar-bg: var(--base) !important;
|
||||
--zen-main-browser-background: var(--base) !important;
|
||||
--toolbox-bgcolor-inactive: var(--base) !important;
|
||||
|
||||
/* Text & Icons */
|
||||
--lwt-text-color: var(--text) !important;
|
||||
--toolbarbutton-icon-fill: var(--primary) !important;
|
||||
--toolbar-field-color: var(--text) !important;
|
||||
--toolbar-field-focus-color: var(--text) !important;
|
||||
--toolbar-color: var(--text) !important;
|
||||
--tab-selected-textcolor: var(--primary) !important;
|
||||
--newtab-text-primary-color: var(--text) !important;
|
||||
|
||||
/* Popups & Menus */
|
||||
--arrowpanel-color: var(--text) !important;
|
||||
--arrowpanel-background: var(--overlay) !important;
|
||||
|
||||
/* Sidebar Stuff */
|
||||
--sidebar-text-color: var(--text) !important;
|
||||
--lwt-sidebar-text-color: var(--text) !important;
|
||||
--lwt-sidebar-background-color: var(--base) !important;
|
||||
|
||||
/* --- Tab Selection --- */
|
||||
--tab-selected-textcolor: var(--primary) !important;
|
||||
}
|
||||
|
||||
/* Element Specific Overrides */
|
||||
|
||||
#permissions-granted-icon {
|
||||
color: var(--base) !important;
|
||||
}
|
||||
|
||||
.sidebar-placesTree {
|
||||
background-color: var(--surface) !important;
|
||||
}
|
||||
|
||||
#zen-workspaces-button {
|
||||
background-color: var(--surface) !important;
|
||||
}
|
||||
|
||||
#urlbar-background {
|
||||
background-color: var(--surface) !important;
|
||||
}
|
||||
|
||||
.tab-background[selected=""] {
|
||||
background: var(--overlay) !important;
|
||||
}
|
||||
|
||||
.content-shortcuts {
|
||||
background-color: var(--surface) !important;
|
||||
border-color: var(--secondary) !important;
|
||||
}
|
||||
|
||||
.urlbarView-url {
|
||||
color: var(--primary) !important;
|
||||
}
|
||||
|
||||
#zenEditBookmarkPanelFaviconContainer {
|
||||
background: var(--base) !important;
|
||||
}
|
||||
|
||||
#zen-toast-container {
|
||||
color: var(--primary) !important;
|
||||
}
|
||||
|
||||
toolbar .toolbarbutton-1 {
|
||||
&:not([disabled]) {
|
||||
&:is([open], [checked]) > :is(
|
||||
.toolbarbutton-icon,
|
||||
.toolbarbutton-text,
|
||||
.toolbarbutton-badge-stack
|
||||
) {
|
||||
fill: var(--base);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#TabsToolbar {
|
||||
background-color: var(--base) !important;
|
||||
}
|
||||
|
||||
hbox#titlebar {
|
||||
background-color: var(--base) !important;
|
||||
}
|
||||
|
||||
#zen-appcontent-navbar-container {
|
||||
background-color: var(--base) !important;
|
||||
}
|
||||
|
||||
/* Zen toast/indicator contrast visibility issue fix */
|
||||
#zen-toast-container {
|
||||
color: var(--primary) !important;
|
||||
}
|
||||
|
||||
/* Pane UI button visibility issue fix */
|
||||
#PanelUI-menu-button[open] .toolbarbutton-icon {
|
||||
fill: var(--primary) !important;
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
/* Common variables affecting all pages */
|
||||
@-moz-document url-prefix("about:") {
|
||||
:root {
|
||||
--in-content-page-color: {{colors.secondary.default.hex}} !important;
|
||||
--color-accent-primary: {{colors.primary.default.hex}} !important;
|
||||
/* --color-accent-primary-hover: rgb(249, 217, 240) !important;
|
||||
--color-accent-primary-active: rgb(245, 195, 219) !important; */
|
||||
background-color: {{colors.surface_container.default.hex}} !important;
|
||||
--in-content-page-background: {{colors.surface_container.default.hex}} !important;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Variables and styles specific to about:newtab and about:home */
|
||||
@-moz-document url("about:newtab"), url("about:home") {
|
||||
|
||||
:root {
|
||||
--newtab-background-color: {{colors.surface_container.default.hex}} !important;
|
||||
--newtab-background-color-secondary: {{colors.surface_container_high.default.hex}} !important;
|
||||
--newtab-element-hover-color: {{colors.surface_container_high.default.hex}} !important;
|
||||
--newtab-text-primary-color: {{colors.secondary.default.hex}} !important;
|
||||
--newtab-wordmark-color: {{colors.secondary.default.hex}} !important;
|
||||
--newtab-primary-action-background: {{colors.primary.default.hex}} !important;
|
||||
}
|
||||
|
||||
.icon {
|
||||
color: {{colors.primary.default.hex}} !important;
|
||||
}
|
||||
|
||||
.card-outer:is(:hover, :focus, .active):not(.placeholder) .card-title {
|
||||
color: {{colors.primary.default.hex}} !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Variables and styles specific to about:preferences */
|
||||
@-moz-document url-prefix("about:preferences") {
|
||||
:root {
|
||||
--zen-colors-tertiary: {{colors.surface_container_low.default.hex}} !important;
|
||||
--in-content-text-color: {{colors.secondary.default.hex}} !important;
|
||||
--link-color: {{colors.primary.default.hex}} !important;
|
||||
/* --link-color-hover: rgb(249, 217, 240) !important; */
|
||||
--zen-colors-primary: {{colors.surface_container_high.default.hex}} !important;
|
||||
--in-content-box-background: {{colors.surface_container_high.default.hex}} !important;
|
||||
--zen-primary-color: {{colors.primary.default.hex}} !important;
|
||||
}
|
||||
|
||||
groupbox , moz-card{
|
||||
background: {{colors.surface_container.default.hex}} !important;
|
||||
}
|
||||
|
||||
button,
|
||||
groupbox menulist {
|
||||
background: {{colors.surface_container_high.default.hex}} !important;
|
||||
color: {{colors.secondary.default.hex}} !important;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
background-color: {{colors.surface_container_lowest.default.hex}} !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Variables and styles specific to about:addons */
|
||||
@-moz-document url-prefix("about:addons") {
|
||||
:root {
|
||||
--zen-dark-color-mix-base: {{colors.surface_container_low.default.hex}} !important;
|
||||
--background-color-box: {{colors.surface_container.default.hex}} !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Variables and styles specific to about:protections */
|
||||
@-moz-document url-prefix("about:protections") {
|
||||
:root {
|
||||
--zen-primary-color: {{colors.surface_container.default.hex}} !important;
|
||||
--in-content-primary-button-text-color-hover: {{colors.secondary.default.hex}} !important;
|
||||
--in-content-primary-button-background: {{colors.surface_container.default.hex}} !important;
|
||||
--in-content-primary-button-text-color: {{colors.secondary.default.hex}} !important;
|
||||
}
|
||||
|
||||
.card {
|
||||
background-color: {{colors.surface_container_high.default.hex}} !important;
|
||||
}
|
||||
}
|
||||
/* Pane UI button visibility issue fix */
|
||||
#PanelUI-menu-button[open] .toolbarbutton-icon {
|
||||
fill: {{colors.primary.default.hex}} !important;
|
||||
}
|
||||
}
|
||||
+132
-40
@@ -142,12 +142,20 @@
|
||||
"description": "Wenn der Ausgabetext diesem Wert entspricht, wird die Schaltfläche eingeklappt.",
|
||||
"label": "Einklappbedingung"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "Designfarben auf Symbol und Text anwenden.",
|
||||
"label": "Farbe auswählen"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "Befehl eingeben, der in regelmäßigen Abständen ausgeführt wird. Die erste Zeile seiner Ausgabe wird als Text angezeigt.",
|
||||
"label": "Befehlsausgabe anzeigen",
|
||||
"stream-description": "Geben Sie einen Befehl ein, der kontinuierlich ausgeführt werden soll."
|
||||
},
|
||||
"dynamic-text": "Dynamischer Text",
|
||||
"enable-colorization": {
|
||||
"description": "Färbung für das benutzerdefinierte Schaltflächensymbol und den Text aktivieren, Designfarben anwenden.",
|
||||
"label": "Färbung aktivieren"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "Immer erweitert",
|
||||
"description": "Steuert die Sichtbarkeit des Widgets, wenn der Befehl keine Ausgabe hat.",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "Wählen Sie, wie dieser Wert angezeigt werden soll.",
|
||||
"label": "Anzeigemodus"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "Das Tastaturlayout-Symbol anzeigen.",
|
||||
"label": "Symbol anzeigen"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "Wenn aktiviert, wird die Primärfarbe zur Hervorhebung verwendet.",
|
||||
"label": "Primärfarbe verwenden"
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,6 +345,10 @@
|
||||
"description": "Zeige GPU-Temperaturwerte an, falls verfügbar.",
|
||||
"label": "GPU-Temperatur"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "Systemlastdurchschnitt anzeigen.",
|
||||
"label": "Lastdurchschnitt"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "Speicherverbrauch als Prozentsatz statt absolute Werte anzeigen.",
|
||||
"label": "Speicher als Prozentsatz"
|
||||
@@ -481,6 +503,7 @@
|
||||
"device-address": "Geräteadresse",
|
||||
"disabled": "Bluetooth ist deaktiviert",
|
||||
"disconnect": "Trennen",
|
||||
"disconnecting": "Verbindung wird getrennt...",
|
||||
"discoverable": "Sichtbar",
|
||||
"enable-message": "Aktivieren Sie Bluetooth, um verfügbare Geräte zu sehen.",
|
||||
"info": "Info",
|
||||
@@ -494,6 +517,14 @@
|
||||
"refresh-devices": "Geräte aktualisieren",
|
||||
"scanning": "Scannen nach Geräten...",
|
||||
"signal": "Signal",
|
||||
"signal-text": {
|
||||
"excellent": "Signal: Ausgezeichnet",
|
||||
"fair": "Signal: Schwach",
|
||||
"good": "Signal: Gut",
|
||||
"poor": "Signal: Schlecht",
|
||||
"unknown": "Signal: Unbekannt",
|
||||
"very-poor": "Signal: Sehr schlecht"
|
||||
},
|
||||
"title": "Bluetooth",
|
||||
"trusted": "Vertrauenswürdig",
|
||||
"unpair": "Entkoppeln"
|
||||
@@ -529,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "Unserem Discord beitreten",
|
||||
"dismiss": "Ok"
|
||||
"dismiss": "Ok",
|
||||
"feedback": "Feedback geben"
|
||||
},
|
||||
"empty": "Es sind noch keine Versionshinweise verfügbar.",
|
||||
"highlight-title": "Highlights",
|
||||
@@ -573,6 +605,7 @@
|
||||
"enable-bluetooth": "Bluetooth aktivieren",
|
||||
"enable-dnd": "'Nicht stören' aktivieren",
|
||||
"enable-wifi": "WLAN aktivieren",
|
||||
"launcher-settings": "Launcher-Einstellungen",
|
||||
"lower-to-bottom": "Senken bis zum Anschlag / Ganz nach unten senken",
|
||||
"next": "Nächste/r/s",
|
||||
"open-calendar": "Kalender öffnen",
|
||||
@@ -631,7 +664,35 @@
|
||||
"webbrowser": "Webbrowser"
|
||||
},
|
||||
"delete": "Löschen",
|
||||
"no-results": "Keine Ergebnisse gefunden",
|
||||
"pin": "Anheften",
|
||||
"providers": {
|
||||
"applications": "Anwendungen",
|
||||
"calculator": "Rechner",
|
||||
"calculator-deprecated": "Der Befehl >calc ist veraltet und wird bald entfernt. Bitte geben Sie stattdessen mathematische Ausdrücke direkt in die Suche ein.",
|
||||
"calculator-description": "Rechner — mathematische Ausdrücke auswerten",
|
||||
"calculator-enter-expression": "Mathematischen Ausdruck eingeben",
|
||||
"calculator-error": "Fehler",
|
||||
"calculator-name": "Rechner",
|
||||
"clipboard": "Zwischenablageverlauf",
|
||||
"clipboard-clear-description": "Gesamten Zwischenablageverlauf löschen",
|
||||
"clipboard-clear-description-full": "Alle Elemente aus dem Zwischenablageverlauf entfernen",
|
||||
"clipboard-clear-history": "Zwischenablageverlauf löschen",
|
||||
"clipboard-delete": "Zwischenablageeintrag löschen",
|
||||
"clipboard-history-disabled": "Zwischenablageverlauf deaktiviert",
|
||||
"clipboard-history-disabled-description": "Zwischenablageverlauf in den Einstellungen aktivieren oder cliphist installieren",
|
||||
"clipboard-loading": "Lade Zwischenablageverlauf...",
|
||||
"clipboard-loading-description": "Bitte warten",
|
||||
"clipboard-search-description": "Zwischenablageverlauf durchsuchen",
|
||||
"command": "Befehl",
|
||||
"command-description": "Shell-Befehle ausführen",
|
||||
"command-name": "Befehl",
|
||||
"emoji": "Emoji-Auswahl",
|
||||
"emoji-loading": "Lade Emojis...",
|
||||
"emoji-loading-description": "Bitte warten",
|
||||
"emoji-no-recent": "Noch keine kürzlich verwendeten Emojis.",
|
||||
"emoji-search-description": "Emojis suchen und kopieren"
|
||||
},
|
||||
"unpin": "Lösen"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -752,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "System-Ausgabe + Mikrofon-Eingabe",
|
||||
"microphone-input": "Mikrofon-Eingabe",
|
||||
"none": "Kein Audio",
|
||||
"system-output": "System-Ausgabe"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -774,6 +836,10 @@
|
||||
"hover": "Beim Hover Scrollen",
|
||||
"never": "Nie Scrollen"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "Raster",
|
||||
"single-row": "Einzelne Reihe"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "Panel an der Leiste angeheftet",
|
||||
"centered": "Zentriertes Feld",
|
||||
@@ -823,31 +889,6 @@
|
||||
"select": "Auswählen",
|
||||
"test": "Test"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "Anwendungen",
|
||||
"calculator": "Rechner",
|
||||
"calculator-description": "Rechner — mathematische Ausdrücke auswerten",
|
||||
"calculator-enter-expression": "Mathematischen Ausdruck eingeben",
|
||||
"calculator-error": "Fehler",
|
||||
"calculator-name": "Rechner",
|
||||
"clipboard": "Zwischenablageverlauf",
|
||||
"clipboard-clear-description": "Gesamten Zwischenablageverlauf löschen",
|
||||
"clipboard-clear-description-full": "Alle Elemente aus dem Zwischenablageverlauf entfernen",
|
||||
"clipboard-clear-history": "Zwischenablageverlauf löschen",
|
||||
"clipboard-delete": "Zwischenablageeintrag löschen",
|
||||
"clipboard-history-disabled": "Zwischenablageverlauf deaktiviert",
|
||||
"clipboard-history-disabled-description": "Zwischenablageverlauf in den Einstellungen aktivieren oder cliphist installieren",
|
||||
"clipboard-loading": "Lade Zwischenablageverlauf...",
|
||||
"clipboard-loading-description": "Bitte warten",
|
||||
"clipboard-search-description": "Zwischenablageverlauf durchsuchen",
|
||||
"command": "Befehl",
|
||||
"command-description": "Shell-Befehle ausführen",
|
||||
"command-name": "Befehl",
|
||||
"emoji": "Emoji-Auswahl",
|
||||
"emoji-loading": "Lade Emojis...",
|
||||
"emoji-loading-description": "Bitte warten",
|
||||
"emoji-search-description": "Emojis suchen und kopieren"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1125,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "Leitet Farben ab, die eng mit dem zugrunde liegenden Bild übereinstimmen.",
|
||||
"scheme-expressive": "Lebendige Farbpalette mit verspielter Sättigung.",
|
||||
"scheme-fidelity": "Farbtreue Palette, die die Originalfarbtöne beibehält.",
|
||||
"scheme-fruit-salad": "Farbenfroher Mix aus leuchtenden, kontrastreichen Akzenten.",
|
||||
"scheme-monochrome": "Minimale Farbpalette, die auf einem einzigen Farbton basiert.",
|
||||
"scheme-neutral": "Gedämpfte Farbpalette mit dezenten und beruhigenden Tönen.",
|
||||
"scheme-rainbow": "Vielfältige Palette, die das gesamte Spektrum abdeckt.",
|
||||
"scheme-tonal-spot": "Ausgewogene Farbpalette mit gezielten Akzenten."
|
||||
},
|
||||
"description": "Wählen Sie die Farbschema-Generierungsmethode, die Matugen verwenden soll, um Farben aus Ihrem Hintergrundbild zu erstellen.",
|
||||
"label": "Matugen-Schema-Typ"
|
||||
},
|
||||
"section": {
|
||||
@@ -1268,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "Schreibe {filepath} und lade neu"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "Schreibe {Dateipfad}; kopiere in die chrome/userChrome.css deines Zen-Profils."
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1786,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "Befehl, der beim Klicken auf die Schaltfläche \"Annotieren\" im Zwischenablageverlauf ausgeführt wird. Das Bild wird an diesen Befehl weitergeleitet.",
|
||||
"label": "Annotationstool",
|
||||
"placeholder": "gradia, satty -f -"
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": "Zeige eine Vorschau des Inhalts der Zwischenablage an, wenn der Befehl >clip verwendet wird.",
|
||||
"label": "Clip-Vorschau aktivieren"
|
||||
@@ -1826,6 +1866,10 @@
|
||||
"description": "Kategorienregisterkarten zum Filtern von Anwendungen anzeigen.",
|
||||
"label": "Kategorien anzeigen"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "Zeige einen abgerundeten Rechteck-Hintergrund hinter Icons.",
|
||||
"label": "Symbolhintergrund anzeigen"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "Wenn aktiviert, erscheinen häufig gestartete Apps zuerst in der Liste.",
|
||||
"label": "Nach Häufigkeit sortieren"
|
||||
@@ -1940,7 +1984,11 @@
|
||||
"network": {
|
||||
"bluetooth": {
|
||||
"description": "Bluetooth-Verwaltung aktivieren.",
|
||||
"label": "Bluetooth aktivieren"
|
||||
"label": "Bluetooth aktivieren",
|
||||
"rssi-polling": {
|
||||
"description": "Periodisch RSSI für verbundene Geräte über bluetoothctl abfragen. Ist möglicherweise nicht für alle Geräte verfügbar; verbraucht bei Aktivierung minimale Ressourcen.",
|
||||
"label": "Bluetooth-Signalabfrage"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"description": "WLAN- und Bluetooth-Verbindungen verwalten."
|
||||
@@ -2171,6 +2219,11 @@
|
||||
"no-plugins-description": "Überprüfen Sie Ihre Plugin-Quellen oder aktualisieren Sie die Liste.",
|
||||
"no-plugins-label": "Keine Plugins verfügbar"
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "Dieses Plugin ist bereits installiert.",
|
||||
"custom-version-exists": "Eine benutzerdefinierte Version von \"{source}\" ist bereits installiert.",
|
||||
"official-version-exists": "Die offizielle Version dieses Plugins ist bereits installiert."
|
||||
},
|
||||
"filter": {
|
||||
"all": "Alle",
|
||||
"downloaded": "Heruntergeladen",
|
||||
@@ -2191,6 +2244,7 @@
|
||||
"no-plugins-label": "Keine Plugins installiert"
|
||||
},
|
||||
"installing": "{Plugin} wird installiert...",
|
||||
"open-plugins-tab": "Plugin-Einstellungen öffnen",
|
||||
"plugin-settings-title": "{plugin} Einstellungen",
|
||||
"refresh": {
|
||||
"refreshing": "Aktualisiere Plugin-Liste...",
|
||||
@@ -2201,6 +2255,10 @@
|
||||
},
|
||||
"settings-error-not-loaded": "Plugin nicht geladen",
|
||||
"settings-saved": "Plugin-Einstellungen gespeichert",
|
||||
"source": {
|
||||
"custom": "Benutzerdefinierte Quelle",
|
||||
"official": "Offiziell"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "Benutzerdefiniertes Repository hinzufügen",
|
||||
"add-dialog": {
|
||||
@@ -2232,8 +2290,10 @@
|
||||
"update-all": "Alle aktualisieren ({count})",
|
||||
"update-all-success": "Alle Plugins wurden erfolgreich aktualisiert.",
|
||||
"update-available": "{count} Plugin-Update(s) verfügbar",
|
||||
"update-available_plural": "{count} Plugin-Aktualisierungen verfügbar",
|
||||
"update-error": "Fehler beim Aktualisieren des Plugins: {plugin}: {error}",
|
||||
"update-incompatible": "Benötigt Noctalia v{version} oder höher",
|
||||
"update-pending": "v{aktuell} → v{neu} (benötigt Noctalia v{erforderlich})",
|
||||
"update-success": "{plugin} wurde auf v{version} aktualisiert",
|
||||
"update-version": "v{aktuell} → v{neu}",
|
||||
"updating": "Aktualisierung läuft..."
|
||||
@@ -2339,6 +2399,10 @@
|
||||
"label": "Allgemein"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "Wählen Sie, wie die Sitzungsmenü-Schaltflächen angezeigt werden.",
|
||||
"label": "Layout mit großen Schaltflächen"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "Das Sitzungsmenü mit großen Schaltflächen in einem Rasterlayout anzeigen.",
|
||||
"label": "Stil: Große Schaltflächen"
|
||||
@@ -2395,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "Hervorhebungsfarben"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "Lastdurchschnitt"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "Speicherverbrauch"
|
||||
},
|
||||
@@ -2438,6 +2505,10 @@
|
||||
"label": "Animationsgeschwindigkeit",
|
||||
"reset": "Animationsgeschwindigkeit zurücksetzen"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "Zeigt eine Umrandung um Inhaltsbereiche an.",
|
||||
"label": "Containerumriss"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "Passt die Eckenrundung wichtiger Layoutbereiche an, wie z. B. Seitenleisten, Karten und Inhaltsbereiche.",
|
||||
"label": "Behälterradius",
|
||||
@@ -2564,8 +2635,8 @@
|
||||
"tooltip": "Hintergrundbild-Ordner"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "Hintergrundbilddateinamen im Auswahlmenü ausblenden.",
|
||||
"label": "Dateinamen ausblenden"
|
||||
"tooltip-hide": "Dateinamen ausblenden",
|
||||
"tooltip-show": "Dateinamen anzeigen"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "Unterschiedlichen Hintergrundbild-Ordner für jeden Monitor festlegen.",
|
||||
@@ -2648,6 +2719,7 @@
|
||||
"download": "Herunterladen",
|
||||
"download-speed": "Download-Geschwindigkeit",
|
||||
"gpu-temp": "GPU-Temperatur",
|
||||
"load-average": "Lastdurchschnitt",
|
||||
"memory": "Arbeitsspeicher",
|
||||
"title": "Systemüberwachung",
|
||||
"upload": "Hochladen",
|
||||
@@ -2664,6 +2736,7 @@
|
||||
"low-desc": "Batterie ist bei {percent}%. Bitte schließen Sie das Ladegerät an."
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Adresse in die Zwischenablage kopiert",
|
||||
"confirm-code": "Bestätigungscode {value} auf dem anderen Gerät bestätigen.",
|
||||
"connect-failed": "Verbindung mit dem Gerät fehlgeschlagen",
|
||||
"disabled": "Deaktiviert",
|
||||
@@ -2706,7 +2779,8 @@
|
||||
"enabled": "Aktiviert"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "Tastaturlayout geändert zu {layout}"
|
||||
"changed": "Tastaturlayout geändert zu {layout}",
|
||||
"title": "Tastatur"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "Ko-fi-Seite in Ihrem Browser geöffnet"
|
||||
@@ -2780,6 +2854,7 @@
|
||||
"close": "Schließen",
|
||||
"collapse": "Seitenleiste einklappen",
|
||||
"connect-disconnect-devices": "Bluetooth-Gerät",
|
||||
"copy-address": "Adresse kopieren",
|
||||
"delete-notification": "Benachrichtigung löschen",
|
||||
"disable-keep-awake": "Wach halten",
|
||||
"do-not-disturb-disabled": "Nicht stören",
|
||||
@@ -2798,10 +2873,12 @@
|
||||
"list-view": "Listenansicht",
|
||||
"manage-vpn": "VPN-Verbindungen",
|
||||
"manage-wifi": "WLAN",
|
||||
"max-widgets-reached": "Maximale Anzahl an Widgets erreicht",
|
||||
"microphone-volume-at": "Mikrofonlautstärke: {volume}%",
|
||||
"move-to-center-section": "Mittlere Sektion",
|
||||
"move-to-left-section": "Linke Sektion",
|
||||
"move-to-right-section": "Rechte Sektion",
|
||||
"move-to-section": "Gehe zu {section}",
|
||||
"mute": "Stummschalten",
|
||||
"next-media": "Nächster Titel",
|
||||
"next-month": "Nächster Monat",
|
||||
@@ -2811,6 +2888,7 @@
|
||||
"night-light-not-installed": "Nachtlicht (nicht verfügbar)",
|
||||
"noctalia-performance-disabled": "Noctalia-Leistungsmodus",
|
||||
"noctalia-performance-enabled": "Noctalia-Leistungsmodus",
|
||||
"open-annotation-tool": "Mit dem Anmerkungswerkzeug öffnen",
|
||||
"open-control-center": "Kontrollzentrum",
|
||||
"open-notification-history-disable-dnd": "Benachrichtigungsverlauf",
|
||||
"open-notification-history-enable-dnd": "Benachrichtigungsverlauf",
|
||||
@@ -2858,6 +2936,7 @@
|
||||
"apikey": {
|
||||
"help": "Ein API-Schlüssel ist erforderlich, um auf NSFW-Inhalte zuzugreifen.",
|
||||
"label": "API-Schlüssel",
|
||||
"managed-by-env": "Verwaltet über die Umgebungsvariable NOCTALIA_WALLHAVEN_API_KEY.",
|
||||
"placeholder": "Gib deinen Wallhaven API-Schlüssel ein"
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2895,6 +2974,9 @@
|
||||
}
|
||||
},
|
||||
"search": "Suchen:",
|
||||
"solid-color": {
|
||||
"tooltip": "Einfarbiger Hintergrund"
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "Hinzugefügt am",
|
||||
"favorites": "Favoriten",
|
||||
@@ -2943,6 +3025,11 @@
|
||||
"thunderstorm": "Gewitter",
|
||||
"unknown": "Unbekannt"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "Datei auswählen"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "Anwenden",
|
||||
@@ -3027,11 +3114,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "Aktion erforderlich",
|
||||
"available-interfaces": "Verfügbare Schnittstellen",
|
||||
"available-networks": "Verfügbare Netzwerke",
|
||||
"connect": "Verbinden",
|
||||
"connected": "Verbunden",
|
||||
"disabled": "WLAN ist deaktiviert",
|
||||
"disconnect": "Trennen",
|
||||
"disconnected": "Getrennt",
|
||||
"disconnecting": "Verbindung wird getrennt...",
|
||||
"dns": "DNS",
|
||||
"enable-message": "Aktivieren Sie WLAN, um verfügbare Netzwerke zu sehen.",
|
||||
@@ -3042,12 +3131,15 @@
|
||||
"frequency": "Frequenz",
|
||||
"gateway": "Gateway: Gateway",
|
||||
"info": "Info",
|
||||
"interface": "Netzwerkschnittstelle",
|
||||
"internet": "Internet",
|
||||
"internet-connected": "Mit dem Internet verbunden",
|
||||
"internet-limited": "Kein Internet",
|
||||
"internet-status": "Internetstatus",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "Bekannte Netzwerke",
|
||||
"link-speed": "Verbindungsgeschwindigkeit",
|
||||
"no-ethernet-devices": "Keine Ethernet-Geräte erkannt",
|
||||
"no-networks": "Keine Netzwerke gefunden",
|
||||
"password": "Passwort",
|
||||
"saved": "Gespeichert",
|
||||
|
||||
+167
-90
@@ -142,12 +142,20 @@
|
||||
"description": "If the output text matches this value, the button will collapse.",
|
||||
"label": "Collapse condition"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "Apply theme colors to icon and text.",
|
||||
"label": "Select Color"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "Enter a command to run at a regular interval. The first line of its output will be displayed as text.",
|
||||
"label": "Display command output",
|
||||
"stream-description": "Enter a command to run continuously."
|
||||
},
|
||||
"dynamic-text": "Dynamic text",
|
||||
"enable-colorization": {
|
||||
"description": "Enable colorization for the custom button icon and text, applying theme colors.",
|
||||
"label": "Enable Colorization"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "Always expanded",
|
||||
"description": "Controls widget visibility when the command has no output.",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "Choose how you'd like this value to appear.",
|
||||
"label": "Display mode"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "Display the keyboard layout icon.",
|
||||
"label": "Show icon"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "When enabled, this applies the primary color for emphasis.",
|
||||
"label": "Use primary color"
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,6 +345,10 @@
|
||||
"description": "Show GPU temperature readings if available.",
|
||||
"label": "GPU temperature"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "Display system load average.",
|
||||
"label": "Load average"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "Show memory usage as a percentage instead of absolute values.",
|
||||
"label": "Memory as percentage"
|
||||
@@ -478,10 +500,10 @@
|
||||
"connect": "Connect",
|
||||
"connected-devices": "Connected devices",
|
||||
"connecting": "Connecting...",
|
||||
"disconnecting": "Disconnecting...",
|
||||
"device-address": "Device address",
|
||||
"disabled": "Bluetooth is disabled",
|
||||
"disconnect": "Disconnect",
|
||||
"disconnecting": "Disconnecting...",
|
||||
"discoverable": "Discoverable",
|
||||
"enable-message": "Enable Bluetooth to see available devices.",
|
||||
"info": "Info",
|
||||
@@ -496,11 +518,11 @@
|
||||
"scanning": "Scanning for devices...",
|
||||
"signal": "Signal",
|
||||
"signal-text": {
|
||||
"unknown": "Signal: Unknown",
|
||||
"excellent": "Signal: Excellent",
|
||||
"good": "Signal: Good",
|
||||
"fair": "Signal: Fair",
|
||||
"good": "Signal: Good",
|
||||
"poor": "Signal: Poor",
|
||||
"unknown": "Signal: Unknown",
|
||||
"very-poor": "Signal: Very poor"
|
||||
},
|
||||
"title": "Bluetooth",
|
||||
@@ -538,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "Join our Discord",
|
||||
"dismiss": "Ok"
|
||||
"dismiss": "Ok",
|
||||
"feedback": "Give feedback"
|
||||
},
|
||||
"empty": "Release notes are not available yet.",
|
||||
"highlight-title": "Highlights",
|
||||
@@ -582,6 +605,7 @@
|
||||
"enable-bluetooth": "Enable Bluetooth",
|
||||
"enable-dnd": "Enable Do Not Disturb",
|
||||
"enable-wifi": "Enable Wi-Fi",
|
||||
"launcher-settings": "Launcher settings",
|
||||
"lower-to-bottom": "Lower to bottom",
|
||||
"next": "Next",
|
||||
"open-calendar": "Open calendar",
|
||||
@@ -640,7 +664,35 @@
|
||||
"webbrowser": "Web Browser"
|
||||
},
|
||||
"delete": "Delete",
|
||||
"no-results": "No results found",
|
||||
"pin": "Pin",
|
||||
"providers": {
|
||||
"applications": "Applications",
|
||||
"calculator": "Calculator",
|
||||
"calculator-deprecated": "The >calc command is deprecated and will be removed soon. Please type math expressions directly in search instead.",
|
||||
"calculator-description": "Calculator — evaluate mathematical expressions",
|
||||
"calculator-enter-expression": "Enter a mathematical expression",
|
||||
"calculator-error": "Error",
|
||||
"calculator-name": "Calculator",
|
||||
"clipboard": "Clipboard history",
|
||||
"clipboard-clear-description": "Clear all clipboard history",
|
||||
"clipboard-clear-description-full": "Remove all items from clipboard history",
|
||||
"clipboard-clear-history": "Clear clipboard history",
|
||||
"clipboard-delete": "Delete clipboard entry",
|
||||
"clipboard-history-disabled": "Clipboard history disabled",
|
||||
"clipboard-history-disabled-description": "Enable clipboard history in settings or install cliphist",
|
||||
"clipboard-loading": "Loading clipboard history...",
|
||||
"clipboard-loading-description": "Please wait",
|
||||
"clipboard-search-description": "Search clipboard history",
|
||||
"command": "Command",
|
||||
"command-description": "Run shell commands",
|
||||
"command-name": "Command",
|
||||
"emoji": "Emoji picker",
|
||||
"emoji-loading": "Loading emojis...",
|
||||
"emoji-loading-description": "Please wait",
|
||||
"emoji-no-recent": "No recent emojis yet",
|
||||
"emoji-search-description": "Search and copy emojis"
|
||||
},
|
||||
"unpin": "Unpin"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -761,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "System output + microphone input",
|
||||
"microphone-input": "Microphone input",
|
||||
"none": "No audio",
|
||||
"system-output": "System output"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -783,6 +836,10 @@
|
||||
"hover": "Scroll on hover",
|
||||
"never": "Never scroll"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "Grid",
|
||||
"single-row": "Single Row"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "Panel attached to bar",
|
||||
"centered": "Centered panel",
|
||||
@@ -832,31 +889,6 @@
|
||||
"select": "Select",
|
||||
"test": "Test"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "Applications",
|
||||
"calculator": "Calculator",
|
||||
"calculator-description": "Calculator — evaluate mathematical expressions",
|
||||
"calculator-enter-expression": "Enter a mathematical expression",
|
||||
"calculator-error": "Error",
|
||||
"calculator-name": "Calculator",
|
||||
"clipboard": "Clipboard history",
|
||||
"clipboard-clear-description": "Clear all clipboard history",
|
||||
"clipboard-clear-description-full": "Remove all items from clipboard history",
|
||||
"clipboard-clear-history": "Clear clipboard history",
|
||||
"clipboard-delete": "Delete clipboard entry",
|
||||
"clipboard-history-disabled": "Clipboard history disabled",
|
||||
"clipboard-history-disabled-description": "Enable clipboard history in settings or install cliphist",
|
||||
"clipboard-loading": "Loading clipboard history...",
|
||||
"clipboard-loading-description": "Please wait",
|
||||
"clipboard-search-description": "Search clipboard history",
|
||||
"command": "Command",
|
||||
"command-description": "Run shell commands",
|
||||
"command-name": "Command",
|
||||
"emoji": "Emoji picker",
|
||||
"emoji-loading": "Loading emojis...",
|
||||
"emoji-loading-description": "Please wait",
|
||||
"emoji-search-description": "Search and copy emojis"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1134,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "Derives colors that closely match the underlying image.",
|
||||
"scheme-expressive": "Vibrant palette with playful saturation.",
|
||||
"scheme-fidelity": "High-fidelity palette that preserves source hues.",
|
||||
"scheme-fruit-salad": "Colorful mix of bright contrasting accents.",
|
||||
"scheme-monochrome": "Minimal palette built around a single hue.",
|
||||
"scheme-neutral": "Muted palette with subdued and calming tones.",
|
||||
"scheme-rainbow": "Diverse palette spanning the full spectrum.",
|
||||
"scheme-tonal-spot": "Balanced palette with focused accents."
|
||||
},
|
||||
"description": "Choose the color scheme generation method that Matugen will use to create colors from your wallpaper.",
|
||||
"label": "Matugen scheme type"
|
||||
},
|
||||
"section": {
|
||||
@@ -1277,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "Write {filepath} and reload"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "Write {filepath}; copy into your Zen profile's chrome/userChrome.css"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1635,7 +1661,7 @@
|
||||
"label": "Dock size"
|
||||
},
|
||||
"inactive-indicators": {
|
||||
"description": "Display indicatator pills for all apps, not just the currently active one.",
|
||||
"description": "Display indicator pills for all apps, not just the currently active one.",
|
||||
"label": "Running Indicators"
|
||||
},
|
||||
"pinned-static": {
|
||||
@@ -1795,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "Command to run when clicking the annotate button in clipboard history, The image will be piped to this command.",
|
||||
"label": "Annotation tool",
|
||||
"placeholder": "e.g. 'gradia', 'satty -f -'"
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": "Show a preview of the clipboard content when using the >clip command.",
|
||||
"label": "Enable clip preview"
|
||||
@@ -1835,6 +1866,10 @@
|
||||
"description": "Show category tabs for filtering applications.",
|
||||
"label": "Show categories"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "Show a rounded rectangle background behind icons.",
|
||||
"label": "Show icon background"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "When enabled, frequently launched apps appear first in the list.",
|
||||
"label": "Sort by most used"
|
||||
@@ -1951,8 +1986,8 @@
|
||||
"description": "Activate Bluetooth management.",
|
||||
"label": "Enable Bluetooth",
|
||||
"rssi-polling": {
|
||||
"label": "Bluetooth signal polling",
|
||||
"description": "Periodically sample RSSI for connected devices via bluetoothctl. May not be available for all devices; uses minimal resources when enabled."
|
||||
"description": "Periodically sample RSSI for connected devices via bluetoothctl. May not be available for all devices; uses minimal resources when enabled.",
|
||||
"label": "Bluetooth signal polling"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -2184,6 +2219,11 @@
|
||||
"no-plugins-description": "Check your plugin sources or refresh the list.",
|
||||
"no-plugins-label": "No plugins available"
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "This plugin is already installed",
|
||||
"custom-version-exists": "A custom version from \"{source}\" is already installed",
|
||||
"official-version-exists": "The official version of this plugin is already installed"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"downloaded": "Downloaded",
|
||||
@@ -2204,6 +2244,7 @@
|
||||
"no-plugins-label": "No plugins installed"
|
||||
},
|
||||
"installing": "Installing {plugin}...",
|
||||
"open-plugins-tab": "Open plugins settings",
|
||||
"plugin-settings-title": "{plugin} Settings",
|
||||
"refresh": {
|
||||
"refreshing": "Refreshing plugins list...",
|
||||
@@ -2212,16 +2253,20 @@
|
||||
"settings": {
|
||||
"tooltip": "Plugin settings"
|
||||
},
|
||||
"settings-error-not-loaded": "Plugin not loaded",
|
||||
"settings-saved": "Plugin settings saved",
|
||||
"settings-error-not-loaded": "Plugin not loaded.",
|
||||
"settings-saved": "Plugin settings saved.",
|
||||
"source": {
|
||||
"custom": "Custom source",
|
||||
"official": "Official"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "Add custom repository",
|
||||
"add-dialog": {
|
||||
"description": "Add a GitHub repository as a plugin source.",
|
||||
"error": "Failed to add plugin source",
|
||||
"error": "Failed to add plugin source.",
|
||||
"name": "Repository name",
|
||||
"name-placeholder": "My Custom Plugins",
|
||||
"success": "Plugin source added successfully",
|
||||
"success": "Plugin source added successfully.",
|
||||
"title": "Add plugin source",
|
||||
"url": "Repository URL"
|
||||
},
|
||||
@@ -2243,10 +2288,12 @@
|
||||
"uninstalling": "Uninstalling {plugin}...",
|
||||
"update": "Update",
|
||||
"update-all": "Update All ({count})",
|
||||
"update-all-success": "All plugins updated successfully",
|
||||
"update-available": "{count} plugins update(s) available",
|
||||
"update-all-success": "All plugins updated successfully.",
|
||||
"update-available": "New plugin update available",
|
||||
"update-available_plural": "New plugin updates available ({count})",
|
||||
"update-error": "Failed to update plugin: {plugin}: {error}",
|
||||
"update-incompatible": "Requires Noctalia v{version} or higher",
|
||||
"update-pending": "v{current} → v{new} (requires Noctalia v{required})",
|
||||
"update-success": "Updated {plugin} to v{version}",
|
||||
"update-version": "v{current} → v{new}",
|
||||
"updating": "Updating..."
|
||||
@@ -2352,6 +2399,10 @@
|
||||
"label": "General"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "Choose how session menu buttons are displayed.",
|
||||
"label": "Large buttons layout"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "Display the session menu with large buttons in a grid layout.",
|
||||
"label": "Large buttons style"
|
||||
@@ -2408,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "Highlight colors"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "Load average"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "Memory usage"
|
||||
},
|
||||
@@ -2451,6 +2505,10 @@
|
||||
"label": "Animation speed",
|
||||
"reset": "Reset animation speed"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "Displays an outline around content areas.",
|
||||
"label": "Container outline"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "Adjusts the corner roundness of major layout sections, such as sidebars, cards, and content panels.",
|
||||
"label": "Container Radius",
|
||||
@@ -2577,8 +2635,8 @@
|
||||
"tooltip": "Wallpaper folder"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "Hide wallpaper filenames in the selector.",
|
||||
"label": "Hide filenames"
|
||||
"tooltip-hide": "Hide Filenames",
|
||||
"tooltip-show": "Show Filenames"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "Set a different wallpaper folder for each monitor.",
|
||||
@@ -2661,6 +2719,7 @@
|
||||
"download": "Download",
|
||||
"download-speed": "Download Speed",
|
||||
"gpu-temp": "GPU Temp",
|
||||
"load-average": "Load Average",
|
||||
"memory": "Memory",
|
||||
"title": "System Monitor",
|
||||
"upload": "Upload",
|
||||
@@ -2671,8 +2730,8 @@
|
||||
"enabled": "Enabled"
|
||||
},
|
||||
"airplane-mode": {
|
||||
"disabled": "Disabled",
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled.",
|
||||
"enabled": "Enabled.",
|
||||
"title": "Airplane Mode"
|
||||
},
|
||||
"battery": {
|
||||
@@ -2680,6 +2739,7 @@
|
||||
"low-desc": "Battery is at {percent}%. Please connect the charger."
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Address copied to clipboard",
|
||||
"confirm-code": "Confirm code {value} on the other device",
|
||||
"connect-failed": "Failed to connect to device",
|
||||
"disabled": "Disabled",
|
||||
@@ -2693,8 +2753,7 @@
|
||||
"pair-failed": "Failed to pair device",
|
||||
"passkey-required": "Passkey required by the device",
|
||||
"pincode-required": "PIN code required by the device",
|
||||
"state-change-failed": "Failed to change Bluetooth state",
|
||||
"address-copied": "Address copied to clipboard"
|
||||
"state-change-failed": "Failed to change Bluetooth state"
|
||||
},
|
||||
"clipboard": {
|
||||
"unavailable": "Clipboard history unavailable",
|
||||
@@ -2702,7 +2761,7 @@
|
||||
},
|
||||
"dark-mode": {
|
||||
"dark-mode": "Dark Mode",
|
||||
"enabled": "Enabled",
|
||||
"enabled": "Enabled.",
|
||||
"light-mode": "Light Mode"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
@@ -2712,78 +2771,79 @@
|
||||
"enabled-desc": "You'll find these notifications in your history."
|
||||
},
|
||||
"internet": {
|
||||
"limited": "Connected without internet"
|
||||
"limited": "Connected without internet."
|
||||
},
|
||||
"ipc": {
|
||||
"powerpanel-deprecated": "PowerPanel has been renamed to SessionMenu, this IPC call will be deprecated soon. Please use \"ipc call sessionMenu toggle\" instead.",
|
||||
"sidepanel-deprecated": "SidePanel has been renamed to ControlCenter, this IPC call will be deprecated soon. Please use \"ipc call controlCenter toggle\" instead."
|
||||
},
|
||||
"keep-awake": {
|
||||
"disabled": "Disabled",
|
||||
"enabled": "Enabled"
|
||||
"disabled": "Disabled.",
|
||||
"enabled": "Enabled."
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "Keyboard layout changed to {layout}"
|
||||
"changed": "Keyboard layout changed to {layout}.",
|
||||
"title": "Keyboard"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "Ko-fi page opened in your browser"
|
||||
"opened": "Ko-fi page opened in your browser."
|
||||
},
|
||||
"missing-control-center": {
|
||||
"description": "The control center widget has been removed from the bar. To access it from the bar again, you will need to re-add the widget. You can open it with right clicking on the bar too.",
|
||||
"label": "Last control center widget removed"
|
||||
},
|
||||
"night-light": {
|
||||
"disabled": "Disabled",
|
||||
"enabled": "Enabled",
|
||||
"forced": "Forced activation",
|
||||
"normal": "Normal mode",
|
||||
"not-installed": "wlsunset not installed"
|
||||
"disabled": "Disabled.",
|
||||
"enabled": "Enabled.",
|
||||
"forced": "Forced activation.",
|
||||
"normal": "Normal mode.",
|
||||
"not-installed": "wlsunset not installed."
|
||||
},
|
||||
"noctalia-performance": {
|
||||
"disabled": "Performance mode disabled",
|
||||
"enabled": "Performance mode enabled",
|
||||
"disabled": "Performance mode disabled.",
|
||||
"enabled": "Performance mode enabled.",
|
||||
"label": "Noctalia Performance"
|
||||
},
|
||||
"power-profile": {
|
||||
"changed": "Power profile changed",
|
||||
"changed": "Power profile changed.",
|
||||
"profile-name": "{profile}"
|
||||
},
|
||||
"recording": {
|
||||
"failed-general": "Recorder exited with an error",
|
||||
"failed-gpu": "gpu-screen-recorder exited unexpectedly",
|
||||
"failed-start": "Failed to start recording",
|
||||
"failed-general": "Recorder exited with an error.",
|
||||
"failed-gpu": "gpu-screen-recorder exited unexpectedly.",
|
||||
"failed-start": "Failed to start recording.",
|
||||
"no-portals": "Desktop portals not running",
|
||||
"no-portals-desc": "Start xdg-desktop-portal and a compositor portal (wlr/hyprland/gnome/kde).",
|
||||
"not-installed": "gpu-screen-recorder not installed",
|
||||
"not-installed-desc": "Please install gpu-screen-recorder to use screen recording features.",
|
||||
"saved": "Recording saved",
|
||||
"started": "Recording started",
|
||||
"saved": "Recording saved.",
|
||||
"started": "Recording started.",
|
||||
"stopping": "Stopping recording…"
|
||||
},
|
||||
"theming-processor-failed": {
|
||||
"desc-generic": "Encountered an error while processing templates",
|
||||
"desc-generic": "Encountered an error while processing templates.",
|
||||
"title-matugen": "Matugen templating processing failed",
|
||||
"title-predefined": "Predefined color cheme processing failed"
|
||||
"title-predefined": "Predefined color scheme processing failed"
|
||||
},
|
||||
"vpn": {
|
||||
"connected": "Connected to '{name}'",
|
||||
"disconnected": "Disconnected from '{name}'"
|
||||
"connected": "Connected to '{name}'.",
|
||||
"disconnected": "Disconnected from '{name}'."
|
||||
},
|
||||
"wallpaper-colors": {
|
||||
"disabled": "Wallpaper colors disabled",
|
||||
"enabled": "Wallpaper colors enabled",
|
||||
"label": "Wallpaper colors generation",
|
||||
"not-installed": "Matugen not installed — required for wallpaper color extraction"
|
||||
"disabled": "Wallpaper colors disabled.",
|
||||
"enabled": "Wallpaper colors enabled.",
|
||||
"label": "Wallpaper colors",
|
||||
"not-installed": "Matugen not installed — required for wallpaper color extraction."
|
||||
},
|
||||
"wifi": {
|
||||
"connected": "Connected to '{ssid}'",
|
||||
"connection-failed": "Connection failed",
|
||||
"connection-timeout": "Connection timeout",
|
||||
"disabled": "Disabled",
|
||||
"disconnected": "Disconnected from '{ssid}'",
|
||||
"enabled": "Enabled",
|
||||
"incorrect-password": "Incorrect password",
|
||||
"network-not-found": "Network not found"
|
||||
"connected": "Connected to '{ssid}'.",
|
||||
"connection-failed": "Connection failed.",
|
||||
"connection-timeout": "Connection timeout.",
|
||||
"disabled": "Disabled.",
|
||||
"disconnected": "Disconnected from '{ssid}'.",
|
||||
"enabled": "Enabled.",
|
||||
"incorrect-password": "Incorrect password.",
|
||||
"network-not-found": "Network not found."
|
||||
}
|
||||
},
|
||||
"tooltips": {
|
||||
@@ -2797,6 +2857,7 @@
|
||||
"close": "Close",
|
||||
"collapse": "Collapse sidebar",
|
||||
"connect-disconnect-devices": "Bluetooth device",
|
||||
"copy-address": "Copy address",
|
||||
"delete-notification": "Delete notification",
|
||||
"disable-keep-awake": "Keep Awake",
|
||||
"do-not-disturb-disabled": "Do Not Disturb",
|
||||
@@ -2815,10 +2876,12 @@
|
||||
"list-view": "List view",
|
||||
"manage-vpn": "VPN connections",
|
||||
"manage-wifi": "Wi-Fi",
|
||||
"max-widgets-reached": "Maximum widgets reached",
|
||||
"microphone-volume-at": "Microphone volume: {volume}%",
|
||||
"move-to-center-section": "Center section",
|
||||
"move-to-left-section": "Left section",
|
||||
"move-to-right-section": "Right section",
|
||||
"move-to-section": "Move to {section}",
|
||||
"mute": "Mute",
|
||||
"next-media": "Next track",
|
||||
"next-month": "Next month",
|
||||
@@ -2828,6 +2891,7 @@
|
||||
"night-light-not-installed": "Night Light (not available)",
|
||||
"noctalia-performance-disabled": "Noctalia Performance Mode",
|
||||
"noctalia-performance-enabled": "Noctalia Performance Mode",
|
||||
"open-annotation-tool": "Open with annotation tool",
|
||||
"open-control-center": "Control center",
|
||||
"open-notification-history-disable-dnd": "Notification history",
|
||||
"open-notification-history-enable-dnd": "Notification history",
|
||||
@@ -2844,7 +2908,6 @@
|
||||
"refresh-devices": "Refresh devices",
|
||||
"refresh-wallhaven": "Refresh Wallhaven results",
|
||||
"refresh-wallpaper-list": "Refresh wallpaper list",
|
||||
"copy-address": "Copy address",
|
||||
"remove-widget": "Remove widget",
|
||||
"screen-recorder-not-installed": "Screen recorder (not installed)",
|
||||
"search": "Search",
|
||||
@@ -2876,6 +2939,7 @@
|
||||
"apikey": {
|
||||
"help": "An API key is required to access NSFW content.",
|
||||
"label": "API Key",
|
||||
"managed-by-env": "Managed via NOCTALIA_WALLHAVEN_API_KEY environment variable.",
|
||||
"placeholder": "Enter your Wallhaven API Key"
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2913,6 +2977,9 @@
|
||||
}
|
||||
},
|
||||
"search": "Search",
|
||||
"solid-color": {
|
||||
"tooltip": "Solid color background"
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "Date added",
|
||||
"favorites": "Favorites",
|
||||
@@ -2961,6 +3028,11 @@
|
||||
"thunderstorm": "Thunderstorm",
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "Select a file"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "Apply",
|
||||
@@ -3045,11 +3117,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "Action required",
|
||||
"available-interfaces": "Available interfaces",
|
||||
"available-networks": "Available networks",
|
||||
"connect": "Connect",
|
||||
"connected": "Connected",
|
||||
"disabled": "Wi‑Fi is disabled",
|
||||
"disconnect": "Disconnect",
|
||||
"disconnected": "Disconnected",
|
||||
"disconnecting": "Disconnecting…",
|
||||
"dns": "DNS",
|
||||
"enable-message": "Enable Wi‑Fi to see available networks.",
|
||||
@@ -3060,12 +3134,15 @@
|
||||
"frequency": "Frequency",
|
||||
"gateway": "Gateway",
|
||||
"info": "Info",
|
||||
"interface": "Network interface",
|
||||
"internet": "Internet",
|
||||
"internet-connected": "Internet connected",
|
||||
"internet-limited": "No internet",
|
||||
"internet-status": "Internet status",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "Known networks",
|
||||
"link-speed": "Link speed",
|
||||
"no-ethernet-devices": "No Ethernet devices detected",
|
||||
"no-networks": "No Wi‑Fi networks found",
|
||||
"password": "Password",
|
||||
"saved": "Saved",
|
||||
|
||||
+132
-40
@@ -142,12 +142,20 @@
|
||||
"description": "Si el texto de salida coincide con este valor, el botón se colapsará.",
|
||||
"label": "Condición de colapso"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "Aplicar colores del tema al icono y al texto.",
|
||||
"label": "Seleccionar color"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "Ingresa un comando para ejecutar a intervalos regulares. La primera línea de su salida se mostrará como texto.",
|
||||
"label": "Mostrar salida de comando",
|
||||
"stream-description": "Introduce un comando para ejecutar continuamente."
|
||||
},
|
||||
"dynamic-text": "Texto dinámico",
|
||||
"enable-colorization": {
|
||||
"description": "Habilitar la coloración para el icono y el texto del botón personalizado, aplicando los colores del tema.",
|
||||
"label": "Habilitar coloración"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "Siempre expandido",
|
||||
"description": "Controla la visibilidad del widget cuando el comando no tiene salida.",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "Elige cómo te gustaría que apareciera este valor.",
|
||||
"label": "Modo de visualización"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "Mostrar el icono de la distribución del teclado.",
|
||||
"label": "Mostrar icono"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "Cuando está habilitado, esto aplica el color primario para dar énfasis.",
|
||||
"label": "Usar color primario"
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,6 +345,10 @@
|
||||
"description": "Mostrar las lecturas de temperatura de la GPU si están disponibles.",
|
||||
"label": "Temperatura de la GPU"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "Mostrar promedio de carga del sistema.",
|
||||
"label": "Promedio de carga"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "Mostrar el uso de memoria como porcentaje en lugar de valores absolutos.",
|
||||
"label": "Memoria como porcentaje"
|
||||
@@ -481,6 +503,7 @@
|
||||
"device-address": "Dirección del dispositivo",
|
||||
"disabled": "Bluetooth está desactivado",
|
||||
"disconnect": "Desconectar",
|
||||
"disconnecting": "Desconectando...",
|
||||
"discoverable": "Visible",
|
||||
"enable-message": "Activa Bluetooth para ver los dispositivos disponibles.",
|
||||
"info": "Información",
|
||||
@@ -494,6 +517,14 @@
|
||||
"refresh-devices": "Actualizar dispositivos",
|
||||
"scanning": "Buscando dispositivos...",
|
||||
"signal": "Señal",
|
||||
"signal-text": {
|
||||
"excellent": "Señal: Excelente",
|
||||
"fair": "Señal: Regular",
|
||||
"good": "Señal: Buena",
|
||||
"poor": "Señal: Débil",
|
||||
"unknown": "Señal: Desconocida",
|
||||
"very-poor": "Señal: Muy mala"
|
||||
},
|
||||
"title": "Bluetooth",
|
||||
"trusted": "Confiable",
|
||||
"unpair": "Desemparejar"
|
||||
@@ -529,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "Únete a nuestro Discord",
|
||||
"dismiss": "Ok"
|
||||
"dismiss": "Ok",
|
||||
"feedback": "Dar retroalimentación"
|
||||
},
|
||||
"empty": "Las notas de la versión aún no están disponibles.",
|
||||
"highlight-title": "Cambios destacados",
|
||||
@@ -573,6 +605,7 @@
|
||||
"enable-bluetooth": "Activar Bluetooth",
|
||||
"enable-dnd": "Activar No molestar",
|
||||
"enable-wifi": "Activar Wi-Fi",
|
||||
"launcher-settings": "Ajustes del lanzador",
|
||||
"lower-to-bottom": "Bajar hasta el fondo",
|
||||
"next": "Siguiente",
|
||||
"open-calendar": "Abrir calendario",
|
||||
@@ -631,7 +664,35 @@
|
||||
"webbrowser": "Navegador web"
|
||||
},
|
||||
"delete": "Borrar",
|
||||
"no-results": "No se encontraron resultados.",
|
||||
"pin": "Anclar",
|
||||
"providers": {
|
||||
"applications": "Aplicaciones",
|
||||
"calculator": "Calculadora",
|
||||
"calculator-deprecated": "El comando >calc está obsoleto y será eliminado pronto. Por favor, escribe expresiones matemáticas directamente en la búsqueda en su lugar.",
|
||||
"calculator-description": "Calculadora — evalúa expresiones matemáticas",
|
||||
"calculator-enter-expression": "Ingresa una expresión matemática",
|
||||
"calculator-error": "Error",
|
||||
"calculator-name": "Calculadora",
|
||||
"clipboard": "Historial del portapapeles",
|
||||
"clipboard-clear-description": "Limpiar todo el historial del portapapeles",
|
||||
"clipboard-clear-description-full": "Eliminar todos los elementos del historial del portapapeles",
|
||||
"clipboard-clear-history": "Limpiar historial del portapapeles",
|
||||
"clipboard-delete": "Borrar entrada del portapapeles",
|
||||
"clipboard-history-disabled": "Historial del portapapeles desactivado",
|
||||
"clipboard-history-disabled-description": "Activa el historial del portapapeles en la configuración o instala cliphist",
|
||||
"clipboard-loading": "Cargando historial del portapapeles...",
|
||||
"clipboard-loading-description": "Por favor espera",
|
||||
"clipboard-search-description": "Buscar en el historial del portapapeles",
|
||||
"command": "Comando",
|
||||
"command-description": "Ejecutar comandos de shell",
|
||||
"command-name": "Comando",
|
||||
"emoji": "Selector de emojis",
|
||||
"emoji-loading": "Cargando emojis...",
|
||||
"emoji-loading-description": "Por favor espera",
|
||||
"emoji-no-recent": "Aún no hay emojis recientes.",
|
||||
"emoji-search-description": "Buscar y copiar emojis"
|
||||
},
|
||||
"unpin": "Desanclar"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -752,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "Salida del sistema + entrada del micrófono",
|
||||
"microphone-input": "Entrada del micrófono",
|
||||
"none": "No audio",
|
||||
"system-output": "Salida del sistema"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -774,6 +836,10 @@
|
||||
"hover": "Desplazar al Pasar",
|
||||
"never": "Nunca Desplazar"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "Cuadrícula",
|
||||
"single-row": "Fila única"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "Panel adjunto a la barra",
|
||||
"centered": "Panel centrado",
|
||||
@@ -823,31 +889,6 @@
|
||||
"select": "Seleccionar",
|
||||
"test": "Probar"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "Aplicaciones",
|
||||
"calculator": "Calculadora",
|
||||
"calculator-description": "Calculadora — evalúa expresiones matemáticas",
|
||||
"calculator-enter-expression": "Ingresa una expresión matemática",
|
||||
"calculator-error": "Error",
|
||||
"calculator-name": "Calculadora",
|
||||
"clipboard": "Historial del portapapeles",
|
||||
"clipboard-clear-description": "Limpiar todo el historial del portapapeles",
|
||||
"clipboard-clear-description-full": "Eliminar todos los elementos del historial del portapapeles",
|
||||
"clipboard-clear-history": "Limpiar historial del portapapeles",
|
||||
"clipboard-delete": "Borrar entrada del portapapeles",
|
||||
"clipboard-history-disabled": "Historial del portapapeles desactivado",
|
||||
"clipboard-history-disabled-description": "Activa el historial del portapapeles en la configuración o instala cliphist",
|
||||
"clipboard-loading": "Cargando historial del portapapeles...",
|
||||
"clipboard-loading-description": "Por favor espera",
|
||||
"clipboard-search-description": "Buscar en el historial del portapapeles",
|
||||
"command": "Comando",
|
||||
"command-description": "Ejecutar comandos de shell",
|
||||
"command-name": "Comando",
|
||||
"emoji": "Selector de emojis",
|
||||
"emoji-loading": "Cargando emojis...",
|
||||
"emoji-loading-description": "Por favor espera",
|
||||
"emoji-search-description": "Buscar y copiar emojis"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1125,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "Deriva colores que coinciden estrechamente con la imagen subyacente.",
|
||||
"scheme-expressive": "Paleta vibrante con saturación juguetona.",
|
||||
"scheme-fidelity": "Paleta de alta fidelidad que preserva los tonos originales",
|
||||
"scheme-fruit-salad": "Mezcla colorida de acentos brillantes y contrastantes.",
|
||||
"scheme-monochrome": "Paleta minimalista construida en torno a un solo tono.",
|
||||
"scheme-neutral": "Paleta apagada con tonos suaves y relajantes.",
|
||||
"scheme-rainbow": "Paleta diversa que abarca todo el espectro.",
|
||||
"scheme-tonal-spot": "Paleta equilibrada con acentos definidos."
|
||||
},
|
||||
"description": "Elige el método de generación de esquemas de color que Matugen usará para crear colores a partir de tu fondo de pantalla.",
|
||||
"label": "Tipo de esquema Matugen"
|
||||
},
|
||||
"section": {
|
||||
@@ -1268,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "Escribir {filepath} y recargar"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "Escribe {filepath}; copia en el archivo chrome/userChrome.css de tu perfil de Zen."
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1786,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "Comando para ejecutar al hacer clic en el botón de anotar en el historial del portapapeles. La imagen se enviará a este comando.",
|
||||
"label": "Herramienta de anotación",
|
||||
"placeholder": "gradia, satty -f -"
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": "Muestra una vista previa del contenido del portapapeles al usar el comando >clip.",
|
||||
"label": "Activar vista previa del portapapeles"
|
||||
@@ -1826,6 +1866,10 @@
|
||||
"description": "Mostrar pestañas de categorías para filtrar aplicaciones.",
|
||||
"label": "Mostrar categorías"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "Mostrar un fondo rectangular redondeado detrás de los iconos.",
|
||||
"label": "Mostrar fondo del icono"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "Cuando está activado, las aplicaciones más utilizadas aparecen primero en la lista.",
|
||||
"label": "Ordenar por más usados"
|
||||
@@ -1940,7 +1984,11 @@
|
||||
"network": {
|
||||
"bluetooth": {
|
||||
"description": "Activar la gestión de Bluetooth.",
|
||||
"label": "Activar Bluetooth"
|
||||
"label": "Activar Bluetooth",
|
||||
"rssi-polling": {
|
||||
"description": "Muestrear periódicamente el RSSI de los dispositivos conectados a través de bluetoothctl. Puede no estar disponible para todos los dispositivos; utiliza recursos mínimos cuando está habilitado.",
|
||||
"label": "Sondeo de señal Bluetooth"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"description": "Gestiona las conexiones Wi-Fi y Bluetooth."
|
||||
@@ -2171,6 +2219,11 @@
|
||||
"no-plugins-description": "Comprueba las fuentes de tu plugin o actualiza la lista.",
|
||||
"no-plugins-label": "No hay plugins disponibles."
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "Este plugin ya está instalado.",
|
||||
"custom-version-exists": "Ya hay instalada una versión personalizada de \"{source}\"",
|
||||
"official-version-exists": "La versión oficial de este plugin ya está instalada."
|
||||
},
|
||||
"filter": {
|
||||
"all": "Todo",
|
||||
"downloaded": "Descargado",
|
||||
@@ -2191,6 +2244,7 @@
|
||||
"no-plugins-label": "No hay plugins instalados."
|
||||
},
|
||||
"installing": "Instalando {plugin}...",
|
||||
"open-plugins-tab": "Abrir la configuración de los plugins",
|
||||
"plugin-settings-title": "Ajustes de {plugin}",
|
||||
"refresh": {
|
||||
"refreshing": "Actualizando la lista de plugins...",
|
||||
@@ -2201,6 +2255,10 @@
|
||||
},
|
||||
"settings-error-not-loaded": "Plugin no cargado",
|
||||
"settings-saved": "Ajustes del plugin guardados",
|
||||
"source": {
|
||||
"custom": "Fuente personalizada",
|
||||
"official": "Oficial"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "Añadir repositorio personalizado",
|
||||
"add-dialog": {
|
||||
@@ -2232,8 +2290,10 @@
|
||||
"update-all": "Actualizar todo ({count})",
|
||||
"update-all-success": "Todos los plugins se actualizaron correctamente.",
|
||||
"update-available": "{count} actualización(es) de plugin(s) disponible(s)",
|
||||
"update-available_plural": "{count} actualizaciones de plugins disponibles",
|
||||
"update-error": "Error al actualizar el plugin: {plugin}: {error}",
|
||||
"update-incompatible": "Requiere Noctalia v{version} o superior",
|
||||
"update-pending": "v{actual} → v{nuevo} (requiere Noctalia v{requerida})",
|
||||
"update-success": "{plugin} actualizado a la versión {version}",
|
||||
"update-version": "v{actual} → v{nuevo}",
|
||||
"updating": "Actualizando..."
|
||||
@@ -2339,6 +2399,10 @@
|
||||
"label": "General"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "Elige cómo se muestran los botones del menú de sesión.",
|
||||
"label": "Diseño de botones grandes"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "Mostrar el menú de sesión con botones grandes en un diseño de cuadrícula.",
|
||||
"label": "Estilo de botones grandes"
|
||||
@@ -2395,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "Colores de resaltado"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "Promedio de carga"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "Uso de memoria"
|
||||
},
|
||||
@@ -2438,6 +2505,10 @@
|
||||
"label": "Velocidad de animación",
|
||||
"reset": "Restablecer la velocidad de la animación"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "Muestra un contorno alrededor de las áreas de contenido.",
|
||||
"label": "Contorno del contenedor"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "Ajusta la redondez de las esquinas de las secciones principales del diseño, como barras laterales, tarjetas y paneles de contenido.",
|
||||
"label": "Radio del contenedor",
|
||||
@@ -2564,8 +2635,8 @@
|
||||
"tooltip": "Carpeta de fondos de pantalla"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "Oculta los nombres de archivo del fondo de pantalla en el selector.",
|
||||
"label": "Ocultar nombres de archivo"
|
||||
"tooltip-hide": "Ocultar nombres de archivo",
|
||||
"tooltip-show": "Mostrar nombres de archivo"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "Establece una carpeta de fondos de pantalla diferente para cada monitor.",
|
||||
@@ -2648,6 +2719,7 @@
|
||||
"download": "Descargar",
|
||||
"download-speed": "Velocidad de descarga",
|
||||
"gpu-temp": "Temperatura de la GPU",
|
||||
"load-average": "Promedio de carga",
|
||||
"memory": "Memoria",
|
||||
"title": "Monitor del sistema",
|
||||
"upload": "Subir",
|
||||
@@ -2664,6 +2736,7 @@
|
||||
"low-desc": "La batería está al {percent}%. Por favor, conecta el cargador."
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Dirección copiada al portapapeles",
|
||||
"confirm-code": "Confirma el código {value} en el otro dispositivo.",
|
||||
"connect-failed": "Error al conectar con el dispositivo",
|
||||
"disabled": "Desactivado",
|
||||
@@ -2706,7 +2779,8 @@
|
||||
"enabled": "Activado"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "Distribución de teclado cambiada a {layout}"
|
||||
"changed": "Distribución de teclado cambiada a {layout}",
|
||||
"title": "Teclado"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "Página de Ko-fi abierta en tu navegador"
|
||||
@@ -2780,6 +2854,7 @@
|
||||
"close": "Cerrar",
|
||||
"collapse": "Colapsar barra lateral",
|
||||
"connect-disconnect-devices": "Dispositivo Bluetooth",
|
||||
"copy-address": "Copiar dirección",
|
||||
"delete-notification": "Eliminar notificación",
|
||||
"disable-keep-awake": "Mantener despierto",
|
||||
"do-not-disturb-disabled": "No molestar",
|
||||
@@ -2798,10 +2873,12 @@
|
||||
"list-view": "Vista de lista",
|
||||
"manage-vpn": "Conexiones VPN",
|
||||
"manage-wifi": "Wi-Fi",
|
||||
"max-widgets-reached": "Se ha alcanzado el número máximo de widgets.",
|
||||
"microphone-volume-at": "Volumen del micrófono: {volume}%",
|
||||
"move-to-center-section": "Sección central",
|
||||
"move-to-left-section": "Sección izquierda",
|
||||
"move-to-right-section": "Sección derecha",
|
||||
"move-to-section": "Mover a {section}",
|
||||
"mute": "Silenciar",
|
||||
"next-media": "Siguiente pista",
|
||||
"next-month": "Mes siguiente",
|
||||
@@ -2811,6 +2888,7 @@
|
||||
"night-light-not-installed": "Luz nocturna (no disponible)",
|
||||
"noctalia-performance-disabled": "Modo de rendimiento Noctalia",
|
||||
"noctalia-performance-enabled": "Modo de rendimiento Noctalia",
|
||||
"open-annotation-tool": "Abrir con herramienta de anotación",
|
||||
"open-control-center": "Centro de control",
|
||||
"open-notification-history-disable-dnd": "Historial de notificaciones",
|
||||
"open-notification-history-enable-dnd": "Historial de notificaciones",
|
||||
@@ -2858,6 +2936,7 @@
|
||||
"apikey": {
|
||||
"help": "Se requiere una clave API para acceder a contenido NSFW.",
|
||||
"label": "Clave API",
|
||||
"managed-by-env": "Gestionado a través de la variable de entorno NOCTALIA_WALLHAVEN_API_KEY.",
|
||||
"placeholder": "Introduce tu clave API de Wallhaven"
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2895,6 +2974,9 @@
|
||||
}
|
||||
},
|
||||
"search": "Buscar:",
|
||||
"solid-color": {
|
||||
"tooltip": "Fondo de color sólido"
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "Fecha de adición",
|
||||
"favorites": "Favoritos",
|
||||
@@ -2943,6 +3025,11 @@
|
||||
"thunderstorm": "Tormenta",
|
||||
"unknown": "Desconocido"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "Seleccionar un archivo"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "Aplicar",
|
||||
@@ -3027,11 +3114,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "Acción requerida",
|
||||
"available-interfaces": "Interfaces disponibles",
|
||||
"available-networks": "Redes disponibles",
|
||||
"connect": "Conectar",
|
||||
"connected": "Conectado",
|
||||
"disabled": "Wi-Fi está desactivado",
|
||||
"disconnect": "Desconectar",
|
||||
"disconnected": "Desconectado",
|
||||
"disconnecting": "Desconectando...",
|
||||
"dns": "DNS",
|
||||
"enable-message": "Activa Wi-Fi para ver las redes disponibles.",
|
||||
@@ -3042,12 +3131,15 @@
|
||||
"frequency": "Frecuencia",
|
||||
"gateway": "Puerta de enlace",
|
||||
"info": "Información",
|
||||
"interface": "Interfaz de red",
|
||||
"internet": "Internet",
|
||||
"internet-connected": "Conectado a internet",
|
||||
"internet-limited": "Sin internet",
|
||||
"internet-status": "Estado de internet",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "Redes conocidas",
|
||||
"link-speed": "Velocidad de enlace",
|
||||
"no-ethernet-devices": "No se detectaron dispositivos Ethernet.",
|
||||
"no-networks": "No se encontraron redes",
|
||||
"password": "Contraseña",
|
||||
"saved": "Guardado",
|
||||
|
||||
+132
-40
@@ -142,12 +142,20 @@
|
||||
"description": "Si le texte de sortie correspond à cette valeur, le bouton se repliera.",
|
||||
"label": "Condition d’effondrement"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "Appliquer les couleurs du thème à l'icône et au texte.",
|
||||
"label": "Sélectionner la couleur"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "Entrez une commande à exécuter à intervalle régulier. La première ligne de sa sortie sera affichée sous forme de texte.",
|
||||
"label": "Afficher la sortie de la commande",
|
||||
"stream-description": "Entrez une commande à exécuter en continu."
|
||||
},
|
||||
"dynamic-text": "Texte dynamique",
|
||||
"enable-colorization": {
|
||||
"description": "Activer la colorisation pour l'icône et le texte du bouton personnalisé, en appliquant les couleurs du thème.",
|
||||
"label": "Activer la colorisation"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "Toujours étendu",
|
||||
"description": "Contrôle la visibilité du widget quand la commande n'a pas de sortie.",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "Choisissez comment vous souhaitez que cette valeur apparaisse.",
|
||||
"label": "Mode d'affichage"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "Afficher l'icône de disposition du clavier.",
|
||||
"label": "Afficher l'icône"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "Quand cette option est activée, elle applique la couleur principale pour mettre en évidence.",
|
||||
"label": "Utiliser une couleur primaire."
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,6 +345,10 @@
|
||||
"description": "Afficher les relevés de température du GPU, si disponibles.",
|
||||
"label": "Température du GPU"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "Afficher la charge moyenne du système.",
|
||||
"label": "Charge moyenne"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "Afficher l'utilisation de la mémoire en pourcentage au lieu de valeurs absolues.",
|
||||
"label": "Mémoire en pourcentage"
|
||||
@@ -481,6 +503,7 @@
|
||||
"device-address": "Adresse de l’appareil",
|
||||
"disabled": "Le Bluetooth est désactivé",
|
||||
"disconnect": "Déconnecter",
|
||||
"disconnecting": "Déconnexion...",
|
||||
"discoverable": "Détectable",
|
||||
"enable-message": "Activez le Bluetooth pour voir les appareils disponibles.",
|
||||
"info": "Infos",
|
||||
@@ -494,6 +517,14 @@
|
||||
"refresh-devices": "Actualiser les appareils",
|
||||
"scanning": "Recherche d'appareils en cours...",
|
||||
"signal": "Signal",
|
||||
"signal-text": {
|
||||
"excellent": "Signal : Excellent",
|
||||
"fair": "Signal : Moyen",
|
||||
"good": "Signal : Bon",
|
||||
"poor": "Signal : Faible",
|
||||
"unknown": "Signal : Inconnu",
|
||||
"very-poor": "Signal : Très faible"
|
||||
},
|
||||
"title": "Bluetooth",
|
||||
"trusted": "De confiance",
|
||||
"unpair": "Désappairer"
|
||||
@@ -529,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "Rejoindre notre Discord",
|
||||
"dismiss": "Ok"
|
||||
"dismiss": "Ok",
|
||||
"feedback": "Donner un avis."
|
||||
},
|
||||
"empty": "Les notes de version ne sont pas encore disponibles.",
|
||||
"highlight-title": "Points importants",
|
||||
@@ -573,6 +605,7 @@
|
||||
"enable-bluetooth": "Activer le Bluetooth",
|
||||
"enable-dnd": "Activer le mode Ne pas déranger",
|
||||
"enable-wifi": "Activer le Wi-Fi",
|
||||
"launcher-settings": "Paramètres du lanceur",
|
||||
"lower-to-bottom": "Abaisser au plus bas / Descendre au plus bas",
|
||||
"next": "Suivant",
|
||||
"open-calendar": "Ouvrir le calendrier",
|
||||
@@ -631,7 +664,35 @@
|
||||
"webbrowser": "Navigateur web"
|
||||
},
|
||||
"delete": "Supprimer",
|
||||
"no-results": "Aucun résultat trouvé.",
|
||||
"pin": "Épingler",
|
||||
"providers": {
|
||||
"applications": "Applications",
|
||||
"calculator": "Calculatrice",
|
||||
"calculator-deprecated": "La commande >calc est obsolète et sera bientôt supprimée. Veuillez saisir les expressions mathématiques directement dans la recherche à la place.",
|
||||
"calculator-description": "Calculatrice — évaluez des expressions mathématiques",
|
||||
"calculator-enter-expression": "Entrez une expression mathématique",
|
||||
"calculator-error": "Erreur",
|
||||
"calculator-name": "Calculatrice",
|
||||
"clipboard": "Historique du presse-papiers",
|
||||
"clipboard-clear-description": "Effacer tout l'historique du presse-papiers",
|
||||
"clipboard-clear-description-full": "Supprimer tous les éléments de l'historique du presse-papiers",
|
||||
"clipboard-clear-history": "Effacer l'historique du presse-papiers",
|
||||
"clipboard-delete": "Supprimer l'entrée du presse-papiers",
|
||||
"clipboard-history-disabled": "Historique du presse-papiers désactivé",
|
||||
"clipboard-history-disabled-description": "Activez l'historique du presse-papiers dans les paramètres ou installez cliphist",
|
||||
"clipboard-loading": "Chargement de l'historique du presse-papiers...",
|
||||
"clipboard-loading-description": "Veuillez patienter",
|
||||
"clipboard-search-description": "Rechercher dans l'historique du presse-papiers",
|
||||
"command": "Commande",
|
||||
"command-description": "Exécuter des commandes shell",
|
||||
"command-name": "Commande",
|
||||
"emoji": "Sélecteur d'émojis",
|
||||
"emoji-loading": "Chargement des émojis...",
|
||||
"emoji-loading-description": "Veuillez patienter",
|
||||
"emoji-no-recent": "Aucun emoji récent pour le moment.",
|
||||
"emoji-search-description": "Rechercher et copier des émojis"
|
||||
},
|
||||
"unpin": "Détacher"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -752,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "Sortie système + entrée microphone",
|
||||
"microphone-input": "Entrée microphone",
|
||||
"none": "Pas d'audio",
|
||||
"system-output": "Sortie système"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -774,6 +836,10 @@
|
||||
"hover": "Défiler au Survol",
|
||||
"never": "Ne Jamais Défiler"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "Grille",
|
||||
"single-row": "Une seule rangée"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "Panneau attaché à la barre",
|
||||
"centered": "Panneau centré",
|
||||
@@ -823,31 +889,6 @@
|
||||
"select": "Sélectionner",
|
||||
"test": "Tester"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "Applications",
|
||||
"calculator": "Calculatrice",
|
||||
"calculator-description": "Calculatrice — évaluez des expressions mathématiques",
|
||||
"calculator-enter-expression": "Entrez une expression mathématique",
|
||||
"calculator-error": "Erreur",
|
||||
"calculator-name": "Calculatrice",
|
||||
"clipboard": "Historique du presse-papiers",
|
||||
"clipboard-clear-description": "Effacer tout l'historique du presse-papiers",
|
||||
"clipboard-clear-description-full": "Supprimer tous les éléments de l'historique du presse-papiers",
|
||||
"clipboard-clear-history": "Effacer l'historique du presse-papiers",
|
||||
"clipboard-delete": "Supprimer l'entrée du presse-papiers",
|
||||
"clipboard-history-disabled": "Historique du presse-papiers désactivé",
|
||||
"clipboard-history-disabled-description": "Activez l'historique du presse-papiers dans les paramètres ou installez cliphist",
|
||||
"clipboard-loading": "Chargement de l'historique du presse-papiers...",
|
||||
"clipboard-loading-description": "Veuillez patienter",
|
||||
"clipboard-search-description": "Rechercher dans l'historique du presse-papiers",
|
||||
"command": "Commande",
|
||||
"command-description": "Exécuter des commandes shell",
|
||||
"command-name": "Commande",
|
||||
"emoji": "Sélecteur d'émojis",
|
||||
"emoji-loading": "Chargement des émojis...",
|
||||
"emoji-loading-description": "Veuillez patienter",
|
||||
"emoji-search-description": "Rechercher et copier des émojis"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1125,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "Dérive des couleurs qui correspondent étroitement à l'image sous-jacente.",
|
||||
"scheme-expressive": "Palette vibrante avec une saturation ludique.",
|
||||
"scheme-fidelity": "Palette haute fidélité qui préserve les teintes sources.",
|
||||
"scheme-fruit-salad": "Mélange coloré d'accents vifs et contrastés.",
|
||||
"scheme-monochrome": "Palette minimaliste construite autour d'une seule teinte.",
|
||||
"scheme-neutral": "Palette de couleurs atténuées aux tons doux et apaisants.",
|
||||
"scheme-rainbow": "Palette diversifiée couvrant tout le spectre.",
|
||||
"scheme-tonal-spot": "Palette équilibrée avec des accents ciblés."
|
||||
},
|
||||
"description": "Choisissez la méthode de génération de palette de couleurs que Matugen utilisera pour créer des couleurs à partir de votre fond d'écran.",
|
||||
"label": "Type de schéma Matugen"
|
||||
},
|
||||
"section": {
|
||||
@@ -1268,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "Écrire {filepath} — le thème Comfy doit être installé et activé manuellement"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "Écrivez dans {filepath} ; copiez dans le fichier chrome/userChrome.css de votre profil Zen."
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1786,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "Commande à exécuter lorsque l'on clique sur le bouton d'annotation dans l'historique du presse-papiers. L'image sera envoyée à cette commande.",
|
||||
"label": "Outil d'annotation",
|
||||
"placeholder": "gradia, satty -f -"
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": "Afficher un aperçu du contenu du presse-papiers lors de l'utilisation de la commande >clip.",
|
||||
"label": "Activer l'aperçu du presse-papiers"
|
||||
@@ -1826,6 +1866,10 @@
|
||||
"description": "Afficher les onglets de catégories pour filtrer les applications.",
|
||||
"label": "Afficher les catégories"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "Afficher un arrière-plan rectangulaire arrondi derrière les icônes.",
|
||||
"label": "Afficher l'arrière-plan de l'icône"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "Lorsque cette option est activée, les applications fréquemment lancées apparaissent en premier dans la liste.",
|
||||
"label": "Trier par les plus utilisés"
|
||||
@@ -1940,7 +1984,11 @@
|
||||
"network": {
|
||||
"bluetooth": {
|
||||
"description": "Activer la gestion Bluetooth.",
|
||||
"label": "Activer le Bluetooth"
|
||||
"label": "Activer le Bluetooth",
|
||||
"rssi-polling": {
|
||||
"description": "Échantillonner périodiquement le RSSI des appareils connectés via bluetoothctl. Peut ne pas être disponible pour tous les appareils ; utilise un minimum de ressources lorsqu'il est activé.",
|
||||
"label": "Interrogation du signal Bluetooth"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"description": "Gérez les connexions Wi-Fi et Bluetooth."
|
||||
@@ -2171,6 +2219,11 @@
|
||||
"no-plugins-description": "Vérifiez les sources de vos plugins ou actualisez la liste.",
|
||||
"no-plugins-label": "Aucun plugin disponible."
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "Ce plugin est déjà installé.",
|
||||
"custom-version-exists": "Une version personnalisée de \"{source}\" est déjà installée.",
|
||||
"official-version-exists": "La version officielle de cette extension est déjà installée."
|
||||
},
|
||||
"filter": {
|
||||
"all": "Tout",
|
||||
"downloaded": "Téléchargé",
|
||||
@@ -2191,6 +2244,7 @@
|
||||
"no-plugins-label": "Aucun plugin installé"
|
||||
},
|
||||
"installing": "Installation de {plugin}...",
|
||||
"open-plugins-tab": "Ouvrir les paramètres des plugins",
|
||||
"plugin-settings-title": "Paramètres de {plugin}",
|
||||
"refresh": {
|
||||
"refreshing": "Actualisation de la liste des plugins...",
|
||||
@@ -2201,6 +2255,10 @@
|
||||
},
|
||||
"settings-error-not-loaded": "Plugin non chargé",
|
||||
"settings-saved": "Paramètres du plugin enregistrés",
|
||||
"source": {
|
||||
"custom": "Source personnalisée",
|
||||
"official": "Officiel/Officielle"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "Ajouter un dépôt personnalisé",
|
||||
"add-dialog": {
|
||||
@@ -2232,8 +2290,10 @@
|
||||
"update-all": "Mettre à jour tout ({count})",
|
||||
"update-all-success": "Tous les plugins ont été mis à jour avec succès.",
|
||||
"update-available": "{count} mise(s) à jour de plugin(s) disponible(s)",
|
||||
"update-available_plural": "{count} mises à jour d'extensions disponibles",
|
||||
"update-error": "Échec de la mise à jour du plugin : {plugin} : {error}",
|
||||
"update-incompatible": "Nécessite Noctalia v{version} ou une version ultérieure.",
|
||||
"update-pending": "v{current} → v{new} (nécessite Noctalia v{required})",
|
||||
"update-success": "Mise à jour du plugin {plugin} vers la version {version}.",
|
||||
"update-version": "v{actuel} → v{nouveau}",
|
||||
"updating": "Mise à jour..."
|
||||
@@ -2339,6 +2399,10 @@
|
||||
"label": "Général"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "Choisissez comment les boutons du menu de session sont affichés.",
|
||||
"label": "Disposition des grands boutons"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "Afficher le menu de session avec de grands boutons dans une disposition en grille.",
|
||||
"label": "Style boutons larges"
|
||||
@@ -2395,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "Couleurs de surlignage"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "Charge moyenne"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "Utilisation mémoire"
|
||||
},
|
||||
@@ -2438,6 +2505,10 @@
|
||||
"label": "Vitesse d'animation",
|
||||
"reset": "Réinitialiser la vitesse de l'animation"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "Affiche un contour autour des zones de contenu.",
|
||||
"label": "Contour du conteneur"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "Ajuste de l'arrondi des coins des principales sections de la mise en page, telles que les barres latérales, les cartes et les panneaux de contenu.",
|
||||
"label": "Rayon du conteneur",
|
||||
@@ -2564,8 +2635,8 @@
|
||||
"tooltip": "Dossier des fonds d'écran"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "Masquer les noms de fichiers des fonds d'écran dans le sélecteur.",
|
||||
"label": "Masquer les noms de fichiers"
|
||||
"tooltip-hide": "Masquer les noms de fichiers",
|
||||
"tooltip-show": "Afficher les noms de fichiers"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "Définissez un dossier de fond d'écran différent pour chaque moniteur.",
|
||||
@@ -2648,6 +2719,7 @@
|
||||
"download": "Télécharger",
|
||||
"download-speed": "Vitesse de téléchargement",
|
||||
"gpu-temp": "Température du GPU",
|
||||
"load-average": "Charge moyenne",
|
||||
"memory": "Mémoire",
|
||||
"title": "Moniteur système",
|
||||
"upload": "Télécharger",
|
||||
@@ -2664,6 +2736,7 @@
|
||||
"low-desc": "La batterie est à {percent}%. Veuillez brancher le chargeur."
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Adresse copiée dans le presse-papiers",
|
||||
"confirm-code": "Confirmer le code {value} sur l'autre appareil.",
|
||||
"connect-failed": "Échec de la connexion à l’appareil",
|
||||
"disabled": "Désactivé",
|
||||
@@ -2706,7 +2779,8 @@
|
||||
"enabled": "Activé"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "Disposition du clavier changée vers {layout}"
|
||||
"changed": "Disposition du clavier changée vers {layout}",
|
||||
"title": "Clavier"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "Page Ko-fi ouverte dans votre navigateur"
|
||||
@@ -2780,6 +2854,7 @@
|
||||
"close": "Fermer",
|
||||
"collapse": "Réduire la barre latérale",
|
||||
"connect-disconnect-devices": "Appareil Bluetooth",
|
||||
"copy-address": "Copier l'adresse",
|
||||
"delete-notification": "Supprimer la notification",
|
||||
"disable-keep-awake": "Rester éveillé",
|
||||
"do-not-disturb-disabled": "Ne pas déranger",
|
||||
@@ -2798,10 +2873,12 @@
|
||||
"list-view": "Vue en liste",
|
||||
"manage-vpn": "Connexions VPN",
|
||||
"manage-wifi": "Wi-Fi",
|
||||
"max-widgets-reached": "Nombre maximal de widgets atteint.",
|
||||
"microphone-volume-at": "Volume du microphone : {volume}%",
|
||||
"move-to-center-section": "Section centrale",
|
||||
"move-to-left-section": "Section de gauche",
|
||||
"move-to-right-section": "Section de droite",
|
||||
"move-to-section": "Aller à {section}",
|
||||
"mute": "Muet / Couper le son",
|
||||
"next-media": "Piste suivante",
|
||||
"next-month": "Mois suivant",
|
||||
@@ -2811,6 +2888,7 @@
|
||||
"night-light-not-installed": "Éclairage nocturne (non disponible)",
|
||||
"noctalia-performance-disabled": "Mode performance Noctalia",
|
||||
"noctalia-performance-enabled": "Mode performance Noctalia",
|
||||
"open-annotation-tool": "Ouvrir avec l'outil d'annotation",
|
||||
"open-control-center": "Centre de contrôle",
|
||||
"open-notification-history-disable-dnd": "Historique des notifications",
|
||||
"open-notification-history-enable-dnd": "Historique des notifications",
|
||||
@@ -2858,6 +2936,7 @@
|
||||
"apikey": {
|
||||
"help": "Une clé API est requise pour accéder au contenu NSFW.",
|
||||
"label": "Clé API",
|
||||
"managed-by-env": "Géré via la variable d'environnement NOCTALIA_WALLHAVEN_API_KEY.",
|
||||
"placeholder": "Entrez votre clé API Wallhaven"
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2895,6 +2974,9 @@
|
||||
}
|
||||
},
|
||||
"search": "Rechercher :",
|
||||
"solid-color": {
|
||||
"tooltip": "Fond uni."
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "Date d'ajout",
|
||||
"favorites": "Favoris",
|
||||
@@ -2943,6 +3025,11 @@
|
||||
"thunderstorm": "Orage",
|
||||
"unknown": "Inconnu"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "Sélectionner un fichier"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "Appliquer",
|
||||
@@ -3027,11 +3114,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "Action requise",
|
||||
"available-interfaces": "Interfaces disponibles",
|
||||
"available-networks": "Réseaux disponibles",
|
||||
"connect": "Connecter",
|
||||
"connected": "Connecté",
|
||||
"disabled": "Le Wi-Fi est désactivé",
|
||||
"disconnect": "Déconnecter",
|
||||
"disconnected": "Déconnecté",
|
||||
"disconnecting": "Déconnexion en cours...",
|
||||
"dns": "DNS",
|
||||
"enable-message": "Activez le Wi-Fi pour voir les réseaux disponibles.",
|
||||
@@ -3042,12 +3131,15 @@
|
||||
"frequency": "Fréquence",
|
||||
"gateway": "Passerelle",
|
||||
"info": "Info",
|
||||
"interface": "Interface réseau",
|
||||
"internet": "Internet",
|
||||
"internet-connected": "Connecté à Internet",
|
||||
"internet-limited": "Pas d'internet",
|
||||
"internet-status": "État de la connexion Internet",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "Réseaux connus",
|
||||
"link-speed": "Vitesse de liaison",
|
||||
"no-ethernet-devices": "Aucun périphérique Ethernet détecté.",
|
||||
"no-networks": "Aucun réseau trouvé",
|
||||
"password": "Mot de passe",
|
||||
"saved": "Enregistré",
|
||||
|
||||
+132
-40
@@ -142,12 +142,20 @@
|
||||
"description": "Ha a kimeneti szöveg megegyezik ezzel az értékkel, a gomb összecsukódik.",
|
||||
"label": "Összecsukási feltétel"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "Témák színeinek alkalmazása az ikonra és a szövegre.",
|
||||
"label": "Szín kiválasztása"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "Adjon meg egy parancsot, amelyet rendszeres időközönként futtatni szeretne. A kimenetének első sora szövegként jelenik meg.",
|
||||
"label": "Parancs kimenetének megjelenítése",
|
||||
"stream-description": "Adjon meg egy parancsot, amelyet folyamatosan futtatni szeretne."
|
||||
},
|
||||
"dynamic-text": "Dinamikus szöveg",
|
||||
"enable-colorization": {
|
||||
"description": "Színezés engedélyezése az egyéni gomb ikonjához és szövegéhez, a téma színeinek alkalmazása.",
|
||||
"label": "Színezés engedélyezése"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "Mindig kibontva",
|
||||
"description": "Szabályozza a widget láthatóságát, ha a parancsnak nincs kimenete.",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "Válassza ki, hogyan jelenjen meg ez az érték.",
|
||||
"label": "Megjelenítési mód"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "Billentse a billentyűzetkiosztás ikont.",
|
||||
"label": "Ikon megjelenítése"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "Ha engedélyezve van, akkor a hangsúlyozáshoz az elsődleges színt használja.",
|
||||
"label": "Használj alapszínt."
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,6 +345,10 @@
|
||||
"description": "GPU hőmérséklet-értékek megjelenítése, ha elérhetőek.",
|
||||
"label": "GPU hőmérséklet"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "Rendszerterhelés átlagának megjelenítése.",
|
||||
"label": "Átlagos terhelés"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "A memória használatának megjelenítése százalékos értékben, abszolút értékek helyett.",
|
||||
"label": "Memória százalékban"
|
||||
@@ -481,6 +503,7 @@
|
||||
"device-address": "Eszköz címe",
|
||||
"disabled": "A Bluetooth ki van kapcsolva",
|
||||
"disconnect": "Kapcsolat bontása",
|
||||
"disconnecting": "A kapcsolat bontása...",
|
||||
"discoverable": "Felfedezhető",
|
||||
"enable-message": "Kapcsolja be a Bluetooth-t az elérhető eszközök megtekintéséhez.",
|
||||
"info": "Infó",
|
||||
@@ -494,6 +517,14 @@
|
||||
"refresh-devices": "Eszközök frissítése",
|
||||
"scanning": "Eszközök keresése...",
|
||||
"signal": "Jel",
|
||||
"signal-text": {
|
||||
"excellent": "Jelerősség: Kiváló",
|
||||
"fair": "Jelzés: Gyenge",
|
||||
"good": "Jel: Jó",
|
||||
"poor": "Jelerősség: Gyenge",
|
||||
"unknown": "Jel: Ismeretlen",
|
||||
"very-poor": "Jelerősség: Nagyon gyenge"
|
||||
},
|
||||
"title": "Bluetooth",
|
||||
"trusted": "Megbízható",
|
||||
"unpair": "Párosítás megszüntetése"
|
||||
@@ -529,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "Csatlakozzon a Discordunkhoz",
|
||||
"dismiss": "Ok"
|
||||
"dismiss": "Ok",
|
||||
"feedback": "Adj visszajelzést"
|
||||
},
|
||||
"empty": "A kiadási jegyzetek még nem érhetők el.",
|
||||
"highlight-title": "Főbb újdonságok",
|
||||
@@ -573,6 +605,7 @@
|
||||
"enable-bluetooth": "Bluetooth bekapcsolása",
|
||||
"enable-dnd": "Ne zavarjanak bekapcsolása",
|
||||
"enable-wifi": "Wi-Fi bekapcsolása",
|
||||
"launcher-settings": "Indító beállítások",
|
||||
"lower-to-bottom": "Engedd le a legaljára / Engedd le az aljára",
|
||||
"next": "Következő",
|
||||
"open-calendar": "Naptár megnyitása",
|
||||
@@ -631,7 +664,35 @@
|
||||
"webbrowser": "Webböngésző"
|
||||
},
|
||||
"delete": "Törlés",
|
||||
"no-results": "Nincs találat",
|
||||
"pin": "Rögzítés",
|
||||
"providers": {
|
||||
"applications": "Alkalmazások",
|
||||
"calculator": "Számológép",
|
||||
"calculator-deprecated": "A >calc parancs elavult, és hamarosan el lesz távolítva. Kérjük, a matematikai kifejezéseket közvetlenül a keresésbe írja be helyette.",
|
||||
"calculator-description": "Számológép — matematikai kifejezések kiértékelése",
|
||||
"calculator-enter-expression": "Írjon be egy matematikai kifejezést",
|
||||
"calculator-error": "Hiba",
|
||||
"calculator-name": "Számológép",
|
||||
"clipboard": "Vágólapelőzmények",
|
||||
"clipboard-clear-description": "Összes vágólapelőzmény törlése",
|
||||
"clipboard-clear-description-full": "Az összes elem eltávolítása a vágólapelőzményekből",
|
||||
"clipboard-clear-history": "Vágólapelőzmények törlése",
|
||||
"clipboard-delete": "Vágólap bejegyzés törlése",
|
||||
"clipboard-history-disabled": "Vágólapelőzmények kikapcsolva",
|
||||
"clipboard-history-disabled-description": "Kapcsolja be a vágólapelőzményeket a beállításokban, vagy telepítse a cliphistet",
|
||||
"clipboard-loading": "Vágólapelőzmények betöltése...",
|
||||
"clipboard-loading-description": "Kérjük, várjon",
|
||||
"clipboard-search-description": "Keresés a vágólapelőzményekben",
|
||||
"command": "Parancs",
|
||||
"command-description": "Shell parancsok futtatása",
|
||||
"command-name": "Parancs",
|
||||
"emoji": "Emoji választó",
|
||||
"emoji-loading": "Emojik betöltése...",
|
||||
"emoji-loading-description": "Kérjük, várjon",
|
||||
"emoji-no-recent": "Nincsenek még legutóbbi emojik",
|
||||
"emoji-search-description": "Emojik keresése és másolása"
|
||||
},
|
||||
"unpin": "Rögzítés feloldása"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -752,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "Rendszerkimenet + mikrofonbemenet",
|
||||
"microphone-input": "Mikrofonbemenet",
|
||||
"none": "No audio",
|
||||
"system-output": "Rendszerkimenet"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -774,6 +836,10 @@
|
||||
"hover": "Görgetés rámutatáskor",
|
||||
"never": "Soha ne görgessen"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "Rács",
|
||||
"single-row": "Egy sor"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "Panel a sávhoz rögzítve",
|
||||
"centered": "Középre igazított panel",
|
||||
@@ -823,31 +889,6 @@
|
||||
"select": "Kiválasztás",
|
||||
"test": "Teszt"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "Alkalmazások",
|
||||
"calculator": "Számológép",
|
||||
"calculator-description": "Számológép — matematikai kifejezések kiértékelése",
|
||||
"calculator-enter-expression": "Írjon be egy matematikai kifejezést",
|
||||
"calculator-error": "Hiba",
|
||||
"calculator-name": "Számológép",
|
||||
"clipboard": "Vágólapelőzmények",
|
||||
"clipboard-clear-description": "Összes vágólapelőzmény törlése",
|
||||
"clipboard-clear-description-full": "Az összes elem eltávolítása a vágólapelőzményekből",
|
||||
"clipboard-clear-history": "Vágólapelőzmények törlése",
|
||||
"clipboard-delete": "Vágólap bejegyzés törlése",
|
||||
"clipboard-history-disabled": "Vágólapelőzmények kikapcsolva",
|
||||
"clipboard-history-disabled-description": "Kapcsolja be a vágólapelőzményeket a beállításokban, vagy telepítse a cliphistet",
|
||||
"clipboard-loading": "Vágólapelőzmények betöltése...",
|
||||
"clipboard-loading-description": "Kérjük, várjon",
|
||||
"clipboard-search-description": "Keresés a vágólapelőzményekben",
|
||||
"command": "Parancs",
|
||||
"command-description": "Shell parancsok futtatása",
|
||||
"command-name": "Parancs",
|
||||
"emoji": "Emoji választó",
|
||||
"emoji-loading": "Emojik betöltése...",
|
||||
"emoji-loading-description": "Kérjük, várjon",
|
||||
"emoji-search-description": "Emojik keresése és másolása"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1125,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "Az alapul szolgáló képhez szorosan illeszkedő színeket származtat.",
|
||||
"scheme-expressive": "Élénk paletta játékos telítettséggel.",
|
||||
"scheme-fidelity": "Nagy pontosságú paletta, amely megőrzi a forrás színtónusait.",
|
||||
"scheme-fruit-salad": "Színes keveréke az élénk kontrasztos ékezeteknek.",
|
||||
"scheme-monochrome": "Minimális paletta egyetlen színárnyalat köré építve.",
|
||||
"scheme-neutral": "Tompa paletta visszafogott és nyugtató tónusokkal.",
|
||||
"scheme-rainbow": "Változatos paletta, amely a teljes spektrumot lefedi.",
|
||||
"scheme-tonal-spot": "Kiegyensúlyozott paletta fókuszált hangsúlyokkal."
|
||||
},
|
||||
"description": "Válassza ki a színséma-generálási módszert, amellyel a Matugen színeket fog létrehozni a háttérképéből.",
|
||||
"label": "Matugen séma típusa"
|
||||
},
|
||||
"section": {
|
||||
@@ -1268,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "{filepath} írása és újratöltés"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "Írd be ezt a fájlba: {filepath}; másold be a Zen profilod chrome/userChrome.css fájljába."
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1786,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "Parancs, amely a jegyzetelés gombra kattintva fut a vágólap előzményeiben. A kép a parancsra lesz átirányítva.",
|
||||
"label": "Annotációs eszköz",
|
||||
"placeholder": "gradia, satty -f -"
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": "Mutassa a vágólap tartalmának előnézetét a >clip parancs használatakor.",
|
||||
"label": "Vágólap előnézet engedélyezése"
|
||||
@@ -1826,6 +1866,10 @@
|
||||
"description": "Kategóriafülek megjelenítése az alkalmazások szűréséhez.",
|
||||
"label": "Kategóriák megjelenítése"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "Ikonok mögött lekerekített téglalap hátteret mutass.",
|
||||
"label": "Ikon háttér megjelenítése"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "Ha engedélyezve van, a gyakran indított alkalmazások jelennek meg először a listán.",
|
||||
"label": "Rendezés gyakoriság szerint"
|
||||
@@ -1940,7 +1984,11 @@
|
||||
"network": {
|
||||
"bluetooth": {
|
||||
"description": "A Bluetooth kezelés aktiválása.",
|
||||
"label": "Bluetooth bekapcsolása"
|
||||
"label": "Bluetooth bekapcsolása",
|
||||
"rssi-polling": {
|
||||
"description": "Időnként mintavételezi a csatlakoztatott eszközök RSSI-értékét a bluetoothctl-en keresztül. Nem biztos, hogy minden eszközhöz elérhető; engedélyezve minimális erőforrásokat használ.",
|
||||
"label": "Bluetooth jel lekérdezés"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"description": "Wi-Fi és Bluetooth kapcsolatok kezelése."
|
||||
@@ -2171,6 +2219,11 @@
|
||||
"no-plugins-description": "Ellenőrizze a bővítményforrásokat, vagy frissítse a listát.",
|
||||
"no-plugins-label": "Nincsenek elérhető bővítmények"
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "Ez a bővítmény már telepítve van.",
|
||||
"custom-version-exists": "Egyéni verzió a következő helyről: \"{source}\" már telepítve van",
|
||||
"official-version-exists": "A plugin hivatalos verziója már telepítve van."
|
||||
},
|
||||
"filter": {
|
||||
"all": "Összes",
|
||||
"downloaded": "Letöltött",
|
||||
@@ -2191,6 +2244,7 @@
|
||||
"no-plugins-label": "Nincs telepített bővítmény"
|
||||
},
|
||||
"installing": "Telepítés: {plugin}...",
|
||||
"open-plugins-tab": "Bővítmények beállításainak megnyitása",
|
||||
"plugin-settings-title": "{plugin} beállításai",
|
||||
"refresh": {
|
||||
"refreshing": "Bővítmények listájának frissítése...",
|
||||
@@ -2201,6 +2255,10 @@
|
||||
},
|
||||
"settings-error-not-loaded": "Bővítmény nincs betöltve",
|
||||
"settings-saved": "Bővítmény beállításai mentve",
|
||||
"source": {
|
||||
"custom": "Egyéni forrás",
|
||||
"official": "hivatalos"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "Egyéni adattár hozzáadása",
|
||||
"add-dialog": {
|
||||
@@ -2232,8 +2290,10 @@
|
||||
"update-all": "Összes frissítése ({count})",
|
||||
"update-all-success": "Minden bővítmény sikeresen frissítve",
|
||||
"update-available": "{count} frissítés érhető el a bővítményekhez",
|
||||
"update-available_plural": "{count} bővítményfrissítés érhető el",
|
||||
"update-error": "Nem sikerült frissíteni a bővítményt: {plugin}: {error}",
|
||||
"update-incompatible": "Noctalia v{version} vagy újabb szükséges",
|
||||
"update-pending": "v{current} → v{new} (szükséges Noctalia v{required})",
|
||||
"update-success": "A(z) {plugin} frissítve lett a v{version} verzióra",
|
||||
"update-version": "v{current} → v{new}",
|
||||
"updating": "Frissítés..."
|
||||
@@ -2339,6 +2399,10 @@
|
||||
"label": "Általános"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "Válaszd ki, hogyan jelenjenek meg a munkamenü menügombjai.",
|
||||
"label": "Nagy gombok elrendezése"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "A munkamenet menü megjelenítése nagy gombokkal, rácsos elrendezésben.",
|
||||
"label": "Nagyméretű gombok stílusa"
|
||||
@@ -2395,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "Kiemelőszínek"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "Átlagos terhelés"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "Memóriahasználat"
|
||||
},
|
||||
@@ -2438,6 +2505,10 @@
|
||||
"label": "Animációs sebesség",
|
||||
"reset": "Animációs sebesség visszaállítása"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "Tartalomterületek köré vázlatot jelenít meg.",
|
||||
"label": "Konténer körvonal"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "Beállítja a fő elrendezési szakaszok (például oldalsávok, kártyák és tartalompanelek) saroklekerekítését.",
|
||||
"label": "Tároló sugár",
|
||||
@@ -2564,8 +2635,8 @@
|
||||
"tooltip": "Háttérkép mappa"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "Háttérkép fájlnevek elrejtése a választóban.",
|
||||
"label": "Fájlnevek elrejtése"
|
||||
"tooltip-hide": "Fájlnevek elrejtése",
|
||||
"tooltip-show": "Fájlnevek megjelenítése"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "Külön háttérkép mappa beállítása minden monitorhoz.",
|
||||
@@ -2648,6 +2719,7 @@
|
||||
"download": "Letöltés",
|
||||
"download-speed": "Letöltési sebesség",
|
||||
"gpu-temp": "GPU hőmérséklet",
|
||||
"load-average": "Átlagos terhelés",
|
||||
"memory": "Memória",
|
||||
"title": "Rendszerfigyelő",
|
||||
"upload": "Feltöltés",
|
||||
@@ -2664,6 +2736,7 @@
|
||||
"low-desc": "Az akkumulátor {percent}%-on van. Kérjük, csatlakoztassa a töltőt."
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Cím a vágólapra másolva",
|
||||
"confirm-code": "Erősítse meg a {value} kódot a másik eszközön",
|
||||
"connect-failed": "Nem sikerült csatlakozni az eszközhöz",
|
||||
"disabled": "Kikapcsolva",
|
||||
@@ -2706,7 +2779,8 @@
|
||||
"enabled": "Bekapcsolva"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "Billentyűzetkiosztás megváltozott: {layout}"
|
||||
"changed": "Billentyűzetkiosztás megváltozott: {layout}",
|
||||
"title": "Billentyűzet"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "A Ko-fi oldal megnyílt a böngészőjében"
|
||||
@@ -2780,6 +2854,7 @@
|
||||
"close": "Bezárás",
|
||||
"collapse": "Oldalsáv összecsukása",
|
||||
"connect-disconnect-devices": "Bluetooth eszköz",
|
||||
"copy-address": "Cím másolása",
|
||||
"delete-notification": "Értesítés törlése",
|
||||
"disable-keep-awake": "Ébren tartás",
|
||||
"do-not-disturb-disabled": "Ne zavarjanak",
|
||||
@@ -2798,10 +2873,12 @@
|
||||
"list-view": "Lista nézet",
|
||||
"manage-vpn": "VPN-kapcsolatok",
|
||||
"manage-wifi": "Wi-Fi",
|
||||
"max-widgets-reached": "Elérte a maximális widgetszámot.",
|
||||
"microphone-volume-at": "Mikrofon hangereje: {volume}%",
|
||||
"move-to-center-section": "Középső szakasz",
|
||||
"move-to-left-section": "Bal oldali szakasz",
|
||||
"move-to-right-section": "Jobb oldali szakasz",
|
||||
"move-to-section": "Ugrás a(z) {section} szakaszhoz",
|
||||
"mute": "Némítás",
|
||||
"next-media": "Következő zene",
|
||||
"next-month": "Következő hónap",
|
||||
@@ -2811,6 +2888,7 @@
|
||||
"night-light-not-installed": "Éjszakai fény (nem elérhető)",
|
||||
"noctalia-performance-disabled": "Noctalia teljesítmény mód",
|
||||
"noctalia-performance-enabled": "Noctalia teljesítmény mód",
|
||||
"open-annotation-tool": "Megnyitás jegyzetelő eszközzel",
|
||||
"open-control-center": "Vezérlőközpont",
|
||||
"open-notification-history-disable-dnd": "Értesítési előzmények",
|
||||
"open-notification-history-enable-dnd": "Értesítési előzmények",
|
||||
@@ -2858,6 +2936,7 @@
|
||||
"apikey": {
|
||||
"help": "NSFW tartalom eléréséhez API kulcs szükséges.",
|
||||
"label": "API kulcs",
|
||||
"managed-by-env": "A NOCTALIA_WALLHAVEN_API_KEY környezeti változóval kezelhető.",
|
||||
"placeholder": "Add meg a Wallhaven API kulcsodat!"
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2895,6 +2974,9 @@
|
||||
}
|
||||
},
|
||||
"search": "Keresés",
|
||||
"solid-color": {
|
||||
"tooltip": "Egyszínű háttér"
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "Hozzáadás dátuma",
|
||||
"favorites": "Kedvencek",
|
||||
@@ -2943,6 +3025,11 @@
|
||||
"thunderstorm": "Zivatar",
|
||||
"unknown": "Ismeretlen"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "Fájl kiválasztása"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "Alkalmazás",
|
||||
@@ -3027,11 +3114,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "Szukseges akció",
|
||||
"available-interfaces": "Elérhető interfészek",
|
||||
"available-networks": "Elérhető hálózatok",
|
||||
"connect": "Csatlakozás",
|
||||
"connected": "Csatlakozva",
|
||||
"disabled": "A Wi‑Fi ki van kapcsolva",
|
||||
"disconnect": "Leválasztás",
|
||||
"disconnected": "Szétkapcsolva",
|
||||
"disconnecting": "Leválasztás…",
|
||||
"dns": "DNS",
|
||||
"enable-message": "Kapcsolja be a Wi‑Fi-t az elérhető hálózatok megtekintéséhez.",
|
||||
@@ -3042,12 +3131,15 @@
|
||||
"frequency": "Frekvencia",
|
||||
"gateway": "Átjáró",
|
||||
"info": "Infó",
|
||||
"interface": "Hálózati interfész",
|
||||
"internet": "Internet",
|
||||
"internet-connected": "Internet csatlakoztatva",
|
||||
"internet-limited": "Nincs internet",
|
||||
"internet-status": "Internet állapota",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "Ismert hálózatok",
|
||||
"link-speed": "Kapcsolati sebesség",
|
||||
"no-ethernet-devices": "Nem található Ethernet eszköz.",
|
||||
"no-networks": "Nem található Wi‑Fi-hálózat",
|
||||
"password": "Jelszó",
|
||||
"saved": "Mentve",
|
||||
|
||||
+140
-48
@@ -142,12 +142,20 @@
|
||||
"description": "出力テキストがこの値と一致する場合、ボタンを折りたたみます。",
|
||||
"label": "折りたたみ条件"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "テーマカラーをアイコンとテキストに適用します。",
|
||||
"label": "色を選択"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "定期的に実行するコマンドを入力します。出力の最初の行がテキストとして表示されます。",
|
||||
"label": "コマンド出力を表示",
|
||||
"stream-description": "継続的に実行するコマンドを入力します。"
|
||||
},
|
||||
"dynamic-text": "動的テキスト",
|
||||
"enable-colorization": {
|
||||
"description": "カスタムボタンのアイコンとテキストのカラーリングを有効にし、テーマカラーを適用します。",
|
||||
"label": "カラーリングを有効化"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "常に展開",
|
||||
"description": "コマンドの出力がない場合のウィジェットの表示を制御します。",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "値の表示方法を選択します。",
|
||||
"label": "表示モード"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "キーボードレイアウトのアイコンを表示します。",
|
||||
"label": "アイコンを表示"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "有効にすると、強調のためにプライマリカラーが適用されます。",
|
||||
"label": "原色を使用してください。"
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,9 +345,13 @@
|
||||
"description": "利用可能な場合、GPU 温度を表示します。",
|
||||
"label": "GPU 温度"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "システム負荷平均を表示します。",
|
||||
"label": "負荷平均"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "メモリ使用量を絶対値ではなくパーセンテージで表示します。",
|
||||
"label": "メモリをパーセント表示"
|
||||
"label": "メモリをパーセントで表示"
|
||||
},
|
||||
"memory-usage": {
|
||||
"description": "現在の RAM 使用量を表示します。",
|
||||
@@ -481,9 +503,10 @@
|
||||
"device-address": "デバイスアドレス",
|
||||
"disabled": "Bluetooth は無効です",
|
||||
"disconnect": "切断",
|
||||
"disconnecting": "切断中...",
|
||||
"discoverable": "発見可能",
|
||||
"enable-message": "利用可能なデバイスを表示するには Bluetooth を有効にしてください。",
|
||||
"info": "情報 (Jōhō)",
|
||||
"info": "情報",
|
||||
"known-devices": "登録済みデバイス",
|
||||
"no-devices": "利用可能なデバイスはありません",
|
||||
"pair": "ペア",
|
||||
@@ -493,7 +516,15 @@
|
||||
"pairing-mode": "デバイスがペアリングモードになっていることを確認してください。",
|
||||
"refresh-devices": "デバイスを更新",
|
||||
"scanning": "デバイスをスキャン中...",
|
||||
"signal": "信号 (shingō)",
|
||||
"signal": "信号",
|
||||
"signal-text": {
|
||||
"excellent": "信号: 良好",
|
||||
"fair": "合図:可",
|
||||
"good": "信号: 良し",
|
||||
"poor": "信号:弱い",
|
||||
"unknown": "信号:不明",
|
||||
"very-poor": "信号:非常に悪い"
|
||||
},
|
||||
"title": "Bluetooth",
|
||||
"trusted": "信頼できる",
|
||||
"unpair": "ペアリング解除"
|
||||
@@ -529,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "Discord に参加",
|
||||
"dismiss": "OK"
|
||||
"dismiss": "OK",
|
||||
"feedback": "フィードバックをお願いします。"
|
||||
},
|
||||
"empty": "リリースノートはまだ利用できません。",
|
||||
"highlight-title": "ハイライト",
|
||||
@@ -565,7 +597,7 @@
|
||||
"close-app": "{app} を閉じる",
|
||||
"connect-vpn": "{name} に接続",
|
||||
"cycle-visualizer": "ビジュアライザーを切り替える",
|
||||
"delete": "削除 (Sakujo)",
|
||||
"delete": "削除",
|
||||
"disable-bluetooth": "Bluetooth を無効化",
|
||||
"disable-dnd": "おやすみモードを無効化",
|
||||
"disable-wifi": "Wi-Fi を無効化",
|
||||
@@ -573,6 +605,7 @@
|
||||
"enable-bluetooth": "Bluetooth を有効化",
|
||||
"enable-dnd": "おやすみモードを有効化",
|
||||
"enable-wifi": "Wi-Fi を有効化",
|
||||
"launcher-settings": "ランチャー設定",
|
||||
"lower-to-bottom": "一番下まで下げてください。",
|
||||
"next": "次へ",
|
||||
"open-calendar": "カレンダーを開く",
|
||||
@@ -631,7 +664,35 @@
|
||||
"webbrowser": "ウェブブラウザ"
|
||||
},
|
||||
"delete": "削除",
|
||||
"no-results": "結果が見つかりませんでした。",
|
||||
"pin": "ピン留め",
|
||||
"providers": {
|
||||
"applications": "アプリケーション",
|
||||
"calculator": "電卓",
|
||||
"calculator-deprecated": ">calc コマンドは非推奨となり、まもなく削除されます。代わりに、検索で数式を直接入力してください。",
|
||||
"calculator-description": "電卓 — 数式を計算します",
|
||||
"calculator-enter-expression": "数式を入力",
|
||||
"calculator-error": "エラー",
|
||||
"calculator-name": "電卓",
|
||||
"clipboard": "クリップボード履歴",
|
||||
"clipboard-clear-description": "クリップボード履歴をすべて消去",
|
||||
"clipboard-clear-description-full": "クリップボード履歴からすべての項目を削除します",
|
||||
"clipboard-clear-history": "クリップボード履歴を消去",
|
||||
"clipboard-delete": "クリップボードの項目を削除",
|
||||
"clipboard-history-disabled": "クリップボード履歴は無効です",
|
||||
"clipboard-history-disabled-description": "設定で履歴を有効にするか、cliphist をインストールしてください",
|
||||
"clipboard-loading": "クリップボード履歴を読み込み中...",
|
||||
"clipboard-loading-description": "お待ちください",
|
||||
"clipboard-search-description": "クリップボード履歴を検索",
|
||||
"command": "コマンド",
|
||||
"command-description": "シェルコマンドを実行する",
|
||||
"command-name": "コマンド",
|
||||
"emoji": "絵文字選択",
|
||||
"emoji-loading": "絵文字を読み込み中...",
|
||||
"emoji-loading-description": "お待ちください",
|
||||
"emoji-no-recent": "まだ最近使った絵文字はありません。",
|
||||
"emoji-search-description": "絵文字を検索してコピー"
|
||||
},
|
||||
"unpin": "ピン留め解除"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -683,7 +744,7 @@
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "エラー (Error)",
|
||||
"error": "エラー",
|
||||
"none": "なし",
|
||||
"onSurface": "文字・アイコン (On Surface)",
|
||||
"primary": "メインカラー (Primary)",
|
||||
@@ -752,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "システム出力 + マイク入力",
|
||||
"microphone-input": "マイク入力",
|
||||
"none": "No audio",
|
||||
"system-output": "システム出力"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -774,6 +836,10 @@
|
||||
"hover": "ホバー時にスクロール",
|
||||
"never": "スクロールしない"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "グリッド",
|
||||
"single-row": "単一行"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "バーに吸着",
|
||||
"centered": "中央に配置",
|
||||
@@ -823,31 +889,6 @@
|
||||
"select": "選択",
|
||||
"test": "テスト"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "アプリケーション",
|
||||
"calculator": "電卓",
|
||||
"calculator-description": "電卓 — 数式を計算します",
|
||||
"calculator-enter-expression": "数式を入力",
|
||||
"calculator-error": "エラー",
|
||||
"calculator-name": "電卓",
|
||||
"clipboard": "クリップボード履歴",
|
||||
"clipboard-clear-description": "クリップボード履歴をすべて消去",
|
||||
"clipboard-clear-description-full": "クリップボード履歴からすべての項目を削除します",
|
||||
"clipboard-clear-history": "クリップボード履歴を消去",
|
||||
"clipboard-delete": "クリップボードの項目を削除",
|
||||
"clipboard-history-disabled": "クリップボード履歴は無効です",
|
||||
"clipboard-history-disabled-description": "設定で履歴を有効にするか、cliphist をインストールしてください",
|
||||
"clipboard-loading": "クリップボード履歴を読み込み中...",
|
||||
"clipboard-loading-description": "お待ちください",
|
||||
"clipboard-search-description": "クリップボード履歴を検索",
|
||||
"command": "コマンド",
|
||||
"command-description": "シェルコマンドを実行する",
|
||||
"command-name": "コマンド",
|
||||
"emoji": "絵文字選択",
|
||||
"emoji-loading": "絵文字を読み込み中...",
|
||||
"emoji-loading-description": "お待ちください",
|
||||
"emoji-search-description": "絵文字を検索してコピー"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1125,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "元画像に馴染む色を抽出します。",
|
||||
"scheme-expressive": "彩度が高く、鮮やかで遊び心のあるパレット。",
|
||||
"scheme-fidelity": "元の色相を保持した、忠実度の高いパレット。",
|
||||
"scheme-fruit-salad": "明るく対照的なアクセントを混ぜたカラフルなパレット。",
|
||||
"scheme-monochrome": "単一の色相で構成されたミニマルなパレット。",
|
||||
"scheme-neutral": "彩度を抑えた、落ち着きのあるパレット。",
|
||||
"scheme-rainbow": "スペクトル全体をカバーする多様なパレット。",
|
||||
"scheme-tonal-spot": "アクセントを強調したバランスの良いパレット。"
|
||||
},
|
||||
"description": "Matugen が壁紙から色を作成するために使用する配色生成方法を選択してください。",
|
||||
"label": "Matugen のスキームタイプ"
|
||||
},
|
||||
"section": {
|
||||
@@ -1268,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "{filepath} を書き込み、リロードします。"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "{filepath} を記述; Zen プロファイルの chrome/userChrome.css にコピーしてください。"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1786,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "クリップボード履歴のアノテーションボタンをクリックしたときに実行するコマンド。画像はこのコマンドにパイプされます。",
|
||||
"label": "注釈ツール",
|
||||
"placeholder": "グラディア、サッティ -f -"
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": ">clip コマンド使用時に、クリップボードの内容をプレビュー表示します。",
|
||||
"label": "クリップボードのプレビューを有効化"
|
||||
@@ -1826,6 +1866,10 @@
|
||||
"description": "アプリケーションを絞り込むためのカテゴリタブを表示します。",
|
||||
"label": "カテゴリを表示"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "アイコンの背面に角丸の長方形の背景を表示する。",
|
||||
"label": "アイコンの背景を表示"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "有効にすると、よく使うアプリがリストの上位に表示されます。",
|
||||
"label": "使用頻度順に並べ替え"
|
||||
@@ -1940,7 +1984,11 @@
|
||||
"network": {
|
||||
"bluetooth": {
|
||||
"description": "Bluetooth の管理を有効にします。",
|
||||
"label": "Bluetooth を有効化"
|
||||
"label": "Bluetooth を有効化",
|
||||
"rssi-polling": {
|
||||
"description": "bluetoothctl 経由で接続されたデバイスのRSSIを定期的にサンプリングします。 すべてのデバイスで利用できるとは限りません。 有効にすると、最小限のリソースを使用します。",
|
||||
"label": "Bluetooth信号ポーリング"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"description": "Wi-Fi と Bluetooth 接続を管理します。"
|
||||
@@ -2171,6 +2219,11 @@
|
||||
"no-plugins-description": "プラグインのソースを確認するか、リストを更新してください。",
|
||||
"no-plugins-label": "利用可能なプラグインはありません"
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "このプラグインはすでにインストールされています。",
|
||||
"custom-version-exists": "\"{source}\" 発 の カスタム版 は 既に インストール されています。",
|
||||
"official-version-exists": "このプラグインの公式バージョンはすでにインストールされています。"
|
||||
},
|
||||
"filter": {
|
||||
"all": "すべて",
|
||||
"downloaded": "ダウンロード済み",
|
||||
@@ -2191,6 +2244,7 @@
|
||||
"no-plugins-label": "インストールされているプラグインはありません"
|
||||
},
|
||||
"installing": "{plugin} をインストール中...",
|
||||
"open-plugins-tab": "プラグイン設定を開く",
|
||||
"plugin-settings-title": "{plugin} の設定",
|
||||
"refresh": {
|
||||
"refreshing": "プラグインリストを更新中...",
|
||||
@@ -2201,6 +2255,10 @@
|
||||
},
|
||||
"settings-error-not-loaded": "プラグインは読み込まれていません",
|
||||
"settings-saved": "プラグイン設定を保存しました",
|
||||
"source": {
|
||||
"custom": "カスタムソース",
|
||||
"official": "公式"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "カスタムリポジトリを追加",
|
||||
"add-dialog": {
|
||||
@@ -2232,8 +2290,10 @@
|
||||
"update-all": "すべてアップデート ({count})",
|
||||
"update-all-success": "すべてのプラグインをアップデートしました。",
|
||||
"update-available": "{count} 件のプラグインアップデートがあります",
|
||||
"update-available_plural": "{count} 個のプラグインアップデートがあります",
|
||||
"update-error": "プラグインのアップデートに失敗しました: {plugin}: {error}",
|
||||
"update-incompatible": "Noctalia v{version} 以降が必要です。",
|
||||
"update-pending": "v{current} → v{new} (Noctalia v{required} ga hitsuyou)",
|
||||
"update-success": "{plugin} を v{version} にアップデートしました。",
|
||||
"update-version": "v{current} → v{new}",
|
||||
"updating": "更新中..."
|
||||
@@ -2339,6 +2399,10 @@
|
||||
"label": "一般"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "セッションメニューのボタンの表示方法を選択してください。",
|
||||
"label": "大きなボタンのレイアウト"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "セッションメニューを、グリッド配置の大きなボタンで表示します。",
|
||||
"label": "大きなボタンのスタイル"
|
||||
@@ -2395,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "ハイライト色"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "負荷平均"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "メモリ使用量"
|
||||
},
|
||||
@@ -2438,6 +2505,10 @@
|
||||
"label": "アニメーション速度",
|
||||
"reset": "アニメーション速度をリセット"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "コンテンツ領域の周りにアウトラインを表示します。",
|
||||
"label": "コンテナの輪郭"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "サイドバー、カード、コンテンツパネルなど、主要なレイアウト部分の角の丸みを調整します。",
|
||||
"label": "コンテナの角の丸み",
|
||||
@@ -2564,8 +2635,8 @@
|
||||
"tooltip": "壁紙フォルダ"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "壁紙選択パネル内で、壁紙のファイル名を非表示にします。",
|
||||
"label": "ファイル名を非表示"
|
||||
"tooltip-hide": "ファイル名を隠す",
|
||||
"tooltip-show": "ファイル名を表示"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "ディスプレイごとに異なる壁紙フォルダを設定します。",
|
||||
@@ -2646,9 +2717,10 @@
|
||||
"cpu-usage": "CPU使用率",
|
||||
"disk": "ディスク",
|
||||
"download": "ダウンロード",
|
||||
"download-speed": "ダウンロード速度 (Daunrōdo sokudo)",
|
||||
"download-speed": "ダウンロード速度",
|
||||
"gpu-temp": "GPU温度",
|
||||
"memory": "記憶",
|
||||
"load-average": "負荷平均",
|
||||
"memory": "メモリ",
|
||||
"title": "システムモニター",
|
||||
"upload": "アップロード",
|
||||
"upload-speed": "アップロード速度"
|
||||
@@ -2664,6 +2736,7 @@
|
||||
"low-desc": "バッテリー残量が {percent}% です。充電器を接続してください。"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "アドレスをクリップボードにコピーしました。",
|
||||
"confirm-code": "別のデバイスでコード{value}を確認してください。",
|
||||
"connect-failed": "デバイスに接続できませんでした。",
|
||||
"disabled": "無効",
|
||||
@@ -2706,7 +2779,8 @@
|
||||
"enabled": "有効"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "キーボードレイアウトを {layout} に変更しました"
|
||||
"changed": "キーボードレイアウトを {layout} に変更しました",
|
||||
"title": "キーボード"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "ブラウザで Ko-fi ページを開きました"
|
||||
@@ -2780,6 +2854,7 @@
|
||||
"close": "閉じる",
|
||||
"collapse": "サイドバーを折りたたむ",
|
||||
"connect-disconnect-devices": "Bluetooth デバイス",
|
||||
"copy-address": "アドレスをコピー",
|
||||
"delete-notification": "通知を削除",
|
||||
"disable-keep-awake": "スリープ防止",
|
||||
"do-not-disturb-disabled": "おやすみモード",
|
||||
@@ -2798,10 +2873,12 @@
|
||||
"list-view": "リスト表示",
|
||||
"manage-vpn": "VPN 接続",
|
||||
"manage-wifi": "Wi-Fi",
|
||||
"max-widgets-reached": "ウィジェットの最大数に達しました",
|
||||
"microphone-volume-at": "マイク音量: {volume}%",
|
||||
"move-to-center-section": "中央セクション",
|
||||
"move-to-left-section": "左セクション",
|
||||
"move-to-right-section": "右セクション",
|
||||
"move-to-section": "{section} に移動",
|
||||
"mute": "ミュート",
|
||||
"next-media": "次のトラック",
|
||||
"next-month": "翌月",
|
||||
@@ -2811,6 +2888,7 @@
|
||||
"night-light-not-installed": "夜間モード(利用不可)",
|
||||
"noctalia-performance-disabled": "Noctalia パフォーマンスモード",
|
||||
"noctalia-performance-enabled": "Noctalia パフォーマンスモード",
|
||||
"open-annotation-tool": "注釈ツールで開く",
|
||||
"open-control-center": "コントロールセンター",
|
||||
"open-notification-history-disable-dnd": "通知履歴",
|
||||
"open-notification-history-enable-dnd": "通知履歴",
|
||||
@@ -2858,6 +2936,7 @@
|
||||
"apikey": {
|
||||
"help": "成人向けコンテンツにアクセスするには、APIキーが必要です。",
|
||||
"label": "APIキー",
|
||||
"managed-by-env": "NOCTALIA_WALLHAVEN_API_KEY 環境変数経由で管理されます。",
|
||||
"placeholder": "Wallhaven APIキーを入力してください。"
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2895,6 +2974,9 @@
|
||||
}
|
||||
},
|
||||
"search": "検索",
|
||||
"solid-color": {
|
||||
"tooltip": "無地"
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "追加日",
|
||||
"favorites": "お気に入り数",
|
||||
@@ -2943,6 +3025,11 @@
|
||||
"thunderstorm": "雷雨",
|
||||
"unknown": "不明"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "ファイルを選択"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "適用",
|
||||
@@ -3027,11 +3114,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "アクションが必要",
|
||||
"available-interfaces": "利用可能なインターフェース",
|
||||
"available-networks": "利用可能なネットワーク",
|
||||
"connect": "接続",
|
||||
"connected": "接続済み",
|
||||
"disabled": "Wi-Fi は無効です",
|
||||
"disconnect": "切断",
|
||||
"disconnected": "切断されました",
|
||||
"disconnecting": "切断中...",
|
||||
"dns": "DNS",
|
||||
"enable-message": "利用可能なネットワークを表示するには Wi-Fi を有効にしてください。",
|
||||
@@ -3041,13 +3130,16 @@
|
||||
"forgetting": "削除中...",
|
||||
"frequency": "周波数",
|
||||
"gateway": "ゲートウェイ",
|
||||
"info": "情報 (Jōhō)",
|
||||
"info": "情報",
|
||||
"interface": "ネットワークインターフェース",
|
||||
"internet": "インターネット",
|
||||
"internet-connected": "インターネット接続",
|
||||
"internet-limited": "インターネットなし",
|
||||
"internet-status": "インターネット接続状況",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "保存済みネットワーク",
|
||||
"link-speed": "リンク速度",
|
||||
"no-ethernet-devices": "イーサネットデバイスが検出されませんでした。",
|
||||
"no-networks": "ネットワークが見つかりません",
|
||||
"password": "パスワード",
|
||||
"saved": "保存済み",
|
||||
|
||||
+969
-877
File diff suppressed because it is too large
Load Diff
+132
-40
@@ -142,12 +142,20 @@
|
||||
"description": "Als de uitvoer overeenkomt met deze waarde, wordt de knop samengevouwen.",
|
||||
"label": "Inklapvoorwaarde"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "Pas themakleuren toe op pictogram en tekst.",
|
||||
"label": "Kleur selecteren"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "Voer een commando in dat regelmatig wordt uitgevoerd. De eerste regel van de uitvoer wordt als tekst weergegeven.",
|
||||
"label": "Commando-uitvoer weergeven",
|
||||
"stream-description": "Voer een commando in dat continu wordt uitgevoerd."
|
||||
},
|
||||
"dynamic-text": "Dynamische tekst",
|
||||
"enable-colorization": {
|
||||
"description": "Kleurtoepassing inschakelen voor het aangepaste knoppictogram en de tekst, met toepassing van themakleuren.",
|
||||
"label": "Kleurtoepassing inschakelen"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "Altijd uitgeklapt",
|
||||
"description": "Bepaalt de zichtbaarheid van de widget wanneer het commando geen uitvoer heeft.",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "Kies hoe je wilt dat deze waarde wordt weergegeven.",
|
||||
"label": "Weergavemodus"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "Toon het toetsenbordindeling-icoon.",
|
||||
"label": "Icoon weergeven"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "Indien ingeschakeld, past dit de primaire kleur toe voor nadruk.",
|
||||
"label": "Gebruik een primaire kleur"
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,6 +345,10 @@
|
||||
"description": "Toon GPU-temperatuurmetingen indien beschikbaar.",
|
||||
"label": "GPU-temperatuur"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "Systeembelasting gemiddelde weergeven.",
|
||||
"label": "Gemiddelde belasting"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "Toon geheugengebruik als percentage in plaats van absolute waarden.",
|
||||
"label": "Geheugen als percentage"
|
||||
@@ -481,6 +503,7 @@
|
||||
"device-address": "Apparaatadres",
|
||||
"disabled": "Bluetooth is uitgeschakeld",
|
||||
"disconnect": "Verbreken",
|
||||
"disconnecting": "Verbinding verbroken...",
|
||||
"discoverable": "Zichtbaar",
|
||||
"enable-message": "Schakel Bluetooth in om beschikbare apparaten te zien.",
|
||||
"info": "Info",
|
||||
@@ -494,6 +517,14 @@
|
||||
"refresh-devices": "Apparaten verversen",
|
||||
"scanning": "Zoeken naar apparaten...",
|
||||
"signal": "Signaal",
|
||||
"signal-text": {
|
||||
"excellent": "Signaal: Uitstekend",
|
||||
"fair": "Signaal: Redelijk",
|
||||
"good": "Signaal: Goed",
|
||||
"poor": "Signaal: Zwak",
|
||||
"unknown": "Signaal: Onbekend",
|
||||
"very-poor": "Signaal: Zeer slecht"
|
||||
},
|
||||
"title": "Bluetooth",
|
||||
"trusted": "Vertrouwd",
|
||||
"unpair": "Ontkoppelen"
|
||||
@@ -529,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "Word lid van onze Discord",
|
||||
"dismiss": "Ok"
|
||||
"dismiss": "Ok",
|
||||
"feedback": "Geef feedback"
|
||||
},
|
||||
"empty": "Er zijn nog geen release-opmerkingen beschikbaar.",
|
||||
"highlight-title": "Hoogtepunten",
|
||||
@@ -573,6 +605,7 @@
|
||||
"enable-bluetooth": "Bluetooth inschakelen",
|
||||
"enable-dnd": "Niet Storen inschakelen",
|
||||
"enable-wifi": "Wi-Fi inschakelen",
|
||||
"launcher-settings": "Launcher instellingen",
|
||||
"lower-to-bottom": "Laagste naar beneden",
|
||||
"next": "Volgende",
|
||||
"open-calendar": "Open agenda",
|
||||
@@ -631,7 +664,35 @@
|
||||
"webbrowser": "Webbrowser"
|
||||
},
|
||||
"delete": "Verwijderen",
|
||||
"no-results": "Geen resultaten gevonden.",
|
||||
"pin": "Vastmaken",
|
||||
"providers": {
|
||||
"applications": "Applicaties",
|
||||
"calculator": "Rekenmachine",
|
||||
"calculator-deprecated": "De >calc opdracht is verouderd en zal binnenkort verwijderd worden. Typ wiskundige uitdrukkingen in plaats daarvan direct in de zoekopdracht.",
|
||||
"calculator-description": "Rekenmachine — bereken wiskundige expressies",
|
||||
"calculator-enter-expression": "Voer een wiskundige expressie in",
|
||||
"calculator-error": "Fout",
|
||||
"calculator-name": "Rekenmachine",
|
||||
"clipboard": "Klembordgeschiedenis",
|
||||
"clipboard-clear-description": "Klembordgeschiedenis wissen",
|
||||
"clipboard-clear-description-full": "Alle items uit de klembordgeschiedenis verwijderen",
|
||||
"clipboard-clear-history": "Klembordgeschiedenis wissen",
|
||||
"clipboard-delete": "Klemborditem verwijderen",
|
||||
"clipboard-history-disabled": "Klembordgeschiedenis uitgeschakeld",
|
||||
"clipboard-history-disabled-description": "Schakel klembordgeschiedenis in de instellingen in of installeer cliphist",
|
||||
"clipboard-loading": "Klembordgeschiedenis laden...",
|
||||
"clipboard-loading-description": "Even geduld",
|
||||
"clipboard-search-description": "Zoek in klembordgeschiedenis",
|
||||
"command": "Commando",
|
||||
"command-description": "Shell-opdrachten uitvoeren",
|
||||
"command-name": "Commando",
|
||||
"emoji": "Emoji-kiezer",
|
||||
"emoji-loading": "Emoji's laden...",
|
||||
"emoji-loading-description": "Even geduld",
|
||||
"emoji-no-recent": "Nog geen recente emoji's.",
|
||||
"emoji-search-description": "Zoek en kopieer emoji's"
|
||||
},
|
||||
"unpin": "Losmaken"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -752,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "Systeemuitvoer + microfooninvoer",
|
||||
"microphone-input": "Microfooninvoer",
|
||||
"none": "Geen audio",
|
||||
"system-output": "Systeemuitvoer"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -774,6 +836,10 @@
|
||||
"hover": "Scrollen bij hover",
|
||||
"never": "Nooit scrollen"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "Raster",
|
||||
"single-row": "Enkele rij"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "Paneel bevestigd aan de balk",
|
||||
"centered": "Gecentreerd paneel",
|
||||
@@ -823,31 +889,6 @@
|
||||
"select": "Selecteren",
|
||||
"test": "Test"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "Applicaties",
|
||||
"calculator": "Rekenmachine",
|
||||
"calculator-description": "Rekenmachine — bereken wiskundige expressies",
|
||||
"calculator-enter-expression": "Voer een wiskundige expressie in",
|
||||
"calculator-error": "Fout",
|
||||
"calculator-name": "Rekenmachine",
|
||||
"clipboard": "Klembordgeschiedenis",
|
||||
"clipboard-clear-description": "Klembordgeschiedenis wissen",
|
||||
"clipboard-clear-description-full": "Alle items uit de klembordgeschiedenis verwijderen",
|
||||
"clipboard-clear-history": "Klembordgeschiedenis wissen",
|
||||
"clipboard-delete": "Klemborditem verwijderen",
|
||||
"clipboard-history-disabled": "Klembordgeschiedenis uitgeschakeld",
|
||||
"clipboard-history-disabled-description": "Schakel klembordgeschiedenis in de instellingen in of installeer cliphist",
|
||||
"clipboard-loading": "Klembordgeschiedenis laden...",
|
||||
"clipboard-loading-description": "Even geduld",
|
||||
"clipboard-search-description": "Zoek in klembordgeschiedenis",
|
||||
"command": "Commando",
|
||||
"command-description": "Shell-opdrachten uitvoeren",
|
||||
"command-name": "Commando",
|
||||
"emoji": "Emoji-kiezer",
|
||||
"emoji-loading": "Emoji's laden...",
|
||||
"emoji-loading-description": "Even geduld",
|
||||
"emoji-search-description": "Zoek en kopieer emoji's"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1125,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "Leidt kleuren af die nauw aansluiten bij de onderliggende afbeelding.",
|
||||
"scheme-expressive": "Levendig palet met speelse verzadiging.",
|
||||
"scheme-fidelity": "Palet met hoge getrouwheid dat brontinten behoudt.",
|
||||
"scheme-fruit-salad": "Kleurrijke mix van heldere contrasterende accenten.",
|
||||
"scheme-monochrome": "Minimaal palet rond één enkele tint.",
|
||||
"scheme-neutral": "Gedempt palet met rustige, verzachte tonen.",
|
||||
"scheme-rainbow": "Gevarieerd palet dat het volledige spectrum bestrijkt.",
|
||||
"scheme-tonal-spot": "Gebalanceerd palet met gefocuste accenten."
|
||||
},
|
||||
"description": "Kies de methode voor het genereren van kleurenschema's die Matugen zal gebruiken om kleuren te maken van je achtergrond.",
|
||||
"label": "Matugen-schema type"
|
||||
},
|
||||
"section": {
|
||||
@@ -1268,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "Schrijf {filepath} en herlaad"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "Schrijf {filepath}; kopieer naar het chrome/userChrome.css bestand van je Zen profiel."
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1786,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "Commando dat wordt uitgevoerd bij het klikken op de annotatieknop in de klembordgeschiedenis. De afbeelding wordt naar dit commando gepiped.",
|
||||
"label": "Annotatietool",
|
||||
"placeholder": "e.g. 'gradia', 'satty -f -'"
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": "Toon een voorbeeld van de inhoud van het klembord bij gebruik van het >clip-commando.",
|
||||
"label": "Klembordvoorbeeld inschakelen"
|
||||
@@ -1826,6 +1866,10 @@
|
||||
"description": "Categorieën-tabbladen weergeven voor het filteren van applicaties.",
|
||||
"label": "Categorieën weergeven"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "Toon een afgeronde rechthoek achtergrond achter pictogrammen.",
|
||||
"label": "Toon pictogramachtergrond"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "Indien ingeschakeld, verschijnen vaak gestarte apps bovenaan in de lijst.",
|
||||
"label": "Sorteren op meest gebruikt"
|
||||
@@ -1940,7 +1984,11 @@
|
||||
"network": {
|
||||
"bluetooth": {
|
||||
"description": "Bluetooth-beheer activeren.",
|
||||
"label": "Bluetooth inschakelen"
|
||||
"label": "Bluetooth inschakelen",
|
||||
"rssi-polling": {
|
||||
"description": "Periodiek de RSSI bemonsteren voor verbonden apparaten via bluetoothctl. Mogelijk niet beschikbaar voor alle apparaten; gebruikt minimale resources wanneer ingeschakeld.",
|
||||
"label": "Bluetooth-signaalpolling"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"description": "Beheer Wi-Fi- en Bluetooth-verbindingen."
|
||||
@@ -2171,6 +2219,11 @@
|
||||
"no-plugins-description": "Controleer je plugin-bronnen of vernieuw de lijst.",
|
||||
"no-plugins-label": "Geen plug-ins beschikbaar"
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "Deze plugin is al geïnstalleerd.",
|
||||
"custom-version-exists": "Er is al een aangepaste versie van \"{source}\" geïnstalleerd.",
|
||||
"official-version-exists": "De officiële versie van deze plugin is al geïnstalleerd."
|
||||
},
|
||||
"filter": {
|
||||
"all": "Alles",
|
||||
"downloaded": "Gedownload",
|
||||
@@ -2191,6 +2244,7 @@
|
||||
"no-plugins-label": "Geen plugins geïnstalleerd"
|
||||
},
|
||||
"installing": "{plugin} installeren...",
|
||||
"open-plugins-tab": "Open plugininstellingen",
|
||||
"plugin-settings-title": "{plugin} Instellingen",
|
||||
"refresh": {
|
||||
"refreshing": "Pluginlijst vernieuwen...",
|
||||
@@ -2201,6 +2255,10 @@
|
||||
},
|
||||
"settings-error-not-loaded": "Plugin niet geladen",
|
||||
"settings-saved": "Plugininstellingen opgeslagen",
|
||||
"source": {
|
||||
"custom": "Aangepaste bron",
|
||||
"official": "Officieel"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "Aangepaste repository toevoegen",
|
||||
"add-dialog": {
|
||||
@@ -2232,8 +2290,10 @@
|
||||
"update-all": "Alles bijwerken ({count})",
|
||||
"update-all-success": "Alle plugins succesvol bijgewerkt",
|
||||
"update-available": "{count} plugin(s) update(s) beschikbaar",
|
||||
"update-available_plural": "{count} plugin updates beschikbaar",
|
||||
"update-error": "Plugin bijwerken mislukt: {plugin}: {error}",
|
||||
"update-incompatible": "Vereist Noctalia v{version} of hoger",
|
||||
"update-pending": "v{current} → v{new} (vereist Noctalia v{required})",
|
||||
"update-success": "{plugin} is bijgewerkt naar v{version}",
|
||||
"update-version": "v{huidig} → v{nieuw}",
|
||||
"updating": "Bezig met updaten..."
|
||||
@@ -2339,6 +2399,10 @@
|
||||
"label": "Algemeen"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "Kies hoe sessiemenuknoppen worden weergegeven.",
|
||||
"label": "Lay-out met grote knoppen"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "Toon het sessiemenu met grote knoppen in een rasterindeling.",
|
||||
"label": "Stijl met grote knoppen"
|
||||
@@ -2395,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "Markeerkleuren"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "Gemiddelde belasting"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "Geheugengebruik"
|
||||
},
|
||||
@@ -2438,6 +2505,10 @@
|
||||
"label": "Animatiesnelheid",
|
||||
"reset": "Animatiesnelheid resetten"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "Toont een omlijning rond inhoudsgebieden.",
|
||||
"label": "Containeromtrek"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "Past de hoekronding aan van belangrijke lay-outsecties, zoals zijbalken, kaarten en inhoudspanelen.",
|
||||
"label": "Container Radius",
|
||||
@@ -2564,8 +2635,8 @@
|
||||
"tooltip": "Achtergrondmap"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "Verberg de bestandsnamen van de achtergrond in de selector.",
|
||||
"label": "Bestandsnamen verbergen"
|
||||
"tooltip-hide": "Bestandsnamen verbergen",
|
||||
"tooltip-show": "Bestandsnamen weergeven"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "Stel een andere achtergrondmap in voor elke monitor.",
|
||||
@@ -2648,6 +2719,7 @@
|
||||
"download": "Downloaden",
|
||||
"download-speed": "Downloadsnelheid",
|
||||
"gpu-temp": "GPU-temperatuur",
|
||||
"load-average": "Gemiddelde belasting",
|
||||
"memory": "Geheugen",
|
||||
"title": "Systeemmonitor",
|
||||
"upload": "Uploaden",
|
||||
@@ -2664,6 +2736,7 @@
|
||||
"low-desc": "De batterij is op {percent}%. Sluit de oplader aan."
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Adres gekopieerd naar klembord",
|
||||
"confirm-code": "Bevestig code {value} op het andere apparaat",
|
||||
"connect-failed": "Verbinding met apparaat mislukt",
|
||||
"disabled": "Uitgeschakeld",
|
||||
@@ -2706,7 +2779,8 @@
|
||||
"enabled": "\"Wakker houden\" ingeschakeld"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "Toetsenbordindeling gewijzigd naar {layout}"
|
||||
"changed": "Toetsenbordindeling gewijzigd naar {layout}",
|
||||
"title": "Toetsenbord"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "Ko-fi-pagina geopend in je browser"
|
||||
@@ -2780,6 +2854,7 @@
|
||||
"close": "Sluiten",
|
||||
"collapse": "Zijbalk inklappen",
|
||||
"connect-disconnect-devices": "Bluetooth-apparaat",
|
||||
"copy-address": "Adres kopiëren",
|
||||
"delete-notification": "Melding verwijderen",
|
||||
"disable-keep-awake": "Wakker houden",
|
||||
"do-not-disturb-disabled": "Niet storen",
|
||||
@@ -2798,10 +2873,12 @@
|
||||
"list-view": "Lijstweergave",
|
||||
"manage-vpn": "VPN-verbindingen",
|
||||
"manage-wifi": "Wi-Fi",
|
||||
"max-widgets-reached": "Maximum aantal widgets bereikt.",
|
||||
"microphone-volume-at": "Microfoonvolume: {volume}%",
|
||||
"move-to-center-section": "Middelste sectie",
|
||||
"move-to-left-section": "Linker sectie",
|
||||
"move-to-right-section": "Rechter sectie",
|
||||
"move-to-section": "Ga naar {section}",
|
||||
"mute": "Dempen",
|
||||
"next-media": "Volgende track",
|
||||
"next-month": "Volgende maand",
|
||||
@@ -2811,6 +2888,7 @@
|
||||
"night-light-not-installed": "Nachtlicht (niet beschikbaar)",
|
||||
"noctalia-performance-disabled": "Noctalia-prestatiemodus",
|
||||
"noctalia-performance-enabled": "Noctalia-prestatiemodus",
|
||||
"open-annotation-tool": "Openen met annotatietool",
|
||||
"open-control-center": "Bedieningscentrum",
|
||||
"open-notification-history-disable-dnd": "Meldingsgeschiedenis",
|
||||
"open-notification-history-enable-dnd": "Meldingsgeschiedenis",
|
||||
@@ -2858,6 +2936,7 @@
|
||||
"apikey": {
|
||||
"help": "Een API-sleutel is vereist om toegang te krijgen tot NSFW-content.",
|
||||
"label": "API-sleutel",
|
||||
"managed-by-env": "Beheerd via de NOCTALIA_WALLHAVEN_API_KEY omgevingsvariabele.",
|
||||
"placeholder": "Voer uw Wallhaven API-sleutel in"
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2895,6 +2974,9 @@
|
||||
}
|
||||
},
|
||||
"search": "Zoeken:",
|
||||
"solid-color": {
|
||||
"tooltip": "Effen kleur achtergrond"
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "Datum toegevoegd",
|
||||
"favorites": "Favorieten",
|
||||
@@ -2943,6 +3025,11 @@
|
||||
"thunderstorm": "Onweer",
|
||||
"unknown": "Onbekend"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "Selecteer een bestand"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "Toepassen",
|
||||
@@ -3027,11 +3114,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "Actie vereist",
|
||||
"available-interfaces": "Beschikbare interfaces",
|
||||
"available-networks": "Beschikbare netwerken",
|
||||
"connect": "Verbinden",
|
||||
"connected": "Verbonden",
|
||||
"disabled": "Wi-Fi is uitgeschakeld",
|
||||
"disconnect": "Verbreken",
|
||||
"disconnected": "Verbinding verbroken",
|
||||
"disconnecting": "Verbreken...",
|
||||
"dns": "DNS",
|
||||
"enable-message": "Schakel Wi-Fi in om beschikbare netwerken te zien.",
|
||||
@@ -3042,12 +3131,15 @@
|
||||
"frequency": "Frequentie",
|
||||
"gateway": "Poort",
|
||||
"info": "Info",
|
||||
"interface": "Netwerkinterface",
|
||||
"internet": "Internet",
|
||||
"internet-connected": "Verbonden met internet",
|
||||
"internet-limited": "Geen internet",
|
||||
"internet-status": "Internetstatus",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "Bekende netwerken",
|
||||
"link-speed": "Link snelheid",
|
||||
"no-ethernet-devices": "Geen Ethernet-apparaten gedetecteerd",
|
||||
"no-networks": "Geen netwerken gevonden",
|
||||
"password": "Wachtwoord",
|
||||
"saved": "Opgeslagen",
|
||||
|
||||
+132
-40
@@ -142,12 +142,20 @@
|
||||
"description": "Jeśli tekst wyjściowy pasuje do tej wartości, przycisk zostanie zwinięty.",
|
||||
"label": "Warunek zwinięcia"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "Zastosuj kolory motywu do ikony i tekstu.",
|
||||
"label": "Wybierz kolor"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "Wpisz polecenie do uruchamiania w regularnych odstępach czasu. Pierwsza linia wyniku zostanie wyświetlona jako tekst.",
|
||||
"label": "Wyświetl wynik polecenia",
|
||||
"stream-description": "Wpisz polecenie do uruchamiania w trybie ciągłym."
|
||||
},
|
||||
"dynamic-text": "Dynamiczny tekst",
|
||||
"enable-colorization": {
|
||||
"description": "Włącz kolorowanie ikony i tekstu niestandardowego przycisku, stosując kolory motywu.",
|
||||
"label": "Włącz kolorowanie"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "Zawsze rozwinięty",
|
||||
"description": "Kontroluje widoczność widżetu, gdy polecenie nie zwraca wyniku.",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "Wybierz sposób wyświetlania tej wartości.",
|
||||
"label": "Tryb wyświetlania"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "Wyświetl ikonę układu klawiatury.",
|
||||
"label": "Pokaż ikonę"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "Po włączeniu, stosuje kolor podstawowy dla podkreślenia.",
|
||||
"label": "Użyj koloru podstawowego."
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,6 +345,10 @@
|
||||
"description": "Pokaż odczyty temperatury GPU (jeśli dostępne).",
|
||||
"label": "Temperatura GPU"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "Wyświetl średnie obciążenie systemu.",
|
||||
"label": "Średnie obciążenie"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "Pokaż użycie pamięci w procentach zamiast wartości bezwzględnych.",
|
||||
"label": "Pamięć w procentach"
|
||||
@@ -481,6 +503,7 @@
|
||||
"device-address": "Adres urządzenia",
|
||||
"disabled": "Bluetooth jest wyłączony",
|
||||
"disconnect": "Odłącz",
|
||||
"disconnecting": "Rozłączanie...",
|
||||
"discoverable": "Wykrywalny",
|
||||
"enable-message": "Włącz Bluetooth, aby zobaczyć dostępne urządzenia.",
|
||||
"info": "Informacje",
|
||||
@@ -494,6 +517,14 @@
|
||||
"refresh-devices": "Odśwież urządzenia",
|
||||
"scanning": "Skanowanie urządzeń...",
|
||||
"signal": "Sygnał",
|
||||
"signal-text": {
|
||||
"excellent": "Sygnał: Doskonały",
|
||||
"fair": "Sygnał: Dobry",
|
||||
"good": "Sygnał: Dobry",
|
||||
"poor": "Sygnał: Słaby",
|
||||
"unknown": "Sygnał: Nieznany",
|
||||
"very-poor": "Sygnał: Bardzo słaby"
|
||||
},
|
||||
"title": "Bluetooth",
|
||||
"trusted": "Zaufany",
|
||||
"unpair": "Rozłącz"
|
||||
@@ -529,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "Dołącz do Discorda",
|
||||
"dismiss": "Ok"
|
||||
"dismiss": "Ok",
|
||||
"feedback": "Przekaż opinię."
|
||||
},
|
||||
"empty": "Informacje o wydaniu nie są jeszcze dostępne.",
|
||||
"highlight-title": "Najważniejsze zmiany",
|
||||
@@ -573,6 +605,7 @@
|
||||
"enable-bluetooth": "Włącz Bluetooth",
|
||||
"enable-dnd": "Włącz Nie przeszkadzać",
|
||||
"enable-wifi": "Włącz Wi-Fi",
|
||||
"launcher-settings": "Ustawienia programu uruchamiającego",
|
||||
"lower-to-bottom": "Opuść na dół.",
|
||||
"next": "Następny",
|
||||
"open-calendar": "Otwórz kalendarz",
|
||||
@@ -631,7 +664,35 @@
|
||||
"webbrowser": "Przeglądarka www"
|
||||
},
|
||||
"delete": "Usuń",
|
||||
"no-results": "Nie znaleziono wyników.",
|
||||
"pin": "Przypnij",
|
||||
"providers": {
|
||||
"applications": "Aplikacje",
|
||||
"calculator": "Kalkulator",
|
||||
"calculator-deprecated": "Polecenie >calc jest przestarzałe i wkrótce zostanie usunięte. Zamiast tego wpisuj wyrażenia matematyczne bezpośrednio w wyszukiwarce.",
|
||||
"calculator-description": "Kalkulator — obliczaj wyrażenia matematyczne",
|
||||
"calculator-enter-expression": "Wpisz wyrażenie matematyczne",
|
||||
"calculator-error": "Błąd",
|
||||
"calculator-name": "Kalkulator",
|
||||
"clipboard": "Historia schowka",
|
||||
"clipboard-clear-description": "Wyczyść całą historię schowka",
|
||||
"clipboard-clear-description-full": "Usuń wszystkie elementy z historii schowka",
|
||||
"clipboard-clear-history": "Wyczyść historię schowka",
|
||||
"clipboard-delete": "Usuń wpis ze schowka",
|
||||
"clipboard-history-disabled": "Historia schowka wyłączona",
|
||||
"clipboard-history-disabled-description": "Włącz historię schowka w ustawieniach lub zainstaluj cliphist",
|
||||
"clipboard-loading": "Ładowanie historii schowka...",
|
||||
"clipboard-loading-description": "Proszę czekać",
|
||||
"clipboard-search-description": "Szukaj w historii schowka",
|
||||
"command": "Polecenie",
|
||||
"command-description": "Uruchamiaj polecenia powłoki",
|
||||
"command-name": "Polecenie",
|
||||
"emoji": "Wybór Emoji",
|
||||
"emoji-loading": "Ładowanie emoji...",
|
||||
"emoji-loading-description": "Proszę czekać",
|
||||
"emoji-no-recent": "Brak ostatnich emoji.",
|
||||
"emoji-search-description": "Szukaj i kopiuj emoji"
|
||||
},
|
||||
"unpin": "Odepnij"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -752,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "Wyjście systemowe + mikrofon",
|
||||
"microphone-input": "Wejście mikrofonu",
|
||||
"none": "Brak dźwięku.",
|
||||
"system-output": "Wyjście systemowe"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -774,6 +836,10 @@
|
||||
"hover": "Przewijaj po najechaniu",
|
||||
"never": "Nigdy nie przewijaj"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "Siatka",
|
||||
"single-row": "Pojedynczy wiersz"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "Panel przypięty do paska",
|
||||
"centered": "Panel wyśrodkowany",
|
||||
@@ -823,31 +889,6 @@
|
||||
"select": "Wybierz",
|
||||
"test": "Test"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "Aplikacje",
|
||||
"calculator": "Kalkulator",
|
||||
"calculator-description": "Kalkulator — obliczaj wyrażenia matematyczne",
|
||||
"calculator-enter-expression": "Wpisz wyrażenie matematyczne",
|
||||
"calculator-error": "Błąd",
|
||||
"calculator-name": "Kalkulator",
|
||||
"clipboard": "Historia schowka",
|
||||
"clipboard-clear-description": "Wyczyść całą historię schowka",
|
||||
"clipboard-clear-description-full": "Usuń wszystkie elementy z historii schowka",
|
||||
"clipboard-clear-history": "Wyczyść historię schowka",
|
||||
"clipboard-delete": "Usuń wpis ze schowka",
|
||||
"clipboard-history-disabled": "Historia schowka wyłączona",
|
||||
"clipboard-history-disabled-description": "Włącz historię schowka w ustawieniach lub zainstaluj cliphist",
|
||||
"clipboard-loading": "Ładowanie historii schowka...",
|
||||
"clipboard-loading-description": "Proszę czekać",
|
||||
"clipboard-search-description": "Szukaj w historii schowka",
|
||||
"command": "Polecenie",
|
||||
"command-description": "Uruchamiaj polecenia powłoki",
|
||||
"command-name": "Polecenie",
|
||||
"emoji": "Wybór Emoji",
|
||||
"emoji-loading": "Ładowanie emoji...",
|
||||
"emoji-loading-description": "Proszę czekać",
|
||||
"emoji-search-description": "Szukaj i kopiuj emoji"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1125,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "Generuje kolory ściśle dopasowane do obrazu.",
|
||||
"scheme-expressive": "Żywa paleta z radosnym nasyceniem.",
|
||||
"scheme-fidelity": "Paleta o wysokiej wierności, zachowująca oryginalne odcienie.",
|
||||
"scheme-fruit-salad": "Kolorowa mieszanka jasnych, kontrastujących akcentów.",
|
||||
"scheme-monochrome": "Minimalistyczna paleta zbudowana wokół jednego odcienia.",
|
||||
"scheme-neutral": "Stonowana paleta ze spokojnymi barwami.",
|
||||
"scheme-rainbow": "Różnorodna paleta obejmująca pełne spektrum.",
|
||||
"scheme-tonal-spot": "Zrównoważona paleta ze skupionymi akcentami."
|
||||
},
|
||||
"description": "Wybierz metodę generowania schematu kolorów, której Matugen użyje do tworzenia kolorów z Twojej tapety.",
|
||||
"label": "Typ schematu Matugen"
|
||||
},
|
||||
"section": {
|
||||
@@ -1268,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "Zapisz {filepath} i przeładuj"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "Zapisz w {filepath}; skopiuj do chrome/userChrome.css w swoim profilu Zen."
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1786,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "Komenda do uruchomienia po kliknięciu przycisku adnotacji w historii schowka. Obraz zostanie przekazany do tej komendy.",
|
||||
"label": "Narzędzie do adnotacji",
|
||||
"placeholder": "Przepraszam, nie rozumiem. Proszę podać tekst do przetłumaczenia."
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": "Pokaż podgląd zawartości schowka przy użyciu polecenia >clip.",
|
||||
"label": "Włącz podgląd schowka"
|
||||
@@ -1826,6 +1866,10 @@
|
||||
"description": "Pokaż karty kategorii do filtrowania aplikacji.",
|
||||
"label": "Pokaż kategorie"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "Pokaż zaokrąglone tło prostokątne za ikonami.",
|
||||
"label": "Pokaż tło ikony"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "Gdy włączone, najczęściej uruchamiane aplikacje pojawiają się na początku listy.",
|
||||
"label": "Sortuj według użycia"
|
||||
@@ -1940,7 +1984,11 @@
|
||||
"network": {
|
||||
"bluetooth": {
|
||||
"description": "Włącz zarządzanie Bluetooth.",
|
||||
"label": "Włącz Bluetooth"
|
||||
"label": "Włącz Bluetooth",
|
||||
"rssi-polling": {
|
||||
"description": "Okresowo próbkuje RSSI dla podłączonych urządzeń przez bluetoothctl. Może nie być dostępne dla wszystkich urządzeń; zużywa minimalne zasoby, gdy jest włączone.",
|
||||
"label": "Odpytywanie sygnału Bluetooth"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"description": "Zarządzaj połączeniami Wi-Fi i Bluetooth."
|
||||
@@ -2171,6 +2219,11 @@
|
||||
"no-plugins-description": "Sprawdź źródła wtyczek lub odśwież listę.",
|
||||
"no-plugins-label": "Brak dostępnych wtyczek"
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "Ta wtyczka jest już zainstalowana.",
|
||||
"custom-version-exists": "Niestandardowa wersja z \"{source}\" jest już zainstalowana.",
|
||||
"official-version-exists": "Oficjalna wersja tej wtyczki jest już zainstalowana."
|
||||
},
|
||||
"filter": {
|
||||
"all": "Wszystkie",
|
||||
"downloaded": "Pobrane",
|
||||
@@ -2191,6 +2244,7 @@
|
||||
"no-plugins-label": "Brak zainstalowanych wtyczek"
|
||||
},
|
||||
"installing": "Instalowanie {plugin}...",
|
||||
"open-plugins-tab": "Otwórz ustawienia wtyczek",
|
||||
"plugin-settings-title": "Ustawienia {plugin}",
|
||||
"refresh": {
|
||||
"refreshing": "Odświeżanie listy wtyczek...",
|
||||
@@ -2201,6 +2255,10 @@
|
||||
},
|
||||
"settings-error-not-loaded": "Wtyczka nie została załadowana",
|
||||
"settings-saved": "Ustawienia wtyczki zapisane",
|
||||
"source": {
|
||||
"custom": "Źródło niestandardowe",
|
||||
"official": "Oficjalny"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "Dodaj własne repozytorium",
|
||||
"add-dialog": {
|
||||
@@ -2232,8 +2290,10 @@
|
||||
"update-all": "Aktualizuj wszystkie ({count})",
|
||||
"update-all-success": "Wszystkie wtyczki zaktualizowane pomyślnie",
|
||||
"update-available": "Dostępne aktualizacje dla {count} wtyczek",
|
||||
"update-available_plural": "Dostępne aktualizacje wtyczek: {count}",
|
||||
"update-error": "Błąd aktualizacji wtyczki {plugin}: {error}",
|
||||
"update-incompatible": "Wymaga Noctalia v{version} lub nowszej",
|
||||
"update-pending": "v{bieżąca} → v{nowa} (wymaga Noctalii v{wymagana})",
|
||||
"update-success": "Zaktualizowano {plugin} do v{version}",
|
||||
"update-version": "v{current} → v{new}",
|
||||
"updating": "Aktualizowanie {plugin}..."
|
||||
@@ -2339,6 +2399,10 @@
|
||||
"label": "Ogólne"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "Wybierz sposób wyświetlania przycisków menu sesji.",
|
||||
"label": "Układ z dużymi przyciskami"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "Wyświetlaj menu sesji z dużymi przyciskami w układzie siatki.",
|
||||
"label": "Styl dużych przycisków"
|
||||
@@ -2395,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "Kolory podświetlenia"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "Średnie obciążenie"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "Użycie pamięci"
|
||||
},
|
||||
@@ -2438,6 +2505,10 @@
|
||||
"label": "Prędkość animacji",
|
||||
"reset": "Resetuj prędkość animacji"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "Wyświetla obrys wokół obszarów zawartości.",
|
||||
"label": "Obrys kontenera"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "Dostosowuje zaokrąglenie narożników głównych sekcji układu, takich jak paski boczne, karty i panele treści.",
|
||||
"label": "Promień kontenerów",
|
||||
@@ -2564,8 +2635,8 @@
|
||||
"tooltip": "Folder tapet"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "Ukryj nazwy plików tapet w selektorze.",
|
||||
"label": "Ukryj nazwy plików"
|
||||
"tooltip-hide": "Ukryj nazwy plików",
|
||||
"tooltip-show": "Pokaż nazwy plików"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "Ustaw inny folder tapet dla każdego monitora.",
|
||||
@@ -2648,6 +2719,7 @@
|
||||
"download": "Pobierz",
|
||||
"download-speed": "Prędkość pobierania",
|
||||
"gpu-temp": "Temperatura GPU",
|
||||
"load-average": "Średnie obciążenie",
|
||||
"memory": "Pamięć",
|
||||
"title": "Monitor systemu",
|
||||
"upload": "Prześlij",
|
||||
@@ -2664,6 +2736,7 @@
|
||||
"low-desc": "Poziom baterii wynosi {percent}%. Podłącz ładowarkę."
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Adres skopiowany do schowka.",
|
||||
"confirm-code": "Potwierdź kod {value} na drugim urządzeniu.",
|
||||
"connect-failed": "Nie udało się połączyć z urządzeniem.",
|
||||
"disabled": "Wyłączony",
|
||||
@@ -2706,7 +2779,8 @@
|
||||
"enabled": "Włączone"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "Układ klawiatury zmieniony na {layout}"
|
||||
"changed": "Układ klawiatury zmieniony na {layout}",
|
||||
"title": "Klawiatura"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "Strona Ko-fi otwarta w przeglądarce"
|
||||
@@ -2780,6 +2854,7 @@
|
||||
"close": "Zamknij",
|
||||
"collapse": "Zwiń pasek boczny",
|
||||
"connect-disconnect-devices": "Urządzenie Bluetooth",
|
||||
"copy-address": "Kopiuj adres",
|
||||
"delete-notification": "Usuń powiadomienie",
|
||||
"disable-keep-awake": "Nie usypiaj",
|
||||
"do-not-disturb-disabled": "Nie przeszkadzać",
|
||||
@@ -2798,10 +2873,12 @@
|
||||
"list-view": "Widok listy",
|
||||
"manage-vpn": "Połączenia VPN",
|
||||
"manage-wifi": "Wi-Fi",
|
||||
"max-widgets-reached": "Osiągnięto maksymalną liczbę widżetów.",
|
||||
"microphone-volume-at": "Głośność mikrofonu: {volume}%",
|
||||
"move-to-center-section": "Sekcja środkowa",
|
||||
"move-to-left-section": "Sekcja lewa",
|
||||
"move-to-right-section": "Sekcja prawa",
|
||||
"move-to-section": "Przejdź do {sekcja}",
|
||||
"mute": "Wycisz",
|
||||
"next-media": "Następny utwór",
|
||||
"next-month": "Następny miesiąc",
|
||||
@@ -2811,6 +2888,7 @@
|
||||
"night-light-not-installed": "Podświetlenie nocne (niedostępne)",
|
||||
"noctalia-performance-disabled": "Tryb wydajności Noctalia",
|
||||
"noctalia-performance-enabled": "Tryb wydajności Noctalia",
|
||||
"open-annotation-tool": "Otwórz za pomocą narzędzia do adnotacji.",
|
||||
"open-control-center": "Centrum sterowania",
|
||||
"open-notification-history-disable-dnd": "Historia powiadomień",
|
||||
"open-notification-history-enable-dnd": "Historia powiadomień",
|
||||
@@ -2858,6 +2936,7 @@
|
||||
"apikey": {
|
||||
"help": "Do dostępu do treści NSFW wymagany jest klucz API.",
|
||||
"label": "Klucz API",
|
||||
"managed-by-env": "Zarządzane za pomocą zmiennej środowiskowej NOCTALIA_WALLHAVEN_API_KEY.",
|
||||
"placeholder": "Wprowadź swój klucz API Wallhaven."
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2895,6 +2974,9 @@
|
||||
}
|
||||
},
|
||||
"search": "Szukaj",
|
||||
"solid-color": {
|
||||
"tooltip": "Jednolite tło kolorystyczne."
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "Data dodania",
|
||||
"favorites": "Ulubione",
|
||||
@@ -2943,6 +3025,11 @@
|
||||
"thunderstorm": "Burza",
|
||||
"unknown": "Nieznane"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "Wybierz plik"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "Zastosuj",
|
||||
@@ -3027,11 +3114,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "Wymagane działanie.",
|
||||
"available-interfaces": "Dostępne interfejsy",
|
||||
"available-networks": "Dostępne sieci",
|
||||
"connect": "Połącz",
|
||||
"connected": "Połączono",
|
||||
"disabled": "Wi-Fi jest wyłączone",
|
||||
"disconnect": "Odłącz",
|
||||
"disconnected": "Rozłączony",
|
||||
"disconnecting": "Rozłączanie...",
|
||||
"dns": "DNS",
|
||||
"enable-message": "Włącz Wi-Fi, aby zobaczyć dostępne sieci.",
|
||||
@@ -3042,12 +3131,15 @@
|
||||
"frequency": "Częstotliwość",
|
||||
"gateway": "Brama",
|
||||
"info": "Informacje",
|
||||
"interface": "Interfejs sieciowy",
|
||||
"internet": "Internet",
|
||||
"internet-connected": "Połączony z internetem",
|
||||
"internet-limited": "Brak internetu",
|
||||
"internet-status": "Status internetu",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "Znane sieci",
|
||||
"link-speed": "Prędkość łącza",
|
||||
"no-ethernet-devices": "Nie wykryto żadnych urządzeń Ethernet.",
|
||||
"no-networks": "Nie znaleziono żadnych sieci",
|
||||
"password": "Hasło",
|
||||
"saved": "Zapisano",
|
||||
|
||||
+132
-40
@@ -142,12 +142,20 @@
|
||||
"description": "Se o texto de saída corresponder a este valor, o botão será recolhido.",
|
||||
"label": "Condição de recolhimento"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "Aplicar cores do tema ao ícone e ao texto.",
|
||||
"label": "Selecionar cor"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "Digite um comando para ser executado em um intervalo regular. A primeira linha da sua saída será exibida como texto.",
|
||||
"label": "Exibir Saída de Comando",
|
||||
"stream-description": "Insira um comando para executar continuamente."
|
||||
},
|
||||
"dynamic-text": "Texto dinâmico",
|
||||
"enable-colorization": {
|
||||
"description": "Ativar colorização para o ícone e texto do botão personalizado, aplicando cores do tema.",
|
||||
"label": "Ativar colorização"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "Sempre expandido",
|
||||
"description": "Controla a visibilidade do widget quando o comando não tem saída.",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "Escolha como você gostaria que este valor aparecesse.",
|
||||
"label": "Modo de exibição"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "Exibir o ícone do layout do teclado.",
|
||||
"label": "Mostrar ícone"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "Quando ativado, aplica a cor primária para ênfase.",
|
||||
"label": "Use cores primárias"
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,6 +345,10 @@
|
||||
"description": "Mostrar as leituras de temperatura da GPU, se disponíveis.",
|
||||
"label": "Temperatura da GPU"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "Exibir média de carga do sistema.",
|
||||
"label": "Média de carga"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "Mostrar o uso de memória como percentual em vez de valores absolutos.",
|
||||
"label": "Memória como percentual"
|
||||
@@ -481,6 +503,7 @@
|
||||
"device-address": "Endereço do dispositivo",
|
||||
"disabled": "O Bluetooth está desativado",
|
||||
"disconnect": "Desconectar",
|
||||
"disconnecting": "Desconectando...",
|
||||
"discoverable": "Visível",
|
||||
"enable-message": "Ative o Bluetooth para ver os dispositivos disponíveis.",
|
||||
"info": "Informações",
|
||||
@@ -494,6 +517,14 @@
|
||||
"refresh-devices": "Atualizar dispositivos",
|
||||
"scanning": "Procurando por dispositivos...",
|
||||
"signal": "Sinal",
|
||||
"signal-text": {
|
||||
"excellent": "Sinal: Excelente",
|
||||
"fair": "Sinal: Justo",
|
||||
"good": "Sinal: Bom",
|
||||
"poor": "Sinal: Fraco",
|
||||
"unknown": "Sinal: Desconhecido",
|
||||
"very-poor": "Sinal: Muito fraco"
|
||||
},
|
||||
"title": "Bluetooth",
|
||||
"trusted": "Confiável",
|
||||
"unpair": "Desemparelhar"
|
||||
@@ -529,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "Entre no nosso Discord",
|
||||
"dismiss": "Ok"
|
||||
"dismiss": "Ok",
|
||||
"feedback": "Dar feedback"
|
||||
},
|
||||
"empty": "As notas da versão ainda não estão disponíveis.",
|
||||
"highlight-title": "Destaques",
|
||||
@@ -573,6 +605,7 @@
|
||||
"enable-bluetooth": "Ativar Bluetooth",
|
||||
"enable-dnd": "Ativar Não Perturbe",
|
||||
"enable-wifi": "Ativar Wi-Fi",
|
||||
"launcher-settings": "Configurações do iniciador",
|
||||
"lower-to-bottom": "Abaixar para o fundo",
|
||||
"next": "Próximo(a)",
|
||||
"open-calendar": "Abrir calendário",
|
||||
@@ -631,7 +664,35 @@
|
||||
"webbrowser": "Navegador web"
|
||||
},
|
||||
"delete": "Apagar",
|
||||
"no-results": "Nenhum resultado encontrado.",
|
||||
"pin": "Fixar",
|
||||
"providers": {
|
||||
"applications": "Aplicativos",
|
||||
"calculator": "Calculadora",
|
||||
"calculator-deprecated": "O comando >calc está obsoleto e será removido em breve. Por favor, digite expressões matemáticas diretamente na pesquisa.",
|
||||
"calculator-description": "Calculadora — avalie expressões matemáticas",
|
||||
"calculator-enter-expression": "Digite uma expressão matemática",
|
||||
"calculator-error": "Erro",
|
||||
"calculator-name": "Calculadora",
|
||||
"clipboard": "Histórico da área de transferência",
|
||||
"clipboard-clear-description": "Limpar todo o histórico da área de transferência",
|
||||
"clipboard-clear-description-full": "Remover todos os itens do histórico da área de transferência",
|
||||
"clipboard-clear-history": "Limpar histórico da área de transferência",
|
||||
"clipboard-delete": "Apagar entrada da área de transferência",
|
||||
"clipboard-history-disabled": "Histórico da área de transferência desativado",
|
||||
"clipboard-history-disabled-description": "Ative o histórico da área de transferência nas configurações ou instale o cliphist",
|
||||
"clipboard-loading": "Carregando histórico da área de transferência...",
|
||||
"clipboard-loading-description": "Por favor, aguarde",
|
||||
"clipboard-search-description": "Pesquisar no histórico da área de transferência",
|
||||
"command": "Comando",
|
||||
"command-description": "Executar comandos shell",
|
||||
"command-name": "Comando",
|
||||
"emoji": "Seletor de emojis",
|
||||
"emoji-loading": "Carregando emojis...",
|
||||
"emoji-loading-description": "Por favor, aguarde",
|
||||
"emoji-no-recent": "Ainda não há emojis recentes.",
|
||||
"emoji-search-description": "Buscar e copiar emojis"
|
||||
},
|
||||
"unpin": "Desafixar"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -752,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "Saída do sistema + entrada do microfone",
|
||||
"microphone-input": "Entrada do microfone",
|
||||
"none": "No audio",
|
||||
"system-output": "Saída do sistema"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -774,6 +836,10 @@
|
||||
"hover": "Rolar ao Passar o Mouse",
|
||||
"never": "Nunca Rolar"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "Grade",
|
||||
"single-row": "Linha Única"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "Painel anexado à barra",
|
||||
"centered": "Painel centralizado",
|
||||
@@ -823,31 +889,6 @@
|
||||
"select": "Selecionar",
|
||||
"test": "Testar"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "Aplicativos",
|
||||
"calculator": "Calculadora",
|
||||
"calculator-description": "Calculadora — avalie expressões matemáticas",
|
||||
"calculator-enter-expression": "Digite uma expressão matemática",
|
||||
"calculator-error": "Erro",
|
||||
"calculator-name": "Calculadora",
|
||||
"clipboard": "Histórico da área de transferência",
|
||||
"clipboard-clear-description": "Limpar todo o histórico da área de transferência",
|
||||
"clipboard-clear-description-full": "Remover todos os itens do histórico da área de transferência",
|
||||
"clipboard-clear-history": "Limpar histórico da área de transferência",
|
||||
"clipboard-delete": "Apagar entrada da área de transferência",
|
||||
"clipboard-history-disabled": "Histórico da área de transferência desativado",
|
||||
"clipboard-history-disabled-description": "Ative o histórico da área de transferência nas configurações ou instale o cliphist",
|
||||
"clipboard-loading": "Carregando histórico da área de transferência...",
|
||||
"clipboard-loading-description": "Por favor, aguarde",
|
||||
"clipboard-search-description": "Pesquisar no histórico da área de transferência",
|
||||
"command": "Comando",
|
||||
"command-description": "Executar comandos shell",
|
||||
"command-name": "Comando",
|
||||
"emoji": "Seletor de emojis",
|
||||
"emoji-loading": "Carregando emojis...",
|
||||
"emoji-loading-description": "Por favor, aguarde",
|
||||
"emoji-search-description": "Buscar e copiar emojis"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1125,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "Deriva cores que correspondem de perto à imagem subjacente.",
|
||||
"scheme-expressive": "Paleta vibrante com saturação divertida.",
|
||||
"scheme-fidelity": "Paleta de alta fidelidade que preserva as tonalidades originais.",
|
||||
"scheme-fruit-salad": "Mistura colorida de detalhes contrastantes e vibrantes.",
|
||||
"scheme-monochrome": "Paleta minimalista construída em torno de uma única tonalidade.",
|
||||
"scheme-neutral": "Paleta de cores neutras com tons suaves e calmantes.",
|
||||
"scheme-rainbow": "Paleta diversificada abrangendo todo o espectro.",
|
||||
"scheme-tonal-spot": "Paleta equilibrada com toques focais."
|
||||
},
|
||||
"description": "Escolha o método de geração de esquema de cores que o Matugen usará para criar cores a partir do seu papel de parede.",
|
||||
"label": "Tipo de esquema Matugen"
|
||||
},
|
||||
"section": {
|
||||
@@ -1268,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "Escrever {filepath} e recarregar"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "Escreva em {filepath}; copie para o chrome/userChrome.css do seu perfil Zen."
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1786,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "Comando para executar ao clicar no botão de anotação no histórico da área de transferência. A imagem será enviada para este comando.",
|
||||
"label": "Ferramenta de anotação",
|
||||
"placeholder": "gradia, satty -f -"
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": "Mostra uma pré-visualização do conteúdo da área de transferência ao usar o comando >clip.",
|
||||
"label": "Ativar pré-visualização da área de transferência"
|
||||
@@ -1826,6 +1866,10 @@
|
||||
"description": "Mostrar abas de categorias para filtrar aplicativos.",
|
||||
"label": "Mostrar categorias"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "Mostrar um fundo retangular arredondado atrás dos ícones.",
|
||||
"label": "Mostrar fundo do ícone"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "Quando ativado, os aplicativos mais usados aparecem primeiro na lista.",
|
||||
"label": "Ordenar por mais usados"
|
||||
@@ -1940,7 +1984,11 @@
|
||||
"network": {
|
||||
"bluetooth": {
|
||||
"description": "Ativar gerenciamento de Bluetooth.",
|
||||
"label": "Ativar Bluetooth"
|
||||
"label": "Ativar Bluetooth",
|
||||
"rssi-polling": {
|
||||
"description": "Amostre periodicamente o RSSI para dispositivos conectados via bluetoothctl. Pode não estar disponível para todos os dispositivos; usa recursos mínimos quando ativado.",
|
||||
"label": "Sondagem de sinal Bluetooth"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"description": "Gerencie conexões Wi-Fi e Bluetooth."
|
||||
@@ -2171,6 +2219,11 @@
|
||||
"no-plugins-description": "Verifique as fontes do seu plugin ou atualize a lista.",
|
||||
"no-plugins-label": "Nenhum plugin disponível."
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "Este plugin já está instalado.",
|
||||
"custom-version-exists": "Uma versão personalizada de \"{source}\" já está instalada.",
|
||||
"official-version-exists": "A versão oficial deste plugin já está instalada."
|
||||
},
|
||||
"filter": {
|
||||
"all": "Tudo",
|
||||
"downloaded": "Baixado",
|
||||
@@ -2191,6 +2244,7 @@
|
||||
"no-plugins-label": "Nenhum plugin instalado"
|
||||
},
|
||||
"installing": "Instalando {plugin}...",
|
||||
"open-plugins-tab": "Abrir configurações de plugins",
|
||||
"plugin-settings-title": "Configurações do {plugin}",
|
||||
"refresh": {
|
||||
"refreshing": "Atualizando a lista de plugins...",
|
||||
@@ -2201,6 +2255,10 @@
|
||||
},
|
||||
"settings-error-not-loaded": "Plugin não carregado",
|
||||
"settings-saved": "Configurações do plugin salvas.",
|
||||
"source": {
|
||||
"custom": "Fonte personalizada",
|
||||
"official": "Oficial"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "Adicionar repositório personalizado",
|
||||
"add-dialog": {
|
||||
@@ -2232,8 +2290,10 @@
|
||||
"update-all": "Atualizar Tudo ({count})",
|
||||
"update-all-success": "Todos os plugins foram atualizados com sucesso.",
|
||||
"update-available": "{count} atualização(ões) de plugin disponível(eis)",
|
||||
"update-available_plural": "{count} atualizações de plugin disponíveis",
|
||||
"update-error": "Falha ao atualizar o plugin: {plugin}: {error}",
|
||||
"update-incompatible": "Requer Noctalia v{version} ou superior",
|
||||
"update-pending": "v{atual} → v{novo} (requer Noctalia v{requerida})",
|
||||
"update-success": "{plugin} atualizado para a versão {version}",
|
||||
"update-version": "v{atual} → v{novo}",
|
||||
"updating": "Atualizando..."
|
||||
@@ -2339,6 +2399,10 @@
|
||||
"label": "Geral"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "Escolha como os botões do menu de sessão são exibidos.",
|
||||
"label": "Layout de botões grandes"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "Exibir o menu de sessão com botões grandes em um layout de grade.",
|
||||
"label": "Estilo de botões grandes"
|
||||
@@ -2395,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "Cores de destaque"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "Média de carga"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "Uso de memória"
|
||||
},
|
||||
@@ -2438,6 +2505,10 @@
|
||||
"label": "Velocidade da animação",
|
||||
"reset": "Redefinir velocidade da animação"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "Exibe um contorno ao redor das áreas de conteúdo.",
|
||||
"label": "Contorno do recipiente"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "Ajusta o arredondamento dos cantos das principais seções do layout, como barras laterais, cards e painéis de conteúdo.",
|
||||
"label": "Raio do Contêiner",
|
||||
@@ -2564,8 +2635,8 @@
|
||||
"tooltip": "Pasta de papéis de parede"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "Ocultar nomes de arquivos de papel de parede no seletor.",
|
||||
"label": "Ocultar nomes de arquivos"
|
||||
"tooltip-hide": "Ocultar nomes de arquivo",
|
||||
"tooltip-show": "Mostrar nomes de arquivo"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "Defina uma pasta de papel de parede diferente para cada monitor.",
|
||||
@@ -2648,6 +2719,7 @@
|
||||
"download": "Baixar",
|
||||
"download-speed": "Velocidade de Download",
|
||||
"gpu-temp": "Temperatura da GPU",
|
||||
"load-average": "Média de carga",
|
||||
"memory": "Memória",
|
||||
"title": "Monitor do Sistema",
|
||||
"upload": "Enviar",
|
||||
@@ -2664,6 +2736,7 @@
|
||||
"low-desc": "A bateria está em {percent}%. Por favor, conecte o carregador."
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Endereço copiado para a área de transferência",
|
||||
"confirm-code": "Confirme o código {value} no outro dispositivo.",
|
||||
"connect-failed": "Falha ao conectar ao dispositivo",
|
||||
"disabled": "Desativado",
|
||||
@@ -2706,7 +2779,8 @@
|
||||
"enabled": "Ativado"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "Layout de teclado alterado para {layout}"
|
||||
"changed": "Layout de teclado alterado para {layout}",
|
||||
"title": "Teclado"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "Página do Ko-fi aberta no seu navegador"
|
||||
@@ -2780,6 +2854,7 @@
|
||||
"close": "Fechar",
|
||||
"collapse": "Recolher barra lateral",
|
||||
"connect-disconnect-devices": "Dispositivo Bluetooth",
|
||||
"copy-address": "Copiar endereço",
|
||||
"delete-notification": "Excluir notificação",
|
||||
"disable-keep-awake": "Manter acordado",
|
||||
"do-not-disturb-disabled": "Não perturbe",
|
||||
@@ -2798,10 +2873,12 @@
|
||||
"list-view": "Visualização em lista",
|
||||
"manage-vpn": "Conexões VPN",
|
||||
"manage-wifi": "Wi-Fi",
|
||||
"max-widgets-reached": "Número máximo de widgets atingido.",
|
||||
"microphone-volume-at": "Volume do microfone: {volume}%",
|
||||
"move-to-center-section": "Seção central",
|
||||
"move-to-left-section": "Seção esquerda",
|
||||
"move-to-right-section": "Seção direita",
|
||||
"move-to-section": "Mover para {section}",
|
||||
"mute": "Silenciar",
|
||||
"next-media": "Próxima faixa",
|
||||
"next-month": "Próximo mês",
|
||||
@@ -2811,6 +2888,7 @@
|
||||
"night-light-not-installed": "Luz noturna (não disponível)",
|
||||
"noctalia-performance-disabled": "Modo de desempenho Noctalia",
|
||||
"noctalia-performance-enabled": "Modo de desempenho Noctalia",
|
||||
"open-annotation-tool": "Abrir com ferramenta de anotação",
|
||||
"open-control-center": "Central de controle",
|
||||
"open-notification-history-disable-dnd": "Histórico de notificações",
|
||||
"open-notification-history-enable-dnd": "Histórico de notificações",
|
||||
@@ -2858,6 +2936,7 @@
|
||||
"apikey": {
|
||||
"help": "É necessária uma chave de API para acessar conteúdo NSFW.",
|
||||
"label": "Chave de API",
|
||||
"managed-by-env": "Gerenciado através da variável de ambiente NOCTALIA_WALLHAVEN_API_KEY.",
|
||||
"placeholder": "Insira sua chave da API Wallhaven"
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2895,6 +2974,9 @@
|
||||
}
|
||||
},
|
||||
"search": "Pesquisar:",
|
||||
"solid-color": {
|
||||
"tooltip": "Fundo de cor sólida"
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "Data de adição",
|
||||
"favorites": "Favoritos",
|
||||
@@ -2943,6 +3025,11 @@
|
||||
"thunderstorm": "Tempestade",
|
||||
"unknown": "Desconhecido"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "Selecione um arquivo"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "Aplicar",
|
||||
@@ -3027,11 +3114,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "Ação Requerida",
|
||||
"available-interfaces": "Interfaces disponíveis",
|
||||
"available-networks": "Redes Disponíveis",
|
||||
"connect": "Conectar",
|
||||
"connected": "Conectado",
|
||||
"disabled": "O Wi-Fi está desativado",
|
||||
"disconnect": "Desconectar",
|
||||
"disconnected": "Desconectado(a)",
|
||||
"disconnecting": "Desconectando...",
|
||||
"dns": "DNS",
|
||||
"enable-message": "Ative o Wi-Fi para ver as redes disponíveis.",
|
||||
@@ -3042,12 +3131,15 @@
|
||||
"frequency": "Frequência",
|
||||
"gateway": "Porta de entrada",
|
||||
"info": "Informação",
|
||||
"interface": "Interface de rede",
|
||||
"internet": "Internet",
|
||||
"internet-connected": "Conectado à internet",
|
||||
"internet-limited": "Sem internet",
|
||||
"internet-status": "Status da internet",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "Redes Conhecidas",
|
||||
"link-speed": "Velocidade de ligação",
|
||||
"no-ethernet-devices": "Nenhum dispositivo Ethernet detectado.",
|
||||
"no-networks": "Nenhuma rede encontrada",
|
||||
"password": "Senha",
|
||||
"saved": "Salva",
|
||||
|
||||
+132
-40
@@ -142,12 +142,20 @@
|
||||
"description": "Если выходной текст соответствует этому значению, кнопка будет скрыта.",
|
||||
"label": "Условие скрытия"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "Применить цвета темы к значку и тексту.",
|
||||
"label": "Выбрать цвет"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "Введите команду для регулярного выполнения. Первая строка ее вывода будет отображаться как текст.",
|
||||
"label": "Вывод команды",
|
||||
"stream-description": "Введите команду для непрерывного выполнения."
|
||||
},
|
||||
"dynamic-text": "Динамический текст",
|
||||
"enable-colorization": {
|
||||
"description": "Включить раскраску значка и текста пользовательской кнопки, применяя цвета темы.",
|
||||
"label": "Включить раскраску"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "Всегда раскрыт",
|
||||
"description": "Управляет видимостью виджета, когда команда не имеет вывода.",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "Выберите, как это значение должно отображаться.",
|
||||
"label": "Режим отображения"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "Отображать значок раскладки клавиатуры.",
|
||||
"label": "Показать значок"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "Если включено, использует основной цвет для выделения.",
|
||||
"label": "Использовать основной цвет"
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,6 +345,10 @@
|
||||
"description": "Показать показания температуры GPU, если доступны.",
|
||||
"label": "Температура GPU"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "Показать среднюю нагрузку системы.",
|
||||
"label": "Средняя нагрузка"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "Показывать использование памяти в процентах вместо абсолютных значений.",
|
||||
"label": "Память в процентах"
|
||||
@@ -481,6 +503,7 @@
|
||||
"device-address": "Адрес устройства",
|
||||
"disabled": "Bluetooth отключен",
|
||||
"disconnect": "Отключить",
|
||||
"disconnecting": "Отключение...",
|
||||
"discoverable": "Обнаруживаемый",
|
||||
"enable-message": "Включите Bluetooth, чтобы увидеть доступные устройства.",
|
||||
"info": "Информация",
|
||||
@@ -494,6 +517,14 @@
|
||||
"refresh-devices": "Обновить устройства",
|
||||
"scanning": "Поиск устройств...",
|
||||
"signal": "Сигнал",
|
||||
"signal-text": {
|
||||
"excellent": "Сигнал: Отличный",
|
||||
"fair": "Сигнал: Средний",
|
||||
"good": "Сигнал: Хороший",
|
||||
"poor": "Сигнал: Плохой",
|
||||
"unknown": "Сигнал: Неизвестен",
|
||||
"very-poor": "Сигнал: Очень слабый"
|
||||
},
|
||||
"title": "Bluetooth",
|
||||
"trusted": "Надёжный",
|
||||
"unpair": "Разорвать пару"
|
||||
@@ -529,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "Присоединиться к нашему Discord",
|
||||
"dismiss": "Ок"
|
||||
"dismiss": "Ок",
|
||||
"feedback": "Оставьте отзыв"
|
||||
},
|
||||
"empty": "Примечания к выпуску пока недоступны.",
|
||||
"highlight-title": "Основные изменения",
|
||||
@@ -573,6 +605,7 @@
|
||||
"enable-bluetooth": "Включить Bluetooth",
|
||||
"enable-dnd": "Не беспокоить",
|
||||
"enable-wifi": "Включить Wi-Fi",
|
||||
"launcher-settings": "Настройки лаунчера",
|
||||
"lower-to-bottom": "Опустить до дна",
|
||||
"next": "Следующий",
|
||||
"open-calendar": "Открыть календарь",
|
||||
@@ -631,7 +664,35 @@
|
||||
"webbrowser": "Веб-браузер"
|
||||
},
|
||||
"delete": "Удалить",
|
||||
"no-results": "Ничего не найдено.",
|
||||
"pin": "Закрепить",
|
||||
"providers": {
|
||||
"applications": "Приложения",
|
||||
"calculator": "Калькулятор",
|
||||
"calculator-deprecated": "Команда >calc устарела и скоро будет удалена. Пожалуйста, вводите математические выражения прямо в поиск.",
|
||||
"calculator-description": "Калькулятор — вычисление математических выражений",
|
||||
"calculator-enter-expression": "Введите математическое выражение",
|
||||
"calculator-error": "Ошибка",
|
||||
"calculator-name": "Калькулятор",
|
||||
"clipboard": "История буфера обмена",
|
||||
"clipboard-clear-description": "Очистить всю историю буфера обмена",
|
||||
"clipboard-clear-description-full": "Удалить все элементы из истории буфера обмена",
|
||||
"clipboard-clear-history": "Очистить историю буфера обмена",
|
||||
"clipboard-delete": "Удалить запись из буфера обмена",
|
||||
"clipboard-history-disabled": "История буфера обмена отключена",
|
||||
"clipboard-history-disabled-description": "Включите историю буфера обмена в настройках или установите cliphist",
|
||||
"clipboard-loading": "Загрузка истории буфера обмена...",
|
||||
"clipboard-loading-description": "Пожалуйста, подождите",
|
||||
"clipboard-search-description": "Поиск в истории буфера обмена",
|
||||
"command": "Команда",
|
||||
"command-description": "Выполнять команды оболочки",
|
||||
"command-name": "Команда",
|
||||
"emoji": "Выбор эмодзи",
|
||||
"emoji-loading": "Загрузка эмодзи...",
|
||||
"emoji-loading-description": "Пожалуйста, подождите",
|
||||
"emoji-no-recent": "Недавних эмодзи пока нет.",
|
||||
"emoji-search-description": "Поиск и копирование эмодзи"
|
||||
},
|
||||
"unpin": "Открепить"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -752,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "Системный вывод + ввод с микрофона",
|
||||
"microphone-input": "Ввод с микрофона",
|
||||
"none": "Нет звука",
|
||||
"system-output": "Системный вывод"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -774,6 +836,10 @@
|
||||
"hover": "Прокручивать при наведении",
|
||||
"never": "Никогда не прокручивать"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "Сетка",
|
||||
"single-row": "Один ряд"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "Панель прикреплена к панели",
|
||||
"centered": "Центрированная панель",
|
||||
@@ -823,31 +889,6 @@
|
||||
"select": "Выбрать",
|
||||
"test": "Тест"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "Приложения",
|
||||
"calculator": "Калькулятор",
|
||||
"calculator-description": "Калькулятор — вычисление математических выражений",
|
||||
"calculator-enter-expression": "Введите математическое выражение",
|
||||
"calculator-error": "Ошибка",
|
||||
"calculator-name": "Калькулятор",
|
||||
"clipboard": "История буфера обмена",
|
||||
"clipboard-clear-description": "Очистить всю историю буфера обмена",
|
||||
"clipboard-clear-description-full": "Удалить все элементы из истории буфера обмена",
|
||||
"clipboard-clear-history": "Очистить историю буфера обмена",
|
||||
"clipboard-delete": "Удалить запись из буфера обмена",
|
||||
"clipboard-history-disabled": "История буфера обмена отключена",
|
||||
"clipboard-history-disabled-description": "Включите историю буфера обмена в настройках или установите cliphist",
|
||||
"clipboard-loading": "Загрузка истории буфера обмена...",
|
||||
"clipboard-loading-description": "Пожалуйста, подождите",
|
||||
"clipboard-search-description": "Поиск в истории буфера обмена",
|
||||
"command": "Команда",
|
||||
"command-description": "Выполнять команды оболочки",
|
||||
"command-name": "Команда",
|
||||
"emoji": "Выбор эмодзи",
|
||||
"emoji-loading": "Загрузка эмодзи...",
|
||||
"emoji-loading-description": "Пожалуйста, подождите",
|
||||
"emoji-search-description": "Поиск и копирование эмодзи"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1125,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "Выводит цвета, которые максимально соответствуют основному изображению.",
|
||||
"scheme-expressive": "Яркая палитра с игривой насыщенностью.",
|
||||
"scheme-fidelity": "Палитра высокой точности, сохраняющая исходные оттенки.",
|
||||
"scheme-fruit-salad": "Красочное сочетание ярких контрастных акцентов.",
|
||||
"scheme-monochrome": "Минимальная палитра, построенная вокруг одного оттенка.",
|
||||
"scheme-neutral": "Приглушенная палитра сдержанных и успокаивающих тонов.",
|
||||
"scheme-rainbow": "Разнообразная палитра, охватывающая весь спектр.",
|
||||
"scheme-tonal-spot": "Сбалансированная палитра с сфокусированными акцентами."
|
||||
},
|
||||
"description": "Выберите метод генерации цветовой схемы, который Matugen будет использовать для создания цветов из ваших обоев.",
|
||||
"label": "Тип схемы Matugen"
|
||||
},
|
||||
"section": {
|
||||
@@ -1268,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "Записать {filepath} и перезагрузить"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "Запишите в {filepath}; скопируйте в chrome/userChrome.css вашего профиля Zen."
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1786,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "Команда для запуска при нажатии кнопки аннотирования в истории буфера обмена. Изображение будет передано в эту команду.",
|
||||
"label": "Инструмент аннотирования",
|
||||
"placeholder": "градия, сатти -ф -"
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": "Показывать предварительный просмотр содержимого буфера обмена при использовании команды >clip.",
|
||||
"label": "Включить предварительный просмотр буфера обмена"
|
||||
@@ -1826,6 +1866,10 @@
|
||||
"description": "Показывать вкладки категорий для фильтрации приложений.",
|
||||
"label": "Показывать категории"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "Показывать закругленный прямоугольник в качестве фона для иконок.",
|
||||
"label": "Показать фон значка"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "Если включено, часто запускаемые приложения появляются в списке первыми.",
|
||||
"label": "Сортировать по частоте использования"
|
||||
@@ -1940,7 +1984,11 @@
|
||||
"network": {
|
||||
"bluetooth": {
|
||||
"description": "Включить управление Bluetooth.",
|
||||
"label": "Включить Bluetooth"
|
||||
"label": "Включить Bluetooth",
|
||||
"rssi-polling": {
|
||||
"description": "Периодически опрашивать RSSI для подключенных устройств через bluetoothctl. Может быть недоступно для всех устройств; использует минимальные ресурсы при включении.",
|
||||
"label": "Опрос сигнала Bluetooth"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"description": "Управление Wi-Fi и Bluetooth подключениями."
|
||||
@@ -2171,6 +2219,11 @@
|
||||
"no-plugins-description": "Проверьте исходники вашего плагина или обновите список.",
|
||||
"no-plugins-label": "Нет доступных плагинов."
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "Этот плагин уже установлен.",
|
||||
"custom-version-exists": "Пользовательская версия из \"{source}\" уже установлена.",
|
||||
"official-version-exists": "Официальная версия этого плагина уже установлена."
|
||||
},
|
||||
"filter": {
|
||||
"all": "Всё",
|
||||
"downloaded": "Скачано",
|
||||
@@ -2191,6 +2244,7 @@
|
||||
"no-plugins-label": "Нет установленных плагинов"
|
||||
},
|
||||
"installing": "Установка {plugin}...",
|
||||
"open-plugins-tab": "Открыть настройки плагинов",
|
||||
"plugin-settings-title": "Настройки {plugin}",
|
||||
"refresh": {
|
||||
"refreshing": "Обновление списка плагинов...",
|
||||
@@ -2201,6 +2255,10 @@
|
||||
},
|
||||
"settings-error-not-loaded": "Плагин не загружен",
|
||||
"settings-saved": "Настройки плагина сохранены",
|
||||
"source": {
|
||||
"custom": "Пользовательский источник",
|
||||
"official": "Официальный"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "Добавить пользовательский репозиторий",
|
||||
"add-dialog": {
|
||||
@@ -2232,8 +2290,10 @@
|
||||
"update-all": "Обновить все ({count})",
|
||||
"update-all-success": "Все плагины успешно обновлены.",
|
||||
"update-available": "Доступно {count} обновлений плагинов",
|
||||
"update-available_plural": "Доступно {count} обновлений плагинов",
|
||||
"update-error": "Не удалось обновить плагин: {plugin}: {error}",
|
||||
"update-incompatible": "Требуется Noctalia v{version} или выше",
|
||||
"update-pending": "v{current} → v{new} (требуется Noctalia v{required})",
|
||||
"update-success": "Плагин {plugin} обновлён до версии {version}",
|
||||
"update-version": "v{текущее} → v{новое}",
|
||||
"updating": "Обновление..."
|
||||
@@ -2339,6 +2399,10 @@
|
||||
"label": "Общие"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "Выберите способ отображения кнопок меню сеанса.",
|
||||
"label": "Крупная раскладка кнопок"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "Отобразить меню сеанса с большими кнопками в виде сетки.",
|
||||
"label": "Стиль \"крупные кнопки\""
|
||||
@@ -2395,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "Цвета выделения"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "Средняя нагрузка"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "Использование памяти"
|
||||
},
|
||||
@@ -2438,6 +2505,10 @@
|
||||
"label": "Скорость анимации",
|
||||
"reset": "Сбросить скорость анимации"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "Отображает контур вокруг областей содержимого.",
|
||||
"label": "Контур контейнера"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "Настраивает скругление углов основных разделов макета, таких как боковые панели, карточки и панели контента.",
|
||||
"label": "Радиус контейнера",
|
||||
@@ -2564,8 +2635,8 @@
|
||||
"tooltip": "Папка с обоями"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "Скрыть имена файлов обоев в селекторе.",
|
||||
"label": "Скрыть имена файлов"
|
||||
"tooltip-hide": "Скрыть имена файлов",
|
||||
"tooltip-show": "Показать имена файлов"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "Установить отдельную папку с обоями для каждого монитора.",
|
||||
@@ -2648,6 +2719,7 @@
|
||||
"download": "Скачать",
|
||||
"download-speed": "Скорость загрузки",
|
||||
"gpu-temp": "Температура GPU",
|
||||
"load-average": "Средняя нагрузка",
|
||||
"memory": "Память",
|
||||
"title": "Системный монитор",
|
||||
"upload": "Загрузить",
|
||||
@@ -2664,6 +2736,7 @@
|
||||
"low-desc": "Заряд батареи {percent}%. Пожалуйста, подключите зарядное устройство."
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Адрес скопирован в буфер обмена",
|
||||
"confirm-code": "Подтвердите код {value} на другом устройстве.",
|
||||
"connect-failed": "Не удалось подключиться к устройству",
|
||||
"disabled": "Отключен",
|
||||
@@ -2706,7 +2779,8 @@
|
||||
"enabled": "Включен"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "Раскладка клавиатуры изменена на {layout}"
|
||||
"changed": "Раскладка клавиатуры изменена на {layout}",
|
||||
"title": "Клавиатура"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "Страница Ko-fi открыта в вашем браузере"
|
||||
@@ -2780,6 +2854,7 @@
|
||||
"close": "Закрыть",
|
||||
"collapse": "Свернуть боковую панель",
|
||||
"connect-disconnect-devices": "Устройство Bluetooth",
|
||||
"copy-address": "Копировать адрес",
|
||||
"delete-notification": "Удалить уведомление",
|
||||
"disable-keep-awake": "Не засыпать",
|
||||
"do-not-disturb-disabled": "Не беспокоить",
|
||||
@@ -2798,10 +2873,12 @@
|
||||
"list-view": "Вид списком",
|
||||
"manage-vpn": "VPN-подключения",
|
||||
"manage-wifi": "Wi-Fi",
|
||||
"max-widgets-reached": "Достигнуто максимальное количество виджетов.",
|
||||
"microphone-volume-at": "Громкость микрофона: {volume}%",
|
||||
"move-to-center-section": "Центральная секция",
|
||||
"move-to-left-section": "Левая секция",
|
||||
"move-to-right-section": "Правая секция",
|
||||
"move-to-section": "Перейти к {section}",
|
||||
"mute": "Отключить звук",
|
||||
"next-media": "Следующий трек",
|
||||
"next-month": "Следующий месяц",
|
||||
@@ -2811,6 +2888,7 @@
|
||||
"night-light-not-installed": "Ночной свет (недоступен)",
|
||||
"noctalia-performance-disabled": "Режим производительности Noctalia",
|
||||
"noctalia-performance-enabled": "Режим производительности Noctalia",
|
||||
"open-annotation-tool": "Открыть с помощью инструмента аннотирования",
|
||||
"open-control-center": "Центр управления",
|
||||
"open-notification-history-disable-dnd": "История уведомлений",
|
||||
"open-notification-history-enable-dnd": "История уведомлений",
|
||||
@@ -2858,6 +2936,7 @@
|
||||
"apikey": {
|
||||
"help": "Для доступа к контенту NSFW требуется ключ API.",
|
||||
"label": "Ключ API",
|
||||
"managed-by-env": "Управляется через переменную окружения NOCTALIA_WALLHAVEN_API_KEY.",
|
||||
"placeholder": "Введите свой API-ключ Wallhaven"
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2895,6 +2974,9 @@
|
||||
}
|
||||
},
|
||||
"search": "Поиск:",
|
||||
"solid-color": {
|
||||
"tooltip": "Однотонный фон"
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "Дата добавления",
|
||||
"favorites": "Избранное",
|
||||
@@ -2943,6 +3025,11 @@
|
||||
"thunderstorm": "Гроза",
|
||||
"unknown": "Неизвестно"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "Выберите файл"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "Применить",
|
||||
@@ -3027,11 +3114,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "Требуется действие",
|
||||
"available-interfaces": "Доступные интерфейсы",
|
||||
"available-networks": "Доступные сети",
|
||||
"connect": "Подключить",
|
||||
"connected": "Подключено",
|
||||
"disabled": "Wi-Fi отключен",
|
||||
"disconnect": "Отключить",
|
||||
"disconnected": "Отключено",
|
||||
"disconnecting": "Отключение...",
|
||||
"dns": "DNS",
|
||||
"enable-message": "Включите Wi-Fi, чтобы увидеть доступные сети.",
|
||||
@@ -3042,12 +3131,15 @@
|
||||
"frequency": "Частота",
|
||||
"gateway": "Шлюз",
|
||||
"info": "Информация",
|
||||
"interface": "Сетевой интерфейс",
|
||||
"internet": "Интернет",
|
||||
"internet-connected": "Подключено к интернету",
|
||||
"internet-limited": "Нет интернета",
|
||||
"internet-status": "Статус подключения к интернету",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "Известные сети",
|
||||
"link-speed": "Скорость соединения",
|
||||
"no-ethernet-devices": "Ethernet-устройства не обнаружены",
|
||||
"no-networks": "Сети не найдены",
|
||||
"password": "Пароль",
|
||||
"saved": "Сохранено",
|
||||
|
||||
+132
-40
@@ -142,12 +142,20 @@
|
||||
"description": "Çıktı metni bu değerle eşleşirse düğme daralacak.",
|
||||
"label": "Daralma durumu"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "Tema renklerini simgeye ve metne uygula.",
|
||||
"label": "Renk seç"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "Düzenli aralıklarla çalıştırılacak bir komut girin. Çıktısının ilk satırı metin olarak gösterilecektir.",
|
||||
"label": "Komut Çıktısını Göster",
|
||||
"stream-description": "Sürekli çalıştırılacak bir komut girin."
|
||||
},
|
||||
"dynamic-text": "Hareketli metin",
|
||||
"enable-colorization": {
|
||||
"description": "Özel düğme simgesi ve metni için renklendirmeyi etkinleştir, tema renklerini uygula.",
|
||||
"label": "Renklendirmeyi etkinleştir"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "Her zaman geniş",
|
||||
"description": "Komutun çıktı vermemesi durumunda gerecin görünürlüğünü kontrol eder.",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "Bu değerin nasıl görünmesini istediğinizi seçin.",
|
||||
"label": "Görüntüleme modu"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "Klavye düzeni simgesini görüntüle.",
|
||||
"label": "Simgeyi göster"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "Etkinleştirildiğinde, vurgu için birincil rengi uygular.",
|
||||
"label": "Ana renk kullan."
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,6 +345,10 @@
|
||||
"description": "GPU sıcaklık değerleri varsa göster.",
|
||||
"label": "GPU sıcaklığı"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "Sistem ortalama yükünü göster.",
|
||||
"label": "Ortalama yük"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "Mutlak değerler yerine bellek kullanımını yüzde olarak göster.",
|
||||
"label": "Bellek yüzde olarak"
|
||||
@@ -481,6 +503,7 @@
|
||||
"device-address": "Cihaz adresi",
|
||||
"disabled": "Bluetooth devre dışı",
|
||||
"disconnect": "Bağlantıyı Kes",
|
||||
"disconnecting": "Bağlantı kesiliyor...",
|
||||
"discoverable": "Keşfedilebilir",
|
||||
"enable-message": "Mevcut cihazları görmek için Bluetooth'u etkinleştirin.",
|
||||
"info": "Bilgi",
|
||||
@@ -494,6 +517,14 @@
|
||||
"refresh-devices": "Cihazları yenile",
|
||||
"scanning": "Cihazlar tarınıyor...",
|
||||
"signal": "Sinyal",
|
||||
"signal-text": {
|
||||
"excellent": "Sinyal: Mükemmel",
|
||||
"fair": "Sinyal: Adil",
|
||||
"good": "Sinyal: İyi",
|
||||
"poor": "Sinyal: Zayıf",
|
||||
"unknown": "Sinyal: Bilinmiyor",
|
||||
"very-poor": "Sinyal: Çok zayıf"
|
||||
},
|
||||
"title": "Bluetooth",
|
||||
"trusted": "Güvenilir",
|
||||
"unpair": "Eşleştirmeyi kaldır"
|
||||
@@ -529,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "Discord sunucumuza katıl",
|
||||
"dismiss": "Tamam"
|
||||
"dismiss": "Tamam",
|
||||
"feedback": "Geri bildirim verin"
|
||||
},
|
||||
"empty": "Sürüm notları henüz hazır değil.",
|
||||
"highlight-title": "Öne çıkanlar",
|
||||
@@ -573,6 +605,7 @@
|
||||
"enable-bluetooth": "Bluetooth'u etkinleştir",
|
||||
"enable-dnd": "Rahatsız Etmeyin'i Etkinleştir",
|
||||
"enable-wifi": "Kablosuz Bağlantıyı etkinleştir",
|
||||
"launcher-settings": "Başlatıcı ayarları",
|
||||
"lower-to-bottom": "Alta doğru alçalt",
|
||||
"next": "Sonraki",
|
||||
"open-calendar": "Takvimi aç",
|
||||
@@ -631,7 +664,35 @@
|
||||
"webbrowser": "Tarayıcı"
|
||||
},
|
||||
"delete": "Sil",
|
||||
"no-results": "Sonuç bulunamadı",
|
||||
"pin": "Sabitle",
|
||||
"providers": {
|
||||
"applications": "Uygulamalar",
|
||||
"calculator": "Hesap makinesi",
|
||||
"calculator-deprecated": ">calc komutu kullanımdan kaldırılmıştır ve yakında kaldırılacaktır. Lütfen matematiksel ifadeleri doğrudan aramaya yazın.",
|
||||
"calculator-description": "Hesap makinesi — matematiksel ifadeleri hesapla",
|
||||
"calculator-enter-expression": "Matematiksel bir ifade girin",
|
||||
"calculator-error": "Hata",
|
||||
"calculator-name": "Hesap makinesi",
|
||||
"clipboard": "Panoya geçmiş",
|
||||
"clipboard-clear-description": "Tüm panoya geçmişini temizle",
|
||||
"clipboard-clear-description-full": "Tüm öğeleri panoya geçmişinden kaldır",
|
||||
"clipboard-clear-history": "Panoya geçmişini temizle",
|
||||
"clipboard-delete": "Panodaki öğeyi sil",
|
||||
"clipboard-history-disabled": "Panoya geçmişi devre dışı",
|
||||
"clipboard-history-disabled-description": "Panoya geçmişini ayarlarda etkinleştir veya cliphist kur",
|
||||
"clipboard-loading": "Panoya geçmişi yükleniyor...",
|
||||
"clipboard-loading-description": "Lütfen bekleyin",
|
||||
"clipboard-search-description": "Panoya geçmişini ara",
|
||||
"command": "Komut",
|
||||
"command-description": "Kabuk komutlarını çalıştır",
|
||||
"command-name": "Komut",
|
||||
"emoji": "Emoji seçici",
|
||||
"emoji-loading": "Emojiler yükleniyor...",
|
||||
"emoji-loading-description": "Lütfen bekleyin",
|
||||
"emoji-no-recent": "Henüz yeni emoji yok",
|
||||
"emoji-search-description": "Emoji arama ve kopyalama"
|
||||
},
|
||||
"unpin": "Sabitlemeyi kaldır"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -752,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "Sistem çıktısı + mikrofon girişi",
|
||||
"microphone-input": "Mikrofon girişi",
|
||||
"none": "Ses yok.",
|
||||
"system-output": "Sistem çıktısı"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -774,6 +836,10 @@
|
||||
"hover": "Üzerine Gelince Kaydır",
|
||||
"never": "Asla Kaydırma"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "Izgara",
|
||||
"single-row": "Tek Sıra"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "Panel çubuğa takılı",
|
||||
"centered": "Ortalanmış panel",
|
||||
@@ -823,31 +889,6 @@
|
||||
"select": "Seç",
|
||||
"test": "Test"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "Uygulamalar",
|
||||
"calculator": "Hesap makinesi",
|
||||
"calculator-description": "Hesap makinesi — matematiksel ifadeleri hesapla",
|
||||
"calculator-enter-expression": "Matematiksel bir ifade girin",
|
||||
"calculator-error": "Hata",
|
||||
"calculator-name": "Hesap makinesi",
|
||||
"clipboard": "Panoya geçmiş",
|
||||
"clipboard-clear-description": "Tüm panoya geçmişini temizle",
|
||||
"clipboard-clear-description-full": "Tüm öğeleri panoya geçmişinden kaldır",
|
||||
"clipboard-clear-history": "Panoya geçmişini temizle",
|
||||
"clipboard-delete": "Panodaki öğeyi sil",
|
||||
"clipboard-history-disabled": "Panoya geçmişi devre dışı",
|
||||
"clipboard-history-disabled-description": "Panoya geçmişini ayarlarda etkinleştir veya cliphist kur",
|
||||
"clipboard-loading": "Panoya geçmişi yükleniyor...",
|
||||
"clipboard-loading-description": "Lütfen bekleyin",
|
||||
"clipboard-search-description": "Panoya geçmişini ara",
|
||||
"command": "Komut",
|
||||
"command-description": "Kabuk komutlarını çalıştır",
|
||||
"command-name": "Komut",
|
||||
"emoji": "Emoji seçici",
|
||||
"emoji-loading": "Emojiler yükleniyor...",
|
||||
"emoji-loading-description": "Lütfen bekleyin",
|
||||
"emoji-search-description": "Emoji arama ve kopyalama"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1125,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "Temel görüntüye yakın renkler türetir.",
|
||||
"scheme-expressive": "Oyuncak doygunlukla canlı palet.",
|
||||
"scheme-fidelity": "Kaynak tonlarını koruyan yüksek sadakatli palet.",
|
||||
"scheme-fruit-salad": "Canlı kontrast aksanların renkli karışımı.",
|
||||
"scheme-monochrome": "Tek bir ton etrafında inşa edilmiş minimal palet.",
|
||||
"scheme-neutral": "Sakinleştirici ve bastırılmış tonlarla yumuşak palet.",
|
||||
"scheme-rainbow": "Tam spektrumu kapsayan çeşitli palet.",
|
||||
"scheme-tonal-spot": "Odaklanmış aksanlarla dengeli palet."
|
||||
},
|
||||
"description": "Matugen'in duvar kağıdınızdan renkler oluşturmak için kullanacağı renk şeması oluşturma yöntemini seçin.",
|
||||
"label": "Matugen şema türü"
|
||||
},
|
||||
"section": {
|
||||
@@ -1268,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "{filepath} dosyasına yaz ve yeniden yükle"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "{dosya yolu} yazın; Zen profilinizin chrome/userChrome.css dosyasına kopyalayın."
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1786,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "Panodaki geçmişte açıklama ekle düğmesine tıklandığında çalıştırılacak komut. Görüntü bu komuta yönlendirilecektir.",
|
||||
"label": "Açıklama aracı",
|
||||
"placeholder": "gradia, satty -f -"
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": ">clip komutu kullanılırken panodaki içeriğin önizlemesini gösterir.",
|
||||
"label": "Panoyu önizlemeyi etkinleştir"
|
||||
@@ -1826,6 +1866,10 @@
|
||||
"description": "Uygulamaları filtrelemek için kategori sekmelerini göster.",
|
||||
"label": "Kategorileri göster"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "Simgelerin arkasında yuvarlak köşeli dikdörtgen bir arka plan göster.",
|
||||
"label": "Simge arka planını göster"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "Etkinleştirildiğinde, sıkça başlatılan uygulamalar listede ilk olarak görünür.",
|
||||
"label": "En çok kullanılana göre sırala"
|
||||
@@ -1940,7 +1984,11 @@
|
||||
"network": {
|
||||
"bluetooth": {
|
||||
"description": "Bluetooth yönetimini etkinleştir.",
|
||||
"label": "Bluetooth'u Etkinleştir"
|
||||
"label": "Bluetooth'u Etkinleştir",
|
||||
"rssi-polling": {
|
||||
"description": "Bağlı cihazlar için RSSI'yı bluetoothctl aracılığıyla periyodik olarak örnekleyin. Tüm cihazlar için mevcut olmayabilir; etkinleştirildiğinde minimum kaynak kullanır.",
|
||||
"label": "Bluetooth sinyal yoklaması"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"description": "Kablosuz ve Bluetooth bağlantılarını yönetin."
|
||||
@@ -2171,6 +2219,11 @@
|
||||
"no-plugins-description": "Eklenti kaynaklarınızı kontrol edin veya listeyi yenileyin.",
|
||||
"no-plugins-label": "Kullanılabilir eklenti yok"
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "Bu eklenti zaten yüklü.",
|
||||
"custom-version-exists": "\"{source}\" kaynağından özel bir sürüm zaten yüklü.",
|
||||
"official-version-exists": "Bu eklentinin resmi sürümü zaten yüklü."
|
||||
},
|
||||
"filter": {
|
||||
"all": "Tüm",
|
||||
"downloaded": "İndirildi",
|
||||
@@ -2191,6 +2244,7 @@
|
||||
"no-plugins-label": "Eklenti kurulu değil"
|
||||
},
|
||||
"installing": "{eklenti} kuruluyor...",
|
||||
"open-plugins-tab": "Eklenti ayarlarına git",
|
||||
"plugin-settings-title": "{plugin} Ayarları",
|
||||
"refresh": {
|
||||
"refreshing": "Eklenti listesi yenileniyor...",
|
||||
@@ -2201,6 +2255,10 @@
|
||||
},
|
||||
"settings-error-not-loaded": "Eklenti yüklenmedi",
|
||||
"settings-saved": "Eklenti ayarları kaydedildi.",
|
||||
"source": {
|
||||
"custom": "Özel kaynak",
|
||||
"official": "Resmi"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "Özel depo ekle",
|
||||
"add-dialog": {
|
||||
@@ -2232,8 +2290,10 @@
|
||||
"update-all": "Tümünü Güncelle ({count})",
|
||||
"update-all-success": "Tüm eklentiler başarıyla güncellendi.",
|
||||
"update-available": "{count} eklenti için güncelleme mevcut",
|
||||
"update-available_plural": "{count} eklenti güncellemesi mevcut",
|
||||
"update-error": "Eklenti güncellenemedi: {plugin}: {error}",
|
||||
"update-incompatible": "Noctalia v{version} veya üzeri gerektirir.",
|
||||
"update-pending": "v{mevcut} → v{yeni} (Noctalia v{gerekli} gerektirir)",
|
||||
"update-success": "{plugin} v{version} sürümüne güncellendi",
|
||||
"update-version": "v{mevcut} → v{yeni}",
|
||||
"updating": "Güncelleniyor..."
|
||||
@@ -2339,6 +2399,10 @@
|
||||
"label": "Genel"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "Oturum menüsü düğmelerinin nasıl görüntüleneceğini seçin.",
|
||||
"label": "Büyük düğme düzeni"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "Oturum menüsünü büyük butonlarla ızgara düzeninde görüntüle.",
|
||||
"label": "Büyük düğme stili"
|
||||
@@ -2395,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "Vurgulama Renkleri"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "Ortalama yük"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "Bellek Kullanımı"
|
||||
},
|
||||
@@ -2438,6 +2505,10 @@
|
||||
"label": "Animasyon hızı",
|
||||
"reset": "Animasyon hızını sıfırla"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "İçerik alanlarının etrafında bir çerçeve görüntüler.",
|
||||
"label": "Konteyner ana hattı"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "Kenar çubukları, kartlar ve içerik panelleri gibi ana düzen bölümlerinin köşe yuvarlaklığını ayarlar.",
|
||||
"label": "Konteyner Yarıçapı",
|
||||
@@ -2564,8 +2635,8 @@
|
||||
"tooltip": "Duvar kâğıdı klasörü"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "Seçicide duvar kâğıdı dosya adlarını gizle.",
|
||||
"label": "Dosya adlarını gizle"
|
||||
"tooltip-hide": "Dosya adlarını gizleme",
|
||||
"tooltip-show": "Dosya Adlarını Göster"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "Her ekran için farklı bir duvar kâğıdı klasörü ayarlayın.",
|
||||
@@ -2648,6 +2719,7 @@
|
||||
"download": "İndir",
|
||||
"download-speed": "İndirme Hızı",
|
||||
"gpu-temp": "GPU Sıcaklığı",
|
||||
"load-average": "Ortalama yük",
|
||||
"memory": "Hafıza",
|
||||
"title": "Sistem İzleyici",
|
||||
"upload": "Yükle",
|
||||
@@ -2664,6 +2736,7 @@
|
||||
"low-desc": "Batarya % {percent}. Lütfen şarj bağlantısını yapın."
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Adres panoya kopyalandı",
|
||||
"confirm-code": "Diğer cihazdaki {value} kodunu onayla",
|
||||
"connect-failed": "Cihaza bağlanılamadı",
|
||||
"disabled": "Devre dışı",
|
||||
@@ -2706,7 +2779,8 @@
|
||||
"enabled": "Etkin"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "Klavye düzeni {layout} olarak değiştirildi"
|
||||
"changed": "Klavye düzeni {layout} olarak değiştirildi",
|
||||
"title": "Klavye"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "Ko-fi sayfası tarayıcınızda açıldı"
|
||||
@@ -2780,6 +2854,7 @@
|
||||
"close": "Kapat",
|
||||
"collapse": "Kenar çubuğunu daralt",
|
||||
"connect-disconnect-devices": "Bluetooth cihazı",
|
||||
"copy-address": "Adresi kopyala",
|
||||
"delete-notification": "Bildiriyi sil",
|
||||
"disable-keep-awake": "Uyanık kal",
|
||||
"do-not-disturb-disabled": "Rahatsız etme",
|
||||
@@ -2798,10 +2873,12 @@
|
||||
"list-view": "Liste görünümü",
|
||||
"manage-vpn": "VPN bağlantıları",
|
||||
"manage-wifi": "Kablosuz Bağlantı",
|
||||
"max-widgets-reached": "Maksimum araç sayısına ulaşıldı.",
|
||||
"microphone-volume-at": "Mikrofon sesi: %{volume}",
|
||||
"move-to-center-section": "Orta bölüm",
|
||||
"move-to-left-section": "Sol bölüm",
|
||||
"move-to-right-section": "Sağ bölüm",
|
||||
"move-to-section": "{section} bölümüne git.",
|
||||
"mute": "Sessiz",
|
||||
"next-media": "Sonraki parça",
|
||||
"next-month": "Sonraki ay",
|
||||
@@ -2811,6 +2888,7 @@
|
||||
"night-light-not-installed": "Gece ışığı (mevcut değil)",
|
||||
"noctalia-performance-disabled": "Noctalia performans modu",
|
||||
"noctalia-performance-enabled": "Noctalia performans modu",
|
||||
"open-annotation-tool": "Açıklama aracıyla aç",
|
||||
"open-control-center": "Kontrol merkezi",
|
||||
"open-notification-history-disable-dnd": "Bildirim geçmişi",
|
||||
"open-notification-history-enable-dnd": "Bildirim geçmişi",
|
||||
@@ -2858,6 +2936,7 @@
|
||||
"apikey": {
|
||||
"help": "NSFW içeriğe erişmek için bir API anahtarı gereklidir.",
|
||||
"label": "API Anahtarı",
|
||||
"managed-by-env": "NOCTALIA_WALLHAVEN_API_KEY ortam değişkeni aracılığıyla yönetilir.",
|
||||
"placeholder": "Wallhaven API Anahtarınızı girin"
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2895,6 +2974,9 @@
|
||||
}
|
||||
},
|
||||
"search": "Ara:",
|
||||
"solid-color": {
|
||||
"tooltip": "Düz renk arka plan"
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "Eklenme tarihi",
|
||||
"favorites": "Favoriler",
|
||||
@@ -2943,6 +3025,11 @@
|
||||
"thunderstorm": "Fırtına",
|
||||
"unknown": "Bilinmiyor"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "Bir dosya seçin"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "Uygula",
|
||||
@@ -3027,11 +3114,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "Eylem gerekiyor",
|
||||
"available-interfaces": "Kullanılabilir arayüzler",
|
||||
"available-networks": "Kullanılabilir Ağlar",
|
||||
"connect": "Bağlan",
|
||||
"connected": "Bağlı",
|
||||
"disabled": "Kablosuz Bağlantı devre dışı",
|
||||
"disconnect": "Bağlantıyı kes",
|
||||
"disconnected": "Bağlantı kesildi",
|
||||
"disconnecting": "Bağlantı kesiliyor...",
|
||||
"dns": "DNS",
|
||||
"enable-message": "Mevcut ağları görmek için kablosuz bağlantıyı etkinleştirin.",
|
||||
@@ -3042,12 +3131,15 @@
|
||||
"frequency": "Frekans",
|
||||
"gateway": "Geçit",
|
||||
"info": "Bilgi",
|
||||
"interface": "Ağ arayüzü",
|
||||
"internet": "İnternet",
|
||||
"internet-connected": "İnternete bağlı",
|
||||
"internet-limited": "İnternet yok",
|
||||
"internet-status": "İnternet durumu",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "Bilinen Ağlar",
|
||||
"link-speed": "Bağlantı hızı",
|
||||
"no-ethernet-devices": "Ethernet aygıtı algılanmadı",
|
||||
"no-networks": "Ağ bulunamadı",
|
||||
"password": "Parola",
|
||||
"saved": "Kaydedildi",
|
||||
|
||||
+132
-40
@@ -142,12 +142,20 @@
|
||||
"description": "Якщо вихідний текст збігається з цим значенням, кнопка згорнеться.",
|
||||
"label": "Умова згортання"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "Застосувати кольори теми до значка та тексту.",
|
||||
"label": "Вибрати колір"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "Введіть команду для запуску з регулярним інтервалом. Перший рядок її виведення відображатиметься як текст.",
|
||||
"label": "Відображати виведення команди",
|
||||
"stream-description": "Введіть команду для безперервного запуску."
|
||||
},
|
||||
"dynamic-text": "Динамічний текст",
|
||||
"enable-colorization": {
|
||||
"description": "Увімкнути розфарбовування для значка та тексту власної кнопки, застосовуючи кольори теми.",
|
||||
"label": "Увімкнути розфарбовування"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "Завжди розширено",
|
||||
"description": "Контролює видимість віджета, коли команда не має виведення.",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "Виберіть, як ви хочете, щоб це значення відображалося.",
|
||||
"label": "Режим відображення"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "Показувати піктограму розкладки клавіатури.",
|
||||
"label": "Показати значок"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "Якщо ввімкнено, це застосовує основний колір для підкреслення.",
|
||||
"label": "Використовуйте основний колір"
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,6 +345,10 @@
|
||||
"description": "Показувати показники температури GPU, якщо доступні.",
|
||||
"label": "Температура GPU"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "Показати середнє навантаження системи.",
|
||||
"label": "Середнє навантаження"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "Показувати використання пам'яті у відсотках замість абсолютних значень.",
|
||||
"label": "Пам'ять у відсотках"
|
||||
@@ -481,6 +503,7 @@
|
||||
"device-address": "Адреса пристрою",
|
||||
"disabled": "Bluetooth вимкнено",
|
||||
"disconnect": "Відключити",
|
||||
"disconnecting": "Відключення...",
|
||||
"discoverable": "Виявний",
|
||||
"enable-message": "Увімкніть Bluetooth, щоб побачити доступні пристрої.",
|
||||
"info": "Інформація",
|
||||
@@ -494,6 +517,14 @@
|
||||
"refresh-devices": "Оновити пристрої",
|
||||
"scanning": "Сканування пристроїв...",
|
||||
"signal": "Сигнал",
|
||||
"signal-text": {
|
||||
"excellent": "Сигнал: Відмінний",
|
||||
"fair": "Сигнал: Задовільний",
|
||||
"good": "Сигнал: Добре",
|
||||
"poor": "Сигнал: Поганий",
|
||||
"unknown": "Сигнал: Невідомий",
|
||||
"very-poor": "Сигнал: Дуже слабкий"
|
||||
},
|
||||
"title": "Bluetooth",
|
||||
"trusted": "Надійний",
|
||||
"unpair": "Розірвати пару"
|
||||
@@ -529,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "Приєднатися до нашого Discord",
|
||||
"dismiss": "Ок"
|
||||
"dismiss": "Ок",
|
||||
"feedback": "Надати відгук"
|
||||
},
|
||||
"empty": "Примітки до релізу ще недоступні.",
|
||||
"highlight-title": "Основні зміни",
|
||||
@@ -573,6 +605,7 @@
|
||||
"enable-bluetooth": "Увімкнути Bluetooth",
|
||||
"enable-dnd": "Увімкнути режим \"Не турбувати\"",
|
||||
"enable-wifi": "Увімкнути Wi-Fi",
|
||||
"launcher-settings": "Налаштування панелі запуску",
|
||||
"lower-to-bottom": "Опустити донизу",
|
||||
"next": "Наступний",
|
||||
"open-calendar": "Відкрити календар",
|
||||
@@ -631,7 +664,35 @@
|
||||
"webbrowser": "Веб-браузер"
|
||||
},
|
||||
"delete": "Видалити",
|
||||
"no-results": "Результатів не знайдено",
|
||||
"pin": "Закріпити",
|
||||
"providers": {
|
||||
"applications": "Застосунки",
|
||||
"calculator": "Калькулятор",
|
||||
"calculator-deprecated": "Команда >calc застаріла і скоро буде видалена. Будь ласка, введіть математичні вирази безпосередньо в пошуку.",
|
||||
"calculator-description": "Калькулятор — обчислення математичних виразів",
|
||||
"calculator-enter-expression": "Введіть математичний вираз",
|
||||
"calculator-error": "Помилка",
|
||||
"calculator-name": "Калькулятор",
|
||||
"clipboard": "Історія буфера обміну",
|
||||
"clipboard-clear-description": "Очистити всю історію буфера обміну",
|
||||
"clipboard-clear-description-full": "Видалити всі елементи з історії буфера обміну",
|
||||
"clipboard-clear-history": "Очистити історію буфера обміну",
|
||||
"clipboard-delete": "Видалити запис з буфера обміну",
|
||||
"clipboard-history-disabled": "Історія буфера обміну вимкнена",
|
||||
"clipboard-history-disabled-description": "Увімкніть історію буфера обміну в налаштуваннях або встановіть cliphist",
|
||||
"clipboard-loading": "Завантаження історії буфера обміну...",
|
||||
"clipboard-loading-description": "Зачекайте, будь ласка",
|
||||
"clipboard-search-description": "Пошук в історії буфера обміну",
|
||||
"command": "Команда",
|
||||
"command-description": "Виконати команди оболонки",
|
||||
"command-name": "Команда",
|
||||
"emoji": "Обрати емодзі",
|
||||
"emoji-loading": "Завантаження емодзі...",
|
||||
"emoji-loading-description": "Зачекайте, будь ласка",
|
||||
"emoji-no-recent": "Немає нещодавніх емодзі",
|
||||
"emoji-search-description": "Пошук і копіювання емодзі"
|
||||
},
|
||||
"unpin": "Відкріпити"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -752,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "Системний вихід + вхід мікрофона",
|
||||
"microphone-input": "Вхід мікрофона",
|
||||
"none": "Немає аудіо",
|
||||
"system-output": "Системний вихід"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -774,6 +836,10 @@
|
||||
"hover": "Прокручувати при наведенні",
|
||||
"never": "Ніколи не прокручувати"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "Сітка",
|
||||
"single-row": "Один рядок"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "Панель прикріплена до панелі",
|
||||
"centered": "Центрована панель",
|
||||
@@ -823,31 +889,6 @@
|
||||
"select": "Вибрати",
|
||||
"test": "Тест"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "Застосунки",
|
||||
"calculator": "Калькулятор",
|
||||
"calculator-description": "Калькулятор — обчислення математичних виразів",
|
||||
"calculator-enter-expression": "Введіть математичний вираз",
|
||||
"calculator-error": "Помилка",
|
||||
"calculator-name": "Калькулятор",
|
||||
"clipboard": "Історія буфера обміну",
|
||||
"clipboard-clear-description": "Очистити всю історію буфера обміну",
|
||||
"clipboard-clear-description-full": "Видалити всі елементи з історії буфера обміну",
|
||||
"clipboard-clear-history": "Очистити історію буфера обміну",
|
||||
"clipboard-delete": "Видалити запис з буфера обміну",
|
||||
"clipboard-history-disabled": "Історія буфера обміну вимкнена",
|
||||
"clipboard-history-disabled-description": "Увімкніть історію буфера обміну в налаштуваннях або встановіть cliphist",
|
||||
"clipboard-loading": "Завантаження історії буфера обміну...",
|
||||
"clipboard-loading-description": "Зачекайте, будь ласка",
|
||||
"clipboard-search-description": "Пошук в історії буфера обміну",
|
||||
"command": "Команда",
|
||||
"command-description": "Виконати команди оболонки",
|
||||
"command-name": "Команда",
|
||||
"emoji": "Обрати емодзі",
|
||||
"emoji-loading": "Завантаження емодзі...",
|
||||
"emoji-loading-description": "Зачекайте, будь ласка",
|
||||
"emoji-search-description": "Пошук і копіювання емодзі"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1125,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "Генерує кольори, що тісно збігаються з базовим зображенням.",
|
||||
"scheme-expressive": "Яскрава палітра з грайливою насиченістю.",
|
||||
"scheme-fidelity": "Високоточна палітра, що зберігає вихідні відтінки.",
|
||||
"scheme-fruit-salad": "Барвистий мікс яскравих контрастних акцентів.",
|
||||
"scheme-monochrome": "Мінімальна палітра на основі одного відтінку.",
|
||||
"scheme-neutral": "Приглушена палітра з стриманими та заспокійливими тонами.",
|
||||
"scheme-rainbow": "Різноманітна палітра, що охоплює весь спектр.",
|
||||
"scheme-tonal-spot": "Збалансована палітра з фокусованими акцентами."
|
||||
},
|
||||
"description": "Виберіть метод генерації колірної схеми, який Matugen використовуватиме для створення кольорів з ваших шпалер.",
|
||||
"label": "Тип схеми Matugen"
|
||||
},
|
||||
"section": {
|
||||
@@ -1268,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "Записати {filepath} та перезавантажити"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "Запишіть {filepath}; скопіюйте у chrome/userChrome.css вашого профілю Zen."
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1786,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "Команда для запуску при натисканні кнопки анотування в історії буфера обміну, зображення буде передано в цю команду.",
|
||||
"label": "Інструмент анотацій",
|
||||
"placeholder": "градіа, сатті -ф -"
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": "Показувати попередній перегляд вмісту буфера обміну при використанні команди >clip.",
|
||||
"label": "Попередній перегляд буфера обміну"
|
||||
@@ -1826,6 +1866,10 @@
|
||||
"description": "Показувати вкладки категорій для фільтрації додатків.",
|
||||
"label": "Показувати категорії"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "Показувати заокруглений прямокутник як фон за іконками.",
|
||||
"label": "Показати фон іконки"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "Коли увімкнено, часто використовувані застосунки з'являються першими в списку.",
|
||||
"label": "Сортувати за використанням"
|
||||
@@ -1940,7 +1984,11 @@
|
||||
"network": {
|
||||
"bluetooth": {
|
||||
"description": "Активувати керування Bluetooth.",
|
||||
"label": "Увімкнути Bluetooth"
|
||||
"label": "Увімкнути Bluetooth",
|
||||
"rssi-polling": {
|
||||
"description": "Періодично збирати дані RSSI для підключених пристроїв через bluetoothctl. Може бути недоступним для всіх пристроїв; використовує мінімум ресурсів, коли ввімкнено.",
|
||||
"label": "Опитування сигналу Bluetooth"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"description": "Керувати підключеннями Wi-Fi та Bluetooth."
|
||||
@@ -2171,6 +2219,11 @@
|
||||
"no-plugins-description": "Перевірте вихідні коди вашого плагіна або оновіть список.",
|
||||
"no-plugins-label": "Немає доступних плагінів"
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "Цей плагін вже встановлено.",
|
||||
"custom-version-exists": "Вже встановлено власну версію з \"{source}\"",
|
||||
"official-version-exists": "Офіційна версія цього плагіна вже встановлена."
|
||||
},
|
||||
"filter": {
|
||||
"all": "Все",
|
||||
"downloaded": "Завантажено",
|
||||
@@ -2191,6 +2244,7 @@
|
||||
"no-plugins-label": "Немає встановлених плагінів"
|
||||
},
|
||||
"installing": "Встановлення {plugin}...",
|
||||
"open-plugins-tab": "Відкрити налаштування плагінів",
|
||||
"plugin-settings-title": "Налаштування {plugin}",
|
||||
"refresh": {
|
||||
"refreshing": "Оновлення списку плагінів...",
|
||||
@@ -2201,6 +2255,10 @@
|
||||
},
|
||||
"settings-error-not-loaded": "Плагін не завантажено",
|
||||
"settings-saved": "Налаштування плагіна збережено",
|
||||
"source": {
|
||||
"custom": "Власне джерело",
|
||||
"official": "Офіційний"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "Додати власний репозиторій",
|
||||
"add-dialog": {
|
||||
@@ -2232,8 +2290,10 @@
|
||||
"update-all": "Оновити все ({count})",
|
||||
"update-all-success": "Усі плагіни успішно оновлено.",
|
||||
"update-available": "Доступно оновлень для {count} плагінів",
|
||||
"update-available_plural": "Доступно {count} оновлень плагінів",
|
||||
"update-error": "Не вдалося оновити плагін: {plugin}: {error}",
|
||||
"update-incompatible": "Потрібна Noctalia v{version} або вище",
|
||||
"update-pending": "v{current} → v{new} (потрібно Noctalia v{required})",
|
||||
"update-success": "Оновлено {plugin} до версії {version}",
|
||||
"update-version": "v{current} → v{new}",
|
||||
"updating": "Оновлення..."
|
||||
@@ -2339,6 +2399,10 @@
|
||||
"label": "Загальні"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "Виберіть спосіб відображення кнопок меню сеансу.",
|
||||
"label": "Розкладка з великими кнопками"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "Відобразити меню сеансу великими кнопками у вигляді сітки.",
|
||||
"label": "Стиль великих кнопок"
|
||||
@@ -2395,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "Кольори підсвічування"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "Середнє навантаження"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "Використання пам'яті"
|
||||
},
|
||||
@@ -2438,6 +2505,10 @@
|
||||
"label": "Швидкість анімації",
|
||||
"reset": "Скинути швидкість анімації"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "Відображає контур навколо областей вмісту.",
|
||||
"label": "Контур контейнера"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "Налаштовує заокруглення кутів основних розділів макета, таких як бічні панелі, картки та панелі контенту.",
|
||||
"label": "Радіус контейнера",
|
||||
@@ -2564,8 +2635,8 @@
|
||||
"tooltip": "Тека шпалер"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "Приховати назви файлів шпалер у селекторі.",
|
||||
"label": "Приховати назви файлів"
|
||||
"tooltip-hide": "Приховати імена файлів",
|
||||
"tooltip-show": "Відображати імена файлів"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "Встановити різні теки шпалер для кожного монітора.",
|
||||
@@ -2648,6 +2719,7 @@
|
||||
"download": "Завантажити",
|
||||
"download-speed": "Швидкість завантаження",
|
||||
"gpu-temp": "Температура GPU",
|
||||
"load-average": "Середнє навантаження",
|
||||
"memory": "Пам'ять",
|
||||
"title": "Системний монітор",
|
||||
"upload": "Завантажити",
|
||||
@@ -2664,6 +2736,7 @@
|
||||
"low-desc": "Рівень заряду: {percent}%. Будь ласка, підключіть зарядний пристрій."
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Адресу скопійовано до буфера обміну",
|
||||
"confirm-code": "Підтвердьте код {value} на іншому пристрої",
|
||||
"connect-failed": "Не вдалося під'єднатися до пристрою.",
|
||||
"disabled": "Вимкнено",
|
||||
@@ -2706,7 +2779,8 @@
|
||||
"enabled": "Увімкнено"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "Розкладка клавіатури змінена на {layout}"
|
||||
"changed": "Розкладка клавіатури змінена на {layout}",
|
||||
"title": "Клавіатура"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "Сторінка Ko-fi відкрита у вашому браузері"
|
||||
@@ -2780,6 +2854,7 @@
|
||||
"close": "Закрити",
|
||||
"collapse": "Згорнути бічну панель",
|
||||
"connect-disconnect-devices": "Пристрій Bluetooth",
|
||||
"copy-address": "Копіювати адресу",
|
||||
"delete-notification": "Видалити сповіщення",
|
||||
"disable-keep-awake": "Заборона сну",
|
||||
"do-not-disturb-disabled": "Не турбувати",
|
||||
@@ -2798,10 +2873,12 @@
|
||||
"list-view": "Список",
|
||||
"manage-vpn": "Підключення VPN",
|
||||
"manage-wifi": "Wi-Fi",
|
||||
"max-widgets-reached": "Досягнуто максимальної кількості віджетів",
|
||||
"microphone-volume-at": "Гучність мікрофона: {volume}%",
|
||||
"move-to-center-section": "Центральна секція",
|
||||
"move-to-left-section": "Ліва секція",
|
||||
"move-to-right-section": "Права секція",
|
||||
"move-to-section": "Перейти до {section}",
|
||||
"mute": "Вимкнути звук",
|
||||
"next-media": "Наступний трек",
|
||||
"next-month": "Наступний місяць",
|
||||
@@ -2811,6 +2888,7 @@
|
||||
"night-light-not-installed": "Нічне світло (недоступне)",
|
||||
"noctalia-performance-disabled": "Режим продуктивності Noctalia",
|
||||
"noctalia-performance-enabled": "Режим продуктивності Noctalia",
|
||||
"open-annotation-tool": "Відкрити за допомогою інструменту анотацій",
|
||||
"open-control-center": "Центр керування",
|
||||
"open-notification-history-disable-dnd": "Історія сповіщень",
|
||||
"open-notification-history-enable-dnd": "Історія сповіщень",
|
||||
@@ -2858,6 +2936,7 @@
|
||||
"apikey": {
|
||||
"help": "Для доступу до контенту NSFW потрібен ключ API.",
|
||||
"label": "Ключ API",
|
||||
"managed-by-env": "Керується через змінну середовища NOCTALIA_WALLHAVEN_API_KEY.",
|
||||
"placeholder": "Введіть свій API-ключ Wallhaven"
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2895,6 +2974,9 @@
|
||||
}
|
||||
},
|
||||
"search": "Пошук:",
|
||||
"solid-color": {
|
||||
"tooltip": "Однотонний фон"
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "Дата додавання",
|
||||
"favorites": "Обране",
|
||||
@@ -2943,6 +3025,11 @@
|
||||
"thunderstorm": "Гроза",
|
||||
"unknown": "Невідомо"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "Виберіть файл"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "Застосувати",
|
||||
@@ -3027,11 +3114,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "Вимагається дія",
|
||||
"available-interfaces": "Доступні інтерфейси",
|
||||
"available-networks": "Доступні мережі",
|
||||
"connect": "Підключити",
|
||||
"connected": "Підключено",
|
||||
"disabled": "Wi-Fi вимкнено",
|
||||
"disconnect": "Відключити",
|
||||
"disconnected": "Відключено",
|
||||
"disconnecting": "Відключення...",
|
||||
"dns": "DNS",
|
||||
"enable-message": "Увімкніть Wi-Fi, щоб побачити доступні мережі.",
|
||||
@@ -3042,12 +3131,15 @@
|
||||
"frequency": "Частота",
|
||||
"gateway": "Шлюз",
|
||||
"info": "Інформація",
|
||||
"interface": "Мережевий інтерфейс",
|
||||
"internet": "Інтернет",
|
||||
"internet-connected": "Підключено до Інтернету",
|
||||
"internet-limited": "Немає інтернету",
|
||||
"internet-status": "Статус Інтернету",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "Відомі мережі",
|
||||
"link-speed": "Швидкість з'єднання",
|
||||
"no-ethernet-devices": "Не виявлено Ethernet-пристроїв.",
|
||||
"no-networks": "Мереж не знайдено",
|
||||
"password": "Пароль",
|
||||
"saved": "Збережено",
|
||||
|
||||
+199
-107
@@ -142,12 +142,20 @@
|
||||
"description": "如果输出文本与此值匹配,按钮将折叠。",
|
||||
"label": "折叠条件"
|
||||
},
|
||||
"color-selection": {
|
||||
"description": "将主题颜色应用到图标和文本。",
|
||||
"label": "选择颜色"
|
||||
},
|
||||
"display-command-output": {
|
||||
"description": "输入一个定期运行的命令。其输出的第一行将显示为文本。",
|
||||
"label": "显示命令输出",
|
||||
"stream-description": "输入一个要持续运行的命令。"
|
||||
},
|
||||
"dynamic-text": "动态文本",
|
||||
"enable-colorization": {
|
||||
"description": "启用自定义按钮图标和文本的着色,应用主题颜色。",
|
||||
"label": "启用着色"
|
||||
},
|
||||
"hide-mode": {
|
||||
"alwaysExpanded": "始终展开",
|
||||
"description": "控制命令无输出时小部件的可见性。",
|
||||
@@ -224,6 +232,16 @@
|
||||
"display-mode": {
|
||||
"description": "选择您希望此值显示的方式。",
|
||||
"label": "显示模式"
|
||||
},
|
||||
"show-icon": {
|
||||
"description": "显示键盘布局图标。",
|
||||
"label": "显示图标"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"use-primary-color": {
|
||||
"description": "启用后,将应用主色来突出显示。",
|
||||
"label": "使用原色"
|
||||
}
|
||||
},
|
||||
"lock-keys": {
|
||||
@@ -327,6 +345,10 @@
|
||||
"description": "显示GPU温度读数(如果可用)。",
|
||||
"label": "GPU温度"
|
||||
},
|
||||
"load-average": {
|
||||
"description": "显示系统平均负载。",
|
||||
"label": "平均负载"
|
||||
},
|
||||
"memory-percentage": {
|
||||
"description": "以百分比而不是绝对值显示内存使用情况。",
|
||||
"label": "内存百分比"
|
||||
@@ -370,11 +392,11 @@
|
||||
"label": "仅显示活动工作区"
|
||||
},
|
||||
"only-same-monitor": {
|
||||
"description": "仅显示工具栏所在显示器上的应用。",
|
||||
"label": "仅从同一显示器"
|
||||
"description": "仅显示任务栏所在显示器上的应用。",
|
||||
"label": "仅限同一显示器"
|
||||
},
|
||||
"show-pinned-apps": {
|
||||
"description": "在任务栏中显示 Dock 上固定的应用。",
|
||||
"description": "在任务栏中显示停靠栏上固定的应用。",
|
||||
"label": "显示已置顶的应用"
|
||||
},
|
||||
"show-title": {
|
||||
@@ -481,19 +503,28 @@
|
||||
"device-address": "设备地址",
|
||||
"disabled": "蓝牙已禁用",
|
||||
"disconnect": "断开",
|
||||
"disconnecting": "正在断开连接...",
|
||||
"discoverable": "可发现的",
|
||||
"enable-message": "启用蓝牙以查看可用设备。",
|
||||
"info": "信息",
|
||||
"known-devices": "已知设备",
|
||||
"no-devices": "没有可用设备",
|
||||
"pair": "一对",
|
||||
"paired": "配对",
|
||||
"pair": "配对",
|
||||
"paired": "已配对",
|
||||
"paired-devices": "已配对的设备",
|
||||
"pairing": "配对...",
|
||||
"pairing-mode": "确保您的设备处于配对模式。",
|
||||
"refresh-devices": "刷新设备",
|
||||
"scanning": "正在扫描设备...",
|
||||
"signal": "信号",
|
||||
"signal-text": {
|
||||
"excellent": "信号:极佳",
|
||||
"fair": "信号:良好",
|
||||
"good": "信号:良好",
|
||||
"poor": "信号:弱",
|
||||
"unknown": "信号:未知",
|
||||
"very-poor": "信号:非常差"
|
||||
},
|
||||
"title": "蓝牙",
|
||||
"trusted": "可信赖的",
|
||||
"unpair": "取消配对"
|
||||
@@ -507,10 +538,10 @@
|
||||
"countdown": "倒计时",
|
||||
"duration": "时长",
|
||||
"hours": "h",
|
||||
"minutes": "米",
|
||||
"minutes": "m",
|
||||
"pause": "暂停",
|
||||
"reset": "重置",
|
||||
"resume": "简历",
|
||||
"resume": "继续",
|
||||
"seconds": "s",
|
||||
"start": "开始",
|
||||
"stopwatch": "秒表",
|
||||
@@ -529,7 +560,8 @@
|
||||
"panel": {
|
||||
"buttons": {
|
||||
"discord": "加入我们的 Discord",
|
||||
"dismiss": "确定"
|
||||
"dismiss": "确定",
|
||||
"feedback": "提供反馈"
|
||||
},
|
||||
"empty": "暂时没有可用的发行说明。",
|
||||
"highlight-title": "重点更新",
|
||||
@@ -573,6 +605,7 @@
|
||||
"enable-bluetooth": "启用蓝牙",
|
||||
"enable-dnd": "启用勿扰模式",
|
||||
"enable-wifi": "启用 Wi-Fi",
|
||||
"launcher-settings": "启动器设置",
|
||||
"lower-to-bottom": "降至底部",
|
||||
"next": "下一首",
|
||||
"open-calendar": "打开日历",
|
||||
@@ -607,7 +640,7 @@
|
||||
"all": "全部",
|
||||
"audiovideo": "音频和视频",
|
||||
"chat": "聊天",
|
||||
"development": "发展",
|
||||
"development": "开发",
|
||||
"education": "教育",
|
||||
"emoji": {
|
||||
"activity": "活动",
|
||||
@@ -616,7 +649,7 @@
|
||||
"food": "食物和饮料",
|
||||
"nature": "自然",
|
||||
"objects": "物品",
|
||||
"people": "人物和身体",
|
||||
"people": "人物和肢体",
|
||||
"recent": "最近使用",
|
||||
"symbols": "符号",
|
||||
"travel": "旅行和地点"
|
||||
@@ -625,13 +658,41 @@
|
||||
"graphics": "图形",
|
||||
"misc": "杂项",
|
||||
"network": "网络",
|
||||
"office": "办公室",
|
||||
"office": "办公",
|
||||
"pinned": "已固定",
|
||||
"system": "系统",
|
||||
"webbrowser": "网页浏览器"
|
||||
},
|
||||
"delete": "删除",
|
||||
"no-results": "未找到结果",
|
||||
"pin": "固定",
|
||||
"providers": {
|
||||
"applications": "应用程序",
|
||||
"calculator": "计算器",
|
||||
"calculator-deprecated": ">calc 命令已弃用,即将移除。请直接在搜索中输入数学表达式。",
|
||||
"calculator-description": "计算器 — 计算数学表达式",
|
||||
"calculator-enter-expression": "输入数学表达式",
|
||||
"calculator-error": "错误",
|
||||
"calculator-name": "计算器",
|
||||
"clipboard": "剪贴板历史记录",
|
||||
"clipboard-clear-description": "清除所有剪贴板历史记录",
|
||||
"clipboard-clear-description-full": "从剪贴板历史记录中移除所有项目",
|
||||
"clipboard-clear-history": "清除剪贴板历史记录",
|
||||
"clipboard-delete": "删除剪贴板条目",
|
||||
"clipboard-history-disabled": "剪贴板历史记录已禁用",
|
||||
"clipboard-history-disabled-description": "在设置中启用剪贴板历史记录或安装 cliphist",
|
||||
"clipboard-loading": "正在加载剪贴板历史记录...",
|
||||
"clipboard-loading-description": "请稍候",
|
||||
"clipboard-search-description": "搜索剪贴板历史记录",
|
||||
"command": "命令",
|
||||
"command-description": "运行 shell 命令",
|
||||
"command-name": "命令",
|
||||
"emoji": "表情符号选择器",
|
||||
"emoji-loading": "正在加载表情符号...",
|
||||
"emoji-loading-description": "请稍候",
|
||||
"emoji-no-recent": "尚无最近使用的表情符号",
|
||||
"emoji-search-description": "搜索和复制表情符号"
|
||||
},
|
||||
"unpin": "取消固定"
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -752,6 +813,7 @@
|
||||
"audio-sources": {
|
||||
"both": "系统输出 + 麦克风输入",
|
||||
"microphone-input": "麦克风输入",
|
||||
"none": "无音频",
|
||||
"system-output": "系统输出"
|
||||
},
|
||||
"color-range": {
|
||||
@@ -766,7 +828,7 @@
|
||||
},
|
||||
"sources": {
|
||||
"portal": "Portal",
|
||||
"screen": "屏幕"
|
||||
"screen": "Screen"
|
||||
}
|
||||
},
|
||||
"scrolling-modes": {
|
||||
@@ -774,8 +836,12 @@
|
||||
"hover": "悬停时滚动",
|
||||
"never": "从不滚动"
|
||||
},
|
||||
"session-menu-grid-layout": {
|
||||
"grid": "网格",
|
||||
"single-row": "单行"
|
||||
},
|
||||
"settings-panel-mode": {
|
||||
"attached": "面板附加到工具栏",
|
||||
"attached": "状态栏附属面板",
|
||||
"centered": "居中面板",
|
||||
"window": "分离窗口"
|
||||
},
|
||||
@@ -823,31 +889,6 @@
|
||||
"select": "选择",
|
||||
"test": "测试"
|
||||
},
|
||||
"plugins": {
|
||||
"applications": "应用程序",
|
||||
"calculator": "计算器",
|
||||
"calculator-description": "计算器 — 计算数学表达式",
|
||||
"calculator-enter-expression": "输入数学表达式",
|
||||
"calculator-error": "错误",
|
||||
"calculator-name": "计算器",
|
||||
"clipboard": "剪贴板历史记录",
|
||||
"clipboard-clear-description": "清除所有剪贴板历史记录",
|
||||
"clipboard-clear-description-full": "从剪贴板历史记录中移除所有项目",
|
||||
"clipboard-clear-history": "清除剪贴板历史记录",
|
||||
"clipboard-delete": "删除剪贴板条目",
|
||||
"clipboard-history-disabled": "剪贴板历史记录已禁用",
|
||||
"clipboard-history-disabled-description": "在设置中启用剪贴板历史记录或安装 cliphist",
|
||||
"clipboard-loading": "正在加载剪贴板历史记录...",
|
||||
"clipboard-loading-description": "请稍候",
|
||||
"clipboard-search-description": "搜索剪贴板历史记录",
|
||||
"command": "命令",
|
||||
"command-description": "运行 shell 命令",
|
||||
"command-name": "命令",
|
||||
"emoji": "表情符号选择器",
|
||||
"emoji-loading": "正在加载表情符号...",
|
||||
"emoji-loading-description": "请稍候",
|
||||
"emoji-search-description": "搜索和复制表情符号"
|
||||
},
|
||||
"quickSettings": {
|
||||
"bluetooth": {
|
||||
"label": {
|
||||
@@ -1052,8 +1093,8 @@
|
||||
"bar": {
|
||||
"appearance": {
|
||||
"background-opacity": {
|
||||
"description": "为任务栏设置背景不透明度。",
|
||||
"label": "任务栏背景不透明度"
|
||||
"description": "为状态栏设置背景不透明度。",
|
||||
"label": "状态栏背景不透明度"
|
||||
},
|
||||
"capsule-opacity": {
|
||||
"description": "设置显示胶囊时小部件背景的不透明度。",
|
||||
@@ -1064,7 +1105,7 @@
|
||||
"label": "状态栏密度"
|
||||
},
|
||||
"floating": {
|
||||
"description": "将工具栏显示为浮动的“药丸”形状。",
|
||||
"description": "将状态栏显示为浮动的“药丸”形状。",
|
||||
"label": "浮动状态栏"
|
||||
},
|
||||
"margins": {
|
||||
@@ -1094,8 +1135,8 @@
|
||||
"label": "显示小部件轮廓"
|
||||
},
|
||||
"use-separate-opacity": {
|
||||
"description": "启用后为任务栏背景使用单独的不透明度值。",
|
||||
"label": "使用单独的任务栏不透明度"
|
||||
"description": "启用后为状态栏背景使用单独的不透明度值。",
|
||||
"label": "使用单独的状态栏不透明度"
|
||||
}
|
||||
},
|
||||
"monitors": {
|
||||
@@ -1125,16 +1166,7 @@
|
||||
"color-scheme": {
|
||||
"color-source": {
|
||||
"matugen-scheme-type": {
|
||||
"description": {
|
||||
"scheme-content": "推导出与底层图像紧密匹配的颜色。",
|
||||
"scheme-expressive": "充满活力的调色板,色彩饱和度高。",
|
||||
"scheme-fidelity": "保留原始色调的高保真调色板。",
|
||||
"scheme-fruit-salad": "鲜艳对比色的缤纷组合。",
|
||||
"scheme-monochrome": "围绕单一色调构建的极简调色板。",
|
||||
"scheme-neutral": "柔和的色调,沉稳平静。",
|
||||
"scheme-rainbow": "涵盖整个光谱的多元调色板。",
|
||||
"scheme-tonal-spot": "平衡的色调,重点突出。"
|
||||
},
|
||||
"description": "选择Matugen将使用哪种配色方案生成方法,从您的壁纸中创建颜色。",
|
||||
"label": "Matugen 配色方案类型"
|
||||
},
|
||||
"section": {
|
||||
@@ -1268,6 +1300,9 @@
|
||||
},
|
||||
"zed": {
|
||||
"description": "写入 {filepath} 并重新加载"
|
||||
},
|
||||
"zen-browser": {
|
||||
"description": "将 {filepath} 写入;复制到你的 Zen 配置文件的 chrome/userChrome.css 中"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
@@ -1591,15 +1626,15 @@
|
||||
"dock": {
|
||||
"appearance": {
|
||||
"background-opacity": {
|
||||
"description": "调整 Dock 的背景不透明度。",
|
||||
"description": "调整停靠栏的背景不透明度。",
|
||||
"label": "背景不透明度"
|
||||
},
|
||||
"border-radius": {
|
||||
"description": "调整程序坞的边框半径。",
|
||||
"description": "调整停靠栏的边框半径。",
|
||||
"label": "边框半径"
|
||||
},
|
||||
"colorize-icons": {
|
||||
"description": "将主题颜色应用到 Dock 应用图标(仅限非聚焦应用)。",
|
||||
"description": "将主题颜色应用到停靠栏应用图标(仅限非聚焦应用)。",
|
||||
"label": "着色图标"
|
||||
},
|
||||
"dead-opacity": {
|
||||
@@ -1609,38 +1644,38 @@
|
||||
"display": {
|
||||
"always-visible": "始终可见",
|
||||
"auto-hide": "自动隐藏",
|
||||
"description": "选择 Dock 的行为方式。",
|
||||
"description": "选择停靠栏的行为方式。",
|
||||
"exclusive": "独占",
|
||||
"label": "显示"
|
||||
},
|
||||
"floating-distance": {
|
||||
"description": "调整距离屏幕边缘的浮动距离。",
|
||||
"label": "Dock 浮动距离"
|
||||
"label": "停靠栏浮动距离"
|
||||
},
|
||||
"hide-show-speed": {
|
||||
"description": "调整 Dock 隐藏/显示动画的速度。",
|
||||
"description": "调整停靠栏隐藏/显示动画的速度。",
|
||||
"label": "隐藏/显示速度"
|
||||
},
|
||||
"icon-size": {
|
||||
"description": "调整 Dock 的整体大小。",
|
||||
"label": "Dock 大小"
|
||||
"description": "调整停靠栏的整体大小。",
|
||||
"label": "停靠栏大小"
|
||||
},
|
||||
"inactive-indicators": {
|
||||
"description": "为所有应用显示指示器小药丸,而不仅仅是当前活跃的应用。",
|
||||
"label": "运行指标"
|
||||
"label": "运行指示器"
|
||||
},
|
||||
"pinned-static": {
|
||||
"description": "始终将固定的应用图标按静态顺序推到左侧。",
|
||||
"label": "静态固定应用"
|
||||
},
|
||||
"section": {
|
||||
"description": "自定义 Dock 的行为和外观。",
|
||||
"description": "自定义停靠栏的行为和外观。",
|
||||
"label": "外观"
|
||||
}
|
||||
},
|
||||
"enabled": {
|
||||
"description": "完全显示或隐藏 Dock",
|
||||
"label": "启用 Dock"
|
||||
"description": "完全显示或隐藏停靠栏",
|
||||
"label": "启用停靠栏"
|
||||
},
|
||||
"monitors": {
|
||||
"only-same-monitor": {
|
||||
@@ -1648,11 +1683,11 @@
|
||||
"label": "仅限来自同一显示器的应用"
|
||||
},
|
||||
"section": {
|
||||
"description": "在特定显示器上显示 Dock。如果未选择任何显示器,则默认为全部。",
|
||||
"description": "在特定显示器上显示停靠栏。如果未选择任何显示器,则默认为全部。",
|
||||
"label": "显示器显示"
|
||||
}
|
||||
},
|
||||
"title": "Dock"
|
||||
"title": "停靠栏"
|
||||
},
|
||||
"general": {
|
||||
"fonts": {
|
||||
@@ -1696,8 +1731,8 @@
|
||||
"launch-setup-wizard": "启动安装向导",
|
||||
"profile": {
|
||||
"picture": {
|
||||
"description": "在整个界面中显示您的个人资料图片。",
|
||||
"label": "{user} 的个人资料图片"
|
||||
"description": "在整个界面中显示您的个人头像。",
|
||||
"label": "{user} 的个人头像"
|
||||
},
|
||||
"section": {
|
||||
"description": "编辑您的用户详细信息和头像。",
|
||||
@@ -1730,11 +1765,11 @@
|
||||
"hooks": {
|
||||
"info": {
|
||||
"command-info": {
|
||||
"description": "• 命令通过 shell 执行 (sh -c)<br>• 命令在后台运行(分离)<br>• 测试按钮使用当前值执行",
|
||||
"description": "• 命令通过 shell 执行(sh -c)<br>• 命令在后台运行(分离)<br>• 测试按钮使用当前值执行",
|
||||
"label": "钩子命令信息"
|
||||
},
|
||||
"parameters": {
|
||||
"description": "• 壁纸钩子: $1 = 壁纸路径, $2 = 屏幕名称<br>• 主题切换钩子: $1 = true/false (深色模式状态)",
|
||||
"description": "• 壁纸钩子:$1 = 壁纸路径, $2 = 屏幕名称<br>• 主题切换钩子:$1 = true/false(深色模式状态)<br>• 屏幕锁定/解锁钩子:无参数<br>• 性能模式钩子:无参数",
|
||||
"label": "可用参数"
|
||||
}
|
||||
},
|
||||
@@ -1786,6 +1821,11 @@
|
||||
},
|
||||
"launcher": {
|
||||
"settings": {
|
||||
"annotation-tool": {
|
||||
"description": "点击剪贴板历史记录中的注释按钮时要运行的命令。图像将被管道传输到此命令。",
|
||||
"label": "标注工具",
|
||||
"placeholder": "格拉迪亚,萨蒂 -f -"
|
||||
},
|
||||
"clip-preview": {
|
||||
"description": "在使用 >clip 命令时显示剪贴板内容的预览。",
|
||||
"label": "启用剪贴板预览"
|
||||
@@ -1826,6 +1866,10 @@
|
||||
"description": "显示用于筛选应用程序的类别标签。",
|
||||
"label": "显示类别"
|
||||
},
|
||||
"show-icon-background": {
|
||||
"description": "在图标后显示一个圆角矩形背景。",
|
||||
"label": "显示图标背景"
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"description": "启用后,经常启动的应用程序将显示在列表首位。",
|
||||
"label": "按使用频率排序"
|
||||
@@ -1940,7 +1984,11 @@
|
||||
"network": {
|
||||
"bluetooth": {
|
||||
"description": "启用蓝牙管理。",
|
||||
"label": "启用蓝牙"
|
||||
"label": "启用蓝牙",
|
||||
"rssi-polling": {
|
||||
"description": "定期通过 bluetoothctl 采样已连接设备的 RSSI 值。可能并非适用于所有设备;启用后占用极少资源。",
|
||||
"label": "蓝牙信号轮询"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"description": "管理 Wi-Fi 和蓝牙连接。"
|
||||
@@ -2014,7 +2062,7 @@
|
||||
},
|
||||
"enable-osd": {
|
||||
"description": "实时显示音量和亮度变化。",
|
||||
"label": "启用屏显菜单"
|
||||
"label": "启用屏幕显示"
|
||||
},
|
||||
"enabled": {
|
||||
"description": "启用或禁用通知守护进程,需要重启 Noctalia shell。",
|
||||
@@ -2031,29 +2079,29 @@
|
||||
},
|
||||
"sounds": {
|
||||
"enabled": {
|
||||
"description": "为传入通知启用音效。",
|
||||
"description": "启用收到通知时的音效。",
|
||||
"label": "启用通知声音"
|
||||
},
|
||||
"excluded-apps": {
|
||||
"description": "跳过播放具有自己内置声音的特定应用程序的配置通知声音。",
|
||||
"description": "对于自带内置音效的特定应用,跳过播放已配置的通知音效。",
|
||||
"label": "排除的应用程序",
|
||||
"placeholder": "discord,firefox,chrome,chromium,edge"
|
||||
},
|
||||
"files": {
|
||||
"critical": {
|
||||
"description": "为关键优先级通知播放的声音文件路径。",
|
||||
"label": "关键紧急声音",
|
||||
"select-title": "选择关键紧急声音文件"
|
||||
"description": "为高优先级通知播放的声音文件路径。",
|
||||
"label": "高紧急度声音",
|
||||
"select-title": "选择高紧急度声音文件"
|
||||
},
|
||||
"low": {
|
||||
"description": "为低优先级通知播放的声音文件路径。",
|
||||
"label": "低紧急声音",
|
||||
"select-title": "选择低紧急声音文件"
|
||||
"label": "低紧急度声音",
|
||||
"select-title": "选择低紧急度声音文件"
|
||||
},
|
||||
"normal": {
|
||||
"description": "为普通优先级通知播放的声音文件路径。",
|
||||
"label": "普通紧急声音",
|
||||
"select-title": "选择普通紧急声音文件"
|
||||
"description": "为正常优先级通知播放的声音文件路径。",
|
||||
"label": "正常紧急度声音",
|
||||
"select-title": "选择正常紧急度声音文件"
|
||||
},
|
||||
"placeholder": "输入声音文件路径",
|
||||
"section": {
|
||||
@@ -2072,11 +2120,11 @@
|
||||
"label": "声音设置"
|
||||
},
|
||||
"separate": {
|
||||
"description": "为低、普通和关键优先级通知使用不同的声音文件。",
|
||||
"description": "为低、正常和高优先级通知使用不同的声音文件。",
|
||||
"label": "按优先级使用不同声音"
|
||||
},
|
||||
"unavailable": {
|
||||
"description": "安装 Qt6 多媒体以启用通知声音。",
|
||||
"description": "安装 Qt6 Multimedia 以启用通知声音。",
|
||||
"label": "通知声音不可用"
|
||||
},
|
||||
"volume": {
|
||||
@@ -2087,56 +2135,56 @@
|
||||
"title": "通知",
|
||||
"toast": {
|
||||
"keyboard": {
|
||||
"description": "当键盘布局改变时显示一个Toast提示。",
|
||||
"description": "当键盘布局改变时显示一个 Toast 提示。",
|
||||
"label": "键盘布局"
|
||||
},
|
||||
"section": {
|
||||
"description": "配置Toast的外观和行为。",
|
||||
"label": "吐司"
|
||||
"description": "配置 Toast 的外观和行为。",
|
||||
"label": "Toast"
|
||||
}
|
||||
}
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top": {
|
||||
"description": "在全屏窗口和其他图层之上显示OSD。",
|
||||
"description": "在全屏窗口和其他图层之上显示 OSD。",
|
||||
"label": "始终置顶"
|
||||
},
|
||||
"background-opacity": {
|
||||
"description": "调整OSD背景的透明度。",
|
||||
"description": "调整 OSD 背景的透明度。",
|
||||
"label": "背景透明度"
|
||||
},
|
||||
"description": "配置屏幕叠加指示器,例如音量和亮度。",
|
||||
"duration": {
|
||||
"auto-hide": {
|
||||
"description": "调整屏显菜单消失前的时间。",
|
||||
"description": "调整屏幕显示消失前的时间。",
|
||||
"label": "自动隐藏超时"
|
||||
},
|
||||
"section": {
|
||||
"description": "屏显菜单自动隐藏前保持可见的时长。",
|
||||
"description": "屏幕显示自动隐藏前保持可见的时长。",
|
||||
"label": "自动隐藏超时"
|
||||
}
|
||||
},
|
||||
"enabled": {
|
||||
"description": "实时显示音量与亮度变化。",
|
||||
"label": "启用屏显菜单"
|
||||
"label": "启用屏幕显示"
|
||||
},
|
||||
"location": {
|
||||
"description": "屏显菜单出现的位置。",
|
||||
"description": "屏幕显示出现的位置。",
|
||||
"label": "位置"
|
||||
},
|
||||
"monitors": {
|
||||
"section": {
|
||||
"description": "在特定显示器上显示屏显菜单。若未选择,则默认全部。",
|
||||
"description": "在特定显示器上显示屏幕显示。若未选择,则默认全部。",
|
||||
"label": "显示器显示"
|
||||
}
|
||||
},
|
||||
"section": {
|
||||
"general": {
|
||||
"description": "配置屏显菜单(OSD)的可见性与行为。",
|
||||
"description": "配置屏幕显示(OSD)的可见性与行为。",
|
||||
"label": "常规"
|
||||
}
|
||||
},
|
||||
"title": "屏显菜单",
|
||||
"title": "屏幕显示",
|
||||
"types": {
|
||||
"brightness": {
|
||||
"description": "当屏幕亮度发生变化时显示 OSD。",
|
||||
@@ -2155,8 +2203,8 @@
|
||||
"label": "锁定键"
|
||||
},
|
||||
"section": {
|
||||
"description": "选择触发OSD的事件。",
|
||||
"label": "OSD触发事件"
|
||||
"description": "选择触发 OSD 的事件。",
|
||||
"label": "OSD 触发事件"
|
||||
},
|
||||
"volume": {
|
||||
"description": "当音频输出音量发生变化时显示 OSD。",
|
||||
@@ -2171,6 +2219,11 @@
|
||||
"no-plugins-description": "检查你的插件源或刷新列表。",
|
||||
"no-plugins-label": "没有可用的插件"
|
||||
},
|
||||
"collision": {
|
||||
"already-installed": "此插件已安装",
|
||||
"custom-version-exists": "来自“{source}”的自定义版本已安装",
|
||||
"official-version-exists": "此插件的官方版本已安装。"
|
||||
},
|
||||
"filter": {
|
||||
"all": "全部",
|
||||
"downloaded": "已下载",
|
||||
@@ -2191,6 +2244,7 @@
|
||||
"no-plugins-label": "未安装插件"
|
||||
},
|
||||
"installing": "正在安装 {plugin}...",
|
||||
"open-plugins-tab": "打开插件设置",
|
||||
"plugin-settings-title": "{插件} 设置",
|
||||
"refresh": {
|
||||
"refreshing": "正在刷新插件列表...",
|
||||
@@ -2201,6 +2255,10 @@
|
||||
},
|
||||
"settings-error-not-loaded": "插件未加载",
|
||||
"settings-saved": "插件设置已保存",
|
||||
"source": {
|
||||
"custom": "自定义源",
|
||||
"official": "官方"
|
||||
},
|
||||
"sources": {
|
||||
"add-custom": "添加自定义存储库",
|
||||
"add-dialog": {
|
||||
@@ -2232,8 +2290,10 @@
|
||||
"update-all": "全部更新({count})",
|
||||
"update-all-success": "所有插件已成功更新",
|
||||
"update-available": "有{count}个插件可更新",
|
||||
"update-available_plural": "{count} 个插件有可用更新",
|
||||
"update-error": "更新插件失败:{plugin}:{error}",
|
||||
"update-incompatible": "需要 Noctalia v{version} 或更高版本",
|
||||
"update-pending": "v{当前} → v{新} (需要 Noctalia v{所需})",
|
||||
"update-success": "已将 {plugin} 更新至 v{version}",
|
||||
"update-version": "v{当前} → v{新}",
|
||||
"updating": "正在更新..."
|
||||
@@ -2339,6 +2399,10 @@
|
||||
"label": "常规"
|
||||
}
|
||||
},
|
||||
"large-buttons-layout": {
|
||||
"description": "选择会话菜单按钮的显示方式。",
|
||||
"label": "大按钮布局"
|
||||
},
|
||||
"large-buttons-style": {
|
||||
"description": "以网格布局显示带有大按钮的会话菜单。",
|
||||
"label": "大按钮样式"
|
||||
@@ -2395,6 +2459,9 @@
|
||||
"highlight-colors-section": {
|
||||
"label": "高亮颜色"
|
||||
},
|
||||
"load-average-section": {
|
||||
"label": "平均负载"
|
||||
},
|
||||
"memory-section": {
|
||||
"label": "内存使用率"
|
||||
},
|
||||
@@ -2417,7 +2484,7 @@
|
||||
},
|
||||
"title": "系统监视器",
|
||||
"use-custom-highlight-colors": {
|
||||
"description": "关闭时将使用主题默认高亮颜色。",
|
||||
"description": "禁用时将使用主题默认高亮颜色。",
|
||||
"label": "使用自定义高亮颜色"
|
||||
},
|
||||
"warning-color": {
|
||||
@@ -2438,6 +2505,10 @@
|
||||
"label": "动画速度",
|
||||
"reset": "重置动画速度"
|
||||
},
|
||||
"box-border": {
|
||||
"description": "显示内容区域周围的轮廓。",
|
||||
"label": "容器轮廓"
|
||||
},
|
||||
"box-border-radius": {
|
||||
"description": "调整主要布局部分(如侧边栏、卡片和内容面板)的圆角程度。",
|
||||
"label": "容器半径",
|
||||
@@ -2513,12 +2584,12 @@
|
||||
"label": "壁纸间隔"
|
||||
},
|
||||
"random-wallpaper": {
|
||||
"description": "按固定间隔调度随机壁纸更改。",
|
||||
"description": "按固定时间间隔随机更改壁纸。",
|
||||
"label": "随机壁纸"
|
||||
},
|
||||
"scheduled-change": {
|
||||
"description": "按固定间隔自动更改壁纸。",
|
||||
"label": "计划更改"
|
||||
"description": "按固定时间间隔自动更改壁纸。",
|
||||
"label": "定时更改"
|
||||
},
|
||||
"section": {
|
||||
"label": "自动化"
|
||||
@@ -2564,8 +2635,8 @@
|
||||
"tooltip": "壁纸文件夹"
|
||||
},
|
||||
"hide-wallpaper-filenames": {
|
||||
"description": "在选择器中隐藏壁纸文件名。",
|
||||
"label": "隐藏文件名。"
|
||||
"tooltip-hide": "隐藏文件名",
|
||||
"tooltip-show": "显示文件名"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"description": "为每个显示器设置不同的壁纸文件夹。",
|
||||
@@ -2648,6 +2719,7 @@
|
||||
"download": "下载",
|
||||
"download-speed": "下载速度",
|
||||
"gpu-temp": "GPU 温度",
|
||||
"load-average": "平均负载",
|
||||
"memory": "内存",
|
||||
"title": "系统监视器",
|
||||
"upload": "上传",
|
||||
@@ -2664,6 +2736,7 @@
|
||||
"low-desc": "电量为 {percent}%。请连接充电器。"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "地址已复制到剪贴板",
|
||||
"confirm-code": "在另一台设备上确认代码 {value}",
|
||||
"connect-failed": "无法连接到设备",
|
||||
"disabled": "已禁用",
|
||||
@@ -2706,7 +2779,8 @@
|
||||
"enabled": "已启用"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"changed": "键盘布局已更改为 {layout}"
|
||||
"changed": "键盘布局已更改为 {layout}",
|
||||
"title": "键盘"
|
||||
},
|
||||
"kofi": {
|
||||
"opened": "Ko-fi 页面已在您的浏览器中打开"
|
||||
@@ -2780,6 +2854,7 @@
|
||||
"close": "关闭",
|
||||
"collapse": "折叠侧边栏",
|
||||
"connect-disconnect-devices": "蓝牙设备",
|
||||
"copy-address": "复制地址",
|
||||
"delete-notification": "删除通知",
|
||||
"disable-keep-awake": "保持唤醒",
|
||||
"do-not-disturb-disabled": "勿扰模式",
|
||||
@@ -2798,10 +2873,12 @@
|
||||
"list-view": "列表视图",
|
||||
"manage-vpn": "VPN 连接",
|
||||
"manage-wifi": "Wi-Fi",
|
||||
"max-widgets-reached": "已达到最大小部件数量",
|
||||
"microphone-volume-at": "麦克风音量:{volume}%",
|
||||
"move-to-center-section": "中央部分",
|
||||
"move-to-left-section": "左侧部分",
|
||||
"move-to-right-section": "右侧部分",
|
||||
"move-to-section": "移至{section}",
|
||||
"mute": "静音",
|
||||
"next-media": "下一首",
|
||||
"next-month": "下个月",
|
||||
@@ -2811,6 +2888,7 @@
|
||||
"night-light-not-installed": "夜间模式(不可用)",
|
||||
"noctalia-performance-disabled": "Noctalia 性能模式",
|
||||
"noctalia-performance-enabled": "Noctalia 性能模式",
|
||||
"open-annotation-tool": "使用注释工具打开",
|
||||
"open-control-center": "控制中心",
|
||||
"open-notification-history-disable-dnd": "通知历史记录",
|
||||
"open-notification-history-enable-dnd": "通知历史记录",
|
||||
@@ -2845,7 +2923,7 @@
|
||||
"widget-settings": "小部件设置"
|
||||
},
|
||||
"wallpaper": {
|
||||
"configure-directory": "使用图像配置您的壁纸目录。",
|
||||
"configure-directory": "配置您的壁纸图片目录。",
|
||||
"fill-modes": {
|
||||
"center": "居中",
|
||||
"crop": "裁剪(填充)",
|
||||
@@ -2858,6 +2936,7 @@
|
||||
"apikey": {
|
||||
"help": "访问 NSFW 内容需要 API 密钥。",
|
||||
"label": "API 密钥",
|
||||
"managed-by-env": "通过 NOCTALIA_WALLHAVEN_API_KEY 环境变量进行管理。",
|
||||
"placeholder": "输入您的Wallhaven API密钥"
|
||||
},
|
||||
"apply-all-monitors": {
|
||||
@@ -2895,6 +2974,9 @@
|
||||
}
|
||||
},
|
||||
"search": "搜索:",
|
||||
"solid-color": {
|
||||
"tooltip": "纯色背景"
|
||||
},
|
||||
"sorting": {
|
||||
"date_added": "添加日期",
|
||||
"favorites": "收藏",
|
||||
@@ -2943,6 +3025,11 @@
|
||||
"thunderstorm": "雷暴",
|
||||
"unknown": "未知"
|
||||
},
|
||||
"widget": {
|
||||
"file-picker": {
|
||||
"title": "选择文件"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"color-picker": {
|
||||
"apply": "应用",
|
||||
@@ -3027,11 +3114,13 @@
|
||||
"wifi": {
|
||||
"panel": {
|
||||
"action-required": "需要动作",
|
||||
"available-interfaces": "可用接口",
|
||||
"available-networks": "可用网络",
|
||||
"connect": "连接",
|
||||
"connected": "已连接",
|
||||
"disabled": "Wi-Fi 已禁用",
|
||||
"disconnect": "断开连接",
|
||||
"disconnected": "已断开连接",
|
||||
"disconnecting": "正在断开连接...",
|
||||
"dns": "域名系统",
|
||||
"enable-message": "启用 Wi-Fi 以查看可用网络。",
|
||||
@@ -3042,12 +3131,15 @@
|
||||
"frequency": "频率",
|
||||
"gateway": "网关",
|
||||
"info": "信息",
|
||||
"interface": "网络接口",
|
||||
"internet": "互联网",
|
||||
"internet-connected": "已连接互联网",
|
||||
"internet-limited": "无网络",
|
||||
"internet-status": "互联网状态",
|
||||
"ipv4": "IPv4",
|
||||
"known-networks": "已知网络",
|
||||
"link-speed": "链路速度",
|
||||
"no-ethernet-devices": "未检测到以太网设备",
|
||||
"no-networks": "未找到网络",
|
||||
"password": "密码",
|
||||
"saved": "已保存",
|
||||
|
||||
@@ -17,13 +17,10 @@
|
||||
"widgets": {
|
||||
"left": [
|
||||
{
|
||||
"icon": "rocket",
|
||||
"id": "CustomButton",
|
||||
"leftClickExec": "qs -c noctalia-shell ipc call launcher toggle"
|
||||
"id": "Launcher"
|
||||
},
|
||||
{
|
||||
"id": "Clock",
|
||||
"usePrimaryColor": false
|
||||
"id": "Clock"
|
||||
},
|
||||
{
|
||||
"id": "SystemMonitor"
|
||||
@@ -97,9 +94,7 @@
|
||||
"panelBackgroundOpacity": 0.93,
|
||||
"panelsAttachedToBar": true,
|
||||
"settingsPanelMode": "attached",
|
||||
"wifiDetailsViewMode": "grid",
|
||||
"bluetoothDetailsViewMode": "grid",
|
||||
"bluetoothHideUnnamedDevices": false
|
||||
"boxBorderEnabled": false
|
||||
},
|
||||
"location": {
|
||||
"name": "Tokyo",
|
||||
@@ -155,6 +150,8 @@
|
||||
"setWallpaperOnAllMonitors": true,
|
||||
"fillMode": "crop",
|
||||
"fillColor": "#000000",
|
||||
"useSolidColor": false,
|
||||
"solidColor": "#1a1a2e",
|
||||
"randomEnabled": false,
|
||||
"wallpaperChangeMode": "random",
|
||||
"randomIntervalSec": 300,
|
||||
@@ -188,10 +185,13 @@
|
||||
"viewMode": "list",
|
||||
"showCategories": true,
|
||||
"iconMode": "tabler",
|
||||
"ignoreMouseInput": false
|
||||
"showIconBackground": true,
|
||||
"ignoreMouseInput": false,
|
||||
"screenshotAnnotationTool": ""
|
||||
},
|
||||
"controlCenter": {
|
||||
"position": "close_to_bar_button",
|
||||
"diskPath": "/",
|
||||
"shortcuts": {
|
||||
"left": [
|
||||
{
|
||||
@@ -267,10 +267,10 @@
|
||||
"memPollingInterval": 3000,
|
||||
"diskPollingInterval": 3000,
|
||||
"networkPollingInterval": 3000,
|
||||
"loadAvgPollingInterval": 3000,
|
||||
"useCustomColors": false,
|
||||
"warningColor": "",
|
||||
"criticalColor": "",
|
||||
"diskPath": "/",
|
||||
"externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor"
|
||||
},
|
||||
"dock": {
|
||||
@@ -291,7 +291,10 @@
|
||||
"network": {
|
||||
"wifiEnabled": true,
|
||||
"bluetoothRssiPollingEnabled": false,
|
||||
"bluetoothRssiPollIntervalMs": 10000
|
||||
"bluetoothRssiPollIntervalMs": 10000,
|
||||
"wifiDetailsViewMode": "grid",
|
||||
"bluetoothDetailsViewMode": "grid",
|
||||
"bluetoothHideUnnamedDevices": false
|
||||
},
|
||||
"sessionMenu": {
|
||||
"enableCountdown": true,
|
||||
@@ -299,6 +302,7 @@
|
||||
"position": "center",
|
||||
"showHeader": true,
|
||||
"largeButtonsStyle": false,
|
||||
"largeButtonsLayout": "grid",
|
||||
"showNumberLabels": true,
|
||||
"powerOptions": [
|
||||
{
|
||||
@@ -416,6 +420,7 @@
|
||||
"mango": false,
|
||||
"zed": false,
|
||||
"helix": false,
|
||||
"zenBrowser": false,
|
||||
"enableUserTemplates": false
|
||||
},
|
||||
"nightLight": {
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
"displayMode": "onhover"
|
||||
},
|
||||
"Clock": {
|
||||
"usePrimaryColor": true,
|
||||
"usePrimaryColor": false,
|
||||
"useCustomFont": false,
|
||||
"customFont": "",
|
||||
"formatHorizontal": "HH:mm ddd, MMM dd",
|
||||
@@ -68,10 +68,13 @@
|
||||
"maxTextLength": {
|
||||
"horizontal": 10,
|
||||
"vertical": 10
|
||||
}
|
||||
},
|
||||
"enableColorization": false,
|
||||
"colorizeSystemIcon": "none"
|
||||
},
|
||||
"KeyboardLayout": {
|
||||
"displayMode": "onhover"
|
||||
"displayMode": "onhover",
|
||||
"showIcon": true
|
||||
},
|
||||
"LockKeys": {
|
||||
"showCapsLock": true,
|
||||
@@ -81,6 +84,10 @@
|
||||
"numLockIcon": "letter-n",
|
||||
"scrollLockIcon": "letter-s"
|
||||
},
|
||||
"Launcher": {
|
||||
"icon": "rocket",
|
||||
"usePrimaryColor": false
|
||||
},
|
||||
"MediaMini": {
|
||||
"hideMode": "hidden",
|
||||
"scrollingMode": "hover",
|
||||
@@ -113,6 +120,7 @@
|
||||
"showCpuUsage": true,
|
||||
"showCpuTemp": true,
|
||||
"showGpuTemp": false,
|
||||
"showLoadAverage": false,
|
||||
"showMemoryUsage": true,
|
||||
"showMemoryAsPercent": false,
|
||||
"showNetworkStats": false,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# BluetoothConnectionScript.sh
|
||||
# bluetooth-connect.sh
|
||||
# Pairs, trusts, and attempts to connect to a Bluetooth device using bluetoothctl.
|
||||
# Usage: BluetoothConnectionScript.sh <addr> <pairWaitSeconds> <attempts> <intervalSec>
|
||||
# Usage: bluetooth-connect.sh <addr> <pairWaitSeconds> <attempts> <intervalSec>
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
Executable
+53
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
# Generate a registry.json from all color schemes in Assets/ColorScheme
|
||||
# Output format matches ~/Development/misc/noctalia/noctalia-colorschemes/registry.json
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
COLORSCHEME_DIR="$PROJECT_ROOT/Assets/ColorScheme"
|
||||
|
||||
# Start JSON output
|
||||
echo '{'
|
||||
echo ' "version": 1,'
|
||||
echo ' "themes": ['
|
||||
|
||||
first=true
|
||||
for dir in "$COLORSCHEME_DIR"/*/; do
|
||||
[ -d "$dir" ] || continue
|
||||
|
||||
name=$(basename "$dir")
|
||||
json_file="$dir/$name.json"
|
||||
|
||||
[ -f "$json_file" ] || continue
|
||||
|
||||
# Read the JSON file content
|
||||
content=$(cat "$json_file")
|
||||
|
||||
# Extract dark and light objects using jq
|
||||
dark=$(echo "$content" | jq -c '.dark')
|
||||
light=$(echo "$content" | jq -c '.light')
|
||||
|
||||
# Skip if missing dark or light
|
||||
[ "$dark" = "null" ] || [ "$light" = "null" ] && continue
|
||||
|
||||
# Add comma before all but first entry
|
||||
if [ "$first" = true ]; then
|
||||
first=false
|
||||
else
|
||||
echo ','
|
||||
fi
|
||||
|
||||
# Output theme entry
|
||||
printf ' {\n'
|
||||
printf ' "name": "%s",\n' "$name"
|
||||
printf ' "path": "%s",\n' "$name"
|
||||
printf ' "dark": %s,\n' "$dark"
|
||||
printf ' "light": %s\n' "$light"
|
||||
printf ' }'
|
||||
done
|
||||
|
||||
echo ''
|
||||
echo ' ]'
|
||||
echo '}'
|
||||
@@ -1,5 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Find qsb binary in common locations.
|
||||
QSB_PATHS=(
|
||||
"/usr/lib/qt6/bin/qsb"
|
||||
"/usr/lib64/qt6/bin/qsb"
|
||||
)
|
||||
|
||||
QSB_BIN=""
|
||||
for path in "${QSB_PATHS[@]}"; do
|
||||
if [ -x "$path" ]; then
|
||||
QSB_BIN="$path"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "$QSB_BIN" ]; then
|
||||
echo "Error: qsb binary not found in any of: ${QSB_PATHS[*]}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Directory containing the source shaders.
|
||||
SOURCE_DIR="Shaders/frag/"
|
||||
|
||||
@@ -64,7 +83,7 @@ for shader in "${SHADERS_TO_COMPILE[@]}"; do
|
||||
output_path="$DEST_DIR$shader_name.frag.qsb"
|
||||
|
||||
# Construct and run the qsb command.
|
||||
/usr/lib/qt6/bin/qsb --qt6 -o "$output_path" "$shader"
|
||||
"$QSB_BIN" --qt6 -o "$output_path" "$shader"
|
||||
|
||||
# Print a message to confirm compilation.
|
||||
echo "Compiled $(basename "$shader") to $output_path"
|
||||
|
||||
@@ -45,11 +45,6 @@ Singleton {
|
||||
readonly property color mHover: customColorsData.mHover
|
||||
readonly property color mOnHover: customColorsData.mOnHover
|
||||
|
||||
// --- Absolute Colors
|
||||
readonly property color transparent: "transparent"
|
||||
readonly property color black: "#000000"
|
||||
readonly property color white: "#ffffff"
|
||||
|
||||
// --------------------------------
|
||||
// Default colors: Rose Pine
|
||||
QtObject {
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import qs.Commons
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
// Clear legacy emoji usage cache to adopt new format
|
||||
function migrate(adapter, logger, rawJson) {
|
||||
logger.i("Settings", "Migrating settings to v36");
|
||||
|
||||
const usagePath = Settings.cacheDir + "emoji_usage.json";
|
||||
|
||||
if (!usagePath.endsWith("emoji_usage.json")) {
|
||||
logger.w("Settings", "Skipping emoji usage cleanup due to unexpected path: " + usagePath);
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
// Ensure dir exists then remove the file
|
||||
Quickshell.execDetached(["sh", "-c", `mkdir -p "${Settings.cacheDir}" && rm -f -- "${usagePath}"`]);
|
||||
logger.i("Settings", "Cleared legacy emoji usage file at: " + usagePath);
|
||||
} catch (e) {
|
||||
logger.w("Settings", "Failed to clear emoji usage cache: " + e);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
import QtQuick
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
// Rename WiFi widgets/shortcuts to Network
|
||||
function migrate(adapter, logger, rawJson) {
|
||||
logger.i("Settings", "Migrating settings to v37 (WiFi → Network)");
|
||||
|
||||
let changed = false;
|
||||
|
||||
function migrateArray(contextName, rawArr, adapterArr, setItem) {
|
||||
if (!adapterArr)
|
||||
return;
|
||||
const len = adapterArr.length;
|
||||
for (let i = 0; i < len; i++) {
|
||||
// Prefer raw item if present, otherwise use adapter item
|
||||
const item = rawArr && rawArr[i] !== undefined ? rawArr[i] : adapterArr[i];
|
||||
|
||||
if (item === undefined || item === null)
|
||||
continue;
|
||||
|
||||
// Case 1: simple string entries
|
||||
if (typeof item === "string") {
|
||||
if (item === "WiFi") {
|
||||
setItem(i, "Network");
|
||||
changed = true;
|
||||
logger.i("Settings", `Migrated ${contextName}[${i}] from WiFi to Network (string entry)`);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// Case 2: object entries with id
|
||||
let id = item.id !== undefined ? item.id : (item.widgetId !== undefined ? item.widgetId : undefined);
|
||||
if (id === "WiFi") {
|
||||
var newObj = {};
|
||||
for (var key in item)
|
||||
newObj[key] = item[key];
|
||||
if (newObj.id !== undefined)
|
||||
newObj.id = "Network";
|
||||
if (newObj.widgetId !== undefined && newObj.id === undefined)
|
||||
newObj.widgetId = "Network"; // fallback if older schema used widgetId
|
||||
setItem(i, newObj);
|
||||
changed = true;
|
||||
logger.i("Settings", `Migrated ${contextName}[${i}] from WiFi to Network (object entry)`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- Bar widgets: left/center/right
|
||||
const sections = ["left", "center", "right"];
|
||||
for (const section of sections) {
|
||||
const rawArr = rawJson?.bar?.widgets?.[section];
|
||||
const adapterArr = adapter?.bar?.widgets?.[section];
|
||||
migrateArray(`bar.widgets.${section}`, rawArr, adapterArr, function (i, v) {
|
||||
adapter.bar.widgets[section][i] = v;
|
||||
});
|
||||
}
|
||||
|
||||
// --- Control Center shortcuts: left/right
|
||||
const rawLeft = rawJson?.controlCenter?.shortcuts?.left;
|
||||
const adLeft = adapter?.controlCenter?.shortcuts?.left;
|
||||
migrateArray("controlCenter.shortcuts.left", rawLeft, adLeft, function (i, v) {
|
||||
adapter.controlCenter.shortcuts.left[i] = v;
|
||||
});
|
||||
|
||||
const rawRight = rawJson?.controlCenter?.shortcuts?.right;
|
||||
const adRight = adapter?.controlCenter?.shortcuts?.right;
|
||||
migrateArray("controlCenter.shortcuts.right", rawRight, adRight, function (i, v) {
|
||||
adapter.controlCenter.shortcuts.right[i] = v;
|
||||
});
|
||||
|
||||
if (!changed) {
|
||||
logger.i("Settings", "No WiFi widget IDs found to migrate; leaving settings unchanged");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,9 @@ QtObject {
|
||||
28: migration28Component,
|
||||
32: migration32Component,
|
||||
33: migration33Component,
|
||||
35: migration35Component
|
||||
35: migration35Component,
|
||||
36: migration36Component,
|
||||
37: migration37Component
|
||||
})
|
||||
|
||||
// Migration components
|
||||
@@ -20,4 +22,6 @@ QtObject {
|
||||
property Component migration32Component: Migration32 {}
|
||||
property Component migration33Component: Migration33 {}
|
||||
property Component migration35Component: Migration35 {}
|
||||
property Component migration36Component: Migration36 {}
|
||||
property Component migration37Component: Migration37 {}
|
||||
}
|
||||
|
||||
+21
-14
@@ -25,7 +25,7 @@ Singleton {
|
||||
- Default cache directory: ~/.cache/noctalia
|
||||
*/
|
||||
readonly property alias data: adapter // Used to access via Settings.data.xxx.yyy
|
||||
readonly property int settingsVersion: 35
|
||||
readonly property int settingsVersion: 37
|
||||
readonly property bool isDebug: Quickshell.env("NOCTALIA_DEBUG") === "1"
|
||||
readonly property string shellName: "noctalia"
|
||||
readonly property string configDir: Quickshell.env("NOCTALIA_CONFIG_DIR") || (Quickshell.env("XDG_CONFIG_HOME") || Quickshell.env("HOME") + "/.config") + "/" + shellName + "/"
|
||||
@@ -215,13 +215,10 @@ Singleton {
|
||||
widgets: JsonObject {
|
||||
property list<var> left: [
|
||||
{
|
||||
"icon": "rocket",
|
||||
"id": "CustomButton",
|
||||
"leftClickExec": "qs -c noctalia-shell ipc call launcher toggle"
|
||||
"id": "Launcher"
|
||||
},
|
||||
{
|
||||
"id": "Clock",
|
||||
"usePrimaryColor": false
|
||||
"id": "Clock"
|
||||
},
|
||||
{
|
||||
"id": "SystemMonitor"
|
||||
@@ -302,8 +299,11 @@ Singleton {
|
||||
// Details view mode persistence for panels
|
||||
property string wifiDetailsViewMode: "grid" // "grid" or "list"
|
||||
property string bluetoothDetailsViewMode: "grid" // "grid" or "list"
|
||||
// Persist the last-opened view for the unified network panel: "wifi" | "ethernet"
|
||||
property string networkPanelView: "wifi"
|
||||
// Bluetooth available devices list: hide items without a name
|
||||
property bool bluetoothHideUnnamedDevices: false
|
||||
property bool boxBorderEnabled: false
|
||||
}
|
||||
|
||||
// location
|
||||
@@ -367,6 +367,8 @@ Singleton {
|
||||
property bool setWallpaperOnAllMonitors: true
|
||||
property string fillMode: "crop"
|
||||
property color fillColor: "#000000"
|
||||
property bool useSolidColor: false
|
||||
property color solidColor: "#1a1a2e"
|
||||
property bool randomEnabled: false // Deprecated: use wallpaperChangeMode instead
|
||||
property string wallpaperChangeMode: "random" // "random" or "alphabetical"
|
||||
property int randomIntervalSec: 300 // 5 min
|
||||
@@ -406,18 +408,21 @@ Singleton {
|
||||
property bool showCategories: true
|
||||
// Icon mode: "tabler" or "native"
|
||||
property string iconMode: "tabler"
|
||||
property bool showIconBackground: true
|
||||
property bool ignoreMouseInput: false
|
||||
property string screenshotAnnotationTool: ""
|
||||
}
|
||||
|
||||
// control center
|
||||
property JsonObject controlCenter: JsonObject {
|
||||
// Position: close_to_bar_button, center, top_left, top_right, bottom_left, bottom_right, bottom_center, top_center
|
||||
property string position: "close_to_bar_button"
|
||||
property string diskPath: "/"
|
||||
property JsonObject shortcuts
|
||||
shortcuts: JsonObject {
|
||||
property list<var> left: [
|
||||
{
|
||||
"id": "WiFi"
|
||||
"id": "Network"
|
||||
},
|
||||
{
|
||||
"id": "Bluetooth"
|
||||
@@ -491,10 +496,10 @@ Singleton {
|
||||
property int memPollingInterval: 3000
|
||||
property int diskPollingInterval: 3000
|
||||
property int networkPollingInterval: 3000
|
||||
property int loadAvgPollingInterval: 3000
|
||||
property bool useCustomColors: false
|
||||
property string warningColor: ""
|
||||
property string criticalColor: ""
|
||||
property string diskPath: "/"
|
||||
property string externalMonitor: "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor"
|
||||
}
|
||||
|
||||
@@ -507,8 +512,7 @@ Singleton {
|
||||
property real size: 1
|
||||
property bool onlySameOutput: true
|
||||
property list<string> monitors: [] // holds dock visibility per monitor
|
||||
// Desktop entry IDs pinned to the dock (e.g., "org.kde.konsole", "firefox.desktop")
|
||||
property list<string> pinnedApps: []
|
||||
property list<string> pinnedApps: [] // Desktop entry IDs pinned to the dock (e.g., "org.kde.konsole", "firefox.desktop")
|
||||
property bool colorizeIcons: false
|
||||
|
||||
property bool pinnedStatic: false
|
||||
@@ -520,10 +524,11 @@ Singleton {
|
||||
// network
|
||||
property JsonObject network: JsonObject {
|
||||
property bool wifiEnabled: true
|
||||
// Opt-in Bluetooth RSSI polling (uses bluetoothctl)
|
||||
property bool bluetoothRssiPollingEnabled: false
|
||||
// Polling interval in milliseconds for RSSI queries
|
||||
property int bluetoothRssiPollIntervalMs: 10000
|
||||
property bool bluetoothRssiPollingEnabled: false // Opt-in Bluetooth RSSI polling (uses bluetoothctl)
|
||||
property int bluetoothRssiPollIntervalMs: 10000 // Polling interval in milliseconds for RSSI queries
|
||||
property string wifiDetailsViewMode: "grid" // "grid" or "list"
|
||||
property string bluetoothDetailsViewMode: "grid" // "grid" or "list"
|
||||
property bool bluetoothHideUnnamedDevices: false
|
||||
}
|
||||
|
||||
// session menu
|
||||
@@ -533,6 +538,7 @@ Singleton {
|
||||
property string position: "center"
|
||||
property bool showHeader: true
|
||||
property bool largeButtonsStyle: false
|
||||
property string largeButtonsLayout: "grid"
|
||||
property bool showNumberLabels: true
|
||||
property list<var> powerOptions: [
|
||||
{
|
||||
@@ -656,6 +662,7 @@ Singleton {
|
||||
property bool mango: false
|
||||
property bool zed: false
|
||||
property bool helix: false
|
||||
property bool zenBrowser: false
|
||||
property bool enableUserTemplates: false
|
||||
}
|
||||
|
||||
|
||||
+18
-8
@@ -85,7 +85,7 @@ Singleton {
|
||||
|
||||
readonly property real uiScaleRatio: Settings.data.general.scaleRatio
|
||||
|
||||
// Bar Dimensions
|
||||
// Bar Height
|
||||
readonly property real barHeight: {
|
||||
let h;
|
||||
switch (Settings.data.bar.density) {
|
||||
@@ -105,14 +105,17 @@ Singleton {
|
||||
case "default":
|
||||
h = (Settings.data.bar.position === "left" || Settings.data.bar.position === "right") ? 33 : 31;
|
||||
}
|
||||
return h;
|
||||
//return toOdd(h);
|
||||
return toOdd(h);
|
||||
}
|
||||
|
||||
// Capsule Height
|
||||
// Note: capsule must always be smaller than barHeight to account for border rendering
|
||||
// Qt Quick Rectangle borders are drawn centered on edges (half inside, half outside)
|
||||
readonly property real capsuleHeight: {
|
||||
let h;
|
||||
switch (Settings.data.bar.density) {
|
||||
case "mini":
|
||||
h = Math.round(barHeight * 1.0);
|
||||
h = Math.round(barHeight * 0.90);
|
||||
break;
|
||||
case "compact":
|
||||
h = Math.round(barHeight * 0.85);
|
||||
@@ -121,19 +124,26 @@ Singleton {
|
||||
h = Math.round(barHeight * 0.75);
|
||||
break;
|
||||
case "spacious":
|
||||
h = Math.round(barHeight * 0.75);
|
||||
h = Math.round(barHeight * 0.65);
|
||||
break;
|
||||
default:
|
||||
case "default":
|
||||
h = Math.round(barHeight * 0.82);
|
||||
break;
|
||||
}
|
||||
return toOdd(h);
|
||||
}
|
||||
readonly property color capsuleColor: Settings.data.bar.showCapsule ? Qt.alpha(Color.mSurfaceVariant, Settings.data.bar.capsuleOpacity) : Color.transparent
|
||||
|
||||
readonly property color capsuleBorderColor: Settings.data.bar.showOutline ? Color.mPrimary : Color.transparent
|
||||
// The base/default font size for all texts in the bar
|
||||
readonly property real _barBaseFontSize: Math.max(1, (Style.barHeight / Style.capsuleHeight) * Style.fontSizeXXS)
|
||||
readonly property real barFontSize: (Settings.data.bar.position === "left" || Settings.data.bar.position === "right") ? _barBaseFontSize * 0.9 : _barBaseFontSize
|
||||
|
||||
readonly property color capsuleColor: Settings.data.bar.showCapsule ? Qt.alpha(Color.mSurfaceVariant, Settings.data.bar.capsuleOpacity) : "transparent"
|
||||
|
||||
readonly property color capsuleBorderColor: Settings.data.bar.showOutline ? Color.mPrimary : "transparent"
|
||||
readonly property int capsuleBorderWidth: Settings.data.bar.showOutline ? Style.borderS : 0
|
||||
|
||||
readonly property color boxBorderColor: Settings.data.ui.boxBorderEnabled ? Color.mOutline : "transparent"
|
||||
|
||||
// Pixel-perfect utility for centering content without subpixel positioning
|
||||
function pixelAlignCenter(containerSize, contentSize) {
|
||||
return Math.round((containerSize - contentSize) / 2);
|
||||
|
||||
@@ -80,6 +80,9 @@ function evaluate(expression) {
|
||||
.replace(/\bcosd\s*\(/g, '(function(x) { return Math.cos(' + (Math.PI / 180) + ' * x); })(')
|
||||
.replace(/\btand\s*\(/g, '(function(x) { return Math.tan(' + (Math.PI / 180) + ' * x); })(');
|
||||
|
||||
// Handle ^ for exponentiation: convert 2^3 to Math.pow(2,3)
|
||||
processed = processed.replace(/([\d.]+|\))\^([\d.]+|\([^)]*\))/g, 'Math.pow($1,$2)');
|
||||
|
||||
// Sanitize expression (only allow safe characters)
|
||||
if (!/^[0-9+\-*/().\s\w,]+$/.test(processed)) {
|
||||
throw new Error("Invalid characters in expression");
|
||||
|
||||
@@ -40,11 +40,21 @@ Variants {
|
||||
|
||||
// Used to debounce wallpaper changes
|
||||
property string futureWallpaper: ""
|
||||
// Track the original wallpaper path being transitioned to (before caching)
|
||||
property string transitioningToOriginalPath: ""
|
||||
|
||||
// Fillmode default is "crop"
|
||||
property real fillMode: WallpaperService.getFillModeUniform()
|
||||
property vector4d fillColor: Qt.vector4d(Settings.data.wallpaper.fillColor.r, Settings.data.wallpaper.fillColor.g, Settings.data.wallpaper.fillColor.b, 1.0)
|
||||
|
||||
// Solid color mode - track whether current/next are solid colors
|
||||
property bool isSolid1: false
|
||||
property bool isSolid2: false
|
||||
property color _solidColor1: Settings.data.wallpaper.solidColor
|
||||
property color _solidColor2: Settings.data.wallpaper.solidColor
|
||||
property vector4d solidColor1: Qt.vector4d(_solidColor1.r, _solidColor1.g, _solidColor1.b, 1.0)
|
||||
property vector4d solidColor2: Qt.vector4d(_solidColor2.r, _solidColor2.g, _solidColor2.b, 1.0)
|
||||
|
||||
Component.onCompleted: setWallpaperInitial()
|
||||
|
||||
Component.onDestruction: {
|
||||
@@ -67,7 +77,6 @@ Variants {
|
||||
target: WallpaperService
|
||||
function onWallpaperChanged(screenName, path) {
|
||||
if (screenName === modelData.name) {
|
||||
// Request preprocessed wallpaper from cache service
|
||||
requestPreprocessedWallpaper(path);
|
||||
}
|
||||
}
|
||||
@@ -76,7 +85,6 @@ Variants {
|
||||
Connections {
|
||||
target: CompositorService
|
||||
function onDisplayScalesChanged() {
|
||||
// Re-request preprocessed wallpaper at new dimensions
|
||||
if (isStartupTransition) {
|
||||
return;
|
||||
}
|
||||
@@ -87,7 +95,7 @@ Variants {
|
||||
}
|
||||
}
|
||||
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
screen: modelData
|
||||
WlrLayershell.layer: WlrLayer.Background
|
||||
WlrLayershell.exclusionMode: ExclusionMode.Ignore
|
||||
@@ -105,9 +113,7 @@ Variants {
|
||||
interval: 333
|
||||
running: false
|
||||
repeat: false
|
||||
onTriggered: {
|
||||
changeWallpaper();
|
||||
}
|
||||
onTriggered: changeWallpaper()
|
||||
}
|
||||
|
||||
Image {
|
||||
@@ -193,6 +199,12 @@ Variants {
|
||||
property real screenWidth: width
|
||||
property real screenHeight: height
|
||||
|
||||
// Solid color mode
|
||||
property real isSolid1: root.isSolid1 ? 1.0 : 0.0
|
||||
property real isSolid2: root.isSolid2 ? 1.0 : 0.0
|
||||
property vector4d solidColor1: root.solidColor1
|
||||
property vector4d solidColor2: root.solidColor2
|
||||
|
||||
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/wp_fade.frag.qsb")
|
||||
}
|
||||
}
|
||||
@@ -219,6 +231,12 @@ Variants {
|
||||
property real screenWidth: width
|
||||
property real screenHeight: height
|
||||
|
||||
// Solid color mode
|
||||
property real isSolid1: root.isSolid1 ? 1.0 : 0.0
|
||||
property real isSolid2: root.isSolid2 ? 1.0 : 0.0
|
||||
property vector4d solidColor1: root.solidColor1
|
||||
property vector4d solidColor2: root.solidColor2
|
||||
|
||||
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/wp_wipe.frag.qsb")
|
||||
}
|
||||
}
|
||||
@@ -247,6 +265,12 @@ Variants {
|
||||
property real screenWidth: width
|
||||
property real screenHeight: height
|
||||
|
||||
// Solid color mode
|
||||
property real isSolid1: root.isSolid1 ? 1.0 : 0.0
|
||||
property real isSolid2: root.isSolid2 ? 1.0 : 0.0
|
||||
property vector4d solidColor1: root.solidColor1
|
||||
property vector4d solidColor2: root.solidColor2
|
||||
|
||||
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/wp_disc.frag.qsb")
|
||||
}
|
||||
}
|
||||
@@ -275,6 +299,12 @@ Variants {
|
||||
property real screenWidth: width
|
||||
property real screenHeight: height
|
||||
|
||||
// Solid color mode
|
||||
property real isSolid1: root.isSolid1 ? 1.0 : 0.0
|
||||
property real isSolid2: root.isSolid2 ? 1.0 : 0.0
|
||||
property vector4d solidColor1: root.solidColor1
|
||||
property vector4d solidColor2: root.solidColor2
|
||||
|
||||
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/wp_stripes.frag.qsb")
|
||||
}
|
||||
}
|
||||
@@ -290,6 +320,13 @@ Variants {
|
||||
duration: transitionType == "stripes" ? Settings.data.wallpaper.transitionDuration * 1.6 : Settings.data.wallpaper.transitionDuration
|
||||
easing.type: Easing.InOutCubic
|
||||
onFinished: {
|
||||
// Clear the tracking of what we're transitioning to
|
||||
transitioningToOriginalPath = "";
|
||||
|
||||
// Transfer solid color state from next to current
|
||||
isSolid1 = isSolid2;
|
||||
_solidColor1 = _solidColor2;
|
||||
|
||||
// Assign new image to current BEFORE clearing to prevent flicker
|
||||
const tempSource = nextWallpaper.source;
|
||||
currentWallpaper.source = tempSource;
|
||||
@@ -299,6 +336,7 @@ Variants {
|
||||
// Force complete cleanup to free texture memory
|
||||
Qt.callLater(() => {
|
||||
nextWallpaper.source = "";
|
||||
isSolid2 = false;
|
||||
Qt.callLater(() => {
|
||||
currentWallpaper.asynchronous = true;
|
||||
});
|
||||
@@ -318,12 +356,28 @@ Variants {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if we're in solid color mode
|
||||
if (Settings.data.wallpaper.useSolidColor) {
|
||||
var solidPath = WallpaperService.createSolidColorPath(Settings.data.wallpaper.solidColor.toString());
|
||||
futureWallpaper = solidPath;
|
||||
performStartupTransition();
|
||||
return;
|
||||
}
|
||||
|
||||
const wallpaperPath = WallpaperService.getWallpaper(modelData.name);
|
||||
|
||||
// Check if the path is a solid color
|
||||
if (WallpaperService.isSolidColorPath(wallpaperPath)) {
|
||||
futureWallpaper = wallpaperPath;
|
||||
performStartupTransition();
|
||||
return;
|
||||
}
|
||||
|
||||
const compositorScale = CompositorService.getDisplayScale(modelData.name);
|
||||
const targetWidth = Math.round(modelData.width * compositorScale);
|
||||
const targetHeight = Math.round(modelData.height * compositorScale);
|
||||
|
||||
ImageCacheService.getFullscreen(wallpaperPath, modelData.name, targetWidth, targetHeight, function (cachedPath, success) {
|
||||
ImageCacheService.getLarge(wallpaperPath, targetWidth, targetHeight, function (cachedPath, success) {
|
||||
if (success) {
|
||||
futureWallpaper = cachedPath;
|
||||
} else {
|
||||
@@ -336,11 +390,26 @@ Variants {
|
||||
|
||||
// ------------------------------------------------------
|
||||
function requestPreprocessedWallpaper(originalPath) {
|
||||
// If we're already transitioning to this exact wallpaper, skip the request
|
||||
if (transitioning && originalPath === transitioningToOriginalPath) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Store the original path we're working towards
|
||||
transitioningToOriginalPath = originalPath;
|
||||
|
||||
// Handle solid color paths - no preprocessing needed
|
||||
if (WallpaperService.isSolidColorPath(originalPath)) {
|
||||
futureWallpaper = originalPath;
|
||||
debounceTimer.restart();
|
||||
return;
|
||||
}
|
||||
|
||||
const compositorScale = CompositorService.getDisplayScale(modelData.name);
|
||||
const targetWidth = Math.round(modelData.width * compositorScale);
|
||||
const targetHeight = Math.round(modelData.height * compositorScale);
|
||||
|
||||
ImageCacheService.getFullscreen(originalPath, modelData.name, targetWidth, targetHeight, function (cachedPath, success) {
|
||||
ImageCacheService.getLarge(originalPath, targetWidth, targetHeight, function (cachedPath, success) {
|
||||
if (success) {
|
||||
futureWallpaper = cachedPath;
|
||||
} else {
|
||||
@@ -355,6 +424,20 @@ Variants {
|
||||
transitionAnimation.stop();
|
||||
transitionProgress = 0.0;
|
||||
|
||||
// Check if this is a solid color
|
||||
var isSolidSource = WallpaperService.isSolidColorPath(source);
|
||||
isSolid1 = isSolidSource;
|
||||
isSolid2 = false;
|
||||
|
||||
if (isSolidSource) {
|
||||
var colorStr = WallpaperService.getSolidColor(source);
|
||||
_solidColor1 = colorStr;
|
||||
// Clear image sources for memory efficiency
|
||||
currentWallpaper.source = "";
|
||||
nextWallpaper.source = "";
|
||||
return;
|
||||
}
|
||||
|
||||
// Clear nextWallpaper completely to free texture memory
|
||||
nextWallpaper.source = "";
|
||||
nextWallpaper.sourceSize = undefined;
|
||||
@@ -368,7 +451,24 @@ Variants {
|
||||
|
||||
// ------------------------------------------------------
|
||||
function setWallpaperWithTransition(source) {
|
||||
if (source === currentWallpaper.source) {
|
||||
// Check if this is a solid color transition
|
||||
var isSolidSource = WallpaperService.isSolidColorPath(source);
|
||||
|
||||
// For solid colors, check if we're already showing the same color
|
||||
if (isSolidSource && isSolid1) {
|
||||
var newColor = WallpaperService.getSolidColor(source);
|
||||
if (newColor === _solidColor1.toString()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// For images, check if source matches
|
||||
if (!isSolidSource && source === currentWallpaper.source) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If we're already transitioning to this same wallpaper, skip
|
||||
if (transitioning && source === nextWallpaper.source) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -377,30 +477,47 @@ Variants {
|
||||
transitionAnimation.stop();
|
||||
transitionProgress = 0;
|
||||
|
||||
// Assign nextWallpaper to currentWallpaper BEFORE clearing to prevent flicker
|
||||
// Transfer next state to current
|
||||
isSolid1 = isSolid2;
|
||||
_solidColor1 = _solidColor2;
|
||||
const newCurrentSource = nextWallpaper.source;
|
||||
currentWallpaper.source = newCurrentSource;
|
||||
|
||||
// Now clear nextWallpaper after current has the new source
|
||||
Qt.callLater(() => {
|
||||
nextWallpaper.source = "";
|
||||
isSolid2 = false;
|
||||
|
||||
// Now set the next wallpaper after a brief delay
|
||||
Qt.callLater(() => {
|
||||
nextWallpaper.source = source;
|
||||
currentWallpaper.asynchronous = false;
|
||||
transitionAnimation.start();
|
||||
_startTransitionTo(source, isSolidSource);
|
||||
});
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
nextWallpaper.source = source;
|
||||
if (nextWallpaper.status === Image.Ready) {
|
||||
_startTransitionTo(source, isSolidSource);
|
||||
}
|
||||
|
||||
// Helper to start transition to a new source
|
||||
function _startTransitionTo(source, isSolidSource) {
|
||||
isSolid2 = isSolidSource;
|
||||
|
||||
if (isSolidSource) {
|
||||
var colorStr = WallpaperService.getSolidColor(source);
|
||||
_solidColor2 = colorStr;
|
||||
// No image to load, start transition immediately
|
||||
nextWallpaper.source = "";
|
||||
currentWallpaper.asynchronous = false;
|
||||
transitionAnimation.start();
|
||||
} else {
|
||||
nextWallpaper.pendingTransition = true;
|
||||
nextWallpaper.source = source;
|
||||
if (nextWallpaper.status === Image.Ready) {
|
||||
currentWallpaper.asynchronous = false;
|
||||
transitionAnimation.start();
|
||||
} else {
|
||||
nextWallpaper.pendingTransition = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ Loader {
|
||||
required property ShellScreen modelData
|
||||
property string wallpaper: ""
|
||||
property string cachedWallpaper: ""
|
||||
property bool isSolidColor: false
|
||||
property color solidColor: Settings.data.wallpaper.solidColor
|
||||
|
||||
Component.onCompleted: {
|
||||
if (modelData) {
|
||||
@@ -47,6 +49,14 @@ Loader {
|
||||
Qt.callLater(setWallpaperInitial);
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if we're in solid color mode
|
||||
if (Settings.data.wallpaper.useSolidColor) {
|
||||
var solidPath = WallpaperService.createSolidColorPath(Settings.data.wallpaper.solidColor.toString());
|
||||
wallpaper = solidPath;
|
||||
return;
|
||||
}
|
||||
|
||||
const wallpaperPath = WallpaperService.getWallpaper(modelData.name);
|
||||
if (wallpaperPath && wallpaperPath !== wallpaper) {
|
||||
wallpaper = wallpaperPath;
|
||||
@@ -57,13 +67,24 @@ Loader {
|
||||
onWallpaperChanged: {
|
||||
if (!wallpaper)
|
||||
return;
|
||||
|
||||
// Check if this is a solid color path
|
||||
if (WallpaperService.isSolidColorPath(wallpaper)) {
|
||||
isSolidColor = true;
|
||||
var colorStr = WallpaperService.getSolidColor(wallpaper);
|
||||
solidColor = colorStr;
|
||||
cachedWallpaper = "";
|
||||
return;
|
||||
}
|
||||
|
||||
isSolidColor = false;
|
||||
// Use 1280x720 for overview since it's heavily blurred anyway
|
||||
ImageCacheService.getFullscreen(wallpaper, modelData.name, 1280, 720, function (path, success) {
|
||||
ImageCacheService.getLarge(wallpaper, 1280, 720, function (path, success) {
|
||||
cachedWallpaper = path;
|
||||
});
|
||||
}
|
||||
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
screen: modelData
|
||||
WlrLayershell.layer: WlrLayer.Background
|
||||
WlrLayershell.exclusionMode: ExclusionMode.Ignore
|
||||
@@ -76,9 +97,24 @@ Loader {
|
||||
left: true
|
||||
}
|
||||
|
||||
// Solid color background
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
visible: isSolidColor
|
||||
color: solidColor
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: Settings.data.colorSchemes.darkMode ? Color.mSurface : Color.mOnSurface
|
||||
opacity: 0.8
|
||||
}
|
||||
}
|
||||
|
||||
// Image background
|
||||
Image {
|
||||
id: bgImage
|
||||
anchors.fill: parent
|
||||
visible: !isSolidColor
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
source: cachedWallpaper
|
||||
smooth: true
|
||||
|
||||
@@ -223,7 +223,6 @@ Item {
|
||||
required property int index
|
||||
|
||||
widgetId: modelData.id || ""
|
||||
barDensity: Settings.data.bar.density
|
||||
widgetScreen: root.screen
|
||||
widgetProps: ({
|
||||
"widgetId": modelData.id,
|
||||
@@ -249,7 +248,6 @@ Item {
|
||||
required property int index
|
||||
|
||||
widgetId: modelData.id || ""
|
||||
barDensity: Settings.data.bar.density
|
||||
widgetScreen: root.screen
|
||||
widgetProps: ({
|
||||
"widgetId": modelData.id,
|
||||
@@ -276,7 +274,6 @@ Item {
|
||||
required property int index
|
||||
|
||||
widgetId: modelData.id || ""
|
||||
barDensity: Settings.data.bar.density
|
||||
widgetScreen: root.screen
|
||||
widgetProps: ({
|
||||
"widgetId": modelData.id,
|
||||
@@ -314,7 +311,6 @@ Item {
|
||||
required property int index
|
||||
|
||||
widgetId: modelData.id || ""
|
||||
barDensity: Settings.data.bar.density
|
||||
widgetScreen: root.screen
|
||||
widgetProps: ({
|
||||
"widgetId": modelData.id,
|
||||
@@ -342,7 +338,6 @@ Item {
|
||||
required property int index
|
||||
|
||||
widgetId: modelData.id || ""
|
||||
barDensity: Settings.data.bar.density
|
||||
widgetScreen: root.screen
|
||||
widgetProps: ({
|
||||
"widgetId": modelData.id,
|
||||
@@ -371,7 +366,6 @@ Item {
|
||||
required property int index
|
||||
|
||||
widgetId: modelData.id || ""
|
||||
barDensity: Settings.data.bar.density
|
||||
widgetScreen: root.screen
|
||||
widgetProps: ({
|
||||
"widgetId": modelData.id,
|
||||
|
||||
@@ -13,15 +13,14 @@ Item {
|
||||
property string text: ""
|
||||
property string suffix: ""
|
||||
property string tooltipText: ""
|
||||
property string density: ""
|
||||
property bool autoHide: false
|
||||
property bool forceOpen: false
|
||||
property bool forceClose: false
|
||||
property bool oppositeDirection: false
|
||||
property bool hovered: false
|
||||
property bool rotateText: false
|
||||
property color customBackgroundColor: Color.transparent
|
||||
property color customTextIconColor: Color.transparent
|
||||
property color customBackgroundColor: "transparent"
|
||||
property color customTextIconColor: "transparent"
|
||||
|
||||
readonly property string barPosition: Settings.data.bar.position
|
||||
readonly property bool isVerticalBar: barPosition === "left" || barPosition === "right"
|
||||
@@ -57,7 +56,6 @@ Item {
|
||||
forceClose: root.forceClose
|
||||
oppositeDirection: root.oppositeDirection
|
||||
hovered: root.hovered
|
||||
density: root.density
|
||||
rotateText: root.rotateText
|
||||
customBackgroundColor: root.customBackgroundColor
|
||||
customTextIconColor: root.customTextIconColor
|
||||
@@ -85,7 +83,6 @@ Item {
|
||||
forceClose: root.forceClose
|
||||
oppositeDirection: root.oppositeDirection
|
||||
hovered: root.hovered
|
||||
density: root.density
|
||||
customBackgroundColor: root.customBackgroundColor
|
||||
customTextIconColor: root.customTextIconColor
|
||||
onShown: root.shown()
|
||||
|
||||
@@ -14,14 +14,13 @@ Item {
|
||||
property string text: ""
|
||||
property string suffix: ""
|
||||
property string tooltipText: ""
|
||||
property string density: ""
|
||||
property bool autoHide: false
|
||||
property bool forceOpen: false
|
||||
property bool forceClose: false
|
||||
property bool oppositeDirection: false
|
||||
property bool hovered: false
|
||||
property color customBackgroundColor: Color.transparent
|
||||
property color customTextIconColor: Color.transparent
|
||||
property color customBackgroundColor: "transparent"
|
||||
property color customTextIconColor: "transparent"
|
||||
|
||||
readonly property bool collapseToIcon: forceClose && !forceOpen
|
||||
|
||||
@@ -51,23 +50,7 @@ Item {
|
||||
readonly property color bgColor: hovered ? Color.mHover : (customBackgroundColor.a > 0) ? customBackgroundColor : Style.capsuleColor
|
||||
readonly property color fgColor: hovered ? Color.mOnHover : (customTextIconColor.a > 0) ? customTextIconColor : Color.mOnSurface
|
||||
|
||||
readonly property real iconSize: {
|
||||
switch (root.density) {
|
||||
case "compact":
|
||||
return Math.max(1, Math.round(pillHeight * 0.65));
|
||||
default:
|
||||
return Math.max(1, Math.round(pillHeight * 0.48));
|
||||
}
|
||||
}
|
||||
|
||||
readonly property real textSize: {
|
||||
switch (root.density) {
|
||||
case "compact":
|
||||
return Math.max(1, Math.round(pillHeight * 0.45));
|
||||
default:
|
||||
return Math.max(1, Math.round(pillHeight * 0.33));
|
||||
}
|
||||
}
|
||||
readonly property real iconSize: Style.toOdd(pillHeight * 0.48)
|
||||
|
||||
width: {
|
||||
if (collapseToIcon) {
|
||||
@@ -120,7 +103,7 @@ Item {
|
||||
}
|
||||
|
||||
opacity: revealed ? Style.opacityFull : Style.opacityNone
|
||||
color: Color.transparent // Make pill background transparent to avoid double opacity
|
||||
color: "transparent" // Make pill background transparent to avoid double opacity
|
||||
|
||||
topLeftRadius: oppositeDirection ? 0 : Style.radiusM
|
||||
bottomLeftRadius: oppositeDirection ? 0 : Style.radiusM
|
||||
@@ -146,9 +129,8 @@ Item {
|
||||
}
|
||||
text: root.text + root.suffix
|
||||
family: Settings.data.ui.fontFixed
|
||||
pointSize: textSize
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightBold
|
||||
color: root.fgColor
|
||||
visible: revealed
|
||||
}
|
||||
@@ -174,7 +156,7 @@ Item {
|
||||
width: hasIcon ? pillHeight : 0
|
||||
height: pillHeight
|
||||
radius: Math.min(Style.radiusL, width / 2)
|
||||
color: Color.transparent // Make icon background transparent to avoid double opacity
|
||||
color: "transparent" // Make icon background transparent to avoid double opacity
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
x: oppositeDirection ? 0 : (parent.width - width)
|
||||
|
||||
@@ -14,15 +14,14 @@ Item {
|
||||
property string text: ""
|
||||
property string suffix: ""
|
||||
property string tooltipText: ""
|
||||
property string density: ""
|
||||
property bool autoHide: false
|
||||
property bool forceOpen: false
|
||||
property bool forceClose: false
|
||||
property bool oppositeDirection: false
|
||||
property bool hovered: false
|
||||
property bool rotateText: false
|
||||
property color customBackgroundColor: Color.transparent
|
||||
property color customTextIconColor: Color.transparent
|
||||
property color customBackgroundColor: "transparent"
|
||||
property color customTextIconColor: "transparent"
|
||||
|
||||
readonly property bool collapseToIcon: forceClose && !forceOpen
|
||||
|
||||
@@ -58,23 +57,7 @@ Item {
|
||||
readonly property color bgColor: hovered ? Color.mHover : (customBackgroundColor.a > 0) ? customBackgroundColor : Style.capsuleColor
|
||||
readonly property color fgColor: hovered ? Color.mOnHover : (customTextIconColor.a > 0) ? customTextIconColor : Color.mOnSurface
|
||||
|
||||
readonly property real iconSize: {
|
||||
switch (root.density) {
|
||||
case "compact":
|
||||
return Math.max(1, Math.round(pillHeight * 0.65));
|
||||
default:
|
||||
return Math.max(1, Math.round(pillHeight * 0.48));
|
||||
}
|
||||
}
|
||||
|
||||
readonly property real textSize: {
|
||||
switch (root.density) {
|
||||
case "compact":
|
||||
return Math.max(1, Math.round(pillHeight * 0.38));
|
||||
default:
|
||||
return Math.max(1, Math.round(pillHeight * 0.33));
|
||||
}
|
||||
}
|
||||
readonly property real iconSize: Style.toOdd(pillHeight * 0.48)
|
||||
|
||||
// For vertical bars: width is just icon size, height includes pill space
|
||||
width: buttonSize
|
||||
@@ -136,7 +119,7 @@ Item {
|
||||
}
|
||||
|
||||
opacity: revealed ? Style.opacityFull : Style.opacityNone
|
||||
color: Color.transparent // Make pill background transparent to avoid double opacity
|
||||
color: "transparent" // Make pill background transparent to avoid double opacity
|
||||
|
||||
// Radius logic for vertical expansion - rounded on the side that connects to icon
|
||||
topLeftRadius: openUpward ? Style.radiusM : 0
|
||||
@@ -154,9 +137,8 @@ Item {
|
||||
rotation: rotateText ? -90 : 0
|
||||
text: root.text + root.suffix
|
||||
family: Settings.data.ui.fontFixed
|
||||
pointSize: textSize
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: root.fgColor
|
||||
@@ -195,7 +177,7 @@ Item {
|
||||
width: buttonSize
|
||||
height: buttonSize
|
||||
radius: Math.min(Style.radiusL, width / 2)
|
||||
color: Color.transparent // Make icon background transparent to avoid double opacity
|
||||
color: "transparent" // Make icon background transparent to avoid double opacity
|
||||
|
||||
// Icon positioning based on direction
|
||||
x: 0
|
||||
|
||||
@@ -11,9 +11,6 @@ Item {
|
||||
required property var widgetScreen
|
||||
required property var widgetProps
|
||||
|
||||
property string barDensity: "default"
|
||||
readonly property real barScaling: barDensity === "mini" ? 0.8 : (barDensity === "compact" ? 0.9 : 1.0)
|
||||
|
||||
// Extract section info from widgetProps
|
||||
readonly property string section: widgetProps ? (widgetProps.section || "") : ""
|
||||
readonly property int sectionIndex: widgetProps ? (widgetProps.sectionWidgetIndex || 0) : 0
|
||||
@@ -81,13 +78,6 @@ Item {
|
||||
item.screen = widgetScreen;
|
||||
}
|
||||
|
||||
// Set bar scaling property
|
||||
if (item.hasOwnProperty("barScaling")) {
|
||||
item.barScaling = Qt.binding(function () {
|
||||
return root.barScaling;
|
||||
});
|
||||
}
|
||||
|
||||
// Inject plugin API for plugin widgets
|
||||
// The API is fully populated (settings/translations already loaded) by PluginService
|
||||
if (BarWidgetRegistry.isPluginWidget(widgetId)) {
|
||||
|
||||
@@ -48,7 +48,7 @@ PopupWindow {
|
||||
// Use the content height of the Flickable for implicit height
|
||||
implicitHeight: Math.min(screen?.height * 0.9, flickable.contentHeight + (Style.marginS * 2))
|
||||
visible: false
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
anchor.item: anchorItem
|
||||
anchor.rect.x: {
|
||||
if (anchorItem && screen) {
|
||||
@@ -249,7 +249,7 @@ PopupWindow {
|
||||
}
|
||||
}
|
||||
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
property var subMenu: null
|
||||
|
||||
NDivider {
|
||||
@@ -261,7 +261,7 @@ PopupWindow {
|
||||
Rectangle {
|
||||
id: innerRect
|
||||
anchors.fill: parent
|
||||
color: mouseArea.containsMouse ? Color.mHover : Color.transparent
|
||||
color: mouseArea.containsMouse ? Color.mHover : "transparent"
|
||||
radius: Style.radiusS
|
||||
visible: !(modelData?.isSeparator ?? false)
|
||||
|
||||
@@ -424,7 +424,6 @@ PopupWindow {
|
||||
color: Color.mPrimary
|
||||
text: root.isPinned ? I18n.tr("settings.bar.tray.unpin-application") : I18n.tr("settings.bar.tray.pin-application")
|
||||
pointSize: Style.fontSizeS
|
||||
font.weight: Font.Medium
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ Item {
|
||||
property string section: ""
|
||||
property int sectionWidgetIndex: -1
|
||||
property int sectionWidgetsCount: 0
|
||||
property real barScaling: 1.0
|
||||
|
||||
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId] || {}
|
||||
property var widgetSettings: {
|
||||
@@ -47,12 +46,13 @@ Item {
|
||||
readonly property string windowTitle: CompositorService.getFocusedWindowTitle() || "No active window"
|
||||
readonly property string fallbackIcon: "user-desktop"
|
||||
|
||||
readonly property int iconSize: Style.toOdd(Style.capsuleHeight * 0.75 * barScaling)
|
||||
readonly property int verticalSize: Style.toOdd(Style.capsuleHeight * 0.85 * barScaling)
|
||||
readonly property int textSize: Math.round(Style.capsuleHeight * 0.4 * barScaling)
|
||||
readonly property int iconSize: Style.toOdd(Style.capsuleHeight * 0.75)
|
||||
readonly property int verticalSize: Style.toOdd(Style.capsuleHeight * 0.85)
|
||||
|
||||
implicitHeight: visible ? (isVerticalBar ? (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : verticalSize) : Style.capsuleHeight) : 0
|
||||
implicitWidth: visible ? (isVerticalBar ? (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : verticalSize) : (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : dynamicWidth)) : 0
|
||||
// For horizontal bars, height is always capsuleHeight (no animation needed)
|
||||
// For vertical bars, collapse to 0 when hidden
|
||||
implicitHeight: isVerticalBar ? (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : verticalSize) : Style.capsuleHeight
|
||||
implicitWidth: isVerticalBar ? (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : verticalSize) : (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : dynamicWidth)
|
||||
|
||||
// "visible": Always Visible, "hidden": Hide When Empty, "transparent": Transparent When Empty
|
||||
visible: (hideMode !== "hidden" || hasFocusedWindow) || opacity > 0
|
||||
@@ -81,16 +81,16 @@ Item {
|
||||
function calculateContentWidth() {
|
||||
// Calculate the actual content width based on visible elements
|
||||
var contentWidth = 0;
|
||||
var margins = Style.marginS * barScaling * 2; // Left and right margins
|
||||
var margins = Style.marginS * 2; // Left and right margins
|
||||
|
||||
// Icon width (if visible)
|
||||
if (showIcon) {
|
||||
contentWidth += iconSize;
|
||||
contentWidth += Style.marginS * barScaling; // Spacing after icon
|
||||
contentWidth += Style.marginS; // Spacing after icon
|
||||
}
|
||||
|
||||
// Text width (use the measured width)
|
||||
contentWidth += fullTitleMetrics.contentWidth;
|
||||
contentWidth += titleContainer.measuredWidth;
|
||||
|
||||
// Additional small margin for text
|
||||
contentWidth += Style.marginXXS * 2;
|
||||
@@ -158,16 +158,6 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
// Hidden text element to measure full title width
|
||||
NText {
|
||||
id: fullTitleMetrics
|
||||
visible: false
|
||||
text: windowTitle
|
||||
pointSize: root.textSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
}
|
||||
|
||||
NPopupContextMenu {
|
||||
id: contextMenu
|
||||
|
||||
@@ -214,14 +204,15 @@ Item {
|
||||
Item {
|
||||
id: mainContainer
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: isVerticalBar ? 0 : Style.marginS * barScaling
|
||||
anchors.rightMargin: isVerticalBar ? 0 : Style.marginS * barScaling
|
||||
anchors.leftMargin: isVerticalBar ? 0 : Style.marginS
|
||||
anchors.rightMargin: isVerticalBar ? 0 : Style.marginS
|
||||
|
||||
// Horizontal layout for top/bottom bars
|
||||
RowLayout {
|
||||
id: rowLayout
|
||||
height: iconSize
|
||||
y: Style.pixelAlignCenter(parent.height, height)
|
||||
spacing: Style.marginS * barScaling
|
||||
spacing: Style.marginS
|
||||
visible: !isVerticalBar
|
||||
z: 1
|
||||
|
||||
@@ -251,146 +242,30 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
// Title container with scrolling
|
||||
Item {
|
||||
NScrollText {
|
||||
id: titleContainer
|
||||
Layout.preferredWidth: {
|
||||
text: windowTitle
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
maxWidth: {
|
||||
// Calculate available width based on other elements
|
||||
var iconWidth = (showIcon && windowIcon.visible ? (iconSize + Style.marginS) : 0);
|
||||
var totalMargins = Style.marginXXS * 2;
|
||||
var availableWidth = mainContainer.width - iconWidth - totalMargins;
|
||||
return Math.max(20, availableWidth);
|
||||
}
|
||||
Layout.maximumWidth: Layout.preferredWidth
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.preferredHeight: titleText.height
|
||||
|
||||
clip: true
|
||||
|
||||
property bool isScrolling: false
|
||||
property bool isResetting: false
|
||||
property real textWidth: fullTitleMetrics.contentWidth
|
||||
property real containerWidth: width
|
||||
property bool needsScrolling: textWidth > containerWidth
|
||||
|
||||
// Timer for "always" mode with delay
|
||||
Timer {
|
||||
id: scrollStartTimer
|
||||
interval: 1000
|
||||
repeat: false
|
||||
onTriggered: {
|
||||
if (scrollingMode === "always" && titleContainer.needsScrolling) {
|
||||
titleContainer.isScrolling = true;
|
||||
titleContainer.isResetting = false;
|
||||
}
|
||||
}
|
||||
scrollMode: {
|
||||
if (scrollingMode === "always")
|
||||
return NScrollText.ScrollMode.Always;
|
||||
if (scrollingMode === "hover")
|
||||
return NScrollText.ScrollMode.Hover;
|
||||
return NScrollText.ScrollMode.Never;
|
||||
}
|
||||
|
||||
// Update scrolling state based on mode
|
||||
property var updateScrollingState: function () {
|
||||
if (scrollingMode === "never") {
|
||||
isScrolling = false;
|
||||
isResetting = false;
|
||||
} else if (scrollingMode === "always") {
|
||||
if (needsScrolling) {
|
||||
if (mouseArea.containsMouse) {
|
||||
isScrolling = false;
|
||||
isResetting = true;
|
||||
} else {
|
||||
scrollStartTimer.restart();
|
||||
}
|
||||
} else {
|
||||
scrollStartTimer.stop();
|
||||
isScrolling = false;
|
||||
isResetting = false;
|
||||
}
|
||||
} else if (scrollingMode === "hover") {
|
||||
if (mouseArea.containsMouse && needsScrolling) {
|
||||
isScrolling = true;
|
||||
isResetting = false;
|
||||
} else {
|
||||
isScrolling = false;
|
||||
if (needsScrolling) {
|
||||
isResetting = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onWidthChanged: updateScrollingState()
|
||||
Component.onCompleted: updateScrollingState()
|
||||
|
||||
// React to hover changes
|
||||
Connections {
|
||||
target: mouseArea
|
||||
function onContainsMouseChanged() {
|
||||
titleContainer.updateScrollingState();
|
||||
}
|
||||
}
|
||||
|
||||
// Scrolling content with seamless loop
|
||||
Item {
|
||||
id: scrollContainer
|
||||
height: parent.height
|
||||
width: childrenRect.width
|
||||
|
||||
property real scrollX: 0
|
||||
x: scrollX
|
||||
|
||||
RowLayout {
|
||||
spacing: 50 // Gap between text copies
|
||||
|
||||
NText {
|
||||
id: titleText
|
||||
text: windowTitle
|
||||
pointSize: root.textSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: Color.mOnSurface
|
||||
onTextChanged: {
|
||||
if (root.scrollingMode === "always") {
|
||||
titleContainer.isScrolling = false;
|
||||
titleContainer.isResetting = false;
|
||||
scrollContainer.scrollX = 0;
|
||||
scrollStartTimer.restart();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Second copy for seamless scrolling
|
||||
NText {
|
||||
text: windowTitle
|
||||
font: titleText.font
|
||||
pointSize: Style.fontSizeS * barScaling
|
||||
applyUiScale: false
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: Color.mOnSurface
|
||||
visible: titleContainer.needsScrolling && titleContainer.isScrolling
|
||||
}
|
||||
}
|
||||
|
||||
// Reset animation
|
||||
NumberAnimation on scrollX {
|
||||
running: titleContainer.isResetting
|
||||
to: 0
|
||||
duration: 300
|
||||
easing.type: Easing.OutQuad
|
||||
onFinished: {
|
||||
titleContainer.isResetting = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Seamless infinite scroll
|
||||
NumberAnimation on scrollX {
|
||||
id: infiniteScroll
|
||||
running: titleContainer.isScrolling && !titleContainer.isResetting
|
||||
from: 0
|
||||
to: -(titleContainer.textWidth + 50)
|
||||
duration: Math.max(4000, windowTitle.length * 100)
|
||||
loops: Animation.Infinite
|
||||
easing.type: Easing.Linear
|
||||
}
|
||||
NText {
|
||||
text: windowTitle
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
color: Color.mOnSurface
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,7 +198,6 @@ Item {
|
||||
id: pill
|
||||
|
||||
screen: root.screen
|
||||
density: Settings.data.bar.density
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
icon: testMode ? BatteryService.getIcon(testPercent, testCharging, true) : BatteryService.getIcon(percent, charging, isReady)
|
||||
text: (isReady || testMode) ? Math.round(percent) : "-"
|
||||
@@ -206,8 +205,8 @@ Item {
|
||||
autoHide: false
|
||||
forceOpen: isReady && displayMode === "alwaysShow"
|
||||
forceClose: displayMode === "alwaysHide" || (initializationComplete && !isReady)
|
||||
customBackgroundColor: !initializationComplete ? Color.transparent : (charging ? Color.mPrimary : (isLowBattery ? Color.mError : Color.transparent))
|
||||
customTextIconColor: !initializationComplete ? Color.transparent : (charging ? Color.mOnPrimary : (isLowBattery ? Color.mOnError : Color.transparent))
|
||||
customBackgroundColor: !initializationComplete ? "transparent" : (charging ? Color.mPrimary : (isLowBattery ? Color.mError : "transparent"))
|
||||
customTextIconColor: !initializationComplete ? "transparent" : (charging ? Color.mOnPrimary : (isLowBattery ? Color.mOnError : "transparent"))
|
||||
|
||||
tooltipText: {
|
||||
let lines = [];
|
||||
|
||||
@@ -69,9 +69,8 @@ Item {
|
||||
id: pill
|
||||
|
||||
screen: root.screen
|
||||
density: Settings.data.bar.density
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
icon: BluetoothService.enabled ? "bluetooth" : "bluetooth-off"
|
||||
icon: !BluetoothService.enabled ? "bluetooth-off" : ((BluetoothService.connectedDevices && BluetoothService.connectedDevices.length > 0) ? "bluetooth-connected" : "bluetooth")
|
||||
text: {
|
||||
if (BluetoothService.connectedDevices && BluetoothService.connectedDevices.length > 0) {
|
||||
const firstDevice = BluetoothService.connectedDevices[0];
|
||||
|
||||
@@ -114,7 +114,6 @@ Item {
|
||||
id: pill
|
||||
|
||||
screen: root.screen
|
||||
density: Settings.data.bar.density
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
icon: getIcon()
|
||||
autoHide: false // Important to be false so we can hover as long as we want
|
||||
|
||||
@@ -17,7 +17,6 @@ Rectangle {
|
||||
property string section: ""
|
||||
property int sectionWidgetIndex: -1
|
||||
property int sectionWidgetsCount: 0
|
||||
property real barScaling: 1.0
|
||||
|
||||
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
|
||||
property var widgetSettings: {
|
||||
@@ -32,8 +31,6 @@ Rectangle {
|
||||
|
||||
readonly property string barPosition: Settings.data.bar.position
|
||||
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property bool density: Settings.data.bar.density
|
||||
|
||||
readonly property var now: Time.now
|
||||
|
||||
// Resolve settings: try user settings or defaults from BarWidgetRegistry
|
||||
@@ -75,14 +72,13 @@ Rectangle {
|
||||
Binding on pointSize {
|
||||
value: {
|
||||
if (repeater.model.length == 1) {
|
||||
return Style.capsuleHeight * 0.4 * barScaling;
|
||||
return Style.barFontSize;
|
||||
} else {
|
||||
return (index == 0) ? Style.capsuleHeight * 0.35 * barScaling : Style.capsuleHeight * 0.3 * barScaling;
|
||||
return (index == 0) ? Style.barFontSize * 0.9 : Style.barFontSize * 0.75;
|
||||
}
|
||||
}
|
||||
}
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightSemiBold
|
||||
color: usePrimaryColor ? Color.mPrimary : Color.mOnSurface
|
||||
wrapMode: Text.WordWrap
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
@@ -105,12 +101,8 @@ Rectangle {
|
||||
visible: text !== ""
|
||||
text: modelData
|
||||
family: useCustomFont && customFont ? customFont : Settings.data.ui.fontDefault
|
||||
Binding on pointSize {
|
||||
value: Style.fontSizeS * barScaling
|
||||
}
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
|
||||
font.weight: Style.fontWeightBold
|
||||
color: usePrimaryColor ? Color.mPrimary : Color.mOnSurface
|
||||
wrapMode: Text.WordWrap
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
|
||||
@@ -85,14 +85,13 @@ NIconButton {
|
||||
tooltipDirection: BarService.getTooltipDirection()
|
||||
baseSize: Style.capsuleHeight
|
||||
applyUiScale: false
|
||||
density: Settings.data.bar.density
|
||||
customRadius: Style.radiusL
|
||||
colorBg: Style.capsuleColor
|
||||
colorFg: iconColor
|
||||
colorBgHover: useDistroLogo ? Color.mSurfaceVariant : Color.mHover
|
||||
colorFgHover: iconHoverColor
|
||||
colorBorder: Color.transparent
|
||||
colorBorderHover: useDistroLogo ? Color.mHover : Color.transparent
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: useDistroLogo ? Color.mHover : "transparent"
|
||||
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
@@ -130,6 +130,48 @@ Item {
|
||||
return " ".repeat(currentMaxTextLength);
|
||||
}
|
||||
|
||||
readonly property bool enableColorization: widgetSettings.enableColorization || false
|
||||
readonly property string colorizeSystemIcon: {
|
||||
if (widgetSettings.colorizeSystemIcon !== undefined)
|
||||
return widgetSettings.colorizeSystemIcon;
|
||||
return widgetMetadata.colorizeSystemIcon !== undefined ? widgetMetadata.colorizeSystemIcon : "none";
|
||||
}
|
||||
|
||||
readonly property bool isColorizing: enableColorization && colorizeSystemIcon !== "none"
|
||||
|
||||
readonly property color iconColor: {
|
||||
if (!isColorizing)
|
||||
return Color.mOnSurface;
|
||||
switch (colorizeSystemIcon) {
|
||||
case "primary":
|
||||
return Color.mPrimary;
|
||||
case "secondary":
|
||||
return Color.mSecondary;
|
||||
case "tertiary":
|
||||
return Color.mTertiary;
|
||||
case "error":
|
||||
return Color.mError;
|
||||
default:
|
||||
return Color.mOnSurface;
|
||||
}
|
||||
}
|
||||
readonly property color iconHoverColor: {
|
||||
if (!isColorizing)
|
||||
return Color.mOnHover;
|
||||
switch (colorizeSystemIcon) {
|
||||
case "primary":
|
||||
return Qt.darker(Color.mPrimary, 1.2);
|
||||
case "secondary":
|
||||
return Qt.darker(Color.mSecondary, 1.2);
|
||||
case "tertiary":
|
||||
return Qt.darker(Color.mTertiary, 1.2);
|
||||
case "error":
|
||||
return Qt.darker(Color.mError, 1.2);
|
||||
default:
|
||||
return Color.mOnHover;
|
||||
}
|
||||
}
|
||||
|
||||
implicitWidth: pill.width
|
||||
implicitHeight: pill.height
|
||||
|
||||
@@ -142,10 +184,10 @@ Item {
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
icon: _pillIcon
|
||||
text: _pillText
|
||||
density: Settings.data.bar.density
|
||||
rotateText: isVerticalBar && currentMaxTextLength > 0
|
||||
autoHide: false
|
||||
forceOpen: _pillForceOpen
|
||||
customTextIconColor: isColorizing ? iconColor : "transparent"
|
||||
|
||||
tooltipText: {
|
||||
var tooltipLines = [];
|
||||
|
||||
@@ -11,14 +11,13 @@ NIconButton {
|
||||
icon: "dark-mode"
|
||||
tooltipText: Settings.data.colorSchemes.darkMode ? I18n.tr("tooltips.switch-to-light-mode") : I18n.tr("tooltips.switch-to-dark-mode")
|
||||
tooltipDirection: BarService.getTooltipDirection()
|
||||
density: Settings.data.bar.density
|
||||
baseSize: Style.capsuleHeight
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: Style.capsuleColor
|
||||
colorFg: Color.mOnSurface
|
||||
colorBorder: Color.transparent
|
||||
colorBorderHover: Color.transparent
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
onClicked: Settings.data.colorSchemes.darkMode = !Settings.data.colorSchemes.darkMode
|
||||
|
||||
border.color: Style.capsuleBorderColor
|
||||
|
||||
@@ -39,7 +39,6 @@ Item {
|
||||
|
||||
screen: root.screen
|
||||
text: IdleInhibitorService.timeout == null ? "" : Time.formatVagueHumanReadableDuration(IdleInhibitorService.timeout)
|
||||
density: Settings.data.bar.density
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
icon: IdleInhibitorService.isInhibited ? "keep-awake-on" : "keep-awake-off"
|
||||
tooltipText: IdleInhibitorService.isInhibited ? I18n.tr("tooltips.disable-keep-awake") : I18n.tr("tooltips.enable-keep-awake")
|
||||
|
||||
@@ -33,6 +33,7 @@ Item {
|
||||
}
|
||||
|
||||
readonly property string displayMode: (widgetSettings.displayMode !== undefined) ? widgetSettings.displayMode : widgetMetadata.displayMode
|
||||
readonly property bool showIcon: (widgetSettings.showIcon !== undefined) ? widgetSettings.showIcon : widgetMetadata.showIcon
|
||||
|
||||
// Use the shared service for keyboard layout
|
||||
property string currentLayout: KeyboardLayoutService.currentLayout
|
||||
@@ -66,18 +67,17 @@ Item {
|
||||
BarPill {
|
||||
id: pill
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
screen: root.screen
|
||||
density: Settings.data.bar.density
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
icon: "keyboard"
|
||||
icon: root.showIcon ? "keyboard" : ""
|
||||
autoHide: false // Important to be false so we can hover as long as we want
|
||||
text: currentLayout.toUpperCase()
|
||||
tooltipText: I18n.tr("tooltips.keyboard-layout", {
|
||||
"layout": currentLayout.toUpperCase()
|
||||
})
|
||||
forceOpen: root.displayMode === "forceOpen"
|
||||
forceClose: root.displayMode === "alwaysHide"
|
||||
// When icon is disabled, always show the layout text
|
||||
forceOpen: !root.showIcon || root.displayMode === "forceOpen"
|
||||
forceClose: root.showIcon && root.displayMode === "alwaysHide"
|
||||
onClicked: {}
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import qs.Commons
|
||||
import qs.Modules.Panels.Settings
|
||||
import qs.Services.UI
|
||||
import qs.Widgets
|
||||
|
||||
NIconButton {
|
||||
id: root
|
||||
|
||||
property ShellScreen screen
|
||||
|
||||
// Widget properties passed from Bar.qml for per-instance settings
|
||||
property string widgetId: ""
|
||||
property string section: ""
|
||||
property int sectionWidgetIndex: -1
|
||||
property int sectionWidgetsCount: 0
|
||||
|
||||
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
|
||||
property var widgetSettings: {
|
||||
if (section && sectionWidgetIndex >= 0) {
|
||||
var widgets = Settings.data.bar.widgets[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string iconName: widgetSettings.icon || (widgetMetadata ? widgetMetadata.icon : "search")
|
||||
readonly property bool usePrimaryColor: (widgetSettings.usePrimaryColor !== undefined) ? widgetSettings.usePrimaryColor : ((widgetMetadata && widgetMetadata.usePrimaryColor !== undefined) ? widgetMetadata.usePrimaryColor : true)
|
||||
|
||||
icon: iconName
|
||||
tooltipText: I18n.tr("context-menu.open-launcher")
|
||||
tooltipDirection: BarService.getTooltipDirection()
|
||||
baseSize: Style.capsuleHeight
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: Style.capsuleColor
|
||||
colorBgHover: Color.mHover
|
||||
colorFg: usePrimaryColor ? Color.mPrimary : Color.mOnSurface
|
||||
colorFgHover: usePrimaryColor ? Qt.darker(Color.mPrimary, 1.2) : Color.mOnHover
|
||||
colorBorder: Style.capsuleBorderColor
|
||||
colorBorderHover: Style.capsuleBorderColor
|
||||
|
||||
NPopupContextMenu {
|
||||
id: contextMenu
|
||||
|
||||
model: [
|
||||
{
|
||||
"label": I18n.tr("context-menu.launcher-settings"),
|
||||
"action": "launcher-settings",
|
||||
"icon": "adjustments"
|
||||
},
|
||||
{
|
||||
"label": I18n.tr("context-menu.widget-settings"),
|
||||
"action": "widget-settings",
|
||||
"icon": "settings"
|
||||
}
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
|
||||
if (action === "launcher-settings") {
|
||||
var panel = PanelService.getPanel("settingsPanel", screen);
|
||||
panel.requestedTab = SettingsPanel.Tab.Launcher;
|
||||
panel.toggle();
|
||||
} else if (action === "widget-settings") {
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: PanelService.getPanel("launcherPanel", screen)?.toggle()
|
||||
onMiddleClicked: PanelService.getPanel("launcherPanel", screen)?.toggle()
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(root, screen);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,6 @@ Item {
|
||||
property string section: ""
|
||||
property int sectionWidgetIndex: -1
|
||||
property int sectionWidgetsCount: 0
|
||||
property real barScaling: 1.0
|
||||
|
||||
// Settings
|
||||
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
|
||||
@@ -47,10 +46,9 @@ Item {
|
||||
readonly property real maxWidth: (widgetSettings.maxWidth !== undefined) ? widgetSettings.maxWidth : Math.max(widgetMetadata.maxWidth, screen ? screen.width * 0.06 : 0)
|
||||
|
||||
// Dimensions
|
||||
readonly property int artSize: Style.toOdd(Style.capsuleHeight * 0.75 * barScaling)
|
||||
readonly property int iconSize: Style.toOdd(Style.capsuleHeight * 0.75 * barScaling)
|
||||
readonly property int verticalSize: Style.toOdd(Style.capsuleHeight * 0.85 * barScaling)
|
||||
readonly property int textSize: Math.round(Style.capsuleHeight * 0.4 * barScaling)
|
||||
readonly property int artSize: Style.toOdd(Style.capsuleHeight * 0.75)
|
||||
readonly property int iconSize: Style.toOdd(Style.capsuleHeight * 0.75)
|
||||
readonly property int verticalSize: Style.toOdd(Style.capsuleHeight * 0.85)
|
||||
|
||||
// State
|
||||
readonly property bool hasPlayer: MediaService.currentPlayer !== null
|
||||
@@ -88,19 +86,22 @@ Item {
|
||||
readonly property string tooltipText: {
|
||||
var text = title;
|
||||
var controls = [];
|
||||
if (MediaService.canGoNext)
|
||||
controls.push("Right click for next.");
|
||||
// Right click now opens options, including player selection
|
||||
controls.push("Right click for options.");
|
||||
if (MediaService.canGoPrevious)
|
||||
controls.push("Middle click for previous.");
|
||||
return controls.length ? `${text}\n\n${controls.join("\n")}` : text;
|
||||
}
|
||||
|
||||
// Layout
|
||||
implicitWidth: visible ? (isVertical ? (isHidden ? 0 : verticalSize) : (isHidden ? 0 : contentWidth)) : 0
|
||||
implicitHeight: visible ? (isVertical ? (isHidden ? 0 : verticalSize) : Style.capsuleHeight) : 0
|
||||
// For horizontal bars, height is always capsuleHeight (no animation needed to prevent jitter)
|
||||
// For vertical bars, collapse to 0 when hidden
|
||||
implicitWidth: isVertical ? (isHidden ? 0 : verticalSize) : (isHidden ? 0 : contentWidth)
|
||||
implicitHeight: isVertical ? (isHidden ? 0 : verticalSize) : Style.capsuleHeight
|
||||
visible: !shouldHideIdle && (hideMode !== "hidden" || opacity > 0)
|
||||
opacity: isHidden ? 0.0 : ((hideMode === "transparent" && !hasPlayer) ? 0.0 : 1.0)
|
||||
|
||||
property real mainContentWidth: 0
|
||||
readonly property real contentWidth: {
|
||||
if (useFixedWidth)
|
||||
return maxWidth;
|
||||
@@ -113,14 +114,20 @@ Item {
|
||||
iconWidth = artSize;
|
||||
}
|
||||
|
||||
var margins = isVertical ? 0 : (Style.marginS * 2);
|
||||
|
||||
// Add spacing and text width
|
||||
var textWidth = 0;
|
||||
if (titleMetrics.contentWidth > 0) {
|
||||
textWidth = Style.marginS * barScaling + titleMetrics.contentWidth + Style.marginXXS * 2;
|
||||
if (titleContainer.measuredWidth > 0) {
|
||||
margins += Style.marginS;
|
||||
textWidth = titleContainer.measuredWidth + Style.marginXXS * 2;
|
||||
}
|
||||
|
||||
var margins = isVertical ? 0 : (Style.marginS * barScaling * 2);
|
||||
var total = iconWidth + textWidth + margins;
|
||||
|
||||
// calculate the width of all elements except the scrolling text
|
||||
mainContentWidth = total - textWidth;
|
||||
|
||||
return hasPlayer ? Math.min(total, maxWidth) : total;
|
||||
}
|
||||
|
||||
@@ -143,16 +150,6 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
// Hidden text for measurements
|
||||
NText {
|
||||
id: titleMetrics
|
||||
visible: false
|
||||
text: title
|
||||
applyUiScale: false
|
||||
pointSize: root.textSize
|
||||
font.weight: Style.fontWeightMedium
|
||||
}
|
||||
|
||||
// Context menu
|
||||
NPopupContextMenu {
|
||||
id: contextMenu
|
||||
@@ -179,6 +176,22 @@ Item {
|
||||
"icon": "media-next"
|
||||
});
|
||||
}
|
||||
|
||||
// Append available players (like in Control Center) so user can switch from the bar
|
||||
var players = MediaService.getAvailablePlayers ? MediaService.getAvailablePlayers() : [];
|
||||
if (players && players.length > 1) {
|
||||
for (var i = 0; i < players.length; i++) {
|
||||
var isCurrent = (i === MediaService.selectedPlayerIndex);
|
||||
items.push({
|
||||
"label": players[i].identity,
|
||||
"action": "player-" + i,
|
||||
"icon": isCurrent ? "check" : "disc",
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
items.push({
|
||||
"label": I18n.tr("context-menu.widget-settings"),
|
||||
"action": "widget-settings",
|
||||
@@ -198,7 +211,12 @@ Item {
|
||||
MediaService.previous();
|
||||
else if (action === "next")
|
||||
MediaService.next();
|
||||
else if (action === "widget-settings") {
|
||||
else if (action && action.indexOf("player-") === 0) {
|
||||
var idx = parseInt(action.split("-")[1]);
|
||||
if (!isNaN(idx)) {
|
||||
MediaService.switchToPlayer(idx);
|
||||
}
|
||||
} else if (action === "widget-settings") {
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
}
|
||||
}
|
||||
@@ -231,9 +249,8 @@ Item {
|
||||
|
||||
Item {
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: isVertical ? 0 : Style.marginS * barScaling
|
||||
anchors.rightMargin: isVertical ? 0 : Style.marginS * barScaling
|
||||
clip: true
|
||||
anchors.leftMargin: isVertical ? 0 : Style.marginS
|
||||
anchors.rightMargin: isVertical ? 0 : Style.marginS
|
||||
|
||||
// Visualizer
|
||||
Loader {
|
||||
@@ -260,7 +277,7 @@ Item {
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: Style.marginS * barScaling
|
||||
spacing: Style.marginS
|
||||
visible: !isVertical
|
||||
z: 1
|
||||
|
||||
@@ -287,17 +304,17 @@ Item {
|
||||
anchors.fill: parent
|
||||
visible: showProgressRing
|
||||
progress: MediaService.trackLength > 0 ? MediaService.currentPosition / MediaService.trackLength : 0
|
||||
lineWidth: 2 * barScaling
|
||||
lineWidth: 2
|
||||
}
|
||||
|
||||
Item {
|
||||
anchors.fill: parent
|
||||
anchors.margins: showProgressRing ? (3 * barScaling) : 0.5
|
||||
anchors.margins: showProgressRing ? (3) : 0.5
|
||||
|
||||
NImageRounded {
|
||||
visible: showAlbumArt && hasPlayer
|
||||
anchors.fill: parent
|
||||
anchors.margins: showProgressRing ? 0 : -1 * barScaling
|
||||
anchors.margins: showProgressRing ? 0 : -1
|
||||
radius: width / 2
|
||||
imagePath: MediaService.trackArtUrl
|
||||
fallbackIcon: MediaService.isPlaying ? "media-pause" : "media-play"
|
||||
@@ -311,25 +328,33 @@ Item {
|
||||
y: Style.pixelAlignCenter(parent.height, contentHeight)
|
||||
icon: MediaService.isPlaying ? "media-pause" : "media-play"
|
||||
color: Color.mOnSurface
|
||||
pointSize: 8 * barScaling
|
||||
pointSize: Style.barFontSize
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Scrolling title
|
||||
Item {
|
||||
NScrollText {
|
||||
id: titleContainer
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.preferredHeight: Style.capsuleHeight
|
||||
|
||||
ScrollingText {
|
||||
anchors.fill: parent
|
||||
text: title
|
||||
textColor: hasPlayer ? Color.mOnSurface : Color.mOnSurfaceVariant
|
||||
fontSize: root.textSize
|
||||
scrollMode: scrollingMode
|
||||
needsScroll: titleMetrics.contentWidth > parent.width
|
||||
text: title
|
||||
|
||||
scrollMode: {
|
||||
if (scrollingMode === "always")
|
||||
return NScrollText.ScrollMode.Always;
|
||||
if (scrollingMode === "hover")
|
||||
return NScrollText.ScrollMode.Hover;
|
||||
return NScrollText.ScrollMode.Never;
|
||||
}
|
||||
cursorShape: hasPlayer ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
maxWidth: root.maxWidth - root.mainContentWidth
|
||||
NText {
|
||||
// anchors.fill: parent
|
||||
color: hasPlayer ? Color.mOnSurface : Color.mOnSurfaceVariant
|
||||
pointSize: Style.barFontSize
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -348,7 +373,7 @@ Item {
|
||||
anchors.fill: parent
|
||||
visible: showProgressRing
|
||||
progress: MediaService.trackLength > 0 ? MediaService.currentPosition / MediaService.trackLength : 0
|
||||
lineWidth: Style.toOdd(2 * barScaling)
|
||||
lineWidth: Style.toOdd(2)
|
||||
}
|
||||
|
||||
NImageRounded {
|
||||
@@ -482,119 +507,4 @@ Item {
|
||||
ctx.stroke();
|
||||
}
|
||||
}
|
||||
|
||||
// Scrolling Text Component
|
||||
component ScrollingText: Item {
|
||||
id: scrollText
|
||||
property string text
|
||||
property color textColor
|
||||
property real fontSize
|
||||
property string scrollMode
|
||||
property bool needsScroll
|
||||
|
||||
clip: true
|
||||
implicitHeight: titleText.height
|
||||
|
||||
property bool isScrolling: false
|
||||
property bool isResetting: false
|
||||
|
||||
Timer {
|
||||
id: scrollTimer
|
||||
interval: 1000
|
||||
onTriggered: {
|
||||
if (scrollMode === "always" && needsScroll) {
|
||||
scrollText.isScrolling = true;
|
||||
scrollText.isResetting = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: hoverArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
acceptedButtons: Qt.NoButton
|
||||
cursorShape: hasPlayer ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
}
|
||||
|
||||
function updateState() {
|
||||
if (scrollMode === "never") {
|
||||
isScrolling = false;
|
||||
isResetting = false;
|
||||
} else if (scrollMode === "always") {
|
||||
if (needsScroll) {
|
||||
if (hoverArea.containsMouse) {
|
||||
isScrolling = false;
|
||||
isResetting = true;
|
||||
} else {
|
||||
scrollTimer.restart();
|
||||
}
|
||||
}
|
||||
} else if (scrollMode === "hover") {
|
||||
isScrolling = hoverArea.containsMouse && needsScroll;
|
||||
isResetting = !hoverArea.containsMouse && needsScroll;
|
||||
}
|
||||
}
|
||||
|
||||
onWidthChanged: updateState()
|
||||
Component.onCompleted: updateState()
|
||||
Connections {
|
||||
target: hoverArea
|
||||
function onContainsMouseChanged() {
|
||||
scrollText.updateState();
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: scrollContainer
|
||||
y: (parent.height - titleText.contentHeight) / 2
|
||||
height: titleText.contentHeight
|
||||
property real scrollX: 0
|
||||
x: scrollX
|
||||
|
||||
Row {
|
||||
spacing: 50
|
||||
NText {
|
||||
id: titleText
|
||||
text: scrollText.text
|
||||
color: textColor
|
||||
pointSize: fontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
onTextChanged: {
|
||||
scrollText.isScrolling = false;
|
||||
scrollText.isResetting = false;
|
||||
scrollContainer.scrollX = 0;
|
||||
if (scrollText.needsScroll)
|
||||
scrollTimer.restart();
|
||||
}
|
||||
}
|
||||
NText {
|
||||
text: scrollText.text
|
||||
color: textColor
|
||||
pointSize: fontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
visible: scrollText.needsScroll && scrollText.isScrolling
|
||||
}
|
||||
}
|
||||
|
||||
NumberAnimation on scrollX {
|
||||
running: scrollText.isResetting
|
||||
to: 0
|
||||
duration: 300
|
||||
easing.type: Easing.OutQuad
|
||||
onFinished: scrollText.isResetting = false
|
||||
}
|
||||
|
||||
NumberAnimation on scrollX {
|
||||
running: scrollText.isScrolling && !scrollText.isResetting
|
||||
from: 0
|
||||
to: -(titleMetrics.contentWidth + 50)
|
||||
duration: Math.max(4000, scrollText.text.length * 120)
|
||||
loops: Animation.Infinite
|
||||
easing.type: Easing.Linear
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,7 +132,6 @@ Item {
|
||||
screen: root.screen
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
icon: AudioService.getInputIcon()
|
||||
density: Settings.data.bar.density
|
||||
autoHide: false // Important to be false so we can hover as long as we want
|
||||
text: {
|
||||
const maxVolume = Settings.data.audio.volumeOverdrive ? 1.5 : 1.0;
|
||||
|
||||
@@ -69,7 +69,6 @@ Item {
|
||||
id: pill
|
||||
|
||||
screen: root.screen
|
||||
density: Settings.data.bar.density
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
icon: {
|
||||
try {
|
||||
@@ -110,7 +109,11 @@ Item {
|
||||
autoHide: false
|
||||
forceOpen: !isBarVertical && root.displayMode === "alwaysShow"
|
||||
forceClose: isBarVertical || root.displayMode === "alwaysHide" || text === ""
|
||||
onClicked: PanelService.getPanel("wifiPanel", screen)?.toggle(this)
|
||||
onClicked: {
|
||||
var panel = PanelService.getPanel("wifiPanel", screen);
|
||||
if (panel)
|
||||
panel.toggle(this);
|
||||
}
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
@@ -119,8 +122,29 @@ Item {
|
||||
}
|
||||
}
|
||||
tooltipText: {
|
||||
if (pill.text !== "") {
|
||||
return pill.text;
|
||||
try {
|
||||
if (NetworkService.ethernetConnected) {
|
||||
const d = NetworkService.activeEthernetDetails || ({});
|
||||
let base = "";
|
||||
if (d.ifname && d.ifname.length > 0)
|
||||
base = d.ifname;
|
||||
else if (d.connectionName && d.connectionName.length > 0)
|
||||
base = d.connectionName;
|
||||
else if (NetworkService.activeEthernetIf && NetworkService.activeEthernetIf.length > 0)
|
||||
base = NetworkService.activeEthernetIf;
|
||||
else
|
||||
base = I18n.tr("quickSettings.wifi.label.ethernet");
|
||||
const speed = (d.speed && d.speed.length > 0) ? d.speed : "";
|
||||
return speed ? (base + " — " + speed) : base;
|
||||
}
|
||||
// Wi‑Fi tooltip: SSID — link speed (if available)
|
||||
if (pill.text !== "") {
|
||||
const w = NetworkService.activeWifiDetails || ({});
|
||||
const rate = (w.rateShort && w.rateShort.length > 0) ? w.rateShort : (w.rate || "");
|
||||
return rate && rate.length > 0 ? (pill.text + " — " + rate) : pill.text;
|
||||
}
|
||||
} catch (e) {
|
||||
// noop
|
||||
}
|
||||
return I18n.tr("tooltips.manage-wifi");
|
||||
}
|
||||
@@ -14,14 +14,13 @@ NIconButton {
|
||||
|
||||
property ShellScreen screen
|
||||
|
||||
density: Settings.data.bar.density
|
||||
baseSize: Style.capsuleHeight
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: Settings.data.nightLight.forced ? Color.mPrimary : Style.capsuleColor
|
||||
colorFg: Settings.data.nightLight.forced ? Color.mOnPrimary : Color.mOnSurface
|
||||
colorBorder: Color.transparent
|
||||
colorBorderHover: Color.transparent
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
|
||||
@@ -14,14 +14,13 @@ NIconButton {
|
||||
|
||||
property ShellScreen screen
|
||||
|
||||
density: Settings.data.bar.density
|
||||
baseSize: Style.capsuleHeight
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: PowerProfileService.noctaliaPerformanceMode ? Color.mPrimary : Style.capsuleColor
|
||||
colorFg: PowerProfileService.noctaliaPerformanceMode ? Color.mOnPrimary : Color.mOnSurface
|
||||
colorBorder: Color.transparent
|
||||
colorBorderHover: Color.transparent
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
|
||||
@@ -50,15 +50,14 @@ NIconButton {
|
||||
|
||||
baseSize: Style.capsuleHeight
|
||||
applyUiScale: false
|
||||
density: Settings.data.bar.density
|
||||
customRadius: Style.radiusL
|
||||
icon: NotificationService.doNotDisturb ? "bell-off" : "bell"
|
||||
tooltipText: NotificationService.doNotDisturb ? I18n.tr("tooltips.open-notification-history-disable-dnd") : I18n.tr("tooltips.open-notification-history-enable-dnd")
|
||||
tooltipDirection: BarService.getTooltipDirection()
|
||||
colorBg: Style.capsuleColor
|
||||
colorFg: Color.mOnSurface
|
||||
colorBorder: Color.transparent
|
||||
colorBorderHover: Color.transparent
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
visible: count > 0 || !hideWhenZero
|
||||
|
||||
@@ -14,7 +14,6 @@ NIconButton {
|
||||
|
||||
baseSize: Style.capsuleHeight
|
||||
applyUiScale: false
|
||||
density: Settings.data.bar.density
|
||||
customRadius: Style.radiusL
|
||||
visible: PowerProfileService.available
|
||||
icon: PowerProfileService.getIcon()
|
||||
@@ -24,9 +23,10 @@ NIconButton {
|
||||
tooltipDirection: BarService.getTooltipDirection()
|
||||
colorBg: (PowerProfileService.profile === PowerProfile.Balanced) ? Style.capsuleColor : Color.mPrimary
|
||||
colorFg: (PowerProfileService.profile === PowerProfile.Balanced) ? Color.mOnSurface : Color.mOnPrimary
|
||||
colorBorder: Color.transparent
|
||||
colorBorderHover: Color.transparent
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
onClicked: PowerProfileService.cycleProfile()
|
||||
onRightClicked: PowerProfileService.cycleProfileReverse()
|
||||
}
|
||||
|
||||
@@ -18,19 +18,17 @@ NIconButton {
|
||||
property string section: ""
|
||||
property int sectionWidgetIndex: -1
|
||||
property int sectionWidgetsCount: 0
|
||||
property real barScaling: 1.0
|
||||
|
||||
icon: ScreenRecorderService.isPending ? "" : "camera-video"
|
||||
tooltipText: ScreenRecorderService.isRecording ? I18n.tr("tooltips.click-to-stop-recording") : I18n.tr("tooltips.click-to-start-recording")
|
||||
tooltipDirection: BarService.getTooltipDirection()
|
||||
density: Settings.data.bar.density
|
||||
baseSize: Style.capsuleHeight
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: ScreenRecorderService.isRecording ? Color.mPrimary : Style.capsuleColor
|
||||
colorFg: ScreenRecorderService.isRecording ? Color.mOnPrimary : Color.mOnSurface
|
||||
colorBorder: Color.transparent
|
||||
colorBorderHover: Color.transparent
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
@@ -55,8 +53,8 @@ NIconButton {
|
||||
id: pendingSpinner
|
||||
icon: "loader-2"
|
||||
visible: ScreenRecorderService.isPending
|
||||
pointSize: Math.max(1, Style.toOdd(root.width * root.barScaling * 0.65))
|
||||
applyUiScale: root.applyUiScale
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
color: root.enabled && root.hovering ? colorFgHover : colorFg
|
||||
anchors.centerIn: parent
|
||||
transformOrigin: Item.Center
|
||||
|
||||
@@ -47,7 +47,6 @@ NIconButton {
|
||||
}
|
||||
}
|
||||
|
||||
density: Settings.data.bar.density
|
||||
baseSize: Style.capsuleHeight
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
@@ -56,8 +55,8 @@ NIconButton {
|
||||
tooltipDirection: BarService.getTooltipDirection()
|
||||
colorBg: Style.capsuleColor
|
||||
colorFg: root.iconColor
|
||||
colorBorder: Color.transparent
|
||||
colorBorderHover: Color.transparent
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ Rectangle {
|
||||
property string section: ""
|
||||
property int sectionWidgetIndex: -1
|
||||
property int sectionWidgetsCount: 0
|
||||
property real barScaling: 1.0
|
||||
|
||||
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
|
||||
property var widgetSettings: {
|
||||
@@ -35,8 +34,6 @@ Rectangle {
|
||||
|
||||
readonly property string barPosition: Settings.data.bar.position
|
||||
readonly property bool isVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property bool density: Settings.data.bar.density
|
||||
readonly property bool barCompact: Settings.data.bar.density === "compact"
|
||||
|
||||
readonly property bool compactMode: widgetSettings.compactMode !== undefined ? widgetSettings.compactMode : widgetMetadata.compactMode
|
||||
readonly property bool usePrimaryColor: widgetSettings.usePrimaryColor !== undefined ? widgetSettings.usePrimaryColor : widgetMetadata.usePrimaryColor
|
||||
@@ -48,12 +45,12 @@ Rectangle {
|
||||
readonly property bool showMemoryAsPercent: (widgetSettings.showMemoryAsPercent !== undefined) ? widgetSettings.showMemoryAsPercent : widgetMetadata.showMemoryAsPercent
|
||||
readonly property bool showNetworkStats: (widgetSettings.showNetworkStats !== undefined) ? widgetSettings.showNetworkStats : widgetMetadata.showNetworkStats
|
||||
readonly property bool showDiskUsage: (widgetSettings.showDiskUsage !== undefined) ? widgetSettings.showDiskUsage : widgetMetadata.showDiskUsage
|
||||
readonly property bool showLoadAverage: (widgetSettings.showLoadAverage !== undefined) ? widgetSettings.showLoadAverage : widgetMetadata.showLoadAverage
|
||||
readonly property string diskPath: (widgetSettings.diskPath !== undefined) ? widgetSettings.diskPath : widgetMetadata.diskPath
|
||||
readonly property string fontFamily: useMonospaceFont ? Settings.data.ui.fontFixed : Settings.data.ui.fontDefault
|
||||
|
||||
readonly property real iconSize: Style.toOdd(Style.capsuleHeight * root.barScaling * (root.barCompact ? 0.55 : 0.45))
|
||||
readonly property real iconSize: Style.toOdd(Style.capsuleHeight * 0.48)
|
||||
readonly property real miniGaugeWidth: Math.max(3, Style.toOdd(root.iconSize * 0.25))
|
||||
readonly property real textSize: Math.max(7, iconSize * barScaling * 0.6 * (isVertical ? 0.85 : 1.0))
|
||||
|
||||
function openExternalMonitor() {
|
||||
Quickshell.execDetached(["sh", "-c", Settings.data.systemMonitor.externalMonitor]);
|
||||
@@ -74,6 +71,11 @@ Rectangle {
|
||||
lines.push(`${I18n.tr("system-monitor.gpu-temp")}: ${Math.round(SystemStatService.gpuTemp)}°C`);
|
||||
}
|
||||
|
||||
// Load Average
|
||||
if (SystemStatService.loadAvg1 >= 0) {
|
||||
lines.push(`${I18n.tr("system-monitor.load-average")}: ${SystemStatService.loadAvg1.toFixed(2)} ${SystemStatService.loadAvg5.toFixed(2)} ${SystemStatService.loadAvg15.toFixed(2)}`);
|
||||
}
|
||||
|
||||
// Memory
|
||||
lines.push(`${I18n.tr("system-monitor.memory")}: ${Math.round(SystemStatService.memPercent)}% (${SystemStatService.formatMemoryGb(SystemStatService.memGb)})`);
|
||||
|
||||
@@ -226,7 +228,7 @@ Rectangle {
|
||||
flow: isVertical ? GridLayout.TopToBottom : GridLayout.LeftToRight
|
||||
rows: isVertical ? -1 : 1
|
||||
columns: isVertical ? 1 : -1
|
||||
rowSpacing: isVertical ? (compactMode ? Style.marginL : Style.marginM) : 0
|
||||
rowSpacing: isVertical ? Style.marginL : 0
|
||||
columnSpacing: isVertical ? 0 : (Style.marginM)
|
||||
|
||||
// CPU Usage Component
|
||||
@@ -249,18 +251,18 @@ Rectangle {
|
||||
columnSpacing: compactMode ? 3 : Style.marginXS
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: iconSize
|
||||
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.row: (isVertical && !compactMode) ? 1 : 0
|
||||
Layout.column: 0
|
||||
Layout.fillWidth: isVertical
|
||||
implicitWidth: iconSize
|
||||
implicitHeight: iconSize
|
||||
|
||||
NIcon {
|
||||
icon: "cpu-usage"
|
||||
pointSize: iconSize
|
||||
applyUiScale: false
|
||||
anchors.centerIn: parent
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
y: Style.pixelAlignCenter(parent.height, contentHeight)
|
||||
color: (cpuWarning || cpuCritical) ? SystemStatService.cpuColor : Color.mOnSurface
|
||||
}
|
||||
}
|
||||
@@ -277,16 +279,14 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
family: fontFamily
|
||||
pointSize: textSize
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: (cpuWarning || cpuCritical) ? SystemStatService.cpuColor : textColor
|
||||
Layout.row: isVertical ? 0 : 0
|
||||
Layout.column: isVertical ? 0 : 1
|
||||
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
|
||||
}
|
||||
|
||||
// Compact mode
|
||||
@@ -326,18 +326,18 @@ Rectangle {
|
||||
columnSpacing: compactMode ? 3 : Style.marginXS
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: iconSize
|
||||
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.row: (isVertical && !compactMode) ? 1 : 0
|
||||
Layout.column: 0
|
||||
Layout.fillWidth: isVertical
|
||||
implicitWidth: iconSize
|
||||
implicitHeight: iconSize
|
||||
|
||||
NIcon {
|
||||
icon: "cpu-temperature"
|
||||
pointSize: iconSize
|
||||
applyUiScale: false
|
||||
anchors.centerIn: parent
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
y: Style.pixelAlignCenter(parent.height, contentHeight)
|
||||
color: (tempWarning || tempCritical) ? SystemStatService.tempColor : Color.mOnSurface
|
||||
}
|
||||
}
|
||||
@@ -347,16 +347,14 @@ Rectangle {
|
||||
visible: !compactMode
|
||||
text: `${Math.round(SystemStatService.cpuTemp)}°`
|
||||
family: fontFamily
|
||||
pointSize: textSize
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: (tempWarning || tempCritical) ? SystemStatService.tempColor : textColor
|
||||
Layout.row: isVertical ? 0 : 0
|
||||
Layout.column: isVertical ? 0 : 1
|
||||
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
|
||||
}
|
||||
|
||||
// Compact mode, mini gauge (to the right of icon)
|
||||
@@ -396,18 +394,18 @@ Rectangle {
|
||||
columnSpacing: compactMode ? 3 : Style.marginXS
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: iconSize
|
||||
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.row: (isVertical && !compactMode) ? 1 : 0
|
||||
Layout.column: 0
|
||||
Layout.fillWidth: isVertical
|
||||
implicitWidth: iconSize
|
||||
implicitHeight: iconSize
|
||||
|
||||
NIcon {
|
||||
icon: "gpu-temperature"
|
||||
pointSize: iconSize
|
||||
applyUiScale: false
|
||||
anchors.centerIn: parent
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
y: Style.pixelAlignCenter(parent.height, contentHeight)
|
||||
color: (gpuWarning || gpuCritical) ? SystemStatService.gpuColor : Color.mOnSurface
|
||||
}
|
||||
}
|
||||
@@ -417,16 +415,14 @@ Rectangle {
|
||||
visible: !compactMode
|
||||
text: `${Math.round(SystemStatService.gpuTemp)}°`
|
||||
family: fontFamily
|
||||
pointSize: textSize
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: (gpuWarning || gpuCritical) ? SystemStatService.gpuColor : textColor
|
||||
Layout.row: isVertical ? 0 : 0
|
||||
Layout.column: isVertical ? 0 : 1
|
||||
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
|
||||
}
|
||||
|
||||
// Compact mode
|
||||
@@ -446,6 +442,74 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
|
||||
// Load Average Component
|
||||
Item {
|
||||
id: loadAvgContainer
|
||||
implicitWidth: loadAvgContent.implicitWidth
|
||||
implicitHeight: loadAvgContent.implicitHeight
|
||||
Layout.preferredWidth: isVertical ? root.width : implicitWidth
|
||||
Layout.preferredHeight: compactMode ? implicitHeight : Style.capsuleHeight
|
||||
Layout.alignment: isVertical ? Qt.AlignHCenter : Qt.AlignVCenter
|
||||
visible: showLoadAverage && SystemStatService.nproc > 0 && SystemStatService.loadAvg1 > 0
|
||||
|
||||
GridLayout {
|
||||
id: loadAvgContent
|
||||
anchors.centerIn: parent
|
||||
flow: (isVertical && !compactMode) ? GridLayout.TopToBottom : GridLayout.LeftToRight
|
||||
rows: (isVertical && !compactMode) ? 2 : 1
|
||||
columns: (isVertical && !compactMode) ? 1 : 2
|
||||
rowSpacing: Style.marginXXS
|
||||
columnSpacing: compactMode ? 3 : Style.marginXS
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: iconSize
|
||||
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.row: (isVertical && !compactMode) ? 1 : 0
|
||||
Layout.column: 0
|
||||
|
||||
NIcon {
|
||||
icon: "weight"
|
||||
pointSize: iconSize
|
||||
applyUiScale: false
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
y: Style.pixelAlignCenter(parent.height, contentHeight)
|
||||
color: Color.mOnSurface
|
||||
}
|
||||
}
|
||||
|
||||
// Text mode
|
||||
NText {
|
||||
visible: !compactMode
|
||||
text: SystemStatService.loadAvg1.toFixed(1)
|
||||
family: fontFamily
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: textColor
|
||||
Layout.row: isVertical ? 0 : 0
|
||||
Layout.column: isVertical ? 0 : 1
|
||||
}
|
||||
|
||||
// Compact mode
|
||||
Loader {
|
||||
active: compactMode
|
||||
visible: compactMode
|
||||
sourceComponent: miniGaugeComponent
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.row: 0
|
||||
Layout.column: 1
|
||||
|
||||
onLoaded: {
|
||||
item.ratio = Qt.binding(() => Math.min(1, SystemStatService.loadAvg1 / SystemStatService.nproc));
|
||||
item.statColor = Qt.binding(() => Color.mPrimary);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Memory Usage Component
|
||||
Item {
|
||||
id: memoryContainer
|
||||
@@ -466,18 +530,18 @@ Rectangle {
|
||||
columnSpacing: compactMode ? 3 : Style.marginXS
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: iconSize
|
||||
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.row: (isVertical && !compactMode) ? 1 : 0
|
||||
Layout.column: 0
|
||||
Layout.fillWidth: isVertical
|
||||
implicitWidth: iconSize
|
||||
implicitHeight: iconSize
|
||||
|
||||
NIcon {
|
||||
icon: "memory"
|
||||
pointSize: iconSize
|
||||
applyUiScale: false
|
||||
anchors.centerIn: parent
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
y: Style.pixelAlignCenter(parent.height, contentHeight)
|
||||
color: (memWarning || memCritical) ? SystemStatService.memColor : Color.mOnSurface
|
||||
}
|
||||
}
|
||||
@@ -487,16 +551,14 @@ Rectangle {
|
||||
visible: !compactMode
|
||||
text: showMemoryAsPercent ? `${Math.round(SystemStatService.memPercent)}%` : SystemStatService.formatMemoryGb(SystemStatService.memGb)
|
||||
family: fontFamily
|
||||
pointSize: textSize
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: (memWarning || memCritical) ? SystemStatService.memColor : textColor
|
||||
Layout.row: isVertical ? 0 : 0
|
||||
Layout.column: isVertical ? 0 : 1
|
||||
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
|
||||
}
|
||||
|
||||
// Compact mode
|
||||
@@ -535,18 +597,18 @@ Rectangle {
|
||||
columnSpacing: compactMode ? 3 : Style.marginXS
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: iconSize
|
||||
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.row: (isVertical && !compactMode) ? 1 : 0
|
||||
Layout.column: 0
|
||||
Layout.fillWidth: isVertical
|
||||
implicitWidth: iconSize
|
||||
implicitHeight: iconSize
|
||||
|
||||
NIcon {
|
||||
icon: "download-speed"
|
||||
pointSize: iconSize
|
||||
applyUiScale: false
|
||||
anchors.centerIn: parent
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
y: Style.pixelAlignCenter(parent.height, contentHeight)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -555,16 +617,14 @@ Rectangle {
|
||||
visible: !compactMode
|
||||
text: isVertical ? SystemStatService.formatCompactSpeed(SystemStatService.rxSpeed) : SystemStatService.formatSpeed(SystemStatService.rxSpeed)
|
||||
family: fontFamily
|
||||
pointSize: textSize
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: textColor
|
||||
Layout.row: isVertical ? 0 : 0
|
||||
Layout.column: isVertical ? 0 : 1
|
||||
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
|
||||
}
|
||||
|
||||
// Compact mode
|
||||
@@ -602,18 +662,18 @@ Rectangle {
|
||||
columnSpacing: compactMode ? 3 : Style.marginXS
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: iconSize
|
||||
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.row: (isVertical && !compactMode) ? 1 : 0
|
||||
Layout.column: 0
|
||||
Layout.fillWidth: isVertical
|
||||
implicitWidth: iconSize
|
||||
implicitHeight: iconSize
|
||||
|
||||
NIcon {
|
||||
icon: "upload-speed"
|
||||
pointSize: iconSize
|
||||
applyUiScale: false
|
||||
anchors.centerIn: parent
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
y: Style.pixelAlignCenter(parent.height, contentHeight)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -622,16 +682,14 @@ Rectangle {
|
||||
visible: !compactMode
|
||||
text: isVertical ? SystemStatService.formatCompactSpeed(SystemStatService.txSpeed) : SystemStatService.formatSpeed(SystemStatService.txSpeed)
|
||||
family: fontFamily
|
||||
pointSize: textSize
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: textColor
|
||||
Layout.row: isVertical ? 0 : 0
|
||||
Layout.column: isVertical ? 0 : 1
|
||||
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
|
||||
}
|
||||
|
||||
// Compact mode
|
||||
@@ -670,18 +728,18 @@ Rectangle {
|
||||
columnSpacing: compactMode ? 3 : Style.marginXS
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: iconSize
|
||||
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.row: (isVertical && !compactMode) ? 1 : 0
|
||||
Layout.column: 0
|
||||
Layout.fillWidth: isVertical
|
||||
implicitWidth: iconSize
|
||||
implicitHeight: iconSize
|
||||
|
||||
NIcon {
|
||||
icon: "storage"
|
||||
pointSize: iconSize
|
||||
applyUiScale: false
|
||||
anchors.centerIn: parent
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
y: Style.pixelAlignCenter(parent.height, contentHeight)
|
||||
color: (diskWarning || diskCritical) ? SystemStatService.getDiskColor(diskPath) : Color.mOnSurface
|
||||
}
|
||||
}
|
||||
@@ -691,16 +749,14 @@ Rectangle {
|
||||
visible: !compactMode
|
||||
text: SystemStatService.diskPercents[diskPath] ? `${SystemStatService.diskPercents[diskPath]}%` : "n/a"
|
||||
family: fontFamily
|
||||
pointSize: textSize
|
||||
pointSize: Style.barFontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: (diskWarning || diskCritical) ? SystemStatService.getDiskColor(diskPath) : textColor
|
||||
Layout.row: isVertical ? 0 : 0
|
||||
Layout.column: isVertical ? 0 : 1
|
||||
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
|
||||
}
|
||||
|
||||
// Compact mode
|
||||
|
||||
@@ -19,11 +19,9 @@ Rectangle {
|
||||
property string section: ""
|
||||
property int sectionWidgetIndex: -1
|
||||
property int sectionWidgetsCount: 0
|
||||
property real barScaling: 1.0
|
||||
|
||||
readonly property string barPosition: Settings.data.bar.position
|
||||
readonly property bool isVerticalBar: barPosition === "left" || barPosition === "right"
|
||||
readonly property string density: Settings.data.bar.density
|
||||
|
||||
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
|
||||
property var widgetSettings: {
|
||||
@@ -44,7 +42,7 @@ Rectangle {
|
||||
readonly property bool smartWidth: (widgetSettings.smartWidth !== undefined) ? widgetSettings.smartWidth : widgetMetadata.smartWidth
|
||||
readonly property int maxTaskbarWidthPercent: (widgetSettings.maxTaskbarWidth !== undefined) ? widgetSettings.maxTaskbarWidth : widgetMetadata.maxTaskbarWidth
|
||||
readonly property real iconScale: (widgetSettings.iconScale !== undefined) ? widgetSettings.iconScale : widgetMetadata.iconScale
|
||||
readonly property int itemSize: Style.toOdd(Style.capsuleHeight * barScaling * Math.max(0.1, iconScale))
|
||||
readonly property int itemSize: Style.toOdd(Style.capsuleHeight * Math.max(0.1, iconScale))
|
||||
|
||||
// Maximum width for the taskbar widget to prevent overlapping with other widgets
|
||||
readonly property real maxTaskbarWidth: {
|
||||
@@ -96,6 +94,10 @@ Rectangle {
|
||||
// Combined model of running windows and pinned apps
|
||||
property var combinedModel: []
|
||||
|
||||
// Wheel scroll handling
|
||||
property int wheelAccumulatedDelta: 0
|
||||
property bool wheelCooldown: false
|
||||
|
||||
// Helper function to normalize app IDs for case-insensitive matching
|
||||
function normalizeAppId(appId) {
|
||||
if (!appId || typeof appId !== 'string')
|
||||
@@ -420,6 +422,69 @@ Rectangle {
|
||||
}
|
||||
onScreenChanged: updateCombinedModel()
|
||||
|
||||
// Debounce timer for wheel interactions
|
||||
Timer {
|
||||
id: wheelDebounce
|
||||
interval: 150
|
||||
repeat: false
|
||||
onTriggered: {
|
||||
root.wheelCooldown = false;
|
||||
root.wheelAccumulatedDelta = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Scroll to switch between windows
|
||||
WheelHandler {
|
||||
id: wheelHandler
|
||||
target: root
|
||||
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
|
||||
onWheel: function (event) {
|
||||
if (root.wheelCooldown || root.combinedModel.length === 0)
|
||||
return;
|
||||
var dy = event.angleDelta.y;
|
||||
var dx = event.angleDelta.x;
|
||||
var useDy = Math.abs(dy) >= Math.abs(dx);
|
||||
var delta = useDy ? dy : dx;
|
||||
root.wheelAccumulatedDelta += delta;
|
||||
var step = 120;
|
||||
if (Math.abs(root.wheelAccumulatedDelta) >= step) {
|
||||
var direction = root.wheelAccumulatedDelta > 0 ? -1 : 1;
|
||||
// Find the focused window or first running window
|
||||
var currentIndex = -1;
|
||||
for (var i = 0; i < root.combinedModel.length; i++) {
|
||||
if (root.combinedModel[i].window && root.combinedModel[i].window.isFocused) {
|
||||
currentIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (currentIndex < 0) {
|
||||
// No focused window, find first running window
|
||||
for (var j = 0; j < root.combinedModel.length; j++) {
|
||||
if (root.combinedModel[j].window) {
|
||||
currentIndex = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (currentIndex >= 0) {
|
||||
var nextIndex = (currentIndex + direction + root.combinedModel.length) % root.combinedModel.length;
|
||||
var nextItem = root.combinedModel[nextIndex];
|
||||
if (nextItem && nextItem.window) {
|
||||
try {
|
||||
CompositorService.focusWindow(nextItem.window);
|
||||
} catch (error) {
|
||||
Logger.e("Taskbar", "Failed to focus window: " + error);
|
||||
}
|
||||
}
|
||||
}
|
||||
root.wheelCooldown = true;
|
||||
wheelDebounce.restart();
|
||||
root.wheelAccumulatedDelta = 0;
|
||||
event.accepted = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// "visible": Always Visible, "hidden": Hide When Empty, "transparent": Transparent When Empty
|
||||
visible: hideMode !== "hidden" || hasWindow
|
||||
opacity: ((hideMode !== "hidden" && hideMode !== "transparent") || hasWindow) ? 1.0 : 0.0
|
||||
@@ -549,7 +614,7 @@ Rectangle {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width: Style.toOdd(root.itemSize * 0.25)
|
||||
height: 4
|
||||
color: taskbarItem.isFocused ? Color.mPrimary : Color.transparent
|
||||
color: taskbarItem.isFocused ? Color.mPrimary : "transparent"
|
||||
radius: Math.min(Style.radiusXXS, width / 2)
|
||||
}
|
||||
}
|
||||
@@ -567,7 +632,7 @@ Rectangle {
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
|
||||
pointSize: root.itemSize * 0.5
|
||||
pointSize: Style.barFontSize
|
||||
color: titleFgColor
|
||||
opacity: Style.opacityFull
|
||||
}
|
||||
|
||||
@@ -291,14 +291,13 @@ Rectangle {
|
||||
visible: root.drawerEnabled && dropdownItems.length > 0 && BarService.getPillDirection(root)
|
||||
tooltipText: I18n.tr("tooltips.open-tray-dropdown")
|
||||
tooltipDirection: BarService.getTooltipDirection()
|
||||
density: Settings.data.bar.density
|
||||
baseSize: Style.capsuleHeight
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: Color.transparent
|
||||
colorBg: "transparent"
|
||||
colorFg: Settings.data.colorSchemes.darkMode ? Color.mOnSurface : Color.mOnPrimary
|
||||
colorBorder: Color.transparent
|
||||
colorBorderHover: Color.transparent
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
icon: {
|
||||
switch (barPosition) {
|
||||
case "bottom":
|
||||
@@ -448,14 +447,13 @@ Rectangle {
|
||||
visible: root.drawerEnabled && dropdownItems.length > 0 && !BarService.getPillDirection(root)
|
||||
tooltipText: I18n.tr("tooltips.open-tray-dropdown")
|
||||
tooltipDirection: BarService.getTooltipDirection()
|
||||
density: Settings.data.bar.density
|
||||
baseSize: Style.capsuleHeight
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: Color.transparent
|
||||
colorBg: "transparent"
|
||||
colorFg: Color.mOnSurface
|
||||
colorBorder: Color.transparent
|
||||
colorBorderHover: Color.transparent
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
icon: {
|
||||
switch (barPosition) {
|
||||
case "bottom":
|
||||
|
||||
@@ -97,7 +97,6 @@ Item {
|
||||
id: pill
|
||||
|
||||
screen: root.screen
|
||||
density: Settings.data.bar.density
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
icon: VPNService.hasActiveConnection ? "shield-lock" : "shield"
|
||||
text: {
|
||||
|
||||
@@ -113,7 +113,6 @@ Item {
|
||||
id: pill
|
||||
|
||||
screen: root.screen
|
||||
density: Settings.data.bar.density
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
icon: AudioService.getOutputIcon()
|
||||
autoHide: false // Important to be false so we can hover as long as we want
|
||||
|
||||
@@ -14,15 +14,14 @@ NIconButton {
|
||||
|
||||
baseSize: Style.capsuleHeight
|
||||
applyUiScale: false
|
||||
density: Settings.data.bar.density
|
||||
customRadius: Style.radiusL
|
||||
icon: "wallpaper-selector"
|
||||
tooltipText: I18n.tr("tooltips.open-wallpaper-selector")
|
||||
tooltipDirection: BarService.getTooltipDirection()
|
||||
colorBg: Style.capsuleColor
|
||||
colorFg: Color.mOnSurface
|
||||
colorBorder: Color.transparent
|
||||
colorBorderHover: Color.transparent
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ Item {
|
||||
property string section: ""
|
||||
property int sectionWidgetIndex: -1
|
||||
property int sectionWidgetsCount: 0
|
||||
property real barScaling: 1.0
|
||||
|
||||
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
|
||||
property var widgetSettings: {
|
||||
@@ -37,7 +36,7 @@ Item {
|
||||
|
||||
readonly property string barPosition: Settings.data.bar.position
|
||||
readonly property bool isVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property real baseDimensionRatio: root.barScaling * 0.65 * (widgetSettings.labelMode === "none" ? 0.75 : 1)
|
||||
readonly property real baseDimensionRatio: 0.65 * (widgetSettings.labelMode === "none" ? 0.75 : 1)
|
||||
|
||||
readonly property string labelMode: (widgetSettings.labelMode !== undefined) ? widgetSettings.labelMode : widgetMetadata.labelMode
|
||||
readonly property bool hideUnoccupied: (widgetSettings.hideUnoccupied !== undefined) ? widgetSettings.hideUnoccupied : widgetMetadata.hideUnoccupied
|
||||
@@ -56,6 +55,7 @@ Item {
|
||||
// Only for grouped mode / show apps
|
||||
readonly property int baseItemSize: Style.toOdd(Style.capsuleHeight * 0.8)
|
||||
readonly property int iconSize: Style.toOdd(baseItemSize * iconScale)
|
||||
readonly property real textRatio: 0.50
|
||||
|
||||
// Context menu state for grouped mode - store IDs instead of object references to avoid stale references
|
||||
property string selectedWindowId: ""
|
||||
@@ -505,7 +505,7 @@ Item {
|
||||
return model.idx.toString();
|
||||
}
|
||||
family: Settings.data.ui.fontFixed
|
||||
pointSize: model.isActive ? workspacePillContainer.height * 0.45 : workspacePillContainer.height * 0.42
|
||||
pointSize: workspacePillContainer.height * root.textRatio
|
||||
applyUiScale: false
|
||||
font.capitalization: Font.AllUppercase
|
||||
font.weight: Style.fontWeightBold
|
||||
@@ -604,7 +604,7 @@ Item {
|
||||
width: workspacePillContainer.width + 18 * root.masterProgress * scale
|
||||
height: workspacePillContainer.height + 18 * root.masterProgress * scale
|
||||
radius: width / 2
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
border.color: root.effectColor
|
||||
border.width: Math.max(1, Math.round((2 + 6 * (1.0 - root.masterProgress))))
|
||||
opacity: root.effectsActive && model.isFocused ? (1.0 - root.masterProgress) * 0.7 : 0
|
||||
@@ -653,7 +653,7 @@ Item {
|
||||
return model.idx.toString();
|
||||
}
|
||||
family: Settings.data.ui.fontFixed
|
||||
pointSize: model.isActive ? workspacePillContainerVertical.width * 0.45 : workspacePillContainerVertical.width * 0.42
|
||||
pointSize: workspacePillContainerVertical.width * root.textRatio
|
||||
applyUiScale: false
|
||||
font.capitalization: Font.AllUppercase
|
||||
font.weight: Style.fontWeightBold
|
||||
@@ -752,7 +752,7 @@ Item {
|
||||
width: workspacePillContainerVertical.width + 18 * root.masterProgress * scale
|
||||
height: workspacePillContainerVertical.height + 18 * root.masterProgress * scale
|
||||
radius: width / 2
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
border.color: root.effectColor
|
||||
border.width: Math.max(1, Math.round((2 + 6 * (1.0 - root.masterProgress))))
|
||||
opacity: root.effectsActive && model.isFocused ? (1.0 - root.masterProgress) * 0.7 : 0
|
||||
@@ -955,7 +955,7 @@ Item {
|
||||
width: groupedWorkspaceNumberContainer.width + 12 * root.masterProgress
|
||||
height: groupedWorkspaceNumberContainer.height + 12 * root.masterProgress
|
||||
radius: width / 2
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
border.color: root.effectColor
|
||||
border.width: Math.max(1, Math.round((2 + 4 * (1.0 - root.masterProgress))))
|
||||
opacity: root.effectsActive && groupedContainer.workspaceModel.isFocused ? (1.0 - root.masterProgress) * 0.7 : 0
|
||||
@@ -982,7 +982,7 @@ Item {
|
||||
|
||||
family: Settings.data.ui.fontFixed
|
||||
font {
|
||||
pointSize: Style.fontSizeXXS
|
||||
pointSize: Style.barFontSize * 0.75
|
||||
weight: Style.fontWeightBold
|
||||
capitalization: Font.AllUppercase
|
||||
}
|
||||
|
||||
@@ -152,7 +152,7 @@ NBox {
|
||||
icon: AudioService.muted ? "volume-off" : "volume-high"
|
||||
baseSize: Style.baseWidgetSize * 0.5
|
||||
colorFg: AudioService.muted ? Color.mError : Color.mOnSurface
|
||||
colorBg: Color.transparent
|
||||
colorBg: "transparent"
|
||||
colorBgHover: Color.mHover
|
||||
colorFgHover: Color.mOnHover
|
||||
onClicked: {
|
||||
@@ -166,7 +166,6 @@ NBox {
|
||||
text: AudioService.sink ? AudioService.sink.description : "No output device"
|
||||
pointSize: Style.fontSizeXS
|
||||
color: Color.mOnSurfaceVariant
|
||||
font.weight: Style.fontWeightMedium
|
||||
elide: Text.ElideRight
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 0
|
||||
@@ -225,7 +224,7 @@ NBox {
|
||||
icon: AudioService.inputMuted ? "microphone-off" : "microphone"
|
||||
baseSize: Style.baseWidgetSize * 0.5
|
||||
colorFg: AudioService.inputMuted ? Color.mError : Color.mOnSurface
|
||||
colorBg: Color.transparent
|
||||
colorBg: "transparent"
|
||||
colorBgHover: Color.mHover
|
||||
colorFgHover: Color.mOnHover
|
||||
onClicked: AudioService.setInputMuted(!AudioService.inputMuted)
|
||||
@@ -235,7 +234,6 @@ NBox {
|
||||
text: AudioService.source ? AudioService.source.description : "No input device"
|
||||
pointSize: Style.fontSizeXS
|
||||
color: Color.mOnSurfaceVariant
|
||||
font.weight: Style.fontWeightMedium
|
||||
elide: Text.ElideRight
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 0
|
||||
|
||||
@@ -91,7 +91,7 @@ NBox {
|
||||
}
|
||||
baseSize: Style.baseWidgetSize * 0.5
|
||||
colorFg: Color.mOnSurface
|
||||
colorBg: Color.transparent
|
||||
colorBg: "transparent"
|
||||
colorBgHover: Color.mHover
|
||||
colorFgHover: Color.mOnHover
|
||||
}
|
||||
@@ -100,7 +100,6 @@ NBox {
|
||||
text: brightnessMonitor ? I18n.tr("settings.display.monitors.brightness") : "No display"
|
||||
pointSize: Style.fontSizeXS
|
||||
color: Color.mOnSurfaceVariant
|
||||
font.weight: Style.fontWeightMedium
|
||||
elide: Text.ElideRight
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 0
|
||||
|
||||
@@ -96,7 +96,6 @@ Rectangle {
|
||||
return chunks[0];
|
||||
}
|
||||
pointSize: Style.fontSizeM
|
||||
font.weight: Style.fontWeightMedium
|
||||
color: Color.mOnPrimary
|
||||
Layout.maximumWidth: 150
|
||||
elide: Text.ElideRight
|
||||
@@ -105,7 +104,6 @@ Rectangle {
|
||||
NText {
|
||||
text: root.weatherReady ? ` (${LocationService.data.weather.timezone_abbreviation})` : ""
|
||||
pointSize: Style.fontSizeXS
|
||||
font.weight: Style.fontWeightMedium
|
||||
color: Qt.alpha(Color.mOnPrimary, 0.7)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,7 +260,6 @@ NBox {
|
||||
anchors.centerIn: parent
|
||||
color: Qt.alpha(Color.mPrimary, 0.7)
|
||||
pointSize: Style.fontSizeXXS
|
||||
font.weight: Style.fontWeightMedium
|
||||
text: modelData
|
||||
}
|
||||
}
|
||||
@@ -343,7 +342,7 @@ NBox {
|
||||
height: Style.baseWidgetSize * 0.9
|
||||
anchors.centerIn: parent
|
||||
radius: Style.radiusM
|
||||
color: modelData.today ? Color.mSecondary : Color.transparent
|
||||
color: modelData.today ? Color.mSecondary : "transparent"
|
||||
|
||||
NText {
|
||||
anchors.centerIn: parent
|
||||
|
||||
@@ -52,6 +52,12 @@ NBox {
|
||||
}
|
||||
|
||||
function updateCachedWallpaper() {
|
||||
// Handle solid color mode - no wallpaper to cache
|
||||
if (Settings.data.wallpaper.useSolidColor || WallpaperService.isSolidColorPath(wallpaper)) {
|
||||
cachedWallpaper = "";
|
||||
return;
|
||||
}
|
||||
|
||||
if (!wallpaper) {
|
||||
cachedWallpaper = "";
|
||||
return;
|
||||
@@ -77,7 +83,7 @@ NBox {
|
||||
layer.effect: MultiEffect {
|
||||
maskEnabled: true
|
||||
maskThresholdMin: 0.95
|
||||
maskSpreadAtMin: 0.0
|
||||
maskSpreadAtMin: 0.15
|
||||
maskSource: ShaderEffectSource {
|
||||
sourceItem: Rectangle {
|
||||
width: root.width
|
||||
@@ -88,12 +94,19 @@ NBox {
|
||||
}
|
||||
}
|
||||
|
||||
// Solid color background (always present as base layer)
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: Settings.data.wallpaper.useSolidColor ? Settings.data.wallpaper.solidColor : Color.mSurface
|
||||
}
|
||||
|
||||
// Background image that covers everything
|
||||
Image {
|
||||
id: bgImage
|
||||
readonly property int dim: Math.round(256 * Style.uiScaleRatio)
|
||||
anchors.fill: parent
|
||||
source: MediaService.trackArtUrl || root.cachedWallpaper
|
||||
visible: source.toString() !== ""
|
||||
source: MediaService.trackArtUrl || (Settings.data.wallpaper.enabled && !Settings.data.wallpaper.useSolidColor ? root.cachedWallpaper : "")
|
||||
sourceSize: Qt.size(dim, dim)
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
layer.enabled: true
|
||||
@@ -116,8 +129,8 @@ NBox {
|
||||
// Border
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: Color.transparent
|
||||
border.color: Color.mOutline
|
||||
color: "transparent"
|
||||
border.color: Style.boxBorderColor
|
||||
border.width: Style.borderS
|
||||
radius: Style.radiusM
|
||||
}
|
||||
@@ -184,7 +197,7 @@ NBox {
|
||||
height: Style.barHeight
|
||||
visible: MediaService.getAvailablePlayers().length > 1
|
||||
radius: Style.radiusM
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
|
||||
property var currentPlayer: MediaService.getAvailablePlayers()[MediaService.selectedPlayerIndex]
|
||||
|
||||
|
||||
@@ -10,15 +10,7 @@ import qs.Widgets
|
||||
NBox {
|
||||
id: root
|
||||
|
||||
// Get diskPath from bar's SystemMonitor widget if available, otherwise use settings
|
||||
readonly property string diskPath: {
|
||||
const sysMonWidget = BarService.lookupWidget("SystemMonitor");
|
||||
if (sysMonWidget && sysMonWidget.diskPath) {
|
||||
return sysMonWidget.diskPath;
|
||||
}
|
||||
return Settings.data.systemMonitor.diskPath || "/";
|
||||
}
|
||||
|
||||
readonly property string diskPath: Settings.data.controlCenter.diskPath || "/"
|
||||
readonly property real contentScale: 0.95 * Style.uiScaleRatio
|
||||
|
||||
Item {
|
||||
|
||||
@@ -434,7 +434,7 @@ NBox {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 0
|
||||
implicitHeight: startButton.implicitHeight
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
|
||||
NButton {
|
||||
id: startButton
|
||||
@@ -456,7 +456,7 @@ NBox {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 0
|
||||
implicitHeight: resetButton.implicitHeight
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
|
||||
NButton {
|
||||
id: resetButton
|
||||
|
||||
@@ -54,7 +54,7 @@ Variants {
|
||||
|
||||
sourceComponent: PanelWindow {
|
||||
id: window
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
screen: screenLoader.modelData
|
||||
|
||||
WlrLayershell.layer: WlrLayer.Bottom
|
||||
|
||||
@@ -343,8 +343,8 @@ Item {
|
||||
id: decorationRect
|
||||
anchors.fill: parent
|
||||
anchors.margins: -outlineMargin
|
||||
color: DesktopWidgetRegistry.editMode ? Qt.rgba(Color.mPrimary.r, Color.mPrimary.g, Color.mPrimary.b, 0.1) : Color.transparent
|
||||
border.color: (DesktopWidgetRegistry.editMode || internal.isDragging) ? (internal.isDragging ? Color.mOutline : Color.mPrimary) : Color.transparent
|
||||
color: DesktopWidgetRegistry.editMode ? Qt.rgba(Color.mPrimary.r, Color.mPrimary.g, Color.mPrimary.b, 0.1) : "transparent"
|
||||
border.color: (DesktopWidgetRegistry.editMode || internal.isDragging) ? (internal.isDragging ? Color.mOutline : Color.mPrimary) : "transparent"
|
||||
border.width: DesktopWidgetRegistry.editMode ? 3 : 0
|
||||
radius: Math.round(Style.radiusL * root.widgetScale)
|
||||
z: -1
|
||||
@@ -367,7 +367,7 @@ Item {
|
||||
shadowEnabled: true
|
||||
shadowBlur: Style.shadowBlur * 1.5
|
||||
shadowOpacity: Style.shadowOpacity * 0.6
|
||||
shadowColor: Color.black
|
||||
shadowColor: "black"
|
||||
shadowHorizontalOffset: Settings.data.general.shadowOffsetX
|
||||
shadowVerticalOffset: Settings.data.general.shadowOffsetY
|
||||
blurMax: Style.shadowBlurMax
|
||||
|
||||
@@ -42,7 +42,7 @@ DraggableDesktopWidget {
|
||||
NClock {
|
||||
now: root.now
|
||||
clockStyle: root.clockStyle
|
||||
backgroundColor: Color.transparent
|
||||
backgroundColor: "transparent"
|
||||
clockColor: clockTextColor
|
||||
progressColor: Color.mPrimary
|
||||
opacity: root.widgetOpacity
|
||||
|
||||
@@ -26,8 +26,8 @@ DraggableDesktopWidget {
|
||||
readonly property bool hasActiveTrack: hasPlayer && (MediaService.trackTitle || MediaService.trackArtist)
|
||||
|
||||
// State
|
||||
// Hide when idle only if not playing AND no active track (to handle players like mpv that may not report playback state correctly)
|
||||
readonly property bool shouldHideIdle: (hideMode === "idle") && !isPlaying && !hasActiveTrack
|
||||
// Hide when idle when playback is not active
|
||||
readonly property bool shouldHideIdle: (hideMode === "idle") && !isPlaying
|
||||
readonly property bool shouldHideEmpty: !hasPlayer && hideMode === "hidden"
|
||||
readonly property bool isHidden: (shouldHideIdle || shouldHideEmpty) && !DesktopWidgetRegistry.editMode
|
||||
visible: !isHidden
|
||||
@@ -87,7 +87,7 @@ DraggableDesktopWidget {
|
||||
layer.effect: MultiEffect {
|
||||
maskEnabled: true
|
||||
maskThresholdMin: 0.95
|
||||
maskSpreadAtMin: 0.0
|
||||
maskSpreadAtMin: 0.15
|
||||
maskSource: ShaderEffectSource {
|
||||
sourceItem: Rectangle {
|
||||
width: root.width - Math.round(Style.marginXS * widgetScale) * 2
|
||||
@@ -250,7 +250,13 @@ DraggableDesktopWidget {
|
||||
Layout.alignment: root.showAlbumArt ? Qt.AlignVCenter : Qt.AlignCenter
|
||||
|
||||
NIconButton {
|
||||
visible: showPrev
|
||||
opacity: showPrev ? 1 : 0
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationSlow
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
baseSize: Math.round(32 * widgetScale)
|
||||
icon: "media-prev"
|
||||
enabled: hasPlayer && MediaService.canGoPrevious
|
||||
@@ -280,7 +286,13 @@ DraggableDesktopWidget {
|
||||
}
|
||||
|
||||
NIconButton {
|
||||
visible: showNext
|
||||
opacity: showNext ? 1 : 0
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationSlow
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
baseSize: Math.round(32 * widgetScale)
|
||||
icon: "media-next"
|
||||
enabled: hasPlayer && MediaService.canGoNext
|
||||
|
||||
@@ -103,7 +103,6 @@ DraggableDesktopWidget {
|
||||
NText {
|
||||
text: `${todayMax}°`
|
||||
pointSize: Math.round(Style.fontSizeXS * widgetScale)
|
||||
font.weight: Style.fontWeightMedium
|
||||
color: Color.mOnSurface
|
||||
}
|
||||
|
||||
@@ -122,7 +121,6 @@ DraggableDesktopWidget {
|
||||
NText {
|
||||
text: `${todayMin}°`
|
||||
pointSize: Math.round(Style.fontSizeXS * widgetScale)
|
||||
font.weight: Style.fontWeightMedium
|
||||
color: Color.mOnSurfaceVariant
|
||||
}
|
||||
}
|
||||
|
||||
+19
-10
@@ -57,6 +57,14 @@ Loader {
|
||||
}
|
||||
}
|
||||
|
||||
// Refresh icons when DesktopEntries becomes available
|
||||
Connections {
|
||||
target: DesktopEntries.applications
|
||||
function onValuesChanged() {
|
||||
root.iconRevision++;
|
||||
}
|
||||
}
|
||||
|
||||
// Shared properties between peek and dock windows
|
||||
readonly property string displayMode: Settings.data.dock.displayMode
|
||||
readonly property bool autoHide: displayMode === "auto_hide"
|
||||
@@ -90,6 +98,9 @@ Loader {
|
||||
// Combined model of running apps and pinned apps
|
||||
property var dockApps: []
|
||||
|
||||
// Revision counter to force icon re-evaluation
|
||||
property int iconRevision: 0
|
||||
|
||||
// Function to close any open context menu
|
||||
function closeAllContextMenus() {
|
||||
if (currentContextMenu && currentContextMenu.visible) {
|
||||
@@ -292,7 +303,7 @@ Loader {
|
||||
anchors.left: true
|
||||
anchors.right: true
|
||||
focusable: false
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
|
||||
WlrLayershell.namespace: "noctalia-dock-peek-" + (screen?.name || "unknown")
|
||||
WlrLayershell.exclusionMode: ExclusionMode.Ignore
|
||||
@@ -332,7 +343,7 @@ Loader {
|
||||
screen: modelData
|
||||
|
||||
focusable: false
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
|
||||
WlrLayershell.namespace: "noctalia-dock-" + (screen?.name || "unknown")
|
||||
WlrLayershell.exclusionMode: exclusive ? ExclusionMode.Auto : ExclusionMode.Ignore
|
||||
@@ -476,20 +487,18 @@ Loader {
|
||||
}
|
||||
}
|
||||
|
||||
Image {
|
||||
IconImage {
|
||||
id: appIcon
|
||||
width: iconSize
|
||||
height: iconSize
|
||||
anchors.centerIn: parent
|
||||
source: dock.getAppIcon(modelData)
|
||||
source: {
|
||||
root.iconRevision; // Force re-evaluation when revision changes
|
||||
return dock.getAppIcon(modelData);
|
||||
}
|
||||
visible: source.toString() !== ""
|
||||
sourceSize.width: iconSize * 2
|
||||
sourceSize.height: iconSize * 2
|
||||
smooth: true
|
||||
mipmap: true
|
||||
antialiasing: true
|
||||
fillMode: Image.PreserveAspectFit
|
||||
cache: true
|
||||
asynchronous: true
|
||||
|
||||
// Dim pinned apps that aren't running
|
||||
opacity: appButton.isRunning ? 1.0 : Settings.data.dock.deadOpacity
|
||||
|
||||
@@ -28,7 +28,7 @@ PopupWindow {
|
||||
|
||||
implicitWidth: menuContentWidth + (Style.marginM * 2)
|
||||
implicitHeight: contextMenuColumn.implicitHeight + (Style.marginM * 2)
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
visible: false
|
||||
|
||||
// Hidden text element for measuring text width
|
||||
@@ -360,7 +360,7 @@ PopupWindow {
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
height: 32
|
||||
color: root.hoveredItem === index ? Color.mHover : Color.transparent
|
||||
color: root.hoveredItem === index ? Color.mHover : "transparent"
|
||||
radius: Style.radiusXS
|
||||
|
||||
Row {
|
||||
|
||||
@@ -161,12 +161,24 @@ Loader {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check for solid color mode first
|
||||
if (Settings.data.wallpaper.useSolidColor) {
|
||||
resolvedWallpaperPath = "";
|
||||
return;
|
||||
}
|
||||
|
||||
const originalPath = WallpaperService.getWallpaper(screen.name) || "";
|
||||
if (originalPath === "") {
|
||||
resolvedWallpaperPath = "";
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle solid color paths
|
||||
if (WallpaperService.isSolidColorPath(originalPath)) {
|
||||
resolvedWallpaperPath = "";
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ImageCacheService || !ImageCacheService.initialized) {
|
||||
// Fallback to original if services not ready
|
||||
resolvedWallpaperPath = originalPath;
|
||||
@@ -182,7 +194,7 @@ Loader {
|
||||
|
||||
// Don't set resolvedWallpaperPath until cache is ready
|
||||
// This prevents loading the original huge image
|
||||
ImageCacheService.getFullscreen(originalPath, screen.name, targetWidth, targetHeight, function (cachedPath, success) {
|
||||
ImageCacheService.getLarge(originalPath, targetWidth, targetHeight, function (cachedPath, success) {
|
||||
if (success) {
|
||||
resolvedWallpaperPath = cachedPath;
|
||||
} else {
|
||||
@@ -192,15 +204,15 @@ Loader {
|
||||
});
|
||||
}
|
||||
|
||||
// Black backgound, in case image fails to load or takes a while
|
||||
// Background - solid color or black fallback
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "#000000"
|
||||
color: Settings.data.wallpaper.useSolidColor ? Settings.data.wallpaper.solidColor : "#000000"
|
||||
}
|
||||
|
||||
Image {
|
||||
id: lockBgImage
|
||||
visible: source !== ""
|
||||
visible: source !== "" && Settings.data.wallpaper.enabled && !Settings.data.wallpaper.useSolidColor
|
||||
anchors.fill: parent
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
source: resolvedWallpaperPath
|
||||
@@ -237,7 +249,7 @@ Loader {
|
||||
anchors.fill: parent
|
||||
visible: Settings.data.general.showScreenCorners
|
||||
|
||||
property color cornerColor: Settings.data.general.forceBlackScreenCorners ? Color.black : Color.mSurface
|
||||
property color cornerColor: Settings.data.general.forceBlackScreenCorners ? "black" : Color.mSurface
|
||||
property real cornerRadius: Style.screenRadius
|
||||
property real cornerSize: Style.screenRadius
|
||||
|
||||
@@ -413,12 +425,12 @@ Loader {
|
||||
Layout.preferredHeight: 70
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
radius: width / 2
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
radius: parent.radius
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
border.color: Qt.alpha(Color.mPrimary, 0.8)
|
||||
border.width: 2
|
||||
|
||||
@@ -470,7 +482,6 @@ Loader {
|
||||
NText {
|
||||
text: I18n.tr("lock-screen.welcome-back") + " " + HostService.displayName + "!"
|
||||
pointSize: Style.fontSizeXXL
|
||||
font.weight: Font.Medium
|
||||
color: Color.mOnSurface
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
}
|
||||
@@ -492,7 +503,6 @@ Loader {
|
||||
return I18n.locale.toString(Time.now, formats[lang] || "dddd, d MMMM");
|
||||
}
|
||||
pointSize: Style.fontSizeXL
|
||||
font.weight: Font.Medium
|
||||
color: Color.mOnSurfaceVariant
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
}
|
||||
@@ -548,7 +558,6 @@ Loader {
|
||||
text: lockContext.errorMessage || "Authentication failed"
|
||||
color: Color.mOnError
|
||||
pointSize: Style.fontSizeL
|
||||
font.weight: Font.Medium
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
}
|
||||
@@ -603,7 +612,6 @@ Loader {
|
||||
text: Math.round(batteryIndicator.percent) + "%"
|
||||
color: Color.mOnSurfaceVariant
|
||||
pointSize: Style.fontSizeM
|
||||
font.weight: Font.Medium
|
||||
}
|
||||
}
|
||||
|
||||
@@ -622,7 +630,6 @@ Loader {
|
||||
text: keyboardLayout.currentLayout
|
||||
color: Color.mOnSurfaceVariant
|
||||
pointSize: Style.fontSizeM
|
||||
font.weight: Font.Medium
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
}
|
||||
@@ -659,35 +666,30 @@ Loader {
|
||||
property real padding: 18 // Approximate horizontal padding per button
|
||||
|
||||
// Measure all button text widths
|
||||
Text {
|
||||
NText {
|
||||
id: logoutText
|
||||
text: I18n.tr("session-menu.logout")
|
||||
font.pointSize: buttonRowTextMeasurer.fontSize
|
||||
font.weight: Font.Medium
|
||||
}
|
||||
Text {
|
||||
NText {
|
||||
id: suspendText
|
||||
text: I18n.tr("session-menu.suspend")
|
||||
font.pointSize: buttonRowTextMeasurer.fontSize
|
||||
font.weight: Font.Medium
|
||||
}
|
||||
Text {
|
||||
NText {
|
||||
id: hibernateText
|
||||
text: Settings.data.general.showHibernateOnLockScreen ? I18n.tr("session-menu.hibernate") : ""
|
||||
font.pointSize: buttonRowTextMeasurer.fontSize
|
||||
font.weight: Font.Medium
|
||||
}
|
||||
Text {
|
||||
NText {
|
||||
id: rebootText
|
||||
text: I18n.tr("session-menu.reboot")
|
||||
font.pointSize: buttonRowTextMeasurer.fontSize
|
||||
font.weight: Font.Medium
|
||||
}
|
||||
Text {
|
||||
NText {
|
||||
id: shutdownText
|
||||
text: I18n.tr("session-menu.shutdown")
|
||||
font.pointSize: buttonRowTextMeasurer.fontSize
|
||||
font.weight: Font.Medium
|
||||
}
|
||||
|
||||
// Calculate maximum width needed
|
||||
@@ -723,7 +725,7 @@ Loader {
|
||||
Layout.fillWidth: !(Settings.data.location.weatherEnabled && LocationService.data.weather !== null)
|
||||
Layout.preferredHeight: 50
|
||||
radius: Style.radiusL
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
clip: true
|
||||
visible: MediaService.currentPlayer && MediaService.canPlay
|
||||
|
||||
@@ -776,7 +778,7 @@ Loader {
|
||||
Layout.preferredWidth: 34
|
||||
Layout.preferredHeight: 34
|
||||
radius: Math.min(Style.radiusL, width / 2)
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
clip: true
|
||||
|
||||
NImageRounded {
|
||||
@@ -798,7 +800,6 @@ Loader {
|
||||
NText {
|
||||
text: MediaService.trackTitle || "No media"
|
||||
pointSize: Style.fontSizeM
|
||||
font.weight: Style.fontWeightMedium
|
||||
color: Color.mOnSurface
|
||||
Layout.fillWidth: true
|
||||
elide: Text.ElideRight
|
||||
@@ -878,7 +879,6 @@ Loader {
|
||||
}
|
||||
pointSize: Style.fontSizeM
|
||||
color: Color.mOnSurfaceVariant
|
||||
font.weight: Font.Normal
|
||||
}
|
||||
}
|
||||
|
||||
@@ -979,7 +979,6 @@ Loader {
|
||||
text: Math.round(batteryIndicator.percent) + "%"
|
||||
color: Color.mOnSurfaceVariant
|
||||
pointSize: Style.fontSizeM
|
||||
font.weight: Font.Medium
|
||||
}
|
||||
}
|
||||
|
||||
@@ -998,7 +997,6 @@ Loader {
|
||||
text: keyboardLayout.currentLayout
|
||||
color: Color.mOnSurfaceVariant
|
||||
pointSize: Style.fontSizeM
|
||||
font.weight: Font.Medium
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
}
|
||||
@@ -1115,7 +1113,6 @@ Loader {
|
||||
text: passwordInput.text
|
||||
color: Color.mPrimary
|
||||
pointSize: Style.fontSizeM
|
||||
font.weight: Font.Medium
|
||||
visible: passwordInput.text.length > 0 && parent.parent.parent.passwordVisible
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
elide: Text.ElideRight
|
||||
@@ -1153,7 +1150,7 @@ Loader {
|
||||
width: 36
|
||||
height: 36
|
||||
radius: Math.min(Style.iRadiusL, width / 2)
|
||||
color: eyeButtonArea.containsMouse ? Color.mPrimary : Color.transparent
|
||||
color: eyeButtonArea.containsMouse ? Color.mPrimary : "transparent"
|
||||
visible: passwordInput.text.length > 0
|
||||
enabled: !lockContext.unlockInProgress
|
||||
|
||||
@@ -1196,7 +1193,7 @@ Loader {
|
||||
width: 36
|
||||
height: 36
|
||||
radius: Math.min(Style.iRadiusL, width / 2)
|
||||
color: submitButtonArea.containsMouse ? Color.mPrimary : Color.transparent
|
||||
color: submitButtonArea.containsMouse ? Color.mPrimary : "transparent"
|
||||
border.color: Color.mPrimary
|
||||
border.width: Style.borderS
|
||||
enabled: !lockContext.unlockInProgress
|
||||
|
||||
@@ -41,7 +41,7 @@ ShapePath {
|
||||
// Effective background color: use panel's if defined, else default
|
||||
readonly property color effectiveBackgroundColor: {
|
||||
if (!assignedPanel)
|
||||
return Color.transparent;
|
||||
return "transparent";
|
||||
if (assignedPanel.panelBackgroundColor !== undefined) {
|
||||
return assignedPanel.panelBackgroundColor;
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ PanelWindow {
|
||||
id: barWindow
|
||||
|
||||
// Note: screen property is inherited from PanelWindow and should be set by parent
|
||||
color: Color.transparent // Transparent - background is in MainScreen below
|
||||
color: "transparent" // Transparent - background is in MainScreen below
|
||||
|
||||
Component.onCompleted: {
|
||||
Logger.d("BarContentWindow", "Bar content window created for screen:", barWindow.screen?.name);
|
||||
|
||||
@@ -2,6 +2,7 @@ import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import qs.Commons
|
||||
import qs.Services.Compositor
|
||||
|
||||
/**
|
||||
* BarExclusionZone - Invisible PanelWindow that reserves exclusive space for the bar
|
||||
@@ -12,13 +13,13 @@ import qs.Commons
|
||||
PanelWindow {
|
||||
id: root
|
||||
|
||||
property bool exclusive: Settings.data.bar.exclusive !== undefined ? Settings.data.bar.exclusive : false
|
||||
|
||||
readonly property bool exclusive: Settings.data.bar.exclusive
|
||||
readonly property string barPosition: Settings.data.bar.position || "top"
|
||||
readonly property bool barIsVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property bool barFloating: Settings.data.bar.floating || false
|
||||
readonly property real barMarginH: barFloating ? Math.ceil(Settings.data.bar.marginHorizontal * Style.marginXL) : 0
|
||||
readonly property real barMarginV: barFloating ? Math.ceil(Settings.data.bar.marginVertical * Style.marginXL) : 0
|
||||
readonly property real fractOffset: CompositorService.getDisplayScale(screen?.name) % 1.0
|
||||
|
||||
// Invisible - just reserves space
|
||||
color: "transparent"
|
||||
@@ -39,15 +40,10 @@ PanelWindow {
|
||||
}
|
||||
|
||||
// Size based on bar orientation
|
||||
// When floating, only reserve space for the bar + margin on the anchored edge
|
||||
implicitWidth: {
|
||||
if (barIsVertical) {
|
||||
// Vertical bar: reserve bar height + margin on the anchored edge only
|
||||
if (barFloating) {
|
||||
// For left bar, reserve left margin; for right bar, reserve right margin
|
||||
return Style.barHeight + barMarginH;
|
||||
}
|
||||
return Style.barHeight;
|
||||
return Style.barHeight + barMarginH - fractOffset;
|
||||
}
|
||||
return 0; // Auto-width when left/right anchors are true
|
||||
}
|
||||
@@ -55,11 +51,7 @@ PanelWindow {
|
||||
implicitHeight: {
|
||||
if (!barIsVertical) {
|
||||
// Horizontal bar: reserve bar height + margin on the anchored edge only
|
||||
if (barFloating) {
|
||||
// For top bar, reserve top margin; for bottom bar, reserve bottom margin
|
||||
return Style.barHeight + barMarginV;
|
||||
}
|
||||
return Style.barHeight;
|
||||
return Style.barHeight + barMarginV - fractOffset;
|
||||
}
|
||||
return 0; // Auto-height when top/bottom anchors are true
|
||||
}
|
||||
|
||||
@@ -45,10 +45,23 @@ PanelWindow {
|
||||
WlrLayershell.namespace: "noctalia-background-" + (screen?.name || "unknown")
|
||||
WlrLayershell.exclusionMode: ExclusionMode.Ignore // Don't reserve space - BarExclusionZone handles that
|
||||
WlrLayershell.keyboardFocus: {
|
||||
if (!root.isPanelOpen) {
|
||||
// No panel open anywhere: no keyboard focus needed
|
||||
if (!root.isAnyPanelOpen) {
|
||||
return WlrKeyboardFocus.None;
|
||||
}
|
||||
return PanelService.openedPanel.exclusiveKeyboard ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.OnDemand;
|
||||
// Panel open on THIS screen: use panel's preferred focus mode
|
||||
if (root.isPanelOpen) {
|
||||
// Hyprland's Exclusive captures ALL input globally (including pointer),
|
||||
// preventing click-to-close from working on other monitors.
|
||||
// Workaround: briefly use Exclusive when panel opens (for text input focus),
|
||||
// then switch to OnDemand (for click-to-close on other screens).
|
||||
if (CompositorService.isHyprland) {
|
||||
return PanelService.isInitializingKeyboard ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.OnDemand;
|
||||
}
|
||||
return PanelService.openedPanel.exclusiveKeyboard ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.OnDemand;
|
||||
}
|
||||
// Panel open on ANOTHER screen: OnDemand allows receiving pointer events for click-to-close
|
||||
return WlrKeyboardFocus.OnDemand;
|
||||
}
|
||||
|
||||
anchors {
|
||||
@@ -62,21 +75,30 @@ PanelWindow {
|
||||
property real dimmerOpacity: Settings.data.general.dimmerOpacity ?? 0.8
|
||||
property bool isPanelOpen: (PanelService.openedPanel !== null) && (PanelService.openedPanel.screen === screen)
|
||||
property bool isPanelClosing: (PanelService.openedPanel !== null) && PanelService.openedPanel.isClosing
|
||||
property bool isAnyPanelOpen: PanelService.openedPanel !== null
|
||||
|
||||
color: {
|
||||
if (dimmerOpacity > 0 && isPanelOpen && !isPanelClosing) {
|
||||
return Qt.alpha(Color.mShadow, dimmerOpacity);
|
||||
}
|
||||
return Color.transparent;
|
||||
return "transparent";
|
||||
}
|
||||
|
||||
Behavior on color {
|
||||
enabled: !PanelService.closedImmediately
|
||||
ColorAnimation {
|
||||
duration: isPanelClosing ? Style.animationFaster : Style.animationNormal
|
||||
easing.type: Easing.OutQuad
|
||||
}
|
||||
}
|
||||
|
||||
// Reset closedImmediately flag after color change is applied
|
||||
onColorChanged: {
|
||||
if (PanelService.closedImmediately) {
|
||||
PanelService.closedImmediately = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if bar should be visible on this screen
|
||||
readonly property bool barShouldShow: {
|
||||
// Check global bar visibility
|
||||
@@ -121,12 +143,13 @@ PanelWindow {
|
||||
}
|
||||
|
||||
// Background region for click-to-close - reactive sizing
|
||||
// Uses isAnyPanelOpen so clicking on any screen's background closes the panel
|
||||
Region {
|
||||
id: backgroundMaskRegion
|
||||
x: 0
|
||||
y: 0
|
||||
width: root.isPanelOpen && !isPanelClosing ? root.width : 0
|
||||
height: root.isPanelOpen && !isPanelClosing ? root.height : 0
|
||||
width: root.isAnyPanelOpen ? root.width : 0
|
||||
height: root.isAnyPanelOpen ? root.height : 0
|
||||
intersection: Intersection.Subtract
|
||||
}
|
||||
}
|
||||
@@ -150,10 +173,10 @@ PanelWindow {
|
||||
}
|
||||
|
||||
// Background MouseArea for closing panels when clicking outside
|
||||
// Active whenever a panel is open - the mask ensures it only receives clicks when panel is open
|
||||
// Uses isAnyPanelOpen so clicking on any screen's background closes the panel
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
enabled: root.isPanelOpen
|
||||
enabled: root.isAnyPanelOpen
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
|
||||
onClicked: mouse => {
|
||||
if (PanelService.openedPanel) {
|
||||
|
||||
@@ -29,7 +29,7 @@ PanelWindow {
|
||||
anchors.right: true
|
||||
anchors.bottom: true
|
||||
visible: false
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
|
||||
// Use Top layer (same as MainScreen) for proper event handling
|
||||
WlrLayershell.layer: WlrLayer.Top
|
||||
|
||||
@@ -31,7 +31,7 @@ Item {
|
||||
id: cornersPath
|
||||
|
||||
// Corner configuration
|
||||
readonly property color cornerColor: Settings.data.general.forceBlackScreenCorners ? Color.black : Color.mSurface
|
||||
readonly property color cornerColor: Settings.data.general.forceBlackScreenCorners ? "black" : Color.mSurface
|
||||
readonly property real cornerRadius: Style.screenRadius
|
||||
readonly property real cornerSize: Style.screenRadius
|
||||
|
||||
@@ -50,7 +50,7 @@ Item {
|
||||
|
||||
// ShapePath configuration
|
||||
strokeWidth: -1 // No stroke, fill only
|
||||
fillColor: shouldShow ? cornerColor : Color.transparent
|
||||
fillColor: shouldShow ? cornerColor : "transparent"
|
||||
|
||||
// Smooth color animation
|
||||
Behavior on fillColor {
|
||||
|
||||
@@ -146,6 +146,9 @@ Item {
|
||||
}
|
||||
|
||||
function open(buttonItem, buttonName) {
|
||||
// Reset immediate close flag to ensure animations work properly
|
||||
PanelService.closedImmediately = false;
|
||||
|
||||
if (!buttonItem && buttonName) {
|
||||
buttonItem = BarService.lookupWidget(buttonName, screen.name);
|
||||
}
|
||||
@@ -204,6 +207,9 @@ Item {
|
||||
}
|
||||
|
||||
function close() {
|
||||
// Reset immediate close flag to ensure animations work properly
|
||||
PanelService.closedImmediately = false;
|
||||
|
||||
// Start close sequence: fade opacity first
|
||||
isClosing = true;
|
||||
sizeAnimationComplete = false;
|
||||
@@ -230,6 +236,31 @@ Item {
|
||||
Logger.d("SmartPanel", "Closing panel", objectName);
|
||||
}
|
||||
|
||||
function closeImmediately() {
|
||||
// Close without any animation, useful for app launches to avoid focus issues
|
||||
opacityTrigger.stop();
|
||||
openWatchdogActive = false;
|
||||
openWatchdogTimer.stop();
|
||||
closeWatchdogActive = false;
|
||||
closeWatchdogTimer.stop();
|
||||
|
||||
// Don't set opacity directly as it breaks the binding
|
||||
root.isPanelVisible = false;
|
||||
root.sizeAnimationComplete = false;
|
||||
root.isClosing = false;
|
||||
root.opacityFadeComplete = false;
|
||||
root.closeFinalized = true;
|
||||
root.isPanelOpen = false;
|
||||
panelBackground.dimensionsInitialized = false;
|
||||
|
||||
// Signal immediate close so MainScreen can skip dimmer animation
|
||||
PanelService.closedImmediately = true;
|
||||
PanelService.closedPanel(root);
|
||||
closed();
|
||||
|
||||
Logger.d("SmartPanel", "Panel closed immediately", objectName);
|
||||
}
|
||||
|
||||
function finalizeClose() {
|
||||
// Prevent double-finalization
|
||||
if (root.closeFinalized) {
|
||||
@@ -656,6 +687,7 @@ Item {
|
||||
}
|
||||
|
||||
Behavior on opacity {
|
||||
enabled: !PanelService.closedImmediately
|
||||
NumberAnimation {
|
||||
id: opacityAnimation
|
||||
duration: root.isClosing ? Style.animationFaster : Style.animationFast
|
||||
@@ -1047,6 +1079,7 @@ Item {
|
||||
}
|
||||
|
||||
Behavior on width {
|
||||
enabled: !PanelService.closedImmediately
|
||||
NumberAnimation {
|
||||
id: widthAnimation
|
||||
// Use 0ms if dimensions not initialized to prevent initial changes from animating
|
||||
@@ -1076,6 +1109,7 @@ Item {
|
||||
}
|
||||
|
||||
Behavior on height {
|
||||
enabled: !PanelService.closedImmediately
|
||||
NumberAnimation {
|
||||
id: heightAnimation
|
||||
// Use 0ms if dimensions not initialized to prevent initial changes from animating
|
||||
|
||||
@@ -48,7 +48,7 @@ Variants {
|
||||
WlrLayershell.layer: (Settings.data.notifications?.overlayLayer) ? WlrLayer.Overlay : WlrLayer.Top
|
||||
WlrLayershell.exclusionMode: ExclusionMode.Ignore
|
||||
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
|
||||
// Make shadow area click-through, only notification content is clickable
|
||||
mask: Region {
|
||||
@@ -230,7 +230,7 @@ Variants {
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
height: 2
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
|
||||
readonly property real availableWidth: parent.width - (2 * parent.radius)
|
||||
|
||||
@@ -422,7 +422,7 @@ Variants {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
radius: Math.min(Style.radiusL, Layout.preferredWidth / 2)
|
||||
imagePath: model.originalImage || ""
|
||||
borderColor: Color.transparent
|
||||
borderColor: "transparent"
|
||||
borderWidth: 0
|
||||
fallbackIcon: "bell"
|
||||
fallbackIconSize: 24
|
||||
|
||||
+1
-1
@@ -523,7 +523,7 @@ Variants {
|
||||
|
||||
implicitWidth: verticalMode ? longVWidth : (root.currentOSDType === OSD.Type.CustomText ? customTextHWidth : (isShortMode ? lockKeyHWidth : longHWidth))
|
||||
implicitHeight: verticalMode ? (root.currentOSDType === OSD.Type.CustomText ? customTextVHeight : (isShortMode ? lockKeyVHeight : longVHeight)) : longHHeight
|
||||
color: Color.transparent
|
||||
color: "transparent"
|
||||
|
||||
WlrLayershell.namespace: "noctalia-osd-" + (screen?.name || "unknown")
|
||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.None
|
||||
|
||||
+261
-261
@@ -11,265 +11,268 @@ import qs.Widgets
|
||||
SmartPanel {
|
||||
id: root
|
||||
|
||||
property real localOutputVolume: AudioService.volume || 0
|
||||
property bool localOutputVolumeChanging: false
|
||||
property int lastSinkId: -1
|
||||
|
||||
property real localInputVolume: AudioService.inputVolume || 0
|
||||
property bool localInputVolumeChanging: false
|
||||
property int lastSourceId: -1
|
||||
|
||||
property int currentTabIndex: 0
|
||||
|
||||
// Find application streams that are actually playing audio (connected to default sink)
|
||||
// Use linkGroups to find nodes connected to the default audio sink
|
||||
// Note: We need to use link IDs since source/target properties require binding
|
||||
readonly property var appStreams: {
|
||||
if (!Pipewire.ready || !AudioService.sink) {
|
||||
return [];
|
||||
}
|
||||
|
||||
var defaultSink = AudioService.sink;
|
||||
var defaultSinkId = defaultSink.id;
|
||||
var connectedStreamIds = {};
|
||||
var connectedStreams = [];
|
||||
|
||||
// Use PwNodeLinkTracker to get properly bound link groups
|
||||
if (!sinkLinkTracker.linkGroups) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// Check if linkGroups is an array or ObjectModel
|
||||
var linkGroupsCount = 0;
|
||||
if (sinkLinkTracker.linkGroups.length !== undefined) {
|
||||
linkGroupsCount = sinkLinkTracker.linkGroups.length;
|
||||
} else if (sinkLinkTracker.linkGroups.count !== undefined) {
|
||||
linkGroupsCount = sinkLinkTracker.linkGroups.count;
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
|
||||
if (linkGroupsCount === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// Collect intermediate node IDs that are connected to the sink
|
||||
var intermediateNodeIds = {};
|
||||
|
||||
// Process link groups from sinkLinkTracker
|
||||
var nodesToCheck = [];
|
||||
|
||||
for (var i = 0; i < linkGroupsCount; i++) {
|
||||
var linkGroup;
|
||||
if (sinkLinkTracker.linkGroups.get) {
|
||||
linkGroup = sinkLinkTracker.linkGroups.get(i);
|
||||
} else {
|
||||
linkGroup = sinkLinkTracker.linkGroups[i];
|
||||
}
|
||||
|
||||
if (!linkGroup || !linkGroup.source) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var sourceNode = linkGroup.source;
|
||||
|
||||
// If it's a stream node, add it directly
|
||||
if (sourceNode.isStream && sourceNode.audio) {
|
||||
if (!connectedStreamIds[sourceNode.id]) {
|
||||
connectedStreamIds[sourceNode.id] = true;
|
||||
connectedStreams.push(sourceNode);
|
||||
}
|
||||
} else {
|
||||
// Not a stream - this is an intermediate node, track it
|
||||
intermediateNodeIds[sourceNode.id] = true;
|
||||
nodesToCheck.push(sourceNode);
|
||||
}
|
||||
}
|
||||
|
||||
// If we found intermediate nodes, we need to find streams connected to them
|
||||
// Since Pipewire.linkGroups is not directly accessible, we'll use a heuristic:
|
||||
// When intermediate nodes are present, include all active stream nodes
|
||||
// (reasonable assumption: if audio is playing, streams are connected)
|
||||
if (nodesToCheck.length > 0 || connectedStreams.length === 0) {
|
||||
try {
|
||||
// Get all nodes from Pipewire
|
||||
var allNodes = [];
|
||||
if (Pipewire.nodes) {
|
||||
if (Pipewire.nodes.count !== undefined) {
|
||||
var nodeCount = Pipewire.nodes.count;
|
||||
for (var n = 0; n < nodeCount; n++) {
|
||||
var node;
|
||||
if (Pipewire.nodes.get) {
|
||||
node = Pipewire.nodes.get(n);
|
||||
} else {
|
||||
node = Pipewire.nodes[n];
|
||||
}
|
||||
if (node)
|
||||
allNodes.push(node);
|
||||
}
|
||||
} else if (Pipewire.nodes.values) {
|
||||
allNodes = Pipewire.nodes.values;
|
||||
}
|
||||
}
|
||||
|
||||
// Find all stream nodes
|
||||
for (var j = 0; j < allNodes.length; j++) {
|
||||
var node = allNodes[j];
|
||||
if (!node || !node.isStream || !node.audio) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var streamId = node.id;
|
||||
if (connectedStreamIds[streamId]) {
|
||||
continue; // Already added
|
||||
}
|
||||
|
||||
// When intermediate nodes are present, include all stream nodes
|
||||
// This is a reasonable heuristic since if audio is playing, they're likely connected
|
||||
if (Object.keys(intermediateNodeIds).length > 0) {
|
||||
connectedStreamIds[streamId] = true;
|
||||
connectedStreams.push(node);
|
||||
} else if (connectedStreams.length === 0) {
|
||||
// Fallback: if no streams found yet, include as fallback
|
||||
connectedStreamIds[streamId] = true;
|
||||
connectedStreams.push(node);
|
||||
}
|
||||
}
|
||||
} catch (e)
|
||||
// Error finding stream nodes - continue with what we have
|
||||
{}
|
||||
}
|
||||
|
||||
return connectedStreams;
|
||||
}
|
||||
|
||||
// Track links to the default sink using PwNodeLinkTracker (properly binds links)
|
||||
PwNodeLinkTracker {
|
||||
id: sinkLinkTracker
|
||||
node: AudioService.sink
|
||||
}
|
||||
|
||||
preferredWidth: Math.round(440 * Style.uiScaleRatio)
|
||||
preferredHeight: Math.round(420 * Style.uiScaleRatio)
|
||||
|
||||
Component.onCompleted: {
|
||||
var vol = AudioService.volume;
|
||||
localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
var inputVol = AudioService.inputVolume;
|
||||
localInputVolume = (inputVol !== undefined && !isNaN(inputVol)) ? inputVol : 0;
|
||||
if (AudioService.sink) {
|
||||
lastSinkId = AudioService.sink.id;
|
||||
}
|
||||
if (AudioService.source) {
|
||||
lastSourceId = AudioService.source.id;
|
||||
}
|
||||
}
|
||||
|
||||
// Reset local volume when device changes - use current device's volume
|
||||
Connections {
|
||||
target: AudioService
|
||||
function onSinkChanged() {
|
||||
if (AudioService.sink) {
|
||||
const newSinkId = AudioService.sink.id;
|
||||
if (newSinkId !== lastSinkId) {
|
||||
lastSinkId = newSinkId;
|
||||
// Immediately set local volume to current device's volume
|
||||
var vol = AudioService.volume;
|
||||
localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
}
|
||||
} else {
|
||||
lastSinkId = -1;
|
||||
localOutputVolume = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: AudioService
|
||||
function onSourceChanged() {
|
||||
if (AudioService.source) {
|
||||
const newSourceId = AudioService.source.id;
|
||||
if (newSourceId !== lastSourceId) {
|
||||
lastSourceId = newSourceId;
|
||||
// Immediately set local volume to current device's volume
|
||||
var vol = AudioService.inputVolume;
|
||||
localInputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
}
|
||||
} else {
|
||||
lastSourceId = -1;
|
||||
localInputVolume = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Connections to update local volumes when AudioService changes
|
||||
Connections {
|
||||
target: AudioService
|
||||
function onVolumeChanged() {
|
||||
if (!localOutputVolumeChanging && AudioService.sink && AudioService.sink.id === lastSinkId) {
|
||||
var vol = AudioService.volume;
|
||||
localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: AudioService.sink?.audio ? AudioService.sink?.audio : null
|
||||
function onVolumeChanged() {
|
||||
if (!localOutputVolumeChanging && AudioService.sink && AudioService.sink.id === lastSinkId) {
|
||||
var vol = AudioService.volume;
|
||||
localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: AudioService
|
||||
function onInputVolumeChanged() {
|
||||
if (!localInputVolumeChanging && AudioService.source && AudioService.source.id === lastSourceId) {
|
||||
var vol = AudioService.inputVolume;
|
||||
localInputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: AudioService.source?.audio ? AudioService.source?.audio : null
|
||||
function onVolumeChanged() {
|
||||
if (!localInputVolumeChanging && AudioService.source && AudioService.source.id === lastSourceId) {
|
||||
var vol = AudioService.inputVolume;
|
||||
localInputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Timer to debounce volume changes
|
||||
// Only sync if the device hasn't changed (check by comparing IDs)
|
||||
Timer {
|
||||
interval: 100
|
||||
running: true
|
||||
repeat: true
|
||||
onTriggered: {
|
||||
// Only sync if sink hasn't changed
|
||||
if (AudioService.sink && AudioService.sink.id === lastSinkId) {
|
||||
if (Math.abs(localOutputVolume - AudioService.volume) >= 0.01) {
|
||||
AudioService.setVolume(localOutputVolume);
|
||||
}
|
||||
}
|
||||
// Only sync if source hasn't changed
|
||||
if (AudioService.source && AudioService.source.id === lastSourceId) {
|
||||
if (Math.abs(localInputVolume - AudioService.inputVolume) >= 0.01) {
|
||||
AudioService.setInputVolume(localInputVolume);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
panelContent: Item {
|
||||
id: panelContent
|
||||
|
||||
// Volume state (lazy-loaded with panelContent)
|
||||
property real localOutputVolume: AudioService.volume || 0
|
||||
property bool localOutputVolumeChanging: false
|
||||
property int lastSinkId: -1
|
||||
|
||||
property real localInputVolume: AudioService.inputVolume || 0
|
||||
property bool localInputVolumeChanging: false
|
||||
property int lastSourceId: -1
|
||||
|
||||
// UI state (lazy-loaded with panelContent)
|
||||
property int currentTabIndex: 0
|
||||
|
||||
Component.onCompleted: {
|
||||
var vol = AudioService.volume;
|
||||
localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
var inputVol = AudioService.inputVolume;
|
||||
localInputVolume = (inputVol !== undefined && !isNaN(inputVol)) ? inputVol : 0;
|
||||
if (AudioService.sink) {
|
||||
lastSinkId = AudioService.sink.id;
|
||||
}
|
||||
if (AudioService.source) {
|
||||
lastSourceId = AudioService.source.id;
|
||||
}
|
||||
}
|
||||
|
||||
// Reset local volume when device changes - use current device's volume
|
||||
Connections {
|
||||
target: AudioService
|
||||
function onSinkChanged() {
|
||||
if (AudioService.sink) {
|
||||
const newSinkId = AudioService.sink.id;
|
||||
if (newSinkId !== panelContent.lastSinkId) {
|
||||
panelContent.lastSinkId = newSinkId;
|
||||
// Immediately set local volume to current device's volume
|
||||
var vol = AudioService.volume;
|
||||
panelContent.localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
}
|
||||
} else {
|
||||
panelContent.lastSinkId = -1;
|
||||
panelContent.localOutputVolume = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: AudioService
|
||||
function onSourceChanged() {
|
||||
if (AudioService.source) {
|
||||
const newSourceId = AudioService.source.id;
|
||||
if (newSourceId !== panelContent.lastSourceId) {
|
||||
panelContent.lastSourceId = newSourceId;
|
||||
// Immediately set local volume to current device's volume
|
||||
var vol = AudioService.inputVolume;
|
||||
panelContent.localInputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
}
|
||||
} else {
|
||||
panelContent.lastSourceId = -1;
|
||||
panelContent.localInputVolume = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Connections to update local volumes when AudioService changes
|
||||
Connections {
|
||||
target: AudioService
|
||||
function onVolumeChanged() {
|
||||
if (!panelContent.localOutputVolumeChanging && AudioService.sink && AudioService.sink.id === panelContent.lastSinkId) {
|
||||
var vol = AudioService.volume;
|
||||
panelContent.localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: AudioService.sink?.audio ? AudioService.sink?.audio : null
|
||||
function onVolumeChanged() {
|
||||
if (!panelContent.localOutputVolumeChanging && AudioService.sink && AudioService.sink.id === panelContent.lastSinkId) {
|
||||
var vol = AudioService.volume;
|
||||
panelContent.localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: AudioService
|
||||
function onInputVolumeChanged() {
|
||||
if (!panelContent.localInputVolumeChanging && AudioService.source && AudioService.source.id === panelContent.lastSourceId) {
|
||||
var vol = AudioService.inputVolume;
|
||||
panelContent.localInputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: AudioService.source?.audio ? AudioService.source?.audio : null
|
||||
function onVolumeChanged() {
|
||||
if (!panelContent.localInputVolumeChanging && AudioService.source && AudioService.source.id === panelContent.lastSourceId) {
|
||||
var vol = AudioService.inputVolume;
|
||||
panelContent.localInputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Timer to debounce volume changes
|
||||
// Only sync if the device hasn't changed (check by comparing IDs)
|
||||
Timer {
|
||||
interval: 100
|
||||
running: true
|
||||
repeat: true
|
||||
onTriggered: {
|
||||
// Only sync if sink hasn't changed
|
||||
if (AudioService.sink && AudioService.sink.id === panelContent.lastSinkId) {
|
||||
if (Math.abs(panelContent.localOutputVolume - AudioService.volume) >= 0.01) {
|
||||
AudioService.setVolume(panelContent.localOutputVolume);
|
||||
}
|
||||
}
|
||||
// Only sync if source hasn't changed
|
||||
if (AudioService.source && AudioService.source.id === panelContent.lastSourceId) {
|
||||
if (Math.abs(panelContent.localInputVolume - AudioService.inputVolume) >= 0.01) {
|
||||
AudioService.setInputVolume(panelContent.localInputVolume);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Find application streams that are actually playing audio (connected to default sink)
|
||||
// Use linkGroups to find nodes connected to the default audio sink
|
||||
// Note: We need to use link IDs since source/target properties require binding
|
||||
readonly property var appStreams: {
|
||||
if (!Pipewire.ready || !AudioService.sink) {
|
||||
return [];
|
||||
}
|
||||
|
||||
var defaultSink = AudioService.sink;
|
||||
var defaultSinkId = defaultSink.id;
|
||||
var connectedStreamIds = {};
|
||||
var connectedStreams = [];
|
||||
|
||||
// Use PwNodeLinkTracker to get properly bound link groups
|
||||
if (!sinkLinkTracker.linkGroups) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// Check if linkGroups is an array or ObjectModel
|
||||
var linkGroupsCount = 0;
|
||||
if (sinkLinkTracker.linkGroups.length !== undefined) {
|
||||
linkGroupsCount = sinkLinkTracker.linkGroups.length;
|
||||
} else if (sinkLinkTracker.linkGroups.count !== undefined) {
|
||||
linkGroupsCount = sinkLinkTracker.linkGroups.count;
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
|
||||
if (linkGroupsCount === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// Collect intermediate node IDs that are connected to the sink
|
||||
var intermediateNodeIds = {};
|
||||
|
||||
// Process link groups from sinkLinkTracker
|
||||
var nodesToCheck = [];
|
||||
|
||||
for (var i = 0; i < linkGroupsCount; i++) {
|
||||
var linkGroup;
|
||||
if (sinkLinkTracker.linkGroups.get) {
|
||||
linkGroup = sinkLinkTracker.linkGroups.get(i);
|
||||
} else {
|
||||
linkGroup = sinkLinkTracker.linkGroups[i];
|
||||
}
|
||||
|
||||
if (!linkGroup || !linkGroup.source) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var sourceNode = linkGroup.source;
|
||||
|
||||
// If it's a stream node, add it directly
|
||||
if (sourceNode.isStream && sourceNode.audio) {
|
||||
if (!connectedStreamIds[sourceNode.id]) {
|
||||
connectedStreamIds[sourceNode.id] = true;
|
||||
connectedStreams.push(sourceNode);
|
||||
}
|
||||
} else {
|
||||
// Not a stream - this is an intermediate node, track it
|
||||
intermediateNodeIds[sourceNode.id] = true;
|
||||
nodesToCheck.push(sourceNode);
|
||||
}
|
||||
}
|
||||
|
||||
// If we found intermediate nodes, we need to find streams connected to them
|
||||
// Since Pipewire.linkGroups is not directly accessible, we'll use a heuristic:
|
||||
// When intermediate nodes are present, include all active stream nodes
|
||||
// (reasonable assumption: if audio is playing, streams are connected)
|
||||
if (nodesToCheck.length > 0 || connectedStreams.length === 0) {
|
||||
try {
|
||||
// Get all nodes from Pipewire
|
||||
var allNodes = [];
|
||||
if (Pipewire.nodes) {
|
||||
if (Pipewire.nodes.count !== undefined) {
|
||||
var nodeCount = Pipewire.nodes.count;
|
||||
for (var n = 0; n < nodeCount; n++) {
|
||||
var node;
|
||||
if (Pipewire.nodes.get) {
|
||||
node = Pipewire.nodes.get(n);
|
||||
} else {
|
||||
node = Pipewire.nodes[n];
|
||||
}
|
||||
if (node)
|
||||
allNodes.push(node);
|
||||
}
|
||||
} else if (Pipewire.nodes.values) {
|
||||
allNodes = Pipewire.nodes.values;
|
||||
}
|
||||
}
|
||||
|
||||
// Find all stream nodes
|
||||
for (var j = 0; j < allNodes.length; j++) {
|
||||
var node = allNodes[j];
|
||||
if (!node || !node.isStream || !node.audio) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var streamId = node.id;
|
||||
if (connectedStreamIds[streamId]) {
|
||||
continue; // Already added
|
||||
}
|
||||
|
||||
// When intermediate nodes are present, include all stream nodes
|
||||
// This is a reasonable heuristic since if audio is playing, they're likely connected
|
||||
if (Object.keys(intermediateNodeIds).length > 0) {
|
||||
connectedStreamIds[streamId] = true;
|
||||
connectedStreams.push(node);
|
||||
} else if (connectedStreams.length === 0) {
|
||||
// Fallback: if no streams found yet, include as fallback
|
||||
connectedStreamIds[streamId] = true;
|
||||
connectedStreams.push(node);
|
||||
}
|
||||
}
|
||||
} catch (e)
|
||||
// Error finding stream nodes - continue with what we have
|
||||
{}
|
||||
}
|
||||
|
||||
return connectedStreams;
|
||||
}
|
||||
|
||||
// Track links to the default sink using PwNodeLinkTracker (properly binds links)
|
||||
PwNodeLinkTracker {
|
||||
id: sinkLinkTracker
|
||||
node: AudioService.sink
|
||||
}
|
||||
|
||||
// Use implicitHeight from content + margins to avoid binding loops
|
||||
property real contentPreferredHeight: mainColumn.implicitHeight + Style.marginL * 2
|
||||
|
||||
// property real contentPreferredHeight: Math.min(screen.height * 0.42, mainColumn.implicitHeight) + Style.marginL * 2
|
||||
ColumnLayout {
|
||||
id: mainColumn
|
||||
anchors.fill: parent
|
||||
@@ -316,8 +319,8 @@ SmartPanel {
|
||||
NTabBar {
|
||||
id: tabBar
|
||||
Layout.fillWidth: true
|
||||
currentIndex: root.currentTabIndex
|
||||
onCurrentIndexChanged: root.currentTabIndex = currentIndex
|
||||
currentIndex: panelContent.currentTabIndex
|
||||
onCurrentIndexChanged: panelContent.currentTabIndex = currentIndex
|
||||
|
||||
NTabButton {
|
||||
Layout.fillWidth: true
|
||||
@@ -340,7 +343,7 @@ SmartPanel {
|
||||
StackLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
currentIndex: root.currentTabIndex
|
||||
currentIndex: panelContent.currentTabIndex
|
||||
|
||||
// Applications Tab (Volume)
|
||||
NScrollView {
|
||||
@@ -486,11 +489,11 @@ SmartPanel {
|
||||
// Bind all app stream nodes to access their audio properties
|
||||
PwObjectTracker {
|
||||
id: appStreamsTracker
|
||||
objects: root.appStreams
|
||||
objects: panelContent.appStreams
|
||||
}
|
||||
|
||||
Repeater {
|
||||
model: root.appStreams
|
||||
model: panelContent.appStreams
|
||||
|
||||
NBox {
|
||||
id: appBox
|
||||
@@ -745,9 +748,6 @@ SmartPanel {
|
||||
appBox.nodeAudio.volume = value;
|
||||
}
|
||||
}
|
||||
onPressedChanged: function (pressed) {
|
||||
appBox.volumeChanging = pressed;
|
||||
}
|
||||
text: Math.round((appBox.appVolume !== undefined ? appBox.appVolume : 0.0) * 100) + "%"
|
||||
}
|
||||
}
|
||||
@@ -770,7 +770,7 @@ SmartPanel {
|
||||
|
||||
// Empty state
|
||||
NText {
|
||||
visible: root.appStreams.length === 0
|
||||
visible: panelContent.appStreams.length === 0
|
||||
text: I18n.tr("settings.audio.panel.applications.empty")
|
||||
pointSize: Style.fontSizeM
|
||||
color: Color.mOnSurfaceVariant
|
||||
|
||||
@@ -17,183 +17,184 @@ SmartPanel {
|
||||
preferredWidth: Math.round(440 * Style.uiScaleRatio)
|
||||
preferredHeight: Math.round(460 * Style.uiScaleRatio)
|
||||
|
||||
// Get device selection from Battery widget settings (check right section first, then any Battery widget)
|
||||
function getBatteryDevicePath() {
|
||||
var widget = BarService.lookupWidget("Battery");
|
||||
if (widget !== undefined) {
|
||||
return widget.deviceNativePath;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
panelContent: Item {
|
||||
id: panelContent
|
||||
property real contentPreferredHeight: mainLayout.implicitHeight + Style.marginL * 2
|
||||
|
||||
// Helper function to find battery device by nativePath
|
||||
function findBatteryDevice(nativePath) {
|
||||
if (!nativePath || nativePath === "") {
|
||||
return UPower.displayDevice;
|
||||
// Get device selection from Battery widget settings (check right section first, then any Battery widget)
|
||||
function getBatteryDevicePath() {
|
||||
var widget = BarService.lookupWidget("Battery");
|
||||
if (widget !== undefined && widget.deviceNativePath !== undefined) {
|
||||
return widget.deviceNativePath;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
if (!UPower.devices) {
|
||||
return UPower.displayDevice;
|
||||
}
|
||||
// Helper function to find battery device by nativePath
|
||||
function findBatteryDevice(nativePath) {
|
||||
if (!nativePath || nativePath === "") {
|
||||
return UPower.displayDevice;
|
||||
}
|
||||
|
||||
var deviceArray = UPower.devices.values || [];
|
||||
for (var i = 0; i < deviceArray.length; i++) {
|
||||
var device = deviceArray[i];
|
||||
if (device && device.nativePath === nativePath) {
|
||||
if (device.type === UPowerDeviceType.LinePower) {
|
||||
continue;
|
||||
if (!UPower.devices) {
|
||||
return UPower.displayDevice;
|
||||
}
|
||||
|
||||
var deviceArray = UPower.devices.values || [];
|
||||
for (var i = 0; i < deviceArray.length; i++) {
|
||||
var device = deviceArray[i];
|
||||
if (device && device.nativePath === nativePath) {
|
||||
if (device.type === UPowerDeviceType.LinePower) {
|
||||
continue;
|
||||
}
|
||||
if (device.percentage !== undefined) {
|
||||
return device;
|
||||
}
|
||||
}
|
||||
if (device.percentage !== undefined) {
|
||||
}
|
||||
return UPower.displayDevice;
|
||||
}
|
||||
|
||||
// Helper function to find Bluetooth device by MAC address from nativePath
|
||||
function findBluetoothDevice(nativePath) {
|
||||
if (!nativePath || !BluetoothService.devices) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var macMatch = nativePath.match(/([0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2})/);
|
||||
if (!macMatch) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var macAddress = macMatch[1].toUpperCase();
|
||||
var deviceArray = BluetoothService.devices.values || [];
|
||||
|
||||
for (var i = 0; i < deviceArray.length; i++) {
|
||||
var device = deviceArray[i];
|
||||
if (device && device.address && device.address.toUpperCase() === macAddress) {
|
||||
return device;
|
||||
}
|
||||
}
|
||||
}
|
||||
return UPower.displayDevice;
|
||||
}
|
||||
|
||||
// Helper function to find Bluetooth device by MAC address from nativePath
|
||||
function findBluetoothDevice(nativePath) {
|
||||
if (!nativePath || !BluetoothService.devices) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var macMatch = nativePath.match(/([0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2})/);
|
||||
if (!macMatch) {
|
||||
return null;
|
||||
}
|
||||
readonly property string deviceNativePath: getBatteryDevicePath()
|
||||
readonly property var battery: findBatteryDevice(deviceNativePath)
|
||||
readonly property var bluetoothDevice: deviceNativePath ? findBluetoothDevice(deviceNativePath) : null
|
||||
readonly property bool hasBluetoothBattery: bluetoothDevice && bluetoothDevice.batteryAvailable && bluetoothDevice.battery !== undefined
|
||||
readonly property bool isBluetoothConnected: bluetoothDevice && bluetoothDevice.connected !== undefined ? bluetoothDevice.connected : false
|
||||
|
||||
var macAddress = macMatch[1].toUpperCase();
|
||||
var deviceArray = BluetoothService.devices.values || [];
|
||||
|
||||
for (var i = 0; i < deviceArray.length; i++) {
|
||||
var device = deviceArray[i];
|
||||
if (device && device.address && device.address.toUpperCase() === macAddress) {
|
||||
return device;
|
||||
// Check if device is actually present/connected
|
||||
readonly property bool isDevicePresent: {
|
||||
if (deviceNativePath && deviceNativePath !== "") {
|
||||
if (bluetoothDevice) {
|
||||
return isBluetoothConnected;
|
||||
}
|
||||
if (battery && battery.nativePath === deviceNativePath) {
|
||||
if (battery.type === UPowerDeviceType.Battery && battery.isPresent !== undefined) {
|
||||
return battery.isPresent;
|
||||
}
|
||||
return battery.ready && battery.percentage !== undefined && (battery.percentage > 0 || battery.state === UPowerDeviceState.Charging);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
readonly property string deviceNativePath: getBatteryDevicePath()
|
||||
readonly property var battery: findBatteryDevice(deviceNativePath)
|
||||
readonly property var bluetoothDevice: deviceNativePath ? findBluetoothDevice(deviceNativePath) : null
|
||||
readonly property bool hasBluetoothBattery: bluetoothDevice && bluetoothDevice.batteryAvailable && bluetoothDevice.battery !== undefined
|
||||
readonly property bool isBluetoothConnected: bluetoothDevice && bluetoothDevice.connected !== undefined ? bluetoothDevice.connected : false
|
||||
|
||||
// Check if device is actually present/connected
|
||||
readonly property bool isDevicePresent: {
|
||||
if (deviceNativePath && deviceNativePath !== "") {
|
||||
if (bluetoothDevice) {
|
||||
return isBluetoothConnected;
|
||||
}
|
||||
if (battery && battery.nativePath === deviceNativePath) {
|
||||
if (battery) {
|
||||
if (battery.type === UPowerDeviceType.Battery && battery.isPresent !== undefined) {
|
||||
return battery.isPresent;
|
||||
}
|
||||
return battery.ready && battery.percentage !== undefined && (battery.percentage > 0 || battery.state === UPowerDeviceState.Charging);
|
||||
return battery.ready && battery.percentage !== undefined;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (battery) {
|
||||
if (battery.type === UPowerDeviceType.Battery && battery.isPresent !== undefined) {
|
||||
return battery.isPresent;
|
||||
|
||||
readonly property bool isReady: battery && battery.ready && isDevicePresent && (battery.percentage !== undefined || hasBluetoothBattery)
|
||||
readonly property int percent: isReady ? Math.round(hasBluetoothBattery ? (bluetoothDevice.battery * 100) : (battery.percentage * 100)) : -1
|
||||
readonly property bool charging: isReady ? battery.state === UPowerDeviceState.Charging : false
|
||||
readonly property bool healthAvailable: isReady && battery.healthSupported
|
||||
readonly property int healthPercent: healthAvailable ? Math.round(battery.healthPercentage) : -1
|
||||
|
||||
function getDeviceName() {
|
||||
if (!isReady) {
|
||||
return "";
|
||||
}
|
||||
// Don't show name for laptop batteries
|
||||
if (battery && battery.isLaptopBattery) {
|
||||
return "";
|
||||
}
|
||||
if (bluetoothDevice && bluetoothDevice.name) {
|
||||
return bluetoothDevice.name;
|
||||
}
|
||||
if (battery && battery.model) {
|
||||
return battery.model;
|
||||
}
|
||||
return battery.ready && battery.percentage !== undefined;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
readonly property bool isReady: battery && battery.ready && isDevicePresent && (battery.percentage !== undefined || hasBluetoothBattery)
|
||||
readonly property int percent: isReady ? Math.round(hasBluetoothBattery ? (bluetoothDevice.battery * 100) : (battery.percentage * 100)) : -1
|
||||
readonly property bool charging: isReady ? battery.state === UPowerDeviceState.Charging : false
|
||||
readonly property bool healthAvailable: isReady && battery.healthSupported
|
||||
readonly property int healthPercent: healthAvailable ? Math.round(battery.healthPercentage) : -1
|
||||
|
||||
function getDeviceName() {
|
||||
if (!isReady) {
|
||||
return "";
|
||||
}
|
||||
// Don't show name for laptop batteries
|
||||
if (battery && battery.isLaptopBattery) {
|
||||
return "";
|
||||
|
||||
readonly property string deviceName: getDeviceName()
|
||||
readonly property string panelTitle: deviceName ? `${I18n.tr("battery.panel-title")} - ${deviceName}` : I18n.tr("battery.panel-title")
|
||||
|
||||
readonly property string timeText: {
|
||||
if (!isReady || !isDevicePresent)
|
||||
return I18n.tr("battery.no-battery-detected");
|
||||
if (charging && battery.timeToFull > 0) {
|
||||
return I18n.tr("battery.time-until-full", {
|
||||
"time": Time.formatVagueHumanReadableDuration(battery.timeToFull)
|
||||
});
|
||||
}
|
||||
if (!charging && battery.timeToEmpty > 0) {
|
||||
return I18n.tr("battery.time-left", {
|
||||
"time": Time.formatVagueHumanReadableDuration(battery.timeToEmpty)
|
||||
});
|
||||
}
|
||||
return I18n.tr("battery.idle");
|
||||
}
|
||||
if (bluetoothDevice && bluetoothDevice.name) {
|
||||
return bluetoothDevice.name;
|
||||
readonly property string iconName: BatteryService.getIcon(percent, charging, isReady)
|
||||
|
||||
property var batteryWidgetInstance: BarService.lookupWidget("Battery", screen ? screen.name : null)
|
||||
readonly property var batteryWidgetSettings: batteryWidgetInstance ? batteryWidgetInstance.widgetSettings : null
|
||||
readonly property var batteryWidgetMetadata: BarWidgetRegistry.widgetMetadata["Battery"]
|
||||
readonly property bool powerProfileAvailable: PowerProfileService.available
|
||||
readonly property var powerProfiles: [PowerProfile.PowerSaver, PowerProfile.Balanced, PowerProfile.Performance]
|
||||
readonly property bool profilesAvailable: PowerProfileService.available
|
||||
property int profileIndex: profileToIndex(PowerProfileService.profile)
|
||||
readonly property bool showPowerProfiles: resolveWidgetSetting("showPowerProfiles", false)
|
||||
readonly property bool showNoctaliaPerformance: resolveWidgetSetting("showNoctaliaPerformance", false)
|
||||
|
||||
function profileToIndex(p) {
|
||||
return powerProfiles.indexOf(p) ?? 1;
|
||||
}
|
||||
if (battery && battery.model) {
|
||||
return battery.model;
|
||||
|
||||
function indexToProfile(idx) {
|
||||
return powerProfiles[idx] ?? PowerProfile.Balanced;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
readonly property string deviceName: getDeviceName()
|
||||
readonly property string panelTitle: deviceName ? `${I18n.tr("battery.panel-title")} - ${deviceName}` : I18n.tr("battery.panel-title")
|
||||
|
||||
readonly property string timeText: {
|
||||
if (!isReady || !isDevicePresent)
|
||||
return I18n.tr("battery.no-battery-detected");
|
||||
if (charging && battery.timeToFull > 0) {
|
||||
return I18n.tr("battery.time-until-full", {
|
||||
"time": Time.formatVagueHumanReadableDuration(battery.timeToFull)
|
||||
});
|
||||
function setProfileByIndex(idx) {
|
||||
var prof = indexToProfile(idx);
|
||||
profileIndex = idx;
|
||||
PowerProfileService.setProfile(prof);
|
||||
}
|
||||
if (!charging && battery.timeToEmpty > 0) {
|
||||
return I18n.tr("battery.time-left", {
|
||||
"time": Time.formatVagueHumanReadableDuration(battery.timeToEmpty)
|
||||
});
|
||||
|
||||
function resolveWidgetSetting(key, defaultValue) {
|
||||
if (batteryWidgetSettings && batteryWidgetSettings[key] !== undefined)
|
||||
return batteryWidgetSettings[key];
|
||||
if (batteryWidgetMetadata && batteryWidgetMetadata[key] !== undefined)
|
||||
return batteryWidgetMetadata[key];
|
||||
return defaultValue;
|
||||
}
|
||||
return I18n.tr("battery.idle");
|
||||
}
|
||||
readonly property string iconName: BatteryService.getIcon(percent, charging, isReady)
|
||||
|
||||
property var batteryWidgetInstance: BarService.lookupWidget("Battery", screen ? screen.name : null)
|
||||
readonly property var batteryWidgetSettings: batteryWidgetInstance ? batteryWidgetInstance.widgetSettings : null
|
||||
readonly property var batteryWidgetMetadata: BarWidgetRegistry.widgetMetadata["Battery"]
|
||||
readonly property bool powerProfileAvailable: PowerProfileService.available
|
||||
readonly property var powerProfiles: [PowerProfile.PowerSaver, PowerProfile.Balanced, PowerProfile.Performance]
|
||||
readonly property bool profilesAvailable: PowerProfileService.available
|
||||
property int profileIndex: profileToIndex(PowerProfileService.profile)
|
||||
readonly property bool showPowerProfiles: resolveWidgetSetting("showPowerProfiles", false)
|
||||
readonly property bool showNoctaliaPerformance: resolveWidgetSetting("showNoctaliaPerformance", false)
|
||||
|
||||
function profileToIndex(p) {
|
||||
return powerProfiles.indexOf(p) ?? 1;
|
||||
}
|
||||
|
||||
function indexToProfile(idx) {
|
||||
return powerProfiles[idx] ?? PowerProfile.Balanced;
|
||||
}
|
||||
|
||||
function setProfileByIndex(idx) {
|
||||
var prof = indexToProfile(idx);
|
||||
profileIndex = idx;
|
||||
PowerProfileService.setProfile(prof);
|
||||
}
|
||||
|
||||
function resolveWidgetSetting(key, defaultValue) {
|
||||
if (batteryWidgetSettings && batteryWidgetSettings[key] !== undefined)
|
||||
return batteryWidgetSettings[key];
|
||||
if (batteryWidgetMetadata && batteryWidgetMetadata[key] !== undefined)
|
||||
return batteryWidgetMetadata[key];
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: PowerProfileService
|
||||
function onProfileChanged() {
|
||||
profileIndex = profileToIndex(PowerProfileService.profile);
|
||||
Connections {
|
||||
target: PowerProfileService
|
||||
function onProfileChanged() {
|
||||
panelContent.profileIndex = panelContent.profileToIndex(PowerProfileService.profile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: BarService
|
||||
function onActiveWidgetsChanged() {
|
||||
batteryWidgetInstance = BarService.lookupWidget("Battery", screen ? screen.name : null);
|
||||
Connections {
|
||||
target: BarService
|
||||
function onActiveWidgetsChanged() {
|
||||
panelContent.batteryWidgetInstance = BarService.lookupWidget("Battery", screen ? screen.name : null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
panelContent: Item {
|
||||
property real contentPreferredHeight: mainLayout.implicitHeight + Style.marginL * 2
|
||||
|
||||
ColumnLayout {
|
||||
id: mainLayout
|
||||
@@ -214,7 +215,7 @@ SmartPanel {
|
||||
|
||||
NIcon {
|
||||
pointSize: Style.fontSizeXXL
|
||||
color: root.charging ? Color.mPrimary : Color.mOnSurface
|
||||
color: charging ? Color.mPrimary : Color.mOnSurface
|
||||
icon: iconName
|
||||
}
|
||||
|
||||
@@ -223,7 +224,7 @@ SmartPanel {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NText {
|
||||
text: root.panelTitle
|
||||
text: panelTitle
|
||||
pointSize: Style.fontSizeL
|
||||
font.weight: Style.fontWeightBold
|
||||
color: Color.mOnSurface
|
||||
@@ -320,7 +321,7 @@ SmartPanel {
|
||||
NBox {
|
||||
Layout.fillWidth: true
|
||||
height: controlsLayout.implicitHeight + Style.marginL * 2
|
||||
visible: root.showPowerProfiles || root.showNoctaliaPerformance
|
||||
visible: showPowerProfiles || showNoctaliaPerformance
|
||||
|
||||
ColumnLayout {
|
||||
id: controlsLayout
|
||||
@@ -329,7 +330,7 @@ SmartPanel {
|
||||
spacing: Style.marginM
|
||||
|
||||
ColumnLayout {
|
||||
visible: root.powerProfileAvailable && root.showPowerProfiles
|
||||
visible: powerProfileAvailable && showPowerProfiles
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
@@ -391,13 +392,13 @@ SmartPanel {
|
||||
|
||||
NDivider {
|
||||
Layout.fillWidth: true
|
||||
visible: root.showPowerProfiles && root.showNoctaliaPerformance
|
||||
visible: showPowerProfiles && showNoctaliaPerformance
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: Style.marginS
|
||||
visible: root.showNoctaliaPerformance
|
||||
visible: showNoctaliaPerformance
|
||||
|
||||
NText {
|
||||
text: I18n.tr("toast.noctalia-performance.label")
|
||||
|
||||
@@ -20,8 +20,8 @@ NBox {
|
||||
// Per-list expanded details (by device key)
|
||||
property string expandedDeviceKey: ""
|
||||
// Local layout toggle for details: true = grid (2 cols), false = rows (1 col)
|
||||
// Persisted under Settings.data.ui.bluetoothDetailsViewMode
|
||||
property bool detailsGrid: (Settings.data && Settings.data.ui && Settings.data.ui.bluetoothDetailsViewMode !== undefined) ? (Settings.data.ui.bluetoothDetailsViewMode === "grid") : true
|
||||
// Persisted under Settings.data.network.bluetoothDetailsViewMode
|
||||
property bool detailsGrid: (Settings.data && Settings.data.ui && Settings.data.network.bluetoothDetailsViewMode !== undefined) ? (Settings.data.network.bluetoothDetailsViewMode === "grid") : true
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: column.implicitHeight + Style.marginM * 2
|
||||
@@ -54,11 +54,11 @@ NBox {
|
||||
visible: root.headerMode === "filter"
|
||||
// Option A: filter/filter-off
|
||||
// Off (show all): filter; On (hide unnamed): filter-off
|
||||
icon: (Settings.data && Settings.data.ui && Settings.data.ui.bluetoothHideUnnamedDevices) ? "filter-off" : "filter"
|
||||
tooltipText: (Settings.data && Settings.data.ui && Settings.data.ui.bluetoothHideUnnamedDevices) ? I18n.tr("tooltips.hide-unnamed-devices") : I18n.tr("tooltips.show-all-devices")
|
||||
icon: (Settings.data && Settings.data.ui && Settings.data.network.bluetoothHideUnnamedDevices) ? "filter-off" : "filter"
|
||||
tooltipText: (Settings.data && Settings.data.ui && Settings.data.network.bluetoothHideUnnamedDevices) ? I18n.tr("tooltips.hide-unnamed-devices") : I18n.tr("tooltips.show-all-devices")
|
||||
onClicked: {
|
||||
if (Settings.data && Settings.data.ui) {
|
||||
Settings.data.ui.bluetoothHideUnnamedDevices = !(Settings.data.ui.bluetoothHideUnnamedDevices);
|
||||
Settings.data.network.bluetoothHideUnnamedDevices = !(Settings.data.network.bluetoothHideUnnamedDevices);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -70,7 +70,7 @@ NBox {
|
||||
model: root.model
|
||||
visible: BluetoothService.adapter && BluetoothService.adapter.enabled
|
||||
|
||||
Rectangle {
|
||||
NBox {
|
||||
id: device
|
||||
|
||||
readonly property bool canConnect: BluetoothService.canConnect(modelData)
|
||||
@@ -90,11 +90,10 @@ NBox {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: deviceColumn.implicitHeight + (Style.marginM * 2)
|
||||
radius: Style.radiusM
|
||||
color: Color.mSurface
|
||||
border.width: Style.borderS
|
||||
border.color: getContentColor(Color.mOutline)
|
||||
clip: true
|
||||
|
||||
color: modelData.connected ? Qt.alpha(getContentColor(), 0.08) : Color.mSurface
|
||||
|
||||
// Content column so expanded details are laid out inside the card
|
||||
ColumnLayout {
|
||||
id: deviceColumn
|
||||
@@ -284,7 +283,7 @@ NBox {
|
||||
onClicked: {
|
||||
root.detailsGrid = !root.detailsGrid;
|
||||
if (Settings.data && Settings.data.ui) {
|
||||
Settings.data.ui.bluetoothDetailsViewMode = root.detailsGrid ? "grid" : "list";
|
||||
Settings.data.network.bluetoothDetailsViewMode = root.detailsGrid ? "grid" : "list";
|
||||
}
|
||||
}
|
||||
z: 1
|
||||
|
||||
@@ -16,7 +16,8 @@ SmartPanel {
|
||||
preferredHeight: Math.round(500 * Style.uiScaleRatio)
|
||||
|
||||
panelContent: Rectangle {
|
||||
color: Color.transparent
|
||||
id: panelContent
|
||||
color: "transparent"
|
||||
|
||||
// Calculate content height based on header + devices list (or minimum for empty states)
|
||||
property real headerHeight: headerRow.implicitHeight + Style.marginM * 2
|
||||
@@ -193,7 +194,7 @@ SmartPanel {
|
||||
return [];
|
||||
var filtered = BluetoothService.adapter.devices.values.filter(dev => dev && !dev.blocked && !dev.paired && !dev.trusted);
|
||||
// Optionally hide devices without a meaningful name when the filter is enabled
|
||||
if (Settings.data && Settings.data.ui && Settings.data.ui.bluetoothHideUnnamedDevices) {
|
||||
if (Settings.data && Settings.data.ui && Settings.data.network.bluetoothHideUnnamedDevices) {
|
||||
filtered = filtered.filter(function (dev) {
|
||||
// Extract display name
|
||||
var dn = "";
|
||||
|
||||
@@ -15,13 +15,14 @@ SmartPanel {
|
||||
preferredWidth: Math.round(440 * Style.uiScaleRatio)
|
||||
preferredHeight: Math.round(420 * Style.uiScaleRatio)
|
||||
|
||||
function getIcon(brightness) {
|
||||
return brightness <= 0.5 ? "brightness-low" : "brightness-high";
|
||||
}
|
||||
|
||||
panelContent: Item {
|
||||
id: panelContent
|
||||
property real contentPreferredHeight: mainColumn.implicitHeight + Style.marginL * 2
|
||||
|
||||
function getIcon(brightness) {
|
||||
return brightness <= 0.5 ? "brightness-low" : "brightness-high";
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: mainColumn
|
||||
anchors.fill: parent
|
||||
|
||||
@@ -16,20 +16,46 @@ SmartPanel {
|
||||
panelAnchorHorizontalCenter: true
|
||||
panelAnchorVerticalCenter: true
|
||||
|
||||
readonly property string currentVersion: UpdateService.changelogCurrentVersion || UpdateService.currentVersion
|
||||
readonly property string previousVersion: UpdateService.previousVersion
|
||||
readonly property bool hasPreviousVersion: previousVersion && previousVersion.length > 0
|
||||
readonly property var releaseHighlights: UpdateService.releaseHighlights || []
|
||||
readonly property string subtitleText: hasPreviousVersion ? I18n.tr("changelog.panel.subtitle.updated", {
|
||||
"previousVersion": previousVersion
|
||||
}) : I18n.tr("changelog.panel.subtitle.fresh")
|
||||
|
||||
panelContent: Rectangle {
|
||||
id: panelContent
|
||||
color: Color.mSurfaceVariant
|
||||
radius: Style.radiusM
|
||||
border.color: Color.mOutline
|
||||
border.width: Style.borderS
|
||||
|
||||
readonly property string currentVersion: UpdateService.changelogCurrentVersion || UpdateService.currentVersion
|
||||
readonly property string previousVersion: UpdateService.previousVersion
|
||||
readonly property bool hasPreviousVersion: previousVersion && previousVersion.length > 0
|
||||
readonly property var releaseHighlights: UpdateService.releaseHighlights || []
|
||||
readonly property string subtitleText: hasPreviousVersion ? I18n.tr("changelog.panel.subtitle.updated", {
|
||||
"previousVersion": previousVersion
|
||||
}) : I18n.tr("changelog.panel.subtitle.fresh")
|
||||
|
||||
function headingLevel(text) {
|
||||
if (!text)
|
||||
return 0;
|
||||
const trimmed = text.trim();
|
||||
if (trimmed.length === 0)
|
||||
return 0;
|
||||
const match = trimmed.match(/^(#+)\s+/);
|
||||
if (!match)
|
||||
return 0;
|
||||
return Math.min(match[1].length, 2);
|
||||
}
|
||||
|
||||
function formatReleaseDate(dateString) {
|
||||
if (!dateString || dateString.length === 0)
|
||||
return "";
|
||||
try {
|
||||
const date = new Date(dateString);
|
||||
if (isNaN(date.getTime()))
|
||||
return dateString;
|
||||
return Qt.formatDate(date, Qt.DefaultLocaleLongDate);
|
||||
} catch (error) {
|
||||
return dateString;
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
anchors.margins: Style.marginL
|
||||
@@ -148,7 +174,7 @@ SmartPanel {
|
||||
Repeater {
|
||||
model: modelData.entries
|
||||
delegate: NText {
|
||||
readonly property int headingLevel: root.headingLevel(modelData)
|
||||
readonly property int headingLevel: panelContent.headingLevel(modelData)
|
||||
text: {
|
||||
if (modelData.length === 0)
|
||||
return "\u00A0";
|
||||
@@ -158,7 +184,7 @@ SmartPanel {
|
||||
}
|
||||
wrapMode: Text.WordWrap
|
||||
elide: Text.ElideNone
|
||||
textFormat: Text.PlainText
|
||||
textFormat: Text.MarkdownText
|
||||
color: headingLevel > 0 ? Color.mPrimary : Color.mOnSurface
|
||||
font.weight: headingLevel > 0 ? Style.fontWeightBold : Style.fontWeightMedium
|
||||
pointSize: headingLevel === 1 ? Style.fontSizeXXL : headingLevel === 2 ? Style.fontSizeXL : Style.fontSizeM
|
||||
@@ -209,34 +235,9 @@ SmartPanel {
|
||||
}
|
||||
}
|
||||
|
||||
function headingLevel(text) {
|
||||
if (!text)
|
||||
return 0;
|
||||
const trimmed = text.trim();
|
||||
if (trimmed.length === 0)
|
||||
return 0;
|
||||
const match = trimmed.match(/^(#+)\s+/);
|
||||
if (!match)
|
||||
return 0;
|
||||
return Math.min(match[1].length, 2);
|
||||
}
|
||||
|
||||
onClosed: {
|
||||
if (UpdateService && UpdateService.changelogCurrentVersion) {
|
||||
UpdateService.markChangelogSeen(UpdateService.changelogCurrentVersion);
|
||||
}
|
||||
}
|
||||
|
||||
function formatReleaseDate(dateString) {
|
||||
if (!dateString || dateString.length === 0)
|
||||
return "";
|
||||
try {
|
||||
const date = new Date(dateString);
|
||||
if (isNaN(date.getTime()))
|
||||
return dateString;
|
||||
return Qt.formatDate(date, Qt.DefaultLocaleLongDate);
|
||||
} catch (error) {
|
||||
return dateString;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,13 +13,11 @@ import qs.Widgets
|
||||
SmartPanel {
|
||||
id: root
|
||||
|
||||
// Calculate width based on settings
|
||||
preferredWidth: Math.round((Settings.data.location.showWeekNumberInCalendar ? 440 : 420) * Style.uiScaleRatio)
|
||||
|
||||
panelContent: Item {
|
||||
id: panelContent
|
||||
anchors.fill: parent
|
||||
|
||||
// SmartPanel uses this to calculate panel height dynamically
|
||||
readonly property real contentPreferredWidth: Math.round((Settings.data.location.showWeekNumberInCalendar ? 440 : 420) * Style.uiScaleRatio)
|
||||
readonly property real contentPreferredHeight: content.implicitHeight + (Style.marginL * 2)
|
||||
|
||||
ColumnLayout {
|
||||
|
||||
@@ -87,7 +87,7 @@ SmartPanel {
|
||||
}
|
||||
|
||||
panelContent: Item {
|
||||
id: content
|
||||
id: panelContent
|
||||
|
||||
ColumnLayout {
|
||||
id: layout
|
||||
|
||||
@@ -8,7 +8,7 @@ import qs.Widgets
|
||||
NIconButtonHot {
|
||||
property ShellScreen screen
|
||||
|
||||
icon: BluetoothService.enabled ? "bluetooth" : "bluetooth-off"
|
||||
icon: !BluetoothService.enabled ? "bluetooth-off" : ((BluetoothService.connectedDevices && BluetoothService.connectedDevices.length > 0) ? "bluetooth-connected" : "bluetooth")
|
||||
tooltipText: I18n.tr("quickSettings.bluetooth.tooltip.action")
|
||||
onClicked: {
|
||||
var p = PanelService.getPanel("bluetoothPanel", screen);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user