mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
Merge branch 'main' into feat/configurable-exclusion-zone
This commit is contained in:
@@ -25,6 +25,7 @@ Add screenshots if applicable.
|
||||
- Distro: [e.g., CachyOS, NixOS, Arch, ...]
|
||||
- Compositor: [ e.g., Hyprland, Niri, ...]
|
||||
- Noctalia-shell Version: [e.g., 1.0.0, available in About tab]
|
||||
- Noctalia QS Version: [e.g., 0.0.4, please check your package manager]
|
||||
- Monitor resolution: [e.g., 1920x1080]
|
||||
|
||||
### Additional Context
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
<!-- If this is a color scheme PR, please create it in https://github.com/noctalia-dev/noctalia-colorschemes instead -->
|
||||
|
||||
If this PR is not ready for review yet, please mark it as **Draft** until it's good to be reviewed.
|
||||
|
||||
## Motivation
|
||||
Provide a clear and concise explanation of what this PR does and why it is needed.
|
||||
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
"mError": "#D95757",
|
||||
"mOnError": "#0B0E14",
|
||||
"mSurface": "#0B0E14",
|
||||
"mOnSurface": "#BFBDB6",
|
||||
"mOnSurface": "#D1D1C7",
|
||||
"mSurfaceVariant": "#1e222a",
|
||||
"mOnSurfaceVariant": "#636A72",
|
||||
"mOnSurfaceVariant": "#8E959E",
|
||||
"mOutline": "#565B66",
|
||||
"mShadow": "#000000",
|
||||
"mHover": "#39BAE6",
|
||||
@@ -37,7 +37,7 @@
|
||||
"cyan": "#95e6cb",
|
||||
"white": "#ffffff"
|
||||
},
|
||||
"foreground": "#cccac2",
|
||||
"foreground": "#D1D1C7",
|
||||
"background": "#1f2430",
|
||||
"selectionFg": "#1f2430",
|
||||
"selectionBg": "#409fff",
|
||||
@@ -55,9 +55,9 @@
|
||||
"mError": "#E65050",
|
||||
"mOnError": "#F8F9FA",
|
||||
"mSurface": "#F8F9FA",
|
||||
"mOnSurface": "#5C6166",
|
||||
"mOnSurface": "#42474C",
|
||||
"mSurfaceVariant": "#E4E6E9",
|
||||
"mOnSurfaceVariant": "#8A9199",
|
||||
"mOnSurfaceVariant": "#6E757C",
|
||||
"mOutline": "#8A9199",
|
||||
"mShadow": "#F8F9FA",
|
||||
"mHover": "#55B4D4",
|
||||
@@ -83,7 +83,7 @@
|
||||
"cyan": "#4cbf99",
|
||||
"white": "#d1d1d1"
|
||||
},
|
||||
"foreground": "#5c6166",
|
||||
"foreground": "#42474C",
|
||||
"background": "#f8f9fa",
|
||||
"selectionFg": "#f8f9fa",
|
||||
"selectionBg": "#035bd6",
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"os",
|
||||
"kernel",
|
||||
"title",
|
||||
"board",
|
||||
"host",
|
||||
"uptime",
|
||||
"cpu",
|
||||
|
||||
@@ -148,13 +148,13 @@
|
||||
|
||||
;; Org mode with hidden asterisks
|
||||
`(org-level-1 ((t (:foreground ,primary :weight bold :height 1.2))))
|
||||
`(org-level-2 ((t (:foreground ,primary-container :weight bold :height 1.1))))
|
||||
`(org-level-3 ((t (:foreground ,secondary :weight bold))))
|
||||
`(org-level-4 ((t (:foreground ,secondary-container :weight bold))))
|
||||
`(org-level-5 ((t (:foreground ,tertiary :weight bold))))
|
||||
`(org-level-6 ((t (:foreground ,tertiary-container :weight bold))))
|
||||
`(org-level-7 ((t (:foreground ,primary-fixed :weight bold))))
|
||||
`(org-level-8 ((t (:foreground ,primary-fixed-dim :weight bold))))
|
||||
`(org-level-2 ((t (:foreground ,secondary :weight bold :height 1.1))))
|
||||
`(org-level-3 ((t (:foreground ,tertiary :weight bold))))
|
||||
`(org-level-4 ((t (:foreground ,primary :weight bold))))
|
||||
`(org-level-5 ((t (:foreground ,secondary :weight bold))))
|
||||
`(org-level-6 ((t (:foreground ,tertiary :weight bold))))
|
||||
`(org-level-7 ((t (:foreground ,primary :weight bold))))
|
||||
`(org-level-8 ((t (:foreground ,secondary :weight bold))))
|
||||
`(org-document-title ((t (:foreground ,primary :weight bold :height 1.3))))
|
||||
`(org-document-info ((t (:foreground ,primary-container))))
|
||||
`(org-todo ((t (:foreground ,err :weight bold))))
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
[ColorScheme]
|
||||
active_colors={{colors.on_background.default.hex}}, {{colors.surface.default.hex}}, #ffffff, #cacaca, #9f9f9f, #b8b8b8, {{colors.on_background.default.hex}}, #ffffff, {{colors.on_surface.default.hex}}, {{colors.background.default.hex}}, {{colors.background.default.hex}}, {{colors.shadow.default.hex}}, {{colors.primary_container.default.hex}}, {{colors.on_primary_container.default.hex}}, {{colors.secondary.default.hex}}, {{colors.primary.default.hex}}, {{colors.surface.default.hex}}, {{colors.surface.default.hex}}, {{colors.surface.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.secondary.default.hex}}
|
||||
disabled_colors={{colors.on_background.default.hex}}, {{colors.surface.default.hex}}, #ffffff, #cacaca, #9f9f9f, #b8b8b8, {{colors.on_background.default.hex}}, #ffffff, {{colors.on_surface.default.hex}}, {{colors.background.default.hex}}, {{colors.background.default.hex}}, {{colors.shadow.default.hex}}, {{colors.primary_container.default.hex}}, {{colors.on_primary_container.default.hex}}, {{colors.secondary.default.hex}}, {{colors.primary.default.hex}}, {{colors.surface.default.hex}}, {{colors.surface.default.hex}}, {{colors.surface.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.secondary.default.hex}}
|
||||
inactive_colors={{colors.on_background.default.hex}}, {{colors.surface.default.hex}}, #ffffff, #cacaca, #9f9f9f, #b8b8b8, {{colors.on_background.default.hex}}, #ffffff, {{colors.on_surface.default.hex}}, {{colors.background.default.hex}}, {{colors.background.default.hex}}, {{colors.shadow.default.hex}}, {{colors.primary_container.default.hex}}, {{colors.on_primary_container.default.hex}}, {{colors.secondary.default.hex}}, {{colors.primary.default.hex}}, {{colors.surface.default.hex}}, {{colors.surface.default.hex}}, {{colors.surface.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.secondary.default.hex}}
|
||||
#https://doc.qt.io/archives/qt-5.15/qpalette.html
|
||||
#https://doc.qt.io/qt-6/qpalette.html - Qt6 didn't add/delete/change any of the color functions or docs
|
||||
# functions that correspond to the colors definition location
|
||||
# windowText,button,light,midlight,dark,mid,text,brightText,buttonText,base,window,shadow,highlight,highlightedText,link,linkVisited,alternateBase,NO_IDEA (just use some sane default),toolTipBase,toolTipText,placeholderText,accent
|
||||
active_colors={{colors.on_background.default.hex}}, {{colors.surface.default.hex}}, #ffffff, #cacaca, #9f9f9f, #b8b8b8, {{colors.on_background.default.hex}}, #ffffff, {{colors.on_surface.default.hex}}, {{colors.background.default.hex}}, {{colors.background.default.hex}}, {{colors.shadow.default.hex}}, {{colors.primary_container.default.hex}}, {{colors.on_primary_container.default.hex}}, {{colors.secondary.default.hex}}, {{colors.primary.default.hex}}, {{colors.surface_variant.default.hex}}, {{colors.surface.default.hex}}, {{colors.surface_variant.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.primary.default.hex}}
|
||||
disabled_colors={{colors.on_background.default.hex}}, {{colors.surface.default.hex}}, #ffffff, #cacaca, #9f9f9f, #b8b8b8, {{colors.on_background.default.hex}}, #ffffff, {{colors.on_surface.default.hex}}, {{colors.background.default.hex}}, {{colors.background.default.hex}}, {{colors.shadow.default.hex}}, {{colors.primary_container.default.hex}}, {{colors.on_primary_container.default.hex}}, {{colors.secondary.default.hex}}, {{colors.primary.default.hex}}, {{colors.surface_variant.default.hex}}, {{colors.surface.default.hex}}, {{colors.surface_variant.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.primary.default.hex}}
|
||||
inactive_colors={{colors.on_background.default.hex}}, {{colors.surface.default.hex}}, #ffffff, #cacaca, #9f9f9f, #b8b8b8, {{colors.on_background.default.hex}}, #ffffff, {{colors.on_surface.default.hex}}, {{colors.background.default.hex}}, {{colors.background.default.hex}}, {{colors.shadow.default.hex}}, {{colors.primary_container.default.hex}}, {{colors.on_primary_container.default.hex}}, {{colors.secondary.default.hex}}, {{colors.primary.default.hex}}, {{colors.surface_variant.default.hex}}, {{colors.surface.default.hex}}, {{colors.surface_variant.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.primary.default.hex}}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# Colors (Noctalia)
|
||||
|
||||
[colors.bright]
|
||||
black = '{{colors.terminal_bright_black.default.hex}}'
|
||||
blue = '{{colors.terminal_bright_blue.default.hex}}'
|
||||
cyan = '{{colors.terminal_bright_cyan.default.hex}}'
|
||||
green = '{{colors.terminal_bright_green.default.hex}}'
|
||||
magenta = '{{colors.terminal_bright_magenta.default.hex}}'
|
||||
red = '{{colors.terminal_bright_red.default.hex}}'
|
||||
white = '{{colors.terminal_bright_white.default.hex}}'
|
||||
yellow = '{{colors.terminal_bright_yellow.default.hex}}'
|
||||
|
||||
[colors.cursor]
|
||||
cursor = '{{colors.terminal_cursor.default.hex}}'
|
||||
text = '{{colors.terminal_cursor_text.default.hex}}'
|
||||
|
||||
[colors.normal]
|
||||
black = '{{colors.terminal_normal_black.default.hex}}'
|
||||
blue = '{{colors.terminal_normal_blue.default.hex}}'
|
||||
cyan = '{{colors.terminal_normal_cyan.default.hex}}'
|
||||
green = '{{colors.terminal_normal_green.default.hex}}'
|
||||
magenta = '{{colors.terminal_normal_magenta.default.hex}}'
|
||||
red = '{{colors.terminal_normal_red.default.hex}}'
|
||||
white = '{{colors.terminal_normal_white.default.hex}}'
|
||||
yellow = '{{colors.terminal_normal_yellow.default.hex}}'
|
||||
|
||||
[colors.primary]
|
||||
background = '{{colors.terminal_background.default.hex}}'
|
||||
foreground = '{{colors.terminal_foreground.default.hex}}'
|
||||
|
||||
[colors.selection]
|
||||
background = '{{colors.terminal_selection_bg.default.hex}}'
|
||||
text = '{{colors.terminal_selection_fg.default.hex}}'
|
||||
@@ -0,0 +1,22 @@
|
||||
[colors-dark]
|
||||
foreground={{colors.terminal_foreground.default.hex_stripped}}
|
||||
background={{colors.terminal_background.default.hex_stripped}}
|
||||
regular0={{colors.terminal_normal_black.default.hex_stripped}}
|
||||
regular1={{colors.terminal_normal_red.default.hex_stripped}}
|
||||
regular2={{colors.terminal_normal_green.default.hex_stripped}}
|
||||
regular3={{colors.terminal_normal_yellow.default.hex_stripped}}
|
||||
regular4={{colors.terminal_normal_blue.default.hex_stripped}}
|
||||
regular5={{colors.terminal_normal_magenta.default.hex_stripped}}
|
||||
regular6={{colors.terminal_normal_cyan.default.hex_stripped}}
|
||||
regular7={{colors.terminal_normal_white.default.hex_stripped}}
|
||||
bright0={{colors.terminal_bright_black.default.hex_stripped}}
|
||||
bright1={{colors.terminal_bright_red.default.hex_stripped}}
|
||||
bright2={{colors.terminal_bright_green.default.hex_stripped}}
|
||||
bright3={{colors.terminal_bright_yellow.default.hex_stripped}}
|
||||
bright4={{colors.terminal_bright_blue.default.hex_stripped}}
|
||||
bright5={{colors.terminal_bright_magenta.default.hex_stripped}}
|
||||
bright6={{colors.terminal_bright_cyan.default.hex_stripped}}
|
||||
bright7={{colors.terminal_bright_white.default.hex_stripped}}
|
||||
selection-foreground={{colors.terminal_selection_fg.default.hex_stripped}}
|
||||
selection-background={{colors.terminal_selection_bg.default.hex_stripped}}
|
||||
cursor={{colors.terminal_cursor_text.default.hex_stripped}} {{colors.terminal_cursor.default.hex_stripped}}
|
||||
@@ -0,0 +1,22 @@
|
||||
palette = 0={{colors.terminal_normal_black.default.hex}}
|
||||
palette = 1={{colors.terminal_normal_red.default.hex}}
|
||||
palette = 2={{colors.terminal_normal_green.default.hex}}
|
||||
palette = 3={{colors.terminal_normal_yellow.default.hex}}
|
||||
palette = 4={{colors.terminal_normal_blue.default.hex}}
|
||||
palette = 5={{colors.terminal_normal_magenta.default.hex}}
|
||||
palette = 6={{colors.terminal_normal_cyan.default.hex}}
|
||||
palette = 7={{colors.terminal_normal_white.default.hex}}
|
||||
palette = 8={{colors.terminal_bright_black.default.hex}}
|
||||
palette = 9={{colors.terminal_bright_red.default.hex}}
|
||||
palette = 10={{colors.terminal_bright_green.default.hex}}
|
||||
palette = 11={{colors.terminal_bright_yellow.default.hex}}
|
||||
palette = 12={{colors.terminal_bright_blue.default.hex}}
|
||||
palette = 13={{colors.terminal_bright_magenta.default.hex}}
|
||||
palette = 14={{colors.terminal_bright_cyan.default.hex}}
|
||||
palette = 15={{colors.terminal_bright_white.default.hex}}
|
||||
background = {{colors.terminal_background.default.hex}}
|
||||
foreground = {{colors.terminal_foreground.default.hex}}
|
||||
cursor-color = {{colors.terminal_cursor.default.hex}}
|
||||
cursor-text = {{colors.terminal_cursor_text.default.hex}}
|
||||
selection-background = {{colors.terminal_selection_bg.default.hex}}
|
||||
selection-foreground = {{colors.terminal_selection_fg.default.hex}}
|
||||
@@ -0,0 +1,24 @@
|
||||
color0 {{colors.terminal_normal_black.default.hex}}
|
||||
color1 {{colors.terminal_normal_red.default.hex}}
|
||||
color2 {{colors.terminal_normal_green.default.hex}}
|
||||
color3 {{colors.terminal_normal_yellow.default.hex}}
|
||||
color4 {{colors.terminal_normal_blue.default.hex}}
|
||||
color5 {{colors.terminal_normal_magenta.default.hex}}
|
||||
color6 {{colors.terminal_normal_cyan.default.hex}}
|
||||
color7 {{colors.terminal_normal_white.default.hex}}
|
||||
color8 {{colors.terminal_bright_black.default.hex}}
|
||||
color9 {{colors.terminal_bright_red.default.hex}}
|
||||
color10 {{colors.terminal_bright_green.default.hex}}
|
||||
color11 {{colors.terminal_bright_yellow.default.hex}}
|
||||
color12 {{colors.terminal_bright_blue.default.hex}}
|
||||
color13 {{colors.terminal_bright_magenta.default.hex}}
|
||||
color14 {{colors.terminal_bright_cyan.default.hex}}
|
||||
color15 {{colors.terminal_bright_white.default.hex}}
|
||||
background {{colors.terminal_background.default.hex}}
|
||||
selection_foreground {{colors.terminal_cursor_text.default.hex}}
|
||||
cursor {{colors.terminal_cursor.default.hex}}
|
||||
cursor_text_color {{colors.terminal_cursor_text.default.hex}}
|
||||
foreground {{colors.terminal_foreground.default.hex}}
|
||||
selection_background {{colors.terminal_foreground.default.hex}}
|
||||
active_border_color {{colors.primary.default.hex}}
|
||||
inactive_border_color {{colors.secondary.default.hex}}
|
||||
@@ -0,0 +1,84 @@
|
||||
[colors]
|
||||
ansi = [
|
||||
"{{colors.terminal_normal_black.default.hex}}",
|
||||
"{{colors.terminal_normal_red.default.hex}}",
|
||||
"{{colors.terminal_normal_green.default.hex}}",
|
||||
"{{colors.terminal_normal_yellow.default.hex}}",
|
||||
"{{colors.terminal_normal_blue.default.hex}}",
|
||||
"{{colors.terminal_normal_magenta.default.hex}}",
|
||||
"{{colors.terminal_normal_cyan.default.hex}}",
|
||||
"{{colors.terminal_normal_white.default.hex}}",
|
||||
]
|
||||
background = "{{colors.terminal_background.default.hex}}"
|
||||
brights = [
|
||||
"{{colors.terminal_bright_black.default.hex}}",
|
||||
"{{colors.terminal_bright_red.default.hex}}",
|
||||
"{{colors.terminal_bright_green.default.hex}}",
|
||||
"{{colors.terminal_bright_yellow.default.hex}}",
|
||||
"{{colors.terminal_bright_blue.default.hex}}",
|
||||
"{{colors.terminal_bright_magenta.default.hex}}",
|
||||
"{{colors.terminal_bright_cyan.default.hex}}",
|
||||
"{{colors.terminal_bright_white.default.hex}}",
|
||||
]
|
||||
compose_cursor = "{{colors.terminal_cursor.default.hex}}"
|
||||
cursor_bg = "{{colors.terminal_cursor.default.hex}}"
|
||||
cursor_border = "{{colors.terminal_cursor.default.hex}}"
|
||||
cursor_fg = "{{colors.terminal_cursor_text.default.hex}}"
|
||||
foreground = "{{colors.terminal_foreground.default.hex}}"
|
||||
scrollbar_thumb = "{{colors.terminal_selection_bg.default.hex}}"
|
||||
selection_bg = "{{colors.terminal_selection_bg.default.hex}}"
|
||||
selection_fg = "{{colors.terminal_selection_fg.default.hex}}"
|
||||
split = "{{colors.terminal_bright_black.default.hex}}"
|
||||
visual_bell = "{{colors.terminal_normal_black.default.hex}}"
|
||||
|
||||
[colors.indexed]
|
||||
16 = "{{colors.secondary.default.hex}}"
|
||||
17 = "{{colors.terminal_cursor.default.hex}}"
|
||||
|
||||
[colors.tab_bar]
|
||||
background = "{{colors.terminal_background.default.hex | darken 0.1}}"
|
||||
inactive_tab_edge = "{{colors.terminal_selection_bg.default.hex}}"
|
||||
|
||||
[colors.tab_bar.active_tab]
|
||||
bg_color = "{{colors.primary.default.hex}}"
|
||||
fg_color = "{{colors.on_primary.default.hex}}"
|
||||
intensity = "Normal"
|
||||
italic = false
|
||||
strikethrough = false
|
||||
underline = "None"
|
||||
|
||||
[colors.tab_bar.inactive_tab]
|
||||
bg_color = "{{colors.terminal_background.default.hex | darken 0.05}}"
|
||||
fg_color = "{{colors.terminal_foreground.default.hex}}"
|
||||
intensity = "Normal"
|
||||
italic = false
|
||||
strikethrough = false
|
||||
underline = "None"
|
||||
|
||||
[colors.tab_bar.inactive_tab_hover]
|
||||
bg_color = "{{colors.terminal_background.default.hex}}"
|
||||
fg_color = "{{colors.terminal_foreground.default.hex}}"
|
||||
intensity = "Normal"
|
||||
italic = false
|
||||
strikethrough = false
|
||||
underline = "None"
|
||||
|
||||
[colors.tab_bar.new_tab]
|
||||
bg_color = "{{colors.terminal_selection_bg.default.hex}}"
|
||||
fg_color = "{{colors.terminal_foreground.default.hex}}"
|
||||
intensity = "Normal"
|
||||
italic = false
|
||||
strikethrough = false
|
||||
underline = "None"
|
||||
|
||||
[colors.tab_bar.new_tab_hover]
|
||||
bg_color = "{{colors.terminal_bright_black.default.hex}}"
|
||||
fg_color = "{{colors.terminal_foreground.default.hex}}"
|
||||
intensity = "Normal"
|
||||
italic = false
|
||||
strikethrough = false
|
||||
underline = "None"
|
||||
|
||||
[metadata]
|
||||
author = "Noctalia"
|
||||
name = "Noctalia"
|
||||
@@ -44,10 +44,6 @@
|
||||
--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;
|
||||
|
||||
+40
-14
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Wählen Sie die Farbe für den Visualisierer aus.",
|
||||
"color-name-label": "Füllfarbe",
|
||||
"height-description": "Benutzerdefinierte Komponentenbreite.",
|
||||
"hide-when-idle-description": "Wenn aktiviert, wird der Visualizer ausgeblendet, sofern keine Wiedergabe läuft.",
|
||||
"hide-when-idle-label": "Ausblenden, wenn keine Medien wiedergegeben werden",
|
||||
"width-description": "Benutzerdefinierte Komponentenbreite."
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "Farbe der fokussierten Arbeitsfläche",
|
||||
"follow-focused-screen-description": "Zeige Arbeitsflächen vom aktuell fokussierten Bildschirm an, statt vom Bildschirm, auf dem sich die Leiste befindet.",
|
||||
"follow-focused-screen-label": "Fokussiertem Bildschirm folgen",
|
||||
"font-weight-description": "Visuelles Gewicht für Text im Arbeitsbereich festlegen.",
|
||||
"font-weight-label": "Schriftstärke",
|
||||
"grouped-border-opacity-description": "Legen Sie die Deckkraft für Arbeitsflächen-Container-Rahmen fest.",
|
||||
"grouped-border-opacity-label": "Rahmen-Deckkraft",
|
||||
"hide-unoccupied-description": "Arbeitsflächen ohne Fenster nicht anzeigen.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Hinzufügen",
|
||||
"appearance": "Aussehen",
|
||||
"apply": "Anwenden",
|
||||
"auto-connect": "Automatisches Verbinden",
|
||||
"automation": "Automatisierung",
|
||||
"available": "Verfügbar",
|
||||
"back": "Zurück",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Ausführen",
|
||||
"faithful": "Originalgetreu",
|
||||
"focus": "Fokus",
|
||||
"font-weight-bold": "Fett",
|
||||
"font-weight-light": "Leicht",
|
||||
"font-weight-medium": "Mittel",
|
||||
"font-weight-regular": "Regulär",
|
||||
"font-weight-semibold": "Halbfett",
|
||||
"frequency": "Frequenz",
|
||||
"gateway": "Gateway",
|
||||
"general": "Allgemein",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Panels",
|
||||
"password": "Passwort",
|
||||
"pause": "Pause",
|
||||
"performance": "Leistung",
|
||||
"pin": "Anpinnen",
|
||||
"play": "Wiedergabe",
|
||||
"polling": "Abfrageintervall",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "Debug-Modus deaktiviert",
|
||||
"debug-enabled": "Debug-Modus aktiviert",
|
||||
"info-copied": "Info in die Zwischenablage kopiert",
|
||||
"noctalia-available": "Verfügbar:",
|
||||
"noctalia-desc": "Eine elegante und minimalistische Desktop-Shell, sorgfältig für Wayland entwickelt, gebaut mit Quickshell.",
|
||||
"noctalia-git-commit": "Git-Commit:",
|
||||
"noctalia-installed-version": "Installierte Version:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "Ein riesiges Dankeschön an unseren großartigen Unterstützer!",
|
||||
"supporters-desc-plural": "Ein riesiges Dankeschön an unsere <b>{count} großartigen</b> Unterstützer!",
|
||||
"supporters-loading": "Supporter werden geladen...",
|
||||
"system-board": "Motherboard:",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Festplatte:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -844,14 +856,14 @@
|
||||
"behavior-middle-click-command-description": "Befehl, der bei Mittelklick ausgeführt wird.",
|
||||
"behavior-middle-click-command-label": "Mittelklick-Befehl",
|
||||
"behavior-middle-click-command-placeholder": "niri msg action Übersicht umschalten",
|
||||
"behavior-middle-click-description": "Wähle, was ein mittlerer Klick auf leeren Bereichen der Leiste bewirkt.",
|
||||
"behavior-middle-click-description": "Wählen Sie, was ein mittlerer Klick auf leeren Bereichen der Leiste bewirkt.",
|
||||
"behavior-middle-click-follow-mouse-description": "Öffne das ausgewählte Mittelklick-Panel an der Cursorposition.",
|
||||
"behavior-middle-click-follow-mouse-label": "Mittelklick folgt Maus",
|
||||
"behavior-middle-click-label": "Aktion bei Mittelklick auf die Leiste",
|
||||
"behavior-right-click-command-description": "Befehl, der beim Rechtsklick ausgeführt wird.",
|
||||
"behavior-right-click-command-label": "Rechtsklick-Befehl",
|
||||
"behavior-right-click-command-placeholder": "notify-send \"Rechtsklick\"",
|
||||
"behavior-right-click-description": "Wähle, was ein Rechtsklick auf leere Bereiche der Leiste bewirkt.",
|
||||
"behavior-right-click-description": "Wählen Sie, was ein Rechtsklick auf leere Bereiche der Leiste bewirkt.",
|
||||
"behavior-right-click-follow-mouse-description": "Öffne das ausgewählte Rechtsklick-Panel an der Cursorposition.",
|
||||
"behavior-right-click-follow-mouse-label": "Rechtsklick folgt Maus",
|
||||
"behavior-right-click-label": "Aktion bei Rechtsklick auf die Leiste",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "Tastenkombinationshinweise bei den Sitzungsoptionen anzeigen.",
|
||||
"show-keybinds-label": "Tastenkombinationen anzeigen"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Desktop-Widgets sichtbar lassen, während der Noctalia Leistungsmodus aktiviert ist.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Aktiviere Desktop-Widgets im Leistungsmodus",
|
||||
"noctalia-performance-disable-wallpaper-description": "Halte Desktop-, Übersicht- und Sperrbildschirm-Hintergrundbilder sichtbar, während der Noctalia Leistungsmodus aktiviert ist.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Hintergrundbild-Rendering im Leistungsmodus aktivieren",
|
||||
"title": "System"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Kritische Farbe",
|
||||
"custom-highlight-colors-title-label": "Benutzerdefinierte Hervorhebungsfarben",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "Abfrageintervall",
|
||||
"polling-section-description": "Konfigurieren Sie, wie oft jede Systemmetrik aktualisiert wird.",
|
||||
"polling-section-label": "Abfrageintervalle",
|
||||
"threshold-critical": "Kritische Schwelle",
|
||||
"threshold-warning": "Warnschwelle",
|
||||
"threshold-critical": "Kritisch",
|
||||
"threshold-warning": "Warnung",
|
||||
"thresholds-section-description": "Passe die Warn-/Kritisch-Schwellen und die Abfrageintervalle für jede Systemmetrik an.",
|
||||
"use-custom-highlight-colors-description": "Wenn deaktiviert, werden die Standard-Hervorhebungsfarben des Themes verwendet.",
|
||||
"use-custom-highlight-colors-label": "Benutzerdefinierte Hervorhebungsfarben verwenden",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "Animationsgeschwindigkeit",
|
||||
"animation-speed-reset": "Animationsgeschwindigkeit zurücksetzen",
|
||||
"appearance-desc": "Visuelle Elemente wie Tooltips, Rahmen und Schatten anpassen.",
|
||||
"blur-behind-description": "Macht den Bereich hinter Leisten und Panels unscharf mithilfe des Compositor-Blur-Protokolls.",
|
||||
"blur-behind-label": "Hintergrundunschärfe",
|
||||
"box-border-description": "Zeige eine Umrandung um Inhaltsbereiche an.",
|
||||
"box-border-label": "Containerumriss",
|
||||
"box-border-radius-description": "Passt die Eckenrundung wichtiger Layoutbereiche an, wie z. B. Seitenleisten, Karten und Inhaltsbereiche.",
|
||||
@@ -1826,8 +1847,8 @@
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Adresse in die Zwischenablage kopiert",
|
||||
"auto-connect-disabled": "Automatische Verbindung deaktiviert",
|
||||
"auto-connect-enabled": "Automatisch verbinden aktiviert",
|
||||
"auto-connect-disabled": "Automatisches Verbinden deaktiviert",
|
||||
"auto-connect-enabled": "Automatisches Verbinden aktiviert",
|
||||
"auto-connecting": "Verbinde mit {count} Gerät(en)...",
|
||||
"confirm-code": "Bestätigungscode {value} auf dem anderen Gerät bestätigen.",
|
||||
"connect-failed": "Verbindung mit dem Gerät fehlgeschlagen",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "Zwischenablageverlauf nicht verfügbar",
|
||||
"unavailable-desc": "Die 'cliphist' Anwendung ist nicht installiert. Bitte installieren Sie sie, um Zwischenablageverlauf-Features zu nutzen"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "Befehl fehlgeschlagen: {command}\\nExit-Code: {code}",
|
||||
"title": "Benutzerdefinierter Befehl fehlgeschlagen"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "'Nicht stören' deaktiviert",
|
||||
"disabled-desc": "Alle Benachrichtigungen werden angezeigt",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Widget hinzufügen",
|
||||
"bluetooth-auto-connect-off": "Auto-Verbindung ist aus — klicken, um zu aktivieren",
|
||||
"bluetooth-auto-connect-on": "Automatische Verbindung ist an — klicken, um zu deaktivieren",
|
||||
"auto-connect": "Automatisches Verbinden für dieses Gerät umschalten",
|
||||
"bluetooth-auto-connect-off": "Automatisches Verbinden deaktiviert",
|
||||
"bluetooth-auto-connect-on": "Automatisches Verbinden aktiviert",
|
||||
"bluetooth-devices": "Bluetooth-Geräte",
|
||||
"brightness-at": "Helligkeit: {brightness}%",
|
||||
"click-to-start-recording": "Bildschirmrekorder (Aufnahme starten)",
|
||||
@@ -1999,14 +2025,14 @@
|
||||
"resolution-label": "Auflösung",
|
||||
"resolution-mode-label": "Modus",
|
||||
"solid-color-tooltip": "Einfarbiger Hintergrund",
|
||||
"sort-date-asc": "Sortiere nach Ältestem zuerst",
|
||||
"sort-date-desc": "Sortiere nach Neuestem zuerst",
|
||||
"sort-name-asc": "Sortiere nach Name (A-Z)",
|
||||
"sort-name-desc": "Sortiere nach Name (Z-A)",
|
||||
"sort-random": "Sortiere nach Zufall",
|
||||
"sort-date-asc": "Nach Ältestem zuerst sortieren",
|
||||
"sort-date-desc": "Nach Neuestem zuerst sortieren",
|
||||
"sort-name-asc": "Nach Name sortieren (A-Z)",
|
||||
"sort-name-desc": "Nach Name sortieren (Z-A)",
|
||||
"sort-random": "Nach Zufall sortieren",
|
||||
"sorting-date-added": "Hinzugefügt am",
|
||||
"sorting-favorites": "Favoriten",
|
||||
"sorting-label": "Sortieren nach",
|
||||
"sorting-label": "Sortiere nach",
|
||||
"sorting-relevance": "Relevanz",
|
||||
"sorting-toplist": "Topliste",
|
||||
"sorting-views": "Aufrufe",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Select the color for the visualizer.",
|
||||
"color-name-label": "Fill color",
|
||||
"height-description": "Custom component width.",
|
||||
"hide-when-idle-description": "When enabled, the visualizer is hidden unless a player is actively playing.",
|
||||
"hide-when-idle-label": "Hide when no media is playing",
|
||||
"width-description": "Custom component width."
|
||||
@@ -60,7 +61,7 @@
|
||||
"hide-if-not-detected-description": "Hide the widget when no battery is detected on the system.",
|
||||
"hide-if-not-detected-label": "Hide when not detected",
|
||||
"low-battery-threshold-label": "Low battery warning threshold",
|
||||
"show-noctalia-performance-description": "Display the Noctalia Performance Mode toggle inside the battery panel.<br>Disables shadows and animations in Noctalia to reduce resource usage.",
|
||||
"show-noctalia-performance-description": "Display the Noctalia performance mode toggle inside the battery panel.<br>Disables shadows and animations in Noctalia to reduce resource usage.",
|
||||
"show-noctalia-performance-label": "Show Noctalia Performance toggle",
|
||||
"show-power-profile-description": "Display the power profile selection inside the battery panel.",
|
||||
"show-power-profile-label": "Show power profile controls"
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "Focused workspace color",
|
||||
"follow-focused-screen-description": "Display workspaces from the currently focused screen, rather than the screen where the bar is located.",
|
||||
"follow-focused-screen-label": "Follow focused screen",
|
||||
"font-weight-description": "Set the visual weight for text within workspace.",
|
||||
"font-weight-label": "Font weight",
|
||||
"grouped-border-opacity-description": "Set the opacity level for workspace container borders.",
|
||||
"grouped-border-opacity-label": "Border opacity",
|
||||
"hide-unoccupied-description": "Don't display workspaces without windows.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Add",
|
||||
"appearance": "Appearance",
|
||||
"apply": "Apply",
|
||||
"auto-connect": "Auto-connect",
|
||||
"automation": "Automation",
|
||||
"available": "Available",
|
||||
"back": "Back",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Execute",
|
||||
"faithful": "Faithful",
|
||||
"focus": "Focus",
|
||||
"font-weight-bold": "Bold",
|
||||
"font-weight-light": "Light",
|
||||
"font-weight-medium": "Medium",
|
||||
"font-weight-regular": "Regular",
|
||||
"font-weight-semibold": "Semi-bold",
|
||||
"frequency": "Frequency",
|
||||
"gateway": "Gateway",
|
||||
"general": "General",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Panels",
|
||||
"password": "Password",
|
||||
"pause": "Pause",
|
||||
"performance": "Performance",
|
||||
"pin": "Pin",
|
||||
"play": "Play",
|
||||
"polling": "Polling",
|
||||
@@ -709,18 +719,20 @@
|
||||
"debug-disabled": "Debug mode disabled",
|
||||
"debug-enabled": "Debug mode enabled",
|
||||
"info-copied": "Info copied to clipboard",
|
||||
"noctalia-available": "Available:",
|
||||
"noctalia-desc": "A sleek and minimal desktop shell thoughtfully crafted for Wayland, built with Quickshell.",
|
||||
"noctalia-git-commit": "Git commit:",
|
||||
"noctalia-installed-version": "Installed version:",
|
||||
"noctalia-latest-version": "Latest version:",
|
||||
"noctalia-qs-version": "Noctalia QS version:",
|
||||
"noctalia-title": "Noctalia shell",
|
||||
"noctalia-title": "Noctalia Shell",
|
||||
"privacy-policy": "Privacy policy",
|
||||
"support": "Support us",
|
||||
"supporter-badge": "Supporter",
|
||||
"supporters-desc": "A huge thank you to our amazing supporter!",
|
||||
"supporters-desc-plural": "A huge thank you to our <b>{count} amazing</b> supporters!",
|
||||
"supporters-loading": "Loading supporters...",
|
||||
"system-board": "Board:",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Disk:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1207,10 +1219,10 @@
|
||||
"noctalia-started-description": "Command to execute when Noctalia has finished loading.",
|
||||
"noctalia-started-label": "Noctalia started",
|
||||
"noctalia-started-placeholder": "e.g. notify-send 'Noctalia Loaded'",
|
||||
"performance-mode-disabled-description": "Command to be executed when Noctalia Performance Mode is disabled.",
|
||||
"performance-mode-disabled-description": "Command to be executed when Noctalia performance mode is disabled.",
|
||||
"performance-mode-disabled-label": "Performance mode disabled",
|
||||
"performance-mode-disabled-placeholder": "e.g. notify-send \"Performance\" \"Mode disabled\"",
|
||||
"performance-mode-enabled-description": "Command to be executed when Noctalia Performance Mode is enabled.",
|
||||
"performance-mode-enabled-description": "Command to be executed when Noctalia performance mode is enabled.",
|
||||
"performance-mode-enabled-label": "Performance mode enabled",
|
||||
"performance-mode-enabled-placeholder": "e.g., notify-send \"Performance\" \"Mode enabled\"",
|
||||
"screen-lock-description": "Command to be executed when the screen is locked.",
|
||||
@@ -1601,6 +1613,13 @@
|
||||
"show-keybinds-description": "Display keybind hints on session options.",
|
||||
"show-keybinds-label": "Show keybinds"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Keep desktop widgets visible while Noctalia performance mode is enabled.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Enable desktop widgets in performance mode",
|
||||
"noctalia-performance-disable-wallpaper-description": "Keep desktop, overview, and lock screen wallpapers visible while Noctalia performance mode is enabled.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Enable wallpaper rendering in performance mode",
|
||||
"title": "System"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Critical color",
|
||||
"custom-highlight-colors-title-label": "Custom highlight colors",
|
||||
@@ -1633,6 +1652,8 @@
|
||||
"animation-speed-label": "Animation speed",
|
||||
"animation-speed-reset": "Reset animation speed",
|
||||
"appearance-desc": "Customize visual elements like tooltips, borders, and shadows.",
|
||||
"blur-behind-description": "Blurs the area behind bars and panels using the compositor blur protocol.",
|
||||
"blur-behind-label": "Blur behind",
|
||||
"box-border-description": "Display an outline around content areas.",
|
||||
"box-border-label": "Container outline",
|
||||
"box-border-radius-description": "Adjusts the corner roundness of major layout sections, such as sidebars, cards, and content panels.",
|
||||
@@ -1849,6 +1870,10 @@
|
||||
"unavailable": "Clipboard history unavailable",
|
||||
"unavailable-desc": "The 'cliphist' application is not installed. Please install it to use clipboard history features"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "Command failed: {command}\nExit code: {code}",
|
||||
"title": "Custom command failed"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "Do Not Disturb disabled",
|
||||
"disabled-desc": "Showing all notifications",
|
||||
@@ -1903,8 +1928,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Add widget",
|
||||
"bluetooth-auto-connect-off": "Auto-connect is off — click to enable",
|
||||
"bluetooth-auto-connect-on": "Auto-connect is on — click to disable",
|
||||
"auto-connect": "Toggle auto-connection for this device",
|
||||
"bluetooth-auto-connect-off": "Auto-connect is off",
|
||||
"bluetooth-auto-connect-on": "Auto-connect is on",
|
||||
"bluetooth-devices": "Bluetooth devices",
|
||||
"brightness-at": "Brightness: {brightness}%",
|
||||
"click-to-start-recording": "Screen recorder (start recording)",
|
||||
@@ -1933,7 +1959,7 @@
|
||||
"next-media": "Next track",
|
||||
"next-month": "Next month",
|
||||
"night-light-not-installed": "Night Light (not available)",
|
||||
"noctalia-performance-enabled": "Noctalia Performance Mode",
|
||||
"noctalia-performance-enabled": "Noctalia performance mode",
|
||||
"open-annotation-tool": "Open with annotation tool",
|
||||
"open-control-center": "Control center",
|
||||
"open-notification-history-enable-dnd": "Notification history",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Selecciona el color para el visualizador.",
|
||||
"color-name-label": "Color de relleno",
|
||||
"height-description": "Ancho de componente personalizado.",
|
||||
"hide-when-idle-description": "Si está activado, el visualizador se oculta salvo que haya reproducción activa.",
|
||||
"hide-when-idle-label": "Ocultar cuando no se reproduce",
|
||||
"width-description": "Ancho del componente personalizado."
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "Color del espacio de trabajo enfocado",
|
||||
"follow-focused-screen-description": "Mostrar espacios de trabajo de la pantalla enfocada, en lugar de la pantalla donde se encuentra la barra.",
|
||||
"follow-focused-screen-label": "Seguir pantalla enfocada",
|
||||
"font-weight-description": "Establecer el peso visual para el texto dentro del espacio de trabajo.",
|
||||
"font-weight-label": "Peso de fuente",
|
||||
"grouped-border-opacity-description": "Establecer el nivel de opacidad para los bordes del contenedor del espacio de trabajo.",
|
||||
"grouped-border-opacity-label": "Opacidad del borde",
|
||||
"hide-unoccupied-description": "No mostrar espacios de trabajo sin ventanas.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Añadir",
|
||||
"appearance": "Apariencia",
|
||||
"apply": "Aplicar",
|
||||
"auto-connect": "Conexión automática",
|
||||
"automation": "Automatización",
|
||||
"available": "Disponible",
|
||||
"back": "Atrás",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Ejecutar",
|
||||
"faithful": "Fiel",
|
||||
"focus": "Enfoque",
|
||||
"font-weight-bold": "Negrita",
|
||||
"font-weight-light": "Fina",
|
||||
"font-weight-medium": "Medio",
|
||||
"font-weight-regular": "Regular",
|
||||
"font-weight-semibold": "Seminegrita",
|
||||
"frequency": "Frecuencia",
|
||||
"gateway": "Puerta de enlace",
|
||||
"general": "General",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Paneles",
|
||||
"password": "Contraseña",
|
||||
"pause": "Pausa",
|
||||
"performance": "Rendimiento",
|
||||
"pin": "Anclar",
|
||||
"play": "Reproducir",
|
||||
"polling": "Sondeo",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "Modo de depuración deshabilitado",
|
||||
"debug-enabled": "Modo de depuración activado",
|
||||
"info-copied": "Información copiada al portapapeles",
|
||||
"noctalia-available": "Disponible:",
|
||||
"noctalia-desc": "Un shell de escritorio elegante y minimalista cuidadosamente diseñado para Wayland, construido con Quickshell.",
|
||||
"noctalia-git-commit": "Commit de Git:",
|
||||
"noctalia-installed-version": "Versión instalada:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "¡Un enorme agradecimiento a nuestro increíble colaborador!",
|
||||
"supporters-desc-plural": "¡Muchísimas gracias a nuestros <b>{count} increíbles</b> seguidores!",
|
||||
"supporters-loading": "Cargando patrocinadores...",
|
||||
"system-board": "Placa:",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Disco:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1205,10 +1217,10 @@
|
||||
"noctalia-started-description": "Comando para ejecutar cuando Noctalia ha terminado de cargarse.",
|
||||
"noctalia-started-label": "Noctalia iniciado",
|
||||
"noctalia-started-placeholder": "p. ej. notify-send 'Noctalia cargado'",
|
||||
"performance-mode-disabled-description": "Comando a ejecutar cuando se deshabilita el modo de rendimiento de Noctalia.",
|
||||
"performance-mode-disabled-description": "Comando a ejecutar cuando se deshabilita el modo de rendimiento Noctalia.",
|
||||
"performance-mode-disabled-label": "Modo de rendimiento deshabilitado",
|
||||
"performance-mode-disabled-placeholder": "p. ej. notify-send \"Rendimiento\" \"Modo deshabilitado\"",
|
||||
"performance-mode-enabled-description": "Comando a ejecutar cuando se habilita el modo de rendimiento de Noctalia.",
|
||||
"performance-mode-enabled-description": "Comando a ejecutar cuando se habilita el modo de rendimiento Noctalia.",
|
||||
"performance-mode-enabled-label": "Modo de rendimiento habilitado",
|
||||
"performance-mode-enabled-placeholder": "p. ej. notify-send \"Rendimiento\" \"Modo habilitado\"",
|
||||
"screen-lock-description": "Comando a ejecutar cuando se bloquea la pantalla.",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "Mostrar sugerencias de atajos de teclado en las opciones de sesión.",
|
||||
"show-keybinds-label": "Mostrar atajos de teclado"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Mantener los widgets de escritorio visibles mientras el modo de rendimiento Noctalia esté habilitado.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Habilitar widgets de escritorio en modo de rendimiento",
|
||||
"noctalia-performance-disable-wallpaper-description": "Mantén visibles los fondos de pantalla del escritorio, la vista general y la pantalla de bloqueo mientras el modo de rendimiento Noctalia esté activado.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Habilitar el renderizado de fondo de pantalla en modo de rendimiento",
|
||||
"title": "Sistema"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Color crítico",
|
||||
"custom-highlight-colors-title-label": "Colores de resaltado personalizados",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "Intervalo de sondeo",
|
||||
"polling-section-description": "Configure la frecuencia con la que se actualiza cada métrica del sistema.",
|
||||
"polling-section-label": "Intervalos de sondeo",
|
||||
"threshold-critical": "Umbral crítico",
|
||||
"threshold-warning": "Umbral de advertencia",
|
||||
"threshold-critical": "Crítico",
|
||||
"threshold-warning": "Advertencia",
|
||||
"thresholds-section-description": "Ajusta los umbrales de advertencia/crítico y los intervalos de sondeo para cada métrica del sistema.",
|
||||
"use-custom-highlight-colors-description": "Cuando está desactivado, se usan los colores de resaltado predeterminados del tema.",
|
||||
"use-custom-highlight-colors-label": "Usar colores de resaltado personalizados",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "Velocidad de animación",
|
||||
"animation-speed-reset": "Restablecer la velocidad de la animación",
|
||||
"appearance-desc": "Personaliza elementos visuales como texto emergente, bordes y sombras.",
|
||||
"blur-behind-description": "Difumina el área detrás de las barras y los paneles usando el protocolo de desenfoque del compositor.",
|
||||
"blur-behind-label": "Desenfoque de fondo",
|
||||
"box-border-description": "Muestra un contorno alrededor de las áreas de contenido.",
|
||||
"box-border-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.",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "Historial del portapapeles no disponible",
|
||||
"unavailable-desc": "La aplicación 'cliphist' no está instalada. Por favor, instálala para usar las funciones de historial del portapapeles"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "El comando falló: {command}\\nCódigo de salida: {code}",
|
||||
"title": "Comando personalizado falló"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "'No molestar' desactivado",
|
||||
"disabled-desc": "Mostrando todas las notificaciones",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Añadir widget",
|
||||
"bluetooth-auto-connect-off": "Conexión automática desactivada — haz clic para activar",
|
||||
"bluetooth-auto-connect-on": "Conexión automática activada — haz clic para desactivar",
|
||||
"auto-connect": "Alternar conexión automática para este dispositivo",
|
||||
"bluetooth-auto-connect-off": "Conexión automática desactivada",
|
||||
"bluetooth-auto-connect-on": "Conexión automática activada",
|
||||
"bluetooth-devices": "Dispositivos Bluetooth",
|
||||
"brightness-at": "Brillo: {brightness}%",
|
||||
"click-to-start-recording": "Grabadora de pantalla (iniciar grabación)",
|
||||
|
||||
+48
-22
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Sélectionnez la couleur du visualiseur.",
|
||||
"color-name-label": "Couleur de remplissage",
|
||||
"height-description": "Largeur de composant personnalisée.",
|
||||
"hide-when-idle-description": "Si activé, le visualiseur est masqué sauf lorsqu'un lecteur est en lecture.",
|
||||
"hide-when-idle-label": "Masquer lorsqu'aucun média n'est en lecture",
|
||||
"width-description": "Largeur personnalisée du composant."
|
||||
@@ -79,8 +80,8 @@
|
||||
"horizontal-bar-description": "Astuce : Utilisez \\n pour créer un saut de ligne.",
|
||||
"horizontal-bar-label": "Barre horizontale",
|
||||
"preview": "Aperçu",
|
||||
"tooltip-format-description": "Chaîne de format pour l'info-bulle affichée lors du survol de l'horloge. Laissez vide pour utiliser l'info-bulle par défaut.",
|
||||
"tooltip-format-label": "Format de l'info-bulle",
|
||||
"tooltip-format-description": "Chaîne de format pour l'infobulle affichée lors du survol de l'horloge. Laissez vide pour utiliser l'infobulle par défaut.",
|
||||
"tooltip-format-label": "Format de l'infobulle",
|
||||
"use-custom-font-description": "Remplacez la police par défaut par une police personnalisée pour l'horloge.",
|
||||
"use-custom-font-label": "Utiliser une police personnalisée",
|
||||
"use-monospaced-font-description": "Lorsque cette option est activée, l'horloge utilisera la police monospace.",
|
||||
@@ -109,8 +110,8 @@
|
||||
"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.",
|
||||
"enable-colorization-label": "Activer la colorisation",
|
||||
"general-tooltip-text-description": "Texte personnalisé à afficher dans l'info-bulle du bouton.",
|
||||
"general-tooltip-text-label": "Texte d'info-bulle personnalisé",
|
||||
"general-tooltip-text-description": "Texte personnalisé à afficher dans l'infobulle du bouton.",
|
||||
"general-tooltip-text-label": "Texte d'infobulle personnalisé",
|
||||
"hide-mode-always-expanded": "Toujours étendu",
|
||||
"hide-mode-description": "Contrôle la visibilité du widget quand la commande n'a pas de sortie.",
|
||||
"hide-mode-expand-with-output": "Étendre quand il y a une sortie",
|
||||
@@ -136,12 +137,12 @@
|
||||
"right-click-description": "Commande à exécuter quand le bouton est cliqué à droite.",
|
||||
"right-click-label": "Clic droit",
|
||||
"right-click-update-text": "Mettre à jour le texte affiché lors d'un clic droit",
|
||||
"show-exec-tooltip-description": "Afficher les info-bulles avec les détails de la commande (clic gauche/droit/milieu, molette).",
|
||||
"show-exec-tooltip-description": "Afficher les infobulles avec les détails de la commande (clic gauche/droit/milieu, molette).",
|
||||
"show-exec-tooltip-label": "Afficher les infobulles de commande",
|
||||
"show-icon-description": "Bascule la visibilité de l'icône du widget.",
|
||||
"show-icon-label": "Afficher l'icône",
|
||||
"show-text-tooltip-description": "Afficher les info-bulles avec la sortie de la commande texte.",
|
||||
"show-text-tooltip-label": "Afficher les info-bulles de texte dynamiques",
|
||||
"show-text-tooltip-description": "Afficher les infobulles avec la sortie de la commande texte.",
|
||||
"show-text-tooltip-label": "Afficher les infobulles de texte dynamiques",
|
||||
"text-stream-description": "Les lignes diffusées depuis la commande seront affichées sous forme de texte sur le bouton.",
|
||||
"text-stream-label": "Flux",
|
||||
"wheel-description": "Commande à exécuter lorsque la molette est utilisée.<br>Utilisez $delta pour le delta de la molette dans la commande.",
|
||||
@@ -213,7 +214,7 @@
|
||||
"compact-mode-description": "Afficher les statistiques sous forme de mini-graphiques à barres au lieu de valeurs textuelles. Empêche les décalages de mise en page.",
|
||||
"compact-mode-label": "Mode compact",
|
||||
"cpu-cores-description": "Afficher l'utilisation des cœurs du CPU individuellement.",
|
||||
"cpu-cores-label": "Cœurs de CPU",
|
||||
"cpu-cores-label": "Cœurs du CPU",
|
||||
"cpu-frequency-description": "Afficher la vitesse d'horloge actuelle du CPU en GHz.",
|
||||
"cpu-frequency-label": "Afficher la fréquence du CPU",
|
||||
"cpu-temperature-description": "Afficher les lectures de température du CPU si disponibles.",
|
||||
@@ -285,7 +286,7 @@
|
||||
"workspace": {
|
||||
"character-count-description": "Nombre de caractères à afficher des noms d'espaces de travail (1-10).",
|
||||
"character-count-label": "Nombre de caractères",
|
||||
"empty-color-description": "Définir la couleur d'arrière-plan pour les Workspaces vides.",
|
||||
"empty-color-description": "Définir la couleur d'arrière-plan pour les espaces de travail vides.",
|
||||
"empty-color-label": "Couleur d'espace de travail vide",
|
||||
"enable-scrollwheel-description": "Basculer entre les espaces de travail avec la molette de la souris.",
|
||||
"enable-scrollwheel-label": "Faites défiler pour changer d'espace de travail",
|
||||
@@ -293,13 +294,15 @@
|
||||
"focused-color-label": "Couleur de l'espace de travail sélectionné",
|
||||
"follow-focused-screen-description": "Afficher les espaces de travail de l'écran actuellement ciblé, plutôt que de l'écran où se trouve la barre.",
|
||||
"follow-focused-screen-label": "Suivre l'écran ciblé",
|
||||
"font-weight-description": "Définir le poids visuel du texte dans l'espace de travail.",
|
||||
"font-weight-label": "Graisse de la police",
|
||||
"grouped-border-opacity-description": "Définir le niveau d'opacité des bordures des conteneurs d'espace de travail.",
|
||||
"grouped-border-opacity-label": "Opacité de la bordure",
|
||||
"hide-unoccupied-description": "Ne pas afficher les espaces de travail sans fenêtres.",
|
||||
"hide-unoccupied-label": "Masquer les inoccupés",
|
||||
"label-mode-description": "Choisir comment les étiquettes d'espace de travail sont affichées.",
|
||||
"label-mode-label": "Mode d'étiquette",
|
||||
"occupied-color-description": "Définir la couleur d'arrière-plan pour les Workspaces occupés.",
|
||||
"occupied-color-description": "Définir la couleur d'arrière-plan pour les espaces de travail occupés.",
|
||||
"occupied-color-label": "Couleur de l'espace de travail occupé",
|
||||
"pill-size-description": "Ajustez la taille des pilules d'espace de travail (50%-100%).",
|
||||
"pill-size-label": "Taille de la pilule",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Ajouter",
|
||||
"appearance": "Apparence",
|
||||
"apply": "Appliquer",
|
||||
"auto-connect": "Connexion automatique",
|
||||
"automation": "Automatisation",
|
||||
"available": "Disponible",
|
||||
"back": "Retour",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Exécuter",
|
||||
"faithful": "Fidèle",
|
||||
"focus": "Concentration",
|
||||
"font-weight-bold": "Gras",
|
||||
"font-weight-light": "Légère",
|
||||
"font-weight-medium": "Moyen",
|
||||
"font-weight-regular": "Régulier",
|
||||
"font-weight-semibold": "Semi-gras",
|
||||
"frequency": "Fréquence",
|
||||
"gateway": "Passerelle",
|
||||
"general": "Général",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Panneaux",
|
||||
"password": "Mot de passe",
|
||||
"pause": "Pause",
|
||||
"performance": "Performances",
|
||||
"pin": "Épingle",
|
||||
"play": "Lire",
|
||||
"polling": "Interrogation",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "Mode débogage désactivé",
|
||||
"debug-enabled": "Mode débogage activé",
|
||||
"info-copied": "Info copiée dans le presse-papiers",
|
||||
"noctalia-available": "Disponible :",
|
||||
"noctalia-desc": "Un shell de bureau élégant et minimaliste, conçu avec soin pour Wayland et bâti avec Quickshell.",
|
||||
"noctalia-git-commit": "Commit Git :",
|
||||
"noctalia-installed-version": "Version installée :",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "Un immense merci à notre incroyable soutien !",
|
||||
"supporters-desc-plural": "Un grand merci à nos <b>{count} incroyables</b> supporters !",
|
||||
"supporters-loading": "Chargement des contributeurs...",
|
||||
"system-board": "Carte mère :",
|
||||
"system-cpu": "Processeur :",
|
||||
"system-disk": "Disque :",
|
||||
"system-gpu": "GPU :",
|
||||
@@ -842,7 +854,7 @@
|
||||
"appearance-widget-spacing-description": "Ajustez l'espacement entre chaque widget dans la barre.",
|
||||
"appearance-widget-spacing-label": "Espacement des widgets",
|
||||
"behavior-middle-click-command-description": "Commande à exécuter au clic du milieu.",
|
||||
"behavior-middle-click-command-label": "Commande du Clic du Milieu",
|
||||
"behavior-middle-click-command-label": "Commande du clic du Milieu",
|
||||
"behavior-middle-click-command-placeholder": "niri msg action basculer l'aperçu",
|
||||
"behavior-middle-click-description": "Choisissez ce que fait le clic du milieu sur les zones vides de la Barre.",
|
||||
"behavior-middle-click-follow-mouse-description": "Ouvrir le panneau de clic central sélectionné à la position du curseur.",
|
||||
@@ -972,8 +984,8 @@
|
||||
"shortcuts-custom-button-state-checks-command": "Commande à exécuter pour cette vérification d'état",
|
||||
"shortcuts-custom-button-state-checks-label": "Vérifications d'état",
|
||||
"shortcuts-custom-button-state-checks-remove": "Supprimer",
|
||||
"shortcuts-custom-button-tooltip-description": "L'info-bulle à afficher lors du survol du bouton.",
|
||||
"shortcuts-custom-button-tooltip-label": "Info-bulle",
|
||||
"shortcuts-custom-button-tooltip-description": "L'infobulle à afficher lors du survol du bouton.",
|
||||
"shortcuts-custom-button-tooltip-label": "Infobulle",
|
||||
"shortcuts-title": "Widgets de raccourcis",
|
||||
"system-monitor-disk-path-description": "Sélectionnez le point de montage du disque que la carte du moniteur système dans le centre de contrôle doit surveiller.",
|
||||
"system-monitor-disk-path-label": "Chemin du disque du moniteur système",
|
||||
@@ -1206,7 +1218,7 @@
|
||||
"noctalia-started-label": "Noctalia démarré",
|
||||
"noctalia-started-placeholder": "ex : notify-send 'Noctalia chargé'",
|
||||
"performance-mode-disabled-description": "Commande à exécuter lorsque le mode performance Noctalia est désactivé.",
|
||||
"performance-mode-disabled-label": "mode performance désactivé",
|
||||
"performance-mode-disabled-label": "Mode performance désactivé",
|
||||
"performance-mode-disabled-placeholder": "ex : notify-send \"Performance\" \"Mode désactivé\"",
|
||||
"performance-mode-enabled-description": "Commande à exécuter lorsque le mode performance Noctalia est activé.",
|
||||
"performance-mode-enabled-label": "Mode performance activé",
|
||||
@@ -1255,7 +1267,7 @@
|
||||
"resume-command-label": "Reprendre la commande",
|
||||
"screen-off-description": "Secondes d'inactivité avant que les moniteurs ne s'éteignent.",
|
||||
"screen-off-label": "Éteindre l'écran",
|
||||
"status-description": "Temps d'inactivité tel que rapporté par le compositor.",
|
||||
"status-description": "Temps d'inactivité tel que rapporté par le compositeur.",
|
||||
"status-label": "Temps d'inactivité",
|
||||
"suspend-description": "Secondes d'inactivité avant que le système ne se suspende.",
|
||||
"tab-behavior": "Comportement",
|
||||
@@ -1263,7 +1275,7 @@
|
||||
"timeouts-description": "Réglez sur 0 pour désactiver une étape. Les délais d'attente sont mis en pause tant que 'Rester éveillé' est actif.",
|
||||
"timeouts-label": "Délais d'expiration",
|
||||
"title": "Inactivité",
|
||||
"unavailable": "La surveillance native de l'inactivité n'est pas disponible sur ce Compositor."
|
||||
"unavailable": "La surveillance native de l'inactivité n'est pas disponible sur ce compositeur."
|
||||
},
|
||||
"indicator": {
|
||||
"default-value": "Par défaut : {value}",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "Afficher les indices de raccourcis clavier sur les options de session.",
|
||||
"show-keybinds-label": "Afficher les raccourcis clavier"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Garder les widgets de bureau visibles tant que le mode performance Noctalia est activé.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Activer les widgets de bureau en mode performance",
|
||||
"noctalia-performance-disable-wallpaper-description": "Gardez les fonds d'écran du bureau, de l'aperçu et de l'écran de verrouillage visibles lorsque le mode performance Noctalia est activé.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Activer le rendu du fond d'écran en mode performance",
|
||||
"title": "Système"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Couleur critique",
|
||||
"custom-highlight-colors-title-label": "Couleurs de surbrillance personnalisées",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "Intervalle d'interrogation",
|
||||
"polling-section-description": "Configurer la fréquence de mise à jour de chaque métrique système.",
|
||||
"polling-section-label": "Intervalles d'interrogation",
|
||||
"threshold-critical": "Seuil critique",
|
||||
"threshold-warning": "Seuil d'alerte",
|
||||
"threshold-critical": "Critique",
|
||||
"threshold-warning": "Avertissement",
|
||||
"thresholds-section-description": "Ajustez les seuils d’avertissement/critiques et les intervalles d’interrogation pour chaque métrique système.",
|
||||
"use-custom-highlight-colors-description": "Lorsque cette option est désactivée, les couleurs de surbrillance par défaut du thème sont utilisées.",
|
||||
"use-custom-highlight-colors-label": "Utiliser des couleurs de surlignage personnalisées",
|
||||
@@ -1630,7 +1649,9 @@
|
||||
"animation-speed-description": "Ajuster la vitesse globale de l'animation.",
|
||||
"animation-speed-label": "Vitesse d'animation",
|
||||
"animation-speed-reset": "Réinitialiser la vitesse de l'animation",
|
||||
"appearance-desc": "Personnaliser les éléments visuels tels que les info-bulles, les bordures et les ombres.",
|
||||
"appearance-desc": "Personnaliser les éléments visuels tels que les infobulles, les bordures et les ombres.",
|
||||
"blur-behind-description": "Floute la zone derrière les barres et les panneaux en utilisant le protocole de flou du compositeur.",
|
||||
"blur-behind-label": "Flou d'arrière-plan",
|
||||
"box-border-description": "Affiche un contour autour des zones de contenu.",
|
||||
"box-border-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.",
|
||||
@@ -1660,7 +1681,7 @@
|
||||
"shadows-direction-label": "Direction de l’ombre",
|
||||
"shadows-label": "Ombres portées",
|
||||
"title": "Interface utilisateur",
|
||||
"tooltips-description": "Activer ou désactiver les info-bulles dans toute l'interface.",
|
||||
"tooltips-description": "Activer ou désactiver les infobulles dans toute l'interface.",
|
||||
"tooltips-label": "Afficher les infobulles"
|
||||
},
|
||||
"wallpaper": {
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "Historique du presse-papiers indisponible",
|
||||
"unavailable-desc": "L'application 'cliphist' n'est pas installée. Veuillez l'installer pour utiliser les fonctionnalités d'historique du presse-papiers"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "La commande a échoué : {command}\\nCode de sortie : {code}",
|
||||
"title": "La commande personnalisée a échoué"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "'Ne pas déranger' désactivé",
|
||||
"disabled-desc": "Affichage de toutes les notifications",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Ajouter un widget",
|
||||
"bluetooth-auto-connect-off": "Connexion automatique désactivée — cliquez pour activer",
|
||||
"bluetooth-auto-connect-on": "Connexion automatique activée — cliquez pour désactiver",
|
||||
"auto-connect": "Activer/désactiver la connexion automatique pour cet appareil",
|
||||
"bluetooth-auto-connect-off": "Connexion automatique désactivée",
|
||||
"bluetooth-auto-connect-on": "Connexion automatique activée",
|
||||
"bluetooth-devices": "Appareils Bluetooth",
|
||||
"brightness-at": "Luminosité : {brightness}%",
|
||||
"click-to-start-recording": "Enregistreur d'écran (démarrer l'enregistrement)",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "A vizualizátor színe.",
|
||||
"color-name-label": "Kitöltési szín",
|
||||
"height-description": "Egyéni komponensszélesség.",
|
||||
"hide-when-idle-description": "Ha engedélyezve van, a vizualizátor el van rejtve, kivéve, ha egy lejátszó aktívan játszik.",
|
||||
"hide-when-idle-label": "Elrejtés, ha nincs média lejátszva",
|
||||
"width-description": "Egyéni komponens szélessége."
|
||||
@@ -61,7 +62,7 @@
|
||||
"hide-if-not-detected-label": "Elrejtés, ha nincs észlelve",
|
||||
"low-battery-threshold-label": "Alacsony akkumulátor töltöttségi figyelmeztetési küszöb",
|
||||
"show-noctalia-performance-description": "A Noctalia teljesítménymód kapcsoló megjelenítése az akkumulátor panelen belül.<br>Letiltja az árnyékokat és animációkat a Noctaliaban az erőforrásfelhasználás csökkentése érdekében.",
|
||||
"show-noctalia-performance-label": "Noctalia teljesítménymód kapcsoló",
|
||||
"show-noctalia-performance-label": "Noctalia Teljesítmény kapcsoló megjelenítése",
|
||||
"show-power-profile-description": "Az energiaprofil kiválasztásának megjelenítése az akkumulátor panelen belül.",
|
||||
"show-power-profile-label": "Energiaprofil vezérlők"
|
||||
},
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "Fókuszált munkaterület színe",
|
||||
"follow-focused-screen-description": "Munkaterületek megjelenítése az aktuálisan fókuszált képernyőről, nem arról a képernyőről, ahol a sáv található.",
|
||||
"follow-focused-screen-label": "Fókuszált képernyő követése",
|
||||
"font-weight-description": "Állítsa be a szöveg vizuális súlyát a munkaterületen belül.",
|
||||
"font-weight-label": "Betűvastagság",
|
||||
"grouped-border-opacity-description": "A munkaterület-konténerek szegélyeinek átlátszósági szintjének beállítása.",
|
||||
"grouped-border-opacity-label": "Szegély átlátszósága",
|
||||
"hide-unoccupied-description": "Ne jelenítse meg az ablak nélküli munkaterületeket.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Hozzáadás",
|
||||
"appearance": "Megjelenés",
|
||||
"apply": "Alkalmazás",
|
||||
"auto-connect": "Automatikus csatlakozás",
|
||||
"automation": "Automatizálás",
|
||||
"available": "Elérhető",
|
||||
"back": "Vissza",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Végrehajtás",
|
||||
"faithful": "Hűséges",
|
||||
"focus": "Fókusz",
|
||||
"font-weight-bold": "Félkövér",
|
||||
"font-weight-light": "Vékony",
|
||||
"font-weight-medium": "Közepes",
|
||||
"font-weight-regular": "Normál",
|
||||
"font-weight-semibold": "Félkövér",
|
||||
"frequency": "Frekvencia",
|
||||
"gateway": "Átjáró",
|
||||
"general": "Általános",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Panelek",
|
||||
"password": "Jelszó",
|
||||
"pause": "Szünet",
|
||||
"performance": "Teljesítmény",
|
||||
"pin": "Rögzítés",
|
||||
"play": "Lejátszás",
|
||||
"polling": "Lekérdezés",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "Hibakeresési mód letiltva",
|
||||
"debug-enabled": "Hibakeresési mód engedélyezve",
|
||||
"info-copied": "Információ a vágólapra másolva",
|
||||
"noctalia-available": "Elérhető:",
|
||||
"noctalia-desc": "Egy elegáns és minimalista asztali felület, Waylandra tervezve, Quickshell-en alapulva.",
|
||||
"noctalia-git-commit": "Git commit:",
|
||||
"noctalia-installed-version": "Telepített verzió:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "Hatalmas köszönet csodálatos támogatóinknak!",
|
||||
"supporters-desc-plural": "Hatalmas köszönet a <b>{count} csodálatos</b> támogatóinknak!",
|
||||
"supporters-loading": "Támogatók betöltése...",
|
||||
"system-board": "Alaplap:",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Lemez:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1016,7 +1028,7 @@
|
||||
"media-player-enabled-description": "Médiaplayer widget megjelenítése az asztalon.",
|
||||
"media-player-enabled-label": "Médiaplayer widget engedélyezése",
|
||||
"media-player-rounded-corners-description": "Engedélyezi a lekerekített sarkokat a widget szélein.",
|
||||
"media-player-show-album-art-description": "Mutasd az album borítóját és a számok adatait (cím és előadó).",
|
||||
"media-player-show-album-art-description": "Az album borítójának és a számok adatainak (cím és előadó) megjelenítése.",
|
||||
"media-player-show-album-art-label": "Album borító és cím megjelenítése",
|
||||
"media-player-show-background-description": "Jelenítse meg a média lejátszó widget háttérkonténerét.",
|
||||
"media-player-show-buttons-description": "Médiavezérlő gombok (lejátszás/szünet, előző, következő) megjelenítése a média lejátszó widgeten.",
|
||||
@@ -1089,7 +1101,7 @@
|
||||
"appearance-display-auto-hide": "Automatikus elrejtés",
|
||||
"appearance-display-description": "A dokk viselkedése.",
|
||||
"appearance-display-exclusive": "Exkluzív",
|
||||
"appearance-dock-indicator-description": "Mutass egy kis jelzőt, amikor a dokk rejtve van.",
|
||||
"appearance-dock-indicator-description": "Egy kis jelző megjelenítése, amikor a dokk rejtve van.",
|
||||
"appearance-dock-indicator-label": "Dokk jelző",
|
||||
"appearance-floating-distance-description": "A dokk és a képernyő széle közötti távolság.",
|
||||
"appearance-floating-distance-label": "Dokk lebegési távolság",
|
||||
@@ -1311,7 +1323,7 @@
|
||||
"settings-position-description": "Hol jelenjen meg az indító panel.",
|
||||
"settings-show-categories-description": "Kategóriafülek megjelenítése az alkalmazások szűréséhez.",
|
||||
"settings-show-categories-label": "Kategóriák megjelenítése",
|
||||
"settings-show-icon-background-description": "Ikonok mögött lekerekített téglalap hátteret mutass.",
|
||||
"settings-show-icon-background-description": "Ikonok mögötti lekerekített téglalap háttér megjelenítése.",
|
||||
"settings-show-icon-background-label": "Ikon háttér megjelenítése",
|
||||
"settings-sort-by-usage-description": "Ha engedélyezve van, a gyakran indított alkalmazások jelennek meg először a listán.",
|
||||
"settings-sort-by-usage-label": "Rendezés gyakoriság szerint",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "Gyorsbillentyű tippek megjelenítése a munkamenet-opcióknál.",
|
||||
"show-keybinds-label": "Gyorsbillentyűk megjelenítése"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Tartsa láthatóan az asztali widgeteket, amíg a Noctalia teljesítmény mód engedélyezve van.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Engedélyezze az asztali widgeteket teljesítmény módban",
|
||||
"noctalia-performance-disable-wallpaper-description": "Tartsa láthatóan az asztali, áttekintő és zárolási képernyő háttérképeket, amíg a Noctalia teljesítmény mód engedélyezve van.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Engedélyezze a háttérkép renderelését teljesítmény módban",
|
||||
"title": "Rendszer"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Kritikus szín",
|
||||
"custom-highlight-colors-title-label": "Egyéni kiemelőszínek",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "Lekérdezési intervallum",
|
||||
"polling-section-description": "Milyen gyakran frissüljenek az egyes rendszer metrikák.",
|
||||
"polling-section-label": "Lekérdezési időközök",
|
||||
"threshold-critical": "Kritikus küszöb",
|
||||
"threshold-warning": "Figyelmeztetési küszöb",
|
||||
"threshold-critical": "Kritikus",
|
||||
"threshold-warning": "Figyelmeztetés",
|
||||
"thresholds-section-description": "A figyelmeztetési/kritikus küszöbértékek és a lekérdezési intervallumok minden rendszermutatóhoz.",
|
||||
"use-custom-highlight-colors-description": "Ha le van tiltva, a téma alapértelmezett kiemelőszínei kerülnek használatra.",
|
||||
"use-custom-highlight-colors-label": "Egyéni kiemelőszínek használata",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "Animációs sebesség",
|
||||
"animation-speed-reset": "Animációs sebesség visszaállítása",
|
||||
"appearance-desc": "Testreszabhatod a vizuális elemeket, például az eszköztippeket, a szegélyeket és az árnyékokat.",
|
||||
"blur-behind-description": "Elhomályosítja a sávok és panelek mögötti területet a kompozitor elmosási protokolljának használatával.",
|
||||
"blur-behind-label": "Háttér elmosása",
|
||||
"box-border-description": "Tartalomterületek köré vázlatot jelenít meg.",
|
||||
"box-border-label": "Konténer körvonal",
|
||||
"box-border-radius-description": "A fő elrendezési szakaszok (például oldalsávok, kártyák és tartalompanelek) saroklekerekítése.",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "A vágólapelőzmények nem elérhetők",
|
||||
"unavailable-desc": "A 'cliphist' alkalmazás nincs telepítve. Telepítsd a vágólapelőzmények funkcióinak használatához"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "A parancs sikertelen: {command}\\nKilépési kód: {code}",
|
||||
"title": "Egyéni parancs sikertelen"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "Ne zavarjanak letiltása",
|
||||
"disabled-desc": "Minden értesítés megjelenítése",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Widget hozzáadása",
|
||||
"bluetooth-auto-connect-off": "Az automatikus csatlakozás ki van kapcsolva — kattints az engedélyezéshez",
|
||||
"bluetooth-auto-connect-on": "Automatikus csatlakozás bekapcsolva — kattintson a kikapcsoláshoz",
|
||||
"auto-connect": "Automatikus csatlakozás váltása ehhez az eszközhöz",
|
||||
"bluetooth-auto-connect-off": "Automatikus csatlakozás kikapcsolva",
|
||||
"bluetooth-auto-connect-on": "Automatikus csatlakozás engedélyezve",
|
||||
"bluetooth-devices": "Bluetooth eszközök",
|
||||
"brightness-at": "Fényerő: {brightness}%",
|
||||
"click-to-start-recording": "Képernyőfelvevő (felvétel indítása)",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Seleziona il colore del visualizzatore.",
|
||||
"color-name-label": "Colore riempimento",
|
||||
"height-description": "Larghezza componente personalizzata.",
|
||||
"hide-when-idle-description": "Se attivo, il visualizzatore viene nascosto quando nessun player è in riproduzione.",
|
||||
"hide-when-idle-label": "Nascondi quando non è in riproduzione nulla",
|
||||
"width-description": "Larghezza personalizzata del componente."
|
||||
@@ -60,7 +61,7 @@
|
||||
"hide-if-not-detected-description": "Nasconde il widget quando non viene rilevata alcuna batteria nel sistema.",
|
||||
"hide-if-not-detected-label": "Nascondi se non rilevata",
|
||||
"low-battery-threshold-label": "Soglia avviso batteria scarica",
|
||||
"show-noctalia-performance-description": "Mostra l’interruttore modalità prestazioni Noctalia nel pannello batteria.<br>Disattiva ombre e animazioni in Noctalia per ridurre l’uso di risorse.",
|
||||
"show-noctalia-performance-description": "Mostra l’interruttore della modalità prestazioni Noctalia nel pannello batteria.<br>Disattiva ombre e animazioni in Noctalia per ridurre l’uso di risorse.",
|
||||
"show-noctalia-performance-label": "Mostra interruttore Noctalia Prestazioni",
|
||||
"show-power-profile-description": "Mostra la selezione del profilo energetico nel pannello batteria.",
|
||||
"show-power-profile-label": "Mostra controlli profilo energetico"
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "Colore workspace focalizzata",
|
||||
"follow-focused-screen-description": "Mostra workspace dello schermo attualmente focalizzato invece dello schermo dove si trova la barra.",
|
||||
"follow-focused-screen-label": "Segui schermo focalizzato",
|
||||
"font-weight-description": "Imposta il peso visivo per il testo all'interno dello spazio di lavoro.",
|
||||
"font-weight-label": "Peso del carattere",
|
||||
"grouped-border-opacity-description": "Imposta il livello di opacità dei bordi contenitore workspace.",
|
||||
"grouped-border-opacity-label": "Opacità bordi",
|
||||
"hide-unoccupied-description": "Non mostrare workspace senza finestre.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Aggiungi",
|
||||
"appearance": "Aspetto",
|
||||
"apply": "Applica",
|
||||
"auto-connect": "Connessione automatica",
|
||||
"automation": "Automazione",
|
||||
"available": "Disponibile",
|
||||
"back": "Indietro",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Esegui",
|
||||
"faithful": "Fedele",
|
||||
"focus": "Messa a fuoco",
|
||||
"font-weight-bold": "Grassetto",
|
||||
"font-weight-light": "Sottile",
|
||||
"font-weight-medium": "Medio",
|
||||
"font-weight-regular": "Normale",
|
||||
"font-weight-semibold": "Semibold",
|
||||
"frequency": "Frequenza",
|
||||
"gateway": "Gateway",
|
||||
"general": "Generale",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Pannelli",
|
||||
"password": "Password",
|
||||
"pause": "Pausa",
|
||||
"performance": "Prestazioni",
|
||||
"pin": "Fissa",
|
||||
"play": "Riproduci",
|
||||
"polling": "Interrogazione",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "Modalità debug disattivata",
|
||||
"debug-enabled": "Modalità debug attivata",
|
||||
"info-copied": "Info copiate negli appunti",
|
||||
"noctalia-available": "Disponibile:",
|
||||
"noctalia-desc": "Una shell desktop elegante e minimale, progettata con cura per Wayland, costruita con Quickshell.",
|
||||
"noctalia-git-commit": "Commit Git:",
|
||||
"noctalia-installed-version": "Versione installata:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "Un enorme grazie al nostro fantastico sostenitore!",
|
||||
"supporters-desc-plural": "Un enorme grazie ai nostri <b>{count} fantastici</b> sostenitori!",
|
||||
"supporters-loading": "Caricamento sostenitori...",
|
||||
"system-board": "Scheda madre:",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Disco:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1205,10 +1217,10 @@
|
||||
"noctalia-started-description": "Comando da eseguire quando Noctalia ha finito il caricamento.",
|
||||
"noctalia-started-label": "Noctalia avviata",
|
||||
"noctalia-started-placeholder": "es. notify-send 'Noctalia caricata'",
|
||||
"performance-mode-disabled-description": "Comando da eseguire quando modalità prestazioni Noctalia è disabilitata.",
|
||||
"performance-mode-disabled-description": "Comando da eseguire quando la modalità prestazioni Noctalia è disabilitata.",
|
||||
"performance-mode-disabled-label": "Modalità prestazioni disabilitata",
|
||||
"performance-mode-disabled-placeholder": "es. notify-send \"Prestazioni\" \"Modalità disabilitata\"",
|
||||
"performance-mode-enabled-description": "Comando da eseguire quando modalità prestazioni Noctalia è abilitata.",
|
||||
"performance-mode-enabled-description": "Comando da eseguire quando la modalità prestazioni Noctalia è abilitata.",
|
||||
"performance-mode-enabled-label": "Modalità prestazioni abilitata",
|
||||
"performance-mode-enabled-placeholder": "es. notify-send \"Prestazioni\" \"Modalità abilitata\"",
|
||||
"screen-lock-description": "Comando da eseguire quando lo schermo viene bloccato.",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "Mostra suggerimenti scorciatoie nelle opzioni sessione.",
|
||||
"show-keybinds-label": "Mostra scorciatoie"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Mantenere visibili i widget del desktop mentre la modalità prestazioni Noctalia è abilitato.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Abilita i widget desktop in modalità prestazioni",
|
||||
"noctalia-performance-disable-wallpaper-description": "Mantieni visibili gli sfondi del desktop, della panoramica e della schermata di blocco mentre la modalità prestazioni Noctalia è abilitato.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Abilita il rendering dello sfondo in modalità prestazioni",
|
||||
"title": "Sistema"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Colore critico",
|
||||
"custom-highlight-colors-title-label": "Colori evidenziazione personalizzati",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "Intervallo polling",
|
||||
"polling-section-description": "Configura la frequenza di aggiornamento di ogni metrica di sistema.",
|
||||
"polling-section-label": "Intervalli polling",
|
||||
"threshold-critical": "Soglia critica",
|
||||
"threshold-warning": "Soglia avviso",
|
||||
"threshold-critical": "Critico",
|
||||
"threshold-warning": "Avviso",
|
||||
"thresholds-section-description": "Regola soglie avviso/critiche per ogni metrica di sistema.",
|
||||
"use-custom-highlight-colors-description": "Quando disattivato, vengono usati i colori evidenziazione predefiniti del tema.",
|
||||
"use-custom-highlight-colors-label": "Usa colori evidenziazione personalizzati",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "Velocità animazione",
|
||||
"animation-speed-reset": "Reimposta velocità animazione",
|
||||
"appearance-desc": "Personalizza elementi visivi come tooltip, bordi e ombre.",
|
||||
"blur-behind-description": "Sfoca l'area dietro le barre e i pannelli utilizzando il protocollo di sfocatura del compositore.",
|
||||
"blur-behind-label": "Sfocatura dello sfondo",
|
||||
"box-border-description": "Mostra un contorno attorno alle aree contenuto.",
|
||||
"box-border-label": "Contorno contenitore",
|
||||
"box-border-radius-description": "Regola l’arrotondamento degli angoli delle principali sezioni layout, come sidebar, schede e pannelli contenuto.",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "Clipboard history unavailable",
|
||||
"unavailable-desc": "The 'cliphist' application is not installed. Please install it to use clipboard history features"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "Comando fallito: {command}\\nCodice di uscita: {code}",
|
||||
"title": "Comando personalizzato fallito"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "'Non disturbare' disattivato",
|
||||
"disabled-desc": "Showing all notifications",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Aggiungi widget",
|
||||
"bluetooth-auto-connect-off": "Connessione automatica disattivata — clicca per abilitare",
|
||||
"bluetooth-auto-connect-on": "Connessione automatica attiva — clicca per disabilitare",
|
||||
"auto-connect": "Attiva/disattiva la connessione automatica per questo dispositivo",
|
||||
"bluetooth-auto-connect-off": "Connessione automatica disattivata",
|
||||
"bluetooth-auto-connect-on": "Connessione automatica attiva",
|
||||
"bluetooth-devices": "Dispositivi Bluetooth",
|
||||
"brightness-at": "Luminosità: {brightness}%",
|
||||
"click-to-start-recording": "Registratore schermo (avvia registrazione)",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "ビジュアライザーの色を選択します。",
|
||||
"color-name-label": "塗りつぶし色",
|
||||
"height-description": "カスタムコンポーネントの幅。",
|
||||
"hide-when-idle-description": "有効にすると、再生中のプレーヤーがない場合にビジュアライザーを隠します。",
|
||||
"hide-when-idle-label": "メディア停止時は隠す",
|
||||
"width-description": "コンポーネントの幅をカスタム設定します。"
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "フォーカスされたワークスペースの色",
|
||||
"follow-focused-screen-description": "バーが配置されている画面ではなく、現在フォーカスされている画面のワークスペースを表示します。",
|
||||
"follow-focused-screen-label": "フォーカス中の画面に追従",
|
||||
"font-weight-description": "ワークスペース内のテキストの視覚的ウェイトを設定します。",
|
||||
"font-weight-label": "フォントの太さ",
|
||||
"grouped-border-opacity-description": "ワークスペースコンテナのボーダーの不透明度を設定します。",
|
||||
"grouped-border-opacity-label": "境界線の不透明度",
|
||||
"hide-unoccupied-description": "ウィンドウがないワークスペースを表示しません。",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "追加",
|
||||
"appearance": "外観",
|
||||
"apply": "適用",
|
||||
"auto-connect": "自動接続",
|
||||
"automation": "自動化",
|
||||
"available": "利用可能",
|
||||
"back": "戻る",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "実行",
|
||||
"faithful": "忠実",
|
||||
"focus": "集中",
|
||||
"font-weight-bold": "太字",
|
||||
"font-weight-light": "ライト",
|
||||
"font-weight-medium": "中",
|
||||
"font-weight-regular": "標準",
|
||||
"font-weight-semibold": "セミボールド",
|
||||
"frequency": "頻度",
|
||||
"gateway": "ゲートウェイ",
|
||||
"general": "一般",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "パネル",
|
||||
"password": "パスワード",
|
||||
"pause": "一時停止",
|
||||
"performance": "パフォーマンス",
|
||||
"pin": "ピン留め",
|
||||
"play": "再生",
|
||||
"polling": "ポーリング",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "デバッグモードが無効になりました",
|
||||
"debug-enabled": "デバッグモードが有効です",
|
||||
"info-copied": "クリップボードにコピーしました",
|
||||
"noctalia-available": "利用可能:",
|
||||
"noctalia-desc": "Wayland のために丁寧に作り込まれた、Quickshell 製の洗練されたミニマルなデスクトップシェル。",
|
||||
"noctalia-git-commit": "Git コミット:",
|
||||
"noctalia-installed-version": "現在のバージョン:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "素晴らしいサポーターに心からの感謝を!",
|
||||
"supporters-desc-plural": "<b>{count}名の素晴らしい</b>サポーターの皆様に心より感謝いたします!",
|
||||
"supporters-loading": "サポーターを読み込み中...",
|
||||
"system-board": "マザーボード:",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "ディスク:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "セッションオプションにキーバインドのヒントを表示する。",
|
||||
"show-keybinds-label": "キーバインドを表示"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Noctalia パフォーマンスモードが有効な間、デスクトップウィジェットを表示したままにする。",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "パフォーマンスモードでデスクトップウィジェットを有効にする",
|
||||
"noctalia-performance-disable-wallpaper-description": "Noctalia パフォーマンスモードが有効な間、デスクトップ、概要、ロック画面の壁紙を表示したままにします。",
|
||||
"noctalia-performance-disable-wallpaper-label": "パフォーマンスモードで壁紙のレンダリングを有効にする",
|
||||
"title": "システム"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "危険時の色",
|
||||
"custom-highlight-colors-title-label": "カスタムハイライト色",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "ポーリング間隔",
|
||||
"polling-section-description": "各システムメトリクスの更新頻度を設定します。",
|
||||
"polling-section-label": "ポーリング間隔",
|
||||
"threshold-critical": "危険閾値",
|
||||
"threshold-warning": "警告閾値",
|
||||
"threshold-critical": "重大",
|
||||
"threshold-warning": "警告",
|
||||
"thresholds-section-description": "各システムメトリックの警告/危険しきい値とポーリング間隔を調整します。",
|
||||
"use-custom-highlight-colors-description": "無効にすると、テーマのデフォルト強調色が使用されます。",
|
||||
"use-custom-highlight-colors-label": "カスタム強調色を使用する",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "アニメーション速度",
|
||||
"animation-speed-reset": "アニメーション速度をリセット",
|
||||
"appearance-desc": "ツールチップ、境界線、影などの視覚要素をカスタマイズします。",
|
||||
"blur-behind-description": "バーとパネルの背後の領域を、コンポジターのぼかしプロトコルを使用してぼかします。",
|
||||
"blur-behind-label": "背景ぼかし",
|
||||
"box-border-description": "コンテンツ領域の周りにアウトラインを表示します。",
|
||||
"box-border-label": "コンテナの輪郭",
|
||||
"box-border-radius-description": "サイドバー、カード、コンテンツパネルなど、主要なレイアウト部分の角の丸みを調整します。",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "クリップボード履歴を利用できません",
|
||||
"unavailable-desc": "cliphist がインストールされていません。クリップボード履歴機能を使用するにはインストールしてください"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "コマンドが失敗しました: {command}\\n終了コード: {code}",
|
||||
"title": "カスタムコマンドが失敗しました"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "おやすみモードを無効化",
|
||||
"disabled-desc": "すべての通知を表示します",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "ウィジェットを追加",
|
||||
"bluetooth-auto-connect-off": "自動接続はオフです — クリックして有効にする",
|
||||
"bluetooth-auto-connect-on": "自動接続がオンです — クリックして無効にする",
|
||||
"auto-connect": "このデバイスの自動接続を切り替える",
|
||||
"bluetooth-auto-connect-off": "自動接続が無効です",
|
||||
"bluetooth-auto-connect-on": "自動接続が有効です",
|
||||
"bluetooth-devices": "Bluetooth デバイス",
|
||||
"brightness-at": "画面の明るさ:{brightness}%",
|
||||
"click-to-start-recording": "画面録画(録画開始)",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "비주얼라이저의 색상을 선택합니다.",
|
||||
"color-name-label": "색으로 채우기",
|
||||
"height-description": "사용자 지정 구성 요소 너비.",
|
||||
"hide-when-idle-description": "활성화하면 재생기가 재생 중이지 않을 때 비주얼라이저를 숨깁니다.",
|
||||
"hide-when-idle-label": "미디어 재생 중이 아닐 때 숨기기",
|
||||
"width-description": "구성 요소의 너비를 사용자 지정합니다."
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "포커스된 작업 공간 색상",
|
||||
"follow-focused-screen-description": "바가 위치한 화면 대신 현재 포커스된 화면의 작업 공간을 표시합니다.",
|
||||
"follow-focused-screen-label": "포커스된 화면 따르기",
|
||||
"font-weight-description": "작업 공간 내 텍스트의 시각적 가중치를 설정합니다.",
|
||||
"font-weight-label": "글꼴 두께",
|
||||
"grouped-border-opacity-description": "작업 공간 컨테이너 테두리의 불투명도 수준을 설정합니다.",
|
||||
"grouped-border-opacity-label": "테두리 불투명도",
|
||||
"hide-unoccupied-description": "창이 없는 작업 공간을 표시하지 않습니다.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "추가",
|
||||
"appearance": "모양",
|
||||
"apply": "적용",
|
||||
"auto-connect": "자동 연결",
|
||||
"automation": "자동화",
|
||||
"available": "사용 가능",
|
||||
"back": "뒤로",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "실행",
|
||||
"faithful": "충실하게",
|
||||
"focus": "포커스",
|
||||
"font-weight-bold": "굵게",
|
||||
"font-weight-light": "라이트",
|
||||
"font-weight-medium": "중간",
|
||||
"font-weight-regular": "보통",
|
||||
"font-weight-semibold": "세미볼드",
|
||||
"frequency": "빈도",
|
||||
"gateway": "게이트웨이",
|
||||
"general": "일반",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "패널",
|
||||
"password": "비밀번호",
|
||||
"pause": "일시 정지",
|
||||
"performance": "성능",
|
||||
"pin": "고정",
|
||||
"play": "재생",
|
||||
"polling": "폴링",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "디버그 모드 비활성화됨",
|
||||
"debug-enabled": "디버그 모드 활성화됨",
|
||||
"info-copied": "정보가 클립보드에 복사됨",
|
||||
"noctalia-available": "사용 가능:",
|
||||
"noctalia-desc": "Wayland를 위해 세심하게 제작된 매끄럽고 미니멀한 데스크톱 셸로, Quickshell로 빌드되었습니다.",
|
||||
"noctalia-git-commit": "Git 커밋:",
|
||||
"noctalia-installed-version": "설치된 버전:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "멋진 후원자분께 진심으로 감사드립니다!",
|
||||
"supporters-desc-plural": "저희의 <b>{count}명의 멋진</b> 후원자분들께 진심으로 감사드립니다!",
|
||||
"supporters-loading": "후원자 불러오는 중...",
|
||||
"system-board": "메인보드:",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "디스크:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "세션 옵션에 키 바인딩 힌트를 표시합니다.",
|
||||
"show-keybinds-label": "단축키 표시"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Noctalia 성능 모드가 활성화된 동안 데스크톱 위젯을 계속 표시합니다.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "성능 모드에서 데스크톱 위젯 활성화",
|
||||
"noctalia-performance-disable-wallpaper-description": "Noctalia 성능 모드가 활성화된 동안 데스크톱, 개요, 잠금 화면 배경화면을 계속 표시합니다.",
|
||||
"noctalia-performance-disable-wallpaper-label": "성능 모드에서 배경화면 렌더링 활성화",
|
||||
"title": "시스템"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "위험 색상",
|
||||
"custom-highlight-colors-title-label": "사용자 지정 강조 색상",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "폴링 간격",
|
||||
"polling-section-description": "각 시스템 값을 갱신하는 빈도를 정합니다.",
|
||||
"polling-section-label": "폴링 간격",
|
||||
"threshold-critical": "위험 임계값",
|
||||
"threshold-warning": "경고 임계값",
|
||||
"threshold-critical": "심각",
|
||||
"threshold-warning": "경고",
|
||||
"thresholds-section-description": "각 시스템 값에 대한 경고/위험 임계값을 조정합니다.",
|
||||
"use-custom-highlight-colors-description": "비활성화하면 테마 기본 강조 색상이 사용됩니다.",
|
||||
"use-custom-highlight-colors-label": "사용자 지정 강조 색상 사용",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "애니메이션 속도",
|
||||
"animation-speed-reset": "애니메이션 속도 초기화",
|
||||
"appearance-desc": "툴팁, 테두리, 그림자와 같은 시각적 요소를 사용자 지정합니다.",
|
||||
"blur-behind-description": "컴포지터 블러 프로토콜을 사용하여 바와 패널 뒤 영역을 흐리게 처리합니다.",
|
||||
"blur-behind-label": "배경 흐림",
|
||||
"box-border-description": "콘텐츠 영역 주위에 윤곽선을 표시합니다.",
|
||||
"box-border-label": "컨테이너 윤곽선",
|
||||
"box-border-radius-description": "사이드바, 카드, 콘텐츠 패널과 같은 주요 레이아웃 섹션의 모서리 둥글기를 조정합니다.",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "클립보드 기록 사용 불가",
|
||||
"unavailable-desc": "'cliphist' 애플리케이션이 설치되어 있지 않습니다. 클립보드 기록 기능을 사용하려면 설치하세요"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "명령 실패: {command}\\n종료 코드: {code}",
|
||||
"title": "사용자 지정 명령 실패"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "방해 금지 모드 비활성화됨",
|
||||
"disabled-desc": "모든 알림 표시 중",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "위젯 추가",
|
||||
"bluetooth-auto-connect-off": "자동 연결이 꺼져 있습니다 — 클릭하여 활성화",
|
||||
"bluetooth-auto-connect-on": "자동 연결 켜짐 — 클릭하여 비활성화",
|
||||
"auto-connect": "이 장치의 자동 연결 토글",
|
||||
"bluetooth-auto-connect-off": "자동 연결 비활성화됨",
|
||||
"bluetooth-auto-connect-on": "자동 연결 활성화됨",
|
||||
"bluetooth-devices": "블루투스 장치",
|
||||
"brightness-at": "밝기: {brightness}%",
|
||||
"click-to-start-recording": "화면 녹화 (녹화 시작)",
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
"hide-if-not-detected-label": "Dema ku neyê dîtin veşêre",
|
||||
"low-battery-threshold-label": "Asta hişyariya betarî ya kêm",
|
||||
"show-noctalia-performance-description": "Guhêrbarê awaya performansê ya Noctalia di hundirê destgeha betariyê de nîşan bide.<br>Sî û anîmasyonan di Noctalia de neçalak dike da ku bikaranîna çavkaniyan kêm bike.",
|
||||
"show-noctalia-performance-label": "Guhêrbarê performansa Noctalia nîşan bide",
|
||||
"show-noctalia-performance-label": "Guhêrbarê Performansa Noctalia nîşan bide",
|
||||
"show-power-profile-description": "Hilbijartina profîla hêzê di hundirê destgeha betariyê de nîşan bide.",
|
||||
"show-power-profile-label": "Kontrolên profîla hêzê nîşan bide"
|
||||
},
|
||||
@@ -1614,7 +1614,7 @@
|
||||
"noctalia-performance": {
|
||||
"disabled": "Rewşa performansê hat betalkirin",
|
||||
"enabled": "Rewşa performansê çalak bû",
|
||||
"label": "Performansa Noctalîa"
|
||||
"label": "Performansa Noctalia"
|
||||
},
|
||||
"power-profile": {
|
||||
"changed": "Profîla hêzê hate guhertin",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Selecteer de kleur voor de visualizer.",
|
||||
"color-name-label": "Vulkleur",
|
||||
"height-description": "Aangepaste componentbreedte.",
|
||||
"hide-when-idle-description": "Indien ingeschakeld wordt de visualizer verborgen, tenzij een speler actief afspeelt.",
|
||||
"hide-when-idle-label": "Verbergen wanneer geen media speelt",
|
||||
"width-description": "Aangepaste componentbreedte."
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "Kleur van de gefocuste Workspace",
|
||||
"follow-focused-screen-description": "Werkruimten weergeven van het momenteel gefocuste scherm, in plaats van het scherm waar de balk zich bevindt.",
|
||||
"follow-focused-screen-label": "Gefocust scherm volgen",
|
||||
"font-weight-description": "Stel het visuele gewicht in voor tekst binnen de werkruimte.",
|
||||
"font-weight-label": "Lettertypegewicht",
|
||||
"grouped-border-opacity-description": "Stel het dekkingsniveau in voor de randen van de werkruimtecontainer.",
|
||||
"grouped-border-opacity-label": "Randdekking",
|
||||
"hide-unoccupied-description": "Werkruimten zonder vensters niet weergeven.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Toevoegen",
|
||||
"appearance": "Uiterlijk",
|
||||
"apply": "Toepassen",
|
||||
"auto-connect": "Automatisch verbinden",
|
||||
"automation": "Automatisering",
|
||||
"available": "Beschikbaar",
|
||||
"back": "Terug",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Uitvoeren",
|
||||
"faithful": "Getrouw",
|
||||
"focus": "Focus",
|
||||
"font-weight-bold": "Vet",
|
||||
"font-weight-light": "Licht",
|
||||
"font-weight-medium": "Medium",
|
||||
"font-weight-regular": "Normaal",
|
||||
"font-weight-semibold": "Semi-vet",
|
||||
"frequency": "Frequentie",
|
||||
"gateway": "Poort",
|
||||
"general": "Algemeen",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Panelen",
|
||||
"password": "Wachtwoord",
|
||||
"pause": "Pauze",
|
||||
"performance": "Prestaties",
|
||||
"pin": "Vastmaken",
|
||||
"play": "Afspelen",
|
||||
"polling": "Polling",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "Foutopsporingsmodus uitgeschakeld",
|
||||
"debug-enabled": "Foutopsporingsmodus ingeschakeld",
|
||||
"info-copied": "Info gekopieerd naar klembord",
|
||||
"noctalia-available": "Beschikbaar:",
|
||||
"noctalia-desc": "Een strakke en minimale desktopshell, met zorg gemaakt voor Wayland en gebouwd met Quickshell.",
|
||||
"noctalia-git-commit": "Git commit:",
|
||||
"noctalia-installed-version": "Geïnstalleerde versie:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "Een enorme dank aan onze geweldige supporter!",
|
||||
"supporters-desc-plural": "Enorm bedankt aan onze <b>{count} geweldige</b> supporters!",
|
||||
"supporters-loading": "Donateurs laden...",
|
||||
"system-board": "Moederbord:",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Schijf:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "Toon toetscombinatiehints bij sessie-opties.",
|
||||
"show-keybinds-label": "Toetsencombinaties weergeven"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Houd desktopwidgets zichtbaar terwijl de Noctalia prestatiemodus is ingeschakeld.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Desktopwidgets inschakelen in prestatiemodus",
|
||||
"noctalia-performance-disable-wallpaper-description": "Houd bureaublad-, overzicht- en vergrendelschermachtergronden zichtbaar terwijl de Noctalia prestatiemodus is ingeschakeld.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Achtergrondweergave inschakelen in prestatiemodus",
|
||||
"title": "Systeem"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Kritische kleur",
|
||||
"custom-highlight-colors-title-label": "Aangepaste markeerkleuren",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "Peilingsinterval",
|
||||
"polling-section-description": "Configureer hoe vaak elke systeemmetriek wordt bijgewerkt.",
|
||||
"polling-section-label": "Peilingsintervallen",
|
||||
"threshold-critical": "Kritische drempel",
|
||||
"threshold-warning": "Waarschuwingsdrempel",
|
||||
"threshold-critical": "Kritiek",
|
||||
"threshold-warning": "Waarschuwing",
|
||||
"thresholds-section-description": "Pas de waarschuwing/kritieke drempels en de pollingsintervallen voor elke systeemmetriek aan.",
|
||||
"use-custom-highlight-colors-description": "Indien uitgeschakeld, worden de standaard markeerkleuren van het thema gebruikt.",
|
||||
"use-custom-highlight-colors-label": "Gebruik aangepaste markeerkleuren",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "Animatiesnelheid",
|
||||
"animation-speed-reset": "Animatiesnelheid resetten",
|
||||
"appearance-desc": "Pas visuele elementen aan, zoals tooltips, randen en schaduwen.",
|
||||
"blur-behind-description": "Vervaagt het gebied achter balken en panelen met behulp van het compositor-blurprotocol.",
|
||||
"blur-behind-label": "Achtergrond vervagen",
|
||||
"box-border-description": "Toon een omlijning rond inhoudsgebieden.",
|
||||
"box-border-label": "Containeromtrek",
|
||||
"box-border-radius-description": "Past de hoekronding aan van belangrijke lay-outsecties, zoals zijbalken, kaarten en inhoudspanelen.",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "Klembordgeschiedenis niet beschikbaar",
|
||||
"unavailable-desc": "De toepassing 'cliphist' is niet geïnstalleerd. Installeer deze om functies voor klembordgeschiedenis te gebruiken"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "Commando mislukt: {command}\\nExitcode: {code}",
|
||||
"title": "Aangepaste opdracht mislukt"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "'Niet storen' uitgeschakeld",
|
||||
"disabled-desc": "Alle meldingen worden weergegeven",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Widget toevoegen",
|
||||
"bluetooth-auto-connect-off": "Automatisch verbinden is uitgeschakeld — klik om in te schakelen",
|
||||
"bluetooth-auto-connect-on": "Automatisch verbinden is aan — klik om uit te schakelen",
|
||||
"auto-connect": "Automatisch verbinden voor dit apparaat in-/uitschakelen",
|
||||
"bluetooth-auto-connect-off": "Automatisch verbinden uitgeschakeld",
|
||||
"bluetooth-auto-connect-on": "Automatisch verbinden ingeschakeld",
|
||||
"bluetooth-devices": "Bluetooth-apparaten",
|
||||
"brightness-at": "Helderheid: {brightness}%",
|
||||
"click-to-start-recording": "Schermrecorder (opname starten)",
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
"hide-if-not-detected-label": "Gøym når ikkje funnen",
|
||||
"low-battery-threshold-label": "Varslingsterskel for lågt batterinivå",
|
||||
"show-noctalia-performance-description": "Viser ytingsmodusbrytaren for Noctalia i batterifanen.<br>Slår av skuggar og animasjonar i Noctalia for å minka ressursbruk.",
|
||||
"show-noctalia-performance-label": "Vis ytingsmodusbrytaren for Noctalia",
|
||||
"show-noctalia-performance-label": "Vis Noctalia Yting-brytaren",
|
||||
"show-power-profile-description": "Viser veljaren for energiprofil i batterifanen.",
|
||||
"show-power-profile-label": "Vis kontrollane for energiprofil"
|
||||
},
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Wybierz kolor dla wizualizatora.",
|
||||
"color-name-label": "Kolor wypełnienia",
|
||||
"height-description": "Niestandardowa szerokość komponentu.",
|
||||
"hide-when-idle-description": "Gdy włączone, wizualizator jest ukryty, chyba że odtwarzacz jest aktywny.",
|
||||
"hide-when-idle-label": "Ukryj, gdy nic nie jest odtwarzane",
|
||||
"width-description": "Niestandardowa szerokość komponentu."
|
||||
@@ -61,7 +62,7 @@
|
||||
"hide-if-not-detected-label": "Ukryj się, jeśli nie wykryto",
|
||||
"low-battery-threshold-label": "Próg ostrzegania o niskim poziomie baterii",
|
||||
"show-noctalia-performance-description": "Wyświetl przełącznik trybu wydajności Noctalia w panelu baterii.<br>Wyłącza cienie i animacje w Noctalia, aby zmniejszyć zużycie zasobów.",
|
||||
"show-noctalia-performance-label": "Pokaż przełącznik wydajności Noctalia",
|
||||
"show-noctalia-performance-label": "Pokaż przełącznik Wydajności Noctalia",
|
||||
"show-power-profile-description": "Wyświetl wybór profilu zasilania w panelu baterii.",
|
||||
"show-power-profile-label": "Pokaż kontrolki profilu zasilania"
|
||||
},
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "Kolor aktywnego obszaru roboczego",
|
||||
"follow-focused-screen-description": "Wyświetl obszary robocze z aktualnie aktywnego ekranu, zamiast ekranu, na którym znajduje się pasek.",
|
||||
"follow-focused-screen-label": "Podążaj za skupionym ekranem",
|
||||
"font-weight-description": "Ustaw wizualną wagę tekstu w obszarze roboczym.",
|
||||
"font-weight-label": "Grubość czcionki",
|
||||
"grouped-border-opacity-description": "Ustaw poziom krycia dla obramowań kontenerów obszaru roboczego.",
|
||||
"grouped-border-opacity-label": "Krycie obramowania",
|
||||
"hide-unoccupied-description": "Nie wyświetlaj obszarów roboczych bez okien.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Dodaj",
|
||||
"appearance": "Wygląd",
|
||||
"apply": "Zastosuj",
|
||||
"auto-connect": "Automatyczne łączenie",
|
||||
"automation": "Automatyzacja",
|
||||
"available": "Dostępne",
|
||||
"back": "Powrót",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Wykonaj",
|
||||
"faithful": "Wierny",
|
||||
"focus": "Skupienie",
|
||||
"font-weight-bold": "Pogrubienie",
|
||||
"font-weight-light": "Cienka",
|
||||
"font-weight-medium": "Średni",
|
||||
"font-weight-regular": "Zwykły",
|
||||
"font-weight-semibold": "Półgruby",
|
||||
"frequency": "Częstotliwość",
|
||||
"gateway": "Brama",
|
||||
"general": "Ogólne",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Panele",
|
||||
"password": "Hasło",
|
||||
"pause": "Pauza",
|
||||
"performance": "Wydajność",
|
||||
"pin": "Przypnij",
|
||||
"play": "Odtwórz",
|
||||
"polling": "Odpytywanie",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "Tryb debugowania wyłączony",
|
||||
"debug-enabled": "Tryb debugowania włączony",
|
||||
"info-copied": "Informacje skopiowane do schowka",
|
||||
"noctalia-available": "Dostępne:",
|
||||
"noctalia-desc": "Elegancka i minimalistyczna powłoka pulpitu stworzona dla Wayland, zbudowana w Quickshell.",
|
||||
"noctalia-git-commit": "Git commit:",
|
||||
"noctalia-installed-version": "Zainstalowana wersja:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "Ogromne podziękowania dla naszego wspaniałego wspierającego!",
|
||||
"supporters-desc-plural": "Ogromne podziękowania dla naszych <b>{count} wspaniałych</b> wspierających!",
|
||||
"supporters-loading": "Ładowanie wspierających...",
|
||||
"system-board": "Płyta główna:",
|
||||
"system-cpu": "Procesor:",
|
||||
"system-disk": "Dysk:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "Wyświetl podpowiedzi skrótów klawiszowych w opcjach sesji.",
|
||||
"show-keybinds-label": "Pokaż skróty klawiszowe"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Zachowaj widoczność widżetów pulpitu, gdy tryb wydajności Noctalia jest włączony.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Włącz widżety pulpitu w trybie wydajności",
|
||||
"noctalia-performance-disable-wallpaper-description": "Zachowaj widoczne tapety pulpitu, przeglądu i ekranu blokady, gdy tryb wydajności Noctalia jest włączony.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Włącz renderowanie tapety w trybie wydajności",
|
||||
"title": "System"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Kolor krytyczny",
|
||||
"custom-highlight-colors-title-label": "Własne kolory podświetlenia",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "Interwał odświeżania",
|
||||
"polling-section-description": "Skonfiguruj, jak często każda metryka systemowa jest aktualizowana.",
|
||||
"polling-section-label": "Interwały odpytywania",
|
||||
"threshold-critical": "Próg krytyczny",
|
||||
"threshold-warning": "Próg ostrzegawczy",
|
||||
"threshold-critical": "Krytyczny",
|
||||
"threshold-warning": "Ostrzeżenie",
|
||||
"thresholds-section-description": "Dostosuj progi ostrzegawcze/krytyczne oraz interwały odświeżania dla każdej metryki systemu.",
|
||||
"use-custom-highlight-colors-description": "Gdy wyłączone, używane są domyślne kolory podświetlenia motywu.",
|
||||
"use-custom-highlight-colors-label": "Użyj własnych kolorów podświetlenia",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "Prędkość animacji",
|
||||
"animation-speed-reset": "Resetuj prędkość animacji",
|
||||
"appearance-desc": "Dostosuj elementy wizualne, takie jak podpowiedzi, obramowania i cienie.",
|
||||
"blur-behind-description": "Rozmywa obszar za paskami i panelami, używając protokołu rozmycia kompozytora.",
|
||||
"blur-behind-label": "Rozmycie tła",
|
||||
"box-border-description": "Wyświetla obrys wokół obszarów zawartości.",
|
||||
"box-border-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.",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "Historia schowka niedostępna",
|
||||
"unavailable-desc": "Aplikacja 'cliphist' nie jest zainstalowana. Zainstaluj ją, aby korzystać z historii schowka"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "Polecenie nie powiodło się: {command}\\nKod wyjścia: {code}",
|
||||
"title": "Niestandardowe polecenie nie powiodło się"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "Nie przeszkadzać wyłączone",
|
||||
"disabled-desc": "Pokazywanie wszystkich powiadomień",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Dodaj widżet",
|
||||
"bluetooth-auto-connect-off": "Automatyczne łączenie jest wyłączone — kliknij, aby włączyć",
|
||||
"bluetooth-auto-connect-on": "Automatyczne łączenie włączone — kliknij, aby wyłączyć",
|
||||
"auto-connect": "Przełącz automatyczne łączenie dla tego urządzenia",
|
||||
"bluetooth-auto-connect-off": "Automatyczne łączenie wyłączone",
|
||||
"bluetooth-auto-connect-on": "Automatyczne łączenie włączone",
|
||||
"bluetooth-devices": "Urządzenia Bluetooth",
|
||||
"brightness-at": "Jasność: {brightness}%",
|
||||
"click-to-start-recording": "Nagrywanie ekranu (start)",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Selecione a cor para o visualizador.",
|
||||
"color-name-label": "Cor de preenchimento",
|
||||
"height-description": "Largura de componente personalizada.",
|
||||
"hide-when-idle-description": "Quando ativado, o visualizador fica oculto a menos que haja reprodução ativa.",
|
||||
"hide-when-idle-label": "Ocultar quando não houver reprodução",
|
||||
"width-description": "Largura do componente personalizado."
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "Cor do workspace focado",
|
||||
"follow-focused-screen-description": "Exibir áreas de trabalho da tela atualmente em foco, em vez da tela onde a barra está localizada.",
|
||||
"follow-focused-screen-label": "Seguir tela em foco",
|
||||
"font-weight-description": "Definir o peso visual para o texto na área de trabalho.",
|
||||
"font-weight-label": "Peso da fonte",
|
||||
"grouped-border-opacity-description": "Definir o nível de opacidade para as bordas do contêiner do espaço de trabalho.",
|
||||
"grouped-border-opacity-label": "Opacidade da borda",
|
||||
"hide-unoccupied-description": "Não exibir áreas de trabalho sem janelas.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Adicionar",
|
||||
"appearance": "Aparência",
|
||||
"apply": "Aplicar",
|
||||
"auto-connect": "Conexão automática",
|
||||
"automation": "Automação",
|
||||
"available": "Disponível",
|
||||
"back": "Voltar",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Executar",
|
||||
"faithful": "Fiel",
|
||||
"focus": "Foco",
|
||||
"font-weight-bold": "Negrito",
|
||||
"font-weight-light": "Leve",
|
||||
"font-weight-medium": "Médio",
|
||||
"font-weight-regular": "Regular",
|
||||
"font-weight-semibold": "Seminegrito",
|
||||
"frequency": "Frequência",
|
||||
"gateway": "Porta de entrada",
|
||||
"general": "Geral",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Painéis",
|
||||
"password": "Senha",
|
||||
"pause": "Pausar",
|
||||
"performance": "Desempenho",
|
||||
"pin": "Fixar",
|
||||
"play": "Reproduzir",
|
||||
"polling": "Sondagem",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "Modo de depuração desativado",
|
||||
"debug-enabled": "Modo de depuração ativado",
|
||||
"info-copied": "Informação copiada para a área de transferência",
|
||||
"noctalia-available": "Disponível:",
|
||||
"noctalia-desc": "Um shell de desktop elegante e minimalista, cuidadosamente criado para Wayland, construído com Quickshell.",
|
||||
"noctalia-git-commit": "Commit Git:",
|
||||
"noctalia-installed-version": "Versão instalada:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "Um enorme obrigado ao nosso incrível apoiador!",
|
||||
"supporters-desc-plural": "Um enorme obrigado aos nossos <b>{count} incríveis</b> apoiadores!",
|
||||
"supporters-loading": "Carregando apoiadores...",
|
||||
"system-board": "Placa-mãe:",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Disco:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "Exibir dicas de atalhos de teclado nas opções de sessão.",
|
||||
"show-keybinds-label": "Mostrar atalhos de teclado"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Manter os widgets da área de trabalho visíveis enquanto o modo de desempenho Noctalia estiver ativado.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Ativar widgets de ambiente de trabalho no modo de desempenho",
|
||||
"noctalia-performance-disable-wallpaper-description": "Mantenha os papéis de parede da área de trabalho, da visão geral e da tela de bloqueio visíveis enquanto o modo de desempenho Noctalia estiver ativado.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Ativar renderização de papel de parede no modo de desempenho",
|
||||
"title": "Sistema"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Cor crítica",
|
||||
"custom-highlight-colors-title-label": "Cores de destaque personalizadas",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "Intervalo de pesquisa",
|
||||
"polling-section-description": "Configure a frequência com que cada métrica do sistema é atualizada.",
|
||||
"polling-section-label": "Intervalos de pesquisa",
|
||||
"threshold-critical": "Limiar crítico",
|
||||
"threshold-warning": "Limite de alerta",
|
||||
"threshold-critical": "Crítico",
|
||||
"threshold-warning": "Aviso",
|
||||
"thresholds-section-description": "Ajuste os limites de aviso/crítico e os intervalos de consulta para cada métrica do sistema.",
|
||||
"use-custom-highlight-colors-description": "Quando desativado, são usadas as cores de destaque padrão do tema.",
|
||||
"use-custom-highlight-colors-label": "Usar cores de destaque personalizadas",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "Velocidade da animação",
|
||||
"animation-speed-reset": "Redefinir velocidade da animação",
|
||||
"appearance-desc": "Personalize elementos visuais como dicas de ferramentas, bordas e sombras.",
|
||||
"blur-behind-description": "Desfoca a área atrás das barras e painéis usando o protocolo de desfoque do compositor.",
|
||||
"blur-behind-label": "Desfoque de fundo",
|
||||
"box-border-description": "Exibe um contorno ao redor das áreas de conteúdo.",
|
||||
"box-border-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.",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "Histórico da área de transferência indisponível",
|
||||
"unavailable-desc": "O aplicativo 'cliphist' não está instalado. Por favor, instale-o para usar os recursos do histórico da área de transferência"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "Comando falhou: {command}\\nCódigo de saída: {code}",
|
||||
"title": "Comando personalizado falhou"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "'Não perturbe' desativado",
|
||||
"disabled-desc": "Mostrando todas as notificações",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Adicionar widget",
|
||||
"bluetooth-auto-connect-off": "Conexão automática desativada — clique para ativar",
|
||||
"bluetooth-auto-connect-on": "Conexão automática ativada — clique para desativar",
|
||||
"auto-connect": "Alternar conexão automática para este dispositivo",
|
||||
"bluetooth-auto-connect-off": "Conexão automática desativada",
|
||||
"bluetooth-auto-connect-on": "Conexão automática ativada",
|
||||
"bluetooth-devices": "Dispositivos Bluetooth",
|
||||
"brightness-at": "Brilho: {brightness}%",
|
||||
"click-to-start-recording": "Gravador de tela (iniciar gravação)",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Выберите цвет для визуализатора.",
|
||||
"color-name-label": "Цвет заливки",
|
||||
"height-description": "Пользовательская ширина компонента.",
|
||||
"hide-when-idle-description": "Если включено, визуализатор скрыт, пока плеер не начнёт воспроизведение.",
|
||||
"hide-when-idle-label": "Скрывать, когда медиа не воспроизводится",
|
||||
"width-description": "Пользовательская ширина компонента."
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "Цвет активного рабочего пространства",
|
||||
"follow-focused-screen-description": "Отображать рабочие пространства с текущего активного экрана, а не с экрана, на котором расположена панель.",
|
||||
"follow-focused-screen-label": "Следовать за активным экраном",
|
||||
"font-weight-description": "Установить визуальный вес текста в рабочем пространстве.",
|
||||
"font-weight-label": "Толщина шрифта",
|
||||
"grouped-border-opacity-description": "Установить уровень прозрачности для границ контейнера рабочей области.",
|
||||
"grouped-border-opacity-label": "Прозрачность границы",
|
||||
"hide-unoccupied-description": "Не отображать рабочие пространства без окон.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Добавить",
|
||||
"appearance": "Внешний вид",
|
||||
"apply": "Применить",
|
||||
"auto-connect": "Автоматическое подключение",
|
||||
"automation": "Автоматизация",
|
||||
"available": "Доступно",
|
||||
"back": "Назад",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Выполнить",
|
||||
"faithful": "Верный",
|
||||
"focus": "Фокус",
|
||||
"font-weight-bold": "Жирный",
|
||||
"font-weight-light": "Тонкий",
|
||||
"font-weight-medium": "Средний",
|
||||
"font-weight-regular": "Обычный",
|
||||
"font-weight-semibold": "Полужирный",
|
||||
"frequency": "Частота",
|
||||
"gateway": "Шлюз",
|
||||
"general": "Общее",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Панели",
|
||||
"password": "Пароль",
|
||||
"pause": "Пауза",
|
||||
"performance": "Производительность",
|
||||
"pin": "Закрепить",
|
||||
"play": "Воспроизвести",
|
||||
"polling": "Опрашивание",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "Режим отладки отключен",
|
||||
"debug-enabled": "Режим отладки включен",
|
||||
"info-copied": "Информация скопирована в буфер обмена",
|
||||
"noctalia-available": "Доступно:",
|
||||
"noctalia-desc": "Изящная и минималистичная оболочка рабочего стола, тщательно разработанная для Wayland, созданная с помощью Quickshell.",
|
||||
"noctalia-git-commit": "Git коммит:",
|
||||
"noctalia-installed-version": "Установленная версия:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "Огромное спасибо нашему замечательному стороннику!",
|
||||
"supporters-desc-plural": "Огромное спасибо нашим <b>{count} замечательным</b> сторонникам!",
|
||||
"supporters-loading": "Загрузка спонсоров...",
|
||||
"system-board": "Материнская плата:",
|
||||
"system-cpu": "ЦП:",
|
||||
"system-disk": "Диск:",
|
||||
"system-gpu": "Графический процессор",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "Отображать подсказки по горячим клавишам в параметрах сеанса.",
|
||||
"show-keybinds-label": "Показать сочетания клавиш"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Оставлять виджеты рабочего стола видимыми, пока режим производительности Noctalia включен.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Включить виджеты рабочего стола в режиме производительности",
|
||||
"noctalia-performance-disable-wallpaper-description": "Сохраняйте видимыми обои рабочего стола, обзора и экрана блокировки, пока режим производительности Noctalia включен.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Включить рендеринг обоев в режиме производительности",
|
||||
"title": "Система"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Критический цвет",
|
||||
"custom-highlight-colors-title-label": "Пользовательские цвета выделения",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "Интервал опроса",
|
||||
"polling-section-description": "Настройте частоту обновления каждой системной метрики.",
|
||||
"polling-section-label": "Интервалы опроса",
|
||||
"threshold-critical": "Критический порог",
|
||||
"threshold-warning": "Предупредительный порог",
|
||||
"threshold-critical": "Критический",
|
||||
"threshold-warning": "Предупреждение",
|
||||
"thresholds-section-description": "Настройте пороги предупреждения/критические пороги и интервалы опроса для каждой системной метрики.",
|
||||
"use-custom-highlight-colors-description": "Если отключено, используются цвета выделения по умолчанию темы.",
|
||||
"use-custom-highlight-colors-label": "Использовать пользовательские цвета выделения",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "Скорость анимации",
|
||||
"animation-speed-reset": "Сбросить скорость анимации",
|
||||
"appearance-desc": "Настройте визуальные элементы, такие как всплывающие подсказки, границы и тени.",
|
||||
"blur-behind-description": "Размывает область за панелями и всплывающими окнами, используя протокол размытия композитора.",
|
||||
"blur-behind-label": "Размытие фона",
|
||||
"box-border-description": "Отображает контур вокруг областей содержимого.",
|
||||
"box-border-label": "Контур контейнера",
|
||||
"box-border-radius-description": "Настраивает скругление углов основных разделов макета, таких как боковые панели, карточки и панели контента.",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "История буфера обмена недоступна",
|
||||
"unavailable-desc": "Приложение 'cliphist' не установлено. Пожалуйста, установите его, чтобы использовать функции истории буфера обмена"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "Команда не выполнена: {command}\\nКод выхода: {code}",
|
||||
"title": "Пользовательская команда не выполнена"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "Режим 'Не беспокоить' отключен",
|
||||
"disabled-desc": "Отображаются все уведомления",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Добавить виджет",
|
||||
"bluetooth-auto-connect-off": "Автоподключение отключено — нажмите, чтобы включить",
|
||||
"bluetooth-auto-connect-on": "Автоподключение включено — нажмите, чтобы отключить",
|
||||
"auto-connect": "Переключить автоподключение для этого устройства",
|
||||
"bluetooth-auto-connect-off": "Автоподключение отключено",
|
||||
"bluetooth-auto-connect-on": "Автоподключение включено",
|
||||
"bluetooth-devices": "Устройства Bluetooth",
|
||||
"brightness-at": "Яркость: {brightness}%",
|
||||
"click-to-start-recording": "Запись экрана (начать запись)",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Välj färg för visualiseraren.",
|
||||
"color-name-label": "Fyllningsfärg",
|
||||
"height-description": "Anpassad komponentbredd.",
|
||||
"hide-when-idle-description": "När denna funktion är aktiverad döljs visualiseraren om ingen spelare är aktiv.",
|
||||
"hide-when-idle-label": "Dölj när ingen media spelas upp",
|
||||
"width-description": "Anpassad komponentbredd."
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "Fokuserad arbetsområdesfärg",
|
||||
"follow-focused-screen-description": "Visa arbetsområden från den skärm som för närvarande är fokuserad, snarare än den skärm där fältet finns.",
|
||||
"follow-focused-screen-label": "Följ fokuserad skärm",
|
||||
"font-weight-description": "Ställ in den visuella vikten för text inom arbetsytan.",
|
||||
"font-weight-label": "Teckensnittsvikt",
|
||||
"grouped-border-opacity-description": "Ställ in opacitetsnivån för arbetsytans behållargränser.",
|
||||
"grouped-border-opacity-label": "Ramopacitet",
|
||||
"hide-unoccupied-description": "Visa inte arbetsytor utan fönster.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Lägg till",
|
||||
"appearance": "Utseende",
|
||||
"apply": "Tillämpa",
|
||||
"auto-connect": "Automatisk anslutning",
|
||||
"automation": "Automation",
|
||||
"available": "Tillgänglig",
|
||||
"back": "Tillbaka",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Exekvera",
|
||||
"faithful": "Trogen",
|
||||
"focus": "Fokus",
|
||||
"font-weight-bold": "Fet",
|
||||
"font-weight-light": "Lätt",
|
||||
"font-weight-medium": "Mellan",
|
||||
"font-weight-regular": "Vanlig",
|
||||
"font-weight-semibold": "Halvfet",
|
||||
"frequency": "Frekvens",
|
||||
"gateway": "Gateway",
|
||||
"general": "Allmänt",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Paneler",
|
||||
"password": "Lösenord",
|
||||
"pause": "Paus",
|
||||
"performance": "Prestanda",
|
||||
"pin": "Fäst",
|
||||
"play": "Spela upp",
|
||||
"polling": "Pollning",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "Felsökningsläge inaktiverat",
|
||||
"debug-enabled": "Felsökningsläge aktiverat",
|
||||
"info-copied": "Info kopierad till urklipp",
|
||||
"noctalia-available": "Tillgänglig:",
|
||||
"noctalia-desc": "Ett elegant och minimalistiskt skrivbordsskal som är noggrant utformat för Wayland och byggt med Quickshell.",
|
||||
"noctalia-git-commit": "Git-commit:",
|
||||
"noctalia-installed-version": "Installerad version:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "Ett stort tack till vår fantastiska supporter!",
|
||||
"supporters-desc-plural": "Ett stort tack till våra <b>{count} fantastiska</b> supportrar!",
|
||||
"supporters-loading": "Laddar supportrar...",
|
||||
"system-board": "Moderkort:",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Disk:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "Visa kortkommando-tips på sessionsalternativ.",
|
||||
"show-keybinds-label": "Visa kortkommandon"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Håll skrivbordswidgets synliga medan Noctalia prestandaläget är aktiverat.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Aktivera skrivbordswidgetar i prestandaläge",
|
||||
"noctalia-performance-disable-wallpaper-description": "Behåll skrivbords-, översikts- och låsskärmsbakgrundsbilder synliga när Noctalia prestandaläget är aktiverat.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Aktivera bakgrundsbildsåtergivning i prestandaläge",
|
||||
"title": "System"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Kritisk färg",
|
||||
"custom-highlight-colors-title-label": "Anpassade markeringsfärger",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "Pollningsintervall",
|
||||
"polling-section-description": "Konfigurera hur ofta varje systemmetrik uppdateras.",
|
||||
"polling-section-label": "Pollningsintervall",
|
||||
"threshold-critical": "Kritisk tröskel",
|
||||
"threshold-warning": "Varningsgräns",
|
||||
"threshold-critical": "Kritisk",
|
||||
"threshold-warning": "Varning",
|
||||
"thresholds-section-description": "Justera varnings-/kritiska trösklar för varje systemmetrik.",
|
||||
"use-custom-highlight-colors-description": "När denna funktion är inaktiverad används standardfärgerna för markeringar. ",
|
||||
"use-custom-highlight-colors-label": "Använd anpassade markeringsfärger",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "Animationshastighet",
|
||||
"animation-speed-reset": "Återställ animationshastighet",
|
||||
"appearance-desc": "Anpassa visuella element som verktygstips, kantlinjer och skuggor.",
|
||||
"blur-behind-description": "Suddar ut området bakom fält och paneler med hjälp av kompositorns suddighetsprotokoll.",
|
||||
"blur-behind-label": "Bakgrundsoskärpa",
|
||||
"box-border-description": "Visa en kontur runt innehållsområden.",
|
||||
"box-border-label": "Behållarkontur",
|
||||
"box-border-radius-description": "Justerar hörnrundningen för större layoutsektioner, såsom sidofält, kort och innehållspaneler.",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "Urklippshistorik otillgänglig",
|
||||
"unavailable-desc": "Applikationen 'cliphist' är inte installerad. Installera den för att kunna använda klippbordshistorikfunktionerna"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "Kommando misslyckades: {command}\\nAvslutningskod: {code}",
|
||||
"title": "Anpassat kommando misslyckades"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "'Stör inte' inaktiverat",
|
||||
"disabled-desc": "Visar alla aviseringar",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Lägg till widget",
|
||||
"bluetooth-auto-connect-off": "Automatisk anslutning är avstängd — klicka för att aktivera",
|
||||
"bluetooth-auto-connect-on": "Automatisk anslutning är på — klicka för att inaktivera",
|
||||
"auto-connect": "Växla automatisk anslutning för denna enhet",
|
||||
"bluetooth-auto-connect-off": "Automatisk anslutning inaktiverad",
|
||||
"bluetooth-auto-connect-on": "Automatisk anslutning aktiverad",
|
||||
"bluetooth-devices": "Bluetooth-enheter",
|
||||
"brightness-at": "Ljusstyrka: {brightness}%",
|
||||
"click-to-start-recording": "Skärminspelare (starta inspelning)",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Görselleştirici için renk seçin.",
|
||||
"color-name-label": "Dolgu rengi",
|
||||
"height-description": "Özel bileşen genişliği.",
|
||||
"hide-when-idle-description": "Etkinleştirildiğinde, çalar aktif bir şekilde çalmadığı sürece görselleştirici gizlidir.",
|
||||
"hide-when-idle-label": "Boşken gizle",
|
||||
"width-description": "Özel bileşen genişliği."
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "Odaklanılan çalışma alanı rengi",
|
||||
"follow-focused-screen-description": "Çubuğun bulunduğu ekran yerine, şu anda odaklanmış ekrandaki çalışma alanlarını göster.",
|
||||
"follow-focused-screen-label": "Odaklanmış ekranı takip et",
|
||||
"font-weight-description": "Çalışma alanı içindeki metin için görsel ağırlığı ayarlayın.",
|
||||
"font-weight-label": "Yazı tipi ağırlığı",
|
||||
"grouped-border-opacity-description": "Çalışma alanı kapsayıcı kenarlıklarının opaklık düzeyini ayarlayın.",
|
||||
"grouped-border-opacity-label": "Kenarlık opaklığı",
|
||||
"hide-unoccupied-description": "Penceresi olmayan çalışma alanlarını gösterme.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Ekle",
|
||||
"appearance": "Görünüm",
|
||||
"apply": "Uygula",
|
||||
"auto-connect": "Otomatik bağlan",
|
||||
"automation": "Otomasyon",
|
||||
"available": "Mevcut",
|
||||
"back": "Geri",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Yürüt",
|
||||
"faithful": "Sadık",
|
||||
"focus": "Odaklanma",
|
||||
"font-weight-bold": "Kalın",
|
||||
"font-weight-light": "İnce",
|
||||
"font-weight-medium": "Orta",
|
||||
"font-weight-regular": "Normal",
|
||||
"font-weight-semibold": "Yarı kalın",
|
||||
"frequency": "Sıklık",
|
||||
"gateway": "Geçit",
|
||||
"general": "Genel",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Paneller",
|
||||
"password": "Şifre",
|
||||
"pause": "Duraklat",
|
||||
"performance": "Performans",
|
||||
"pin": "Sabitle",
|
||||
"play": "Oynat",
|
||||
"polling": "Yoklama",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "Hata ayıklama modu devre dışı bırakıldı",
|
||||
"debug-enabled": "Hata ayıklama modu etkinleştirildi",
|
||||
"info-copied": "Bilgi panoya kopyalandı",
|
||||
"noctalia-available": "Mevcut:",
|
||||
"noctalia-desc": "Wayland için düşünülmüş, Quickshell ile inşa edilmiş şık ve minimal masaüstü kabuğu.",
|
||||
"noctalia-git-commit": "Git commit:",
|
||||
"noctalia-installed-version": "Yüklü sürüm:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "Harika destekçimize kocaman bir teşekkür!",
|
||||
"supporters-desc-plural": "<b>{count} harika</b> destekçimize kocaman teşekkürler!",
|
||||
"supporters-loading": "Destekçiler yükleniyor...",
|
||||
"system-board": "Anakart:",
|
||||
"system-cpu": "İşlemci:",
|
||||
"system-disk": "Disk:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "Oturum seçeneklerinde tuş kombinasyonu ipuçlarını görüntüle.",
|
||||
"show-keybinds-label": "Klavye kısayollarını göster"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Noctalia performans modu etkinleştirildiğinde masaüstü widget'larını görünür tut.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Performans modunda masaüstü widget'larını etkinleştir",
|
||||
"noctalia-performance-disable-wallpaper-description": "Noctalia performans modu etkinleştirildiğinde masaüstü, genel bakış ve kilit ekranı duvar kağıtlarını görünür tutun.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Performans modunda duvar kağıdı oluşturmayı etkinleştir",
|
||||
"title": "Sistem"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Kritik renk",
|
||||
"custom-highlight-colors-title-label": "Özel vurgulama renkleri",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "Yoklama aralığı",
|
||||
"polling-section-description": "Her bir sistem metriğinin ne sıklıkta güncelleneceğini yapılandırın.",
|
||||
"polling-section-label": "Yoklama aralıkları",
|
||||
"threshold-critical": "Kritik eşik",
|
||||
"threshold-warning": "Uyarı eşiği",
|
||||
"threshold-critical": "Kritik",
|
||||
"threshold-warning": "Uyarı",
|
||||
"thresholds-section-description": "Her sistem ölçüsü için uyarı/kritik eşiklerini ve yoklama aralıklarını ayarlayın.",
|
||||
"use-custom-highlight-colors-description": "Devre dışı bırakıldığında, tema varsayılan vurgulama renkleri kullanılır.",
|
||||
"use-custom-highlight-colors-label": "Özel vurgulama renklerini kullan",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "Animasyon hızı",
|
||||
"animation-speed-reset": "Animasyon hızını sıfırla",
|
||||
"appearance-desc": "Araç ipuçları, kenarlıklar ve gölgeler gibi görsel öğeleri özelleştirin.",
|
||||
"blur-behind-description": "Çubukların ve panellerin arkasındaki alanı kompozitör bulanıklık protokolünü kullanarak bulanıklaştırır.",
|
||||
"blur-behind-label": "Arka plan bulanıklığı",
|
||||
"box-border-description": "İçerik alanlarının etrafında bir çerçeve görüntüler.",
|
||||
"box-border-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.",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "Panoya geçmişi kullanılamıyor",
|
||||
"unavailable-desc": "'cliphist' uygulaması kurulu değil. Lütfen panoya geçmişi özelliklerini kullanmak için kurun"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "Komut başarısız oldu: {command}\\nÇıkış kodu: {code}",
|
||||
"title": "Özel komut başarısız oldu"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "'Rahatsız etme' devre dışı",
|
||||
"disabled-desc": "Tüm bildirimler gösteriliyor",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Araç takımı ekle",
|
||||
"bluetooth-auto-connect-off": "Otomatik bağlantı kapalı — etkinleştirmek için tıklayın",
|
||||
"bluetooth-auto-connect-on": "Otomatik bağlantı açık — devre dışı bırakmak için tıklayın",
|
||||
"auto-connect": "Bu cihaz için otomatik bağlanmayı aç/kapa",
|
||||
"bluetooth-auto-connect-off": "Otomatik bağlanma kapalı",
|
||||
"bluetooth-auto-connect-on": "Otomatik bağlanma açık",
|
||||
"bluetooth-devices": "Bluetooth cihazları",
|
||||
"brightness-at": "Parlaklık: %{brightness}",
|
||||
"click-to-start-recording": "Ekran kaydedici (kaydı başlat)",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Вибрати колір для візуалізатора.",
|
||||
"color-name-label": "Колір заповнення",
|
||||
"height-description": "Користувацька ширина компонента.",
|
||||
"hide-when-idle-description": "Коли увімкнено, візуалізатор приховано, якщо плеєр активно не відтворює.",
|
||||
"hide-when-idle-label": "Приховати, коли медіа не відтворюється",
|
||||
"width-description": "Власна ширина компонента."
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "Колір сфокусованого робочого столу",
|
||||
"follow-focused-screen-description": "Відображати робочі простори з поточного активного екрана, а не з екрана, на якому розташована панель.",
|
||||
"follow-focused-screen-label": "Слідувати за активним екраном",
|
||||
"font-weight-description": "Встановити візуальну вагу тексту в робочому просторі.",
|
||||
"font-weight-label": "Товщина шрифту",
|
||||
"grouped-border-opacity-description": "Встановити рівень непрозорості для меж контейнерів робочої області.",
|
||||
"grouped-border-opacity-label": "Прозорість межі",
|
||||
"hide-unoccupied-description": "Не відображати робочі простори без вікон.",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "Додати",
|
||||
"appearance": "Зовнішній вигляд",
|
||||
"apply": "Подати заявку",
|
||||
"auto-connect": "Автоматичне підключення",
|
||||
"automation": "Автоматизація",
|
||||
"available": "Доступний",
|
||||
"back": "Назад",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "Виконати",
|
||||
"faithful": "Вірний",
|
||||
"focus": "Зосередженість",
|
||||
"font-weight-bold": "Жирний",
|
||||
"font-weight-light": "Тонкий",
|
||||
"font-weight-medium": "Середній",
|
||||
"font-weight-regular": "Звичайний",
|
||||
"font-weight-semibold": "Напівжирний",
|
||||
"frequency": "Частота",
|
||||
"gateway": "Шлюз",
|
||||
"general": "Загальне",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "Панелі",
|
||||
"password": "Пароль",
|
||||
"pause": "Пауза",
|
||||
"performance": "Продуктивність",
|
||||
"pin": "Закріпити",
|
||||
"play": "Відтворити",
|
||||
"polling": "Опитування",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "Режим налагодження вимкнено",
|
||||
"debug-enabled": "Режим налагодження увімкнено",
|
||||
"info-copied": "Інформацію скопійовано до буфера обміну",
|
||||
"noctalia-available": "Доступно:",
|
||||
"noctalia-desc": "Елегантна та мінімалістична оболонка робочого столу, ретельно створена для Wayland, побудована на Quickshell.",
|
||||
"noctalia-git-commit": "Git коміт:",
|
||||
"noctalia-installed-version": "Встановлена версія:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "Величезне дякую нашому чудовому прихильнику!",
|
||||
"supporters-desc-plural": "Величезна подяка нашим <b>{count} чудовим</b> прихильникам!",
|
||||
"supporters-loading": "Завантаження прихильників...",
|
||||
"system-board": "Материнська плата:",
|
||||
"system-cpu": "ЦП:",
|
||||
"system-disk": "Диск:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "Показувати підказки щодо комбінацій клавіш у параметрах сеансу.",
|
||||
"show-keybinds-label": "Показати комбінації клавіш"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "Залишати віджети робочого столу видимими, поки режим продуктивності Noctalia увімкнено.",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "Увімкнути віджети робочого столу в режимі продуктивності",
|
||||
"noctalia-performance-disable-wallpaper-description": "Залишайте шпалери робочого столу, огляду та екрана блокування видимими, коли режим продуктивності Noctalia увімкнено.",
|
||||
"noctalia-performance-disable-wallpaper-label": "Увімкнути відтворення шпалер у режимі продуктивності",
|
||||
"title": "Система"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Критичний колір",
|
||||
"custom-highlight-colors-title-label": "Власні кольори підсвічування",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "Інтервал опитування",
|
||||
"polling-section-description": "Налаштуйте, як часто оновлюється кожна системна метрика.",
|
||||
"polling-section-label": "Інтервали опитування",
|
||||
"threshold-critical": "Критичний поріг",
|
||||
"threshold-warning": "Порогове значення попередження",
|
||||
"threshold-critical": "Критичний",
|
||||
"threshold-warning": "Попередження",
|
||||
"thresholds-section-description": "Налаштуйте пороги попередження/критичні пороги та інтервали опитування для кожного системного показника.",
|
||||
"use-custom-highlight-colors-description": "Якщо вимкнено, використовуються кольори підсвічування за замовчуванням теми.",
|
||||
"use-custom-highlight-colors-label": "Використовувати власні кольори підсвічування",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "Швидкість анімації",
|
||||
"animation-speed-reset": "Скинути швидкість анімації",
|
||||
"appearance-desc": "Налаштовуйте візуальні елементи, такі як підказки, рамки та тіні.",
|
||||
"blur-behind-description": "Розмиває область за панелями та спливаючими вікнами, використовуючи протокол розмиття композитора.",
|
||||
"blur-behind-label": "Розмиття фону",
|
||||
"box-border-description": "Відображає контур навколо областей вмісту.",
|
||||
"box-border-label": "Контур контейнера",
|
||||
"box-border-radius-description": "Налаштовує заокруглення кутів основних розділів макета, таких як бічні панелі, картки та панелі контенту.",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "Історія буфера обміну недоступна",
|
||||
"unavailable-desc": "Застосунок 'cliphist' не встановлений. Будь ласка, встановіть його для використання функцій історії буфера обміну"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "Команда не виконана: {command}\\nКод виходу: {code}",
|
||||
"title": "Користувацька команда не виконана"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "'Не турбувати' вимкнено",
|
||||
"disabled-desc": "Показ усіх сповіщень",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "Додати віджет",
|
||||
"bluetooth-auto-connect-off": "Автоматичне підключення вимкнено — натисніть, щоб увімкнути",
|
||||
"bluetooth-auto-connect-on": "Автопідключення увімкнено — натисніть, щоб вимкнути",
|
||||
"auto-connect": "Перемкнути автопідключення для цього пристрою",
|
||||
"bluetooth-auto-connect-off": "Автоматичне підключення вимкнено",
|
||||
"bluetooth-auto-connect-on": "Автоматичне підключення увімкнено",
|
||||
"bluetooth-devices": "Пристрої Bluetooth",
|
||||
"brightness-at": "Яскравість: {brightness}%",
|
||||
"click-to-start-recording": "Запис екрана (почати запис)",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "选择可视化工具的颜色。",
|
||||
"color-name-label": "填充颜色",
|
||||
"height-description": "自定义组件宽度。",
|
||||
"hide-when-idle-description": "启用后,除非正在播放媒体,否则隐藏可视化显示。",
|
||||
"hide-when-idle-label": "无媒体播放时隐藏",
|
||||
"width-description": "自定义组件的宽度。"
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "聚焦工作区颜色",
|
||||
"follow-focused-screen-description": "显示当前焦点屏幕的工作区,而不是任务栏所在屏幕的工作区。",
|
||||
"follow-focused-screen-label": "跟随焦点屏幕",
|
||||
"font-weight-description": "设置工作区内文本的视觉权重。",
|
||||
"font-weight-label": "字体粗细",
|
||||
"grouped-border-opacity-description": "设置工作区容器边框的不透明度级别。",
|
||||
"grouped-border-opacity-label": "边框不透明度",
|
||||
"hide-unoccupied-description": "不显示没有窗口的工作区。",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "添加",
|
||||
"appearance": "外观",
|
||||
"apply": "应用",
|
||||
"auto-connect": "自动连接",
|
||||
"automation": "自动化",
|
||||
"available": "可用",
|
||||
"back": "返回",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "执行",
|
||||
"faithful": "忠实",
|
||||
"focus": "专注",
|
||||
"font-weight-bold": "粗体",
|
||||
"font-weight-light": "细",
|
||||
"font-weight-medium": "中",
|
||||
"font-weight-regular": "常规",
|
||||
"font-weight-semibold": "半粗体",
|
||||
"frequency": "频率",
|
||||
"gateway": "网关",
|
||||
"general": "通用",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "面板",
|
||||
"password": "密码",
|
||||
"pause": "暂停",
|
||||
"performance": "性能",
|
||||
"pin": "固定",
|
||||
"play": "播放",
|
||||
"polling": "数据轮询",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "调试模式已禁用",
|
||||
"debug-enabled": "调试模式已启用",
|
||||
"info-copied": "信息已复制到剪贴板",
|
||||
"noctalia-available": "可用:",
|
||||
"noctalia-desc": "一款为 Wayland 精心打造的时尚简约桌面 shell,基于 Quickshell 构建。",
|
||||
"noctalia-git-commit": "Git 提交:",
|
||||
"noctalia-installed-version": "已安装版本:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "非常感谢我们出色的支持者!",
|
||||
"supporters-desc-plural": "非常感谢我们的<b>{count}位出色</b>支持者!",
|
||||
"supporters-loading": "正在加载支持者...",
|
||||
"system-board": "主板:",
|
||||
"system-cpu": "中央处理器:",
|
||||
"system-disk": "磁盘:",
|
||||
"system-gpu": "图形处理器:",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "在会话选项上显示快捷键提示。",
|
||||
"show-keybinds-label": "显示快捷键"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "在 Noctalia 性能模式启用时保持桌面小部件可见。",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "在性能模式下启用桌面小部件",
|
||||
"noctalia-performance-disable-wallpaper-description": "在启用 Noctalia 性能模式时,保持桌面、概览和锁屏壁纸可见。",
|
||||
"noctalia-performance-disable-wallpaper-label": "在性能模式下启用壁纸渲染",
|
||||
"title": "系统"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "严重颜色",
|
||||
"custom-highlight-colors-title-label": "自定义高亮颜色",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "轮询间隔",
|
||||
"polling-section-description": "配置每个系统指标的更新频率。",
|
||||
"polling-section-label": "轮询间隔",
|
||||
"threshold-critical": "临界阈值",
|
||||
"threshold-warning": "警告阈值",
|
||||
"threshold-critical": "严重",
|
||||
"threshold-warning": "警告",
|
||||
"thresholds-section-description": "为每个系统指标调整警告/严重阈值和轮询间隔。",
|
||||
"use-custom-highlight-colors-description": "禁用时将使用主题默认高亮颜色。",
|
||||
"use-custom-highlight-colors-label": "使用自定义高亮颜色",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "动画速度",
|
||||
"animation-speed-reset": "重置动画速度",
|
||||
"appearance-desc": "自定义视觉元素,如提示信息、边框和阴影。",
|
||||
"blur-behind-description": "使用合成器模糊协议,模糊栏和面板后面的区域。",
|
||||
"blur-behind-label": "背景模糊",
|
||||
"box-border-description": "显示内容区域周围的轮廓。",
|
||||
"box-border-label": "容器轮廓",
|
||||
"box-border-radius-description": "调整主要布局部分(如侧边栏、卡片和内容面板)的圆角程度。",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "剪贴板历史记录不可用",
|
||||
"unavailable-desc": "未安装 'cliphist' 应用程序。请安装它以使用剪贴板历史记录功能"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "命令失败: {command}\\n退出代码: {code}",
|
||||
"title": "自定义命令失败"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "'勿扰模式'已禁用",
|
||||
"disabled-desc": "显示所有通知",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "添加小部件",
|
||||
"bluetooth-auto-connect-off": "自动连接已关闭 — 点击启用",
|
||||
"bluetooth-auto-connect-on": "自动连接已开启 — 点击禁用",
|
||||
"auto-connect": "切换此设备的自动连接",
|
||||
"bluetooth-auto-connect-off": "自动连接已禁用",
|
||||
"bluetooth-auto-connect-on": "自动连接已启用",
|
||||
"bluetooth-devices": "蓝牙设备",
|
||||
"brightness-at": "亮度:{brightness}%",
|
||||
"click-to-start-recording": "屏幕录制器(开始录制)",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "選取視覺效果的顏色",
|
||||
"color-name-label": "填充顏色",
|
||||
"height-description": "自訂元件寬度。",
|
||||
"hide-when-idle-description": "當啟用時, 如果沒有正在播放的媒體就隱藏視覺效果",
|
||||
"hide-when-idle-label": "無任何媒體播放時隱藏",
|
||||
"width-description": "自訂部件寬度"
|
||||
@@ -293,6 +294,8 @@
|
||||
"focused-color-label": "聚焦的工作區顏色",
|
||||
"follow-focused-screen-description": "顯示正在聚焦的螢幕所擁有的工作區, 而不是工具列所在的螢幕擁有的工作區",
|
||||
"follow-focused-screen-label": "跟隨焦點所在的螢幕",
|
||||
"font-weight-description": "設定工作區內文字的視覺權重。",
|
||||
"font-weight-label": "字體粗細",
|
||||
"grouped-border-opacity-description": "設定工作區邊框的不透明度",
|
||||
"grouped-border-opacity-label": "邊框不透明度",
|
||||
"hide-unoccupied-description": "如果工作區沒有任何視窗則不要顯示",
|
||||
@@ -376,6 +379,7 @@
|
||||
"add": "新增",
|
||||
"appearance": "外觀",
|
||||
"apply": "套用",
|
||||
"auto-connect": "自動連線",
|
||||
"automation": "自動化",
|
||||
"available": "可用",
|
||||
"back": "返回",
|
||||
@@ -426,6 +430,11 @@
|
||||
"execute": "執行",
|
||||
"faithful": "忠實",
|
||||
"focus": "關注",
|
||||
"font-weight-bold": "粗體",
|
||||
"font-weight-light": "細",
|
||||
"font-weight-medium": "中",
|
||||
"font-weight-regular": "一般",
|
||||
"font-weight-semibold": "半粗體",
|
||||
"frequency": "頻率",
|
||||
"gateway": "網路閘道",
|
||||
"general": "一般",
|
||||
@@ -470,6 +479,7 @@
|
||||
"panels": "面板",
|
||||
"password": "密碼",
|
||||
"pause": "暫停",
|
||||
"performance": "效能",
|
||||
"pin": "釘選",
|
||||
"play": "播放",
|
||||
"polling": "輪詢",
|
||||
@@ -709,6 +719,7 @@
|
||||
"debug-disabled": "偵錯模式已停用",
|
||||
"debug-enabled": "偵錯模式已啟用",
|
||||
"info-copied": "資訊已複製至剪貼簿",
|
||||
"noctalia-available": "可用:",
|
||||
"noctalia-desc": "一個為 Wayland 精心打造, 兼具簡潔及流暢的桌面介面, 使用 Quickshell 建置",
|
||||
"noctalia-git-commit": "Git commit:",
|
||||
"noctalia-installed-version": "安裝版本:",
|
||||
@@ -721,6 +732,7 @@
|
||||
"supporters-desc": "非常感謝我們出色的支持者!",
|
||||
"supporters-desc-plural": "非常感謝我們的<b>{count}位出色</b>支持者!",
|
||||
"supporters-loading": "正在載入支持者...",
|
||||
"system-board": "主機板:",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "磁碟:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -1599,6 +1611,13 @@
|
||||
"show-keybinds-description": "在工作階段選項上顯示快捷鍵提示。",
|
||||
"show-keybinds-label": "顯示快捷鍵"
|
||||
},
|
||||
"system": {
|
||||
"noctalia-performance-disable-desktop-widgets-description": "當 Noctalia 效能模式啟用時保持桌面小工具可見。",
|
||||
"noctalia-performance-disable-desktop-widgets-label": "在效能模式下啟用桌面小工具",
|
||||
"noctalia-performance-disable-wallpaper-description": "在啟用 Noctalia 效能模式時,保持桌面、概覽和鎖定畫面桌布可見。",
|
||||
"noctalia-performance-disable-wallpaper-label": "在效能模式下啟用桌布渲染",
|
||||
"title": "系統"
|
||||
},
|
||||
"system-monitor": {
|
||||
"critical-color-label": "危急顏色",
|
||||
"custom-highlight-colors-title-label": "自訂突出色",
|
||||
@@ -1615,8 +1634,8 @@
|
||||
"polling-interval-label": "輪詢間隔",
|
||||
"polling-section-description": "設定該多久更新一次系統計量值",
|
||||
"polling-section-label": "輪詢間隔",
|
||||
"threshold-critical": "危急門檻",
|
||||
"threshold-warning": "警告門檻",
|
||||
"threshold-critical": "嚴重",
|
||||
"threshold-warning": "警告",
|
||||
"thresholds-section-description": "調整每個系統量測值的警告/危急門檻",
|
||||
"use-custom-highlight-colors-description": "當停用時, 將會使用主題預設的突出色",
|
||||
"use-custom-highlight-colors-label": "使用自訂的突出色",
|
||||
@@ -1631,6 +1650,8 @@
|
||||
"animation-speed-label": "動畫速度",
|
||||
"animation-speed-reset": "重設動畫速度",
|
||||
"appearance-desc": "自訂視覺元素, 如提示框, 邊框及陰影",
|
||||
"blur-behind-description": "使用合成器模糊協定,模糊欄位和面板後方的區域。",
|
||||
"blur-behind-label": "背景模糊",
|
||||
"box-border-description": "在內容區塊的外圍顯示外框",
|
||||
"box-border-label": "頁面容器外框",
|
||||
"box-border-radius-description": "調整主要版面區塊(例如側邊欄、卡片與內容面板)的圓角弧度。",
|
||||
@@ -1847,6 +1868,10 @@
|
||||
"unavailable": "無法使用剪貼簿歷史",
|
||||
"unavailable-desc": "尚未安裝 cliphist 套件, 要使用剪貼簿歷史請安裝套件"
|
||||
},
|
||||
"custom-command-failed": {
|
||||
"description": "指令失敗: {command}\\n結束代碼: {code}",
|
||||
"title": "自訂指令失敗"
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"disabled": "勿擾模式已停用",
|
||||
"disabled-desc": "顯示所有通知",
|
||||
@@ -1901,8 +1926,9 @@
|
||||
},
|
||||
"tooltips": {
|
||||
"add-widget": "新增小工具",
|
||||
"bluetooth-auto-connect-off": "自動連線已關閉 — 點擊以啟用",
|
||||
"bluetooth-auto-connect-on": "自動連線已開啟 — 點擊以停用",
|
||||
"auto-connect": "切換此裝置的自動連線",
|
||||
"bluetooth-auto-connect-off": "自動連線已停用",
|
||||
"bluetooth-auto-connect-on": "自動連線已啟用",
|
||||
"bluetooth-devices": "藍牙裝置",
|
||||
"brightness-at": "亮度: {brightness}%",
|
||||
"click-to-start-recording": "螢幕錄影 (開始錄製)",
|
||||
|
||||
@@ -71,14 +71,14 @@
|
||||
]
|
||||
},
|
||||
"mouseWheelAction": "none",
|
||||
"reverseScroll": false,
|
||||
"mouseWheelWrap": true,
|
||||
"middleClickAction": "none",
|
||||
"middleClickFollowMouse": false,
|
||||
"middleClickCommand": "",
|
||||
"rightClickAction": "controlCenter",
|
||||
"rightClickFollowMouse": true,
|
||||
"rightClickCommand": "",
|
||||
"reverseScroll": false,
|
||||
"mouseWheelWrap": true,
|
||||
"screenOverrides": []
|
||||
},
|
||||
"general": {
|
||||
@@ -100,6 +100,7 @@
|
||||
"showHibernateOnLockScreen": false,
|
||||
"enableLockScreenMediaControls": false,
|
||||
"enableShadows": true,
|
||||
"enableBlurBehind": true,
|
||||
"shadowDirection": "bottom_right",
|
||||
"shadowOffsetX": 2,
|
||||
"shadowOffsetY": 3,
|
||||
@@ -332,6 +333,10 @@
|
||||
"criticalColor": "",
|
||||
"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"
|
||||
},
|
||||
"noctaliaPerformance": {
|
||||
"disableWallpaper": true,
|
||||
"disableDesktopWidgets": true
|
||||
},
|
||||
"dock": {
|
||||
"enabled": true,
|
||||
"position": "bottom",
|
||||
@@ -370,7 +375,8 @@
|
||||
"wifiDetailsViewMode": "grid",
|
||||
"bluetoothDetailsViewMode": "grid",
|
||||
"bluetoothHideUnnamedDevices": false,
|
||||
"disableDiscoverability": false
|
||||
"disableDiscoverability": false,
|
||||
"bluetoothAutoConnect": true
|
||||
},
|
||||
"sessionMenu": {
|
||||
"enableCountdown": true,
|
||||
@@ -465,7 +471,7 @@
|
||||
"audio": {
|
||||
"volumeStep": 5,
|
||||
"volumeOverdrive": false,
|
||||
"cavaFrameRate": 30,
|
||||
"spectrumFrameRate": 30,
|
||||
"visualizerType": "linear",
|
||||
"mprisBlacklist": [],
|
||||
"preferredPlayer": "",
|
||||
|
||||
@@ -1904,27 +1904,45 @@
|
||||
"descriptionKey": "panels.system-monitor.enable-dgpu-monitoring-description",
|
||||
"widget": "NToggle",
|
||||
"tab": 18,
|
||||
"tabLabel": "system-monitor.title",
|
||||
"tabLabel": "panels.system.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
"subTabLabel": "system-monitor.title"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.system-monitor.use-custom-highlight-colors-label",
|
||||
"descriptionKey": "panels.system-monitor.use-custom-highlight-colors-description",
|
||||
"widget": "NToggle",
|
||||
"tab": 18,
|
||||
"tabLabel": "system-monitor.title",
|
||||
"tabLabel": "panels.system.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
"subTabLabel": "system-monitor.title"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.system-monitor.external-monitor-label",
|
||||
"descriptionKey": "panels.system-monitor.external-monitor-description",
|
||||
"widget": "NTextInput",
|
||||
"tab": 18,
|
||||
"tabLabel": "system-monitor.title",
|
||||
"tabLabel": "panels.system.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
"subTabLabel": "system-monitor.title"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.system.noctalia-performance-disable-wallpaper-label",
|
||||
"descriptionKey": "panels.system.noctalia-performance-disable-wallpaper-description",
|
||||
"widget": "NToggle",
|
||||
"tab": 18,
|
||||
"tabLabel": "panels.system.title",
|
||||
"subTab": 2,
|
||||
"subTabLabel": "common.performance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.system.noctalia-performance-disable-desktop-widgets-label",
|
||||
"descriptionKey": "panels.system.noctalia-performance-disable-desktop-widgets-description",
|
||||
"widget": "NToggle",
|
||||
"tab": 18,
|
||||
"tabLabel": "panels.system.title",
|
||||
"subTab": 2,
|
||||
"subTabLabel": "common.performance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.user-interface.tooltips-label",
|
||||
@@ -1953,6 +1971,15 @@
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.user-interface.blur-behind-label",
|
||||
"descriptionKey": "panels.user-interface.blur-behind-description",
|
||||
"widget": "NToggle",
|
||||
"tab": 1,
|
||||
"tabLabel": "panels.user-interface.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.user-interface.shadows-direction-label",
|
||||
"descriptionKey": "panels.user-interface.shadows-direction-description",
|
||||
|
||||
@@ -225,7 +225,8 @@
|
||||
"occupiedColor": "secondary",
|
||||
"emptyColor": "secondary",
|
||||
"showBadge": true,
|
||||
"pillSize": 0.6
|
||||
"pillSize": 0.6,
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"Volume": {
|
||||
"displayMode": "onhover",
|
||||
@@ -278,6 +279,15 @@
|
||||
"statType": "CPU",
|
||||
"diskPath": "/",
|
||||
"layout": "bottom"
|
||||
},
|
||||
"AudioVisualizer": {
|
||||
"showBackground": true,
|
||||
"roundedCorners": true,
|
||||
"width": 320,
|
||||
"height": 72,
|
||||
"visualizerType": "linear",
|
||||
"hideWhenIdle": false,
|
||||
"colorName": "primary"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
function migrate(adapter, logger, rawJson) {
|
||||
logger.i("Settings", "Migrating settings to v56 (Color Scheme Migration)");
|
||||
|
||||
const scriptPath = Quickshell.shellDir + "/Scripts/python/src/theming/migrate-colorschemes.py";
|
||||
const configDir = Quickshell.env("NOCTALIA_CONFIG_DIR") || (Quickshell.env("XDG_CONFIG_HOME") || Quickshell.env("HOME") + "/.config") + "/noctalia";
|
||||
|
||||
logger.i("Settings", `Running color scheme migration script: ${scriptPath} with configDir: ${configDir}`);
|
||||
|
||||
// Run the migration script detached
|
||||
Quickshell.execDetached(["python3", scriptPath, configDir]);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import QtQuick
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
function migrate(adapter, logger, rawJson) {
|
||||
logger.i("Settings", "Migrating settings to v57 (cavaFrameRate -> spectrumFrameRate)");
|
||||
|
||||
if (rawJson && rawJson.audio && rawJson.audio.cavaFrameRate !== undefined) {
|
||||
adapter.audio.spectrumFrameRate = rawJson.audio.cavaFrameRate;
|
||||
logger.i("Settings", "Migrated cavaFrameRate:", rawJson.audio.cavaFrameRate, "-> spectrumFrameRate");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -27,7 +27,9 @@ QtObject {
|
||||
50: migration50Component,
|
||||
53: migration53Component,
|
||||
54: migration54Component,
|
||||
55: migration55Component
|
||||
55: migration55Component,
|
||||
56: migration56Component,
|
||||
57: migration57Component
|
||||
})
|
||||
|
||||
// Migration components
|
||||
@@ -52,4 +54,6 @@ QtObject {
|
||||
property Component migration53Component: Migration53 {}
|
||||
property Component migration54Component: Migration54 {}
|
||||
property Component migration55Component: Migration55 {}
|
||||
property Component migration56Component: Migration56 {}
|
||||
property Component migration57Component: Migration57 {}
|
||||
}
|
||||
|
||||
@@ -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: 55
|
||||
readonly property int settingsVersion: 57
|
||||
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 + "/"
|
||||
@@ -291,6 +291,7 @@ Singleton {
|
||||
property bool showHibernateOnLockScreen: false
|
||||
property bool enableLockScreenMediaControls: false
|
||||
property bool enableShadows: true
|
||||
property bool enableBlurBehind: true
|
||||
property string shadowDirection: "bottom_right"
|
||||
property int shadowOffsetX: 2
|
||||
property int shadowOffsetY: 3
|
||||
@@ -530,6 +531,12 @@ Singleton {
|
||||
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"
|
||||
}
|
||||
|
||||
// performance
|
||||
property JsonObject noctaliaPerformance: JsonObject {
|
||||
property bool disableWallpaper: true
|
||||
property bool disableDesktopWidgets: true
|
||||
}
|
||||
|
||||
// dock
|
||||
property JsonObject dock: JsonObject {
|
||||
property bool enabled: true
|
||||
@@ -671,7 +678,7 @@ Singleton {
|
||||
property JsonObject audio: JsonObject {
|
||||
property int volumeStep: 5
|
||||
property bool volumeOverdrive: false
|
||||
property int cavaFrameRate: 30
|
||||
property int spectrumFrameRate: 30
|
||||
property string visualizerType: "linear"
|
||||
property list<string> mprisBlacklist: []
|
||||
property string preferredPlayer: ""
|
||||
|
||||
@@ -14,7 +14,7 @@ Variants {
|
||||
|
||||
required property ShellScreen modelData
|
||||
|
||||
active: modelData && Settings.data.wallpaper.enabled && !PowerProfileService.noctaliaPerformanceMode
|
||||
active: modelData && Settings.data.wallpaper.enabled && (!PowerProfileService.noctaliaPerformanceMode || !Settings.data.noctaliaPerformance.disableWallpaper)
|
||||
|
||||
sourceComponent: PanelWindow {
|
||||
id: root
|
||||
|
||||
@@ -8,7 +8,7 @@ import qs.Services.Power
|
||||
import qs.Services.UI
|
||||
|
||||
Loader {
|
||||
active: CompositorService.isNiri && Settings.data.wallpaper.enabled && Settings.data.wallpaper.overviewEnabled && !PowerProfileService.noctaliaPerformanceMode
|
||||
active: CompositorService.isNiri && Settings.data.wallpaper.enabled && Settings.data.wallpaper.overviewEnabled && (!PowerProfileService.noctaliaPerformanceMode || !Settings.data.noctaliaPerformance.disableWallpaper)
|
||||
|
||||
sourceComponent: Variants {
|
||||
model: Quickshell.screens
|
||||
|
||||
@@ -14,6 +14,7 @@ Item {
|
||||
required property real capsuleHeight
|
||||
required property real barHeight
|
||||
required property string labelMode
|
||||
required property int fontWeight
|
||||
required property int characterCount
|
||||
required property real textRatio
|
||||
required property bool showLabelsOnlyWhenOccupied
|
||||
@@ -119,7 +120,7 @@ Item {
|
||||
pointSize: (isVertical ? pillContainer.pillWidth : pillContainer.pillHeight) * textRatio
|
||||
applyUiScale: false
|
||||
font.capitalization: Font.AllUppercase
|
||||
font.weight: Style.fontWeightBold
|
||||
font.weight: fontWeight
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode: Text.Wrap
|
||||
|
||||
@@ -45,20 +45,20 @@ Item {
|
||||
|
||||
readonly property bool shouldShow: (currentVisualizerType !== "" && currentVisualizerType !== "none") && (!hideWhenIdle || MediaService.isPlaying)
|
||||
|
||||
// Register/unregister with CavaService based on visibility
|
||||
readonly property string cavaComponentId: "bar:audiovisualizer:" + root.screen.name + ":" + root.section + ":" + root.sectionWidgetIndex
|
||||
// Register/unregister with SpectrumService based on visibility
|
||||
readonly property string spectrumComponentId: "bar:audiovisualizer:" + root.screen.name + ":" + root.section + ":" + root.sectionWidgetIndex
|
||||
|
||||
onShouldShowChanged: {
|
||||
if (root.shouldShow) {
|
||||
CavaService.registerComponent(root.cavaComponentId);
|
||||
SpectrumService.registerComponent(root.spectrumComponentId);
|
||||
} else {
|
||||
CavaService.unregisterComponent(root.cavaComponentId);
|
||||
SpectrumService.unregisterComponent(root.spectrumComponentId);
|
||||
}
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
if (root.shouldShow) {
|
||||
CavaService.unregisterComponent(root.cavaComponentId);
|
||||
SpectrumService.unregisterComponent(root.spectrumComponentId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@ Item {
|
||||
id: linearComponent
|
||||
NLinearSpectrum {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: root.fillColor
|
||||
showMinimumSignal: true
|
||||
vertical: root.isVerticalBar
|
||||
@@ -189,7 +189,7 @@ Item {
|
||||
id: mirroredComponent
|
||||
NMirroredSpectrum {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: root.fillColor
|
||||
showMinimumSignal: true
|
||||
vertical: root.isVerticalBar
|
||||
@@ -200,7 +200,7 @@ Item {
|
||||
id: waveComponent
|
||||
NWaveSpectrum {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: root.fillColor
|
||||
showMinimumSignal: true
|
||||
vertical: root.isVerticalBar
|
||||
|
||||
@@ -80,7 +80,7 @@ Item {
|
||||
}
|
||||
|
||||
let rateText = BatteryService.getRateText(selectedDevice);
|
||||
if (rateText) {
|
||||
if (!isPluggedIn && rateText) {
|
||||
const colonIdx = rateText.indexOf(":");
|
||||
if (colonIdx >= 0) {
|
||||
rows.push([rateText.substring(0, colonIdx).trim(), rateText.substring(colonIdx + 1).trim()]);
|
||||
|
||||
@@ -46,11 +46,16 @@ Item {
|
||||
implicitWidth: pill.width
|
||||
implicitHeight: pill.height
|
||||
|
||||
// Track the brightness monitor reactively; explicitly update on screen/monitors changes
|
||||
property var brightnessMonitor: null
|
||||
|
||||
function updateMonitor() {
|
||||
brightnessMonitor = BrightnessService.getMonitorForScreen(screen) || null;
|
||||
// Track the brightness monitor reactively via declarative binding so it
|
||||
// updates atomically when monitors change, avoiding a transient undefined
|
||||
// state that occurs when Monitor QtObjects are destroyed before the
|
||||
// imperative updateMonitor() call would run.
|
||||
property var brightnessMonitor: {
|
||||
var _ = BrightnessService.monitors; // reactive dependency
|
||||
var __ = BrightnessService.ddcMonitors; // reactive dependency
|
||||
if (!screen)
|
||||
return null;
|
||||
return BrightnessService.getMonitorForScreen(screen) ?? null;
|
||||
}
|
||||
|
||||
function getControllableMonitorCount() {
|
||||
@@ -63,18 +68,6 @@ Item {
|
||||
return count;
|
||||
}
|
||||
|
||||
onScreenChanged: updateMonitor()
|
||||
|
||||
Connections {
|
||||
target: BrightnessService
|
||||
function onMonitorsChanged() {
|
||||
root.updateMonitor();
|
||||
}
|
||||
function onDdcMonitorsChanged() {
|
||||
root.updateMonitor();
|
||||
}
|
||||
}
|
||||
|
||||
visible: brightnessMonitor !== null
|
||||
opacity: brightnessMonitor !== null ? 1.0 : 0.0
|
||||
|
||||
|
||||
@@ -73,27 +73,31 @@ Item {
|
||||
return showArtistFirst ? (artist ? `${artist} - ${track}` : track) : (artist ? `${track} - ${artist}` : track);
|
||||
}
|
||||
|
||||
// CavaService registration for visualizer
|
||||
readonly property string cavaComponentId: "bar:mediamini:" + root.screen?.name + ":" + root.section + ":" + root.sectionWidgetIndex
|
||||
readonly property bool needsCava: root.showVisualizer && root.visualizerType !== "" && root.visualizerType !== "none"
|
||||
// SpectrumService registration for visualizer
|
||||
readonly property string spectrumComponentId: "bar:mediamini:" + root.screen?.name + ":" + root.section + ":" + root.sectionWidgetIndex
|
||||
readonly property bool needsSpectrum: root.showVisualizer && root.visualizerType !== "" && root.visualizerType !== "none" && !root.isHidden
|
||||
|
||||
Layout.preferredHeight: isVertical ? -1 : Style.getBarHeightForScreen(screenName)
|
||||
Layout.preferredWidth: isVertical ? Style.getBarHeightForScreen(screenName) : -1
|
||||
Layout.fillHeight: false
|
||||
Layout.fillWidth: false
|
||||
|
||||
onNeedsCavaChanged: {
|
||||
if (root.needsCava) {
|
||||
CavaService.registerComponent(root.cavaComponentId);
|
||||
onNeedsSpectrumChanged: {
|
||||
if (root.needsSpectrum) {
|
||||
SpectrumService.registerComponent(root.spectrumComponentId);
|
||||
} else {
|
||||
CavaService.unregisterComponent(root.cavaComponentId);
|
||||
SpectrumService.unregisterComponent(root.spectrumComponentId);
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (root.needsSpectrum) {
|
||||
SpectrumService.registerComponent(root.spectrumComponentId);
|
||||
}
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
if (root.needsCava) {
|
||||
CavaService.unregisterComponent(root.cavaComponentId);
|
||||
}
|
||||
SpectrumService.unregisterComponent(root.spectrumComponentId);
|
||||
}
|
||||
|
||||
// Layout
|
||||
@@ -416,7 +420,7 @@ Item {
|
||||
NLinearSpectrum {
|
||||
width: parent.width - Style.marginS
|
||||
height: 20
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.4
|
||||
barPosition: root.barPosition
|
||||
@@ -428,7 +432,7 @@ Item {
|
||||
NMirroredSpectrum {
|
||||
width: parent.width - Style.marginS
|
||||
height: parent.height - Style.marginS
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.4
|
||||
}
|
||||
@@ -439,7 +443,7 @@ Item {
|
||||
NWaveSpectrum {
|
||||
width: parent.width - Style.marginS
|
||||
height: parent.height - Style.marginS
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.4
|
||||
}
|
||||
|
||||
@@ -175,7 +175,7 @@ Item {
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "sysmon-settings") {
|
||||
SettingsPanelService.openToTab(SettingsPanel.Tab.SystemMonitor, 0, screen);
|
||||
SettingsPanelService.openToTab(SettingsPanel.Tab.System, 0, screen);
|
||||
} else if (action === "widget-settings") {
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
}
|
||||
|
||||
@@ -44,6 +44,19 @@ Item {
|
||||
|
||||
readonly property string labelMode: (widgetSettings.labelMode !== undefined) ? widgetSettings.labelMode : widgetMetadata.labelMode
|
||||
readonly property bool hasLabel: (labelMode !== "none")
|
||||
readonly property string fontWeight: {
|
||||
var fontWeightSetting = (widgetSettings.fontWeight !== undefined) ? widgetSettings.fontWeight : widgetMetadata.fontWeight;
|
||||
|
||||
if (fontWeightSetting === "regular")
|
||||
return Style.fontWeightRegular;
|
||||
if (fontWeightSetting === "medium")
|
||||
return Style.fontWeightMedium;
|
||||
if (fontWeightSetting === "semibold")
|
||||
return Style.fontWeightSemiBold;
|
||||
if (fontWeightSetting === "bold")
|
||||
return Style.fontWeightBold;
|
||||
return Style.fontWeightBold;
|
||||
}
|
||||
readonly property bool hideUnoccupied: (widgetSettings.hideUnoccupied !== undefined) ? widgetSettings.hideUnoccupied : widgetMetadata.hideUnoccupied
|
||||
readonly property bool followFocusedScreen: (widgetSettings.followFocusedScreen !== undefined) ? widgetSettings.followFocusedScreen : widgetMetadata.followFocusedScreen
|
||||
readonly property int characterCount: isVertical ? 2 : ((widgetSettings.characterCount !== undefined) ? widgetSettings.characterCount : widgetMetadata.characterCount)
|
||||
@@ -555,6 +568,7 @@ Item {
|
||||
capsuleHeight: root.capsuleHeight
|
||||
barHeight: root.barHeight
|
||||
labelMode: root.labelMode
|
||||
fontWeight: root.fontWeight
|
||||
characterCount: root.characterCount
|
||||
textRatio: root.textRatio
|
||||
showLabelsOnlyWhenOccupied: root.showLabelsOnlyWhenOccupied
|
||||
@@ -589,6 +603,7 @@ Item {
|
||||
capsuleHeight: root.capsuleHeight
|
||||
barHeight: root.barHeight
|
||||
labelMode: root.labelMode
|
||||
fontWeight: root.fontWeight
|
||||
characterCount: root.characterCount
|
||||
textRatio: root.textRatio
|
||||
showLabelsOnlyWhenOccupied: root.showLabelsOnlyWhenOccupied
|
||||
@@ -661,8 +676,8 @@ Item {
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
enabled: !groupedContainer.hasWindows
|
||||
cursorShape: enabled ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
enabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
preventStealing: true
|
||||
onPressed: mouse => {
|
||||
@@ -853,7 +868,7 @@ Item {
|
||||
family: Settings.data.ui.fontFixed
|
||||
font {
|
||||
pointSize: barFontSize * 0.75
|
||||
weight: Style.fontWeightBold
|
||||
weight: fontWeight
|
||||
capitalization: Font.AllUppercase
|
||||
}
|
||||
applyUiScale: false
|
||||
|
||||
+13
-13
@@ -15,26 +15,26 @@ NBox {
|
||||
// Track whether we have an active media player
|
||||
readonly property bool hasActivePlayer: MediaService.currentPlayer && MediaService.canPlay
|
||||
|
||||
// CavaService registration for visualizer
|
||||
readonly property bool needsCava: Settings.data.audio.visualizerType !== "" && Settings.data.audio.visualizerType !== "none"
|
||||
// SpectrumService registration for visualizer
|
||||
readonly property bool needsSpectrum: Settings.data.audio.visualizerType !== "" && Settings.data.audio.visualizerType !== "none"
|
||||
|
||||
onNeedsCavaChanged: {
|
||||
if (root.needsCava) {
|
||||
CavaService.registerComponent("mediacard");
|
||||
onNeedsSpectrumChanged: {
|
||||
if (root.needsSpectrum) {
|
||||
SpectrumService.registerComponent("mediacard");
|
||||
} else {
|
||||
CavaService.unregisterComponent("mediacard");
|
||||
SpectrumService.unregisterComponent("mediacard");
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (root.needsCava) {
|
||||
CavaService.registerComponent("mediacard");
|
||||
if (root.needsSpectrum) {
|
||||
SpectrumService.registerComponent("mediacard");
|
||||
}
|
||||
updateCachedWallpaper();
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
CavaService.unregisterComponent("mediacard");
|
||||
SpectrumService.unregisterComponent("mediacard");
|
||||
}
|
||||
|
||||
property string wallpaper: WallpaperService.getWallpaper(screen.name)
|
||||
@@ -157,7 +157,7 @@ NBox {
|
||||
id: linearComponent
|
||||
NLinearSpectrum {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.8
|
||||
}
|
||||
@@ -167,7 +167,7 @@ NBox {
|
||||
id: mirroredComponent
|
||||
NMirroredSpectrum {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.8
|
||||
}
|
||||
@@ -177,7 +177,7 @@ NBox {
|
||||
id: waveComponent
|
||||
NWaveSpectrum {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.8
|
||||
}
|
||||
@@ -268,7 +268,7 @@ NBox {
|
||||
// No media player detected - centered disc icon
|
||||
NIcon {
|
||||
anchors.centerIn: parent
|
||||
visible: !root.hasActivePlayer && CavaService.isIdle
|
||||
visible: !root.hasActivePlayer && SpectrumService.isIdle
|
||||
icon: "disc"
|
||||
pointSize: Style.fontSizeXXXL * 3
|
||||
color: Color.mOnSurfaceVariant
|
||||
|
||||
@@ -51,7 +51,7 @@ Variants {
|
||||
|
||||
// Only create PanelWindow if enabled AND (screen has widgets OR in edit mode)
|
||||
// During compositor overview, show widgets only when overviewEnabled is true.
|
||||
active: modelData && Settings.data.desktopWidgets.enabled && (screenWidgets.length > 0 || DesktopWidgetRegistry.editMode) && (!CompositorService.overviewActive || Settings.data.desktopWidgets.overviewEnabled) && !PowerProfileService.noctaliaPerformanceMode && !PanelService.lockScreen?.active
|
||||
active: modelData && Settings.data.desktopWidgets.enabled && (screenWidgets.length > 0 || DesktopWidgetRegistry.editMode) && (!CompositorService.overviewActive || Settings.data.desktopWidgets.overviewEnabled) && (!PowerProfileService.noctaliaPerformanceMode || !Settings.data.noctaliaPerformance.disableDesktopWidgets) && !PanelService.lockScreen?.active
|
||||
|
||||
sourceComponent: PanelWindow {
|
||||
id: window
|
||||
|
||||
@@ -302,7 +302,7 @@ Item {
|
||||
if (DesktopWidgetRegistry.isPluginWidget(widgetId)) {
|
||||
var pluginId = widgetId.replace("plugin:", "");
|
||||
var manifest = PluginRegistry.getPluginManifest(pluginId);
|
||||
hasSettings = manifest && manifest.entryPoints && manifest.entryPoints.settings;
|
||||
hasSettings = manifest && manifest.entryPoints && (manifest.entryPoints.settings || manifest.entryPoints.desktopWidgetSettings);
|
||||
} else {
|
||||
hasSettings = DesktopWidgetRegistry.widgetSettingsMap[widgetId] !== undefined;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
import QtQuick
|
||||
import QtQuick.Effects
|
||||
import Quickshell
|
||||
import qs.Commons
|
||||
import qs.Modules.DesktopWidgets
|
||||
import qs.Services.Media
|
||||
import qs.Services.UI
|
||||
import qs.Widgets
|
||||
import qs.Widgets.AudioSpectrum
|
||||
|
||||
DraggableDesktopWidget {
|
||||
id: root
|
||||
|
||||
defaultY: 280
|
||||
|
||||
readonly property var widgetMetadata: DesktopWidgetRegistry.widgetMetadata["AudioVisualizer"]
|
||||
|
||||
readonly property int visualizerWidth: (widgetData && widgetData.width !== undefined) ? widgetData.width : (widgetMetadata?.width ?? 320)
|
||||
readonly property int visualizerHeight: (widgetData && widgetData.height !== undefined) ? widgetData.height : (widgetMetadata?.height ?? 72)
|
||||
readonly property string visualizerType: (widgetData && widgetData.visualizerType !== undefined) ? widgetData.visualizerType : (widgetMetadata?.visualizerType ?? "linear")
|
||||
readonly property bool hideWhenIdle: (widgetData && widgetData.hideWhenIdle !== undefined) ? widgetData.hideWhenIdle : (widgetMetadata?.hideWhenIdle ?? false)
|
||||
readonly property string colorName: (widgetData && widgetData.colorName !== undefined) ? widgetData.colorName : (widgetMetadata?.colorName ?? "primary")
|
||||
|
||||
readonly property color fillColor: Color.resolveColorKey(colorName)
|
||||
|
||||
readonly property bool shouldShow: visualizerType !== "" && visualizerType !== "none" && (!hideWhenIdle || MediaService.isPlaying)
|
||||
readonly property bool isHidden: !shouldShow
|
||||
readonly property bool shouldRegisterSpectrum: shouldShow
|
||||
|
||||
// Keep widget visible in edit mode so users can move/configure it
|
||||
visible: !root.isHidden || DesktopWidgetRegistry.editMode
|
||||
|
||||
readonly property string spectrumComponentId: "desktop:audiovisualizer:" + (root.screen ? root.screen.name : "unknown") + ":" + root.widgetIndex
|
||||
|
||||
onShouldRegisterSpectrumChanged: {
|
||||
if (root.shouldRegisterSpectrum) {
|
||||
SpectrumService.registerComponent(root.spectrumComponentId);
|
||||
} else {
|
||||
SpectrumService.unregisterComponent(root.spectrumComponentId);
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (root.shouldRegisterSpectrum) {
|
||||
SpectrumService.registerComponent(root.spectrumComponentId);
|
||||
}
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
SpectrumService.unregisterComponent(root.spectrumComponentId);
|
||||
}
|
||||
|
||||
implicitWidth: Math.round(visualizerWidth * widgetScale)
|
||||
implicitHeight: Math.round(visualizerHeight * widgetScale)
|
||||
width: implicitWidth
|
||||
height: implicitHeight
|
||||
|
||||
Rectangle {
|
||||
id: visualizerMask
|
||||
anchors.fill: parent
|
||||
color: "transparent"
|
||||
radius: root.roundedCorners ? Math.min(Math.round(Style.radiusL * root.widgetScale), Style.radiusL, width / 2, height / 2) : 0
|
||||
clip: true
|
||||
|
||||
Loader {
|
||||
id: visualizerLoader
|
||||
anchors.fill: parent
|
||||
anchors.margins: root.showBackground ? Math.round(Style.marginXS * root.widgetScale) : 0
|
||||
active: root.shouldShow
|
||||
asynchronous: true
|
||||
|
||||
sourceComponent: {
|
||||
switch (root.visualizerType) {
|
||||
case "linear":
|
||||
return linearComponent;
|
||||
case "mirrored":
|
||||
return mirroredComponent;
|
||||
case "wave":
|
||||
return waveComponent;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: linearComponent
|
||||
NLinearSpectrum {
|
||||
anchors.fill: parent
|
||||
values: SpectrumService.values
|
||||
fillColor: root.fillColor
|
||||
showMinimumSignal: true
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: mirroredComponent
|
||||
NMirroredSpectrum {
|
||||
anchors.fill: parent
|
||||
values: SpectrumService.values
|
||||
fillColor: root.fillColor
|
||||
showMinimumSignal: true
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: waveComponent
|
||||
NWaveSpectrum {
|
||||
anchors.fill: parent
|
||||
values: SpectrumService.values
|
||||
fillColor: root.fillColor
|
||||
showMinimumSignal: true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32,25 +32,26 @@ DraggableDesktopWidget {
|
||||
readonly property bool isHidden: (shouldHideIdle || shouldHideEmpty) && !DesktopWidgetRegistry.editMode
|
||||
visible: !isHidden
|
||||
|
||||
// CavaService registration for visualizer
|
||||
readonly property string cavaComponentId: "desktopmediaplayer:" + (root.screen ? root.screen.name : "unknown")
|
||||
// SpectrumService registration for visualizer
|
||||
readonly property string spectrumComponentId: "desktopmediaplayer:" + (root.screen ? root.screen.name : "unknown")
|
||||
readonly property bool needsSpectrum: root.shouldShowVisualizer && !root.isHidden
|
||||
|
||||
onShouldShowVisualizerChanged: {
|
||||
if (root.shouldShowVisualizer) {
|
||||
CavaService.registerComponent(root.cavaComponentId);
|
||||
onNeedsSpectrumChanged: {
|
||||
if (root.needsSpectrum) {
|
||||
SpectrumService.registerComponent(root.spectrumComponentId);
|
||||
} else {
|
||||
CavaService.unregisterComponent(root.cavaComponentId);
|
||||
SpectrumService.unregisterComponent(root.spectrumComponentId);
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (root.shouldShowVisualizer) {
|
||||
CavaService.registerComponent(root.cavaComponentId);
|
||||
if (root.needsSpectrum) {
|
||||
SpectrumService.registerComponent(root.spectrumComponentId);
|
||||
}
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
CavaService.unregisterComponent(root.cavaComponentId);
|
||||
SpectrumService.unregisterComponent(root.spectrumComponentId);
|
||||
}
|
||||
|
||||
readonly property bool showPrev: hasPlayer && MediaService.canGoPrevious
|
||||
@@ -81,7 +82,7 @@ DraggableDesktopWidget {
|
||||
anchors.bottomMargin: 0
|
||||
z: 0
|
||||
clip: true
|
||||
active: shouldShowVisualizer
|
||||
active: needsSpectrum
|
||||
layer.enabled: true
|
||||
layer.smooth: true
|
||||
layer.effect: MultiEffect {
|
||||
@@ -113,7 +114,7 @@ DraggableDesktopWidget {
|
||||
id: linearComponent
|
||||
NLinearSpectrum {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.5
|
||||
}
|
||||
@@ -123,7 +124,7 @@ DraggableDesktopWidget {
|
||||
id: mirroredComponent
|
||||
NMirroredSpectrum {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.5
|
||||
}
|
||||
@@ -133,7 +134,7 @@ DraggableDesktopWidget {
|
||||
id: waveComponent
|
||||
NWaveSpectrum {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.5
|
||||
}
|
||||
|
||||
@@ -198,7 +198,9 @@ DraggableDesktopWidget {
|
||||
color2: root.color2
|
||||
fill: true
|
||||
updateInterval: root.graphUpdateInterval
|
||||
strokeWidth: 1.5 * Style.uiScaleRatio * root.widgetScale
|
||||
animateScale: root.statType === "Network"
|
||||
antialiasing: 0.5 * root.widgetScale
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,13 +17,13 @@ Loader {
|
||||
active: false
|
||||
|
||||
// Track if the visualizer should be shown (lockscreen active + media playing + non-compact mode)
|
||||
readonly property bool needsCava: root.active && !Settings.data.general.compactLockScreen && Settings.data.audio.visualizerType !== "" && Settings.data.audio.visualizerType !== "none"
|
||||
readonly property bool needsSpectrum: root.active && !Settings.data.general.compactLockScreen && Settings.data.audio.visualizerType !== "" && Settings.data.audio.visualizerType !== "none"
|
||||
|
||||
onActiveChanged: {
|
||||
if (root.active && root.needsCava) {
|
||||
CavaService.registerComponent("lockscreen");
|
||||
if (root.active && root.needsSpectrum) {
|
||||
SpectrumService.registerComponent("lockscreen");
|
||||
} else {
|
||||
CavaService.unregisterComponent("lockscreen");
|
||||
SpectrumService.unregisterComponent("lockscreen");
|
||||
}
|
||||
|
||||
if (root.active) {
|
||||
@@ -33,11 +33,11 @@ Loader {
|
||||
}
|
||||
}
|
||||
|
||||
onNeedsCavaChanged: {
|
||||
if (root.needsCava) {
|
||||
CavaService.registerComponent("lockscreen");
|
||||
onNeedsSpectrumChanged: {
|
||||
if (root.needsSpectrum) {
|
||||
SpectrumService.registerComponent("lockscreen");
|
||||
} else {
|
||||
CavaService.unregisterComponent("lockscreen");
|
||||
SpectrumService.unregisterComponent("lockscreen");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ Loader {
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
CavaService.unregisterComponent("lockscreen");
|
||||
SpectrumService.unregisterComponent("lockscreen");
|
||||
LockKeysService.unregisterComponent("lockscreen");
|
||||
}
|
||||
|
||||
@@ -125,8 +125,10 @@ Loader {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
acceptedButtons: Qt.NoButton
|
||||
onPositionChanged: {
|
||||
if (passwordInput) {
|
||||
onEntered: {
|
||||
// Avoid repeatedly forcing focus on every mouse move.
|
||||
// This can churn text-input surface state during monitor/suspend transitions.
|
||||
if (passwordInput && !passwordInput.activeFocus) {
|
||||
passwordInput.forceActiveFocus();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@ Item {
|
||||
|
||||
Image {
|
||||
id: lockBgImage
|
||||
visible: source !== "" && Settings.data.wallpaper.enabled && !Settings.data.wallpaper.useSolidColor && !PowerProfileService.noctaliaPerformanceMode
|
||||
visible: source !== "" && Settings.data.wallpaper.enabled && !Settings.data.wallpaper.useSolidColor && (!PowerProfileService.noctaliaPerformanceMode || !Settings.data.noctaliaPerformance.disableWallpaper)
|
||||
anchors.fill: parent
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
source: resolvedWallpaperPath
|
||||
|
||||
@@ -268,7 +268,7 @@ Item {
|
||||
z: 0
|
||||
sourceComponent: NLinearSpectrum {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.4
|
||||
}
|
||||
@@ -281,7 +281,7 @@ Item {
|
||||
z: 0
|
||||
sourceComponent: NMirroredSpectrum {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.4
|
||||
}
|
||||
@@ -294,7 +294,7 @@ Item {
|
||||
z: 0
|
||||
sourceComponent: NWaveSpectrum {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.4
|
||||
}
|
||||
|
||||
@@ -103,6 +103,10 @@ ShapePath {
|
||||
readonly property real blMultY: bar ? ShapeCornerHelper.getMultY(bar.bottomLeftCornerState) : 1
|
||||
readonly property real blRadius: bar ? getCornerRadius(bar.bottomLeftCornerState) : 0
|
||||
|
||||
// True when the bar path has valid, non-degenerate geometry to render.
|
||||
// Mirrors PanelBackground.isRenderable — prevents CurveRenderer crash on zero-area paths.
|
||||
readonly property bool isRenderable: bar !== null && shouldShow && (isFramed ? (screenWidth > 0 && screenHeight > 0) : (barWidth > 0 && barHeight > 0))
|
||||
|
||||
// Extend bar background beyond screen edges where both adjacent corners are flat,
|
||||
// to prevent CurveRenderer antialiasing artifacts on screen-flush edges
|
||||
readonly property real screenEdgeOvershoot: 2
|
||||
@@ -124,160 +128,147 @@ ShapePath {
|
||||
|
||||
// ShapePath configuration
|
||||
strokeWidth: -1 // No stroke, fill only
|
||||
fillColor: Qt.rgba(backgroundColor.r, backgroundColor.g, backgroundColor.b, backgroundColor.a * opacityFactor)
|
||||
fillColor: isRenderable ? Qt.rgba(backgroundColor.r, backgroundColor.g, backgroundColor.b, backgroundColor.a * opacityFactor) : "transparent"
|
||||
fillRule: isFramed ? ShapePath.OddEvenFill : ShapePath.WindingFill
|
||||
|
||||
// Starting position
|
||||
// In framed mode, we start at (0,0) to draw the screen rectangle first
|
||||
startX: isFramed ? 0 : (barMappedPos.x + leftEdgeOvs + tlRadius * tlMultX)
|
||||
startY: isFramed ? 0 : (barMappedPos.y + topEdgeOvs)
|
||||
// Starting position — falls back to off-screen (-1,-1) when not renderable so that
|
||||
// all subsequent path elements form a valid non-degenerate 1×1 off-screen square,
|
||||
// preventing CurveRenderer triangulation crashes on zero-area or bare-moveto paths.
|
||||
startX: isRenderable ? (isFramed ? 0 : (barMappedPos.x + leftEdgeOvs + tlRadius * tlMultX)) : -1
|
||||
startY: isRenderable ? (isFramed ? 0 : (barMappedPos.y + topEdgeOvs)) : -1
|
||||
|
||||
// ========== PATH DEFINITION ==========
|
||||
|
||||
// 1. Main Bar / Outer Screen Rectangle
|
||||
// When !isRenderable all elements use fallback coordinates forming a valid 1×1
|
||||
// off-screen square ((-1,-1)→(0,-1)→(0,0)→(-1,0)→(-1,-1)) so CurveRenderer
|
||||
// never receives a zero-area or bare-moveto path.
|
||||
PathLine {
|
||||
x: {
|
||||
if (!root.shouldShow)
|
||||
return 0;
|
||||
if (root.isFramed)
|
||||
return root.screenWidth;
|
||||
return root.barMappedPos.x + root.barWidth + root.rightEdgeOvs - root.trRadius * root.trMultX;
|
||||
}
|
||||
y: root.isFramed ? 0 : (root.barMappedPos.y + root.topEdgeOvs)
|
||||
x: root.isRenderable ? (root.isFramed ? root.screenWidth : (root.barMappedPos.x + root.barWidth + root.rightEdgeOvs - root.trRadius * root.trMultX)) : 0
|
||||
y: root.isRenderable ? (root.isFramed ? 0 : (root.barMappedPos.y + root.topEdgeOvs)) : -1
|
||||
}
|
||||
|
||||
// Bar top-right corner (only if not framed)
|
||||
PathArc {
|
||||
x: root.isFramed ? (root.shouldShow ? root.screenWidth : 0) : (root.barMappedPos.x + root.barWidth + root.rightEdgeOvs)
|
||||
y: root.isFramed ? 0 : (root.barMappedPos.y + root.topEdgeOvs + root.trRadius * root.trMultY)
|
||||
radiusX: root.isFramed ? 0 : root.trRadius
|
||||
radiusY: root.isFramed ? 0 : root.trRadius
|
||||
x: root.isRenderable ? (root.isFramed ? root.screenWidth : (root.barMappedPos.x + root.barWidth + root.rightEdgeOvs)) : 0
|
||||
y: root.isRenderable ? (root.isFramed ? 0 : (root.barMappedPos.y + root.topEdgeOvs + root.trRadius * root.trMultY)) : -1
|
||||
radiusX: root.isRenderable ? (root.isFramed ? 0 : root.trRadius) : 0
|
||||
radiusY: root.isRenderable ? (root.isFramed ? 0 : root.trRadius) : 0
|
||||
direction: ShapeCornerHelper.getArcDirection(root.trMultX, root.trMultY)
|
||||
}
|
||||
|
||||
PathLine {
|
||||
x: root.isFramed ? (root.shouldShow ? root.screenWidth : 0) : (root.barMappedPos.x + root.barWidth + root.rightEdgeOvs)
|
||||
y: {
|
||||
if (!root.shouldShow)
|
||||
return 0;
|
||||
if (root.isFramed)
|
||||
return root.screenHeight;
|
||||
return root.barMappedPos.y + root.barHeight + root.bottomEdgeOvs - root.brRadius * root.brMultY;
|
||||
}
|
||||
x: root.isRenderable ? (root.isFramed ? root.screenWidth : (root.barMappedPos.x + root.barWidth + root.rightEdgeOvs)) : 0
|
||||
y: root.isRenderable ? (root.isFramed ? root.screenHeight : (root.barMappedPos.y + root.barHeight + root.bottomEdgeOvs - root.brRadius * root.brMultY)) : 0
|
||||
}
|
||||
|
||||
// Bar bottom-right corner (only if not framed)
|
||||
PathArc {
|
||||
x: root.isFramed ? (root.shouldShow ? root.screenWidth : 0) : (root.barMappedPos.x + root.barWidth + root.rightEdgeOvs - root.brRadius * root.brMultX)
|
||||
y: root.isFramed ? (root.shouldShow ? root.screenHeight : 0) : (root.barMappedPos.y + root.barHeight + root.bottomEdgeOvs)
|
||||
radiusX: root.isFramed ? 0 : root.brRadius
|
||||
radiusY: root.isFramed ? 0 : root.brRadius
|
||||
x: root.isRenderable ? (root.isFramed ? root.screenWidth : (root.barMappedPos.x + root.barWidth + root.rightEdgeOvs - root.brRadius * root.brMultX)) : 0
|
||||
y: root.isRenderable ? (root.isFramed ? root.screenHeight : (root.barMappedPos.y + root.barHeight + root.bottomEdgeOvs)) : 0
|
||||
radiusX: root.isRenderable ? (root.isFramed ? 0 : root.brRadius) : 0
|
||||
radiusY: root.isRenderable ? (root.isFramed ? 0 : root.brRadius) : 0
|
||||
direction: ShapeCornerHelper.getArcDirection(root.brMultX, root.brMultY)
|
||||
}
|
||||
|
||||
PathLine {
|
||||
x: {
|
||||
if (!root.shouldShow)
|
||||
return 0;
|
||||
if (root.isFramed)
|
||||
return 0;
|
||||
return root.barMappedPos.x + root.leftEdgeOvs + root.blRadius * root.blMultX;
|
||||
}
|
||||
y: root.isFramed ? (root.shouldShow ? root.screenHeight : 0) : (root.barMappedPos.y + root.barHeight + root.bottomEdgeOvs)
|
||||
x: root.isRenderable ? (root.isFramed ? 0 : (root.barMappedPos.x + root.leftEdgeOvs + root.blRadius * root.blMultX)) : -1
|
||||
y: root.isRenderable ? (root.isFramed ? root.screenHeight : (root.barMappedPos.y + root.barHeight + root.bottomEdgeOvs)) : 0
|
||||
}
|
||||
|
||||
// Bar bottom-left corner (only if not framed)
|
||||
PathArc {
|
||||
x: root.isFramed ? 0 : (root.barMappedPos.x + root.leftEdgeOvs)
|
||||
y: root.isFramed ? (root.shouldShow ? root.screenHeight : 0) : (root.barMappedPos.y + root.barHeight + root.bottomEdgeOvs - root.blRadius * root.blMultY)
|
||||
radiusX: root.isFramed ? 0 : root.blRadius
|
||||
radiusY: root.isFramed ? 0 : root.blRadius
|
||||
x: root.isRenderable ? (root.isFramed ? 0 : (root.barMappedPos.x + root.leftEdgeOvs)) : -1
|
||||
y: root.isRenderable ? (root.isFramed ? root.screenHeight : (root.barMappedPos.y + root.barHeight + root.bottomEdgeOvs - root.blRadius * root.blMultY)) : 0
|
||||
radiusX: root.isRenderable ? (root.isFramed ? 0 : root.blRadius) : 0
|
||||
radiusY: root.isRenderable ? (root.isFramed ? 0 : root.blRadius) : 0
|
||||
direction: ShapeCornerHelper.getArcDirection(root.blMultX, root.blMultY)
|
||||
}
|
||||
|
||||
PathLine {
|
||||
x: root.isFramed ? 0 : (root.barMappedPos.x + root.leftEdgeOvs)
|
||||
y: {
|
||||
if (!root.shouldShow)
|
||||
return 0;
|
||||
if (root.isFramed)
|
||||
return 0;
|
||||
return root.barMappedPos.y + root.topEdgeOvs + root.tlRadius * root.tlMultY;
|
||||
}
|
||||
x: root.isRenderable ? (root.isFramed ? 0 : (root.barMappedPos.x + root.leftEdgeOvs)) : -1
|
||||
y: root.isRenderable ? (root.isFramed ? 0 : (root.barMappedPos.y + root.topEdgeOvs + root.tlRadius * root.tlMultY)) : -1
|
||||
}
|
||||
|
||||
// Bar top-left corner (only if not framed, back to start)
|
||||
PathArc {
|
||||
x: root.isFramed ? 0 : (root.barMappedPos.x + root.leftEdgeOvs + root.tlRadius * root.tlMultX)
|
||||
y: root.isFramed ? 0 : (root.barMappedPos.y + root.topEdgeOvs)
|
||||
radiusX: root.isFramed ? 0 : root.tlRadius
|
||||
radiusY: root.isFramed ? 0 : root.tlRadius
|
||||
x: root.isRenderable ? (root.isFramed ? 0 : (root.barMappedPos.x + root.leftEdgeOvs + root.tlRadius * root.tlMultX)) : -1
|
||||
y: root.isRenderable ? (root.isFramed ? 0 : (root.barMappedPos.y + root.topEdgeOvs)) : -1
|
||||
radiusX: root.isRenderable ? (root.isFramed ? 0 : root.tlRadius) : 0
|
||||
radiusY: root.isRenderable ? (root.isFramed ? 0 : root.tlRadius) : 0
|
||||
direction: ShapeCornerHelper.getArcDirection(root.tlMultX, root.tlMultY)
|
||||
}
|
||||
|
||||
// 2. Inner Hole for Framed Mode (Clockwise)
|
||||
// When !isFramed, draws a tiny 1x1 rectangle inside the bar as a non-degenerate WindingFill
|
||||
// no-op to prevent a zero-area degenerate subpath crashing qTriangulate.
|
||||
// Note: an exact duplicate of the outer path cannot be used here because Qt's CurveRenderer
|
||||
// has issues with exactly coincident subpaths, causing the fill to not render on some systems.
|
||||
// When !isRenderable, falls back to a valid 1×1 off-screen square at (-3,-3)→(-2,-2).
|
||||
readonly property real _nhX: barMappedPos.x + barWidth / 2
|
||||
readonly property real _nhY: barMappedPos.y + barHeight / 2
|
||||
PathMove {
|
||||
x: (root.isFramed && root.shouldShow) ? (root.holeX + root.frameRadius) : root.startX
|
||||
y: (root.isFramed && root.shouldShow) ? root.holeY : root.startY
|
||||
x: root.isRenderable ? (root.isFramed ? (root.holeX + root.frameRadius) : root._nhX) : -3
|
||||
y: root.isRenderable ? (root.isFramed ? root.holeY : root._nhY) : -3
|
||||
}
|
||||
|
||||
// Top edge
|
||||
PathLine {
|
||||
x: (root.isFramed && root.shouldShow) ? (root.holeX + root.holeWidth - root.frameRadius) : ((root.isFramed && root.shouldShow) ? (root.holeX + root.frameRadius) : root.startX)
|
||||
y: (root.isFramed && root.shouldShow) ? root.holeY : ((root.isFramed && root.shouldShow) ? root.holeY : root.startY)
|
||||
x: root.isRenderable ? (root.isFramed ? (root.holeX + root.holeWidth - root.frameRadius) : (root._nhX + 1)) : -2
|
||||
y: root.isRenderable ? (root.isFramed ? root.holeY : root._nhY) : -3
|
||||
}
|
||||
|
||||
// Top-right corner
|
||||
PathArc {
|
||||
x: (root.isFramed && root.shouldShow) ? (root.holeX + root.holeWidth) : ((root.isFramed && root.shouldShow) ? (root.holeX + root.holeWidth - root.frameRadius) : root.startX)
|
||||
y: (root.isFramed && root.shouldShow) ? (root.holeY + root.frameRadius) : ((root.isFramed && root.shouldShow) ? root.holeY : root.startY)
|
||||
radiusX: (root.isFramed && root.shouldShow) ? root.frameRadius : 0
|
||||
radiusY: (root.isFramed && root.shouldShow) ? root.frameRadius : 0
|
||||
x: root.isRenderable ? (root.isFramed ? (root.holeX + root.holeWidth) : (root._nhX + 1)) : -2
|
||||
y: root.isRenderable ? (root.isFramed ? (root.holeY + root.frameRadius) : root._nhY) : -3
|
||||
radiusX: root.isRenderable ? (root.isFramed ? root.frameRadius : 0) : 0
|
||||
radiusY: root.isRenderable ? (root.isFramed ? root.frameRadius : 0) : 0
|
||||
direction: PathArc.Clockwise
|
||||
}
|
||||
|
||||
// Right edge
|
||||
PathLine {
|
||||
x: (root.isFramed && root.shouldShow) ? (root.holeX + root.holeWidth) : root.startX
|
||||
y: (root.isFramed && root.shouldShow) ? (root.holeY + root.holeHeight - root.frameRadius) : root.startY
|
||||
x: root.isRenderable ? (root.isFramed ? (root.holeX + root.holeWidth) : (root._nhX + 1)) : -2
|
||||
y: root.isRenderable ? (root.isFramed ? (root.holeY + root.holeHeight - root.frameRadius) : (root._nhY + 1)) : -2
|
||||
}
|
||||
|
||||
// Bottom-right corner
|
||||
PathArc {
|
||||
x: (root.isFramed && root.shouldShow) ? (root.holeX + root.holeWidth - root.frameRadius) : root.startX
|
||||
y: (root.isFramed && root.shouldShow) ? (root.holeY + root.holeHeight) : root.startY
|
||||
radiusX: (root.isFramed && root.shouldShow) ? root.frameRadius : 0
|
||||
radiusY: (root.isFramed && root.shouldShow) ? root.frameRadius : 0
|
||||
x: root.isRenderable ? (root.isFramed ? (root.holeX + root.holeWidth - root.frameRadius) : (root._nhX + 1)) : -2
|
||||
y: root.isRenderable ? (root.isFramed ? (root.holeY + root.holeHeight) : (root._nhY + 1)) : -2
|
||||
radiusX: root.isRenderable ? (root.isFramed ? root.frameRadius : 0) : 0
|
||||
radiusY: root.isRenderable ? (root.isFramed ? root.frameRadius : 0) : 0
|
||||
direction: PathArc.Clockwise
|
||||
}
|
||||
|
||||
// Bottom edge
|
||||
PathLine {
|
||||
x: (root.isFramed && root.shouldShow) ? (root.holeX + root.frameRadius) : root.startX
|
||||
y: (root.isFramed && root.shouldShow) ? (root.holeY + root.holeHeight) : root.startY
|
||||
x: root.isRenderable ? (root.isFramed ? (root.holeX + root.frameRadius) : root._nhX) : -3
|
||||
y: root.isRenderable ? (root.isFramed ? (root.holeY + root.holeHeight) : (root._nhY + 1)) : -2
|
||||
}
|
||||
|
||||
// Bottom-left corner
|
||||
PathArc {
|
||||
x: (root.isFramed && root.shouldShow) ? root.holeX : root.startX
|
||||
y: (root.isFramed && root.shouldShow) ? (root.holeY + root.holeHeight - root.frameRadius) : root.startY
|
||||
radiusX: (root.isFramed && root.shouldShow) ? root.frameRadius : 0
|
||||
radiusY: (root.isFramed && root.shouldShow) ? root.frameRadius : 0
|
||||
x: root.isRenderable ? (root.isFramed ? root.holeX : root._nhX) : -3
|
||||
y: root.isRenderable ? (root.isFramed ? (root.holeY + root.holeHeight - root.frameRadius) : (root._nhY + 1)) : -2
|
||||
radiusX: root.isRenderable ? (root.isFramed ? root.frameRadius : 0) : 0
|
||||
radiusY: root.isRenderable ? (root.isFramed ? root.frameRadius : 0) : 0
|
||||
direction: PathArc.Clockwise
|
||||
}
|
||||
|
||||
// Left edge
|
||||
PathLine {
|
||||
x: (root.isFramed && root.shouldShow) ? root.holeX : root.startX
|
||||
y: (root.isFramed && root.shouldShow) ? (root.holeY + root.frameRadius) : root.startY
|
||||
x: root.isRenderable ? (root.isFramed ? root.holeX : root._nhX) : -3
|
||||
y: root.isRenderable ? (root.isFramed ? (root.holeY + root.frameRadius) : root._nhY) : -3
|
||||
}
|
||||
|
||||
// Top-left corner (back to start)
|
||||
PathArc {
|
||||
x: (root.isFramed && root.shouldShow) ? (root.holeX + root.frameRadius) : root.startX
|
||||
y: (root.isFramed && root.shouldShow) ? root.holeY : root.startY
|
||||
radiusX: (root.isFramed && root.shouldShow) ? root.frameRadius : 0
|
||||
radiusY: (root.isFramed && root.shouldShow) ? root.frameRadius : 0
|
||||
x: root.isRenderable ? (root.isFramed ? (root.holeX + root.frameRadius) : root._nhX) : -3
|
||||
y: root.isRenderable ? (root.isFramed ? root.holeY : root._nhY) : -3
|
||||
radiusX: root.isRenderable ? (root.isFramed ? root.frameRadius : 0) : 0
|
||||
radiusY: root.isRenderable ? (root.isFramed ? root.frameRadius : 0) : 0
|
||||
direction: PathArc.Clockwise
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ ShapePath {
|
||||
readonly property real panelY: panelBg ? panelBg.y : 0
|
||||
readonly property real panelWidth: panelBg ? panelBg.width : 0
|
||||
readonly property real panelHeight: panelBg ? panelBg.height : 0
|
||||
readonly property bool isRenderable: assignedPanel && panelBg && panelWidth > 0 && panelHeight > 0
|
||||
|
||||
// Flatten corners if panel is too small
|
||||
readonly property bool shouldFlatten: panelBg ? ShapeCornerHelper.shouldFlatten(panelWidth, panelHeight, radius) : false
|
||||
@@ -87,11 +88,11 @@ ShapePath {
|
||||
// ShapePath configuration
|
||||
strokeWidth: -1 // No stroke, fill only
|
||||
|
||||
// Starting position (top-left corner, after the arc)
|
||||
startX: panelX + tlRadius * tlMultX
|
||||
startY: panelY
|
||||
// Start point - use tiny off-screen non-degenerate fallback when not renderable.
|
||||
startX: isRenderable ? (panelX + tlRadius * tlMultX) : -1
|
||||
startY: isRenderable ? panelY : -1
|
||||
|
||||
fillColor: effectiveBackgroundColor
|
||||
fillColor: isRenderable ? effectiveBackgroundColor : "transparent"
|
||||
|
||||
// ========== PATH DEFINITION ==========
|
||||
// Draws a rectangle with potentially inverted corners
|
||||
@@ -99,61 +100,61 @@ ShapePath {
|
||||
|
||||
// Top edge (moving right)
|
||||
PathLine {
|
||||
relativeX: root.panelWidth - root.tlRadius * root.tlMultX - root.trRadius * root.trMultX
|
||||
relativeX: root.isRenderable ? (root.panelWidth - root.tlRadius * root.tlMultX - root.trRadius * root.trMultX) : 1
|
||||
relativeY: 0
|
||||
}
|
||||
|
||||
// Top-right corner arc
|
||||
PathArc {
|
||||
relativeX: root.trRadius * root.trMultX
|
||||
relativeY: root.trRadius * root.trMultY
|
||||
radiusX: root.trRadius
|
||||
radiusY: root.trRadius
|
||||
relativeX: root.isRenderable ? (root.trRadius * root.trMultX) : 0
|
||||
relativeY: root.isRenderable ? (root.trRadius * root.trMultY) : 0
|
||||
radiusX: root.isRenderable ? root.trRadius : 0
|
||||
radiusY: root.isRenderable ? root.trRadius : 0
|
||||
direction: ShapeCornerHelper.getArcDirection(root.trMultX, root.trMultY)
|
||||
}
|
||||
|
||||
// Right edge (moving down)
|
||||
PathLine {
|
||||
relativeX: 0
|
||||
relativeY: root.panelHeight - root.trRadius * root.trMultY - root.brRadius * root.brMultY
|
||||
relativeY: root.isRenderable ? (root.panelHeight - root.trRadius * root.trMultY - root.brRadius * root.brMultY) : 1
|
||||
}
|
||||
|
||||
// Bottom-right corner arc
|
||||
PathArc {
|
||||
relativeX: -root.brRadius * root.brMultX
|
||||
relativeY: root.brRadius * root.brMultY
|
||||
radiusX: root.brRadius
|
||||
radiusY: root.brRadius
|
||||
relativeX: root.isRenderable ? (-root.brRadius * root.brMultX) : 0
|
||||
relativeY: root.isRenderable ? (root.brRadius * root.brMultY) : 0
|
||||
radiusX: root.isRenderable ? root.brRadius : 0
|
||||
radiusY: root.isRenderable ? root.brRadius : 0
|
||||
direction: ShapeCornerHelper.getArcDirection(root.brMultX, root.brMultY)
|
||||
}
|
||||
|
||||
// Bottom edge (moving left)
|
||||
PathLine {
|
||||
relativeX: -(root.panelWidth - root.brRadius * root.brMultX - root.blRadius * root.blMultX)
|
||||
relativeX: root.isRenderable ? (-(root.panelWidth - root.brRadius * root.brMultX - root.blRadius * root.blMultX)) : -1
|
||||
relativeY: 0
|
||||
}
|
||||
|
||||
// Bottom-left corner arc
|
||||
PathArc {
|
||||
relativeX: -root.blRadius * root.blMultX
|
||||
relativeY: -root.blRadius * root.blMultY
|
||||
radiusX: root.blRadius
|
||||
radiusY: root.blRadius
|
||||
relativeX: root.isRenderable ? (-root.blRadius * root.blMultX) : 0
|
||||
relativeY: root.isRenderable ? (-root.blRadius * root.blMultY) : 0
|
||||
radiusX: root.isRenderable ? root.blRadius : 0
|
||||
radiusY: root.isRenderable ? root.blRadius : 0
|
||||
direction: ShapeCornerHelper.getArcDirection(root.blMultX, root.blMultY)
|
||||
}
|
||||
|
||||
// Left edge (moving up) - closes the path back to start
|
||||
PathLine {
|
||||
relativeX: 0
|
||||
relativeY: -(root.panelHeight - root.blRadius * root.blMultY - root.tlRadius * root.tlMultY)
|
||||
relativeY: root.isRenderable ? (-(root.panelHeight - root.blRadius * root.blMultY - root.tlRadius * root.tlMultY)) : -1
|
||||
}
|
||||
|
||||
// Top-left corner arc (back to start)
|
||||
PathArc {
|
||||
relativeX: root.tlRadius * root.tlMultX
|
||||
relativeY: -root.tlRadius * root.tlMultY
|
||||
radiusX: root.tlRadius
|
||||
radiusY: root.tlRadius
|
||||
relativeX: root.isRenderable ? (root.tlRadius * root.tlMultX) : 0
|
||||
relativeY: root.isRenderable ? (-root.tlRadius * root.tlMultY) : 0
|
||||
radiusX: root.isRenderable ? root.tlRadius : 0
|
||||
radiusY: root.isRenderable ? root.tlRadius : 0
|
||||
direction: ShapeCornerHelper.getArcDirection(root.tlMultX, root.tlMultY)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,7 +203,9 @@ PanelWindow {
|
||||
}
|
||||
|
||||
// Blur behind the bar and open panels — attached to PanelWindow (required by BackgroundEffect API)
|
||||
BackgroundEffect.blurRegion: Region {
|
||||
BackgroundEffect.blurRegion: Settings.data.general.enableBlurBehind ? blurRegion : null
|
||||
Region {
|
||||
id: blurRegion
|
||||
// ── Non-framed bar (simple/floating): single rectangle with bar corner states ──
|
||||
Region {
|
||||
x: (!barPlaceholder.isFramed && root.barShouldShow && !barPlaceholder.isHidden) ? barPlaceholder.x : 0
|
||||
@@ -460,14 +462,14 @@ PanelWindow {
|
||||
// Use screen dimensions directly
|
||||
x: {
|
||||
if (barPosition === "right")
|
||||
return screen.width - barHeight - barMarginH;
|
||||
return (screen?.width ?? 0) - barHeight - barMarginH;
|
||||
if (isFramed && !barIsVertical)
|
||||
return frameThickness;
|
||||
return barMarginH;
|
||||
}
|
||||
y: {
|
||||
if (barPosition === "bottom")
|
||||
return screen.height - barHeight - barMarginV;
|
||||
return (screen?.height ?? 0) - barHeight - barMarginV;
|
||||
if (isFramed && barIsVertical)
|
||||
return frameThickness;
|
||||
return barMarginV;
|
||||
@@ -477,16 +479,16 @@ PanelWindow {
|
||||
return barHeight;
|
||||
}
|
||||
if (isFramed)
|
||||
return screen.width - frameThickness * 2;
|
||||
return screen.width - barMarginH * 2;
|
||||
return (screen?.width ?? 0) - frameThickness * 2;
|
||||
return (screen?.width ?? 0) - barMarginH * 2;
|
||||
}
|
||||
height: {
|
||||
if (!barIsVertical) {
|
||||
return barHeight;
|
||||
}
|
||||
if (isFramed)
|
||||
return screen.height - frameThickness * 2;
|
||||
return screen.height - barMarginV * 2;
|
||||
return (screen?.height ?? 0) - frameThickness * 2;
|
||||
return (screen?.height ?? 0) - barMarginV * 2;
|
||||
}
|
||||
|
||||
// Corner states (same as Bar.qml)
|
||||
|
||||
@@ -26,6 +26,7 @@ Item {
|
||||
anchors.fill: parent
|
||||
preferredRendererType: Shape.CurveRenderer
|
||||
enabled: false // Disable mouse input
|
||||
visible: cornersPath.cornerRadius > 0 && width > 0 && height > 0
|
||||
|
||||
ShapePath {
|
||||
id: cornersPath
|
||||
|
||||
@@ -163,11 +163,41 @@ Item {
|
||||
// Reset to default - fixes panel being stuck in one position
|
||||
root.useButtonPosition = false;
|
||||
|
||||
// Calculate the bar window's position on screen based on bar settings
|
||||
// The BarContentWindow uses anchors + margins, so we need to compute its origin
|
||||
var barWindowX = 0;
|
||||
var barWindowY = 0;
|
||||
var screenWidth = root.screen?.width || 0;
|
||||
var screenHeight = root.screen?.height || 0;
|
||||
|
||||
if (root.barPosition === "right") {
|
||||
barWindowX = screenWidth - root.barMarginH - root.barHeight;
|
||||
} else if (root.barPosition === "left") {
|
||||
barWindowX = root.barMarginH;
|
||||
} else if (root.isFramed) {
|
||||
barWindowX = root.frameThickness;
|
||||
} else {
|
||||
// Horizontal floating bars: BarContentWindow has margins.left = barMarginH
|
||||
barWindowX = root.barMarginH;
|
||||
}
|
||||
|
||||
if (root.barPosition === "bottom") {
|
||||
barWindowY = screenHeight - root.barMarginV - root.barHeight;
|
||||
} else if (root.barPosition === "top") {
|
||||
barWindowY = root.barMarginV;
|
||||
} else if (root.isFramed) {
|
||||
barWindowY = root.frameThickness;
|
||||
} else {
|
||||
// Vertical floating bars: BarContentWindow has margins.top = barMarginV
|
||||
barWindowY = root.barMarginV;
|
||||
}
|
||||
|
||||
if (!buttonItem && buttonName) {
|
||||
// Check if buttonName is actually a point object (click coordinates)
|
||||
if (typeof buttonName === "object" && buttonName.x !== undefined && buttonName.y !== undefined) {
|
||||
root.buttonItem = null;
|
||||
root.buttonPosition = buttonName;
|
||||
// Click coordinates are in BarContentWindow-local space, offset to screen space
|
||||
root.buttonPosition = Qt.point(barWindowX + buttonName.x, barWindowY + buttonName.y);
|
||||
root.buttonWidth = 0;
|
||||
root.buttonHeight = 0;
|
||||
root.useButtonPosition = true;
|
||||
@@ -181,34 +211,9 @@ Item {
|
||||
if (buttonItem && typeof buttonItem.mapToItem === "function") {
|
||||
try {
|
||||
root.buttonItem = buttonItem;
|
||||
// Map button position within its window
|
||||
// Map button position within its window (BarContentWindow-local coordinates)
|
||||
var buttonLocal = buttonItem.mapToItem(null, 0, 0);
|
||||
|
||||
// Calculate the bar window's position on screen based on bar settings
|
||||
// The BarContentWindow uses anchors, so we need to compute its position
|
||||
var barWindowX = 0;
|
||||
var barWindowY = 0;
|
||||
var screenWidth = root.screen?.width || 0;
|
||||
var screenHeight = root.screen?.height || 0;
|
||||
|
||||
if (root.barPosition === "right") {
|
||||
barWindowX = screenWidth - root.barMarginH - root.barHeight;
|
||||
} else if (root.barPosition === "left") {
|
||||
barWindowX = root.barMarginH;
|
||||
} else if (root.isFramed) {
|
||||
barWindowX = root.frameThickness;
|
||||
}
|
||||
// For top/bottom bars, barWindowX stays 0 (full width window) unless framed
|
||||
|
||||
if (root.barPosition === "bottom") {
|
||||
barWindowY = screenHeight - root.barMarginV - root.barHeight;
|
||||
} else if (root.barPosition === "top") {
|
||||
barWindowY = root.barMarginV;
|
||||
} else if (root.isFramed) {
|
||||
barWindowY = root.frameThickness;
|
||||
}
|
||||
// For left/right bars, barWindowY stays 0 (full height window) unless framed
|
||||
|
||||
root.buttonPosition = Qt.point(barWindowX + buttonLocal.x, barWindowY + buttonLocal.y);
|
||||
root.buttonWidth = buttonItem.width;
|
||||
root.buttonHeight = buttonItem.height;
|
||||
|
||||
@@ -11,8 +11,15 @@ import qs.Widgets
|
||||
|
||||
// Simple notification popup - displays multiple notifications
|
||||
Variants {
|
||||
// If no notification display activated in settings, then show them all
|
||||
model: Quickshell.screens.filter(screen => (Settings.data.notifications.monitors.includes(screen.name) || (Settings.data.notifications.monitors.length === 0)))
|
||||
|
||||
model: {
|
||||
const screens = Quickshell.screens.filter(screen => Settings.data.notifications.monitors.includes(screen.name));
|
||||
// Empty list can mean two things :
|
||||
// - No (visible) notification display activated in settings
|
||||
// - One or more (not visible) displays are activated but unplugged
|
||||
// In both cases we fallback to show notification on all screens
|
||||
return screens.length === 0 ? Quickshell.screens : screens;
|
||||
}
|
||||
|
||||
delegate: Loader {
|
||||
id: root
|
||||
|
||||
@@ -35,6 +35,7 @@ Variants {
|
||||
property int currentOSDType: -1 // OSD.Type enum value, -1 means none
|
||||
property bool startupComplete: false
|
||||
property real currentBrightness: 0
|
||||
property bool suppressInputOSD: false
|
||||
|
||||
// Lock Key States
|
||||
property string lastLockKeyChanged: "" // "caps", "num", "scroll", or ""
|
||||
@@ -258,11 +259,15 @@ Variants {
|
||||
}
|
||||
|
||||
function onInputVolumeChanged() {
|
||||
if (suppressInputOSD)
|
||||
return;
|
||||
if (AudioService.hasInput)
|
||||
showOSD(OSD.Type.InputVolume);
|
||||
}
|
||||
|
||||
function onInputMutedChanged() {
|
||||
if (suppressInputOSD)
|
||||
return;
|
||||
if (!AudioService.hasInput)
|
||||
return;
|
||||
if (AudioService.consumeInputOSDSuppression())
|
||||
@@ -272,6 +277,8 @@ Variants {
|
||||
|
||||
// Refresh OSD when device changes to ensure correct volume is displayed
|
||||
function onSinkChanged() {
|
||||
suppressInputOSD = true;
|
||||
inputSuppressionTimer.restart();
|
||||
// If volume OSD is currently showing, refresh it to show new device's volume
|
||||
if (root.currentOSDType === OSD.Type.Volume) {
|
||||
Qt.callLater(() => {
|
||||
@@ -344,6 +351,14 @@ Variants {
|
||||
}
|
||||
}
|
||||
|
||||
// Timer to reset the input volume OSD suppression
|
||||
Timer {
|
||||
id: inputSuppressionTimer
|
||||
interval: 300
|
||||
repeat: false
|
||||
onTriggered: root.suppressInputOSD = false
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
LockKeysService.unregisterComponent("osd:" + (modelData?.name || "unknown"));
|
||||
if (typeof BrightnessService !== "undefined" && BrightnessService.monitors) {
|
||||
|
||||
@@ -218,6 +218,10 @@ SmartPanel {
|
||||
Layout.preferredHeight: outputColumn.implicitHeight + Style.margin2M
|
||||
|
||||
property var brightnessMonitor: BrightnessService.getMonitorForScreen(modelData)
|
||||
readonly property real compositorScale: {
|
||||
const info = CompositorService.displayScales[modelData.name];
|
||||
return (info && info.scale) ? info.scale : 1.0;
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: outputColumn
|
||||
@@ -231,7 +235,6 @@ SmartPanel {
|
||||
label: modelData.name || "Unknown"
|
||||
labelColor: Color.mPrimary
|
||||
description: {
|
||||
const compositorScale = CompositorService.getDisplayScale(modelData.name);
|
||||
I18n.tr("system.monitor-description", {
|
||||
"model": modelData.model,
|
||||
"width": modelData.width * compositorScale,
|
||||
|
||||
@@ -88,11 +88,20 @@ SmartPanel {
|
||||
}
|
||||
|
||||
// Preview Panel (external) - uses provider's preview component
|
||||
NDropShadow {
|
||||
source: previewBox
|
||||
anchors.fill: previewBox
|
||||
autoPaddingEnabled: true
|
||||
visible: previewBox.visible
|
||||
z: previewBox.z - 1
|
||||
}
|
||||
|
||||
NBox {
|
||||
id: previewBox
|
||||
visible: root.previewActive
|
||||
width: root.previewPanelWidth
|
||||
height: Math.round(400 * Style.uiScaleRatio)
|
||||
forceOpaque: true // no blur for now
|
||||
x: root.panelAnchorRight ? -(root.previewPanelWidth + Style.marginM) : ui.width + Style.marginM
|
||||
y: {
|
||||
var view = launcherCore.resultsView;
|
||||
@@ -150,20 +159,15 @@ SmartPanel {
|
||||
}
|
||||
|
||||
// Core launcher (state, providers, UI)
|
||||
NBox {
|
||||
LauncherCore {
|
||||
id: launcherCore
|
||||
anchors.fill: parent
|
||||
anchors.margins: Style.marginL
|
||||
|
||||
LauncherCore {
|
||||
id: launcherCore
|
||||
anchors.fill: parent
|
||||
screen: root.screen
|
||||
isOpen: root.isPanelOpen
|
||||
onRequestClose: root.close()
|
||||
// Defer so the signal emission completes before SmartPanel
|
||||
// sets isPanelOpen=false and the contentLoader destroys us.
|
||||
onRequestCloseImmediately: Qt.callLater(root.closeImmediately)
|
||||
}
|
||||
screen: root.screen
|
||||
isOpen: root.isPanelOpen
|
||||
onRequestClose: root.close()
|
||||
// Defer so the signal emission completes before SmartPanel
|
||||
// sets isPanelOpen=false and the contentLoader destroys us.
|
||||
onRequestCloseImmediately: Qt.callLater(root.closeImmediately)
|
||||
}
|
||||
|
||||
// Update preview when selection changes
|
||||
|
||||
@@ -7,7 +7,6 @@ import Quickshell.Widgets
|
||||
import "Providers"
|
||||
import qs.Commons
|
||||
import qs.Services.Keyboard
|
||||
import qs.Services.Noctalia
|
||||
import qs.Services.UI
|
||||
import qs.Widgets
|
||||
|
||||
@@ -160,6 +159,12 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
|
||||
onSearchTextChanged: {
|
||||
if (isOpen) {
|
||||
updateResults();
|
||||
}
|
||||
}
|
||||
|
||||
function onOpened() {
|
||||
ignoreMouseHover = true;
|
||||
globalMouseInitialized = false;
|
||||
@@ -189,11 +194,6 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
|
||||
onSearchTextChanged: {
|
||||
if (isOpen)
|
||||
updateResults();
|
||||
}
|
||||
|
||||
function close() {
|
||||
requestClose();
|
||||
}
|
||||
@@ -227,30 +227,23 @@ Rectangle {
|
||||
var idx = providers.indexOf(pluginProviderInstances[existingId]);
|
||||
if (idx >= 0)
|
||||
providers.splice(idx, 1);
|
||||
pluginProviderInstances[existingId].destroy();
|
||||
delete pluginProviderInstances[existingId];
|
||||
Logger.d("Launcher", "Removed plugin provider:", existingId);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Add new providers
|
||||
// Adopt persistent instances from the registry
|
||||
for (var i = 0; i < registeredIds.length; i++) {
|
||||
var providerId = registeredIds[i];
|
||||
if (!pluginProviderInstances[providerId]) {
|
||||
var component = LauncherProviderRegistry.getProviderComponent(providerId);
|
||||
var pluginId = providerId.substring(7); // Remove "plugin:" prefix
|
||||
var pluginApi = PluginService.getPluginAPI(pluginId);
|
||||
if (component && pluginApi) {
|
||||
var instance = component.createObject(root, {
|
||||
pluginApi: pluginApi
|
||||
});
|
||||
if (instance) {
|
||||
pluginProviderInstances[providerId] = instance;
|
||||
registerProvider(instance);
|
||||
Logger.d("Launcher", "Registered plugin provider:", providerId);
|
||||
changed = true;
|
||||
}
|
||||
var instance = LauncherProviderRegistry.getProviderInstance(providerId);
|
||||
if (instance) {
|
||||
pluginProviderInstances[providerId] = instance;
|
||||
providers.push(instance);
|
||||
instance.launcher = root;
|
||||
Logger.d("Launcher", "Adopted plugin provider:", providerId);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -547,7 +540,9 @@ Rectangle {
|
||||
if (showProviderCategories) {
|
||||
var cats = providerCategories;
|
||||
var idx = cats.indexOf(currentProvider.selectedCategory);
|
||||
currentProvider.selectCategory(cats[(idx + 1) % cats.length]);
|
||||
var nextIdx = (idx + 1) % cats.length;
|
||||
currentProvider.selectCategory(cats[nextIdx]);
|
||||
categoryTabs.currentIndex = nextIdx;
|
||||
} else {
|
||||
selectNextWrapped();
|
||||
}
|
||||
@@ -557,7 +552,9 @@ Rectangle {
|
||||
if (showProviderCategories) {
|
||||
var cats2 = providerCategories;
|
||||
var idx2 = cats2.indexOf(currentProvider.selectedCategory);
|
||||
currentProvider.selectCategory(cats2[((idx2 - 1) % cats2.length + cats2.length) % cats2.length]);
|
||||
var prevIdx = ((idx2 - 1) % cats2.length + cats2.length) % cats2.length;
|
||||
currentProvider.selectCategory(cats2[prevIdx]);
|
||||
categoryTabs.currentIndex = prevIdx;
|
||||
} else {
|
||||
selectPreviousWrapped();
|
||||
}
|
||||
@@ -787,7 +784,7 @@ Rectangle {
|
||||
horizontalPolicy: ScrollBar.AlwaysOff
|
||||
verticalPolicy: ScrollBar.AlwaysOff
|
||||
reserveScrollbarSpace: false
|
||||
gradientColor: Color.mSurfaceVariant
|
||||
gradientColor: Settings.data.ui.panelBackgroundOpacity < 1 ? "transparent" : Color.mSurfaceVariant
|
||||
wheelScrollMultiplier: 4.0
|
||||
|
||||
width: parent.width
|
||||
@@ -810,6 +807,12 @@ Rectangle {
|
||||
|
||||
property bool isSelected: (!root.ignoreMouseHover && mouseArea.containsMouse) || (index === root.selectedIndex)
|
||||
|
||||
width: resultsList.availableWidth
|
||||
implicitHeight: root.entryHeight
|
||||
clip: true
|
||||
color: entry.isSelected ? Color.mHover : Color.mSurface
|
||||
forceOpaque: entry.isSelected
|
||||
|
||||
// Prepare item when it becomes visible (e.g., decode images)
|
||||
Component.onCompleted: {
|
||||
var provider = modelData.provider;
|
||||
@@ -818,11 +821,6 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
|
||||
width: resultsList.availableWidth
|
||||
implicitHeight: root.entryHeight
|
||||
clip: true
|
||||
color: entry.isSelected ? Color.mHover : Color.mSurface
|
||||
|
||||
Behavior on color {
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
@@ -1090,6 +1088,7 @@ Rectangle {
|
||||
NBox {
|
||||
anchors.fill: parent
|
||||
color: Color.mSurfaceVariant
|
||||
forceOpaque: true
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
@@ -1135,7 +1134,7 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------
|
||||
// // --------------------------
|
||||
// GRID VIEW
|
||||
Component {
|
||||
id: gridViewComponent
|
||||
@@ -1145,7 +1144,7 @@ Rectangle {
|
||||
horizontalPolicy: ScrollBar.AlwaysOff
|
||||
verticalPolicy: ScrollBar.AlwaysOff
|
||||
reserveScrollbarSpace: false
|
||||
gradientColor: Color.mSurfaceVariant
|
||||
gradientColor: Settings.data.ui.panelBackgroundOpacity < 1 ? "transparent" : Color.mSurfaceVariant
|
||||
wheelScrollMultiplier: 4.0
|
||||
trackedSelectionIndex: root.selectedIndex
|
||||
|
||||
@@ -1215,6 +1214,7 @@ Rectangle {
|
||||
anchors.fill: parent
|
||||
anchors.margins: Style.marginXXS
|
||||
color: gridEntryContainer.isSelected ? Color.mHover : Color.mSurface
|
||||
forceOpaque: gridEntryContainer.isSelected
|
||||
|
||||
Behavior on color {
|
||||
ColorAnimation {
|
||||
|
||||
@@ -40,6 +40,31 @@ Variants {
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
WlrLayershell.exclusionMode: ExclusionMode.Ignore
|
||||
|
||||
BackgroundEffect.blurRegion: Settings.data.general.enableBlurBehind ? launcherBlurRegion : null
|
||||
Region {
|
||||
id: launcherBlurRegion
|
||||
|
||||
Region {
|
||||
x: Math.round(launcherPanel.x)
|
||||
y: Math.round(launcherPanel.y)
|
||||
width: Math.round(launcherPanel.width)
|
||||
height: Math.round(launcherPanel.height)
|
||||
radius: Style.radiusL
|
||||
topLeftCorner: launcherPanel.topLeftCornerState
|
||||
topRightCorner: launcherPanel.topRightCornerState
|
||||
bottomLeftCorner: launcherPanel.bottomLeftCornerState
|
||||
bottomRightCorner: launcherPanel.bottomRightCornerState
|
||||
}
|
||||
|
||||
Region {
|
||||
x: Math.round(previewBox.visible ? previewBox.x : 0)
|
||||
y: Math.round(previewBox.visible ? previewBox.y : 0)
|
||||
width: Math.round(previewBox.visible ? previewBox.width : 0)
|
||||
height: Math.round(previewBox.visible ? previewBox.height : 0)
|
||||
radius: Style.radiusL
|
||||
}
|
||||
}
|
||||
|
||||
// Positioning logic (respects settings but doesn't attach to bar)
|
||||
readonly property string barPosition: Settings.data.bar.position
|
||||
readonly property bool barIsVertical: barPosition === "left" || barPosition === "right"
|
||||
@@ -198,6 +223,7 @@ Variants {
|
||||
y: -radius
|
||||
width: launcherPanel.width + radius * 2
|
||||
height: launcherPanel.height + radius * 2
|
||||
visible: panelW > 0 && panelH > 0
|
||||
opacity: launcherPanel.opacity
|
||||
layer.enabled: true
|
||||
|
||||
@@ -229,7 +255,7 @@ Variants {
|
||||
|
||||
ShapePath {
|
||||
strokeWidth: -1
|
||||
fillColor: Color.mSurfaceVariant
|
||||
fillColor: Qt.alpha(Color.mSurfaceVariant, Settings.data.ui.panelBackgroundOpacity)
|
||||
|
||||
// Offset by radius to account for Shape's extended bounds
|
||||
startX: panelShape.radius + panelShape.radius * panelShape.tlMultX
|
||||
@@ -311,83 +337,88 @@ Variants {
|
||||
Component.onCompleted: PanelService.overlayLauncherCore = launcherCore
|
||||
Component.onDestruction: PanelService.overlayLauncherCore = null
|
||||
}
|
||||
}
|
||||
|
||||
// Preview Panel - clipboard preview positioned outside panel bounds
|
||||
NDropShadow {
|
||||
source: previewBox
|
||||
anchors.fill: previewBox
|
||||
autoPaddingEnabled: true
|
||||
visible: previewBox.visible
|
||||
// Preview Panel - positioned as sibling of launcherPanel to avoid shadow bleed
|
||||
NDropShadow {
|
||||
source: previewBox
|
||||
anchors.fill: previewBox
|
||||
autoPaddingEnabled: true
|
||||
visible: previewBox.visible
|
||||
z: previewBox.z - 1
|
||||
}
|
||||
|
||||
NBox {
|
||||
id: previewBox
|
||||
visible: launcherWindow.previewActive
|
||||
width: launcherWindow.previewPanelWidth
|
||||
height: Math.round(400 * Style.uiScaleRatio)
|
||||
forceOpaque: true
|
||||
x: {
|
||||
if (panelPosition.endsWith("_right"))
|
||||
return launcherPanel.x - launcherWindow.previewPanelWidth - Style.marginM;
|
||||
return launcherPanel.x + launcherPanel.width + Style.marginM;
|
||||
}
|
||||
y: {
|
||||
var view = launcherCore.resultsView;
|
||||
if (!view)
|
||||
return launcherPanel.y + Style.marginL;
|
||||
var row = launcherCore.isGridView ? Math.floor(launcherCore.selectedIndex / launcherCore.gridColumns) : launcherCore.selectedIndex;
|
||||
var gridCellSize = Math.floor((launcherWindow.listPanelWidth - (2 * Style.marginXS) - ((launcherCore.targetGridColumns - 1) * Style.marginS)) / launcherCore.targetGridColumns);
|
||||
var itemHeight = launcherCore.isGridView ? (gridCellSize + Style.marginXXS) : (launcherCore.entryHeight + (view.spacing || 0));
|
||||
var yPos = row * itemHeight - (view.contentY || 0);
|
||||
var mapped = view.mapToItem(launcherWindow.contentItem, 0, yPos);
|
||||
return Math.max(launcherPanel.y + Style.marginL, Math.min(mapped.y, launcherPanel.y + launcherPanel.height - previewBox.height - Style.marginL));
|
||||
}
|
||||
|
||||
NBox {
|
||||
id: previewBox
|
||||
visible: launcherWindow.previewActive
|
||||
width: launcherWindow.previewPanelWidth
|
||||
height: Math.round(400 * Style.uiScaleRatio)
|
||||
x: panelPosition.endsWith("_right") ? -(launcherWindow.previewPanelWidth + Style.marginM) : launcherPanel.width + Style.marginM
|
||||
y: {
|
||||
var view = launcherCore.resultsView;
|
||||
if (!view)
|
||||
return Style.marginL;
|
||||
var row = launcherCore.isGridView ? Math.floor(launcherCore.selectedIndex / launcherCore.gridColumns) : launcherCore.selectedIndex;
|
||||
var gridCellSize = Math.floor((launcherWindow.listPanelWidth - (2 * Style.marginXS) - ((launcherCore.targetGridColumns - 1) * Style.marginS)) / launcherCore.targetGridColumns);
|
||||
var itemHeight = launcherCore.isGridView ? (gridCellSize + Style.marginXXS) : (launcherCore.entryHeight + (view.spacing || 0));
|
||||
var yPos = row * itemHeight - (view.contentY || 0);
|
||||
var mapped = view.mapToItem(launcherPanel, 0, yPos);
|
||||
return Math.max(Style.marginL, Math.min(mapped.y, launcherPanel.height - previewBox.height - Style.marginL));
|
||||
opacity: visible ? 1.0 : 0.0
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
}
|
||||
z: -1
|
||||
}
|
||||
Behavior on y {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
|
||||
opacity: visible ? 1.0 : 0.0
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
}
|
||||
}
|
||||
Behavior on y {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: previewLoader
|
||||
anchors.fill: parent
|
||||
active: launcherWindow.previewActive
|
||||
source: {
|
||||
if (!active)
|
||||
return "";
|
||||
var provider = launcherCore.activeProvider;
|
||||
if (provider && provider.previewComponentPath)
|
||||
return provider.previewComponentPath;
|
||||
Loader {
|
||||
id: previewLoader
|
||||
anchors.fill: parent
|
||||
active: launcherWindow.previewActive
|
||||
source: {
|
||||
if (!active)
|
||||
return "";
|
||||
}
|
||||
var provider = launcherCore.activeProvider;
|
||||
if (provider && provider.previewComponentPath)
|
||||
return provider.previewComponentPath;
|
||||
return "";
|
||||
}
|
||||
|
||||
onLoaded: updatePreviewItem()
|
||||
onItemChanged: updatePreviewItem()
|
||||
onLoaded: updatePreviewItem()
|
||||
onItemChanged: updatePreviewItem()
|
||||
|
||||
function updatePreviewItem() {
|
||||
if (!item || launcherCore.selectedIndex < 0 || !launcherCore.results[launcherCore.selectedIndex])
|
||||
return;
|
||||
var provider = launcherCore.activeProvider;
|
||||
if (provider && provider.getPreviewData) {
|
||||
item.currentItem = provider.getPreviewData(launcherCore.results[launcherCore.selectedIndex]);
|
||||
} else {
|
||||
item.currentItem = launcherCore.results[launcherCore.selectedIndex];
|
||||
}
|
||||
function updatePreviewItem() {
|
||||
if (!item || launcherCore.selectedIndex < 0 || !launcherCore.results[launcherCore.selectedIndex])
|
||||
return;
|
||||
var provider = launcherCore.activeProvider;
|
||||
if (provider && provider.getPreviewData) {
|
||||
item.currentItem = provider.getPreviewData(launcherCore.results[launcherCore.selectedIndex]);
|
||||
} else {
|
||||
item.currentItem = launcherCore.results[launcherCore.selectedIndex];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update preview when selection changes
|
||||
Connections {
|
||||
target: launcherCore
|
||||
function onSelectedIndexChanged() {
|
||||
if (previewLoader.item)
|
||||
previewLoader.updatePreviewItem();
|
||||
}
|
||||
// Update preview when selection changes
|
||||
Connections {
|
||||
target: launcherCore
|
||||
function onSelectedIndexChanged() {
|
||||
if (previewLoader.item)
|
||||
previewLoader.updatePreviewItem();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,45 +153,42 @@ Item {
|
||||
if (launcher)
|
||||
launcher.close();
|
||||
|
||||
// Execute via Qt.callLater, but reference only singletons
|
||||
// (root may be destroyed after launcher.close() unloads the panel)
|
||||
Qt.callLater(() => {
|
||||
executeAction(action);
|
||||
switch (action) {
|
||||
case "lock":
|
||||
if (PanelService.lockScreen && !PanelService.lockScreen.active) {
|
||||
PanelService.lockScreen.active = true;
|
||||
}
|
||||
break;
|
||||
case "suspend":
|
||||
if (Settings.data.general.lockOnSuspend) {
|
||||
CompositorService.lockAndSuspend();
|
||||
} else {
|
||||
CompositorService.suspend();
|
||||
}
|
||||
break;
|
||||
case "hibernate":
|
||||
CompositorService.hibernate();
|
||||
break;
|
||||
case "reboot":
|
||||
CompositorService.reboot();
|
||||
break;
|
||||
case "rebootToUefi":
|
||||
CompositorService.rebootToUefi();
|
||||
break;
|
||||
case "userspaceReboot":
|
||||
CompositorService.userspaceReboot();
|
||||
break;
|
||||
case "logout":
|
||||
CompositorService.logout();
|
||||
break;
|
||||
case "shutdown":
|
||||
CompositorService.shutdown();
|
||||
break;
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
function executeAction(action) {
|
||||
// Default behavior or custom command handled by CompositorService
|
||||
switch (action) {
|
||||
case "lock":
|
||||
if (PanelService.lockScreen && !PanelService.lockScreen.active) {
|
||||
PanelService.lockScreen.active = true;
|
||||
}
|
||||
break;
|
||||
case "suspend":
|
||||
if (Settings.data.general.lockOnSuspend) {
|
||||
CompositorService.lockAndSuspend();
|
||||
} else {
|
||||
CompositorService.suspend();
|
||||
}
|
||||
break;
|
||||
case "hibernate":
|
||||
CompositorService.hibernate();
|
||||
break;
|
||||
case "reboot":
|
||||
CompositorService.reboot();
|
||||
break;
|
||||
case "rebootToUefi":
|
||||
CompositorService.rebootToUefi();
|
||||
break;
|
||||
case "userspaceReboot":
|
||||
CompositorService.userspaceReboot();
|
||||
break;
|
||||
case "logout":
|
||||
CompositorService.logout();
|
||||
break;
|
||||
case "shutdown":
|
||||
CompositorService.shutdown();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,24 +49,24 @@ SmartPanel {
|
||||
|
||||
readonly property bool isSideBySide: root.compactMode && root.showAlbumArt
|
||||
|
||||
readonly property bool needsCava: root.showVisualizer && root.visualizerType !== "" && root.visualizerType !== "none" && root.isPanelOpen
|
||||
readonly property bool needsSpectrum: root.showVisualizer && root.visualizerType !== "" && root.visualizerType !== "none" && root.isPanelOpen
|
||||
|
||||
onNeedsCavaChanged: {
|
||||
if (root.needsCava) {
|
||||
CavaService.registerComponent("mediaplayerpanel");
|
||||
onNeedsSpectrumChanged: {
|
||||
if (root.needsSpectrum) {
|
||||
SpectrumService.registerComponent("mediaplayerpanel");
|
||||
} else {
|
||||
CavaService.unregisterComponent("mediaplayerpanel");
|
||||
SpectrumService.unregisterComponent("mediaplayerpanel");
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (root.needsCava) {
|
||||
CavaService.registerComponent("mediaplayerpanel");
|
||||
if (root.needsSpectrum) {
|
||||
SpectrumService.registerComponent("mediaplayerpanel");
|
||||
}
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
CavaService.unregisterComponent("mediaplayerpanel");
|
||||
SpectrumService.unregisterComponent("mediaplayerpanel");
|
||||
}
|
||||
|
||||
panelContent: Item {
|
||||
@@ -238,7 +238,7 @@ SmartPanel {
|
||||
Loader {
|
||||
anchors.fill: parent
|
||||
z: 0
|
||||
active: !!(root.needsCava && !root.showAlbumArt)
|
||||
active: !!(root.needsSpectrum && !root.showAlbumArt)
|
||||
sourceComponent: visualizerSource
|
||||
}
|
||||
|
||||
@@ -276,7 +276,7 @@ SmartPanel {
|
||||
anchors.fill: parent
|
||||
anchors.margins: Style.marginS
|
||||
z: 2
|
||||
active: !!(root.needsCava && root.showAlbumArt)
|
||||
active: !!(root.needsSpectrum && root.showAlbumArt)
|
||||
sourceComponent: visualizerSource
|
||||
}
|
||||
}
|
||||
@@ -492,7 +492,7 @@ SmartPanel {
|
||||
NLinearSpectrum {
|
||||
width: parent.width - Style.marginS
|
||||
height: 20
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.4
|
||||
barPosition: Settings.getBarPositionForScreen(root.screen?.name)
|
||||
@@ -504,7 +504,7 @@ SmartPanel {
|
||||
NMirroredSpectrum {
|
||||
width: parent.width - Style.marginS
|
||||
height: parent.height - Style.marginS
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.4
|
||||
}
|
||||
@@ -515,7 +515,7 @@ SmartPanel {
|
||||
NWaveSpectrum {
|
||||
width: parent.width - Style.marginS
|
||||
height: parent.height - Style.marginS
|
||||
values: CavaService.values
|
||||
values: SpectrumService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 0.4
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ ColumnLayout {
|
||||
property string valueEmptyColor: widgetData.emptyColor !== undefined ? widgetData.emptyColor : widgetMetadata.emptyColor
|
||||
property bool valueShowBadge: widgetData.showBadge !== undefined ? widgetData.showBadge : widgetMetadata.showBadge
|
||||
property real valuePillSize: widgetData.pillSize !== undefined ? widgetData.pillSize : widgetMetadata.pillSize
|
||||
property string valueFontWeight: widgetData.fontWeight !== undefined ? widgetData.fontWeight : widgetMetadata.fontWeight
|
||||
|
||||
function saveSettings() {
|
||||
var settings = Object.assign({}, widgetData || {});
|
||||
@@ -52,6 +53,7 @@ ColumnLayout {
|
||||
settings.emptyColor = valueEmptyColor;
|
||||
settings.showBadge = valueShowBadge;
|
||||
settings.pillSize = valuePillSize;
|
||||
settings.fontWeight = valueFontWeight;
|
||||
settingsChanged(settings);
|
||||
}
|
||||
|
||||
@@ -115,6 +117,36 @@ ColumnLayout {
|
||||
visible: !valueShowApplications
|
||||
}
|
||||
|
||||
NComboBox {
|
||||
id: fontWeightCombo
|
||||
label: I18n.tr("bar.workspace.font-weight-label")
|
||||
description: I18n.tr("bar.workspace.font-weight-description")
|
||||
model: [
|
||||
{
|
||||
"key": "regular",
|
||||
"name": I18n.tr("common.font-weight-regular")
|
||||
},
|
||||
{
|
||||
"key": "medium",
|
||||
"name": I18n.tr("common.font-weight-medium")
|
||||
},
|
||||
{
|
||||
"key": "semibold",
|
||||
"name": I18n.tr("common.font-weight-semibold")
|
||||
},
|
||||
{
|
||||
"key": "bold",
|
||||
"name": I18n.tr("common.font-weight-bold")
|
||||
},
|
||||
]
|
||||
currentKey: widgetData.fontWeight || widgetMetadata.fontWeight
|
||||
onSelected: key => {
|
||||
valueFontWeight = key;
|
||||
saveSettings();
|
||||
}
|
||||
minimumWidth: 200
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: I18n.tr("bar.workspace.hide-unoccupied-label")
|
||||
description: I18n.tr("bar.workspace.hide-unoccupied-description")
|
||||
|
||||
@@ -154,6 +154,12 @@ Popup {
|
||||
saveTimer.start();
|
||||
}
|
||||
}
|
||||
|
||||
function onSettingsSaved(newSettings) {
|
||||
if (newSettings) {
|
||||
root.updateWidgetSettings(root.sectionId, root.widgetIndex, newSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function saveAndClose() {
|
||||
@@ -172,19 +178,42 @@ Popup {
|
||||
var pluginId = widgetId.replace("plugin:", "");
|
||||
var manifest = PluginRegistry.getPluginManifest(pluginId);
|
||||
|
||||
if (!manifest || !manifest.entryPoints || !manifest.entryPoints.settings) {
|
||||
Logger.w("DesktopWidgetSettingsDialog", "Plugin does not have settings:", pluginId);
|
||||
return;
|
||||
}
|
||||
|
||||
var pluginDir = PluginRegistry.getPluginDir(pluginId);
|
||||
var settingsPath = "file://" + pluginDir + "/" + manifest.entryPoints.settings;
|
||||
var loadVersion = PluginRegistry.pluginLoadVersions[pluginId] || 0;
|
||||
var api = PluginService.getPluginAPI(pluginId);
|
||||
|
||||
settingsLoader.setSource(settingsPath + "?v=" + loadVersion, {
|
||||
"pluginApi": api
|
||||
});
|
||||
var settingsPath;
|
||||
if (manifest && manifest.entryPoints && manifest.entryPoints.desktopWidgetSettings) {
|
||||
settingsPath = "file://" + pluginDir + "/" + manifest.entryPoints.desktopWidgetSettings;
|
||||
|
||||
var widgetSettings = {};
|
||||
widgetSettings.data = widgetData || {};
|
||||
widgetSettings.metadata = DesktopWidgetRegistry.widgetMetadata[widgetId] || {};
|
||||
widgetSettings.save = function () {
|
||||
var newSettings = Object.assign({}, widgetSettings.data);
|
||||
root.settingsCache = newSettings;
|
||||
saveTimer.start();
|
||||
};
|
||||
|
||||
settingsLoader.setSource(settingsPath + "?v=" + loadVersion, {
|
||||
"pluginApi": api,
|
||||
"widgetSettings": widgetSettings
|
||||
});
|
||||
} else {
|
||||
Logger.w("DesktopWidgetSettingsDialog", "Plugin does not have desktop widget settings:", pluginId);
|
||||
|
||||
// Fallback to the plugin settings
|
||||
if (manifest && manifest.entryPoints && manifest.entryPoints.settings) {
|
||||
settingsPath = "file://" + pluginDir + "/" + manifest.entryPoints.settings;
|
||||
|
||||
settingsLoader.setSource(settingsPath + "?v=" + loadVersion, {
|
||||
"pluginApi": api
|
||||
});
|
||||
} else {
|
||||
Logger.w("DesktopWidgetSettingsDialog", "Plugin does not have settings:", pluginId);
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import qs.Commons
|
||||
import qs.Widgets
|
||||
|
||||
ColumnLayout {
|
||||
id: root
|
||||
spacing: Style.marginM
|
||||
|
||||
property var widgetData: null
|
||||
property var widgetMetadata: null
|
||||
|
||||
signal settingsChanged(var settings)
|
||||
|
||||
property int valueWidth: widgetData.width !== undefined ? widgetData.width : widgetMetadata.width
|
||||
property int valueHeight: widgetData.height !== undefined ? widgetData.height : widgetMetadata.height
|
||||
property string valueVisualizerType: widgetData.visualizerType !== undefined ? widgetData.visualizerType : widgetMetadata.visualizerType
|
||||
property string valueColorName: widgetData.colorName !== undefined ? widgetData.colorName : widgetMetadata.colorName
|
||||
property bool valueHideWhenIdle: widgetData.hideWhenIdle !== undefined ? widgetData.hideWhenIdle : widgetMetadata.hideWhenIdle
|
||||
property bool valueShowBackground: widgetData.showBackground !== undefined ? widgetData.showBackground : widgetMetadata.showBackground
|
||||
property bool valueRoundedCorners: widgetData.roundedCorners !== undefined ? widgetData.roundedCorners : widgetMetadata.roundedCorners
|
||||
|
||||
function saveSettings() {
|
||||
var settings = Object.assign({}, widgetData || {});
|
||||
settings.width = valueWidth;
|
||||
settings.height = valueHeight;
|
||||
settings.visualizerType = valueVisualizerType;
|
||||
settings.colorName = valueColorName;
|
||||
settings.hideWhenIdle = valueHideWhenIdle;
|
||||
settings.showBackground = valueShowBackground;
|
||||
settings.roundedCorners = valueRoundedCorners;
|
||||
settingsChanged(settings);
|
||||
}
|
||||
|
||||
NTextInput {
|
||||
id: widthInput
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("common.width")
|
||||
description: I18n.tr("bar.audio-visualizer.width-description")
|
||||
text: String(valueWidth)
|
||||
placeholderText: I18n.tr("placeholders.enter-width-pixels")
|
||||
inputMethodHints: Qt.ImhDigitsOnly
|
||||
onEditingFinished: {
|
||||
const parsed = parseInt(text);
|
||||
if (!isNaN(parsed) && parsed > 0) {
|
||||
valueWidth = parsed;
|
||||
saveSettings();
|
||||
} else {
|
||||
text = String(valueWidth);
|
||||
}
|
||||
}
|
||||
defaultValue: String(widgetMetadata.width)
|
||||
}
|
||||
|
||||
NTextInput {
|
||||
id: heightInput
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("common.height")
|
||||
description: I18n.tr("bar.audio-visualizer.height-description")
|
||||
text: String(valueHeight)
|
||||
placeholderText: I18n.tr("placeholders.enter-width-pixels")
|
||||
inputMethodHints: Qt.ImhDigitsOnly
|
||||
onEditingFinished: {
|
||||
const parsed = parseInt(text);
|
||||
if (!isNaN(parsed) && parsed > 0) {
|
||||
valueHeight = parsed;
|
||||
saveSettings();
|
||||
} else {
|
||||
text = String(valueHeight);
|
||||
}
|
||||
}
|
||||
defaultValue: String(widgetMetadata.height)
|
||||
}
|
||||
|
||||
NComboBox {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("panels.audio.visualizer-type-label")
|
||||
description: I18n.tr("panels.desktop-widgets.media-player-visualizer-type-description")
|
||||
model: [
|
||||
{
|
||||
"key": "linear",
|
||||
"name": I18n.tr("options.visualizer-types.linear")
|
||||
},
|
||||
{
|
||||
"key": "mirrored",
|
||||
"name": I18n.tr("options.visualizer-types.mirrored")
|
||||
},
|
||||
{
|
||||
"key": "wave",
|
||||
"name": I18n.tr("options.visualizer-types.wave")
|
||||
}
|
||||
]
|
||||
currentKey: valueVisualizerType
|
||||
onSelected: key => {
|
||||
valueVisualizerType = key;
|
||||
saveSettings();
|
||||
}
|
||||
defaultValue: widgetMetadata.visualizerType
|
||||
}
|
||||
|
||||
NColorChoice {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("bar.audio-visualizer.color-name-label")
|
||||
description: I18n.tr("bar.audio-visualizer.color-name-description")
|
||||
currentKey: valueColorName
|
||||
onSelected: key => {
|
||||
valueColorName = key;
|
||||
saveSettings();
|
||||
}
|
||||
defaultValue: widgetMetadata.colorName
|
||||
}
|
||||
|
||||
NToggle {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("bar.audio-visualizer.hide-when-idle-label")
|
||||
description: I18n.tr("bar.audio-visualizer.hide-when-idle-description")
|
||||
checked: valueHideWhenIdle
|
||||
onToggled: checked => {
|
||||
valueHideWhenIdle = checked;
|
||||
saveSettings();
|
||||
}
|
||||
defaultValue: widgetMetadata.hideWhenIdle
|
||||
}
|
||||
|
||||
NDivider {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
NToggle {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("panels.desktop-widgets.clock-show-background-label")
|
||||
description: I18n.tr("panels.desktop-widgets.media-player-show-background-description")
|
||||
checked: valueShowBackground
|
||||
onToggled: checked => {
|
||||
valueShowBackground = checked;
|
||||
saveSettings();
|
||||
}
|
||||
defaultValue: widgetMetadata.showBackground
|
||||
}
|
||||
|
||||
NToggle {
|
||||
Layout.fillWidth: true
|
||||
visible: valueShowBackground
|
||||
label: I18n.tr("panels.desktop-widgets.clock-rounded-corners-label")
|
||||
description: I18n.tr("panels.desktop-widgets.media-player-rounded-corners-description")
|
||||
checked: valueRoundedCorners
|
||||
onToggled: checked => {
|
||||
valueRoundedCorners = checked;
|
||||
saveSettings();
|
||||
}
|
||||
defaultValue: widgetMetadata.roundedCorners
|
||||
}
|
||||
}
|
||||
@@ -624,8 +624,8 @@ Item {
|
||||
"source": regionTab
|
||||
},
|
||||
{
|
||||
"id": SettingsPanel.Tab.SystemMonitor,
|
||||
"label": "system-monitor.title",
|
||||
"id": SettingsPanel.Tab.System,
|
||||
"label": "panels.system.title",
|
||||
"icon": "settings-system-monitor",
|
||||
"source": systemMonitorTab
|
||||
},
|
||||
@@ -1264,6 +1264,7 @@ Item {
|
||||
anchors.fill: parent
|
||||
horizontalPolicy: ScrollBar.AlwaysOff
|
||||
verticalPolicy: ScrollBar.AsNeeded
|
||||
showScrollbarWhenScrollable: true
|
||||
leftPadding: Style.marginL
|
||||
topPadding: Style.marginL
|
||||
bottomPadding: Style.marginL
|
||||
|
||||
@@ -89,7 +89,7 @@ SmartPanel {
|
||||
Notifications,
|
||||
Plugins,
|
||||
SessionMenu,
|
||||
SystemMonitor,
|
||||
System,
|
||||
UserInterface,
|
||||
Wallpaper
|
||||
}
|
||||
|
||||
@@ -32,22 +32,34 @@ ColumnLayout {
|
||||
property string currentVersion: UpdateService.currentVersion
|
||||
property string commitInfo: ""
|
||||
property string qsVersion: ""
|
||||
property string qsRevision: ""
|
||||
|
||||
readonly property bool isGitVersion: root.currentVersion.endsWith("-git")
|
||||
readonly property int gigaB: (1024 * 1024 * 1024)
|
||||
readonly property int gigaD: (1000 * 1000 * 1000)
|
||||
|
||||
// Update status: compare versions (strip -git suffix for comparison)
|
||||
readonly property string installedBase: root.currentVersion.replace("-git", "")
|
||||
// Update status: compare versions
|
||||
readonly property bool updateAvailable: {
|
||||
if (!root.latestVersion || !root.installedBase)
|
||||
if (!root.latestVersion || !root.currentVersion || root.latestVersion === I18n.tr("common.unknown"))
|
||||
return false;
|
||||
return root.latestVersion !== root.installedBase && !root.isGitVersion;
|
||||
return UpdateService.compareVersions(root.latestVersion, root.currentVersion) > 0 && !root.isGitVersion;
|
||||
}
|
||||
readonly property bool isUpToDate: {
|
||||
if (!root.latestVersion || !root.installedBase)
|
||||
if (!root.latestVersion || !root.currentVersion || root.latestVersion === I18n.tr("common.unknown"))
|
||||
return false;
|
||||
return root.latestVersion === root.installedBase;
|
||||
return UpdateService.compareVersions(root.latestVersion, root.currentVersion) <= 0;
|
||||
}
|
||||
|
||||
readonly property bool qsUpdateAvailable: {
|
||||
if (!GitHubService.latestQSVersion || !root.qsVersion || GitHubService.latestQSVersion === I18n.tr("common.unknown"))
|
||||
return false;
|
||||
return UpdateService.compareVersions(GitHubService.latestQSVersion, root.qsVersion) > 0;
|
||||
}
|
||||
|
||||
readonly property bool qsIsUpToDate: {
|
||||
if (!GitHubService.latestQSVersion || !root.qsVersion || GitHubService.latestQSVersion === I18n.tr("common.unknown"))
|
||||
return false;
|
||||
return UpdateService.compareVersions(GitHubService.latestQSVersion, root.qsVersion) <= 0;
|
||||
}
|
||||
|
||||
// System info properties
|
||||
@@ -116,15 +128,21 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
function copyInfoToClipboard() {
|
||||
let info = "Noctalia Shell\n";
|
||||
info += "==============\n";
|
||||
info += "Installed version: " + root.currentVersion + "\n";
|
||||
let info = "Noctalia Shell: " + root.currentVersion;
|
||||
if (root.isGitVersion && root.commitInfo) {
|
||||
info += "Git commit: " + root.commitInfo + "\n";
|
||||
info += " (" + root.commitInfo + ")";
|
||||
}
|
||||
info += "\n";
|
||||
|
||||
if (root.qsVersion) {
|
||||
info += "noctalia-qs version: " + root.qsVersion + "\n";
|
||||
let qsV = root.qsVersion.startsWith("v") ? root.qsVersion : "v" + root.qsVersion;
|
||||
info += "Noctalia QS: " + qsV;
|
||||
if (root.qsRevision) {
|
||||
info += " (" + root.qsRevision + ")";
|
||||
}
|
||||
info += "\n";
|
||||
}
|
||||
|
||||
info += "\nSystem Information\n";
|
||||
info += "==================\n";
|
||||
if (root.systemInfo) {
|
||||
@@ -132,6 +150,7 @@ ColumnLayout {
|
||||
const kernel = root.getModule("Kernel");
|
||||
const title = root.getModule("Title");
|
||||
const product = root.getModule("Host");
|
||||
const board = root.getModule("Board");
|
||||
const cpu = root.getModule("CPU");
|
||||
const gpu = root.getModule("GPU");
|
||||
const mem = root.getModule("Memory");
|
||||
@@ -140,6 +159,7 @@ ColumnLayout {
|
||||
info += "Kernel: " + (kernel?.result?.release || "N/A") + "\n";
|
||||
info += "Host: " + (title?.result?.hostName || "N/A") + "\n";
|
||||
info += "Product: " + (product?.result?.name || "N/A") + "\n";
|
||||
info += "Board: " + (board?.result?.name || "N/A") + "\n";
|
||||
info += "CPU: " + (cpu?.result?.cpu || "N/A") + "\n";
|
||||
if (gpu?.result && Array.isArray(gpu.result) && gpu.result.length > 0) {
|
||||
info += "GPU: " + gpu.result.map(g => g.name || "Unknown").join(", ") + "\n";
|
||||
@@ -190,90 +210,11 @@ ColumnLayout {
|
||||
Logger.d("VersionSubTab", "Component.onCompleted - Could not extract commit from NixOS path, trying fallback");
|
||||
}
|
||||
}
|
||||
fetchGitCommit();
|
||||
return;
|
||||
} else {
|
||||
// On non-NixOS systems, check for pacman first.
|
||||
whichPacmanProcess.running = true;
|
||||
return;
|
||||
}
|
||||
fetchGitCommit();
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: gitFallbackTimer
|
||||
interval: 500
|
||||
running: false
|
||||
onTriggered: {
|
||||
if (!root.commitInfo) {
|
||||
fetchGitCommit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: whichPacmanProcess
|
||||
command: ["sh", "-c", "command -v pacman"]
|
||||
running: false
|
||||
onExited: function (exitCode) {
|
||||
if (exitCode === 0) {
|
||||
Logger.d("VersionSubTab", "whichPacmanProcess - pacman found, starting query");
|
||||
pacmanProcess.running = true;
|
||||
gitFallbackTimer.start();
|
||||
} else {
|
||||
Logger.d("VersionSubTab", "whichPacmanProcess - pacman not found, falling back to git");
|
||||
fetchGitCommit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: pacmanProcess
|
||||
command: ["pacman", "-Q", "noctalia-shell-git"]
|
||||
running: false
|
||||
|
||||
onStarted: {
|
||||
gitFallbackTimer.stop();
|
||||
}
|
||||
|
||||
onExited: function (exitCode) {
|
||||
gitFallbackTimer.stop();
|
||||
Logger.d("VersionSubTab", "pacmanProcess - Process exited with code:", exitCode);
|
||||
if (exitCode === 0) {
|
||||
var output = stdout.text.trim();
|
||||
Logger.d("VersionSubTab", "pacmanProcess - Output:", output);
|
||||
var match = output.match(/noctalia-shell-git\s+(.+)/);
|
||||
if (match && match[1]) {
|
||||
// For Arch packages, the version format might be like: 3.4.0.r112.g3f00bec8-1
|
||||
// Extract just the commit hash part if it exists
|
||||
var version = match[1];
|
||||
var commitMatch = version.match(/\.g([0-9a-f]{7,})/i);
|
||||
if (commitMatch && commitMatch[1]) {
|
||||
// Show short hash (first 7 characters)
|
||||
root.commitInfo = commitMatch[1].substring(0, 7);
|
||||
Logger.d("VersionSubTab", "pacmanProcess - Set commitInfo from Arch package:", root.commitInfo);
|
||||
return; // Successfully got commit hash from Arch package
|
||||
} else {
|
||||
// If no commit hash in version format, still try git repo
|
||||
Logger.d("VersionSubTab", "pacmanProcess - No commit hash in version, trying git");
|
||||
fetchGitCommit();
|
||||
}
|
||||
} else {
|
||||
// Unexpected output format, try git
|
||||
Logger.d("VersionSubTab", "pacmanProcess - Unexpected output format, trying git");
|
||||
fetchGitCommit();
|
||||
}
|
||||
} else {
|
||||
// If not on Arch, try to get git commit from repository
|
||||
Logger.d("VersionSubTab", "pacmanProcess - Package not found, trying git");
|
||||
fetchGitCommit();
|
||||
}
|
||||
}
|
||||
|
||||
stdout: StdioCollector {}
|
||||
stderr: StdioCollector {}
|
||||
}
|
||||
|
||||
function fetchGitCommit() {
|
||||
var shellDir = Quickshell.shellDir || "";
|
||||
Logger.d("VersionSubTab", "fetchGitCommit - shellDir:", shellDir);
|
||||
@@ -319,9 +260,10 @@ ColumnLayout {
|
||||
var output = stdout.text.trim();
|
||||
// Format: "noctalia-qs 0.3.0, revision abc12345, distributed by: ..."
|
||||
// Only set if this is actually noctalia-qs; leave empty for upstream quickshell
|
||||
var match = output.match(/noctalia-qs\s+(\S+),\s+revision\s+([0-9a-f]+)/i);
|
||||
var match = output.match(/noctalia-qs\s+(\S+),\s+revision\s*([0-9a-f]*)/i);
|
||||
if (match) {
|
||||
root.qsVersion = match[1] + " (" + match[2] + ")";
|
||||
root.qsVersion = match[1];
|
||||
root.qsRevision = match[2];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -432,8 +374,7 @@ ColumnLayout {
|
||||
|
||||
ColumnLayout {
|
||||
NHeader {
|
||||
label: I18n.tr("panels.about.noctalia-title")
|
||||
// description: I18n.tr("panels.about.noctalia-desc")
|
||||
label: "Noctalia Shell"
|
||||
}
|
||||
|
||||
// Versions
|
||||
@@ -442,20 +383,9 @@ ColumnLayout {
|
||||
rowSpacing: Style.marginXS
|
||||
columnSpacing: Style.marginM
|
||||
|
||||
// Installed Version (Shell)
|
||||
NText {
|
||||
text: I18n.tr("panels.about.noctalia-latest-version")
|
||||
color: Color.mOnSurfaceVariant
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||
}
|
||||
|
||||
NText {
|
||||
text: root.latestVersion
|
||||
color: Color.mOnSurface
|
||||
font.weight: Style.fontWeightBold
|
||||
}
|
||||
|
||||
NText {
|
||||
text: I18n.tr("panels.about.noctalia-installed-version")
|
||||
text: "Noctalia Shell:"
|
||||
color: Color.mOnSurfaceVariant
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||
}
|
||||
@@ -469,6 +399,34 @@ ColumnLayout {
|
||||
font.weight: Style.fontWeightBold
|
||||
}
|
||||
|
||||
// Git commit in parentheses
|
||||
NText {
|
||||
id: commitText
|
||||
visible: root.isGitVersion
|
||||
text: "(" + (root.commitInfo || I18n.tr("common.loading")) + ")"
|
||||
color: commitMouseArea.containsMouse ? Color.mPrimary : Color.mOnSurfaceVariant
|
||||
pointSize: Style.fontSizeXS
|
||||
font.underline: commitMouseArea.containsMouse && root.commitInfo
|
||||
|
||||
MouseArea {
|
||||
id: commitMouseArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: root.commitInfo ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
onEntered: {
|
||||
if (root.commitInfo) {
|
||||
TooltipService.show(commitText, I18n.tr("panels.about.view-commit"));
|
||||
}
|
||||
}
|
||||
onExited: TooltipService.hide()
|
||||
onClicked: {
|
||||
if (root.commitInfo) {
|
||||
Quickshell.execDetached(["xdg-open", "https://github.com/noctalia-dev/noctalia-shell/commit/" + root.commitInfo]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update status indicator
|
||||
NIcon {
|
||||
id: upToDateIcon
|
||||
@@ -501,54 +459,113 @@ ColumnLayout {
|
||||
}
|
||||
}
|
||||
|
||||
// Latest Version (Shell)
|
||||
NText {
|
||||
visible: root.isGitVersion
|
||||
text: I18n.tr("panels.about.noctalia-git-commit")
|
||||
visible: root.updateAvailable
|
||||
text: I18n.tr("panels.about.noctalia-available")
|
||||
color: Color.mOnSurfaceVariant
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||
}
|
||||
|
||||
// Clickable git commit
|
||||
NText {
|
||||
id: commitText
|
||||
visible: root.isGitVersion
|
||||
text: root.commitInfo || I18n.tr("common.loading")
|
||||
color: root.commitInfo ? Color.mPrimary : Color.mOnSurface
|
||||
pointSize: Style.fontSizeXS
|
||||
font.underline: commitMouseArea.containsMouse && root.commitInfo
|
||||
visible: root.updateAvailable
|
||||
text: root.latestVersion
|
||||
color: Color.mOnSurface
|
||||
font.weight: Style.fontWeightBold
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: commitMouseArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: root.commitInfo ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
onEntered: {
|
||||
if (root.commitInfo) {
|
||||
TooltipService.show(commitText, I18n.tr("panels.about.view-commit"));
|
||||
// Divider-like spacing
|
||||
Item {
|
||||
visible: root.qsUpdateAvailable || root.updateAvailable
|
||||
Layout.columnSpan: 2
|
||||
Layout.preferredHeight: Style.marginXS
|
||||
}
|
||||
|
||||
// Quickshell Version
|
||||
NText {
|
||||
visible: root.qsVersion !== ""
|
||||
text: "Noctalia QS:"
|
||||
color: Color.mOnSurfaceVariant
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
visible: root.qsVersion !== ""
|
||||
spacing: Style.marginS
|
||||
|
||||
NText {
|
||||
text: root.qsVersion.startsWith("v") ? root.qsVersion : "v" + root.qsVersion
|
||||
color: Color.mOnSurface
|
||||
font.weight: Style.fontWeightBold
|
||||
}
|
||||
|
||||
// Git revision in parentheses
|
||||
NText {
|
||||
id: qsRevisionText
|
||||
visible: root.qsRevision !== ""
|
||||
text: "(" + root.qsRevision + ")"
|
||||
color: qsRevisionMouseArea.containsMouse ? Color.mPrimary : Color.mOnSurfaceVariant
|
||||
pointSize: Style.fontSizeXS
|
||||
font.underline: qsRevisionMouseArea.containsMouse
|
||||
|
||||
MouseArea {
|
||||
id: qsRevisionMouseArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onEntered: TooltipService.show(qsRevisionText, I18n.tr("panels.about.view-commit"))
|
||||
onExited: TooltipService.hide()
|
||||
onClicked: {
|
||||
Quickshell.execDetached(["xdg-open", "https://github.com/noctalia-dev/noctalia-qs/commit/" + root.qsRevision]);
|
||||
}
|
||||
}
|
||||
onExited: TooltipService.hide()
|
||||
onClicked: {
|
||||
if (root.commitInfo) {
|
||||
Quickshell.execDetached(["xdg-open", "https://github.com/noctalia-dev/noctalia-shell/commit/" + root.commitInfo]);
|
||||
}
|
||||
}
|
||||
|
||||
// Update status indicator
|
||||
NIcon {
|
||||
id: qsUpToDateIcon
|
||||
visible: root.qsIsUpToDate
|
||||
icon: "circle-check"
|
||||
pointSize: Style.fontSizeM
|
||||
color: Color.mPrimary
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
onEntered: TooltipService.show(qsUpToDateIcon, I18n.tr("panels.about.up-to-date"))
|
||||
onExited: TooltipService.hide()
|
||||
}
|
||||
}
|
||||
|
||||
NIcon {
|
||||
id: qsUpdateAvailableIcon
|
||||
visible: root.qsUpdateAvailable
|
||||
icon: "arrow-up-circle"
|
||||
pointSize: Style.fontSizeS
|
||||
color: Color.mPrimary
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
onEntered: TooltipService.show(qsUpdateAvailableIcon, I18n.tr("panels.about.update-available"))
|
||||
onExited: TooltipService.hide()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Latest Quickshell Version
|
||||
NText {
|
||||
visible: root.qsVersion !== ""
|
||||
text: I18n.tr("panels.about.noctalia-qs-version")
|
||||
visible: root.qsUpdateAvailable
|
||||
text: I18n.tr("panels.about.noctalia-available")
|
||||
color: Color.mOnSurfaceVariant
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||
}
|
||||
|
||||
NText {
|
||||
visible: root.qsVersion !== ""
|
||||
text: root.qsVersion
|
||||
visible: root.qsUpdateAvailable
|
||||
text: GitHubService.latestQSVersion
|
||||
color: Color.mOnSurface
|
||||
font.weight: Style.fontWeightBold
|
||||
pointSize: Style.fontSizeXS
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -705,6 +722,23 @@ ColumnLayout {
|
||||
wrapMode: Text.Wrap
|
||||
}
|
||||
|
||||
// Board name
|
||||
NText {
|
||||
text: I18n.tr("panels.about.system-board")
|
||||
color: Color.mOnSurfaceVariant
|
||||
pointSize: sysInfo.textSize
|
||||
}
|
||||
NText {
|
||||
text: {
|
||||
const title = root.getModule("Board");
|
||||
return title?.result?.name || "N/A";
|
||||
}
|
||||
color: Color.mOnSurface
|
||||
pointSize: sysInfo.textSize
|
||||
Layout.fillWidth: true
|
||||
wrapMode: Text.Wrap
|
||||
}
|
||||
|
||||
// Uptime
|
||||
NText {
|
||||
text: I18n.tr("panels.about.system-uptime")
|
||||
|
||||
@@ -82,8 +82,8 @@ ColumnLayout {
|
||||
})
|
||||
}
|
||||
]
|
||||
currentKey: Settings.data.audio.cavaFrameRate
|
||||
defaultValue: Settings.getDefaultValue("audio.cavaFrameRate")
|
||||
onSelected: key => Settings.data.audio.cavaFrameRate = key
|
||||
currentKey: Settings.data.audio.spectrumFrameRate
|
||||
defaultValue: Settings.getDefaultValue("audio.spectrumFrameRate")
|
||||
onSelected: key => Settings.data.audio.spectrumFrameRate = key
|
||||
}
|
||||
}
|
||||
|
||||
@@ -315,7 +315,7 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("panels.bar.appearance-margins-vertical")
|
||||
from: 0
|
||||
to: 18
|
||||
to: 500
|
||||
stepSize: 1
|
||||
showReset: true
|
||||
value: Settings.data.bar.marginVertical
|
||||
@@ -328,7 +328,7 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("panels.bar.appearance-margins-horizontal")
|
||||
from: 0
|
||||
to: 18
|
||||
to: 500
|
||||
stepSize: 1
|
||||
showReset: true
|
||||
value: Settings.data.bar.marginHorizontal
|
||||
|
||||
@@ -33,6 +33,10 @@ ColumnLayout {
|
||||
|
||||
required property var modelData
|
||||
readonly property string screenName: modelData.name || "Unknown"
|
||||
readonly property real compositorScale: {
|
||||
const info = CompositorService.displayScales[screenName];
|
||||
return (info && info.scale) ? info.scale : 1.0;
|
||||
}
|
||||
readonly property bool barEnabled: (Settings.data.bar.monitors || []).indexOf(screenName) !== -1
|
||||
readonly property bool hasOverride: Settings.hasScreenOverride(screenName)
|
||||
|
||||
@@ -67,12 +71,11 @@ ColumnLayout {
|
||||
|
||||
NText {
|
||||
text: {
|
||||
const compositorScale = CompositorService.getDisplayScale(monitorCard.screenName);
|
||||
return I18n.tr("system.monitor-description", {
|
||||
"model": monitorCard.modelData.model || I18n.tr("common.unknown"),
|
||||
"width": Math.round(monitorCard.modelData.width * compositorScale),
|
||||
"height": Math.round(monitorCard.modelData.height * compositorScale),
|
||||
"scale": compositorScale
|
||||
"width": Math.round(monitorCard.modelData.width * monitorCard.compositorScale),
|
||||
"height": Math.round(monitorCard.modelData.height * monitorCard.compositorScale),
|
||||
"scale": monitorCard.compositorScale
|
||||
});
|
||||
}
|
||||
pointSize: Style.fontSizeS
|
||||
|
||||
@@ -47,6 +47,18 @@ ColumnLayout {
|
||||
paths.push(app.outputs[k].path);
|
||||
}
|
||||
path = paths.join("\n");
|
||||
} else if (app.id === "emacs") {
|
||||
// Emacs clients are detected dynamically by ProgramCheckerService
|
||||
var emacsClients = ProgramCheckerService.availableEmacsClients;
|
||||
if (emacsClients && emacsClients.length > 0) {
|
||||
var emacsPaths = [];
|
||||
for (var k = 0; k < emacsClients.length; k++) {
|
||||
emacsPaths.push(emacsClients[k].path);
|
||||
}
|
||||
path = emacsPaths.join("\n");
|
||||
} else {
|
||||
path = I18n.tr("panels.color-scheme.templates-none-detected");
|
||||
}
|
||||
} else if (app.clients && app.clients.length > 0) {
|
||||
var validClients = [];
|
||||
for (var k = 0; k < app.clients.length; k++) {
|
||||
|
||||
@@ -553,10 +553,13 @@ Item {
|
||||
columnSpacing: Style.marginM
|
||||
rowSpacing: Style.marginXS
|
||||
|
||||
// --- Item 1: Signal Strength ---
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 1
|
||||
spacing: Style.marginXS
|
||||
Layout.row: detailsGrid ? 0 : 0
|
||||
Layout.column: 0
|
||||
NIcon {
|
||||
icon: BluetoothService.getSignalIcon(modelData)
|
||||
pointSize: Style.fontSizeXS
|
||||
@@ -569,9 +572,13 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
|
||||
// --- Item 2: Battery ---
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 1
|
||||
Layout.row: detailsGrid ? 0 : 1
|
||||
Layout.column: detailsGrid ? 1 : 0
|
||||
spacing: Style.marginXS
|
||||
NIcon {
|
||||
icon: {
|
||||
@@ -591,8 +598,12 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
// --- Item 3: Pair state ---
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 1
|
||||
Layout.row: detailsGrid ? 1 : 2
|
||||
Layout.column: 0
|
||||
spacing: Style.marginXS
|
||||
NIcon {
|
||||
icon: "link"
|
||||
@@ -606,8 +617,12 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
// --- Item 4: Trust state ---
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 1
|
||||
Layout.row: detailsGrid ? 1 : 3
|
||||
Layout.column: detailsGrid ? 1 : 0
|
||||
spacing: Style.marginXS
|
||||
NIcon {
|
||||
icon: "shield-check"
|
||||
@@ -621,9 +636,12 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
// --- Item 5: Address ---
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.columnSpan: infoColumn.columns === 2 ? 2 : 1
|
||||
Layout.preferredWidth: 1
|
||||
Layout.row: detailsGrid ? 2 : 4
|
||||
Layout.column: 0
|
||||
spacing: Style.marginXS
|
||||
NIcon {
|
||||
icon: "hash"
|
||||
@@ -637,6 +655,39 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
// --- Item 6: Auto-connect ---
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 1
|
||||
Layout.row: detailsGrid ? 2 : 5
|
||||
Layout.column: detailsGrid ? 1 : 0
|
||||
spacing: Style.marginXS
|
||||
visible: Settings.data.network.bluetoothAutoConnect
|
||||
|
||||
NIcon {
|
||||
icon: BluetoothService.getDeviceAutoConnect(modelData.address) ? "repeat" : "repeat-off"
|
||||
pointSize: Style.fontSizeXS
|
||||
color: BluetoothService.getDeviceAutoConnect(modelData.address) ? Color.mPrimary : Color.mOnSurface
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
}
|
||||
|
||||
NText {
|
||||
text: I18n.tr("common.auto-connect")
|
||||
pointSize: Style.fontSizeXS
|
||||
color: BluetoothService.getDeviceAutoConnect(modelData.address) ? Color.mOnSurface : Color.mOnSurfaceVariant
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onEntered: TooltipService.show(parent, BluetoothService.getDeviceAutoConnect(modelData.address) ? I18n.tr("tooltips.bluetooth-auto-connect-on") : I18n.tr("tooltips.bluetooth-auto-connect-off"))
|
||||
onExited: TooltipService.hide()
|
||||
onClicked: BluetoothService.setDeviceAutoConnect(modelData, !BluetoothService.getDeviceAutoConnect(modelData.address))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,11 +80,14 @@ ColumnLayout {
|
||||
|
||||
NSectionEditor {
|
||||
required property var modelData
|
||||
readonly property real compositorScale: {
|
||||
const info = CompositorService.displayScales[modelData.name];
|
||||
return (info && info.scale) ? info.scale : 1.0;
|
||||
}
|
||||
|
||||
Layout.fillWidth: true
|
||||
sectionName: modelData.name
|
||||
sectionSubtitle: {
|
||||
var compositorScale = CompositorService.getDisplayScale(modelData.name);
|
||||
// Format scale to 2 decimal places to prevent overly long text
|
||||
var formattedScale = compositorScale.toFixed(2);
|
||||
return "(" + modelData.width + "x" + modelData.height + " @ " + formattedScale + "x)";
|
||||
@@ -266,6 +269,9 @@ ColumnLayout {
|
||||
} else if (widgetId === "MediaPlayer") {
|
||||
newWidget.x = 100;
|
||||
newWidget.y = 200;
|
||||
} else if (widgetId === "AudioVisualizer") {
|
||||
newWidget.x = 120;
|
||||
newWidget.y = 280;
|
||||
} else if (widgetId === "Weather") {
|
||||
newWidget.x = 100;
|
||||
newWidget.y = 300;
|
||||
|
||||
@@ -107,8 +107,11 @@ ColumnLayout {
|
||||
|
||||
NText {
|
||||
Layout.fillWidth: true
|
||||
readonly property real compositorScale: {
|
||||
const info = CompositorService.displayScales[modelData.name];
|
||||
return (info && info.scale) ? info.scale : 1.0;
|
||||
}
|
||||
text: {
|
||||
const compositorScale = CompositorService.getDisplayScale(modelData.name);
|
||||
I18n.tr("system.monitor-description", {
|
||||
"model": modelData.model,
|
||||
"width": modelData.width * compositorScale,
|
||||
|
||||
@@ -35,9 +35,12 @@ ColumnLayout {
|
||||
model: Quickshell.screens || []
|
||||
delegate: NCheckbox {
|
||||
Layout.fillWidth: true
|
||||
readonly property real compositorScale: {
|
||||
const info = CompositorService.displayScales[modelData.name];
|
||||
return (info && info.scale) ? info.scale : 1.0;
|
||||
}
|
||||
label: modelData.name || "Unknown"
|
||||
description: {
|
||||
const compositorScale = CompositorService.getDisplayScale(modelData.name);
|
||||
I18n.tr("system.monitor-description", {
|
||||
"model": modelData.model,
|
||||
"width": modelData.width * compositorScale,
|
||||
|
||||
@@ -35,9 +35,12 @@ ColumnLayout {
|
||||
model: Quickshell.screens || []
|
||||
delegate: NCheckbox {
|
||||
Layout.fillWidth: true
|
||||
readonly property real compositorScale: {
|
||||
const info = CompositorService.displayScales[modelData.name];
|
||||
return (info && info.scale) ? info.scale : 1.0;
|
||||
}
|
||||
label: modelData.name || "Unknown"
|
||||
description: {
|
||||
const compositorScale = CompositorService.getDisplayScale(modelData.name);
|
||||
I18n.tr("system.monitor-description", {
|
||||
"model": modelData.model,
|
||||
"width": modelData.width * compositorScale,
|
||||
|
||||
@@ -122,9 +122,12 @@ ColumnLayout {
|
||||
model: Quickshell.screens || []
|
||||
delegate: NCheckbox {
|
||||
Layout.fillWidth: true
|
||||
readonly property real compositorScale: {
|
||||
const info = CompositorService.displayScales[modelData.name];
|
||||
return (info && info.scale) ? info.scale : 1.0;
|
||||
}
|
||||
label: modelData.name || I18n.tr("common.unknown")
|
||||
description: {
|
||||
const compositorScale = CompositorService.getDisplayScale(modelData.name);
|
||||
I18n.tr("system.monitor-description", {
|
||||
"model": modelData.model,
|
||||
"width": modelData.width * compositorScale,
|
||||
|
||||
@@ -114,9 +114,12 @@ ColumnLayout {
|
||||
model: Quickshell.screens || []
|
||||
delegate: NCheckbox {
|
||||
Layout.fillWidth: true
|
||||
readonly property real compositorScale: {
|
||||
const info = CompositorService.displayScales[modelData.name];
|
||||
return (info && info.scale) ? info.scale : 1.0;
|
||||
}
|
||||
label: modelData.name || I18n.tr("common.unknown")
|
||||
description: {
|
||||
const compositorScale = CompositorService.getDisplayScale(modelData.name);
|
||||
I18n.tr("system.monitor-description", {
|
||||
"model": modelData.model,
|
||||
"width": modelData.width * compositorScale,
|
||||
|
||||
@@ -65,15 +65,42 @@ ColumnLayout {
|
||||
|
||||
function saveEntries() {
|
||||
var toSave = [];
|
||||
var enabledNumber = 1;
|
||||
|
||||
for (var i = 0; i < entriesModel.length; i++) {
|
||||
var keybind = entriesModel[i].keybind || "";
|
||||
|
||||
if (entriesModel[i].enabled) {
|
||||
// For enabled entries with numeric or empty keybinds, assign sequential number
|
||||
if (keybind === "" || /^\d+$/.test(keybind)) {
|
||||
keybind = String(enabledNumber);
|
||||
}
|
||||
enabledNumber++;
|
||||
} else {
|
||||
// For disabled entries with numeric keybinds, clear them
|
||||
if (/^\d+$/.test(keybind)) {
|
||||
keybind = "";
|
||||
}
|
||||
}
|
||||
|
||||
toSave.push({
|
||||
"action": entriesModel[i].id,
|
||||
"enabled": entriesModel[i].enabled,
|
||||
"countdownEnabled": entriesModel[i].countdownEnabled !== undefined ? entriesModel[i].countdownEnabled : true,
|
||||
"command": entriesModel[i].command || "",
|
||||
"keybind": entriesModel[i].keybind || ""
|
||||
"keybind": keybind
|
||||
});
|
||||
}
|
||||
|
||||
// Update local model with renumbered keybinds
|
||||
var newModel = [];
|
||||
for (var i = 0; i < entriesModel.length; i++) {
|
||||
newModel.push(Object.assign({}, entriesModel[i], {
|
||||
"keybind": toSave[i].keybind
|
||||
}));
|
||||
}
|
||||
entriesModel = newModel;
|
||||
|
||||
Settings.data.sessionMenu.powerOptions = toSave;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import qs.Commons
|
||||
import qs.Widgets
|
||||
|
||||
ColumnLayout {
|
||||
id: root
|
||||
spacing: Style.marginL
|
||||
Layout.fillWidth: true
|
||||
|
||||
NToggle {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("panels.system.noctalia-performance-disable-wallpaper-label")
|
||||
description: I18n.tr("panels.system.noctalia-performance-disable-wallpaper-description")
|
||||
checked: !Settings.data.noctaliaPerformance.disableWallpaper
|
||||
defaultValue: !Settings.getDefaultValue("noctaliaPerformance.disableWallpaper")
|
||||
onToggled: checked => Settings.data.noctaliaPerformance.disableWallpaper = !checked
|
||||
}
|
||||
|
||||
NToggle {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("panels.system.noctalia-performance-disable-desktop-widgets-label")
|
||||
description: I18n.tr("panels.system.noctalia-performance-disable-desktop-widgets-description")
|
||||
checked: !Settings.data.noctaliaPerformance.disableDesktopWidgets
|
||||
defaultValue: !Settings.getDefaultValue("noctaliaPerformance.disableDesktopWidgets")
|
||||
onToggled: checked => Settings.data.noctaliaPerformance.disableDesktopWidgets = !checked
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,7 @@ ColumnLayout {
|
||||
currentIndex: tabView.currentIndex
|
||||
|
||||
NTabButton {
|
||||
text: I18n.tr("common.general")
|
||||
text: I18n.tr("system-monitor.title")
|
||||
tabIndex: 0
|
||||
checked: subTabBar.currentIndex === 0
|
||||
}
|
||||
@@ -27,6 +27,11 @@ ColumnLayout {
|
||||
tabIndex: 1
|
||||
checked: subTabBar.currentIndex === 1
|
||||
}
|
||||
NTabButton {
|
||||
text: I18n.tr("common.performance")
|
||||
tabIndex: 2
|
||||
checked: subTabBar.currentIndex === 2
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
@@ -42,5 +47,6 @@ ColumnLayout {
|
||||
screen: root.screen
|
||||
}
|
||||
ThresholdsSubTab {}
|
||||
PerformanceSubTab {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,14 @@ ColumnLayout {
|
||||
onToggled: checked => Settings.data.general.enableShadows = checked
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: I18n.tr("panels.user-interface.blur-behind-label")
|
||||
description: I18n.tr("panels.user-interface.blur-behind-description")
|
||||
checked: Settings.data.general.enableBlurBehind
|
||||
defaultValue: Settings.getDefaultValue("general.enableBlurBehind")
|
||||
onToggled: checked => Settings.data.general.enableBlurBehind = checked
|
||||
}
|
||||
|
||||
NComboBox {
|
||||
visible: Settings.data.general.enableShadows
|
||||
label: I18n.tr("panels.user-interface.shadows-direction-label")
|
||||
|
||||
@@ -177,10 +177,13 @@ ColumnLayout {
|
||||
model: Quickshell.screens || []
|
||||
delegate: NCheckbox {
|
||||
Layout.fillWidth: true
|
||||
readonly property real compositorScale: {
|
||||
const info = CompositorService.displayScales[modelData.name];
|
||||
return (info && info.scale) ? info.scale : 1.0;
|
||||
}
|
||||
label: modelData.name || "Unknown"
|
||||
visible: Settings.data.dock.enabled
|
||||
description: {
|
||||
const compositorScale = CompositorService.getDisplayScale(modelData.name);
|
||||
I18n.tr("system.monitor-description", {
|
||||
"model": modelData.model,
|
||||
"width": modelData.width * compositorScale,
|
||||
|
||||
@@ -136,6 +136,7 @@ SmartPanel {
|
||||
maxValue2: Math.max(SystemStatService.cpuTempHistoryMax + 5, 1)
|
||||
color: Color.mPrimary
|
||||
color2: Color.mSecondary
|
||||
strokeWidth: 1.5 * Style.uiScaleRatio
|
||||
fill: true
|
||||
fillOpacity: 0.15
|
||||
updateInterval: SystemStatService.cpuUsageIntervalMs
|
||||
@@ -189,6 +190,7 @@ SmartPanel {
|
||||
minValue: 0
|
||||
maxValue: 100
|
||||
color: Color.mPrimary
|
||||
strokeWidth: 1.5 * Style.uiScaleRatio
|
||||
fill: true
|
||||
fillOpacity: 0.15
|
||||
updateInterval: SystemStatService.memIntervalMs
|
||||
@@ -260,6 +262,7 @@ SmartPanel {
|
||||
maxValue2: SystemStatService.txMaxSpeed
|
||||
color: Color.mPrimary
|
||||
color2: Color.mSecondary
|
||||
strokeWidth: 1.5 * Style.uiScaleRatio
|
||||
fill: true
|
||||
fillOpacity: 0.15
|
||||
updateInterval: SystemStatService.networkIntervalMs
|
||||
|
||||
+12
-9
@@ -19,7 +19,8 @@ Item {
|
||||
|
||||
signal hidden
|
||||
|
||||
readonly property int notificationWidth: Math.round(440 * Style.uiScaleRatio)
|
||||
readonly property bool isCompact: Settings.data.notifications?.density === "compact"
|
||||
readonly property int notificationWidth: Math.round((isCompact ? 320 : 440) * Style.uiScaleRatio)
|
||||
readonly property int shadowPadding: Style.shadowBlurMax + Style.marginL
|
||||
|
||||
width: notificationWidth + shadowPadding * 2
|
||||
@@ -282,11 +283,11 @@ Item {
|
||||
RowLayout {
|
||||
id: contentLayout
|
||||
anchors.fill: background
|
||||
anchors.topMargin: Style.marginM
|
||||
anchors.bottomMargin: Style.marginM
|
||||
anchors.leftMargin: Style.margin2M
|
||||
anchors.rightMargin: Style.margin2M
|
||||
spacing: Style.marginL
|
||||
anchors.topMargin: isCompact ? Style.marginS : Style.marginM
|
||||
anchors.bottomMargin: isCompact ? Style.marginS : Style.marginM
|
||||
anchors.leftMargin: isCompact ? Style.marginM : Style.margin2M
|
||||
anchors.rightMargin: isCompact ? Style.marginM : Style.margin2M
|
||||
spacing: isCompact ? Style.marginM : Style.marginL
|
||||
|
||||
// Icon
|
||||
NIcon {
|
||||
@@ -309,7 +310,7 @@ Item {
|
||||
return Color.mOnSurface;
|
||||
}
|
||||
}
|
||||
pointSize: Style.fontSizeXXL * 1.5
|
||||
pointSize: isCompact ? Style.fontSizeXL : Style.fontSizeXXL * 1.5
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
}
|
||||
|
||||
@@ -323,7 +324,7 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
text: root.title
|
||||
color: Color.mOnSurface
|
||||
pointSize: Style.fontSizeL
|
||||
pointSize: isCompact ? Style.fontSizeM : Style.fontSizeL
|
||||
font.weight: Style.fontWeightBold
|
||||
wrapMode: Text.WordWrap
|
||||
visible: text.length > 0
|
||||
@@ -333,8 +334,10 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
text: root.description
|
||||
color: Color.mOnSurface
|
||||
pointSize: Style.fontSizeM
|
||||
pointSize: isCompact ? Style.fontSizeS : Style.fontSizeM
|
||||
wrapMode: Text.WordWrap
|
||||
maximumLineCount: isCompact ? 2 : 20
|
||||
elide: isCompact ? Text.ElideRight : Text.ElideNone
|
||||
visible: text.length > 0
|
||||
}
|
||||
|
||||
|
||||
@@ -241,7 +241,7 @@ cava)
|
||||
|
||||
# Reload cava if it's running, but only if it's not using stdin config
|
||||
if pgrep -f cava >/dev/null; then
|
||||
# Check if Cava is running with -p /dev/stdin (managed by CavaService)
|
||||
# Check if Cava is running with -p /dev/stdin (standalone cava)
|
||||
if ! pgrep -af cava | grep -q -- "-p.*stdin"; then
|
||||
pkill -USR1 cava
|
||||
fi
|
||||
|
||||
@@ -48,14 +48,16 @@ def safe_get_time(ical_time):
|
||||
except:
|
||||
return None, False
|
||||
|
||||
def add_event(summary, calendar_name, start_ts, end_ts, location="", description="", all_day=False):
|
||||
def add_event(summary, calendar_name, start_ts, end_ts, location="", description="", all_day=False, calendar_uid="", uid=""):
|
||||
all_events.append({
|
||||
'calendar': calendar_name,
|
||||
'summary': summary,
|
||||
'start': start_ts,
|
||||
'end': end_ts,
|
||||
'location': location,
|
||||
'description': description
|
||||
'description': description,
|
||||
'calendar_uid': calendar_uid,
|
||||
'uid': uid
|
||||
})
|
||||
|
||||
registry = EDataServer.SourceRegistry.new_sync(None)
|
||||
@@ -69,7 +71,7 @@ for source in sources:
|
||||
print(f"\nProcessing calendar: {calendar_name}", file=sys.stderr)
|
||||
|
||||
try:
|
||||
client = ECal.Client.connect_sync(source, ECal.ClientSourceType.EVENTS, 30, None)
|
||||
client = ECal.Client.connect_sync(source, ECal.ClientSourceType.EVENTS, 5, None)
|
||||
|
||||
start_dt = datetime.fromtimestamp(start_time)
|
||||
end_dt = datetime.fromtimestamp(end_time)
|
||||
@@ -101,15 +103,21 @@ for source in sources:
|
||||
summary = getattr(obj, "get_summary", lambda: "(No title)")()
|
||||
dtstart = getattr(obj, "get_dtstart", lambda: None)()
|
||||
dtend = getattr(obj, "get_dtend", lambda: None)()
|
||||
location = getattr(obj, "get_location", lambda: "")() or ""
|
||||
description = getattr(obj, "get_description", lambda: "")() or ""
|
||||
start_ts, all_day = safe_get_time(dtstart)
|
||||
end_ts, _ = safe_get_time(dtend)
|
||||
if start_ts:
|
||||
if end_ts is None:
|
||||
end_ts = start_ts + 3600
|
||||
add_event(summary, calendar_name, start_ts, end_ts)
|
||||
event_uid = getattr(obj, "get_uid", lambda: "")() or ""
|
||||
add_event(summary, calendar_name, start_ts, end_ts, location, description,
|
||||
calendar_uid=source.get_uid(), uid=event_uid)
|
||||
continue
|
||||
|
||||
summary = getattr(comp, "get_summary", lambda: "(No title)")()
|
||||
location = getattr(comp, "get_location", lambda: "")() or ""
|
||||
description = getattr(comp, "get_description", lambda: "")() or ""
|
||||
dtstart = getattr(comp, "get_dtstart", lambda: None)()
|
||||
dtend = getattr(comp, "get_dtend", lambda: None)()
|
||||
start_ts, all_day = safe_get_time(dtstart)
|
||||
@@ -138,7 +146,8 @@ for source in sources:
|
||||
|
||||
# --- normal event ---
|
||||
if not rrule_prop and not rdates:
|
||||
add_event(summary, calendar_name, start_ts, end_ts)
|
||||
add_event(summary, calendar_name, start_ts, end_ts, location, description,
|
||||
calendar_uid=source.get_uid(), uid=comp.get_uid() or "")
|
||||
continue
|
||||
|
||||
# --- recurrent events ---
|
||||
@@ -221,7 +230,8 @@ for source in sources:
|
||||
|
||||
# --- add occurences to all_events ---
|
||||
for occ_start, occ_end in occurrences:
|
||||
add_event(summary, calendar_name, occ_start, occ_end)
|
||||
add_event(summary, calendar_name, occ_start, occ_end, location, description,
|
||||
calendar_uid=source.get_uid(), uid=comp.get_uid() or "")
|
||||
|
||||
|
||||
except Exception as e:
|
||||
|
||||
@@ -18,8 +18,7 @@ from .palette import extract_palette
|
||||
from .quantizer import extract_source_color, source_color_to_rgb
|
||||
from .theme import generate_theme
|
||||
from .renderer import TemplateRenderer
|
||||
from .scheme import expand_predefined_scheme
|
||||
from .terminal import TerminalColors, TerminalGenerator
|
||||
from .scheme import expand_predefined_scheme, inject_terminal_colors
|
||||
|
||||
__all__ = [
|
||||
# Color
|
||||
@@ -55,7 +54,5 @@ __all__ = [
|
||||
"TemplateRenderer",
|
||||
# Scheme
|
||||
"expand_predefined_scheme",
|
||||
# Terminal
|
||||
"TerminalColors",
|
||||
"TerminalGenerator",
|
||||
"inject_terminal_colors",
|
||||
]
|
||||
|
||||
@@ -509,6 +509,13 @@ class TemplateRenderer:
|
||||
base = parts[0].strip()
|
||||
filters = [p.strip() for p in parts[1:]]
|
||||
|
||||
# Handle {{mode}} tag - resolves to current theme mode
|
||||
if base == "mode":
|
||||
result_str = self.default_mode
|
||||
for filter_str in filters:
|
||||
result_str = self._apply_string_or_color_filter(result_str, filter_str, expr)
|
||||
return result_str
|
||||
|
||||
# Try scope resolution first
|
||||
resolved = self._resolve_from_scope(base, scope)
|
||||
if resolved is not None:
|
||||
|
||||
@@ -308,3 +308,44 @@ def expand_predefined_scheme(scheme_data: dict[str, str], mode: ThemeMode) -> di
|
||||
"background": background.to_hex(),
|
||||
"on_background": on_background.to_hex(),
|
||||
}
|
||||
|
||||
|
||||
def inject_terminal_colors(result: dict[str, str], scheme_mode_data: dict) -> dict[str, str]:
|
||||
"""Flatten scheme's terminal section into template-ready color keys.
|
||||
|
||||
Adds keys like terminal_foreground, terminal_normal_black, terminal_bright_red, etc.
|
||||
so predefined terminal templates can reference them as
|
||||
{{colors.terminal_foreground.default.hex_stripped}}.
|
||||
|
||||
Args:
|
||||
result: Expanded color palette dict to augment.
|
||||
scheme_mode_data: Raw scheme JSON mode data (e.g., scheme_data["dark"]).
|
||||
|
||||
Returns:
|
||||
The same result dict with terminal_ keys added.
|
||||
"""
|
||||
terminal = scheme_mode_data.get("terminal")
|
||||
if not terminal:
|
||||
return result
|
||||
|
||||
# Map of JSON keys to flattened key names
|
||||
direct_keys = {
|
||||
"foreground": "terminal_foreground",
|
||||
"background": "terminal_background",
|
||||
"cursor": "terminal_cursor",
|
||||
"cursorText": "terminal_cursor_text",
|
||||
"selectionFg": "terminal_selection_fg",
|
||||
"selectionBg": "terminal_selection_bg",
|
||||
}
|
||||
|
||||
for json_key, flat_key in direct_keys.items():
|
||||
if json_key in terminal:
|
||||
result[flat_key] = terminal[json_key]
|
||||
|
||||
# ANSI normal/bright color groups
|
||||
for group in ("normal", "bright"):
|
||||
if group in terminal:
|
||||
for name, hex_val in terminal[group].items():
|
||||
result[f"terminal_{group}_{name}"] = hex_val
|
||||
|
||||
return result
|
||||
|
||||
@@ -1,320 +0,0 @@
|
||||
"""
|
||||
Terminal theme generation for multiple terminal emulators.
|
||||
|
||||
Generates native theme files from a unified terminal color schema.
|
||||
Supports: foot, ghostty, kitty, alacritty, wezterm
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
def darken_hex(color: str, percent: float) -> str:
|
||||
"""Darken a hex color by a percentage (0-100)."""
|
||||
hex_color = color.lstrip("#")
|
||||
r = int(hex_color[0:2], 16)
|
||||
g = int(hex_color[2:4], 16)
|
||||
b = int(hex_color[4:6], 16)
|
||||
|
||||
factor = 1 - (percent / 100)
|
||||
r = max(0, int(r * factor))
|
||||
g = max(0, int(g * factor))
|
||||
b = max(0, int(b * factor))
|
||||
|
||||
return f"#{r:02x}{g:02x}{b:02x}"
|
||||
|
||||
|
||||
@dataclass
|
||||
class TerminalColors:
|
||||
"""Terminal color scheme data."""
|
||||
|
||||
# Base colors (from JSON)
|
||||
foreground: str
|
||||
background: str
|
||||
cursor: str
|
||||
cursor_text: str
|
||||
selection_fg: str
|
||||
selection_bg: str
|
||||
normal: dict[str, str] # black, red, green, yellow, blue, magenta, cyan, white
|
||||
bright: dict[str, str] # same keys
|
||||
|
||||
# WezTerm extended colors (always derived)
|
||||
compose_cursor: str
|
||||
scrollbar_thumb: str
|
||||
split: str
|
||||
visual_bell: str
|
||||
indexed: dict[int, str]
|
||||
tab_bar: dict
|
||||
|
||||
# Kitty border colors
|
||||
active_border: str
|
||||
inactive_border: str
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, data: dict, scheme: dict) -> "TerminalColors":
|
||||
"""Create TerminalColors with auto-derived WezTerm extended colors.
|
||||
|
||||
Args:
|
||||
data: Terminal color data (foreground, background, cursor, normal, bright, etc.)
|
||||
scheme: Scheme UI colors (mPrimary, mOnPrimary, mSecondary)
|
||||
"""
|
||||
# Base colors
|
||||
foreground = data["foreground"]
|
||||
background = data["background"]
|
||||
cursor = data.get("cursor", foreground)
|
||||
cursor_text = data.get("cursorText", background)
|
||||
selection_fg = data.get("selectionFg", foreground)
|
||||
selection_bg = data.get("selectionBg", "#585b70")
|
||||
normal = data["normal"]
|
||||
bright = data["bright"]
|
||||
|
||||
# Scheme accent colors
|
||||
m_primary = scheme.get("mPrimary", cursor)
|
||||
m_on_primary = scheme.get("mOnPrimary", cursor_text)
|
||||
m_secondary = scheme.get("mSecondary", normal["yellow"])
|
||||
m_surface_variant = scheme.get("mSurfaceVariant", selection_bg)
|
||||
|
||||
return cls(
|
||||
foreground=foreground,
|
||||
background=background,
|
||||
cursor=cursor,
|
||||
cursor_text=cursor_text,
|
||||
selection_fg=selection_fg,
|
||||
selection_bg=selection_bg,
|
||||
normal=normal,
|
||||
bright=bright,
|
||||
# Derived WezTerm colors
|
||||
compose_cursor=cursor,
|
||||
scrollbar_thumb=selection_bg,
|
||||
split=bright["black"],
|
||||
visual_bell=normal["black"],
|
||||
indexed={16: m_secondary, 17: cursor},
|
||||
tab_bar={
|
||||
"background": darken_hex(background, 10),
|
||||
"inactiveTabEdge": selection_bg,
|
||||
"activeTab": {"bg": m_primary, "fg": m_on_primary},
|
||||
"inactiveTab": {"bg": darken_hex(background, 5), "fg": foreground},
|
||||
"inactiveTabHover": {"bg": background, "fg": foreground},
|
||||
"newTab": {"bg": selection_bg, "fg": foreground},
|
||||
"newTabHover": {"bg": bright["black"], "fg": foreground},
|
||||
},
|
||||
|
||||
# Kitty border colors
|
||||
active_border=m_primary,
|
||||
inactive_border=m_secondary
|
||||
)
|
||||
|
||||
|
||||
# Color name to index mapping for ANSI colors
|
||||
COLOR_ORDER = ["black", "red", "green", "yellow", "blue", "magenta", "cyan", "white"]
|
||||
|
||||
|
||||
class TerminalGenerator:
|
||||
"""Generate terminal themes in native formats."""
|
||||
|
||||
def __init__(self, colors: TerminalColors):
|
||||
self.colors = colors
|
||||
|
||||
def _strip_hash(self, color: str) -> str:
|
||||
"""Remove # prefix from hex color."""
|
||||
return color.lstrip("#")
|
||||
|
||||
def _ensure_hash(self, color: str) -> str:
|
||||
"""Ensure # prefix on hex color."""
|
||||
return color if color.startswith("#") else f"#{color}"
|
||||
|
||||
def generate_foot(self) -> str:
|
||||
"""Generate foot terminal theme (INI format, no # prefix)."""
|
||||
c = self.colors
|
||||
lines = ["[colors-dark]"]
|
||||
|
||||
# Primary colors
|
||||
lines.append(f"foreground={self._strip_hash(c.foreground)}")
|
||||
lines.append(f"background={self._strip_hash(c.background)}")
|
||||
|
||||
# Normal colors (regular0-7)
|
||||
for i, name in enumerate(COLOR_ORDER):
|
||||
lines.append(f"regular{i}={self._strip_hash(c.normal[name])}")
|
||||
|
||||
# Bright colors (bright0-7)
|
||||
for i, name in enumerate(COLOR_ORDER):
|
||||
lines.append(f"bright{i}={self._strip_hash(c.bright[name])}")
|
||||
|
||||
# Selection
|
||||
lines.append(f"selection-foreground={self._strip_hash(c.selection_fg)}")
|
||||
lines.append(f"selection-background={self._strip_hash(c.selection_bg)}")
|
||||
|
||||
# Cursor (format: bg fg)
|
||||
lines.append(
|
||||
f"cursor={self._strip_hash(c.cursor_text)} {self._strip_hash(c.cursor)}"
|
||||
)
|
||||
|
||||
return "\n".join(lines) + "\n"
|
||||
|
||||
def generate_ghostty(self) -> str:
|
||||
"""Generate ghostty theme (key=value with palette indices)."""
|
||||
c = self.colors
|
||||
lines = []
|
||||
|
||||
# Palette (0-7 normal, 8-15 bright)
|
||||
for i, name in enumerate(COLOR_ORDER):
|
||||
lines.append(f"palette = {i}={self._ensure_hash(c.normal[name])}")
|
||||
for i, name in enumerate(COLOR_ORDER):
|
||||
lines.append(f"palette = {i + 8}={self._ensure_hash(c.bright[name])}")
|
||||
|
||||
# Primary colors
|
||||
lines.append(f"background = {self._ensure_hash(c.background)}")
|
||||
lines.append(f"foreground = {self._ensure_hash(c.foreground)}")
|
||||
|
||||
# Cursor
|
||||
lines.append(f"cursor-color = {self._ensure_hash(c.cursor)}")
|
||||
lines.append(f"cursor-text = {self._ensure_hash(c.cursor_text)}")
|
||||
|
||||
# Selection
|
||||
lines.append(f"selection-background = {self._ensure_hash(c.selection_bg)}")
|
||||
lines.append(f"selection-foreground = {self._ensure_hash(c.selection_fg)}")
|
||||
|
||||
return "\n".join(lines) + "\n"
|
||||
|
||||
def generate_kitty(self) -> str:
|
||||
"""Generate kitty theme (key value pairs with # prefix)."""
|
||||
c = self.colors
|
||||
lines = []
|
||||
|
||||
# Colors 0-15
|
||||
for i, name in enumerate(COLOR_ORDER):
|
||||
lines.append(f"color{i} {self._ensure_hash(c.normal[name])}")
|
||||
for i, name in enumerate(COLOR_ORDER):
|
||||
lines.append(f"color{i + 8} {self._ensure_hash(c.bright[name])}")
|
||||
|
||||
# Primary colors
|
||||
lines.append(f"background {self._ensure_hash(c.background)}")
|
||||
lines.append(f"selection_foreground {self._ensure_hash(c.cursor_text)}")
|
||||
lines.append(f"cursor {self._ensure_hash(c.cursor)}")
|
||||
lines.append(f"cursor_text_color {self._ensure_hash(c.cursor_text)}")
|
||||
lines.append(f"foreground {self._ensure_hash(c.foreground)}")
|
||||
lines.append(f"selection_background {self._ensure_hash(c.foreground)}")
|
||||
lines.append(f"active_border_color {self._ensure_hash(c.active_border)}")
|
||||
lines.append(f"inactive_border_color {self._ensure_hash(c.inactive_border)}")
|
||||
|
||||
return "\n".join(lines) + "\n"
|
||||
|
||||
def generate_alacritty(self) -> str:
|
||||
"""Generate alacritty theme (TOML format)."""
|
||||
c = self.colors
|
||||
lines = ["# Colors (Noctalia)", ""]
|
||||
|
||||
# Bright colors
|
||||
lines.append("[colors.bright]")
|
||||
for name in sorted(COLOR_ORDER):
|
||||
lines.append(f"{name} = '{self._ensure_hash(c.bright[name])}'")
|
||||
lines.append("")
|
||||
|
||||
# Cursor
|
||||
lines.append("[colors.cursor]")
|
||||
lines.append(f"cursor = '{self._ensure_hash(c.cursor)}'")
|
||||
lines.append(f"text = '{self._ensure_hash(c.cursor_text)}'")
|
||||
lines.append("")
|
||||
|
||||
# Normal colors
|
||||
lines.append("[colors.normal]")
|
||||
for name in sorted(COLOR_ORDER):
|
||||
lines.append(f"{name} = '{self._ensure_hash(c.normal[name])}'")
|
||||
lines.append("")
|
||||
|
||||
# Primary
|
||||
lines.append("[colors.primary]")
|
||||
lines.append(f"background = '{self._ensure_hash(c.background)}'")
|
||||
lines.append(f"foreground = '{self._ensure_hash(c.foreground)}'")
|
||||
lines.append("")
|
||||
|
||||
# Selection
|
||||
lines.append("[colors.selection]")
|
||||
lines.append(f"background = '{self._ensure_hash(c.selection_bg)}'")
|
||||
lines.append(f"text = '{self._ensure_hash(c.selection_fg)}'")
|
||||
|
||||
return "\n".join(lines) + "\n"
|
||||
|
||||
def generate_wezterm(self) -> str:
|
||||
"""Generate wezterm theme (full TOML with metadata)."""
|
||||
c = self.colors
|
||||
tb = c.tab_bar
|
||||
lines = ["[colors]"]
|
||||
|
||||
# Ansi colors array
|
||||
lines.append("ansi = [")
|
||||
for name in COLOR_ORDER:
|
||||
lines.append(f' "{self._ensure_hash(c.normal[name])}",')
|
||||
lines.append("]")
|
||||
|
||||
lines.append(f'background = "{self._ensure_hash(c.background)}"')
|
||||
|
||||
# Brights array
|
||||
lines.append("brights = [")
|
||||
for name in COLOR_ORDER:
|
||||
lines.append(f' "{self._ensure_hash(c.bright[name])}",')
|
||||
lines.append("]")
|
||||
|
||||
# Extended colors
|
||||
lines.append(f'compose_cursor = "{self._ensure_hash(c.compose_cursor)}"')
|
||||
lines.append(f'cursor_bg = "{self._ensure_hash(c.cursor)}"')
|
||||
lines.append(f'cursor_border = "{self._ensure_hash(c.cursor)}"')
|
||||
lines.append(f'cursor_fg = "{self._ensure_hash(c.cursor_text)}"')
|
||||
lines.append(f'foreground = "{self._ensure_hash(c.foreground)}"')
|
||||
lines.append(f'scrollbar_thumb = "{self._ensure_hash(c.scrollbar_thumb)}"')
|
||||
lines.append(f'selection_bg = "{self._ensure_hash(c.selection_bg)}"')
|
||||
lines.append(f'selection_fg = "{self._ensure_hash(c.selection_fg)}"')
|
||||
lines.append(f'split = "{self._ensure_hash(c.split)}"')
|
||||
lines.append(f'visual_bell = "{self._ensure_hash(c.visual_bell)}"')
|
||||
|
||||
# Indexed colors
|
||||
lines.append("")
|
||||
lines.append("[colors.indexed]")
|
||||
for idx, color in sorted(c.indexed.items()):
|
||||
lines.append(f'{idx} = "{self._ensure_hash(color)}"')
|
||||
|
||||
# Tab bar
|
||||
lines.append("")
|
||||
lines.append("[colors.tab_bar]")
|
||||
lines.append(f'background = "{self._ensure_hash(tb["background"])}"')
|
||||
lines.append(f'inactive_tab_edge = "{self._ensure_hash(tb["inactiveTabEdge"])}"')
|
||||
|
||||
for section, key in [
|
||||
("activeTab", "active_tab"),
|
||||
("inactiveTab", "inactive_tab"),
|
||||
("inactiveTabHover", "inactive_tab_hover"),
|
||||
("newTab", "new_tab"),
|
||||
("newTabHover", "new_tab_hover"),
|
||||
]:
|
||||
lines.append("")
|
||||
lines.append(f"[colors.tab_bar.{key}]")
|
||||
lines.append(f'bg_color = "{self._ensure_hash(tb[section]["bg"])}"')
|
||||
lines.append(f'fg_color = "{self._ensure_hash(tb[section]["fg"])}"')
|
||||
lines.append('intensity = "Normal"')
|
||||
lines.append("italic = false")
|
||||
lines.append("strikethrough = false")
|
||||
lines.append('underline = "None"')
|
||||
|
||||
# Metadata
|
||||
lines.append("")
|
||||
lines.append("[metadata]")
|
||||
lines.append('author = "Noctalia"')
|
||||
lines.append('name = "Noctalia"')
|
||||
|
||||
return "\n".join(lines) + "\n"
|
||||
|
||||
def generate(self, terminal_id: str) -> str:
|
||||
"""Generate theme for specified terminal."""
|
||||
generators = {
|
||||
"foot": self.generate_foot,
|
||||
"ghostty": self.generate_ghostty,
|
||||
"kitty": self.generate_kitty,
|
||||
"alacritty": self.generate_alacritty,
|
||||
"wezterm": self.generate_wezterm,
|
||||
}
|
||||
|
||||
if terminal_id not in generators:
|
||||
raise ValueError(f"Unknown terminal: {terminal_id}")
|
||||
|
||||
return generators[terminal_id]()
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user