1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-30 00:12:50 -05:00

Compare commits

...

14 Commits

Author SHA1 Message Date
bbedward
cd9d92d884 update changelog link and VERSION 2026-01-13 08:31:50 -05:00
Lucas
1b69a5e62b nix: add wtype dependency (#1346) 2026-01-13 08:27:46 -05:00
bbedward
61d311b157 widgets: fix running apps positioning and popup manager 2026-01-13 08:26:29 -05:00
bbedward
6b76b86930 notifications: remove redundant trimStored and add null safety 2026-01-12 23:37:49 -05:00
bbedward
dcfb947c36 desktop widgets: sync position across screens option, clickthrough
option, grouping in settings, repositioning, new IPCs for control
fixes #1300
fixes #1301
2026-01-12 15:31:34 -05:00
bbedward
59893b7f44 notifications: use Theme.primary to represent do not distrub in bar 2026-01-12 11:57:42 -05:00
bbedward
d2c62f5533 matugen: add support for vscode-insiders 2026-01-12 11:46:29 -05:00
bbedward
2bbe9a0c45 core/wlcontext: use infinite poll timeout 2026-01-12 11:26:35 -05:00
bbedward
4e2ce82c0a notifications: swipe to dismiss on history 2026-01-12 11:08:22 -05:00
bbedward
104762186f widgets: respect radius for inactive DankButtonGroup i tems 2026-01-12 10:26:50 -05:00
bbedward
f1233ab1e3 matugen: add post_hook for mango 2026-01-12 10:05:19 -05:00
bbedward
d6b407ec37 settings: fix wallpaper preview cache update on per-mode change 2026-01-12 09:58:58 -05:00
bbedward
022b4b4bb3 enable changelog 2026-01-12 09:46:50 -05:00
bbedward
49b322582d keybinds: fix sh, fix screenshot-window options, empty args
part of #914
2026-01-12 09:35:30 -05:00
42 changed files with 2219 additions and 511 deletions

View File

@@ -8,6 +8,7 @@ bind = SUPER, N, exec, dms ipc call notifications toggle
bind = SUPER SHIFT, N, exec, dms ipc call notepad toggle bind = SUPER SHIFT, N, exec, dms ipc call notepad toggle
bind = SUPER, Y, exec, dms ipc call dankdash wallpaper bind = SUPER, Y, exec, dms ipc call dankdash wallpaper
bind = SUPER, TAB, exec, dms ipc call hypr toggleOverview bind = SUPER, TAB, exec, dms ipc call hypr toggleOverview
bind = SUPER, X, exec, dms ipc call powermenu toggle
# === Cheat sheet # === Cheat sheet
bind = SUPER SHIFT, Slash, exec, dms ipc call keybinds toggle hyprland bind = SUPER SHIFT, Slash, exec, dms ipc call keybinds toggle hyprland

View File

@@ -15,6 +15,8 @@ binds {
Mod+M hotkey-overlay-title="Task Manager" { Mod+M hotkey-overlay-title="Task Manager" {
spawn "dms" "ipc" "call" "processlist" "focusOrToggle"; spawn "dms" "ipc" "call" "processlist" "focusOrToggle";
} }
Super+X hotkey-overlay-title="Power Menu: Toggle" { spawn "dms" "ipc" "call" "powermenu" "toggle"; }
Mod+Comma hotkey-overlay-title="Settings" { Mod+Comma hotkey-overlay-title="Settings" {
spawn "dms" "ipc" "call" "settings" "focusOrToggle"; spawn "dms" "ipc" "call" "settings" "focusOrToggle";
} }

View File

@@ -325,24 +325,30 @@ func (n *NiriProvider) buildActionFromNode(bindNode *document.Node) string {
} }
actionNode := bindNode.Children[0] actionNode := bindNode.Children[0]
actionName := actionNode.Name.String()
kdlStr := strings.TrimSpace(actionNode.String()) if actionName == "" {
if kdlStr == "" {
return "" return ""
} }
return n.kdlActionToInternal(kdlStr) parts := []string{actionName}
} for _, arg := range actionNode.Arguments {
val := arg.ValueString()
func (n *NiriProvider) kdlActionToInternal(kdlAction string) string { if val == "" {
parts := n.parseActionParts(kdlAction) parts = append(parts, `""`)
if len(parts) == 0 { } else {
return kdlAction parts = append(parts, val)
}
} }
for i, part := range parts { if actionNode.Properties != nil {
if part == "" { if val, ok := actionNode.Properties.Get("focus"); ok {
parts[i] = `""` parts = append(parts, "focus="+val.String())
}
if val, ok := actionNode.Properties.Get("show-pointer"); ok {
parts = append(parts, "show-pointer="+val.String())
}
if val, ok := actionNode.Properties.Get("write-to-disk"); ok {
parts = append(parts, "write-to-disk="+val.String())
} }
} }

View File

@@ -314,6 +314,7 @@ output_path = '%s'
appendVSCodeConfig(cfgFile, "codeoss", filepath.Join(homeDir, ".config/Code - OSS/extensions"), opts.ShellDir) appendVSCodeConfig(cfgFile, "codeoss", filepath.Join(homeDir, ".config/Code - OSS/extensions"), opts.ShellDir)
appendVSCodeConfig(cfgFile, "cursor", filepath.Join(homeDir, ".cursor/extensions"), opts.ShellDir) appendVSCodeConfig(cfgFile, "cursor", filepath.Join(homeDir, ".cursor/extensions"), opts.ShellDir)
appendVSCodeConfig(cfgFile, "windsurf", filepath.Join(homeDir, ".windsurf/extensions"), opts.ShellDir) appendVSCodeConfig(cfgFile, "windsurf", filepath.Join(homeDir, ".windsurf/extensions"), opts.ShellDir)
appendVSCodeConfig(cfgFile, "vscode-insiders", filepath.Join(homeDir, ".vscode-insiders/extensions"), opts.ShellDir)
default: default:
appendConfig(opts, cfgFile, tmpl.Commands, tmpl.Flatpaks, tmpl.ConfigFile) appendConfig(opts, cfgFile, tmpl.Commands, tmpl.Flatpaks, tmpl.ConfigFile)
} }

View File

