mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-05-12 07:19:41 -04:00
Compare commits
120 Commits
2b7fd36322
...
hotfix-1.4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f24cf37ca | ||
|
|
01218f34cb | ||
|
|
9da58d8296 | ||
|
|
af0038e634 | ||
|
|
05c312b9eb | ||
|
|
89d5c958c4 | ||
|
|
e4d86ad595 | ||
|
|
532b54a028 | ||
|
|
504d027c3f | ||
|
|
e8f95f4533 | ||
|
|
b83256c83a | ||
|
|
8e2cd21be8 | ||
|
|
c5413608da | ||
|
|
586bcad442 | ||
|
|
3b3d10f730 | ||
|
|
4834891b36 | ||
|
|
f60e65aecb | ||
|
|
01387b0123 | ||
|
|
1476658c23 | ||
|
|
7861c6e316 | ||
|
|
d2247d7b24 | ||
|
|
2ff78d4a02 | ||
|
|
785243ce5f | ||
|
|
0e1b868384 | ||
|
|
2b08e800e8 | ||
|
|
74e4f8ea1e | ||
|
|
9c58569b4c | ||
|
|
29de677e00 | ||
|
|
fae4944845 | ||
|
|
07a0ac4b7d | ||
|
|
b2d8f4d73b | ||
|
|
fe58c45233 | ||
|
|
3ea4e389eb | ||
|
|
7276f295fc | ||
|
|
93ed96a789 | ||
|
|
bea325e94c | ||
|
|
2f8f1c30ad | ||
|
|
f859a14173 | ||
|
|
153f39da48 | ||
|
|
e4accdd1c7 | ||
|
|
a2c89e0a8c | ||
|
|
e282831c2e | ||
|
|
5c5ff6195a | ||
|
|
c4bbf54679 | ||
|
|
98acafb4b8 | ||
|
|
da20681fc0 | ||
|
|
b38cb961b2 | ||
|
|
7a0bb07518 | ||
|
|
403e3e90a2 | ||
|
|
50b91f14b6 | ||
|
|
b3df47fce0 | ||
|
|
09bd65d746 | ||
|
|
020d56ab7f | ||
|
|
f3bee65da9 | ||
|
|
b14b0946e2 | ||
|
|
ca44205f1c | ||
|
|
2d39e8fd2a | ||
|
|
6d4df6e927 | ||
|
|
b8ab86e6c0 | ||
|
|
837329a6d8 | ||
|
|
8c6c2ffd23 | ||
|
|
ad3c8b6755 | ||
|
|
03a8e1e0d5 | ||
|
|
4d4d3c20a1 | ||
|
|
cef16d6bc9 | ||
|
|
aafaad1791 | ||
|
|
7906fdc2b0 | ||
|
|
397650ca52 | ||
|
|
826207006a | ||
|
|
58c2fcd31c | ||
|
|
b2a2b425ec | ||
|
|
942c9c9609 | ||
|
|
46d6e1cff3 | ||
|
|
a4137c57c1 | ||
|
|
1ad8b627f1 | ||
|
|
58a02ce290 | ||
|
|
8e1ad1a2be | ||
|
|
68cd7ab32c | ||
|
|
f649ce9a8e | ||
|
|
c4df242f07 | ||
|
|
26846c8d55 | ||
|
|
31b44a667c | ||
|
|
4f3b73ee21 | ||
|
|
4cfae91f02 | ||
|
|
8d947a6e95 | ||
|
|
1e84d4252c | ||
|
|
76072e1d4c | ||
|
|
6408dce4a9 | ||
|
|
0b2e1cca38 | ||
|
|
c1bfd8c0b7 | ||
|
|
90ffa5833b | ||
|
|
169c669286 | ||
|
|
f8350deafc | ||
|
|
0286a1b80b | ||
|
|
7c3e6c1f02 | ||
|
|
d2d72db3c9 | ||
|
|
f81f861408 | ||
|
|
af494543f5 | ||
|
|
db4de55338 | ||
|
|
37ecbbbbde | ||
|
|
d6a6d2a438 | ||
|
|
bf1c6eec74 | ||
|
|
0ddae80584 | ||
|
|
5c96c03bfa | ||
|
|
dfe36e47d8 | ||
|
|
63e1b75e57 | ||
|
|
29efdd8598 | ||
|
|
34d03cf11b | ||
|
|
c339389d44 | ||
|
|
af5f6eb656 | ||
|
|
a6d28e2553 | ||
|
|
6213267908 | ||
|
|
d084114149 | ||
|
|
f6d99eca0d | ||
|
|
722eb3289e | ||
|
|
b7f2bdcb2d | ||
|
|
11c20db6e6 | ||
|
|
8a4e3f8bb1 | ||
|
|
bc8fe97c13 | ||
|
|
47262155aa |
8
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
8
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -7,7 +7,7 @@ body:
|
||||
attributes:
|
||||
value: |
|
||||
## DankMaterialShell Bug Report
|
||||
Limit your report to one issue per submission unless closely related
|
||||
Limit your report to one issue per submission unless similarly related
|
||||
- type: dropdown
|
||||
id: compositor
|
||||
attributes:
|
||||
@@ -53,9 +53,9 @@ body:
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: original_installation_method_different
|
||||
id: original_installation_method
|
||||
attributes:
|
||||
label: Was your original Installation method different?
|
||||
label: Was this your original Installation method?
|
||||
options:
|
||||
- "Yes"
|
||||
- No (specify below)
|
||||
@@ -73,7 +73,7 @@ body:
|
||||
id: dms_doctor
|
||||
attributes:
|
||||
label: dms doctor -vC
|
||||
description: Output of `dms doctor -vC` command — paste between the lines below to keep it collapsed in the issue
|
||||
description: Output of `dms doctor -vC` command — paste between the details tags below to keep it collapsed in the issue
|
||||
placeholder: Paste the output of `dms doctor -vC` here
|
||||
value: |
|
||||
<details>
|
||||
|
||||
@@ -525,5 +525,6 @@ func getCommonCommands() []*cobra.Command {
|
||||
doctorCmd,
|
||||
configCmd,
|
||||
dlCmd,
|
||||
randrCmd,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,9 @@ package main
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
|
||||
@@ -95,7 +97,11 @@ func buildMatugenOptions(cmd *cobra.Command) matugen.Options {
|
||||
|
||||
func runMatugenGenerate(cmd *cobra.Command, args []string) {
|
||||
opts := buildMatugenOptions(cmd)
|
||||
if err := matugen.Run(opts); err != nil {
|
||||
err := matugen.Run(opts)
|
||||
switch {
|
||||
case errors.Is(err, matugen.ErrNoChanges):
|
||||
os.Exit(2)
|
||||
case err != nil:
|
||||
log.Fatalf("Theme generation failed: %v", err)
|
||||
}
|
||||
}
|
||||
@@ -129,7 +135,11 @@ func runMatugenQueue(cmd *cobra.Command, args []string) {
|
||||
if !wait {
|
||||
if err := sendServerRequestFireAndForget(request); err != nil {
|
||||
log.Info("Server unavailable, running synchronously")
|
||||
if err := matugen.Run(opts); err != nil {
|
||||
err := matugen.Run(opts)
|
||||
switch {
|
||||
case errors.Is(err, matugen.ErrNoChanges):
|
||||
os.Exit(2)
|
||||
case err != nil:
|
||||
log.Fatalf("Theme generation failed: %v", err)
|
||||
}
|
||||
return
|
||||
@@ -146,11 +156,15 @@ func runMatugenQueue(cmd *cobra.Command, args []string) {
|
||||
resp, ok := tryServerRequest(request)
|
||||
if !ok {
|
||||
log.Info("Server unavailable, running synchronously")
|
||||
if err := matugen.Run(opts); err != nil {
|
||||
err := matugen.Run(opts)
|
||||
switch {
|
||||
case errors.Is(err, matugen.ErrNoChanges):
|
||||
resultCh <- matugen.ErrNoChanges
|
||||
case err != nil:
|
||||
resultCh <- err
|
||||
return
|
||||
default:
|
||||
resultCh <- nil
|
||||
}
|
||||
resultCh <- nil
|
||||
return
|
||||
}
|
||||
if resp.Error != "" {
|
||||
@@ -162,7 +176,10 @@ func runMatugenQueue(cmd *cobra.Command, args []string) {
|
||||
|
||||
select {
|
||||
case err := <-resultCh:
|
||||
if err != nil {
|
||||
switch {
|
||||
case errors.Is(err, matugen.ErrNoChanges):
|
||||
os.Exit(2)
|
||||
case err != nil:
|
||||
log.Fatalf("Theme generation failed: %v", err)
|
||||
}
|
||||
fmt.Println("Theme generation completed")
|
||||
|
||||
58
core/cmd/dms/commands_randr.go
Normal file
58
core/cmd/dms/commands_randr.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var randrCmd = &cobra.Command{
|
||||
Use: "randr",
|
||||
Short: "Query output display information",
|
||||
Long: "Query Wayland compositor for output names, scales, resolutions and refresh rates via zwlr-output-management",
|
||||
Run: runRandr,
|
||||
}
|
||||
|
||||
func init() {
|
||||
randrCmd.Flags().Bool("json", false, "Output in JSON format")
|
||||
}
|
||||
|
||||
type randrJSON struct {
|
||||
Outputs []randrOutput `json:"outputs"`
|
||||
}
|
||||
|
||||
func runRandr(cmd *cobra.Command, args []string) {
|
||||
outputs, err := queryRandr()
|
||||
if err != nil {
|
||||
log.Fatalf("%v", err)
|
||||
}
|
||||
|
||||
jsonFlag, _ := cmd.Flags().GetBool("json")
|
||||
|
||||
if jsonFlag {
|
||||
data, err := json.Marshal(randrJSON{Outputs: outputs})
|
||||
if err != nil {
|
||||
log.Fatalf("failed to marshal JSON: %v", err)
|
||||
}
|
||||
fmt.Println(string(data))
|
||||
return
|
||||
}
|
||||
|
||||
for i, out := range outputs {
|
||||
if i > 0 {
|
||||
fmt.Println()
|
||||
}
|
||||
status := "enabled"
|
||||
if !out.Enabled {
|
||||
status = "disabled"
|
||||
}
|
||||
fmt.Printf("%s (%s)\n", out.Name, status)
|
||||
fmt.Printf(" Scale: %.4g\n", out.Scale)
|
||||
fmt.Printf(" Resolution: %dx%d\n", out.Width, out.Height)
|
||||
if out.Refresh > 0 {
|
||||
fmt.Printf(" Refresh: %.2f Hz\n", float64(out.Refresh)/1000.0)
|
||||
}
|
||||
}
|
||||
}
|
||||
172
core/cmd/dms/randr_client.go
Normal file
172
core/cmd/dms/randr_client.go
Normal file
@@ -0,0 +1,172 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/wlr_output_management"
|
||||
wlclient "github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
|
||||
)
|
||||
|
||||
type randrOutput struct {
|
||||
Name string `json:"name"`
|
||||
Scale float64 `json:"scale"`
|
||||
Width int32 `json:"width"`
|
||||
Height int32 `json:"height"`
|
||||
Refresh int32 `json:"refresh"`
|
||||
Enabled bool `json:"enabled"`
|
||||
}
|
||||
|
||||
type randrHead struct {
|
||||
name string
|
||||
enabled bool
|
||||
scale float64
|
||||
currentModeID uint32
|
||||
modeIDs []uint32
|
||||
}
|
||||
|
||||
type randrMode struct {
|
||||
width int32
|
||||
height int32
|
||||
refresh int32
|
||||
}
|
||||
|
||||
type randrClient struct {
|
||||
display *wlclient.Display
|
||||
ctx *wlclient.Context
|
||||
manager *wlr_output_management.ZwlrOutputManagerV1
|
||||
heads map[uint32]*randrHead
|
||||
modes map[uint32]*randrMode
|
||||
done bool
|
||||
err error
|
||||
}
|
||||
|
||||
func queryRandr() ([]randrOutput, error) {
|
||||
display, err := wlclient.Connect("")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to connect to Wayland: %w", err)
|
||||
}
|
||||
|
||||
c := &randrClient{
|
||||
display: display,
|
||||
ctx: display.Context(),
|
||||
heads: make(map[uint32]*randrHead),
|
||||
modes: make(map[uint32]*randrMode),
|
||||
}
|
||||
defer c.ctx.Close()
|
||||
|
||||
registry, err := display.GetRegistry()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get registry: %w", err)
|
||||
}
|
||||
|
||||
registry.SetGlobalHandler(func(e wlclient.RegistryGlobalEvent) {
|
||||
if e.Interface == wlr_output_management.ZwlrOutputManagerV1InterfaceName {
|
||||
mgr := wlr_output_management.NewZwlrOutputManagerV1(c.ctx)
|
||||
version := min(e.Version, 4)
|
||||
|
||||
mgr.SetHeadHandler(func(e wlr_output_management.ZwlrOutputManagerV1HeadEvent) {
|
||||
c.handleHead(e)
|
||||
})
|
||||
|
||||
mgr.SetDoneHandler(func(e wlr_output_management.ZwlrOutputManagerV1DoneEvent) {
|
||||
c.done = true
|
||||
})
|
||||
|
||||
if err := registry.Bind(e.Name, e.Interface, version, mgr); err == nil {
|
||||
c.manager = mgr
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// First roundtrip: discover globals and bind manager
|
||||
syncCallback, err := display.Sync()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to sync display: %w", err)
|
||||
}
|
||||
syncCallback.SetDoneHandler(func(e wlclient.CallbackDoneEvent) {
|
||||
if c.manager == nil {
|
||||
c.err = fmt.Errorf("zwlr_output_manager_v1 protocol not supported by compositor")
|
||||
c.done = true
|
||||
}
|
||||
// Otherwise wait for manager's DoneHandler
|
||||
})
|
||||
|
||||
for !c.done {
|
||||
if err := c.ctx.Dispatch(); err != nil {
|
||||
return nil, fmt.Errorf("dispatch error: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
if c.err != nil {
|
||||
return nil, c.err
|
||||
}
|
||||
|
||||
return c.buildOutputs(), nil
|
||||
}
|
||||
|
||||
func (c *randrClient) handleHead(e wlr_output_management.ZwlrOutputManagerV1HeadEvent) {
|
||||
handle := e.Head
|
||||
headID := handle.ID()
|
||||
|
||||
head := &randrHead{
|
||||
modeIDs: make([]uint32, 0),
|
||||
}
|
||||
c.heads[headID] = head
|
||||
|
||||
handle.SetNameHandler(func(e wlr_output_management.ZwlrOutputHeadV1NameEvent) {
|
||||
head.name = e.Name
|
||||
})
|
||||
|
||||
handle.SetEnabledHandler(func(e wlr_output_management.ZwlrOutputHeadV1EnabledEvent) {
|
||||
head.enabled = e.Enabled != 0
|
||||
})
|
||||
|
||||
handle.SetScaleHandler(func(e wlr_output_management.ZwlrOutputHeadV1ScaleEvent) {
|
||||
head.scale = e.Scale
|
||||
})
|
||||
|
||||
handle.SetCurrentModeHandler(func(e wlr_output_management.ZwlrOutputHeadV1CurrentModeEvent) {
|
||||
head.currentModeID = e.Mode.ID()
|
||||
})
|
||||
|
||||
handle.SetModeHandler(func(e wlr_output_management.ZwlrOutputHeadV1ModeEvent) {
|
||||
modeHandle := e.Mode
|
||||
modeID := modeHandle.ID()
|
||||
|
||||
head.modeIDs = append(head.modeIDs, modeID)
|
||||
|
||||
mode := &randrMode{}
|
||||
c.modes[modeID] = mode
|
||||
|
||||
modeHandle.SetSizeHandler(func(e wlr_output_management.ZwlrOutputModeV1SizeEvent) {
|
||||
mode.width = e.Width
|
||||
mode.height = e.Height
|
||||
})
|
||||
|
||||
modeHandle.SetRefreshHandler(func(e wlr_output_management.ZwlrOutputModeV1RefreshEvent) {
|
||||
mode.refresh = e.Refresh
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func (c *randrClient) buildOutputs() []randrOutput {
|
||||
outputs := make([]randrOutput, 0, len(c.heads))
|
||||
|
||||
for _, head := range c.heads {
|
||||
out := randrOutput{
|
||||
Name: head.name,
|
||||
Scale: head.scale,
|
||||
Enabled: head.enabled,
|
||||
}
|
||||
|
||||
if mode, ok := c.modes[head.currentModeID]; ok {
|
||||
out.Width = mode.width
|
||||
out.Height = mode.height
|
||||
out.Refresh = mode.refresh
|
||||
}
|
||||
|
||||
outputs = append(outputs, out)
|
||||
}
|
||||
|
||||
return outputs
|
||||
}
|
||||
@@ -16,8 +16,6 @@ require (
|
||||
github.com/sblinch/kdl-go v0.0.0-20260121213736-8b7053306ca6
|
||||
github.com/spf13/cobra v1.10.2
|
||||
github.com/stretchr/testify v1.11.1
|
||||
github.com/yeqown/go-qrcode/v2 v2.2.5
|
||||
github.com/yeqown/go-qrcode/writer/standard v1.3.0
|
||||
github.com/yuin/goldmark v1.7.16
|
||||
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
|
||||
go.etcd.io/bbolt v1.4.3
|
||||
@@ -34,19 +32,15 @@ require (
|
||||
github.com/cyphar/filepath-securejoin v0.6.1 // indirect
|
||||
github.com/dlclark/regexp2 v1.11.5 // indirect
|
||||
github.com/emirpasic/gods v1.18.1 // indirect
|
||||
github.com/fogleman/gg v1.3.0 // indirect
|
||||
github.com/go-git/gcfg/v2 v2.0.2 // indirect
|
||||
github.com/go-git/go-billy/v6 v6.0.0-20260209124918-37866f83c2d3 // indirect
|
||||
github.com/go-logfmt/logfmt v0.6.1 // indirect
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
|
||||
github.com/kevinburke/ssh_config v1.6.0 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
|
||||
github.com/pjbgf/sha1cd v0.5.0 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/sergi/go-diff v1.4.0 // indirect
|
||||
github.com/stretchr/objx v0.5.3 // indirect
|
||||
github.com/yeqown/reedsolomon v1.0.0 // indirect
|
||||
golang.org/x/crypto v0.48.0 // indirect
|
||||
golang.org/x/net v0.50.0 // indirect
|
||||
)
|
||||
|
||||
12
core/go.sum
12
core/go.sum
@@ -58,8 +58,6 @@ github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc
|
||||
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
|
||||
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
|
||||
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
|
||||
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
|
||||
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
|
||||
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
|
||||
github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
|
||||
@@ -77,8 +75,6 @@ github.com/go-logfmt/logfmt v0.6.1/go.mod h1:EV2pOAQoZaT1ZXZbqDl5hrymndi4SY9ED9/
|
||||
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ=
|
||||
github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
|
||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
@@ -119,8 +115,6 @@ github.com/pilebones/go-udev v0.9.1 h1:uN72M1C1fgzhsVmBGEM8w9RD1JY4iVsPZpr+Z6rb3
|
||||
github.com/pilebones/go-udev v0.9.1/go.mod h1:Bgcl07crebF3JSeS4+nuaRvhWFdCeFoBhXXeAp93XNo=
|
||||
github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0=
|
||||
github.com/pjbgf/sha1cd v0.5.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
|
||||
@@ -148,12 +142,6 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu
|
||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
|
||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
|
||||
github.com/yeqown/go-qrcode/v2 v2.2.5 h1:HCOe2bSjkhZyYoyyNaXNzh4DJZll6inVJQQw+8228Zk=
|
||||
github.com/yeqown/go-qrcode/v2 v2.2.5/go.mod h1:uHpt9CM0V1HeXLz+Wg5MN50/sI/fQhfkZlOM+cOTHxw=
|
||||
github.com/yeqown/go-qrcode/writer/standard v1.3.0 h1:chdyhEfRtUPgQtuPeaWVGQ/TQx4rE1PqeoW3U+53t34=
|
||||
github.com/yeqown/go-qrcode/writer/standard v1.3.0/go.mod h1:O4MbzsotGCvy8upYPCR91j81dr5XLT7heuljcNXW+oQ=
|
||||
github.com/yeqown/reedsolomon v1.0.0 h1:x1h/Ej/uJnNu8jaX7GLHBWmZKCAWjEJTetkqaabr4B0=
|
||||
github.com/yeqown/reedsolomon v1.0.0/go.mod h1:P76zpcn2TCuL0ul1Fso373qHRc69LKwAw/Iy6g1WiiM=
|
||||
github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yuin/goldmark v1.7.16 h1:n+CJdUxaFMiDUNnWC3dMWCIQJSkxH4uz3ZwQBkAlVNE=
|
||||
github.com/yuin/goldmark v1.7.16/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg=
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package matugen
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
"os"
|
||||
@@ -19,6 +21,8 @@ import (
|
||||
"github.com/lucasb-eyer/go-colorful"
|
||||
)
|
||||
|
||||
var ErrNoChanges = errors.New("no color changes")
|
||||
|
||||
type ColorMode string
|
||||
|
||||
const (
|
||||
@@ -160,39 +164,45 @@ func Run(opts Options) error {
|
||||
|
||||
log.Infof("Building theme: %s %s (%s)", opts.Kind, opts.Value, opts.Mode)
|
||||
|
||||
buildErr := buildOnce(&opts)
|
||||
changed, buildErr := buildOnce(&opts)
|
||||
if buildErr != nil {
|
||||
return buildErr
|
||||
}
|
||||
|
||||
if !changed {
|
||||
log.Info("No color changes detected, skipping refresh")
|
||||
return ErrNoChanges
|
||||
}
|
||||
|
||||
if opts.SyncModeWithPortal {
|
||||
syncColorScheme(opts.Mode)
|
||||
}
|
||||
|
||||
if buildErr != nil {
|
||||
return buildErr
|
||||
}
|
||||
|
||||
log.Info("Done")
|
||||
return nil
|
||||
}
|
||||
|
||||
func buildOnce(opts *Options) error {
|
||||
func buildOnce(opts *Options) (bool, error) {
|
||||
cfgFile, err := os.CreateTemp("", "matugen-config-*.toml")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create temp config: %w", err)
|
||||
return false, fmt.Errorf("failed to create temp config: %w", err)
|
||||
}
|
||||
defer os.Remove(cfgFile.Name())
|
||||
defer cfgFile.Close()
|
||||
|
||||
tmpDir, err := os.MkdirTemp("", "matugen-templates-*")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create temp dir: %w", err)
|
||||
return false, fmt.Errorf("failed to create temp dir: %w", err)
|
||||
}
|
||||
defer os.RemoveAll(tmpDir)
|
||||
|
||||
if err := buildMergedConfig(opts, cfgFile, tmpDir); err != nil {
|
||||
return fmt.Errorf("failed to build config: %w", err)
|
||||
return false, fmt.Errorf("failed to build config: %w", err)
|
||||
}
|
||||
cfgFile.Close()
|
||||
|
||||
oldColors, _ := os.ReadFile(opts.ColorsOutput())
|
||||
|
||||
var primaryDark, primaryLight, surface string
|
||||
var dank16JSON string
|
||||
var importArgs []string
|
||||
@@ -204,7 +214,7 @@ func buildOnce(opts *Options) error {
|
||||
surface = extractNestedColor(opts.StockColors, "surface", "dark")
|
||||
|
||||
if primaryDark == "" {
|
||||
return fmt.Errorf("failed to extract primary dark from stock colors")
|
||||
return false, fmt.Errorf("failed to extract primary dark from stock colors")
|
||||
}
|
||||
if primaryLight == "" {
|
||||
primaryLight = primaryDark
|
||||
@@ -218,14 +228,14 @@ func buildOnce(opts *Options) error {
|
||||
args := []string{"color", "hex", primaryDark, "-m", string(opts.Mode), "-t", opts.MatugenType, "-c", cfgFile.Name()}
|
||||
args = append(args, importArgs...)
|
||||
if err := runMatugen(args); err != nil {
|
||||
return err
|
||||
return false, err
|
||||
}
|
||||
} else {
|
||||
log.Infof("Using dynamic theme from %s: %s", opts.Kind, opts.Value)
|
||||
|
||||
matJSON, err := runMatugenDryRun(opts)
|
||||
if err != nil {
|
||||
return fmt.Errorf("matugen dry-run failed: %w", err)
|
||||
return false, fmt.Errorf("matugen dry-run failed: %w", err)
|
||||
}
|
||||
|
||||
primaryDark = extractMatugenColor(matJSON, "primary", "dark")
|
||||
@@ -233,7 +243,7 @@ func buildOnce(opts *Options) error {
|
||||
surface = extractMatugenColor(matJSON, "surface", "dark")
|
||||
|
||||
if primaryDark == "" {
|
||||
return fmt.Errorf("failed to extract primary color")
|
||||
return false, fmt.Errorf("failed to extract primary color")
|
||||
}
|
||||
if primaryLight == "" {
|
||||
primaryLight = primaryDark
|
||||
@@ -254,10 +264,15 @@ func buildOnce(opts *Options) error {
|
||||
args = append(args, "-m", string(opts.Mode), "-t", opts.MatugenType, "-c", cfgFile.Name())
|
||||
args = append(args, importArgs...)
|
||||
if err := runMatugen(args); err != nil {
|
||||
return err
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
|
||||
newColors, _ := os.ReadFile(opts.ColorsOutput())
|
||||
if bytes.Equal(oldColors, newColors) && len(oldColors) > 0 {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
if isDMSGTKActive(opts.ConfigDir) {
|
||||
switch opts.Mode {
|
||||
case ColorModeLight:
|
||||
@@ -275,7 +290,7 @@ func buildOnce(opts *Options) error {
|
||||
|
||||
signalTerminals(opts)
|
||||
|
||||
return nil
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func buildMergedConfig(opts *Options, cfgFile *os.File, tmpDir string) error {
|
||||
|
||||
@@ -2,6 +2,7 @@ package matugen
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"sync"
|
||||
|
||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
|
||||
@@ -93,10 +94,13 @@ func (q *Queue) runWorker() {
|
||||
err := Run(job.Options)
|
||||
|
||||
var result Result
|
||||
if err != nil {
|
||||
result = Result{Success: false, Error: err}
|
||||
} else {
|
||||
switch {
|
||||
case err == nil:
|
||||
result = Result{Success: true}
|
||||
case errors.Is(err, ErrNoChanges):
|
||||
result = Result{Success: true}
|
||||
default:
|
||||
result = Result{Success: false, Error: err}
|
||||
}
|
||||
|
||||
q.finishJob(result)
|
||||
|
||||
@@ -1062,62 +1062,6 @@ func (_c *MockBackend_GetWiFiNetworkDetails_Call) RunAndReturn(run func(string)
|
||||
return _c
|
||||
}
|
||||
|
||||
// GetWiFiQRCodeContent provides a mock function with given fields: ssid
|
||||
func (_m *MockBackend) GetWiFiQRCodeContent(ssid string) (string, error) {
|
||||
ret := _m.Called(ssid)
|
||||
|
||||
if len(ret) == 0 {
|
||||
panic("no return value specified for GetWiFiQRCodeContent")
|
||||
}
|
||||
|
||||
var r0 string
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(string) (string, error)); ok {
|
||||
return rf(ssid)
|
||||
}
|
||||
if rf, ok := ret.Get(0).(func(string) string); ok {
|
||||
r0 = rf(ssid)
|
||||
} else {
|
||||
r0 = ret.Get(0).(string)
|
||||
}
|
||||
|
||||
if rf, ok := ret.Get(1).(func(string) error); ok {
|
||||
r1 = rf(ssid)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// MockBackend_GetWiFiQRCodeContent_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetWiFiQRCodeContent'
|
||||
type MockBackend_GetWiFiQRCodeContent_Call struct {
|
||||
*mock.Call
|
||||
}
|
||||
|
||||
// GetWiFiQRCodeContent is a helper method to define mock.On call
|
||||
// - ssid string
|
||||
func (_e *MockBackend_Expecter) GetWiFiQRCodeContent(ssid interface{}) *MockBackend_GetWiFiQRCodeContent_Call {
|
||||
return &MockBackend_GetWiFiQRCodeContent_Call{Call: _e.mock.On("GetWiFiQRCodeContent", ssid)}
|
||||
}
|
||||
|
||||
func (_c *MockBackend_GetWiFiQRCodeContent_Call) Run(run func(ssid string)) *MockBackend_GetWiFiQRCodeContent_Call {
|
||||
_c.Call.Run(func(args mock.Arguments) {
|
||||
run(args[0].(string))
|
||||
})
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *MockBackend_GetWiFiQRCodeContent_Call) Return(_a0 string, _a1 error) *MockBackend_GetWiFiQRCodeContent_Call {
|
||||
_c.Call.Return(_a0, _a1)
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *MockBackend_GetWiFiQRCodeContent_Call) RunAndReturn(run func(string) (string, error)) *MockBackend_GetWiFiQRCodeContent_Call {
|
||||
_c.Call.Return(run)
|
||||
return _c
|
||||
}
|
||||
|
||||
// GetWiredConnections provides a mock function with no fields
|
||||
func (_m *MockBackend) GetWiredConnections() ([]network.WiredConnection, error) {
|
||||
ret := _m.Called()
|
||||
|
||||
@@ -10,7 +10,6 @@ type Backend interface {
|
||||
ScanWiFi() error
|
||||
ScanWiFiDevice(device string) error
|
||||
GetWiFiNetworkDetails(ssid string) (*NetworkInfoResponse, error)
|
||||
GetWiFiQRCodeContent(ssid string) (string, error)
|
||||
GetWiFiDevices() []WiFiDevice
|
||||
|
||||
ConnectWiFi(req ConnectionRequest) error
|
||||
|
||||
@@ -111,10 +111,6 @@ func (b *HybridIwdNetworkdBackend) GetWiFiNetworkDetails(ssid string) (*NetworkI
|
||||
return b.wifi.GetWiFiNetworkDetails(ssid)
|
||||
}
|
||||
|
||||
func (b *HybridIwdNetworkdBackend) GetWiFiQRCodeContent(ssid string) (string, error) {
|
||||
return b.wifi.GetWiFiQRCodeContent(ssid)
|
||||
}
|
||||
|
||||
func (b *HybridIwdNetworkdBackend) ConnectWiFi(req ConnectionRequest) error {
|
||||
if err := b.wifi.ConnectWiFi(req); err != nil {
|
||||
return err
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package network
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
import "fmt"
|
||||
|
||||
func (b *IWDBackend) GetWiredConnections() ([]WiredConnection, error) {
|
||||
return nil, fmt.Errorf("wired connections not supported by iwd")
|
||||
@@ -115,19 +112,3 @@ func (b *IWDBackend) getWiFiDevicesLocked() []WiFiDevice {
|
||||
Networks: b.state.WiFiNetworks,
|
||||
}}
|
||||
}
|
||||
|
||||
func (b *IWDBackend) GetWiFiQRCodeContent(ssid string) (string, error) {
|
||||
path := iwdConfigPath(ssid)
|
||||
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("no saved iwd config for `%s`: %w", ssid, err)
|
||||
}
|
||||
|
||||
passphrase, err := parseIWDPassphrase(string(data))
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to read passphrase for `%s`: %w", ssid, err)
|
||||
}
|
||||
|
||||
return FormatWiFiQRString("WPA", ssid, passphrase), nil
|
||||
}
|
||||
|
||||
@@ -18,10 +18,6 @@ func (b *SystemdNetworkdBackend) GetWiFiNetworkDetails(ssid string) (*NetworkInf
|
||||
return nil, fmt.Errorf("WiFi details not supported by networkd backend")
|
||||
}
|
||||
|
||||
func (b *SystemdNetworkdBackend) GetWiFiQRCodeContent(ssid string) (string, error) {
|
||||
return "", fmt.Errorf("WiFi QR Code not supported by networkd backend")
|
||||
}
|
||||
|
||||
func (b *SystemdNetworkdBackend) ConnectWiFi(req ConnectionRequest) error {
|
||||
return fmt.Errorf("WiFi connect not supported by networkd backend")
|
||||
}
|
||||
|
||||
@@ -196,65 +196,6 @@ func (b *NetworkManagerBackend) GetWiFiNetworkDetails(ssid string) (*NetworkInfo
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (b *NetworkManagerBackend) GetWiFiQRCodeContent(ssid string) (string, error) {
|
||||
conn, err := b.findConnection(ssid)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("no saved connection for `%s`: %w", ssid, err)
|
||||
}
|
||||
|
||||
connSettings, err := conn.GetSettings()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to get settings for `%s`: %w", ssid, err)
|
||||
}
|
||||
|
||||
secSettings, ok := connSettings["802-11-wireless-security"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("network `%s` has no security settings", ssid)
|
||||
}
|
||||
|
||||
keyMgmt, ok := secSettings["key-mgmt"].(string)
|
||||
if !ok {
|
||||
return "", fmt.Errorf("failed to identify security type of network `%s`", ssid)
|
||||
}
|
||||
|
||||
var securityType string
|
||||
switch keyMgmt {
|
||||
case "none":
|
||||
authAlg, _ := secSettings["auth-alg"].(string)
|
||||
switch authAlg {
|
||||
case "open":
|
||||
securityType = "nopass"
|
||||
default:
|
||||
securityType = "WEP"
|
||||
}
|
||||
case "ieee8021x":
|
||||
securityType = "WEP"
|
||||
default:
|
||||
securityType = "WPA"
|
||||
}
|
||||
|
||||
if securityType != "WPA" {
|
||||
return "", fmt.Errorf("QR code generation only supports WPA connections, `%s` uses %s", ssid, securityType)
|
||||
}
|
||||
|
||||
secrets, err := conn.GetSecrets("802-11-wireless-security")
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to retrieve connection secrets for `%s`: %w", ssid, err)
|
||||
}
|
||||
|
||||
secSecrets, ok := secrets["802-11-wireless-security"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("failed to retrieve password for `%s`", ssid)
|
||||
}
|
||||
|
||||
psk, ok := secSecrets["psk"].(string)
|
||||
if !ok {
|
||||
return "", fmt.Errorf("failed to retrieve password for `%s`", ssid)
|
||||
}
|
||||
|
||||
return FormatWiFiQRString(securityType, ssid, psk), nil
|
||||
}
|
||||
|
||||
func (b *NetworkManagerBackend) ConnectWiFi(req ConnectionRequest) error {
|
||||
devInfo, err := b.getWifiDeviceForConnection(req.Device)
|
||||
if err != nil {
|
||||
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net"
|
||||
"os"
|
||||
|
||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
|
||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/models"
|
||||
@@ -41,10 +40,6 @@ func HandleRequest(conn net.Conn, req models.Request, manager *Manager) {
|
||||
handleSetPreference(conn, req, manager)
|
||||
case "network.info":
|
||||
handleGetNetworkInfo(conn, req, manager)
|
||||
case "network.qrcode":
|
||||
handleGetNetworkQRCode(conn, req, manager)
|
||||
case "network.delete-qrcode":
|
||||
handleDeleteQRCode(conn, req, manager)
|
||||
case "network.ethernet.info":
|
||||
handleGetWiredNetworkInfo(conn, req, manager)
|
||||
case "network.subscribe":
|
||||
@@ -325,42 +320,6 @@ func handleGetNetworkInfo(conn net.Conn, req models.Request, manager *Manager) {
|
||||
models.Respond(conn, req.ID, network)
|
||||
}
|
||||
|
||||
func handleGetNetworkQRCode(conn net.Conn, req models.Request, manager *Manager) {
|
||||
ssid, err := params.String(req.Params, "ssid")
|
||||
if err != nil {
|
||||
models.RespondError(conn, req.ID, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
content, err := manager.GetNetworkQRCode(ssid)
|
||||
if err != nil {
|
||||
models.RespondError(conn, req.ID, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
models.Respond(conn, req.ID, content)
|
||||
}
|
||||
|
||||
func handleDeleteQRCode(conn net.Conn, req models.Request, _ *Manager) {
|
||||
path, err := params.String(req.Params, "path")
|
||||
if err != nil {
|
||||
models.RespondError(conn, req.ID, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if !isValidQRCodePath(path) {
|
||||
models.RespondError(conn, req.ID, "invalid QR code path")
|
||||
return
|
||||
}
|
||||
|
||||
if err := os.Remove(path); err != nil {
|
||||
models.RespondError(conn, req.ID, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
models.Respond(conn, req.ID, models.SuccessResult{Success: true, Message: "QR code file deleted"})
|
||||
}
|
||||
|
||||
func handleGetWiredNetworkInfo(conn net.Conn, req models.Request, manager *Manager) {
|
||||
uuid, err := params.String(req.Params, "uuid")
|
||||
if err != nil {
|
||||
|
||||
@@ -6,8 +6,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
|
||||
"github.com/yeqown/go-qrcode/v2"
|
||||
"github.com/yeqown/go-qrcode/writer/standard"
|
||||
)
|
||||
|
||||
func NewManager() (*Manager, error) {
|
||||
@@ -440,43 +438,6 @@ func (m *Manager) GetNetworkInfoDetailed(ssid string) (*NetworkInfoResponse, err
|
||||
return m.backend.GetWiFiNetworkDetails(ssid)
|
||||
}
|
||||
|
||||
func (m *Manager) GetNetworkQRCode(ssid string) ([2]string, error) {
|
||||
content, err := m.backend.GetWiFiQRCodeContent(ssid)
|
||||
if err != nil {
|
||||
return [2]string{}, err
|
||||
}
|
||||
|
||||
qrc, err := qrcode.New(content)
|
||||
if err != nil {
|
||||
return [2]string{}, fmt.Errorf("failed to create QR code for `%s`: %w", ssid, err)
|
||||
}
|
||||
|
||||
pathThemed, pathNormal := qrCodePaths(ssid)
|
||||
|
||||
wThemed, err := standard.New(
|
||||
pathThemed,
|
||||
standard.WithBuiltinImageEncoder(standard.PNG_FORMAT),
|
||||
standard.WithBgTransparent(),
|
||||
standard.WithFgColorRGBHex("#ffffff"),
|
||||
)
|
||||
if err != nil {
|
||||
return [2]string{}, fmt.Errorf("failed to create QR code writer: %w", err)
|
||||
}
|
||||
if err := qrc.Save(wThemed); err != nil {
|
||||
return [2]string{}, fmt.Errorf("failed to save QR code for `%s`: %w", ssid, err)
|
||||
}
|
||||
|
||||
wNormal, err := standard.New(pathNormal, standard.WithBuiltinImageEncoder(standard.PNG_FORMAT))
|
||||
if err != nil {
|
||||
return [2]string{}, fmt.Errorf("failed to create QR code writer: %w", err)
|
||||
}
|
||||
if err := qrc.Save(wNormal); err != nil {
|
||||
return [2]string{}, fmt.Errorf("failed to save QR code for `%s`: %w", ssid, err)
|
||||
}
|
||||
|
||||
return [2]string{pathThemed, pathNormal}, nil
|
||||
}
|
||||
|
||||
func (m *Manager) ToggleWiFi() error {
|
||||
enabled, err := m.backend.GetWiFiEnabled()
|
||||
if err != nil {
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
package network
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const qrCodeTmpPrefix = "/tmp/dank-wifi-qrcode-"
|
||||
|
||||
func FormatWiFiQRString(securityType, ssid, password string) string {
|
||||
return fmt.Sprintf("WIFI:T:%s;S:%s;P:%s;;", securityType, ssid, password)
|
||||
}
|
||||
|
||||
func qrCodePaths(ssid string) (themed, normal string) {
|
||||
safe := sanitizeSSIDForPath(ssid)
|
||||
themed = fmt.Sprintf("%s%s-themed.png", qrCodeTmpPrefix, safe)
|
||||
normal = fmt.Sprintf("%s%s-normal.png", qrCodeTmpPrefix, safe)
|
||||
return
|
||||
}
|
||||
|
||||
func isValidQRCodePath(path string) bool {
|
||||
clean := filepath.Clean(path)
|
||||
return strings.HasPrefix(clean, qrCodeTmpPrefix) && strings.HasSuffix(clean, ".png")
|
||||
}
|
||||
|
||||
var safePathChar = regexp.MustCompile(`[^a-zA-Z0-9_-]`)
|
||||
|
||||
func sanitizeSSIDForPath(ssid string) string {
|
||||
return safePathChar.ReplaceAllString(ssid, "_")
|
||||
}
|
||||
|
||||
var iwdVerbatimSSID = regexp.MustCompile(`^[a-zA-Z0-9 _-]+$`)
|
||||
|
||||
func iwdConfigPath(ssid string) string {
|
||||
switch {
|
||||
case iwdVerbatimSSID.MatchString(ssid):
|
||||
return fmt.Sprintf("/var/lib/iwd/%s.psk", ssid)
|
||||
default:
|
||||
return fmt.Sprintf("/var/lib/iwd/=%x.psk", []byte(ssid))
|
||||
}
|
||||
}
|
||||
|
||||
func parseIWDPassphrase(data string) (string, error) {
|
||||
inSecurity := false
|
||||
for _, line := range strings.Split(data, "\n") {
|
||||
line = strings.TrimSpace(line)
|
||||
switch {
|
||||
case line == "[Security]":
|
||||
inSecurity = true
|
||||
case strings.HasPrefix(line, "["):
|
||||
inSecurity = false
|
||||
case inSecurity && strings.HasPrefix(line, "Passphrase="):
|
||||
return strings.TrimPrefix(line, "Passphrase="), nil
|
||||
}
|
||||
}
|
||||
return "", fmt.Errorf("no passphrase found in iwd config")
|
||||
}
|
||||
@@ -27,12 +27,12 @@ override_dh_auto_build:
|
||||
# Verify core directory exists (native package format has source at root)
|
||||
test -d core || (echo "ERROR: core directory not found!" && exit 1)
|
||||
|
||||
# Pin go.mod and vendor/modules.txt to the installed Go toolchain version
|
||||
GO_INSTALLED=$$(go version | grep -oP 'go\K[0-9]+\.[0-9]+'); \
|
||||
sed -i "s/^go [0-9]\+\.[0-9]\+\(\.[0-9]*\)\?$$/go $${GO_INSTALLED}/" core/go.mod; \
|
||||
sed -i "s/^\(## explicit; go \)[0-9]\+\.[0-9]\+\(\.[0-9]*\)\?$$/\1$${GO_INSTALLED}/" core/vendor/modules.txt
|
||||
# Patch go.mod to use Go 1.24 base version (Debian 13 has 1.23.x, may vary)
|
||||
sed -i 's/^go 1\.24\.[0-9]*/go 1.24/' core/go.mod
|
||||
|
||||
# Build dms-cli (single shell to preserve variables; arch: Debian amd64/arm64 -> Makefile amd64/arm64)
|
||||
# Build dms-cli from source using vendored dependencies
|
||||
# Extract version info and build in single shell to preserve variables
|
||||
# Architecture mapping: Debian amd64/arm64 -> Makefile amd64/arm64
|
||||
VERSION="$(UPSTREAM_VERSION)"; \
|
||||
COMMIT=$$(echo "$(UPSTREAM_VERSION)" | grep -oP '(?<=git)[0-9]+\.[a-f0-9]+' | cut -d. -f2 | head -c8 || echo "unknown"); \
|
||||
if [ "$(DEB_HOST_ARCH)" = "amd64" ]; then \
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
%global debug_package %{nil}
|
||||
%global version {{{ git_repo_version }}}
|
||||
%global pkg_summary DankMaterialShell - Material 3 inspired shell for Wayland compositors
|
||||
%global go_toolchain_version 1.25.7
|
||||
|
||||
Name: dms
|
||||
Epoch: 2
|
||||
@@ -15,12 +14,12 @@ License: MIT
|
||||
URL: https://github.com/AvengeMedia/DankMaterialShell
|
||||
VCS: {{{ git_repo_vcs }}}
|
||||
Source0: {{{ git_repo_pack }}}
|
||||
Source1: https://go.dev/dl/go%{go_toolchain_version}.linux-amd64.tar.gz
|
||||
Source2: https://go.dev/dl/go%{go_toolchain_version}.linux-arm64.tar.gz
|
||||
|
||||
BuildRequires: git-core
|
||||
BuildRequires: gzip
|
||||
BuildRequires: golang >= 1.24
|
||||
BuildRequires: make
|
||||
BuildRequires: wget
|
||||
BuildRequires: systemd-rpm-macros
|
||||
|
||||
# Core requirements
|
||||
@@ -29,7 +28,7 @@ Requires: accountsservice
|
||||
Requires: dms-cli = %{epoch}:%{version}-%{release}
|
||||
Requires: dgop
|
||||
|
||||
# Core utilities (Recommended for DMS functionality)
|
||||
# Core utilities (Highly recommended for DMS functionality)
|
||||
Recommends: cava
|
||||
Recommends: danksearch
|
||||
Recommends: matugen
|
||||
@@ -67,28 +66,6 @@ Provides native DBus bindings, NetworkManager integration, and system utilities.
|
||||
VERSION="%{version}"
|
||||
COMMIT=$(echo "%{version}" | grep -oP '[a-f0-9]{7,}' | head -n1 || echo "unknown")
|
||||
|
||||
# Use pinned bundled Go toolchain (deterministic across chroots)
|
||||
case "%{_arch}" in
|
||||
x86_64)
|
||||
GO_TARBALL="%{_sourcedir}/go%{go_toolchain_version}.linux-amd64.tar.gz"
|
||||
;;
|
||||
aarch64)
|
||||
GO_TARBALL="%{_sourcedir}/go%{go_toolchain_version}.linux-arm64.tar.gz"
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported architecture for bundled Go: %{_arch}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
rm -rf .go
|
||||
tar -xzf "$GO_TARBALL"
|
||||
mv go .go
|
||||
export GOROOT="$PWD/.go"
|
||||
export PATH="$GOROOT/bin:$PATH"
|
||||
export GOTOOLCHAIN=local
|
||||
go version
|
||||
|
||||
cd core
|
||||
make dist VERSION="$VERSION" COMMIT="$COMMIT"
|
||||
|
||||
|
||||
@@ -56,10 +56,8 @@ mkdir -p $HOME $GOCACHE $GOMODCACHE
|
||||
# OBS has no network access, so use local toolchain only
|
||||
export GOTOOLCHAIN=local
|
||||
|
||||
# Pin go.mod and vendor/modules.txt to the installed Go toolchain version
|
||||
GO_INSTALLED=$(go version | grep -oP 'go\K[0-9]+\.[0-9]+')
|
||||
sed -i "s/^go [0-9]\+\.[0-9]\+\(\.[0-9]*\)\?$/go ${GO_INSTALLED}/" core/go.mod
|
||||
sed -i "s/^\(## explicit; go \)[0-9]\+\.[0-9]\+\(\.[0-9]*\)\?$/\1${GO_INSTALLED}/" core/vendor/modules.txt
|
||||
# Patch go.mod to use base Go version (e.g., go 1.24 instead of go 1.24.6)
|
||||
sed -i 's/^go 1\.24\.[0-9]*/go 1.24/' core/go.mod
|
||||
|
||||
# Extract version info for embedding in binary
|
||||
VERSION="%{version}"
|
||||
|
||||
@@ -1 +1 @@
|
||||
The Wolverine
|
||||
Saffron Bloom
|
||||
|
||||
@@ -3,6 +3,7 @@ pragma ComponentBehavior: Bound
|
||||
|
||||
import Quickshell
|
||||
import QtCore
|
||||
import qs.Services
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
@@ -83,7 +84,12 @@ Singleton {
|
||||
if (desktopEntry && desktopEntry.icon) {
|
||||
return Quickshell.iconPath(desktopEntry.icon, true);
|
||||
}
|
||||
return Quickshell.iconPath(appId, true);
|
||||
|
||||
const icon = Quickshell.iconPath(appId, true);
|
||||
if (icon && icon !== "")
|
||||
return icon;
|
||||
|
||||
return DesktopService.resolveIconPath(appId);
|
||||
}
|
||||
|
||||
function getAppName(appId: string, desktopEntry: var): string {
|
||||
|
||||
@@ -575,7 +575,7 @@ Singleton {
|
||||
"maximizeWidgetIcons": false,
|
||||
"maximizeWidgetText": false,
|
||||
"removeWidgetPadding": false,
|
||||
"widgetPadding": 12,
|
||||
"widgetPadding": 8,
|
||||
"gothCornersEnabled": false,
|
||||
"gothCornerRadiusOverride": false,
|
||||
"gothCornerRadiusValue": 12,
|
||||
|
||||
@@ -398,7 +398,7 @@ var SPEC = {
|
||||
maximizeWidgetIcons: false,
|
||||
maximizeWidgetText: false,
|
||||
removeWidgetPadding: false,
|
||||
widgetPadding: 12,
|
||||
widgetPadding: 8,
|
||||
gothCornersEnabled: false,
|
||||
gothCornerRadiusOverride: false,
|
||||
gothCornerRadiusValue: 12,
|
||||
|
||||
@@ -142,25 +142,45 @@ Item {
|
||||
fadeDpmsWindowLoader.item.cancelFade();
|
||||
}
|
||||
}
|
||||
|
||||
function onRequestMonitorOn() {
|
||||
if (!fadeDpmsWindowLoader.item)
|
||||
return;
|
||||
fadeDpmsWindowLoader.item.cancelFade();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
property string _barLayoutStateJson: {
|
||||
const configs = SettingsData.barConfigs;
|
||||
const mapped = configs.map(c => ({
|
||||
id: c.id,
|
||||
position: c.position,
|
||||
autoHide: c.autoHide,
|
||||
visible: c.visible
|
||||
})).sort((a, b) => {
|
||||
const aVertical = a.position === SettingsData.Position.Left || a.position === SettingsData.Position.Right;
|
||||
const bVertical = b.position === SettingsData.Position.Left || b.position === SettingsData.Position.Right;
|
||||
if (aVertical !== bVertical) {
|
||||
return aVertical - bVertical;
|
||||
}
|
||||
return String(a.id).localeCompare(String(b.id));
|
||||
});
|
||||
return JSON.stringify(mapped);
|
||||
}
|
||||
|
||||
on_BarLayoutStateJsonChanged: {
|
||||
if (typeof dockRecreateDebounce !== "undefined") {
|
||||
dockRecreateDebounce.restart();
|
||||
}
|
||||
}
|
||||
|
||||
Repeater {
|
||||
id: dankBarRepeater
|
||||
model: ScriptModel {
|
||||
id: barRepeaterModel
|
||||
values: {
|
||||
const configs = SettingsData.barConfigs;
|
||||
return configs.map(c => ({
|
||||
id: c.id,
|
||||
position: c.position
|
||||
})).sort((a, b) => {
|
||||
const aVertical = a.position === SettingsData.Position.Left || a.position === SettingsData.Position.Right;
|
||||
const bVertical = b.position === SettingsData.Position.Left || b.position === SettingsData.Position.Right;
|
||||
return aVertical - bVertical;
|
||||
});
|
||||
}
|
||||
values: JSON.parse(root._barLayoutStateJson)
|
||||
}
|
||||
|
||||
property var hyprlandOverviewLoaderRef: hyprlandOverviewLoader
|
||||
@@ -207,13 +227,6 @@ Item {
|
||||
PolkitService.polkitAvailable;
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: SettingsData
|
||||
function onBarConfigsChanged() {
|
||||
dockRecreateDebounce.restart();
|
||||
}
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: dockLoader
|
||||
active: root.dockEnabled
|
||||
@@ -265,6 +278,7 @@ Item {
|
||||
sourceComponent: Component {
|
||||
DankDashPopout {
|
||||
id: dankDashPopout
|
||||
onPopoutClosed: PopoutService.unloadDankDash()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -284,8 +298,13 @@ Item {
|
||||
|
||||
active: false
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.notificationCenterLoader = notificationCenterLoader;
|
||||
}
|
||||
|
||||
NotificationCenterPopout {
|
||||
id: notificationCenter
|
||||
onPopoutClosed: PopoutService.unloadNotificationCenter()
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.notificationCenterPopout = notificationCenter;
|
||||
@@ -309,10 +328,15 @@ Item {
|
||||
property var modalRef: colorPickerModal
|
||||
property LazyLoader powerModalLoaderRef: powerMenuModalLoader
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.controlCenterLoader = controlCenterLoader;
|
||||
}
|
||||
|
||||
ControlCenterPopout {
|
||||
id: controlCenterPopout
|
||||
colorPickerModal: controlCenterLoader.modalRef
|
||||
powerMenuModalLoader: controlCenterLoader.powerModalLoaderRef
|
||||
onPopoutClosed: PopoutService.unloadControlCenter()
|
||||
|
||||
onLockRequested: {
|
||||
lock.activate();
|
||||
@@ -341,23 +365,6 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
LazyLoader {
|
||||
id: wifiQRCodeModalLoader
|
||||
active: false
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.wifiQRCodeModalLoader = wifiQRCodeModalLoader;
|
||||
}
|
||||
|
||||
WifiQRCodeModal {
|
||||
id: wifiQRCodeModalItem
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.wifiQRCodeModal = wifiQRCodeModalItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LazyLoader {
|
||||
id: polkitAuthModalLoader
|
||||
active: false
|
||||
@@ -437,8 +444,13 @@ Item {
|
||||
|
||||
active: false
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.batteryPopoutLoader = batteryPopoutLoader;
|
||||
}
|
||||
|
||||
BatteryPopout {
|
||||
id: batteryPopout
|
||||
onPopoutClosed: PopoutService.unloadBattery()
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.batteryPopout = batteryPopout;
|
||||
@@ -451,8 +463,13 @@ Item {
|
||||
|
||||
active: false
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.layoutPopoutLoader = layoutPopoutLoader;
|
||||
}
|
||||
|
||||
DWLLayoutPopout {
|
||||
id: layoutPopout
|
||||
onPopoutClosed: PopoutService.unloadLayoutPopout()
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.layoutPopout = layoutPopout;
|
||||
@@ -465,8 +482,13 @@ Item {
|
||||
|
||||
active: false
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.vpnPopoutLoader = vpnPopoutLoader;
|
||||
}
|
||||
|
||||
VpnPopout {
|
||||
id: vpnPopout
|
||||
onPopoutClosed: PopoutService.unloadVpn()
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.vpnPopout = vpnPopout;
|
||||
@@ -479,8 +501,13 @@ Item {
|
||||
|
||||
active: false
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.processListPopoutLoader = processListPopoutLoader;
|
||||
}
|
||||
|
||||
ProcessListPopout {
|
||||
id: processListPopout
|
||||
onPopoutClosed: PopoutService.unloadProcessListPopout()
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.processListPopout = processListPopout;
|
||||
@@ -523,8 +550,13 @@ Item {
|
||||
|
||||
active: false
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.appDrawerLoader = appDrawerLoader;
|
||||
}
|
||||
|
||||
AppDrawerPopout {
|
||||
id: appDrawerPopout
|
||||
onPopoutClosed: PopoutService.unloadAppDrawer()
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.appDrawerPopout = appDrawerPopout;
|
||||
@@ -556,8 +588,13 @@ Item {
|
||||
|
||||
active: false
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.clipboardHistoryPopoutLoader = clipboardHistoryPopoutLoader;
|
||||
}
|
||||
|
||||
ClipboardHistoryPopout {
|
||||
id: clipboardHistoryPopout
|
||||
onPopoutClosed: PopoutService.unloadClipboardHistoryPopout()
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.clipboardHistoryPopout = clipboardHistoryPopout;
|
||||
@@ -732,8 +769,13 @@ Item {
|
||||
|
||||
active: false
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.systemUpdateLoader = systemUpdateLoader;
|
||||
}
|
||||
|
||||
SystemUpdatePopout {
|
||||
id: systemUpdatePopout
|
||||
onPopoutClosed: PopoutService.unloadSystemUpdate()
|
||||
|
||||
Component.onCompleted: {
|
||||
PopoutService.systemUpdatePopout = systemUpdatePopout;
|
||||
|
||||
@@ -162,11 +162,6 @@ Item {
|
||||
}
|
||||
]
|
||||
|
||||
property string fileSearchType: "all"
|
||||
property string fileSearchExt: ""
|
||||
property string fileSearchFolder: ""
|
||||
property string fileSearchSort: "score"
|
||||
|
||||
property string pluginFilter: ""
|
||||
property string activePluginName: ""
|
||||
property var activePluginCategories: []
|
||||
@@ -351,10 +346,6 @@ Item {
|
||||
previousSearchMode = "all";
|
||||
autoSwitchedToFiles = false;
|
||||
isFileSearching = false;
|
||||
fileSearchType = "all";
|
||||
fileSearchExt = "";
|
||||
fileSearchFolder = "";
|
||||
fileSearchSort = "score";
|
||||
sections = [];
|
||||
flatModel = [];
|
||||
selectedFlatIndex = 0;
|
||||
@@ -408,34 +399,6 @@ Item {
|
||||
performSearch();
|
||||
}
|
||||
|
||||
function setFileSearchType(type) {
|
||||
if (fileSearchType === type)
|
||||
return;
|
||||
fileSearchType = type;
|
||||
performFileSearch();
|
||||
}
|
||||
|
||||
function setFileSearchExt(ext) {
|
||||
if (fileSearchExt === ext)
|
||||
return;
|
||||
fileSearchExt = ext;
|
||||
performFileSearch();
|
||||
}
|
||||
|
||||
function setFileSearchFolder(folder) {
|
||||
if (fileSearchFolder === folder)
|
||||
return;
|
||||
fileSearchFolder = folder;
|
||||
performFileSearch();
|
||||
}
|
||||
|
||||
function setFileSearchSort(sort) {
|
||||
if (fileSearchSort === sort)
|
||||
return;
|
||||
fileSearchSort = sort;
|
||||
performFileSearch();
|
||||
}
|
||||
|
||||
function clearPluginFilter() {
|
||||
if (pluginFilter) {
|
||||
pluginFilter = "";
|
||||
@@ -864,20 +827,10 @@ Item {
|
||||
var params = {
|
||||
limit: 20,
|
||||
fuzzy: true,
|
||||
sort: fileSearchSort || "score",
|
||||
sort: "score",
|
||||
desc: true
|
||||
};
|
||||
|
||||
if (DSearchService.supportsTypeFilter) {
|
||||
params.type = (fileSearchType && fileSearchType !== "all") ? fileSearchType : "all";
|
||||
}
|
||||
if (fileSearchExt) {
|
||||
params.ext = fileSearchExt;
|
||||
}
|
||||
if (fileSearchFolder) {
|
||||
params.folder = fileSearchFolder;
|
||||
}
|
||||
|
||||
DSearchService.search(fileQuery, params, function (response) {
|
||||
isFileSearching = false;
|
||||
if (response.error)
|
||||
@@ -887,73 +840,34 @@ Item {
|
||||
|
||||
for (var i = 0; i < hits.length; i++) {
|
||||
var hit = hits[i];
|
||||
var docTypes = hit.locations?.doc_type;
|
||||
var isDir = docTypes ? !!docTypes["dir"] : false;
|
||||
fileItems.push(transformFileResult({
|
||||
path: hit.id || "",
|
||||
score: hit.score || 0,
|
||||
is_dir: isDir
|
||||
score: hit.score || 0
|
||||
}));
|
||||
}
|
||||
|
||||
var fileSections = [];
|
||||
var showType = fileSearchType || "all";
|
||||
|
||||
if (showType === "all" && DSearchService.supportsTypeFilter) {
|
||||
var onlyFiles = [];
|
||||
var onlyDirs = [];
|
||||
for (var j = 0; j < fileItems.length; j++) {
|
||||
if (fileItems[j].data?.is_dir)
|
||||
onlyDirs.push(fileItems[j]);
|
||||
else
|
||||
onlyFiles.push(fileItems[j]);
|
||||
}
|
||||
if (onlyFiles.length > 0) {
|
||||
fileSections.push({
|
||||
id: "files",
|
||||
title: I18n.tr("Files"),
|
||||
icon: "insert_drive_file",
|
||||
priority: 4,
|
||||
items: onlyFiles,
|
||||
collapsed: collapsedSections["files"] || false,
|
||||
flatStartIndex: 0
|
||||
});
|
||||
}
|
||||
if (onlyDirs.length > 0) {
|
||||
fileSections.push({
|
||||
id: "folders",
|
||||
title: I18n.tr("Folders"),
|
||||
icon: "folder",
|
||||
priority: 4.1,
|
||||
items: onlyDirs,
|
||||
collapsed: collapsedSections["folders"] || false,
|
||||
flatStartIndex: 0
|
||||
});
|
||||
}
|
||||
} else {
|
||||
var filesIcon = showType === "dir" ? "folder" : showType === "file" ? "insert_drive_file" : "folder";
|
||||
var filesTitle = showType === "dir" ? I18n.tr("Folders") : I18n.tr("Files");
|
||||
if (fileItems.length > 0) {
|
||||
fileSections.push({
|
||||
id: "files",
|
||||
title: filesTitle,
|
||||
icon: filesIcon,
|
||||
priority: 4,
|
||||
items: fileItems,
|
||||
collapsed: collapsedSections["files"] || false,
|
||||
flatStartIndex: 0
|
||||
});
|
||||
}
|
||||
}
|
||||
var fileSection = {
|
||||
id: "files",
|
||||
title: I18n.tr("Files"),
|
||||
icon: "folder",
|
||||
priority: 4,
|
||||
items: fileItems,
|
||||
collapsed: collapsedSections["files"] || false,
|
||||
flatStartIndex: 0
|
||||
};
|
||||
|
||||
var newSections;
|
||||
if (searchMode === "files") {
|
||||
newSections = fileSections;
|
||||
newSections = fileItems.length > 0 ? [fileSection] : [];
|
||||
} else {
|
||||
var existingNonFile = sections.filter(function (s) {
|
||||
return s.id !== "files" && s.id !== "folders";
|
||||
return s.id !== "files";
|
||||
});
|
||||
newSections = existingNonFile.concat(fileSections);
|
||||
if (fileItems.length > 0) {
|
||||
newSections = existingNonFile.concat([fileSection]);
|
||||
} else {
|
||||
newSections = existingNonFile;
|
||||
}
|
||||
}
|
||||
newSections.sort(function (a, b) {
|
||||
return a.priority - b.priority;
|
||||
@@ -999,7 +913,7 @@ Item {
|
||||
}
|
||||
|
||||
function transformFileResult(file) {
|
||||
return Transform.transformFileResult(file, I18n.tr("Open"), I18n.tr("Open folder"), I18n.tr("Copy path"), I18n.tr("Open in terminal"));
|
||||
return Transform.transformFileResult(file, I18n.tr("Open"), I18n.tr("Open folder"), I18n.tr("Copy path"));
|
||||
}
|
||||
|
||||
function detectTrigger(query) {
|
||||
@@ -1667,9 +1581,6 @@ Item {
|
||||
case "copy_path":
|
||||
copyToClipboard(item.data.path);
|
||||
break;
|
||||
case "open_terminal":
|
||||
openTerminal(item.data.path);
|
||||
break;
|
||||
case "copy":
|
||||
copyToClipboard(item.name);
|
||||
break;
|
||||
@@ -1751,16 +1662,6 @@ Item {
|
||||
Qt.openUrlExternally("file://" + folder);
|
||||
}
|
||||
|
||||
function openTerminal(path) {
|
||||
if (!path)
|
||||
return;
|
||||
var terminal = Quickshell.env("TERMINAL") || "xterm";
|
||||
Quickshell.execDetached({
|
||||
command: [terminal],
|
||||
workingDirectory: path
|
||||
});
|
||||
}
|
||||
|
||||
function copyToClipboard(text) {
|
||||
if (!text)
|
||||
return;
|
||||
|
||||
@@ -107,10 +107,6 @@ Item {
|
||||
spotlightContent.controller.activePluginId = "";
|
||||
spotlightContent.controller.activePluginName = "";
|
||||
spotlightContent.controller.pluginFilter = "";
|
||||
spotlightContent.controller.fileSearchType = "all";
|
||||
spotlightContent.controller.fileSearchExt = "";
|
||||
spotlightContent.controller.fileSearchFolder = "";
|
||||
spotlightContent.controller.fileSearchSort = "score";
|
||||
spotlightContent.controller.collapsedSections = {};
|
||||
spotlightContent.controller.selectedFlatIndex = 0;
|
||||
spotlightContent.controller.selectedItem = null;
|
||||
|
||||
@@ -116,43 +116,31 @@ function transformBuiltInLauncherItem(item, pluginId, openLabel) {
|
||||
};
|
||||
}
|
||||
|
||||
function transformFileResult(file, openLabel, openFolderLabel, copyPathLabel, openTerminalLabel) {
|
||||
function transformFileResult(file, openLabel, openFolderLabel, copyPathLabel) {
|
||||
var filename = file.path ? file.path.split("/").pop() : "";
|
||||
var dirname = file.path ? file.path.substring(0, file.path.lastIndexOf("/")) : "";
|
||||
var isDir = file.is_dir || false;
|
||||
|
||||
var actions = [];
|
||||
if (isDir) {
|
||||
if (openTerminalLabel) {
|
||||
actions.push({
|
||||
name: openTerminalLabel,
|
||||
icon: "terminal",
|
||||
action: "open_terminal"
|
||||
});
|
||||
}
|
||||
} else {
|
||||
actions.push({
|
||||
name: openFolderLabel,
|
||||
icon: "folder_open",
|
||||
action: "open_folder"
|
||||
});
|
||||
}
|
||||
actions.push({
|
||||
name: copyPathLabel,
|
||||
icon: "content_copy",
|
||||
action: "copy_path"
|
||||
});
|
||||
|
||||
return {
|
||||
id: file.path || "",
|
||||
type: "file",
|
||||
name: filename,
|
||||
subtitle: dirname,
|
||||
icon: isDir ? "folder" : Utils.getFileIcon(filename),
|
||||
icon: Utils.getFileIcon(filename),
|
||||
iconType: "material",
|
||||
section: "files",
|
||||
data: file,
|
||||
actions: actions,
|
||||
actions: [
|
||||
{
|
||||
name: openFolderLabel,
|
||||
icon: "folder_open",
|
||||
action: "open_folder"
|
||||
},
|
||||
{
|
||||
name: copyPathLabel,
|
||||
icon: "content_copy",
|
||||
action: "copy_path"
|
||||
}
|
||||
],
|
||||
primaryAction: {
|
||||
name: openLabel,
|
||||
icon: "open_in_new",
|
||||
|
||||
@@ -549,151 +549,8 @@ FocusScope {
|
||||
}
|
||||
|
||||
Item {
|
||||
id: fileFilterRow
|
||||
width: parent.width
|
||||
height: showFileFilters ? fileFilterContent.height : 0
|
||||
visible: showFileFilters
|
||||
|
||||
readonly property bool showFileFilters: controller.searchMode === "files"
|
||||
|
||||
Behavior on height {
|
||||
NumberAnimation {
|
||||
duration: Theme.shortDuration
|
||||
easing.type: Theme.standardEasing
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
id: fileFilterContent
|
||||
width: parent.width
|
||||
spacing: Theme.spacingS
|
||||
|
||||
Row {
|
||||
id: typeChips
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: 2
|
||||
visible: DSearchService.supportsTypeFilter
|
||||
|
||||
Repeater {
|
||||
model: [
|
||||
{
|
||||
id: "all",
|
||||
label: I18n.tr("All"),
|
||||
icon: "search"
|
||||
},
|
||||
{
|
||||
id: "file",
|
||||
label: I18n.tr("Files"),
|
||||
icon: "insert_drive_file"
|
||||
},
|
||||
{
|
||||
id: "dir",
|
||||
label: I18n.tr("Folders"),
|
||||
icon: "folder"
|
||||
}
|
||||
]
|
||||
|
||||
Rectangle {
|
||||
required property var modelData
|
||||
required property int index
|
||||
|
||||
width: chipContent.width + Theme.spacingM * 2
|
||||
height: sortDropdown.height
|
||||
radius: Theme.cornerRadius
|
||||
color: controller.fileSearchType === modelData.id || chipArea.containsMouse ? Theme.primaryContainer : "transparent"
|
||||
|
||||
Row {
|
||||
id: chipContent
|
||||
anchors.centerIn: parent
|
||||
spacing: Theme.spacingXS
|
||||
|
||||
DankIcon {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
name: modelData.icon
|
||||
size: 14
|
||||
color: controller.fileSearchType === modelData.id ? Theme.primary : Theme.surfaceVariantText
|
||||
}
|
||||
|
||||
StyledText {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: modelData.label
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: controller.fileSearchType === modelData.id ? Theme.primary : Theme.surfaceText
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: chipArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: controller.setFileSearchType(modelData.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: 1
|
||||
height: 20
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
color: Theme.outlineMedium
|
||||
visible: typeChips.visible
|
||||
}
|
||||
|
||||
DankDropdown {
|
||||
id: sortDropdown
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: Math.min(130, parent.width / 3)
|
||||
compactMode: true
|
||||
dropdownWidth: 130
|
||||
popupWidth: 150
|
||||
maxPopupHeight: 200
|
||||
currentValue: {
|
||||
switch (controller.fileSearchSort) {
|
||||
case "score":
|
||||
return I18n.tr("Score");
|
||||
case "name":
|
||||
return I18n.tr("Name");
|
||||
case "modified":
|
||||
return I18n.tr("Modified");
|
||||
case "size":
|
||||
return I18n.tr("Size");
|
||||
default:
|
||||
return I18n.tr("Score");
|
||||
}
|
||||
}
|
||||
options: [I18n.tr("Score"), I18n.tr("Name"), I18n.tr("Modified"), I18n.tr("Size")]
|
||||
|
||||
onValueChanged: value => {
|
||||
var sortMap = {};
|
||||
sortMap[I18n.tr("Score")] = "score";
|
||||
sortMap[I18n.tr("Name")] = "name";
|
||||
sortMap[I18n.tr("Modified")] = "modified";
|
||||
sortMap[I18n.tr("Size")] = "size";
|
||||
controller.setFileSearchSort(sortMap[value] || "score");
|
||||
}
|
||||
}
|
||||
|
||||
DankTextField {
|
||||
id: extFilterField
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: Math.min(100, parent.width / 4)
|
||||
height: sortDropdown.height
|
||||
placeholderText: I18n.tr("ext")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
showClearButton: text.length > 0
|
||||
|
||||
onTextChanged: {
|
||||
controller.setFileSearchExt(text.trim());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
width: parent.width
|
||||
height: parent.height - searchField.height - categoryRow.height - fileFilterRow.height - actionPanel.height - Theme.spacingXS * ((categoryRow.visible ? 1 : 0) + (fileFilterRow.visible ? 1 : 0) + 2)
|
||||
height: parent.height - searchField.height - categoryRow.height - actionPanel.height - Theme.spacingXS * (categoryRow.visible ? 3 : 2)
|
||||
opacity: root.parentModal?.isClosing ? 0 : 1
|
||||
|
||||
ResultsList {
|
||||
@@ -729,9 +586,6 @@ FocusScope {
|
||||
function onSearchQueryRequested(query) {
|
||||
searchField.text = query;
|
||||
}
|
||||
function onModeChanged() {
|
||||
extFilterField.text = "";
|
||||
}
|
||||
}
|
||||
|
||||
FocusScope {
|
||||
|
||||
@@ -113,7 +113,6 @@ Rectangle {
|
||||
font.family: Theme.fontFamily
|
||||
color: Theme.surfaceVariantText
|
||||
elide: Text.ElideRight
|
||||
clip: true
|
||||
visible: (root.item?.subtitle ?? "").length > 0
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
}
|
||||
@@ -182,7 +181,7 @@ Rectangle {
|
||||
case "plugin":
|
||||
return I18n.tr("Plugin");
|
||||
case "file":
|
||||
return root.item.data?.is_dir ? I18n.tr("Folder") : I18n.tr("File");
|
||||
return I18n.tr("File");
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -435,15 +435,7 @@ Item {
|
||||
var mode = root.controller?.searchMode ?? "all";
|
||||
switch (mode) {
|
||||
case "files":
|
||||
var fileType = root.controller?.fileSearchType ?? "all";
|
||||
switch (fileType) {
|
||||
case "dir":
|
||||
return "folder_open";
|
||||
case "file":
|
||||
return "insert_drive_file";
|
||||
default:
|
||||
return "folder_open";
|
||||
}
|
||||
return "folder_open";
|
||||
case "plugins":
|
||||
return "extension";
|
||||
case "apps":
|
||||
@@ -473,15 +465,7 @@ Item {
|
||||
return I18n.tr("Type to search files");
|
||||
if (root.controller.searchQuery.length < 2)
|
||||
return I18n.tr("Type at least 2 characters");
|
||||
var fileType = root.controller?.fileSearchType ?? "all";
|
||||
switch (fileType) {
|
||||
case "dir":
|
||||
return I18n.tr("No folders found");
|
||||
case "file":
|
||||
return I18n.tr("No files found");
|
||||
default:
|
||||
return I18n.tr("No results found");
|
||||
}
|
||||
return I18n.tr("No files found");
|
||||
case "plugins":
|
||||
return hasQuery ? I18n.tr("No plugin results") : I18n.tr("Browse or search plugins");
|
||||
case "apps":
|
||||
|
||||
@@ -1,170 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Effects
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import qs.Modals.Common
|
||||
import qs.Modals.FileBrowser
|
||||
import qs.Common
|
||||
import qs.Services
|
||||
import qs.Widgets
|
||||
|
||||
DankModal {
|
||||
id: root
|
||||
visible: false
|
||||
layerNamespace: "dms:wifi-qrcode"
|
||||
|
||||
property bool disablePopupTransparency: true
|
||||
property string wifiSSID: ""
|
||||
property string themedQrCodePath: ""
|
||||
property string normalQrCodePath: ""
|
||||
modalWidth: 420
|
||||
modalHeight: 480
|
||||
onBackgroundClicked: hide()
|
||||
onOpened: {
|
||||
Qt.callLater(() => {
|
||||
modalFocusScope.forceActiveFocus();
|
||||
contentLoader.item.wifiSSID = wifiSSID;
|
||||
contentLoader.item.themedQrCodePath = themedQrCodePath;
|
||||
contentLoader.item.saveBrowserLoader = saveBrowserLoader;
|
||||
});
|
||||
}
|
||||
|
||||
function show(ssid) {
|
||||
wifiSSID = ssid;
|
||||
fetchNetworkQRCode(ssid);
|
||||
}
|
||||
|
||||
function hide() {
|
||||
if (themedQrCodePath !== "") {
|
||||
deleteQRCodeFile(themedQrCodePath);
|
||||
}
|
||||
if (normalQrCodePath !== "") {
|
||||
deleteQRCodeFile(normalQrCodePath);
|
||||
}
|
||||
close();
|
||||
}
|
||||
|
||||
function fetchNetworkQRCode(ssid) {
|
||||
// TODO: Add loading UI?
|
||||
|
||||
DMSService.sendRequest("network.qrcode", {
|
||||
ssid: ssid
|
||||
}, response => {
|
||||
if (response.error) {
|
||||
ToastService.showError("Failed to fetch network QR code: ", JSON.stringify(response.error));
|
||||
} else if (response.result) {
|
||||
themedQrCodePath = response.result[0];
|
||||
normalQrCodePath = response.result[1];
|
||||
open();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function deleteQRCodeFile(path) {
|
||||
DMSService.sendRequest("network.delete-qrcode", {
|
||||
path: path
|
||||
}, response => {
|
||||
if (response.error) {
|
||||
ToastService.showError(`Failed to remove QR code at ${path}: `, JSON.stringify(response.error));
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
LazyLoader {
|
||||
id: saveBrowserLoader
|
||||
active: false
|
||||
|
||||
FileBrowserSurfaceModal {
|
||||
id: saveBrowser
|
||||
|
||||
browserTitle: I18n.tr("Save QR Code")
|
||||
browserIcon: "qr_code"
|
||||
browserType: "default"
|
||||
fileExtensions: ["*.png"]
|
||||
allowStacking: true
|
||||
saveMode: true
|
||||
defaultFileName: `${root.wifiSSID ?? "wifi-qrcode"}.png`
|
||||
onFileSelected: path => {
|
||||
const cleanPath = decodeURI(path.toString().replace(/^file:\/\//, ''));
|
||||
const fileName = cleanPath.split('/').pop();
|
||||
const fileUrl = "file://" + cleanPath;
|
||||
|
||||
copyQrCodeProcess.exec(["cp", root.normalQrCodePath, cleanPath, "-f"])
|
||||
}
|
||||
|
||||
Process {
|
||||
id: copyQrCodeProcess
|
||||
stdout: StdioCollector {
|
||||
onStreamFinished: {
|
||||
saveBrowser.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
content: Component {
|
||||
Item {
|
||||
id: theItem
|
||||
property alias themedQrCodePath: qrCodeImg.source
|
||||
property var saveBrowserLoader: null
|
||||
property string wifiSSID: ""
|
||||
anchors.fill: parent
|
||||
|
||||
Column {
|
||||
anchors.fill: parent
|
||||
anchors.margins: Theme.spacingL
|
||||
spacing: Theme.spacingL
|
||||
|
||||
RowLayout {
|
||||
id: modalTitle
|
||||
width: parent.width
|
||||
|
||||
StyledText {
|
||||
text: I18n.tr("WiFi QR code for ") + theItem.wifiSSID
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
color: Theme.surfaceText
|
||||
font.weight: Font.Bold
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
}
|
||||
|
||||
DankActionButton {
|
||||
iconName: "save"
|
||||
iconSize: Theme.iconSize - 4
|
||||
iconColor: Theme.surfaceText
|
||||
onClicked: {
|
||||
saveBrowserLoader.active = true;
|
||||
if (saveBrowserLoader.item) {
|
||||
saveBrowserLoader.item.open();
|
||||
}
|
||||
}
|
||||
Layout.alignment: Qt.AlignRight
|
||||
}
|
||||
|
||||
DankActionButton {
|
||||
iconName: "close"
|
||||
iconSize: Theme.iconSize - 4
|
||||
iconColor: Theme.surfaceText
|
||||
onClicked: root.hide()
|
||||
Layout.alignment: Qt.AlignRight
|
||||
}
|
||||
}
|
||||
|
||||
Image {
|
||||
id: qrCodeImg
|
||||
height: parent.height - parent.spacing - modalTitle.height
|
||||
width: height
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
MultiEffect {
|
||||
source: qrCodeImg
|
||||
anchors.fill: source
|
||||
colorization: 1.0
|
||||
colorizationColor: Theme.primary
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -85,12 +85,12 @@ Variants {
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (typeof blurWallpaperWindow.updatesEnabled !== "undefined")
|
||||
blurWallpaperWindow.updatesEnabled = Qt.binding(() => root.effectActive || root._renderSettling || currentWallpaper.status === Image.Loading || nextWallpaper.status === Image.Loading);
|
||||
|
||||
if (!source) {
|
||||
isInitialized = true;
|
||||
return;
|
||||
root._renderSettling = false;
|
||||
}
|
||||
const formattedSource = source.startsWith("file://") ? source : encodeFileUrl(source);
|
||||
setWallpaperImmediate(formattedSource);
|
||||
isInitialized = true;
|
||||
}
|
||||
|
||||
@@ -98,8 +98,25 @@ Variants {
|
||||
property real transitionProgress: 0
|
||||
readonly property bool transitioning: transitionAnimation.running
|
||||
property bool effectActive: false
|
||||
property bool _renderSettling: true
|
||||
property bool useNextForEffect: false
|
||||
|
||||
Connections {
|
||||
target: currentWallpaper
|
||||
function onStatusChanged() {
|
||||
if (currentWallpaper.status === Image.Ready) {
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: renderSettleTimer
|
||||
interval: 100
|
||||
onTriggered: root._renderSettling = false
|
||||
}
|
||||
|
||||
onSourceChanged: {
|
||||
if (!source || source.startsWith("#")) {
|
||||
setWallpaperImmediate("");
|
||||
@@ -124,6 +141,8 @@ Variants {
|
||||
transitionAnimation.stop();
|
||||
root.transitionProgress = 0.0;
|
||||
root.effectActive = false;
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
currentWallpaper.source = newSource;
|
||||
nextWallpaper.source = "";
|
||||
}
|
||||
|
||||
@@ -651,7 +651,6 @@ Rectangle {
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: pinButton
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: optionsButton.width + Theme.spacingM + Theme.spacingS
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
@@ -712,19 +711,6 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
|
||||
DankActionButton {
|
||||
id: qrCodeButton
|
||||
visible: modelData.secured && modelData.saved
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: optionsButton.width + pinWifiRow.width + 3 * Theme.spacingM + Theme.spacingS
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
iconName: "qr_code"
|
||||
buttonSize: 28
|
||||
onClicked: {
|
||||
PopoutService.showWifiQRCodeModal(modelData.ssid);
|
||||
}
|
||||
}
|
||||
|
||||
DankRipple {
|
||||
id: wifiRipple
|
||||
cornerRadius: parent.radius
|
||||
@@ -733,7 +719,7 @@ Rectangle {
|
||||
MouseArea {
|
||||
id: networkMouseArea
|
||||
anchors.fill: parent
|
||||
anchors.rightMargin: optionsButton.width + pinWifiRow.width + (qrCodeButton.visible ? qrCodeButton.width : 0) + Theme.spacingS * 5 + Theme.spacingM
|
||||
anchors.rightMargin: optionsButton.width + Theme.spacingM + Theme.spacingS + pinWifiRow.width + Theme.spacingS * 4
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onPressed: mouse => wifiRipple.trigger(mouse.x, mouse.y)
|
||||
|
||||
@@ -21,73 +21,82 @@ Item {
|
||||
property alias centerWidgetsModel: centerWidgetsModel
|
||||
property alias rightWidgetsModel: rightWidgetsModel
|
||||
|
||||
property string _leftWidgetsJson: {
|
||||
root.barConfig;
|
||||
const leftWidgets = root.barConfig?.leftWidgets || [];
|
||||
const mapped = leftWidgets.map((w, index) => {
|
||||
if (typeof w === "string") {
|
||||
return {
|
||||
widgetId: w,
|
||||
id: w + "_" + index,
|
||||
enabled: true
|
||||
};
|
||||
} else {
|
||||
const obj = Object.assign({}, w);
|
||||
obj.widgetId = w.id || w.widgetId;
|
||||
obj.id = (w.id || w.widgetId) + "_" + index;
|
||||
obj.enabled = w.enabled !== false;
|
||||
return obj;
|
||||
}
|
||||
});
|
||||
return JSON.stringify(mapped);
|
||||
}
|
||||
|
||||
property string _centerWidgetsJson: {
|
||||
root.barConfig;
|
||||
const centerWidgets = root.barConfig?.centerWidgets || [];
|
||||
const mapped = centerWidgets.map((w, index) => {
|
||||
if (typeof w === "string") {
|
||||
return {
|
||||
widgetId: w,
|
||||
id: w + "_" + index,
|
||||
enabled: true
|
||||
};
|
||||
} else {
|
||||
const obj = Object.assign({}, w);
|
||||
obj.widgetId = w.id || w.widgetId;
|
||||
obj.id = (w.id || w.widgetId) + "_" + index;
|
||||
obj.enabled = w.enabled !== false;
|
||||
return obj;
|
||||
}
|
||||
});
|
||||
return JSON.stringify(mapped);
|
||||
}
|
||||
|
||||
property string _rightWidgetsJson: {
|
||||
root.barConfig;
|
||||
const rightWidgets = root.barConfig?.rightWidgets || [];
|
||||
const mapped = rightWidgets.map((w, index) => {
|
||||
if (typeof w === "string") {
|
||||
return {
|
||||
widgetId: w,
|
||||
id: w + "_" + index,
|
||||
enabled: true
|
||||
};
|
||||
} else {
|
||||
const obj = Object.assign({}, w);
|
||||
obj.widgetId = w.id || w.widgetId;
|
||||
obj.id = (w.id || w.widgetId) + "_" + index;
|
||||
obj.enabled = w.enabled !== false;
|
||||
return obj;
|
||||
}
|
||||
});
|
||||
return JSON.stringify(mapped);
|
||||
}
|
||||
|
||||
ScriptModel {
|
||||
id: leftWidgetsModel
|
||||
values: {
|
||||
root.barConfig;
|
||||
const leftWidgets = root.barConfig?.leftWidgets || [];
|
||||
return leftWidgets.map((w, index) => {
|
||||
if (typeof w === "string") {
|
||||
return {
|
||||
widgetId: w,
|
||||
id: w + "_" + index,
|
||||
enabled: true
|
||||
};
|
||||
} else {
|
||||
const obj = Object.assign({}, w);
|
||||
obj.widgetId = w.id || w.widgetId;
|
||||
obj.id = (w.id || w.widgetId) + "_" + index;
|
||||
obj.enabled = w.enabled !== false;
|
||||
return obj;
|
||||
}
|
||||
});
|
||||
}
|
||||
values: JSON.parse(root._leftWidgetsJson)
|
||||
}
|
||||
|
||||
ScriptModel {
|
||||
id: centerWidgetsModel
|
||||
values: {
|
||||
root.barConfig;
|
||||
const centerWidgets = root.barConfig?.centerWidgets || [];
|
||||
return centerWidgets.map((w, index) => {
|
||||
if (typeof w === "string") {
|
||||
return {
|
||||
widgetId: w,
|
||||
id: w + "_" + index,
|
||||
enabled: true
|
||||
};
|
||||
} else {
|
||||
const obj = Object.assign({}, w);
|
||||
obj.widgetId = w.id || w.widgetId;
|
||||
obj.id = (w.id || w.widgetId) + "_" + index;
|
||||
obj.enabled = w.enabled !== false;
|
||||
return obj;
|
||||
}
|
||||
});
|
||||
}
|
||||
values: JSON.parse(root._centerWidgetsJson)
|
||||
}
|
||||
|
||||
ScriptModel {
|
||||
id: rightWidgetsModel
|
||||
values: {
|
||||
root.barConfig;
|
||||
const rightWidgets = root.barConfig?.rightWidgets || [];
|
||||
return rightWidgets.map((w, index) => {
|
||||
if (typeof w === "string") {
|
||||
return {
|
||||
widgetId: w,
|
||||
id: w + "_" + index,
|
||||
enabled: true
|
||||
};
|
||||
} else {
|
||||
const obj = Object.assign({}, w);
|
||||
obj.widgetId = w.id || w.widgetId;
|
||||
obj.id = (w.id || w.widgetId) + "_" + index;
|
||||
obj.enabled = w.enabled !== false;
|
||||
return obj;
|
||||
}
|
||||
});
|
||||
}
|
||||
values: JSON.parse(root._rightWidgetsJson)
|
||||
}
|
||||
|
||||
function triggerControlCenterOnFocusedScreen() {
|
||||
|
||||
@@ -561,10 +561,7 @@ Item {
|
||||
axis: barWindow.axis
|
||||
section: topBarContent.getWidgetSection(parent)
|
||||
parentScreen: barWindow.screen
|
||||
popoutTarget: {
|
||||
clipboardHistoryPopoutLoader.active = true;
|
||||
return clipboardHistoryPopoutLoader.item;
|
||||
}
|
||||
popoutTarget: clipboardHistoryPopoutLoader.item ?? null
|
||||
|
||||
function openClipboardPopout(initialTab) {
|
||||
clipboardHistoryPopoutLoader.active = true;
|
||||
@@ -759,10 +756,7 @@ Item {
|
||||
barThickness: barWindow.effectiveBarThickness
|
||||
widgetThickness: barWindow.widgetThickness
|
||||
section: topBarContent.getWidgetSection(parent) || "center"
|
||||
popoutTarget: {
|
||||
dankDashPopoutLoader.active = true;
|
||||
return dankDashPopoutLoader.item;
|
||||
}
|
||||
popoutTarget: dankDashPopoutLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
|
||||
Component.onCompleted: {
|
||||
@@ -826,10 +820,7 @@ Item {
|
||||
barThickness: barWindow.effectiveBarThickness
|
||||
widgetThickness: barWindow.widgetThickness
|
||||
section: topBarContent.getWidgetSection(parent) || "center"
|
||||
popoutTarget: {
|
||||
dankDashPopoutLoader.active = true;
|
||||
return dankDashPopoutLoader.item;
|
||||
}
|
||||
popoutTarget: dankDashPopoutLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
onClicked: {
|
||||
dankDashPopoutLoader.active = true;
|
||||
@@ -881,10 +872,7 @@ Item {
|
||||
barThickness: barWindow.effectiveBarThickness
|
||||
widgetThickness: barWindow.widgetThickness
|
||||
section: topBarContent.getWidgetSection(parent) || "center"
|
||||
popoutTarget: {
|
||||
dankDashPopoutLoader.active = true;
|
||||
return dankDashPopoutLoader.item;
|
||||
}
|
||||
popoutTarget: dankDashPopoutLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
onClicked: {
|
||||
dankDashPopoutLoader.active = true;
|
||||
@@ -968,10 +956,7 @@ Item {
|
||||
widgetThickness: barWindow.widgetThickness
|
||||
axis: barWindow.axis
|
||||
section: topBarContent.getWidgetSection(parent) || "right"
|
||||
popoutTarget: {
|
||||
processListPopoutLoader.active = true;
|
||||
return processListPopoutLoader.item;
|
||||
}
|
||||
popoutTarget: processListPopoutLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
widgetData: parent.widgetData
|
||||
onCpuClicked: {
|
||||
@@ -1004,10 +989,7 @@ Item {
|
||||
widgetThickness: barWindow.widgetThickness
|
||||
axis: barWindow.axis
|
||||
section: topBarContent.getWidgetSection(parent) || "right"
|
||||
popoutTarget: {
|
||||
processListPopoutLoader.active = true;
|
||||
return processListPopoutLoader.item;
|
||||
}
|
||||
popoutTarget: processListPopoutLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
widgetData: parent.widgetData
|
||||
onRamClicked: {
|
||||
@@ -1054,10 +1036,7 @@ Item {
|
||||
widgetThickness: barWindow.widgetThickness
|
||||
axis: barWindow.axis
|
||||
section: topBarContent.getWidgetSection(parent) || "right"
|
||||
popoutTarget: {
|
||||
processListPopoutLoader.active = true;
|
||||
return processListPopoutLoader.item;
|
||||
}
|
||||
popoutTarget: processListPopoutLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
widgetData: parent.widgetData
|
||||
onCpuTempClicked: {
|
||||
@@ -1090,10 +1069,7 @@ Item {
|
||||
widgetThickness: barWindow.widgetThickness
|
||||
axis: barWindow.axis
|
||||
section: topBarContent.getWidgetSection(parent) || "right"
|
||||
popoutTarget: {
|
||||
processListPopoutLoader.active = true;
|
||||
return processListPopoutLoader.item;
|
||||
}
|
||||
popoutTarget: processListPopoutLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
widgetData: parent.widgetData
|
||||
onGpuTempClicked: {
|
||||
@@ -1134,10 +1110,7 @@ Item {
|
||||
barThickness: barWindow.effectiveBarThickness
|
||||
axis: barWindow.axis
|
||||
section: topBarContent.getWidgetSection(parent) || "right"
|
||||
popoutTarget: {
|
||||
notificationCenterLoader.active = true;
|
||||
return notificationCenterLoader.item;
|
||||
}
|
||||
popoutTarget: notificationCenterLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
onClicked: {
|
||||
notificationCenterLoader.active = true;
|
||||
@@ -1172,10 +1145,7 @@ Item {
|
||||
section: topBarContent.getWidgetSection(parent) || "right"
|
||||
barSpacing: barConfig?.spacing ?? 4
|
||||
barConfig: topBarContent.barConfig
|
||||
popoutTarget: {
|
||||
batteryPopoutLoader.active = true;
|
||||
return batteryPopoutLoader.item;
|
||||
}
|
||||
popoutTarget: batteryPopoutLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
onToggleBatteryPopup: {
|
||||
batteryPopoutLoader.active = true;
|
||||
@@ -1208,10 +1178,7 @@ Item {
|
||||
barThickness: barWindow.effectiveBarThickness
|
||||
axis: barWindow.axis
|
||||
section: topBarContent.getWidgetSection(parent) || "center"
|
||||
popoutTarget: {
|
||||
layoutPopoutLoader.active = true;
|
||||
return layoutPopoutLoader.item;
|
||||
}
|
||||
popoutTarget: layoutPopoutLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
onToggleLayoutPopup: {
|
||||
layoutPopoutLoader.active = true;
|
||||
@@ -1244,10 +1211,7 @@ Item {
|
||||
barSpacing: barConfig?.spacing ?? 4
|
||||
barConfig: topBarContent.barConfig
|
||||
isAutoHideBar: topBarContent.barConfig?.autoHide ?? false
|
||||
popoutTarget: {
|
||||
vpnPopoutLoader.active = true;
|
||||
return vpnPopoutLoader.item;
|
||||
}
|
||||
popoutTarget: vpnPopoutLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
onToggleVpnPopup: {
|
||||
vpnPopoutLoader.active = true;
|
||||
@@ -1281,10 +1245,7 @@ Item {
|
||||
barThickness: barWindow.effectiveBarThickness
|
||||
axis: barWindow.axis
|
||||
section: topBarContent.getWidgetSection(parent) || "right"
|
||||
popoutTarget: {
|
||||
controlCenterLoader.active = true;
|
||||
return controlCenterLoader.item;
|
||||
}
|
||||
popoutTarget: controlCenterLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
screenName: barWindow.screen?.name || ""
|
||||
screenModel: barWindow.screen?.model || ""
|
||||
@@ -1434,10 +1395,7 @@ Item {
|
||||
barThickness: barWindow.effectiveBarThickness
|
||||
axis: barWindow.axis
|
||||
section: topBarContent.getWidgetSection(parent) || "right"
|
||||
popoutTarget: {
|
||||
systemUpdateLoader.active = true;
|
||||
return systemUpdateLoader.item;
|
||||
}
|
||||
popoutTarget: systemUpdateLoader.item ?? null
|
||||
parentScreen: barWindow.screen
|
||||
onClicked: {
|
||||
systemUpdateLoader.active = true;
|
||||
|
||||
@@ -131,38 +131,55 @@ PanelWindow {
|
||||
readonly property real _wingR: Math.max(0, wingtipsRadius)
|
||||
readonly property color _surfaceContainer: Theme.surfaceContainer
|
||||
readonly property string _barId: barConfig?.id ?? "default"
|
||||
readonly property var _liveBarConfig: SettingsData.barConfigs.find(c => c.id === _barId) || barConfig
|
||||
readonly property real _backgroundAlpha: _liveBarConfig?.transparency ?? 1.0
|
||||
property real _backgroundAlpha: barConfig?.transparency ?? 1.0
|
||||
readonly property color _bgColor: Theme.withAlpha(_surfaceContainer, _backgroundAlpha)
|
||||
|
||||
function _updateBackgroundAlpha() {
|
||||
const live = SettingsData.barConfigs.find(c => c.id === _barId);
|
||||
_backgroundAlpha = (live ?? barConfig)?.transparency ?? 1.0;
|
||||
}
|
||||
readonly property real _dpr: CompositorService.getScreenScale(barWindow.screen)
|
||||
|
||||
property string screenName: modelData.name
|
||||
|
||||
readonly property bool hasMaximizedToplevel: {
|
||||
if (!(barConfig?.maximizeDetection ?? true))
|
||||
return false;
|
||||
if (!CompositorService.isHyprland && !CompositorService.isNiri)
|
||||
return false;
|
||||
property bool hasMaximizedToplevel: false
|
||||
property bool shouldHideForWindows: false
|
||||
|
||||
function _updateHasMaximizedToplevel() {
|
||||
if (!(barConfig?.maximizeDetection ?? true)) {
|
||||
hasMaximizedToplevel = false;
|
||||
return;
|
||||
}
|
||||
if (!CompositorService.isHyprland && !CompositorService.isNiri) {
|
||||
hasMaximizedToplevel = false;
|
||||
return;
|
||||
}
|
||||
|
||||
const filtered = CompositorService.filterCurrentWorkspace(CompositorService.sortedToplevels, screenName);
|
||||
for (let i = 0; i < filtered.length; i++) {
|
||||
if (filtered[i]?.maximized)
|
||||
return true;
|
||||
if (filtered[i]?.maximized) {
|
||||
hasMaximizedToplevel = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
hasMaximizedToplevel = false;
|
||||
}
|
||||
|
||||
readonly property bool shouldHideForWindows: {
|
||||
if (!(barConfig?.showOnWindowsOpen ?? false))
|
||||
return false;
|
||||
if (!(barConfig?.autoHide ?? false))
|
||||
return false;
|
||||
if (!CompositorService.isNiri && !CompositorService.isHyprland)
|
||||
return false;
|
||||
function _updateShouldHideForWindows() {
|
||||
if (!(barConfig?.showOnWindowsOpen ?? false)) {
|
||||
shouldHideForWindows = false;
|
||||
return;
|
||||
}
|
||||
if (!(barConfig?.autoHide ?? false)) {
|
||||
shouldHideForWindows = false;
|
||||
return;
|
||||
}
|
||||
if (!CompositorService.isNiri && !CompositorService.isHyprland) {
|
||||
shouldHideForWindows = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (CompositorService.isNiri) {
|
||||
NiriService.windows;
|
||||
|
||||
let currentWorkspaceId = null;
|
||||
for (let i = 0; i < NiriService.allWorkspaces.length; i++) {
|
||||
const ws = NiriService.allWorkspaces[i];
|
||||
@@ -172,8 +189,10 @@ PanelWindow {
|
||||
}
|
||||
}
|
||||
|
||||
if (currentWorkspaceId === null)
|
||||
return false;
|
||||
if (currentWorkspaceId === null) {
|
||||
shouldHideForWindows = false;
|
||||
return;
|
||||
}
|
||||
|
||||
let hasTiled = false;
|
||||
let hasFloatingTouchingBar = false;
|
||||
@@ -217,14 +236,12 @@ PanelWindow {
|
||||
}
|
||||
}
|
||||
|
||||
if (hasTiled)
|
||||
return true;
|
||||
|
||||
return hasFloatingTouchingBar;
|
||||
shouldHideForWindows = hasTiled || hasFloatingTouchingBar;
|
||||
return;
|
||||
}
|
||||
|
||||
const filtered = CompositorService.filterCurrentWorkspace(CompositorService.sortedToplevels, screenName);
|
||||
return filtered.length > 0;
|
||||
shouldHideForWindows = filtered.length > 0;
|
||||
}
|
||||
|
||||
property real effectiveSpacing: hasMaximizedToplevel ? 0 : (barConfig?.spacing ?? 4)
|
||||
@@ -356,6 +373,9 @@ PanelWindow {
|
||||
}
|
||||
|
||||
updateGpuTempConfig();
|
||||
_updateBackgroundAlpha();
|
||||
_updateHasMaximizedToplevel();
|
||||
_updateShouldHideForWindows();
|
||||
|
||||
inhibitorInitTimer.start();
|
||||
}
|
||||
@@ -432,11 +452,37 @@ PanelWindow {
|
||||
Connections {
|
||||
function onBarConfigChanged() {
|
||||
barWindow.updateGpuTempConfig();
|
||||
barWindow._updateBackgroundAlpha();
|
||||
barWindow._updateHasMaximizedToplevel();
|
||||
barWindow._updateShouldHideForWindows();
|
||||
}
|
||||
|
||||
target: rootWindow
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: SettingsData
|
||||
function onBarConfigsChanged() {
|
||||
barWindow._updateBackgroundAlpha();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: CompositorService
|
||||
function onToplevelsChanged() {
|
||||
barWindow._updateHasMaximizedToplevel();
|
||||
barWindow._updateShouldHideForWindows();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: NiriService
|
||||
function onAllWorkspacesChanged() {
|
||||
barWindow._updateHasMaximizedToplevel();
|
||||
barWindow._updateShouldHideForWindows();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
function onNvidiaGpuTempEnabledChanged() {
|
||||
barWindow.updateGpuTempConfig();
|
||||
|
||||
@@ -584,8 +584,7 @@ BasePill {
|
||||
|
||||
property string tooltipText: {
|
||||
root._desktopEntriesUpdateTrigger;
|
||||
const moddedId = Paths.moddedAppId(appId);
|
||||
const desktopEntry = moddedId ? DesktopEntries.heuristicLookup(moddedId) : null;
|
||||
const desktopEntry = appId ? DesktopEntries.heuristicLookup(appId) : null;
|
||||
const appName = appId ? Paths.getAppName(appId, desktopEntry) : "Unknown";
|
||||
|
||||
if (modelData.type === "grouped" && windowCount > 1) {
|
||||
@@ -690,9 +689,8 @@ BasePill {
|
||||
if (!appItem.appId)
|
||||
return "";
|
||||
if (modelData.isCoreApp)
|
||||
return ""; // Explicitly skip if core app to avoid flickering or wrong look ups
|
||||
const moddedId = Paths.moddedAppId(appItem.appId);
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
|
||||
return "";
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(appItem.appId);
|
||||
return Paths.getAppIcon(appItem.appId, desktopEntry);
|
||||
}
|
||||
smooth: true
|
||||
@@ -749,8 +747,7 @@ BasePill {
|
||||
root._desktopEntriesUpdateTrigger;
|
||||
if (!appItem.appId)
|
||||
return "?";
|
||||
const moddedId = Paths.moddedAppId(appItem.appId);
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(appItem.appId);
|
||||
const appName = Paths.getAppName(appItem.appId, desktopEntry);
|
||||
return appName.charAt(0).toUpperCase();
|
||||
}
|
||||
|
||||
@@ -9,9 +9,6 @@ BasePill {
|
||||
id: root
|
||||
|
||||
property bool isActive: false
|
||||
property var popoutTarget: null
|
||||
property var parentScreen: null
|
||||
property Item windowRoot: (Window.window ? Window.window.contentItem : null)
|
||||
property bool isAutoHideBar: false
|
||||
|
||||
signal clipboardClicked
|
||||
|
||||
@@ -93,7 +93,7 @@ BasePill {
|
||||
id: textBox
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
implicitWidth: root.minimumWidth ? Math.max(cpuBaseline.width, cpuText.paintedWidth) : cpuText.paintedWidth
|
||||
implicitWidth: root.minimumWidth ? Math.max(cpuBaseline.width, cpuCurrent.width) : cpuCurrent.width
|
||||
implicitHeight: cpuText.implicitHeight
|
||||
|
||||
width: implicitWidth
|
||||
@@ -105,6 +105,12 @@ BasePill {
|
||||
text: "88%"
|
||||
}
|
||||
|
||||
StyledTextMetrics {
|
||||
id: cpuCurrent
|
||||
font.pixelSize: Theme.barTextSize(root.barThickness, root.barConfig?.fontScale, root.barConfig?.maximizeWidgetText)
|
||||
text: cpuText.text
|
||||
}
|
||||
|
||||
StyledText {
|
||||
id: cpuText
|
||||
text: {
|
||||
|
||||
@@ -18,9 +18,43 @@ BasePill {
|
||||
readonly property real contentWidth: hasActivePrivacy ? (activeCount * 18 + (activeCount - 1) * Theme.spacingXS) : 0
|
||||
readonly property real contentHeight: hasActivePrivacy ? (activeCount * 18 + (activeCount - 1) * Theme.spacingXS) : 0
|
||||
|
||||
visible: hasActivePrivacy
|
||||
opacity: hasActivePrivacy ? 1 : 0
|
||||
enabled: hasActivePrivacy
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "hidden_horizontal"
|
||||
when: !hasActivePrivacy && !isVerticalOrientation
|
||||
PropertyChanges {
|
||||
target: root
|
||||
width: 0
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "hidden_vertical"
|
||||
when: !hasActivePrivacy && isVerticalOrientation
|
||||
PropertyChanges {
|
||||
target: root
|
||||
height: 0
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
transitions: [
|
||||
Transition {
|
||||
NumberAnimation {
|
||||
properties: "width,height"
|
||||
duration: Theme.shortDuration
|
||||
easing.type: Theme.standardEasing
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Theme.shortDuration
|
||||
easing.type: Theme.standardEasing
|
||||
}
|
||||
}
|
||||
|
||||
content: Component {
|
||||
Item {
|
||||
@@ -35,7 +69,7 @@ BasePill {
|
||||
Item {
|
||||
width: 18
|
||||
height: 18
|
||||
visible: PrivacyService.microphoneActive
|
||||
visible: root.showMicIcon || PrivacyService.microphoneActive
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
DankIcon {
|
||||
@@ -47,8 +81,8 @@ BasePill {
|
||||
return "mic";
|
||||
}
|
||||
size: Theme.iconSizeSmall
|
||||
color: Theme.error
|
||||
filled: true
|
||||
color: PrivacyService.microphoneActive ? Theme.error : Theme.surfaceText
|
||||
filled: PrivacyService.microphoneActive
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
@@ -56,14 +90,14 @@ BasePill {
|
||||
Item {
|
||||
width: 18
|
||||
height: 18
|
||||
visible: PrivacyService.cameraActive
|
||||
visible: root.showCameraIcon || PrivacyService.cameraActive
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
DankIcon {
|
||||
name: "camera_video"
|
||||
size: Theme.iconSizeSmall
|
||||
color: Theme.widgetTextColor
|
||||
filled: true
|
||||
color: PrivacyService.cameraActive ? Theme.error : Theme.surfaceText
|
||||
filled: PrivacyService.cameraActive
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
|
||||
@@ -76,20 +110,21 @@ BasePill {
|
||||
anchors.top: parent.top
|
||||
anchors.rightMargin: -2
|
||||
anchors.topMargin: -1
|
||||
visible: PrivacyService.cameraActive
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
width: 18
|
||||
height: 18
|
||||
visible: PrivacyService.screensharingActive
|
||||
visible: root.showScreenSharingIcon || PrivacyService.screensharingActive
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
DankIcon {
|
||||
name: "screen_share"
|
||||
size: Theme.iconSizeSmall
|
||||
color: Theme.warning
|
||||
filled: true
|
||||
color: PrivacyService.screensharingActive ? Theme.warning : Theme.surfaceText
|
||||
filled: PrivacyService.screensharingActive
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
@@ -116,7 +151,7 @@ BasePill {
|
||||
}
|
||||
size: Theme.iconSizeSmall
|
||||
color: PrivacyService.microphoneActive ? Theme.error : Theme.surfaceText
|
||||
filled: true
|
||||
filled: PrivacyService.microphoneActive
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
@@ -131,7 +166,7 @@ BasePill {
|
||||
name: "camera_video"
|
||||
size: Theme.iconSizeSmall
|
||||
color: PrivacyService.cameraActive ? Theme.error : Theme.surfaceText
|
||||
filled: true
|
||||
filled: PrivacyService.cameraActive
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
|
||||
@@ -158,7 +193,7 @@ BasePill {
|
||||
name: "screen_share"
|
||||
size: Theme.iconSizeSmall
|
||||
color: PrivacyService.screensharingActive ? Theme.warning : Theme.surfaceText
|
||||
filled: true
|
||||
filled: PrivacyService.screensharingActive
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
@@ -209,22 +244,4 @@ BasePill {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on width {
|
||||
enabled: hasActivePrivacy && visible && !isVerticalOrientation
|
||||
|
||||
NumberAnimation {
|
||||
duration: Theme.mediumDuration
|
||||
easing.type: Theme.emphasizedEasing
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on height {
|
||||
enabled: hasActivePrivacy && visible && isVerticalOrientation
|
||||
|
||||
NumberAnimation {
|
||||
duration: Theme.mediumDuration
|
||||
easing.type: Theme.emphasizedEasing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -241,14 +241,17 @@ BasePill {
|
||||
property var toplevelData: isGrouped ? (modelData.windows.length > 0 ? modelData.windows[0].toplevel : null) : modelData
|
||||
property bool isFocused: isGrouped ? (root.focusedAppId === appId) : (toplevelData ? toplevelData.activated : false)
|
||||
property string appId: isGrouped ? modelData.appId : (modelData.appId || "")
|
||||
readonly property string effectiveAppId: {
|
||||
root._appIdSubstitutionsTrigger;
|
||||
return Paths.moddedAppId(appId);
|
||||
}
|
||||
property string windowTitle: toplevelData ? (toplevelData.title || "(Unnamed)") : "(Unnamed)"
|
||||
property var toplevelObject: toplevelData
|
||||
property int windowCount: isGrouped ? modelData.windows.length : 1
|
||||
property string tooltipText: {
|
||||
root._desktopEntriesUpdateTrigger;
|
||||
const moddedId = Paths.moddedAppId(appId);
|
||||
const desktopEntry = moddedId ? DesktopEntries.heuristicLookup(moddedId) : null;
|
||||
const appName = appId ? Paths.getAppName(appId, desktopEntry) : "Unknown";
|
||||
const desktopEntry = effectiveAppId ? DesktopEntries.heuristicLookup(effectiveAppId) : null;
|
||||
const appName = effectiveAppId ? Paths.getAppName(effectiveAppId, desktopEntry) : "Unknown";
|
||||
|
||||
if (isGrouped && windowCount > 1) {
|
||||
return appName + " (" + windowCount + " windows)";
|
||||
@@ -284,11 +287,10 @@ BasePill {
|
||||
source: {
|
||||
root._desktopEntriesUpdateTrigger;
|
||||
root._appIdSubstitutionsTrigger;
|
||||
if (!appId)
|
||||
if (!effectiveAppId)
|
||||
return "";
|
||||
const moddedId = Paths.moddedAppId(appId);
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
|
||||
return Paths.getAppIcon(appId, desktopEntry);
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(effectiveAppId);
|
||||
return Paths.getAppIcon(effectiveAppId, desktopEntry);
|
||||
}
|
||||
smooth: true
|
||||
mipmap: true
|
||||
@@ -311,20 +313,18 @@ BasePill {
|
||||
size: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale)
|
||||
name: "sports_esports"
|
||||
color: Theme.widgetTextColor
|
||||
visible: !iconImg.visible && Paths.isSteamApp(appId)
|
||||
visible: !iconImg.visible && Paths.isSteamApp(effectiveAppId)
|
||||
}
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
visible: !iconImg.visible && !Paths.isSteamApp(appId)
|
||||
visible: !iconImg.visible && !Paths.isSteamApp(effectiveAppId)
|
||||
text: {
|
||||
root._desktopEntriesUpdateTrigger;
|
||||
if (!appId)
|
||||
if (!effectiveAppId)
|
||||
return "?";
|
||||
|
||||
const moddedId = Paths.moddedAppId(appId);
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
|
||||
const appName = Paths.getAppName(appId, desktopEntry);
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(effectiveAppId);
|
||||
const appName = Paths.getAppName(effectiveAppId, desktopEntry);
|
||||
return appName.charAt(0).toUpperCase();
|
||||
}
|
||||
font.pixelSize: 10
|
||||
@@ -496,14 +496,17 @@ BasePill {
|
||||
property var toplevelData: isGrouped ? (modelData.windows.length > 0 ? modelData.windows[0].toplevel : null) : modelData
|
||||
property bool isFocused: isGrouped ? (root.focusedAppId === appId) : (toplevelData ? toplevelData.activated : false)
|
||||
property string appId: isGrouped ? modelData.appId : (modelData.appId || "")
|
||||
readonly property string effectiveAppId: {
|
||||
root._appIdSubstitutionsTrigger;
|
||||
return Paths.moddedAppId(appId);
|
||||
}
|
||||
property string windowTitle: toplevelData ? (toplevelData.title || "(Unnamed)") : "(Unnamed)"
|
||||
property var toplevelObject: toplevelData
|
||||
property int windowCount: isGrouped ? modelData.windows.length : 1
|
||||
property string tooltipText: {
|
||||
root._desktopEntriesUpdateTrigger;
|
||||
const moddedId = Paths.moddedAppId(appId);
|
||||
const desktopEntry = moddedId ? DesktopEntries.heuristicLookup(moddedId) : null;
|
||||
const appName = appId ? Paths.getAppName(appId, desktopEntry) : "Unknown";
|
||||
const desktopEntry = effectiveAppId ? DesktopEntries.heuristicLookup(effectiveAppId) : null;
|
||||
const appName = effectiveAppId ? Paths.getAppName(effectiveAppId, desktopEntry) : "Unknown";
|
||||
|
||||
if (isGrouped && windowCount > 1) {
|
||||
return appName + " (" + windowCount + " windows)";
|
||||
@@ -538,11 +541,10 @@ BasePill {
|
||||
source: {
|
||||
root._desktopEntriesUpdateTrigger;
|
||||
root._appIdSubstitutionsTrigger;
|
||||
if (!appId)
|
||||
if (!effectiveAppId)
|
||||
return "";
|
||||
const moddedId = Paths.moddedAppId(appId);
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
|
||||
return Paths.getAppIcon(appId, desktopEntry);
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(effectiveAppId);
|
||||
return Paths.getAppIcon(effectiveAppId, desktopEntry);
|
||||
}
|
||||
smooth: true
|
||||
mipmap: true
|
||||
@@ -565,20 +567,18 @@ BasePill {
|
||||
size: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale)
|
||||
name: "sports_esports"
|
||||
color: Theme.widgetTextColor
|
||||
visible: !iconImg.visible && Paths.isSteamApp(appId)
|
||||
visible: !iconImg.visible && Paths.isSteamApp(effectiveAppId)
|
||||
}
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
visible: !iconImg.visible && !Paths.isSteamApp(appId)
|
||||
visible: !iconImg.visible && !Paths.isSteamApp(effectiveAppId)
|
||||
text: {
|
||||
root._desktopEntriesUpdateTrigger;
|
||||
if (!appId)
|
||||
if (!effectiveAppId)
|
||||
return "?";
|
||||
|
||||
const moddedId = Paths.moddedAppId(appId);
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
|
||||
const appName = Paths.getAppName(appId, desktopEntry);
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(effectiveAppId);
|
||||
const appName = Paths.getAppName(effectiveAppId, desktopEntry);
|
||||
return appName.charAt(0).toUpperCase();
|
||||
}
|
||||
font.pixelSize: 10
|
||||
|
||||
@@ -282,14 +282,15 @@ Item {
|
||||
}
|
||||
|
||||
const keyBase = (w.app_id || w.appId || w.class || w.windowClass || "unknown");
|
||||
const key = isActiveWs || !SettingsData.groupWorkspaceApps ? `${keyBase}_${i}` : keyBase;
|
||||
const moddedId = Paths.moddedAppId(keyBase);
|
||||
const key = isActiveWs || !SettingsData.groupWorkspaceApps ? `${moddedId}_${i}` : moddedId;
|
||||
|
||||
if (!byApp[key]) {
|
||||
const isQuickshell = keyBase === "org.quickshell";
|
||||
const isSteamApp = Paths.isSteamApp(keyBase);
|
||||
const moddedId = Paths.moddedAppId(keyBase);
|
||||
const isSteamApp = Paths.isSteamApp(moddedId);
|
||||
const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
|
||||
const icon = Paths.getAppIcon(keyBase, desktopEntry);
|
||||
const icon = Paths.getAppIcon(moddedId, desktopEntry);
|
||||
const appName = Paths.getAppName(moddedId, desktopEntry);
|
||||
byApp[key] = {
|
||||
"type": "icon",
|
||||
"icon": icon,
|
||||
@@ -298,7 +299,7 @@ Item {
|
||||
"active": !!((w.activated || w.is_focused) || (CompositorService.isNiri && w.is_focused)),
|
||||
"count": 1,
|
||||
"windowId": w.address || w.id,
|
||||
"fallbackText": w.appId || w.class || w.title || ""
|
||||
"fallbackText": appName || ""
|
||||
};
|
||||
} else {
|
||||
byApp[key].count++;
|
||||
@@ -1473,9 +1474,44 @@ Item {
|
||||
IconImage {
|
||||
id: rowAppIcon
|
||||
anchors.fill: parent
|
||||
source: modelData.icon
|
||||
source: modelData.icon || ""
|
||||
opacity: modelData.active ? 1.0 : rowAppMouseArea.containsMouse ? 0.8 : 0.6
|
||||
visible: !modelData.isQuickshell && !modelData.isSteamApp
|
||||
visible: !modelData.isQuickshell && !modelData.isSteamApp && status === Image.Ready
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
visible: !modelData.isQuickshell && !modelData.isSteamApp && rowAppIcon.status !== Image.Ready
|
||||
color: Theme.surfaceContainer
|
||||
radius: Theme.cornerRadius * (root.appIconSize / 40)
|
||||
border.width: 1
|
||||
border.color: Theme.primarySelected
|
||||
opacity: (modelData.active || isActive) ? 1.0 : rowAppMouseArea.containsMouse ? 0.8 : 0.6
|
||||
|
||||
StyledText {
|
||||
anchors.centerIn: parent
|
||||
text: (modelData.fallbackText || "?").charAt(0).toUpperCase()
|
||||
font.pixelSize: parent.width * 0.45
|
||||
color: Theme.primary
|
||||
font.weight: Font.Bold
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
visible: !modelData.isQuickshell && modelData.isSteamApp && rowSteamIcon.status !== Image.Ready
|
||||
color: Theme.surfaceContainer
|
||||
radius: Theme.cornerRadius * (root.appIconSize / 40)
|
||||
border.width: 1
|
||||
border.color: Theme.primarySelected
|
||||
opacity: (modelData.active || isActive) ? 1.0 : rowAppMouseArea.containsMouse ? 0.8 : 0.6
|
||||
|
||||
DankIcon {
|
||||
anchors.centerIn: parent
|
||||
size: parent.width * 0.7
|
||||
name: "sports_esports"
|
||||
color: Theme.primary
|
||||
}
|
||||
}
|
||||
|
||||
IconImage {
|
||||
@@ -1592,9 +1628,44 @@ Item {
|
||||
IconImage {
|
||||
id: colAppIcon
|
||||
anchors.fill: parent
|
||||
source: modelData.icon
|
||||
source: modelData.icon || ""
|
||||
opacity: modelData.active ? 1.0 : colAppMouseArea.containsMouse ? 0.8 : 0.6
|
||||
visible: !modelData.isQuickshell && !modelData.isSteamApp
|
||||
visible: !modelData.isQuickshell && !modelData.isSteamApp && status === Image.Ready
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
visible: !modelData.isQuickshell && !modelData.isSteamApp && colAppIcon.status !== Image.Ready
|
||||
color: Theme.surfaceContainer
|
||||
radius: Theme.cornerRadius * (root.appIconSize / 40)
|
||||
border.width: 1
|
||||
border.color: Theme.primarySelected
|
||||
opacity: (modelData.active || isActive) ? 1.0 : colAppMouseArea.containsMouse ? 0.8 : 0.6
|
||||
|
||||
StyledText {
|
||||
anchors.centerIn: parent
|
||||
text: (modelData.fallbackText || "?").charAt(0).toUpperCase()
|
||||
font.pixelSize: parent.width * 0.45
|
||||
color: Theme.primary
|
||||
font.weight: Font.Bold
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
visible: !modelData.isQuickshell && modelData.isSteamApp && colSteamIcon.status !== Image.Ready
|
||||
color: Theme.surfaceContainer
|
||||
radius: Theme.cornerRadius * (root.appIconSize / 40)
|
||||
border.width: 1
|
||||
border.color: Theme.primarySelected
|
||||
opacity: (modelData.active || isActive) ? 1.0 : colAppMouseArea.containsMouse ? 0.8 : 0.6
|
||||
|
||||
DankIcon {
|
||||
anchors.centerIn: parent
|
||||
size: parent.width * 0.7
|
||||
name: "sports_esports"
|
||||
color: Theme.primary
|
||||
}
|
||||
}
|
||||
|
||||
IconImage {
|
||||
|
||||
@@ -378,21 +378,27 @@ Variants {
|
||||
const screenY = dock.screen ? (dock.screen.y || 0) : 0;
|
||||
const screenHeight = dock.screen ? dock.screen.height : 0;
|
||||
|
||||
const gap = Theme.spacingS;
|
||||
const bgMargin = barSpacing + SettingsData.dockMargin + 1 + dock.borderThickness;
|
||||
const btnW = dock.hoveredButton.width;
|
||||
const btnH = dock.hoveredButton.height;
|
||||
|
||||
if (!dock.isVertical) {
|
||||
const isBottom = SettingsData.dockPosition === SettingsData.Position.Bottom;
|
||||
const globalX = buttonGlobalPos.x + dock.hoveredButton.width / 2 + adjacentLeftBarWidth;
|
||||
const globalX = buttonGlobalPos.x + btnW / 2 + adjacentLeftBarWidth;
|
||||
const tooltipHeight = 32;
|
||||
const tooltipOffset = dock.effectiveBarHeight + SettingsData.dockSpacing + SettingsData.dockBottomGap + SettingsData.dockMargin + barSpacing + Theme.spacingM;
|
||||
const screenRelativeY = isBottom ? (screenHeight - tooltipOffset - tooltipHeight) : tooltipOffset;
|
||||
const totalFromEdge = bgMargin + dockBackground.height + dock.borderThickness + gap;
|
||||
const screenRelativeY = isBottom ? (screenHeight - totalFromEdge - tooltipHeight) : totalFromEdge;
|
||||
dockTooltip.show(tooltipText, globalX, screenRelativeY, dock.screen, false, false);
|
||||
return;
|
||||
}
|
||||
|
||||
const isLeft = SettingsData.dockPosition === SettingsData.Position.Left;
|
||||
const tooltipOffset = dock.effectiveBarHeight + SettingsData.dockSpacing + SettingsData.dockBottomGap + SettingsData.dockMargin + barSpacing + Theme.spacingM;
|
||||
const tooltipX = isLeft ? tooltipOffset : (dock.screen.width - tooltipOffset);
|
||||
const screenRelativeY = buttonGlobalPos.y - screenY + dock.hoveredButton.height / 2 + adjacentTopBarHeight;
|
||||
dockTooltip.show(tooltipText, screenX + tooltipX, screenRelativeY, dock.screen, isLeft, !isLeft);
|
||||
const screenWidth = dock.screen ? dock.screen.width : 0;
|
||||
const totalFromEdge = bgMargin + dockBackground.width + dock.borderThickness + gap;
|
||||
const tooltipX = isLeft ? (screenX + totalFromEdge) : (screenX + screenWidth - totalFromEdge);
|
||||
const screenRelativeY = buttonGlobalPos.y - screenY + btnH / 2 + adjacentTopBarHeight;
|
||||
dockTooltip.show(tooltipText, tooltipX, screenRelativeY, dock.screen, isLeft, !isLeft);
|
||||
}
|
||||
|
||||
Connections {
|
||||
|
||||
@@ -28,7 +28,58 @@ Item {
|
||||
return pos === SettingsData.Position.Left || pos === SettingsData.Position.Right;
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: horizontalBarChangeDebounce
|
||||
interval: 500
|
||||
repeat: false
|
||||
onTriggered: {
|
||||
const verticalBars = SettingsData.barConfigs.filter(cfg => {
|
||||
const pos = cfg.position ?? SettingsData.Position.Top;
|
||||
return pos === SettingsData.Position.Left || pos === SettingsData.Position.Right;
|
||||
});
|
||||
|
||||
verticalBars.forEach(bar => {
|
||||
if (!bar.enabled)
|
||||
return;
|
||||
SettingsData.updateBarConfig(bar.id, {
|
||||
enabled: false
|
||||
});
|
||||
Qt.callLater(() => SettingsData.updateBarConfig(bar.id, {
|
||||
enabled: true
|
||||
}));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function _isBarActive(c) {
|
||||
if (!c.enabled) return false;
|
||||
const prefs = c.screenPreferences || ["all"];
|
||||
if (prefs.length > 0) return true;
|
||||
return (c.showOnLastDisplay ?? true) && Quickshell.screens.length === 1;
|
||||
}
|
||||
|
||||
function notifyHorizontalBarChange() {
|
||||
const configs = SettingsData.barConfigs;
|
||||
if (configs.length < 2)
|
||||
return;
|
||||
|
||||
const hasHorizontal = configs.some(c => {
|
||||
if (!_isBarActive(c)) return false;
|
||||
const p = c.position ?? SettingsData.Position.Top;
|
||||
return p === SettingsData.Position.Top || p === SettingsData.Position.Bottom;
|
||||
});
|
||||
if (!hasHorizontal)
|
||||
return;
|
||||
|
||||
const hasVertical = configs.some(c => {
|
||||
if (!_isBarActive(c)) return false;
|
||||
const p = c.position ?? SettingsData.Position.Top;
|
||||
return p === SettingsData.Position.Left || p === SettingsData.Position.Right;
|
||||
});
|
||||
if (!hasVertical)
|
||||
return;
|
||||
|
||||
horizontalBarChangeDebounce.restart();
|
||||
}
|
||||
|
||||
function createNewBar() {
|
||||
@@ -66,7 +117,12 @@ Item {
|
||||
widgetOutlineColor: defaultBar.widgetOutlineColor || "primary",
|
||||
widgetOutlineOpacity: defaultBar.widgetOutlineOpacity ?? 1.0,
|
||||
widgetOutlineThickness: defaultBar.widgetOutlineThickness ?? 1,
|
||||
widgetPadding: defaultBar.widgetPadding ?? 8,
|
||||
maximizeWidgetIcons: defaultBar.maximizeWidgetIcons ?? false,
|
||||
maximizeWidgetText: defaultBar.maximizeWidgetText ?? false,
|
||||
removeWidgetPadding: defaultBar.removeWidgetPadding ?? false,
|
||||
fontScale: defaultBar.fontScale ?? 1.0,
|
||||
iconScale: defaultBar.iconScale ?? 1.0,
|
||||
autoHide: defaultBar.autoHide ?? false,
|
||||
autoHideDelay: defaultBar.autoHideDelay ?? 250,
|
||||
showOnWindowsOpen: defaultBar.showOnWindowsOpen ?? false,
|
||||
@@ -116,6 +172,7 @@ Item {
|
||||
SettingsData.updateBarConfig(barId, {
|
||||
screenPreferences: prefs
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
|
||||
function getBarShowOnLastDisplay(barId) {
|
||||
@@ -127,6 +184,8 @@ Item {
|
||||
SettingsData.updateBarConfig(barId, {
|
||||
showOnLastDisplay: value
|
||||
});
|
||||
if (Quickshell.screens.length === 1)
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
|
||||
DankFlickable {
|
||||
@@ -508,13 +567,10 @@ Item {
|
||||
newPos = SettingsData.Position.Right;
|
||||
break;
|
||||
}
|
||||
const wasVertical = selectedBarIsVertical;
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
position: newPos
|
||||
});
|
||||
const isVertical = newPos === SettingsData.Position.Left || newPos === SettingsData.Position.Right;
|
||||
if (wasVertical !== isVertical || !isVertical)
|
||||
notifyHorizontalBarChange();
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -563,7 +619,6 @@ Item {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
autoHideDelay: newValue
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
|
||||
Binding {
|
||||
@@ -583,7 +638,6 @@ Item {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
showOnWindowsOpen: toggled
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -637,7 +691,6 @@ Item {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
openOnOverview: toggled
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -754,7 +807,6 @@ Item {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
spacing: finalValue
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
|
||||
Binding {
|
||||
@@ -776,7 +828,6 @@ Item {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
bottomGap: finalValue
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
|
||||
Binding {
|
||||
@@ -798,7 +849,6 @@ Item {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
innerPadding: finalValue
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
|
||||
Binding {
|
||||
@@ -811,13 +861,12 @@ Item {
|
||||
|
||||
SettingsSliderRow {
|
||||
id: widgetPaddingSlider
|
||||
text: I18n.tr("Widget Padding Base")
|
||||
description: I18n.tr("Material 3 Expressive padding")
|
||||
value: selectedBarConfig?.widgetPadding ?? 12
|
||||
text: I18n.tr("Padding")
|
||||
value: selectedBarConfig?.widgetPadding ?? 8
|
||||
minimum: 0
|
||||
maximum: 32
|
||||
unit: "px"
|
||||
defaultValue: 12
|
||||
defaultValue: 8
|
||||
opacity: (selectedBarConfig?.removeWidgetPadding ?? false) ? 0.5 : 1.0
|
||||
enabled: !(selectedBarConfig?.removeWidgetPadding ?? false)
|
||||
onSliderValueChanged: newValue => {
|
||||
@@ -848,7 +897,6 @@ Item {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
popupGapsAuto: checked
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -877,7 +925,6 @@ Item {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
popupGapsManual: finalValue
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
|
||||
Binding {
|
||||
@@ -890,6 +937,107 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
SettingsSliderCard {
|
||||
id: fontScaleSliderCard
|
||||
iconName: "text_fields"
|
||||
title: I18n.tr("Font Scale")
|
||||
description: I18n.tr("Scale DankBar font sizes independently")
|
||||
visible: selectedBarConfig?.enabled
|
||||
minimum: 50
|
||||
maximum: 200
|
||||
value: Math.round((selectedBarConfig?.fontScale ?? 1.0) * 100)
|
||||
unit: "%"
|
||||
defaultValue: 100
|
||||
onSliderValueChanged: newValue => {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
fontScale: newValue / 100
|
||||
});
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: fontScaleSliderCard
|
||||
property: "value"
|
||||
value: Math.round((selectedBarConfig?.fontScale ?? 1.0) * 100)
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
|
||||
SettingsSliderCard {
|
||||
id: iconScaleSliderCard
|
||||
iconName: "interests"
|
||||
title: I18n.tr("Icon Scale")
|
||||
description: I18n.tr("Scale DankBar icon sizes independently")
|
||||
visible: selectedBarConfig?.enabled
|
||||
minimum: 50
|
||||
maximum: 200
|
||||
value: Math.round((selectedBarConfig?.iconScale ?? 1.0) * 100)
|
||||
unit: "%"
|
||||
defaultValue: 100
|
||||
onSliderValueChanged: newValue => {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
iconScale: newValue / 100
|
||||
});
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: iconScaleSliderCard
|
||||
property: "value"
|
||||
value: Math.round((selectedBarConfig?.iconScale ?? 1.0) * 100)
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
iconName: "opacity"
|
||||
title: I18n.tr("Transparency")
|
||||
settingKey: "barTransparency"
|
||||
visible: selectedBarConfig?.enabled
|
||||
|
||||
SettingsSliderRow {
|
||||
id: barTransparencySlider
|
||||
text: I18n.tr("Bar Transparency")
|
||||
value: (selectedBarConfig?.transparency ?? 1.0) * 100
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
unit: "%"
|
||||
defaultValue: 100
|
||||
onSliderDragFinished: finalValue => {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
transparency: finalValue / 100
|
||||
});
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: barTransparencySlider
|
||||
property: "value"
|
||||
value: (selectedBarConfig?.transparency ?? 1.0) * 100
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
|
||||
SettingsSliderRow {
|
||||
id: widgetTransparencySlider
|
||||
text: I18n.tr("Widget Transparency")
|
||||
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
unit: "%"
|
||||
defaultValue: 100
|
||||
onSliderDragFinished: finalValue => {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
widgetTransparency: finalValue / 100
|
||||
});
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: widgetTransparencySlider
|
||||
property: "value"
|
||||
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
iconName: "rounded_corner"
|
||||
title: I18n.tr("Corners & Background")
|
||||
@@ -1299,111 +1447,6 @@ Item {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
iconName: "opacity"
|
||||
title: I18n.tr("Transparency")
|
||||
settingKey: "barTransparency"
|
||||
visible: selectedBarConfig?.enabled
|
||||
|
||||
SettingsSliderRow {
|
||||
id: barTransparencySlider
|
||||
text: I18n.tr("Bar Transparency")
|
||||
value: (selectedBarConfig?.transparency ?? 1.0) * 100
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
unit: "%"
|
||||
defaultValue: 100
|
||||
onSliderDragFinished: finalValue => {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
transparency: finalValue / 100
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: barTransparencySlider
|
||||
property: "value"
|
||||
value: (selectedBarConfig?.transparency ?? 1.0) * 100
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
|
||||
SettingsSliderRow {
|
||||
id: widgetTransparencySlider
|
||||
text: I18n.tr("Widget Transparency")
|
||||
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
unit: "%"
|
||||
defaultValue: 100
|
||||
onSliderDragFinished: finalValue => {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
widgetTransparency: finalValue / 100
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: widgetTransparencySlider
|
||||
property: "value"
|
||||
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SettingsSliderCard {
|
||||
id: fontScaleSliderCard
|
||||
iconName: "text_fields"
|
||||
title: I18n.tr("Font Scale")
|
||||
description: I18n.tr("Scale DankBar font sizes independently")
|
||||
visible: selectedBarConfig?.enabled
|
||||
minimum: 50
|
||||
maximum: 200
|
||||
value: Math.round((selectedBarConfig?.fontScale ?? 1.0) * 100)
|
||||
unit: "%"
|
||||
defaultValue: 100
|
||||
onSliderDragFinished: finalValue => {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
fontScale: finalValue / 100
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: fontScaleSliderCard
|
||||
property: "value"
|
||||
value: Math.round((selectedBarConfig?.fontScale ?? 1.0) * 100)
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
|
||||
SettingsSliderCard {
|
||||
id: iconScaleSliderCard
|
||||
iconName: "interests"
|
||||
title: I18n.tr("Icon Scale")
|
||||
description: I18n.tr("Scale DankBar icon sizes independently")
|
||||
visible: selectedBarConfig?.enabled
|
||||
minimum: 50
|
||||
maximum: 200
|
||||
value: Math.round((selectedBarConfig?.iconScale ?? 1.0) * 100)
|
||||
unit: "%"
|
||||
defaultValue: 100
|
||||
onSliderDragFinished: finalValue => {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
iconScale: finalValue / 100
|
||||
});
|
||||
notifyHorizontalBarChange();
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: iconScaleSliderCard
|
||||
property: "value"
|
||||
value: Math.round((selectedBarConfig?.iconScale ?? 1.0) * 100)
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -231,13 +231,16 @@ Singleton {
|
||||
const compositor = CompositorService.compositor;
|
||||
const profilesDir = getProfilesDir();
|
||||
const profileFile = profilesDir + "/" + profileId + getProfileExtension();
|
||||
const isActive = SettingsData.getActiveDisplayProfile(compositor) === profileId;
|
||||
|
||||
profilesLoading = true;
|
||||
Proc.runCommand("delete-profile", ["rm", "-f", profileFile], (output, exitCode) => {
|
||||
profilesLoading = false;
|
||||
SettingsData.removeDisplayProfile(compositor, profileId);
|
||||
if (SettingsData.getActiveDisplayProfile(compositor) === profileId)
|
||||
if (isActive) {
|
||||
SettingsData.setActiveDisplayProfile(compositor, "");
|
||||
backendWriteOutputsConfig(allOutputs);
|
||||
}
|
||||
const updated = JSON.parse(JSON.stringify(validatedProfiles));
|
||||
delete updated[profileId];
|
||||
validatedProfiles = updated;
|
||||
|
||||
@@ -1281,15 +1281,6 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
DankActionButton {
|
||||
iconName: "qr_code"
|
||||
buttonSize: 28
|
||||
visible: modelData.secured && modelData.saved
|
||||
onClicked: {
|
||||
PopoutService.showWifiQRCodeModal(modelData.ssid);
|
||||
}
|
||||
}
|
||||
|
||||
DankActionButton {
|
||||
iconName: isPinned ? "push_pin" : "push_pin"
|
||||
buttonSize: 28
|
||||
|
||||
@@ -386,12 +386,22 @@ Item {
|
||||
radius: Theme.cornerRadius
|
||||
color: Theme.surfaceVariant
|
||||
|
||||
CachingImage {
|
||||
Image {
|
||||
anchors.fill: parent
|
||||
anchors.margins: 1
|
||||
imagePath: (Theme.wallpaperPath && !Theme.wallpaperPath.startsWith("#")) ? Theme.wallpaperPath : ""
|
||||
source: {
|
||||
var wp = Theme.wallpaperPath;
|
||||
if (!wp || wp === "" || wp.startsWith("#"))
|
||||
return "";
|
||||
if (wp.startsWith("file://"))
|
||||
wp = wp.substring(7);
|
||||
return "file://" + wp.split('/').map(s => encodeURIComponent(s)).join('/');
|
||||
}
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
visible: Theme.wallpaperPath && !Theme.wallpaperPath.startsWith("#")
|
||||
sourceSize.width: 120
|
||||
sourceSize.height: 120
|
||||
asynchronous: true
|
||||
layer.enabled: true
|
||||
layer.effect: MultiEffect {
|
||||
maskEnabled: true
|
||||
|
||||
@@ -401,19 +401,25 @@ Item {
|
||||
radius: Theme.cornerRadius
|
||||
color: Theme.surfaceVariant
|
||||
|
||||
CachingImage {
|
||||
Image {
|
||||
anchors.fill: parent
|
||||
anchors.margins: 1
|
||||
imagePath: {
|
||||
var lightWallpaper = SessionData.wallpaperPathLight;
|
||||
return (lightWallpaper !== "" && !lightWallpaper.startsWith("#")) ? lightWallpaper : "";
|
||||
source: {
|
||||
var wp = SessionData.wallpaperPathLight;
|
||||
if (wp === "" || wp.startsWith("#"))
|
||||
return "";
|
||||
if (wp.startsWith("file://"))
|
||||
wp = wp.substring(7);
|
||||
return "file://" + wp.split('/').map(s => encodeURIComponent(s)).join('/');
|
||||
}
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
visible: {
|
||||
var lightWallpaper = SessionData.wallpaperPathLight;
|
||||
return lightWallpaper !== "" && !lightWallpaper.startsWith("#");
|
||||
}
|
||||
maxCacheSize: 160
|
||||
sourceSize.width: 160
|
||||
sourceSize.height: 160
|
||||
asynchronous: true
|
||||
layer.enabled: true
|
||||
layer.effect: MultiEffect {
|
||||
maskEnabled: true
|
||||
@@ -585,19 +591,25 @@ Item {
|
||||
radius: Theme.cornerRadius
|
||||
color: Theme.surfaceVariant
|
||||
|
||||
CachingImage {
|
||||
Image {
|
||||
anchors.fill: parent
|
||||
anchors.margins: 1
|
||||
imagePath: {
|
||||
var darkWallpaper = SessionData.wallpaperPathDark;
|
||||
return (darkWallpaper !== "" && !darkWallpaper.startsWith("#")) ? darkWallpaper : "";
|
||||
source: {
|
||||
var wp = SessionData.wallpaperPathDark;
|
||||
if (wp === "" || wp.startsWith("#"))
|
||||
return "";
|
||||
if (wp.startsWith("file://"))
|
||||
wp = wp.substring(7);
|
||||
return "file://" + wp.split('/').map(s => encodeURIComponent(s)).join('/');
|
||||
}
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
visible: {
|
||||
var darkWallpaper = SessionData.wallpaperPathDark;
|
||||
return darkWallpaper !== "" && !darkWallpaper.startsWith("#");
|
||||
}
|
||||
maxCacheSize: 160
|
||||
sourceSize.width: 160
|
||||
sourceSize.height: 160
|
||||
asynchronous: true
|
||||
layer.enabled: true
|
||||
layer.effect: MultiEffect {
|
||||
maskEnabled: true
|
||||
|
||||
@@ -83,8 +83,61 @@ Variants {
|
||||
|
||||
readonly property bool transitioning: transitionAnimation.running
|
||||
property bool effectActive: false
|
||||
property bool _renderSettling: true
|
||||
property bool useNextForEffect: false
|
||||
property string pendingWallpaper: ""
|
||||
property string _deferredSource: ""
|
||||
|
||||
Connections {
|
||||
target: currentWallpaper
|
||||
function onStatusChanged() {
|
||||
if (currentWallpaper.status === Image.Ready) {
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function _recheckScreenScale() {
|
||||
const newScale = CompositorService.getScreenScale(modelData);
|
||||
if (newScale !== root.screenScale) {
|
||||
console.info("WallpaperBackground: screen scale corrected for", modelData.name + ":", root.screenScale, "->", newScale);
|
||||
root.screenScale = newScale;
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: NiriService
|
||||
function onDisplayScalesChanged() {
|
||||
root._recheckScreenScale();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: WlrOutputService
|
||||
function onWlrOutputAvailableChanged() {
|
||||
root._recheckScreenScale();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: CompositorService
|
||||
function onRandrDataReady() {
|
||||
if (root._deferredSource) {
|
||||
const src = root._deferredSource;
|
||||
root._deferredSource = "";
|
||||
root.setWallpaperImmediate(src);
|
||||
} else {
|
||||
root._recheckScreenScale();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: renderSettleTimer
|
||||
interval: 100
|
||||
onTriggered: root._renderSettling = false
|
||||
}
|
||||
|
||||
function getFillMode(modeName) {
|
||||
switch (modeName) {
|
||||
@@ -110,12 +163,12 @@ Variants {
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (typeof wallpaperWindow.updatesEnabled !== "undefined")
|
||||
wallpaperWindow.updatesEnabled = Qt.binding(() => root.effectActive || root._renderSettling || currentWallpaper.status === Image.Loading || nextWallpaper.status === Image.Loading);
|
||||
|
||||
if (!source) {
|
||||
isInitialized = true;
|
||||
return;
|
||||
root._renderSettling = false;
|
||||
}
|
||||
const formattedSource = source.startsWith("file://") ? source : encodeFileUrl(source);
|
||||
setWallpaperImmediate(formattedSource);
|
||||
isInitialized = true;
|
||||
}
|
||||
|
||||
@@ -128,8 +181,11 @@ Variants {
|
||||
const formattedSource = source.startsWith("file://") ? source : encodeFileUrl(source);
|
||||
|
||||
if (!isInitialized || !currentWallpaper.source) {
|
||||
if (!CompositorService.randrReady) {
|
||||
_deferredSource = formattedSource;
|
||||
return;
|
||||
}
|
||||
setWallpaperImmediate(formattedSource);
|
||||
isInitialized = true;
|
||||
return;
|
||||
}
|
||||
if (CompositorService.isNiri && SessionData.isSwitchingMode) {
|
||||
@@ -143,6 +199,9 @@ Variants {
|
||||
transitionAnimation.stop();
|
||||
root.transitionProgress = 0.0;
|
||||
root.effectActive = false;
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
root.screenScale = CompositorService.getScreenScale(modelData);
|
||||
currentWallpaper.source = newSource;
|
||||
nextWallpaper.source = "";
|
||||
}
|
||||
@@ -171,6 +230,7 @@ Variants {
|
||||
return;
|
||||
if (!newPath || newPath.startsWith("#"))
|
||||
return;
|
||||
root.screenScale = CompositorService.getScreenScale(modelData);
|
||||
if (root.transitioning || root.effectActive) {
|
||||
root.pendingWallpaper = newPath;
|
||||
return;
|
||||
@@ -222,7 +282,7 @@ Variants {
|
||||
}
|
||||
|
||||
readonly property int maxTextureSize: 8192
|
||||
property real screenScale: CompositorService.getScreenScale(modelData)
|
||||
property real screenScale: 1
|
||||
property int textureWidth: Math.min(Math.round(modelData.width * screenScale), maxTextureSize)
|
||||
property int textureHeight: Math.min(Math.round(modelData.height * screenScale), maxTextureSize)
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ Singleton {
|
||||
function registerWidget(widgetId, screenName, widgetRef) {
|
||||
if (!widgetId || !screenName || !widgetRef)
|
||||
return;
|
||||
if (typeof widgetRegistry !== "object" || widgetRegistry === null)
|
||||
widgetRegistry = ({});
|
||||
|
||||
if (!widgetRegistry[widgetId])
|
||||
widgetRegistry[widgetId] = {};
|
||||
@@ -29,6 +31,8 @@ Singleton {
|
||||
function unregisterWidget(widgetId, screenName) {
|
||||
if (!widgetId || !screenName)
|
||||
return;
|
||||
if (typeof widgetRegistry !== "object" || widgetRegistry === null)
|
||||
return;
|
||||
if (!widgetRegistry[widgetId])
|
||||
return;
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ Singleton {
|
||||
id: root
|
||||
|
||||
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 changelogMarkerPath: configDir + "/.changelog-" + currentVersion
|
||||
|
||||
@@ -29,11 +29,37 @@ Singleton {
|
||||
readonly property string labwcPid: Quickshell.env("LABWC_PID")
|
||||
property bool useNiriSorting: isNiri && NiriService
|
||||
|
||||
property var randrScales: ({})
|
||||
property bool randrReady: false
|
||||
signal randrDataReady
|
||||
|
||||
property var sortedToplevels: []
|
||||
property bool _sortScheduled: false
|
||||
|
||||
signal toplevelsChanged
|
||||
|
||||
function fetchRandrData() {
|
||||
Proc.runCommand("randr", ["dms", "randr", "--json"], (output, exitCode) => {
|
||||
if (exitCode === 0 && output) {
|
||||
try {
|
||||
const data = JSON.parse(output.trim());
|
||||
if (data.outputs && Array.isArray(data.outputs)) {
|
||||
const scales = {};
|
||||
for (const out of data.outputs) {
|
||||
if (out.name && out.scale > 0)
|
||||
scales[out.name] = out.scale;
|
||||
}
|
||||
randrScales = scales;
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn("CompositorService: failed to parse randr data:", e);
|
||||
}
|
||||
}
|
||||
randrReady = true;
|
||||
randrDataReady();
|
||||
}, 0, 3000);
|
||||
}
|
||||
|
||||
function getScreenScale(screen) {
|
||||
if (!screen)
|
||||
return 1;
|
||||
@@ -42,6 +68,10 @@ Singleton {
|
||||
return screen.devicePixelRatio || 1;
|
||||
}
|
||||
|
||||
const randrScale = randrScales[screen.name];
|
||||
if (randrScale !== undefined && randrScale > 0)
|
||||
return Math.round(randrScale * 20) / 20;
|
||||
|
||||
if (WlrOutputService.wlrOutputAvailable && screen) {
|
||||
const wlrOutput = WlrOutputService.getOutput(screen.name);
|
||||
if (wlrOutput?.enabled && wlrOutput.scale !== undefined && wlrOutput.scale > 0) {
|
||||
@@ -137,6 +167,7 @@ Singleton {
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
fetchRandrData();
|
||||
detectCompositor();
|
||||
scheduleSort();
|
||||
Qt.callLater(() => {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
pragma Singleton
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtCore
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
@@ -11,9 +13,6 @@ Singleton {
|
||||
|
||||
property bool dsearchAvailable: false
|
||||
property int searchIdCounter: 0
|
||||
property int indexVersion: 0
|
||||
property bool supportsTypeFilter: false
|
||||
property bool versionChecked: false
|
||||
|
||||
signal searchResultsReceived(var results)
|
||||
signal statsReceived(var stats)
|
||||
@@ -27,157 +26,118 @@ Singleton {
|
||||
stdout: SplitParser {
|
||||
onRead: line => {
|
||||
if (line && line.trim().length > 0) {
|
||||
root.dsearchAvailable = true;
|
||||
root.dsearchAvailable = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onExited: exitCode => {
|
||||
if (exitCode !== 0) {
|
||||
root.dsearchAvailable = false;
|
||||
} else {
|
||||
root._checkVersion();
|
||||
root.dsearchAvailable = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function _checkVersion() {
|
||||
Proc.runCommand("dsearch-version", ["dsearch", "version", "--json"], (stdout, exitCode) => {
|
||||
root.versionChecked = true;
|
||||
if (exitCode !== 0)
|
||||
return;
|
||||
const response = JSON.parse(stdout);
|
||||
root.indexVersion = response.index_schema || 0;
|
||||
root.supportsTypeFilter = root.indexVersion >= 2;
|
||||
});
|
||||
}
|
||||
|
||||
function ping(callback) {
|
||||
if (!dsearchAvailable) {
|
||||
if (callback) {
|
||||
callback({
|
||||
"error": "dsearch not available"
|
||||
});
|
||||
callback({ "error": "dsearch not available" })
|
||||
}
|
||||
return;
|
||||
return
|
||||
}
|
||||
|
||||
Proc.runCommand("dsearch-ping", ["dsearch", "ping", "--json"], (stdout, exitCode) => {
|
||||
if (callback) {
|
||||
if (exitCode === 0) {
|
||||
try {
|
||||
const response = JSON.parse(stdout);
|
||||
callback({
|
||||
"result": response
|
||||
});
|
||||
const response = JSON.parse(stdout)
|
||||
callback({ "result": response })
|
||||
} catch (e) {
|
||||
callback({
|
||||
"error": "failed to parse ping response"
|
||||
});
|
||||
callback({ "error": "failed to parse ping response" })
|
||||
}
|
||||
} else {
|
||||
callback({
|
||||
"error": "ping failed"
|
||||
});
|
||||
callback({ "error": "ping failed" })
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
function search(query, params, callback) {
|
||||
if (!query || query.length === 0) {
|
||||
if (callback) {
|
||||
callback({
|
||||
"error": "query is required"
|
||||
});
|
||||
callback({ "error": "query is required" })
|
||||
}
|
||||
return;
|
||||
return
|
||||
}
|
||||
|
||||
if (!dsearchAvailable) {
|
||||
if (callback) {
|
||||
callback({
|
||||
"error": "dsearch not available"
|
||||
});
|
||||
callback({ "error": "dsearch not available" })
|
||||
}
|
||||
return;
|
||||
return
|
||||
}
|
||||
|
||||
const args = ["dsearch", "search", query, "--json"];
|
||||
const args = ["dsearch", "search", query, "--json"]
|
||||
|
||||
if (params) {
|
||||
if (params.limit !== undefined) {
|
||||
args.push("-n", String(params.limit));
|
||||
}
|
||||
if (params.type) {
|
||||
args.push("-t", params.type);
|
||||
args.push("-n", String(params.limit))
|
||||
}
|
||||
if (params.ext) {
|
||||
args.push("-e", params.ext);
|
||||
}
|
||||
if (params.folder) {
|
||||
args.push("--folder", params.folder);
|
||||
args.push("-e", params.ext)
|
||||
}
|
||||
if (params.field) {
|
||||
args.push("-f", params.field);
|
||||
args.push("-f", params.field)
|
||||
}
|
||||
if (params.fuzzy) {
|
||||
args.push("--fuzzy");
|
||||
args.push("--fuzzy")
|
||||
}
|
||||
if (params.sort) {
|
||||
args.push("--sort", params.sort);
|
||||
args.push("--sort", params.sort)
|
||||
}
|
||||
if (params.desc !== undefined) {
|
||||
args.push("--desc=" + (params.desc ? "true" : "false"));
|
||||
args.push("--desc=" + (params.desc ? "true" : "false"))
|
||||
}
|
||||
if (params.minSize !== undefined) {
|
||||
args.push("--min-size", String(params.minSize));
|
||||
args.push("--min-size", String(params.minSize))
|
||||
}
|
||||
if (params.maxSize !== undefined) {
|
||||
args.push("--max-size", String(params.maxSize));
|
||||
args.push("--max-size", String(params.maxSize))
|
||||
}
|
||||
}
|
||||
|
||||
Proc.runCommand("dsearch-search", args, (stdout, exitCode) => {
|
||||
if (exitCode === 0) {
|
||||
try {
|
||||
const response = JSON.parse(stdout);
|
||||
searchResultsReceived(response);
|
||||
const response = JSON.parse(stdout)
|
||||
searchResultsReceived(response)
|
||||
if (callback) {
|
||||
callback({
|
||||
"result": response
|
||||
});
|
||||
callback({ "result": response })
|
||||
}
|
||||
} catch (e) {
|
||||
const error = "failed to parse search response";
|
||||
errorOccurred(error);
|
||||
const error = "failed to parse search response"
|
||||
errorOccurred(error)
|
||||
if (callback) {
|
||||
callback({
|
||||
"error": error
|
||||
});
|
||||
callback({ "error": error })
|
||||
}
|
||||
}
|
||||
} else if (exitCode === 124) {
|
||||
const error = "search timed out";
|
||||
errorOccurred(error);
|
||||
const error = "search timed out"
|
||||
errorOccurred(error)
|
||||
if (callback) {
|
||||
callback({
|
||||
"error": error
|
||||
});
|
||||
callback({ "error": error })
|
||||
}
|
||||
} else {
|
||||
const error = "search failed";
|
||||
errorOccurred(error);
|
||||
const error = "search failed"
|
||||
errorOccurred(error)
|
||||
if (callback) {
|
||||
callback({
|
||||
"error": error
|
||||
});
|
||||
callback({ "error": error })
|
||||
}
|
||||
}
|
||||
}, 100, 5000);
|
||||
}, 100, 5000)
|
||||
}
|
||||
|
||||
function rediscover() {
|
||||
checkProcess.running = true;
|
||||
checkProcess.running = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,52 +8,87 @@ import Quickshell.Io
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
property var _cache: ({})
|
||||
|
||||
function resolveIconPath(moddedAppId) {
|
||||
const entry = DesktopEntries.heuristicLookup(moddedAppId)
|
||||
const appIds = [moddedAppId, moddedAppId.toLowerCase()];
|
||||
if (!moddedAppId)
|
||||
return "";
|
||||
|
||||
const lastPart = moddedAppId.split('.').pop();
|
||||
if (lastPart && lastPart !== moddedAppId) {
|
||||
appIds.push(lastPart);
|
||||
if (_cache[moddedAppId] !== undefined)
|
||||
return _cache[moddedAppId];
|
||||
|
||||
const firstChar = lastPart.charAt(0);
|
||||
const rest = lastPart.slice(1);
|
||||
let toggled;
|
||||
const result = (function() {
|
||||
// 1. Try heuristic lookup (standard)
|
||||
const entry = DesktopEntries.heuristicLookup(moddedAppId);
|
||||
let icon = Quickshell.iconPath(entry?.icon, true);
|
||||
if (icon && icon !== "")
|
||||
return icon;
|
||||
|
||||
if (firstChar === firstChar.toLowerCase()) {
|
||||
toggled = firstChar.toUpperCase() + rest;
|
||||
} else {
|
||||
toggled = firstChar.toLowerCase() + rest;
|
||||
}
|
||||
// 2. Try the appId itself as an icon name
|
||||
icon = Quickshell.iconPath(moddedAppId, true);
|
||||
if (icon && icon !== "")
|
||||
return icon;
|
||||
|
||||
if (toggled !== lastPart) {
|
||||
appIds.push(toggled);
|
||||
}
|
||||
}
|
||||
for (const appId of appIds){
|
||||
let icon = Quickshell.iconPath(entry?.icon, true)
|
||||
if (icon && icon !== "") return icon
|
||||
// 3. Try variations of the appId (lowercase, last part)
|
||||
const appIds = [moddedAppId.toLowerCase()];
|
||||
const lastPart = moddedAppId.split('.').pop();
|
||||
if (lastPart && lastPart !== moddedAppId) {
|
||||
appIds.push(lastPart);
|
||||
appIds.push(lastPart.toLowerCase());
|
||||
}
|
||||
|
||||
let execPath = entry?.execString?.replace(/\/bin.*/, "")
|
||||
if (!execPath) continue
|
||||
for (const id of appIds) {
|
||||
icon = Quickshell.iconPath(id, true);
|
||||
if (icon && icon !== "")
|
||||
return icon;
|
||||
}
|
||||
|
||||
//Check that the app is installed with nix/guix
|
||||
if (execPath.startsWith("/nix/store/") || execPath.startsWith("/gnu/store/")) {
|
||||
const basePath = execPath
|
||||
const sizes = ["256x256", "128x128", "64x64", "48x48", "32x32", "24x24", "16x16"]
|
||||
// 4. Deep search in all desktop entries (if the above fail)
|
||||
// This is slow-ish but only happens once for failed icons
|
||||
const strippedId = moddedAppId.replace(/-bin$/, "").toLowerCase();
|
||||
const allEntries = DesktopEntries.applications.values;
|
||||
for (let i = 0; i < allEntries.length; i++) {
|
||||
const e = allEntries[i];
|
||||
const eId = (e.id || "").toLowerCase();
|
||||
const eName = (e.name || "").toLowerCase();
|
||||
const eExec = (e.execString || "").toLowerCase();
|
||||
|
||||
let iconPath = `${basePath}/share/icons/hicolor/scalable/apps/${appId}.svg`
|
||||
icon = Quickshell.iconPath(iconPath, true)
|
||||
if (icon && icon !== "") return icon
|
||||
if (eId.includes(strippedId) || eName.includes(strippedId) || eExec.includes(strippedId)) {
|
||||
icon = Quickshell.iconPath(e.icon, true);
|
||||
if (icon && icon !== "")
|
||||
return icon;
|
||||
}
|
||||
}
|
||||
|
||||
for (const size of sizes) {
|
||||
iconPath = `${basePath}/share/icons/hicolor/${size}/apps/${appId}.png`
|
||||
icon = Quickshell.iconPath(iconPath, true)
|
||||
if (icon && icon !== "") return icon
|
||||
}
|
||||
}
|
||||
// 5. Nix/Guix specific store check (as a last resort)
|
||||
for (const appId of appIds) {
|
||||
let execPath = entry?.execString?.replace(/\/bin.*/, "");
|
||||
if (!execPath)
|
||||
continue;
|
||||
|
||||
if (execPath.startsWith("/nix/store/") || execPath.startsWith("/gnu/store/")) {
|
||||
const basePath = execPath;
|
||||
const sizes = ["256x256", "128x128", "64x64", "48x48", "32x32", "24x24", "16x16"];
|
||||
|
||||
let iconPath = `${basePath}/share/icons/hicolor/scalable/apps/${appId}.svg`;
|
||||
icon = Quickshell.iconPath(iconPath, true);
|
||||
if (icon && icon !== "")
|
||||
return icon;
|
||||
|
||||
for (const size of sizes) {
|
||||
iconPath = `${basePath}/share/icons/hicolor/${size}/apps/${appId}.png`;
|
||||
icon = Quickshell.iconPath(iconPath, true);
|
||||
if (icon && icon !== "")
|
||||
return icon;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
})();
|
||||
|
||||
_cache[moddedAppId] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ Singleton {
|
||||
|
||||
Timer {
|
||||
id: suppressResetTimer
|
||||
interval: 2000
|
||||
interval: 5000
|
||||
onTriggered: root.matugenSuppression = false
|
||||
}
|
||||
|
||||
|
||||
@@ -158,7 +158,10 @@ Singleton {
|
||||
continue;
|
||||
const urg = typeof item.urgency === "number" ? item.urgency : 1;
|
||||
const body = item.body || "";
|
||||
const htmlBody = item.htmlBody || _resolveHtmlBody(body);
|
||||
let htmlBody = item.htmlBody || _resolveHtmlBody(body);
|
||||
if (htmlBody) {
|
||||
htmlBody = htmlBody.replace(/<img\b[^>]*>/gi, "");
|
||||
}
|
||||
loaded.push({
|
||||
id: item.id || "",
|
||||
summary: item.summary || "",
|
||||
@@ -720,8 +723,8 @@ Singleton {
|
||||
}
|
||||
|
||||
required property Notification notification
|
||||
readonly property string summary: notification?.summary ?? ""
|
||||
readonly property string body: notification?.body ?? ""
|
||||
readonly property string summary: (notification?.summary ?? "").replace(/<img\b[^>]*>/gi, "")
|
||||
readonly property string body: (notification?.body ?? "").replace(/<img\b[^>]*>/gi, "")
|
||||
readonly property string htmlBody: root._resolveHtmlBody(body)
|
||||
readonly property string appIcon: notification?.appIcon ?? ""
|
||||
readonly property string appName: {
|
||||
@@ -978,22 +981,34 @@ Singleton {
|
||||
function _resolveHtmlBody(body) {
|
||||
if (!body)
|
||||
return "";
|
||||
if (/<\/?[a-z][\s\S]*>/i.test(body))
|
||||
return body;
|
||||
|
||||
// Decode percent-encoded URLs (e.g. https%3A%2F%2F → https://)
|
||||
body = body.replace(/\bhttps?%3A%2F%2F[^\s]+/gi, match => {
|
||||
try { return decodeURIComponent(match); }
|
||||
catch (e) { return match; }
|
||||
});
|
||||
let result = body;
|
||||
|
||||
if (/&(#\d+|#x[0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]+);/.test(body)) {
|
||||
const decoded = _decodeEntities(body);
|
||||
if (/<\/?[a-z][\s\S]*>/i.test(decoded))
|
||||
return decoded;
|
||||
return Markdown2Html.markdownToHtml(decoded);
|
||||
if (/<\/?[a-z][\s\S]*>/i.test(body)) {
|
||||
result = body;
|
||||
} else {
|
||||
// Decode percent-encoded URLs (e.g. https%3A%2F%2F → https://)
|
||||
let processed = body.replace(/\bhttps?%3A%2F%2F[^\s]+/gi, match => {
|
||||
try {
|
||||
return decodeURIComponent(match);
|
||||
} catch (e) {
|
||||
return match;
|
||||
}
|
||||
});
|
||||
|
||||
if (/&(#\d+|#x[0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]+);/.test(processed)) {
|
||||
const decoded = _decodeEntities(processed);
|
||||
if (/<\/?[a-z][\s\S]*>/i.test(decoded))
|
||||
result = decoded;
|
||||
else
|
||||
result = Markdown2Html.markdownToHtml(decoded);
|
||||
} else {
|
||||
result = Markdown2Html.markdownToHtml(processed);
|
||||
}
|
||||
}
|
||||
return Markdown2Html.markdownToHtml(body);
|
||||
|
||||
// Strip out image tags to prevent IP tracking
|
||||
return result.replace(/<img\b[^>]*>/gi, "");
|
||||
}
|
||||
|
||||
function getGroupKey(wrapper) {
|
||||
|
||||
@@ -9,19 +9,29 @@ Singleton {
|
||||
id: root
|
||||
|
||||
property var controlCenterPopout: null
|
||||
property var controlCenterLoader: null
|
||||
property var notificationCenterPopout: null
|
||||
property var notificationCenterLoader: null
|
||||
property var appDrawerPopout: null
|
||||
property var appDrawerLoader: null
|
||||
property var processListPopout: null
|
||||
property var processListPopoutLoader: null
|
||||
property var dankDashPopout: null
|
||||
property var dankDashPopoutLoader: null
|
||||
property var batteryPopout: null
|
||||
property var batteryPopoutLoader: null
|
||||
property var vpnPopout: null
|
||||
property var vpnPopoutLoader: null
|
||||
property var systemUpdatePopout: null
|
||||
property var systemUpdateLoader: null
|
||||
property var layoutPopout: null
|
||||
property var layoutPopoutLoader: null
|
||||
property var clipboardHistoryPopout: null
|
||||
property var clipboardHistoryPopoutLoader: null
|
||||
|
||||
property var settingsModal: null
|
||||
property var settingsModalLoader: null
|
||||
property var clipboardHistoryModal: null
|
||||
property var clipboardHistoryPopout: null
|
||||
property var dankLauncherV2Modal: null
|
||||
property var dankLauncherV2ModalLoader: null
|
||||
property var powerMenuModal: null
|
||||
@@ -31,8 +41,6 @@ Singleton {
|
||||
property var notificationModal: null
|
||||
property var wifiPasswordModal: null
|
||||
property var wifiPasswordModalLoader: null
|
||||
property var wifiQRCodeModal: null
|
||||
property var wifiQRCodeModalLoader: null
|
||||
property var polkitAuthModal: null
|
||||
property var polkitAuthModalLoader: null
|
||||
property var bluetoothPairingModal: null
|
||||
@@ -61,6 +69,13 @@ Singleton {
|
||||
controlCenterPopout?.close();
|
||||
}
|
||||
|
||||
function unloadControlCenter() {
|
||||
if (!controlCenterLoader)
|
||||
return;
|
||||
controlCenterPopout = null;
|
||||
controlCenterLoader.active = false;
|
||||
}
|
||||
|
||||
function toggleControlCenter(x, y, width, section, screen) {
|
||||
if (controlCenterPopout) {
|
||||
setPosition(controlCenterPopout, x, y, width, section, screen);
|
||||
@@ -79,6 +94,13 @@ Singleton {
|
||||
notificationCenterPopout?.close();
|
||||
}
|
||||
|
||||
function unloadNotificationCenter() {
|
||||
if (!notificationCenterLoader)
|
||||
return;
|
||||
notificationCenterPopout = null;
|
||||
notificationCenterLoader.active = false;
|
||||
}
|
||||
|
||||
function toggleNotificationCenter(x, y, width, section, screen) {
|
||||
if (notificationCenterPopout) {
|
||||
setPosition(notificationCenterPopout, x, y, width, section, screen);
|
||||
@@ -97,6 +119,13 @@ Singleton {
|
||||
appDrawerPopout?.close();
|
||||
}
|
||||
|
||||
function unloadAppDrawer() {
|
||||
if (!appDrawerLoader)
|
||||
return;
|
||||
appDrawerPopout = null;
|
||||
appDrawerLoader.active = false;
|
||||
}
|
||||
|
||||
function toggleAppDrawer(x, y, width, section, screen) {
|
||||
if (appDrawerPopout) {
|
||||
setPosition(appDrawerPopout, x, y, width, section, screen);
|
||||
@@ -115,6 +144,13 @@ Singleton {
|
||||
processListPopout?.close();
|
||||
}
|
||||
|
||||
function unloadProcessListPopout() {
|
||||
if (!processListPopoutLoader)
|
||||
return;
|
||||
processListPopout = null;
|
||||
processListPopoutLoader.active = false;
|
||||
}
|
||||
|
||||
function toggleProcessList(x, y, width, section, screen) {
|
||||
if (processListPopout) {
|
||||
setPosition(processListPopout, x, y, width, section, screen);
|
||||
@@ -163,6 +199,13 @@ Singleton {
|
||||
dankDashPopout.dashVisible = false;
|
||||
}
|
||||
|
||||
function unloadDankDash() {
|
||||
if (!dankDashPopoutLoader)
|
||||
return;
|
||||
dankDashPopout = null;
|
||||
dankDashPopoutLoader.active = false;
|
||||
}
|
||||
|
||||
function toggleDankDash(tabIndex, x, y, width, section, screen) {
|
||||
_dankDashPendingTab = tabIndex || 0;
|
||||
if (dankDashPopout) {
|
||||
@@ -219,6 +262,13 @@ Singleton {
|
||||
batteryPopout?.close();
|
||||
}
|
||||
|
||||
function unloadBattery() {
|
||||
if (!batteryPopoutLoader)
|
||||
return;
|
||||
batteryPopout = null;
|
||||
batteryPopoutLoader.active = false;
|
||||
}
|
||||
|
||||
function toggleBattery(x, y, width, section, screen) {
|
||||
if (batteryPopout) {
|
||||
setPosition(batteryPopout, x, y, width, section, screen);
|
||||
@@ -237,6 +287,13 @@ Singleton {
|
||||
vpnPopout?.close();
|
||||
}
|
||||
|
||||
function unloadVpn() {
|
||||
if (!vpnPopoutLoader)
|
||||
return;
|
||||
vpnPopout = null;
|
||||
vpnPopoutLoader.active = false;
|
||||
}
|
||||
|
||||
function toggleVpn(x, y, width, section, screen) {
|
||||
if (vpnPopout) {
|
||||
setPosition(vpnPopout, x, y, width, section, screen);
|
||||
@@ -255,6 +312,13 @@ Singleton {
|
||||
systemUpdatePopout?.close();
|
||||
}
|
||||
|
||||
function unloadSystemUpdate() {
|
||||
if (!systemUpdateLoader)
|
||||
return;
|
||||
systemUpdatePopout = null;
|
||||
systemUpdateLoader.active = false;
|
||||
}
|
||||
|
||||
function toggleSystemUpdate(x, y, width, section, screen) {
|
||||
if (systemUpdatePopout) {
|
||||
setPosition(systemUpdatePopout, x, y, width, section, screen);
|
||||
@@ -415,6 +479,20 @@ Singleton {
|
||||
clipboardHistoryModal?.close();
|
||||
}
|
||||
|
||||
function unloadClipboardHistoryPopout() {
|
||||
if (!clipboardHistoryPopoutLoader)
|
||||
return;
|
||||
clipboardHistoryPopout = null;
|
||||
clipboardHistoryPopoutLoader.active = false;
|
||||
}
|
||||
|
||||
function unloadLayoutPopout() {
|
||||
if (!layoutPopoutLoader)
|
||||
return;
|
||||
layoutPopout = null;
|
||||
layoutPopoutLoader.active = false;
|
||||
}
|
||||
|
||||
property bool _dankLauncherV2WantsOpen: false
|
||||
property bool _dankLauncherV2WantsToggle: false
|
||||
property string _dankLauncherV2PendingQuery: ""
|
||||
@@ -583,13 +661,6 @@ Singleton {
|
||||
wifiPasswordModal.show(ssid);
|
||||
}
|
||||
|
||||
function showWifiQRCodeModal(ssid) {
|
||||
if (wifiQRCodeModalLoader)
|
||||
wifiQRCodeModalLoader.active = true;
|
||||
if (wifiQRCodeModal)
|
||||
wifiQRCodeModal.show(ssid);
|
||||
}
|
||||
|
||||
function showHiddenNetworkModal() {
|
||||
if (wifiPasswordModalLoader)
|
||||
wifiPasswordModalLoader.active = true;
|
||||
|
||||
@@ -1 +1 @@
|
||||
v1.5-beta
|
||||
v1.4.3
|
||||
|
||||
@@ -236,7 +236,14 @@ Item {
|
||||
|
||||
parent: Overlay.overlay
|
||||
width: root.popupWidth === -1 ? undefined : (root.popupWidth > 0 ? root.popupWidth : (dropdown.width + root.popupWidthOffset))
|
||||
height: Math.min(root.maxPopupHeight, (root.enableFuzzySearch ? 54 : 0) + Math.min(filteredOptions.length, 10) * 36 + 16)
|
||||
height: {
|
||||
let h = root.enableFuzzySearch ? 54 : 0;
|
||||
if (root.options.length === 0 && root.emptyText !== "")
|
||||
h += 32;
|
||||
else
|
||||
h += Math.min(filteredOptions.length, 10) * 36;
|
||||
return Math.min(root.maxPopupHeight, h + 16);
|
||||
}
|
||||
padding: 0
|
||||
modal: true
|
||||
dim: false
|
||||
|
||||
@@ -288,6 +288,10 @@ Item {
|
||||
screen: root.screen
|
||||
visible: false
|
||||
color: "transparent"
|
||||
Component.onCompleted: {
|
||||
if (typeof updatesEnabled !== "undefined")
|
||||
updatesEnabled = false;
|
||||
}
|
||||
|
||||
WlrLayershell.namespace: root.layerNamespace + ":background"
|
||||
WlrLayershell.layer: WlrLayershell.Top
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -21,7 +21,7 @@
|
||||
"%1 custom animation duration": ""
|
||||
},
|
||||
"%1 days ago": {
|
||||
"%1 days ago": ""
|
||||
"%1 days ago": "hace %1 días"
|
||||
},
|
||||
"%1 disconnected": {
|
||||
"%1 disconnected": ""
|
||||
@@ -45,7 +45,7 @@
|
||||
"%1 job(s)": "%1 trabajo(s)"
|
||||
},
|
||||
"%1 notifications": {
|
||||
"%1 notifications": ""
|
||||
"%1 notifications": "%1 notificaciones"
|
||||
},
|
||||
"%1 printer(s)": {
|
||||
"%1 printer(s)": "%1 impresora(s)"
|
||||
@@ -57,13 +57,13 @@
|
||||
"%1 widgets": "%1 widgets"
|
||||
},
|
||||
"%1m ago": {
|
||||
"%1m ago": ""
|
||||
"%1m ago": "hace %1m"
|
||||
},
|
||||
"(Unnamed)": {
|
||||
"(Unnamed)": "(Sin nombre)"
|
||||
},
|
||||
"+ %1 more": {
|
||||
"+ %1 more": ""
|
||||
"+ %1 more": "+ %1 más"
|
||||
},
|
||||
"0 = square corners": {
|
||||
"0 = square corners": "0 = esquinas cuadradas"
|
||||
@@ -78,7 +78,7 @@
|
||||
"1 minute": "1 minuto"
|
||||
},
|
||||
"1 notification": {
|
||||
"1 notification": ""
|
||||
"1 notification": "1 notificación"
|
||||
},
|
||||
"1 second": {
|
||||
"1 second": "1 segundo"
|
||||
@@ -183,7 +183,7 @@
|
||||
"About": "Información"
|
||||
},
|
||||
"Accent Color": {
|
||||
"Accent Color": ""
|
||||
"Accent Color": "Color de acento"
|
||||
},
|
||||
"Accept Jobs": {
|
||||
"Accept Jobs": "Aceptar trabajos"
|
||||
@@ -560,7 +560,7 @@
|
||||
"Available Screens (%1)": "Pantallas disponibles (%1)"
|
||||
},
|
||||
"Available in Detailed and Forecast view modes": {
|
||||
"Available in Detailed and Forecast view modes": ""
|
||||
"Available in Detailed and Forecast view modes": "Disponible en modo detallado y pronóstico"
|
||||
},
|
||||
"BSSID": {
|
||||
"BSSID": "BSSID"
|
||||
@@ -659,7 +659,7 @@
|
||||
"Border Opacity": "Opacidad del borde"
|
||||
},
|
||||
"Border Size": {
|
||||
"Border Size": ""
|
||||
"Border Size": "Grosor del borde"
|
||||
},
|
||||
"Border Thickness": {
|
||||
"Border Thickness": "Grosor del borde"
|
||||
@@ -812,7 +812,7 @@
|
||||
"Choose colors from palette": "Escoje colores de la paleta"
|
||||
},
|
||||
"Choose how the weather widget is displayed": {
|
||||
"Choose how the weather widget is displayed": ""
|
||||
"Choose how the weather widget is displayed": "Elige cómo se muestra el widget del tiempo"
|
||||
},
|
||||
"Choose icon": {
|
||||
"Choose icon": "Elegir icono"
|
||||
@@ -1010,7 +1010,7 @@
|
||||
"Communication": "Comunicación"
|
||||
},
|
||||
"Compact": {
|
||||
"Compact": ""
|
||||
"Compact": "Compacto"
|
||||
},
|
||||
"Compact Mode": {
|
||||
"Compact Mode": "Modo compacto"
|
||||
@@ -1253,7 +1253,7 @@
|
||||
"Custom": "Personal"
|
||||
},
|
||||
"Custom Color": {
|
||||
"Custom Color": ""
|
||||
"Custom Color": "Color personalizado"
|
||||
},
|
||||
"Custom Duration": {
|
||||
"Custom Duration": "Duracion personalizada"
|
||||
@@ -1439,7 +1439,7 @@
|
||||
"Desktop Clock": "Reloj de escritorio"
|
||||
},
|
||||
"Detailed": {
|
||||
"Detailed": ""
|
||||
"Detailed": "Detallado"
|
||||
},
|
||||
"Development": {
|
||||
"Development": "Desarrollo"
|
||||
@@ -1541,7 +1541,7 @@
|
||||
"Display currently focused application title": "Mostrar título de la aplicación enfocada"
|
||||
},
|
||||
"Display hourly weather predictions": {
|
||||
"Display hourly weather predictions": ""
|
||||
"Display hourly weather predictions": "Mostrar pronósticos por hora"
|
||||
},
|
||||
"Display only workspaces that contain windows": {
|
||||
"Display only workspaces that contain windows": "Mostrar solo los espacios que contengan ventanas"
|
||||
@@ -1826,7 +1826,7 @@
|
||||
"Fade to lock screen": "Bloquear con transición suave"
|
||||
},
|
||||
"Fade to monitor off": {
|
||||
"Fade to monitor off": ""
|
||||
"Fade to monitor off": "Fundido antes de apagar monitor"
|
||||
},
|
||||
"Failed to activate configuration": {
|
||||
"Failed to activate configuration": "Error al activar la configuración"
|
||||
@@ -2006,7 +2006,7 @@
|
||||
"Failed to write temp file for validation": "Fallo al escribir archivo temporal para la validacion"
|
||||
},
|
||||
"Feels": {
|
||||
"Feels": ""
|
||||
"Feels": "Sensación"
|
||||
},
|
||||
"Feels Like": {
|
||||
"Feels Like": "Temperatura"
|
||||
@@ -2089,6 +2089,12 @@
|
||||
"Fog": {
|
||||
"Fog": ""
|
||||
},
|
||||
"Folder": {
|
||||
"Folder": ""
|
||||
},
|
||||
"Folders": {
|
||||
"Folders": ""
|
||||
},
|
||||
"Follow Monitor Focus": {
|
||||
"Follow Monitor Focus": ""
|
||||
},
|
||||
@@ -2123,7 +2129,7 @@
|
||||
"Force terminal applications to always use dark color schemes": "Forzar que las aplicaciones de terminal usen esquemas de colores oscuros"
|
||||
},
|
||||
"Forecast": {
|
||||
"Forecast": ""
|
||||
"Forecast": "Pronóstico"
|
||||
},
|
||||
"Forecast Days": {
|
||||
"Forecast Days": ""
|
||||
@@ -2207,7 +2213,7 @@
|
||||
"Gradually fade the screen before locking with a configurable grace period": "Desvanecer gradualmente la pantalla antes de bloquear, con una duración configurable"
|
||||
},
|
||||
"Gradually fade the screen before turning off monitors with a configurable grace period": {
|
||||
"Gradually fade the screen before turning off monitors with a configurable grace period": ""
|
||||
"Gradually fade the screen before turning off monitors with a configurable grace period": "La pantalla se funde a negro antes de apagar el monitor, tras un intervalo configurable"
|
||||
},
|
||||
"Graph Time Range": {
|
||||
"Graph Time Range": "Gráfico Intervalo de tiempo"
|
||||
@@ -2396,7 +2402,7 @@
|
||||
"Humidity": "Humedad"
|
||||
},
|
||||
"Hyprland Layout Overrides": {
|
||||
"Hyprland Layout Overrides": ""
|
||||
"Hyprland Layout Overrides": "Sobreescribir opciones de Hyprland"
|
||||
},
|
||||
"Hyprland Options": {
|
||||
"Hyprland Options": ""
|
||||
@@ -2413,6 +2419,9 @@
|
||||
"Icon": {
|
||||
"Icon": ""
|
||||
},
|
||||
"Icon Scale": {
|
||||
"Icon Scale": ""
|
||||
},
|
||||
"Icon Size": {
|
||||
"Icon Size": "Tamaño de icono"
|
||||
},
|
||||
@@ -2894,7 +2903,7 @@
|
||||
"Lock before suspend": "Bloquear pantalla antes de suspender"
|
||||
},
|
||||
"Lock fade grace period": {
|
||||
"Lock fade grace period": ""
|
||||
"Lock fade grace period": "Intervalo de fundido antes de bloquear la pantalla"
|
||||
},
|
||||
"Locked": {
|
||||
"Locked": ""
|
||||
@@ -2933,7 +2942,7 @@
|
||||
"Management": "Gestión"
|
||||
},
|
||||
"MangoWC Layout Overrides": {
|
||||
"MangoWC Layout Overrides": ""
|
||||
"MangoWC Layout Overrides": "Sobreescribir opciones de MangoWC"
|
||||
},
|
||||
"Manual Coordinates": {
|
||||
"Manual Coordinates": "Coordenadas manuales"
|
||||
@@ -3013,6 +3022,12 @@
|
||||
"Maximize Detection": {
|
||||
"Maximize Detection": "Maximizar la detección"
|
||||
},
|
||||
"Maximize Widget Icons": {
|
||||
"Maximize Widget Icons": ""
|
||||
},
|
||||
"Maximize Widget Text": {
|
||||
"Maximize Widget Text": ""
|
||||
},
|
||||
"Maximum Entry Size": {
|
||||
"Maximum Entry Size": "Tamaño máximo de entrada"
|
||||
},
|
||||
@@ -3140,7 +3155,7 @@
|
||||
"Monitor Configuration": "Configuracion del monitor"
|
||||
},
|
||||
"Monitor fade grace period": {
|
||||
"Monitor fade grace period": ""
|
||||
"Monitor fade grace period": "Intervalo de fundido antes de apagar el monitor"
|
||||
},
|
||||
"Monitor whose wallpaper drives dynamic theming colors": {
|
||||
"Monitor whose wallpaper drives dynamic theming colors": "Seleccionar monitor que define los colores dinámicos"
|
||||
@@ -3364,6 +3379,9 @@
|
||||
"No files found": {
|
||||
"No files found": "Archivos no encontrados"
|
||||
},
|
||||
"No folders found": {
|
||||
"No folders found": ""
|
||||
},
|
||||
"No hidden apps.": {
|
||||
"No hidden apps.": ""
|
||||
},
|
||||
@@ -3556,6 +3574,9 @@
|
||||
"Open in Browser": {
|
||||
"Open in Browser": ""
|
||||
},
|
||||
"Open in terminal": {
|
||||
"Open in terminal": ""
|
||||
},
|
||||
"Open search bar to find text": {
|
||||
"Open search bar to find text": "Abrir barra de búsqueda para encontrar texto"
|
||||
},
|
||||
@@ -3883,7 +3904,7 @@
|
||||
"Power source": "Fuente de energia"
|
||||
},
|
||||
"Precip": {
|
||||
"Precip": ""
|
||||
"Precip": "Precipitaciones"
|
||||
},
|
||||
"Precipitation": {
|
||||
"Precipitation": ""
|
||||
@@ -4053,6 +4074,9 @@
|
||||
"Remove": {
|
||||
"Remove": "Remover"
|
||||
},
|
||||
"Remove Widget Padding": {
|
||||
"Remove Widget Padding": ""
|
||||
},
|
||||
"Remove gaps and border when windows are maximized": {
|
||||
"Remove gaps and border when windows are maximized": "Eliminar espacios y bordes cuando las ventanas estan maximizadas"
|
||||
},
|
||||
@@ -4150,10 +4174,10 @@
|
||||
"Rounded corners for windows": "Esquinas redondeadas para ventanas"
|
||||
},
|
||||
"Rounded corners for windows (border_radius)": {
|
||||
"Rounded corners for windows (border_radius)": ""
|
||||
"Rounded corners for windows (border_radius)": "Esquinas de ventana redondeadas (border_radius)"
|
||||
},
|
||||
"Rounded corners for windows (decoration.rounding)": {
|
||||
"Rounded corners for windows (decoration.rounding)": ""
|
||||
"Rounded corners for windows (decoration.rounding)": "Esquinas de ventana redondeadas (decoration.rounding)"
|
||||
},
|
||||
"Rule": {
|
||||
"Rule": ""
|
||||
@@ -4203,6 +4227,9 @@
|
||||
"Save Notepad File": {
|
||||
"Save Notepad File": "Guardar archivo"
|
||||
},
|
||||
"Save QR Code": {
|
||||
"Save QR Code": ""
|
||||
},
|
||||
"Save and switch between display configurations": {
|
||||
"Save and switch between display configurations": ""
|
||||
},
|
||||
@@ -4230,6 +4257,9 @@
|
||||
"Scale DankBar font sizes independently": {
|
||||
"Scale DankBar font sizes independently": "Escalar fuentes de la barra independientemente"
|
||||
},
|
||||
"Scale DankBar icon sizes independently": {
|
||||
"Scale DankBar icon sizes independently": ""
|
||||
},
|
||||
"Scale all font sizes throughout the shell": {
|
||||
"Scale all font sizes throughout the shell": "Escala todos los tamaños de fuente en todo el shell"
|
||||
},
|
||||
@@ -4245,6 +4275,9 @@
|
||||
"Science": {
|
||||
"Science": "Ciencia"
|
||||
},
|
||||
"Score": {
|
||||
"Score": ""
|
||||
},
|
||||
"Screen Sharing": {
|
||||
"Screen Sharing": ""
|
||||
},
|
||||
@@ -4471,10 +4504,10 @@
|
||||
"Show Dock": "Mostrar dock"
|
||||
},
|
||||
"Show Feels Like Temperature": {
|
||||
"Show Feels Like Temperature": ""
|
||||
"Show Feels Like Temperature": "Mostrar sensación térmica"
|
||||
},
|
||||
"Show Forecast": {
|
||||
"Show Forecast": ""
|
||||
"Show Forecast": "Mostrar pronóstico"
|
||||
},
|
||||
"Show GPU Temperature": {
|
||||
"Show GPU Temperature": "Mostrar temperatura de la GPU"
|
||||
@@ -4489,10 +4522,10 @@
|
||||
"Show Hour Numbers": "Mostrar números de horas"
|
||||
},
|
||||
"Show Hourly Forecast": {
|
||||
"Show Hourly Forecast": ""
|
||||
"Show Hourly Forecast": "Mostrar pronóstico por hora"
|
||||
},
|
||||
"Show Humidity": {
|
||||
"Show Humidity": ""
|
||||
"Show Humidity": "Mostrar humedad"
|
||||
},
|
||||
"Show Launcher Button": {
|
||||
"Show Launcher Button": ""
|
||||
@@ -4501,7 +4534,7 @@
|
||||
"Show Line Numbers": "Mostrar números de líneas"
|
||||
},
|
||||
"Show Location": {
|
||||
"Show Location": ""
|
||||
"Show Location": "Mostrar ubicación"
|
||||
},
|
||||
"Show Lock": {
|
||||
"Show Lock": "Mostrar Bloquear"
|
||||
@@ -4534,10 +4567,10 @@
|
||||
"Show Power Off": "Mostrar Apagar"
|
||||
},
|
||||
"Show Precipitation Probability": {
|
||||
"Show Precipitation Probability": ""
|
||||
"Show Precipitation Probability": "Mostrar probabilidad de precipitaciones"
|
||||
},
|
||||
"Show Pressure": {
|
||||
"Show Pressure": ""
|
||||
"Show Pressure": "Mostrar presión"
|
||||
},
|
||||
"Show Reboot": {
|
||||
"Show Reboot": "Mostrar Reiniciar"
|
||||
@@ -4552,7 +4585,7 @@
|
||||
"Show Seconds": "Mostrar segundos"
|
||||
},
|
||||
"Show Sunrise/Sunset": {
|
||||
"Show Sunrise/Sunset": ""
|
||||
"Show Sunrise/Sunset": "Mostrar amanecer/anochecer"
|
||||
},
|
||||
"Show Suspend": {
|
||||
"Show Suspend": "Mostrar Suspender"
|
||||
@@ -4561,13 +4594,13 @@
|
||||
"Show Top Processes": "Mostrar procesos principales"
|
||||
},
|
||||
"Show Weather Condition": {
|
||||
"Show Weather Condition": ""
|
||||
"Show Weather Condition": "Mostrar estado del tiempo"
|
||||
},
|
||||
"Show Welcome": {
|
||||
"Show Welcome": ""
|
||||
"Show Welcome": "Mostrar bienvenida"
|
||||
},
|
||||
"Show Wind Speed": {
|
||||
"Show Wind Speed": ""
|
||||
"Show Wind Speed": "Mostrar velocidad del viento"
|
||||
},
|
||||
"Show Workspace Apps": {
|
||||
"Show Workspace Apps": "Mostrar aplicaciones en el espacio de trabajo"
|
||||
@@ -5076,6 +5109,9 @@
|
||||
"Trigger: %1": {
|
||||
"Trigger: %1": ""
|
||||
},
|
||||
"Trust": {
|
||||
"Trust": ""
|
||||
},
|
||||
"Try a different search": {
|
||||
"Try a different search": ""
|
||||
},
|
||||
@@ -5172,6 +5208,9 @@
|
||||
"Untitled": {
|
||||
"Untitled": "Sin titulo"
|
||||
},
|
||||
"Untrust": {
|
||||
"Untrust": ""
|
||||
},
|
||||
"Update": {
|
||||
"Update": ""
|
||||
},
|
||||
@@ -5431,6 +5470,9 @@
|
||||
"WiFi Device": {
|
||||
"WiFi Device": "Dispositivo Wi-Fi"
|
||||
},
|
||||
"WiFi QR code for ": {
|
||||
"WiFi QR code for ": ""
|
||||
},
|
||||
"WiFi disabled": {
|
||||
"WiFi disabled": "Wi‑Fi desactivado"
|
||||
},
|
||||
@@ -5765,6 +5807,9 @@
|
||||
"events": {
|
||||
"events": "eventos"
|
||||
},
|
||||
"ext": {
|
||||
"ext": ""
|
||||
},
|
||||
"fallback gpu name": {
|
||||
"Unknown GPU": ""
|
||||
},
|
||||
@@ -5781,28 +5826,28 @@
|
||||
"GPU Monitoring": ""
|
||||
},
|
||||
"greeter back button": {
|
||||
"Back": ""
|
||||
"Back": "Atrás"
|
||||
},
|
||||
"greeter completion page subtitle": {
|
||||
"DankMaterialShell is ready to use": ""
|
||||
"DankMaterialShell is ready to use": "DankMaterialShell está listo para utilizarse"
|
||||
},
|
||||
"greeter completion page title": {
|
||||
"You're All Set!": ""
|
||||
},
|
||||
"greeter configure keybinds link": {
|
||||
"Configure Keybinds": ""
|
||||
"Configure Keybinds": "Configurar atajos de teclado"
|
||||
},
|
||||
"greeter dankbar description": {
|
||||
"Widgets, layout, style": ""
|
||||
},
|
||||
"greeter displays description": {
|
||||
"Resolution, position, scale": ""
|
||||
"Resolution, position, scale": "Resolución, posición, escala"
|
||||
},
|
||||
"greeter dock description": {
|
||||
"Position, pinned apps": ""
|
||||
"Position, pinned apps": "Posición de las aplicaciones fijadas"
|
||||
},
|
||||
"greeter doctor page button": {
|
||||
"Run Again": ""
|
||||
"Run Again": "Ejecutar de nuevo"
|
||||
},
|
||||
"greeter doctor page empty state": {
|
||||
"No checks passed": "",
|
||||
@@ -5811,46 +5856,46 @@
|
||||
"No warnings": ""
|
||||
},
|
||||
"greeter doctor page error count": {
|
||||
"%1 issue(s) found": ""
|
||||
"%1 issue(s) found": "detectado(s) %1 problema(s)"
|
||||
},
|
||||
"greeter doctor page loading text": {
|
||||
"Analyzing configuration...": ""
|
||||
"Analyzing configuration...": "Analizando la configuración..."
|
||||
},
|
||||
"greeter doctor page status card": {
|
||||
"Errors": "",
|
||||
"Info": "",
|
||||
"Errors": "Errores",
|
||||
"Info": "Información",
|
||||
"OK": "",
|
||||
"Warnings": ""
|
||||
},
|
||||
"greeter doctor page success": {
|
||||
"All checks passed": ""
|
||||
"All checks passed": "Todas las comprobaciones fueron exitosas"
|
||||
},
|
||||
"greeter doctor page title": {
|
||||
"System Check": ""
|
||||
},
|
||||
"greeter documentation link": {
|
||||
"Docs": ""
|
||||
"Docs": "Documentación"
|
||||
},
|
||||
"greeter explore section header": {
|
||||
"Explore": ""
|
||||
"Explore": "Explorar"
|
||||
},
|
||||
"greeter feature card description": {
|
||||
"Background app icons": "",
|
||||
"Colors from wallpaper": "",
|
||||
"Community themes": "",
|
||||
"Extensible architecture": "",
|
||||
"GTK, Qt, IDEs, more": "",
|
||||
"Modular widget bar": "",
|
||||
"Colors from wallpaper": "Colores del fondo de pantalla",
|
||||
"Community themes": "Temas de la comunidad",
|
||||
"Extensible architecture": "Arquitectura extensible",
|
||||
"GTK, Qt, IDEs, more": "GTK, Qt, IDE y más",
|
||||
"Modular widget bar": "Barra de widgets modular",
|
||||
"Night mode & gamma": "",
|
||||
"Per-screen config": "",
|
||||
"Quick system toggles": "",
|
||||
"Quick system toggles": "Configuración rápida del sistema",
|
||||
"Security & privacy": ""
|
||||
},
|
||||
"greeter feature card title": {
|
||||
"App Theming": "",
|
||||
"Control Center": "",
|
||||
"Display Control": "",
|
||||
"Dynamic Theming": "",
|
||||
"Control Center": "Centro de control",
|
||||
"Display Control": "Control del monitor",
|
||||
"Dynamic Theming": "Temas dinámicos",
|
||||
"Multi-Monitor": "",
|
||||
"System Tray": "",
|
||||
"Theme Registry": ""
|
||||
@@ -5859,22 +5904,22 @@
|
||||
"Plugins": ""
|
||||
},
|
||||
"greeter feature card title | greeter settings link": {
|
||||
"DankBar": ""
|
||||
"DankBar": "DankBar"
|
||||
},
|
||||
"greeter feature card title | lock screen notifications settings card": {
|
||||
"Lock Screen": ""
|
||||
},
|
||||
"greeter finish button": {
|
||||
"Finish": ""
|
||||
"Finish": "Terminar"
|
||||
},
|
||||
"greeter first page button": {
|
||||
"Get Started": ""
|
||||
"Get Started": "Comenzar"
|
||||
},
|
||||
"greeter keybinds niri description": {
|
||||
"niri shortcuts config": ""
|
||||
},
|
||||
"greeter keybinds section header": {
|
||||
"DMS Shortcuts": ""
|
||||
"DMS Shortcuts": "Atajos de DMS"
|
||||
},
|
||||
"greeter modal window title": {
|
||||
"Welcome": ""
|
||||
@@ -5886,39 +5931,39 @@
|
||||
"No DMS shortcuts configured": ""
|
||||
},
|
||||
"greeter notifications description": {
|
||||
"Popup behavior, position": ""
|
||||
"Popup behavior, position": "Comportamiento y posición de las notificaciones emergentes"
|
||||
},
|
||||
"greeter settings link": {
|
||||
"Displays": "",
|
||||
"Dock": "",
|
||||
"Keybinds": "",
|
||||
"Displays": "Monitores",
|
||||
"Dock": "Dock",
|
||||
"Keybinds": "Atajos de teclado",
|
||||
"Notifications": "",
|
||||
"Theme & Colors": "",
|
||||
"Wallpaper": ""
|
||||
},
|
||||
"greeter settings section header": {
|
||||
"Configure": ""
|
||||
"Configure": "Configurar"
|
||||
},
|
||||
"greeter skip button": {
|
||||
"Skip": ""
|
||||
"Skip": "Pasar"
|
||||
},
|
||||
"greeter skip button tooltip": {
|
||||
"Skip setup": ""
|
||||
},
|
||||
"greeter theme description": {
|
||||
"Dynamic colors, presets": ""
|
||||
"Dynamic colors, presets": "Colores y esquemas dinámicos"
|
||||
},
|
||||
"greeter themes link": {
|
||||
"Themes": ""
|
||||
},
|
||||
"greeter wallpaper description": {
|
||||
"Background image": ""
|
||||
"Background image": "Imagen de fondo"
|
||||
},
|
||||
"greeter welcome page section header": {
|
||||
"Features": ""
|
||||
"Features": "Funciones"
|
||||
},
|
||||
"greeter welcome page tagline": {
|
||||
"A modern desktop shell for Wayland compositors": ""
|
||||
"A modern desktop shell for Wayland compositors": "Un shell de escritorio moderno para compositores Wayland"
|
||||
},
|
||||
"greeter welcome page title": {
|
||||
"Welcome to DankMaterialShell": ""
|
||||
@@ -5963,20 +6008,20 @@
|
||||
"Loading...": "Cargando..."
|
||||
},
|
||||
"lock screen notification mode option": {
|
||||
"App Names": "",
|
||||
"Count Only": "",
|
||||
"Disabled": "",
|
||||
"Full Content": ""
|
||||
"App Names": "Nombre de la aplicación",
|
||||
"Count Only": "Solo la cantidad",
|
||||
"Disabled": "Desactivado",
|
||||
"Full Content": "Contenido completo"
|
||||
},
|
||||
"lock screen notification mode option | notification rule match field option": {
|
||||
"App Names": ""
|
||||
},
|
||||
"lock screen notification privacy setting": {
|
||||
"Control what notification information is shown on the lock screen": "",
|
||||
"Control what notification information is shown on the lock screen": "Controla cuánta información de las notificaciones se muestra en la pantalla de bloqueo",
|
||||
"Notification Display": ""
|
||||
},
|
||||
"lock screen notifications settings card": {
|
||||
"Lock Screen": ""
|
||||
"Lock Screen": "Pantalla de bloqueo"
|
||||
},
|
||||
"loginctl not available - lock integration requires DMS socket connection": {
|
||||
"loginctl not available - lock integration requires DMS socket connection": "loginctl no disponible - integración requiere conexión al socket DMS"
|
||||
@@ -6044,45 +6089,45 @@
|
||||
"No wallpaper selected": "No hay papel pintado seleccionado"
|
||||
},
|
||||
"notification center tab": {
|
||||
"Current": "",
|
||||
"History": ""
|
||||
"Current": "Actuales",
|
||||
"History": "Historial"
|
||||
},
|
||||
"notification history filter": {
|
||||
"All": "",
|
||||
"Last hour": "",
|
||||
"Today": "",
|
||||
"Yesterday": ""
|
||||
"All": "Todas",
|
||||
"Last hour": "Última hora",
|
||||
"Today": "Hoy",
|
||||
"Yesterday": "Ayer"
|
||||
},
|
||||
"notification history filter for content older than other filters": {
|
||||
"Older": ""
|
||||
"Older": "Más antiguas"
|
||||
},
|
||||
"notification history filter | notification history retention option": {
|
||||
"30 days": "",
|
||||
"7 days": ""
|
||||
"30 days": "30 días",
|
||||
"7 days": "7 días"
|
||||
},
|
||||
"notification history limit": {
|
||||
"Maximum number of notifications to keep": ""
|
||||
"Maximum number of notifications to keep": "Número máximo de notificaciones que se conservarán"
|
||||
},
|
||||
"notification history retention option": {
|
||||
"1 day": "",
|
||||
"14 days": "",
|
||||
"3 days": "",
|
||||
"Forever": ""
|
||||
"1 day": "1 día",
|
||||
"14 days": "14 días",
|
||||
"3 days": "3 días",
|
||||
"Forever": "Siempre"
|
||||
},
|
||||
"notification history retention settings label": {
|
||||
"History Retention": ""
|
||||
"History Retention": "Preservación del historial"
|
||||
},
|
||||
"notification history setting": {
|
||||
"Auto-delete notifications older than this": "",
|
||||
"Save critical priority notifications to history": "",
|
||||
"Save low priority notifications to history": "",
|
||||
"Save normal priority notifications to history": ""
|
||||
"Auto-delete notifications older than this": "Eliminar automáticamente las notificaciones más antiguas",
|
||||
"Save critical priority notifications to history": "Guardar en el historial las notificaciones de prioridad crítica",
|
||||
"Save low priority notifications to history": "Guardar en el historial las notificaciones de prioridad baja",
|
||||
"Save normal priority notifications to history": "Guardar en el historial las notificaciones de prioridad normal"
|
||||
},
|
||||
"notification history toggle description": {
|
||||
"Save dismissed notifications to history": ""
|
||||
"Save dismissed notifications to history": "Guardar en el historial las notificaciones ignoradas"
|
||||
},
|
||||
"notification history toggle label": {
|
||||
"Enable History": ""
|
||||
"Enable History": "Activar historial"
|
||||
},
|
||||
"notification privacy mode placeholder": {
|
||||
"Message Content": ""
|
||||
@@ -6112,7 +6157,7 @@
|
||||
"Normal Priority": ""
|
||||
},
|
||||
"now": {
|
||||
"now": ""
|
||||
"now": "ahora"
|
||||
},
|
||||
"official": {
|
||||
"official": "oficial"
|
||||
@@ -6392,7 +6437,7 @@
|
||||
"wtype not available - install wtype for paste support": "wtype no disponible - instala wtype para soporte de pegado"
|
||||
},
|
||||
"yesterday": {
|
||||
"yesterday": ""
|
||||
"yesterday": "ayer"
|
||||
},
|
||||
"• Install only from trusted sources": {
|
||||
"• Install only from trusted sources": "• Instalar solo desde fuentes confiables"
|
||||
|
||||
@@ -770,7 +770,7 @@
|
||||
"Caps Lock Indicator": "نشانگر Caps Lock"
|
||||
},
|
||||
"Caps Lock is on": {
|
||||
"Caps Lock is on": ""
|
||||
"Caps Lock is on": "قفل حروف بزرگ روشن است"
|
||||
},
|
||||
"Center Section": {
|
||||
"Center Section": "بخش مرکزی"
|
||||
@@ -2089,6 +2089,12 @@
|
||||
"Fog": {
|
||||
"Fog": "مه"
|
||||
},
|
||||
"Folder": {
|
||||
"Folder": ""
|
||||
},
|
||||
"Folders": {
|
||||
"Folders": ""
|
||||
},
|
||||
"Follow Monitor Focus": {
|
||||
"Follow Monitor Focus": "فوکوس مانیتور را دنبال کن"
|
||||
},
|
||||
@@ -2413,6 +2419,9 @@
|
||||
"Icon": {
|
||||
"Icon": "آیکون"
|
||||
},
|
||||
"Icon Scale": {
|
||||
"Icon Scale": ""
|
||||
},
|
||||
"Icon Size": {
|
||||
"Icon Size": "اندازه آیکون"
|
||||
},
|
||||
@@ -3013,6 +3022,12 @@
|
||||
"Maximize Detection": {
|
||||
"Maximize Detection": "تشخیص بزرگشدن پنجره"
|
||||
},
|
||||
"Maximize Widget Icons": {
|
||||
"Maximize Widget Icons": ""
|
||||
},
|
||||
"Maximize Widget Text": {
|
||||
"Maximize Widget Text": ""
|
||||
},
|
||||
"Maximum Entry Size": {
|
||||
"Maximum Entry Size": "حداکثر اندازه مدخل"
|
||||
},
|
||||
@@ -3194,7 +3209,7 @@
|
||||
"Named Workspace Icons": "آیکون محیطکارهای نامدار"
|
||||
},
|
||||
"Navigation": {
|
||||
"Navigation": "مسیریابی"
|
||||
"Navigation": "پیمایش"
|
||||
},
|
||||
"Network": {
|
||||
"Network": "شبکه"
|
||||
@@ -3364,6 +3379,9 @@
|
||||
"No files found": {
|
||||
"No files found": "هیچ فایلی یافت نشد"
|
||||
},
|
||||
"No folders found": {
|
||||
"No folders found": ""
|
||||
},
|
||||
"No hidden apps.": {
|
||||
"No hidden apps.": "هیچ برنامه پنهانی موجود نیست."
|
||||
},
|
||||
@@ -3556,6 +3574,9 @@
|
||||
"Open in Browser": {
|
||||
"Open in Browser": "باز کردن در مرورگر"
|
||||
},
|
||||
"Open in terminal": {
|
||||
"Open in terminal": ""
|
||||
},
|
||||
"Open search bar to find text": {
|
||||
"Open search bar to find text": "بازکردن نوار جستجو برای یافتن متن"
|
||||
},
|
||||
@@ -4053,6 +4074,9 @@
|
||||
"Remove": {
|
||||
"Remove": "حذف"
|
||||
},
|
||||
"Remove Widget Padding": {
|
||||
"Remove Widget Padding": ""
|
||||
},
|
||||
"Remove gaps and border when windows are maximized": {
|
||||
"Remove gaps and border when windows are maximized": "حذف فاصلهها و حاشیه هنگام بزرگکردن پنجرهها"
|
||||
},
|
||||
@@ -4203,6 +4227,9 @@
|
||||
"Save Notepad File": {
|
||||
"Save Notepad File": "ذخیره فایل دفترچه یادداشت"
|
||||
},
|
||||
"Save QR Code": {
|
||||
"Save QR Code": ""
|
||||
},
|
||||
"Save and switch between display configurations": {
|
||||
"Save and switch between display configurations": "ذخیره و جابهجایی بین پیکربندیهای نمایشگر"
|
||||
},
|
||||
@@ -4230,6 +4257,9 @@
|
||||
"Scale DankBar font sizes independently": {
|
||||
"Scale DankBar font sizes independently": "اندازه فونت نوار دَنک را به صورت مستقل مقیاس کن"
|
||||
},
|
||||
"Scale DankBar icon sizes independently": {
|
||||
"Scale DankBar icon sizes independently": ""
|
||||
},
|
||||
"Scale all font sizes throughout the shell": {
|
||||
"Scale all font sizes throughout the shell": "تمام اندازههای فونت در سراسر شِل مقیاس کن"
|
||||
},
|
||||
@@ -4245,6 +4275,9 @@
|
||||
"Science": {
|
||||
"Science": "علمی"
|
||||
},
|
||||
"Score": {
|
||||
"Score": ""
|
||||
},
|
||||
"Screen Sharing": {
|
||||
"Screen Sharing": "اشتراکگذاری صفحه"
|
||||
},
|
||||
@@ -5076,6 +5109,9 @@
|
||||
"Trigger: %1": {
|
||||
"Trigger: %1": "راهانداز: %1"
|
||||
},
|
||||
"Trust": {
|
||||
"Trust": ""
|
||||
},
|
||||
"Try a different search": {
|
||||
"Try a different search": "یک جستجوی دیگر را امتحان کنید"
|
||||
},
|
||||
@@ -5172,6 +5208,9 @@
|
||||
"Untitled": {
|
||||
"Untitled": "بدون عنوان"
|
||||
},
|
||||
"Untrust": {
|
||||
"Untrust": ""
|
||||
},
|
||||
"Update": {
|
||||
"Update": "بروزرسانی"
|
||||
},
|
||||
@@ -5431,6 +5470,9 @@
|
||||
"WiFi Device": {
|
||||
"WiFi Device": "دستگاه وایفای"
|
||||
},
|
||||
"WiFi QR code for ": {
|
||||
"WiFi QR code for ": ""
|
||||
},
|
||||
"WiFi disabled": {
|
||||
"WiFi disabled": "وایفای غیرفعال"
|
||||
},
|
||||
@@ -5765,6 +5807,9 @@
|
||||
"events": {
|
||||
"events": "رویدادها"
|
||||
},
|
||||
"ext": {
|
||||
"ext": ""
|
||||
},
|
||||
"fallback gpu name": {
|
||||
"Unknown GPU": "کارت گرافیک ناشناخته"
|
||||
},
|
||||
@@ -6016,7 +6061,7 @@
|
||||
"ms": "ms"
|
||||
},
|
||||
"nav": {
|
||||
"nav": "جهت"
|
||||
"nav": "پیمایش"
|
||||
},
|
||||
"neovim template description": {
|
||||
"Requires lazy plugin manager": "به مدیریت افزونه lazy نیاز دارد"
|
||||
@@ -6322,13 +6367,13 @@
|
||||
"Wallpaper Error": "خطای تصویر پسزمینه"
|
||||
},
|
||||
"wallpaper fill mode": {
|
||||
"Fill": "پرکن",
|
||||
"Fit": "جاشدن",
|
||||
"Fill": "پُر",
|
||||
"Fit": "متناسب",
|
||||
"Pad": "حاشیهدار",
|
||||
"Stretch": "کشیده",
|
||||
"Tile": "کاشی",
|
||||
"Tile H": "کاشی افقی",
|
||||
"Tile V": "کاشی عمودی"
|
||||
"Tile": "کاشیوار",
|
||||
"Tile H": "کاشیوار افقی",
|
||||
"Tile V": "کاشیوار عمودی"
|
||||
},
|
||||
"wallpaper interval": {
|
||||
"1 hour": "۱ ساعت",
|
||||
@@ -6434,6 +6479,6 @@
|
||||
"• yyyy - Year (2024)": "• yyyy - سال (2024)"
|
||||
},
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": "↑/↓: پیمایش • Space: گسترش • Enter: اقدام/گسترش • E: متن"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,10 +105,10 @@
|
||||
"2 minutes": "2 minutes"
|
||||
},
|
||||
"2 seconds": {
|
||||
"2 seconds": ""
|
||||
"2 seconds": "2 secondes"
|
||||
},
|
||||
"20 minutes": {
|
||||
"20 minutes": ""
|
||||
"20 minutes": "20 minutes"
|
||||
},
|
||||
"24-Hour Format": {
|
||||
"24-Hour Format": "Format 24 Heures"
|
||||
@@ -117,7 +117,7 @@
|
||||
"24-hour format": "Format 24 heures"
|
||||
},
|
||||
"250 ms": {
|
||||
"250 ms": ""
|
||||
"250 ms": "250ms"
|
||||
},
|
||||
"270°": {
|
||||
"270°": "270°"
|
||||
@@ -126,7 +126,7 @@
|
||||
"3 days": "3 jours"
|
||||
},
|
||||
"3 minutes": {
|
||||
"3 minutes": ""
|
||||
"3 minutes": "3 minutes"
|
||||
},
|
||||
"3 seconds": {
|
||||
"3 seconds": "3 secondes"
|
||||
@@ -141,7 +141,7 @@
|
||||
"3rd party": "tiers"
|
||||
},
|
||||
"4 seconds": {
|
||||
"4 seconds": ""
|
||||
"4 seconds": "4 secondes"
|
||||
},
|
||||
"5 minutes": {
|
||||
"5 minutes": "5 minutes"
|
||||
@@ -150,13 +150,13 @@
|
||||
"5 seconds": "5 secondes"
|
||||
},
|
||||
"500 ms": {
|
||||
"500 ms": ""
|
||||
"500 ms": "500ms"
|
||||
},
|
||||
"7 days": {
|
||||
"7 days": "7 jours"
|
||||
},
|
||||
"750 ms": {
|
||||
"750 ms": ""
|
||||
"750 ms": "750ms"
|
||||
},
|
||||
"8 seconds": {
|
||||
"8 seconds": "8 secondes"
|
||||
@@ -770,7 +770,7 @@
|
||||
"Caps Lock Indicator": "Indicateur Verr. Maj."
|
||||
},
|
||||
"Caps Lock is on": {
|
||||
"Caps Lock is on": ""
|
||||
"Caps Lock is on": "Verr Maj est activé"
|
||||
},
|
||||
"Center Section": {
|
||||
"Center Section": "Partie centrale"
|
||||
@@ -1418,7 +1418,7 @@
|
||||
"Description": "Description"
|
||||
},
|
||||
"Desktop": {
|
||||
"Desktop": ""
|
||||
"Desktop": "Bureau"
|
||||
},
|
||||
"Desktop Clock": {
|
||||
"Desktop Clock": "Horloge du bureau"
|
||||
@@ -1592,7 +1592,7 @@
|
||||
"Docs": "Documentation"
|
||||
},
|
||||
"Documents": {
|
||||
"Documents": ""
|
||||
"Documents": "Documents"
|
||||
},
|
||||
"Domain (optional)": {
|
||||
"Domain (optional)": "Domaine (optionnel)"
|
||||
@@ -1607,7 +1607,7 @@
|
||||
"Door Open": "Porte ouverte"
|
||||
},
|
||||
"Downloads": {
|
||||
"Downloads": ""
|
||||
"Downloads": "Téléchargements"
|
||||
},
|
||||
"Drag to Reorder": {
|
||||
"Drag to Reorder": "Glisser pour réorganiser"
|
||||
@@ -2087,7 +2087,13 @@
|
||||
"Focused Window": "Fenêtre active"
|
||||
},
|
||||
"Fog": {
|
||||
"Fog": ""
|
||||
"Fog": "Brouillard"
|
||||
},
|
||||
"Folder": {
|
||||
"Folder": ""
|
||||
},
|
||||
"Folders": {
|
||||
"Folders": ""
|
||||
},
|
||||
"Follow Monitor Focus": {
|
||||
"Follow Monitor Focus": "Suivre le focus de l’écran"
|
||||
@@ -2413,6 +2419,9 @@
|
||||
"Icon": {
|
||||
"Icon": "Icône"
|
||||
},
|
||||
"Icon Scale": {
|
||||
"Icon Scale": ""
|
||||
},
|
||||
"Icon Size": {
|
||||
"Icon Size": "Taille d'icônes"
|
||||
},
|
||||
@@ -2819,10 +2828,10 @@
|
||||
"Light Mode": "Mode Clair"
|
||||
},
|
||||
"Light Rain": {
|
||||
"Light Rain": ""
|
||||
"Light Rain": "Pluie légère"
|
||||
},
|
||||
"Light Snow": {
|
||||
"Light Snow": ""
|
||||
"Light Snow": "Neige légère"
|
||||
},
|
||||
"Light Snow Showers": {
|
||||
"Light Snow Showers": ""
|
||||
@@ -3013,6 +3022,12 @@
|
||||
"Maximize Detection": {
|
||||
"Maximize Detection": "Détection de maximisation"
|
||||
},
|
||||
"Maximize Widget Icons": {
|
||||
"Maximize Widget Icons": ""
|
||||
},
|
||||
"Maximize Widget Text": {
|
||||
"Maximize Widget Text": ""
|
||||
},
|
||||
"Maximum Entry Size": {
|
||||
"Maximum Entry Size": "Taille maximale d’entrée"
|
||||
},
|
||||
@@ -3173,7 +3188,7 @@
|
||||
"Moving to Paused": "Mise en pause en cours"
|
||||
},
|
||||
"Music": {
|
||||
"Music": ""
|
||||
"Music": "Musique"
|
||||
},
|
||||
"Mute popups for %1": {
|
||||
"Mute popups for %1": "Popup en sourdine pour %1"
|
||||
@@ -3364,6 +3379,9 @@
|
||||
"No files found": {
|
||||
"No files found": "Aucun fichier trouvé"
|
||||
},
|
||||
"No folders found": {
|
||||
"No folders found": ""
|
||||
},
|
||||
"No hidden apps.": {
|
||||
"No hidden apps.": "Aucune appli masquée."
|
||||
},
|
||||
@@ -3556,6 +3574,9 @@
|
||||
"Open in Browser": {
|
||||
"Open in Browser": "Ouvrir dans le navigateur"
|
||||
},
|
||||
"Open in terminal": {
|
||||
"Open in terminal": ""
|
||||
},
|
||||
"Open search bar to find text": {
|
||||
"Open search bar to find text": "Ouvrir la barre de recherche pour trouver du texte"
|
||||
},
|
||||
@@ -4053,6 +4074,9 @@
|
||||
"Remove": {
|
||||
"Remove": "Supprimer"
|
||||
},
|
||||
"Remove Widget Padding": {
|
||||
"Remove Widget Padding": ""
|
||||
},
|
||||
"Remove gaps and border when windows are maximized": {
|
||||
"Remove gaps and border when windows are maximized": "Supprimer les marges et bordures lorsque les fenêtres sont maximisées"
|
||||
},
|
||||
@@ -4203,6 +4227,9 @@
|
||||
"Save Notepad File": {
|
||||
"Save Notepad File": "Enregistrer le fichier"
|
||||
},
|
||||
"Save QR Code": {
|
||||
"Save QR Code": ""
|
||||
},
|
||||
"Save and switch between display configurations": {
|
||||
"Save and switch between display configurations": "Enregistrer et basculer entre les configurations d’affichage"
|
||||
},
|
||||
@@ -4230,6 +4257,9 @@
|
||||
"Scale DankBar font sizes independently": {
|
||||
"Scale DankBar font sizes independently": "Échelle des polices de la barre indépendamment"
|
||||
},
|
||||
"Scale DankBar icon sizes independently": {
|
||||
"Scale DankBar icon sizes independently": ""
|
||||
},
|
||||
"Scale all font sizes throughout the shell": {
|
||||
"Scale all font sizes throughout the shell": "Échelle de toutes les polices dans le shell"
|
||||
},
|
||||
@@ -4245,6 +4275,9 @@
|
||||
"Science": {
|
||||
"Science": "Science"
|
||||
},
|
||||
"Score": {
|
||||
"Score": ""
|
||||
},
|
||||
"Screen Sharing": {
|
||||
"Screen Sharing": "Partage d'écran"
|
||||
},
|
||||
@@ -5076,6 +5109,9 @@
|
||||
"Trigger: %1": {
|
||||
"Trigger: %1": "Déclencheur : %1"
|
||||
},
|
||||
"Trust": {
|
||||
"Trust": ""
|
||||
},
|
||||
"Try a different search": {
|
||||
"Try a different search": "Essayez une recherche différente"
|
||||
},
|
||||
@@ -5172,6 +5208,9 @@
|
||||
"Untitled": {
|
||||
"Untitled": "Sans titre"
|
||||
},
|
||||
"Untrust": {
|
||||
"Untrust": ""
|
||||
},
|
||||
"Update": {
|
||||
"Update": "Mettre à jour"
|
||||
},
|
||||
@@ -5350,7 +5389,7 @@
|
||||
"Vibrant palette with playful saturation.": "Palette vibrante avec saturation ludique."
|
||||
},
|
||||
"Videos": {
|
||||
"Videos": ""
|
||||
"Videos": "Vidéos"
|
||||
},
|
||||
"View Mode": {
|
||||
"View Mode": "Mode d’affichage"
|
||||
@@ -5431,6 +5470,9 @@
|
||||
"WiFi Device": {
|
||||
"WiFi Device": "Appareil Wi-Fi"
|
||||
},
|
||||
"WiFi QR code for ": {
|
||||
"WiFi QR code for ": ""
|
||||
},
|
||||
"WiFi disabled": {
|
||||
"WiFi disabled": "Wi-Fi désactivé"
|
||||
},
|
||||
@@ -5765,6 +5807,9 @@
|
||||
"events": {
|
||||
"events": "événements"
|
||||
},
|
||||
"ext": {
|
||||
"ext": ""
|
||||
},
|
||||
"fallback gpu name": {
|
||||
"Unknown GPU": "GPU inconnu"
|
||||
},
|
||||
@@ -6118,22 +6163,22 @@
|
||||
"official": "officiel"
|
||||
},
|
||||
"on Hyprland": {
|
||||
"on Hyprland": ""
|
||||
"on Hyprland": "sur Hyprland"
|
||||
},
|
||||
"on MangoWC": {
|
||||
"on MangoWC": ""
|
||||
"on MangoWC": "sur MangoWC"
|
||||
},
|
||||
"on Miracle WM": {
|
||||
"on Miracle WM": ""
|
||||
"on Miracle WM": "sur Miracle WM"
|
||||
},
|
||||
"on Niri": {
|
||||
"on Niri": ""
|
||||
"on Niri": "sur Niri"
|
||||
},
|
||||
"on Scroll": {
|
||||
"on Scroll": ""
|
||||
"on Scroll": "sur Scroll"
|
||||
},
|
||||
"on Sway": {
|
||||
"on Sway": ""
|
||||
"on Sway": "sur Sway"
|
||||
},
|
||||
"open": {
|
||||
"open": "ouvrir"
|
||||
@@ -6186,7 +6231,7 @@
|
||||
"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.": ""
|
||||
},
|
||||
"qt theme env error title": {
|
||||
"Missing Environment Variables": ""
|
||||
"Missing Environment Variables": "Variables d'environnement manquantes"
|
||||
},
|
||||
"read-only settings warning for NixOS home-manager users": {
|
||||
"Settings are read-only. Changes will not persist.": "Les paramètres sont en lecture seule. Les modifications ne seront pas conservées."
|
||||
@@ -6246,7 +6291,7 @@
|
||||
"Load Average": "Charge moyenne"
|
||||
},
|
||||
"theme auto mode tab": {
|
||||
"Location": ""
|
||||
"Location": "Localisation"
|
||||
},
|
||||
"theme auto mode tab | wallpaper cycling mode tab": {
|
||||
"Time": ""
|
||||
@@ -6292,7 +6337,7 @@
|
||||
"Unknown": "Inconnu"
|
||||
},
|
||||
"up": {
|
||||
"up": ""
|
||||
"up": "allumé"
|
||||
},
|
||||
"update dms for NM integration.": {
|
||||
"update dms for NM integration.": "Mettre à jour DMS pour l'intégration NM."
|
||||
@@ -6331,29 +6376,29 @@
|
||||
"Tile V": "Tuile V"
|
||||
},
|
||||
"wallpaper interval": {
|
||||
"1 hour": "",
|
||||
"1 hour 30 minutes": "",
|
||||
"1 minute": "",
|
||||
"10 seconds": "",
|
||||
"12 hours": "",
|
||||
"15 minutes": "",
|
||||
"15 seconds": "",
|
||||
"2 hours": "",
|
||||
"20 seconds": "",
|
||||
"25 seconds": "",
|
||||
"3 hours": "",
|
||||
"30 minutes": "",
|
||||
"30 seconds": "",
|
||||
"35 seconds": "",
|
||||
"4 hours": "",
|
||||
"40 seconds": "",
|
||||
"45 seconds": "",
|
||||
"5 minutes": "",
|
||||
"5 seconds": "",
|
||||
"50 seconds": "",
|
||||
"55 seconds": "",
|
||||
"6 hours": "",
|
||||
"8 hours": ""
|
||||
"1 hour": "1 heure",
|
||||
"1 hour 30 minutes": "1 heure et 30 minutes",
|
||||
"1 minute": "1 minute",
|
||||
"10 seconds": "10 secondes",
|
||||
"12 hours": "12 heures",
|
||||
"15 minutes": "15 minutes",
|
||||
"15 seconds": "15 secondes",
|
||||
"2 hours": "2 heures",
|
||||
"20 seconds": "20 secondes",
|
||||
"25 seconds": "25 secondes",
|
||||
"3 hours": "3 heures",
|
||||
"30 minutes": "30 minutes",
|
||||
"30 seconds": "30 secondes",
|
||||
"35 seconds": "35 secondes",
|
||||
"4 hours": "4 heures",
|
||||
"40 seconds": "40 secondes",
|
||||
"45 seconds": "45 secondes",
|
||||
"5 minutes": "5 minutes",
|
||||
"5 seconds": "5 secondes",
|
||||
"50 seconds": "50 secondes",
|
||||
"55 seconds": "55 secondes",
|
||||
"6 hours": "6 heures",
|
||||
"8 hours": "8 heures"
|
||||
},
|
||||
"wallpaper not set label": {
|
||||
"Not set": ""
|
||||
@@ -6434,6 +6479,6 @@
|
||||
"• yyyy - Year (2024)": "• yyyy - Année (2024)"
|
||||
},
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": "↑/↓: Nav • Espace: Étendre • Entrée: Action/Étendre • E: Texte"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,10 +105,10 @@
|
||||
"2 minutes": "2 דקות"
|
||||
},
|
||||
"2 seconds": {
|
||||
"2 seconds": ""
|
||||
"2 seconds": "2 שניות"
|
||||
},
|
||||
"20 minutes": {
|
||||
"20 minutes": ""
|
||||
"20 minutes": "20 דקות"
|
||||
},
|
||||
"24-Hour Format": {
|
||||
"24-Hour Format": "תבנית 24 שעות"
|
||||
@@ -117,7 +117,7 @@
|
||||
"24-hour format": "תבנית 24 שעות"
|
||||
},
|
||||
"250 ms": {
|
||||
"250 ms": ""
|
||||
"250 ms": "250 ms"
|
||||
},
|
||||
"270°": {
|
||||
"270°": "270°"
|
||||
@@ -126,7 +126,7 @@
|
||||
"3 days": "3 ימים"
|
||||
},
|
||||
"3 minutes": {
|
||||
"3 minutes": ""
|
||||
"3 minutes": "3 דקות"
|
||||
},
|
||||
"3 seconds": {
|
||||
"3 seconds": "3 שניות"
|
||||
@@ -141,7 +141,7 @@
|
||||
"3rd party": "צד שלישי"
|
||||
},
|
||||
"4 seconds": {
|
||||
"4 seconds": ""
|
||||
"4 seconds": "4 שניות"
|
||||
},
|
||||
"5 minutes": {
|
||||
"5 minutes": "5 דקות"
|
||||
@@ -150,13 +150,13 @@
|
||||
"5 seconds": "5 שניות"
|
||||
},
|
||||
"500 ms": {
|
||||
"500 ms": ""
|
||||
"500 ms": "500 מילישניות"
|
||||
},
|
||||
"7 days": {
|
||||
"7 days": "7 ימים"
|
||||
},
|
||||
"750 ms": {
|
||||
"750 ms": ""
|
||||
"750 ms": "750 מילישניות"
|
||||
},
|
||||
"8 seconds": {
|
||||
"8 seconds": "8 שניות"
|
||||
@@ -171,7 +171,7 @@
|
||||
"A file with this name already exists. Do you want to overwrite it?": "קיים כבר קובץ עם השם זה. האם ברצונך לדרוס אותו?"
|
||||
},
|
||||
"AC Power": {
|
||||
"AC Power": ""
|
||||
"AC Power": "חשמל AC"
|
||||
},
|
||||
"API": {
|
||||
"API": "API"
|
||||
@@ -770,7 +770,7 @@
|
||||
"Caps Lock Indicator": "מחוון Caps Lock"
|
||||
},
|
||||
"Caps Lock is on": {
|
||||
"Caps Lock is on": ""
|
||||
"Caps Lock is on": "Caps Lock פעיל"
|
||||
},
|
||||
"Center Section": {
|
||||
"Center Section": "קטע אמצעי"
|
||||
@@ -863,7 +863,7 @@
|
||||
"Clear History?": "לנקות את ההיסטוריה?"
|
||||
},
|
||||
"Clear Sky": {
|
||||
"Clear Sky": ""
|
||||
"Clear Sky": "שמיים בהירים"
|
||||
},
|
||||
"Clear all history when server starts": {
|
||||
"Clear all history when server starts": "נקה/י את כל ההיסטוריה כאשר השרת מופעל"
|
||||
@@ -1418,7 +1418,7 @@
|
||||
"Description": "תיאור"
|
||||
},
|
||||
"Desktop": {
|
||||
"Desktop": ""
|
||||
"Desktop": "שולחן העבודה"
|
||||
},
|
||||
"Desktop Clock": {
|
||||
"Desktop Clock": "שעון לשולחן העבודה"
|
||||
@@ -1592,7 +1592,7 @@
|
||||
"Docs": "דוקיומנטציה"
|
||||
},
|
||||
"Documents": {
|
||||
"Documents": ""
|
||||
"Documents": "מסמכים"
|
||||
},
|
||||
"Domain (optional)": {
|
||||
"Domain (optional)": "דומיין (לא חובה)"
|
||||
@@ -1607,7 +1607,7 @@
|
||||
"Door Open": "דלת פתוחה"
|
||||
},
|
||||
"Downloads": {
|
||||
"Downloads": ""
|
||||
"Downloads": "הורדות"
|
||||
},
|
||||
"Drag to Reorder": {
|
||||
"Drag to Reorder": "גרור/גררי לסידור מחדש"
|
||||
@@ -1622,7 +1622,7 @@
|
||||
"Driver": "מנהל התקן"
|
||||
},
|
||||
"Drizzle": {
|
||||
"Drizzle": ""
|
||||
"Drizzle": "טפטוף"
|
||||
},
|
||||
"Duplicate": {
|
||||
"Duplicate": "שכפל/י"
|
||||
@@ -2087,7 +2087,13 @@
|
||||
"Focused Window": "חלון ממוקד"
|
||||
},
|
||||
"Fog": {
|
||||
"Fog": ""
|
||||
"Fog": "ערפל"
|
||||
},
|
||||
"Folder": {
|
||||
"Folder": ""
|
||||
},
|
||||
"Folders": {
|
||||
"Folders": ""
|
||||
},
|
||||
"Follow Monitor Focus": {
|
||||
"Follow Monitor Focus": "מעקב אחרי המסך הממוקד"
|
||||
@@ -2153,7 +2159,7 @@
|
||||
"Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": "שחרר/י VRAM/זיכרון כאשר המשגר נסגר. עלול לגרום לעיכוב קל בפתיחה מחדש."
|
||||
},
|
||||
"Freezing Drizzle": {
|
||||
"Freezing Drizzle": ""
|
||||
"Freezing Drizzle": "טפטוף קפוא"
|
||||
},
|
||||
"Frequency": {
|
||||
"Frequency": "תדירות"
|
||||
@@ -2261,13 +2267,13 @@
|
||||
"Health": "בריאות"
|
||||
},
|
||||
"Heavy Rain": {
|
||||
"Heavy Rain": ""
|
||||
"Heavy Rain": "גשם כבד"
|
||||
},
|
||||
"Heavy Snow": {
|
||||
"Heavy Snow": ""
|
||||
"Heavy Snow": "שלג כבד"
|
||||
},
|
||||
"Heavy Snow Showers": {
|
||||
"Heavy Snow Showers": ""
|
||||
"Heavy Snow Showers": "מקלחות שלג כבדות"
|
||||
},
|
||||
"Height": {
|
||||
"Height": "גובה"
|
||||
@@ -2369,7 +2375,7 @@
|
||||
"Hold to confirm (%1s)": "החזק/י לחוץ כדי לאשר (%1 שניות)"
|
||||
},
|
||||
"Home": {
|
||||
"Home": ""
|
||||
"Home": "בית"
|
||||
},
|
||||
"Hot Corners": {
|
||||
"Hot Corners": "פינות חמות"
|
||||
@@ -2413,6 +2419,9 @@
|
||||
"Icon": {
|
||||
"Icon": "סמל"
|
||||
},
|
||||
"Icon Scale": {
|
||||
"Icon Scale": ""
|
||||
},
|
||||
"Icon Size": {
|
||||
"Icon Size": "גודל סמל"
|
||||
},
|
||||
@@ -2819,13 +2828,13 @@
|
||||
"Light Mode": "מצב בהיר"
|
||||
},
|
||||
"Light Rain": {
|
||||
"Light Rain": ""
|
||||
"Light Rain": "גשם קל"
|
||||
},
|
||||
"Light Snow": {
|
||||
"Light Snow": ""
|
||||
"Light Snow": "שלג קל"
|
||||
},
|
||||
"Light Snow Showers": {
|
||||
"Light Snow Showers": ""
|
||||
"Light Snow Showers": "מקלחות שלג קלות"
|
||||
},
|
||||
"Linear": {
|
||||
"Linear": "ליניארי"
|
||||
@@ -3013,6 +3022,12 @@
|
||||
"Maximize Detection": {
|
||||
"Maximize Detection": "זיהוי הגדלה של החלון"
|
||||
},
|
||||
"Maximize Widget Icons": {
|
||||
"Maximize Widget Icons": ""
|
||||
},
|
||||
"Maximize Widget Text": {
|
||||
"Maximize Widget Text": ""
|
||||
},
|
||||
"Maximum Entry Size": {
|
||||
"Maximum Entry Size": "גודל רשומה מקסימלי"
|
||||
},
|
||||
@@ -3173,7 +3188,7 @@
|
||||
"Moving to Paused": "עובר להשהיה"
|
||||
},
|
||||
"Music": {
|
||||
"Music": ""
|
||||
"Music": "מוסיקה"
|
||||
},
|
||||
"Mute popups for %1": {
|
||||
"Mute popups for %1": "השתק/י חלונות קופצים עבור %1"
|
||||
@@ -3364,6 +3379,9 @@
|
||||
"No files found": {
|
||||
"No files found": "לא נמצאו קבצים"
|
||||
},
|
||||
"No folders found": {
|
||||
"No folders found": ""
|
||||
},
|
||||
"No hidden apps.": {
|
||||
"No hidden apps.": "אין אפליקציות מוסתרות."
|
||||
},
|
||||
@@ -3556,6 +3574,9 @@
|
||||
"Open in Browser": {
|
||||
"Open in Browser": "פתח/י בדפדפן"
|
||||
},
|
||||
"Open in terminal": {
|
||||
"Open in terminal": ""
|
||||
},
|
||||
"Open search bar to find text": {
|
||||
"Open search bar to find text": "פתח/י שורת חיפוש כדי למצוא טקסט"
|
||||
},
|
||||
@@ -3593,7 +3614,7 @@
|
||||
"Outputs Include Missing": "קובץ includes של פלטי תצוגה חסר"
|
||||
},
|
||||
"Overcast": {
|
||||
"Overcast": ""
|
||||
"Overcast": "מעונן"
|
||||
},
|
||||
"Overflow": {
|
||||
"Overflow": "גלישה"
|
||||
@@ -3653,7 +3674,7 @@
|
||||
"Pairing...": "מתאים..."
|
||||
},
|
||||
"Partly Cloudy": {
|
||||
"Partly Cloudy": ""
|
||||
"Partly Cloudy": "מעונן חלקית"
|
||||
},
|
||||
"Passkey:": {
|
||||
"Passkey:": "מפתח גישה:"
|
||||
@@ -3763,7 +3784,7 @@
|
||||
"Unavailable": "לא זמין"
|
||||
},
|
||||
"Pictures": {
|
||||
"Pictures": ""
|
||||
"Pictures": "תמונות"
|
||||
},
|
||||
"Pin": {
|
||||
"Pin": "הצמד/י"
|
||||
@@ -3991,7 +4012,7 @@
|
||||
"Protocol": "פרוטוקול"
|
||||
},
|
||||
"Quick Access": {
|
||||
"Quick Access": ""
|
||||
"Quick Access": "גישה מהירה"
|
||||
},
|
||||
"Quick access to application launcher": {
|
||||
"Quick access to application launcher": "גישה מהירה למשגר האפליקציות"
|
||||
@@ -4012,7 +4033,7 @@
|
||||
"Radius": "רדיוס"
|
||||
},
|
||||
"Rain": {
|
||||
"Rain": ""
|
||||
"Rain": "גשם"
|
||||
},
|
||||
"Rain Chance": {
|
||||
"Rain Chance": "סיכוי לגשם"
|
||||
@@ -4053,6 +4074,9 @@
|
||||
"Remove": {
|
||||
"Remove": "הסר/י"
|
||||
},
|
||||
"Remove Widget Padding": {
|
||||
"Remove Widget Padding": ""
|
||||
},
|
||||
"Remove gaps and border when windows are maximized": {
|
||||
"Remove gaps and border when windows are maximized": "הסר/י רווחים ומסגרת כאשר חלונות ממוקסמים"
|
||||
},
|
||||
@@ -4081,7 +4105,7 @@
|
||||
"Requires DMS %1": "DMS %1 נדרש"
|
||||
},
|
||||
"Requires DWL compositor": {
|
||||
"Requires DWL compositor": "דורש קומפוזיטור DWL"
|
||||
"Requires DWL compositor": "קומפוזיטור DWL נדרש"
|
||||
},
|
||||
"Requires night mode support": {
|
||||
"Requires night mode support": "תמיכה במצב לילה נדרשת"
|
||||
@@ -4203,6 +4227,9 @@
|
||||
"Save Notepad File": {
|
||||
"Save Notepad File": "שמור/י פתק כקובץ"
|
||||
},
|
||||
"Save QR Code": {
|
||||
"Save QR Code": ""
|
||||
},
|
||||
"Save and switch between display configurations": {
|
||||
"Save and switch between display configurations": "שמור/שמרי והחלף/החליפי בין תצורות תצוגה"
|
||||
},
|
||||
@@ -4230,6 +4257,9 @@
|
||||
"Scale DankBar font sizes independently": {
|
||||
"Scale DankBar font sizes independently": "שנה/י את גודל הגופנים של DankBar באופן עצמאי"
|
||||
},
|
||||
"Scale DankBar icon sizes independently": {
|
||||
"Scale DankBar icon sizes independently": ""
|
||||
},
|
||||
"Scale all font sizes throughout the shell": {
|
||||
"Scale all font sizes throughout the shell": "שנה/י קנה מידה של כל גדלי הגופנים בכל המעטפת"
|
||||
},
|
||||
@@ -4245,6 +4275,9 @@
|
||||
"Science": {
|
||||
"Science": "מדע"
|
||||
},
|
||||
"Score": {
|
||||
"Score": ""
|
||||
},
|
||||
"Screen Sharing": {
|
||||
"Screen Sharing": "שיתוף מסך"
|
||||
},
|
||||
@@ -4510,7 +4543,7 @@
|
||||
"Show Log Out": "הצג/י התנתקות"
|
||||
},
|
||||
"Show Material Design ripple animations on interactive elements": {
|
||||
"Show Material Design ripple animations on interactive elements": "הצג/י אנימציות של אדוות Material Design על רכיבים אינטראקטיביים"
|
||||
"Show Material Design ripple animations on interactive elements": "הצג/י אנימציות של אדוות בעיצוב Material על גבי רכיבים אינטראקטיביים"
|
||||
},
|
||||
"Show Memory": {
|
||||
"Show Memory": "הצג/י זיכרון"
|
||||
@@ -4714,7 +4747,7 @@
|
||||
"Snap": "הצמד/י"
|
||||
},
|
||||
"Snow": {
|
||||
"Snow": ""
|
||||
"Snow": "שלג"
|
||||
},
|
||||
"Some plugins require a newer version of DMS:": {
|
||||
"Some plugins require a newer version of DMS:": "תוספים מסוימים דורשים גרסה חדשה יותר של DMS:"
|
||||
@@ -4813,7 +4846,7 @@
|
||||
"Suspend system after": "העבר/י את המערכת למצב השהיה לאחר"
|
||||
},
|
||||
"Suspend then Hibernate": {
|
||||
"Suspend then Hibernate": ""
|
||||
"Suspend then Hibernate": "השהיה ואחריה שינה עמוקה"
|
||||
},
|
||||
"Swap": {
|
||||
"Swap": "זיכרון החלפה (Swap)"
|
||||
@@ -4930,7 +4963,7 @@
|
||||
"Third-Party Plugin Warning": "אזהרת תוסף צד שלישי"
|
||||
},
|
||||
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\n\nThese plugins may pose security and privacy risks - install at your own risk.": {
|
||||
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\n\nThese plugins may pose security and privacy risks - install at your own risk.": "תוספי צד שלישי נוצרו על ידי הקהילה ואינם נתמכים רשמית על ידי DankMaterialShell.\n\nתוספים אלה עלולים להוות סיכוני אבטחה ופרטיות - התקן/י על אחריותך."
|
||||
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\n\nThese plugins may pose security and privacy risks - install at your own risk.": "תוספי צד שלישי נוצרו על ידי הקהילה ואינם נתמכים רשמית על ידי DankMaterialShell.\n\nתוספים אלה עלולים להוות סיכוני אבטחה ופרטיות - התקן/י על אחריותך בלבד."
|
||||
},
|
||||
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": {
|
||||
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": "תוספי צד שלישי נוצרים על ידי הקהילה ואינם נתמכים רשמית על ידי DankMaterialShell.\\n\\nתוספים אלה עלולים להוות סיכון אבטחה ופרטיות – התקן/י אותם על אחריותך בלבד."
|
||||
@@ -4954,10 +4987,10 @@
|
||||
"This will permanently remove this saved clipboard item. This action cannot be undone.": "זה יסיר לצמיתות את פריט לוח ההעתקה השמור הזה. לא ניתן לבטל פעולה זו."
|
||||
},
|
||||
"Thunderstorm": {
|
||||
"Thunderstorm": ""
|
||||
"Thunderstorm": "סערת ברקים"
|
||||
},
|
||||
"Thunderstorm with Hail": {
|
||||
"Thunderstorm with Hail": ""
|
||||
"Thunderstorm with Hail": "סערת ברקים עם ברד"
|
||||
},
|
||||
"Tiled": {
|
||||
"Tiled": "באריחים"
|
||||
@@ -5076,6 +5109,9 @@
|
||||
"Trigger: %1": {
|
||||
"Trigger: %1": "מפעיל: %1"
|
||||
},
|
||||
"Trust": {
|
||||
"Trust": ""
|
||||
},
|
||||
"Try a different search": {
|
||||
"Try a different search": "נסה/י חיפוש אחר"
|
||||
},
|
||||
@@ -5172,6 +5208,9 @@
|
||||
"Untitled": {
|
||||
"Untitled": "ללא כותרת"
|
||||
},
|
||||
"Untrust": {
|
||||
"Untrust": ""
|
||||
},
|
||||
"Update": {
|
||||
"Update": "עדכן/י"
|
||||
},
|
||||
@@ -5350,7 +5389,7 @@
|
||||
"Vibrant palette with playful saturation.": "פלטת צבעים עשירה עם רוויה משחקית."
|
||||
},
|
||||
"Videos": {
|
||||
"Videos": ""
|
||||
"Videos": "סרטונים"
|
||||
},
|
||||
"View Mode": {
|
||||
"View Mode": "מצב תצוגה"
|
||||
@@ -5431,6 +5470,9 @@
|
||||
"WiFi Device": {
|
||||
"WiFi Device": "התקן WiFi"
|
||||
},
|
||||
"WiFi QR code for ": {
|
||||
"WiFi QR code for ": ""
|
||||
},
|
||||
"WiFi disabled": {
|
||||
"WiFi disabled": "WiFi מושבת"
|
||||
},
|
||||
@@ -5622,7 +5664,7 @@
|
||||
"Thickness": "עובי"
|
||||
},
|
||||
"brandon": {
|
||||
"brandon": ""
|
||||
"brandon": "brandon"
|
||||
},
|
||||
"browse themes button | theme browser header | theme browser window title": {
|
||||
"Browse Themes": "עיין/י בערכות נושא"
|
||||
@@ -5668,7 +5710,7 @@
|
||||
"Click to select a custom theme JSON file": "לחץ/י כדי לבחור קובץ JSON של ערכת נושא מותאמת אישית"
|
||||
},
|
||||
"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": {
|
||||
"Select Wallpaper": "בחר/י רקע"
|
||||
@@ -5683,13 +5725,13 @@
|
||||
"Month Date": "חודש תאריך",
|
||||
"Numeric (D/M)": "מספרי (D/M)",
|
||||
"Numeric (M/D)": "מספרי (M/D)",
|
||||
"System Default": "ברירת מחדל מערכת"
|
||||
"System Default": "ברירת מחדל של המערכת"
|
||||
},
|
||||
"days": {
|
||||
"days": "ימים"
|
||||
},
|
||||
"default monitor label suffix": {
|
||||
"(Default)": ""
|
||||
"(Default)": "(ברירת מחדל)"
|
||||
},
|
||||
"dgop not available": {
|
||||
"dgop not available": "dgop אינו זמין"
|
||||
@@ -5765,6 +5807,9 @@
|
||||
"events": {
|
||||
"events": "אירועים"
|
||||
},
|
||||
"ext": {
|
||||
"ext": ""
|
||||
},
|
||||
"fallback gpu name": {
|
||||
"Unknown GPU": "GPU לא ידוע"
|
||||
},
|
||||
@@ -5957,7 +6002,7 @@
|
||||
"leave empty for default": "השאר/י ריק לברירת מחדל"
|
||||
},
|
||||
"light mode wallpaper color picker title": {
|
||||
"Choose Light Mode Color": ""
|
||||
"Choose Light Mode Color": "בחר/י צבע למצב בהיר"
|
||||
},
|
||||
"loading indicator": {
|
||||
"Loading...": "טוען..."
|
||||
@@ -6019,7 +6064,7 @@
|
||||
"nav": "ניווט"
|
||||
},
|
||||
"neovim template description": {
|
||||
"Requires lazy plugin manager": ""
|
||||
"Requires lazy plugin manager": "מנהל התוספים 'lazy' נדרש"
|
||||
},
|
||||
"network status": {
|
||||
"Connected": "מחובר",
|
||||
@@ -6035,7 +6080,7 @@
|
||||
"No custom theme file": "אין קובץ ערכת נושא מותאמת אישית"
|
||||
},
|
||||
"no monitors available label": {
|
||||
"No monitors": ""
|
||||
"No monitors": "אין מסכים"
|
||||
},
|
||||
"no registry themes installed hint": {
|
||||
"No themes installed. Browse themes to install from the registry.": "אין ערכות נושא מותקנות. עיין/י בערכות נושא להתקנה מהמאגר."
|
||||
@@ -6118,22 +6163,22 @@
|
||||
"official": "רשמי"
|
||||
},
|
||||
"on Hyprland": {
|
||||
"on Hyprland": ""
|
||||
"on Hyprland": "על Hyprland"
|
||||
},
|
||||
"on MangoWC": {
|
||||
"on MangoWC": ""
|
||||
"on MangoWC": "על MangoWC"
|
||||
},
|
||||
"on Miracle WM": {
|
||||
"on Miracle WM": ""
|
||||
"on Miracle WM": "על Miracle WM"
|
||||
},
|
||||
"on Niri": {
|
||||
"on Niri": ""
|
||||
"on Niri": "על Niri"
|
||||
},
|
||||
"on Scroll": {
|
||||
"on Scroll": ""
|
||||
"on Scroll": "על Scroll"
|
||||
},
|
||||
"on Sway": {
|
||||
"on Sway": ""
|
||||
"on Sway": "על Sway"
|
||||
},
|
||||
"open": {
|
||||
"open": "פתח/י"
|
||||
@@ -6183,10 +6228,10 @@
|
||||
"Select Profile Image": "בחר/י תמונת פרופיל"
|
||||
},
|
||||
"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כמשתני סביבה ולאחר מכן להפעיל מחדש את DMS.\n\n* qt6ct דורש התקנה של qt6ct-kde."
|
||||
},
|
||||
"qt theme env error title": {
|
||||
"Missing Environment Variables": ""
|
||||
"Missing Environment Variables": "משתני סביבה חסרים"
|
||||
},
|
||||
"read-only settings warning for NixOS home-manager users": {
|
||||
"Settings are read-only. Changes will not persist.": "ההגדרות הן לקריאה בלבד. שינויים לא יישמרו."
|
||||
@@ -6246,10 +6291,10 @@
|
||||
"Load Average": "עומס ממוצע"
|
||||
},
|
||||
"theme auto mode tab": {
|
||||
"Location": ""
|
||||
"Location": "מיקום"
|
||||
},
|
||||
"theme auto mode tab | wallpaper cycling mode tab": {
|
||||
"Time": ""
|
||||
"Time": "זמן"
|
||||
},
|
||||
"theme browser description": {
|
||||
"Install color themes from the DMS theme registry": "התקן/י ערכות צבעים ממאגר ערכות הנושא של DMS"
|
||||
@@ -6292,7 +6337,7 @@
|
||||
"Unknown": "לא ידוע"
|
||||
},
|
||||
"up": {
|
||||
"up": ""
|
||||
"up": "פועל"
|
||||
},
|
||||
"update dms for NM integration.": {
|
||||
"update dms for NM integration.": "עדכן/י את DMS כדי לאפשר אינטגרציה עם NM."
|
||||
@@ -6307,10 +6352,10 @@
|
||||
"Requires %1": "גרסה %1 נדרשת"
|
||||
},
|
||||
"wallpaper color picker title": {
|
||||
"Choose Wallpaper Color": ""
|
||||
"Choose Wallpaper Color": "בחר/י צבע לרקע"
|
||||
},
|
||||
"wallpaper cycling mode tab": {
|
||||
"Interval": ""
|
||||
"Interval": "מרווח זמן"
|
||||
},
|
||||
"wallpaper directory file browser title": {
|
||||
"Select Wallpaper Directory": "בחר/י תיקיית רקעים"
|
||||
@@ -6331,32 +6376,32 @@
|
||||
"Tile V": "אריח אנכי"
|
||||
},
|
||||
"wallpaper interval": {
|
||||
"1 hour": "",
|
||||
"1 hour 30 minutes": "",
|
||||
"1 minute": "",
|
||||
"10 seconds": "",
|
||||
"12 hours": "",
|
||||
"15 minutes": "",
|
||||
"15 seconds": "",
|
||||
"2 hours": "",
|
||||
"20 seconds": "",
|
||||
"25 seconds": "",
|
||||
"3 hours": "",
|
||||
"30 minutes": "",
|
||||
"30 seconds": "",
|
||||
"35 seconds": "",
|
||||
"4 hours": "",
|
||||
"40 seconds": "",
|
||||
"45 seconds": "",
|
||||
"5 minutes": "",
|
||||
"5 seconds": "",
|
||||
"50 seconds": "",
|
||||
"55 seconds": "",
|
||||
"6 hours": "",
|
||||
"8 hours": ""
|
||||
"1 hour": "שעה אחת",
|
||||
"1 hour 30 minutes": "שעה וחצי (ו30 דקות)",
|
||||
"1 minute": "דקה אחת",
|
||||
"10 seconds": "10 שניות",
|
||||
"12 hours": "12 שעות",
|
||||
"15 minutes": "15 דקות",
|
||||
"15 seconds": "15 שניות",
|
||||
"2 hours": "2 שעות",
|
||||
"20 seconds": "20 שניות",
|
||||
"25 seconds": "25 שניות",
|
||||
"3 hours": "3 שעות",
|
||||
"30 minutes": "30 דקות",
|
||||
"30 seconds": "30 שניות",
|
||||
"35 seconds": "35 שניות",
|
||||
"4 hours": "4 שעות",
|
||||
"40 seconds": "40 שניות",
|
||||
"45 seconds": "45 שניות",
|
||||
"5 minutes": "5 דקות",
|
||||
"5 seconds": "5 שניות",
|
||||
"50 seconds": "50 שניות",
|
||||
"55 seconds": "55 שניות",
|
||||
"6 hours": "6 שעות",
|
||||
"8 hours": "8 שעות"
|
||||
},
|
||||
"wallpaper not set label": {
|
||||
"Not set": ""
|
||||
"Not set": "לא מוגדר"
|
||||
},
|
||||
"wallpaper processing error": {
|
||||
"Wallpaper processing failed": "עיבוד תמונת הרקע נכשל"
|
||||
@@ -6434,6 +6479,6 @@
|
||||
"• yyyy - Year (2024)": "• yyyy - שנה (2024)"
|
||||
},
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": "↑/↓: ניווט • Space: הרחב • Enter: פעולה/הרחבה • E: טקסט"
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2089,6 +2089,12 @@
|
||||
"Fog": {
|
||||
"Fog": "Nebbia"
|
||||
},
|
||||
"Folder": {
|
||||
"Folder": ""
|
||||
},
|
||||
"Folders": {
|
||||
"Folders": ""
|
||||
},
|
||||
"Follow Monitor Focus": {
|
||||
"Follow Monitor Focus": "Segui lo Schermo Attivo"
|
||||
},
|
||||
@@ -2413,6 +2419,9 @@
|
||||
"Icon": {
|
||||
"Icon": "Icona"
|
||||
},
|
||||
"Icon Scale": {
|
||||
"Icon Scale": ""
|
||||
},
|
||||
"Icon Size": {
|
||||
"Icon Size": "Dimensione Icona"
|
||||
},
|
||||
@@ -3013,6 +3022,12 @@
|
||||
"Maximize Detection": {
|
||||
"Maximize Detection": "Rilevamento Finestra Massimizzata"
|
||||
},
|
||||
"Maximize Widget Icons": {
|
||||
"Maximize Widget Icons": ""
|
||||
},
|
||||
"Maximize Widget Text": {
|
||||
"Maximize Widget Text": ""
|
||||
},
|
||||
"Maximum Entry Size": {
|
||||
"Maximum Entry Size": "Dimensione Massima della Voce"
|
||||
},
|
||||
@@ -3364,6 +3379,9 @@
|
||||
"No files found": {
|
||||
"No files found": "Nessun file trovato"
|
||||
},
|
||||
"No folders found": {
|
||||
"No folders found": ""
|
||||
},
|
||||
"No hidden apps.": {
|
||||
"No hidden apps.": "Nessuna app nascosta."
|
||||
},
|
||||
@@ -3556,6 +3574,9 @@
|
||||
"Open in Browser": {
|
||||
"Open in Browser": "Apri nel Browser"
|
||||
},
|
||||
"Open in terminal": {
|
||||
"Open in terminal": ""
|
||||
},
|
||||
"Open search bar to find text": {
|
||||
"Open search bar to find text": "Apri barra di ricerca per cercare testo"
|
||||
},
|
||||
@@ -4053,6 +4074,9 @@
|
||||
"Remove": {
|
||||
"Remove": "Rimuovi"
|
||||
},
|
||||
"Remove Widget Padding": {
|
||||
"Remove Widget Padding": ""
|
||||
},
|
||||
"Remove gaps and border when windows are maximized": {
|
||||
"Remove gaps and border when windows are maximized": "Rimuovi spazi e bordo quando le finestre sono massimizzate"
|
||||
},
|
||||
@@ -4203,6 +4227,9 @@
|
||||
"Save Notepad File": {
|
||||
"Save Notepad File": "Salva File Blocco Note"
|
||||
},
|
||||
"Save QR Code": {
|
||||
"Save QR Code": ""
|
||||
},
|
||||
"Save and switch between display configurations": {
|
||||
"Save and switch between display configurations": "Salva e passa tra le configurazioni dello schermo"
|
||||
},
|
||||
@@ -4230,6 +4257,9 @@
|
||||
"Scale DankBar font sizes independently": {
|
||||
"Scale DankBar font sizes independently": "Scala le dimensioni dei font della DankBar in modo indipendente"
|
||||
},
|
||||
"Scale DankBar icon sizes independently": {
|
||||
"Scale DankBar icon sizes independently": ""
|
||||
},
|
||||
"Scale all font sizes throughout the shell": {
|
||||
"Scale all font sizes throughout the shell": "Ridimensiona tutte le dimensioni dei caratteri nell'intera shell"
|
||||
},
|
||||
@@ -4245,6 +4275,9 @@
|
||||
"Science": {
|
||||
"Science": "Scienza"
|
||||
},
|
||||
"Score": {
|
||||
"Score": ""
|
||||
},
|
||||
"Screen Sharing": {
|
||||
"Screen Sharing": "Condivisione dello Schermo"
|
||||
},
|
||||
@@ -5076,6 +5109,9 @@
|
||||
"Trigger: %1": {
|
||||
"Trigger: %1": "Attivatore: %1"
|
||||
},
|
||||
"Trust": {
|
||||
"Trust": ""
|
||||
},
|
||||
"Try a different search": {
|
||||
"Try a different search": "Prova una ricerca diversa"
|
||||
},
|
||||
@@ -5172,6 +5208,9 @@
|
||||
"Untitled": {
|
||||
"Untitled": "Senza Titolo"
|
||||
},
|
||||
"Untrust": {
|
||||
"Untrust": ""
|
||||
},
|
||||
"Update": {
|
||||
"Update": "Aggiorna"
|
||||
},
|
||||
@@ -5431,6 +5470,9 @@
|
||||
"WiFi Device": {
|
||||
"WiFi Device": "Dispositivo WiFi"
|
||||
},
|
||||
"WiFi QR code for ": {
|
||||
"WiFi QR code for ": ""
|
||||
},
|
||||
"WiFi disabled": {
|
||||
"WiFi disabled": "WiFi disattivato"
|
||||
},
|
||||
@@ -5765,6 +5807,9 @@
|
||||
"events": {
|
||||
"events": "eventi"
|
||||
},
|
||||
"ext": {
|
||||
"ext": ""
|
||||
},
|
||||
"fallback gpu name": {
|
||||
"Unknown GPU": "GPU Sconosciuta"
|
||||
},
|
||||
|
||||
@@ -2089,6 +2089,12 @@
|
||||
"Fog": {
|
||||
"Fog": ""
|
||||
},
|
||||
"Folder": {
|
||||
"Folder": ""
|
||||
},
|
||||
"Folders": {
|
||||
"Folders": ""
|
||||
},
|
||||
"Follow Monitor Focus": {
|
||||
"Follow Monitor Focus": ""
|
||||
},
|
||||
@@ -2413,6 +2419,9 @@
|
||||
"Icon": {
|
||||
"Icon": ""
|
||||
},
|
||||
"Icon Scale": {
|
||||
"Icon Scale": ""
|
||||
},
|
||||
"Icon Size": {
|
||||
"Icon Size": "アイコンサイズ"
|
||||
},
|
||||
@@ -3013,6 +3022,12 @@
|
||||
"Maximize Detection": {
|
||||
"Maximize Detection": ""
|
||||
},
|
||||
"Maximize Widget Icons": {
|
||||
"Maximize Widget Icons": ""
|
||||
},
|
||||
"Maximize Widget Text": {
|
||||
"Maximize Widget Text": ""
|
||||
},
|
||||
"Maximum Entry Size": {
|
||||
"Maximum Entry Size": ""
|
||||
},
|
||||
@@ -3364,6 +3379,9 @@
|
||||
"No files found": {
|
||||
"No files found": "ファイルが見つかりませんでした"
|
||||
},
|
||||
"No folders found": {
|
||||
"No folders found": ""
|
||||
},
|
||||
"No hidden apps.": {
|
||||
"No hidden apps.": ""
|
||||
},
|
||||
@@ -3556,6 +3574,9 @@
|
||||
"Open in Browser": {
|
||||
"Open in Browser": ""
|
||||
},
|
||||
"Open in terminal": {
|
||||
"Open in terminal": ""
|
||||
},
|
||||
"Open search bar to find text": {
|
||||
"Open search bar to find text": "検索バーを開いてテキストを検索"
|
||||
},
|
||||
@@ -4053,6 +4074,9 @@
|
||||
"Remove": {
|
||||
"Remove": "削除"
|
||||
},
|
||||
"Remove Widget Padding": {
|
||||
"Remove Widget Padding": ""
|
||||
},
|
||||
"Remove gaps and border when windows are maximized": {
|
||||
"Remove gaps and border when windows are maximized": ""
|
||||
},
|
||||
@@ -4203,6 +4227,9 @@
|
||||
"Save Notepad File": {
|
||||
"Save Notepad File": "メモ帳ファイルを保存"
|
||||
},
|
||||
"Save QR Code": {
|
||||
"Save QR Code": ""
|
||||
},
|
||||
"Save and switch between display configurations": {
|
||||
"Save and switch between display configurations": ""
|
||||
},
|
||||
@@ -4230,6 +4257,9 @@
|
||||
"Scale DankBar font sizes independently": {
|
||||
"Scale DankBar font sizes independently": "Dank Barのフォントサイズを個別に調整"
|
||||
},
|
||||
"Scale DankBar icon sizes independently": {
|
||||
"Scale DankBar icon sizes independently": ""
|
||||
},
|
||||
"Scale all font sizes throughout the shell": {
|
||||
"Scale all font sizes throughout the shell": ""
|
||||
},
|
||||
@@ -4245,6 +4275,9 @@
|
||||
"Science": {
|
||||
"Science": "科学"
|
||||
},
|
||||
"Score": {
|
||||
"Score": ""
|
||||
},
|
||||
"Screen Sharing": {
|
||||
"Screen Sharing": ""
|
||||
},
|
||||
@@ -5076,6 +5109,9 @@
|
||||
"Trigger: %1": {
|
||||
"Trigger: %1": ""
|
||||
},
|
||||
"Trust": {
|
||||
"Trust": ""
|
||||
},
|
||||
"Try a different search": {
|
||||
"Try a different search": ""
|
||||
},
|
||||
@@ -5172,6 +5208,9 @@
|
||||
"Untitled": {
|
||||
"Untitled": "無題"
|
||||
},
|
||||
"Untrust": {
|
||||
"Untrust": ""
|
||||
},
|
||||
"Update": {
|
||||
"Update": ""
|
||||
},
|
||||
@@ -5431,6 +5470,9 @@
|
||||
"WiFi Device": {
|
||||
"WiFi Device": ""
|
||||
},
|
||||
"WiFi QR code for ": {
|
||||
"WiFi QR code for ": ""
|
||||
},
|
||||
"WiFi disabled": {
|
||||
"WiFi disabled": "WiFiを無効化にしました"
|
||||
},
|
||||
@@ -5765,6 +5807,9 @@
|
||||
"events": {
|
||||
"events": "イベント"
|
||||
},
|
||||
"ext": {
|
||||
"ext": ""
|
||||
},
|
||||
"fallback gpu name": {
|
||||
"Unknown GPU": ""
|
||||
},
|
||||
|
||||
@@ -105,10 +105,10 @@
|
||||
"2 minutes": "2 minuten"
|
||||
},
|
||||
"2 seconds": {
|
||||
"2 seconds": ""
|
||||
"2 seconds": "2 seconden"
|
||||
},
|
||||
"20 minutes": {
|
||||
"20 minutes": ""
|
||||
"20 minutes": "20 minuten"
|
||||
},
|
||||
"24-Hour Format": {
|
||||
"24-Hour Format": "24-uursnotatie"
|
||||
@@ -117,7 +117,7 @@
|
||||
"24-hour format": "24-uursnotatie"
|
||||
},
|
||||
"250 ms": {
|
||||
"250 ms": ""
|
||||
"250 ms": "250 ms"
|
||||
},
|
||||
"270°": {
|
||||
"270°": "270°"
|
||||
@@ -126,7 +126,7 @@
|
||||
"3 days": "3 dagen"
|
||||
},
|
||||
"3 minutes": {
|
||||
"3 minutes": ""
|
||||
"3 minutes": "3 minuten"
|
||||
},
|
||||
"3 seconds": {
|
||||
"3 seconds": "3 seconden"
|
||||
@@ -141,7 +141,7 @@
|
||||
"3rd party": "Derden"
|
||||
},
|
||||
"4 seconds": {
|
||||
"4 seconds": ""
|
||||
"4 seconds": "4 seconden"
|
||||
},
|
||||
"5 minutes": {
|
||||
"5 minutes": "5 minuten"
|
||||
@@ -150,13 +150,13 @@
|
||||
"5 seconds": "5 seconden"
|
||||
},
|
||||
"500 ms": {
|
||||
"500 ms": ""
|
||||
"500 ms": "500 ms"
|
||||
},
|
||||
"7 days": {
|
||||
"7 days": "7 dagen"
|
||||
},
|
||||
"750 ms": {
|
||||
"750 ms": ""
|
||||
"750 ms": "750 ms"
|
||||
},
|
||||
"8 seconds": {
|
||||
"8 seconds": "8 seconden"
|
||||
@@ -171,7 +171,7 @@
|
||||
"A file with this name already exists. Do you want to overwrite it?": "Er bestaat al een bestand met deze naam. Wilt u het overschrijven?"
|
||||
},
|
||||
"AC Power": {
|
||||
"AC Power": ""
|
||||
"AC Power": "Netstroom"
|
||||
},
|
||||
"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 met aangepaste weergavenaam, pictogram of startopties. Klik rechts op een app en selecteer 'App bewerken' om aan te passen."
|
||||
},
|
||||
"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 met gedempte meldingspop-ups. Dempen opheffen of verwijderen om te wissen."
|
||||
},
|
||||
"Arrange displays and configure resolution, refresh rate, and VRR": {
|
||||
"Arrange displays and configure resolution, refresh rate, and VRR": "Beeldschermen rangschikken en resolutie, verversingssnelheid en VRR configureren"
|
||||
@@ -587,7 +587,7 @@
|
||||
"Bar Transparency": "Balktransparantie"
|
||||
},
|
||||
"Base duration for animations (drag to use Custom)": {
|
||||
"Base duration for animations (drag to use Custom)": ""
|
||||
"Base duration for animations (drag to use Custom)": "Basisduur voor animaties (sleep om Aangepast te gebruiken)"
|
||||
},
|
||||
"Battery": {
|
||||
"Battery": "Batterij"
|
||||
@@ -770,7 +770,7 @@
|
||||
"Caps Lock Indicator": "Caps Lock-indicator"
|
||||
},
|
||||
"Caps Lock is on": {
|
||||
"Caps Lock is on": ""
|
||||
"Caps Lock is on": "Caps Lock staat aan"
|
||||
},
|
||||
"Center Section": {
|
||||
"Center Section": "Middensectie"
|
||||
@@ -863,7 +863,7 @@
|
||||
"Clear History?": "Geschiedenis wissen?"
|
||||
},
|
||||
"Clear Sky": {
|
||||
"Clear Sky": ""
|
||||
"Clear Sky": "Heldere hemel"
|
||||
},
|
||||
"Clear all history when server starts": {
|
||||
"Clear all history when server starts": "Alle geschiedenis wissen wanneer server start"
|
||||
@@ -1112,7 +1112,7 @@
|
||||
"Control Center Tile Color": "Tegelkleur bedieningspaneel"
|
||||
},
|
||||
"Control animation duration for notification popups and history": {
|
||||
"Control animation duration for notification popups and history": ""
|
||||
"Control animation duration for notification popups and history": "Animatieduur voor meldingspop-ups en geschiedenis beheren"
|
||||
},
|
||||
"Control currently playing media": {
|
||||
"Control currently playing media": "Huidige media bedienen"
|
||||
@@ -1205,7 +1205,7 @@
|
||||
"Create rules to mute, ignore, hide from history, or override notification priority.": "Maak regels om meldingen te dempen, te negeren, uit de geschiedenis te verbergen of de prioriteit te overschrijven."
|
||||
},
|
||||
"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.": "Regels maken om meldingen te dempen, negeren, verbergen in geschiedenis of prioriteit te overschrijven. Standaard wordt alleen de prioriteit overschreven; meldingen worden nog steeds normaal weergegeven."
|
||||
},
|
||||
"Creating...": {
|
||||
"Creating...": "Aanmaken..."
|
||||
@@ -1418,7 +1418,7 @@
|
||||
"Description": "Beschrijving"
|
||||
},
|
||||
"Desktop": {
|
||||
"Desktop": ""
|
||||
"Desktop": "Bureaublad"
|
||||
},
|
||||
"Desktop Clock": {
|
||||
"Desktop Clock": "Bureaubladklok"
|
||||
@@ -1592,7 +1592,7 @@
|
||||
"Docs": "Documentatie"
|
||||
},
|
||||
"Documents": {
|
||||
"Documents": ""
|
||||
"Documents": "Documenten"
|
||||
},
|
||||
"Domain (optional)": {
|
||||
"Domain (optional)": "Domein (optioneel)"
|
||||
@@ -1607,7 +1607,7 @@
|
||||
"Door Open": "Deur open"
|
||||
},
|
||||
"Downloads": {
|
||||
"Downloads": ""
|
||||
"Downloads": "Downloads"
|
||||
},
|
||||
"Drag to Reorder": {
|
||||
"Drag to Reorder": "Sleep om te rangschikken"
|
||||
@@ -1622,7 +1622,7 @@
|
||||
"Driver": "Stuurprogramma"
|
||||
},
|
||||
"Drizzle": {
|
||||
"Drizzle": ""
|
||||
"Drizzle": "Motregen"
|
||||
},
|
||||
"Duplicate": {
|
||||
"Duplicate": "Dupliceren"
|
||||
@@ -1631,7 +1631,7 @@
|
||||
"Duplicate Wallpaper with Blur": "Achtergrond dupliceren met vervaging"
|
||||
},
|
||||
"Duration": {
|
||||
"Duration": ""
|
||||
"Duration": "Duur"
|
||||
},
|
||||
"Dusk (Astronomical Twilight)": {
|
||||
"Dusk (Astronomical Twilight)": "Avondschemering (Astronomische schemering)"
|
||||
@@ -2087,7 +2087,13 @@
|
||||
"Focused Window": "Actieve venster"
|
||||
},
|
||||
"Fog": {
|
||||
"Fog": ""
|
||||
"Fog": "Mist"
|
||||
},
|
||||
"Folder": {
|
||||
"Folder": ""
|
||||
},
|
||||
"Folders": {
|
||||
"Folders": ""
|
||||
},
|
||||
"Follow Monitor Focus": {
|
||||
"Follow Monitor Focus": "Monitorfocus volgen"
|
||||
@@ -2150,10 +2156,10 @@
|
||||
"Format Legend": "Legenda voor notatie"
|
||||
},
|
||||
"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/geheugen vrijmaken wanneer het startmenu gesloten is. Dit kan een lichte vertraging veroorzaken bij het heropenen."
|
||||
},
|
||||
"Freezing Drizzle": {
|
||||
"Freezing Drizzle": ""
|
||||
"Freezing Drizzle": "IJzel"
|
||||
},
|
||||
"Frequency": {
|
||||
"Frequency": "Frequentie"
|
||||
@@ -2261,13 +2267,13 @@
|
||||
"Health": "Gezondheid"
|
||||
},
|
||||
"Heavy Rain": {
|
||||
"Heavy Rain": ""
|
||||
"Heavy Rain": "Zware regen"
|
||||
},
|
||||
"Heavy Snow": {
|
||||
"Heavy Snow": ""
|
||||
"Heavy Snow": "Zware sneeuwval"
|
||||
},
|
||||
"Heavy Snow Showers": {
|
||||
"Heavy Snow Showers": ""
|
||||
"Heavy Snow Showers": "Zware sneeuwbuien"
|
||||
},
|
||||
"Height": {
|
||||
"Height": "Hoogte"
|
||||
@@ -2288,7 +2294,7 @@
|
||||
"Hidden": "Verborgen"
|
||||
},
|
||||
"Hidden (%1)": {
|
||||
"Hidden (%1)": ""
|
||||
"Hidden (%1)": "Verborgen (%1)"
|
||||
},
|
||||
"Hidden Apps": {
|
||||
"Hidden Apps": "Verborgen apps"
|
||||
@@ -2330,13 +2336,13 @@
|
||||
"Hide cursor when using touch input": "Cursor verbergen bij gebruik van aanraakinvoer"
|
||||
},
|
||||
"Hide device": {
|
||||
"Hide device": ""
|
||||
"Hide device": "Apparaat verbergen"
|
||||
},
|
||||
"Hide notification content until expanded": {
|
||||
"Hide notification content until expanded": ""
|
||||
"Hide notification content until expanded": "Meldingsinhoud verbergen tot uitgevouwen"
|
||||
},
|
||||
"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": "Meldingsinhoud verbergen tot uitgevouwen; pop-ups worden standaard ingeklapt weergegeven"
|
||||
},
|
||||
"Hide on Touch": {
|
||||
"Hide on Touch": "Verbergen bij aanraking"
|
||||
@@ -2369,7 +2375,7 @@
|
||||
"Hold to confirm (%1s)": "Ingedrukt houden om te bevestigen (%1s)"
|
||||
},
|
||||
"Home": {
|
||||
"Home": ""
|
||||
"Home": "Persoonlijke map"
|
||||
},
|
||||
"Hot Corners": {
|
||||
"Hot Corners": "Hot Corners"
|
||||
@@ -2413,6 +2419,9 @@
|
||||
"Icon": {
|
||||
"Icon": "Pictogram"
|
||||
},
|
||||
"Icon Scale": {
|
||||
"Icon Scale": ""
|
||||
},
|
||||
"Icon Size": {
|
||||
"Icon Size": "Pictogramgrootte"
|
||||
},
|
||||
@@ -2819,13 +2828,13 @@
|
||||
"Light Mode": "Lichte modus"
|
||||
},
|
||||
"Light Rain": {
|
||||
"Light Rain": ""
|
||||
"Light Rain": "Lichte regen"
|
||||
},
|
||||
"Light Snow": {
|
||||
"Light Snow": ""
|
||||
"Light Snow": "Lichte sneeuwval"
|
||||
},
|
||||
"Light Snow Showers": {
|
||||
"Light Snow Showers": ""
|
||||
"Light Snow Showers": "Lichte sneeuwbuien"
|
||||
},
|
||||
"Linear": {
|
||||
"Linear": "Lineair"
|
||||
@@ -3013,6 +3022,12 @@
|
||||
"Maximize Detection": {
|
||||
"Maximize Detection": "Maximalisatiedetectie"
|
||||
},
|
||||
"Maximize Widget Icons": {
|
||||
"Maximize Widget Icons": ""
|
||||
},
|
||||
"Maximize Widget Text": {
|
||||
"Maximize Widget Text": ""
|
||||
},
|
||||
"Maximum Entry Size": {
|
||||
"Maximum Entry Size": "Maximale grootte item"
|
||||
},
|
||||
@@ -3173,13 +3188,13 @@
|
||||
"Moving to Paused": "Overschakelen naar gepauzeerd"
|
||||
},
|
||||
"Music": {
|
||||
"Music": ""
|
||||
"Music": "Muziek"
|
||||
},
|
||||
"Mute popups for %1": {
|
||||
"Mute popups for %1": ""
|
||||
"Mute popups for %1": "Pop-ups dempen voor %1"
|
||||
},
|
||||
"Muted Apps": {
|
||||
"Muted Apps": ""
|
||||
"Muted Apps": "Gedempte apps"
|
||||
},
|
||||
"Muted palette with subdued, calming tones.": {
|
||||
"Muted palette with subdued, calming tones.": "Gedempt palet met ingetogen, rustgevende tinten."
|
||||
@@ -3332,7 +3347,7 @@
|
||||
"No apps have been launched yet.": "Er zijn nog geen apps gestart."
|
||||
},
|
||||
"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.": "Geen apps gedempt. Klik met de rechtermuisknop op een melding en kies \"Pop-ups dempen\" om er hier een toe te voegen."
|
||||
},
|
||||
"No battery": {
|
||||
"No battery": "Geen batterij"
|
||||
@@ -3364,6 +3379,9 @@
|
||||
"No files found": {
|
||||
"No files found": "Geen bestanden gevonden"
|
||||
},
|
||||
"No folders found": {
|
||||
"No folders found": ""
|
||||
},
|
||||
"No hidden apps.": {
|
||||
"No hidden apps.": "Geen verborgen apps."
|
||||
},
|
||||
@@ -3556,6 +3574,9 @@
|
||||
"Open in Browser": {
|
||||
"Open in Browser": "Openen in browser"
|
||||
},
|
||||
"Open in terminal": {
|
||||
"Open in terminal": ""
|
||||
},
|
||||
"Open search bar to find text": {
|
||||
"Open search bar to find text": "Zoekbalk openen om tekst te vinden"
|
||||
},
|
||||
@@ -3593,7 +3614,7 @@
|
||||
"Outputs Include Missing": "Outputs-include ontbreekt"
|
||||
},
|
||||
"Overcast": {
|
||||
"Overcast": ""
|
||||
"Overcast": "Bewolkt"
|
||||
},
|
||||
"Overflow": {
|
||||
"Overflow": "Overloop"
|
||||
@@ -3653,7 +3674,7 @@
|
||||
"Pairing...": "Koppelen..."
|
||||
},
|
||||
"Partly Cloudy": {
|
||||
"Partly Cloudy": ""
|
||||
"Partly Cloudy": "Half bewolkt"
|
||||
},
|
||||
"Passkey:": {
|
||||
"Passkey:": "Toegangscode:"
|
||||
@@ -3763,7 +3784,7 @@
|
||||
"Unavailable": "Niet beschikbaar"
|
||||
},
|
||||
"Pictures": {
|
||||
"Pictures": ""
|
||||
"Pictures": "Afbeeldingen"
|
||||
},
|
||||
"Pin": {
|
||||
"Pin": "Vastmaken"
|
||||
@@ -3835,7 +3856,7 @@
|
||||
"Popup Position": "Popup-positie"
|
||||
},
|
||||
"Popup Shadow": {
|
||||
"Popup Shadow": ""
|
||||
"Popup Shadow": "Pop-upschaduw"
|
||||
},
|
||||
"Popup Transparency": {
|
||||
"Popup Transparency": "Popup-transparantie"
|
||||
@@ -3946,7 +3967,7 @@
|
||||
"Privacy Indicator": "Privacy-indicator"
|
||||
},
|
||||
"Privacy Mode": {
|
||||
"Privacy Mode": ""
|
||||
"Privacy Mode": "Privacy-modus"
|
||||
},
|
||||
"Private Key Password": {
|
||||
"Private Key Password": "Wachtwoord privésleutel"
|
||||
@@ -3991,7 +4012,7 @@
|
||||
"Protocol": "Protocol"
|
||||
},
|
||||
"Quick Access": {
|
||||
"Quick Access": ""
|
||||
"Quick Access": "Snelle toegang"
|
||||
},
|
||||
"Quick access to application launcher": {
|
||||
"Quick access to application launcher": "Snelle toegang tot app-starter"
|
||||
@@ -4012,7 +4033,7 @@
|
||||
"Radius": "Straal"
|
||||
},
|
||||
"Rain": {
|
||||
"Rain": ""
|
||||
"Rain": "Regen"
|
||||
},
|
||||
"Rain Chance": {
|
||||
"Rain Chance": "Neerslagkans"
|
||||
@@ -4053,6 +4074,9 @@
|
||||
"Remove": {
|
||||
"Remove": "Verwijderen"
|
||||
},
|
||||
"Remove Widget Padding": {
|
||||
"Remove Widget Padding": ""
|
||||
},
|
||||
"Remove gaps and border when windows are maximized": {
|
||||
"Remove gaps and border when windows are maximized": "Tussenruimte en rand verwijderen wanneer vensters gemaximaliseerd zijn"
|
||||
},
|
||||
@@ -4203,6 +4227,9 @@
|
||||
"Save Notepad File": {
|
||||
"Save Notepad File": "Kladblok-bestand opslaan"
|
||||
},
|
||||
"Save QR Code": {
|
||||
"Save QR Code": ""
|
||||
},
|
||||
"Save and switch between display configurations": {
|
||||
"Save and switch between display configurations": "Opslaan en schakelen tussen beeldschermconfiguraties"
|
||||
},
|
||||
@@ -4230,6 +4257,9 @@
|
||||
"Scale DankBar font sizes independently": {
|
||||
"Scale DankBar font sizes independently": "DankBar-lettergroottes onafhankelijk schalen"
|
||||
},
|
||||
"Scale DankBar icon sizes independently": {
|
||||
"Scale DankBar icon sizes independently": ""
|
||||
},
|
||||
"Scale all font sizes throughout the shell": {
|
||||
"Scale all font sizes throughout the shell": "Alle lettergroottes in de shell schalen"
|
||||
},
|
||||
@@ -4245,6 +4275,9 @@
|
||||
"Science": {
|
||||
"Science": "Wetenschap"
|
||||
},
|
||||
"Score": {
|
||||
"Score": ""
|
||||
},
|
||||
"Screen Sharing": {
|
||||
"Screen Sharing": "Schermdelen"
|
||||
},
|
||||
@@ -4411,7 +4444,7 @@
|
||||
"Set key and action to save": "Stel toets en actie in om op te slaan"
|
||||
},
|
||||
"Set notification rules": {
|
||||
"Set notification rules": ""
|
||||
"Set notification rules": "Meldingsregels instellen"
|
||||
},
|
||||
"Setup": {
|
||||
"Setup": "Instellen"
|
||||
@@ -4585,13 +4618,13 @@
|
||||
"Show darkened overlay behind modal dialogs": "Verduisterde overlay tonen achter modale vensters"
|
||||
},
|
||||
"Show device": {
|
||||
"Show device": ""
|
||||
"Show device": "Apparaat tonen"
|
||||
},
|
||||
"Show dock when floating windows don't overlap its area": {
|
||||
"Show dock when floating windows don't overlap its area": "Dock tonen wanneer zwevende vensters het gebied niet overlappen"
|
||||
},
|
||||
"Show drop shadow on notification popups": {
|
||||
"Show drop shadow on notification popups": ""
|
||||
"Show drop shadow on notification popups": "Slagschaduw tonen op meldingspop-ups"
|
||||
},
|
||||
"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.": "Starter-overlay tonen bij typen in Niri-overzicht. Schakel uit om een andere starter te gebruiken."
|
||||
@@ -4714,7 +4747,7 @@
|
||||
"Snap": "Vastklikken"
|
||||
},
|
||||
"Snow": {
|
||||
"Snow": ""
|
||||
"Snow": "Sneeuw"
|
||||
},
|
||||
"Some plugins require a newer version of DMS:": {
|
||||
"Some plugins require a newer version of DMS:": "Sommige plug-ins vereisen een nieuwere versie van DMS:"
|
||||
@@ -4813,7 +4846,7 @@
|
||||
"Suspend system after": "Systeem in slaapstand zetten na"
|
||||
},
|
||||
"Suspend then Hibernate": {
|
||||
"Suspend then Hibernate": ""
|
||||
"Suspend then Hibernate": "Onderbreken dan Sluimerstand"
|
||||
},
|
||||
"Swap": {
|
||||
"Swap": "Swap"
|
||||
@@ -4954,10 +4987,10 @@
|
||||
"This will permanently remove this saved clipboard item. This action cannot be undone.": "Dit verwijdert dit opgeslagen klemborditem permanent. Deze actie kan niet ongedaan worden gemaakt."
|
||||
},
|
||||
"Thunderstorm": {
|
||||
"Thunderstorm": ""
|
||||
"Thunderstorm": "Onweer"
|
||||
},
|
||||
"Thunderstorm with Hail": {
|
||||
"Thunderstorm with Hail": ""
|
||||
"Thunderstorm with Hail": "Onweer met hagel"
|
||||
},
|
||||
"Tiled": {
|
||||
"Tiled": "Getegeld"
|
||||
@@ -5076,6 +5109,9 @@
|
||||
"Trigger: %1": {
|
||||
"Trigger: %1": "Trigger: %1"
|
||||
},
|
||||
"Trust": {
|
||||
"Trust": ""
|
||||
},
|
||||
"Try a different search": {
|
||||
"Try a different search": "Probeer een andere zoekopdracht"
|
||||
},
|
||||
@@ -5143,13 +5179,13 @@
|
||||
"Unknown Title": "Onbekende titel"
|
||||
},
|
||||
"Unload on Close": {
|
||||
"Unload on Close": ""
|
||||
"Unload on Close": "Ontladen bij sluiten"
|
||||
},
|
||||
"Unmute": {
|
||||
"Unmute": ""
|
||||
"Unmute": "Dempen opheffen"
|
||||
},
|
||||
"Unmute popups for %1": {
|
||||
"Unmute popups for %1": ""
|
||||
"Unmute popups for %1": "Dempen van pop-ups opheffen voor %1"
|
||||
},
|
||||
"Unnamed Rule": {
|
||||
"Unnamed Rule": "Naamloze regel"
|
||||
@@ -5172,6 +5208,9 @@
|
||||
"Untitled": {
|
||||
"Untitled": "Naamloos"
|
||||
},
|
||||
"Untrust": {
|
||||
"Untrust": ""
|
||||
},
|
||||
"Update": {
|
||||
"Update": "Bijwerken"
|
||||
},
|
||||
@@ -5350,7 +5389,7 @@
|
||||
"Vibrant palette with playful saturation.": "Levendig palet met speelse verzadiging."
|
||||
},
|
||||
"Videos": {
|
||||
"Videos": ""
|
||||
"Videos": "Video's"
|
||||
},
|
||||
"View Mode": {
|
||||
"View Mode": "Weergavemodus"
|
||||
@@ -5431,6 +5470,9 @@
|
||||
"WiFi Device": {
|
||||
"WiFi Device": "Wifi-apparaat"
|
||||
},
|
||||
"WiFi QR code for ": {
|
||||
"WiFi QR code for ": ""
|
||||
},
|
||||
"WiFi disabled": {
|
||||
"WiFi disabled": "Wifi uitgeschakeld"
|
||||
},
|
||||
@@ -5622,7 +5664,7 @@
|
||||
"Thickness": "Dikte"
|
||||
},
|
||||
"brandon": {
|
||||
"brandon": ""
|
||||
"brandon": "brandon"
|
||||
},
|
||||
"browse themes button | theme browser header | theme browser window title": {
|
||||
"Browse Themes": "Thema's doorbladeren"
|
||||
@@ -5653,7 +5695,7 @@
|
||||
"Active tile background and icon color": "Achtergrond- en pictogramkleur van actieve tegel"
|
||||
},
|
||||
"count of hidden audio devices": {
|
||||
"Hidden (%1)": ""
|
||||
"Hidden (%1)": "Verborgen (%1)"
|
||||
},
|
||||
"current theme label": {
|
||||
"Current Theme: %1": "Huidig thema: %1"
|
||||
@@ -5668,7 +5710,7 @@
|
||||
"Click to select a custom theme JSON file": "Klik om een aangepast thema-JSON-bestand te selecteren"
|
||||
},
|
||||
"dark mode wallpaper color picker title": {
|
||||
"Choose Dark Mode Color": ""
|
||||
"Choose Dark Mode Color": "Kleur donkere modus kiezen"
|
||||
},
|
||||
"dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": {
|
||||
"Select Wallpaper": "Selecteer achtergrond"
|
||||
@@ -5689,7 +5731,7 @@
|
||||
"days": "dagen"
|
||||
},
|
||||
"default monitor label suffix": {
|
||||
"(Default)": ""
|
||||
"(Default)": "(Standaard)"
|
||||
},
|
||||
"dgop not available": {
|
||||
"dgop not available": "dgop niet beschikbaar"
|
||||
@@ -5765,6 +5807,9 @@
|
||||
"events": {
|
||||
"events": "afspraken"
|
||||
},
|
||||
"ext": {
|
||||
"ext": ""
|
||||
},
|
||||
"fallback gpu name": {
|
||||
"Unknown GPU": "Onbekende GPU"
|
||||
},
|
||||
@@ -5957,7 +6002,7 @@
|
||||
"leave empty for default": "laat leeg voor standaard"
|
||||
},
|
||||
"light mode wallpaper color picker title": {
|
||||
"Choose Light Mode Color": ""
|
||||
"Choose Light Mode Color": "Kleur lichte modus kiezen"
|
||||
},
|
||||
"loading indicator": {
|
||||
"Loading...": "Laden..."
|
||||
@@ -6019,7 +6064,7 @@
|
||||
"nav": "navigatie"
|
||||
},
|
||||
"neovim template description": {
|
||||
"Requires lazy plugin manager": ""
|
||||
"Requires lazy plugin manager": "Vereist lazy plugin manager"
|
||||
},
|
||||
"network status": {
|
||||
"Connected": "Verbonden",
|
||||
@@ -6035,7 +6080,7 @@
|
||||
"No custom theme file": "Geen aangepast themabestand"
|
||||
},
|
||||
"no monitors available label": {
|
||||
"No monitors": ""
|
||||
"No monitors": "Geen beeldschermen"
|
||||
},
|
||||
"no registry themes installed hint": {
|
||||
"No themes installed. Browse themes to install from the registry.": "Geen thema's geïnstalleerd. Blader door thema's om te installeren uit het register."
|
||||
@@ -6085,7 +6130,7 @@
|
||||
"Enable History": "Geschiedenis inschakelen"
|
||||
},
|
||||
"notification privacy mode placeholder": {
|
||||
"Message Content": ""
|
||||
"Message Content": "Berichtinhoud"
|
||||
},
|
||||
"notification rule action option": {
|
||||
"Ignore Completely": "Volledig negeren",
|
||||
@@ -6118,22 +6163,22 @@
|
||||
"official": "officieel"
|
||||
},
|
||||
"on Hyprland": {
|
||||
"on Hyprland": ""
|
||||
"on Hyprland": "op Hyprland"
|
||||
},
|
||||
"on MangoWC": {
|
||||
"on MangoWC": ""
|
||||
"on MangoWC": "op MangoWC"
|
||||
},
|
||||
"on Miracle WM": {
|
||||
"on Miracle WM": ""
|
||||
"on Miracle WM": "op Miracle WM"
|
||||
},
|
||||
"on Niri": {
|
||||
"on Niri": ""
|
||||
"on Niri": "op Niri"
|
||||
},
|
||||
"on Scroll": {
|
||||
"on Scroll": ""
|
||||
"on Scroll": "op Scroll"
|
||||
},
|
||||
"on Sway": {
|
||||
"on Sway": ""
|
||||
"on Sway": "op Sway"
|
||||
},
|
||||
"open": {
|
||||
"open": "openen"
|
||||
@@ -6183,10 +6228,10 @@
|
||||
"Select Profile Image": "Selecteer profielafbeelding"
|
||||
},
|
||||
"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.": "U moet het volgende instellen:\nQT_QPA_PLATFORMTHEME=gtk3 OF\nQT_QPA_PLATFORMTHEME=qt6ct\nals omgevingsvariabelen, en daarna de shell herstarten.\n\nqt6ct vereist dat qt6ct-kde is geïnstalleerd."
|
||||
},
|
||||
"qt theme env error title": {
|
||||
"Missing Environment Variables": ""
|
||||
"Missing Environment Variables": "Ontbrekende omgevingsvariabelen"
|
||||
},
|
||||
"read-only settings warning for NixOS home-manager users": {
|
||||
"Settings are read-only. Changes will not persist.": "Instellingen zijn alleen-lezen. Wijzigingen worden niet opgeslagen."
|
||||
@@ -6246,10 +6291,10 @@
|
||||
"Load Average": "Gemiddelde belasting"
|
||||
},
|
||||
"theme auto mode tab": {
|
||||
"Location": ""
|
||||
"Location": "Locatie"
|
||||
},
|
||||
"theme auto mode tab | wallpaper cycling mode tab": {
|
||||
"Time": ""
|
||||
"Time": "Tijd"
|
||||
},
|
||||
"theme browser description": {
|
||||
"Install color themes from the DMS theme registry": "Installeer kleurthema's uit het DMS-themaregister"
|
||||
@@ -6270,7 +6315,7 @@
|
||||
"Search themes...": "Thema's zoeken..."
|
||||
},
|
||||
"this app": {
|
||||
"this app": ""
|
||||
"this app": "deze app"
|
||||
},
|
||||
"tile color option": {
|
||||
"Primary Container": "Primaire container",
|
||||
@@ -6292,7 +6337,7 @@
|
||||
"Unknown": "Onbekend"
|
||||
},
|
||||
"up": {
|
||||
"up": ""
|
||||
"up": "actief"
|
||||
},
|
||||
"update dms for NM integration.": {
|
||||
"update dms for NM integration.": "update dms voor NM-integratie."
|
||||
@@ -6307,10 +6352,10 @@
|
||||
"Requires %1": "Vereist %1"
|
||||
},
|
||||
"wallpaper color picker title": {
|
||||
"Choose Wallpaper Color": ""
|
||||
"Choose Wallpaper Color": "Achtergrondkleur kiezen"
|
||||
},
|
||||
"wallpaper cycling mode tab": {
|
||||
"Interval": ""
|
||||
"Interval": "Interval"
|
||||
},
|
||||
"wallpaper directory file browser title": {
|
||||
"Select Wallpaper Directory": "Selecteer achtergrondmap"
|
||||
@@ -6331,32 +6376,32 @@
|
||||
"Tile V": "Tegelen V"
|
||||
},
|
||||
"wallpaper interval": {
|
||||
"1 hour": "",
|
||||
"1 hour 30 minutes": "",
|
||||
"1 minute": "",
|
||||
"10 seconds": "",
|
||||
"12 hours": "",
|
||||
"15 minutes": "",
|
||||
"15 seconds": "",
|
||||
"2 hours": "",
|
||||
"20 seconds": "",
|
||||
"25 seconds": "",
|
||||
"3 hours": "",
|
||||
"30 minutes": "",
|
||||
"30 seconds": "",
|
||||
"35 seconds": "",
|
||||
"4 hours": "",
|
||||
"40 seconds": "",
|
||||
"45 seconds": "",
|
||||
"5 minutes": "",
|
||||
"5 seconds": "",
|
||||
"50 seconds": "",
|
||||
"55 seconds": "",
|
||||
"6 hours": "",
|
||||
"8 hours": ""
|
||||
"1 hour": "1 uur",
|
||||
"1 hour 30 minutes": "1 uur 30 minuten",
|
||||
"1 minute": "1 minuut",
|
||||
"10 seconds": "10 seconden",
|
||||
"12 hours": "12 uur",
|
||||
"15 minutes": "15 minuten",
|
||||
"15 seconds": "15 seconden",
|
||||
"2 hours": "2 uur",
|
||||
"20 seconds": "20 seconden",
|
||||
"25 seconds": "25 seconden",
|
||||
"3 hours": "3 uur",
|
||||
"30 minutes": "30 minuten",
|
||||
"30 seconds": "30 seconden",
|
||||
"35 seconds": "35 seconden",
|
||||
"4 hours": "4 uur",
|
||||
"40 seconds": "40 seconden",
|
||||
"45 seconds": "45 seconden",
|
||||
"5 minutes": "5 minuten",
|
||||
"5 seconds": "5 seconden",
|
||||
"50 seconds": "50 seconden",
|
||||
"55 seconds": "55 seconden",
|
||||
"6 hours": "6 uur",
|
||||
"8 hours": "8 uur"
|
||||
},
|
||||
"wallpaper not set label": {
|
||||
"Not set": ""
|
||||
"Not set": "Niet ingesteld"
|
||||
},
|
||||
"wallpaper processing error": {
|
||||
"Wallpaper processing failed": "Verwerken achtergrond mislukt"
|
||||
@@ -6434,6 +6479,6 @@
|
||||
"• yyyy - Year (2024)": "• yyyy - Jaar (2024)"
|
||||
},
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": "↑/↓: Nav • Spatie: Uitvouwen • Enter: Actie/Uitvouwen • E: Tekst"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2089,6 +2089,12 @@
|
||||
"Fog": {
|
||||
"Fog": ""
|
||||
},
|
||||
"Folder": {
|
||||
"Folder": ""
|
||||
},
|
||||
"Folders": {
|
||||
"Folders": ""
|
||||
},
|
||||
"Follow Monitor Focus": {
|
||||
"Follow Monitor Focus": ""
|
||||
},
|
||||
@@ -2413,6 +2419,9 @@
|
||||
"Icon": {
|
||||
"Icon": ""
|
||||
},
|
||||
"Icon Scale": {
|
||||
"Icon Scale": ""
|
||||
},
|
||||
"Icon Size": {
|
||||
"Icon Size": "Rozmiar ikony"
|
||||
},
|
||||
@@ -3013,6 +3022,12 @@
|
||||
"Maximize Detection": {
|
||||
"Maximize Detection": "Wykrywanie maksymalizacji"
|
||||
},
|
||||
"Maximize Widget Icons": {
|
||||
"Maximize Widget Icons": ""
|
||||
},
|
||||
"Maximize Widget Text": {
|
||||
"Maximize Widget Text": ""
|
||||
},
|
||||
"Maximum Entry Size": {
|
||||
"Maximum Entry Size": "Maksymalny rozmiar wpisu"
|
||||
},
|
||||
@@ -3364,6 +3379,9 @@
|
||||
"No files found": {
|
||||
"No files found": "Nie znaleziono plików"
|
||||
},
|
||||
"No folders found": {
|
||||
"No folders found": ""
|
||||
},
|
||||
"No hidden apps.": {
|
||||
"No hidden apps.": ""
|
||||
},
|
||||
@@ -3556,6 +3574,9 @@
|
||||
"Open in Browser": {
|
||||
"Open in Browser": ""
|
||||
},
|
||||
"Open in terminal": {
|
||||
"Open in terminal": ""
|
||||
},
|
||||
"Open search bar to find text": {
|
||||
"Open search bar to find text": "Otwórz pasek wyszukiwania, aby znaleźć tekst"
|
||||
},
|
||||
@@ -4053,6 +4074,9 @@
|
||||
"Remove": {
|
||||
"Remove": "Usuń"
|
||||
},
|
||||
"Remove Widget Padding": {
|
||||
"Remove Widget Padding": ""
|
||||
},
|
||||
"Remove gaps and border when windows are maximized": {
|
||||
"Remove gaps and border when windows are maximized": "Usuń odstępy i ramkę gdy okna są zmaksymalizowane"
|
||||
},
|
||||
@@ -4203,6 +4227,9 @@
|
||||
"Save Notepad File": {
|
||||
"Save Notepad File": "Zapisz plik notatnika"
|
||||
},
|
||||
"Save QR Code": {
|
||||
"Save QR Code": ""
|
||||
},
|
||||
"Save and switch between display configurations": {
|
||||
"Save and switch between display configurations": ""
|
||||
},
|
||||
@@ -4230,6 +4257,9 @@
|
||||
"Scale DankBar font sizes independently": {
|
||||
"Scale DankBar font sizes independently": "Skaluj rozmiary czcionek DankBar niezależnie"
|
||||
},
|
||||
"Scale DankBar icon sizes independently": {
|
||||
"Scale DankBar icon sizes independently": ""
|
||||
},
|
||||
"Scale all font sizes throughout the shell": {
|
||||
"Scale all font sizes throughout the shell": "Skaluj wszystkie rozmiary czcionek w całej powłoce"
|
||||
},
|
||||
@@ -4245,6 +4275,9 @@
|
||||
"Science": {
|
||||
"Science": "Nauka"
|
||||
},
|
||||
"Score": {
|
||||
"Score": ""
|
||||
},
|
||||
"Screen Sharing": {
|
||||
"Screen Sharing": ""
|
||||
},
|
||||
@@ -5076,6 +5109,9 @@
|
||||
"Trigger: %1": {
|
||||
"Trigger: %1": ""
|
||||
},
|
||||
"Trust": {
|
||||
"Trust": ""
|
||||
},
|
||||
"Try a different search": {
|
||||
"Try a different search": ""
|
||||
},
|
||||
@@ -5172,6 +5208,9 @@
|
||||
"Untitled": {
|
||||
"Untitled": "Bez tytułu"
|
||||
},
|
||||
"Untrust": {
|
||||
"Untrust": ""
|
||||
},
|
||||
"Update": {
|
||||
"Update": ""
|
||||
},
|
||||
@@ -5431,6 +5470,9 @@
|
||||
"WiFi Device": {
|
||||
"WiFi Device": "Urządzenie WiFi"
|
||||
},
|
||||
"WiFi QR code for ": {
|
||||
"WiFi QR code for ": ""
|
||||
},
|
||||
"WiFi disabled": {
|
||||
"WiFi disabled": "WiFi wyłączone"
|
||||
},
|
||||
@@ -5765,6 +5807,9 @@
|
||||
"events": {
|
||||
"events": "wydarzenia"
|
||||
},
|
||||
"ext": {
|
||||
"ext": ""
|
||||
},
|
||||
"fallback gpu name": {
|
||||
"Unknown GPU": ""
|
||||
},
|
||||
|
||||
@@ -770,7 +770,7 @@
|
||||
"Caps Lock Indicator": "Indicador de Caps Lock"
|
||||
},
|
||||
"Caps Lock is on": {
|
||||
"Caps Lock is on": ""
|
||||
"Caps Lock is on": "Caps Lock está ligado"
|
||||
},
|
||||
"Center Section": {
|
||||
"Center Section": "Seção Central"
|
||||
@@ -2089,6 +2089,12 @@
|
||||
"Fog": {
|
||||
"Fog": "Neblina"
|
||||
},
|
||||
"Folder": {
|
||||
"Folder": ""
|
||||
},
|
||||
"Folders": {
|
||||
"Folders": ""
|
||||
},
|
||||
"Follow Monitor Focus": {
|
||||
"Follow Monitor Focus": "Seguir Foco do Monitor"
|
||||
},
|
||||
@@ -2413,6 +2419,9 @@
|
||||
"Icon": {
|
||||
"Icon": "Ícone"
|
||||
},
|
||||
"Icon Scale": {
|
||||
"Icon Scale": ""
|
||||
},
|
||||
"Icon Size": {
|
||||
"Icon Size": "Tamanho do Ícone"
|
||||
},
|
||||
@@ -3013,6 +3022,12 @@
|
||||
"Maximize Detection": {
|
||||
"Maximize Detection": "Detecção de Maximizado"
|
||||
},
|
||||
"Maximize Widget Icons": {
|
||||
"Maximize Widget Icons": ""
|
||||
},
|
||||
"Maximize Widget Text": {
|
||||
"Maximize Widget Text": ""
|
||||
},
|
||||
"Maximum Entry Size": {
|
||||
"Maximum Entry Size": "Tamanho Máximo de Entrada"
|
||||
},
|
||||
@@ -3364,6 +3379,9 @@
|
||||
"No files found": {
|
||||
"No files found": "Nenhum arquivo encontrado"
|
||||
},
|
||||
"No folders found": {
|
||||
"No folders found": ""
|
||||
},
|
||||
"No hidden apps.": {
|
||||
"No hidden apps.": "Sem aplicativos ocultos."
|
||||
},
|
||||
@@ -3556,6 +3574,9 @@
|
||||
"Open in Browser": {
|
||||
"Open in Browser": "Abrir no Navegador"
|
||||
},
|
||||
"Open in terminal": {
|
||||
"Open in terminal": ""
|
||||
},
|
||||
"Open search bar to find text": {
|
||||
"Open search bar to find text": "Abrir barra de pesquisa e encontrar texto"
|
||||
},
|
||||
@@ -4053,6 +4074,9 @@
|
||||
"Remove": {
|
||||
"Remove": "Remover"
|
||||
},
|
||||
"Remove Widget Padding": {
|
||||
"Remove Widget Padding": ""
|
||||
},
|
||||
"Remove gaps and border when windows are maximized": {
|
||||
"Remove gaps and border when windows are maximized": "Remover espaçámentos e borda quando janelas estão maximizadas"
|
||||
},
|
||||
@@ -4203,6 +4227,9 @@
|
||||
"Save Notepad File": {
|
||||
"Save Notepad File": "Salvar Arquivo do Bloco de Notas"
|
||||
},
|
||||
"Save QR Code": {
|
||||
"Save QR Code": ""
|
||||
},
|
||||
"Save and switch between display configurations": {
|
||||
"Save and switch between display configurations": "Salvar e alternar entre configurações de exibição"
|
||||
},
|
||||
@@ -4230,6 +4257,9 @@
|
||||
"Scale DankBar font sizes independently": {
|
||||
"Scale DankBar font sizes independently": "Ajustar tamanho da fonte da DankBar de forma independente"
|
||||
},
|
||||
"Scale DankBar icon sizes independently": {
|
||||
"Scale DankBar icon sizes independently": ""
|
||||
},
|
||||
"Scale all font sizes throughout the shell": {
|
||||
"Scale all font sizes throughout the shell": "Ajuste todos os tamanhos de fonte em todo o shell"
|
||||
},
|
||||
@@ -4245,6 +4275,9 @@
|
||||
"Science": {
|
||||
"Science": "Ciência"
|
||||
},
|
||||
"Score": {
|
||||
"Score": ""
|
||||
},
|
||||
"Screen Sharing": {
|
||||
"Screen Sharing": "Compartilhamento de Tela"
|
||||
},
|
||||
@@ -5076,6 +5109,9 @@
|
||||
"Trigger: %1": {
|
||||
"Trigger: %1": "Gatilho: %1"
|
||||
},
|
||||
"Trust": {
|
||||
"Trust": ""
|
||||
},
|
||||
"Try a different search": {
|
||||
"Try a different search": "Tente uma pesquisa diferente"
|
||||
},
|
||||
@@ -5172,6 +5208,9 @@
|
||||
"Untitled": {
|
||||
"Untitled": "Sem título"
|
||||
},
|
||||
"Untrust": {
|
||||
"Untrust": ""
|
||||
},
|
||||
"Update": {
|
||||
"Update": "Atualizar"
|
||||
},
|
||||
@@ -5431,6 +5470,9 @@
|
||||
"WiFi Device": {
|
||||
"WiFi Device": "Dispositivo WiFi"
|
||||
},
|
||||
"WiFi QR code for ": {
|
||||
"WiFi QR code for ": ""
|
||||
},
|
||||
"WiFi disabled": {
|
||||
"WiFi disabled": "WiFi desativado"
|
||||
},
|
||||
@@ -5765,6 +5807,9 @@
|
||||
"events": {
|
||||
"events": "eventos"
|
||||
},
|
||||
"ext": {
|
||||
"ext": ""
|
||||
},
|
||||
"fallback gpu name": {
|
||||
"Unknown GPU": "GPU Desconhecida"
|
||||
},
|
||||
@@ -6434,6 +6479,6 @@
|
||||
"• yyyy - Year (2024)": "yyyy - Ano (2024)"
|
||||
},
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
|
||||
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": "↑/↓: Navegar • Espaço: Expandir • Enter: Ação/Expandir • E: Texto"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2089,6 +2089,12 @@
|
||||
"Fog": {
|
||||
"Fog": ""
|
||||
},
|
||||
"Folder": {
|
||||
"Folder": ""
|
||||
},
|
||||
"Folders": {
|
||||
"Folders": ""
|
||||
},
|
||||
"Follow Monitor Focus": {
|
||||
"Follow Monitor Focus": ""
|
||||
},
|
||||
@@ -2413,6 +2419,9 @@
|
||||
"Icon": {
|
||||
"Icon": ""
|
||||
},
|
||||
"Icon Scale": {
|
||||
"Icon Scale": ""
|
||||
},
|
||||
"Icon Size": {
|
||||
"Icon Size": "Simge Boyutu"
|
||||
},
|
||||
@@ -3013,6 +3022,12 @@
|
||||
"Maximize Detection": {
|
||||
"Maximize Detection": "Algılamayı En Üst Düzeye Çıkar"
|
||||
},
|
||||
"Maximize Widget Icons": {
|
||||
"Maximize Widget Icons": ""
|
||||
},
|
||||
"Maximize Widget Text": {
|
||||
"Maximize Widget Text": ""
|
||||
},
|
||||
"Maximum Entry Size": {
|
||||
"Maximum Entry Size": "Maksimum Kayıt Boyutu"
|
||||
},
|
||||
@@ -3364,6 +3379,9 @@
|
||||
"No files found": {
|
||||
"No files found": "Dosya bulunamadı"
|
||||
},
|
||||
"No folders found": {
|
||||
"No folders found": ""
|
||||
},
|
||||
"No hidden apps.": {
|
||||
"No hidden apps.": ""
|
||||
},
|
||||
@@ -3556,6 +3574,9 @@
|
||||
"Open in Browser": {
|
||||
"Open in Browser": ""
|
||||
},
|
||||
"Open in terminal": {
|
||||
"Open in terminal": ""
|
||||
},
|
||||
"Open search bar to find text": {
|
||||
"Open search bar to find text": "Metin bulmak için arama çubuğunu aç"
|
||||
},
|
||||
@@ -4053,6 +4074,9 @@
|
||||
"Remove": {
|
||||
"Remove": "Kaldır"
|
||||
},
|
||||
"Remove Widget Padding": {
|
||||
"Remove Widget Padding": ""
|
||||
},
|
||||
"Remove gaps and border when windows are maximized": {
|
||||
"Remove gaps and border when windows are maximized": "Pencereler ekranı kapladığında boşlukları ve kenarlıkları kaldır"
|
||||
},
|
||||
@@ -4203,6 +4227,9 @@
|
||||
"Save Notepad File": {
|
||||
"Save Notepad File": "Not Defteri Dosyasını Kaydet"
|
||||
},
|
||||
"Save QR Code": {
|
||||
"Save QR Code": ""
|
||||
},
|
||||
"Save and switch between display configurations": {
|
||||
"Save and switch between display configurations": ""
|
||||
},
|
||||
@@ -4230,6 +4257,9 @@
|
||||
"Scale DankBar font sizes independently": {
|
||||
"Scale DankBar font sizes independently": "DankBar yazı tipi boyutlarını bağımsız olarak ölçeklendir"
|
||||
},
|
||||
"Scale DankBar icon sizes independently": {
|
||||
"Scale DankBar icon sizes independently": ""
|
||||
},
|
||||
"Scale all font sizes throughout the shell": {
|
||||
"Scale all font sizes throughout the shell": "Kabuk genelinde tüm yazı tipi boyutlarını ölçeklendir"
|
||||
},
|
||||
@@ -4245,6 +4275,9 @@
|
||||
"Science": {
|
||||
"Science": "Bilim"
|
||||
},
|
||||
"Score": {
|
||||
"Score": ""
|
||||
},
|
||||
"Screen Sharing": {
|
||||
"Screen Sharing": ""
|
||||
},
|
||||
@@ -5076,6 +5109,9 @@
|
||||
"Trigger: %1": {
|
||||
"Trigger: %1": ""
|
||||
},
|
||||
"Trust": {
|
||||
"Trust": ""
|
||||
},
|
||||
"Try a different search": {
|
||||
"Try a different search": ""
|
||||
},
|
||||
@@ -5172,6 +5208,9 @@
|
||||
"Untitled": {
|
||||
"Untitled": "Başlıksız"
|
||||
},
|
||||
"Untrust": {
|
||||
"Untrust": ""
|
||||
},
|
||||
"Update": {
|
||||
"Update": ""
|
||||
},
|
||||
@@ -5431,6 +5470,9 @@
|
||||
"WiFi Device": {
|
||||
"WiFi Device": "WiFi Aygıtı"
|
||||
},
|
||||
"WiFi QR code for ": {
|
||||
"WiFi QR code for ": ""
|
||||
},
|
||||
"WiFi disabled": {
|
||||
"WiFi disabled": "WiFi devre dışı"
|
||||
},
|
||||
@@ -5765,6 +5807,9 @@
|
||||
"events": {
|
||||
"events": "etkinlikler"
|
||||
},
|
||||
"ext": {
|
||||
"ext": ""
|
||||
},
|
||||
"fallback gpu name": {
|
||||
"Unknown GPU": ""
|
||||
},
|
||||
|
||||
@@ -24,10 +24,10 @@
|
||||
"%1 days ago": "%1天之前"
|
||||
},
|
||||
"%1 disconnected": {
|
||||
"%1 disconnected": ""
|
||||
"%1 disconnected": "%1已断开连接"
|
||||
},
|
||||
"%1 disconnected (hidden)": {
|
||||
"%1 disconnected (hidden)": ""
|
||||
"%1 disconnected (hidden)": "%1已断开连接(隐藏)"
|
||||
},
|
||||
"%1 display(s)": {
|
||||
"%1 display(s)": "%1 显示"
|
||||
@@ -36,7 +36,7 @@
|
||||
"%1 exists but is not included in config. Custom keybinds will not work until this is fixed.": "%1存在但并未被包含至配置文件。在此问题修复前,自定义快捷键绑定将不会生效。"
|
||||
},
|
||||
"%1 exists but is not included. Window rules won't apply.": {
|
||||
"%1 exists but is not included. Window rules won't apply.": ""
|
||||
"%1 exists but is not included. Window rules won't apply.": "%1已存在但未被包含。窗口规则将不会生效。"
|
||||
},
|
||||
"%1 is now included in config": {
|
||||
"%1 is now included in config": "%1现在已被包含至配置文件"
|
||||
@@ -246,7 +246,7 @@
|
||||
"Add Printer": "添加打印机"
|
||||
},
|
||||
"Add Title": {
|
||||
"Add Title": ""
|
||||
"Add Title": "添加标题"
|
||||
},
|
||||
"Add Widget": {
|
||||
"Add Widget": "添加部件"
|
||||
@@ -339,7 +339,7 @@
|
||||
"App ID Substitutions": "应用ID替换"
|
||||
},
|
||||
"App ID regex (e.g. ^firefox$)": {
|
||||
"App ID regex (e.g. ^firefox$)": ""
|
||||
"App ID regex (e.g. ^firefox$)": "应用ID正则(比如^firefox$)"
|
||||
},
|
||||
"App Launcher": {
|
||||
"App Launcher": "启动器"
|
||||
@@ -617,10 +617,10 @@
|
||||
"Bit Depth": "位深"
|
||||
},
|
||||
"Block Out": {
|
||||
"Block Out": ""
|
||||
"Block Out": "封锁"
|
||||
},
|
||||
"Block Out From": {
|
||||
"Block Out From": ""
|
||||
"Block Out From": "从此处封锁"
|
||||
},
|
||||
"Block notifications": {
|
||||
"Block notifications": "屏蔽通知"
|
||||
@@ -665,7 +665,7 @@
|
||||
"Border Thickness": "边框厚度"
|
||||
},
|
||||
"Border with BG": {
|
||||
"Border with BG": ""
|
||||
"Border with BG": "带BG的边框"
|
||||
},
|
||||
"Bottom": {
|
||||
"Bottom": "底部"
|
||||
@@ -845,7 +845,7 @@
|
||||
"Cipher": "密码"
|
||||
},
|
||||
"Class regex (e.g. ^firefox$)": {
|
||||
"Class regex (e.g. ^firefox$)": ""
|
||||
"Class regex (e.g. ^firefox$)": "窗口类型正则(比如^firefox$)"
|
||||
},
|
||||
"Clear": {
|
||||
"Clear": "清除"
|
||||
@@ -875,7 +875,7 @@
|
||||
"Click 'Setup' to create %1 and add include to config.": "点击设置以创建%1并将其包含至配置文件。"
|
||||
},
|
||||
"Click 'Setup' to create %1 and add include to your compositor config.": {
|
||||
"Click 'Setup' to create %1 and add include to your compositor config.": ""
|
||||
"Click 'Setup' to create %1 and add include to your compositor config.": "点击设置以创建%1并添加包含文件至合成器配置文件。"
|
||||
},
|
||||
"Click 'Setup' to create cursor config and add include to your compositor config.": {
|
||||
"Click 'Setup' to create cursor config and add include to your compositor config.": "点击设置以创建光标配置,并导入至合成器配置文件。"
|
||||
@@ -905,10 +905,10 @@
|
||||
"Click to capture": "点击以捕获"
|
||||
},
|
||||
"Clip": {
|
||||
"Clip": ""
|
||||
"Clip": "裁剪"
|
||||
},
|
||||
"Clip to Geometry": {
|
||||
"Clip to Geometry": ""
|
||||
"Clip to Geometry": "裁剪至几何形"
|
||||
},
|
||||
"Clipboard": {
|
||||
"Clipboard": "剪切板"
|
||||
@@ -995,10 +995,10 @@
|
||||
"Column": "列"
|
||||
},
|
||||
"Column Display": {
|
||||
"Column Display": ""
|
||||
"Column Display": "列式显示"
|
||||
},
|
||||
"Column Width": {
|
||||
"Column Width": ""
|
||||
"Column Width": "列宽"
|
||||
},
|
||||
"Command": {
|
||||
"Command": "命令"
|
||||
@@ -1025,7 +1025,7 @@
|
||||
"Compositor Settings": "合成器设置"
|
||||
},
|
||||
"Compositor not supported": {
|
||||
"Compositor not supported": ""
|
||||
"Compositor not supported": "合成器不支持"
|
||||
},
|
||||
"Config Format": {
|
||||
"Config Format": "配置格式"
|
||||
@@ -1052,7 +1052,7 @@
|
||||
"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 which displays show \"%1": {
|
||||
"Configure which displays show \"%1\"": ""
|
||||
@@ -1100,7 +1100,7 @@
|
||||
"Connecting...": "连接中..."
|
||||
},
|
||||
"Content copied": {
|
||||
"Content copied": ""
|
||||
"Content copied": "内容已复制"
|
||||
},
|
||||
"Contrast": {
|
||||
"Contrast": "对比度"
|
||||
@@ -1148,7 +1148,7 @@
|
||||
"Copy": "复制"
|
||||
},
|
||||
"Copy Content": {
|
||||
"Copy Content": ""
|
||||
"Copy Content": "复制内容"
|
||||
},
|
||||
"Copy Full Command": {
|
||||
"Copy Full Command": "复制完整命令"
|
||||
@@ -1187,7 +1187,7 @@
|
||||
"Cover Open": "打印机盖已打开"
|
||||
},
|
||||
"Create": {
|
||||
"Create": ""
|
||||
"Create": "创建"
|
||||
},
|
||||
"Create Dir": {
|
||||
"Create Dir": "创建目录"
|
||||
@@ -1196,10 +1196,10 @@
|
||||
"Create Printer": "创建打印机"
|
||||
},
|
||||
"Create Window Rule": {
|
||||
"Create Window Rule": ""
|
||||
"Create Window Rule": "创建窗口规则"
|
||||
},
|
||||
"Create rule for:": {
|
||||
"Create rule for:": ""
|
||||
"Create rule for:": "为此创建规则:"
|
||||
},
|
||||
"Create rules to mute, ignore, hide from history, or override notification priority.": {
|
||||
"Create rules to mute, ignore, hide from history, or override notification priority.": ""
|
||||
@@ -1382,7 +1382,7 @@
|
||||
"Defaults": "复位"
|
||||
},
|
||||
"Define rules for window behavior. Saves to %1": {
|
||||
"Define rules for window behavior. Saves to %1": ""
|
||||
"Define rules for window behavior. Saves to %1": "定义窗口行为规则。保存至%1"
|
||||
},
|
||||
"Del: Clear • Shift+Del: Clear All • 1-9: Actions • F10: Help • Esc: Close": {
|
||||
"Del: Clear • Shift+Del: Clear All • 1-9: Actions • F10: Help • Esc: Close": "Del: 清除 • Shift+Del: 清空 • 1-9: 操作 • F10: 帮助 • Esc: 关闭"
|
||||
@@ -1505,7 +1505,7 @@
|
||||
"Dismiss": "忽略"
|
||||
},
|
||||
"Display": {
|
||||
"Display": ""
|
||||
"Display": "显示"
|
||||
},
|
||||
"Display Assignment": {
|
||||
"Display Assignment": "显示布局"
|
||||
@@ -1514,7 +1514,7 @@
|
||||
"Display Name Format": "显示名称格式"
|
||||
},
|
||||
"Display Profiles": {
|
||||
"Display Profiles": ""
|
||||
"Display Profiles": "显示档案"
|
||||
},
|
||||
"Display Settings": {
|
||||
"Display Settings": "显示设置"
|
||||
@@ -1562,7 +1562,7 @@
|
||||
"Displays": "显示"
|
||||
},
|
||||
"Displays count when overflow is active": {
|
||||
"Displays count when overflow is active": ""
|
||||
"Displays count when overflow is active": "当溢出激活时显示计数"
|
||||
},
|
||||
"Displays the active keyboard layout and allows switching": {
|
||||
"Displays the active keyboard layout and allows switching": "显示当前键盘布局并支持切换"
|
||||
@@ -1643,7 +1643,7 @@
|
||||
"Dusk (Nautical Twilight)": "黄昏(航海暮光)"
|
||||
},
|
||||
"Dynamic Properties": {
|
||||
"Dynamic Properties": ""
|
||||
"Dynamic Properties": "动态属性"
|
||||
},
|
||||
"Edge Spacing": {
|
||||
"Edge Spacing": "边缘间距"
|
||||
@@ -2089,6 +2089,12 @@
|
||||
"Fog": {
|
||||
"Fog": ""
|
||||
},
|
||||
"Folder": {
|
||||
"Folder": ""
|
||||
},
|
||||
"Folders": {
|
||||
"Folders": ""
|
||||
},
|
||||
"Follow Monitor Focus": {
|
||||
"Follow Monitor Focus": "遵守显示器聚焦"
|
||||
},
|
||||
@@ -2413,6 +2419,9 @@
|
||||
"Icon": {
|
||||
"Icon": "图标"
|
||||
},
|
||||
"Icon Scale": {
|
||||
"Icon Scale": ""
|
||||
},
|
||||
"Icon Size": {
|
||||
"Icon Size": "图标大小"
|
||||
},
|
||||
@@ -2551,7 +2560,7 @@
|
||||
"Clipboard sent": "已发送剪切板"
|
||||
},
|
||||
"KDE Connect clipboard action | Phone Connect clipboard action": {
|
||||
"Clipboard sent": ""
|
||||
"Clipboard sent": "剪切板已发送"
|
||||
},
|
||||
"KDE Connect clipboard tooltip": {
|
||||
"Send Clipboard": "发送剪切板"
|
||||
@@ -2597,7 +2606,7 @@
|
||||
"No devices": "无设备"
|
||||
},
|
||||
"KDE Connect no devices status | bluetooth status": {
|
||||
"No devices": ""
|
||||
"No devices": "无设备"
|
||||
},
|
||||
"KDE Connect not paired status": {
|
||||
"Not paired": "未配对"
|
||||
@@ -2704,7 +2713,7 @@
|
||||
"Unavailable": "不可用"
|
||||
},
|
||||
"KDE Connect unknown device status | battery status | power profile option | unknown author | widget status": {
|
||||
"Unknown": ""
|
||||
"Unknown": "未知"
|
||||
},
|
||||
"KDE Connect unknown device status | unknown author": {
|
||||
"Unknown": "未知"
|
||||
@@ -2713,7 +2722,7 @@
|
||||
"Device unpaired": "设备已取消配对"
|
||||
},
|
||||
"KDE Connect unpair action | Phone Connect unpair action": {
|
||||
"Device unpaired": ""
|
||||
"Device unpaired": "设备已取消配对"
|
||||
},
|
||||
"KDE Connect unpair tooltip": {
|
||||
"Unpair": "取消配对"
|
||||
@@ -3013,6 +3022,12 @@
|
||||
"Maximize Detection": {
|
||||
"Maximize Detection": "最大化检测"
|
||||
},
|
||||
"Maximize Widget Icons": {
|
||||
"Maximize Widget Icons": ""
|
||||
},
|
||||
"Maximize Widget Text": {
|
||||
"Maximize Widget Text": ""
|
||||
},
|
||||
"Maximum Entry Size": {
|
||||
"Maximum Entry Size": "最大尺寸"
|
||||
},
|
||||
@@ -3364,6 +3379,9 @@
|
||||
"No files found": {
|
||||
"No files found": "未找到文件"
|
||||
},
|
||||
"No folders found": {
|
||||
"No folders found": ""
|
||||
},
|
||||
"No hidden apps.": {
|
||||
"No hidden apps.": "无已隐藏应用。"
|
||||
},
|
||||
@@ -3556,6 +3574,9 @@
|
||||
"Open in Browser": {
|
||||
"Open in Browser": "在浏览器中打开"
|
||||
},
|
||||
"Open in terminal": {
|
||||
"Open in terminal": ""
|
||||
},
|
||||
"Open search bar to find text": {
|
||||
"Open search bar to find text": "打开搜索栏以查找文本"
|
||||
},
|
||||
@@ -3732,7 +3753,7 @@
|
||||
"No devices": ""
|
||||
},
|
||||
"Phone Connect pairing action": {
|
||||
"Device paired": "",
|
||||
"Device paired": "设备已配对",
|
||||
"Pairing request sent": ""
|
||||
},
|
||||
"Phone Connect pairing request notification": {
|
||||
@@ -4053,6 +4074,9 @@
|
||||
"Remove": {
|
||||
"Remove": "移除"
|
||||
},
|
||||
"Remove Widget Padding": {
|
||||
"Remove Widget Padding": ""
|
||||
},
|
||||
"Remove gaps and border when windows are maximized": {
|
||||
"Remove gaps and border when windows are maximized": "当窗口最大化时移除间距和边框"
|
||||
},
|
||||
@@ -4203,6 +4227,9 @@
|
||||
"Save Notepad File": {
|
||||
"Save Notepad File": "保存便签"
|
||||
},
|
||||
"Save QR Code": {
|
||||
"Save QR Code": ""
|
||||
},
|
||||
"Save and switch between display configurations": {
|
||||
"Save and switch between display configurations": ""
|
||||
},
|
||||
@@ -4230,6 +4257,9 @@
|
||||
"Scale DankBar font sizes independently": {
|
||||
"Scale DankBar font sizes independently": "独立调整 Dank Bar 字体缩放"
|
||||
},
|
||||
"Scale DankBar icon sizes independently": {
|
||||
"Scale DankBar icon sizes independently": ""
|
||||
},
|
||||
"Scale all font sizes throughout the shell": {
|
||||
"Scale all font sizes throughout the shell": "缩放整个 shell 中的所有字体大小"
|
||||
},
|
||||
@@ -4245,6 +4275,9 @@
|
||||
"Science": {
|
||||
"Science": "科学"
|
||||
},
|
||||
"Score": {
|
||||
"Score": ""
|
||||
},
|
||||
"Screen Sharing": {
|
||||
"Screen Sharing": "屏幕共享"
|
||||
},
|
||||
@@ -5076,6 +5109,9 @@
|
||||
"Trigger: %1": {
|
||||
"Trigger: %1": "触发器:%1"
|
||||
},
|
||||
"Trust": {
|
||||
"Trust": ""
|
||||
},
|
||||
"Try a different search": {
|
||||
"Try a different search": "尝试不同的搜索"
|
||||
},
|
||||
@@ -5172,6 +5208,9 @@
|
||||
"Untitled": {
|
||||
"Untitled": "无标题"
|
||||
},
|
||||
"Untrust": {
|
||||
"Untrust": ""
|
||||
},
|
||||
"Update": {
|
||||
"Update": ""
|
||||
},
|
||||
@@ -5431,6 +5470,9 @@
|
||||
"WiFi Device": {
|
||||
"WiFi Device": "WiFi 设备"
|
||||
},
|
||||
"WiFi QR code for ": {
|
||||
"WiFi QR code for ": ""
|
||||
},
|
||||
"WiFi disabled": {
|
||||
"WiFi disabled": "Wi-Fi 已停用"
|
||||
},
|
||||
@@ -5583,10 +5625,10 @@
|
||||
"apps": "应用程序"
|
||||
},
|
||||
"audio status": {
|
||||
"Muted": "",
|
||||
"No input device": "",
|
||||
"No output device": "",
|
||||
"Select device": ""
|
||||
"Muted": "已静音",
|
||||
"No input device": "无输入设备",
|
||||
"No output device": "无输出设备",
|
||||
"Select device": "选择设备"
|
||||
},
|
||||
"author attribution": {
|
||||
"by %1": "%1"
|
||||
@@ -5598,19 +5640,19 @@
|
||||
"Charging": "充电",
|
||||
"Discharging": "放电",
|
||||
"Empty": "空白",
|
||||
"Fully Charged": "",
|
||||
"No Battery": "",
|
||||
"Pending Charge": "",
|
||||
"Pending Discharge": "",
|
||||
"Plugged In": ""
|
||||
"Fully Charged": "已充满",
|
||||
"No Battery": "无电池",
|
||||
"Pending Charge": "待充电",
|
||||
"Pending Discharge": "待放电",
|
||||
"Plugged In": "已接入"
|
||||
},
|
||||
"bluetooth status": {
|
||||
"Bluetooth": "蓝牙",
|
||||
"Connected Device": "已连接的设备",
|
||||
"Enabled": "",
|
||||
"No adapter": "",
|
||||
"No adapters": "",
|
||||
"Off": ""
|
||||
"Enabled": "启用",
|
||||
"No adapter": "无适配器",
|
||||
"No adapters": "无适配器",
|
||||
"Off": "关"
|
||||
},
|
||||
"bluetooth status | lock screen notification mode option": {
|
||||
"Disabled": "禁用"
|
||||
@@ -5641,13 +5683,13 @@
|
||||
"Soothing pastel theme based on Catppuccin": "基于Catppuccin的舒缓且柔和的主题"
|
||||
},
|
||||
"color option | primary color | tile color option": {
|
||||
"Primary": ""
|
||||
"Primary": "首选"
|
||||
},
|
||||
"color option | secondary color | tile color option": {
|
||||
"Secondary": ""
|
||||
"Secondary": "次选"
|
||||
},
|
||||
"color option | shadow color option": {
|
||||
"Surface": ""
|
||||
"Surface": "表面"
|
||||
},
|
||||
"control center tile color setting description": {
|
||||
"Active tile background and icon color": "激活平铺背景与图标颜色"
|
||||
@@ -5677,13 +5719,13 @@
|
||||
"Custom...": "自定义...",
|
||||
"Day Date": "日 日期",
|
||||
"Day Month Date": "日 月份 日期",
|
||||
"Full Day & Month": "",
|
||||
"Full with Year": "",
|
||||
"ISO Date": "",
|
||||
"Month Date": "",
|
||||
"Numeric (D/M)": "",
|
||||
"Numeric (M/D)": "",
|
||||
"System Default": ""
|
||||
"Full Day & Month": "日期与月份全写",
|
||||
"Full with Year": "年份全写",
|
||||
"ISO Date": "ISO日期",
|
||||
"Month Date": "月份日期",
|
||||
"Numeric (D/M)": "数字(D/M)",
|
||||
"Numeric (M/D)": "数字(M/D)",
|
||||
"System Default": "系统默认"
|
||||
},
|
||||
"days": {
|
||||
"days": "天"
|
||||
@@ -5721,13 +5763,13 @@
|
||||
},
|
||||
"dock indicator style option": {
|
||||
"Circle": "圆形",
|
||||
"Line": ""
|
||||
"Line": "线条"
|
||||
},
|
||||
"dock position option": {
|
||||
"Bottom": "底部",
|
||||
"Left": "",
|
||||
"Right": "",
|
||||
"Top": ""
|
||||
"Left": "左侧",
|
||||
"Right": "右侧",
|
||||
"Top": "顶部"
|
||||
},
|
||||
"dynamic colors description": {
|
||||
"Dynamic colors from wallpaper": "自壁纸选取动态色"
|
||||
@@ -5765,6 +5807,9 @@
|
||||
"events": {
|
||||
"events": "事件"
|
||||
},
|
||||
"ext": {
|
||||
"ext": ""
|
||||
},
|
||||
"fallback gpu name": {
|
||||
"Unknown GPU": "未知的GPU"
|
||||
},
|
||||
@@ -5983,14 +6028,14 @@
|
||||
},
|
||||
"matugen color scheme option": {
|
||||
"Content": "内容",
|
||||
"Expressive": "",
|
||||
"Fidelity": "",
|
||||
"Fruit Salad": "",
|
||||
"Monochrome": "",
|
||||
"Neutral": "",
|
||||
"Rainbow": "",
|
||||
"Tonal Spot": "",
|
||||
"Vibrant": ""
|
||||
"Expressive": "具有表现力的",
|
||||
"Fidelity": "保真",
|
||||
"Fruit Salad": "水果沙拉",
|
||||
"Monochrome": "单色",
|
||||
"Neutral": "中性",
|
||||
"Rainbow": "彩虹",
|
||||
"Tonal Spot": "音色斑点",
|
||||
"Vibrant": "鲜艳"
|
||||
},
|
||||
"matugen error": {
|
||||
"matugen not found - install matugen package for dynamic theming": "未找到matugen - 请为动态主题安装matugen包"
|
||||
@@ -6004,7 +6049,7 @@
|
||||
"media scroll wheel option": {
|
||||
"Change Song": "切换歌曲",
|
||||
"Change Volume": "切换音量",
|
||||
"Nothing": ""
|
||||
"Nothing": "无"
|
||||
},
|
||||
"minutes": {
|
||||
"minutes": "分钟"
|
||||
@@ -6024,12 +6069,12 @@
|
||||
"network status": {
|
||||
"Connected": "",
|
||||
"Disabling WiFi...": "正在禁用WiFi...",
|
||||
"Enabling WiFi...": "",
|
||||
"Ethernet": "",
|
||||
"Not connected": "",
|
||||
"Please wait...": "",
|
||||
"Select network": "",
|
||||
"WiFi off": ""
|
||||
"Enabling WiFi...": "正在启用WiFi...",
|
||||
"Ethernet": "以太网",
|
||||
"Not connected": "未连接",
|
||||
"Please wait...": "请稍候...",
|
||||
"Select network": "选择网络",
|
||||
"WiFi off": "WiFi关闭"
|
||||
},
|
||||
"no custom theme file status": {
|
||||
"No custom theme file": "缺失自定义主题文件"
|
||||
@@ -6159,13 +6204,13 @@
|
||||
"power profile description": {
|
||||
"Balance power and performance": "平衡与性能电源模式",
|
||||
"Custom power profile": "自定义电源配置",
|
||||
"Extend battery life": "",
|
||||
"Prioritize performance": ""
|
||||
"Extend battery life": "延长电池寿命",
|
||||
"Prioritize performance": "优先考虑性能"
|
||||
},
|
||||
"power profile option": {
|
||||
"Balanced": "平衡",
|
||||
"Performance": "",
|
||||
"Power Saver": ""
|
||||
"Performance": "性能",
|
||||
"Power Saver": "省电"
|
||||
},
|
||||
"primary color": {
|
||||
"Primary": "首选"
|
||||
@@ -6198,11 +6243,11 @@
|
||||
"Bottom Center": "底部中间",
|
||||
"Bottom Left": "底部左侧",
|
||||
"Bottom Right": "底部右侧",
|
||||
"Left Center": "",
|
||||
"Right Center": "",
|
||||
"Top Center": "",
|
||||
"Top Left": "",
|
||||
"Top Right": ""
|
||||
"Left Center": "左侧中部",
|
||||
"Right Center": "右侧中部",
|
||||
"Top Center": "顶部中间",
|
||||
"Top Left": "顶部左侧",
|
||||
"Top Right": "顶部右侧"
|
||||
},
|
||||
"secondary color": {
|
||||
"Secondary": "次选"
|
||||
@@ -6258,7 +6303,7 @@
|
||||
"Auto": "自动",
|
||||
"Browse": "浏览",
|
||||
"Custom": "自定义",
|
||||
"Generic": ""
|
||||
"Generic": "通用"
|
||||
},
|
||||
"theme installation confirmation": {
|
||||
"Install theme '%1' from the DMS registry?": "要从DMS注册表安装主题%1吗?"
|
||||
@@ -6273,8 +6318,8 @@
|
||||
"this app": ""
|
||||
},
|
||||
"tile color option": {
|
||||
"Primary Container": "",
|
||||
"Surface Variant": ""
|
||||
"Primary Container": "首选容器",
|
||||
"Surface Variant": "表面变体"
|
||||
},
|
||||
"uninstall action button": {
|
||||
"Uninstall": "卸载"
|
||||
@@ -6322,13 +6367,13 @@
|
||||
"Wallpaper Error": "壁纸错误"
|
||||
},
|
||||
"wallpaper fill mode": {
|
||||
"Fill": "",
|
||||
"Fit": "",
|
||||
"Pad": "",
|
||||
"Stretch": "",
|
||||
"Tile": "",
|
||||
"Tile H": "",
|
||||
"Tile V": ""
|
||||
"Fill": "填充",
|
||||
"Fit": "适合",
|
||||
"Pad": "覆盖",
|
||||
"Stretch": "拉伸",
|
||||
"Tile": "平铺",
|
||||
"Tile H": "水平平铺",
|
||||
"Tile V": "垂直平铺"
|
||||
},
|
||||
"wallpaper interval": {
|
||||
"1 hour": "",
|
||||
@@ -6372,14 +6417,14 @@
|
||||
},
|
||||
"wallpaper transition option": {
|
||||
"Disc": "Disc",
|
||||
"Fade": "",
|
||||
"Iris Bloom": "",
|
||||
"None": "",
|
||||
"Pixelate": "",
|
||||
"Portal": "",
|
||||
"Random": "",
|
||||
"Stripes": "",
|
||||
"Wipe": ""
|
||||
"Fade": "淡入淡出",
|
||||
"Iris Bloom": "光圈绽放",
|
||||
"None": "无",
|
||||
"Pixelate": "像素化",
|
||||
"Portal": "门户",
|
||||
"Random": "随机",
|
||||
"Stripes": "条纹",
|
||||
"Wipe": "擦除"
|
||||
},
|
||||
"weather feels like temperature": {
|
||||
"Feels Like %1°": "体感 %1°"
|
||||
|
||||
@@ -2089,6 +2089,12 @@
|
||||
"Fog": {
|
||||
"Fog": ""
|
||||
},
|
||||
"Folder": {
|
||||
"Folder": ""
|
||||
},
|
||||
"Folders": {
|
||||
"Folders": ""
|
||||
},
|
||||
"Follow Monitor Focus": {
|
||||
"Follow Monitor Focus": "跟隨螢幕焦點"
|
||||
},
|
||||
@@ -2413,6 +2419,9 @@
|
||||
"Icon": {
|
||||
"Icon": "圖示"
|
||||
},
|
||||
"Icon Scale": {
|
||||
"Icon Scale": ""
|
||||
},
|
||||
"Icon Size": {
|
||||
"Icon Size": "圖示大小"
|
||||
},
|
||||
@@ -3013,6 +3022,12 @@
|
||||
"Maximize Detection": {
|
||||
"Maximize Detection": "最大化偵測"
|
||||
},
|
||||
"Maximize Widget Icons": {
|
||||
"Maximize Widget Icons": ""
|
||||
},
|
||||
"Maximize Widget Text": {
|
||||
"Maximize Widget Text": ""
|
||||
},
|
||||
"Maximum Entry Size": {
|
||||
"Maximum Entry Size": "單一項目最大大小"
|
||||
},
|
||||
@@ -3364,6 +3379,9 @@
|
||||
"No files found": {
|
||||
"No files found": "沒有找到"
|
||||
},
|
||||
"No folders found": {
|
||||
"No folders found": ""
|
||||
},
|
||||
"No hidden apps.": {
|
||||
"No hidden apps.": "沒有隱藏的應用程式。"
|
||||
},
|
||||
@@ -3556,6 +3574,9 @@
|
||||
"Open in Browser": {
|
||||
"Open in Browser": "在瀏覽器中開啟"
|
||||
},
|
||||
"Open in terminal": {
|
||||
"Open in terminal": ""
|
||||
},
|
||||
"Open search bar to find text": {
|
||||
"Open search bar to find text": "打開搜尋欄尋找文本"
|
||||
},
|
||||
@@ -4053,6 +4074,9 @@
|
||||
"Remove": {
|
||||
"Remove": "刪除"
|
||||
},
|
||||
"Remove Widget Padding": {
|
||||
"Remove Widget Padding": ""
|
||||
},
|
||||
"Remove gaps and border when windows are maximized": {
|
||||
"Remove gaps and border when windows are maximized": "視窗最大化時移除間距與邊框"
|
||||
},
|
||||
@@ -4203,6 +4227,9 @@
|
||||
"Save Notepad File": {
|
||||
"Save Notepad File": "儲存記事本"
|
||||
},
|
||||
"Save QR Code": {
|
||||
"Save QR Code": ""
|
||||
},
|
||||
"Save and switch between display configurations": {
|
||||
"Save and switch between display configurations": "儲存並切換顯示設定"
|
||||
},
|
||||
@@ -4230,6 +4257,9 @@
|
||||
"Scale DankBar font sizes independently": {
|
||||
"Scale DankBar font sizes independently": "獨立縮放 DankBar 字體大小"
|
||||
},
|
||||
"Scale DankBar icon sizes independently": {
|
||||
"Scale DankBar icon sizes independently": ""
|
||||
},
|
||||
"Scale all font sizes throughout the shell": {
|
||||
"Scale all font sizes throughout the shell": "縮放整個 Shell 中的所有字體大小"
|
||||
},
|
||||
@@ -4245,6 +4275,9 @@
|
||||
"Science": {
|
||||
"Science": "科學"
|
||||
},
|
||||
"Score": {
|
||||
"Score": ""
|
||||
},
|
||||
"Screen Sharing": {
|
||||
"Screen Sharing": "螢幕分享"
|
||||
},
|
||||
@@ -5076,6 +5109,9 @@
|
||||
"Trigger: %1": {
|
||||
"Trigger: %1": "觸發條件:%1"
|
||||
},
|
||||
"Trust": {
|
||||
"Trust": ""
|
||||
},
|
||||
"Try a different search": {
|
||||
"Try a different search": "嘗試不同的搜尋"
|
||||
},
|
||||
@@ -5172,6 +5208,9 @@
|
||||
"Untitled": {
|
||||
"Untitled": "無標題"
|
||||
},
|
||||
"Untrust": {
|
||||
"Untrust": ""
|
||||
},
|
||||
"Update": {
|
||||
"Update": "更新"
|
||||
},
|
||||
@@ -5431,6 +5470,9 @@
|
||||
"WiFi Device": {
|
||||
"WiFi Device": "WiFi 裝置"
|
||||
},
|
||||
"WiFi QR code for ": {
|
||||
"WiFi QR code for ": ""
|
||||
},
|
||||
"WiFi disabled": {
|
||||
"WiFi disabled": "關閉 WiFi"
|
||||
},
|
||||
@@ -5765,6 +5807,9 @@
|
||||
"events": {
|
||||
"events": "活動"
|
||||
},
|
||||
"ext": {
|
||||
"ext": ""
|
||||
},
|
||||
"fallback gpu name": {
|
||||
"Unknown GPU": "未知 GPU"
|
||||
},
|
||||
|
||||
@@ -5354,6 +5354,20 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Folder",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Folders",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Follow Monitor Focus",
|
||||
"translation": "",
|
||||
@@ -6215,6 +6229,13 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Icon Scale",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Icon Size",
|
||||
"translation": "",
|
||||
@@ -7300,6 +7321,20 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Maximize Widget Icons",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Maximize Widget Text",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Maximum Entry Size",
|
||||
"translation": "",
|
||||
@@ -8273,6 +8308,13 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "No folders found",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "No hidden apps.",
|
||||
"translation": "",
|
||||
@@ -8875,6 +8917,13 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Open in terminal",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Open search bar to find text",
|
||||
"translation": "",
|
||||
@@ -10142,6 +10191,13 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Remove Widget Padding",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Remove gaps and border when windows are maximized",
|
||||
"translation": "",
|
||||
@@ -10541,6 +10597,13 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Save QR Code",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Save and switch between display configurations",
|
||||
"translation": "",
|
||||
@@ -10632,6 +10695,13 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Scale DankBar icon sizes independently",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Scale all font sizes throughout the shell",
|
||||
"translation": "",
|
||||
@@ -10667,6 +10737,13 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Score",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Screen Sharing",
|
||||
"translation": "",
|
||||
@@ -12900,6 +12977,13 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Trust",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Try a different search",
|
||||
"translation": "",
|
||||
@@ -13173,6 +13257,13 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Untrust",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "Update",
|
||||
"translation": "",
|
||||
@@ -13810,6 +13901,13 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "WiFi QR code for ",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "WiFi disabled",
|
||||
"translation": "",
|
||||
@@ -14272,6 +14370,13 @@
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "ext",
|
||||
"translation": "",
|
||||
"context": "",
|
||||
"reference": "",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"term": "featured",
|
||||
"translation": "",
|
||||
|
||||
Reference in New Issue
Block a user