1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-05-15 08:42:47 -04:00

Compare commits

..

58 Commits

Author SHA1 Message Date
bbedward 03a8e1e0d5 clipboard: fix memory leak from unbounded offer maps and unguarded file reads 2026-02-20 11:42:14 -05:00
bbedward 4d4d3c20a1 keybinds/niri: fix quote preservation 2026-02-20 11:42:14 -05:00
bbedward cef16d6bc9 dankdash: fix widgets across different bar section fixes #1764s 2026-02-20 11:42:14 -05:00
bbedward aafaad1791 core/screenshot: light cleanups 2026-02-20 11:42:14 -05:00
Patrick Fischer 7906fdc2b0 screensaver: emit ActiveChanged on lock/unlock (#1761) 2026-02-20 11:42:14 -05:00
Triệu Kha 397650ca52 clipboard: improve image thumbnail (#1759)
- thumbnail image is now bigger
- circular mask has been replaced with rounded rectangular mask
2026-02-20 11:42:14 -05:00
purian23 826207006a template: Default install method 2026-02-20 11:42:14 -05:00
purian23 58c2fcd31c issues: Template fix 2026-02-20 11:42:14 -05:00
purian23 b2a2b425ec templates: Fix GitHub issue labels 2026-02-20 11:42:14 -05:00
shorinkiwata 942c9c9609 feat(distros): allow CatOS to run DMS installer (#1768)
- This PR adds support for **CatOS**
- CatOS is fully compatible with Arch Linux
2026-02-20 11:42:14 -05:00
purian23 46d6e1cff3 templates: Update DMS issue formats 2026-02-20 11:42:14 -05:00
bbedward a4137c57c1 running apps: fix ordering on niri 2026-02-19 20:46:26 -05:00
bbedward 1ad8b627f1 launcher: fix premature exit of file search fixes #1749 2026-02-19 16:47:34 -05:00
Jonas Bloch 58a02ce290 Search keybinds fixes (#1748)
* fix: close keybind cheatsheet on escape press

* feat: match all space separated words in keybind cheatsheet search
2026-02-19 16:27:14 -05:00
bbedward 8e1ad1a2be audio: fix hide device not working 2026-02-19 16:24:48 -05:00
bbedward 68cd7ab32c i18n: term sync 2026-02-19 14:11:21 -05:00
Youseffo13 f649ce9a8e Added missing i18n strings and changed reset button (#1746)
* Update it.json

* Enhance SettingsSliderRow: add resetText property and update reset button styling

* added i18n strings

* adjust reset button width to be dynamic based on content size

* added i18n strings

* Update template.json

* reverted changes

* Update it.json

* Update template.json
2026-02-19 14:11:21 -05:00
bbedward c4df242f07 dankbar: remove behaviors from monitoring widgets 2026-02-19 14:11:21 -05:00
bbedward 26846c8d55 dgop: round computed values to match display format 2026-02-19 14:11:21 -05:00
bbedward 31b44a667c flake: fix dev flake for go 1.25 and ashellchheck 2026-02-19 14:11:21 -05:00
bbedward 4f3b73ee21 hyprland: add serial to output model generator 2026-02-19 09:22:56 -05:00
bbedward 4cfae91f02 dock: fix context menu styling fixes #1742 2026-02-19 09:22:56 -05:00
bbedward 8d947a6e95 dock: fix transparency setting fixes #1739 2026-02-19 09:22:56 -05:00
bbedward 1e84d4252c launcher: improve perf of settings search 2026-02-19 09:22:56 -05:00
bbedward 76072e1d4c launcher: always heuristic lookup cached entries 2026-02-19 09:22:56 -05:00
bbedward 6408dce4a9 launcher v2: always heuristicLookup tab actions 2026-02-18 19:07:30 -05:00
bbedward 0b2e1cca38 i18n: term updates 2026-02-18 18:35:29 -05:00
bbedward c1bfd8c0b7 system tray: fix to take up 0 space when empty 2026-02-18 18:35:29 -05:00
Youseffo13 90ffa5833b Added Missing i18n strings (#1729)
* inverted dock visibility and position option

* added missing I18n strings

* added missing i18n strings

* added i18n strings

* Added missing i18n strings

* updated translations

* Update it.json
2026-02-18 18:35:29 -05:00
bbedward 169c669286 widgets: add openWith/toggleWith modes for dankbar widgets 2026-02-18 16:24:07 -05:00
bbedward f8350deafc keybinds: fix escape in keybinds modal 2026-02-18 14:57:53 -05:00
bbedward 0286a1b80b launcher v2: remove calc cc: enhancements for plugins to size details 2026-02-18 14:48:44 -05:00
beluch-dev 7c3e6c1f02 fix: correct parameter name in Hyprland windowrule (no_initial_focus) (#1726)
##Description
This PR corrects the parameter name to match new Hyprland standard.

## Changes
-Before: 'noinitialfocus'
-After: 'no_initial_focus'
2026-02-18 14:48:40 -05:00
bbedward d2d72db3c9 plugins: fix settings focus loss 2026-02-18 13:36:51 -05:00
Evgeny Zemtsov f81f861408 handle recycled server object IDs for workspace/group handles (#1725)
When switching tabs rapidly or closing multiple tabs, the taskbar shows
"ghost" workspaces — entries with no name, no coordinates, and no active
state. The ghosts appear at positions where workspaces were removed and
then recreated by the compositor.

When a compositor removes a workspace (sends `removed` event) and the
client calls Destroy(), the proxy is marked as zombie but stays in the
Context.objects map. For server-created objects (IDs >= 0xFF000000), the
server never sends `delete_id`, so the zombie proxy persists indefinitely.

When the compositor later creates a new workspace that gets a recycled
server object ID, GetProxy() returns the old zombie proxy. The dispatch
loop in GetDispatch() checks IsZombie() and silently drops ALL events
for zombie proxies — including property events (name, id, coordinates,
state, capabilities) intended for the new workspace. This causes the
ghost workspaces with empty properties in the UI.

Fix: check IsZombie() when handling `workspace` and `workspace_group`
events that carry a `new_id` argument. If the existing proxy is a
zombie, treat it as absent and create a fresh proxy via
registerServerProxy(), which replaces the zombie in the map. Subsequent
property events are then dispatched to the live proxy.
2026-02-18 13:36:51 -05:00
bbedward af494543f5 1.4.2: staging ground 2026-02-18 13:36:43 -05:00
bbedward db4de55338 popout: decouple shadow from content layer 2026-02-18 10:46:01 -05:00
bbedward 37ecbbbbde popout: disable layer after animation 2026-02-18 10:34:21 -05:00
purian23 d6a6d2a438 notifications: Maintain shadow during expansion 2026-02-18 10:34:21 -05:00
purian23 bf1c6eec74 notifications: Update initial popup height surfaces 2026-02-18 10:34:21 -05:00
bbedward 0ddae80584 running apps: fix scroll events being propagated fixes #1724 2026-02-18 10:34:21 -05:00
bbedward 5c96c03bfa matugen: make v4 detection more resilient 2026-02-18 09:57:35 -05:00
bbedward dfe36e47d8 process list: fix scaling with fonts fixes #1721 2026-02-18 09:57:35 -05:00
purian23 63e1b75e57 dankinstall: Fix Debian ARM64 detection 2026-02-18 09:57:35 -05:00
bbedward 29efdd8598 matugen: detect emacs directory fixes #1720 2026-02-18 09:57:35 -05:00
bbedward 34d03cf11b osd: optimize bindings 2026-02-18 09:57:35 -05:00
bbedward c339389d44 screenshot: adjust cursor CLI option to be more explicit 2026-02-17 22:28:46 -05:00
bbedward af5f6eb656 settings: workaround crash 2026-02-17 22:20:19 -05:00
purian23 a6d28e2553 notifications: Tweak animation scale & settings 2026-02-17 22:07:36 -05:00
bbedward 6213267908 settings: guard internal writes from watcher 2026-02-17 22:03:57 -05:00
bbedward d084114149 cc: fix plugin reloading in bar position changes 2026-02-17 17:25:19 -05:00
bbedward f6d99eca0d popout: anchor height changing popout surfaces to top and bottom 2026-02-17 17:25:19 -05:00
bbedward 722eb3289e workspaces: fix named workspace icons 2026-02-17 17:25:19 -05:00
bbedward b7f2bdcb2d dankinstall: no_anim on dms layers 2026-02-17 17:25:19 -05:00
bbedward 11c20db6e6 1.4.1 2026-02-17 14:08:15 -05:00
bbedward 8a4e3f8bb1 system updater: fix hide no update option 2026-02-17 14:08:04 -05:00
bbedward bc8fe97c13 launcher: fix kb navigation not always showing last delegate in view 2026-02-17 14:08:04 -05:00
bbedward 47262155aa doctor: add qt6-imageformats check 2026-02-17 14:08:04 -05:00
48 changed files with 2136 additions and 1683 deletions
+50 -17
View File
@@ -8,31 +8,31 @@ body:
value: | value: |
## DankMaterialShell Bug Report ## DankMaterialShell Bug Report
Limit your report to one issue per submission unless closely related Limit your report to one issue per submission unless closely related
- type: checkboxes - type: dropdown
id: compositor id: compositor
attributes: attributes:
label: Compositor label: Compositor
options: options:
- label: Niri - Niri
- label: Hyprland - Hyprland
- label: MangoWC (dwl) - MangoWC (dwl)
- label: Sway - Sway
validations: validations:
required: true required: true
- type: checkboxes - type: dropdown
id: distribution id: distribution
attributes: attributes:
label: Distribution label: Distribution
options: options:
- label: Arch Linux - Arch Linux
- label: CachyOS - CachyOS
- label: Fedora - Fedora
- label: NixOS - NixOS
- label: Debian - Debian
- label: Ubuntu - Ubuntu
- label: Gentoo - Gentoo
- label: OpenSUSE - OpenSUSE
- label: Other (specify below) - Other (specify below)
validations: validations:
required: true required: true
- type: input - type: input
@@ -42,12 +42,45 @@ body:
placeholder: e.g., PikaOS, Void Linux, etc. placeholder: e.g., PikaOS, Void Linux, etc.
validations: validations:
required: false required: false
- type: dropdown
id: installation_method
attributes:
label: Select your Installation Method
options:
- DankInstaller
- Distro Packaging
- Source
validations:
required: true
- type: dropdown
id: original_installation_method_different
attributes:
label: Was your original Installation method different?
options:
- "Yes"
- No (specify below)
default: 0
validations:
required: false
- type: input
id: original_installation_method_specify
attributes:
label: If no, specify
placeholder: e.g., Distro Packaging, then Source
validations:
required: false
- type: textarea - type: textarea
id: dms_doctor id: dms_doctor
attributes: attributes:
label: dms doctor -vC label: dms doctor -vC
description: Output of `dms doctor -vC` command description: Output of `dms doctor -vC` command — paste between the lines below to keep it collapsed in the issue
placeholder: Paste the output of `dms doctor -vC` here placeholder: Paste the output of `dms doctor -vC` here
value: |
<details>
<summary>Click to expand</summary>
</details>
validations: validations:
required: true required: true
- type: textarea - type: textarea
@@ -69,7 +102,7 @@ body:
- type: textarea - type: textarea
id: steps_to_reproduce id: steps_to_reproduce
attributes: attributes:
label: Steps to Reproduce & Installation Method label: Steps to Reproduce
description: Please provide detailed steps to reproduce the issue description: Please provide detailed steps to reproduce the issue
placeholder: | placeholder: |
1. ... 1. ...
+14 -7
View File
@@ -23,18 +23,25 @@ body:
placeholder: Why is this feature important? placeholder: Why is this feature important?
validations: validations:
required: false required: false
- type: checkboxes - type: dropdown
id: compositor id: compositor
attributes: attributes:
label: Compositor(s) label: Compositor(s)
description: Is this feature specific to one or more compositors? description: Is this feature specific to one or more compositors?
options: options:
- label: All compositors - All compositors
- label: Niri - Niri
- label: Hyprland - Hyprland
- label: MangoWC (dwl) - MangoWC (dwl)
- label: Sway - Sway
- label: Other (specify below) - Other (specify below)
validations:
required: true
- type: input
id: compositor_other
attributes:
label: If Other, please specify
placeholder: e.g., Wayfire, Mutter, etc.
validations: validations:
required: false required: false
- type: textarea - type: textarea
+65 -10
View File
@@ -7,32 +7,87 @@ body:
attributes: attributes:
value: | value: |
## DankMaterialShell Support Request ## DankMaterialShell Support Request
- type: checkboxes - type: dropdown
id: compositor id: compositor
attributes: attributes:
label: Compositor label: Compositor
options: options:
- label: Niri - Niri
- label: Hyprland - Hyprland
- label: MangoWC (dwl) - MangoWC (dwl)
- label: Sway - Sway
- label: Other (specify below) - Other (specify below)
validations:
required: true
- type: input
id: compositor_other
attributes:
label: If Other, please specify
placeholder: e.g., Wayfire, Mutter, etc.
validations: validations:
required: false required: false
- type: input - type: dropdown
id: distribution id: distribution
attributes: attributes:
label: Distribution label: Distribution
description: Which Linux distribution are you using? (e.g., Arch, Fedora, Debian, etc.) options:
placeholder: Your Linux distribution - Arch Linux
- CachyOS
- Fedora
- NixOS
- Debian
- Ubuntu
- Gentoo
- OpenSUSE
- Other (specify below)
validations:
required: true
- type: input
id: distribution_other
attributes:
label: If Other, please specify
placeholder: e.g., PikaOS, Void Linux, etc.
validations:
required: false
- type: dropdown
id: installation_method
attributes:
label: Select your Installation Method
options:
- DankInstaller
- Distro Packaging
- Source
validations:
required: true
- type: dropdown
id: original_installation_method_different
attributes:
label: Was your original Installation method different?
options:
- "Yes"
- No (specify below)
default: 0
validations:
required: false
- type: input
id: original_installation_method_specify
attributes:
label: If no, specify
placeholder: e.g., Distro Packaging, then Source
validations: validations:
required: false required: false
- type: textarea - type: textarea
id: dms_doctor id: dms_doctor
attributes: attributes:
label: dms doctor -vC label: dms doctor -vC
description: Output of `dms doctor -vC` command description: Output of `dms doctor -vC` command — paste between the lines below to keep it collapsed in the issue
placeholder: Paste the output of `dms doctor -vC` here placeholder: Paste the output of `dms doctor -vC` here
value: |
<details>
<summary>Click to expand</summary>
</details>
validations: validations:
required: false required: false
- type: textarea - type: textarea
+3
View File
@@ -26,6 +26,9 @@ func init() {
Register("cachyos", "#08A283", FamilyArch, func(config DistroConfig, logChan chan<- string) Distribution { Register("cachyos", "#08A283", FamilyArch, func(config DistroConfig, logChan chan<- string) Distribution {
return NewArchDistribution(config, logChan) return NewArchDistribution(config, logChan)
}) })
Register("catos", "#1793D1", FamilyArch, func(config DistroConfig, logChan chan<- string) Distribution {
return NewArchDistribution(config, logChan)
})
Register("endeavouros", "#7F3FBF", FamilyArch, func(config DistroConfig, logChan chan<- string) Distribution { Register("endeavouros", "#7F3FBF", FamilyArch, func(config DistroConfig, logChan chan<- string) Distribution {
return NewArchDistribution(config, logChan) return NewArchDistribution(config, logChan)
}) })
+2
View File
@@ -341,6 +341,8 @@ func (n *NiriProvider) buildActionFromNode(bindNode *document.Node) string {
val := arg.ValueString() val := arg.ValueString()
if val == "" { if val == "" {
parts = append(parts, `""`) parts = append(parts, `""`)
} else if strings.ContainsAny(val, " \t") {
parts = append(parts, `"`+strings.ReplaceAll(val, `"`, `\"`)+`"`)
} else { } else {
parts = append(parts, val) parts = append(parts, val)
} }
+24 -6
View File
@@ -232,8 +232,15 @@ func (m *Manager) setupDataDeviceSync() {
return return
} }
prevOffer := m.currentOffer
m.currentOffer = offer m.currentOffer = offer
if prevOffer != nil && prevOffer != offer {
m.offerMutex.Lock()
delete(m.offerMimeTypes, prevOffer)
m.offerMutex.Unlock()
}
m.offerMutex.RLock() m.offerMutex.RLock()
mimes := m.offerMimeTypes[offer] mimes := m.offerMimeTypes[offer]
m.offerMutex.RUnlock() m.offerMutex.RUnlock()
@@ -587,20 +594,26 @@ func (m *Manager) uriListPreview(data []byte) (string, bool) {
uris = strings.Split(text, "\n") uris = strings.Split(text, "\n")
} }
if len(uris) > 1 {
return fmt.Sprintf("[[ %d files ]]", len(uris)), false
}
if len(uris) == 1 && strings.HasPrefix(uris[0], "file://") { if len(uris) == 1 && strings.HasPrefix(uris[0], "file://") {
filePath := strings.TrimPrefix(uris[0], "file://") filePath := strings.TrimPrefix(uris[0], "file://")
if info, err := os.Stat(filePath); err == nil && !info.IsDir() { info, err := os.Stat(filePath)
if err != nil || info.IsDir() {
return m.textPreview(data), false
}
cfg := m.getConfig()
if info.Size() <= cfg.MaxEntrySize {
if imgData, err := os.ReadFile(filePath); err == nil { if imgData, err := os.ReadFile(filePath); err == nil {
if config, imgFmt, err := image.DecodeConfig(bytes.NewReader(imgData)); err == nil { if config, imgFmt, err := image.DecodeConfig(bytes.NewReader(imgData)); err == nil {
return fmt.Sprintf("[[ file %s %s %dx%d ]]", filepath.Base(filePath), imgFmt, config.Width, config.Height), true return fmt.Sprintf("[[ file %s %s %dx%d ]]", filepath.Base(filePath), imgFmt, config.Width, config.Height), true
} }
} }
return fmt.Sprintf("[[ file %s ]]", filepath.Base(filePath)), false
} }
} return fmt.Sprintf("[[ file %s ]]", filepath.Base(filePath)), false
if len(uris) > 1 {
return fmt.Sprintf("[[ %d files ]]", len(uris)), false
} }
return m.textPreview(data), false return m.textPreview(data), false
@@ -623,6 +636,11 @@ func (m *Manager) tryReadImageFromURI(data []byte) ([]byte, string, bool) {
return nil, "", false return nil, "", false
} }
cfg := m.getConfig()
if info.Size() > cfg.MaxEntrySize {
return nil, "", false
}
imgData, err := os.ReadFile(filePath) imgData, err := os.ReadFile(filePath)
if err != nil { if err != nil {
return nil, "", false return nil, "", false
@@ -16,4 +16,8 @@ const (
dbusScreensaverPath = "/ScreenSaver" dbusScreensaverPath = "/ScreenSaver"
dbusScreensaverPath2 = "/org/freedesktop/ScreenSaver" dbusScreensaverPath2 = "/org/freedesktop/ScreenSaver"
dbusScreensaverInterface = "org.freedesktop.ScreenSaver" dbusScreensaverInterface = "org.freedesktop.ScreenSaver"
dbusGnomeScreensaverName = "org.gnome.ScreenSaver"
dbusGnomeScreensaverPath = "/org/gnome/ScreenSaver"
dbusGnomeScreensaverInterface = "org.gnome.ScreenSaver"
) )
@@ -191,6 +191,12 @@ func (m *Manager) Close() {
return true return true
}) })
m.screensaverSubscribers.Range(func(key string, ch chan ScreensaverState) bool {
close(ch)
m.screensaverSubscribers.Delete(key)
return true
})
if m.systemConn != nil { if m.systemConn != nil {
m.systemConn.Close() m.systemConn.Close()
} }
+138 -59
View File
@@ -1,6 +1,7 @@
package freedesktop package freedesktop
import ( import (
"fmt"
"path/filepath" "path/filepath"
"strings" "strings"
"sync/atomic" "sync/atomic"
@@ -15,45 +16,9 @@ type screensaverHandler struct {
manager *Manager manager *Manager
} }
func (m *Manager) initializeScreensaver() error { func screensaverIntrospectIface(ifaceName string) introspect.Interface {
if m.sessionConn == nil { return introspect.Interface{
m.stateMutex.Lock() Name: ifaceName,
m.state.Screensaver.Available = false
m.stateMutex.Unlock()
return nil
}
reply, err := m.sessionConn.RequestName(dbusScreensaverName, dbus.NameFlagDoNotQueue)
if err != nil {
log.Warnf("Failed to request screensaver name: %v", err)
m.stateMutex.Lock()
m.state.Screensaver.Available = false
m.stateMutex.Unlock()
return nil
}
if reply != dbus.RequestNameReplyPrimaryOwner {
log.Warnf("Screensaver name already owned by another process")
m.stateMutex.Lock()
m.state.Screensaver.Available = false
m.stateMutex.Unlock()
return nil
}
handler := &screensaverHandler{manager: m}
if err := m.sessionConn.Export(handler, dbusScreensaverPath, dbusScreensaverInterface); err != nil {
log.Warnf("Failed to export screensaver on %s: %v", dbusScreensaverPath, err)
return nil
}
if err := m.sessionConn.Export(handler, dbusScreensaverPath2, dbusScreensaverInterface); err != nil {
log.Warnf("Failed to export screensaver on %s: %v", dbusScreensaverPath2, err)
return nil
}
screensaverIface := introspect.Interface{
Name: dbusScreensaverInterface,
Methods: []introspect.Method{ Methods: []introspect.Method{
{ {
Name: "Inhibit", Name: "Inhibit",
@@ -69,40 +34,106 @@ func (m *Manager) initializeScreensaver() error {
{Name: "cookie", Type: "u", Direction: "in"}, {Name: "cookie", Type: "u", Direction: "in"},
}, },
}, },
{
Name: "GetActive",
Args: []introspect.Arg{
{Name: "active", Type: "b", Direction: "out"},
},
},
{
Name: "SetActive",
Args: []introspect.Arg{
{Name: "active", Type: "b", Direction: "in"},
},
},
{
Name: "Lock",
},
}, },
Signals: []introspect.Signal{
{
Name: "ActiveChanged",
Args: []introspect.Arg{
{Name: "new_value", Type: "b"},
},
},
},
}
}
func (m *Manager) initializeScreensaver() error {
if m.sessionConn == nil {
m.stateMutex.Lock()
m.state.Screensaver.Available = false
m.stateMutex.Unlock()
return nil
} }
introNode := &introspect.Node{ handler := &screensaverHandler{manager: m}
Name: dbusScreensaverPath,
Interfaces: []introspect.Interface{
introspect.IntrospectData,
screensaverIface,
},
}
if err := m.sessionConn.Export(introspect.NewIntrospectable(introNode), dbusScreensaverPath, "org.freedesktop.DBus.Introspectable"); err != nil {
log.Warnf("Failed to export introspectable on %s: %v", dbusScreensaverPath, err)
}
introNode2 := &introspect.Node{ m.screensaverFreedesktopClaimed = m.claimScreensaverName(handler,
Name: dbusScreensaverPath2, dbusScreensaverName, dbusScreensaverInterface, dbusScreensaverPath, dbusScreensaverPath2)
Interfaces: []introspect.Interface{ m.screensaverGnomeClaimed = m.claimScreensaverName(handler,
introspect.IntrospectData, dbusGnomeScreensaverName, dbusGnomeScreensaverInterface, dbusGnomeScreensaverPath)
screensaverIface,
}, if !m.screensaverFreedesktopClaimed && !m.screensaverGnomeClaimed {
} log.Warn("No screensaver interface could be claimed")
if err := m.sessionConn.Export(introspect.NewIntrospectable(introNode2), dbusScreensaverPath2, "org.freedesktop.DBus.Introspectable"); err != nil { m.stateMutex.Lock()
log.Warnf("Failed to export introspectable on %s: %v", dbusScreensaverPath2, err) m.state.Screensaver.Available = false
m.stateMutex.Unlock()
return nil
} }
go m.watchPeerDisconnects() go m.watchPeerDisconnects()
m.stateMutex.Lock() m.stateMutex.Lock()
m.state.Screensaver.Available = true m.state.Screensaver.Available = true
m.state.Screensaver.Active = false
m.state.Screensaver.Inhibited = false m.state.Screensaver.Inhibited = false
m.state.Screensaver.Inhibitors = []ScreensaverInhibitor{} m.state.Screensaver.Inhibitors = []ScreensaverInhibitor{}
m.stateMutex.Unlock() m.stateMutex.Unlock()
log.Info("Screensaver inhibit listener initialized") log.Info("Screensaver listener initialized")
return nil
}
func (m *Manager) claimScreensaverName(handler *screensaverHandler, name, iface string, paths ...dbus.ObjectPath) bool {
reply, err := m.sessionConn.RequestName(name, dbus.NameFlagDoNotQueue)
if err != nil {
log.Warnf("Failed to request screensaver name %s: %v", name, err)
return false
}
if reply != dbus.RequestNameReplyPrimaryOwner {
log.Warnf("Screensaver name %s already owned by another process", name)
return false
}
if err := m.exportScreensaverOnPaths(handler, iface, paths...); err != nil {
log.Warnf("Failed to export screensaver on %s: %v", name, err)
return false
}
log.Infof("Claimed %s on session bus", name)
return true
}
// exportScreensaverOnPaths exports the handler and introspection on the given
// paths under the specified interface name.
func (m *Manager) exportScreensaverOnPaths(handler *screensaverHandler, ifaceName string, paths ...dbus.ObjectPath) error {
iface := screensaverIntrospectIface(ifaceName)
for _, path := range paths {
if err := m.sessionConn.Export(handler, path, ifaceName); err != nil {
return fmt.Errorf("export handler on %s: %w", path, err)
}
node := &introspect.Node{
Name: string(path),
Interfaces: []introspect.Interface{
introspect.IntrospectData,
iface,
},
}
if err := m.sessionConn.Export(introspect.NewIntrospectable(node), path, "org.freedesktop.DBus.Introspectable"); err != nil {
log.Warnf("Failed to export introspectable on %s: %v", path, err)
}
}
return nil return nil
} }
@@ -268,3 +299,51 @@ func (m *Manager) NotifyScreensaverSubscribers() {
return true return true
}) })
} }
func (h *screensaverHandler) GetActive() (bool, *dbus.Error) {
h.manager.stateMutex.RLock()
active := h.manager.state.Screensaver.Active
h.manager.stateMutex.RUnlock()
return active, nil
}
func (h *screensaverHandler) SetActive(active bool) *dbus.Error {
h.manager.SetScreenLockActive(active)
return nil
}
func (h *screensaverHandler) Lock() *dbus.Error {
h.manager.SetScreenLockActive(true)
return nil
}
func (m *Manager) SetScreenLockActive(active bool) {
m.stateMutex.Lock()
changed := m.state.Screensaver.Active != active
m.state.Screensaver.Active = active
m.stateMutex.Unlock()
if !changed {
return
}
log.Infof("Screen lock active changed: %v", active)
defer m.NotifyScreensaverSubscribers()
if m.sessionConn == nil {
return
}
if m.screensaverFreedesktopClaimed {
if err := m.sessionConn.Emit(dbusScreensaverPath, dbusScreensaverInterface+".ActiveChanged", active); err != nil {
log.Warnf("Failed to emit ActiveChanged on %s: %v", dbusScreensaverPath, err)
}
if err := m.sessionConn.Emit(dbusScreensaverPath2, dbusScreensaverInterface+".ActiveChanged", active); err != nil {
log.Warnf("Failed to emit ActiveChanged on %s: %v", dbusScreensaverPath2, err)
}
}
if m.screensaverGnomeClaimed {
if err := m.sessionConn.Emit(dbusGnomeScreensaverPath, dbusGnomeScreensaverInterface+".ActiveChanged", active); err != nil {
log.Warnf("Failed to emit ActiveChanged on %s: %v", dbusGnomeScreensaverPath, err)
}
}
}
@@ -0,0 +1,102 @@
package freedesktop
import (
"sync"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestSetScreenLockActive_ChangesState(t *testing.T) {
manager := &Manager{
state: &FreedeskState{
Screensaver: ScreensaverState{Available: true},
},
stateMutex: sync.RWMutex{},
}
assert.False(t, manager.GetScreensaverState().Active)
manager.SetScreenLockActive(true)
assert.True(t, manager.GetScreensaverState().Active)
manager.SetScreenLockActive(false)
assert.False(t, manager.GetScreensaverState().Active)
}
func TestSetScreenLockActive_NoChangeNoDuplicate(t *testing.T) {
ch := make(chan ScreensaverState, 64)
manager := &Manager{
state: &FreedeskState{
Screensaver: ScreensaverState{Available: true, Active: false},
},
stateMutex: sync.RWMutex{},
}
manager.screensaverSubscribers.Store("test", ch)
defer manager.screensaverSubscribers.Delete("test")
// Setting to same value should not notify
manager.SetScreenLockActive(false)
select {
case <-ch:
t.Fatal("should not have received notification for no-change")
case <-time.After(50 * time.Millisecond):
// Expected: no notification
}
}
func TestSetScreenLockActive_NotifiesSubscribers(t *testing.T) {
ch := make(chan ScreensaverState, 64)
manager := &Manager{
state: &FreedeskState{
Screensaver: ScreensaverState{Available: true, Active: false},
},
stateMutex: sync.RWMutex{},
}
manager.screensaverSubscribers.Store("test", ch)
defer manager.screensaverSubscribers.Delete("test")
manager.SetScreenLockActive(true)
select {
case state := <-ch:
assert.True(t, state.Active)
case <-time.After(time.Second):
t.Fatal("timeout waiting for subscriber notification")
}
}
func TestSetScreenLockActive_NilSessionConn(t *testing.T) {
manager := &Manager{
state: &FreedeskState{
Screensaver: ScreensaverState{Available: true},
},
stateMutex: sync.RWMutex{},
}
assert.NotPanics(t, func() {
manager.SetScreenLockActive(true)
})
assert.True(t, manager.GetScreensaverState().Active)
}
func TestGetActive_ReturnsCurrentState(t *testing.T) {
manager := &Manager{
state: &FreedeskState{
Screensaver: ScreensaverState{Available: true, Active: true},
},
stateMutex: sync.RWMutex{},
}
handler := &screensaverHandler{manager: manager}
active, dbusErr := handler.GetActive()
assert.Nil(t, dbusErr)
assert.True(t, active)
}
func TestScreensaverState_ActiveDefaultsFalse(t *testing.T) {
state := ScreensaverState{}
assert.False(t, state.Active)
}
+13 -10
View File
@@ -39,6 +39,7 @@ type ScreensaverInhibitor struct {
type ScreensaverState struct { type ScreensaverState struct {
Available bool `json:"available"` Available bool `json:"available"`
Active bool `json:"active"`
Inhibited bool `json:"inhibited"` Inhibited bool `json:"inhibited"`
Inhibitors []ScreensaverInhibitor `json:"inhibitors"` Inhibitors []ScreensaverInhibitor `json:"inhibitors"`
} }
@@ -50,14 +51,16 @@ type FreedeskState struct {
} }
type Manager struct { type Manager struct {
state *FreedeskState state *FreedeskState
stateMutex sync.RWMutex stateMutex sync.RWMutex
systemConn *dbus.Conn systemConn *dbus.Conn
sessionConn *dbus.Conn sessionConn *dbus.Conn
accountsObj dbus.BusObject accountsObj dbus.BusObject
settingsObj dbus.BusObject settingsObj dbus.BusObject
currentUID uint64 currentUID uint64
subscribers syncmap.Map[string, chan FreedeskState] subscribers syncmap.Map[string, chan FreedeskState]
screensaverSubscribers syncmap.Map[string, chan ScreensaverState] screensaverSubscribers syncmap.Map[string, chan ScreensaverState]
screensaverCookieCounter uint32 screensaverCookieCounter uint32
screensaverFreedesktopClaimed bool
screensaverGnomeClaimed bool
} }
+30
View File
@@ -1516,7 +1516,11 @@ func Start(printDocs bool) error {
} }
}() }()
loginctlReady := make(chan struct{})
freedesktopReady := make(chan struct{})
go func() { go func() {
defer close(loginctlReady)
if err := InitializeLoginctlManager(); err != nil { if err := InitializeLoginctlManager(); err != nil {
log.Warnf("Loginctl manager unavailable: %v", err) log.Warnf("Loginctl manager unavailable: %v", err)
} else { } else {
@@ -1525,6 +1529,7 @@ func Start(printDocs bool) error {
}() }()
go func() { go func() {
defer close(freedesktopReady)
if err := InitializeFreedeskManager(); err != nil { if err := InitializeFreedeskManager(); err != nil {
log.Warnf("Freedesktop manager unavailable: %v", err) log.Warnf("Freedesktop manager unavailable: %v", err)
} else if freedesktopManager != nil { } else if freedesktopManager != nil {
@@ -1533,6 +1538,31 @@ func Start(printDocs bool) error {
} }
}() }()
// Bridge loginctl lock state to the freedesktop/gnome screensaver
// ActiveChanged signal so apps like Bitwarden can detect screen lock.
go func() {
<-loginctlReady
<-freedesktopReady
if loginctlManager == nil || freedesktopManager == nil {
return
}
ch := loginctlManager.Subscribe("dms-lock-bridge")
defer loginctlManager.Unsubscribe("dms-lock-bridge")
initial := loginctlManager.GetState()
lastLocked := initial.Locked
freedesktopManager.SetScreenLockActive(lastLocked)
for state := range ch {
if state.Locked != lastLocked {
lastLocked = state.Locked
freedesktopManager.SetScreenLockActive(lastLocked)
}
}
}()
if err := InitializeWaylandManager(); err != nil { if err := InitializeWaylandManager(); err != nil {
log.Warnf("Wayland manager unavailable: %v", err) log.Warnf("Wayland manager unavailable: %v", err)
} }
+1 -1
View File
@@ -162,7 +162,7 @@ func TestCleanupStaleSockets(t *testing.T) {
tempDir := t.TempDir() tempDir := t.TempDir()
t.Setenv("XDG_RUNTIME_DIR", tempDir) t.Setenv("XDG_RUNTIME_DIR", tempDir)
staleSocket := filepath.Join(tempDir, "danklinux-999999.sock") staleSocket := filepath.Join(tempDir, "danklinux-4194305.sock")
err := os.WriteFile(staleSocket, []byte{}, 0o600) err := os.WriteFile(staleSocket, []byte{}, 0o600)
require.NoError(t, err) require.NoError(t, err)
+1 -1
View File
@@ -1 +1 @@
The Wolverine Saffron Bloom
+2
View File
@@ -142,6 +142,8 @@ Singleton {
if (tabIndex !== undefined && popout.currentTabIndex !== undefined) { if (tabIndex !== undefined && popout.currentTabIndex !== undefined) {
popout.currentTabIndex = tabIndex; popout.currentTabIndex = tabIndex;
} }
if (popout.updateSurfacePosition)
popout.updateSurfacePosition();
currentPopoutTriggers[screenName] = triggerId; currentPopoutTriggers[screenName] = triggerId;
return; return;
} }
@@ -18,7 +18,7 @@ FloatingWindow {
} }
objectName: "changelogModal" objectName: "changelogModal"
title: "What's New" title: i18n("What's New")
minimumSize: Qt.size(modalWidth, modalHeight) minimumSize: Qt.size(modalWidth, modalHeight)
maximumSize: Qt.size(modalWidth, modalHeight) maximumSize: Qt.size(modalWidth, modalHeight)
color: Theme.surfaceContainer color: Theme.surfaceContainer
@@ -81,7 +81,7 @@ FloatingWindow {
onClicked: root.dismiss() onClicked: root.dismiss()
DankTooltip { DankTooltip {
text: "Close" text: i18n("Close")
} }
} }
} }
@@ -125,7 +125,7 @@ FloatingWindow {
spacing: Theme.spacingM spacing: Theme.spacingM
DankButton { DankButton {
text: "Read Full Release Notes" text: i18n("Read Full Release Notes")
iconName: "open_in_new" iconName: "open_in_new"
backgroundColor: Theme.surfaceContainerHighest backgroundColor: Theme.surfaceContainerHighest
textColor: Theme.surfaceText textColor: Theme.surfaceText
@@ -133,7 +133,7 @@ FloatingWindow {
} }
DankButton { DankButton {
text: "Got It" text: i18n("Got It")
iconName: "check" iconName: "check"
backgroundColor: Theme.primary backgroundColor: Theme.primary
textColor: Theme.primaryText textColor: Theme.primaryText
@@ -12,7 +12,7 @@ Singleton {
readonly property int popoutWidth: 550 readonly property int popoutWidth: 550
readonly property int popoutHeight: 500 readonly property int popoutHeight: 500
readonly property int itemHeight: 72 readonly property int itemHeight: 72
readonly property int thumbnailSize: 48 readonly property int thumbnailSize: 100
readonly property int retryInterval: 50 readonly property int retryInterval: 50
readonly property int viewportBuffer: 100 readonly property int viewportBuffer: 100
readonly property int extendedBuffer: 200 readonly property int extendedBuffer: 200
@@ -84,7 +84,8 @@ Rectangle {
anchors.right: actionButtons.left anchors.right: actionButtons.left
anchors.rightMargin: Theme.spacingM anchors.rightMargin: Theme.spacingM
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
height: contentColumn.implicitHeight // height: contentColumn.implicitHeight
height: ClipboardConstants.itemHeight
clip: true clip: true
ClipboardThumbnail { ClipboardThumbnail {
@@ -92,7 +93,7 @@ Rectangle {
anchors.left: parent.left anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
width: entryType === "image" ? ClipboardConstants.thumbnailSize : Theme.iconSize width: entryType === "image" ? ClipboardConstants.thumbnailSize : Theme.iconSize
height: entryType === "image" ? ClipboardConstants.thumbnailSize : Theme.iconSize height: entryType === "image" ? ClipboardConstants.itemHeight - 4 : Theme.iconSize // 100 - 4 = 96, 96:72 = 4:3
entry: root.entry entry: root.entry
entryType: root.entryType entryType: root.entryType
modal: root.modal modal: root.modal
@@ -137,23 +137,23 @@ Item {
anchors.margins: 2 anchors.margins: 2
source: thumbnailImage source: thumbnailImage
maskEnabled: true maskEnabled: true
maskSource: clipboardCircularMask maskSource: clipboardRoundedRectangularMask
visible: entryType === "image" && thumbnailImage.status === Image.Ready && thumbnailImage.source != "" visible: entryType === "image" && thumbnailImage.status === Image.Ready && thumbnailImage.source != ""
maskThresholdMin: 0.5 maskThresholdMin: 0.5
maskSpreadAtMin: 1 maskSpreadAtMin: 1
} }
Item { Item {
id: clipboardCircularMask id: clipboardRoundedRectangularMask
width: ClipboardConstants.thumbnailSize - 4 width: ClipboardConstants.thumbnailSize
height: ClipboardConstants.thumbnailSize - 4 height: ClipboardConstants.itemHeight - 4
layer.enabled: true layer.enabled: true
layer.smooth: true layer.smooth: true
visible: false visible: false
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent
radius: width / 2 radius: Theme.cornerRadius / 2 // Thumbnail corner radius is divided by 2 so it doesnt look weird on large corner radius (eg: 32px)
color: "black" color: "black"
antialiasing: true antialiasing: true
} }
@@ -470,9 +470,6 @@ FocusScope {
onTextChanged: { onTextChanged: {
controller.setSearchQuery(text); controller.setSearchQuery(text);
if (text.length === 0) {
controller.restorePreviousMode();
}
if (actionPanel.expanded) { if (actionPanel.expanded) {
actionPanel.hide(); actionPanel.hide();
} }
+18 -2
View File
@@ -123,6 +123,7 @@ DankModal {
function generateCategories(query) { function generateCategories(query) {
const lowerQuery = query ? query.toLowerCase().trim() : ""; const lowerQuery = query ? query.toLowerCase().trim() : "";
const lowerQueryWords = query.split(/\s+/);
const processed = {}; const processed = {};
for (const cat in rawBinds) { for (const cat in rawBinds) {
@@ -135,10 +136,25 @@ DankModal {
const keyLower = bind.key.toLowerCase(); const keyLower = bind.key.toLowerCase();
const descLower = bind.desc.toLowerCase(); const descLower = bind.desc.toLowerCase();
const actionLower = bind.action.toLowerCase(); const actionLower = bind.action.toLowerCase();
if (!(lowerQuery.length === 0 || keyLower.includes(lowerQuery) || descLower.includes(lowerQuery) || catLower.includes(lowerQuery) || actionLower.includes(lowerQuery)))
continue;
if (bind.hideOnOverlay) if (bind.hideOnOverlay)
continue; continue;
let shouldContinue = false;
for (let j = 0; j < lowerQueryWords.length; j++) {
const word = lowerQueryWords[j];
if (!(
word.length === 0 ||
keyLower.includes(word) ||
descLower.includes(word) ||
catLower.includes(word) ||
actionLower.includes(word)
)) {
shouldContinue = true;
break;
}
}
if (shouldContinue)
continue;
if (bind.subcat) { if (bind.subcat) {
hasSubcats = true; hasSubcats = true;
@@ -40,6 +40,24 @@ Rectangle {
font.weight: Font.Medium font.weight: Font.Medium
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
Item {
height: 1
width: parent.width - headerText.width - settingsButton.width
}
DankActionButton {
id: settingsButton
anchors.verticalCenter: parent.verticalCenter
iconName: "settings"
buttonSize: 28
iconSize: 16
iconColor: Theme.surfaceVariantText
onClicked: {
PopoutService.closeControlCenter();
PopoutService.openSettingsWithTab("audio");
}
}
} }
Row { Row {
@@ -151,8 +169,11 @@ Rectangle {
Repeater { Repeater {
model: ScriptModel { model: ScriptModel {
values: { values: {
const hidden = SessionData.hiddenInputDeviceNames ?? [];
const nodes = Pipewire.nodes.values.filter(node => { const nodes = Pipewire.nodes.values.filter(node => {
return node.audio && !node.isSink && !node.isStream; if (!node.audio || node.isSink || node.isStream)
return false;
return !hidden.includes(node.name);
}); });
const pinnedList = audioContent.getPinnedInputs(); const pinnedList = audioContent.getPinnedInputs();
@@ -40,6 +40,24 @@ Rectangle {
font.weight: Font.Medium font.weight: Font.Medium
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
Item {
height: 1
width: parent.width - headerText.width - settingsButton.width
}
DankActionButton {
id: settingsButton
anchors.verticalCenter: parent.verticalCenter
iconName: "settings"
buttonSize: 28
iconSize: 16
iconColor: Theme.surfaceVariantText
onClicked: {
PopoutService.closeControlCenter();
PopoutService.openSettingsWithTab("audio");
}
}
} }
Row { Row {
@@ -161,8 +179,11 @@ Rectangle {
Repeater { Repeater {
model: ScriptModel { model: ScriptModel {
values: { values: {
const hidden = SessionData.hiddenOutputDeviceNames ?? [];
const nodes = Pipewire.nodes.values.filter(node => { const nodes = Pipewire.nodes.values.filter(node => {
return node.audio && node.isSink && !node.isStream; if (!node.audio || !node.isSink || node.isStream)
return false;
return !hidden.includes(node.name);
}); });
const pinnedList = audioContent.getPinnedOutputs(); const pinnedList = audioContent.getPinnedOutputs();
@@ -811,7 +811,7 @@ Item {
} else { } else {
dankDashPopoutLoader.item.triggerScreen = barWindow.screen; dankDashPopoutLoader.item.triggerScreen = barWindow.screen;
} }
PopoutManager.requestPopout(dankDashPopoutLoader.item, 0, (effectiveBarConfig?.id ?? "default") + "-0"); PopoutManager.requestPopout(dankDashPopoutLoader.item, 0, (effectiveBarConfig?.id ?? "default") + "-" + section + "-0");
} }
} }
} }
@@ -867,7 +867,7 @@ Item {
} else { } else {
dankDashPopoutLoader.item.triggerScreen = barWindow.screen; dankDashPopoutLoader.item.triggerScreen = barWindow.screen;
} }
PopoutManager.requestPopout(dankDashPopoutLoader.item, 1, (effectiveBarConfig?.id ?? "default") + "-1"); PopoutManager.requestPopout(dankDashPopoutLoader.item, 1, (effectiveBarConfig?.id ?? "default") + "-" + section + "-1");
} }
} }
} }
@@ -926,7 +926,7 @@ Item {
} else { } else {
dankDashPopoutLoader.item.triggerScreen = barWindow.screen; dankDashPopoutLoader.item.triggerScreen = barWindow.screen;
} }
PopoutManager.requestPopout(dankDashPopoutLoader.item, 3, (effectiveBarConfig?.id ?? "default") + "-3"); PopoutManager.requestPopout(dankDashPopoutLoader.item, 3, (effectiveBarConfig?.id ?? "default") + "-" + section + "-3");
} }
} }
} }
+1 -1
View File
@@ -80,7 +80,7 @@ PanelWindow {
dankDashPopoutLoader.item.triggerScreen = barWindow.screen; dankDashPopoutLoader.item.triggerScreen = barWindow.screen;
} }
PopoutManager.requestPopout(dankDashPopoutLoader.item, 2, (barConfig?.id ?? "default") + "-2"); PopoutManager.requestPopout(dankDashPopoutLoader.item, 2, (barConfig?.id ?? "default") + "-" + section + "-2");
} }
readonly property var dBarLayer: { readonly property var dBarLayer: {
@@ -138,15 +138,13 @@ BasePill {
readonly property real iconCellSize: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.noBackground) + 6 readonly property real iconCellSize: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.noBackground) + 6
readonly property string focusedAppId: { readonly property string focusedAppId: {
const toplevels = CompositorService.sortedToplevels; if (!sortedToplevels || sortedToplevels.length === 0)
if (!toplevels)
return ""; return "";
let result = ""; for (let i = 0; i < sortedToplevels.length; i++) {
for (let i = 0; i < toplevels.length; i++) { if (sortedToplevels[i].activated)
if (toplevels[i].activated) return sortedToplevels[i].appId || "";
result = toplevels[i].appId || "";
} }
return result; return "";
} }
visible: windowCount > 0 visible: windowCount > 0
@@ -1065,7 +1065,7 @@ Item {
} }
StyledText { StyledText {
text: "Caps Lock is on" text: I18n.tr("Caps Lock is on")
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
color: Theme.error color: Theme.error
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
@@ -23,7 +23,7 @@ Rectangle {
spacing: 2 spacing: 2
StyledText { StyledText {
text: "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text" text: I18n.tr("↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text")
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceText color: Theme.surfaceText
width: parent.width width: parent.width
+2 -1
View File
@@ -813,7 +813,7 @@ Item {
} }
Rectangle { Rectangle {
width: 80 width: resetContentRow.implicitWidth + Theme.spacingM * 2
height: 28 height: 28
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: resetArea.containsMouse ? Theme.surfacePressed : Theme.surfaceVariant color: resetArea.containsMouse ? Theme.surfacePressed : Theme.surfaceVariant
@@ -821,6 +821,7 @@ Item {
border.width: 0 border.width: 0
Row { Row {
id: resetContentRow
anchors.centerIn: parent anchors.centerIn: parent
spacing: Theme.spacingXS spacing: Theme.spacingXS
+1 -1
View File
@@ -11,7 +11,7 @@ Singleton {
id: root id: root
readonly property string currentVersion: "1.4" readonly property string currentVersion: "1.4"
readonly property bool changelogEnabled: false readonly property bool changelogEnabled: true
readonly property string configDir: Paths.strip(StandardPaths.writableLocation(StandardPaths.ConfigLocation)) + "/DankMaterialShell" readonly property string configDir: Paths.strip(StandardPaths.writableLocation(StandardPaths.ConfigLocation)) + "/DankMaterialShell"
readonly property string changelogMarkerPath: configDir + "/.changelog-" + currentVersion readonly property string changelogMarkerPath: configDir + "/.changelog-" + currentVersion
+41 -98
View File
@@ -963,48 +963,34 @@ Singleton {
return enrichedToplevels; return enrichedToplevels;
} }
function filterCurrentWorkspace(toplevels, screenName) { function _matchAndEnrichToplevels(toplevels, niriWindows) {
let currentWorkspaceId = null;
for (var i = 0; i < allWorkspaces.length; i++) {
const ws = allWorkspaces[i];
if (ws.output === screenName && ws.is_active) {
currentWorkspaceId = ws.id;
break;
}
}
if (currentWorkspaceId === null)
return toplevels;
const workspaceWindows = windows.filter(niriWindow => niriWindow.workspace_id === currentWorkspaceId);
const usedToplevels = new Set(); const usedToplevels = new Set();
const result = []; const result = [];
for (const niriWindow of workspaceWindows) { for (const niriWindow of niriWindows) {
let bestMatch = null; let bestMatch = null;
let bestScore = -1; let bestScore = -1;
for (const toplevel of toplevels) { for (const toplevel of toplevels) {
if (usedToplevels.has(toplevel)) if (usedToplevels.has(toplevel))
continue; continue;
if (toplevel.appId === niriWindow.app_id) { if (toplevel.appId !== niriWindow.app_id)
let score = 1; continue;
if (niriWindow.title && toplevel.title) { let score = 1;
if (toplevel.title === niriWindow.title) { if (niriWindow.title && toplevel.title) {
score = 3; if (toplevel.title === niriWindow.title) {
} else if (toplevel.title.includes(niriWindow.title) || niriWindow.title.includes(toplevel.title)) { score = 3;
score = 2; } else if (toplevel.title.includes(niriWindow.title) || niriWindow.title.includes(toplevel.title)) {
} score = 2;
} }
}
if (score > bestScore) { if (score > bestScore) {
bestScore = score; bestScore = score;
bestMatch = toplevel; bestMatch = toplevel;
if (score === 3) if (score === 3)
break; break;
}
} }
} }
@@ -1025,17 +1011,15 @@ Singleton {
return NiriService.focusWindow(niriWindow.id); return NiriService.focusWindow(niriWindow.id);
}, },
"close": function () { "close": function () {
if (bestMatch.close) { if (bestMatch.close)
return bestMatch.close(); return bestMatch.close();
}
return false; return false;
} }
}; };
for (let prop in bestMatch) { for (let prop in bestMatch) {
if (!(prop in enrichedToplevel)) { if (!(prop in enrichedToplevel))
enrichedToplevel[prop] = bestMatch[prop]; enrichedToplevel[prop] = bestMatch[prop];
}
} }
result.push(enrichedToplevel); result.push(enrichedToplevel);
@@ -1044,6 +1028,26 @@ Singleton {
return result; return result;
} }
function filterCurrentWorkspace(toplevels, screenName) {
let currentWorkspaceId = null;
for (var i = 0; i < allWorkspaces.length; i++) {
const ws = allWorkspaces[i];
if (ws.output === screenName && ws.is_active) {
currentWorkspaceId = ws.id;
break;
}
}
if (currentWorkspaceId === null)
return toplevels;
if (toplevels.length > 0 && toplevels[0].niriWorkspaceId !== undefined)
return toplevels.filter(t => t.niriWorkspaceId === currentWorkspaceId);
return _matchAndEnrichToplevels(toplevels, windows.filter(nw => nw.workspace_id === currentWorkspaceId));
}
function filterCurrentDisplay(toplevels, screenName) { function filterCurrentDisplay(toplevels, screenName) {
if (!toplevels || toplevels.length === 0 || !screenName) if (!toplevels || toplevels.length === 0 || !screenName)
return toplevels; return toplevels;
@@ -1058,71 +1062,10 @@ Singleton {
if (outputWorkspaceIds.size === 0) if (outputWorkspaceIds.size === 0)
return toplevels; return toplevels;
const displayWindows = windows.filter(niriWindow => outputWorkspaceIds.has(niriWindow.workspace_id)); if (toplevels.length > 0 && toplevels[0].niriWorkspaceId !== undefined)
const usedToplevels = new Set(); return toplevels.filter(t => outputWorkspaceIds.has(t.niriWorkspaceId));
const result = [];
for (const niriWindow of displayWindows) { return _matchAndEnrichToplevels(toplevels, windows.filter(nw => outputWorkspaceIds.has(nw.workspace_id)));
let bestMatch = null;
let bestScore = -1;
for (const toplevel of toplevels) {
if (usedToplevels.has(toplevel))
continue;
if (toplevel.appId === niriWindow.app_id) {
let score = 1;
if (niriWindow.title && toplevel.title) {
if (toplevel.title === niriWindow.title) {
score = 3;
} else if (toplevel.title.includes(niriWindow.title) || niriWindow.title.includes(toplevel.title)) {
score = 2;
}
}
if (score > bestScore) {
bestScore = score;
bestMatch = toplevel;
if (score === 3)
break;
}
}
}
if (!bestMatch)
continue;
usedToplevels.add(bestMatch);
const workspace = workspaces[niriWindow.workspace_id];
const isFocused = niriWindow.is_focused ?? (workspace && workspace.active_window_id === niriWindow.id) ?? false;
const enrichedToplevel = {
"appId": bestMatch.appId,
"title": bestMatch.title,
"activated": isFocused,
"niriWindowId": niriWindow.id,
"niriWorkspaceId": niriWindow.workspace_id,
"activate": function () {
return NiriService.focusWindow(niriWindow.id);
},
"close": function () {
if (bestMatch.close) {
return bestMatch.close();
}
return false;
}
};
for (let prop in bestMatch) {
if (!(prop in enrichedToplevel)) {
enrichedToplevel[prop] = bestMatch[prop];
}
}
result.push(enrichedToplevel);
}
return result;
} }
function generateNiriLayoutConfig() { function generateNiriLayoutConfig() {
+1 -1
View File
@@ -1 +1 @@
v1.5-beta v1.4.2
+7
View File
@@ -109,6 +109,13 @@ Item {
readonly property bool useBackgroundWindow: !CompositorService.isHyprland || CompositorService.useHyprlandFocusGrab readonly property bool useBackgroundWindow: !CompositorService.isHyprland || CompositorService.useHyprlandFocusGrab
function updateSurfacePosition() {
if (useBackgroundWindow && shouldBeVisible) {
_surfaceMarginLeft = alignedX - shadowBuffer;
_surfaceW = alignedWidth + shadowBuffer * 2;
}
}
function open() { function open() {
if (!screen) if (!screen)
return; return;
+36 -24
View File
@@ -1514,7 +1514,7 @@
{ {
"term": "Bottom Section", "term": "Bottom Section",
"context": "Bottom Section", "context": "Bottom Section",
"reference": "Modules/Settings/WidgetsTab.qml:1005", "reference": "Modules/Settings/WidgetsTab.qml:1006",
"comment": "" "comment": ""
}, },
{ {
@@ -1550,7 +1550,7 @@
{ {
"term": "Browse", "term": "Browse",
"context": "theme category option", "context": "theme category option",
"reference": "Modals/DankLauncherV2/Controller.qml:144, Modals/DankLauncherV2/Controller.qml:1039, Modules/Settings/ThemeColorsTab.qml:272, Modules/Settings/PluginsTab.qml:209", "reference": "Modals/DankLauncherV2/Controller.qml:144, Modals/DankLauncherV2/Controller.qml:1042, Modules/Settings/ThemeColorsTab.qml:272, Modules/Settings/PluginsTab.qml:209",
"comment": "" "comment": ""
}, },
{ {
@@ -1703,10 +1703,16 @@
"reference": "Modules/Settings/WidgetsTab.qml:197", "reference": "Modules/Settings/WidgetsTab.qml:197",
"comment": "" "comment": ""
}, },
{
"term": "Caps Lock is on",
"context": "Caps Lock is on",
"reference": "Modules/Lock/LockScreenContent.qml:1068",
"comment": ""
},
{ {
"term": "Center Section", "term": "Center Section",
"context": "Center Section", "context": "Center Section",
"reference": "Modules/Settings/WidgetsTab.qml:947", "reference": "Modules/Settings/WidgetsTab.qml:948",
"comment": "" "comment": ""
}, },
{ {
@@ -2054,7 +2060,7 @@
{ {
"term": "Close All Windows", "term": "Close All Windows",
"context": "Close All Windows", "context": "Close All Windows",
"reference": "Modules/DankBar/Widgets/AppsDockContextMenu.qml:445", "reference": "Modules/Dock/DockContextMenu.qml:537, Modules/DankBar/Widgets/AppsDockContextMenu.qml:445",
"comment": "" "comment": ""
}, },
{ {
@@ -2066,7 +2072,7 @@
{ {
"term": "Close Window", "term": "Close Window",
"context": "Close Window", "context": "Close Window",
"reference": "dms-plugins/DankHyprlandWindows/DankHyprlandWindows.qml:141, Modules/DankBar/Widgets/AppsDockContextMenu.qml:447", "reference": "dms-plugins/DankHyprlandWindows/DankHyprlandWindows.qml:141, Modules/Dock/DockContextMenu.qml:537, Modules/DankBar/Widgets/AppsDockContextMenu.qml:447",
"comment": "" "comment": ""
}, },
{ {
@@ -2570,7 +2576,7 @@
{ {
"term": "Copy path", "term": "Copy path",
"context": "Copy path", "context": "Copy path",
"reference": "Modals/DankLauncherV2/Controller.qml:918", "reference": "Modals/DankLauncherV2/Controller.qml:921",
"comment": "" "comment": ""
}, },
{ {
@@ -3530,7 +3536,7 @@
{ {
"term": "Drag widgets to reorder within sections. Use the eye icon to hide/show widgets (maintains spacing), or X to remove them completely.", "term": "Drag widgets to reorder within sections. Use the eye icon to hide/show widgets (maintains spacing), or X to remove them completely.",
"context": "Drag widgets to reorder within sections. Use the eye icon to hide/show widgets (maintains spacing), or X to remove them completely.", "context": "Drag widgets to reorder within sections. Use the eye icon to hide/show widgets (maintains spacing), or X to remove them completely.",
"reference": "Modules/Settings/WidgetsTab.qml:866", "reference": "Modules/Settings/WidgetsTab.qml:867",
"comment": "" "comment": ""
}, },
{ {
@@ -4454,7 +4460,7 @@
{ {
"term": "Files", "term": "Files",
"context": "Files", "context": "Files",
"reference": "Modals/DankLauncherV2/Controller.qml:151, Modals/DankLauncherV2/Controller.qml:853, Modals/DankLauncherV2/LauncherContent.qml:317", "reference": "Modals/DankLauncherV2/Controller.qml:151, Modals/DankLauncherV2/Controller.qml:856, Modals/DankLauncherV2/LauncherContent.qml:317",
"comment": "" "comment": ""
}, },
{ {
@@ -5768,7 +5774,7 @@
{ {
"term": "Launch", "term": "Launch",
"context": "Launch", "context": "Launch",
"reference": "Modals/DankLauncherV2/LauncherContextMenu.qml:154, Modals/DankLauncherV2/Controller.qml:906", "reference": "Modals/DankLauncherV2/LauncherContextMenu.qml:154, Modals/DankLauncherV2/Controller.qml:909, Modals/DankLauncherV2/Controller.qml:1302",
"comment": "" "comment": ""
}, },
{ {
@@ -5780,7 +5786,7 @@
{ {
"term": "Launch on dGPU", "term": "Launch on dGPU",
"context": "Launch on dGPU", "context": "Launch on dGPU",
"reference": "Modals/DankLauncherV2/LauncherContextMenu.qml:146, Modals/DankLauncherV2/ActionPanel.qml:66, Modules/Dock/DockContextMenu.qml:457, Modules/DankBar/Widgets/AppsDockContextMenu.qml:401", "reference": "Modals/DankLauncherV2/LauncherContextMenu.qml:146, Modals/DankLauncherV2/ActionPanel.qml:61, Modules/Dock/DockContextMenu.qml:482, Modules/DankBar/Widgets/AppsDockContextMenu.qml:401",
"comment": "" "comment": ""
}, },
{ {
@@ -5828,7 +5834,7 @@
{ {
"term": "Left Section", "term": "Left Section",
"context": "Left Section", "context": "Left Section",
"reference": "Modules/Settings/WidgetsTab.qml:889", "reference": "Modules/Settings/WidgetsTab.qml:890",
"comment": "" "comment": ""
}, },
{ {
@@ -6440,7 +6446,7 @@
{ {
"term": "Middle Section", "term": "Middle Section",
"context": "Middle Section", "context": "Middle Section",
"reference": "Modules/Settings/WidgetsTab.qml:947", "reference": "Modules/Settings/WidgetsTab.qml:948",
"comment": "" "comment": ""
}, },
{ {
@@ -7244,7 +7250,7 @@
{ {
"term": "No trigger", "term": "No trigger",
"context": "No trigger", "context": "No trigger",
"reference": "Modals/DankLauncherV2/Controller.qml:1041, Modules/Settings/LauncherTab.qml:742", "reference": "Modals/DankLauncherV2/Controller.qml:1044, Modules/Settings/LauncherTab.qml:742",
"comment": "" "comment": ""
}, },
{ {
@@ -7562,7 +7568,7 @@
{ {
"term": "Open", "term": "Open",
"context": "Open", "context": "Open",
"reference": "Modals/DankLauncherV2/Controller.qml:910, Modals/DankLauncherV2/Controller.qml:914, Modals/DankLauncherV2/Controller.qml:918, Modules/Notepad/NotepadTextEditor.qml:779, Modules/Settings/NetworkTab.qml:1199, Modules/Settings/NetworkTab.qml:1437, Modules/ControlCenter/Details/NetworkDetail.qml:609", "reference": "Modals/DankLauncherV2/Controller.qml:913, Modals/DankLauncherV2/Controller.qml:917, Modals/DankLauncherV2/Controller.qml:921, Modules/Notepad/NotepadTextEditor.qml:779, Modules/Settings/NetworkTab.qml:1199, Modules/Settings/NetworkTab.qml:1437, Modules/ControlCenter/Details/NetworkDetail.qml:609",
"comment": "" "comment": ""
}, },
{ {
@@ -7592,7 +7598,7 @@
{ {
"term": "Open folder", "term": "Open folder",
"context": "Open folder", "context": "Open folder",
"reference": "Modals/DankLauncherV2/Controller.qml:918", "reference": "Modals/DankLauncherV2/Controller.qml:921",
"comment": "" "comment": ""
}, },
{ {
@@ -8000,7 +8006,7 @@
{ {
"term": "Pin to Dock", "term": "Pin to Dock",
"context": "Pin to Dock", "context": "Pin to Dock",
"reference": "Modals/DankLauncherV2/LauncherContextMenu.qml:103, Modules/Dock/DockContextMenu.qml:397, Modules/DankBar/Widgets/AppsDockContextMenu.qml:341", "reference": "Modals/DankLauncherV2/LauncherContextMenu.qml:103, Modules/Dock/DockContextMenu.qml:409, Modules/DankBar/Widgets/AppsDockContextMenu.qml:341",
"comment": "" "comment": ""
}, },
{ {
@@ -8288,7 +8294,7 @@
{ {
"term": "Precip", "term": "Precip",
"context": "Precip", "context": "Precip",
"reference": "dms-plugins/DankDesktopWeather/DankDesktopWeather.qml:437", "reference": "dms-plugins/DankDesktopWeather/DankDesktopWeather.qml:441",
"comment": "" "comment": ""
}, },
{ {
@@ -8336,7 +8342,7 @@
{ {
"term": "Pressure", "term": "Pressure",
"context": "Pressure", "context": "Pressure",
"reference": "dms-plugins/DankDesktopWeather/DankDesktopWeather.qml:449, Modules/DankDash/WeatherTab.qml:94, Modules/DankDash/WeatherForecastCard.qml:90, Modules/Settings/TimeWeatherTab.qml:980", "reference": "dms-plugins/DankDesktopWeather/DankDesktopWeather.qml:453, Modules/DankDash/WeatherTab.qml:94, Modules/DankDash/WeatherForecastCard.qml:90, Modules/Settings/TimeWeatherTab.qml:980",
"comment": "" "comment": ""
}, },
{ {
@@ -8774,7 +8780,7 @@
{ {
"term": "Reset", "term": "Reset",
"context": "Reset", "context": "Reset",
"reference": "Modals/DankLauncherV2/LauncherContent.qml:815, Modules/Settings/WidgetsTab.qml:835, Modules/ControlCenter/Components/EditControls.qml:232", "reference": "Modals/DankLauncherV2/LauncherContent.qml:815, Modules/Settings/WidgetsTab.qml:836, Modules/ControlCenter/Components/EditControls.qml:232",
"comment": "" "comment": ""
}, },
{ {
@@ -8870,7 +8876,7 @@
{ {
"term": "Right Section", "term": "Right Section",
"context": "Right Section", "context": "Right Section",
"reference": "Modules/Settings/WidgetsTab.qml:1005", "reference": "Modules/Settings/WidgetsTab.qml:1006",
"comment": "" "comment": ""
}, },
{ {
@@ -9290,7 +9296,7 @@
{ {
"term": "Select", "term": "Select",
"context": "Select", "context": "Select",
"reference": "Modals/DankLauncherV2/Controller.qml:1174", "reference": "Modals/DankLauncherV2/Controller.qml:1177",
"comment": "" "comment": ""
}, },
{ {
@@ -10994,7 +11000,7 @@
{ {
"term": "Top Section", "term": "Top Section",
"context": "Top Section", "context": "Top Section",
"reference": "Modules/Settings/WidgetsTab.qml:889", "reference": "Modules/Settings/WidgetsTab.qml:890",
"comment": "" "comment": ""
}, },
{ {
@@ -11048,7 +11054,7 @@
{ {
"term": "Trigger: %1", "term": "Trigger: %1",
"context": "Trigger: %1", "context": "Trigger: %1",
"reference": "Modals/DankLauncherV2/Controller.qml:1040, Modules/Settings/LauncherTab.qml:742", "reference": "Modals/DankLauncherV2/Controller.qml:1043, Modules/Settings/LauncherTab.qml:742",
"comment": "" "comment": ""
}, },
{ {
@@ -11258,7 +11264,7 @@
{ {
"term": "Unpin from Dock", "term": "Unpin from Dock",
"context": "Unpin from Dock", "context": "Unpin from Dock",
"reference": "Modals/DankLauncherV2/LauncherContextMenu.qml:103, Modules/Dock/DockContextMenu.qml:397, Modules/DankBar/Widgets/AppsDockContextMenu.qml:341", "reference": "Modals/DankLauncherV2/LauncherContextMenu.qml:103, Modules/Dock/DockContextMenu.qml:409, Modules/DankBar/Widgets/AppsDockContextMenu.qml:341",
"comment": "" "comment": ""
}, },
{ {
@@ -12455,6 +12461,12 @@
"reference": "Modules/Settings/TimeWeatherTab.qml:326", "reference": "Modules/Settings/TimeWeatherTab.qml:326",
"comment": "" "comment": ""
}, },
{
"term": "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text",
"context": "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text",
"reference": "Modules/Notifications/Center/NotificationKeyboardHints.qml:26",
"comment": ""
},
{ {
"term": "↑/↓: Navigate • Enter: Paste • Del: Delete • F10: Help", "term": "↑/↓: Navigate • Enter: Paste • Del: Delete • F10: Help",
"context": "Keyboard hints when enter-to-paste is enabled", "context": "Keyboard hints when enter-to-paste is enabled",
@@ -769,6 +769,9 @@
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "Indicador de Bloq Mayús" "Caps Lock Indicator": "Indicador de Bloq Mayús"
}, },
"Caps Lock is on": {
"Caps Lock is on": ""
},
"Center Section": { "Center Section": {
"Center Section": "Sección central" "Center Section": "Sección central"
}, },
@@ -6429,5 +6432,8 @@
}, },
"• yyyy - Year (2024)": { "• yyyy - Year (2024)": {
"• yyyy - Year (2024)": "yyyy - Año (2024)" "• yyyy - Year (2024)": "yyyy - Año (2024)"
},
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
+160 -154
View File
@@ -105,10 +105,10 @@
"2 minutes": "۲ دقیقه" "2 minutes": "۲ دقیقه"
}, },
"2 seconds": { "2 seconds": {
"2 seconds": "" "2 seconds": "۲ ثانیه"
}, },
"20 minutes": { "20 minutes": {
"20 minutes": "" "20 minutes": "۲۰ دقیقه"
}, },
"24-Hour Format": { "24-Hour Format": {
"24-Hour Format": "قالب ۲۴ ساعته" "24-Hour Format": "قالب ۲۴ ساعته"
@@ -117,7 +117,7 @@
"24-hour format": "قالب ۲۴ ساعته" "24-hour format": "قالب ۲۴ ساعته"
}, },
"250 ms": { "250 ms": {
"250 ms": "" "250 ms": "۲۵۰ ms"
}, },
"270°": { "270°": {
"270°": "۲۷۰°" "270°": "۲۷۰°"
@@ -126,7 +126,7 @@
"3 days": "۳ روز" "3 days": "۳ روز"
}, },
"3 minutes": { "3 minutes": {
"3 minutes": "" "3 minutes": "۳ دقیقه"
}, },
"3 seconds": { "3 seconds": {
"3 seconds": "۳ ثانیه" "3 seconds": "۳ ثانیه"
@@ -141,7 +141,7 @@
"3rd party": "شخص ثالث" "3rd party": "شخص ثالث"
}, },
"4 seconds": { "4 seconds": {
"4 seconds": "" "4 seconds": "۴ ثانیه"
}, },
"5 minutes": { "5 minutes": {
"5 minutes": "‍۵ دقیقه" "5 minutes": "‍۵ دقیقه"
@@ -150,13 +150,13 @@
"5 seconds": "۵ ثانیه" "5 seconds": "۵ ثانیه"
}, },
"500 ms": { "500 ms": {
"500 ms": "" "500 ms": "۵۰۰ ms"
}, },
"7 days": { "7 days": {
"7 days": "۷ روز" "7 days": "۷ روز"
}, },
"750 ms": { "750 ms": {
"750 ms": "" "750 ms": "۷۵۰ ms"
}, },
"8 seconds": { "8 seconds": {
"8 seconds": "۸ ثانیه" "8 seconds": "۸ ثانیه"
@@ -171,7 +171,7 @@
"A file with this name already exists. Do you want to overwrite it?": "فایلی با این نام از قبل وجود دارد. آیا می‌خواهید آن را بازنویسی کنید؟" "A file with this name already exists. Do you want to overwrite it?": "فایلی با این نام از قبل وجود دارد. آیا می‌خواهید آن را بازنویسی کنید؟"
}, },
"AC Power": { "AC Power": {
"AC Power": "" "AC Power": "برق AC"
}, },
"API": { "API": {
"API": "API" "API": "API"
@@ -381,7 +381,7 @@
"Apps with custom display name, icon, or launch options. Right-click an app and select 'Edit App' to customize.": "برنامه‌ها با نام نمایشی، آیکون و گزینه‌های اجرای سفارشی. روی یک برنامه راست‌کلیک کرده و «ویرایش برنامه» را برای سفارشی‌سازی انتخاب کنید." "Apps with custom display name, icon, or launch options. Right-click an app and select 'Edit App' to customize.": "برنامه‌ها با نام نمایشی، آیکون و گزینه‌های اجرای سفارشی. روی یک برنامه راست‌کلیک کرده و «ویرایش برنامه» را برای سفارشی‌سازی انتخاب کنید."
}, },
"Apps with notification popups muted. Unmute or delete to remove.": { "Apps with notification popups muted. Unmute or delete to remove.": {
"Apps with notification popups muted. Unmute or delete to remove.": "" "Apps with notification popups muted. Unmute or delete to remove.": "برنامه‌هایی که پاپ‌آپ اعلان آن‌ها بی‌صدا شده است. برای حذف، بی‌صدا را بردارید یا برنامه را حذف کنید."
}, },
"Arrange displays and configure resolution, refresh rate, and VRR": { "Arrange displays and configure resolution, refresh rate, and VRR": {
"Arrange displays and configure resolution, refresh rate, and VRR": "چیدمان نمایشگرها و پیکربندی وضوح، نرخ تازه‌سازی و VRR" "Arrange displays and configure resolution, refresh rate, and VRR": "چیدمان نمایشگرها و پیکربندی وضوح، نرخ تازه‌سازی و VRR"
@@ -524,7 +524,7 @@
"Automatically cycle through wallpapers in the same folder": "تصاویر پس‌زمینه را در همان پوشه به صورت خودکار تغییر بده" "Automatically cycle through wallpapers in the same folder": "تصاویر پس‌زمینه را در همان پوشه به صورت خودکار تغییر بده"
}, },
"Automatically delete entries older than this": { "Automatically delete entries older than this": {
"Automatically delete entries older than this": "ورودی‌های قدیمی‌تر از این را به صورت خودکار پاک کن" "Automatically delete entries older than this": "مدخل‌های قدیمی‌تر از این را به صورت خودکار پاک کن"
}, },
"Automatically detect location based on IP address": { "Automatically detect location based on IP address": {
"Automatically detect location based on IP address": "تشخیص خودکار موقعیت مکانی بر اساس آدرس IP" "Automatically detect location based on IP address": "تشخیص خودکار موقعیت مکانی بر اساس آدرس IP"
@@ -587,7 +587,7 @@
"Bar Transparency": "شفافیت نوار" "Bar Transparency": "شفافیت نوار"
}, },
"Base duration for animations (drag to use Custom)": { "Base duration for animations (drag to use Custom)": {
"Base duration for animations (drag to use Custom)": "" "Base duration for animations (drag to use Custom)": "مدت زمان پایه برای انیمیشن‌ها (برای استفاده سفارشی بکشید)"
}, },
"Battery": { "Battery": {
"Battery": "باتری" "Battery": "باتری"
@@ -617,10 +617,10 @@
"Bit Depth": "عمق بیت" "Bit Depth": "عمق بیت"
}, },
"Block Out": { "Block Out": {
"Block Out": "" "Block Out": "مسدود کردن خروج"
}, },
"Block Out From": { "Block Out From": {
"Block Out From": "" "Block Out From": "مسدود کردن خروج از"
}, },
"Block notifications": { "Block notifications": {
"Block notifications": "مسدود‌کردن اعلان‌ها" "Block notifications": "مسدود‌کردن اعلان‌ها"
@@ -665,7 +665,7 @@
"Border Thickness": "ضخامت حاشیه" "Border Thickness": "ضخامت حاشیه"
}, },
"Border with BG": { "Border with BG": {
"Border with BG": "" "Border with BG": "حاشیه با پس‌زمینه"
}, },
"Bottom": { "Bottom": {
"Bottom": "پایین" "Bottom": "پایین"
@@ -737,7 +737,7 @@
"CUPS not available": "CUPS در دسترس نیست" "CUPS not available": "CUPS در دسترس نیست"
}, },
"Calc": { "Calc": {
"Calc": "" "Calc": "ماشین حساب"
}, },
"Calculator": { "Calculator": {
"Calculator": "ماشین حساب" "Calculator": "ماشین حساب"
@@ -769,6 +769,9 @@
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "نشانگر Caps Lock" "Caps Lock Indicator": "نشانگر Caps Lock"
}, },
"Caps Lock is on": {
"Caps Lock is on": ""
},
"Center Section": { "Center Section": {
"Center Section": "بخش مرکزی" "Center Section": "بخش مرکزی"
}, },
@@ -836,7 +839,7 @@
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": "انتخاب کنید که کدام مانیتور رابط صفحه قفل را نشان دهد. مانیتورهای دیگر برای محافظت در برابر سوختگی OLED، رنگ ثابتی را نمایش می‌دهند." "Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": "انتخاب کنید که کدام مانیتور رابط صفحه قفل را نشان دهد. مانیتورهای دیگر برای محافظت در برابر سوختگی OLED، رنگ ثابتی را نمایش می‌دهند."
}, },
"Chroma Style": { "Chroma Style": {
"Chroma Style": "" "Chroma Style": "استایل رنگی"
}, },
"Cipher": { "Cipher": {
"Cipher": "رمزگذار" "Cipher": "رمزگذار"
@@ -860,7 +863,7 @@
"Clear History?": "تاریخچه پاک شود؟" "Clear History?": "تاریخچه پاک شود؟"
}, },
"Clear Sky": { "Clear Sky": {
"Clear Sky": "" "Clear Sky": "آسمان پاک"
}, },
"Clear all history when server starts": { "Clear all history when server starts": {
"Clear all history when server starts": "هنگام راه‌اندازی سرور تمام تاریخچه را پاک کن" "Clear all history when server starts": "هنگام راه‌اندازی سرور تمام تاریخچه را پاک کن"
@@ -917,7 +920,7 @@
"Clipboard Manager": "مدیریت کلیپ‌بورد" "Clipboard Manager": "مدیریت کلیپ‌بورد"
}, },
"Clipboard behavior setting description": { "Clipboard behavior setting description": {
"Press Enter to paste, Shift+Enter to copy": "" "Press Enter to paste, Shift+Enter to copy": "برای الصاق Enter، برای کپی Shift+Enter را فشار دهید"
}, },
"Clipboard service not available": { "Clipboard service not available": {
"Clipboard service not available": "سرویس کلیپ‌بورد در دسترس نیست" "Clipboard service not available": "سرویس کلیپ‌بورد در دسترس نیست"
@@ -977,16 +980,16 @@
"Color temperature for night mode": "دمای رنگ برای حالت شب" "Color temperature for night mode": "دمای رنگ برای حالت شب"
}, },
"Color theme for syntax highlighting.": { "Color theme for syntax highlighting.": {
"Color theme for syntax highlighting.": "" "Color theme for syntax highlighting.": "تم رنگی برای برجسته‌سازی کد."
}, },
"Color theme for syntax highlighting. %1 themes available.": { "Color theme for syntax highlighting. %1 themes available.": {
"Color theme for syntax highlighting. %1 themes available.": "" "Color theme for syntax highlighting. %1 themes available.": "تم رنگی برای برجسته‌سازی کد. %1 تم دردسترس است."
}, },
"Colorful mix of bright contrasting accents.": { "Colorful mix of bright contrasting accents.": {
"Colorful mix of bright contrasting accents.": "ترکیب رنگارنگ از رنگ‌های تأکیدی متضاد." "Colorful mix of bright contrasting accents.": "ترکیب رنگارنگ از رنگ‌های تأکیدی متضاد."
}, },
"Colorize Active": { "Colorize Active": {
"Colorize Active": "" "Colorize Active": "رنگ‌آمیزی حالت فعال"
}, },
"Column": { "Column": {
"Column": "ستون" "Column": "ستون"
@@ -1049,7 +1052,7 @@
"Configure icons for named workspaces. Icons take priority over numbers when both are enabled.": "آیکون‌ها را برای محیط‌کارهای نام‌دار تنظیم کنید. آیکون‌ها بر شماره‌ها هنگامی که هر دو فعال باشند اولویت دارند." "Configure icons for named workspaces. Icons take priority over numbers when both are enabled.": "آیکون‌ها را برای محیط‌کارهای نام‌دار تنظیم کنید. آیکون‌ها بر شماره‌ها هنگامی که هر دو فعال باشند اولویت دارند."
}, },
"Configure match criteria and actions": { "Configure match criteria and actions": {
"Configure match criteria and actions": "پیکربندی معیارهای انطباق و اقدامات" "Configure match criteria and actions": "پیکربندی انطباق معیار و اقدامات"
}, },
"Configure which displays show \"%1": { "Configure which displays show \"%1": {
"Configure which displays show \"%1\"": "تنظیم کنید که کدام نمایشگر‌ها «%1» را نشان دهند" "Configure which displays show \"%1\"": "تنظیم کنید که کدام نمایشگر‌ها «%1» را نشان دهند"
@@ -1109,7 +1112,7 @@
"Control Center Tile Color": "رنگ کاشی مرکز کنترل" "Control Center Tile Color": "رنگ کاشی مرکز کنترل"
}, },
"Control animation duration for notification popups and history": { "Control animation duration for notification popups and history": {
"Control animation duration for notification popups and history": "" "Control animation duration for notification popups and history": "مدت زمان انیمیشن را برای پاپ‌آپ اعلان‌ها و تاریخچه مشخص کنید"
}, },
"Control currently playing media": { "Control currently playing media": {
"Control currently playing media": "کنترل رسانه درحال پخش" "Control currently playing media": "کنترل رسانه درحال پخش"
@@ -1202,7 +1205,7 @@
"Create rules to mute, ignore, hide from history, or override notification priority.": "برای بی‌صدا کردن، نادیده گرفتن، پنهان‌سازی از تاریخچه و یا تغییر اولویت اعلان قاعده ایجاد کنید." "Create rules to mute, ignore, hide from history, or override notification priority.": "برای بی‌صدا کردن، نادیده گرفتن، پنهان‌سازی از تاریخچه و یا تغییر اولویت اعلان قاعده ایجاد کنید."
}, },
"Create rules to mute, ignore, hide from history, or override notification priority. Default only overrides priority; notifications still show normally.": { "Create rules to mute, ignore, hide from history, or override notification priority. Default only overrides priority; notifications still show normally.": {
"Create rules to mute, ignore, hide from history, or override notification priority. Default only overrides priority; notifications still show normally.": "" "Create rules to mute, ignore, hide from history, or override notification priority. Default only overrides priority; notifications still show normally.": "برای بی‌صدا کردن، نادیده گرفتن، مخفی‌سازی از تاریخچه، یا تغییر اولویت اعلان‌ها قواعدی ایجاد کنید. در حالت پیش‌فرض، تنها اولویت تغییر می‌کند؛ اعلان‌ها همچنان به‌صورت عادی نمایش داده می‌شوند."
}, },
"Creating...": { "Creating...": {
"Creating...": "درحال ایجاد..." "Creating...": "درحال ایجاد..."
@@ -1238,7 +1241,7 @@
"Cursor Config Not Configured": "پیکربندی اشاره‌گر موس تنظیم نشده" "Cursor Config Not Configured": "پیکربندی اشاره‌گر موس تنظیم نشده"
}, },
"Cursor Include Missing": { "Cursor Include Missing": {
"Cursor Include Missing": "" "Cursor Include Missing": "دستور include اشاره‌گر موس یافت نشد"
}, },
"Cursor Size": { "Cursor Size": {
"Cursor Size": "اندازه اشاره‌گر موس" "Cursor Size": "اندازه اشاره‌گر موس"
@@ -1319,7 +1322,7 @@
"DWL service not available": "سرویس DWL در دسترس نیست" "DWL service not available": "سرویس DWL در دسترس نیست"
}, },
"Daily": { "Daily": {
"Daily": "" "Daily": "روزانه"
}, },
"Daily Forecast": { "Daily Forecast": {
"Daily Forecast": "پیش‌بینی روزانه" "Daily Forecast": "پیش‌بینی روزانه"
@@ -1415,7 +1418,7 @@
"Description": "توضیحات" "Description": "توضیحات"
}, },
"Desktop": { "Desktop": {
"Desktop": "" "Desktop": "دسکتاپ"
}, },
"Desktop Clock": { "Desktop Clock": {
"Desktop Clock": "ساعت دسکتاپ" "Desktop Clock": "ساعت دسکتاپ"
@@ -1589,7 +1592,7 @@
"Docs": "مستندات" "Docs": "مستندات"
}, },
"Documents": { "Documents": {
"Documents": "" "Documents": "اسناد"
}, },
"Domain (optional)": { "Domain (optional)": {
"Domain (optional)": "دامنه (اختیاری)" "Domain (optional)": "دامنه (اختیاری)"
@@ -1604,7 +1607,7 @@
"Door Open": "درب باز" "Door Open": "درب باز"
}, },
"Downloads": { "Downloads": {
"Downloads": "" "Downloads": "بارگیری‌ها"
}, },
"Drag to Reorder": { "Drag to Reorder": {
"Drag to Reorder": "نگه‌داشتن برای بازآرایی" "Drag to Reorder": "نگه‌داشتن برای بازآرایی"
@@ -1619,7 +1622,7 @@
"Driver": "درایور" "Driver": "درایور"
}, },
"Drizzle": { "Drizzle": {
"Drizzle": "" "Drizzle": "باران‌ریزه"
}, },
"Duplicate": { "Duplicate": {
"Duplicate": "تکثیر" "Duplicate": "تکثیر"
@@ -1628,7 +1631,7 @@
"Duplicate Wallpaper with Blur": "تصویر پس‌زمینه تکراری با تاری" "Duplicate Wallpaper with Blur": "تصویر پس‌زمینه تکراری با تاری"
}, },
"Duration": { "Duration": {
"Duration": "" "Duration": "مدت زمان"
}, },
"Dusk (Astronomical Twilight)": { "Dusk (Astronomical Twilight)": {
"Dusk (Astronomical Twilight)": "غروب (گرگ و میش نجومی)" "Dusk (Astronomical Twilight)": "غروب (گرگ و میش نجومی)"
@@ -1781,16 +1784,16 @@
"Enter this passkey on ": "ورود این کلید عبور در " "Enter this passkey on ": "ورود این کلید عبور در "
}, },
"Enter to Paste": { "Enter to Paste": {
"Enter to Paste": "" "Enter to Paste": "Enter برای الصاق"
}, },
"Enterprise": { "Enterprise": {
"Enterprise": "شرکت" "Enterprise": "شرکت"
}, },
"Entry pinned": { "Entry pinned": {
"Entry pinned": "ورودی سنجاق شد" "Entry pinned": "مدخل سنجاق شد"
}, },
"Entry unpinned": { "Entry unpinned": {
"Entry unpinned": "سنجاق ورودی برداشته شد" "Entry unpinned": "سنجاق مدخل برداشته شد"
}, },
"Environment Variables": { "Environment Variables": {
"Environment Variables": "متغیر‌های محیطی" "Environment Variables": "متغیر‌های محیطی"
@@ -1811,7 +1814,7 @@
"Exponential": "نمایی" "Exponential": "نمایی"
}, },
"Extra Arguments": { "Extra Arguments": {
"Extra Arguments": "" "Extra Arguments": "آرگومان‌های اضافی"
}, },
"F1/I: Toggle • F10: Help": { "F1/I: Toggle • F10: Help": {
"F1/I: Toggle • F10: Help": "F1/I: تغییر حالت • F10: راهنما" "F1/I: Toggle • F10: Help": "F1/I: تغییر حالت • F10: راهنما"
@@ -1853,7 +1856,7 @@
"Failed to connect to %1": "اتصال به %1 ناموفق بود" "Failed to connect to %1": "اتصال به %1 ناموفق بود"
}, },
"Failed to copy entry": { "Failed to copy entry": {
"Failed to copy entry": "کپی ورودی ناموفق بود" "Failed to copy entry": "کپی مدخل ناموفق بود"
}, },
"Failed to create printer": { "Failed to create printer": {
"Failed to create printer": "ایجاد چاپگر ناموفق بود" "Failed to create printer": "ایجاد چاپگر ناموفق بود"
@@ -1925,7 +1928,7 @@
"Failed to pause printer": "توقف چاپگر ناموفق بود" "Failed to pause printer": "توقف چاپگر ناموفق بود"
}, },
"Failed to pin entry": { "Failed to pin entry": {
"Failed to pin entry": "سنجاق کردن ورودی ناموفق بود" "Failed to pin entry": "سنجاق کردن مدخل ناموفق بود"
}, },
"Failed to print test page": { "Failed to print test page": {
"Failed to print test page": "چاپ صفحه تست ناموفق بود" "Failed to print test page": "چاپ صفحه تست ناموفق بود"
@@ -1982,7 +1985,7 @@
"Failed to start connection to %1": "شروع اتصال به %1 ناموفق بود" "Failed to start connection to %1": "شروع اتصال به %1 ناموفق بود"
}, },
"Failed to unpin entry": { "Failed to unpin entry": {
"Failed to unpin entry": "برداشتن سنجاق ورودی ناموفق بود" "Failed to unpin entry": "برداشتن سنجاق مدخل ناموفق بود"
}, },
"Failed to update VPN": { "Failed to update VPN": {
"Failed to update VPN": "بروزرسانی VPN ناموفق بود" "Failed to update VPN": "بروزرسانی VPN ناموفق بود"
@@ -2084,7 +2087,7 @@
"Focused Window": "پنجره فوکوس‌شده" "Focused Window": "پنجره فوکوس‌شده"
}, },
"Fog": { "Fog": {
"Fog": "" "Fog": "مه"
}, },
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "فوکوس مانیتور را دنبال کن" "Follow Monitor Focus": "فوکوس مانیتور را دنبال کن"
@@ -2144,13 +2147,13 @@
"Forgot network %1": "فراموشی شبکه %1" "Forgot network %1": "فراموشی شبکه %1"
}, },
"Format Legend": { "Format Legend": {
"Format Legend": "قالب فهرست علائم" "Format Legend": "راهنمای قالب‌بندی"
}, },
"Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": { "Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": {
"Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": "" "Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": "هنگامی که لانچر بسته شد VRAM/حافظه را آزاد کن. ممکن است باعث اندکی تأخیر هنگام باز کردن مجدد شود."
}, },
"Freezing Drizzle": { "Freezing Drizzle": {
"Freezing Drizzle": "" "Freezing Drizzle": "باران‌ریزه یخ‌زن"
}, },
"Frequency": { "Frequency": {
"Frequency": "فرکانس" "Frequency": "فرکانس"
@@ -2258,13 +2261,13 @@
"Health": "سلامت" "Health": "سلامت"
}, },
"Heavy Rain": { "Heavy Rain": {
"Heavy Rain": "" "Heavy Rain": "باران سنگین"
}, },
"Heavy Snow": { "Heavy Snow": {
"Heavy Snow": "" "Heavy Snow": "برف سنگین"
}, },
"Heavy Snow Showers": { "Heavy Snow Showers": {
"Heavy Snow Showers": "" "Heavy Snow Showers": "برف سنگین پراکنده"
}, },
"Height": { "Height": {
"Height": "ارتفاع" "Height": "ارتفاع"
@@ -2285,7 +2288,7 @@
"Hidden": "پنهان" "Hidden": "پنهان"
}, },
"Hidden (%1)": { "Hidden (%1)": {
"Hidden (%1)": "" "Hidden (%1)": "پنهان (%1)"
}, },
"Hidden Apps": { "Hidden Apps": {
"Hidden Apps": "برنامه‌های پنهان" "Hidden Apps": "برنامه‌های پنهان"
@@ -2327,13 +2330,13 @@
"Hide cursor when using touch input": "اشاره‌گر موس را هنگام استفاده از ورودی لمسی پنهان کن" "Hide cursor when using touch input": "اشاره‌گر موس را هنگام استفاده از ورودی لمسی پنهان کن"
}, },
"Hide device": { "Hide device": {
"Hide device": "" "Hide device": "پنهان کردن دستگاه"
}, },
"Hide notification content until expanded": { "Hide notification content until expanded": {
"Hide notification content until expanded": "" "Hide notification content until expanded": "پنهان کردن محتوای اعلان را تا هنگام گسترش"
}, },
"Hide notification content until expanded; popups show collapsed by default": { "Hide notification content until expanded; popups show collapsed by default": {
"Hide notification content until expanded; popups show collapsed by default": "" "Hide notification content until expanded; popups show collapsed by default": "محتوای اعلان را تا هنگام گسترش پنهان کن؛ پاپ‌آپ‌ها به طور پیش‌فرض گسترش‌یافته نمایش داده می‌شوند"
}, },
"Hide on Touch": { "Hide on Touch": {
"Hide on Touch": "هنگام لمس پنهان کن" "Hide on Touch": "هنگام لمس پنهان کن"
@@ -2348,7 +2351,7 @@
"History Settings": "تنظیمات تاریخچه" "History Settings": "تنظیمات تاریخچه"
}, },
"History cleared. %1 pinned entries kept.": { "History cleared. %1 pinned entries kept.": {
"History cleared. %1 pinned entries kept.": "تاریخچه پاک شد. %1 ورودی سنجاق شده نگه داشته شد." "History cleared. %1 pinned entries kept.": "تاریخچه پاک شد. %1 مدخل سنجاق شده نگه داشته شد."
}, },
"Hold Duration": { "Hold Duration": {
"Hold Duration": "مدت زمان نگه‌داشتن" "Hold Duration": "مدت زمان نگه‌داشتن"
@@ -2366,7 +2369,7 @@
"Hold to confirm (%1s)": "برای تأیید نگه‌دارید (%1s)" "Hold to confirm (%1s)": "برای تأیید نگه‌دارید (%1s)"
}, },
"Home": { "Home": {
"Home": "" "Home": "خانه"
}, },
"Hot Corners": { "Hot Corners": {
"Hot Corners": "گوشه‌های فعال" "Hot Corners": "گوشه‌های فعال"
@@ -2728,13 +2731,13 @@
"Key": "کلید" "Key": "کلید"
}, },
"Keybind Sources": { "Keybind Sources": {
"Keybind Sources": "" "Keybind Sources": "منابع نگاشت‌کلیدها"
}, },
"Keybinds Search Settings": { "Keybinds Search Settings": {
"Keybinds Search Settings": "تنظیمات نگاشت‌کلیدهای جستجو" "Keybinds Search Settings": "تنظیمات نگاشت‌کلیدهای جستجو"
}, },
"Keybinds shown alongside regular search results": { "Keybinds shown alongside regular search results": {
"Keybinds shown alongside regular search results": "" "Keybinds shown alongside regular search results": "نگاشت‌کلیدها همراه نتایج عادی جستجو نمایش داده می‌شوند"
}, },
"Keyboard Layout Name": { "Keyboard Layout Name": {
"Keyboard Layout Name": "نام چیدمان صفحه‌کلید" "Keyboard Layout Name": "نام چیدمان صفحه‌کلید"
@@ -2743,8 +2746,8 @@
"Keyboard Shortcuts": "میانبر‌های صفحه‌کلید" "Keyboard Shortcuts": "میانبر‌های صفحه‌کلید"
}, },
"Keyboard hints when enter-to-paste is enabled": { "Keyboard hints when enter-to-paste is enabled": {
"Shift+Enter: Copy • Shift+Del: Clear All • Esc: Close": "", "Shift+Enter: Copy • Shift+Del: Clear All • Esc: Close": "Shift+Enter: کپی • Shift+Del: پاک‌کردن همه • Esc: بستن",
"↑/↓: Navigate • Enter: Paste • Del: Delete • F10: Help": "" "↑/↓: Navigate • Enter: Paste • Del: Delete • F10: Help": "↑/↓: پیمایش • Enter: الصاق • Del: حذف • F10: راهنما"
}, },
"Keys": { "Keys": {
"Keys": "کلیدها" "Keys": "کلیدها"
@@ -2816,13 +2819,13 @@
"Light Mode": "حالت روشن" "Light Mode": "حالت روشن"
}, },
"Light Rain": { "Light Rain": {
"Light Rain": "" "Light Rain": "باران سبک"
}, },
"Light Snow": { "Light Snow": {
"Light Snow": "" "Light Snow": "برف سبک"
}, },
"Light Snow Showers": { "Light Snow Showers": {
"Light Snow Showers": "" "Light Snow Showers": "برف پراکنده"
}, },
"Linear": { "Linear": {
"Linear": "خطی" "Linear": "خطی"
@@ -2960,10 +2963,10 @@
"Marker Waste Full": "ضایعات مارکر پر است" "Marker Waste Full": "ضایعات مارکر پر است"
}, },
"Match Criteria": { "Match Criteria": {
"Match Criteria": "" "Match Criteria": "انطباق معیار"
}, },
"Matches profile: %1": { "Matches profile: %1": {
"Matches profile: %1": "" "Matches profile: %1": "منطبق با پروفایل: %1"
}, },
"Material Colors": { "Material Colors": {
"Material Colors": "رنگ‌های Material" "Material Colors": "رنگ‌های Material"
@@ -3005,31 +3008,31 @@
"Max to Edges": "بیشینه تا لبه‌ها" "Max to Edges": "بیشینه تا لبه‌ها"
}, },
"Maximize": { "Maximize": {
"Maximize": "" "Maximize": "بزرگ‌کردن پنجره"
}, },
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "تشخیص بزرگ‌شدن پنجره" "Maximize Detection": "تشخیص بزرگ‌شدن پنجره"
}, },
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "حداکثر اندازه ورودی" "Maximum Entry Size": "حداکثر اندازه مدخل"
}, },
"Maximum History": { "Maximum History": {
"Maximum History": "حداکثر تاریخچه" "Maximum History": "حداکثر تاریخچه"
}, },
"Maximum Pinned Entries": { "Maximum Pinned Entries": {
"Maximum Pinned Entries": "بیشینه ورودی‌های سنجاق شده" "Maximum Pinned Entries": "بیشینه مدخل‌های سنجاق شده"
}, },
"Maximum number of clipboard entries to keep": { "Maximum number of clipboard entries to keep": {
"Maximum number of clipboard entries to keep": "بیشینه تعداد ورودی‌های کلیپ‌بورد برای نگه‌داری" "Maximum number of clipboard entries to keep": "بیشینه تعداد مدخل‌های کلیپ‌بورد برای نگه‌داری"
}, },
"Maximum number of entries that can be saved": { "Maximum number of entries that can be saved": {
"Maximum number of entries that can be saved": "بیشینه تعداد ورودی‌هایی که می‌توانند ذخیره شوند" "Maximum number of entries that can be saved": "بیشینه تعداد مدخل‌هایی که می‌توانند ذخیره شوند"
}, },
"Maximum pinned entries reached": { "Maximum pinned entries reached": {
"Maximum pinned entries reached": "به بیشینه ورودی‌های سنجاق شده رسیدید" "Maximum pinned entries reached": "به بیشینه مدخل‌های سنجاق شده رسیدید"
}, },
"Maximum size per clipboard entry": { "Maximum size per clipboard entry": {
"Maximum size per clipboard entry": "بیشینه اندازه برای هر ورودی کلیپ‌بورد" "Maximum size per clipboard entry": "بیشینه اندازه برای هر مدخل کلیپ‌بورد"
}, },
"Media": { "Media": {
"Media": "رسانه" "Media": "رسانه"
@@ -3050,7 +3053,7 @@
"Media Needed": "مدیا مورد نیاز است" "Media Needed": "مدیا مورد نیاز است"
}, },
"Media Playback": { "Media Playback": {
"Media Playback": "" "Media Playback": "پخش رسانه"
}, },
"Media Player": { "Media Player": {
"Media Player": "پخش‌کننده رسانه" "Media Player": "پخش‌کننده رسانه"
@@ -3170,13 +3173,13 @@
"Moving to Paused": "انتقال به حالت متوقف شده" "Moving to Paused": "انتقال به حالت متوقف شده"
}, },
"Music": { "Music": {
"Music": "" "Music": "موسیقی"
}, },
"Mute popups for %1": { "Mute popups for %1": {
"Mute popups for %1": "" "Mute popups for %1": "بی‌صدا کردن پاپ‌آپ‌ها را برای %1"
}, },
"Muted Apps": { "Muted Apps": {
"Muted Apps": "" "Muted Apps": "برنامه‌های بی‌صدا"
}, },
"Muted palette with subdued, calming tones.": { "Muted palette with subdued, calming tones.": {
"Muted palette with subdued, calming tones.": "پالت رنگی ساکت با تن‌های ملایم و آرامش‌بخش." "Muted palette with subdued, calming tones.": "پالت رنگی ساکت با تن‌های ملایم و آرامش‌بخش."
@@ -3329,7 +3332,7 @@
"No apps have been launched yet.": "هیچ برنامه‌ای هنوز اجرا نشده است." "No apps have been launched yet.": "هیچ برنامه‌ای هنوز اجرا نشده است."
}, },
"No apps muted. Right-click a notification and choose \"Mute popups\" to add one here.": { "No apps muted. Right-click a notification and choose \"Mute popups\" to add one here.": {
"No apps muted. Right-click a notification and choose \"Mute popups\" to add one here.": "" "No apps muted. Right-click a notification and choose \"Mute popups\" to add one here.": "هیچ برنامه‌ای بی‌صدا نشده است. برای افزودن یکی به اینجا روی اعلان راست‌کلیک کرده و «بی‌صدا کردن پاپ‌آپ‌ها» را انتخاب کنید."
}, },
"No battery": { "No battery": {
"No battery": "بدون باتری" "No battery": "بدون باتری"
@@ -3341,7 +3344,7 @@
"No changes": "بدون تغییرات" "No changes": "بدون تغییرات"
}, },
"No clipboard entries found": { "No clipboard entries found": {
"No clipboard entries found": "هیچ ورودی کلیپ‌بوردی پیدا نشد" "No clipboard entries found": "هیچ مدخل کلیپ‌بوردی پیدا نشد"
}, },
"No devices found": { "No devices found": {
"No devices found": "دستگاهی یافت نشد" "No devices found": "دستگاهی یافت نشد"
@@ -3374,7 +3377,7 @@
"No launcher plugins installed.": "هیچ افزونه‌ لانچری نصب نشده است." "No launcher plugins installed.": "هیچ افزونه‌ لانچری نصب نشده است."
}, },
"No match criteria": { "No match criteria": {
"No match criteria": "" "No match criteria": "هیچ انطباق معیاری یافت نشد"
}, },
"No matches": { "No matches": {
"No matches": "موردی پیدا نشد" "No matches": "موردی پیدا نشد"
@@ -3401,13 +3404,13 @@
"No profiles": "هیچ پروفایلی یافت نشد" "No profiles": "هیچ پروفایلی یافت نشد"
}, },
"No recent clipboard entries found": { "No recent clipboard entries found": {
"No recent clipboard entries found": "هیچ ورودی کلیپ‌بورد اخیری یافت نشد" "No recent clipboard entries found": "هیچ مدخل کلیپ‌بورد اخیری یافت نشد"
}, },
"No results found": { "No results found": {
"No results found": "هیچ نتیجه‌ای یافت نشد" "No results found": "هیچ نتیجه‌ای یافت نشد"
}, },
"No saved clipboard entries": { "No saved clipboard entries": {
"No saved clipboard entries": "هیچ ورودی کلیپ‌بوردی ذخیره نشده است" "No saved clipboard entries": "هیچ مدخل کلیپ‌بوردی ذخیره نشده است"
}, },
"No trigger": { "No trigger": {
"No trigger": "بدون راه‌انداز" "No trigger": "بدون راه‌انداز"
@@ -3536,7 +3539,7 @@
"Opacity": "شفافیت" "Opacity": "شفافیت"
}, },
"Opaque": { "Opaque": {
"Opaque": "" "Opaque": "کدر"
}, },
"Open": { "Open": {
"Open": "باز‌کردن" "Open": "باز‌کردن"
@@ -3590,7 +3593,7 @@
"Outputs Include Missing": "Include خروجی‌ها یافت نشد" "Outputs Include Missing": "Include خروجی‌ها یافت نشد"
}, },
"Overcast": { "Overcast": {
"Overcast": "" "Overcast": "کاملاْ ابری"
}, },
"Overflow": { "Overflow": {
"Overflow": "سرریزی" "Overflow": "سرریزی"
@@ -3629,7 +3632,7 @@
"PIN": "PIN" "PIN": "PIN"
}, },
"Pad Hours": { "Pad Hours": {
"Pad Hours": "" "Pad Hours": "حاشیه‌گذاری ساعات"
}, },
"Padding": { "Padding": {
"Padding": "فاصله درونی" "Padding": "فاصله درونی"
@@ -3650,7 +3653,7 @@
"Pairing...": "درحال جفت شدن..." "Pairing...": "درحال جفت شدن..."
}, },
"Partly Cloudy": { "Partly Cloudy": {
"Partly Cloudy": "" "Partly Cloudy": "نیمه ابری"
}, },
"Passkey:": { "Passkey:": {
"Passkey:": "کلید عبور:" "Passkey:": "کلید عبور:"
@@ -3714,7 +3717,7 @@
"Failed to send ping": "ارسال پینگ ناموفق بود", "Failed to send ping": "ارسال پینگ ناموفق بود",
"Failed to share": "اشتراک‌گذاری ناموفق بود", "Failed to share": "اشتراک‌گذاری ناموفق بود",
"Pairing failed": "جفت‌سازی ناموفق بود", "Pairing failed": "جفت‌سازی ناموفق بود",
"Unpair failed": "" "Unpair failed": "جدا‌سازی ناموفق بود"
}, },
"Phone Connect file send": { "Phone Connect file send": {
"Sending": "درحال ارسال" "Sending": "درحال ارسال"
@@ -3760,7 +3763,7 @@
"Unavailable": "دردسترس نیست" "Unavailable": "دردسترس نیست"
}, },
"Pictures": { "Pictures": {
"Pictures": "" "Pictures": "تصاویر"
}, },
"Pin": { "Pin": {
"Pin": "سنجاق" "Pin": "سنجاق"
@@ -3832,7 +3835,7 @@
"Popup Position": "مکان پاپ‌آپ" "Popup Position": "مکان پاپ‌آپ"
}, },
"Popup Shadow": { "Popup Shadow": {
"Popup Shadow": "" "Popup Shadow": "سایه پاپ‌آپ"
}, },
"Popup Transparency": { "Popup Transparency": {
"Popup Transparency": "شفافیت پاپ‌آپ" "Popup Transparency": "شفافیت پاپ‌آپ"
@@ -3943,7 +3946,7 @@
"Privacy Indicator": "نشانگر حریم خصوصی" "Privacy Indicator": "نشانگر حریم خصوصی"
}, },
"Privacy Mode": { "Privacy Mode": {
"Privacy Mode": "" "Privacy Mode": "حالت حریم خصوصی"
}, },
"Private Key Password": { "Private Key Password": {
"Private Key Password": "کلید خصوصی گذرواژه" "Private Key Password": "کلید خصوصی گذرواژه"
@@ -3988,7 +3991,7 @@
"Protocol": "پروتکل" "Protocol": "پروتکل"
}, },
"Quick Access": { "Quick Access": {
"Quick Access": "" "Quick Access": "دسترسی سریع"
}, },
"Quick access to application launcher": { "Quick access to application launcher": {
"Quick access to application launcher": "دسترسی سریع به لانچر برنامه" "Quick access to application launcher": "دسترسی سریع به لانچر برنامه"
@@ -4009,7 +4012,7 @@
"Radius": "شعاع" "Radius": "شعاع"
}, },
"Rain": { "Rain": {
"Rain": "" "Rain": "باران"
}, },
"Rain Chance": { "Rain Chance": {
"Rain Chance": "احتمال بارش" "Rain Chance": "احتمال بارش"
@@ -4279,10 +4282,10 @@
"Search Options": "گزینه‌های جستجو" "Search Options": "گزینه‌های جستجو"
}, },
"Search by key combo, description, or action name.\n\nDefault action copies the keybind to clipboard.\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": { "Search by key combo, description, or action name.\n\nDefault action copies the keybind to clipboard.\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\n\nDefault action copies the keybind to clipboard.\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": "" "Search by key combo, description, or action name.\n\nDefault action copies the keybind to clipboard.\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": "با ترکیب کلید‌ها، توضیحات یا نام اقدام‌ جستجو کنید.\n\nاقدام پیش‌فرض نگاشت‌کلید را در کلیپ‌بورد کپی می‌کند.\nبرای سنجاق‌ کردن نگاشت‌کلید‌های پر استفاده راست‌کلیک کنید یا پیکان راست را فشار دهید - آن‌ها هنگام جستجو نکردن در بالای لیست ظاهر خواهند شد."
}, },
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": { "Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": "با ترکیب کلید‌ها، توضیحات یا نام اقدام‌ جستجو کنید.\\n\\اقدام پیش‌فرض نگاشت‌کلید را در کلیپ‌بورد کپی می‌کند.\\nبرای سنجاق‌ کردن نگاشت‌کلید‌های پر استفاده راست‌کلیک کنید یا پیکان راست را فشار دهید - آن‌ها هنگام جستجو نکردن در بالا ظاهر خواهند شد." "Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": "با ترکیب کلید‌ها، توضیحات یا نام اقدام‌ جستجو کنید.\\n\\اقدام پیش‌فرض نگاشت‌کلید را در کلیپ‌بورد کپی می‌کند.\\nبرای سنجاق‌ کردن نگاشت‌کلید‌های پر استفاده راست‌کلیک کنید یا پیکان راست را فشار دهید - آن‌ها هنگام جستجو نکردن در بالای لیست ظاهر خواهند شد."
}, },
"Search file contents": { "Search file contents": {
"Search file contents": "جستجو در محتوای فایل" "Search file contents": "جستجو در محتوای فایل"
@@ -4330,7 +4333,7 @@
"Select Bar": "انتخاب نوار" "Select Bar": "انتخاب نوار"
}, },
"Select Dock Launcher Logo": { "Select Dock Launcher Logo": {
"Select Dock Launcher Logo": "" "Select Dock Launcher Logo": "لوگوی لانچر داک را انتخاب کنید"
}, },
"Select Launcher Logo": { "Select Launcher Logo": {
"Select Launcher Logo": "انتخاب لوگوی لانچر" "Select Launcher Logo": "انتخاب لوگوی لانچر"
@@ -4378,7 +4381,7 @@
"Select the palette algorithm used for wallpaper-based colors": "انتخاب الگوریتم پالت رنگی استفاده شده برای رنگ‌های بر اساس تصویر پس‌زمینه" "Select the palette algorithm used for wallpaper-based colors": "انتخاب الگوریتم پالت رنگی استفاده شده برای رنگ‌های بر اساس تصویر پس‌زمینه"
}, },
"Select which keybind providers to include": { "Select which keybind providers to include": {
"Select which keybind providers to include": "" "Select which keybind providers to include": "انتخاب کنید که کدام ارائه دهنده نگاشت‌کلید‌ها include شود"
}, },
"Select which transitions to include in randomization": { "Select which transitions to include in randomization": {
"Select which transitions to include in randomization": "انتخاب کنید کدام گذارها در تصادفی‌سازی باشند" "Select which transitions to include in randomization": "انتخاب کنید کدام گذارها در تصادفی‌سازی باشند"
@@ -4408,13 +4411,13 @@
"Set key and action to save": "کلید و اقدام را برای ذخیره تنظیم کنید" "Set key and action to save": "کلید و اقدام را برای ذخیره تنظیم کنید"
}, },
"Set notification rules": { "Set notification rules": {
"Set notification rules": "" "Set notification rules": "تنظیم قوانین اعلان‌ها"
}, },
"Setup": { "Setup": {
"Setup": "راه‌اندازی" "Setup": "راه‌اندازی"
}, },
"Share Gamma Control Settings": { "Share Gamma Control Settings": {
"Share Gamma Control Settings": "" "Share Gamma Control Settings": "اشتراک‌گذاری تنظیمات کنترل گاما"
}, },
"Shell": { "Shell": {
"Shell": "شِل" "Shell": "شِل"
@@ -4582,13 +4585,13 @@
"Show darkened overlay behind modal dialogs": "لایه overlay تیره پشت پنجره مودال نمایش بده" "Show darkened overlay behind modal dialogs": "لایه overlay تیره پشت پنجره مودال نمایش بده"
}, },
"Show device": { "Show device": {
"Show device": "" "Show device": "نمایش دستگاه"
}, },
"Show dock when floating windows don't overlap its area": { "Show dock when floating windows don't overlap its area": {
"Show dock when floating windows don't overlap its area": "داک را هنگامی که پنجره‌های شناور با محیط آن همپوشانی ندارند نمایش بده" "Show dock when floating windows don't overlap its area": "داک را هنگامی که پنجره‌های شناور با محیط آن همپوشانی ندارند نمایش بده"
}, },
"Show drop shadow on notification popups": { "Show drop shadow on notification popups": {
"Show drop shadow on notification popups": "" "Show drop shadow on notification popups": "سایه‌افتاده را برای پاپ‌آپ اعلان‌ها نمایش بده"
}, },
"Show launcher overlay when typing in Niri overview. Disable to use another launcher.": { "Show launcher overlay when typing in Niri overview. Disable to use another launcher.": {
"Show launcher overlay when typing in Niri overview. Disable to use another launcher.": "لایه overlay لانچر را هنگام تایپ در نمای کلی نیری نمایش بده. برای استفاده از لانچر دیگری غیرفعال کنید." "Show launcher overlay when typing in Niri overview. Disable to use another launcher.": "لایه overlay لانچر را هنگام تایپ در نمای کلی نیری نمایش بده. برای استفاده از لانچر دیگری غیرفعال کنید."
@@ -4687,7 +4690,7 @@
"Size": "اندازه" "Size": "اندازه"
}, },
"Size Constraints": { "Size Constraints": {
"Size Constraints": "" "Size Constraints": "محدودیت‌های اندازه"
}, },
"Size Offset": { "Size Offset": {
"Size Offset": "آفست اندازه" "Size Offset": "آفست اندازه"
@@ -4711,7 +4714,7 @@
"Snap": "چسباندن" "Snap": "چسباندن"
}, },
"Snow": { "Snow": {
"Snow": "" "Snow": "برف"
}, },
"Some plugins require a newer version of DMS:": { "Some plugins require a newer version of DMS:": {
"Some plugins require a newer version of DMS:": "برخی افزونه‌ها نیازمند نسخه جدیدتر DMS هستند:" "Some plugins require a newer version of DMS:": "برخی افزونه‌ها نیازمند نسخه جدیدتر DMS هستند:"
@@ -4810,7 +4813,7 @@
"Suspend system after": "تعلیق پس از" "Suspend system after": "تعلیق پس از"
}, },
"Suspend then Hibernate": { "Suspend then Hibernate": {
"Suspend then Hibernate": "" "Suspend then Hibernate": "تعلیق سپس هایبرنیت"
}, },
"Swap": { "Swap": {
"Swap": "سواپ" "Swap": "سواپ"
@@ -4942,7 +4945,7 @@
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": "این ابزارک از حالت‌های خاموش شدن GPU جلوگیری می‌کند، که ​​می‌تواند به طور قابل توجهی بر عمر باتری لپ‌تاپ‌ها تأثیر بگذارد. استفاده از این ابزارک در لپ‌تاپ‌هایی با گرافیک هیبریدی توصیه نمی‌شود." "This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": "این ابزارک از حالت‌های خاموش شدن GPU جلوگیری می‌کند، که ​​می‌تواند به طور قابل توجهی بر عمر باتری لپ‌تاپ‌ها تأثیر بگذارد. استفاده از این ابزارک در لپ‌تاپ‌هایی با گرافیک هیبریدی توصیه نمی‌شود."
}, },
"This will delete all unpinned entries. %1 pinned entries will be kept.": { "This will delete all unpinned entries. %1 pinned entries will be kept.": {
"This will delete all unpinned entries. %1 pinned entries will be kept.": "این همه ورودی‌های سنجاق نشده را پاک می‌کند. %1 ورودی سنجاق شده نگه داشته می‌شوند." "This will delete all unpinned entries. %1 pinned entries will be kept.": "این همه مدخل‌های سنجاق نشده را پاک می‌کند. %1 مدخل سنجاق شده نگه داشته می‌شوند."
}, },
"This will permanently delete all clipboard history.": { "This will permanently delete all clipboard history.": {
"This will permanently delete all clipboard history.": "این کار تمام تاریخچه کلیپ‌بورد را برای همیشه حذف می‌کند." "This will permanently delete all clipboard history.": "این کار تمام تاریخچه کلیپ‌بورد را برای همیشه حذف می‌کند."
@@ -4951,16 +4954,16 @@
"This will permanently remove this saved clipboard item. This action cannot be undone.": "این به طور دائمی این مورد کلیپ‌بورد را حذف خواهد کرد. این عمل برگشت‌ناپذیر است." "This will permanently remove this saved clipboard item. This action cannot be undone.": "این به طور دائمی این مورد کلیپ‌بورد را حذف خواهد کرد. این عمل برگشت‌ناپذیر است."
}, },
"Thunderstorm": { "Thunderstorm": {
"Thunderstorm": "" "Thunderstorm": "رعد و برق"
}, },
"Thunderstorm with Hail": { "Thunderstorm with Hail": {
"Thunderstorm with Hail": "" "Thunderstorm with Hail": "رعد و برق با تگرگ"
}, },
"Tiled": { "Tiled": {
"Tiled": "" "Tiled": "کاشی‌شده"
}, },
"Tiled State": { "Tiled State": {
"Tiled State": "" "Tiled State": "حالت کاشی‌شده"
}, },
"Tiling": { "Tiling": {
"Tiling": "تایلینگ" "Tiling": "تایلینگ"
@@ -5140,13 +5143,13 @@
"Unknown Title": "عنوان ناشناس" "Unknown Title": "عنوان ناشناس"
}, },
"Unload on Close": { "Unload on Close": {
"Unload on Close": "" "Unload on Close": "خالی‌کردن هنگام بستن"
}, },
"Unmute": { "Unmute": {
"Unmute": "" "Unmute": "صدادار کردن"
}, },
"Unmute popups for %1": { "Unmute popups for %1": {
"Unmute popups for %1": "" "Unmute popups for %1": "صدادار کردن پاپ‌آپ‌ها را برای %1"
}, },
"Unnamed Rule": { "Unnamed Rule": {
"Unnamed Rule": "قاعده بی‌نام" "Unnamed Rule": "قاعده بی‌نام"
@@ -5347,7 +5350,7 @@
"Vibrant palette with playful saturation.": "پالتر رنگی پر جنب و جوش با اشباع رنگی سرزنده." "Vibrant palette with playful saturation.": "پالتر رنگی پر جنب و جوش با اشباع رنگی سرزنده."
}, },
"Videos": { "Videos": {
"Videos": "" "Videos": "ویدئوها"
}, },
"View Mode": { "View Mode": {
"View Mode": "حالت نمایش" "View Mode": "حالت نمایش"
@@ -5619,7 +5622,7 @@
"Thickness": "ضخامت" "Thickness": "ضخامت"
}, },
"brandon": { "brandon": {
"brandon": "" "brandon": "براندون"
}, },
"browse themes button | theme browser header | theme browser window title": { "browse themes button | theme browser header | theme browser window title": {
"Browse Themes": "مرور تم‌ها" "Browse Themes": "مرور تم‌ها"
@@ -5650,7 +5653,7 @@
"Active tile background and icon color": "رنگ کاشی پس‌زمینه فعال و آیکون" "Active tile background and icon color": "رنگ کاشی پس‌زمینه فعال و آیکون"
}, },
"count of hidden audio devices": { "count of hidden audio devices": {
"Hidden (%1)": "" "Hidden (%1)": "پنهان (%1)"
}, },
"current theme label": { "current theme label": {
"Current Theme: %1": "تم کنونی: %1" "Current Theme: %1": "تم کنونی: %1"
@@ -5665,7 +5668,7 @@
"Click to select a custom theme JSON file": "برای انتخاب یک فایل JSON قالب سفارشی کلیک کنید" "Click to select a custom theme JSON file": "برای انتخاب یک فایل JSON قالب سفارشی کلیک کنید"
}, },
"dark mode wallpaper color picker title": { "dark mode wallpaper color picker title": {
"Choose Dark Mode Color": "" "Choose Dark Mode Color": "انتخاب رنگ حالت تاریک"
}, },
"dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": { "dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": {
"Select Wallpaper": "انتخاب تصویر پس‌زمینه" "Select Wallpaper": "انتخاب تصویر پس‌زمینه"
@@ -5686,7 +5689,7 @@
"days": "روز" "days": "روز"
}, },
"default monitor label suffix": { "default monitor label suffix": {
"(Default)": "" "(Default)": "(پیش‌فرض)"
}, },
"dgop not available": { "dgop not available": {
"dgop not available": "dgop در دسترس نیست" "dgop not available": "dgop در دسترس نیست"
@@ -5754,7 +5757,7 @@
"No GPUs detected": "هیچ GPUای شناسایی نشد" "No GPUs detected": "هیچ GPUای شناسایی نشد"
}, },
"empty state in process list": { "empty state in process list": {
"No matching processes": "" "No matching processes": "فرآیند موردنظر یافت نشد"
}, },
"empty theme list": { "empty theme list": {
"No themes found": "هیچ تمی یافت نشد" "No themes found": "هیچ تمی یافت نشد"
@@ -5954,7 +5957,7 @@
"leave empty for default": "برای پیش‌فرض خالی رها کنید" "leave empty for default": "برای پیش‌فرض خالی رها کنید"
}, },
"light mode wallpaper color picker title": { "light mode wallpaper color picker title": {
"Choose Light Mode Color": "" "Choose Light Mode Color": "انتخاب رنگ حالت روشن"
}, },
"loading indicator": { "loading indicator": {
"Loading...": "درحال بارگذاری..." "Loading...": "درحال بارگذاری..."
@@ -6016,7 +6019,7 @@
"nav": "جهت" "nav": "جهت"
}, },
"neovim template description": { "neovim template description": {
"Requires lazy plugin manager": "" "Requires lazy plugin manager": "به مدیریت افزونه lazy نیاز دارد"
}, },
"network status": { "network status": {
"Connected": "متصل", "Connected": "متصل",
@@ -6032,7 +6035,7 @@
"No custom theme file": "هیچ تم سفارشی یافت نشد" "No custom theme file": "هیچ تم سفارشی یافت نشد"
}, },
"no monitors available label": { "no monitors available label": {
"No monitors": "" "No monitors": "بدون مانیتور"
}, },
"no registry themes installed hint": { "no registry themes installed hint": {
"No themes installed. Browse themes to install from the registry.": "هیچ تمی نصب نشده. تم‌ها را برای نصب از مخزن مرور کنید." "No themes installed. Browse themes to install from the registry.": "هیچ تمی نصب نشده. تم‌ها را برای نصب از مخزن مرور کنید."
@@ -6082,7 +6085,7 @@
"Enable History": "فعال‌کردن تاریخچه" "Enable History": "فعال‌کردن تاریخچه"
}, },
"notification privacy mode placeholder": { "notification privacy mode placeholder": {
"Message Content": "" "Message Content": "محتوای پیام"
}, },
"notification rule action option": { "notification rule action option": {
"Ignore Completely": "کلاً نادیده بگیر", "Ignore Completely": "کلاً نادیده بگیر",
@@ -6095,7 +6098,7 @@
}, },
"notification rule match field option": { "notification rule match field option": {
"Body": "بدنه", "Body": "بدنه",
"Desktop Entry": "", "Desktop Entry": "مدخل دسکتاپ",
"Summary": "خلاصه" "Summary": "خلاصه"
}, },
"notification rule match type option": { "notification rule match type option": {
@@ -6115,22 +6118,22 @@
"official": "رسمی" "official": "رسمی"
}, },
"on Hyprland": { "on Hyprland": {
"on Hyprland": "" "on Hyprland": "در Hyprland"
}, },
"on MangoWC": { "on MangoWC": {
"on MangoWC": "" "on MangoWC": "در MangoWC"
}, },
"on Miracle WM": { "on Miracle WM": {
"on Miracle WM": "" "on Miracle WM": "در Miracle WM"
}, },
"on Niri": { "on Niri": {
"on Niri": "" "on Niri": "در Niri"
}, },
"on Scroll": { "on Scroll": {
"on Scroll": "" "on Scroll": "در Scroll"
}, },
"on Sway": { "on Sway": {
"on Sway": "" "on Sway": "در Sway"
}, },
"open": { "open": {
"open": "باز کردن" "open": "باز کردن"
@@ -6180,10 +6183,10 @@
"Select Profile Image": "انتخاب تصویر نمایه" "Select Profile Image": "انتخاب تصویر نمایه"
}, },
"qt theme env error body": { "qt theme env error body": {
"You need to set either:\nQT_QPA_PLATFORMTHEME=gtk3 OR\nQT_QPA_PLATFORMTHEME=qt6ct\nas environment variables, and then restart the shell.\n\nqt6ct requires qt6ct-kde to be installed.": "" "You need to set either:\nQT_QPA_PLATFORMTHEME=gtk3 OR\nQT_QPA_PLATFORMTHEME=qt6ct\nas environment variables, and then restart the shell.\n\nqt6ct requires qt6ct-kde to be installed.": "لازم است یکی از مقادیر زیر را به عنوان متغیر محیطی تنظیم نمایید:\nQT_QPA_PLATFORMTHEME=gtk3 یا\nQT_QPA_PLATFORMTHEME=qt6ct\nو پس از آن، شل را مجدداً راه‌اندازی کنید.\n\nبسته qt6ct نیازمند نصب qt6ct-kde است."
}, },
"qt theme env error title": { "qt theme env error title": {
"Missing Environment Variables": "" "Missing Environment Variables": "متغیر‌های محیطی یافت نشد"
}, },
"read-only settings warning for NixOS home-manager users": { "read-only settings warning for NixOS home-manager users": {
"Settings are read-only. Changes will not persist.": "تنظیمات فقط قابل خواندن هستند. تغییرات حفظ نخواهند شد." "Settings are read-only. Changes will not persist.": "تنظیمات فقط قابل خواندن هستند. تغییرات حفظ نخواهند شد."
@@ -6243,10 +6246,10 @@
"Load Average": "متوسط بارگذاری" "Load Average": "متوسط بارگذاری"
}, },
"theme auto mode tab": { "theme auto mode tab": {
"Location": "" "Location": "مکان"
}, },
"theme auto mode tab | wallpaper cycling mode tab": { "theme auto mode tab | wallpaper cycling mode tab": {
"Time": "" "Time": "زمان"
}, },
"theme browser description": { "theme browser description": {
"Install color themes from the DMS theme registry": "نصب تم رنگ‌ها از مخزن تم DMS" "Install color themes from the DMS theme registry": "نصب تم رنگ‌ها از مخزن تم DMS"
@@ -6267,7 +6270,7 @@
"Search themes...": "جستجوی تم‌ها..." "Search themes...": "جستجوی تم‌ها..."
}, },
"this app": { "this app": {
"this app": "" "this app": "این برنامه"
}, },
"tile color option": { "tile color option": {
"Primary Container": "زمینه اصلی", "Primary Container": "زمینه اصلی",
@@ -6289,7 +6292,7 @@
"Unknown": "ناشناخته" "Unknown": "ناشناخته"
}, },
"up": { "up": {
"up": "" "up": "روشن"
}, },
"update dms for NM integration.": { "update dms for NM integration.": {
"update dms for NM integration.": "DMS را برای یکپارچه‌سازی NM بروز کنید." "update dms for NM integration.": "DMS را برای یکپارچه‌سازی NM بروز کنید."
@@ -6304,10 +6307,10 @@
"Requires %1": "به %1 نیاز دارد" "Requires %1": "به %1 نیاز دارد"
}, },
"wallpaper color picker title": { "wallpaper color picker title": {
"Choose Wallpaper Color": "" "Choose Wallpaper Color": "انتخاب رنگ تصویر پس‌زمینه"
}, },
"wallpaper cycling mode tab": { "wallpaper cycling mode tab": {
"Interval": "" "Interval": "وقفه"
}, },
"wallpaper directory file browser title": { "wallpaper directory file browser title": {
"Select Wallpaper Directory": "انتخاب دایرکتوری تصاویر پس‌زمینه" "Select Wallpaper Directory": "انتخاب دایرکتوری تصاویر پس‌زمینه"
@@ -6328,32 +6331,32 @@
"Tile V": "کاشی عمودی" "Tile V": "کاشی عمودی"
}, },
"wallpaper interval": { "wallpaper interval": {
"1 hour": "", "1 hour": "۱ ساعت",
"1 hour 30 minutes": "", "1 hour 30 minutes": "۱ ساعت و نیم",
"1 minute": "", "1 minute": "۱ دقیقه",
"10 seconds": "", "10 seconds": "۱۰ ثانیه",
"12 hours": "", "12 hours": "۱۲ ساعت",
"15 minutes": "", "15 minutes": "۱۵ دقیقه",
"15 seconds": "", "15 seconds": "۱۵ ثانیه",
"2 hours": "", "2 hours": "۲ ساعت",
"20 seconds": "", "20 seconds": "۲۰ ثانیه",
"25 seconds": "", "25 seconds": "۲۵ ثانیه",
"3 hours": "", "3 hours": "۳ ساعت",
"30 minutes": "", "30 minutes": "۳۰ دقیقه",
"30 seconds": "", "30 seconds": "۳۰ ثانیه",
"35 seconds": "", "35 seconds": "۳۵ ثانیه",
"4 hours": "", "4 hours": "۴ ساعت",
"40 seconds": "", "40 seconds": "۴۰ ثانیه",
"45 seconds": "", "45 seconds": "۴۵ ثانیه",
"5 minutes": "", "5 minutes": "۵ دقیقه",
"5 seconds": "", "5 seconds": "۵ ثانیه",
"50 seconds": "", "50 seconds": "۵۰ ثانیه",
"55 seconds": "", "55 seconds": "۵۵ ثانیه",
"6 hours": "", "6 hours": "۶ ساعت",
"8 hours": "" "8 hours": "۸ ساعت"
}, },
"wallpaper not set label": { "wallpaper not set label": {
"Not set": "" "Not set": "تنظیم نشده"
}, },
"wallpaper processing error": { "wallpaper processing error": {
"Wallpaper processing failed": "پردازش تصویر پس‌زمینه ناموفق بود" "Wallpaper processing failed": "پردازش تصویر پس‌زمینه ناموفق بود"
@@ -6429,5 +6432,8 @@
}, },
"• yyyy - Year (2024)": { "• yyyy - Year (2024)": {
"• yyyy - Year (2024)": "• yyyy - سال (2024)" "• yyyy - Year (2024)": "• yyyy - سال (2024)"
},
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
@@ -769,6 +769,9 @@
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "Indicateur Verr. Maj." "Caps Lock Indicator": "Indicateur Verr. Maj."
}, },
"Caps Lock is on": {
"Caps Lock is on": ""
},
"Center Section": { "Center Section": {
"Center Section": "Partie centrale" "Center Section": "Partie centrale"
}, },
@@ -6429,5 +6432,8 @@
}, },
"• yyyy - Year (2024)": { "• yyyy - Year (2024)": {
"• yyyy - Year (2024)": "• yyyy - Année (2024)" "• yyyy - Year (2024)": "• yyyy - Année (2024)"
},
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
@@ -769,6 +769,9 @@
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "מחוון Caps Lock" "Caps Lock Indicator": "מחוון Caps Lock"
}, },
"Caps Lock is on": {
"Caps Lock is on": ""
},
"Center Section": { "Center Section": {
"Center Section": "קטע אמצעי" "Center Section": "קטע אמצעי"
}, },
@@ -6429,5 +6432,8 @@
}, },
"• yyyy - Year (2024)": { "• yyyy - Year (2024)": {
"• yyyy - Year (2024)": "• yyyy - שנה (2024)" "• yyyy - Year (2024)": "• yyyy - שנה (2024)"
},
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
+37 -31
View File
@@ -105,10 +105,10 @@
"2 minutes": "2 perc" "2 minutes": "2 perc"
}, },
"2 seconds": { "2 seconds": {
"2 seconds": "" "2 seconds": "2 másodperc"
}, },
"20 minutes": { "20 minutes": {
"20 minutes": "" "20 minutes": "20 perc"
}, },
"24-Hour Format": { "24-Hour Format": {
"24-Hour Format": "24 órás formátum" "24-Hour Format": "24 órás formátum"
@@ -117,7 +117,7 @@
"24-hour format": "24 órás formátum" "24-hour format": "24 órás formátum"
}, },
"250 ms": { "250 ms": {
"250 ms": "" "250 ms": "250 ms"
}, },
"270°": { "270°": {
"270°": "270 fok" "270°": "270 fok"
@@ -126,7 +126,7 @@
"3 days": "3 nap" "3 days": "3 nap"
}, },
"3 minutes": { "3 minutes": {
"3 minutes": "" "3 minutes": "3 perc"
}, },
"3 seconds": { "3 seconds": {
"3 seconds": "3 másodperc" "3 seconds": "3 másodperc"
@@ -141,7 +141,7 @@
"3rd party": "Harmadik fél" "3rd party": "Harmadik fél"
}, },
"4 seconds": { "4 seconds": {
"4 seconds": "" "4 seconds": "4 másodperc"
}, },
"5 minutes": { "5 minutes": {
"5 minutes": "5 perc" "5 minutes": "5 perc"
@@ -150,13 +150,13 @@
"5 seconds": "5 másodperc" "5 seconds": "5 másodperc"
}, },
"500 ms": { "500 ms": {
"500 ms": "" "500 ms": "500 ms"
}, },
"7 days": { "7 days": {
"7 days": "7 nap" "7 days": "7 nap"
}, },
"750 ms": { "750 ms": {
"750 ms": "" "750 ms": "750 ms"
}, },
"8 seconds": { "8 seconds": {
"8 seconds": "8 másodperc" "8 seconds": "8 másodperc"
@@ -769,6 +769,9 @@
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "Caps Lock jelző" "Caps Lock Indicator": "Caps Lock jelző"
}, },
"Caps Lock is on": {
"Caps Lock is on": ""
},
"Center Section": { "Center Section": {
"Center Section": "Középső rész" "Center Section": "Középső rész"
}, },
@@ -5686,7 +5689,7 @@
"days": "nap" "days": "nap"
}, },
"default monitor label suffix": { "default monitor label suffix": {
"(Default)": "" "(Default)": "(Alapértelmezett)"
}, },
"dgop not available": { "dgop not available": {
"dgop not available": "dgop nem elérhető" "dgop not available": "dgop nem elérhető"
@@ -6328,29 +6331,29 @@
"Tile V": "Függőleges mozaik" "Tile V": "Függőleges mozaik"
}, },
"wallpaper interval": { "wallpaper interval": {
"1 hour": "", "1 hour": "1 óra",
"1 hour 30 minutes": "", "1 hour 30 minutes": "1 óra 30 perc",
"1 minute": "", "1 minute": "1 perc",
"10 seconds": "", "10 seconds": "10 másodperc",
"12 hours": "", "12 hours": "12 óra",
"15 minutes": "", "15 minutes": "15 perc",
"15 seconds": "", "15 seconds": "15 másodperc",
"2 hours": "", "2 hours": "2 óra",
"20 seconds": "", "20 seconds": "20 másodperc",
"25 seconds": "", "25 seconds": "25 másodperc",
"3 hours": "", "3 hours": "3 óra",
"30 minutes": "", "30 minutes": "30 perc",
"30 seconds": "", "30 seconds": "30 másodperc",
"35 seconds": "", "35 seconds": "35 másodperc",
"4 hours": "", "4 hours": "4 óra",
"40 seconds": "", "40 seconds": "40 másodperc",
"45 seconds": "", "45 seconds": "45 másodperc",
"5 minutes": "", "5 minutes": "5 perc",
"5 seconds": "", "5 seconds": "5 másodperc",
"50 seconds": "", "50 seconds": "50 másodperc",
"55 seconds": "", "55 seconds": "55 másodperc",
"6 hours": "", "6 hours": "6 óra",
"8 hours": "" "8 hours": "8 óra"
}, },
"wallpaper not set label": { "wallpaper not set label": {
"Not set": "" "Not set": ""
@@ -6429,5 +6432,8 @@
}, },
"• yyyy - Year (2024)": { "• yyyy - Year (2024)": {
"• yyyy - Year (2024)": "• yyyy - Év (2024)" "• yyyy - Year (2024)": "• yyyy - Év (2024)"
},
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
+82 -76
View File
@@ -105,10 +105,10 @@
"2 minutes": "2 minuti" "2 minutes": "2 minuti"
}, },
"2 seconds": { "2 seconds": {
"2 seconds": "" "2 seconds": "2 secondi"
}, },
"20 minutes": { "20 minutes": {
"20 minutes": "" "20 minutes": "20 minuti"
}, },
"24-Hour Format": { "24-Hour Format": {
"24-Hour Format": "Formato 24 Ore" "24-Hour Format": "Formato 24 Ore"
@@ -117,7 +117,7 @@
"24-hour format": "formato 24 ore" "24-hour format": "formato 24 ore"
}, },
"250 ms": { "250 ms": {
"250 ms": "" "250 ms": "250 mms"
}, },
"270°": { "270°": {
"270°": "270°" "270°": "270°"
@@ -126,7 +126,7 @@
"3 days": "3 giorni" "3 days": "3 giorni"
}, },
"3 minutes": { "3 minutes": {
"3 minutes": "" "3 minutes": "3 minuti"
}, },
"3 seconds": { "3 seconds": {
"3 seconds": "3 secondi" "3 seconds": "3 secondi"
@@ -141,7 +141,7 @@
"3rd party": "terze parti" "3rd party": "terze parti"
}, },
"4 seconds": { "4 seconds": {
"4 seconds": "" "4 seconds": "4 secondi"
}, },
"5 minutes": { "5 minutes": {
"5 minutes": "5 minuti" "5 minutes": "5 minuti"
@@ -150,13 +150,13 @@
"5 seconds": "5 secondi" "5 seconds": "5 secondi"
}, },
"500 ms": { "500 ms": {
"500 ms": "" "500 ms": "500 ms"
}, },
"7 days": { "7 days": {
"7 days": "7 giorni" "7 days": "7 giorni"
}, },
"750 ms": { "750 ms": {
"750 ms": "" "750 ms": "750 ms"
}, },
"8 seconds": { "8 seconds": {
"8 seconds": "8 secondi" "8 seconds": "8 secondi"
@@ -171,7 +171,7 @@
"A file with this name already exists. Do you want to overwrite it?": "Esiste già un file con questo nome. Vuoi sovrascriverlo?" "A file with this name already exists. Do you want to overwrite it?": "Esiste già un file con questo nome. Vuoi sovrascriverlo?"
}, },
"AC Power": { "AC Power": {
"AC Power": "" "AC Power": "Alimentazione CA"
}, },
"API": { "API": {
"API": "API" "API": "API"
@@ -769,6 +769,9 @@
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "Indicatore Blocco Maiuscole" "Caps Lock Indicator": "Indicatore Blocco Maiuscole"
}, },
"Caps Lock is on": {
"Caps Lock is on": ""
},
"Center Section": { "Center Section": {
"Center Section": "Sezione Centrale" "Center Section": "Sezione Centrale"
}, },
@@ -860,7 +863,7 @@
"Clear History?": "Cancellare la Cronologia?" "Clear History?": "Cancellare la Cronologia?"
}, },
"Clear Sky": { "Clear Sky": {
"Clear Sky": "" "Clear Sky": "Sereno"
}, },
"Clear all history when server starts": { "Clear all history when server starts": {
"Clear all history when server starts": "Cancella tutta la cronologia all'avvio del server" "Clear all history when server starts": "Cancella tutta la cronologia all'avvio del server"
@@ -1415,7 +1418,7 @@
"Description": "Descrizione" "Description": "Descrizione"
}, },
"Desktop": { "Desktop": {
"Desktop": "" "Desktop": "Scrivania"
}, },
"Desktop Clock": { "Desktop Clock": {
"Desktop Clock": "Orologio Desktop" "Desktop Clock": "Orologio Desktop"
@@ -1589,7 +1592,7 @@
"Docs": "Documentazione" "Docs": "Documentazione"
}, },
"Documents": { "Documents": {
"Documents": "" "Documents": "Documenti"
}, },
"Domain (optional)": { "Domain (optional)": {
"Domain (optional)": "Dominio (opzionale)" "Domain (optional)": "Dominio (opzionale)"
@@ -1604,7 +1607,7 @@
"Door Open": "Sportello Aperto" "Door Open": "Sportello Aperto"
}, },
"Downloads": { "Downloads": {
"Downloads": "" "Downloads": "Scaricati"
}, },
"Drag to Reorder": { "Drag to Reorder": {
"Drag to Reorder": "Trascina per Riordinare" "Drag to Reorder": "Trascina per Riordinare"
@@ -1619,7 +1622,7 @@
"Driver": "Driver" "Driver": "Driver"
}, },
"Drizzle": { "Drizzle": {
"Drizzle": "" "Drizzle": "Pioviggine"
}, },
"Duplicate": { "Duplicate": {
"Duplicate": "Duplica" "Duplicate": "Duplica"
@@ -2084,7 +2087,7 @@
"Focused Window": "Finestra Attiva" "Focused Window": "Finestra Attiva"
}, },
"Fog": { "Fog": {
"Fog": "" "Fog": "Nebbia"
}, },
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "Segui lo Schermo Attivo" "Follow Monitor Focus": "Segui lo Schermo Attivo"
@@ -2150,7 +2153,7 @@
"Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": "Libera VRAM/memoria alla chiusura del launcher. Potrebbe causare un leggero ritardo alla riapertura." "Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": "Libera VRAM/memoria alla chiusura del launcher. Potrebbe causare un leggero ritardo alla riapertura."
}, },
"Freezing Drizzle": { "Freezing Drizzle": {
"Freezing Drizzle": "" "Freezing Drizzle": "Pioviggine Congelantesi"
}, },
"Frequency": { "Frequency": {
"Frequency": "Frequenza" "Frequency": "Frequenza"
@@ -2258,13 +2261,13 @@
"Health": "Salute" "Health": "Salute"
}, },
"Heavy Rain": { "Heavy Rain": {
"Heavy Rain": "" "Heavy Rain": "Pioggia Forte"
}, },
"Heavy Snow": { "Heavy Snow": {
"Heavy Snow": "" "Heavy Snow": "Neve Abbondante"
}, },
"Heavy Snow Showers": { "Heavy Snow Showers": {
"Heavy Snow Showers": "" "Heavy Snow Showers": "Forti Rovesci di Neve"
}, },
"Height": { "Height": {
"Height": "Altezza" "Height": "Altezza"
@@ -2366,7 +2369,7 @@
"Hold to confirm (%1s)": "Tieni premuto per confermare (%1s)" "Hold to confirm (%1s)": "Tieni premuto per confermare (%1s)"
}, },
"Home": { "Home": {
"Home": "" "Home": "Home"
}, },
"Hot Corners": { "Hot Corners": {
"Hot Corners": "Angoli Attivi" "Hot Corners": "Angoli Attivi"
@@ -2816,13 +2819,13 @@
"Light Mode": "Modalità Chiara" "Light Mode": "Modalità Chiara"
}, },
"Light Rain": { "Light Rain": {
"Light Rain": "" "Light Rain": "Pioggia Leggera"
}, },
"Light Snow": { "Light Snow": {
"Light Snow": "" "Light Snow": "Neve Leggera"
}, },
"Light Snow Showers": { "Light Snow Showers": {
"Light Snow Showers": "" "Light Snow Showers": "Deboli Rovesci di Neve"
}, },
"Linear": { "Linear": {
"Linear": "Lineare" "Linear": "Lineare"
@@ -3170,7 +3173,7 @@
"Moving to Paused": "Messa in Pausa" "Moving to Paused": "Messa in Pausa"
}, },
"Music": { "Music": {
"Music": "" "Music": "Musica"
}, },
"Mute popups for %1": { "Mute popups for %1": {
"Mute popups for %1": "Silenzia popup per %1" "Mute popups for %1": "Silenzia popup per %1"
@@ -3590,7 +3593,7 @@
"Outputs Include Missing": "Inclusione Output Mancanti" "Outputs Include Missing": "Inclusione Output Mancanti"
}, },
"Overcast": { "Overcast": {
"Overcast": "" "Overcast": "Coperto"
}, },
"Overflow": { "Overflow": {
"Overflow": "Overflow" "Overflow": "Overflow"
@@ -3650,7 +3653,7 @@
"Pairing...": "Associazione in Corso..." "Pairing...": "Associazione in Corso..."
}, },
"Partly Cloudy": { "Partly Cloudy": {
"Partly Cloudy": "" "Partly Cloudy": "Parzialmente Nuvoloso"
}, },
"Passkey:": { "Passkey:": {
"Passkey:": "Passkey:" "Passkey:": "Passkey:"
@@ -3760,7 +3763,7 @@
"Unavailable": "Non Disponibile" "Unavailable": "Non Disponibile"
}, },
"Pictures": { "Pictures": {
"Pictures": "" "Pictures": "Immagini"
}, },
"Pin": { "Pin": {
"Pin": "Fissa" "Pin": "Fissa"
@@ -3988,7 +3991,7 @@
"Protocol": "Protocollo" "Protocol": "Protocollo"
}, },
"Quick Access": { "Quick Access": {
"Quick Access": "" "Quick Access": "Accesso Rapido"
}, },
"Quick access to application launcher": { "Quick access to application launcher": {
"Quick access to application launcher": "Accesso veloce al launcher applicazioni" "Quick access to application launcher": "Accesso veloce al launcher applicazioni"
@@ -4009,7 +4012,7 @@
"Radius": "Raggio" "Radius": "Raggio"
}, },
"Rain": { "Rain": {
"Rain": "" "Rain": "Pioggia"
}, },
"Rain Chance": { "Rain Chance": {
"Rain Chance": "Prob. Pioggia" "Rain Chance": "Prob. Pioggia"
@@ -4711,7 +4714,7 @@
"Snap": "Aggancia" "Snap": "Aggancia"
}, },
"Snow": { "Snow": {
"Snow": "" "Snow": "Neve"
}, },
"Some plugins require a newer version of DMS:": { "Some plugins require a newer version of DMS:": {
"Some plugins require a newer version of DMS:": "Alcuni plugin richiedono una versione più recente di DMS:" "Some plugins require a newer version of DMS:": "Alcuni plugin richiedono una versione più recente di DMS:"
@@ -4810,7 +4813,7 @@
"Suspend system after": "Sospendi sistema dopo" "Suspend system after": "Sospendi sistema dopo"
}, },
"Suspend then Hibernate": { "Suspend then Hibernate": {
"Suspend then Hibernate": "" "Suspend then Hibernate": "Sospendi e poi Iberna"
}, },
"Swap": { "Swap": {
"Swap": "Swap" "Swap": "Swap"
@@ -4951,10 +4954,10 @@
"This will permanently remove this saved clipboard item. This action cannot be undone.": "Questo rimuoverà definitivamente questo elemento degli appunti salvato. Questa azione non può essere annullata." "This will permanently remove this saved clipboard item. This action cannot be undone.": "Questo rimuoverà definitivamente questo elemento degli appunti salvato. Questa azione non può essere annullata."
}, },
"Thunderstorm": { "Thunderstorm": {
"Thunderstorm": "" "Thunderstorm": "Temporale"
}, },
"Thunderstorm with Hail": { "Thunderstorm with Hail": {
"Thunderstorm with Hail": "" "Thunderstorm with Hail": "Temporale con Grandine"
}, },
"Tiled": { "Tiled": {
"Tiled": "Affiancato" "Tiled": "Affiancato"
@@ -5347,7 +5350,7 @@
"Vibrant palette with playful saturation.": "Tavolozza vibrante con saturazione giocosa." "Vibrant palette with playful saturation.": "Tavolozza vibrante con saturazione giocosa."
}, },
"Videos": { "Videos": {
"Videos": "" "Videos": "Video"
}, },
"View Mode": { "View Mode": {
"View Mode": "Modalità Visualizzazione" "View Mode": "Modalità Visualizzazione"
@@ -5619,7 +5622,7 @@
"Thickness": "Spessore" "Thickness": "Spessore"
}, },
"brandon": { "brandon": {
"brandon": "" "brandon": "brandon"
}, },
"browse themes button | theme browser header | theme browser window title": { "browse themes button | theme browser header | theme browser window title": {
"Browse Themes": "Sfoglia Temi" "Browse Themes": "Sfoglia Temi"
@@ -5665,7 +5668,7 @@
"Click to select a custom theme JSON file": "Clicca per selezionare un file tema JSON personalizzato" "Click to select a custom theme JSON file": "Clicca per selezionare un file tema JSON personalizzato"
}, },
"dark mode wallpaper color picker title": { "dark mode wallpaper color picker title": {
"Choose Dark Mode Color": "" "Choose Dark Mode Color": "Scegli Colore Modalità Scura"
}, },
"dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": { "dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": {
"Select Wallpaper": "Seleziona Sfondo" "Select Wallpaper": "Seleziona Sfondo"
@@ -5686,7 +5689,7 @@
"days": "giorni" "days": "giorni"
}, },
"default monitor label suffix": { "default monitor label suffix": {
"(Default)": "" "(Default)": "(Predefinito)"
}, },
"dgop not available": { "dgop not available": {
"dgop not available": "dgop non disponibile" "dgop not available": "dgop non disponibile"
@@ -5954,7 +5957,7 @@
"leave empty for default": "lascia vuoto per il valore predefinito" "leave empty for default": "lascia vuoto per il valore predefinito"
}, },
"light mode wallpaper color picker title": { "light mode wallpaper color picker title": {
"Choose Light Mode Color": "" "Choose Light Mode Color": "Scegli Colore Modalità Chiara"
}, },
"loading indicator": { "loading indicator": {
"Loading...": "Caricamento..." "Loading...": "Caricamento..."
@@ -6016,7 +6019,7 @@
"nav": "nav" "nav": "nav"
}, },
"neovim template description": { "neovim template description": {
"Requires lazy plugin manager": "" "Requires lazy plugin manager": "Richiede lazy plugin manager"
}, },
"network status": { "network status": {
"Connected": "Connesso", "Connected": "Connesso",
@@ -6032,7 +6035,7 @@
"No custom theme file": "Nessun file tema personalizzato" "No custom theme file": "Nessun file tema personalizzato"
}, },
"no monitors available label": { "no monitors available label": {
"No monitors": "" "No monitors": "Nessun monitor"
}, },
"no registry themes installed hint": { "no registry themes installed hint": {
"No themes installed. Browse themes to install from the registry.": "Nessun tema installato. Sfoglia i temi dal registro per installarli." "No themes installed. Browse themes to install from the registry.": "Nessun tema installato. Sfoglia i temi dal registro per installarli."
@@ -6115,22 +6118,22 @@
"official": "ufficiale" "official": "ufficiale"
}, },
"on Hyprland": { "on Hyprland": {
"on Hyprland": "" "on Hyprland": "su Hyprland"
}, },
"on MangoWC": { "on MangoWC": {
"on MangoWC": "" "on MangoWC": "su MangoWC"
}, },
"on Miracle WM": { "on Miracle WM": {
"on Miracle WM": "" "on Miracle WM": "su Miracle WM"
}, },
"on Niri": { "on Niri": {
"on Niri": "" "on Niri": "su Niri"
}, },
"on Scroll": { "on Scroll": {
"on Scroll": "" "on Scroll": "su Scroll"
}, },
"on Sway": { "on Sway": {
"on Sway": "" "on Sway": "su Sway"
}, },
"open": { "open": {
"open": "apri" "open": "apri"
@@ -6180,10 +6183,10 @@
"Select Profile Image": "Seleziona Immagine Profilo" "Select Profile Image": "Seleziona Immagine Profilo"
}, },
"qt theme env error body": { "qt theme env error body": {
"You need to set either:\nQT_QPA_PLATFORMTHEME=gtk3 OR\nQT_QPA_PLATFORMTHEME=qt6ct\nas environment variables, and then restart the shell.\n\nqt6ct requires qt6ct-kde to be installed.": "" "You need to set either:\nQT_QPA_PLATFORMTHEME=gtk3 OR\nQT_QPA_PLATFORMTHEME=qt6ct\nas environment variables, and then restart the shell.\n\nqt6ct requires qt6ct-kde to be installed.": "Devi impostare una delle seguenti come variabili d'ambiente: \nQT_QPA_PLATFORMTHEME=gtk3 OPPURE \nQT_QPA_PLATFORMTHEME=qt6ct, \ne poi riavviare la shell.\n\nqt6ct richiede che qt6ct-kde sia installato."
}, },
"qt theme env error title": { "qt theme env error title": {
"Missing Environment Variables": "" "Missing Environment Variables": "Variabili di Ambiente Mancanti"
}, },
"read-only settings warning for NixOS home-manager users": { "read-only settings warning for NixOS home-manager users": {
"Settings are read-only. Changes will not persist.": "Le impostazioni sono in sola lettura. Le modifiche non verranno salvate." "Settings are read-only. Changes will not persist.": "Le impostazioni sono in sola lettura. Le modifiche non verranno salvate."
@@ -6243,10 +6246,10 @@
"Load Average": "Carico Medio" "Load Average": "Carico Medio"
}, },
"theme auto mode tab": { "theme auto mode tab": {
"Location": "" "Location": "Posizione"
}, },
"theme auto mode tab | wallpaper cycling mode tab": { "theme auto mode tab | wallpaper cycling mode tab": {
"Time": "" "Time": "Tempo"
}, },
"theme browser description": { "theme browser description": {
"Install color themes from the DMS theme registry": "Installa temi colore dal registro temi DMS" "Install color themes from the DMS theme registry": "Installa temi colore dal registro temi DMS"
@@ -6289,7 +6292,7 @@
"Unknown": "Autore Sconosciuto" "Unknown": "Autore Sconosciuto"
}, },
"up": { "up": {
"up": "" "up": "acceso da"
}, },
"update dms for NM integration.": { "update dms for NM integration.": {
"update dms for NM integration.": "aggiorna dms per l'integrazione NM." "update dms for NM integration.": "aggiorna dms per l'integrazione NM."
@@ -6304,10 +6307,10 @@
"Requires %1": "Richiede %1" "Requires %1": "Richiede %1"
}, },
"wallpaper color picker title": { "wallpaper color picker title": {
"Choose Wallpaper Color": "" "Choose Wallpaper Color": "Scegli Colore Sfondo"
}, },
"wallpaper cycling mode tab": { "wallpaper cycling mode tab": {
"Interval": "" "Interval": "Intervallo"
}, },
"wallpaper directory file browser title": { "wallpaper directory file browser title": {
"Select Wallpaper Directory": "Seleziona Cartella Sfondo" "Select Wallpaper Directory": "Seleziona Cartella Sfondo"
@@ -6328,32 +6331,32 @@
"Tile V": "Affianca Vert." "Tile V": "Affianca Vert."
}, },
"wallpaper interval": { "wallpaper interval": {
"1 hour": "", "1 hour": "1 ora",
"1 hour 30 minutes": "", "1 hour 30 minutes": "1 ora 30 minuti",
"1 minute": "", "1 minute": "1 minuto",
"10 seconds": "", "10 seconds": "10 secondi",
"12 hours": "", "12 hours": "12 ore",
"15 minutes": "", "15 minutes": "15 minuti",
"15 seconds": "", "15 seconds": "15 secondi",
"2 hours": "", "2 hours": "2 ore",
"20 seconds": "", "20 seconds": "20 secondi",
"25 seconds": "", "25 seconds": "25 secondi",
"3 hours": "", "3 hours": "3 ore",
"30 minutes": "", "30 minutes": "30 minuti",
"30 seconds": "", "30 seconds": "30 secondi",
"35 seconds": "", "35 seconds": "35 secondi",
"4 hours": "", "4 hours": "4 ore",
"40 seconds": "", "40 seconds": "40 secondi",
"45 seconds": "", "45 seconds": "45 secondi",
"5 minutes": "", "5 minutes": "5 minuti",
"5 seconds": "", "5 seconds": "5 secondi",
"50 seconds": "", "50 seconds": "50 secondi",
"55 seconds": "", "55 seconds": "55 secondi",
"6 hours": "", "6 hours": "6 ore",
"8 hours": "" "8 hours": "8 ore"
}, },
"wallpaper not set label": { "wallpaper not set label": {
"Not set": "" "Not set": "Non impostato"
}, },
"wallpaper processing error": { "wallpaper processing error": {
"Wallpaper processing failed": "Elaborazione dello sfondo fallita" "Wallpaper processing failed": "Elaborazione dello sfondo fallita"
@@ -6429,5 +6432,8 @@
}, },
"• yyyy - Year (2024)": { "• yyyy - Year (2024)": {
"• yyyy - Year (2024)": "• yyyy - Anno (2024)" "• yyyy - Year (2024)": "• yyyy - Anno (2024)"
},
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
@@ -769,6 +769,9 @@
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "Caps Lock インジケーター" "Caps Lock Indicator": "Caps Lock インジケーター"
}, },
"Caps Lock is on": {
"Caps Lock is on": ""
},
"Center Section": { "Center Section": {
"Center Section": "センターセクション" "Center Section": "センターセクション"
}, },
@@ -6429,5 +6432,8 @@
}, },
"• yyyy - Year (2024)": { "• yyyy - Year (2024)": {
"• yyyy - Year (2024)": "• yyyy - 年(2024年)" "• yyyy - Year (2024)": "• yyyy - 年(2024年)"
},
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
@@ -769,6 +769,9 @@
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "Caps Lock-indicator" "Caps Lock Indicator": "Caps Lock-indicator"
}, },
"Caps Lock is on": {
"Caps Lock is on": ""
},
"Center Section": { "Center Section": {
"Center Section": "Middensectie" "Center Section": "Middensectie"
}, },
@@ -6429,5 +6432,8 @@
}, },
"• yyyy - Year (2024)": { "• yyyy - Year (2024)": {
"• yyyy - Year (2024)": "• yyyy - Jaar (2024)" "• yyyy - Year (2024)": "• yyyy - Jaar (2024)"
},
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
@@ -769,6 +769,9 @@
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "Wskaźnik caps locka" "Caps Lock Indicator": "Wskaźnik caps locka"
}, },
"Caps Lock is on": {
"Caps Lock is on": ""
},
"Center Section": { "Center Section": {
"Center Section": "Sekcja środkowa" "Center Section": "Sekcja środkowa"
}, },
@@ -6429,5 +6432,8 @@
}, },
"• yyyy - Year (2024)": { "• yyyy - Year (2024)": {
"• yyyy - Year (2024)": "• yyyy - Rok (2024)" "• yyyy - Year (2024)": "• yyyy - Rok (2024)"
},
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
File diff suppressed because it is too large Load Diff
@@ -769,6 +769,9 @@
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "Caps Lock Göstergesi" "Caps Lock Indicator": "Caps Lock Göstergesi"
}, },
"Caps Lock is on": {
"Caps Lock is on": ""
},
"Center Section": { "Center Section": {
"Center Section": "Orta Bölüm" "Center Section": "Orta Bölüm"
}, },
@@ -6429,5 +6432,8 @@
}, },
"• yyyy - Year (2024)": { "• yyyy - Year (2024)": {
"• yyyy - Year (2024)": "• yyyy - Yıl (2024)" "• yyyy - Year (2024)": "• yyyy - Yıl (2024)"
},
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
@@ -769,6 +769,9 @@
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "大小写指示灯" "Caps Lock Indicator": "大小写指示灯"
}, },
"Caps Lock is on": {
"Caps Lock is on": ""
},
"Center Section": { "Center Section": {
"Center Section": "中间区域" "Center Section": "中间区域"
}, },
@@ -6429,5 +6432,8 @@
}, },
"• yyyy - Year (2024)": { "• yyyy - Year (2024)": {
"• yyyy - Year (2024)": "• yy - 年(2024" "• yyyy - Year (2024)": "• yy - 年(2024"
},
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
@@ -769,6 +769,9 @@
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "大小寫鎖定指示器" "Caps Lock Indicator": "大小寫鎖定指示器"
}, },
"Caps Lock is on": {
"Caps Lock is on": ""
},
"Center Section": { "Center Section": {
"Center Section": "中間區塊" "Center Section": "中間區塊"
}, },
@@ -6429,5 +6432,8 @@
}, },
"• yyyy - Year (2024)": { "• yyyy - Year (2024)": {
"• yyyy - Year (2024)": "• yyyy - 年 (2024)" "• yyyy - Year (2024)": "• yyyy - 年 (2024)"
},
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
+14
View File
@@ -1987,6 +1987,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Caps Lock is on",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Center Section", "term": "Center Section",
"translation": "", "translation": "",
@@ -14531,6 +14538,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "↑/↓: Navigate • Enter: Paste • Del: Delete • F10: Help", "term": "↑/↓: Navigate • Enter: Paste • Del: Delete • F10: Help",
"translation": "", "translation": "",