@@ -124,27 +124,23 @@ func (sc *SharedContext) eventDispatcher() {
} }
for { for {
sc.drainCmdQueue()
select { select {
case <-sc.stopChan: case <-sc.stopChan:
return return
default: default:
} }
sc.drainCmdQueue() _, err := unix.Poll(pollFds, -1)
switch {
n, err := unix.Poll(pollFds, 50) case err == unix.EINTR:
if err != nil { continue
if err == unix.EINTR { case err != nil:
continue
}
log.Errorf("Poll error: %v", err) log.Errorf("Poll error: %v", err)
return return
} }
if n == 0 {
continue
}
if pollFds[1].Revents&unix.POLLIN != 0 { if pollFds[1].Revents&unix.POLLIN != 0 {
var buf [64]byte var buf [64]byte
if _, err := unix.Read(sc.wakeR, buf[:]); err != nil && err != unix.EAGAIN { if _, err := unix.Read(sc.wakeR, buf[:]); err != nil && err != unix.EAGAIN {
@@ -152,13 +148,13 @@ func (sc *SharedContext) eventDispatcher() {
} }
} }
if pollFds[0].Revents&unix.POLLIN != 0 { if pollFds[0].Revents&unix.POLLIN == 0 {
if err := ctx.Dispatch(); err != nil { continue
if !os.IsTimeout(err) { }
log.Errorf("Wayland connection error: %v", err)
return if err := ctx.Dispatch(); err != nil && !os.IsTimeout(err) {
} log.Errorf("Wayland connection error: %v", err)
} return
} }
} }
} }
@@ -176,12 +172,16 @@ func (sc *SharedContext) drainCmdQueue() {
func (sc *SharedContext) Close() { func (sc *SharedContext) Close() {
close(sc.stopChan) close(sc.stopChan)
if _, err := unix.Write(sc.wakeW, []byte{1}); err != nil && err != unix.EAGAIN {
log.Errorf("wake pipe write error on close: %v", err)
}
sc.wg.Wait() sc.wg.Wait()
unix.Close(sc.wakeR) unix.Close(sc.wakeR)
unix.Close(sc.wakeW) unix.Close(sc.wakeW)
if sc.display != nil { if sc.display == nil {
sc.display.Context().Close() return
} }
sc.display.Context().Close()
} }

View File

@@ -19,7 +19,8 @@ in
] ]
++ lib.optional cfg.enableDynamicTheming pkgs.matugen ++ lib.optional cfg.enableDynamicTheming pkgs.matugen
++ lib.optional cfg.enableAudioWavelength pkgs.cava ++ lib.optional cfg.enableAudioWavelength pkgs.cava
++ lib.optional cfg.enableCalendarEvents pkgs.khal; ++ lib.optional cfg.enableCalendarEvents pkgs.khal
++ lib.optional cfg.enableClipboardPaste pkgs.wtype;
plugins = lib.mapAttrs (name: plugin: { plugins = lib.mapAttrs (name: plugin: {
source = plugin.src; source = plugin.src;

View File

@@ -70,6 +70,12 @@ in
description = "Add calendar events support via khal"; description = "Add calendar events support via khal";
}; };
enableClipboardPaste = lib.mkOption {
type = types.bool;
default = true;
description = "Adds needed dependencies for directly pasting items from the clipboard history.";
};
quickshell = { quickshell = {
package = lib.mkPackageOption dmsPkgs "quickshell" { package = lib.mkPackageOption dmsPkgs "quickshell" {
extraDescription = "The quickshell package to use (defaults to be built from source, due to unreleased features used by DMS)."; extraDescription = "The quickshell package to use (defaults to be built from source, due to unreleased features used by DMS).";

View File

@@ -450,10 +450,7 @@ const NIRI_ACTION_ARGS = {
] ]
}, },
"screenshot-window": { "screenshot-window": {
args: [ args: [{ name: "write-to-disk", type: "bool", label: "Save to disk" }]
{ name: "show-pointer", type: "bool", label: "Show pointer" },
{ name: "write-to-disk", type: "bool", label: "Save to disk" }
]
} }
}; };
@@ -841,7 +838,7 @@ function getActionType(action) {
return "compositor"; return "compositor";
if (action.startsWith("spawn dms ipc call ")) if (action.startsWith("spawn dms ipc call "))
return "dms"; return "dms";
if (action.startsWith("spawn sh -c ") || action.startsWith("spawn bash -c ") || action.startsWith("spawn_shell ")) if (/^spawn \w+ -c /.test(action) || action.startsWith("spawn_shell "))
return "shell"; return "shell";
if (action.startsWith("spawn ")) if (action.startsWith("spawn "))
return "spawn"; return "spawn";
@@ -888,12 +885,13 @@ function buildSpawnAction(command, args) {
return "spawn " + parts.join(" "); return "spawn " + parts.join(" ");
} }
function buildShellAction(compositor, shellCmd) { function buildShellAction(compositor, shellCmd, shell) {
if (!shellCmd) if (!shellCmd)
return ""; return "";
if (compositor === "mangowc") if (compositor === "mangowc")
return "spawn_shell " + shellCmd; return "spawn_shell " + shellCmd;
return "spawn sh -c \"" + shellCmd.replace(/"/g, "\\\"") + "\""; var shellBin = shell || "sh";
return "spawn " + shellBin + " -c \"" + shellCmd.replace(/"/g, "\\\"") + "\"";
} }
function parseSpawnCommand(action) { function parseSpawnCommand(action) {
@@ -910,8 +908,9 @@ function parseSpawnCommand(action) {
function parseShellCommand(action) { function parseShellCommand(action) {
if (!action) if (!action)
return ""; return "";
if (action.startsWith("spawn sh -c ")) { var match = action.match(/^spawn (\w+) -c (.+)$/);
var content = action.slice(12); if (match) {
var content = match[2];
if ((content.startsWith('"') && content.endsWith('"')) || (content.startsWith("'") && content.endsWith("'"))) if ((content.startsWith('"') && content.endsWith('"')) || (content.startsWith("'") && content.endsWith("'")))
content = content.slice(1, -1); content = content.slice(1, -1);
return content.replace(/\\"/g, "\""); return content.replace(/\\"/g, "\"");
@@ -921,6 +920,13 @@ function parseShellCommand(action) {
return ""; return "";
} }
function getShellFromAction(action) {
if (!action)
return "sh";
var match = action.match(/^spawn (\w+) -c /);
return match ? match[1] : "sh";
}
function getActionArgConfig(compositor, action) { function getActionArgConfig(compositor, action) {
if (!action) if (!action)
return null; return null;
@@ -1107,12 +1113,27 @@ function buildCompositorAction(compositor, base, args) {
parts.push("focus=false"); parts.push("focus=false");
break; break;
default: default:
if (base.startsWith("screenshot")) { switch (base) {
case "screenshot":
if (args["show-pointer"] === true) if (args["show-pointer"] === true)
parts.push("show-pointer=true"); parts.push("show-pointer=true");
else if (args["show-pointer"] === false)
parts.push("show-pointer=false");
break;
case "screenshot-screen":
if (args["show-pointer"] === true)
parts.push("show-pointer=true");
else if (args["show-pointer"] === false)
parts.push("show-pointer=false");
if (args["write-to-disk"] === true) if (args["write-to-disk"] === true)
parts.push("write-to-disk=true"); parts.push("write-to-disk=true");
} else if (args.value) { break;
case "screenshot-window":
if (args["write-to-disk"] === true)
parts.push("write-to-disk=true");
break;
}
if (args.value) {
parts.push(args.value); parts.push(args.value);
} else if (args.index) { } else if (args.index) {
parts.push(args.index); parts.push(args.index);

View File

@@ -538,6 +538,7 @@ Singleton {
property var desktopWidgetPositions: ({}) property var desktopWidgetPositions: ({})
property var desktopWidgetGridSettings: ({}) property var desktopWidgetGridSettings: ({})
property var desktopWidgetInstances: [] property var desktopWidgetInstances: []
property var desktopWidgetGroups: []
function getDesktopWidgetGridSetting(screenKey, property, defaultValue) { function getDesktopWidgetGridSetting(screenKey, property, defaultValue) {
const val = desktopWidgetGridSettings?.[screenKey]?.[property]; const val = desktopWidgetGridSettings?.[screenKey]?.[property];
@@ -689,6 +690,38 @@ Singleton {
saveSettings(); saveSettings();
} }
function syncDesktopWidgetPositionToAllScreens(instanceId) {
const instances = JSON.parse(JSON.stringify(desktopWidgetInstances || []));
const idx = instances.findIndex(inst => inst.id === instanceId);
if (idx === -1)
return;
const positions = instances[idx].positions || {};
const screenKeys = Object.keys(positions).filter(k => k !== "_synced");
if (screenKeys.length === 0)
return;
const sourceKey = screenKeys[0];
const sourcePos = positions[sourceKey];
if (!sourcePos)
return;
const screen = Array.from(Quickshell.screens.values()).find(s => getScreenDisplayName(s) === sourceKey);
if (!screen)
return;
const screenW = screen.width;
const screenH = screen.height;
const synced = {};
if (sourcePos.x !== undefined)
synced.x = sourcePos.x / screenW;
if (sourcePos.y !== undefined)
synced.y = sourcePos.y / screenH;
if (sourcePos.width !== undefined)
synced.width = sourcePos.width;
if (sourcePos.height !== undefined)
synced.height = sourcePos.height;
instances[idx].positions["_synced"] = synced;
desktopWidgetInstances = instances;
saveSettings();
}
function duplicateDesktopWidgetInstance(instanceId) { function duplicateDesktopWidgetInstance(instanceId) {
const source = getDesktopWidgetInstance(instanceId); const source = getDesktopWidgetInstance(instanceId);
if (!source) if (!source)
@@ -721,6 +754,110 @@ Singleton {
return (desktopWidgetInstances || []).filter(inst => inst.enabled); return (desktopWidgetInstances || []).filter(inst => inst.enabled);
} }
function moveDesktopWidgetInstance(instanceId, direction) {
const instances = JSON.parse(JSON.stringify(desktopWidgetInstances || []));
const idx = instances.findIndex(inst => inst.id === instanceId);
if (idx === -1)
return false;
const targetIdx = direction === "up" ? idx - 1 : idx + 1;
if (targetIdx < 0 || targetIdx >= instances.length)
return false;
const temp = instances[idx];
instances[idx] = instances[targetIdx];
instances[targetIdx] = temp;
desktopWidgetInstances = instances;
saveSettings();
return true;
}
function reorderDesktopWidgetInstance(instanceId, newIndex) {
const instances = JSON.parse(JSON.stringify(desktopWidgetInstances || []));
const idx = instances.findIndex(inst => inst.id === instanceId);
if (idx === -1 || newIndex < 0 || newIndex >= instances.length)
return false;
const [item] = instances.splice(idx, 1);
instances.splice(newIndex, 0, item);
desktopWidgetInstances = instances;
saveSettings();
return true;
}
function reorderDesktopWidgetInstanceInGroup(instanceId, groupId, newIndexInGroup) {
const instances = JSON.parse(JSON.stringify(desktopWidgetInstances || []));
const groups = desktopWidgetGroups || [];
const groupMatches = inst => {
if (groupId === null)
return !inst.group || !groups.some(g => g.id === inst.group);
return inst.group === groupId;
};
const groupInstances = instances.filter(groupMatches);
const currentGroupIdx = groupInstances.findIndex(inst => inst.id === instanceId);
if (currentGroupIdx === -1 || currentGroupIdx === newIndexInGroup)
return false;
if (newIndexInGroup < 0 || newIndexInGroup >= groupInstances.length)
return false;
const globalIdx = instances.findIndex(inst => inst.id === instanceId);
if (globalIdx === -1)
return false;
const [item] = instances.splice(globalIdx, 1);
const targetInstance = groupInstances[newIndexInGroup];
let targetGlobalIdx = instances.findIndex(inst => inst.id === targetInstance.id);
if (newIndexInGroup > currentGroupIdx)
targetGlobalIdx++;
instances.splice(targetGlobalIdx, 0, item);
desktopWidgetInstances = instances;
saveSettings();
return true;
}
function createDesktopWidgetGroup(name) {
const id = "dwg_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9);
const group = {
id: id,
name: name,
collapsed: false
};
const groups = JSON.parse(JSON.stringify(desktopWidgetGroups || []));
groups.push(group);
desktopWidgetGroups = groups;
saveSettings();
return group;
}
function updateDesktopWidgetGroup(groupId, updates) {
const groups = JSON.parse(JSON.stringify(desktopWidgetGroups || []));
const idx = groups.findIndex(g => g.id === groupId);
if (idx === -1)
return;
Object.assign(groups[idx], updates);
desktopWidgetGroups = groups;
saveSettings();
}
function removeDesktopWidgetGroup(groupId) {
const instances = JSON.parse(JSON.stringify(desktopWidgetInstances || []));
for (let i = 0; i < instances.length; i++) {
if (instances[i].group === groupId)
instances[i].group = null;
}
desktopWidgetInstances = instances;
const groups = (desktopWidgetGroups || []).filter(g => g.id !== groupId);
desktopWidgetGroups = groups;
saveSettings();
}
function getDesktopWidgetGroup(groupId) {
return (desktopWidgetGroups || []).find(g => g.id === groupId) || null;
}
function getDesktopWidgetInstancesByGroup(groupId) {
return (desktopWidgetInstances || []).filter(inst => inst.group === groupId);
}
function getUngroupedDesktopWidgetInstances() {
return (desktopWidgetInstances || []).filter(inst => !inst.group);
}
signal forceDankBarLayoutRefresh signal forceDankBarLayoutRefresh
signal forceDockLayoutRefresh signal forceDockLayoutRefresh
signal widgetDataChanged signal widgetDataChanged

View File

@@ -402,6 +402,8 @@ var SPEC = {
desktopWidgetInstances: { def: [] }, desktopWidgetInstances: { def: [] },
desktopWidgetGroups: { def: [] },
builtInPluginSettings: { def: {} } builtInPluginSettings: { def: {} }
}; };

View File

@@ -1068,7 +1068,7 @@ Item {
const instances = SettingsData.desktopWidgetInstances || []; const instances = SettingsData.desktopWidgetInstances || [];
if (instances.length === 0) if (instances.length === 0)
return "No desktop widgets configured"; return "No desktop widgets configured";
return instances.map(i => `${i.id} [${i.widgetType}] ${i.name || i.widgetType}`).join("\n"); return instances.map(i => `${i.id} [${i.widgetType}] ${i.name || i.widgetType} ${i.enabled ? "[enabled]" : "[disabled]"}`).join("\n");
} }
function status(instanceId: string): string { function status(instanceId: string): string {
@@ -1079,9 +1079,115 @@ Item {
if (!instance) if (!instance)
return `DESKTOP_WIDGET_NOT_FOUND: ${instanceId}`; return `DESKTOP_WIDGET_NOT_FOUND: ${instanceId}`;
const enabled = instance.enabled ?? true;
const overlay = instance.config?.showOnOverlay ?? false; const overlay = instance.config?.showOnOverlay ?? false;
const overview = instance.config?.showOnOverview ?? false; const overview = instance.config?.showOnOverview ?? false;
return `overlay: ${overlay}, overview: ${overview}`; const clickThrough = instance.config?.clickThrough ?? false;
const syncPosition = instance.config?.syncPositionAcrossScreens ?? false;
return `enabled: ${enabled}, overlay: ${overlay}, overview: ${overview}, clickThrough: ${clickThrough}, syncPosition: ${syncPosition}`;
}
function enable(instanceId: string): string {
if (!instanceId)
return "ERROR: No instance ID specified";
const instance = SettingsData.getDesktopWidgetInstance(instanceId);
if (!instance)
return `DESKTOP_WIDGET_NOT_FOUND: ${instanceId}`;
SettingsData.updateDesktopWidgetInstance(instanceId, {
enabled: true
});
return `DESKTOP_WIDGET_ENABLED: ${instanceId}`;
}
function disable(instanceId: string): string {
if (!instanceId)
return "ERROR: No instance ID specified";
const instance = SettingsData.getDesktopWidgetInstance(instanceId);
if (!instance)
return `DESKTOP_WIDGET_NOT_FOUND: ${instanceId}`;
SettingsData.updateDesktopWidgetInstance(instanceId, {
enabled: false
});
return `DESKTOP_WIDGET_DISABLED: ${instanceId}`;
}
function toggleEnabled(instanceId: string): string {
if (!instanceId)
return "ERROR: No instance ID specified";
const instance = SettingsData.getDesktopWidgetInstance(instanceId);
if (!instance)
return `DESKTOP_WIDGET_NOT_FOUND: ${instanceId}`;
const currentValue = instance.enabled ?? true;
SettingsData.updateDesktopWidgetInstance(instanceId, {
enabled: !currentValue
});
return !currentValue ? `DESKTOP_WIDGET_ENABLED: ${instanceId}` : `DESKTOP_WIDGET_DISABLED: ${instanceId}`;
}
function toggleClickThrough(instanceId: string): string {
if (!instanceId)
return "ERROR: No instance ID specified";
const instance = SettingsData.getDesktopWidgetInstance(instanceId);
if (!instance)
return `DESKTOP_WIDGET_NOT_FOUND: ${instanceId}`;
const currentValue = instance.config?.clickThrough ?? false;
SettingsData.updateDesktopWidgetInstanceConfig(instanceId, {
clickThrough: !currentValue
});
return !currentValue ? `DESKTOP_WIDGET_CLICK_THROUGH_ENABLED: ${instanceId}` : `DESKTOP_WIDGET_CLICK_THROUGH_DISABLED: ${instanceId}`;
}
function setClickThrough(instanceId: string, enabled: string): string {
if (!instanceId)
return "ERROR: No instance ID specified";
const instance = SettingsData.getDesktopWidgetInstance(instanceId);
if (!instance)
return `DESKTOP_WIDGET_NOT_FOUND: ${instanceId}`;
const enabledBool = enabled === "true" || enabled === "1";
SettingsData.updateDesktopWidgetInstanceConfig(instanceId, {
clickThrough: enabledBool
});
return enabledBool ? `DESKTOP_WIDGET_CLICK_THROUGH_ENABLED: ${instanceId}` : `DESKTOP_WIDGET_CLICK_THROUGH_DISABLED: ${instanceId}`;
}
function toggleSyncPosition(instanceId: string): string {
if (!instanceId)
return "ERROR: No instance ID specified";
const instance = SettingsData.getDesktopWidgetInstance(instanceId);
if (!instance)
return `DESKTOP_WIDGET_NOT_FOUND: ${instanceId}`;
const currentValue = instance.config?.syncPositionAcrossScreens ?? false;
SettingsData.updateDesktopWidgetInstanceConfig(instanceId, {
syncPositionAcrossScreens: !currentValue
});
return !currentValue ? `DESKTOP_WIDGET_SYNC_POSITION_ENABLED: ${instanceId}` : `DESKTOP_WIDGET_SYNC_POSITION_DISABLED: ${instanceId}`;
}
function setSyncPosition(instanceId: string, enabled: string): string {
if (!instanceId)
return "ERROR: No instance ID specified";
const instance = SettingsData.getDesktopWidgetInstance(instanceId);
if (!instance)
return `DESKTOP_WIDGET_NOT_FOUND: ${instanceId}`;
const enabledBool = enabled === "true" || enabled === "1";
SettingsData.updateDesktopWidgetInstanceConfig(instanceId, {
syncPositionAcrossScreens: enabledBool
});
return enabledBool ? `DESKTOP_WIDGET_SYNC_POSITION_ENABLED: ${instanceId}` : `DESKTOP_WIDGET_SYNC_POSITION_DISABLED: ${instanceId}`;
} }
target: "desktopWidget" target: "desktopWidget"

View File

@@ -128,7 +128,7 @@ FloatingWindow {
iconName: "open_in_new" iconName: "open_in_new"
backgroundColor: Theme.surfaceContainerHighest backgroundColor: Theme.surfaceContainerHighest
textColor: Theme.surfaceText textColor: Theme.surfaceText
onClicked: Qt.openUrlExternally("https://danklinux.com/blog/dms-1-2-spicy-miso") onClicked: Qt.openUrlExternally("https://danklinux.com/blog/v1.2-release")
} }
DankButton { DankButton {

View File

@@ -19,7 +19,7 @@ BasePill {
anchors.centerIn: parent anchors.centerIn: parent
name: SessionData.doNotDisturb ? "notifications_off" : "notifications" name: SessionData.doNotDisturb ? "notifications_off" : "notifications"
size: Theme.barIconSize(root.barThickness, -4) size: Theme.barIconSize(root.barThickness, -4)
color: SessionData.doNotDisturb ? Theme.error : (root.isActive ? Theme.primary : Theme.widgetIconColor) color: SessionData.doNotDisturb ? Theme.primary : (root.isActive ? Theme.primary : Theme.widgetIconColor)
} }
Rectangle { Rectangle {
@@ -35,6 +35,6 @@ BasePill {
} }
onRightClicked: { onRightClicked: {
SessionData.setDoNotDisturb(!SessionData.doNotDisturb) SessionData.setDoNotDisturb(!SessionData.doNotDisturb);
} }
} }

View File

@@ -493,8 +493,10 @@ Item {
const globalPos = delegateItem.mapToGlobal(delegateItem.width / 2, 0); const globalPos = delegateItem.mapToGlobal(delegateItem.width / 2, 0);
const screenX = root.parentScreen ? root.parentScreen.x : 0; const screenX = root.parentScreen ? root.parentScreen.x : 0;
const relativeX = globalPos.x - screenX; const relativeX = globalPos.x - screenX;
const yPos = root.barThickness + root.barSpacing - 7; const screenHeight = root.parentScreen ? root.parentScreen.height : Screen.height;
windowContextMenuLoader.item.showAt(relativeX, yPos, false, "top"); const isBottom = root.axis?.edge === "bottom";
const yPos = isBottom ? (screenHeight - root.barThickness - root.barSpacing - 32 - Theme.spacingXS) : (root.barThickness + root.barSpacing + Theme.spacingXS);
windowContextMenuLoader.item.showAt(relativeX, yPos, false, root.axis?.edge);
} }
} }
} else if (mouse.button === Qt.MiddleButton) { } else if (mouse.button === Qt.MiddleButton) {
@@ -726,8 +728,10 @@ Item {
const globalPos = delegateItem.mapToGlobal(delegateItem.width / 2, 0); const globalPos = delegateItem.mapToGlobal(delegateItem.width / 2, 0);
const screenX = root.parentScreen ? root.parentScreen.x : 0; const screenX = root.parentScreen ? root.parentScreen.x : 0;
const relativeX = globalPos.x - screenX; const relativeX = globalPos.x - screenX;
const yPos = root.barThickness + root.barSpacing - 7; const screenHeight = root.parentScreen ? root.parentScreen.height : Screen.height;
windowContextMenuLoader.item.showAt(relativeX, yPos, false, "top"); const isBottom = root.axis?.edge === "bottom";
const yPos = isBottom ? (screenHeight - root.barThickness - root.barSpacing - 32 - Theme.spacingXS) : (root.barThickness + root.barSpacing + Theme.spacingXS);
windowContextMenuLoader.item.showAt(relativeX, yPos, false, root.axis?.edge);
} }
} }
} }

View File

@@ -83,23 +83,54 @@ Item {
} }
readonly property var allFilters: [ readonly property var allFilters: [
{ label: I18n.tr("All", "notification history filter"), key: "all", maxDays: 0 }, {
{ label: I18n.tr("Last hour", "notification history filter"), key: "1h", maxDays: 1 }, label: I18n.tr("All", "notification history filter"),
{ label: I18n.tr("Today", "notification history filter"), key: "today", maxDays: 1 }, key: "all",
{ label: I18n.tr("Yesterday", "notification history filter"), key: "yesterday", maxDays: 2 }, maxDays: 0
{ label: I18n.tr("7 days", "notification history filter"), key: "7d", maxDays: 7 }, },
{ label: I18n.tr("30 days", "notification history filter"), key: "30d", maxDays: 30 }, {
{ label: I18n.tr("Older", "notification history filter for content older than other filters"), key: "older", maxDays: 0 } label: I18n.tr("Last hour", "notification history filter"),
key: "1h",
maxDays: 1
},
{
label: I18n.tr("Today", "notification history filter"),
key: "today",
maxDays: 1
},
{
label: I18n.tr("Yesterday", "notification history filter"),
key: "yesterday",
maxDays: 2
},
{
label: I18n.tr("7 days", "notification history filter"),
key: "7d",
maxDays: 7
},
{
label: I18n.tr("30 days", "notification history filter"),
key: "30d",
maxDays: 30
},
{
label: I18n.tr("Older", "notification history filter for content older than other filters"),
key: "older",
maxDays: 0
}
] ]
function filterRelevantForRetention(filter) { function filterRelevantForRetention(filter) {
const retention = SettingsData.notificationHistoryMaxAgeDays; const retention = SettingsData.notificationHistoryMaxAgeDays;
if (filter.key === "older") { if (filter.key === "older") {
if (retention === 0) return true; if (retention === 0)
return true;
return retention > 2 && retention < 7 || retention > 30; return retention > 2 && retention < 7 || retention > 30;
} }
if (retention === 0) return true; if (retention === 0)
if (filter.maxDays === 0) return true; return true;
if (filter.maxDays === 0)
return true;
return filter.maxDays <= retention; return filter.maxDays <= retention;
} }
@@ -119,10 +150,15 @@ Item {
const retention = SettingsData.notificationHistoryMaxAgeDays; const retention = SettingsData.notificationHistoryMaxAgeDays;
for (let i = 0; i < allFilters.length; i++) { for (let i = 0; i < allFilters.length; i++) {
const f = allFilters[i]; const f = allFilters[i];
if (!filterRelevantForRetention(f)) continue; if (!filterRelevantForRetention(f))
continue;
const count = countForFilter(f.key); const count = countForFilter(f.key);
if (f.key === "all" || count > 0) { if (f.key === "all" || count > 0) {
result.push({ label: f.label, key: f.key, count: count }); result.push({
label: f.label,
key: f.key,
count: count
});
} }
} }
return result; return result;
@@ -165,6 +201,14 @@ Item {
function enableAutoScroll() { function enableAutoScroll() {
} }
function removeWithScrollPreserve(itemId) {
historyListView.savedY = historyListView.contentY;
NotificationService.removeFromHistory(itemId);
Qt.callLater(() => {
historyListView.forceLayout();
});
}
Column { Column {
anchors.fill: parent anchors.fill: parent
spacing: Theme.spacingS spacing: Theme.spacingS
@@ -201,14 +245,66 @@ Item {
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
} }
delegate: HistoryNotificationCard { delegate: Item {
id: delegateRoot
required property var modelData required property var modelData
required property int index required property int index
property real swipeOffset: 0
property bool isDismissing: false
readonly property real dismissThreshold: width * 0.35
width: ListView.view.width width: ListView.view.width
historyItem: modelData height: historyCard.height
isSelected: root.keyboardActive && root.selectedIndex === index clip: true
keyboardNavigationActive: root.keyboardActive
HistoryNotificationCard {
id: historyCard
width: parent.width
x: delegateRoot.swipeOffset
historyItem: modelData
isSelected: root.keyboardActive && root.selectedIndex === index
keyboardNavigationActive: root.keyboardActive
opacity: 1 - Math.abs(delegateRoot.swipeOffset) / (delegateRoot.width * 0.5)
Behavior on x {
enabled: !swipeDragHandler.active
NumberAnimation {
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
Behavior on opacity {
NumberAnimation {
duration: Theme.shortDuration
}
}
}
DragHandler {
id: swipeDragHandler
target: null
yAxis.enabled: false
xAxis.enabled: true
onActiveChanged: {
if (active || delegateRoot.isDismissing)
return;
if (Math.abs(delegateRoot.swipeOffset) > delegateRoot.dismissThreshold) {
delegateRoot.isDismissing = true;
root.removeWithScrollPreserve(delegateRoot.modelData?.id || "");
} else {
delegateRoot.swipeOffset = 0;
}
}
onTranslationChanged: {
if (delegateRoot.isDismissing)
return;
delegateRoot.swipeOffset = translation.x;
}
}
} }
} }
} }

View File

@@ -10,8 +10,9 @@ QtObject {
readonly property bool compactMode: SettingsData.notificationCompactMode readonly property bool compactMode: SettingsData.notificationCompactMode
readonly property real cardPadding: compactMode ? Theme.spacingS : Theme.spacingM readonly property real cardPadding: compactMode ? Theme.spacingS : Theme.spacingM
readonly property real popupIconSize: compactMode ? 48 : 63 readonly property real popupIconSize: compactMode ? 48 : 63
readonly property real popupSpacing: Theme.spacingS readonly property real actionButtonHeight: compactMode ? 20 : 24
readonly property int baseNotificationHeight: cardPadding * 3 + popupIconSize + popupSpacing readonly property real popupSpacing: 4
readonly property int baseNotificationHeight: cardPadding * 2 + popupIconSize + actionButtonHeight + Theme.spacingS + popupSpacing
property int maxTargetNotifications: 4 property int maxTargetNotifications: 4
property var popupWindows: [] // strong refs to windows (live until exitFinished) property var popupWindows: [] // strong refs to windows (live until exitFinished)
property var destroyingWindows: new Set() property var destroyingWindows: new Set()

View File

@@ -26,6 +26,8 @@ Item {
readonly property bool showOnOverview: instanceData?.config?.showOnOverview ?? false readonly property bool showOnOverview: instanceData?.config?.showOnOverview ?? false
readonly property bool showOnOverviewOnly: instanceData?.config?.showOnOverviewOnly ?? false readonly property bool showOnOverviewOnly: instanceData?.config?.showOnOverviewOnly ?? false
readonly property bool overviewActive: CompositorService.isNiri && NiriService.inOverview readonly property bool overviewActive: CompositorService.isNiri && NiriService.inOverview
readonly property bool clickThrough: instanceData?.config?.clickThrough ?? false
readonly property bool syncPositionAcrossScreens: instanceData?.config?.syncPositionAcrossScreens ?? false
Connections { Connections {
target: PluginService target: PluginService
@@ -83,6 +85,7 @@ Item {
} }
} }
readonly property string screenKey: SettingsData.getScreenDisplayName(screen) readonly property string screenKey: SettingsData.getScreenDisplayName(screen)
readonly property string positionKey: syncPositionAcrossScreens ? "_synced" : screenKey
readonly property int screenWidth: screen?.width ?? 1920 readonly property int screenWidth: screen?.width ?? 1920
readonly property int screenHeight: screen?.height ?? 1080 readonly property int screenHeight: screen?.height ?? 1080
@@ -96,53 +99,114 @@ Item {
readonly property bool hasSavedPosition: { readonly property bool hasSavedPosition: {
if (isInstance) if (isInstance)
return instanceData?.positions?.[screenKey]?.x !== undefined; return instanceData?.positions?.[positionKey]?.x !== undefined;
if (usePluginService) if (usePluginService)
return pluginService.loadPluginData(pluginId, "desktopX_" + screenKey, null) !== null; return pluginService.loadPluginData(pluginId, "desktopX_" + positionKey, null) !== null;
return SettingsData.getDesktopWidgetPosition(pluginId, screenKey, "x", null) !== null; return SettingsData.getDesktopWidgetPosition(pluginId, positionKey, "x", null) !== null;
} }
readonly property bool hasSavedSize: { readonly property bool hasSavedSize: {
if (isInstance) if (isInstance)
return instanceData?.positions?.[screenKey]?.width !== undefined; return instanceData?.positions?.[positionKey]?.width !== undefined;
if (usePluginService) if (usePluginService)
return pluginService.loadPluginData(pluginId, "desktopWidth_" + screenKey, null) !== null; return pluginService.loadPluginData(pluginId, "desktopWidth_" + positionKey, null) !== null;
return SettingsData.getDesktopWidgetPosition(pluginId, screenKey, "width", null) !== null; return SettingsData.getDesktopWidgetPosition(pluginId, positionKey, "width", null) !== null;
} }
property real savedX: { property real savedX: {
if (isInstance) if (isInstance) {
return instanceData?.positions?.[screenKey]?.x ?? (screenWidth / 2 - savedWidth / 2); const val = instanceData?.positions?.[positionKey]?.x;
if (usePluginService) if (val === undefined)
return pluginService.loadPluginData(pluginId, "desktopX_" + screenKey, screenWidth / 2 - savedWidth / 2); return screenWidth / 2 - savedWidth / 2;
return SettingsData.getDesktopWidgetPosition(pluginId, screenKey, "x", screenWidth / 2 - savedWidth / 2); return syncPositionAcrossScreens ? val * screenWidth : val;
}
if (usePluginService) {
const val = pluginService.loadPluginData(pluginId, "desktopX_" + positionKey, null);
if (val === null)
return screenWidth / 2 - savedWidth / 2;
return syncPositionAcrossScreens ? val * screenWidth : val;
}
const val = SettingsData.getDesktopWidgetPosition(pluginId, positionKey, "x", null);
if (val === null)
return screenWidth / 2 - savedWidth / 2;
return syncPositionAcrossScreens ? val * screenWidth : val;
} }
property real savedY: { property real savedY: {
if (isInstance) if (isInstance) {
return instanceData?.positions?.[screenKey]?.y ?? (screenHeight / 2 - savedHeight / 2); const val = instanceData?.positions?.[positionKey]?.y;
if (usePluginService) if (val === undefined)
return pluginService.loadPluginData(pluginId, "desktopY_" + screenKey, screenHeight / 2 - savedHeight / 2); return screenHeight / 2 - savedHeight / 2;
return SettingsData.getDesktopWidgetPosition(pluginId, screenKey, "y", screenHeight / 2 - savedHeight / 2); return syncPositionAcrossScreens ? val * screenHeight : val;
}
if (usePluginService) {
const val = pluginService.loadPluginData(pluginId, "desktopY_" + positionKey, null);
if (val === null)
return screenHeight / 2 - savedHeight / 2;
return syncPositionAcrossScreens ? val * screenHeight : val;
}
const val = SettingsData.getDesktopWidgetPosition(pluginId, positionKey, "y", null);
if (val === null)
return screenHeight / 2 - savedHeight / 2;
return syncPositionAcrossScreens ? val * screenHeight : val;
} }
property real savedWidth: { property real savedWidth: {
if (isInstance) if (isInstance) {
return instanceData?.positions?.[screenKey]?.width ?? 280; const val = instanceData?.positions?.[positionKey]?.width;
if (usePluginService) if (val === undefined)
return pluginService.loadPluginData(pluginId, "desktopWidth_" + screenKey, 200); return 280;
return SettingsData.getDesktopWidgetPosition(pluginId, screenKey, "width", 280); return val;
}
if (usePluginService) {
const val = pluginService.loadPluginData(pluginId, "desktopWidth_" + positionKey, null);
if (val === null)
return 200;
return val;
}
const val = SettingsData.getDesktopWidgetPosition(pluginId, positionKey, "width", null);
if (val === null)
return 280;
return val;
} }
property real savedHeight: { property real savedHeight: {
if (isInstance) if (isInstance) {
return instanceData?.positions?.[screenKey]?.height ?? 180; const val = instanceData?.positions?.[positionKey]?.height;
if (usePluginService) if (val === undefined)
return pluginService.loadPluginData(pluginId, "desktopHeight_" + screenKey, 200); return forceSquare ? savedWidth : 180;
return SettingsData.getDesktopWidgetPosition(pluginId, screenKey, "height", 180); return forceSquare ? savedWidth : val;
}
if (usePluginService) {
const val = pluginService.loadPluginData(pluginId, "desktopHeight_" + positionKey, null);
if (val === null)
return forceSquare ? savedWidth : 200;
return forceSquare ? savedWidth : val;
}
const val = SettingsData.getDesktopWidgetPosition(pluginId, positionKey, "height", null);
if (val === null)
return forceSquare ? savedWidth : 180;
return forceSquare ? savedWidth : val;
} }
property real widgetX: Math.max(0, Math.min(savedX, screenWidth - widgetWidth)) property real dragOverrideX: -1
property real widgetY: Math.max(0, Math.min(savedY, screenHeight - widgetHeight)) property real dragOverrideY: -1
property real widgetWidth: Math.max(minWidth, Math.min(savedWidth, screenWidth)) property real dragOverrideW: -1
property real widgetHeight: Math.max(minHeight, Math.min(savedHeight, screenHeight)) property real dragOverrideH: -1
readonly property real effectiveX: dragOverrideX >= 0 ? dragOverrideX : savedX
readonly property real effectiveY: dragOverrideY >= 0 ? dragOverrideY : savedY
readonly property real effectiveW: dragOverrideW >= 0 ? dragOverrideW : savedWidth
readonly property real effectiveH: dragOverrideH >= 0 ? dragOverrideH : savedHeight
readonly property real widgetX: Math.max(0, Math.min(effectiveX, screenWidth - widgetWidth))
readonly property real widgetY: Math.max(0, Math.min(effectiveY, screenHeight - widgetHeight))
readonly property real widgetWidth: Math.max(minWidth, Math.min(effectiveW, screenWidth))
readonly property real widgetHeight: Math.max(minHeight, Math.min(effectiveH, screenHeight))
function clearDragOverrides() {
dragOverrideX = -1;
dragOverrideY = -1;
dragOverrideW = -1;
dragOverrideH = -1;
}
property real minWidth: contentLoader.item?.minWidth ?? 100 property real minWidth: contentLoader.item?.minWidth ?? 100
property real minHeight: contentLoader.item?.minHeight ?? 100 property real minHeight: contentLoader.item?.minHeight ?? 100
@@ -163,41 +227,45 @@ Item {
return Math.round(value / gridSize) * gridSize; return Math.round(value / gridSize) * gridSize;
} }
function savePosition() { function savePosition(finalX, finalY) {
const xVal = syncPositionAcrossScreens ? finalX / screenWidth : finalX;
const yVal = syncPositionAcrossScreens ? finalY / screenHeight : finalY;
if (isInstance && instanceData) { if (isInstance && instanceData) {
SettingsData.updateDesktopWidgetInstancePosition(instanceId, screenKey, { SettingsData.updateDesktopWidgetInstancePosition(instanceId, positionKey, {
x: root.widgetX, x: xVal,
y: root.widgetY y: yVal
}); });
return; return;
} }
if (usePluginService) { if (usePluginService) {
pluginService.savePluginData(pluginId, "desktopX_" + screenKey, root.widgetX); pluginService.savePluginData(pluginId, "desktopX_" + positionKey, xVal);
pluginService.savePluginData(pluginId, "desktopY_" + screenKey, root.widgetY); pluginService.savePluginData(pluginId, "desktopY_" + positionKey, yVal);
return; return;
} }
SettingsData.updateDesktopWidgetPosition(pluginId, screenKey, { SettingsData.updateDesktopWidgetPosition(pluginId, positionKey, {
x: root.widgetX, x: xVal,
y: root.widgetY y: yVal
}); });
} }
function saveSize() { function saveSize(finalW, finalH) {
const sizeVal = forceSquare ? Math.max(finalW, finalH) : finalW;
const heightVal = forceSquare ? sizeVal : finalH;
if (isInstance && instanceData) { if (isInstance && instanceData) {
SettingsData.updateDesktopWidgetInstancePosition(instanceId, screenKey, { SettingsData.updateDesktopWidgetInstancePosition(instanceId, positionKey, {
width: root.widgetWidth, width: sizeVal,
height: root.widgetHeight height: heightVal
}); });
return; return;
} }
if (usePluginService) { if (usePluginService) {
pluginService.savePluginData(pluginId, "desktopWidth_" + screenKey, root.widgetWidth); pluginService.savePluginData(pluginId, "desktopWidth_" + positionKey, sizeVal);
pluginService.savePluginData(pluginId, "desktopHeight_" + screenKey, root.widgetHeight); pluginService.savePluginData(pluginId, "desktopHeight_" + positionKey, heightVal);
return; return;
} }
SettingsData.updateDesktopWidgetPosition(pluginId, screenKey, { SettingsData.updateDesktopWidgetPosition(pluginId, positionKey, {
width: root.widgetWidth, width: sizeVal,
height: root.widgetHeight height: heightVal
}); });
} }
@@ -213,6 +281,12 @@ Item {
} }
color: "transparent" color: "transparent"
Region {
id: emptyMask
}
mask: root.clickThrough ? emptyMask : null
WlrLayershell.namespace: "quickshell:desktop-widget:" + root.pluginId + (root.instanceId ? ":" + root.instanceId : "") WlrLayershell.namespace: "quickshell:desktop-widget:" + root.pluginId + (root.instanceId ? ":" + root.instanceId : "")
WlrLayershell.layer: { WlrLayershell.layer: {
if (root.isInteracting && !CompositorService.useHyprlandFocusGrab) if (root.isInteracting && !CompositorService.useHyprlandFocusGrab)
@@ -315,12 +389,14 @@ Item {
if (!root.hasSavedSize) { if (!root.hasSavedSize) {
const defW = item.defaultWidth ?? item.widgetWidth ?? 280; const defW = item.defaultWidth ?? item.widgetWidth ?? 280;
const defH = item.defaultHeight ?? item.widgetHeight ?? 180; const defH = item.defaultHeight ?? item.widgetHeight ?? 180;
root.widgetWidth = Math.max(root.minWidth, Math.min(defW, root.screenWidth)); const finalW = Math.max(root.minWidth, Math.min(defW, root.screenWidth));
root.widgetHeight = Math.max(root.minHeight, Math.min(defH, root.screenHeight)); const finalH = Math.max(root.minHeight, Math.min(defH, root.screenHeight));
root.saveSize(finalW, finalH);
} }
if (!root.hasSavedPosition) { if (!root.hasSavedPosition) {
root.widgetX = Math.max(0, Math.min(root.screenWidth / 2 - root.widgetWidth / 2, root.screenWidth - root.widgetWidth)); const finalX = Math.max(0, Math.min(root.screenWidth / 2 - root.widgetWidth / 2, root.screenWidth - root.widgetWidth));
root.widgetY = Math.max(0, Math.min(root.screenHeight / 2 - root.widgetHeight / 2, root.screenHeight - root.widgetHeight)); const finalY = Math.max(0, Math.min(root.screenHeight / 2 - root.widgetHeight / 2, root.screenHeight - root.widgetHeight));
root.savePosition(finalX, finalY);
} }
if (item.widgetWidth !== undefined) if (item.widgetWidth !== undefined)
item.widgetWidth = Qt.binding(() => contentLoader.width); item.widgetWidth = Qt.binding(() => contentLoader.width);
@@ -355,6 +431,7 @@ Item {
id: dragArea id: dragArea
anchors.fill: parent anchors.fill: parent
acceptedButtons: Qt.RightButton acceptedButtons: Qt.RightButton
enabled: !root.clickThrough
cursorShape: pressed ? Qt.ClosedHandCursor : Qt.ArrowCursor cursorShape: pressed ? Qt.ClosedHandCursor : Qt.ArrowCursor
property point startPos property point startPos
@@ -367,6 +444,8 @@ Item {
startY = root.widgetY; startY = root.widgetY;
root.previewX = root.widgetX; root.previewX = root.widgetX;
root.previewY = root.widgetY; root.previewY = root.widgetY;
root.dragOverrideX = root.widgetX;
root.dragOverrideY = root.widgetY;
} }
onPositionChanged: mouse => { onPositionChanged: mouse => {
@@ -384,16 +463,15 @@ Item {
root.previewY = newY; root.previewY = newY;
return; return;
} }
root.widgetX = newX; root.dragOverrideX = newX;
root.widgetY = newY; root.dragOverrideY = newY;
} }
onReleased: { onReleased: {
if (root.useGhostPreview) { const finalX = root.useGhostPreview ? root.previewX : root.dragOverrideX;
root.widgetX = root.previewX; const finalY = root.useGhostPreview ? root.previewY : root.dragOverrideY;
root.widgetY = root.previewY; root.savePosition(finalX, finalY);
} root.clearDragOverrides();
root.savePosition();
} }
} }
@@ -404,6 +482,7 @@ Item {
anchors.right: parent.right anchors.right: parent.right
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
acceptedButtons: Qt.RightButton acceptedButtons: Qt.RightButton
enabled: !root.clickThrough
cursorShape: pressed ? Qt.SizeFDiagCursor : Qt.ArrowCursor cursorShape: pressed ? Qt.SizeFDiagCursor : Qt.ArrowCursor
property point startPos property point startPos
@@ -416,6 +495,8 @@ Item {
startHeight = root.widgetHeight; startHeight = root.widgetHeight;
root.previewWidth = root.widgetWidth; root.previewWidth = root.widgetWidth;
root.previewHeight = root.widgetHeight; root.previewHeight = root.widgetHeight;
root.dragOverrideW = root.widgetWidth;
root.dragOverrideH = root.widgetHeight;
} }
onPositionChanged: mouse => { onPositionChanged: mouse => {
@@ -438,16 +519,15 @@ Item {
root.previewHeight = newH; root.previewHeight = newH;
return; return;
} }
root.widgetWidth = newW; root.dragOverrideW = newW;
root.widgetHeight = newH; root.dragOverrideH = newH;
} }
onReleased: { onReleased: {
if (root.useGhostPreview) { const finalW = root.useGhostPreview ? root.previewWidth : root.dragOverrideW;
root.widgetWidth = root.previewWidth; const finalH = root.useGhostPreview ? root.previewHeight : root.dragOverrideH;
root.widgetHeight = root.previewHeight; root.saveSize(finalW, finalH);
} root.clearDragOverrides();
root.saveSize();
} }
} }
} }

View File

@@ -63,7 +63,13 @@ SettingsCard {
DankActionButton { DankActionButton {
id: menuButton id: menuButton
iconName: "more_vert" iconName: "more_vert"
onClicked: actionsMenu.open() onClicked: {
if (actionsMenu.opened) {
actionsMenu.close();
return;
}
actionsMenu.open();
}
Popup { Popup {
id: actionsMenu id: actionsMenu
@@ -71,7 +77,7 @@ SettingsCard {
y: parent.height + Theme.spacingXS y: parent.height + Theme.spacingXS
width: 160 width: 160
padding: Theme.spacingXS padding: Theme.spacingXS
modal: true modal: false
focus: true focus: true
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
@@ -218,6 +224,73 @@ SettingsCard {
SettingsDivider {} SettingsDivider {}
Item {
width: parent.width
height: groupRow.height + Theme.spacingM * 2
visible: (SettingsData.desktopWidgetGroups || []).length > 0
Row {
id: groupRow
x: Theme.spacingM
anchors.verticalCenter: parent.verticalCenter
spacing: Theme.spacingM
width: parent.width - Theme.spacingM * 2
StyledText {
text: I18n.tr("Group")
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
width: 80
horizontalAlignment: Text.AlignLeft
}
DankDropdown {
id: groupDropdown
width: parent.width - 80 - Theme.spacingM
compactMode: true
property var groupsData: {
const groups = SettingsData.desktopWidgetGroups || [];
const items = [
{
value: "",
label: I18n.tr("None")
}
];
for (const g of groups) {
items.push({
value: g.id,
label: g.name
});
}
return items;
}
options: groupsData.map(g => g.label)
currentValue: {
const currentGroup = root.instanceData?.group ?? "";
const item = groupsData.find(g => g.value === currentGroup);
return item?.label ?? I18n.tr("None");
}
onValueChanged: value => {
if (!root.instanceId)
return;
const item = groupsData.find(g => g.label === value);
const groupId = item?.value ?? "";
SettingsData.updateDesktopWidgetInstance(root.instanceId, {
group: groupId || null
});
}
}
}
}
SettingsDivider {
visible: (SettingsData.desktopWidgetGroups || []).length > 0
}
SettingsToggleRow { SettingsToggleRow {
text: I18n.tr("Show on Overlay") text: I18n.tr("Show on Overlay")
checked: instanceData?.config?.showOnOverlay ?? false checked: instanceData?.config?.showOnOverlay ?? false
@@ -266,6 +339,38 @@ SettingsCard {
SettingsDivider {} SettingsDivider {}
SettingsToggleRow {
text: I18n.tr("Click Through")
description: I18n.tr("Allow clicks to pass through the widget")
checked: instanceData?.config?.clickThrough ?? false
onToggled: isChecked => {
if (!root.instanceId)
return;
SettingsData.updateDesktopWidgetInstanceConfig(root.instanceId, {
clickThrough: isChecked
});
}
}
SettingsDivider {}
SettingsToggleRow {
text: I18n.tr("Sync Position Across Screens")
description: I18n.tr("Use the same position and size on all displays")
checked: instanceData?.config?.syncPositionAcrossScreens ?? false
onToggled: isChecked => {
if (!root.instanceId)
return;
if (isChecked)
SettingsData.syncDesktopWidgetPositionToAllScreens(root.instanceId);
SettingsData.updateDesktopWidgetInstanceConfig(root.instanceId, {
syncPositionAcrossScreens: isChecked
});
}
}
SettingsDivider {}
Item { Item {
width: parent.width width: parent.width
height: ipcColumn.height + Theme.spacingM * 2 height: ipcColumn.height + Theme.spacingM * 2

View File

@@ -14,7 +14,13 @@ Item {
LayoutMirroring.childrenInherit: true LayoutMirroring.childrenInherit: true
property var expandedStates: ({}) property var expandedStates: ({})
property var groupCollapsedStates: ({})
property var parentModal: null property var parentModal: null
property string editingGroupId: ""
property string newGroupName: ""
readonly property var allInstances: SettingsData.desktopWidgetInstances || []
readonly property var allGroups: SettingsData.desktopWidgetGroups || []
DesktopWidgetBrowser { DesktopWidgetBrowser {
id: widgetBrowser id: widgetBrowser
@@ -80,54 +86,500 @@ Item {
} }
} }
Column { SettingsCard {
id: instancesColumn
width: parent.width width: parent.width
spacing: Theme.spacingM iconName: "folder"
visible: SettingsData.desktopWidgetInstances.length > 0 title: I18n.tr("Groups")
collapsible: true
expanded: root.allGroups.length > 0
Repeater { Column {
id: instanceRepeater width: parent.width - Theme.spacingM * 2
model: ScriptModel { x: Theme.spacingM
id: instancesModel spacing: Theme.spacingM
objectProp: "id"
values: SettingsData.desktopWidgetInstances StyledText {
width: parent.width
text: I18n.tr("Organize widgets into collapsible groups")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignLeft
} }
DesktopWidgetInstanceCard { Row {
required property var modelData spacing: Theme.spacingS
required property int index width: parent.width
readonly property string instanceIdRef: modelData.id DankTextField {
readonly property var liveInstanceData: { id: newGroupField
const instances = SettingsData.desktopWidgetInstances || []; width: parent.width - addGroupBtn.width - Theme.spacingS
return instances.find(inst => inst.id === instanceIdRef) ?? modelData; placeholderText: I18n.tr("New group name...")
text: root.newGroupName
onTextChanged: root.newGroupName = text
onAccepted: {
if (!text.trim())
return;
SettingsData.createDesktopWidgetGroup(text.trim());
root.newGroupName = "";
text = "";
}
} }
width: instancesColumn.width DankButton {
instanceData: liveInstanceData id: addGroupBtn
isExpanded: root.expandedStates[instanceIdRef] ?? false iconName: "add"
text: I18n.tr("Add")
enabled: root.newGroupName.trim().length > 0
onClicked: {
SettingsData.createDesktopWidgetGroup(root.newGroupName.trim());
root.newGroupName = "";
newGroupField.text = "";
}
}
}
onExpandedChanged: { Column {
if (expanded === (root.expandedStates[instanceIdRef] ?? false)) width: parent.width
return; spacing: Theme.spacingXS
var states = Object.assign({}, root.expandedStates); visible: root.allGroups.length > 0
states[instanceIdRef] = expanded;
root.expandedStates = states; Repeater {
model: root.allGroups
Rectangle {
id: groupItem
required property var modelData
required property int index
width: parent.width
height: 40
radius: Theme.cornerRadius
color: groupMouseArea.containsMouse ? Theme.surfaceHover : Theme.surfaceContainer
Row {
anchors.fill: parent
anchors.leftMargin: Theme.spacingS
anchors.rightMargin: Theme.spacingS
spacing: Theme.spacingS
DankIcon {
name: "folder"
size: Theme.iconSizeSmall
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
Loader {
active: root.editingGroupId === groupItem.modelData.id
width: active ? parent.width - Theme.iconSizeSmall - deleteGroupBtn.width - Theme.spacingS * 3 : 0
height: active ? 32 : 0
anchors.verticalCenter: parent.verticalCenter
sourceComponent: DankTextField {
text: groupItem.modelData.name
onAccepted: {
if (!text.trim())
return;
SettingsData.updateDesktopWidgetGroup(groupItem.modelData.id, {
name: text.trim()
});
root.editingGroupId = "";
}
onEditingFinished: {
if (!text.trim())
return;
SettingsData.updateDesktopWidgetGroup(groupItem.modelData.id, {
name: text.trim()
});
root.editingGroupId = "";
}
Component.onCompleted: forceActiveFocus()
}
}
StyledText {
visible: root.editingGroupId !== groupItem.modelData.id
text: groupItem.modelData.name
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
elide: Text.ElideRight
width: parent.width - Theme.iconSizeSmall - deleteGroupBtn.width - Theme.spacingS * 3
}
DankActionButton {
id: deleteGroupBtn
iconName: "delete"
anchors.verticalCenter: parent.verticalCenter
onClicked: {
SettingsData.removeDesktopWidgetGroup(groupItem.modelData.id);
ToastService.showInfo(I18n.tr("Group removed"));
}
}
}
MouseArea {
id: groupMouseArea
anchors.fill: parent
hoverEnabled: true
onDoubleClicked: root.editingGroupId = groupItem.modelData.id
}
}
}
}
}
}
Repeater {
model: root.allGroups
Column {
id: groupSection
required property var modelData
required property int index
readonly property string groupId: modelData.id
readonly property var groupInstances: root.allInstances.filter(inst => inst.group === groupId)
width: mainColumn.width
spacing: Theme.spacingM
visible: groupInstances.length > 0
Rectangle {
width: parent.width
height: 44
radius: Theme.cornerRadius
color: Theme.surfaceContainer
Row {
anchors.fill: parent
anchors.leftMargin: Theme.spacingM
anchors.rightMargin: Theme.spacingM
spacing: Theme.spacingS
DankIcon {
name: (root.groupCollapsedStates[groupSection.groupId] ?? false) ? "expand_more" : "expand_less"
size: Theme.iconSize
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
DankIcon {
name: "folder"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: groupSection.modelData.name
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: "(" + groupSection.groupInstances.length + ")"
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
anchors.verticalCenter: parent.verticalCenter
}
} }
onDuplicateRequested: SettingsData.duplicateDesktopWidgetInstance(instanceIdRef) MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
var states = Object.assign({}, root.groupCollapsedStates);
states[groupSection.groupId] = !(states[groupSection.groupId] ?? false);
root.groupCollapsedStates = states;
}
}
}
onDeleteRequested: { Column {
SettingsData.removeDesktopWidgetInstance(instanceIdRef); width: parent.width
ToastService.showInfo(I18n.tr("Widget removed")); spacing: Theme.spacingM
visible: !(root.groupCollapsedStates[groupSection.groupId] ?? false)
leftPadding: Theme.spacingM
Repeater {
model: ScriptModel {
objectProp: "id"
values: groupSection.groupInstances
}
Item {
id: groupDelegateItem
required property var modelData
required property int index
property bool held: groupDragArea.pressed
property real originalY: y
readonly property string instanceIdRef: modelData.id
readonly property var liveInstanceData: {
const instances = root.allInstances;
return instances.find(inst => inst.id === instanceIdRef) ?? modelData;
}
width: groupSection.width - Theme.spacingM
height: groupCard.height
z: held ? 2 : 1
DesktopWidgetInstanceCard {
id: groupCard
width: parent.width
headerLeftPadding: 20
instanceData: groupDelegateItem.liveInstanceData
isExpanded: root.expandedStates[groupDelegateItem.instanceIdRef] ?? false
onExpandedChanged: {
if (expanded === (root.expandedStates[groupDelegateItem.instanceIdRef] ?? false))
return;
var states = Object.assign({}, root.expandedStates);
states[groupDelegateItem.instanceIdRef] = expanded;
root.expandedStates = states;
}
onDuplicateRequested: SettingsData.duplicateDesktopWidgetInstance(groupDelegateItem.instanceIdRef)
onDeleteRequested: {
SettingsData.removeDesktopWidgetInstance(groupDelegateItem.instanceIdRef);
ToastService.showInfo(I18n.tr("Widget removed"));
}
}
MouseArea {
id: groupDragArea
anchors.left: parent.left
anchors.top: parent.top
width: 40
height: 50
hoverEnabled: true
cursorShape: Qt.SizeVerCursor
drag.target: groupDelegateItem.held ? groupDelegateItem : undefined
drag.axis: Drag.YAxis
preventStealing: true
onPressed: {
groupDelegateItem.z = 2;
groupDelegateItem.originalY = groupDelegateItem.y;
}
onReleased: {
groupDelegateItem.z = 1;
if (!drag.active) {
groupDelegateItem.y = groupDelegateItem.originalY;
return;
}
const spacing = Theme.spacingM;
const itemH = groupDelegateItem.height + spacing;
var newIndex = Math.round(groupDelegateItem.y / itemH);
newIndex = Math.max(0, Math.min(newIndex, groupSection.groupInstances.length - 1));
if (newIndex !== groupDelegateItem.index)
SettingsData.reorderDesktopWidgetInstanceInGroup(groupDelegateItem.instanceIdRef, groupSection.groupId, newIndex);
groupDelegateItem.y = groupDelegateItem.originalY;
}
}
DankIcon {
x: Theme.spacingL - 2
y: Theme.spacingL + (Theme.iconSize / 2) - (size / 2)
name: "drag_indicator"
size: 18
color: Theme.outline
opacity: groupDragArea.containsMouse || groupDragArea.pressed ? 1 : 0.5
}
Behavior on y {
enabled: !groupDragArea.pressed && !groupDragArea.drag.active
NumberAnimation {
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
}
}
}
}
}
Column {
id: ungroupedSection
width: parent.width
spacing: Theme.spacingM
visible: ungroupedInstances.length > 0
readonly property var ungroupedInstances: root.allInstances.filter(inst => {
if (!inst.group)
return true;
return !root.allGroups.some(g => g.id === inst.group);
})
Rectangle {
width: parent.width
height: 44
radius: Theme.cornerRadius
color: Theme.surfaceContainer
visible: root.allGroups.length > 0
Row {
anchors.fill: parent
anchors.leftMargin: Theme.spacingM
anchors.rightMargin: Theme.spacingM
spacing: Theme.spacingS
DankIcon {
name: (root.groupCollapsedStates["_ungrouped"] ?? false) ? "expand_more" : "expand_less"
size: Theme.iconSize
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
DankIcon {
name: "widgets"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Ungrouped")
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: "(" + ungroupedSection.ungroupedInstances.length + ")"
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
anchors.verticalCenter: parent.verticalCenter
}
}
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
var states = Object.assign({}, root.groupCollapsedStates);
states["_ungrouped"] = !(states["_ungrouped"] ?? false);
root.groupCollapsedStates = states;
}
}
}
Column {
width: parent.width
spacing: Theme.spacingM
visible: !(root.groupCollapsedStates["_ungrouped"] ?? false)
leftPadding: root.allGroups.length > 0 ? Theme.spacingM : 0
Repeater {
model: ScriptModel {
objectProp: "id"
values: ungroupedSection.ungroupedInstances
}
Item {
id: ungroupedDelegateItem
required property var modelData
required property int index
property bool held: ungroupedDragArea.pressed
property real originalY: y
readonly property string instanceIdRef: modelData.id
readonly property var liveInstanceData: {
const instances = root.allInstances;
return instances.find(inst => inst.id === instanceIdRef) ?? modelData;
}
width: ungroupedSection.width - (root.allGroups.length > 0 ? Theme.spacingM : 0)
height: ungroupedCard.height
z: held ? 2 : 1
DesktopWidgetInstanceCard {
id: ungroupedCard
width: parent.width
headerLeftPadding: 20
instanceData: ungroupedDelegateItem.liveInstanceData
isExpanded: root.expandedStates[ungroupedDelegateItem.instanceIdRef] ?? false
onExpandedChanged: {
if (expanded === (root.expandedStates[ungroupedDelegateItem.instanceIdRef] ?? false))
return;
var states = Object.assign({}, root.expandedStates);
states[ungroupedDelegateItem.instanceIdRef] = expanded;
root.expandedStates = states;
}
onDuplicateRequested: SettingsData.duplicateDesktopWidgetInstance(ungroupedDelegateItem.instanceIdRef)
onDeleteRequested: {
SettingsData.removeDesktopWidgetInstance(ungroupedDelegateItem.instanceIdRef);
ToastService.showInfo(I18n.tr("Widget removed"));
}
}
MouseArea {
id: ungroupedDragArea
anchors.left: parent.left
anchors.top: parent.top
width: 40
height: 50
hoverEnabled: true
cursorShape: Qt.SizeVerCursor
drag.target: ungroupedDelegateItem.held ? ungroupedDelegateItem : undefined
drag.axis: Drag.YAxis
preventStealing: true
onPressed: {
ungroupedDelegateItem.z = 2;
ungroupedDelegateItem.originalY = ungroupedDelegateItem.y;
}
onReleased: {
ungroupedDelegateItem.z = 1;
if (!drag.active) {
ungroupedDelegateItem.y = ungroupedDelegateItem.originalY;
return;
}
const spacing = Theme.spacingM;
const itemH = ungroupedDelegateItem.height + spacing;
var newIndex = Math.round(ungroupedDelegateItem.y / itemH);
newIndex = Math.max(0, Math.min(newIndex, ungroupedSection.ungroupedInstances.length - 1));
if (newIndex !== ungroupedDelegateItem.index)
SettingsData.reorderDesktopWidgetInstanceInGroup(ungroupedDelegateItem.instanceIdRef, null, newIndex);
ungroupedDelegateItem.y = ungroupedDelegateItem.originalY;
}
}
DankIcon {
x: Theme.spacingL - 2
y: Theme.spacingL + (Theme.iconSize / 2) - (size / 2)
name: "drag_indicator"
size: 18
color: Theme.outline
opacity: ungroupedDragArea.containsMouse || ungroupedDragArea.pressed ? 1 : 0.5
}
Behavior on y {
enabled: !ungroupedDragArea.pressed && !ungroupedDragArea.drag.active
NumberAnimation {
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
} }
} }
} }
} }
StyledText { StyledText {
visible: SettingsData.desktopWidgetInstances.length === 0 visible: root.allInstances.length === 0
text: I18n.tr("No widgets added. Click \"Add Widget\" to get started.") text: I18n.tr("No widgets added. Click \"Add Widget\" to get started.")
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceVariantText color: Theme.surfaceVariantText

View File

@@ -19,6 +19,7 @@ StyledRect {
property string iconName: "" property string iconName: ""
property bool collapsible: false property bool collapsible: false
property bool expanded: true property bool expanded: true
property real headerLeftPadding: 0
default property alias content: contentColumn.children default property alias content: contentColumn.children
property alias headerActions: headerActionsRow.children property alias headerActions: headerActionsRow.children
@@ -115,6 +116,7 @@ StyledRect {
Row { Row {
anchors.left: parent.left anchors.left: parent.left
anchors.leftMargin: root.headerLeftPadding
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
spacing: Theme.spacingM spacing: Theme.spacingM

View File

@@ -11,7 +11,7 @@ Singleton {
id: root id: root
readonly property string currentVersion: "1.2" readonly property string currentVersion: "1.2"
readonly property bool changelogEnabled: false readonly property bool changelogEnabled: true
readonly property string configDir: Paths.strip(StandardPaths.writableLocation(StandardPaths.ConfigLocation)) + "/DankMaterialShell" readonly property string configDir: Paths.strip(StandardPaths.writableLocation(StandardPaths.ConfigLocation)) + "/DankMaterialShell"
readonly property string changelogMarkerPath: configDir + "/.changelog-" + currentVersion readonly property string changelogMarkerPath: configDir + "/.changelog-" + currentVersion
@@ -37,7 +37,27 @@ Singleton {
Component.onCompleted: { Component.onCompleted: {
if (!changelogEnabled) if (!changelogEnabled)
return; return;
changelogCheckProcess.running = true; if (FirstLaunchService.checkComplete)
handleFirstLaunchResult();
}
function handleFirstLaunchResult() {
if (FirstLaunchService.isFirstLaunch) {
checkComplete = true;
changelogDismissed = true;
touchMarkerProcess.running = true;
} else {
changelogCheckProcess.running = true;
}
}
Connections {
target: FirstLaunchService
function onCheckCompleteChanged() {
if (FirstLaunchService.checkComplete && root.changelogEnabled && !root.checkComplete)
root.handleFirstLaunchResult();
}
} }
function showChangelog() { function showChangelog() {
@@ -66,9 +86,7 @@ Singleton {
root.changelogDismissed = true; root.changelogDismissed = true;
break; break;
case "show": case "show":
if (typeof FirstLaunchService === "undefined" || !FirstLaunchService.isFirstLaunch) { root.changelogRequested();
root.changelogRequested();
}
break; break;
} }
} }

View File

@@ -74,12 +74,10 @@ Singleton {
stdout: SplitParser { stdout: SplitParser {
onRead: data => { onRead: data => {
const result = data.trim(); const result = data.trim();
root.checkComplete = true;
if (result === "first") { if (result === "first") {
root.isFirstLaunch = true; root.isFirstLaunch = true;
console.info("FirstLaunchService: First launch detected, greeter will be shown"); console.info("FirstLaunchService: First launch detected, greeter will be shown");
root.greeterRequested();
} else if (result === "existing_user") { } else if (result === "existing_user") {
root.isFirstLaunch = false; root.isFirstLaunch = false;
console.info("FirstLaunchService: Existing user detected, silently creating marker"); console.info("FirstLaunchService: Existing user detected, silently creating marker");
@@ -87,6 +85,11 @@ Singleton {
} else { } else {
root.isFirstLaunch = false; root.isFirstLaunch = false;
} }
root.checkComplete = true;
if (root.isFirstLaunch)
root.greeterRequested();
} }
} }
} }

View File

@@ -501,8 +501,12 @@ Singleton {
return Actions.buildSpawnAction(command, args); return Actions.buildSpawnAction(command, args);
} }
function buildShellAction(shellCmd) { function buildShellAction(shellCmd, shell) {
return Actions.buildShellAction(currentProvider, shellCmd); return Actions.buildShellAction(currentProvider, shellCmd, shell);
}
function getShellFromAction(action) {
return Actions.getShellFromAction(action);
} }
function parseSpawnCommand(action) { function parseSpawnCommand(action) {

View File

@@ -32,7 +32,6 @@ Singleton {
property int maxIngressPerSecond: 20 property int maxIngressPerSecond: 20
property double _lastIngressSec: 0 property double _lastIngressSec: 0
property int _ingressCountThisSec: 0 property int _ingressCountThisSec: 0
property int maxStoredNotifications: SettingsData.notificationHistoryMaxCount
property var _dismissQueue: [] property var _dismissQueue: []
property int _dismissBatchSize: 8 property int _dismissBatchSize: 8
@@ -340,30 +339,6 @@ Singleton {
historyFileView.writeAdapter(); historyFileView.writeAdapter();
} }
function _trimStored() {
if (notifications.length > maxStoredNotifications) {
const overflow = notifications.length - maxStoredNotifications;
const toDrop = [];
for (var i = notifications.length - 1; i >= 0 && toDrop.length < overflow; --i) {
const w = notifications[i];
if (w && w.notification && w.urgency !== NotificationUrgency.Critical) {
toDrop.push(w);
}
}
for (var i = notifications.length - 1; i >= 0 && toDrop.length < overflow; --i) {
const w = notifications[i];
if (w && w.notification && toDrop.indexOf(w) === -1) {
toDrop.push(w);
}
}
for (const w of toDrop) {
try {
w.notification.dismiss();
} catch (e) {}
}
}
}
function onOverlayOpen() { function onOverlayOpen() {
popupsDisabled = true; popupsDisabled = true;
addGate.stop(); addGate.stop();
@@ -493,7 +468,6 @@ Singleton {
root.allWrappers.push(wrapper); root.allWrappers.push(wrapper);
if (!isTransient) { if (!isTransient) {
root.notifications.push(wrapper); root.notifications.push(wrapper);
_trimStored();
if (_shouldSaveToHistory(notif.urgency)) { if (_shouldSaveToHistory(notif.urgency)) {
root.addToHistory(wrapper); root.addToHistory(wrapper);
} }
@@ -529,10 +503,8 @@ Singleton {
readonly property Timer timer: Timer { readonly property Timer timer: Timer {
interval: { interval: {
if (!wrapper.notification) { if (!wrapper.notification)
return 5000; return 5000;
}
switch (wrapper.notification.urgency) { switch (wrapper.notification.urgency) {
case NotificationUrgency.Low: case NotificationUrgency.Low:
return SettingsData.notificationTimeoutLow; return SettingsData.notificationTimeoutLow;
@@ -601,37 +573,38 @@ Singleton {
} }
required property Notification notification required property Notification notification
readonly property string summary: notification.summary readonly property string summary: notification?.summary ?? ""
readonly property string body: notification.body readonly property string body: notification?.body ?? ""
readonly property string htmlBody: { readonly property string htmlBody: {
if (body && (body.includes('<') && body.includes('>'))) { if (!body)
return "";
if (body.includes('<') && body.includes('>'))
return body; return body;
}
return Markdown2Html.markdownToHtml(body); return Markdown2Html.markdownToHtml(body);
} }
readonly property string appIcon: notification.appIcon readonly property string appIcon: notification?.appIcon ?? ""
readonly property string appName: { readonly property string appName: {
if (!notification)
return "app";
if (notification.appName == "") { if (notification.appName == "") {
const entry = DesktopEntries.heuristicLookup(notification.desktopEntry); const entry = DesktopEntries.heuristicLookup(notification.desktopEntry);
if (entry && entry.name) { if (entry && entry.name)
return entry.name.toLowerCase(); return entry.name.toLowerCase();
}
} }
return notification.appName || "app"; return notification.appName || "app";
} }
readonly property string desktopEntry: notification.desktopEntry readonly property string desktopEntry: notification?.desktopEntry ?? ""
readonly property string image: notification.image readonly property string image: notification?.image ?? ""
readonly property string cleanImage: { readonly property string cleanImage: {
if (!image) { if (!image)
return ""; return "";
}
return Paths.strip(image); return Paths.strip(image);
} }
readonly property int urgency: notification.urgency readonly property int urgency: notification?.urgency ?? 1
readonly property list<NotificationAction> actions: notification.actions readonly property list<NotificationAction> actions: notification?.actions ?? []
readonly property Connections conn: Connections { readonly property Connections conn: Connections {
target: wrapper.notification.Retainable target: wrapper.notification?.Retainable ?? null
function onDropped(): void { function onDropped(): void {
root.allWrappers = root.allWrappers.filter(w => w !== wrapper); root.allWrappers = root.allWrappers.filter(w => w !== wrapper);
@@ -743,6 +716,8 @@ Singleton {
} }
const next = notificationQueue.shift(); const next = notificationQueue.shift();
if (!next)
return;
next.seq = ++seqCounter; next.seq = ++seqCounter;
visibleNotifications = [...visibleNotifications, next]; visibleNotifications = [...visibleNotifications, next];
@@ -805,7 +780,7 @@ Singleton {
const groups = {}; const groups = {};
for (const notif of notifications) { for (const notif of notifications) {
if (!notif) if (!notif || !notif.notification)
continue; continue;
const groupKey = getGroupKey(notif); const groupKey = getGroupKey(notif);
if (!groups[groupKey]) { if (!groups[groupKey]) {
@@ -823,14 +798,15 @@ Singleton {
groups[groupKey].latestNotification = groups[groupKey].notifications[0]; groups[groupKey].latestNotification = groups[groupKey].notifications[0];
groups[groupKey].count = groups[groupKey].notifications.length; groups[groupKey].count = groups[groupKey].notifications.length;
if (notif.notification.hasInlineReply) { if (notif.notification?.hasInlineReply)
groups[groupKey].hasInlineReply = true; groups[groupKey].hasInlineReply = true;
}
} }
return Object.values(groups).sort((a, b) => { return Object.values(groups).sort((a, b) => {
const aUrgency = a.latestNotification.urgency || NotificationUrgency.Low; if (!a.latestNotification || !b.latestNotification)
const bUrgency = b.latestNotification.urgency || NotificationUrgency.Low; return 0;
const aUrgency = a.latestNotification.urgency ?? NotificationUrgency.Low;
const bUrgency = b.latestNotification.urgency ?? NotificationUrgency.Low;
if (aUrgency !== bUrgency) { if (aUrgency !== bUrgency) {
return bUrgency - aUrgency; return bUrgency - aUrgency;
} }
@@ -842,7 +818,7 @@ Singleton {
const groups = {}; const groups = {};
for (const notif of popups) { for (const notif of popups) {
if (!notif) if (!notif || !notif.notification)
continue; continue;
const groupKey = getGroupKey(notif); const groupKey = getGroupKey(notif);
if (!groups[groupKey]) { if (!groups[groupKey]) {
@@ -860,12 +836,13 @@ Singleton {
groups[groupKey].latestNotification = groups[groupKey].notifications[0]; groups[groupKey].latestNotification = groups[groupKey].notifications[0];
groups[groupKey].count = groups[groupKey].notifications.length; groups[groupKey].count = groups[groupKey].notifications.length;
if (notif.notification.hasInlineReply) { if (notif.notification?.hasInlineReply)
groups[groupKey].hasInlineReply = true; groups[groupKey].hasInlineReply = true;
}
} }
return Object.values(groups).sort((a, b) => { return Object.values(groups).sort((a, b) => {
if (!a.latestNotification || !b.latestNotification)
return 0;
return b.latestNotification.time.getTime() - a.latestNotification.time.getTime(); return b.latestNotification.time.getTime() - a.latestNotification.time.getTime();
}); });
} }

View File

@@ -1 +1 @@
v1.2-unstable v1.2.0

View File

@@ -34,7 +34,10 @@ Image {
return; return;
} }
Paths.mkdir(Paths.imagecache); Paths.mkdir(Paths.imagecache);
source = cachePath || encodedImagePath; const hash = djb2Hash(imagePath);
const cPath = hash ? `${Paths.stringify(Paths.imagecache)}/${hash}@${maxCacheSize}x${maxCacheSize}.png` : "";
const encoded = "file://" + imagePath.split('/').map(s => encodeURIComponent(s)).join('/');
source = cPath || encoded;
} }
onStatusChanged: { onStatusChanged: {

View File

@@ -94,10 +94,10 @@ Flow {
border.color: "transparent" border.color: "transparent"
border.width: 0 border.width: 0
topLeftRadius: (visualFirst || selected) ? Theme.cornerRadius : 4 topLeftRadius: (visualFirst || selected) ? Theme.cornerRadius : Math.min(4, Theme.cornerRadius)
bottomLeftRadius: (visualFirst || selected) ? Theme.cornerRadius : 4 bottomLeftRadius: (visualFirst || selected) ? Theme.cornerRadius : Math.min(4, Theme.cornerRadius)
topRightRadius: (visualLast || selected) ? Theme.cornerRadius : 4 topRightRadius: (visualLast || selected) ? Theme.cornerRadius : Math.min(4, Theme.cornerRadius)
bottomRightRadius: (visualLast || selected) ? Theme.cornerRadius : 4 bottomRightRadius: (visualLast || selected) ? Theme.cornerRadius : Math.min(4, Theme.cornerRadius)
Behavior on width { Behavior on width {
enabled: root.userInteracted enabled: root.userInteracted

View File

@@ -1273,6 +1273,7 @@ Item {
spacing: Theme.spacingM spacing: Theme.spacingM
RowLayout { RowLayout {
visible: optionsRow.argConfig?.base !== "screenshot-window"
spacing: Theme.spacingXS spacing: Theme.spacingXS
DankToggle { DankToggle {
@@ -1441,8 +1442,9 @@ Item {
onTextChanged: { onTextChanged: {
if (root._actionType !== "shell") if (root._actionType !== "shell")
return; return;
var shell = Actions.getShellFromAction(root.editAction);
root.updateEdit({ root.updateEdit({
"action": Actions.buildShellAction(KeybindsService.currentProvider, text) "action": Actions.buildShellAction(KeybindsService.currentProvider, text, shell)
}); });
} }
} }

View File

@@ -1,3 +1,4 @@
[templates.dmsmango] [templates.dmsmango]
input_path = 'SHELL_DIR/matugen/templates/mango-colors.conf' input_path = 'SHELL_DIR/matugen/templates/mango-colors.conf'
output_path = 'CONFIG_DIR/mango/dms/colors.conf' output_path = 'CONFIG_DIR/mango/dms/colors.conf'
post_hook = 'sh -c "mmsg -d reload_config 2>&1 || true"'

File diff suppressed because it is too large Load Diff

View File

@@ -239,6 +239,9 @@
"All displays": { "All displays": {
"All displays": "Todas las pantallas" "All displays": "Todas las pantallas"
}, },
"Allow clicks to pass through the widget": {
"Allow clicks to pass through the widget": ""
},
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": { "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Atrás • F1/I: Información del archivo • F10: Ayuda • Esc: Cerrar+" "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Atrás • F1/I: Información del archivo • F10: Ayuda • Esc: Cerrar+"
}, },
@@ -275,6 +278,9 @@
"Anonymous Identity (optional)": { "Anonymous Identity (optional)": {
"Anonymous Identity (optional)": "Identidad anónima (opcional)" "Anonymous Identity (optional)": "Identidad anónima (opcional)"
}, },
"App ID Substitutions": {
"App ID Substitutions": ""
},
"App Launcher": { "App Launcher": {
"App Launcher": "Lanzador de aplicaciones" "App Launcher": "Lanzador de aplicaciones"
}, },
@@ -722,6 +728,9 @@
"Click Import to add a .ovpn or .conf": { "Click Import to add a .ovpn or .conf": {
"Click Import to add a .ovpn or .conf": "Clic en importar para añadir un archivo .ovpn o .conf" "Click Import to add a .ovpn or .conf": "Clic en importar para añadir un archivo .ovpn o .conf"
}, },
"Click Through": {
"Click Through": ""
},
"Click any shortcut to edit. Changes save to %1": { "Click any shortcut to edit. Changes save to %1": {
"Click any shortcut to edit. Changes save to %1": "" "Click any shortcut to edit. Changes save to %1": ""
}, },
@@ -1787,6 +1796,9 @@
"Grid Columns": { "Grid Columns": {
"Grid Columns": "Columnas de cuadrícula" "Grid Columns": "Columnas de cuadrícula"
}, },
"Group": {
"Group": ""
},
"Group Workspace Apps": { "Group Workspace Apps": {
"Group Workspace Apps": "Aplicaciones del espacio de trabajo en grupo" "Group Workspace Apps": "Aplicaciones del espacio de trabajo en grupo"
}, },
@@ -1796,9 +1808,15 @@
"Group multiple windows of the same app together with a window count indicator": { "Group multiple windows of the same app together with a window count indicator": {
"Group multiple windows of the same app together with a window count indicator": "Mostrar número de ventanas agrupadas en el icono de la aplicación" "Group multiple windows of the same app together with a window count indicator": "Mostrar número de ventanas agrupadas en el icono de la aplicación"
}, },
"Group removed": {
"Group removed": ""
},
"Group repeated application icons in unfocused workspaces": { "Group repeated application icons in unfocused workspaces": {
"Group repeated application icons in unfocused workspaces": "Agrupar iconos de aplicaciones repetidos en espacios de trabajo desenfocados" "Group repeated application icons in unfocused workspaces": "Agrupar iconos de aplicaciones repetidos en espacios de trabajo desenfocados"
}, },
"Groups": {
"Groups": ""
},
"HDR (EDID)": { "HDR (EDID)": {
"HDR (EDID)": "HDR (EDID)" "HDR (EDID)": "HDR (EDID)"
}, },
@@ -2195,6 +2213,9 @@
"Manual Show/Hide": { "Manual Show/Hide": {
"Manual Show/Hide": "Mostrar/Ocultar manualmente" "Manual Show/Hide": "Mostrar/Ocultar manualmente"
}, },
"Map window class names to icon names for proper icon display": {
"Map window class names to icon names for proper icon display": ""
},
"Margin": { "Margin": {
"Margin": "Margen" "Margin": "Margen"
}, },
@@ -2417,6 +2438,9 @@
"New York, NY": { "New York, NY": {
"New York, NY": "New York, NY" "New York, NY": "New York, NY"
}, },
"New group name...": {
"New group name...": ""
},
"Next Transition": { "Next Transition": {
"Next Transition": "Siguiente transicion" "Next Transition": "Siguiente transicion"
}, },
@@ -2648,6 +2672,9 @@
"Options": { "Options": {
"Options": "Opciones" "Options": "Opciones"
}, },
"Organize widgets into collapsible groups": {
"Organize widgets into collapsible groups": ""
},
"Other": { "Other": {
"Other": "Otro" "Other": "Otro"
}, },
@@ -2720,6 +2747,9 @@
"Password": { "Password": {
"Password": "Contraseña" "Password": "Contraseña"
}, },
"Pattern": {
"Pattern": ""
},
"Pause": { "Pause": {
"Pause": "Pausar" "Pause": "Pausar"
}, },
@@ -2981,6 +3011,9 @@
"Repeat": { "Repeat": {
"Repeat": "" "Repeat": ""
}, },
"Replacement": {
"Replacement": ""
},
"Report": { "Report": {
"Report": "Reporte" "Report": "Reporte"
}, },
@@ -3614,6 +3647,9 @@
"Sync Mode with Portal": { "Sync Mode with Portal": {
"Sync Mode with Portal": "Sincronizar modo con los portales" "Sync Mode with Portal": "Sincronizar modo con los portales"
}, },
"Sync Position Across Screens": {
"Sync Position Across Screens": ""
},
"Sync dark mode with settings portals for system-wide theme hints": { "Sync dark mode with settings portals for system-wide theme hints": {
"Sync dark mode with settings portals for system-wide theme hints": "Sincronizar el tema oscuro con las preferencias globales del sistema" "Sync dark mode with settings portals for system-wide theme hints": "Sincronizar el tema oscuro con las preferencias globales del sistema"
}, },
@@ -3839,6 +3875,9 @@
"Unfocused Color": { "Unfocused Color": {
"Unfocused Color": "" "Unfocused Color": ""
}, },
"Ungrouped": {
"Ungrouped": ""
},
"Uninstall Plugin": { "Uninstall Plugin": {
"Uninstall Plugin": "Desinstalar complemento" "Uninstall Plugin": "Desinstalar complemento"
}, },
@@ -3938,9 +3977,15 @@
"Use light theme instead of dark theme": { "Use light theme instead of dark theme": {
"Use light theme instead of dark theme": "Usar tema claro en lugar del tema oscuro" "Use light theme instead of dark theme": "Usar tema claro en lugar del tema oscuro"
}, },
"Use smaller notification cards": {
"Use smaller notification cards": ""
},
"Use sound theme from system settings": { "Use sound theme from system settings": {
"Use sound theme from system settings": "Usar tema de sonidos del sistema" "Use sound theme from system settings": "Usar tema de sonidos del sistema"
}, },
"Use the same position and size on all displays": {
"Use the same position and size on all displays": ""
},
"Use trigger prefix to activate": { "Use trigger prefix to activate": {
"Use trigger prefix to activate": "" "Use trigger prefix to activate": ""
}, },

View File

@@ -239,6 +239,9 @@
"All displays": { "All displays": {
"All displays": "همه نمایشگر‌ها" "All displays": "همه نمایشگر‌ها"
}, },
"Allow clicks to pass through the widget": {
"Allow clicks to pass through the widget": ""
},
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": { "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: بازگشت • F1/I: اطلاعات فایل • F10: راهنما • Esc: بستن" "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: بازگشت • F1/I: اطلاعات فایل • F10: راهنما • Esc: بستن"
}, },
@@ -275,6 +278,9 @@
"Anonymous Identity (optional)": { "Anonymous Identity (optional)": {
"Anonymous Identity (optional)": "هویت ناشناس (اختیاری)" "Anonymous Identity (optional)": "هویت ناشناس (اختیاری)"
}, },
"App ID Substitutions": {
"App ID Substitutions": ""
},
"App Launcher": { "App Launcher": {
"App Launcher": "لانچر برنامه" "App Launcher": "لانچر برنامه"
}, },
@@ -722,6 +728,9 @@
"Click Import to add a .ovpn or .conf": { "Click Import to add a .ovpn or .conf": {
"Click Import to add a .ovpn or .conf": "برای افزودن یک فایل .conf یا .ovpn کلیک کنید" "Click Import to add a .ovpn or .conf": "برای افزودن یک فایل .conf یا .ovpn کلیک کنید"
}, },
"Click Through": {
"Click Through": ""
},
"Click any shortcut to edit. Changes save to %1": { "Click any shortcut to edit. Changes save to %1": {
"Click any shortcut to edit. Changes save to %1": "" "Click any shortcut to edit. Changes save to %1": ""
}, },
@@ -1787,6 +1796,9 @@
"Grid Columns": { "Grid Columns": {
"Grid Columns": "ستون‌های جدول" "Grid Columns": "ستون‌های جدول"
}, },
"Group": {
"Group": ""
},
"Group Workspace Apps": { "Group Workspace Apps": {
"Group Workspace Apps": "گروه‌بندی برنامه‌های workspace" "Group Workspace Apps": "گروه‌بندی برنامه‌های workspace"
}, },
@@ -1796,9 +1808,15 @@
"Group multiple windows of the same app together with a window count indicator": { "Group multiple windows of the same app together with a window count indicator": {
"Group multiple windows of the same app together with a window count indicator": "گروه‌بندی چندین پنجره از برنامه یکسان با نشانگر تعداد پنجره‌ها" "Group multiple windows of the same app together with a window count indicator": "گروه‌بندی چندین پنجره از برنامه یکسان با نشانگر تعداد پنجره‌ها"
}, },
"Group removed": {
"Group removed": ""
},
"Group repeated application icons in unfocused workspaces": { "Group repeated application icons in unfocused workspaces": {
"Group repeated application icons in unfocused workspaces": "برنامه‌های تکرارشده در workspaceهای فوکوس نشده را گروه‌بندی کن" "Group repeated application icons in unfocused workspaces": "برنامه‌های تکرارشده در workspaceهای فوکوس نشده را گروه‌بندی کن"
}, },
"Groups": {
"Groups": ""
},
"HDR (EDID)": { "HDR (EDID)": {
"HDR (EDID)": "HDR (EDID)" "HDR (EDID)": "HDR (EDID)"
}, },
@@ -2195,6 +2213,9 @@
"Manual Show/Hide": { "Manual Show/Hide": {
"Manual Show/Hide": "نمایش/پنهان دستی" "Manual Show/Hide": "نمایش/پنهان دستی"
}, },
"Map window class names to icon names for proper icon display": {
"Map window class names to icon names for proper icon display": ""
},
"Margin": { "Margin": {
"Margin": "فاصله بیرونی" "Margin": "فاصله بیرونی"
}, },
@@ -2417,6 +2438,9 @@
"New York, NY": { "New York, NY": {
"New York, NY": "New York, NY" "New York, NY": "New York, NY"
}, },
"New group name...": {
"New group name...": ""
},
"Next Transition": { "Next Transition": {
"Next Transition": "گذار بعدی" "Next Transition": "گذار بعدی"
}, },
@@ -2648,6 +2672,9 @@
"Options": { "Options": {
"Options": "گزینه‌ها" "Options": "گزینه‌ها"
}, },
"Organize widgets into collapsible groups": {
"Organize widgets into collapsible groups": ""
},
"Other": { "Other": {
"Other": "دیگر" "Other": "دیگر"
}, },
@@ -2720,6 +2747,9 @@
"Password": { "Password": {
"Password": "گذرواژه" "Password": "گذرواژه"
}, },
"Pattern": {
"Pattern": ""
},
"Pause": { "Pause": {
"Pause": "توقف" "Pause": "توقف"
}, },
@@ -2981,6 +3011,9 @@
"Repeat": { "Repeat": {
"Repeat": "" "Repeat": ""
}, },
"Replacement": {
"Replacement": ""
},
"Report": { "Report": {
"Report": "گزارش" "Report": "گزارش"
}, },
@@ -3614,6 +3647,9 @@
"Sync Mode with Portal": { "Sync Mode with Portal": {
"Sync Mode with Portal": "همگام‌سازی حالت با پورتال" "Sync Mode with Portal": "همگام‌سازی حالت با پورتال"
}, },
"Sync Position Across Screens": {
"Sync Position Across Screens": ""
},
"Sync dark mode with settings portals for system-wide theme hints": { "Sync dark mode with settings portals for system-wide theme hints": {
"Sync dark mode with settings portals for system-wide theme hints": "همگام‌سازی حالت تاریک با پورتال سیستم برای هماهنگی تم در سطح سیستم" "Sync dark mode with settings portals for system-wide theme hints": "همگام‌سازی حالت تاریک با پورتال سیستم برای هماهنگی تم در سطح سیستم"
}, },
@@ -3839,6 +3875,9 @@
"Unfocused Color": { "Unfocused Color": {
"Unfocused Color": "" "Unfocused Color": ""
}, },
"Ungrouped": {
"Ungrouped": ""
},
"Uninstall Plugin": { "Uninstall Plugin": {
"Uninstall Plugin": "حذف افزونه" "Uninstall Plugin": "حذف افزونه"
}, },
@@ -3938,9 +3977,15 @@
"Use light theme instead of dark theme": { "Use light theme instead of dark theme": {
"Use light theme instead of dark theme": "استفاده از تم روشن به جای تم تاریک" "Use light theme instead of dark theme": "استفاده از تم روشن به جای تم تاریک"
}, },
"Use smaller notification cards": {
"Use smaller notification cards": ""
},
"Use sound theme from system settings": { "Use sound theme from system settings": {
"Use sound theme from system settings": "استفاده از تم صدا در تنظیمات سیستم" "Use sound theme from system settings": "استفاده از تم صدا در تنظیمات سیستم"
}, },
"Use the same position and size on all displays": {
"Use the same position and size on all displays": ""
},
"Use trigger prefix to activate": { "Use trigger prefix to activate": {
"Use trigger prefix to activate": "" "Use trigger prefix to activate": ""
}, },

View File

@@ -239,6 +239,9 @@
"All displays": { "All displays": {
"All displays": "כל המסכים" "All displays": "כל המסכים"
}, },
"Allow clicks to pass through the widget": {
"Allow clicks to pass through the widget": ""
},
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": { "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: חזרה • F1/I: מידע על הקובץ • F10: עזרה • Esc: סגירה" "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: חזרה • F1/I: מידע על הקובץ • F10: עזרה • Esc: סגירה"
}, },
@@ -275,6 +278,9 @@
"Anonymous Identity (optional)": { "Anonymous Identity (optional)": {
"Anonymous Identity (optional)": "זהות אנונימית (אופציונלי)" "Anonymous Identity (optional)": "זהות אנונימית (אופציונלי)"
}, },
"App ID Substitutions": {
"App ID Substitutions": ""
},
"App Launcher": { "App Launcher": {
"App Launcher": "משגר אפליקציות" "App Launcher": "משגר אפליקציות"
}, },
@@ -549,7 +555,7 @@
"Bottom Section": "קטע תחתון" "Bottom Section": "קטע תחתון"
}, },
"Bottom dock for pinned and running applications": { "Bottom dock for pinned and running applications": {
"Bottom dock for pinned and running applications": "Dock תחתון לאפליקציות נעוצות ופעילות" "Bottom dock for pinned and running applications": "הצגת Dock תחתון לאפליקציות נעוצות ופעילות"
}, },
"Brightness": { "Brightness": {
"Brightness": "בהירות" "Brightness": "בהירות"
@@ -722,6 +728,9 @@
"Click Import to add a .ovpn or .conf": { "Click Import to add a .ovpn or .conf": {
"Click Import to add a .ovpn or .conf": "לחץ/י על ייבוא כדי להוסיף קובץ ovpn. או conf." "Click Import to add a .ovpn or .conf": "לחץ/י על ייבוא כדי להוסיף קובץ ovpn. או conf."
}, },
"Click Through": {
"Click Through": ""
},
"Click any shortcut to edit. Changes save to %1": { "Click any shortcut to edit. Changes save to %1": {
"Click any shortcut to edit. Changes save to %1": "" "Click any shortcut to edit. Changes save to %1": ""
}, },
@@ -1787,6 +1796,9 @@
"Grid Columns": { "Grid Columns": {
"Grid Columns": "עמודות רשת" "Grid Columns": "עמודות רשת"
}, },
"Group": {
"Group": ""
},
"Group Workspace Apps": { "Group Workspace Apps": {
"Group Workspace Apps": "" "Group Workspace Apps": ""
}, },
@@ -1796,9 +1808,15 @@
"Group multiple windows of the same app together with a window count indicator": { "Group multiple windows of the same app together with a window count indicator": {
"Group multiple windows of the same app together with a window count indicator": "קבץ/י מספר חלונות של אותה אפליקציה יחד עם מונה חלונות" "Group multiple windows of the same app together with a window count indicator": "קבץ/י מספר חלונות של אותה אפליקציה יחד עם מונה חלונות"
}, },
"Group removed": {
"Group removed": ""
},
"Group repeated application icons in unfocused workspaces": { "Group repeated application icons in unfocused workspaces": {
"Group repeated application icons in unfocused workspaces": "" "Group repeated application icons in unfocused workspaces": ""
}, },
"Groups": {
"Groups": ""
},
"HDR (EDID)": { "HDR (EDID)": {
"HDR (EDID)": "" "HDR (EDID)": ""
}, },
@@ -2195,6 +2213,9 @@
"Manual Show/Hide": { "Manual Show/Hide": {
"Manual Show/Hide": "הצגה/הסתרה ידנית" "Manual Show/Hide": "הצגה/הסתרה ידנית"
}, },
"Map window class names to icon names for proper icon display": {
"Map window class names to icon names for proper icon display": ""
},
"Margin": { "Margin": {
"Margin": "שוליים" "Margin": "שוליים"
}, },
@@ -2417,6 +2438,9 @@
"New York, NY": { "New York, NY": {
"New York, NY": "ניו יורק, ניו יורק" "New York, NY": "ניו יורק, ניו יורק"
}, },
"New group name...": {
"New group name...": ""
},
"Next Transition": { "Next Transition": {
"Next Transition": "" "Next Transition": ""
}, },
@@ -2648,6 +2672,9 @@
"Options": { "Options": {
"Options": "" "Options": ""
}, },
"Organize widgets into collapsible groups": {
"Organize widgets into collapsible groups": ""
},
"Other": { "Other": {
"Other": "אחר" "Other": "אחר"
}, },
@@ -2720,6 +2747,9 @@
"Password": { "Password": {
"Password": "סיסמה" "Password": "סיסמה"
}, },
"Pattern": {
"Pattern": ""
},
"Pause": { "Pause": {
"Pause": "השהיה" "Pause": "השהיה"
}, },
@@ -2981,6 +3011,9 @@
"Repeat": { "Repeat": {
"Repeat": "" "Repeat": ""
}, },
"Replacement": {
"Replacement": ""
},
"Report": { "Report": {
"Report": "דיווח" "Report": "דיווח"
}, },
@@ -3614,6 +3647,9 @@
"Sync Mode with Portal": { "Sync Mode with Portal": {
"Sync Mode with Portal": "סנכרון מצב עם הפורטל" "Sync Mode with Portal": "סנכרון מצב עם הפורטל"
}, },
"Sync Position Across Screens": {
"Sync Position Across Screens": ""
},
"Sync dark mode with settings portals for system-wide theme hints": { "Sync dark mode with settings portals for system-wide theme hints": {
"Sync dark mode with settings portals for system-wide theme hints": "סנכרון מצב כהה עם פורטלי ההגדרות לרמזי ערכת נושא ברמת המערכת" "Sync dark mode with settings portals for system-wide theme hints": "סנכרון מצב כהה עם פורטלי ההגדרות לרמזי ערכת נושא ברמת המערכת"
}, },
@@ -3839,6 +3875,9 @@
"Unfocused Color": { "Unfocused Color": {
"Unfocused Color": "" "Unfocused Color": ""
}, },
"Ungrouped": {
"Ungrouped": ""
},
"Uninstall Plugin": { "Uninstall Plugin": {
"Uninstall Plugin": "הסר/י תוסף" "Uninstall Plugin": "הסר/י תוסף"
}, },
@@ -3938,9 +3977,15 @@
"Use light theme instead of dark theme": { "Use light theme instead of dark theme": {
"Use light theme instead of dark theme": "השתמש/י בערכת נושא בהירה במקום כהה" "Use light theme instead of dark theme": "השתמש/י בערכת נושא בהירה במקום כהה"
}, },
"Use smaller notification cards": {
"Use smaller notification cards": ""
},
"Use sound theme from system settings": { "Use sound theme from system settings": {
"Use sound theme from system settings": "השתמש/י בערכת הצלילים מהגדרות המערכת" "Use sound theme from system settings": "השתמש/י בערכת הצלילים מהגדרות המערכת"
}, },
"Use the same position and size on all displays": {
"Use the same position and size on all displays": ""
},
"Use trigger prefix to activate": { "Use trigger prefix to activate": {
"Use trigger prefix to activate": "" "Use trigger prefix to activate": ""
}, },

View File

@@ -15,7 +15,7 @@
"%1 connected": "%1 csatlakoztatva" "%1 connected": "%1 csatlakoztatva"
}, },
"%1 days ago": { "%1 days ago": {
"%1 days ago": "" "%1 days ago": "%1 nappal ezelőtt"
}, },
"%1 display(s)": { "%1 display(s)": {
"%1 display(s)": "%1 kijelző" "%1 display(s)": "%1 kijelző"
@@ -239,6 +239,9 @@
"All displays": { "All displays": {
"All displays": "Összes kijelző" "All displays": "Összes kijelző"
}, },
"Allow clicks to pass through the widget": {
"Allow clicks to pass through the widget": ""
},
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": { "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Vissza • F1/I: Fájlinfó • F10: Súgó • Esc: Bezárás" "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Vissza • F1/I: Fájlinfó • F10: Súgó • Esc: Bezárás"
}, },
@@ -275,6 +278,9 @@
"Anonymous Identity (optional)": { "Anonymous Identity (optional)": {
"Anonymous Identity (optional)": "Névtelen azonosító (opcionális)" "Anonymous Identity (optional)": "Névtelen azonosító (opcionális)"
}, },
"App ID Substitutions": {
"App ID Substitutions": ""
},
"App Launcher": { "App Launcher": {
"App Launcher": "Alkalmazásindító" "App Launcher": "Alkalmazásindító"
}, },
@@ -722,6 +728,9 @@
"Click Import to add a .ovpn or .conf": { "Click Import to add a .ovpn or .conf": {
"Click Import to add a .ovpn or .conf": "Kattints az importálás gombra .ovpn vagy .conf fájl hozzáadásához" "Click Import to add a .ovpn or .conf": "Kattints az importálás gombra .ovpn vagy .conf fájl hozzáadásához"
}, },
"Click Through": {
"Click Through": ""
},
"Click any shortcut to edit. Changes save to %1": { "Click any shortcut to edit. Changes save to %1": {
"Click any shortcut to edit. Changes save to %1": "" "Click any shortcut to edit. Changes save to %1": ""
}, },
@@ -1787,6 +1796,9 @@
"Grid Columns": { "Grid Columns": {
"Grid Columns": "Rácsos oszlopok" "Grid Columns": "Rácsos oszlopok"
}, },
"Group": {
"Group": ""
},
"Group Workspace Apps": { "Group Workspace Apps": {
"Group Workspace Apps": "" "Group Workspace Apps": ""
}, },
@@ -1796,9 +1808,15 @@
"Group multiple windows of the same app together with a window count indicator": { "Group multiple windows of the same app together with a window count indicator": {
"Group multiple windows of the same app together with a window count indicator": "Ugyanazon alkalmazás több ablakának csoportosítása egy ablakszám jelzővel" "Group multiple windows of the same app together with a window count indicator": "Ugyanazon alkalmazás több ablakának csoportosítása egy ablakszám jelzővel"
}, },
"Group removed": {
"Group removed": ""
},
"Group repeated application icons in unfocused workspaces": { "Group repeated application icons in unfocused workspaces": {
"Group repeated application icons in unfocused workspaces": "" "Group repeated application icons in unfocused workspaces": ""
}, },
"Groups": {
"Groups": ""
},
"HDR (EDID)": { "HDR (EDID)": {
"HDR (EDID)": "HDR (EDID)" "HDR (EDID)": "HDR (EDID)"
}, },
@@ -2195,6 +2213,9 @@
"Manual Show/Hide": { "Manual Show/Hide": {
"Manual Show/Hide": "Manuális megjelenítés/elrejtés" "Manual Show/Hide": "Manuális megjelenítés/elrejtés"
}, },
"Map window class names to icon names for proper icon display": {
"Map window class names to icon names for proper icon display": ""
},
"Margin": { "Margin": {
"Margin": "Margó" "Margin": "Margó"
}, },
@@ -2417,6 +2438,9 @@
"New York, NY": { "New York, NY": {
"New York, NY": "New York, NY" "New York, NY": "New York, NY"
}, },
"New group name...": {
"New group name...": ""
},
"Next Transition": { "Next Transition": {
"Next Transition": "Következő átmenet" "Next Transition": "Következő átmenet"
}, },
@@ -2648,6 +2672,9 @@
"Options": { "Options": {
"Options": "Opciók" "Options": "Opciók"
}, },
"Organize widgets into collapsible groups": {
"Organize widgets into collapsible groups": ""
},
"Other": { "Other": {
"Other": "Egyéb" "Other": "Egyéb"
}, },
@@ -2720,6 +2747,9 @@
"Password": { "Password": {
"Password": "Jelszó" "Password": "Jelszó"
}, },
"Pattern": {
"Pattern": ""
},
"Pause": { "Pause": {
"Pause": "Szüneteltetés" "Pause": "Szüneteltetés"
}, },
@@ -2981,6 +3011,9 @@
"Repeat": { "Repeat": {
"Repeat": "" "Repeat": ""
}, },
"Replacement": {
"Replacement": ""
},
"Report": { "Report": {
"Report": "Jelentés" "Report": "Jelentés"
}, },
@@ -3614,6 +3647,9 @@
"Sync Mode with Portal": { "Sync Mode with Portal": {
"Sync Mode with Portal": "Mód szinkronizálása a portállal" "Sync Mode with Portal": "Mód szinkronizálása a portállal"
}, },
"Sync Position Across Screens": {
"Sync Position Across Screens": ""
},
"Sync dark mode with settings portals for system-wide theme hints": { "Sync dark mode with settings portals for system-wide theme hints": {
"Sync dark mode with settings portals for system-wide theme hints": "Sötét mód szinkronizálása a beállítási portálokkal a rendszer egészére vonatkozó témajavaslatokhoz" "Sync dark mode with settings portals for system-wide theme hints": "Sötét mód szinkronizálása a beállítási portálokkal a rendszer egészére vonatkozó témajavaslatokhoz"
}, },
@@ -3839,6 +3875,9 @@
"Unfocused Color": { "Unfocused Color": {
"Unfocused Color": "" "Unfocused Color": ""
}, },
"Ungrouped": {
"Ungrouped": ""
},
"Uninstall Plugin": { "Uninstall Plugin": {
"Uninstall Plugin": "Bővítmény eltávolítása" "Uninstall Plugin": "Bővítmény eltávolítása"
}, },
@@ -3938,9 +3977,15 @@
"Use light theme instead of dark theme": { "Use light theme instead of dark theme": {
"Use light theme instead of dark theme": "Világos téma használata a sötét helyett" "Use light theme instead of dark theme": "Világos téma használata a sötét helyett"
}, },
"Use smaller notification cards": {
"Use smaller notification cards": ""
},
"Use sound theme from system settings": { "Use sound theme from system settings": {
"Use sound theme from system settings": "Hangtéma használata a rendszerbeállításokból" "Use sound theme from system settings": "Hangtéma használata a rendszerbeállításokból"
}, },
"Use the same position and size on all displays": {
"Use the same position and size on all displays": ""
},
"Use trigger prefix to activate": { "Use trigger prefix to activate": {
"Use trigger prefix to activate": "" "Use trigger prefix to activate": ""
}, },
@@ -4508,7 +4553,7 @@
"No wallpaper selected": "Nincs háttérkép kiválasztva" "No wallpaper selected": "Nincs háttérkép kiválasztva"
}, },
"notification center tab": { "notification center tab": {
"Current": "", "Current": "Jelenlegi",
"History": "Előzmények" "History": "Előzmények"
}, },
"notification history filter": { "notification history filter": {
@@ -4546,7 +4591,7 @@
"Save dismissed notifications to history": "" "Save dismissed notifications to history": ""
}, },
"notification history toggle label": { "notification history toggle label": {
"Enable History": "" "Enable History": "Előzmények engedélyezése"
}, },
"now": { "now": {
"now": "most" "now": "most"

View File

@@ -239,6 +239,9 @@
"All displays": { "All displays": {
"All displays": "Tutti gli schermi" "All displays": "Tutti gli schermi"
}, },
"Allow clicks to pass through the widget": {
"Allow clicks to pass through the widget": ""
},
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": { "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Indietro • F1/I: File Info • F10: Aiuto • Esc: Chiudi" "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Indietro • F1/I: File Info • F10: Aiuto • Esc: Chiudi"
}, },
@@ -275,6 +278,9 @@
"Anonymous Identity (optional)": { "Anonymous Identity (optional)": {
"Anonymous Identity (optional)": "Identità anonima (facoltativa)" "Anonymous Identity (optional)": "Identità anonima (facoltativa)"
}, },
"App ID Substitutions": {
"App ID Substitutions": ""
},
"App Launcher": { "App Launcher": {
"App Launcher": "App Launcher" "App Launcher": "App Launcher"
}, },
@@ -303,7 +309,7 @@
"Apps are ordered by usage frequency, then last used, then alphabetically.": "Le applicazioni sono ordinate per frequenza d'uso, poi per ultimo utilizzo, e infine in ordine alfabetico." "Apps are ordered by usage frequency, then last used, then alphabetically.": "Le applicazioni sono ordinate per frequenza d'uso, poi per ultimo utilizzo, e infine in ordine alfabetico."
}, },
"Arrange displays and configure resolution, refresh rate, and VRR": { "Arrange displays and configure resolution, refresh rate, and VRR": {
"Arrange displays and configure resolution, refresh rate, and VRR": "Disponi gli schermi e configurare risoluzione, frequenza di aggiornamento e VRR" "Arrange displays and configure resolution, refresh rate, and VRR": "Disponi gli schermi e configura risoluzione, frequenza di aggiornamento e VRR"
}, },
"Audio": { "Audio": {
"Audio": "Audio" "Audio": "Audio"
@@ -621,7 +627,7 @@
"Caps Lock": "Blocco Maiuscole" "Caps Lock": "Blocco Maiuscole"
}, },
"Caps Lock Indicator": { "Caps Lock Indicator": {
"Caps Lock Indicator": "Indicatore Maiuscolo" "Caps Lock Indicator": "Indicatore Blocco Maiuscole"
}, },
"Center Section": { "Center Section": {
"Center Section": "Sezione Centrale" "Center Section": "Sezione Centrale"
@@ -722,6 +728,9 @@
"Click Import to add a .ovpn or .conf": { "Click Import to add a .ovpn or .conf": {
"Click Import to add a .ovpn or .conf": "Clicca su Importa per aggiungere un file .ovpn o .conf" "Click Import to add a .ovpn or .conf": "Clicca su Importa per aggiungere un file .ovpn o .conf"
}, },
"Click Through": {
"Click Through": ""
},
"Click any shortcut to edit. Changes save to %1": { "Click any shortcut to edit. Changes save to %1": {
"Click any shortcut to edit. Changes save to %1": "Clicca su qualsiasi scorciatoia per modificare. Le modifiche vengono salvate in %1" "Click any shortcut to edit. Changes save to %1": "Clicca su qualsiasi scorciatoia per modificare. Le modifiche vengono salvate in %1"
}, },
@@ -993,7 +1002,7 @@
"Custom Lock Command": "Comando Personalizzato per Blocco" "Custom Lock Command": "Comando Personalizzato per Blocco"
}, },
"Custom Logout Command": { "Custom Logout Command": {
"Custom Logout Command": "Comando Personalizzato per il Termina Sessione" "Custom Logout Command": "Comando Personalizzato di Termine Sessione"
}, },
"Custom Power Actions": { "Custom Power Actions": {
"Custom Power Actions": "Azioni Alimentazione Personalizzate" "Custom Power Actions": "Azioni Alimentazione Personalizzate"
@@ -1317,7 +1326,7 @@
"Edge Spacing": "Spaziatura del Bordo" "Edge Spacing": "Spaziatura del Bordo"
}, },
"Education": { "Education": {
"Education": "Educazione" "Education": "Istruzione"
}, },
"Empty": { "Empty": {
"Empty": "Vuoto" "Empty": "Vuoto"
@@ -1530,7 +1539,7 @@
"Failed to import VPN": "Impossibile importare la VPN" "Failed to import VPN": "Impossibile importare la VPN"
}, },
"Failed to load VPN config": { "Failed to load VPN config": {
"Failed to load VPN config": "Impossibile importare la configurazione VPN" "Failed to load VPN config": "Impossibile caricare la configurazione VPN"
}, },
"Failed to load clipboard configuration.": { "Failed to load clipboard configuration.": {
"Failed to load clipboard configuration.": "Impossibile caricare la configurazione degli appunti" "Failed to load clipboard configuration.": "Impossibile caricare la configurazione degli appunti"
@@ -1656,31 +1665,31 @@
"Flags": "Flag" "Flags": "Flag"
}, },
"Flipped": { "Flipped": {
"Flipped": "Ruotato" "Flipped": "Specchiato"
}, },
"Flipped 180°": { "Flipped 180°": {
"Flipped 180°": "Ruotato di 180°" "Flipped 180°": "Specchiato di 180°"
}, },
"Flipped 270°": { "Flipped 270°": {
"Flipped 270°": "Ruotato di 270°" "Flipped 270°": "Specchiato di 270°"
}, },
"Flipped 90°": { "Flipped 90°": {
"Flipped 90°": "Ruotato di 90°" "Flipped 90°": "Specchiato di 90°"
}, },
"Focus at Startup": { "Focus at Startup": {
"Focus at Startup": "Attiva all'Avvio" "Focus at Startup": "Attiva all'Avvio"
}, },
"Focused Border": { "Focused Border": {
"Focused Border": "" "Focused Border": "Bordo Attivo"
}, },
"Focused Color": { "Focused Color": {
"Focused Color": "" "Focused Color": "Colore Attivo"
}, },
"Focused Window": { "Focused Window": {
"Focused Window": "Finestra Attiva" "Focused Window": "Finestra Attiva"
}, },
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "" "Follow Monitor Focus": "Segui il Monitor Attivo"
}, },
"Follow focus": { "Follow focus": {
"Follow focus": "Segui il focus" "Follow focus": "Segui il focus"
@@ -1787,6 +1796,9 @@
"Grid Columns": { "Grid Columns": {
"Grid Columns": "Colonne Griglia" "Grid Columns": "Colonne Griglia"
}, },
"Group": {
"Group": ""
},
"Group Workspace Apps": { "Group Workspace Apps": {
"Group Workspace Apps": "Raggruppa App per Spazio di Lavoro" "Group Workspace Apps": "Raggruppa App per Spazio di Lavoro"
}, },
@@ -1796,9 +1808,15 @@
"Group multiple windows of the same app together with a window count indicator": { "Group multiple windows of the same app together with a window count indicator": {
"Group multiple windows of the same app together with a window count indicator": "Raggruppa molteplici finestre della stessa app con un indicatore del numero di finestre" "Group multiple windows of the same app together with a window count indicator": "Raggruppa molteplici finestre della stessa app con un indicatore del numero di finestre"
}, },
"Group removed": {
"Group removed": ""
},
"Group repeated application icons in unfocused workspaces": { "Group repeated application icons in unfocused workspaces": {
"Group repeated application icons in unfocused workspaces": "Raggruppa le icone delle applicazioni duplicate negli spazi di lavoro non attivi" "Group repeated application icons in unfocused workspaces": "Raggruppa le icone delle applicazioni duplicate negli spazi di lavoro non attivi"
}, },
"Groups": {
"Groups": ""
},
"HDR (EDID)": { "HDR (EDID)": {
"HDR (EDID)": "HDR (EDID)" "HDR (EDID)": "HDR (EDID)"
}, },
@@ -1842,7 +1860,7 @@
"Hide When Windows Open": "Nascondi Quando le Finestre Sono Aperte" "Hide When Windows Open": "Nascondi Quando le Finestre Sono Aperte"
}, },
"Hide cursor after inactivity (0 = disabled)": { "Hide cursor after inactivity (0 = disabled)": {
"Hide cursor after inactivity (0 = disabled)": "Nascondi il cursore dopo inattività (0 = disabilitato)" "Hide cursor after inactivity (0 = disabled)": "Nascondi il cursore dopo un periodo di inattività (0 = disabilitato)"
}, },
"Hide cursor when pressing keyboard keys": { "Hide cursor when pressing keyboard keys": {
"Hide cursor when pressing keyboard keys": "Nascondi il cursore quando si premono i tasti della tastiera" "Hide cursor when pressing keyboard keys": "Nascondi il cursore quando si premono i tasti della tastiera"
@@ -1917,7 +1935,7 @@
"Icon Theme": "Tema Icona" "Icon Theme": "Tema Icona"
}, },
"Idle": { "Idle": {
"Idle": "Inattività" "Idle": "In Attesa"
}, },
"Idle Inhibitor": { "Idle Inhibitor": {
"Idle Inhibitor": "Blocco Sospensione" "Idle Inhibitor": "Blocco Sospensione"
@@ -2043,19 +2061,19 @@
"LED device": "Dispositivo LED" "LED device": "Dispositivo LED"
}, },
"Last launched %1": { "Last launched %1": {
"Last launched %1": "Ultimo avviato %1" "Last launched %1": "Ultimo avvio %1"
}, },
"Last launched %1 day%2 ago": { "Last launched %1 day%2 ago": {
"Last launched %1 day%2 ago": "Ultimo avviato %1 giorno%2 fa" "Last launched %1 day%2 ago": "Ultimo avvio %1 giorno%2 fa"
}, },
"Last launched %1 hour%2 ago": { "Last launched %1 hour%2 ago": {
"Last launched %1 hour%2 ago": "Ultimo avviato %1 ora%2 fa" "Last launched %1 hour%2 ago": "Ultimo avvio %1 ora%2 fa"
}, },
"Last launched %1 minute%2 ago": { "Last launched %1 minute%2 ago": {
"Last launched %1 minute%2 ago": "Ultimo avviato %1 minuto%2 fa" "Last launched %1 minute%2 ago": "Ultimo avvio %1 minuto%2 fa"
}, },
"Last launched just now": { "Last launched just now": {
"Last launched just now": "Ultimo avviato ora" "Last launched just now": "Ultimo avvio ora"
}, },
"Latitude": { "Latitude": {
"Latitude": "Latitudine" "Latitude": "Latitudine"
@@ -2195,6 +2213,9 @@
"Manual Show/Hide": { "Manual Show/Hide": {
"Manual Show/Hide": "Mostra/Nascondi Manuale" "Manual Show/Hide": "Mostra/Nascondi Manuale"
}, },
"Map window class names to icon names for proper icon display": {
"Map window class names to icon names for proper icon display": ""
},
"Margin": { "Margin": {
"Margin": "Margini" "Margin": "Margini"
}, },
@@ -2417,6 +2438,9 @@
"New York, NY": { "New York, NY": {
"New York, NY": "New York, NY" "New York, NY": "New York, NY"
}, },
"New group name...": {
"New group name...": ""
},
"Next Transition": { "Next Transition": {
"Next Transition": "Prossima Transizione" "Next Transition": "Prossima Transizione"
}, },
@@ -2616,7 +2640,7 @@
"On-screen Displays": "Indicatori a Schermo" "On-screen Displays": "Indicatori a Schermo"
}, },
"Only adjust gamma based on time or location rules.": { "Only adjust gamma based on time or location rules.": {
"Only adjust gamma based on time or location rules.": "Regolare gamma solo in base alle regole di tempo o di posizione." "Only adjust gamma based on time or location rules.": "Regola la gamma solo in base alle regole di tempo o di posizione."
}, },
"Only show windows from the current monitor on each dock": { "Only show windows from the current monitor on each dock": {
"Only show windows from the current monitor on each dock": "Mostra solo le finestre del monitor corrente su ogni dock" "Only show windows from the current monitor on each dock": "Mostra solo le finestre del monitor corrente su ogni dock"
@@ -2648,6 +2672,9 @@
"Options": { "Options": {
"Options": "Opzioni" "Options": "Opzioni"
}, },
"Organize widgets into collapsible groups": {
"Organize widgets into collapsible groups": ""
},
"Other": { "Other": {
"Other": "Altro" "Other": "Altro"
}, },
@@ -2720,6 +2747,9 @@
"Password": { "Password": {
"Password": "Password" "Password": "Password"
}, },
"Pattern": {
"Pattern": ""
},
"Pause": { "Pause": {
"Pause": "Pausa" "Pause": "Pausa"
}, },
@@ -2981,6 +3011,9 @@
"Repeat": { "Repeat": {
"Repeat": "Ripetizione" "Repeat": "Ripetizione"
}, },
"Replacement": {
"Replacement": ""
},
"Report": { "Report": {
"Report": "Riepilogo" "Report": "Riepilogo"
}, },
@@ -3396,7 +3429,7 @@
"Show all 9 tags instead of only occupied tags (DWL only)": "Mostra tutti i 9 tag invece di quelli occupati (solo DWL)" "Show all 9 tags instead of only occupied tags (DWL only)": "Mostra tutti i 9 tag invece di quelli occupati (solo DWL)"
}, },
"Show an outline ring around the focused workspace indicator": { "Show an outline ring around the focused workspace indicator": {
"Show an outline ring around the focused workspace indicator": "" "Show an outline ring around the focused workspace indicator": "Mostra un contorno attorno allindicatore dello spazio di lavoro attivo"
}, },
"Show cava audio visualizer in media widget": { "Show cava audio visualizer in media widget": {
"Show cava audio visualizer in media widget": "Mostra il visualizzatore audio cava nel widget multimediale" "Show cava audio visualizer in media widget": "Mostra il visualizzatore audio cava nel widget multimediale"
@@ -3429,7 +3462,7 @@
"Show on-screen display when brightness changes": "Visualizza un messaggio a schermo quando la luminosità cambia" "Show on-screen display when brightness changes": "Visualizza un messaggio a schermo quando la luminosità cambia"
}, },
"Show on-screen display when caps lock state changes": { "Show on-screen display when caps lock state changes": {
"Show on-screen display when caps lock state changes": "Visualizza un messaggio a schermo quando lo stato del maiuscolo cambia" "Show on-screen display when caps lock state changes": "Visualizza un messaggio a schermo quando lo stato del blocco maiuscole cambia"
}, },
"Show on-screen display when cycling audio output devices": { "Show on-screen display when cycling audio output devices": {
"Show on-screen display when cycling audio output devices": "Mostra un avviso sullo schermo quando si scorre tra i dispositivi di uscita audio" "Show on-screen display when cycling audio output devices": "Mostra un avviso sullo schermo quando si scorre tra i dispositivi di uscita audio"
@@ -3468,7 +3501,7 @@
"Show workspace name on horizontal bars, and first letter on vertical bars": "Mostra il nome dello spazio di lavoro nelle barre orizzontali e la prima lettera in quelle verticali" "Show workspace name on horizontal bars, and first letter on vertical bars": "Mostra il nome dello spazio di lavoro nelle barre orizzontali e la prima lettera in quelle verticali"
}, },
"Show workspaces of the currently focused monitor": { "Show workspaces of the currently focused monitor": {
"Show workspaces of the currently focused monitor": "" "Show workspaces of the currently focused monitor": "Mostra gli spazi di lavoro del monitor attualmente attivo"
}, },
"Shows all running applications with focus indication": { "Shows all running applications with focus indication": {
"Shows all running applications with focus indication": "Mostra tutte le applicazioni in esecuzione con indicazione focus" "Shows all running applications with focus indication": "Mostra tutte le applicazioni in esecuzione con indicazione focus"
@@ -3477,7 +3510,7 @@
"Shows current workspace and allows switching": "Visualizza lo spazio di lavoro attuale e consente di passare ad un altro" "Shows current workspace and allows switching": "Visualizza lo spazio di lavoro attuale e consente di passare ad un altro"
}, },
"Shows when caps lock is active": { "Shows when caps lock is active": {
"Shows when caps lock is active": "Indica quando il maiuscolo è attivo" "Shows when caps lock is active": "Indica quando il blocco maiuscole è attivo"
}, },
"Shows when microphone, camera, or screen sharing is active": { "Shows when microphone, camera, or screen sharing is active": {
"Shows when microphone, camera, or screen sharing is active": "Mostra quando microfono, videocamera, o condivisione schermo sono attivi" "Shows when microphone, camera, or screen sharing is active": "Mostra quando microfono, videocamera, o condivisione schermo sono attivi"
@@ -3614,6 +3647,9 @@
"Sync Mode with Portal": { "Sync Mode with Portal": {
"Sync Mode with Portal": "Modalità Sync con Portale" "Sync Mode with Portal": "Modalità Sync con Portale"
}, },
"Sync Position Across Screens": {
"Sync Position Across Screens": ""
},
"Sync dark mode with settings portals for system-wide theme hints": { "Sync dark mode with settings portals for system-wide theme hints": {
"Sync dark mode with settings portals for system-wide theme hints": "Sincronizza tema scuro con impostazioni di sistema" "Sync dark mode with settings portals for system-wide theme hints": "Sincronizza tema scuro con impostazioni di sistema"
}, },
@@ -3636,7 +3672,7 @@
"System Update": "Aggiornamento Sistema" "System Update": "Aggiornamento Sistema"
}, },
"System Updater": { "System Updater": {
"System Updater": "Updater Sistema" "System Updater": "Aggiornamento Sistema"
}, },
"System Updates": { "System Updates": {
"System Updates": "Aggiornamenti Sistema" "System Updates": "Aggiornamenti Sistema"
@@ -3705,10 +3741,10 @@
"Thickness": "Spessore" "Thickness": "Spessore"
}, },
"Third-Party Plugin Warning": { "Third-Party Plugin Warning": {
"Third-Party Plugin Warning": "Avviso Plugin Terze-Parti" "Third-Party Plugin Warning": "Avviso Plugin di Terze Parti"
}, },
"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.": {
"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.": "I plugin di terze parti sono creati dalla community e non sono ufficialmente supportati da DankMaterialShell.\\n\\nQuesti plugin possono comportare rischi per la sicurezza e la privacy - installa a proprio rischio." "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.": "I plugin di terze parti sono creati dalla community e non sono ufficialmente supportati da DankMaterialShell.\\n\\nQuesti plugin possono comportare rischi per la sicurezza e la privacy - l'installazione è a proprio rischio."
}, },
"This bind is overridden by config.kdl": { "This bind is overridden by config.kdl": {
"This bind is overridden by config.kdl": "Questa associazione di tasti è stata sovrascritta da config.kdl" "This bind is overridden by config.kdl": "Questa associazione di tasti è stata sovrascritta da config.kdl"
@@ -3837,7 +3873,10 @@
"Unavailable": "Non disponibile" "Unavailable": "Non disponibile"
}, },
"Unfocused Color": { "Unfocused Color": {
"Unfocused Color": "" "Unfocused Color": "Colore Inattivo"
},
"Ungrouped": {
"Ungrouped": ""
}, },
"Uninstall Plugin": { "Uninstall Plugin": {
"Uninstall Plugin": "Disinstalla Plugin" "Uninstall Plugin": "Disinstalla Plugin"
@@ -3882,7 +3921,7 @@
"Update Plugin": "Aggiorna Plugin" "Update Plugin": "Aggiorna Plugin"
}, },
"Urgent Color": { "Urgent Color": {
"Urgent Color": "" "Urgent Color": "Colore Urgente"
}, },
"Usage Tips": { "Usage Tips": {
"Usage Tips": "Suggerimenti d'Uso" "Usage Tips": "Suggerimenti d'Uso"
@@ -3938,9 +3977,15 @@
"Use light theme instead of dark theme": { "Use light theme instead of dark theme": {
"Use light theme instead of dark theme": "Usa tema chiaro invece del tema scuro" "Use light theme instead of dark theme": "Usa tema chiaro invece del tema scuro"
}, },
"Use smaller notification cards": {
"Use smaller notification cards": ""
},
"Use sound theme from system settings": { "Use sound theme from system settings": {
"Use sound theme from system settings": "Usa tema di suoni dalle impostazioni di sistema" "Use sound theme from system settings": "Usa tema di suoni dalle impostazioni di sistema"
}, },
"Use the same position and size on all displays": {
"Use the same position and size on all displays": ""
},
"Use trigger prefix to activate": { "Use trigger prefix to activate": {
"Use trigger prefix to activate": "Usa il prefisso attivatore per attivare" "Use trigger prefix to activate": "Usa il prefisso attivatore per attivare"
}, },
@@ -4178,7 +4223,7 @@
"Workspace": "Spazio di Lavoro" "Workspace": "Spazio di Lavoro"
}, },
"Workspace Appearance": { "Workspace Appearance": {
"Workspace Appearance": "" "Workspace Appearance": "Aspetto degli Spazi di Lavoro"
}, },
"Workspace Index Numbers": { "Workspace Index Numbers": {
"Workspace Index Numbers": "Numeri Indice Spazi di Lavoro" "Workspace Index Numbers": "Numeri Indice Spazi di Lavoro"

View File

@@ -239,6 +239,9 @@
"All displays": { "All displays": {
"All displays": "すべてのディスプレイ" "All displays": "すべてのディスプレイ"
}, },
"Allow clicks to pass through the widget": {
"Allow clicks to pass through the widget": ""
},
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": { "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: 戻る • F1/I: ファイル情報 • F10: ヘルプ • Esc: 閉じる" "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: 戻る • F1/I: ファイル情報 • F10: ヘルプ • Esc: 閉じる"
}, },
@@ -275,6 +278,9 @@
"Anonymous Identity (optional)": { "Anonymous Identity (optional)": {
"Anonymous Identity (optional)": "匿名 ID (オプション)" "Anonymous Identity (optional)": "匿名 ID (オプション)"
}, },
"App ID Substitutions": {
"App ID Substitutions": ""
},
"App Launcher": { "App Launcher": {
"App Launcher": "アプリランチャー" "App Launcher": "アプリランチャー"
}, },
@@ -722,6 +728,9 @@
"Click Import to add a .ovpn or .conf": { "Click Import to add a .ovpn or .conf": {
"Click Import to add a .ovpn or .conf": "" "Click Import to add a .ovpn or .conf": ""
}, },
"Click Through": {
"Click Through": ""
},
"Click any shortcut to edit. Changes save to %1": { "Click any shortcut to edit. Changes save to %1": {
"Click any shortcut to edit. Changes save to %1": "" "Click any shortcut to edit. Changes save to %1": ""
}, },
@@ -1787,6 +1796,9 @@
"Grid Columns": { "Grid Columns": {
"Grid Columns": "グリッド列" "Grid Columns": "グリッド列"
}, },
"Group": {
"Group": ""
},
"Group Workspace Apps": { "Group Workspace Apps": {
"Group Workspace Apps": "" "Group Workspace Apps": ""
}, },
@@ -1796,9 +1808,15 @@
"Group multiple windows of the same app together with a window count indicator": { "Group multiple windows of the same app together with a window count indicator": {
"Group multiple windows of the same app together with a window count indicator": "同じアプリの複数のウィンドウをウィンドウ数インジケーターでグループ化します" "Group multiple windows of the same app together with a window count indicator": "同じアプリの複数のウィンドウをウィンドウ数インジケーターでグループ化します"
}, },
"Group removed": {
"Group removed": ""
},
"Group repeated application icons in unfocused workspaces": { "Group repeated application icons in unfocused workspaces": {
"Group repeated application icons in unfocused workspaces": "" "Group repeated application icons in unfocused workspaces": ""
}, },
"Groups": {
"Groups": ""
},
"HDR (EDID)": { "HDR (EDID)": {
"HDR (EDID)": "" "HDR (EDID)": ""
}, },
@@ -2195,6 +2213,9 @@
"Manual Show/Hide": { "Manual Show/Hide": {
"Manual Show/Hide": "手動で表示/非表示" "Manual Show/Hide": "手動で表示/非表示"
}, },
"Map window class names to icon names for proper icon display": {
"Map window class names to icon names for proper icon display": ""
},
"Margin": { "Margin": {
"Margin": "マージン" "Margin": "マージン"
}, },
@@ -2417,6 +2438,9 @@
"New York, NY": { "New York, NY": {
"New York, NY": "New York, NY" "New York, NY": "New York, NY"
}, },
"New group name...": {
"New group name...": ""
},
"Next Transition": { "Next Transition": {
"Next Transition": "" "Next Transition": ""
}, },
@@ -2648,6 +2672,9 @@
"Options": { "Options": {
"Options": "" "Options": ""
}, },
"Organize widgets into collapsible groups": {
"Organize widgets into collapsible groups": ""
},
"Other": { "Other": {
"Other": "他" "Other": "他"
}, },
@@ -2720,6 +2747,9 @@
"Password": { "Password": {
"Password": "パスワード" "Password": "パスワード"
}, },
"Pattern": {
"Pattern": ""
},
"Pause": { "Pause": {
"Pause": "一時停止" "Pause": "一時停止"
}, },
@@ -2981,6 +3011,9 @@
"Repeat": { "Repeat": {
"Repeat": "" "Repeat": ""
}, },
"Replacement": {
"Replacement": ""
},
"Report": { "Report": {
"Report": "報告" "Report": "報告"
}, },
@@ -3614,6 +3647,9 @@
"Sync Mode with Portal": { "Sync Mode with Portal": {
"Sync Mode with Portal": "ポータルとの同期モード" "Sync Mode with Portal": "ポータルとの同期モード"
}, },
"Sync Position Across Screens": {
"Sync Position Across Screens": ""
},
"Sync dark mode with settings portals for system-wide theme hints": { "Sync dark mode with settings portals for system-wide theme hints": {
"Sync dark mode with settings portals for system-wide theme hints": "ダークモードをシステム全体のテーマヒントの設定ポータルと同期" "Sync dark mode with settings portals for system-wide theme hints": "ダークモードをシステム全体のテーマヒントの設定ポータルと同期"
}, },
@@ -3839,6 +3875,9 @@
"Unfocused Color": { "Unfocused Color": {
"Unfocused Color": "" "Unfocused Color": ""
}, },
"Ungrouped": {
"Ungrouped": ""
},
"Uninstall Plugin": { "Uninstall Plugin": {
"Uninstall Plugin": "プラグインをアンインストール" "Uninstall Plugin": "プラグインをアンインストール"
}, },
@@ -3938,9 +3977,15 @@
"Use light theme instead of dark theme": { "Use light theme instead of dark theme": {
"Use light theme instead of dark theme": "ダークテーマではなく、ライトテーマを使用" "Use light theme instead of dark theme": "ダークテーマではなく、ライトテーマを使用"
}, },
"Use smaller notification cards": {
"Use smaller notification cards": ""
},
"Use sound theme from system settings": { "Use sound theme from system settings": {
"Use sound theme from system settings": "システム設定からサウンドテーマを使用" "Use sound theme from system settings": "システム設定からサウンドテーマを使用"
}, },
"Use the same position and size on all displays": {
"Use the same position and size on all displays": ""
},
"Use trigger prefix to activate": { "Use trigger prefix to activate": {
"Use trigger prefix to activate": "" "Use trigger prefix to activate": ""
}, },

View File

@@ -239,6 +239,9 @@
"All displays": { "All displays": {
"All displays": "Wszystkie ekrany" "All displays": "Wszystkie ekrany"
}, },
"Allow clicks to pass through the widget": {
"Allow clicks to pass through the widget": ""
},
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": { "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Wstecz • F1/I: Informacje o pliku • F10: Pomoc • Esc: Zamknij" "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Wstecz • F1/I: Informacje o pliku • F10: Pomoc • Esc: Zamknij"
}, },
@@ -275,6 +278,9 @@
"Anonymous Identity (optional)": { "Anonymous Identity (optional)": {
"Anonymous Identity (optional)": "Tożsamość anonimowa (opcjonalnie)" "Anonymous Identity (optional)": "Tożsamość anonimowa (opcjonalnie)"
}, },
"App ID Substitutions": {
"App ID Substitutions": ""
},
"App Launcher": { "App Launcher": {
"App Launcher": "Program Uruchamiający" "App Launcher": "Program Uruchamiający"
}, },
@@ -722,6 +728,9 @@
"Click Import to add a .ovpn or .conf": { "Click Import to add a .ovpn or .conf": {
"Click Import to add a .ovpn or .conf": "Kliknij Importuj, aby dodać plik .ovpn lub .conf" "Click Import to add a .ovpn or .conf": "Kliknij Importuj, aby dodać plik .ovpn lub .conf"
}, },
"Click Through": {
"Click Through": ""
},
"Click any shortcut to edit. Changes save to %1": { "Click any shortcut to edit. Changes save to %1": {
"Click any shortcut to edit. Changes save to %1": "" "Click any shortcut to edit. Changes save to %1": ""
}, },
@@ -1787,6 +1796,9 @@
"Grid Columns": { "Grid Columns": {
"Grid Columns": "Kolumny siatki" "Grid Columns": "Kolumny siatki"
}, },
"Group": {
"Group": ""
},
"Group Workspace Apps": { "Group Workspace Apps": {
"Group Workspace Apps": "" "Group Workspace Apps": ""
}, },
@@ -1796,9 +1808,15 @@
"Group multiple windows of the same app together with a window count indicator": { "Group multiple windows of the same app together with a window count indicator": {
"Group multiple windows of the same app together with a window count indicator": "Grupuj wiele okien tej samej aplikacji ze wskaźnikiem liczby okien" "Group multiple windows of the same app together with a window count indicator": "Grupuj wiele okien tej samej aplikacji ze wskaźnikiem liczby okien"
}, },
"Group removed": {
"Group removed": ""
},
"Group repeated application icons in unfocused workspaces": { "Group repeated application icons in unfocused workspaces": {
"Group repeated application icons in unfocused workspaces": "" "Group repeated application icons in unfocused workspaces": ""
}, },
"Groups": {
"Groups": ""
},
"HDR (EDID)": { "HDR (EDID)": {
"HDR (EDID)": "HDR (EDID)" "HDR (EDID)": "HDR (EDID)"
}, },
@@ -2195,6 +2213,9 @@
"Manual Show/Hide": { "Manual Show/Hide": {
"Manual Show/Hide": "Ręczne pokazywanie/ukrywanie" "Manual Show/Hide": "Ręczne pokazywanie/ukrywanie"
}, },
"Map window class names to icon names for proper icon display": {
"Map window class names to icon names for proper icon display": ""
},
"Margin": { "Margin": {
"Margin": "Margines" "Margin": "Margines"
}, },
@@ -2417,6 +2438,9 @@
"New York, NY": { "New York, NY": {
"New York, NY": "Nowy Jork, NY" "New York, NY": "Nowy Jork, NY"
}, },
"New group name...": {
"New group name...": ""
},
"Next Transition": { "Next Transition": {
"Next Transition": "Następne Przejście" "Next Transition": "Następne Przejście"
}, },
@@ -2648,6 +2672,9 @@
"Options": { "Options": {
"Options": "Opcje" "Options": "Opcje"
}, },
"Organize widgets into collapsible groups": {
"Organize widgets into collapsible groups": ""
},
"Other": { "Other": {
"Other": "Inne" "Other": "Inne"
}, },
@@ -2720,6 +2747,9 @@
"Password": { "Password": {
"Password": "Hasło" "Password": "Hasło"
}, },
"Pattern": {
"Pattern": ""
},
"Pause": { "Pause": {
"Pause": "Wstrzymaj" "Pause": "Wstrzymaj"
}, },
@@ -2981,6 +3011,9 @@
"Repeat": { "Repeat": {
"Repeat": "" "Repeat": ""
}, },
"Replacement": {
"Replacement": ""
},
"Report": { "Report": {
"Report": "Raport" "Report": "Raport"
}, },
@@ -3614,6 +3647,9 @@
"Sync Mode with Portal": { "Sync Mode with Portal": {
"Sync Mode with Portal": "Tryb synchronizacji z portalem" "Sync Mode with Portal": "Tryb synchronizacji z portalem"
}, },
"Sync Position Across Screens": {
"Sync Position Across Screens": ""
},
"Sync dark mode with settings portals for system-wide theme hints": { "Sync dark mode with settings portals for system-wide theme hints": {
"Sync dark mode with settings portals for system-wide theme hints": "Synchronizuj ciemny motyw z systemem" "Sync dark mode with settings portals for system-wide theme hints": "Synchronizuj ciemny motyw z systemem"
}, },
@@ -3839,6 +3875,9 @@
"Unfocused Color": { "Unfocused Color": {
"Unfocused Color": "" "Unfocused Color": ""
}, },
"Ungrouped": {
"Ungrouped": ""
},
"Uninstall Plugin": { "Uninstall Plugin": {
"Uninstall Plugin": "Odinstaluj wtyczkę" "Uninstall Plugin": "Odinstaluj wtyczkę"
}, },
@@ -3938,9 +3977,15 @@
"Use light theme instead of dark theme": { "Use light theme instead of dark theme": {
"Use light theme instead of dark theme": "Użyj jasnego motywu zamiast ciemnego" "Use light theme instead of dark theme": "Użyj jasnego motywu zamiast ciemnego"
}, },
"Use smaller notification cards": {
"Use smaller notification cards": ""
},
"Use sound theme from system settings": { "Use sound theme from system settings": {
"Use sound theme from system settings": "Użyj motywu dźwiękowego z ustawień systemowych" "Use sound theme from system settings": "Użyj motywu dźwiękowego z ustawień systemowych"
}, },
"Use the same position and size on all displays": {
"Use the same position and size on all displays": ""
},
"Use trigger prefix to activate": { "Use trigger prefix to activate": {
"Use trigger prefix to activate": "" "Use trigger prefix to activate": ""
}, },

View File

@@ -231,7 +231,7 @@
"All": "Todos" "All": "Todos"
}, },
"All Monitors": { "All Monitors": {
"All Monitors": "" "All Monitors": "Todos os Monitores"
}, },
"All day": { "All day": {
"All day": "O dia todo" "All day": "O dia todo"
@@ -239,6 +239,9 @@
"All displays": { "All displays": {
"All displays": "Todos as Telas" "All displays": "Todos as Telas"
}, },
"Allow clicks to pass through the widget": {
"Allow clicks to pass through the widget": ""
},
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": { "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Voltar • F1/I: Informações de Arquivo • F10: Ajuda • Esc: Fechar" "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Voltar • F1/I: Informações de Arquivo • F10: Ajuda • Esc: Fechar"
}, },
@@ -275,6 +278,9 @@
"Anonymous Identity (optional)": { "Anonymous Identity (optional)": {
"Anonymous Identity (optional)": "Identidade Anônima (opcional)" "Anonymous Identity (optional)": "Identidade Anônima (opcional)"
}, },
"App ID Substitutions": {
"App ID Substitutions": ""
},
"App Launcher": { "App Launcher": {
"App Launcher": "Lançador de Apps" "App Launcher": "Lançador de Apps"
}, },
@@ -722,6 +728,9 @@
"Click Import to add a .ovpn or .conf": { "Click Import to add a .ovpn or .conf": {
"Click Import to add a .ovpn or .conf": "Clique em Importar para adicionar um arquivo .ovpn ou .conf" "Click Import to add a .ovpn or .conf": "Clique em Importar para adicionar um arquivo .ovpn ou .conf"
}, },
"Click Through": {
"Click Through": ""
},
"Click any shortcut to edit. Changes save to %1": { "Click any shortcut to edit. Changes save to %1": {
"Click any shortcut to edit. Changes save to %1": "" "Click any shortcut to edit. Changes save to %1": ""
}, },
@@ -819,7 +828,7 @@
"Config Format": "" "Config Format": ""
}, },
"Config action: %1": { "Config action: %1": {
"Config action: %1": "" "Config action: %1": "Configurar ação: %1"
}, },
"Config validation failed": { "Config validation failed": {
"Config validation failed": "" "Config validation failed": ""
@@ -981,10 +990,10 @@
"Custom Color": "" "Custom Color": ""
}, },
"Custom Duration": { "Custom Duration": {
"Custom Duration": "" "Custom Duration": "Duração Personalizada"
}, },
"Custom Hibernate Command": { "Custom Hibernate Command": {
"Custom Hibernate Command": "" "Custom Hibernate Command": "Comando Personalizado Para Hibernar"
}, },
"Custom Location": { "Custom Location": {
"Custom Location": "Customizar Localização" "Custom Location": "Customizar Localização"
@@ -993,19 +1002,19 @@
"Custom Lock Command": "" "Custom Lock Command": ""
}, },
"Custom Logout Command": { "Custom Logout Command": {
"Custom Logout Command": "" "Custom Logout Command": "Comando Personalizado Para Sair"
}, },
"Custom Power Actions": { "Custom Power Actions": {
"Custom Power Actions": "Ações de Energia Customizadas" "Custom Power Actions": "Ações de Energia Customizadas"
}, },
"Custom Power Off Command": { "Custom Power Off Command": {
"Custom Power Off Command": "" "Custom Power Off Command": "Comando Personalizado Para Desligar"
}, },
"Custom Reboot Command": { "Custom Reboot Command": {
"Custom Reboot Command": "" "Custom Reboot Command": "Comando Personalizado Para Reiniciar"
}, },
"Custom Suspend Command": { "Custom Suspend Command": {
"Custom Suspend Command": "" "Custom Suspend Command": "Comando Personalizado Para Suspender"
}, },
"Custom Transparency": { "Custom Transparency": {
"Custom Transparency": "Transparência Customizada" "Custom Transparency": "Transparência Customizada"
@@ -1212,7 +1221,7 @@
"Display Settings": "" "Display Settings": ""
}, },
"Display a dock with pinned and running applications": { "Display a dock with pinned and running applications": {
"Display a dock with pinned and running applications": "" "Display a dock with pinned and running applications": "Exibir um dock com aplicativos fixados e abertos"
}, },
"Display all priorities over fullscreen apps": { "Display all priorities over fullscreen apps": {
"Display all priorities over fullscreen apps": "Exibir todas as prioridades em aplicativos de tela cheia" "Display all priorities over fullscreen apps": "Exibir todas as prioridades em aplicativos de tela cheia"
@@ -1242,13 +1251,13 @@
"Display power menu actions in a grid instead of a list": "Mostra as ações do menu de energia em uma grade ao invés de uma lista" "Display power menu actions in a grid instead of a list": "Mostra as ações do menu de energia em uma grade ao invés de uma lista"
}, },
"Display seconds in the clock": { "Display seconds in the clock": {
"Display seconds in the clock": "" "Display seconds in the clock": "Exibir segundos no relógio"
}, },
"Display the power system menu": { "Display the power system menu": {
"Display the power system menu": "Mostra o menu de energia do sistema" "Display the power system menu": "Mostra o menu de energia do sistema"
}, },
"Display volume and brightness percentage values in OSD popups": { "Display volume and brightness percentage values in OSD popups": {
"Display volume and brightness percentage values in OSD popups": "" "Display volume and brightness percentage values in OSD popups": "Exibir porcentagem de volume e brilho nos pop-ups OSD"
}, },
"Displays": { "Displays": {
"Displays": "Telas" "Displays": "Telas"
@@ -1266,7 +1275,7 @@
"Dock": "Dock" "Dock": "Dock"
}, },
"Dock & Launcher": { "Dock & Launcher": {
"Dock & Launcher": "" "Dock & Launcher": "Dock & Lançador"
}, },
"Dock Position": { "Dock Position": {
"Dock Position": "Posição da Dock" "Dock Position": "Posição da Dock"
@@ -1275,7 +1284,7 @@
"Dock Transparency": "Transparência da Dock" "Dock Transparency": "Transparência da Dock"
}, },
"Dock Visibility": { "Dock Visibility": {
"Dock Visibility": "" "Dock Visibility": "Visibilidade do Dock"
}, },
"Docs": { "Docs": {
"Docs": "" "Docs": ""
@@ -1335,7 +1344,7 @@
"Enable Desktop Clock": "" "Enable Desktop Clock": ""
}, },
"Enable Do Not Disturb": { "Enable Do Not Disturb": {
"Enable Do Not Disturb": "" "Enable Do Not Disturb": "Habilitar Não Perturbe"
}, },
"Enable GPU Temperature": { "Enable GPU Temperature": {
"Enable GPU Temperature": "Habilitar Temperatura da GPU" "Enable GPU Temperature": "Habilitar Temperatura da GPU"
@@ -1629,7 +1638,7 @@
"File Information": "Informação do Arquivo" "File Information": "Informação do Arquivo"
}, },
"Files": { "Files": {
"Files": "" "Files": "Arquivos"
}, },
"Filesystem usage monitoring": { "Filesystem usage monitoring": {
"Filesystem usage monitoring": "" "Filesystem usage monitoring": ""
@@ -1644,7 +1653,7 @@
"Fine-tune animation timing in milliseconds": "" "Fine-tune animation timing in milliseconds": ""
}, },
"First Time Setup": { "First Time Setup": {
"First Time Setup": "" "First Time Setup": "Configuração Inicial"
}, },
"Fix Now": { "Fix Now": {
"Fix Now": "Consertar Agora" "Fix Now": "Consertar Agora"
@@ -1787,6 +1796,9 @@
"Grid Columns": { "Grid Columns": {
"Grid Columns": "Colunas da Grade" "Grid Columns": "Colunas da Grade"
}, },
"Group": {
"Group": ""
},
"Group Workspace Apps": { "Group Workspace Apps": {
"Group Workspace Apps": "" "Group Workspace Apps": ""
}, },
@@ -1796,9 +1808,15 @@
"Group multiple windows of the same app together with a window count indicator": { "Group multiple windows of the same app together with a window count indicator": {
"Group multiple windows of the same app together with a window count indicator": "Agrupar múltiplas janelas do mesmo app com um indicador de número de janelas" "Group multiple windows of the same app together with a window count indicator": "Agrupar múltiplas janelas do mesmo app com um indicador de número de janelas"
}, },
"Group removed": {
"Group removed": ""
},
"Group repeated application icons in unfocused workspaces": { "Group repeated application icons in unfocused workspaces": {
"Group repeated application icons in unfocused workspaces": "" "Group repeated application icons in unfocused workspaces": ""
}, },
"Groups": {
"Groups": ""
},
"HDR (EDID)": { "HDR (EDID)": {
"HDR (EDID)": "" "HDR (EDID)": ""
}, },
@@ -1836,7 +1854,7 @@
"Hide Delay": "" "Hide Delay": ""
}, },
"Hide When Typing": { "Hide When Typing": {
"Hide When Typing": "" "Hide When Typing": "Ocultar ao Digitar"
}, },
"Hide When Windows Open": { "Hide When Windows Open": {
"Hide When Windows Open": "" "Hide When Windows Open": ""
@@ -1944,7 +1962,7 @@
"Import VPN": "Importar VPN" "Import VPN": "Importar VPN"
}, },
"Inactive Monitor Color": { "Inactive Monitor Color": {
"Inactive Monitor Color": "" "Inactive Monitor Color": "Cor do Monitor Inativo"
}, },
"Include Transitions": { "Include Transitions": {
"Include Transitions": "Incluir Transições" "Include Transitions": "Incluir Transições"
@@ -2195,6 +2213,9 @@
"Manual Show/Hide": { "Manual Show/Hide": {
"Manual Show/Hide": "Mostrar/Esconder Manualmente" "Manual Show/Hide": "Mostrar/Esconder Manualmente"
}, },
"Map window class names to icon names for proper icon display": {
"Map window class names to icon names for proper icon display": ""
},
"Margin": { "Margin": {
"Margin": "Margem" "Margin": "Margem"
}, },
@@ -2417,6 +2438,9 @@
"New York, NY": { "New York, NY": {
"New York, NY": "Nova York, NY" "New York, NY": "Nova York, NY"
}, },
"New group name...": {
"New group name...": ""
},
"Next Transition": { "Next Transition": {
"Next Transition": "Próxima Transição" "Next Transition": "Próxima Transição"
}, },
@@ -2648,6 +2672,9 @@
"Options": { "Options": {
"Options": "Opções" "Options": "Opções"
}, },
"Organize widgets into collapsible groups": {
"Organize widgets into collapsible groups": ""
},
"Other": { "Other": {
"Other": "Outro" "Other": "Outro"
}, },
@@ -2720,6 +2747,9 @@
"Password": { "Password": {
"Password": "Senha" "Password": "Senha"
}, },
"Pattern": {
"Pattern": ""
},
"Pause": { "Pause": {
"Pause": "Pausar" "Pause": "Pausar"
}, },
@@ -2748,13 +2778,13 @@
"Personalization": "Personalização" "Personalization": "Personalização"
}, },
"Pin": { "Pin": {
"Pin": "" "Pin": "Fixar"
}, },
"Pin to Dock": { "Pin to Dock": {
"Pin to Dock": "Fixar ao Dock" "Pin to Dock": "Fixar ao Dock"
}, },
"Pinned": { "Pinned": {
"Pinned": "" "Pinned": "Fixado"
}, },
"Place plugin directories here. Each plugin should have a plugin.json manifest file.": { "Place plugin directories here. Each plugin should have a plugin.json manifest file.": {
"Place plugin directories here. Each plugin should have a plugin.json manifest file.": "Use este local para os diretórios de plugin. Cada plugin deve ter um arquivo de manifesto plugin.json." "Place plugin directories here. Each plugin should have a plugin.json manifest file.": "Use este local para os diretórios de plugin. Cada plugin deve ter um arquivo de manifesto plugin.json."
@@ -2981,6 +3011,9 @@
"Repeat": { "Repeat": {
"Repeat": "" "Repeat": ""
}, },
"Replacement": {
"Replacement": ""
},
"Report": { "Report": {
"Report": "Relatório" "Report": "Relatório"
}, },
@@ -3369,7 +3402,7 @@
"Show Restart DMS": "Mostrar Reiniciar DMS" "Show Restart DMS": "Mostrar Reiniciar DMS"
}, },
"Show Seconds": { "Show Seconds": {
"Show Seconds": "" "Show Seconds": "Mostrar Segundos"
}, },
"Show Sunrise/Sunset": { "Show Sunrise/Sunset": {
"Show Sunrise/Sunset": "" "Show Sunrise/Sunset": ""
@@ -3614,6 +3647,9 @@
"Sync Mode with Portal": { "Sync Mode with Portal": {
"Sync Mode with Portal": "Sincronizar Modo Com Portal" "Sync Mode with Portal": "Sincronizar Modo Com Portal"
}, },
"Sync Position Across Screens": {
"Sync Position Across Screens": ""
},
"Sync dark mode with settings portals for system-wide theme hints": { "Sync dark mode with settings portals for system-wide theme hints": {
"Sync dark mode with settings portals for system-wide theme hints": "Sincronize o modo escuro com os portais de configurações para ter indicações de temas em todo o sistema" "Sync dark mode with settings portals for system-wide theme hints": "Sincronize o modo escuro com os portais de configurações para ter indicações de temas em todo o sistema"
}, },
@@ -3839,6 +3875,9 @@
"Unfocused Color": { "Unfocused Color": {
"Unfocused Color": "" "Unfocused Color": ""
}, },
"Ungrouped": {
"Ungrouped": ""
},
"Uninstall Plugin": { "Uninstall Plugin": {
"Uninstall Plugin": "Desinstalar Plugin" "Uninstall Plugin": "Desinstalar Plugin"
}, },
@@ -3858,7 +3897,7 @@
"Unknown Network": "" "Unknown Network": ""
}, },
"Unpin": { "Unpin": {
"Unpin": "" "Unpin": "Desafixar"
}, },
"Unpin from Dock": { "Unpin from Dock": {
"Unpin from Dock": "Desafixar do Dock" "Unpin from Dock": "Desafixar do Dock"
@@ -3938,9 +3977,15 @@
"Use light theme instead of dark theme": { "Use light theme instead of dark theme": {
"Use light theme instead of dark theme": "Usar tema claro em vez de escuro" "Use light theme instead of dark theme": "Usar tema claro em vez de escuro"
}, },
"Use smaller notification cards": {
"Use smaller notification cards": ""
},
"Use sound theme from system settings": { "Use sound theme from system settings": {
"Use sound theme from system settings": "Usar tema de som das configurações do sistema" "Use sound theme from system settings": "Usar tema de som das configurações do sistema"
}, },
"Use the same position and size on all displays": {
"Use the same position and size on all displays": ""
},
"Use trigger prefix to activate": { "Use trigger prefix to activate": {
"Use trigger prefix to activate": "" "Use trigger prefix to activate": ""
}, },
@@ -4649,10 +4694,10 @@
"Use an external wallpaper manager like swww, hyprpaper, or swaybg.": "" "Use an external wallpaper manager like swww, hyprpaper, or swaybg.": ""
}, },
"wallpaper settings disable toggle": { "wallpaper settings disable toggle": {
"Disable Built-in Wallpapers": "" "Disable Built-in Wallpapers": "Desabilitar Papéis de Parede Embutidos"
}, },
"wallpaper settings external management": { "wallpaper settings external management": {
"External Wallpaper Management": "" "External Wallpaper Management": "Gerenciamento Externo de Papéis de Parede"
}, },
"wtype not available - install wtype for paste support": { "wtype not available - install wtype for paste support": {
"wtype not available - install wtype for paste support": "" "wtype not available - install wtype for paste support": ""

View File

@@ -239,6 +239,9 @@
"All displays": { "All displays": {
"All displays": "Tüm ekranlar" "All displays": "Tüm ekranlar"
}, },
"Allow clicks to pass through the widget": {
"Allow clicks to pass through the widget": ""
},
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": { "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Geri • F1/I: Dosya bilgisi • F10: Yardım • Esc: Kapat" "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Geri • F1/I: Dosya bilgisi • F10: Yardım • Esc: Kapat"
}, },
@@ -275,6 +278,9 @@
"Anonymous Identity (optional)": { "Anonymous Identity (optional)": {
"Anonymous Identity (optional)": "Anonim Kimlik (isteğe bağlı)" "Anonymous Identity (optional)": "Anonim Kimlik (isteğe bağlı)"
}, },
"App ID Substitutions": {
"App ID Substitutions": ""
},
"App Launcher": { "App Launcher": {
"App Launcher": "Uygulama Başlatıcı" "App Launcher": "Uygulama Başlatıcı"
}, },
@@ -722,6 +728,9 @@
"Click Import to add a .ovpn or .conf": { "Click Import to add a .ovpn or .conf": {
"Click Import to add a .ovpn or .conf": ".ovpn veya .conf dosyası eklemek için İçe Aktar'ı tıklayın." "Click Import to add a .ovpn or .conf": ".ovpn veya .conf dosyası eklemek için İçe Aktar'ı tıklayın."
}, },
"Click Through": {
"Click Through": ""
},
"Click any shortcut to edit. Changes save to %1": { "Click any shortcut to edit. Changes save to %1": {
"Click any shortcut to edit. Changes save to %1": "" "Click any shortcut to edit. Changes save to %1": ""
}, },
@@ -1787,6 +1796,9 @@
"Grid Columns": { "Grid Columns": {
"Grid Columns": "Izgara Sütunları" "Grid Columns": "Izgara Sütunları"
}, },
"Group": {
"Group": ""
},
"Group Workspace Apps": { "Group Workspace Apps": {
"Group Workspace Apps": "" "Group Workspace Apps": ""
}, },
@@ -1796,9 +1808,15 @@
"Group multiple windows of the same app together with a window count indicator": { "Group multiple windows of the same app together with a window count indicator": {
"Group multiple windows of the same app together with a window count indicator": "Aynı uygulamanın birden fazla penceresini pencere sayısı göstergesi ile gruplayın" "Group multiple windows of the same app together with a window count indicator": "Aynı uygulamanın birden fazla penceresini pencere sayısı göstergesi ile gruplayın"
}, },
"Group removed": {
"Group removed": ""
},
"Group repeated application icons in unfocused workspaces": { "Group repeated application icons in unfocused workspaces": {
"Group repeated application icons in unfocused workspaces": "" "Group repeated application icons in unfocused workspaces": ""
}, },
"Groups": {
"Groups": ""
},
"HDR (EDID)": { "HDR (EDID)": {
"HDR (EDID)": "HDR (EDID)" "HDR (EDID)": "HDR (EDID)"
}, },
@@ -2195,6 +2213,9 @@
"Manual Show/Hide": { "Manual Show/Hide": {
"Manual Show/Hide": "Manuel Göster/Gizle" "Manual Show/Hide": "Manuel Göster/Gizle"
}, },
"Map window class names to icon names for proper icon display": {
"Map window class names to icon names for proper icon display": ""
},
"Margin": { "Margin": {
"Margin": "Kenar Boşluğu" "Margin": "Kenar Boşluğu"
}, },
@@ -2417,6 +2438,9 @@
"New York, NY": { "New York, NY": {
"New York, NY": "New York, NY" "New York, NY": "New York, NY"
}, },
"New group name...": {
"New group name...": ""
},
"Next Transition": { "Next Transition": {
"Next Transition": "Sonraki Geçiş" "Next Transition": "Sonraki Geçiş"
}, },
@@ -2648,6 +2672,9 @@
"Options": { "Options": {
"Options": "Seçenekler" "Options": "Seçenekler"
}, },
"Organize widgets into collapsible groups": {
"Organize widgets into collapsible groups": ""
},
"Other": { "Other": {
"Other": "Diğer" "Other": "Diğer"
}, },
@@ -2720,6 +2747,9 @@
"Password": { "Password": {
"Password": "Parola" "Password": "Parola"
}, },
"Pattern": {
"Pattern": ""
},
"Pause": { "Pause": {
"Pause": "Duraklat" "Pause": "Duraklat"
}, },
@@ -2981,6 +3011,9 @@
"Repeat": { "Repeat": {
"Repeat": "" "Repeat": ""
}, },
"Replacement": {
"Replacement": ""
},
"Report": { "Report": {
"Report": "Rapor" "Report": "Rapor"
}, },
@@ -3614,6 +3647,9 @@
"Sync Mode with Portal": { "Sync Mode with Portal": {
"Sync Mode with Portal": "Modu Portal ile Eşitle" "Sync Mode with Portal": "Modu Portal ile Eşitle"
}, },
"Sync Position Across Screens": {
"Sync Position Across Screens": ""
},
"Sync dark mode with settings portals for system-wide theme hints": { "Sync dark mode with settings portals for system-wide theme hints": {
"Sync dark mode with settings portals for system-wide theme hints": "Sistem genelindeki tema ipuçları için karanlık modu ayar portalları ile senkronize et" "Sync dark mode with settings portals for system-wide theme hints": "Sistem genelindeki tema ipuçları için karanlık modu ayar portalları ile senkronize et"
}, },
@@ -3839,6 +3875,9 @@
"Unfocused Color": { "Unfocused Color": {
"Unfocused Color": "" "Unfocused Color": ""
}, },
"Ungrouped": {
"Ungrouped": ""
},
"Uninstall Plugin": { "Uninstall Plugin": {
"Uninstall Plugin": "Eklentiyi Kaldır" "Uninstall Plugin": "Eklentiyi Kaldır"
}, },
@@ -3938,9 +3977,15 @@
"Use light theme instead of dark theme": { "Use light theme instead of dark theme": {
"Use light theme instead of dark theme": "Karanlık tema yerine aydınlık tema kullan" "Use light theme instead of dark theme": "Karanlık tema yerine aydınlık tema kullan"
}, },
"Use smaller notification cards": {
"Use smaller notification cards": ""
},
"Use sound theme from system settings": { "Use sound theme from system settings": {
"Use sound theme from system settings": "Sistem ayarlarındaki ses temasını kullan" "Use sound theme from system settings": "Sistem ayarlarındaki ses temasını kullan"
}, },
"Use the same position and size on all displays": {
"Use the same position and size on all displays": ""
},
"Use trigger prefix to activate": { "Use trigger prefix to activate": {
"Use trigger prefix to activate": "" "Use trigger prefix to activate": ""
}, },

View File

@@ -21,10 +21,10 @@
"%1 display(s)": "%1 显示" "%1 display(s)": "%1 显示"
}, },
"%1 exists but is not included in config. Custom keybinds will not work until this is fixed.": { "%1 exists but is not included in config. Custom keybinds will not work until this is fixed.": {
"%1 exists but is not included in config. Custom keybinds will not work until this is fixed.": "" "%1 exists but is not included in config. Custom keybinds will not work until this is fixed.": "%1存在但并未被包含至配置文件。在此问题修复前自定义快捷键绑定将不会生效。"
}, },
"%1 is now included in config": { "%1 is now included in config": {
"%1 is now included in config": "" "%1 is now included in config": "%1现在已被包含至配置文件"
}, },
"%1 job(s)": { "%1 job(s)": {
"%1 job(s)": "%1 个任务" "%1 job(s)": "%1 个任务"
@@ -239,6 +239,9 @@
"All displays": { "All displays": {
"All displays": "所有显示器" "All displays": "所有显示器"
}, },
"Allow clicks to pass through the widget": {
"Allow clicks to pass through the widget": ""
},
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": { "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/退格: 返回 • F1/I: 文件信息 • F10: 帮助 • Esc: 关闭" "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/退格: 返回 • F1/I: 文件信息 • F10: 帮助 • Esc: 关闭"
}, },
@@ -275,6 +278,9 @@
"Anonymous Identity (optional)": { "Anonymous Identity (optional)": {
"Anonymous Identity (optional)": "匿名身份(可选)" "Anonymous Identity (optional)": "匿名身份(可选)"
}, },
"App ID Substitutions": {
"App ID Substitutions": ""
},
"App Launcher": { "App Launcher": {
"App Launcher": "启动器" "App Launcher": "启动器"
}, },
@@ -708,7 +714,7 @@
"Clear at Startup": "启动时清除" "Clear at Startup": "启动时清除"
}, },
"Click 'Setup' to create %1 and add include to config.": { "Click 'Setup' to create %1 and add include to config.": {
"Click 'Setup' to create %1 and add include to config.": "" "Click 'Setup' to create %1 and add include to 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.": {
"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.": "点击设置以创建光标配置,并导入至合成器配置文件。"
@@ -722,8 +728,11 @@
"Click Import to add a .ovpn or .conf": { "Click Import to add a .ovpn or .conf": {
"Click Import to add a .ovpn or .conf": "点击导入添加 .ovpn 或 .conf 文件" "Click Import to add a .ovpn or .conf": "点击导入添加 .ovpn 或 .conf 文件"
}, },
"Click Through": {
"Click Through": ""
},
"Click any shortcut to edit. Changes save to %1": { "Click any shortcut to edit. Changes save to %1": {
"Click any shortcut to edit. Changes save to %1": "" "Click any shortcut to edit. Changes save to %1": "点击任意快捷方式以编辑。更改将保存至%1。"
}, },
"Click any shortcut to edit. Changes save to dms/binds.kdl": { "Click any shortcut to edit. Changes save to dms/binds.kdl": {
"Click any shortcut to edit. Changes save to dms/binds.kdl": "点击任意快捷方式进行编辑。更改将保存到 dms/binds.kdl" "Click any shortcut to edit. Changes save to dms/binds.kdl": "点击任意快捷方式进行编辑。更改将保存到 dms/binds.kdl"
@@ -1653,7 +1662,7 @@
"Fixing...": "正在修复..." "Fixing...": "正在修复..."
}, },
"Flags": { "Flags": {
"Flags": "" "Flags": "标签"
}, },
"Flipped": { "Flipped": {
"Flipped": "翻转" "Flipped": "翻转"
@@ -1671,16 +1680,16 @@
"Focus at Startup": "启动时聚焦" "Focus at Startup": "启动时聚焦"
}, },
"Focused Border": { "Focused Border": {
"Focused Border": "" "Focused Border": "聚焦边框"
}, },
"Focused Color": { "Focused Color": {
"Focused Color": "" "Focused Color": "聚焦颜色"
}, },
"Focused Window": { "Focused Window": {
"Focused Window": "当前窗口" "Focused Window": "当前窗口"
}, },
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "" "Follow Monitor Focus": "遵守显示器聚焦"
}, },
"Follow focus": { "Follow focus": {
"Follow focus": "跟随焦点" "Follow focus": "跟随焦点"
@@ -1787,6 +1796,9 @@
"Grid Columns": { "Grid Columns": {
"Grid Columns": "网格列" "Grid Columns": "网格列"
}, },
"Group": {
"Group": ""
},
"Group Workspace Apps": { "Group Workspace Apps": {
"Group Workspace Apps": "分组工作区应用" "Group Workspace Apps": "分组工作区应用"
}, },
@@ -1796,9 +1808,15 @@
"Group multiple windows of the same app together with a window count indicator": { "Group multiple windows of the same app together with a window count indicator": {
"Group multiple windows of the same app together with a window count indicator": "将同一应用的多个窗口合并显示,并标注窗口数量" "Group multiple windows of the same app together with a window count indicator": "将同一应用的多个窗口合并显示,并标注窗口数量"
}, },
"Group removed": {
"Group removed": ""
},
"Group repeated application icons in unfocused workspaces": { "Group repeated application icons in unfocused workspaces": {
"Group repeated application icons in unfocused workspaces": "在不聚焦的工作区中将重复应用图标分组" "Group repeated application icons in unfocused workspaces": "在不聚焦的工作区中将重复应用图标分组"
}, },
"Groups": {
"Groups": ""
},
"HDR (EDID)": { "HDR (EDID)": {
"HDR (EDID)": "HDREDID" "HDR (EDID)": "HDREDID"
}, },
@@ -1827,7 +1845,7 @@
"Hibernate": "休眠" "Hibernate": "休眠"
}, },
"Hidden": { "Hidden": {
"Hidden": "" "Hidden": "已隐藏"
}, },
"Hidden Network": { "Hidden Network": {
"Hidden Network": "隐藏的网络" "Hidden Network": "隐藏的网络"
@@ -2148,7 +2166,7 @@
"Lock fade grace period": "锁定淡出时间" "Lock fade grace period": "锁定淡出时间"
}, },
"Locked": { "Locked": {
"Locked": "" "Locked": "已锁定"
}, },
"Log Out": { "Log Out": {
"Log Out": "注销" "Log Out": "注销"
@@ -2160,7 +2178,7 @@
"Long Text": "长文本" "Long Text": "长文本"
}, },
"Long press": { "Long press": {
"Long press": "" "Long press": "长按"
}, },
"Longitude": { "Longitude": {
"Longitude": "经度" "Longitude": "经度"
@@ -2195,6 +2213,9 @@
"Manual Show/Hide": { "Manual Show/Hide": {
"Manual Show/Hide": "手动显示/隐藏" "Manual Show/Hide": "手动显示/隐藏"
}, },
"Map window class names to icon names for proper icon display": {
"Map window class names to icon names for proper icon display": ""
},
"Margin": { "Margin": {
"Margin": "边距" "Margin": "边距"
}, },
@@ -2417,6 +2438,9 @@
"New York, NY": { "New York, NY": {
"New York, NY": "纽约,美国纽约州" "New York, NY": "纽约,美国纽约州"
}, },
"New group name...": {
"New group name...": ""
},
"Next Transition": { "Next Transition": {
"Next Transition": "下一过渡" "Next Transition": "下一过渡"
}, },
@@ -2648,6 +2672,9 @@
"Options": { "Options": {
"Options": "选项" "Options": "选项"
}, },
"Organize widgets into collapsible groups": {
"Organize widgets into collapsible groups": ""
},
"Other": { "Other": {
"Other": "其他" "Other": "其他"
}, },
@@ -2720,6 +2747,9 @@
"Password": { "Password": {
"Password": "密码" "Password": "密码"
}, },
"Pattern": {
"Pattern": ""
},
"Pause": { "Pause": {
"Pause": "暂停" "Pause": "暂停"
}, },
@@ -2967,7 +2997,7 @@
"Reject Jobs": "拒绝任务" "Reject Jobs": "拒绝任务"
}, },
"Release": { "Release": {
"Release": "" "Release": "松开"
}, },
"Reload Plugin": { "Reload Plugin": {
"Reload Plugin": "重载插件" "Reload Plugin": "重载插件"
@@ -2979,7 +3009,10 @@
"Remove gaps and border when windows are maximized": "当窗口最大化时移除间距和边框" "Remove gaps and border when windows are maximized": "当窗口最大化时移除间距和边框"
}, },
"Repeat": { "Repeat": {
"Repeat": "" "Repeat": "重复"
},
"Replacement": {
"Replacement": ""
}, },
"Report": { "Report": {
"Report": "报告" "Report": "报告"
@@ -3396,7 +3429,7 @@
"Show all 9 tags instead of only occupied tags (DWL only)": "显示所有 9 个标签,而非仅占用的标签(仅限 DWL" "Show all 9 tags instead of only occupied tags (DWL only)": "显示所有 9 个标签,而非仅占用的标签(仅限 DWL"
}, },
"Show an outline ring around the focused workspace indicator": { "Show an outline ring around the focused workspace indicator": {
"Show an outline ring around the focused workspace indicator": "" "Show an outline ring around the focused workspace indicator": "在聚焦工作区指示器周围显示一个轮廓环"
}, },
"Show cava audio visualizer in media widget": { "Show cava audio visualizer in media widget": {
"Show cava audio visualizer in media widget": "在多媒体部件中显示cava音频可视化" "Show cava audio visualizer in media widget": "在多媒体部件中显示cava音频可视化"
@@ -3468,7 +3501,7 @@
"Show workspace name on horizontal bars, and first letter on vertical bars": "在水平状态栏上显示工作区名称,而在垂直状态栏上显示首字母。" "Show workspace name on horizontal bars, and first letter on vertical bars": "在水平状态栏上显示工作区名称,而在垂直状态栏上显示首字母。"
}, },
"Show workspaces of the currently focused monitor": { "Show workspaces of the currently focused monitor": {
"Show workspaces of the currently focused monitor": "" "Show workspaces of the currently focused monitor": "显示当前聚焦显示器的工作区"
}, },
"Shows all running applications with focus indication": { "Shows all running applications with focus indication": {
"Shows all running applications with focus indication": "显示所有正在运行应用程序,并标记焦点所在" "Shows all running applications with focus indication": "显示所有正在运行应用程序,并标记焦点所在"
@@ -3614,6 +3647,9 @@
"Sync Mode with Portal": { "Sync Mode with Portal": {
"Sync Mode with Portal": "同步系统深色模式" "Sync Mode with Portal": "同步系统深色模式"
}, },
"Sync Position Across Screens": {
"Sync Position Across Screens": ""
},
"Sync dark mode with settings portals for system-wide theme hints": { "Sync dark mode with settings portals for system-wide theme hints": {
"Sync dark mode with settings portals for system-wide theme hints": "随系统设置开启深色模式,以适配全局主题" "Sync dark mode with settings portals for system-wide theme hints": "随系统设置开启深色模式,以适配全局主题"
}, },
@@ -3837,7 +3873,10 @@
"Unavailable": "不可用" "Unavailable": "不可用"
}, },
"Unfocused Color": { "Unfocused Color": {
"Unfocused Color": "" "Unfocused Color": "未聚焦颜色"
},
"Ungrouped": {
"Ungrouped": ""
}, },
"Uninstall Plugin": { "Uninstall Plugin": {
"Uninstall Plugin": "卸载插件" "Uninstall Plugin": "卸载插件"
@@ -3882,7 +3921,7 @@
"Update Plugin": "更新插件" "Update Plugin": "更新插件"
}, },
"Urgent Color": { "Urgent Color": {
"Urgent Color": "" "Urgent Color": "高亮颜色"
}, },
"Usage Tips": { "Usage Tips": {
"Usage Tips": "使用提示" "Usage Tips": "使用提示"
@@ -3938,9 +3977,15 @@
"Use light theme instead of dark theme": { "Use light theme instead of dark theme": {
"Use light theme instead of dark theme": "使用浅色主题替代深色主题" "Use light theme instead of dark theme": "使用浅色主题替代深色主题"
}, },
"Use smaller notification cards": {
"Use smaller notification cards": ""
},
"Use sound theme from system settings": { "Use sound theme from system settings": {
"Use sound theme from system settings": "使用系统设置中的声音主题" "Use sound theme from system settings": "使用系统设置中的声音主题"
}, },
"Use the same position and size on all displays": {
"Use the same position and size on all displays": ""
},
"Use trigger prefix to activate": { "Use trigger prefix to activate": {
"Use trigger prefix to activate": "使用触发前缀以激活" "Use trigger prefix to activate": "使用触发前缀以激活"
}, },
@@ -4178,7 +4223,7 @@
"Workspace": "工作区" "Workspace": "工作区"
}, },
"Workspace Appearance": { "Workspace Appearance": {
"Workspace Appearance": "" "Workspace Appearance": "工作区外观"
}, },
"Workspace Index Numbers": { "Workspace Index Numbers": {
"Workspace Index Numbers": "工作区序号" "Workspace Index Numbers": "工作区序号"
@@ -4367,7 +4412,7 @@
"Night mode & gamma": "夜间模式与伽玛", "Night mode & gamma": "夜间模式与伽玛",
"Per-screen config": "按屏幕区分设置", "Per-screen config": "按屏幕区分设置",
"Quick system toggles": "快速系统切换", "Quick system toggles": "快速系统切换",
"Security & privacy": "" "Security & privacy": "安全与隐私"
}, },
"greeter feature card title": { "greeter feature card title": {
"App Theming": "应用主题", "App Theming": "应用主题",
@@ -4631,7 +4676,7 @@
"update dms for NM integration.": "更新 DMS 以集成 NM" "update dms for NM integration.": "更新 DMS 以集成 NM"
}, },
"version requirement": { "version requirement": {
"Requires %1": "" "Requires %1": "需要%1"
}, },
"wallpaper directory file browser title": { "wallpaper directory file browser title": {
"Select Wallpaper Directory": "选择壁纸位置" "Select Wallpaper Directory": "选择壁纸位置"

View File

@@ -239,6 +239,9 @@
"All displays": { "All displays": {
"All displays": "所有螢幕" "All displays": "所有螢幕"
}, },
"Allow clicks to pass through the widget": {
"Allow clicks to pass through the widget": ""
},
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": { "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: 返回 • F1/I: 檔案資訊 • F10: 幫助 • Esc: 關閉" "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: 返回 • F1/I: 檔案資訊 • F10: 幫助 • Esc: 關閉"
}, },
@@ -275,6 +278,9 @@
"Anonymous Identity (optional)": { "Anonymous Identity (optional)": {
"Anonymous Identity (optional)": "匿名身分 (可選)" "Anonymous Identity (optional)": "匿名身分 (可選)"
}, },
"App ID Substitutions": {
"App ID Substitutions": ""
},
"App Launcher": { "App Launcher": {
"App Launcher": "應用程式啟動器" "App Launcher": "應用程式啟動器"
}, },
@@ -722,6 +728,9 @@
"Click Import to add a .ovpn or .conf": { "Click Import to add a .ovpn or .conf": {
"Click Import to add a .ovpn or .conf": "點擊匯入以新增 .ovpn 或 .conf" "Click Import to add a .ovpn or .conf": "點擊匯入以新增 .ovpn 或 .conf"
}, },
"Click Through": {
"Click Through": ""
},
"Click any shortcut to edit. Changes save to %1": { "Click any shortcut to edit. Changes save to %1": {
"Click any shortcut to edit. Changes save to %1": "點擊任一快捷鍵進行編輯。變更會儲存到 %1" "Click any shortcut to edit. Changes save to %1": "點擊任一快捷鍵進行編輯。變更會儲存到 %1"
}, },
@@ -1787,6 +1796,9 @@
"Grid Columns": { "Grid Columns": {
"Grid Columns": "網格欄數" "Grid Columns": "網格欄數"
}, },
"Group": {
"Group": ""
},
"Group Workspace Apps": { "Group Workspace Apps": {
"Group Workspace Apps": "群組工作區應用程式" "Group Workspace Apps": "群組工作區應用程式"
}, },
@@ -1796,9 +1808,15 @@
"Group multiple windows of the same app together with a window count indicator": { "Group multiple windows of the same app together with a window count indicator": {
"Group multiple windows of the same app together with a window count indicator": "將同一應用程式的多個視窗匯集在一起,並附帶視窗數量指示器" "Group multiple windows of the same app together with a window count indicator": "將同一應用程式的多個視窗匯集在一起,並附帶視窗數量指示器"
}, },
"Group removed": {
"Group removed": ""
},
"Group repeated application icons in unfocused workspaces": { "Group repeated application icons in unfocused workspaces": {
"Group repeated application icons in unfocused workspaces": "群組非作用中工作區的重複應用程式圖示" "Group repeated application icons in unfocused workspaces": "群組非作用中工作區的重複應用程式圖示"
}, },
"Groups": {
"Groups": ""
},
"HDR (EDID)": { "HDR (EDID)": {
"HDR (EDID)": "HDR (EDID)" "HDR (EDID)": "HDR (EDID)"
}, },
@@ -2195,6 +2213,9 @@
"Manual Show/Hide": { "Manual Show/Hide": {
"Manual Show/Hide": "手動顯示/隱藏" "Manual Show/Hide": "手動顯示/隱藏"
}, },
"Map window class names to icon names for proper icon display": {
"Map window class names to icon names for proper icon display": ""
},
"Margin": { "Margin": {
"Margin": "邊距" "Margin": "邊距"
}, },
@@ -2417,6 +2438,9 @@
"New York, NY": { "New York, NY": {
"New York, NY": "紐約" "New York, NY": "紐約"
}, },
"New group name...": {
"New group name...": ""
},
"Next Transition": { "Next Transition": {
"Next Transition": "下一個轉場" "Next Transition": "下一個轉場"
}, },
@@ -2648,6 +2672,9 @@
"Options": { "Options": {
"Options": "選項" "Options": "選項"
}, },
"Organize widgets into collapsible groups": {
"Organize widgets into collapsible groups": ""
},
"Other": { "Other": {
"Other": "其他" "Other": "其他"
}, },
@@ -2720,6 +2747,9 @@
"Password": { "Password": {
"Password": "密碼" "Password": "密碼"
}, },
"Pattern": {
"Pattern": ""
},
"Pause": { "Pause": {
"Pause": "暫停" "Pause": "暫停"
}, },
@@ -2981,6 +3011,9 @@
"Repeat": { "Repeat": {
"Repeat": "重複" "Repeat": "重複"
}, },
"Replacement": {
"Replacement": ""
},
"Report": { "Report": {
"Report": "報告" "Report": "報告"
}, },
@@ -3614,6 +3647,9 @@
"Sync Mode with Portal": { "Sync Mode with Portal": {
"Sync Mode with Portal": "透過 Portal 同步主題模式" "Sync Mode with Portal": "透過 Portal 同步主題模式"
}, },
"Sync Position Across Screens": {
"Sync Position Across Screens": ""
},
"Sync dark mode with settings portals for system-wide theme hints": { "Sync dark mode with settings portals for system-wide theme hints": {
"Sync dark mode with settings portals for system-wide theme hints": "將暗模式與設定入口網站同步以取得系統範圍的主題提示" "Sync dark mode with settings portals for system-wide theme hints": "將暗模式與設定入口網站同步以取得系統範圍的主題提示"
}, },
@@ -3839,6 +3875,9 @@
"Unfocused Color": { "Unfocused Color": {
"Unfocused Color": "" "Unfocused Color": ""
}, },
"Ungrouped": {
"Ungrouped": ""
},
"Uninstall Plugin": { "Uninstall Plugin": {
"Uninstall Plugin": "解除安裝插件" "Uninstall Plugin": "解除安裝插件"
}, },
@@ -3938,9 +3977,15 @@
"Use light theme instead of dark theme": { "Use light theme instead of dark theme": {
"Use light theme instead of dark theme": "使用淺色主題而不是深色主題" "Use light theme instead of dark theme": "使用淺色主題而不是深色主題"
}, },
"Use smaller notification cards": {
"Use smaller notification cards": ""
},
"Use sound theme from system settings": { "Use sound theme from system settings": {
"Use sound theme from system settings": "使用系統設定中的音效主題" "Use sound theme from system settings": "使用系統設定中的音效主題"
}, },
"Use the same position and size on all displays": {
"Use the same position and size on all displays": ""
},
"Use trigger prefix to activate": { "Use trigger prefix to activate": {
"Use trigger prefix to activate": "使用觸發前綴啟用" "Use trigger prefix to activate": "使用觸發前綴啟用"
}, },

View File

@@ -580,6 +580,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Allow clicks to pass through the widget",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close", "term": "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close",
"translation": "", "translation": "",
@@ -678,6 +685,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "App ID Substitutions",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "App Launcher", "term": "App Launcher",
"translation": "", "translation": "",
@@ -1756,6 +1770,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Click Through",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Click any shortcut to edit. Changes save to %1", "term": "Click any shortcut to edit. Changes save to %1",
"translation": "", "translation": "",
@@ -4381,6 +4402,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Group",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Group Workspace Apps", "term": "Group Workspace Apps",
"translation": "", "translation": "",
@@ -4402,6 +4430,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Group removed",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Group repeated application icons in unfocused workspaces", "term": "Group repeated application icons in unfocused workspaces",
"translation": "", "translation": "",
@@ -4409,6 +4444,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Groups",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "HDR (EDID)", "term": "HDR (EDID)",
"translation": "", "translation": "",
@@ -5452,6 +5494,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Map window class names to icon names for proper icon display",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Margin", "term": "Margin",
"translation": "", "translation": "",
@@ -6012,6 +6061,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "New group name...",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Next", "term": "Next",
"translation": "", "translation": "",
@@ -6642,6 +6698,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Organize widgets into collapsible groups",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Other", "term": "Other",
"translation": "", "translation": "",
@@ -6810,6 +6873,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Pattern",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Pause", "term": "Pause",
"translation": "", "translation": "",
@@ -7440,6 +7510,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Replacement",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Report", "term": "Report",
"translation": "", "translation": "",
@@ -8686,13 +8763,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Show password",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Show weather information in top bar and control center", "term": "Show weather information in top bar and control center",
"translation": "", "translation": "",
@@ -9071,6 +9141,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Sync Position Across Screens",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Sync dark mode with settings portals for system-wide theme hints", "term": "Sync dark mode with settings portals for system-wide theme hints",
"translation": "", "translation": "",
@@ -9610,6 +9687,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Ungrouped",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Uninstall", "term": "Uninstall",
"translation": "", "translation": "",
@@ -9876,6 +9960,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Use smaller notification cards",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Use sound theme from system settings", "term": "Use sound theme from system settings",
"translation": "", "translation": "",
@@ -9883,6 +9974,13 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Use the same position and size on all displays",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Use trigger prefix to activate", "term": "Use trigger prefix to activate",
"translation": "", "translation": "",