commit d949c86cf944555b36f3d98d41b4ec71c556db14 Author: MSVSphere Packaging Team Date: Fri Apr 14 13:12:29 2023 +0300 import gnome-shell-extensions-40.7-7.el9 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..73c6888 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/gnome-shell-extensions-40.7.tar.xz diff --git a/.gnome-shell-extensions.metadata b/.gnome-shell-extensions.metadata new file mode 100644 index 0000000..296addc --- /dev/null +++ b/.gnome-shell-extensions.metadata @@ -0,0 +1 @@ +a905a152407590d18e8dc14bb4133fbde0e03abb SOURCES/gnome-shell-extensions-40.7.tar.xz diff --git a/SOURCES/0001-Add-gesture-inhibitor-extension.patch b/SOURCES/0001-Add-gesture-inhibitor-extension.patch new file mode 100644 index 0000000..81a0325 --- /dev/null +++ b/SOURCES/0001-Add-gesture-inhibitor-extension.patch @@ -0,0 +1,438 @@ +From 38c4fc02dea622f198b078eb4003c777d982119c Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Thu, 28 Jan 2021 00:06:12 +0100 +Subject: [PATCH 1/5] Add gesture-inhibitor extension + +This extension may disable default GNOME Shell gestures. +--- + extensions/gesture-inhibitor/extension.js | 75 +++++++++++++++++++ + extensions/gesture-inhibitor/meson.build | 8 ++ + extensions/gesture-inhibitor/metadata.json.in | 12 +++ + ...l.extensions.gesture-inhibitor.gschema.xml | 25 +++++++ + extensions/gesture-inhibitor/stylesheet.css | 1 + + meson.build | 1 + + 6 files changed, 122 insertions(+) + create mode 100644 extensions/gesture-inhibitor/extension.js + create mode 100644 extensions/gesture-inhibitor/meson.build + create mode 100644 extensions/gesture-inhibitor/metadata.json.in + create mode 100644 extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml + create mode 100644 extensions/gesture-inhibitor/stylesheet.css + +diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js +new file mode 100644 +index 00000000..e74ede2f +--- /dev/null ++++ b/extensions/gesture-inhibitor/extension.js +@@ -0,0 +1,75 @@ ++/* extension.js ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ * ++ * SPDX-License-Identifier: GPL-2.0-or-later ++ */ ++ ++/* exported init */ ++ ++const Clutter = imports.gi.Clutter; ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const ViewSelector = imports.ui.viewSelector; ++const EdgeDragAction = imports.ui.edgeDragAction; ++const WindowManager = imports.ui.windowManager; ++const St = imports.gi.St; ++const Gio = imports.gi.Gio; ++ ++class Extension { ++ constructor() { ++ this._settings = ExtensionUtils.getSettings(); ++ let actions = global.stage.get_actions(); ++ ++ actions.forEach(a => { ++ if (a instanceof ViewSelector.ShowOverviewAction) ++ this._showOverview = a; ++ else if (a instanceof WindowManager.AppSwitchAction) ++ this._appSwitch = a; ++ else if (a instanceof EdgeDragAction.EdgeDragAction && ++ a._side == St.Side.BOTTOM) ++ this._showOsk = a; ++ else if (a instanceof EdgeDragAction.EdgeDragAction && ++ a._side == St.Side.TOP) ++ this._unfullscreen = a; ++ else if (a instanceof EdgeDragAction.EdgeDragAction) ++ this._showAppGrid = a; ++ }); ++ ++ this._map = [ ++ { setting: 'overview', action: this._showOverview }, ++ { setting: 'app-switch', action: this._appSwitch }, ++ { setting: 'show-osk', action: this._showOsk }, ++ { setting: 'unfullscreen', action: this._unfullscreen }, ++ { setting: 'show-app-grid', action: this._showAppGrid } ++ ]; ++ } ++ ++ enable() { ++ this._map.forEach(m => { ++ this._settings.bind(m.setting, m.action, 'enabled', ++ Gio.SettingsBindFlags.DEFAULT); ++ }); ++ } ++ ++ disable() { ++ this._map.forEach(m => { ++ m.action.enabled = true; ++ }); ++ } ++} ++ ++function init() { ++ return new Extension(); ++} +diff --git a/extensions/gesture-inhibitor/meson.build b/extensions/gesture-inhibitor/meson.build +new file mode 100644 +index 00000000..fdad5cc8 +--- /dev/null ++++ b/extensions/gesture-inhibitor/meson.build +@@ -0,0 +1,8 @@ ++extension_data += configure_file( ++ input: metadata_name + '.in', ++ output: metadata_name, ++ configuration: metadata_conf ++) ++ ++# extension_sources += files('prefs.js') ++extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml') +diff --git a/extensions/gesture-inhibitor/metadata.json.in b/extensions/gesture-inhibitor/metadata.json.in +new file mode 100644 +index 00000000..37d6a117 +--- /dev/null ++++ b/extensions/gesture-inhibitor/metadata.json.in +@@ -0,0 +1,12 @@ ++{ ++ "uuid": "@uuid@", ++ "extension-id": "@extension_id@", ++ "settings-schema": "@gschemaname@", ++ "gettext-domain": "@gettext_domain@", ++ "name": "Gesture Inhibitor", ++ "description": "Makes touchscreen gestures optional.", ++ "shell-version": [ "@shell_current@" ], ++ "original-authors": [ "cgarnach@redhat.com" ], ++ "url": "@url@" ++} ++ +diff --git a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml +new file mode 100644 +index 00000000..1d67dcc0 +--- /dev/null ++++ b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml +@@ -0,0 +1,25 @@ ++ ++ ++ ++ true ++ Show app grid gesture ++ ++ ++ true ++ Show OSK gesture ++ ++ ++ true ++ Show Overview gesture ++ ++ ++ true ++ Application switch gesture ++ ++ ++ true ++ Unfullscreen gesture ++ ++ ++ ++ +diff --git a/extensions/gesture-inhibitor/stylesheet.css b/extensions/gesture-inhibitor/stylesheet.css +new file mode 100644 +index 00000000..37b93f21 +--- /dev/null ++++ b/extensions/gesture-inhibitor/stylesheet.css +@@ -0,0 +1 @@ ++/* Add your custom extension styling here */ +diff --git a/meson.build b/meson.build +index 3600e824..b3812b8d 100644 +--- a/meson.build ++++ b/meson.build +@@ -49,6 +49,7 @@ all_extensions += [ + 'classification-banner', + 'custom-menu', + 'dash-to-dock', ++ 'gesture-inhibitor', + 'native-window-placement', + 'panel-favorites', + 'systemMonitor', +-- +2.38.1 + + +From aff83154aa639e33e5ba925b5ddcc824a9beaf6e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 20 Oct 2021 19:48:46 +0200 +Subject: [PATCH 2/5] gesture-inhibitor: Fix up indentation + +--- + extensions/gesture-inhibitor/extension.js | 59 +++++++++++------------ + 1 file changed, 29 insertions(+), 30 deletions(-) + +diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js +index e74ede2f..734d61cc 100644 +--- a/extensions/gesture-inhibitor/extension.js ++++ b/extensions/gesture-inhibitor/extension.js +@@ -29,44 +29,43 @@ const Gio = imports.gi.Gio; + + class Extension { + constructor() { +- this._settings = ExtensionUtils.getSettings(); +- let actions = global.stage.get_actions(); ++ this._settings = ExtensionUtils.getSettings(); ++ let actions = global.stage.get_actions(); + +- actions.forEach(a => { +- if (a instanceof ViewSelector.ShowOverviewAction) +- this._showOverview = a; +- else if (a instanceof WindowManager.AppSwitchAction) +- this._appSwitch = a; +- else if (a instanceof EdgeDragAction.EdgeDragAction && +- a._side == St.Side.BOTTOM) +- this._showOsk = a; +- else if (a instanceof EdgeDragAction.EdgeDragAction && +- a._side == St.Side.TOP) +- this._unfullscreen = a; +- else if (a instanceof EdgeDragAction.EdgeDragAction) +- this._showAppGrid = a; +- }); ++ actions.forEach(a => { ++ if (a instanceof ViewSelector.ShowOverviewAction) ++ this._showOverview = a; ++ else if (a instanceof WindowManager.AppSwitchAction) ++ this._appSwitch = a; ++ else if (a instanceof EdgeDragAction.EdgeDragAction && ++ a._side == St.Side.BOTTOM) ++ this._showOsk = a; ++ else if (a instanceof EdgeDragAction.EdgeDragAction && ++ a._side == St.Side.TOP) ++ this._unfullscreen = a; ++ else if (a instanceof EdgeDragAction.EdgeDragAction) ++ this._showAppGrid = a; ++ }); + +- this._map = [ +- { setting: 'overview', action: this._showOverview }, +- { setting: 'app-switch', action: this._appSwitch }, +- { setting: 'show-osk', action: this._showOsk }, +- { setting: 'unfullscreen', action: this._unfullscreen }, +- { setting: 'show-app-grid', action: this._showAppGrid } +- ]; ++ this._map = [ ++ { setting: 'overview', action: this._showOverview }, ++ { setting: 'app-switch', action: this._appSwitch }, ++ { setting: 'show-osk', action: this._showOsk }, ++ { setting: 'unfullscreen', action: this._unfullscreen }, ++ { setting: 'show-app-grid', action: this._showAppGrid } ++ ]; + } + + enable() { +- this._map.forEach(m => { +- this._settings.bind(m.setting, m.action, 'enabled', +- Gio.SettingsBindFlags.DEFAULT); +- }); ++ this._map.forEach(m => { ++ this._settings.bind(m.setting, m.action, 'enabled', ++ Gio.SettingsBindFlags.DEFAULT); ++ }); + } + + disable() { +- this._map.forEach(m => { +- m.action.enabled = true; +- }); ++ this._map.forEach( ++ m => (m.action.enabled = true)); + } + } + +-- +2.38.1 + + +From 5c8b087e99f79cc6bd83b5e7ad0775f8510e1a5d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 20 Oct 2021 19:47:05 +0200 +Subject: [PATCH 3/5] gesture-inhibitor: Adjust for GNOME 40 changes + +--- + extensions/gesture-inhibitor/extension.js | 11 +++-------- + ...ome.shell.extensions.gesture-inhibitor.gschema.xml | 4 ---- + 2 files changed, 3 insertions(+), 12 deletions(-) + +diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js +index 734d61cc..13586108 100644 +--- a/extensions/gesture-inhibitor/extension.js ++++ b/extensions/gesture-inhibitor/extension.js +@@ -21,8 +21,8 @@ + const Clutter = imports.gi.Clutter; + const ExtensionUtils = imports.misc.extensionUtils; + const Me = ExtensionUtils.getCurrentExtension(); +-const ViewSelector = imports.ui.viewSelector; + const EdgeDragAction = imports.ui.edgeDragAction; ++const Main = imports.ui.main; + const WindowManager = imports.ui.windowManager; + const St = imports.gi.St; + const Gio = imports.gi.Gio; +@@ -33,9 +33,7 @@ class Extension { + let actions = global.stage.get_actions(); + + actions.forEach(a => { +- if (a instanceof ViewSelector.ShowOverviewAction) +- this._showOverview = a; +- else if (a instanceof WindowManager.AppSwitchAction) ++ if (a instanceof WindowManager.AppSwitchAction) + this._appSwitch = a; + else if (a instanceof EdgeDragAction.EdgeDragAction && + a._side == St.Side.BOTTOM) +@@ -43,16 +41,13 @@ class Extension { + else if (a instanceof EdgeDragAction.EdgeDragAction && + a._side == St.Side.TOP) + this._unfullscreen = a; +- else if (a instanceof EdgeDragAction.EdgeDragAction) +- this._showAppGrid = a; + }); + + this._map = [ +- { setting: 'overview', action: this._showOverview }, ++ { setting: 'overview', action: Main.overview._swipeTracker }, + { setting: 'app-switch', action: this._appSwitch }, + { setting: 'show-osk', action: this._showOsk }, + { setting: 'unfullscreen', action: this._unfullscreen }, +- { setting: 'show-app-grid', action: this._showAppGrid } + ]; + } + +diff --git a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml +index 1d67dcc0..4bdf9260 100644 +--- a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml ++++ b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml +@@ -1,9 +1,5 @@ + + +- +- true +- Show app grid gesture +- + + true + Show OSK gesture +-- +2.38.1 + + +From 7f8031a97046a18ebb39972150376b9f1cf9a70b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 18 Nov 2021 15:54:23 +0100 +Subject: [PATCH 4/5] gesture-inhibitor: Unbind setting on disable + +--- + extensions/gesture-inhibitor/extension.js | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js +index 13586108..02b34ec4 100644 +--- a/extensions/gesture-inhibitor/extension.js ++++ b/extensions/gesture-inhibitor/extension.js +@@ -59,8 +59,10 @@ class Extension { + } + + disable() { +- this._map.forEach( +- m => (m.action.enabled = true)); ++ this._map.forEach(m => { ++ Gio.Settings.unbind(m.action, 'enabled'); ++ m.action.enabled = true; ++ }); + } + } + +-- +2.38.1 + + +From 15b4dde292cd1dd33c881289e6182d7261bee544 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 18 Nov 2021 16:06:09 +0100 +Subject: [PATCH 5/5] gesture-inhibitor: Override :enabled property + +Otherwise gnome-shell can re-enable an inhibited gesture behind our +back. +--- + extensions/gesture-inhibitor/extension.js | 23 ++++++++++++++++++++++- + 1 file changed, 22 insertions(+), 1 deletion(-) + +diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js +index 02b34ec4..fb8a6dc0 100644 +--- a/extensions/gesture-inhibitor/extension.js ++++ b/extensions/gesture-inhibitor/extension.js +@@ -49,18 +49,39 @@ class Extension { + { setting: 'show-osk', action: this._showOsk }, + { setting: 'unfullscreen', action: this._unfullscreen }, + ]; ++ ++ this._enabledDesc = Object.getOwnPropertyDescriptor( ++ Clutter.ActorMeta.prototype, 'enabled'); ++ } ++ ++ _overrideEnabledSetter(obj, set) { ++ if (!(obj instanceof Clutter.ActorMeta)) ++ return; ++ ++ const desc = set ++ ? { ...this._enabledDesc, set } ++ : { ...this._enabledDesc }; ++ Object.defineProperty(obj, 'enabled', desc); + } + + enable() { ++ const settings = this._settings; ++ + this._map.forEach(m => { +- this._settings.bind(m.setting, m.action, 'enabled', ++ settings.bind(m.setting, m.action, 'enabled', + Gio.SettingsBindFlags.DEFAULT); ++ ++ this._overrideEnabledSetter(m.action, function (value) { ++ if (settings.get_boolean(m.setting)) ++ this.set_enabled(value); ++ }); + }); + } + + disable() { + this._map.forEach(m => { + Gio.Settings.unbind(m.action, 'enabled'); ++ this._overrideEnabledSetter(m.action); + m.action.enabled = true; + }); + } +-- +2.38.1 + diff --git a/SOURCES/0001-Include-top-icons-in-classic-session.patch b/SOURCES/0001-Include-top-icons-in-classic-session.patch new file mode 100644 index 0000000..0e63ffd --- /dev/null +++ b/SOURCES/0001-Include-top-icons-in-classic-session.patch @@ -0,0 +1,32 @@ +From 1982ab4218fa3a7ff622fff5af7c15c2e11351f7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 23 Feb 2018 16:56:46 +0100 +Subject: [PATCH] Include top-icons in classic session + +--- + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/meson.build b/meson.build +index afc0133..78dee5b 100644 +--- a/meson.build ++++ b/meson.build +@@ -31,6 +31,7 @@ classic_extensions = [ + 'desktop-icons', + 'places-menu', + 'launch-new-instance', ++ 'top-icons', + 'window-list' + ] + +@@ -49,7 +50,6 @@ all_extensions += [ + 'native-window-placement', + 'panel-favorites', + 'systemMonitor', +- 'top-icons', + 'updates-dialog', + 'user-theme' + ] +-- +2.32.0 + diff --git a/SOURCES/0001-Update-style.patch b/SOURCES/0001-Update-style.patch new file mode 100644 index 0000000..c5a9e3f --- /dev/null +++ b/SOURCES/0001-Update-style.patch @@ -0,0 +1,43 @@ +From 9ca03a744552c43251523fd23292b243130e1f89 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Mon, 24 May 2021 15:36:04 +0200 +Subject: [PATCH] Update style + +--- + data/gnome-shell-sass | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Submodule data/gnome-shell-sass 9d66f7d..60230f4: +diff --git a/data/gnome-shell-sass/widgets/_panel.scss b/data/gnome-shell-sass/widgets/_panel.scss +index 1f46507..ad638b2 100644 +--- a/data/gnome-shell-sass/widgets/_panel.scss ++++ b/data/gnome-shell-sass/widgets/_panel.scss +@@ -67,6 +67,11 @@ $panel_transition_duration: 250ms; // same as the overview transition duration + } + } + ++ .panel-logo-icon { ++ padding-right: .4em; ++ icon-size: 1em; ++ } ++ + // status area icons + .system-status-icon { + icon-size: $base_icon_size; +diff --git a/data/gnome-classic.css b/data/gnome-classic.css +index 52e5367..3be81e9 100644 +--- a/data/gnome-classic.css ++++ b/data/gnome-classic.css +@@ -1234,6 +1234,9 @@ StScrollBar { + box-shadow: none; } + #panel .panel-button.clock-display:hover .clock, #panel .panel-button.clock-display:active .clock, #panel .panel-button.clock-display:overview .clock, #panel .panel-button.clock-display:focus .clock, #panel .panel-button.clock-display:checked .clock { + box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.2); } ++ #panel .panel-button .panel-logo-icon { ++ padding-right: .4em; ++ icon-size: 1em; } + #panel .panel-button .system-status-icon { + icon-size: 1.09em; + padding: 5px; +-- +2.28.0 + diff --git a/SOURCES/0001-apps-menu-Explicitly-set-label_actor.patch b/SOURCES/0001-apps-menu-Explicitly-set-label_actor.patch new file mode 100644 index 0000000..935a671 --- /dev/null +++ b/SOURCES/0001-apps-menu-Explicitly-set-label_actor.patch @@ -0,0 +1,29 @@ +From fe13aa54e7c104f63689fcd15957ab16ffc0c3ef Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 17 Mar 2016 17:15:38 +0100 +Subject: [PATCH] apps-menu: Explicitly set label_actor + +For some reason orca fails to pick up the label of category items, +so set the label_actor explicitly as workaround. +--- + extensions/apps-menu/extension.js | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js +index 983a4e7..f8cef41 100644 +--- a/extensions/apps-menu/extension.js ++++ b/extensions/apps-menu/extension.js +@@ -113,7 +113,9 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem { + else + name = _('Favorites'); + +- this.add_child(new St.Label({ text: name })); ++ const label = new St.Label({ text: name }); ++ this.add_child(label); ++ this.actor.label_actor = label; + this.connect('motion-event', this._onMotionEvent.bind(this)); + this.connect('notify::active', this._onActiveChanged.bind(this)); + } +-- +2.32.0 + diff --git a/SOURCES/0001-apps-menu-add-logo-icon-to-Applications-menu.patch b/SOURCES/0001-apps-menu-add-logo-icon-to-Applications-menu.patch new file mode 100644 index 0000000..cb60472 --- /dev/null +++ b/SOURCES/0001-apps-menu-add-logo-icon-to-Applications-menu.patch @@ -0,0 +1,66 @@ +From 08e720c793baa0cb12ed99c4333c75df46e3a9ed Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Tue, 21 Jan 2014 16:48:17 -0500 +Subject: [PATCH] apps-menu: add logo icon to Applications menu + +Brand requested it. +--- + extensions/apps-menu/extension.js | 22 +++++++++++++++++++++- + 1 file changed, 21 insertions(+), 1 deletion(-) + +diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js +index e36b0fe..983a4e7 100644 +--- a/extensions/apps-menu/extension.js ++++ b/extensions/apps-menu/extension.js +@@ -364,13 +364,24 @@ class ApplicationsButton extends PanelMenu.Button { + // role ATK_ROLE_MENU like other elements of the panel. + this.accessible_role = Atk.Role.LABEL; + ++ const hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' }); ++ ++ const iconFile = Gio.File.new_for_path( ++ '/usr/share/icons/hicolor/scalable/apps/start-here.svg'); ++ this._icon = new St.Icon({ ++ gicon: new Gio.FileIcon({ file: iconFile }), ++ style_class: 'panel-logo-icon', ++ }); ++ hbox.add_actor(this._icon); ++ + this._label = new St.Label({ + text: _('Applications'), + y_expand: true, + y_align: Clutter.ActorAlign.CENTER, + }); ++ hbox.add_actor(this._label); + +- this.add_actor(this._label); ++ this.add_actor(hbox); + this.name = 'panelApplications'; + this.label_actor = this._label; + +@@ -404,6 +415,14 @@ class ApplicationsButton extends PanelMenu.Button { + this._display(); + this._installedChangedId = appSys.connect('installed-changed', + this._onTreeChanged.bind(this)); ++ this._sessionUpdatedId = Main.sessionMode.connect('updated', ++ this._sessionUpdated.bind(this)); ++ this._sessionUpdated(); ++ } ++ ++ _sessionUpdated() { ++ this._icon.visible = ++ !Main.sessionMode.panel.left.includes('activities'); + } + + _onTreeChanged() { +@@ -429,6 +448,7 @@ class ApplicationsButton extends PanelMenu.Button { + + Main.overview.disconnect(this._showingId); + Main.overview.disconnect(this._hidingId); ++ Main.sessionMode.disconnect(this._sessionUpdatedId); + appSys.disconnect(this._installedChangedId); + this._tree.disconnect(this._treeChangedId); + this._tree = null; +-- +2.32.0 + diff --git a/SOURCES/0001-classification-banner-Handle-fullscreen-monitors.patch b/SOURCES/0001-classification-banner-Handle-fullscreen-monitors.patch new file mode 100644 index 0000000..b2e6ccd --- /dev/null +++ b/SOURCES/0001-classification-banner-Handle-fullscreen-monitors.patch @@ -0,0 +1,68 @@ +From ffba821e1142c3cb96b9ced24dd1f161f0609d2a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 14 Dec 2022 16:55:51 +0100 +Subject: [PATCH] classification-banner: Handle fullscreen monitors + +When a monitor is in fullscreen, we don't want its classification +banner to be offset by an imaginary panel, but at the top of the +screen. +--- + extensions/classification-banner/extension.js | 22 +++++++++++++++---- + 1 file changed, 18 insertions(+), 4 deletions(-) + +diff --git a/extensions/classification-banner/extension.js b/extensions/classification-banner/extension.js +index cc046e01..ea788022 100644 +--- a/extensions/classification-banner/extension.js ++++ b/extensions/classification-banner/extension.js +@@ -27,16 +27,19 @@ const Main = imports.ui.main; + const ClassificationBanner = GObject.registerClass( + class ClassificationBanner extends Clutter.Actor { + _init(index) { ++ const constraint = new Layout.MonitorConstraint({index}); + super._init({ + layout_manager: new Clutter.BinLayout(), +- constraints: new Layout.MonitorConstraint({ +- work_area: true, +- index, +- }), ++ constraints: constraint, + }); ++ this._monitorConstraint = constraint; + + this._settings = ExtensionUtils.getSettings(); + this.connect('destroy', () => { ++ if (this._fullscreenChangedId) ++ global.display.disconnect(this._fullscreenChangedId); ++ delete this._fullscreenChangedId; ++ + this._settings?.run_dispose(); + this._settings = null; + }); +@@ -94,6 +97,11 @@ class ClassificationBanner extends Clutter.Actor { + userLabel, 'visible', + Gio.SettingsBindFlags.GET); + ++ this._fullscreenChangedId = ++ global.display.connect('in-fullscreen-changed', ++ () => this._updateMonitorConstraint()); ++ this._updateMonitorConstraint(); ++ + this._settings.connect('changed::color', + () => this._updateStyles()); + this._settings.connect('changed::background-color', +@@ -110,6 +118,12 @@ class ClassificationBanner extends Clutter.Actor { + return `${key}: rgba(${red},${green},${blue},${alpha / 255});`; + } + ++ _updateMonitorConstraint() { ++ const {index} = this._monitorConstraint; ++ this._monitorConstraint.work_area = ++ !global.display.get_monitor_in_fullscreen(index); ++ } ++ + _updateStyles() { + const bgStyle = this._getColorSetting('background-color'); + const fgStyle = this._getColorSetting('color'); +-- +2.38.1 + diff --git a/SOURCES/0001-desktop-icons-Don-t-grab-focus-on-click.patch b/SOURCES/0001-desktop-icons-Don-t-grab-focus-on-click.patch new file mode 100644 index 0000000..2b1358d --- /dev/null +++ b/SOURCES/0001-desktop-icons-Don-t-grab-focus-on-click.patch @@ -0,0 +1,33 @@ +From 8bea7c892c24694efda753ad1d76ab470032c6fe Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 15 Dec 2022 17:09:45 +0100 +Subject: [PATCH] desktop-icons: Don't grab focus on click + +We will move keyboard focus away immediately, either when opening +the context menu or when starting the rubberband. + +In theory the grab is still useful, because it will move keyboard +focus to the grid when restoring focus after ending the rubberband +or closing the menu, however as keyboard navigation support is +lacking, all it does is preventing the focus to return to the +focus window after the operation. +--- + extensions/desktop-icons/desktopGrid.js | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/extensions/desktop-icons/desktopGrid.js b/extensions/desktop-icons/desktopGrid.js +index 002803c7..9a89d5a3 100644 +--- a/extensions/desktop-icons/desktopGrid.js ++++ b/extensions/desktop-icons/desktopGrid.js +@@ -559,8 +559,6 @@ var DesktopGrid = GObject.registerClass({ + let button = event.get_button(); + let [x, y] = event.get_coords(); + +- this._grid.grab_key_focus(); +- + if (button == 1) { + let shiftPressed = !!(event.get_state() & Clutter.ModifierType.SHIFT_MASK); + let controlPressed = !!(event.get_state() & Clutter.ModifierType.CONTROL_MASK); +-- +2.38.1 + diff --git a/SOURCES/0001-desktop-icons-Don-t-use-blocking-IO.patch b/SOURCES/0001-desktop-icons-Don-t-use-blocking-IO.patch new file mode 100644 index 0000000..e5d44e3 --- /dev/null +++ b/SOURCES/0001-desktop-icons-Don-t-use-blocking-IO.patch @@ -0,0 +1,108 @@ +From 2a1dd773a529c89b5f9577b53ae3c88aea2efc48 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Tue, 17 Jan 2023 20:31:21 +0100 +Subject: [PATCH] desktop-icons: Don't use blocking IO + +--- + extensions/desktop-icons/desktopManager.js | 45 +++++++++++++++------- + 1 file changed, 32 insertions(+), 13 deletions(-) + +diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js +index 74d0e6bd..75b2a22a 100644 +--- a/extensions/desktop-icons/desktopManager.js ++++ b/extensions/desktop-icons/desktopManager.js +@@ -54,6 +54,21 @@ function findMonitorIndexForPos(x, y) { + return getDpy().get_monitor_index_for_rect(new Meta.Rectangle({x, y})); + } + ++async function queryInfo(file, attributes = DesktopIconsUtil.DEFAULT_ATTRIBUTES, cancellable = null) { ++ const flags = Gio.FileQueryInfoFlags.NONE; ++ const priority = GLib.PRIORITY_DEFAULT; ++ return new Promise((resolve, reject) => { ++ file.query_info_async(attributes, flags, priority, cancellable, (o, res) => { ++ try { ++ const info = file.query_info_finish(res); ++ resolve(info); ++ } catch (e) { ++ reject(e); ++ } ++ }); ++ }); ++} ++ + + var DesktopManager = GObject.registerClass({ + Properties: { +@@ -272,9 +287,7 @@ var DesktopManager = GObject.registerClass({ + + if (!this._unixMode) { + let desktopDir = DesktopIconsUtil.getDesktopDir(); +- let fileInfo = desktopDir.query_info(Gio.FILE_ATTRIBUTE_UNIX_MODE, +- Gio.FileQueryInfoFlags.NONE, +- null); ++ let fileInfo = await queryInfo(desktopDir, Gio.FILE_ATTRIBUTE_UNIX_MODE); + this._unixMode = fileInfo.get_attribute_uint32(Gio.FILE_ATTRIBUTE_UNIX_MODE); + this._setWritableByOthers((this._unixMode & S_IWOTH) != 0); + } +@@ -283,7 +296,7 @@ var DesktopManager = GObject.registerClass({ + let items = []; + for (let item of await this._enumerateDesktop()) + items.push(item); +- for (let item of this._getMounts()) ++ for (let item of await this._getMounts()) + items.push(item); + + let tmpFileItems = new Map(); +@@ -328,14 +341,22 @@ var DesktopManager = GObject.registerClass({ + Gio.FileQueryInfoFlags.NONE, + GLib.PRIORITY_DEFAULT, + this._desktopEnumerateCancellable, +- (source, result) => { ++ async (source, result) => { + try { + let fileEnum = source.enumerate_children_finish(result); ++ let extraFolders = await Promise.all(DesktopIconsUtil.getExtraFolders() ++ .map(async ([folder, extras]) => { ++ const info = await queryInfo(folder, ++ DesktopIconsUtil.DEFAULT_ATTRIBUTES, ++ this._desktopEnumerateCancellable); ++ return [folder, info, extras]; ++ })); ++ + let resultGenerator = function *() { ++ for (let [newFolder, info, extras] of extraFolders) ++ yield [newFolder, info, extras]; ++ + let info; +- for (let [newFolder, extras] of DesktopIconsUtil.getExtraFolders()) { +- yield [newFolder, newFolder.query_info(DesktopIconsUtil.DEFAULT_ATTRIBUTES, Gio.FileQueryInfoFlags.NONE, this._desktopEnumerateCancellable), extras]; +- } + while ((info = fileEnum.next_file(null))) + yield [fileEnum.get_child(info), info, Prefs.FileType.NONE]; + }.bind(this); +@@ -359,19 +380,17 @@ var DesktopManager = GObject.registerClass({ + this._monitorDesktopDir.connect('changed', (obj, file, otherFile, eventType) => this._updateDesktopIfChanged(file, otherFile, eventType)); + } + +- _getMounts() { ++ async _getMounts() { + let files = []; + if (!Prefs.settings.get_boolean('show-mount')) + return files; + +- this._mountMonitor.get_mounts().forEach( mount => { ++ this._mountMonitor.get_mounts().forEach(async mount => { + if (this._isNetworkMount(mount)) + return; + + let file = mount.get_root(); +- let info = file.query_info(DesktopIconsUtil.DEFAULT_ATTRIBUTES, +- Gio.FileQueryInfoFlags.NONE, +- null); ++ let info = await queryInfo(file); + files.push([file, info, Prefs.FileType.MOUNT_DISK]); + }); + +-- +2.38.1 + diff --git a/SOURCES/0001-desktop-icons-Fix-stuck-grab-issue-with-rubber-bandi.patch b/SOURCES/0001-desktop-icons-Fix-stuck-grab-issue-with-rubber-bandi.patch new file mode 100644 index 0000000..81878f4 --- /dev/null +++ b/SOURCES/0001-desktop-icons-Fix-stuck-grab-issue-with-rubber-bandi.patch @@ -0,0 +1,209 @@ +From 73000f25e578b3ce6654fdf0d3da2ec3d9b95dd2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Tue, 2 Nov 2021 09:20:11 +0100 +Subject: [PATCH] desktop-icons: Fix stuck grab issue with rubber banding + +The desktop icons extension can get into a state where the desktop no longer +takes mouse input. + +This happens if a user starts a rubber banding operation and then drags +the mouse to somewhere on screen that has a pop up menu, and then pops +the menu up. + +This commit addresses the bug by limiting the grab actor to the +backgrounds, and by explicitly ending the rubber banding operation +when one of the icons own menus is shown. + +One side effect of limiting the grab actor to the backgrounds, is the +rubber banding code never gets to see motion outside of the backgrounds +anymore. In order to keep drag operations feeling fluid when the user moves +toward the edge of the screen, this commit also overrides the +grab helpers captured-event handler so those motion events keep coming. + +We also start to end the rubber band if for any reason the grab it had +was released. +--- + extensions/desktop-icons/desktopGrid.js | 1 + + extensions/desktop-icons/desktopManager.js | 109 ++++++++++++--------- + extensions/desktop-icons/fileItem.js | 1 + + 3 files changed, 67 insertions(+), 44 deletions(-) + +diff --git a/extensions/desktop-icons/desktopGrid.js b/extensions/desktop-icons/desktopGrid.js +index 002803c..c7846bf 100644 +--- a/extensions/desktop-icons/desktopGrid.js ++++ b/extensions/desktop-icons/desktopGrid.js +@@ -388,6 +388,7 @@ var DesktopGrid = GObject.registerClass({ + } + + _openMenu(x, y) { ++ Extension.desktopManager.endRubberBand(); + Main.layoutManager.setDummyCursorGeometry(x, y, 0, 0); + this._submenu.menu.removeAll(); + let templates = Extension.templateManager.getTemplates(); +diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js +index 10e3ce0..08bc82b 100644 +--- a/extensions/desktop-icons/desktopManager.js ++++ b/extensions/desktop-icons/desktopManager.js +@@ -81,6 +81,7 @@ var DesktopManager = GObject.registerClass({ + this._unixMode = null; + this._writableByOthers = null; + this._discreteGpuAvailable = false; ++ this._rubberBandActive = false; + + this._monitorsChangedId = Main.layoutManager.connect('monitors-changed', () => this._recreateDesktopIcons()); + this._rubberBand = new St.Widget({ style_class: 'rubber-band' }); +@@ -94,6 +95,20 @@ var DesktopManager = GObject.registerClass({ + this._mountRemovedId = this._mountMonitor.connect('mount-removed', (monitor, mount) => { + this._recreateDesktopIcons(); }); + ++ let origCapturedEvent = this._grabHelper.onCapturedEvent; ++ this._grabHelper.onCapturedEvent = (event) => { ++ if (event.type() === Clutter.EventType.MOTION) { ++ /* We handle motion events from a captured event handler so we ++ * we can see motion over actors that are on other parts of the ++ * stage. ++ */ ++ this._handleMotion(event); ++ return Clutter.EVENT_STOP; ++ } ++ ++ return origCapturedEvent.bind(this._grabHelper)(event); ++ }; ++ + this._addDesktopIcons(); + this._monitorDesktopFolder(); + +@@ -133,57 +148,67 @@ var DesktopManager = GObject.registerClass({ + this._rubberBandInitialY = y; + this._updateRubberBand(x, y); + this._rubberBand.show(); +- this._grabHelper.grab({ actor: global.stage }); ++ this._rubberBandActive = true; ++ this._grabHelper.grab({ ++ actor: Main.layoutManager._backgroundGroup, ++ onUngrab: () => this.endRubberBand(false), ++ }); + Extension.lockActivitiesButton = true; + this._stageReleaseEventId = global.stage.connect('button-release-event', (actor, event) => { + this.endRubberBand(); + }); + this._rubberBandId = global.stage.connect('motion-event', (actor, event) => { +- /* In some cases, when the user starts a rubberband selection and ends it +- * (by releasing the left button) over a window instead of doing it over +- * the desktop, the stage doesn't receive the "button-release" event. +- * This happens currently with, at least, Dash to Dock extension, but +- * it probably also happens with other applications or extensions. +- * To fix this, we also end the rubberband selection if we detect mouse +- * motion in the stage without the left button pressed during a +- * rubberband selection. +- * */ +- let button = event.get_state(); +- if (!(button & Clutter.ModifierType.BUTTON1_MASK)) { +- this.endRubberBand(); +- return; +- } +- [x, y] = event.get_coords(); +- this._updateRubberBand(x, y); +- let x0, y0, x1, y1; +- if (x >= this._rubberBandInitialX) { +- x0 = this._rubberBandInitialX; +- x1 = x; +- } else { +- x1 = this._rubberBandInitialX; +- x0 = x; +- } +- if (y >= this._rubberBandInitialY) { +- y0 = this._rubberBandInitialY; +- y1 = y; +- } else { +- y1 = this._rubberBandInitialY; +- y0 = y; +- } +- for (let [fileUri, fileItem] of this._fileItems) { +- fileItem.emit('selected', true, true, +- fileItem.intersectsWith(x0, y0, x1 - x0, y1 - y0)); +- } + }); + } + +- endRubberBand() { ++ _handleMotion(event) { ++ /* In some cases, when the user starts a rubberband selection and ends it ++ * (by releasing the left button) over a window instead of doing it over ++ * the desktop, the stage doesn't receive the "button-release" event. ++ * This happens currently with, at least, Dash to Dock extension, but ++ * it probably also happens with other applications or extensions. ++ * To fix this, we also end the rubberband selection if we detect mouse ++ * motion in the stage without the left button pressed during a ++ * rubberband selection. ++ * */ ++ let button = event.get_state(); ++ if (!(button & Clutter.ModifierType.BUTTON1_MASK)) { ++ this.endRubberBand(); ++ return; ++ } ++ let [x, y] = event.get_coords(); ++ this._updateRubberBand(x, y); ++ let x0, y0, x1, y1; ++ if (x >= this._rubberBandInitialX) { ++ x0 = this._rubberBandInitialX; ++ x1 = x; ++ } else { ++ x1 = this._rubberBandInitialX; ++ x0 = x; ++ } ++ if (y >= this._rubberBandInitialY) { ++ y0 = this._rubberBandInitialY; ++ y1 = y; ++ } else { ++ y1 = this._rubberBandInitialY; ++ y0 = y; ++ } ++ for (let [fileUri, fileItem] of this._fileItems) { ++ fileItem.emit('selected', true, true, ++ fileItem.intersectsWith(x0, y0, x1 - x0, y1 - y0)); ++ } ++ } ++ ++ endRubberBand(ungrab=true) { ++ if (!this._rubberBandActive) ++ return; ++ ++ this._rubberBandActive = false; + this._rubberBand.hide(); + Extension.lockActivitiesButton = false; +- this._grabHelper.ungrab(); +- global.stage.disconnect(this._rubberBandId); ++ if (ungrab) ++ this._grabHelper.ungrab(); + global.stage.disconnect(this._stageReleaseEventId); +- this._rubberBandId = 0; + this._stageReleaseEventId = 0; + + this._selection = new Set([...this._selection, ...this._currentSelection]); +@@ -825,10 +850,6 @@ var DesktopManager = GObject.registerClass({ + global.stage.disconnect(this._stageReleaseEventId); + this._stageReleaseEventId = 0; + +- if (this._rubberBandId) +- global.stage.disconnect(this._rubberBandId); +- this._rubberBandId = 0; +- + this._rubberBand.destroy(); + + if (this._queryFileInfoCancellable) +diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js +index 1e8ea89..37ee54d 100644 +--- a/extensions/desktop-icons/fileItem.js ++++ b/extensions/desktop-icons/fileItem.js +@@ -747,6 +747,7 @@ var FileItem = GObject.registerClass({ + } + + _onPressButton(actor, event) { ++ Extension.desktopManager.endRubberBand(); + this._updateClickState(event); + let button = event.get_button(); + if (button == 3) { +-- +2.31.1 + diff --git a/SOURCES/0001-desktop-icons-Update-Japanese-translation.patch b/SOURCES/0001-desktop-icons-Update-Japanese-translation.patch new file mode 100644 index 0000000..440be4f --- /dev/null +++ b/SOURCES/0001-desktop-icons-Update-Japanese-translation.patch @@ -0,0 +1,29 @@ +From ba4208c00504439bad19de4680fac68210767798 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 27 Jan 2021 11:51:28 +0100 +Subject: [PATCH] desktop-icons: Update Japanese translation + +--- + po/ja.po | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +diff --git a/po/ja.po b/po/ja.po +index 8eb7725..ddf1eb7 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -897,11 +897,7 @@ msgstr "押し込み量 (ピクセル)" + #: desktopGrid.js:359 + #, fuzzy + msgid "Display Settings" +-msgstr "" +-"#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n" +-"ディスプレイ設定\n" +-"#-#-#-#-# ja.po (desktop-icons master) #-#-#-#-#\n" +-"ディスプレイの設定" ++msgstr "ディスプレイ設定" + + #: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 + #, fuzzy +-- +2.32.0 + diff --git a/SOURCES/0001-desktopManager-Hook-into-LayoutManager-to-create-gri.patch b/SOURCES/0001-desktopManager-Hook-into-LayoutManager-to-create-gri.patch new file mode 100644 index 0000000..5dd21d1 --- /dev/null +++ b/SOURCES/0001-desktopManager-Hook-into-LayoutManager-to-create-gri.patch @@ -0,0 +1,60 @@ +From 62289dff5cb2e615a277b72f034fa42f45aad639 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 15 Dec 2022 15:14:08 +0100 +Subject: [PATCH] desktopManager: Hook into LayoutManager to create grids + +Right now we track the `monitors-changed` signal to recreate the +per-monitor grids. Usually that's enough, but if something else +causes backgrounds to update, we'll end up without desktop icons +until some other change (settings, mounts, monitor/resolution +changes, ...) results in a reload of the grid. + +To address this, hook into LayoutManager to always create the grid +when backgrounds are updated. +--- + extensions/desktop-icons/desktopManager.js | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js +index 08bc82b7..74d0e6bd 100644 +--- a/extensions/desktop-icons/desktopManager.js ++++ b/extensions/desktop-icons/desktopManager.js +@@ -83,7 +83,6 @@ var DesktopManager = GObject.registerClass({ + this._discreteGpuAvailable = false; + this._rubberBandActive = false; + +- this._monitorsChangedId = Main.layoutManager.connect('monitors-changed', () => this._recreateDesktopIcons()); + this._rubberBand = new St.Widget({ style_class: 'rubber-band' }); + this._rubberBand.hide(); + Main.layoutManager._backgroundGroup.add_child(this._rubberBand); +@@ -109,6 +108,13 @@ var DesktopManager = GObject.registerClass({ + return origCapturedEvent.bind(this._grabHelper)(event); + }; + ++ this._origUpdateBackgrounds = ++ Main.layoutManager._updateBackgrounds; ++ Main.layoutManager._updateBackgrounds = () => { ++ this._origUpdateBackgrounds.call(Main.layoutManager); ++ this._recreateDesktopIcons(); ++ }; ++ + this._addDesktopIcons(); + this._monitorDesktopFolder(); + +@@ -843,9 +849,10 @@ var DesktopManager = GObject.registerClass({ + GLib.source_remove(this._deleteChildrenId); + this._deleteChildrenId = 0; + +- if (this._monitorsChangedId) +- Main.layoutManager.disconnect(this._monitorsChangedId); +- this._monitorsChangedId = 0; ++ if (this._origUpdateBackgrounds) ++ Main.layoutManager._updateBackgrounds = this._origUpdateBackgrounds; ++ delete this._origUpdateBackgrounds; ++ + if (this._stageReleaseEventId) + global.stage.disconnect(this._stageReleaseEventId); + this._stageReleaseEventId = 0; +-- +2.38.1 + diff --git a/SOURCES/0001-gesture-inhibitor-Allow-inhibiting-workspace-switch-.patch b/SOURCES/0001-gesture-inhibitor-Allow-inhibiting-workspace-switch-.patch new file mode 100644 index 0000000..ad0bbd8 --- /dev/null +++ b/SOURCES/0001-gesture-inhibitor-Allow-inhibiting-workspace-switch-.patch @@ -0,0 +1,40 @@ +From c70a1fa37f68687b8c0a013d2328e6262f8419d0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 9 Dec 2022 15:31:08 +0100 +Subject: [PATCH] gesture-inhibitor: Allow inhibiting workspace switch gesture + +--- + extensions/gesture-inhibitor/extension.js | 1 + + .../org.gnome.shell.extensions.gesture-inhibitor.gschema.xml | 4 ++++ + 2 files changed, 5 insertions(+) + +diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js +index fb8a6dc0..d103d5b8 100644 +--- a/extensions/gesture-inhibitor/extension.js ++++ b/extensions/gesture-inhibitor/extension.js +@@ -48,6 +48,7 @@ class Extension { + { setting: 'app-switch', action: this._appSwitch }, + { setting: 'show-osk', action: this._showOsk }, + { setting: 'unfullscreen', action: this._unfullscreen }, ++ { setting: 'workspace-switch', action: Main.wm._workspaceAnimation._swipeTracker }, + ]; + + this._enabledDesc = Object.getOwnPropertyDescriptor( +diff --git a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml +index 4bdf9260..b06d027a 100644 +--- a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml ++++ b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml +@@ -12,6 +12,10 @@ + true + Application switch gesture + ++ ++ true ++ Workspace switch gesture ++ + + true + Unfullscreen gesture +-- +2.38.1 + diff --git a/SOURCES/0001-heads-up-display-Add-extension-for-showing-persisten.patch b/SOURCES/0001-heads-up-display-Add-extension-for-showing-persisten.patch new file mode 100644 index 0000000..5f08a79 --- /dev/null +++ b/SOURCES/0001-heads-up-display-Add-extension-for-showing-persisten.patch @@ -0,0 +1,986 @@ +From 8beb3b27486fd50f74c15d2cf9ed8ca22fb546c2 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Tue, 24 Aug 2021 15:03:57 -0400 +Subject: [PATCH] heads-up-display: Add extension for showing persistent heads + up display message + +--- + extensions/heads-up-display/extension.js | 436 ++++++++++++++++++ + extensions/heads-up-display/headsUpMessage.js | 170 +++++++ + extensions/heads-up-display/meson.build | 8 + + extensions/heads-up-display/metadata.json.in | 11 + + ...ll.extensions.heads-up-display.gschema.xml | 54 +++ + extensions/heads-up-display/prefs.js | 194 ++++++++ + extensions/heads-up-display/stylesheet.css | 32 ++ + meson.build | 1 + + 8 files changed, 906 insertions(+) + create mode 100644 extensions/heads-up-display/extension.js + create mode 100644 extensions/heads-up-display/headsUpMessage.js + create mode 100644 extensions/heads-up-display/meson.build + create mode 100644 extensions/heads-up-display/metadata.json.in + create mode 100644 extensions/heads-up-display/org.gnome.shell.extensions.heads-up-display.gschema.xml + create mode 100644 extensions/heads-up-display/prefs.js + create mode 100644 extensions/heads-up-display/stylesheet.css + +diff --git a/extensions/heads-up-display/extension.js b/extensions/heads-up-display/extension.js +new file mode 100644 +index 00000000..7cebfa99 +--- /dev/null ++++ b/extensions/heads-up-display/extension.js +@@ -0,0 +1,436 @@ ++/* exported init enable disable */ ++ ++const Signals = imports.signals; ++ ++const { ++ Atk, Clutter, Gio, GLib, GObject, Gtk, Meta, Shell, St, ++} = imports.gi; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++ ++const Main = imports.ui.main; ++const Layout = imports.ui.layout; ++const HeadsUpMessage = Me.imports.headsUpMessage; ++ ++const _ = ExtensionUtils.gettext; ++ ++var HeadsUpConstraint = GObject.registerClass({ ++ Properties: { ++ 'offset': GObject.ParamSpec.int('offset', ++ 'Offset', 'offset', ++ GObject.ParamFlags.READABLE | GObject.ParamFlags.WRITABLE, ++ -1, 0, -1), ++ 'active': GObject.ParamSpec.boolean('active', ++ 'Active', 'active', ++ GObject.ParamFlags.READABLE | GObject.ParamFlags.WRITABLE, ++ true), ++ }, ++}, class HeadsUpConstraint extends Layout.MonitorConstraint { ++ _init(props) { ++ super._init(props); ++ this._offset = 0; ++ this._active = true; ++ } ++ ++ get offset() { ++ return this._offset; ++ } ++ ++ set offset(o) { ++ this._offset = o ++ } ++ ++ get active() { ++ return this._active; ++ } ++ ++ set active(a) { ++ this._active = a; ++ } ++ ++ vfunc_update_allocation(actor, actorBox) { ++ if (!Main.layoutManager.primaryMonitor) ++ return; ++ ++ if (!this.active) ++ return; ++ ++ if (actor.has_allocation()) ++ return; ++ ++ const workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex); ++ actorBox.init_rect(workArea.x, workArea.y + this.offset, workArea.width, workArea.height - this.offset); ++ } ++}); ++ ++class Extension { ++ constructor() { ++ ExtensionUtils.initTranslations(); ++ } ++ ++ enable() { ++ this._settings = ExtensionUtils.getSettings('org.gnome.shell.extensions.heads-up-display'); ++ this._settingsChangedId = this._settings.connect('changed', this._updateMessage.bind(this)); ++ ++ this._idleMonitor = Meta.IdleMonitor.get_core(); ++ this._messageInhibitedUntilIdle = false; ++ this._oldMapWindow = Main.wm._mapWindow; ++ Main.wm._mapWindow = this._mapWindow; ++ this._windowManagerMapId = global.window_manager.connect('map', this._onWindowMap.bind(this)); ++ ++ if (Main.layoutManager._startingUp) ++ this._startupCompleteId = Main.layoutManager.connect('startup-complete', this._onStartupComplete.bind(this)); ++ else ++ this._onStartupComplete(this); ++ } ++ ++ disable() { ++ this._dismissMessage(); ++ ++ this._stopWatchingForIdle(); ++ ++ if (this._sessionModeUpdatedId) { ++ Main.sessionMode.disconnect(this._sessionModeUpdatedId); ++ this._sessionModeUpdatedId = 0; ++ } ++ ++ if (this._overviewShowingId) { ++ Main.overview.disconnect(this._overviewShowingId); ++ this._overviewShowingId = 0; ++ } ++ ++ if (this._overviewHiddenId) { ++ Main.overview.disconnect(this._overviewHiddenId); ++ this._overviewHiddenId = 0; ++ } ++ ++ if (this._screenShieldVisibleId) { ++ Main.screenShield._dialog._clock.disconnect(this._screenShieldVisibleId); ++ this._screenShieldVisibleId = 0; ++ } ++ ++ if (this._panelConnectionId) { ++ Main.layoutManager.panelBox.disconnect(this._panelConnectionId); ++ this._panelConnectionId = 0; ++ } ++ ++ if (this._oldMapWindow) { ++ Main.wm._mapWindow = this._oldMapWindow; ++ this._oldMapWindow = null; ++ } ++ ++ if (this._windowManagerMapId) { ++ global.window_manager.disconnect(this._windowManagerMapId); ++ this._windowManagerMapId = 0; ++ } ++ ++ if (this._startupCompleteId) { ++ Main.layoutManager.disconnect(this._startupCompleteId); ++ this._startupCompleteId = 0; ++ } ++ ++ if (this._settingsChangedId) { ++ this._settings.disconnect(this._settingsChangedId); ++ this._settingsChangedId = 0; ++ } ++ } ++ ++ _onWindowMap(shellwm, actor) { ++ const windowObject = actor.meta_window; ++ const windowType = windowObject.get_window_type(); ++ ++ if (windowType != Meta.WindowType.NORMAL) ++ return; ++ ++ if (!this._message || !this._message.visible) ++ return; ++ ++ const messageRect = new Meta.Rectangle({ x: this._message.x, y: this._message.y, width: this._message.width, height: this._message.height }); ++ const windowRect = windowObject.get_frame_rect(); ++ ++ if (windowRect.intersect(messageRect)) { ++ windowObject.move_frame(false, windowRect.x, this._message.y + this._message.height); ++ } ++ } ++ ++ _onStartupComplete() { ++ this._overviewShowingId = Main.overview.connect('showing', this._updateMessage.bind(this)); ++ this._overviewHiddenId = Main.overview.connect('hidden', this._updateMessage.bind(this)); ++ this._panelConnectionId = Main.layoutManager.panelBox.connect('notify::visible', this._updateMessage.bind(this)); ++ this._sessionModeUpdatedId = Main.sessionMode.connect('updated', this._onSessionModeUpdated.bind(this)); ++ ++ this._updateMessage(); ++ } ++ ++ _onSessionModeUpdated() { ++ if (!Main.sessionMode.hasWindows) ++ this._messageInhibitedUntilIdle = false; ++ ++ const dialog = Main.screenShield._dialog; ++ if (!Main.sessionMode.isGreeter && dialog && !this._screenShieldVisibleId) { ++ this._screenShieldVisibleId = dialog._clock.connect('notify::visible', ++ this._updateMessage.bind(this)); ++ this._screenShieldDestroyId = dialog._clock.connect('destroy', () => { ++ this._screenShieldVisibleId = 0; ++ this._screenShieldDestroyId = 0; ++ }); ++ } ++ this._updateMessage(); ++ } ++ ++ _stopWatchingForIdle() { ++ if (this._idleWatchId) { ++ this._idleMonitor.remove_watch(this._idleWatchId); ++ this._idleWatchId = 0; ++ } ++ ++ if (this._idleTimeoutChangedId) { ++ this._settings.disconnect(this._idleTimeoutChangedId); ++ this._idleTimeoutChangedId = 0; ++ } ++ } ++ ++ _onIdleTimeoutChanged() { ++ this._stopWatchingForIdle(); ++ this._messageInhibitedUntilIdle = false; ++ } ++ ++ _onUserIdle() { ++ this._messageInhibitedUntilIdle = false; ++ this._updateMessage(); ++ } ++ ++ _watchForIdle() { ++ this._stopWatchingForIdle(); ++ ++ const idleTimeout = this._settings.get_uint('idle-timeout'); ++ ++ this._idleTimeoutChangedId = this._settings.connect('changed::idle-timeout', this._onIdleTimeoutChanged.bind(this)); ++ this._idleWatchId = this._idleMonitor.add_idle_watch(idleTimeout * 1000, this._onUserIdle.bind(this)); ++ } ++ ++ _updateMessage() { ++ if (this._messageInhibitedUntilIdle) { ++ if (this._message) ++ this._dismissMessage(); ++ return; ++ } ++ ++ this._stopWatchingForIdle(); ++ ++ if (Main.sessionMode.hasOverview && Main.overview.visible) { ++ this._dismissMessage(); ++ return; ++ } ++ ++ if (!Main.layoutManager.panelBox.visible) { ++ this._dismissMessage(); ++ return; ++ } ++ ++ let supportedModes = []; ++ ++ if (this._settings.get_boolean('show-when-unlocked')) ++ supportedModes.push('user'); ++ ++ if (this._settings.get_boolean('show-when-unlocking') || ++ this._settings.get_boolean('show-when-locked')) ++ supportedModes.push('unlock-dialog'); ++ ++ if (this._settings.get_boolean('show-on-login-screen')) ++ supportedModes.push('gdm'); ++ ++ if (!supportedModes.includes(Main.sessionMode.currentMode) && ++ !supportedModes.includes(Main.sessionMode.parentMode)) { ++ this._dismissMessage(); ++ return; ++ } ++ ++ if (Main.sessionMode.currentMode === 'unlock-dialog') { ++ const dialog = Main.screenShield._dialog; ++ if (!this._settings.get_boolean('show-when-locked')) { ++ if (dialog._clock.visible) { ++ this._dismissMessage(); ++ return; ++ } ++ } ++ ++ if (!this._settings.get_boolean('show-when-unlocking')) { ++ if (!dialog._clock.visible) { ++ this._dismissMessage(); ++ return; ++ } ++ } ++ } ++ ++ const heading = this._settings.get_string('message-heading'); ++ const body = this._settings.get_string('message-body'); ++ ++ if (!heading && !body) { ++ this._dismissMessage(); ++ return; ++ } ++ ++ if (!this._message) { ++ this._message = new HeadsUpMessage.HeadsUpMessage(heading, body); ++ ++ this._message.connect('notify::allocation', this._adaptSessionForMessage.bind(this)); ++ this._message.connect('clicked', this._onMessageClicked.bind(this)); ++ } ++ ++ this._message.reactive = true; ++ this._message.track_hover = true; ++ ++ this._message.setHeading(heading); ++ this._message.setBody(body); ++ ++ if (!Main.sessionMode.hasWindows) { ++ this._message.track_hover = false; ++ this._message.reactive = false; ++ } ++ } ++ ++ _onMessageClicked() { ++ if (!Main.sessionMode.hasWindows) ++ return; ++ ++ this._watchForIdle(); ++ this._messageInhibitedUntilIdle = true; ++ this._updateMessage(); ++ } ++ ++ _dismissMessage() { ++ if (!this._message) { ++ return; ++ } ++ ++ this._message.visible = false; ++ this._message.destroy(); ++ this._message = null; ++ this._resetMessageTray(); ++ this._resetLoginDialog(); ++ } ++ ++ _resetMessageTray() { ++ if (!Main.messageTray) ++ return; ++ ++ if (this._updateMessageTrayId) { ++ global.stage.disconnect(this._updateMessageTrayId); ++ this._updateMessageTrayId = 0; ++ } ++ ++ if (this._messageTrayConstraint) { ++ Main.messageTray.remove_constraint(this._messageTrayConstraint); ++ this._messageTrayConstraint = null; ++ } ++ } ++ ++ _alignMessageTray() { ++ if (!Main.messageTray) ++ return; ++ ++ if (!this._message || !this._message.visible) { ++ this._resetMessageTray() ++ return; ++ } ++ ++ if (this._updateMessageTrayId) ++ return; ++ ++ this._updateMessageTrayId = global.stage.connect('before-update', () => { ++ if (!this._messageTrayConstraint) { ++ this._messageTrayConstraint = new HeadsUpConstraint({ primary: true }); ++ ++ Main.layoutManager.panelBox.bind_property('visible', ++ this._messageTrayConstraint, 'active', ++ GObject.BindingFlags.SYNC_CREATE); ++ ++ Main.messageTray.add_constraint(this._messageTrayConstraint); ++ } ++ ++ const panelBottom = Main.layoutManager.panelBox.y + Main.layoutManager.panelBox.height; ++ const messageBottom = this._message.y + this._message.height; ++ ++ this._messageTrayConstraint.offset = messageBottom - panelBottom; ++ global.stage.disconnect(this._updateMessageTrayId); ++ this._updateMessageTrayId = 0; ++ }); ++ } ++ ++ _resetLoginDialog() { ++ if (!Main.sessionMode.isGreeter) ++ return; ++ ++ if (!Main.screenShield || !Main.screenShield._dialog) ++ return; ++ ++ const dialog = Main.screenShield._dialog; ++ ++ if (this._authPromptAllocatedId) { ++ dialog.disconnect(this._authPromptAllocatedId); ++ this._authPromptAllocatedId = 0; ++ } ++ ++ if (this._updateLoginDialogId) { ++ global.stage.disconnect(this._updateLoginDialogId); ++ this._updateLoginDialogId = 0; ++ } ++ ++ if (this._loginDialogConstraint) { ++ dialog.remove_constraint(this._loginDialogConstraint); ++ this._loginDialogConstraint = null; ++ } ++ } ++ ++ _adaptLoginDialogForMessage() { ++ if (!Main.sessionMode.isGreeter) ++ return; ++ ++ if (!Main.screenShield || !Main.screenShield._dialog) ++ return; ++ ++ if (!this._message || !this._message.visible) { ++ this._resetLoginDialog() ++ return; ++ } ++ ++ const dialog = Main.screenShield._dialog; ++ ++ if (this._updateLoginDialogId) ++ return; ++ ++ this._updateLoginDialogId = global.stage.connect('before-update', () => { ++ let messageHeight = this._message.y + this._message.height; ++ if (dialog._logoBin.visible) ++ messageHeight -= dialog._logoBin.height; ++ ++ if (!this._logindDialogConstraint) { ++ this._loginDialogConstraint = new HeadsUpConstraint({ primary: true }); ++ dialog.add_constraint(this._loginDialogConstraint); ++ } ++ ++ this._loginDialogConstraint.offset = messageHeight; ++ ++ global.stage.disconnect(this._updateLoginDialogId); ++ this._updateLoginDialogId = 0; ++ }); ++ } ++ ++ _adaptSessionForMessage() { ++ this._alignMessageTray(); ++ ++ if (Main.sessionMode.isGreeter) { ++ this._adaptLoginDialogForMessage(); ++ if (!this._authPromptAllocatedId) { ++ const dialog = Main.screenShield._dialog; ++ this._authPromptAllocatedId = dialog._authPrompt.connect('notify::allocation', this._adaptLoginDialogForMessage.bind(this)); ++ } ++ } ++ } ++} ++ ++function init() { ++ return new Extension(); ++} +diff --git a/extensions/heads-up-display/headsUpMessage.js b/extensions/heads-up-display/headsUpMessage.js +new file mode 100644 +index 00000000..87a8c8ba +--- /dev/null ++++ b/extensions/heads-up-display/headsUpMessage.js +@@ -0,0 +1,170 @@ ++const { Atk, Clutter, GLib, GObject, Pango, St } = imports.gi; ++const Layout = imports.ui.layout; ++const Main = imports.ui.main; ++const Signals = imports.signals; ++ ++var HeadsUpMessageBodyLabel = GObject.registerClass({ ++}, class HeadsUpMessageBodyLabel extends St.Label { ++ _init(params) { ++ super._init(params); ++ ++ this._widthCoverage = 0.75; ++ this._heightCoverage = 0.25; ++ ++ this._workAreasChangedId = global.display.connect('workareas-changed', this._getWorkAreaAndMeasureLineHeight.bind(this)); ++ } ++ ++ _getWorkAreaAndMeasureLineHeight() { ++ if (!this.get_parent()) ++ return; ++ ++ this._workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex); ++ ++ this.clutter_text.single_line_mode = true; ++ this.clutter_text.line_wrap = false; ++ ++ this._lineHeight = super.vfunc_get_preferred_height(-1)[0]; ++ ++ this.clutter_text.single_line_mode = false; ++ this.clutter_text.line_wrap = true; ++ } ++ ++ vfunc_parent_set(oldParent) { ++ this._getWorkAreaAndMeasureLineHeight(); ++ } ++ ++ vfunc_get_preferred_width(forHeight) { ++ const maxWidth = this._widthCoverage * this._workArea.width ++ ++ let [labelMinimumWidth, labelNaturalWidth] = super.vfunc_get_preferred_width(forHeight); ++ ++ labelMinimumWidth = Math.min(labelMinimumWidth, maxWidth); ++ labelNaturalWidth = Math.min(labelNaturalWidth, maxWidth); ++ ++ return [labelMinimumWidth, labelNaturalWidth]; ++ } ++ ++ vfunc_get_preferred_height(forWidth) { ++ const labelHeightUpperBound = this._heightCoverage * this._workArea.height; ++ const numberOfLines = Math.floor(labelHeightUpperBound / this._lineHeight); ++ this._numberOfLines = Math.max(numberOfLines, 1); ++ ++ const maxHeight = this._lineHeight * this._numberOfLines; ++ ++ let [labelMinimumHeight, labelNaturalHeight] = super.vfunc_get_preferred_height(forWidth); ++ ++ labelMinimumHeight = Math.min(labelMinimumHeight, maxHeight); ++ labelNaturalHeight = Math.min(labelNaturalHeight, maxHeight); ++ ++ return [labelMinimumHeight, labelNaturalHeight]; ++ } ++ ++ destroy() { ++ if (this._workAreasChangedId) { ++ global.display.disconnect(this._workAreasChangedId); ++ this._workAreasChangedId = 0; ++ } ++ ++ super.destroy(); ++ } ++}); ++ ++var HeadsUpMessage = GObject.registerClass({ ++}, class HeadsUpMessage extends St.Button { ++ _init(heading, body) { ++ super._init({ ++ style_class: 'message', ++ accessible_role: Atk.Role.NOTIFICATION, ++ can_focus: false, ++ opacity: 0, ++ }); ++ ++ Main.layoutManager.addChrome(this, { affectsInputRegion: true }); ++ ++ this.add_style_class_name('heads-up-display-message'); ++ ++ this._panelAllocationId = Main.layoutManager.panelBox.connect('notify::allocation', this._alignWithPanel.bind(this)); ++ this.connect('notify::allocation', this._alignWithPanel.bind(this)); ++ ++ const contentsBox = new St.BoxLayout({ style_class: 'heads-up-message-content', ++ vertical: true, ++ x_align: Clutter.ActorAlign.CENTER }); ++ this.add_actor(contentsBox); ++ ++ this.headingLabel = new St.Label({ style_class: 'heads-up-message-heading', ++ x_expand: true, ++ x_align: Clutter.ActorAlign.CENTER }); ++ this.setHeading(heading); ++ contentsBox.add_actor(this.headingLabel); ++ this.contentsBox = contentsBox; ++ ++ this.bodyLabel = new HeadsUpMessageBodyLabel({ style_class: 'heads-up-message-body', ++ x_expand: true, ++ y_expand: true }); ++ contentsBox.add_actor(this.bodyLabel); ++ ++ this.setBody(body); ++ } ++ ++ vfunc_parent_set(oldParent) { ++ this._alignWithPanel(); ++ } ++ ++ _alignWithPanel() { ++ if (this._afterUpdateId) ++ return; ++ ++ this._afterUpdateId = global.stage.connect('before-update', () => { ++ let x = Main.panel.x; ++ let y = Main.panel.y + Main.panel.height; ++ ++ x += Main.panel.width / 2; ++ x -= this.width / 2; ++ x = Math.floor(x); ++ this.set_position(x,y); ++ this.opacity = 255; ++ ++ global.stage.disconnect(this._afterUpdateId); ++ this._afterUpdateId = 0; ++ }); ++ } ++ ++ setHeading(text) { ++ if (text) { ++ const heading = text ? text.replace(/\n/g, ' ') : ''; ++ this.headingLabel.text = heading; ++ this.headingLabel.visible = true; ++ } else { ++ this.headingLabel.text = text; ++ this.headingLabel.visible = false; ++ } ++ } ++ ++ setBody(text) { ++ this.bodyLabel.text = text; ++ if (text) { ++ this.bodyLabel.visible = true; ++ } else { ++ this.bodyLabel.visible = false; ++ } ++ } ++ ++ destroy() { ++ if (this._panelAllocationId) { ++ Main.layoutManager.panelBox.disconnect(this._panelAllocationId); ++ this._panelAllocationId = 0; ++ } ++ ++ if (this._afterUpdateId) { ++ global.stage.disconnect(this._afterUpdateId); ++ this._afterUpdateId = 0; ++ } ++ ++ if (this.bodyLabel) { ++ this.bodyLabel.destroy(); ++ this.bodyLabel = null; ++ } ++ ++ super.destroy(); ++ } ++}); +diff --git a/extensions/heads-up-display/meson.build b/extensions/heads-up-display/meson.build +new file mode 100644 +index 00000000..40c3de0a +--- /dev/null ++++ b/extensions/heads-up-display/meson.build +@@ -0,0 +1,8 @@ ++extension_data += configure_file( ++ input: metadata_name + '.in', ++ output: metadata_name, ++ configuration: metadata_conf ++) ++ ++extension_sources += files('headsUpMessage.js', 'prefs.js') ++extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml') +diff --git a/extensions/heads-up-display/metadata.json.in b/extensions/heads-up-display/metadata.json.in +new file mode 100644 +index 00000000..e7ab71aa +--- /dev/null ++++ b/extensions/heads-up-display/metadata.json.in +@@ -0,0 +1,11 @@ ++{ ++"extension-id": "@extension_id@", ++"uuid": "@uuid@", ++"gettext-domain": "@gettext_domain@", ++"name": "Heads-up Display Message", ++"description": "Add a message to be displayed on screen always above all windows and chrome.", ++"original-authors": [ "rstrode@redhat.com" ], ++"shell-version": [ "@shell_current@" ], ++"url": "@url@", ++"session-modes": [ "gdm", "lock-screen", "unlock-dialog", "user" ] ++} +diff --git a/extensions/heads-up-display/org.gnome.shell.extensions.heads-up-display.gschema.xml b/extensions/heads-up-display/org.gnome.shell.extensions.heads-up-display.gschema.xml +new file mode 100644 +index 00000000..ea1f3774 +--- /dev/null ++++ b/extensions/heads-up-display/org.gnome.shell.extensions.heads-up-display.gschema.xml +@@ -0,0 +1,54 @@ ++ ++ ++ ++ 30 ++ Idle Timeout ++ ++ Number of seconds until message is reshown after user goes idle. ++ ++ ++ ++ "" ++ Message to show at top of display ++ ++ The top line of the heads up display message. ++ ++ ++ ++ "" ++ Banner message ++ ++ A message to always show at the top of the screen. ++ ++ ++ ++ true ++ Show on login screen ++ ++ Whether or not the message should display on the login screen ++ ++ ++ ++ false ++ Show on screen shield ++ ++ Whether or not the message should display when the screen is locked ++ ++ ++ ++ false ++ Show on unlock screen ++ ++ Whether or not the message should display on the unlock screen. ++ ++ ++ ++ false ++ Show in user session ++ ++ Whether or not the message should display when the screen is unlocked. ++ ++ ++ ++ +diff --git a/extensions/heads-up-display/prefs.js b/extensions/heads-up-display/prefs.js +new file mode 100644 +index 00000000..a7106e07 +--- /dev/null ++++ b/extensions/heads-up-display/prefs.js +@@ -0,0 +1,194 @@ ++ ++/* Desktop Icons GNOME Shell extension ++ * ++ * Copyright (C) 2017 Carlos Soriano ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++const { Gio, GObject, Gdk, Gtk } = imports.gi; ++const ExtensionUtils = imports.misc.extensionUtils; ++const Gettext = imports.gettext.domain('gnome-shell-extensions'); ++const _ = Gettext.gettext; ++const N_ = e => e; ++const cssData = ` ++ .no-border { ++ border: none; ++ } ++ ++ .border { ++ border: 1px solid; ++ border-radius: 3px; ++ border-color: #b6b6b3; ++ box-shadow: inset 0 0 0 1px rgba(74, 144, 217, 0); ++ background-color: white; ++ } ++ ++ .margins { ++ padding-left: 8px; ++ padding-right: 8px; ++ padding-bottom: 8px; ++ } ++ ++ .contents { ++ padding: 20px; ++ } ++ ++ .message-label { ++ font-weight: bold; ++ } ++`; ++ ++var settings; ++ ++function init() { ++ settings = ExtensionUtils.getSettings("org.gnome.shell.extensions.heads-up-display"); ++ const cssProvider = new Gtk.CssProvider(); ++ cssProvider.load_from_data(cssData); ++ ++ const display = Gdk.Display.get_default(); ++ Gtk.StyleContext.add_provider_for_display(display, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); ++} ++ ++function buildPrefsWidget() { ++ ExtensionUtils.initTranslations(); ++ ++ const contents = new Gtk.Box({ ++ orientation: Gtk.Orientation.VERTICAL, ++ spacing: 10, ++ visible: true, ++ }); ++ ++ contents.append(buildSwitch('show-when-locked', _("Show message when screen is locked"))); ++ contents.append(buildSwitch('show-when-unlocking', _("Show message on unlock screen"))); ++ contents.append(buildSwitch('show-when-unlocked', _("Show message when screen is unlocked"))); ++ contents.append(buildSpinButton('idle-timeout', _("Seconds after user goes idle before reshowing message"))); ++ contents.get_style_context().add_class("contents"); ++ ++ const outerMessageBox = new Gtk.Box({ ++ orientation: Gtk.Orientation.VERTICAL, ++ spacing: 5, ++ visible: true, ++ }); ++ contents.append(outerMessageBox); ++ ++ const messageLabel = new Gtk.Label({ ++ label: 'Message', ++ halign: Gtk.Align.START, ++ visible: true, ++ }); ++ messageLabel.get_style_context().add_class("message-label"); ++ outerMessageBox.append(messageLabel); ++ ++ const innerMessageBox = new Gtk.Box({ ++ orientation: Gtk.Orientation.VERTICAL, ++ spacing: 0, ++ visible: true, ++ }); ++ innerMessageBox.get_style_context().add_class("border"); ++ outerMessageBox.append(innerMessageBox); ++ ++ innerMessageBox.append(buildEntry('message-heading', _("Message Heading"))); ++ innerMessageBox.append(buildTextView('message-body', _("Message Body"))); ++ return contents; ++} ++ ++function buildTextView(key, labelText) { ++ const textView = new Gtk.TextView({ ++ accepts_tab: false, ++ visible: true, ++ wrap_mode: Gtk.WrapMode.WORD, ++ }); ++ ++ settings.bind(key, textView.get_buffer(), 'text', Gio.SettingsBindFlags.DEFAULT); ++ ++ const scrolledWindow = new Gtk.ScrolledWindow({ ++ hexpand: true, ++ vexpand: true, ++ visible: true, ++ }); ++ const styleContext = scrolledWindow.get_style_context(); ++ styleContext.add_class("margins"); ++ ++ scrolledWindow.set_child(textView); ++ return scrolledWindow; ++} ++function buildEntry(key, labelText) { ++ const entry = new Gtk.Entry({ ++ placeholder_text: labelText, ++ visible: true, ++ }); ++ const styleContext = entry.get_style_context(); ++ styleContext.add_class("no-border"); ++ settings.bind(key, entry, 'text', Gio.SettingsBindFlags.DEFAULT); ++ ++ entry.get_settings()['gtk-entry-select-on-focus'] = false; ++ ++ return entry; ++} ++ ++function buildSpinButton(key, labelText) { ++ const hbox = new Gtk.Box({ ++ orientation: Gtk.Orientation.HORIZONTAL, ++ spacing: 10, ++ visible: true, ++ }); ++ const label = new Gtk.Label({ ++ hexpand: true, ++ label: labelText, ++ visible: true, ++ xalign: 0, ++ }); ++ const adjustment = new Gtk.Adjustment({ ++ value: 0, ++ lower: 0, ++ upper: 2147483647, ++ step_increment: 1, ++ page_increment: 60, ++ page_size: 60, ++ }); ++ const spinButton = new Gtk.SpinButton({ ++ adjustment: adjustment, ++ climb_rate: 1.0, ++ digits: 0, ++ max_width_chars: 3, ++ visible: true, ++ width_chars: 3, ++ }); ++ settings.bind(key, spinButton, 'value', Gio.SettingsBindFlags.DEFAULT); ++ hbox.append(label); ++ hbox.append(spinButton); ++ return hbox; ++} ++ ++function buildSwitch(key, labelText) { ++ const hbox = new Gtk.Box({ ++ orientation: Gtk.Orientation.HORIZONTAL, ++ spacing: 10, ++ visible: true, ++ }); ++ const label = new Gtk.Label({ ++ hexpand: true, ++ label: labelText, ++ visible: true, ++ xalign: 0, ++ }); ++ const switcher = new Gtk.Switch({ ++ active: settings.get_boolean(key), ++ }); ++ settings.bind(key, switcher, 'active', Gio.SettingsBindFlags.DEFAULT); ++ hbox.append(label); ++ hbox.append(switcher); ++ return hbox; ++} +diff --git a/extensions/heads-up-display/stylesheet.css b/extensions/heads-up-display/stylesheet.css +new file mode 100644 +index 00000000..93034469 +--- /dev/null ++++ b/extensions/heads-up-display/stylesheet.css +@@ -0,0 +1,32 @@ ++.heads-up-display-message { ++ background-color: rgba(0.24, 0.24, 0.24, 0.80); ++ border: 1px solid black; ++ border-radius: 6px; ++ color: #eeeeec; ++ font-size: 11pt; ++ margin-top: 0.5em; ++ margin-bottom: 0.5em; ++ padding: 0.9em; ++} ++ ++.heads-up-display-message:insensitive { ++ background-color: rgba(0.24, 0.24, 0.24, 0.33); ++} ++ ++.heads-up-display-message:hover { ++ background-color: rgba(0.24, 0.24, 0.24, 0.2); ++ border: 1px solid rgba(0.0, 0.0, 0.0, 0.5); ++ color: #4d4d4d; ++ transition-duration: 250ms; ++} ++ ++.heads-up-message-heading { ++ height: 1.75em; ++ font-size: 1.25em; ++ font-weight: bold; ++ text-align: center; ++} ++ ++.heads-up-message-body { ++ text-align: center; ++} +diff --git a/meson.build b/meson.build +index 582535c4..ecc86fc8 100644 +--- a/meson.build ++++ b/meson.build +@@ -39,6 +39,7 @@ classic_extensions = [ + default_extensions = classic_extensions + default_extensions += [ + 'drive-menu', ++ 'heads-up-display', + 'screenshot-window-sizer', + 'windowsNavigator', + 'workspace-indicator' +-- +2.33.1 + diff --git a/SOURCES/0001-top-icons-Don-t-use-wm_class-as-role.patch b/SOURCES/0001-top-icons-Don-t-use-wm_class-as-role.patch new file mode 100644 index 0000000..b5426b0 --- /dev/null +++ b/SOURCES/0001-top-icons-Don-t-use-wm_class-as-role.patch @@ -0,0 +1,27 @@ +From f0e4618bf0752aaf094d78b4c810ebda817ccaad Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 2 Jun 2021 17:32:21 +0200 +Subject: [PATCH] top-icons: Don't use wm_class as role + +This prevents adding icons for multiple instances of the same app, +which may be desirable in some circumstances. +--- + extensions/top-icons/extension.js | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/extensions/top-icons/extension.js b/extensions/top-icons/extension.js +index 79e2f42..3dfba46 100644 +--- a/extensions/top-icons/extension.js ++++ b/extensions/top-icons/extension.js +@@ -63,7 +63,7 @@ class SysTray { + button.destroy(); + }); + +- let role = wmClass || `${icon}`; ++ const role = `${icon}`; + Main.panel.addToStatusArea(role, button); + } + +-- +2.32.0 + diff --git a/SOURCES/0001-window-list-Explicitly-dispose-settings-on-destroy.patch b/SOURCES/0001-window-list-Explicitly-dispose-settings-on-destroy.patch new file mode 100644 index 0000000..9556d59 --- /dev/null +++ b/SOURCES/0001-window-list-Explicitly-dispose-settings-on-destroy.patch @@ -0,0 +1,46 @@ +From a31f4b6ca703faab25c306dc33056763642a83cb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 30 Sep 2022 18:16:16 +0200 +Subject: [PATCH] window-list: Explicitly dispose settings on destroy + +This will not only disconnect the signal handler, but also remove +any bindings. This works around a crash that happens if a setting +that triggers the binding changes at the same time as a setting +that rebuilds the window list; in that case, the binding handler +runs after gjs has dropped its wrapper object, but before the +binding is removed automaticalled when the object is finalized. + +https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/416 + +Part-of: +--- + extensions/window-list/extension.js | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js +index 89413818..91ee3e6b 100644 +--- a/extensions/window-list/extension.js ++++ b/extensions/window-list/extension.js +@@ -842,8 +842,8 @@ class WindowList extends St.Widget { + this._dndWindow = null; + + this._settings = ExtensionUtils.getSettings(); +- this._groupingModeChangedId = this._settings.connect( +- 'changed::grouping-mode', this._groupingModeChanged.bind(this)); ++ this._settings.connect('changed::grouping-mode', ++ () => this._groupingModeChanged()); + this._grouped = undefined; + this._groupingModeChanged(); + } +@@ -1112,7 +1112,7 @@ class WindowList extends St.Widget { + Main.xdndHandler.disconnect(this._dragBeginId); + Main.xdndHandler.disconnect(this._dragEndId); + +- this._settings.disconnect(this._groupingModeChangedId); ++ this._settings.run_dispose(); + + let windows = global.get_window_actors(); + for (let i = 0; i < windows.length; i++) +-- +2.39.1 + diff --git a/SOURCES/add-extra-extensions.patch b/SOURCES/add-extra-extensions.patch new file mode 100644 index 0000000..570e4c4 --- /dev/null +++ b/SOURCES/add-extra-extensions.patch @@ -0,0 +1,68217 @@ +From 6623a374036e0f2458d4b36e268f6e4dcc19a2d7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 20 May 2015 17:44:50 +0200 +Subject: [PATCH 1/7] Add top-icons extension + +--- + extensions/top-icons/extension.js | 96 +++++++++++++++++++++++++++ + extensions/top-icons/meson.build | 5 ++ + extensions/top-icons/metadata.json.in | 10 +++ + extensions/top-icons/stylesheet.css | 1 + + meson.build | 1 + + 5 files changed, 113 insertions(+) + create mode 100644 extensions/top-icons/extension.js + create mode 100644 extensions/top-icons/meson.build + create mode 100644 extensions/top-icons/metadata.json.in + create mode 100644 extensions/top-icons/stylesheet.css + +diff --git a/extensions/top-icons/extension.js b/extensions/top-icons/extension.js +new file mode 100644 +index 00000000..79e2f423 +--- /dev/null ++++ b/extensions/top-icons/extension.js +@@ -0,0 +1,96 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++/* exported init */ ++ ++const { Clutter, Shell, St } = imports.gi; ++const Main = imports.ui.main; ++const PanelMenu = imports.ui.panelMenu; ++const System = imports.system; ++ ++const PANEL_ICON_SIZE = 16; ++ ++const STANDARD_TRAY_ICON_IMPLEMENTATIONS = [ ++ 'bluetooth-applet', ++ 'gnome-sound-applet', ++ 'nm-applet', ++ 'gnome-power-manager', ++ 'keyboard', ++ 'a11y-keyboard', ++ 'kbd-scrolllock', ++ 'kbd-numlock', ++ 'kbd-capslock', ++ 'ibus-ui-gtk', ++]; ++ ++class SysTray { ++ constructor() { ++ this._icons = []; ++ this._tray = null; ++ } ++ ++ _onTrayIconAdded(o, icon) { ++ let wmClass = icon.wm_class ? icon.wm_class.toLowerCase() : ''; ++ if (STANDARD_TRAY_ICON_IMPLEMENTATIONS.includes(wmClass)) ++ return; ++ ++ let button = new PanelMenu.Button(0.5, null, true); ++ ++ let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; ++ let iconSize = PANEL_ICON_SIZE * scaleFactor; ++ ++ icon.set({ ++ width: iconSize, ++ height: iconSize, ++ x_align: Clutter.ActorAlign.CENTER, ++ y_align: Clutter.ActorAlign.CENTER, ++ }); ++ ++ let iconBin = new St.Widget({ ++ layout_manager: new Clutter.BinLayout(), ++ }); ++ iconBin.add_actor(icon); ++ button.add_actor(iconBin); ++ ++ this._icons.push(icon); ++ ++ button.connect('button-release-event', (actor, event) => { ++ icon.click(event); ++ }); ++ button.connect('key-press-event', (actor, event) => { ++ icon.click(event); ++ }); ++ ++ icon.connect('destroy', () => { ++ button.destroy(); ++ }); ++ ++ let role = wmClass || `${icon}`; ++ Main.panel.addToStatusArea(role, button); ++ } ++ ++ _onTrayIconRemoved(o, icon) { ++ let parent = icon.get_parent(); ++ parent.destroy(); ++ this._icons.splice(this._icons.indexOf(icon), 1); ++ } ++ ++ enable() { ++ this._tray = new Shell.TrayManager(); ++ this._tray.connect('tray-icon-added', ++ this._onTrayIconAdded.bind(this)); ++ this._tray.connect('tray-icon-removed', ++ this._onTrayIconRemoved.bind(this)); ++ this._tray.manage_screen(Main.panel); ++ } ++ ++ disable() { ++ this._icons.forEach(icon => icon.get_parent().destroy()); ++ this._icons = []; ++ ++ this._tray = null; ++ System.gc(); // force finalizing tray to unmanage screen ++ } ++} ++ ++function init() { ++ return new SysTray(); ++} +diff --git a/extensions/top-icons/meson.build b/extensions/top-icons/meson.build +new file mode 100644 +index 00000000..48504f63 +--- /dev/null ++++ b/extensions/top-icons/meson.build +@@ -0,0 +1,5 @@ ++extension_data += configure_file( ++ input: metadata_name + '.in', ++ output: metadata_name, ++ configuration: metadata_conf ++) +diff --git a/extensions/top-icons/metadata.json.in b/extensions/top-icons/metadata.json.in +new file mode 100644 +index 00000000..f1e2436f +--- /dev/null ++++ b/extensions/top-icons/metadata.json.in +@@ -0,0 +1,10 @@ ++{ ++"extension-id": "@extension_id@", ++"uuid": "@uuid@", ++"settings-schema": "@gschemaname@", ++"gettext-domain": "@gettext_domain@", ++"name": "Top Icons", ++"description": "Shows legacy tray icons on top", ++"shell-version": [ "@shell_current@" ], ++"url": "http://94.247.144.115/repo/topicons/" ++} +diff --git a/extensions/top-icons/stylesheet.css b/extensions/top-icons/stylesheet.css +new file mode 100644 +index 00000000..25134b65 +--- /dev/null ++++ b/extensions/top-icons/stylesheet.css +@@ -0,0 +1 @@ ++/* This extensions requires no special styling */ +diff --git a/meson.build b/meson.build +index 41a7e99d..f754767c 100644 +--- a/meson.build ++++ b/meson.build +@@ -45,6 +45,7 @@ all_extensions = default_extensions + all_extensions += [ + 'auto-move-windows', + 'native-window-placement', ++ 'top-icons', + 'user-theme' + ] + +-- +2.38.1 + + +From a38891b5a6b0ba51998298963988bf146b2e1f86 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 20 May 2015 18:05:41 +0200 +Subject: [PATCH 2/7] Add dash-to-dock extension + +--- + extensions/dash-to-dock/Settings.ui | 2660 +++++++++++++++++ + extensions/dash-to-dock/appIconIndicators.js | 1078 +++++++ + extensions/dash-to-dock/appIcons.js | 1273 ++++++++ + extensions/dash-to-dock/dash.js | 1072 +++++++ + extensions/dash-to-dock/dbusmenuUtils.js | 274 ++ + extensions/dash-to-dock/docking.js | 1967 ++++++++++++ + extensions/dash-to-dock/extension.js | 21 + + extensions/dash-to-dock/fileManager1API.js | 226 ++ + extensions/dash-to-dock/intellihide.js | 321 ++ + extensions/dash-to-dock/launcherAPI.js | 281 ++ + extensions/dash-to-dock/locations.js | 293 ++ + extensions/dash-to-dock/media/glossy.svg | 139 + + .../media/highlight_stacked_bg.svg | 82 + + .../media/highlight_stacked_bg_h.svg | 82 + + extensions/dash-to-dock/media/logo.svg | 528 ++++ + extensions/dash-to-dock/media/screenshot.jpg | Bin 0 -> 111454 bytes + extensions/dash-to-dock/meson.build | 27 + + extensions/dash-to-dock/metadata.json.in | 12 + + extensions/dash-to-dock/po/ar.po | 573 ++++ + extensions/dash-to-dock/po/cs.po | 552 ++++ + extensions/dash-to-dock/po/de.po | 586 ++++ + extensions/dash-to-dock/po/el.po | 444 +++ + extensions/dash-to-dock/po/es.po | 521 ++++ + extensions/dash-to-dock/po/eu.po | 543 ++++ + extensions/dash-to-dock/po/fr.po | 529 ++++ + extensions/dash-to-dock/po/gl.po | 438 +++ + extensions/dash-to-dock/po/hu.po | 440 +++ + extensions/dash-to-dock/po/id.po | 450 +++ + extensions/dash-to-dock/po/it.po | 517 ++++ + extensions/dash-to-dock/po/ja.po | 585 ++++ + extensions/dash-to-dock/po/nb.po | 506 ++++ + extensions/dash-to-dock/po/nl.po | 662 ++++ + extensions/dash-to-dock/po/pl.po | 558 ++++ + extensions/dash-to-dock/po/pt.po | 509 ++++ + extensions/dash-to-dock/po/pt_BR.po | 513 ++++ + extensions/dash-to-dock/po/ru.po | 626 ++++ + extensions/dash-to-dock/po/sk.po | 454 +++ + extensions/dash-to-dock/po/sr.po | 470 +++ + extensions/dash-to-dock/po/sr@latin.po | 469 +++ + extensions/dash-to-dock/po/sv.po | 545 ++++ + extensions/dash-to-dock/po/tr.po | 525 ++++ + extensions/dash-to-dock/po/uk_UA.po | 575 ++++ + extensions/dash-to-dock/po/zh_CN.po | 626 ++++ + extensions/dash-to-dock/po/zh_TW.po | 542 ++++ + extensions/dash-to-dock/prefs.js | 838 ++++++ + ....shell.extensions.dash-to-dock.gschema.xml | 551 ++++ + extensions/dash-to-dock/stylesheet.css | 231 ++ + extensions/dash-to-dock/theming.js | 553 ++++ + extensions/dash-to-dock/utils.js | 308 ++ + extensions/dash-to-dock/windowPreview.js | 598 ++++ + meson.build | 1 + + po/ar.po | 568 +++- + po/cs.po | 553 +++- + po/de.po | 587 +++- + po/el.po | 451 ++- + po/es.po | 528 +++- + po/eu.po | 582 +++- + po/fr.po | 537 +++- + po/gl.po | 445 ++- + po/hu.po | 441 ++- + po/id.po | 451 ++- + po/it.po | 516 +++- + po/ja.po | 620 +++- + po/nb.po | 509 +++- + po/nl.po | 663 +++- + po/pl.po | 565 +++- + po/pt.po | 520 +++- + po/pt_BR.po | 519 +++- + po/ru.po | 634 +++- + po/sk.po | 456 ++- + po/sr.po | 478 ++- + po/sr@latin.po | 489 ++- + po/sv.po | 546 +++- + po/tr.po | 554 +++- + po/zh_CN.po | 643 +++- + po/zh_TW.po | 559 +++- + 76 files changed, 40473 insertions(+), 115 deletions(-) + create mode 100644 extensions/dash-to-dock/Settings.ui + create mode 100644 extensions/dash-to-dock/appIconIndicators.js + create mode 100644 extensions/dash-to-dock/appIcons.js + create mode 100644 extensions/dash-to-dock/dash.js + create mode 100644 extensions/dash-to-dock/dbusmenuUtils.js + create mode 100644 extensions/dash-to-dock/docking.js + create mode 100644 extensions/dash-to-dock/extension.js + create mode 100644 extensions/dash-to-dock/fileManager1API.js + create mode 100644 extensions/dash-to-dock/intellihide.js + create mode 100644 extensions/dash-to-dock/launcherAPI.js + create mode 100644 extensions/dash-to-dock/locations.js + create mode 100644 extensions/dash-to-dock/media/glossy.svg + create mode 100644 extensions/dash-to-dock/media/highlight_stacked_bg.svg + create mode 100644 extensions/dash-to-dock/media/highlight_stacked_bg_h.svg + create mode 100644 extensions/dash-to-dock/media/logo.svg + create mode 100644 extensions/dash-to-dock/media/screenshot.jpg + create mode 100644 extensions/dash-to-dock/meson.build + create mode 100644 extensions/dash-to-dock/metadata.json.in + create mode 100644 extensions/dash-to-dock/po/ar.po + create mode 100644 extensions/dash-to-dock/po/cs.po + create mode 100644 extensions/dash-to-dock/po/de.po + create mode 100644 extensions/dash-to-dock/po/el.po + create mode 100644 extensions/dash-to-dock/po/es.po + create mode 100644 extensions/dash-to-dock/po/eu.po + create mode 100644 extensions/dash-to-dock/po/fr.po + create mode 100644 extensions/dash-to-dock/po/gl.po + create mode 100644 extensions/dash-to-dock/po/hu.po + create mode 100644 extensions/dash-to-dock/po/id.po + create mode 100644 extensions/dash-to-dock/po/it.po + create mode 100644 extensions/dash-to-dock/po/ja.po + create mode 100644 extensions/dash-to-dock/po/nb.po + create mode 100644 extensions/dash-to-dock/po/nl.po + create mode 100644 extensions/dash-to-dock/po/pl.po + create mode 100644 extensions/dash-to-dock/po/pt.po + create mode 100644 extensions/dash-to-dock/po/pt_BR.po + create mode 100644 extensions/dash-to-dock/po/ru.po + create mode 100644 extensions/dash-to-dock/po/sk.po + create mode 100644 extensions/dash-to-dock/po/sr.po + create mode 100644 extensions/dash-to-dock/po/sr@latin.po + create mode 100644 extensions/dash-to-dock/po/sv.po + create mode 100644 extensions/dash-to-dock/po/tr.po + create mode 100644 extensions/dash-to-dock/po/uk_UA.po + create mode 100644 extensions/dash-to-dock/po/zh_CN.po + create mode 100644 extensions/dash-to-dock/po/zh_TW.po + create mode 100644 extensions/dash-to-dock/prefs.js + create mode 100644 extensions/dash-to-dock/schemas/org.gnome.shell.extensions.dash-to-dock.gschema.xml + create mode 100644 extensions/dash-to-dock/stylesheet.css + create mode 100644 extensions/dash-to-dock/theming.js + create mode 100644 extensions/dash-to-dock/utils.js + create mode 100644 extensions/dash-to-dock/windowPreview.js + +diff --git a/extensions/dash-to-dock/Settings.ui b/extensions/dash-to-dock/Settings.ui +new file mode 100644 +index 00000000..d2560de5 +--- /dev/null ++++ b/extensions/dash-to-dock/Settings.ui +@@ -0,0 +1,2660 @@ ++ ++ ++ ++ ++ 1 ++ 0.050000000000000003 ++ 0.25 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ vertical ++ ++ ++ 0 ++ ++ ++ 0 ++ none ++ ++ ++ 100 ++ 80 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ When set to minimize, double clicking minimizes all the windows of the application. ++ 1 ++ 40 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Shift+Click action ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ center ++ ++ Raise window ++ Minimize window ++ Launch new instance ++ Cycle through windows ++ Minimize or overview ++ Show window previews ++ Minimize or show previews ++ Focus or show previews ++ Focus, minimize or show previews ++ Quit ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 100 ++ 80 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ Behavior for Middle-Click. ++ 1 ++ 40 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Middle-Click action ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ center ++ ++ Raise window ++ Minimize window ++ Launch new instance ++ Cycle through windows ++ Minimize or overview ++ Show window previews ++ Minimize or show previews ++ Focus or show previews ++ Focus, minimize or show previews ++ Quit ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 100 ++ 80 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ Behavior for Shift+Middle-Click. ++ 1 ++ 40 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Shift+Middle-Click action ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ center ++ ++ Raise window ++ Minimize window ++ Launch new instance ++ Cycle through windows ++ Minimize or overview ++ Show window previews ++ Minimize or show previews ++ Focus or show previews ++ Focus, minimize or show previews ++ Quit ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 1 ++ 0.01 ++ 0.10 ++ ++ ++ 0.33 ++ 1 ++ 0.01 ++ 0.10 ++ ++ ++ 10 ++ 1 ++ 5 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ vertical ++ ++ ++ 0 ++ ++ ++ ++ 0 ++ none ++ ++ ++ 100 ++ 80 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ vertical ++ 12 ++ ++ ++ 0 ++ 32 ++ ++ ++ 1 ++ 0 ++ center ++ Enable Unity7 like glossy backlit items ++ ++ ++ ++ ++ ++ center ++ ++ ++ ++ ++ ++ ++ 0 ++ ++ ++ 1 ++ 0 ++ start ++ Use dominant color ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 32 ++ ++ ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Customize indicator style ++ fill ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ vertical ++ 12 ++ ++ ++ 0 ++ 32 ++ ++ ++ 1 ++ 0 ++ Color ++ ++ ++ ++ ++ ++ 1 ++ ++ ++ ++ ++ ++ ++ 0 ++ 32 ++ ++ ++ 1 ++ 0 ++ Border color ++ ++ ++ ++ ++ ++ 1 ++ ++ ++ ++ ++ ++ ++ 0 ++ 32 ++ ++ ++ 1 ++ 0 ++ Border width ++ ++ ++ ++ ++ ++ dot_border_width_adjustment ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 1 ++ 0.050000000000000003 ++ 0.25 ++ ++ ++ 16 ++ 128 ++ 1 ++ 10 ++ ++ ++ 6 ++ 6 ++ 6 ++ 6 ++ ++ ++ ++ ++ 0 ++ 24 ++ 24 ++ 24 ++ 24 ++ vertical ++ 24 ++ ++ ++ 0 ++ ++ ++ ++ 0 ++ none ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ start ++ Show the dock on ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ center ++ ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ Show on all monitors. ++ 12 ++ ++ ++ 0 ++ 2 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 100 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ Position on screen ++ ++ ++ ++ ++ ++ 0 ++ 32 ++ ++ ++ Left ++ end ++ center ++ ++ ++ ++ ++ ++ ++ Bottom ++ center ++ ++ position_left_button ++ ++ ++ ++ ++ ++ Top ++ center ++ ++ ++ position_left_button ++ ++ ++ ++ ++ ++ Right ++ center ++ ++ position_left_button ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ ++ ++ ++ 0 ++ none ++ ++ ++ 100 ++ 80 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ start ++ Hide the dock when it obstructs a window of the current application. More refined settings are available. ++ 1 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Intelligent autohide ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 6 ++ ++ ++ 1 ++ center ++ center ++ ++ ++ ++ 0 ++ emblem-system-symbolic ++ ++ ++ ++ ++ ++ ++ ++ end ++ center ++ ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ ++ ++ ++ 0 ++ none ++ ++ ++ 100 ++ 80 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ Dock size limit ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 1 ++ baseline ++ 1 ++ dock_size_adjustment ++ 0 ++ 2 ++ right ++ ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ Panel mode: extend to the screen edge ++ 12 ++ ++ ++ 0 ++ 1 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ Icon size limit ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 1 ++ baseline ++ 1 ++ icon_size_adjustment ++ 1 ++ 0 ++ right ++ ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ Fixed icon size: scroll to reveal other icons ++ 12 ++ ++ ++ 0 ++ 1 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ Position and size ++ ++ ++ ++ ++ ++ ++ 1 ++ ++ ++ 0 ++ 24 ++ 24 ++ 24 ++ 24 ++ vertical ++ 24 ++ ++ ++ 0 ++ ++ ++ ++ 0 ++ none ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ end ++ center ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Show favorite applications ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ end ++ center ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Show running applications ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ Isolate workspaces. ++ start ++ 12 ++ ++ ++ 0 ++ 2 ++ 2 ++ ++ ++ ++ ++ ++ Isolate monitors. ++ start ++ 12 ++ ++ ++ 0 ++ 3 ++ 2 ++ ++ ++ ++ ++ ++ 3 ++ ++ ++ ++ 0 ++ Show open windows previews. ++ 1 ++ ++ ++ ++ 0 ++ 1 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ end ++ center ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ If disabled, these settings are accessible from gnome-tweak-tool or the extension website. ++ 1 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Show <i>Applications</i> icon ++ 1 ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ Move the applications button at the beginning of the dock. ++ start ++ 12 ++ ++ ++ 0 ++ 2 ++ 2 ++ ++ ++ ++ ++ ++ 3 ++ ++ ++ ++ ++ 0 ++ start ++ Animate <i>Show Applications</i>. ++ 1 ++ ++ ++ ++ 0 ++ 3 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ end ++ center ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Show trash can ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ end ++ center ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Show mounted volumes and devices ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ Launchers ++ ++ ++ ++ ++ ++ ++ 2 ++ ++ ++ 0 ++ 24 ++ 24 ++ 24 ++ 24 ++ vertical ++ 24 ++ ++ ++ 0 ++ ++ ++ ++ 0 ++ none ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ start ++ 1 ++ Enable Super+(0-9) as shortcuts to activate apps. It can also be used together with Shift and Ctrl. ++ 1 ++ 1 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Use keyboard shortcuts to activate apps ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 6 ++ ++ ++ 1 ++ center ++ center ++ ++ ++ ++ 0 ++ emblem-system-symbolic ++ ++ ++ ++ ++ ++ ++ ++ end ++ center ++ ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ ++ ++ ++ 0 ++ none ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ start ++ Behaviour when clicking on the icon of a running application. ++ 1 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Click action ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 6 ++ ++ ++ 1 ++ center ++ ++ ++ 0 ++ emblem-system-symbolic ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ center ++ ++ Raise window ++ Minimize ++ Launch new instance ++ Cycle through windows ++ Minimize or overview ++ Show window previews ++ Minimize or show previews ++ Focus or show previews ++ Focus, minimize or show previews ++ ++ ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ ++ ++ ++ 0 ++ none ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ start ++ Behaviour when scrolling on the icon of an application. ++ 1 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Scroll action ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 6 ++ ++ ++ 0 ++ center ++ ++ Do nothing ++ Cycle through windows ++ Switch workspace ++ ++ ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ start ++ Behavior ++ ++ ++ ++ ++ ++ ++ 3 ++ ++ ++ 0 ++ 24 ++ 24 ++ 24 ++ 24 ++ vertical ++ 24 ++ ++ ++ 0 ++ ++ ++ ++ none ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ start ++ Few customizations meant to integrate the dock with the default GNOME theme. Alternatively, specific options can be enabled below. ++ 1 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Use built-in theme ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ end ++ center ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ ++ ++ ++ 0 ++ none ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ end ++ center ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Save space reducing padding and border radius. ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Shrink the dash ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ start ++ Customize windows counter indicators ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 6 ++ ++ ++ 1 ++ center ++ center ++ ++ ++ ++ 0 ++ emblem-system-symbolic ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ ++ Default ++ Dots ++ Squares ++ Dashes ++ Segmented ++ Solid ++ Ciliora ++ Metro ++ ++ ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ start ++ Set the background color for the dash. ++ 1 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Customize the dash color ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 6 ++ ++ ++ 1 ++ center ++ center ++ ++ ++ ++ ++ ++ end ++ center ++ ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ vertical ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ start ++ Tune the dash background opacity. ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Customize opacity ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 6 ++ ++ ++ 1 ++ center ++ center ++ ++ ++ 0 ++ emblem-system-symbolic ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ center ++ ++ Default ++ Fixed ++ Dynamic ++ ++ ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ Opacity ++ ++ ++ ++ ++ 1 ++ 1 ++ custom_opacity_adjustement ++ ++ 0 ++ 0 ++ 0 ++ 2 ++ right ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 100 ++ 80 ++ ++ ++ 0 ++ 32 ++ ++ ++ 1 ++ 0 ++ center ++ start ++ Force straight corner ++ ++ ++ ++ ++ ++ center ++ 3 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ Appearance ++ ++ ++ ++ ++ ++ ++ 4 ++ ++ ++ 0 ++ 0 ++ 24 ++ 24 ++ 1 ++ 1 ++ vertical ++ 5 ++ ++ ++ ++ ++ ++ 0 ++ <b>Dash to Dock</b> ++ 1 ++ ++ ++ ++ ++ 0 ++ center ++ ++ ++ 0 ++ end ++ version: ++ ++ ++ ++ ++ 0 ++ start ++ ... ++ ++ ++ ++ ++ ++ ++ 0 ++ Moves the dash out of the overview transforming it in a dock ++ center ++ 1 ++ ++ ++ ++ ++ 0 ++ center ++ 5 ++ ++ ++ 0 ++ Created by ++ ++ ++ ++ ++ Michele (<a href="mailto:micxgx@gmail.com">micxgx@gmail.com</a>) ++ 1 ++ ++ ++ ++ ++ ++ ++ Webpage ++ 1 ++ center ++ ++ https://micheleg.github.io/dash-to-dock/ ++ ++ ++ ++ ++ 1 ++ end ++ <span size="small">This program comes with ABSOLUTELY NO WARRANTY. ++See the <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, version 2 or later</a> for details.</span> ++ 1 ++ center ++ 1 ++ ++ ++ ++ ++ ++ ++ 0 ++ About ++ ++ ++ ++ ++ ++ ++ 1 ++ 0.01 ++ 0.10000000000000001 ++ ++ ++ 1 ++ 0.01 ++ 0.10000000000000001 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ vertical ++ ++ ++ 0 ++ ++ ++ ++ 0 ++ none ++ ++ ++ 100 ++ 80 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ vertical ++ 12 ++ ++ ++ 0 ++ 32 ++ ++ ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Customize minimum and maximum opacity values ++ fill ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ Minimum opacity ++ ++ ++ ++ ++ 1 ++ 1 ++ min_opacity_adjustement ++ ++ 0 ++ 0 ++ 0 ++ 2 ++ right ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ Maximum opacity ++ ++ ++ ++ ++ 1 ++ 1 ++ max_opacity_adjustement ++ ++ 0 ++ 0 ++ 0 ++ 2 ++ right ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 1000 ++ 50 ++ 250 ++ ++ ++ 10 ++ 0.25 ++ 1 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ vertical ++ ++ ++ 0 ++ ++ ++ ++ 0 ++ none ++ ++ ++ 100 ++ 80 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ end ++ center ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Number overlay ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ Temporarily show the application numbers over the icons, corresponding to the shortcut. ++ 1 ++ 40 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 100 ++ 80 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ end ++ center ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ start ++ Show the dock if it is hidden ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ If using autohide, the dock will appear for a short time when triggering the shortcut. ++ 1 ++ 40 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 100 ++ 80 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ center ++ 12 ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Shortcut for the options above ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ Syntax: <Shift>, <Ctrl>, <Alt>, <Super> ++ 1 ++ 40 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 1 ++ 6 ++ 32 ++ ++ ++ end ++ shortcut_time_adjustment ++ 3 ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Hide timeout (s) ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 1 ++ 0.050000000000000003 ++ 0.25 ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ vertical ++ ++ ++ 0 ++ ++ ++ ++ 0 ++ none ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ start ++ Show the dock by mouse hover on the screen edge. ++ 1 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Autohide ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ end ++ center ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ Push to show: require pressure to show the dock ++ ++ ++ 0 ++ 3 ++ 2 ++ ++ ++ ++ ++ ++ Enable in fullscreen mode ++ 12 ++ ++ ++ 0 ++ 2 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ 0 ++ 1 ++ start ++ Show the dock when it doesn't obstruct application windows. ++ 1 ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Dodge windows ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ end ++ center ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ 0 ++ vertical ++ ++ ++ All windows ++ 12 ++ ++ 1 ++ ++ ++ ++ ++ ++ Only focused application's windows ++ ++ 1 ++ all_windows_radio_button ++ ++ ++ ++ ++ ++ Only maximized windows ++ ++ 1 ++ all_windows_radio_button ++ ++ ++ ++ ++ 0 ++ 2 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 12 ++ 12 ++ 12 ++ 12 ++ 1 ++ 6 ++ 32 ++ ++ ++ end ++ animation_time_adjustment ++ 3 ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Animation duration (s) ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ end ++ hide_timeout_adjustment ++ 3 ++ ++ 1 ++ 1 ++ ++ ++ ++ ++ ++ end ++ show_timeout_adjustment ++ 3 ++ ++ 1 ++ 2 ++ ++ ++ ++ ++ ++ 0.000 ++ pressure_threshold_adjustment ++ ++ 1 ++ 3 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Hide timeout (s) ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Show timeout (s) ++ ++ ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ Pressure threshold ++ ++ ++ 0 ++ 3 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/appIconIndicators.js b/extensions/dash-to-dock/appIconIndicators.js +new file mode 100644 +index 00000000..f015a80f +--- /dev/null ++++ b/extensions/dash-to-dock/appIconIndicators.js +@@ -0,0 +1,1078 @@ ++const Cairo = imports.cairo; ++const Clutter = imports.gi.Clutter; ++const GdkPixbuf = imports.gi.GdkPixbuf ++const Gio = imports.gi.Gio; ++const Graphene = imports.gi.Graphene; ++const Gtk = imports.gi.Gtk; ++const Main = imports.ui.main; ++const Pango = imports.gi.Pango; ++const Shell = imports.gi.Shell; ++const St = imports.gi.St; ++ ++const Util = imports.misc.util; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Docking = Me.imports.docking; ++const Utils = Me.imports.utils; ++ ++let tracker = Shell.WindowTracker.get_default(); ++ ++const RunningIndicatorStyle = { ++ DEFAULT: 0, ++ DOTS: 1, ++ SQUARES: 2, ++ DASHES: 3, ++ SEGMENTED: 4, ++ SOLID: 5, ++ CILIORA: 6, ++ METRO: 7 ++}; ++ ++const MAX_WINDOWS_CLASSES = 4; ++ ++ ++/* ++ * This is the main indicator class to be used. The desired bahviour is ++ * obtained by composing the desired classes below based on the settings. ++ * ++ */ ++var AppIconIndicator = class DashToDock_AppIconIndicator { ++ ++ constructor(source) { ++ this._indicators = []; ++ ++ // Unity indicators always enabled for now ++ let unityIndicator = new UnityIndicator(source); ++ this._indicators.push(unityIndicator); ++ ++ // Choose the style for the running indicators ++ let runningIndicator = null; ++ let runningIndicatorStyle; ++ ++ let settings = Docking.DockManager.settings; ++ if (settings.get_boolean('apply-custom-theme' )) { ++ runningIndicatorStyle = RunningIndicatorStyle.DOTS; ++ } else { ++ runningIndicatorStyle = settings.get_enum('running-indicator-style'); ++ } ++ ++ switch (runningIndicatorStyle) { ++ case RunningIndicatorStyle.DEFAULT: ++ runningIndicator = new RunningIndicatorDefault(source); ++ break; ++ ++ case RunningIndicatorStyle.DOTS: ++ runningIndicator = new RunningIndicatorDots(source); ++ break; ++ ++ case RunningIndicatorStyle.SQUARES: ++ runningIndicator = new RunningIndicatorSquares(source); ++ break; ++ ++ case RunningIndicatorStyle.DASHES: ++ runningIndicator = new RunningIndicatorDashes(source); ++ break; ++ ++ case RunningIndicatorStyle.SEGMENTED: ++ runningIndicator = new RunningIndicatorSegmented(source); ++ break; ++ ++ case RunningIndicatorStyle.SOLID: ++ runningIndicator = new RunningIndicatorSolid(source); ++ break; ++ ++ case RunningIndicatorStyle.CILIORA: ++ runningIndicator = new RunningIndicatorCiliora(source); ++ break; ++ ++ case RunningIndicatorStyle.METRO: ++ runningIndicator = new RunningIndicatorMetro(source); ++ break; ++ ++ default: ++ runningIndicator = new RunningIndicatorBase(source); ++ } ++ ++ this._indicators.push(runningIndicator); ++ } ++ ++ update() { ++ for (let i=0; i { ++ this._signalsHandler.destroy(); ++ }); ++ } ++ ++ update() { ++ } ++ ++ destroy() { ++ this._source.disconnect(this._sourceDestroyId); ++ this._signalsHandler.destroy(); ++ } ++}; ++ ++/* ++ * A base indicator class for running style, from which all other EunningIndicators should derive, ++ * providing some basic methods, variables definitions and their update, css style classes handling. ++ * ++ */ ++var RunningIndicatorBase = class DashToDock_RunningIndicatorBase extends IndicatorBase { ++ ++ constructor(source) { ++ super(source) ++ ++ this._side = Utils.getPosition(); ++ this._nWindows = 0; ++ ++ this._dominantColorExtractor = new DominantColorExtractor(this._source.app); ++ ++ // These statuses take into account the workspace/monitor isolation ++ this._isFocused = false; ++ this._isRunning = false; ++ } ++ ++ update() { ++ // Limit to 1 to MAX_WINDOWS_CLASSES windows classes ++ this._nWindows = Math.min(this._source.getInterestingWindows().length, MAX_WINDOWS_CLASSES); ++ ++ // We need to check the number of windows, as the focus might be ++ // happening on another monitor if using isolation ++ if (tracker.focus_app == this._source.app && this._nWindows > 0) ++ this._isFocused = true; ++ else ++ this._isFocused = false; ++ ++ // In the case of workspace isolation, we need to hide the dots of apps with ++ // no windows in the current workspace ++ if ((this._source.app.state != Shell.AppState.STOPPED || this._source.isLocation()) && this._nWindows > 0) ++ this._isRunning = true; ++ else ++ this._isRunning = false; ++ ++ this._updateCounterClass(); ++ this._updateFocusClass(); ++ this._updateDefaultDot(); ++ } ++ ++ _updateCounterClass() { ++ for (let i = 1; i <= MAX_WINDOWS_CLASSES; i++) { ++ let className = 'running' + i; ++ if (i != this._nWindows) ++ this._source.remove_style_class_name(className); ++ else ++ this._source.add_style_class_name(className); ++ } ++ } ++ ++ _updateFocusClass() { ++ if (this._isFocused) ++ this._source.add_style_class_name('focused'); ++ else ++ this._source.remove_style_class_name('focused'); ++ } ++ ++ _updateDefaultDot() { ++ if (this._isRunning) ++ this._source._dot.show(); ++ else ++ this._source._dot.hide(); ++ } ++ ++ _hideDefaultDot() { ++ // I use opacity to hide the default dot because the show/hide function ++ // are used by the parent class. ++ this._source._dot.opacity = 0; ++ } ++ ++ _restoreDefaultDot() { ++ this._source._dot.opacity = 255; ++ } ++ ++ _enableBacklight() { ++ ++ let colorPalette = this._dominantColorExtractor._getColorPalette(); ++ ++ // Fallback ++ if (colorPalette === null) { ++ this._source._iconContainer.set_style( ++ 'border-radius: 5px;' + ++ 'background-gradient-direction: vertical;' + ++ 'background-gradient-start: #e0e0e0;' + ++ 'background-gradient-end: darkgray;' ++ ); ++ ++ return; ++ } ++ ++ this._source._iconContainer.set_style( ++ 'border-radius: 5px;' + ++ 'background-gradient-direction: vertical;' + ++ 'background-gradient-start: ' + colorPalette.original + ';' + ++ 'background-gradient-end: ' + colorPalette.darker + ';' ++ ); ++ ++ } ++ ++ _disableBacklight() { ++ this._source._iconContainer.set_style(null); ++ } ++ ++ destroy() { ++ this._disableBacklight(); ++ // Remove glossy background if the children still exists ++ if (this._source._iconContainer.get_children().length > 1) ++ this._source._iconContainer.get_children()[1].set_style(null); ++ this._restoreDefaultDot(); ++ ++ super.destroy(); ++ } ++}; ++ ++// We add a css class so third parties themes can limit their indicaor customization ++// to the case we do nothing ++var RunningIndicatorDefault = class DashToDock_RunningIndicatorDefault extends RunningIndicatorBase { ++ ++ constructor(source) { ++ super(source); ++ this._source.add_style_class_name('default'); ++ } ++ ++ destroy() { ++ this._source.remove_style_class_name('default'); ++ super.destroy(); ++ } ++}; ++ ++var RunningIndicatorDots = class DashToDock_RunningIndicatorDots extends RunningIndicatorBase { ++ ++ constructor(source) { ++ super(source) ++ ++ this._hideDefaultDot(); ++ ++ this._area = new St.DrawingArea({x_expand: true, y_expand: true}); ++ ++ // We draw for the bottom case and rotate the canvas for other placements ++ //set center of rotatoins to the center ++ this._area.set_pivot_point(0.5, 0.5); ++ // prepare transformation matrix ++ let m = new Graphene.Matrix(); ++ m.init_identity(); ++ let v = new Graphene.Vec3(); ++ v.init(0, 0, 1); ++ ++ switch (this._side) { ++ case St.Side.TOP: ++ m.xx = -1; ++ m.rotate(180, v); ++ break ++ ++ case St.Side.BOTTOM: ++ // nothing ++ break; ++ ++ case St.Side.LEFT: ++ m.yy = -1; ++ m.rotate(90, v); ++ break; ++ ++ case St.Side.RIGHT: ++ m.rotate(-90, v); ++ break ++ } ++ ++ this._area.set_transform(m); ++ ++ this._area.connect('repaint', this._updateIndicator.bind(this)); ++ this._source._iconContainer.add_child(this._area); ++ ++ let keys = ['custom-theme-running-dots-color', ++ 'custom-theme-running-dots-border-color', ++ 'custom-theme-running-dots-border-width', ++ 'custom-theme-customize-running-dots', ++ 'unity-backlit-items', ++ 'running-indicator-dominant-color']; ++ ++ keys.forEach(function(key) { ++ this._signalsHandler.add([ ++ Docking.DockManager.settings, ++ 'changed::' + key, ++ this.update.bind(this) ++ ]); ++ }, this); ++ ++ // Apply glossy background ++ // TODO: move to enable/disableBacklit to apply itonly to the running apps? ++ // TODO: move to css class for theming support ++ this._glossyBackgroundStyle = 'background-image: url(\'' + Me.path + '/media/glossy.svg\');' + ++ 'background-size: contain;'; ++ } ++ ++ update() { ++ super.update(); ++ ++ // Enable / Disable the backlight of running apps ++ if (!Docking.DockManager.settings.get_boolean('apply-custom-theme') && ++ Docking.DockManager.settings.get_boolean('unity-backlit-items')) { ++ this._source._iconContainer.get_children()[1].set_style(this._glossyBackgroundStyle); ++ if (this._isRunning) ++ this._enableBacklight(); ++ else ++ this._disableBacklight(); ++ } else { ++ this._disableBacklight(); ++ this._source._iconContainer.get_children()[1].set_style(null); ++ } ++ ++ if (this._area) ++ this._area.queue_repaint(); ++ } ++ ++ _computeStyle() { ++ ++ let [width, height] = this._area.get_surface_size(); ++ this._width = height; ++ this._height = width; ++ ++ // By defaut re-use the style - background color, and border width and color - ++ // of the default dot ++ let themeNode = this._source._dot.get_theme_node(); ++ this._borderColor = themeNode.get_border_color(this._side); ++ this._borderWidth = themeNode.get_border_width(this._side); ++ this._bodyColor = themeNode.get_background_color(); ++ ++ let settings = Docking.DockManager.settings; ++ if (!settings.get_boolean('apply-custom-theme')) { ++ // Adjust for the backlit case ++ if (settings.get_boolean('unity-backlit-items')) { ++ // Use dominant color for dots too if the backlit is enables ++ let colorPalette = this._dominantColorExtractor._getColorPalette(); ++ ++ // Slightly adjust the styling ++ this._borderWidth = 2; ++ ++ if (colorPalette !== null) { ++ this._borderColor = Clutter.color_from_string(colorPalette.lighter)[1] ; ++ this._bodyColor = Clutter.color_from_string(colorPalette.darker)[1]; ++ } else { ++ // Fallback ++ this._borderColor = Clutter.color_from_string('white')[1]; ++ this._bodyColor = Clutter.color_from_string('gray')[1]; ++ } ++ } ++ ++ // Apply dominant color if requested ++ if (settings.get_boolean('running-indicator-dominant-color')) { ++ let colorPalette = this._dominantColorExtractor._getColorPalette(); ++ if (colorPalette !== null) { ++ this._bodyColor = Clutter.color_from_string(colorPalette.original)[1]; ++ } ++ } ++ ++ // Finally, use customize style if requested ++ if (settings.get_boolean('custom-theme-customize-running-dots')) { ++ this._borderColor = Clutter.color_from_string(settings.get_string('custom-theme-running-dots-border-color'))[1]; ++ this._borderWidth = settings.get_int('custom-theme-running-dots-border-width'); ++ this._bodyColor = Clutter.color_from_string(settings.get_string('custom-theme-running-dots-color'))[1]; ++ } ++ } ++ ++ // Define the radius as an arbitrary size, but keep large enough to account ++ // for the drawing of the border. ++ this._radius = Math.max(this._width/22, this._borderWidth/2); ++ this._padding = 0; // distance from the margin ++ this._spacing = this._radius + this._borderWidth; // separation between the dots ++ } ++ ++ _updateIndicator() { ++ ++ let area = this._area; ++ let cr = this._area.get_context(); ++ ++ this._computeStyle(); ++ this._drawIndicator(cr); ++ cr.$dispose(); ++ } ++ ++ _drawIndicator(cr) { ++ // Draw the required numbers of dots ++ let n = this._nWindows; ++ ++ cr.setLineWidth(this._borderWidth); ++ Clutter.cairo_set_source_color(cr, this._borderColor); ++ ++ // draw for the bottom case: ++ cr.translate((this._width - (2*n)*this._radius - (n-1)*this._spacing)/2, this._height - this._padding); ++ for (let i = 0; i < n; i++) { ++ cr.newSubPath(); ++ cr.arc((2*i+1)*this._radius + i*this._spacing, -this._radius - this._borderWidth/2, this._radius, 0, 2*Math.PI); ++ } ++ ++ cr.strokePreserve(); ++ Clutter.cairo_set_source_color(cr, this._bodyColor); ++ cr.fill(); ++ } ++ ++ destroy() { ++ this._area.destroy(); ++ super.destroy(); ++ } ++}; ++ ++// Adapted from dash-to-panel by Jason DeRose ++// https://github.com/jderose9/dash-to-panel ++var RunningIndicatorCiliora = class DashToDock_RunningIndicatorCiliora extends RunningIndicatorDots { ++ ++ _drawIndicator(cr) { ++ if (this._isRunning) { ++ ++ let size = Math.max(this._width/20, this._borderWidth); ++ let spacing = size; // separation between the dots ++ let lineLength = this._width - (size*(this._nWindows-1)) - (spacing*(this._nWindows-1)); ++ let padding = this._borderWidth; ++ // For the backlit case here we don't want the outer border visible ++ if (Docking.DockManager.settings.get_boolean('unity-backlit-items') && ++ !Docking.DockManager.settings.get_boolean('custom-theme-customize-running-dots')) ++ padding = 0; ++ let yOffset = this._height - padding - size; ++ ++ cr.setLineWidth(this._borderWidth); ++ Clutter.cairo_set_source_color(cr, this._borderColor); ++ ++ cr.translate(0, yOffset); ++ cr.newSubPath(); ++ cr.rectangle(0, 0, lineLength, size); ++ for (let i = 1; i < this._nWindows; i++) { ++ cr.newSubPath(); ++ cr.rectangle(lineLength + (i*spacing) + ((i-1)*size), 0, size, size); ++ } ++ ++ cr.strokePreserve(); ++ Clutter.cairo_set_source_color(cr, this._bodyColor); ++ cr.fill(); ++ } ++ } ++}; ++ ++// Adapted from dash-to-panel by Jason DeRose ++// https://github.com/jderose9/dash-to-panel ++var RunningIndicatorSegmented = class DashToDock_RunningIndicatorSegmented extends RunningIndicatorDots { ++ ++ _drawIndicator(cr) { ++ if (this._isRunning) { ++ let size = Math.max(this._width/20, this._borderWidth); ++ let spacing = Math.ceil(this._width/18); // separation between the dots ++ let dashLength = Math.ceil((this._width - ((this._nWindows-1)*spacing))/this._nWindows); ++ let lineLength = this._width - (size*(this._nWindows-1)) - (spacing*(this._nWindows-1)); ++ let padding = this._borderWidth; ++ // For the backlit case here we don't want the outer border visible ++ if (Docking.DockManager.settings.get_boolean('unity-backlit-items') && ++ !Docking.DockManager.settings.get_boolean('custom-theme-customize-running-dots')) ++ padding = 0; ++ let yOffset = this._height - padding - size; ++ ++ cr.setLineWidth(this._borderWidth); ++ Clutter.cairo_set_source_color(cr, this._borderColor); ++ ++ cr.translate(0, yOffset); ++ for (let i = 0; i < this._nWindows; i++) { ++ cr.newSubPath(); ++ cr.rectangle(i*dashLength + i*spacing, 0, dashLength, size); ++ } ++ ++ cr.strokePreserve(); ++ Clutter.cairo_set_source_color(cr, this._bodyColor); ++ cr.fill() ++ } ++ } ++}; ++ ++// Adapted from dash-to-panel by Jason DeRose ++// https://github.com/jderose9/dash-to-panel ++var RunningIndicatorSolid = class DashToDock_RunningIndicatorSolid extends RunningIndicatorDots { ++ ++ _drawIndicator(cr) { ++ if (this._isRunning) { ++ ++ let size = Math.max(this._width/20, this._borderWidth); ++ let padding = this._borderWidth; ++ // For the backlit case here we don't want the outer border visible ++ if (Docking.DockManager.settings.get_boolean('unity-backlit-items') && ++ !Docking.DockManager.settings.get_boolean('custom-theme-customize-running-dots')) ++ padding = 0; ++ let yOffset = this._height - padding - size; ++ ++ cr.setLineWidth(this._borderWidth); ++ Clutter.cairo_set_source_color(cr, this._borderColor); ++ ++ cr.translate(0, yOffset); ++ cr.newSubPath(); ++ cr.rectangle(0, 0, this._width, size); ++ ++ cr.strokePreserve(); ++ Clutter.cairo_set_source_color(cr, this._bodyColor); ++ cr.fill(); ++ ++ } ++ } ++}; ++ ++// Adapted from dash-to-panel by Jason DeRose ++// https://github.com/jderose9/dash-to-panel ++var RunningIndicatorSquares = class DashToDock_RunningIndicatorSquares extends RunningIndicatorDots { ++ ++ _drawIndicator(cr) { ++ if (this._isRunning) { ++ let size = Math.max(this._width/11, this._borderWidth); ++ let padding = this._borderWidth; ++ let spacing = Math.ceil(this._width/18); // separation between the dots ++ let yOffset = this._height - padding - size; ++ ++ cr.setLineWidth(this._borderWidth); ++ Clutter.cairo_set_source_color(cr, this._borderColor); ++ ++ cr.translate(Math.floor((this._width - this._nWindows*size - (this._nWindows-1)*spacing)/2), yOffset); ++ for (let i = 0; i < this._nWindows; i++) { ++ cr.newSubPath(); ++ cr.rectangle(i*size + i*spacing, 0, size, size); ++ } ++ cr.strokePreserve(); ++ Clutter.cairo_set_source_color(cr, this._bodyColor); ++ cr.fill(); ++ } ++ } ++} ++ ++// Adapted from dash-to-panel by Jason DeRose ++// https://github.com/jderose9/dash-to-panel ++var RunningIndicatorDashes = class DashToDock_RunningIndicatorDashes extends RunningIndicatorDots { ++ ++ _drawIndicator(cr) { ++ if (this._isRunning) { ++ let size = Math.max(this._width/20, this._borderWidth); ++ let padding = this._borderWidth; ++ let spacing = Math.ceil(this._width/18); // separation between the dots ++ let dashLength = Math.floor(this._width/4) - spacing; ++ let yOffset = this._height - padding - size; ++ ++ cr.setLineWidth(this._borderWidth); ++ Clutter.cairo_set_source_color(cr, this._borderColor); ++ ++ cr.translate(Math.floor((this._width - this._nWindows*dashLength - (this._nWindows-1)*spacing)/2), yOffset); ++ for (let i = 0; i < this._nWindows; i++) { ++ cr.newSubPath(); ++ cr.rectangle(i*dashLength + i*spacing, 0, dashLength, size); ++ } ++ ++ cr.strokePreserve(); ++ Clutter.cairo_set_source_color(cr, this._bodyColor); ++ cr.fill(); ++ } ++ } ++} ++ ++// Adapted from dash-to-panel by Jason DeRose ++// https://github.com/jderose9/dash-to-panel ++var RunningIndicatorMetro = class DashToDock_RunningIndicatorMetro extends RunningIndicatorDots { ++ ++ constructor(source) { ++ super(source); ++ this._source.add_style_class_name('metro'); ++ } ++ ++ destroy() { ++ this._source.remove_style_class_name('metro'); ++ super.destroy(); ++ } ++ ++ _drawIndicator(cr) { ++ if (this._isRunning) { ++ let size = Math.max(this._width/20, this._borderWidth); ++ let padding = 0; ++ // For the backlit case here we don't want the outer border visible ++ if (Docking.DockManager.settings.get_boolean('unity-backlit-items') && ++ !Docking.DockManager.settings.get_boolean('custom-theme-customize-running-dots')) ++ padding = 0; ++ let yOffset = this._height - padding - size; ++ ++ let n = this._nWindows; ++ if(n <= 1) { ++ cr.translate(0, yOffset); ++ Clutter.cairo_set_source_color(cr, this._bodyColor); ++ cr.newSubPath(); ++ cr.rectangle(0, 0, this._width, size); ++ cr.fill(); ++ } else { ++ let blackenedLength = (1/48)*this._width; // need to scale with the SVG for the stacked highlight ++ let darkenedLength = this._isFocused ? (2/48)*this._width : (10/48)*this._width; ++ let blackenedColor = this._bodyColor.shade(.3); ++ let darkenedColor = this._bodyColor.shade(.7); ++ ++ cr.translate(0, yOffset); ++ ++ Clutter.cairo_set_source_color(cr, this._bodyColor); ++ cr.newSubPath(); ++ cr.rectangle(0, 0, this._width - darkenedLength - blackenedLength, size); ++ cr.fill(); ++ Clutter.cairo_set_source_color(cr, blackenedColor); ++ cr.newSubPath(); ++ cr.rectangle(this._width - darkenedLength - blackenedLength, 0, 1, size); ++ cr.fill(); ++ Clutter.cairo_set_source_color(cr, darkenedColor); ++ cr.newSubPath(); ++ cr.rectangle(this._width - darkenedLength, 0, darkenedLength, size); ++ cr.fill(); ++ } ++ } ++ } ++} ++ ++/* ++ * Unity like notification and progress indicators ++ */ ++var UnityIndicator = class DashToDock_UnityIndicator extends IndicatorBase { ++ ++ constructor(source) { ++ ++ super(source); ++ ++ this._notificationBadgeLabel = new St.Label(); ++ this._notificationBadgeBin = new St.Bin({ ++ child: this._notificationBadgeLabel, ++ x_align: Clutter.ActorAlign.END, ++ y_align: Clutter.ActorAlign.START, ++ x_expand: true, y_expand: true ++ }); ++ this._notificationBadgeLabel.add_style_class_name('notification-badge'); ++ this._notificationBadgeLabel.clutter_text.ellipsize = Pango.EllipsizeMode.MIDDLE; ++ this._notificationBadgeBin.hide(); ++ ++ this._source._iconContainer.add_child(this._notificationBadgeBin); ++ this.updateNotificationBadgeStyle(); ++ ++ const remoteEntry = this._source.remoteModel.lookupById(this._source.app.id); ++ this._signalsHandler.add([ ++ remoteEntry, ++ ['count-changed', 'count-visible-changed'], ++ (sender, { count, count_visible }) => ++ this.setNotificationCount(count_visible ? count : 0) ++ ], [ ++ remoteEntry, ++ ['progress-changed', 'progress-visible-changed'], ++ (sender, { progress, progress_visible }) => ++ this.setProgress(progress_visible ? progress : -1) ++ ], [ ++ remoteEntry, ++ 'urgent-changed', ++ (sender, { urgent }) => this.setUrgent(urgent) ++ ], [ ++ St.ThemeContext.get_for_stage(global.stage), ++ 'changed', ++ this.updateNotificationBadgeStyle.bind(this) ++ ], [ ++ this._source._iconContainer, ++ 'notify::size', ++ this.updateNotificationBadgeStyle.bind(this) ++ ]); ++ ++ this._isUrgent = false; ++ } ++ ++ updateNotificationBadgeStyle() { ++ let themeContext = St.ThemeContext.get_for_stage(global.stage); ++ let fontDesc = themeContext.get_font(); ++ let defaultFontSize = fontDesc.get_size() / 1024; ++ let fontSize = defaultFontSize * 0.9; ++ let iconSize = Main.overview.dash.iconSize; ++ let defaultIconSize = Docking.DockManager.settings.get_default_value( ++ 'dash-max-icon-size').unpack(); ++ ++ if (!fontDesc.get_size_is_absolute()) { ++ // fontSize was exprimed in points, so convert to pixel ++ fontSize /= 0.75; ++ } ++ ++ fontSize = Math.round((iconSize / defaultIconSize) * fontSize); ++ let leftMargin = Math.round((iconSize / defaultIconSize) * 3); ++ ++ this._notificationBadgeLabel.set_style( ++ 'font-size: ' + fontSize + 'px;' + ++ 'margin-left: ' + leftMargin + 'px' ++ ); ++ } ++ ++ _notificationBadgeCountToText(count) { ++ if (count <= 9999) { ++ return count.toString(); ++ } else if (count < 1e5) { ++ let thousands = count / 1e3; ++ return thousands.toFixed(1).toString() + "k"; ++ } else if (count < 1e6) { ++ let thousands = count / 1e3; ++ return thousands.toFixed(0).toString() + "k"; ++ } else if (count < 1e8) { ++ let millions = count / 1e6; ++ return millions.toFixed(1).toString() + "M"; ++ } else if (count < 1e9) { ++ let millions = count / 1e6; ++ return millions.toFixed(0).toString() + "M"; ++ } else { ++ let billions = count / 1e9; ++ return billions.toFixed(1).toString() + "B"; ++ } ++ } ++ ++ setNotificationCount(count) { ++ if (count > 0) { ++ let text = this._notificationBadgeCountToText(count); ++ this._notificationBadgeLabel.set_text(text); ++ this._notificationBadgeBin.show(); ++ } else { ++ this._notificationBadgeBin.hide(); ++ } ++ } ++ ++ _showProgressOverlay() { ++ if (this._progressOverlayArea) { ++ this._updateProgressOverlay(); ++ return; ++ } ++ ++ this._progressOverlayArea = new St.DrawingArea({x_expand: true, y_expand: true}); ++ this._progressOverlayArea.add_style_class_name('progress-bar'); ++ this._progressOverlayArea.connect('repaint', () => { ++ this._drawProgressOverlay(this._progressOverlayArea); ++ }); ++ ++ this._source._iconContainer.add_child(this._progressOverlayArea); ++ let node = this._progressOverlayArea.get_theme_node(); ++ ++ let [hasColor, color] = node.lookup_color('-progress-bar-background', false); ++ if (hasColor) ++ this._progressbar_background = color ++ else ++ this._progressbar_background = new Clutter.Color({red: 204, green: 204, blue: 204, alpha: 255}); ++ ++ [hasColor, color] = node.lookup_color('-progress-bar-border', false); ++ if (hasColor) ++ this._progressbar_border = color; ++ else ++ this._progressbar_border = new Clutter.Color({red: 230, green: 230, blue: 230, alpha: 255}); ++ ++ this._updateProgressOverlay(); ++ } ++ ++ _hideProgressOverlay() { ++ if (this._progressOverlayArea) ++ this._progressOverlayArea.destroy(); ++ this._progressOverlayArea = null; ++ this._progressbar_background = null; ++ this._progressbar_border = null; ++ } ++ ++ _updateProgressOverlay() { ++ if (this._progressOverlayArea) ++ this._progressOverlayArea.queue_repaint(); ++ } ++ ++ _drawProgressOverlay(area) { ++ let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; ++ let [surfaceWidth, surfaceHeight] = area.get_surface_size(); ++ let cr = area.get_context(); ++ ++ let iconSize = this._source.icon.iconSize * scaleFactor; ++ ++ let x = Math.floor((surfaceWidth - iconSize) / 2); ++ let y = Math.floor((surfaceHeight - iconSize) / 2); ++ ++ let lineWidth = Math.floor(1.0 * scaleFactor); ++ let padding = Math.floor(iconSize * 0.05); ++ let width = iconSize - 2.0*padding; ++ let height = Math.floor(Math.min(18.0*scaleFactor, 0.20*iconSize)); ++ x += padding; ++ y += iconSize - height - padding; ++ ++ cr.setLineWidth(lineWidth); ++ ++ // Draw the outer stroke ++ let stroke = new Cairo.LinearGradient(0, y, 0, y + height); ++ let fill = null; ++ stroke.addColorStopRGBA(0.5, 0.5, 0.5, 0.5, 0.1); ++ stroke.addColorStopRGBA(0.9, 0.8, 0.8, 0.8, 0.4); ++ Utils.drawRoundedLine(cr, x + lineWidth/2.0, y + lineWidth/2.0, width, height, true, true, stroke, fill); ++ ++ // Draw the background ++ x += lineWidth; ++ y += lineWidth; ++ width -= 2.0*lineWidth; ++ height -= 2.0*lineWidth; ++ ++ stroke = Cairo.SolidPattern.createRGBA(0.20, 0.20, 0.20, 0.9); ++ fill = new Cairo.LinearGradient(0, y, 0, y + height); ++ fill.addColorStopRGBA(0.4, 0.25, 0.25, 0.25, 1.0); ++ fill.addColorStopRGBA(0.9, 0.35, 0.35, 0.35, 1.0); ++ Utils.drawRoundedLine(cr, x + lineWidth/2.0, y + lineWidth/2.0, width, height, true, true, stroke, fill); ++ ++ // Draw the finished bar ++ x += lineWidth; ++ y += lineWidth; ++ width -= 2.0*lineWidth; ++ height -= 2.0*lineWidth; ++ ++ let finishedWidth = Math.ceil(this._progress * width); ++ ++ let bg = this._progressbar_background; ++ let bd = this._progressbar_border; ++ ++ stroke = Cairo.SolidPattern.createRGBA(bd.red/255, bd.green/255, bd.blue/255, bd.alpha/255); ++ fill = Cairo.SolidPattern.createRGBA(bg.red/255, bg.green/255, bg.blue/255, bg.alpha/255); ++ ++ if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) ++ Utils.drawRoundedLine(cr, x + lineWidth/2.0 + width - finishedWidth, y + lineWidth/2.0, finishedWidth, height, true, true, stroke, fill); ++ else ++ Utils.drawRoundedLine(cr, x + lineWidth/2.0, y + lineWidth/2.0, finishedWidth, height, true, true, stroke, fill); ++ ++ cr.$dispose(); ++ } ++ ++ setProgress(progress) { ++ if (progress < 0) { ++ this._hideProgressOverlay(); ++ } else { ++ this._progress = Math.min(progress, 1.0); ++ this._showProgressOverlay(); ++ } ++ } ++ ++ setUrgent(urgent) { ++ const icon = this._source.icon._iconBin; ++ if (urgent) { ++ if (!this._isUrgent) { ++ icon.set_pivot_point(0.5, 0.5); ++ this._source.iconAnimator.addAnimation(icon, 'dance'); ++ this._isUrgent = true; ++ } ++ } else { ++ if (this._isUrgent) { ++ this._source.iconAnimator.removeAnimation(icon, 'dance'); ++ this._isUrgent = false; ++ } ++ icon.rotation_angle_z = 0; ++ } ++ } ++} ++ ++ ++// We need an icons theme object, this is the only way I managed to get ++// pixel buffers that can be used for calculating the backlight color ++let themeLoader = null; ++ ++// Global icon cache. Used for Unity7 styling. ++let iconCacheMap = new Map(); ++// Max number of items to store ++// We don't expect to ever reach this number, but let's put an hard limit to avoid ++// even the remote possibility of the cached items to grow indefinitely. ++const MAX_CACHED_ITEMS = 1000; ++// When the size exceed it, the oldest 'n' ones are deleted ++const BATCH_SIZE_TO_DELETE = 50; ++// The icon size used to extract the dominant color ++const DOMINANT_COLOR_ICON_SIZE = 64; ++ ++// Compute dominant color frim the app icon. ++// The color is cached for efficiency. ++var DominantColorExtractor = class DashToDock_DominantColorExtractor { ++ ++ constructor(app) { ++ this._app = app; ++ } ++ ++ /** ++ * Try to get the pixel buffer for the current icon, if not fail gracefully ++ */ ++ _getIconPixBuf() { ++ let iconTexture = this._app.create_icon_texture(16); ++ ++ if (themeLoader === null) { ++ let ifaceSettings = new Gio.Settings({ schema: "org.gnome.desktop.interface" }); ++ ++ themeLoader = new Gtk.IconTheme(), ++ themeLoader.set_custom_theme(ifaceSettings.get_string('icon-theme')); // Make sure the correct theme is loaded ++ } ++ ++ // Unable to load the icon texture, use fallback ++ if (iconTexture instanceof St.Icon === false) { ++ return null; ++ } ++ ++ iconTexture = iconTexture.get_gicon(); ++ ++ // Unable to load the icon texture, use fallback ++ if (iconTexture === null) { ++ return null; ++ } ++ ++ if (iconTexture instanceof Gio.FileIcon) { ++ // Use GdkPixBuf to load the pixel buffer from the provided file path ++ return GdkPixbuf.Pixbuf.new_from_file(iconTexture.get_file().get_path()); ++ } ++ ++ // Get the pixel buffer from the icon theme ++ let icon_info = themeLoader.lookup_icon(iconTexture.get_names()[0], DOMINANT_COLOR_ICON_SIZE, 0); ++ if (icon_info !== null) ++ return icon_info.load_icon(); ++ else ++ return null; ++ } ++ ++ /** ++ * The backlight color choosing algorithm was mostly ported to javascript from the ++ * Unity7 C++ source of Canonicals: ++ * https://bazaar.launchpad.net/~unity-team/unity/trunk/view/head:/launcher/LauncherIcon.cpp ++ * so it more or less works the same way. ++ */ ++ _getColorPalette() { ++ if (iconCacheMap.get(this._app.get_id())) { ++ // We already know the answer ++ return iconCacheMap.get(this._app.get_id()); ++ } ++ ++ let pixBuf = this._getIconPixBuf(); ++ if (pixBuf == null) ++ return null; ++ ++ let pixels = pixBuf.get_pixels(), ++ offset = 0; ++ ++ let total = 0, ++ rTotal = 0, ++ gTotal = 0, ++ bTotal = 0; ++ ++ let resample_y = 1, ++ resample_x = 1; ++ ++ // Resampling of large icons ++ // We resample icons larger than twice the desired size, as the resampling ++ // to a size s ++ // DOMINANT_COLOR_ICON_SIZE < s < 2*DOMINANT_COLOR_ICON_SIZE, ++ // most of the case exactly DOMINANT_COLOR_ICON_SIZE as the icon size is tipycally ++ // a multiple of it. ++ let width = pixBuf.get_width(); ++ let height = pixBuf.get_height(); ++ ++ // Resample ++ if (height >= 2* DOMINANT_COLOR_ICON_SIZE) ++ resample_y = Math.floor(height/DOMINANT_COLOR_ICON_SIZE); ++ ++ if (width >= 2* DOMINANT_COLOR_ICON_SIZE) ++ resample_x = Math.floor(width/DOMINANT_COLOR_ICON_SIZE); ++ ++ if (resample_x !==1 || resample_y !== 1) ++ pixels = this._resamplePixels(pixels, resample_x, resample_y); ++ ++ // computing the limit outside the for (where it would be repeated at each iteration) ++ // for performance reasons ++ let limit = pixels.length; ++ for (let offset = 0; offset < limit; offset+=4) { ++ let r = pixels[offset], ++ g = pixels[offset + 1], ++ b = pixels[offset + 2], ++ a = pixels[offset + 3]; ++ ++ let saturation = (Math.max(r,g, b) - Math.min(r,g, b)); ++ let relevance = 0.1 * 255 * 255 + 0.9 * a * saturation; ++ ++ rTotal += r * relevance; ++ gTotal += g * relevance; ++ bTotal += b * relevance; ++ ++ total += relevance; ++ } ++ ++ total = total * 255; ++ ++ let r = rTotal / total, ++ g = gTotal / total, ++ b = bTotal / total; ++ ++ let hsv = Utils.ColorUtils.RGBtoHSV(r * 255, g * 255, b * 255); ++ ++ if (hsv.s > 0.15) ++ hsv.s = 0.65; ++ hsv.v = 0.90; ++ ++ let rgb = Utils.ColorUtils.HSVtoRGB(hsv.h, hsv.s, hsv.v); ++ ++ // Cache the result. ++ let backgroundColor = { ++ lighter: Utils.ColorUtils.ColorLuminance(rgb.r, rgb.g, rgb.b, 0.2), ++ original: Utils.ColorUtils.ColorLuminance(rgb.r, rgb.g, rgb.b, 0), ++ darker: Utils.ColorUtils.ColorLuminance(rgb.r, rgb.g, rgb.b, -0.5) ++ }; ++ ++ if (iconCacheMap.size >= MAX_CACHED_ITEMS) { ++ //delete oldest cached values (which are in order of insertions) ++ let ctr=0; ++ for (let key of iconCacheMap.keys()) { ++ if (++ctr > BATCH_SIZE_TO_DELETE) ++ break; ++ iconCacheMap.delete(key); ++ } ++ } ++ ++ iconCacheMap.set(this._app.get_id(), backgroundColor); ++ ++ return backgroundColor; ++ } ++ ++ /** ++ * Downsample large icons before scanning for the backlight color to ++ * improve performance. ++ * ++ * @param pixBuf ++ * @param pixels ++ * @param resampleX ++ * @param resampleY ++ * ++ * @return []; ++ */ ++ _resamplePixels (pixels, resampleX, resampleY) { ++ let resampledPixels = []; ++ // computing the limit outside the for (where it would be repeated at each iteration) ++ // for performance reasons ++ let limit = pixels.length / (resampleX * resampleY) / 4; ++ for (let i = 0; i < limit; i++) { ++ let pixel = i * resampleX * resampleY; ++ ++ resampledPixels.push(pixels[pixel * 4]); ++ resampledPixels.push(pixels[pixel * 4 + 1]); ++ resampledPixels.push(pixels[pixel * 4 + 2]); ++ resampledPixels.push(pixels[pixel * 4 + 3]); ++ } ++ ++ return resampledPixels; ++ } ++}; +diff --git a/extensions/dash-to-dock/appIcons.js b/extensions/dash-to-dock/appIcons.js +new file mode 100644 +index 00000000..d04230e6 +--- /dev/null ++++ b/extensions/dash-to-dock/appIcons.js +@@ -0,0 +1,1273 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Clutter = imports.gi.Clutter; ++const GdkPixbuf = imports.gi.GdkPixbuf ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const GObject = imports.gi.GObject; ++const Signals = imports.signals; ++const Meta = imports.gi.Meta; ++const Shell = imports.gi.Shell; ++const St = imports.gi.St; ++ ++// Use __ () and N__() for the extension gettext domain, and reuse ++// the shell domain with the default _() and N_() ++const Gettext = imports.gettext.domain('gnome-shell-extensions'); ++const __ = Gettext.gettext; ++const N__ = function(e) { return e }; ++ ++const AppDisplay = imports.ui.appDisplay; ++const AppFavorites = imports.ui.appFavorites; ++const Dash = imports.ui.dash; ++const DND = imports.ui.dnd; ++const IconGrid = imports.ui.iconGrid; ++const Main = imports.ui.main; ++const PopupMenu = imports.ui.popupMenu; ++const Util = imports.misc.util; ++const Workspace = imports.ui.workspace; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const Docking = Me.imports.docking; ++const Utils = Me.imports.utils; ++const WindowPreview = Me.imports.windowPreview; ++const AppIconIndicators = Me.imports.appIconIndicators; ++const DbusmenuUtils = Me.imports.dbusmenuUtils; ++ ++let tracker = Shell.WindowTracker.get_default(); ++ ++const clickAction = { ++ SKIP: 0, ++ MINIMIZE: 1, ++ LAUNCH: 2, ++ CYCLE_WINDOWS: 3, ++ MINIMIZE_OR_OVERVIEW: 4, ++ PREVIEWS: 5, ++ MINIMIZE_OR_PREVIEWS: 6, ++ FOCUS_OR_PREVIEWS: 7, ++ FOCUS_MINIMIZE_OR_PREVIEWS: 8, ++ QUIT: 9 ++}; ++ ++const scrollAction = { ++ DO_NOTHING: 0, ++ CYCLE_WINDOWS: 1, ++ SWITCH_WORKSPACE: 2 ++}; ++ ++let recentlyClickedAppLoopId = 0; ++let recentlyClickedApp = null; ++let recentlyClickedAppWindows = null; ++let recentlyClickedAppIndex = 0; ++let recentlyClickedAppMonitor = -1; ++ ++/** ++ * Extend AppIcon ++ * ++ * - Apply a css class based on the number of windows of each application (#N); ++ * - Customized indicators for running applications in place of the default "dot" style which is hidden (#N); ++ * a class of the form "running#N" is applied to the AppWellIcon actor. ++ * like the original .running one. ++ * - Add a .focused style to the focused app ++ * - Customize click actions. ++ * - Update minimization animation target ++ * - Update menu if open on windows change ++ */ ++var MyAppIcon = GObject.registerClass( ++class MyAppIcon extends Dash.DashIcon { ++ // settings are required inside. ++ _init(remoteModel, app, monitorIndex, iconAnimator) { ++ super._init(app); ++ ++ // a prefix is required to avoid conflicting with the parent class variable ++ this.monitorIndex = monitorIndex; ++ this._signalsHandler = new Utils.GlobalSignalsHandler(); ++ this.remoteModel = remoteModel; ++ this.iconAnimator = iconAnimator; ++ this._indicator = null; ++ ++ let appInfo = app.get_app_info(); ++ this._location = appInfo ? appInfo.get_string('XdtdUri') : null; ++ ++ this._updateIndicatorStyle(); ++ ++ // Monitor windows-changes instead of app state. ++ // Keep using the same Id and function callback (that is extended) ++ if (this._stateChangedId > 0) { ++ this.app.disconnect(this._stateChangedId); ++ this._stateChangedId = 0; ++ } ++ ++ this._windowsChangedId = this.app.connect('windows-changed', ++ this.onWindowsChanged.bind(this)); ++ this._focusAppChangeId = tracker.connect('notify::focus-app', ++ this._onFocusAppChanged.bind(this)); ++ ++ // In Wayland sessions, this signal is needed to track the state of windows dragged ++ // from one monitor to another. As this is triggered quite often (whenever a new winow ++ // of any application opened or moved to a different desktop), ++ // we restrict this signal to the case when 'isolate-monitors' is true, ++ // and if there are at least 2 monitors. ++ if (Docking.DockManager.settings.get_boolean('isolate-monitors') && ++ Main.layoutManager.monitors.length > 1) { ++ this._signalsHandler.removeWithLabel('isolate-monitors'); ++ this._signalsHandler.addWithLabel('isolate-monitors', [ ++ global.display, ++ 'window-entered-monitor', ++ this._onWindowEntered.bind(this) ++ ]); ++ } ++ ++ this._progressOverlayArea = null; ++ this._progress = 0; ++ ++ let keys = ['apply-custom-theme', ++ 'running-indicator-style', ++ ]; ++ ++ keys.forEach(function(key) { ++ this._signalsHandler.add([ ++ Docking.DockManager.settings, ++ 'changed::' + key, ++ this._updateIndicatorStyle.bind(this) ++ ]); ++ }, this); ++ ++ if (this._location) { ++ this._signalsHandler.add([ ++ Docking.DockManager.getDefault().fm1Client, ++ 'windows-changed', ++ this.onWindowsChanged.bind(this) ++ ]); ++ } ++ ++ this._numberOverlay(); ++ ++ this._previewMenuManager = null; ++ this._previewMenu = null; ++ } ++ ++ _onDestroy() { ++ super._onDestroy(); ++ ++ // This is necessary due to an upstream bug ++ // https://bugzilla.gnome.org/show_bug.cgi?id=757556 ++ // It can be safely removed once it get solved upstrea. ++ if (this._menu) ++ this._menu.close(false); ++ ++ // Disconect global signals ++ ++ if (this._windowsChangedId > 0) ++ this.app.disconnect(this._windowsChangedId); ++ this._windowsChangedId = 0; ++ ++ if (this._focusAppChangeId > 0) { ++ tracker.disconnect(this._focusAppChangeId); ++ this._focusAppChangeId = 0; ++ } ++ ++ this._signalsHandler.destroy(); ++ } ++ ++ // TOOD Rename this function ++ _updateIndicatorStyle() { ++ ++ if (this._indicator !== null) { ++ this._indicator.destroy(); ++ this._indicator = null; ++ } ++ this._indicator = new AppIconIndicators.AppIconIndicator(this); ++ this._indicator.update(); ++ } ++ ++ _onWindowEntered(metaScreen, monitorIndex, metaWin) { ++ let app = Shell.WindowTracker.get_default().get_window_app(metaWin); ++ if (app && app.get_id() == this.app.get_id()) ++ this.onWindowsChanged(); ++ } ++ ++ vfunc_scroll_event(scrollEvent) { ++ let settings = Docking.DockManager.settings; ++ let isEnabled = settings.get_enum('scroll-action') === scrollAction.CYCLE_WINDOWS; ++ if (!isEnabled) ++ return Clutter.EVENT_PROPAGATE; ++ ++ // We only activate windows of running applications, i.e. we never open new windows ++ // We check if the app is running, and that the # of windows is > 0 in ++ // case we use workspace isolation, ++ let appIsRunning = this.app.state == Shell.AppState.RUNNING ++ && this.getInterestingWindows().length > 0; ++ ++ if (!appIsRunning) ++ return Clutter.EVENT_PROPAGATE; ++ ++ if (this._optionalScrollCycleWindowsDeadTimeId) ++ return Clutter.EVENT_PROPAGATE; ++ else ++ this._optionalScrollCycleWindowsDeadTimeId = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, 250, () => { ++ this._optionalScrollCycleWindowsDeadTimeId = 0; ++ }); ++ ++ let direction = null; ++ ++ switch (scrollEvent.direction) { ++ case Clutter.ScrollDirection.UP: ++ direction = Meta.MotionDirection.UP; ++ break; ++ case Clutter.ScrollDirection.DOWN: ++ direction = Meta.MotionDirection.DOWN; ++ break; ++ case Clutter.ScrollDirection.SMOOTH: ++ let [, dy] = Clutter.get_current_event().get_scroll_delta(); ++ if (dy < 0) ++ direction = Meta.MotionDirection.UP; ++ else if (dy > 0) ++ direction = Meta.MotionDirection.DOWN; ++ break; ++ } ++ ++ let focusedApp = tracker.focus_app; ++ if (!Main.overview._shown) { ++ let reversed = direction === Meta.MotionDirection.UP; ++ if (this.app == focusedApp) ++ this._cycleThroughWindows(reversed); ++ else { ++ // Activate the first window ++ let windows = this.getInterestingWindows(); ++ if (windows.length > 0) { ++ let w = windows[0]; ++ Main.activateWindow(w); ++ } ++ } ++ } ++ else ++ this.app.activate(); ++ return Clutter.EVENT_STOP; ++ } ++ ++ onWindowsChanged() { ++ ++ if (this._menu && this._menu.isOpen) ++ this._menu.update(); ++ ++ this._indicator.update(); ++ this.updateIconGeometry(); ++ } ++ ++ /** ++ * Update taraget for minimization animation ++ */ ++ updateIconGeometry() { ++ // If (for unknown reason) the actor is not on the stage the reported size ++ // and position are random values, which might exceeds the integer range ++ // resulting in an error when assigned to the a rect. This is a more like ++ // a workaround to prevent flooding the system with errors. ++ if (this.get_stage() == null) ++ return; ++ ++ let rect = new Meta.Rectangle(); ++ ++ [rect.x, rect.y] = this.get_transformed_position(); ++ [rect.width, rect.height] = this.get_transformed_size(); ++ ++ let windows = this.getWindows(); ++ if (Docking.DockManager.settings.get_boolean('multi-monitor')) { ++ let monitorIndex = this.monitorIndex; ++ windows = windows.filter(function(w) { ++ return w.get_monitor() == monitorIndex; ++ }); ++ } ++ windows.forEach(function(w) { ++ w.set_icon_geometry(rect); ++ }); ++ } ++ ++ _updateRunningStyle() { ++ // The logic originally in this function has been moved to ++ // AppIconIndicatorBase._updateDefaultDot(). However it cannot be removed as ++ // it called by the parent constructor. ++ } ++ ++ popupMenu() { ++ this._removeMenuTimeout(); ++ this.fake_release(); ++ this._draggable.fakeRelease(); ++ ++ if (!this._menu) { ++ this._menu = new MyAppIconMenu(this, this.remoteModel); ++ this._menu.connect('activate-window', (menu, window) => { ++ this.activateWindow(window); ++ }); ++ this._menu.connect('open-state-changed', (menu, isPoppedUp) => { ++ if (!isPoppedUp) ++ this._onMenuPoppedDown(); ++ else { ++ // Setting the max-height is s useful if part of the menu is ++ // scrollable so the minimum height is smaller than the natural height. ++ let monitor_index = Main.layoutManager.findIndexForActor(this); ++ let workArea = Main.layoutManager.getWorkAreaForMonitor(monitor_index); ++ let position = Utils.getPosition(); ++ this._isHorizontal = ( position == St.Side.TOP || ++ position == St.Side.BOTTOM); ++ // If horizontal also remove the height of the dash ++ let fixedDock = Docking.DockManager.settings.get_boolean('dock-fixed'); ++ let additional_margin = this._isHorizontal && !fixedDock ? Main.overview.dash.height : 0; ++ let verticalMargins = this._menu.actor.margin_top + this._menu.actor.margin_bottom; ++ // Also set a max width to the menu, so long labels (long windows title) get truncated ++ this._menu.actor.style = ('max-height: ' + Math.round(workArea.height - additional_margin - verticalMargins) + 'px;' + ++ 'max-width: 400px'); ++ } ++ }); ++ let id = Main.overview.connect('hiding', () => { ++ this._menu.close(); ++ }); ++ this._menu.actor.connect('destroy', function() { ++ Main.overview.disconnect(id); ++ }); ++ ++ this._menuManager.addMenu(this._menu); ++ } ++ ++ this.emit('menu-state-changed', true); ++ ++ this.set_hover(true); ++ this._menu.popup(); ++ this._menuManager.ignoreRelease(); ++ this.emit('sync-tooltip'); ++ ++ return false; ++ } ++ ++ _onFocusAppChanged() { ++ this._indicator.update(); ++ } ++ ++ activate(button) { ++ let event = Clutter.get_current_event(); ++ let modifiers = event ? event.get_state() : 0; ++ let focusedApp = tracker.focus_app; ++ ++ // Only consider SHIFT and CONTROL as modifiers (exclude SUPER, CAPS-LOCK, etc.) ++ modifiers = modifiers & (Clutter.ModifierType.SHIFT_MASK | Clutter.ModifierType.CONTROL_MASK); ++ ++ // We don't change the CTRL-click behaviour: in such case we just chain ++ // up the parent method and return. ++ if (modifiers & Clutter.ModifierType.CONTROL_MASK) { ++ // Keep default behaviour: launch new window ++ // By calling the parent method I make it compatible ++ // with other extensions tweaking ctrl + click ++ super.activate(button); ++ return; ++ } ++ ++ // We check what type of click we have and if the modifier SHIFT is ++ // being used. We then define what buttonAction should be for this ++ // event. ++ let buttonAction = 0; ++ let settings = Docking.DockManager.settings; ++ if (button && button == 2 ) { ++ if (modifiers & Clutter.ModifierType.SHIFT_MASK) ++ buttonAction = settings.get_enum('shift-middle-click-action'); ++ else ++ buttonAction = settings.get_enum('middle-click-action'); ++ } ++ else if (button && button == 1) { ++ if (modifiers & Clutter.ModifierType.SHIFT_MASK) ++ buttonAction = settings.get_enum('shift-click-action'); ++ else ++ buttonAction = settings.get_enum('click-action'); ++ } ++ ++ // We check if the app is running, and that the # of windows is > 0 in ++ // case we use workspace isolation. ++ let windows = this.getInterestingWindows(); ++ let appIsRunning = (this.app.state == Shell.AppState.RUNNING || this.isLocation()) ++ && windows.length > 0; ++ ++ // Some action modes (e.g. MINIMIZE_OR_OVERVIEW) require overview to remain open ++ // This variable keeps track of this ++ let shouldHideOverview = true; ++ ++ // We customize the action only when the application is already running ++ if (appIsRunning) { ++ switch (buttonAction) { ++ case clickAction.MINIMIZE: ++ // In overview just activate the app, unless the acion is explicitely ++ // requested with a keyboard modifier ++ if (!Main.overview._shown || modifiers){ ++ // If we have button=2 or a modifier, allow minimization even if ++ // the app is not focused ++ if (this.app == focusedApp || button == 2 || modifiers & Clutter.ModifierType.SHIFT_MASK) { ++ // minimize all windows on double click and always in the case of primary click without ++ // additional modifiers ++ let click_count = 0; ++ if (Clutter.EventType.CLUTTER_BUTTON_PRESS) ++ click_count = event.get_click_count(); ++ let all_windows = (button == 1 && ! modifiers) || click_count > 1; ++ this._minimizeWindow(all_windows); ++ } ++ else ++ this._activateAllWindows(); ++ } ++ else { ++ let w = windows[0]; ++ Main.activateWindow(w); ++ } ++ break; ++ ++ case clickAction.MINIMIZE_OR_OVERVIEW: ++ // When a single window is present, toggle minimization ++ // If only one windows is present toggle minimization, but only when trigggered with the ++ // simple click action (no modifiers, no middle click). ++ if (windows.length == 1 && !modifiers && button == 1) { ++ let w = windows[0]; ++ if (this.app == focusedApp) { ++ // Window is raised, minimize it ++ this._minimizeWindow(w); ++ } else { ++ // Window is minimized, raise it ++ Main.activateWindow(w); ++ } ++ // Launch overview when multiple windows are present ++ // TODO: only show current app windows when gnome shell API will allow it ++ } else { ++ shouldHideOverview = false; ++ Main.overview.toggle(); ++ } ++ break; ++ ++ case clickAction.CYCLE_WINDOWS: ++ if (!Main.overview._shown){ ++ if (this.app == focusedApp) ++ this._cycleThroughWindows(); ++ else { ++ // Activate the first window ++ let w = windows[0]; ++ Main.activateWindow(w); ++ } ++ } ++ else ++ this.app.activate(); ++ break; ++ ++ case clickAction.FOCUS_OR_PREVIEWS: ++ if (this.app == focusedApp && ++ (windows.length > 1 || modifiers || button != 1)) { ++ this._windowPreviews(); ++ } else { ++ // Activate the first window ++ let w = windows[0]; ++ Main.activateWindow(w); ++ } ++ break; ++ ++ case clickAction.FOCUS_MINIMIZE_OR_PREVIEWS: ++ if (this.app == focusedApp) { ++ if (windows.length > 1 || modifiers || button != 1) ++ this._windowPreviews(); ++ else if (!Main.overview.visible) ++ this._minimizeWindow(); ++ } else { ++ // Activate the first window ++ let w = windows[0]; ++ Main.activateWindow(w); ++ } ++ break; ++ ++ case clickAction.LAUNCH: ++ this.launchNewWindow(); ++ break; ++ ++ case clickAction.PREVIEWS: ++ if (!Main.overview._shown) { ++ // If only one windows is present just switch to it, but only when trigggered with the ++ // simple click action (no modifiers, no middle click). ++ if (windows.length == 1 && !modifiers && button == 1) { ++ let w = windows[0]; ++ Main.activateWindow(w); ++ } else ++ this._windowPreviews(); ++ } ++ else { ++ this.app.activate(); ++ } ++ break; ++ ++ case clickAction.MINIMIZE_OR_PREVIEWS: ++ // When a single window is present, toggle minimization ++ // If only one windows is present toggle minimization, but only when trigggered with the ++ // simple click action (no modifiers, no middle click). ++ if (!Main.overview._shown){ ++ if (windows.length == 1 && !modifiers && button == 1) { ++ let w = windows[0]; ++ if (this.app == focusedApp) { ++ // Window is raised, minimize it ++ this._minimizeWindow(w); ++ } else { ++ // Window is minimized, raise it ++ Main.activateWindow(w); ++ } ++ } else { ++ // Launch previews when multiple windows are present ++ this._windowPreviews(); ++ } ++ } else { ++ this.app.activate(); ++ } ++ break; ++ ++ case clickAction.QUIT: ++ this.closeAllWindows(); ++ break; ++ ++ case clickAction.SKIP: ++ let w = windows[0]; ++ Main.activateWindow(w); ++ break; ++ } ++ } ++ else { ++ this.launchNewWindow(); ++ } ++ ++ // Hide overview except when action mode requires it ++ if(shouldHideOverview) { ++ Main.overview.hide(); ++ } ++ } ++ ++ shouldShowTooltip() { ++ return this.hover && (!this._menu || !this._menu.isOpen) && ++ (!this._previewMenu || !this._previewMenu.isOpen); ++ } ++ ++ _windowPreviews() { ++ if (!this._previewMenu) { ++ this._previewMenuManager = new PopupMenu.PopupMenuManager(this); ++ ++ this._previewMenu = new WindowPreview.WindowPreviewMenu(this); ++ ++ this._previewMenuManager.addMenu(this._previewMenu); ++ ++ this._previewMenu.connect('open-state-changed', (menu, isPoppedUp) => { ++ if (!isPoppedUp) ++ this._onMenuPoppedDown(); ++ }); ++ let id = Main.overview.connect('hiding', () => { ++ this._previewMenu.close(); ++ }); ++ this._previewMenu.actor.connect('destroy', function() { ++ Main.overview.disconnect(id); ++ }); ++ ++ } ++ ++ if (this._previewMenu.isOpen) ++ this._previewMenu.close(); ++ else ++ this._previewMenu.popup(); ++ ++ return false; ++ } ++ ++ // Try to do the right thing when attempting to launch a new window of an app. In ++ // particular, if the application doens't allow to launch a new window, activate ++ // the existing window instead. ++ launchNewWindow(p) { ++ let appInfo = this.app.get_app_info(); ++ let actions = appInfo.list_actions(); ++ if (this.app.can_open_new_window()) { ++ this.animateLaunch(); ++ // This is used as a workaround for a bug resulting in no new windows being opened ++ // for certain running applications when calling open_new_window(). ++ // ++ // https://bugzilla.gnome.org/show_bug.cgi?id=756844 ++ // ++ // Similar to what done when generating the popupMenu entries, if the application provides ++ // a "New Window" action, use it instead of directly requesting a new window with ++ // open_new_window(), which fails for certain application, notably Nautilus. ++ if (actions.indexOf('new-window') == -1) { ++ this.app.open_new_window(-1); ++ } ++ else { ++ let i = actions.indexOf('new-window'); ++ if (i !== -1) ++ this.app.launch_action(actions[i], global.get_current_time(), -1); ++ } ++ } ++ else { ++ // Try to manually activate the first window. Otherwise, when the app is activated by ++ // switching to a different workspace, a launch spinning icon is shown and disappers only ++ // after a timeout. ++ let windows = this.getWindows(); ++ if (windows.length > 0) ++ Main.activateWindow(windows[0]) ++ else ++ this.app.activate(); ++ } ++ } ++ ++ _numberOverlay() { ++ // Add label for a Hot-Key visual aid ++ this._numberOverlayLabel = new St.Label(); ++ this._numberOverlayBin = new St.Bin({ ++ child: this._numberOverlayLabel, ++ x_align: Clutter.ActorAlign.START, ++ y_align: Clutter.ActorAlign.START, ++ x_expand: true, y_expand: true ++ }); ++ this._numberOverlayLabel.add_style_class_name('number-overlay'); ++ this._numberOverlayOrder = -1; ++ this._numberOverlayBin.hide(); ++ ++ this._iconContainer.add_child(this._numberOverlayBin); ++ ++ } ++ ++ updateNumberOverlay() { ++ // We apply an overall scale factor that might come from a HiDPI monitor. ++ // Clutter dimensions are in physical pixels, but CSS measures are in logical ++ // pixels, so make sure to consider the scale. ++ let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; ++ // Set the font size to something smaller than the whole icon so it is ++ // still visible. The border radius is large to make the shape circular ++ let [minWidth, natWidth] = this._iconContainer.get_preferred_width(-1); ++ let font_size = Math.round(Math.max(12, 0.3*natWidth) / scaleFactor); ++ let size = Math.round(font_size*1.2); ++ this._numberOverlayLabel.set_style( ++ 'font-size: ' + font_size + 'px;' + ++ 'border-radius: ' + this.icon.iconSize + 'px;' + ++ 'width: ' + size + 'px; height: ' + size +'px;' ++ ); ++ } ++ ++ setNumberOverlay(number) { ++ this._numberOverlayOrder = number; ++ this._numberOverlayLabel.set_text(number.toString()); ++ } ++ ++ toggleNumberOverlay(activate) { ++ if (activate && this._numberOverlayOrder > -1) { ++ this.updateNumberOverlay(); ++ this._numberOverlayBin.show(); ++ } ++ else ++ this._numberOverlayBin.hide(); ++ } ++ ++ _minimizeWindow(param) { ++ // Param true make all app windows minimize ++ let windows = this.getInterestingWindows(); ++ let current_workspace = global.workspace_manager.get_active_workspace(); ++ for (let i = 0; i < windows.length; i++) { ++ let w = windows[i]; ++ if (w.get_workspace() == current_workspace && w.showing_on_its_workspace()) { ++ w.minimize(); ++ // Just minimize one window. By specification it should be the ++ // focused window on the current workspace. ++ if(!param) ++ break; ++ } ++ } ++ } ++ ++ // By default only non minimized windows are activated. ++ // This activates all windows in the current workspace. ++ _activateAllWindows() { ++ // First activate first window so workspace is switched if needed. ++ // We don't do this if isolation is on! ++ if (!Docking.DockManager.settings.get_boolean('isolate-workspaces') && ++ !Docking.DockManager.settings.get_boolean('isolate-monitors')) ++ this.app.activate(); ++ ++ // then activate all other app windows in the current workspace ++ let windows = this.getInterestingWindows(); ++ let activeWorkspace = global.workspace_manager.get_active_workspace_index(); ++ ++ if (windows.length <= 0) ++ return; ++ ++ let activatedWindows = 0; ++ ++ for (let i = windows.length - 1; i >= 0; i--) { ++ if (windows[i].get_workspace().index() == activeWorkspace) { ++ Main.activateWindow(windows[i]); ++ activatedWindows++; ++ } ++ } ++ } ++ ++ //This closes all windows of the app. ++ closeAllWindows() { ++ let windows = this.getInterestingWindows(); ++ for (let i = 0; i < windows.length; i++) ++ windows[i].delete(global.get_current_time()); ++ } ++ ++ _cycleThroughWindows(reversed) { ++ // Store for a little amount of time last clicked app and its windows ++ // since the order changes upon window interaction ++ let MEMORY_TIME=3000; ++ ++ let app_windows = this.getInterestingWindows(); ++ ++ if (app_windows.length <1) ++ return ++ ++ if (recentlyClickedAppLoopId > 0) ++ GLib.source_remove(recentlyClickedAppLoopId); ++ recentlyClickedAppLoopId = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, MEMORY_TIME, this._resetRecentlyClickedApp); ++ ++ // If there isn't already a list of windows for the current app, ++ // or the stored list is outdated, use the current windows list. ++ let monitorIsolation = Docking.DockManager.settings.get_boolean('isolate-monitors'); ++ if (!recentlyClickedApp || ++ recentlyClickedApp.get_id() != this.app.get_id() || ++ recentlyClickedAppWindows.length != app_windows.length || ++ (recentlyClickedAppMonitor != this.monitorIndex && monitorIsolation)) { ++ recentlyClickedApp = this.app; ++ recentlyClickedAppWindows = app_windows; ++ recentlyClickedAppMonitor = this.monitorIndex; ++ recentlyClickedAppIndex = 0; ++ } ++ ++ if (reversed) { ++ recentlyClickedAppIndex--; ++ if (recentlyClickedAppIndex < 0) recentlyClickedAppIndex = recentlyClickedAppWindows.length - 1; ++ } else { ++ recentlyClickedAppIndex++; ++ } ++ let index = recentlyClickedAppIndex % recentlyClickedAppWindows.length; ++ let window = recentlyClickedAppWindows[index]; ++ ++ Main.activateWindow(window); ++ } ++ ++ _resetRecentlyClickedApp() { ++ if (recentlyClickedAppLoopId > 0) ++ GLib.source_remove(recentlyClickedAppLoopId); ++ recentlyClickedAppLoopId=0; ++ recentlyClickedApp =null; ++ recentlyClickedAppWindows = null; ++ recentlyClickedAppIndex = 0; ++ recentlyClickedAppMonitor = -1; ++ ++ return false; ++ } ++ ++ getWindows() { ++ return getWindows(this.app, this._location); ++ } ++ ++ // Filter out unnecessary windows, for instance ++ // nautilus desktop window. ++ getInterestingWindows() { ++ return getInterestingWindows(this.app, this.monitorIndex, this._location); ++ } ++ ++ // Does the Icon represent a location rather than an App ++ isLocation() { ++ return this._location != null; ++ } ++}); ++/** ++ * Extend AppIconMenu ++ * ++ * - set popup arrow side based on dash orientation ++ * - Add close windows option based on quitfromdash extension ++ * (https://github.com/deuill/shell-extension-quitfromdash) ++ * - Add open windows thumbnails instead of list ++ * - update menu when application windows change ++ */ ++const MyAppIconMenu = class DashToDock_MyAppIconMenu extends AppDisplay.AppIconMenu { ++ ++ constructor(source, remoteModel) { ++ let side = Utils.getPosition(); ++ ++ // Damm it, there has to be a proper way of doing this... ++ // As I can't call the parent parent constructor (?) passing the side ++ // parameter, I overwite what I need later ++ super(source); ++ ++ // Change the initialized side where required. ++ this._arrowSide = side; ++ this._boxPointer._arrowSide = side; ++ this._boxPointer._userArrowSide = side; ++ ++ this._signalsHandler = new Utils.GlobalSignalsHandler(); ++ ++ if (remoteModel && DbusmenuUtils.haveDBusMenu()) { ++ const [onQuicklist, onDynamicSection] = Utils.splitHandler((sender, { quicklist }, dynamicSection) => { ++ dynamicSection.removeAll(); ++ if (quicklist) { ++ quicklist.get_children().forEach(remoteItem => ++ dynamicSection.addMenuItem(DbusmenuUtils.makePopupMenuItem(remoteItem, false))); ++ } ++ }); ++ ++ this._signalsHandler.add([ ++ remoteModel.lookupById(this._source.app.id), ++ 'quicklist-changed', ++ onQuicklist ++ ], [ ++ this, ++ 'dynamic-section-changed', ++ onDynamicSection ++ ]); ++ } ++ } ++ ++ destroy() { ++ this._signalsHandler.destroy(); ++ super.destroy(); ++ } ++ ++ _rebuildMenu() { ++ this.removeAll(); ++ ++ if (Docking.DockManager.settings.get_boolean('show-windows-preview')) { ++ // Display the app windows menu items and the separator between windows ++ // of the current desktop and other windows. ++ ++ this._allWindowsMenuItem = new PopupMenu.PopupSubMenuMenuItem(__('All Windows'), false); ++ this._allWindowsMenuItem.hide(); ++ this.addMenuItem(this._allWindowsMenuItem); ++ ++ if (!this._source.app.is_window_backed()) { ++ this._appendSeparator(); ++ ++ let appInfo = this._source.app.get_app_info(); ++ let actions = appInfo.list_actions(); ++ if (this._source.app.can_open_new_window() && ++ actions.indexOf('new-window') == -1) { ++ this._newWindowMenuItem = this._appendMenuItem(_('New Window')); ++ this._newWindowMenuItem.connect('activate', () => { ++ if (this._source.app.state == Shell.AppState.STOPPED) ++ this._source.animateLaunch(); ++ ++ this._source.app.open_new_window(-1); ++ this.emit('activate-window', null); ++ }); ++ this._appendSeparator(); ++ } ++ ++ ++ if (AppDisplay.discreteGpuAvailable && ++ this._source.app.state == Shell.AppState.STOPPED && ++ actions.indexOf('activate-discrete-gpu') == -1) { ++ this._onDiscreteGpuMenuItem = this._appendMenuItem(_('Launch using Dedicated Graphics Card')); ++ this._onDiscreteGpuMenuItem.connect('activate', () => { ++ if (this._source.app.state == Shell.AppState.STOPPED) ++ this._source.animateLaunch(); ++ ++ this._source.app.launch(0, -1, true); ++ this.emit('activate-window', null); ++ }); ++ } ++ ++ for (let i = 0; i < actions.length; i++) { ++ let action = actions[i]; ++ let item = this._appendMenuItem(appInfo.get_action_name(action)); ++ item.connect('activate', (emitter, event) => { ++ this._source.app.launch_action(action, event.get_time(), -1); ++ this.emit('activate-window', null); ++ }); ++ } ++ ++ let canFavorite = global.settings.is_writable('favorite-apps') && ++ !this._source.isLocation(); ++ ++ if (canFavorite) { ++ this._appendSeparator(); ++ ++ let isFavorite = AppFavorites.getAppFavorites().isFavorite(this._source.app.get_id()); ++ ++ if (isFavorite) { ++ let item = this._appendMenuItem(_('Remove from Favorites')); ++ item.connect('activate', () => { ++ let favs = AppFavorites.getAppFavorites(); ++ favs.removeFavorite(this._source.app.get_id()); ++ }); ++ } else { ++ let item = this._appendMenuItem(_('Add to Favorites')); ++ item.connect('activate', () => { ++ let favs = AppFavorites.getAppFavorites(); ++ favs.addFavorite(this._source.app.get_id()); ++ }); ++ } ++ } ++ ++ if (Shell.AppSystem.get_default().lookup_app('org.gnome.Software.desktop') && ++ !this._source.isLocation()) { ++ this._appendSeparator(); ++ let item = this._appendMenuItem(_('Show Details')); ++ item.connect('activate', () => { ++ let id = this._source.app.get_id(); ++ let args = GLib.Variant.new('(ss)', [id, '']); ++ Gio.DBus.get(Gio.BusType.SESSION, null, ++ function(o, res) { ++ let bus = Gio.DBus.get_finish(res); ++ bus.call('org.gnome.Software', ++ '/org/gnome/Software', ++ 'org.gtk.Actions', 'Activate', ++ GLib.Variant.new('(sava{sv})', ++ ['details', [args], null]), ++ null, 0, -1, null, null); ++ Main.overview.hide(); ++ }); ++ }); ++ } ++ } ++ ++ } else { ++ if (super._rebuildMenu) ++ super._rebuildMenu(); ++ else ++ super._redisplay(); ++ } ++ ++ // dynamic menu ++ const items = this._getMenuItems(); ++ let i = items.length; ++ if (Shell.AppSystem.get_default().lookup_app('org.gnome.Software.desktop')) { ++ i -= 2; ++ } ++ if (global.settings.is_writable('favorite-apps')) { ++ i -= 2; ++ } ++ if (i < 0) { ++ i = 0; ++ } ++ const dynamicSection = new PopupMenu.PopupMenuSection(); ++ this.addMenuItem(dynamicSection, i); ++ this.emit('dynamic-section-changed', dynamicSection); ++ ++ // quit menu ++ this._appendSeparator(); ++ this._quitfromDashMenuItem = this._appendMenuItem(_('Quit')); ++ this._quitfromDashMenuItem.connect('activate', () => { ++ this._source.closeAllWindows(); ++ }); ++ ++ this.update(); ++ } ++ ++ // update menu content when application windows change. This is desirable as actions ++ // acting on windows (closing) are performed while the menu is shown. ++ update() { ++ ++ let windows = this._source.getInterestingWindows(); ++ ++ // update, show or hide the quit menu ++ if ( windows.length > 0) { ++ let quitFromDashMenuText = ""; ++ if (windows.length == 1) ++ this._quitfromDashMenuItem.label.set_text(_('Quit')); ++ else ++ this._quitfromDashMenuItem.label.set_text(__('Quit %d Windows').format(windows.length)); ++ ++ this._quitfromDashMenuItem.actor.show(); ++ ++ } else { ++ this._quitfromDashMenuItem.actor.hide(); ++ } ++ ++ if(Docking.DockManager.settings.get_boolean('show-windows-preview')){ ++ ++ // update, show, or hide the allWindows menu ++ // Check if there are new windows not already displayed. In such case, repopulate the allWindows ++ // menu. Windows removal is already handled by each preview being connected to the destroy signal ++ let old_windows = this._allWindowsMenuItem.menu._getMenuItems().map(function(item){ ++ return item._window; ++ }); ++ ++ let new_windows = windows.filter(function(w) {return old_windows.indexOf(w) < 0;}); ++ if (new_windows.length > 0) { ++ this._populateAllWindowMenu(windows); ++ ++ // Try to set the width to that of the submenu. ++ // TODO: can't get the actual size, getting a bit less. ++ // Temporary workaround: add 15px to compensate ++ this._allWindowsMenuItem.width = this._allWindowsMenuItem.menu.actor.width + 15; ++ ++ } ++ ++ // The menu is created hidden and never hidded after being shown. Instead, a singlal ++ // connected to its items destroy will set is insensitive if no more windows preview are shown. ++ if (windows.length > 0){ ++ this._allWindowsMenuItem.show(); ++ this._allWindowsMenuItem.setSensitive(true); ++ } ++ } ++ ++ // Update separators ++ this._getMenuItems().forEach(item => { ++ if ('label' in item) { ++ this._updateSeparatorVisibility(item); ++ } ++ }); ++ } ++ ++ _populateAllWindowMenu(windows) { ++ ++ this._allWindowsMenuItem.menu.removeAll(); ++ ++ if (windows.length > 0) { ++ ++ let activeWorkspace = global.workspace_manager.get_active_workspace(); ++ let separatorShown = windows[0].get_workspace() != activeWorkspace; ++ ++ for (let i = 0; i < windows.length; i++) { ++ let window = windows[i]; ++ if (!separatorShown && window.get_workspace() != activeWorkspace) { ++ this._allWindowsMenuItem.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); ++ separatorShown = true; ++ } ++ ++ let item = new WindowPreview.WindowPreviewMenuItem(window); ++ this._allWindowsMenuItem.menu.addMenuItem(item); ++ item.connect('activate', () => { ++ this.emit('activate-window', window); ++ }); ++ ++ // This is to achieve a more gracefull transition when the last windows is closed. ++ item.connect('destroy', () => { ++ if(this._allWindowsMenuItem.menu._getMenuItems().length == 1) // It's still counting the item just going to be destroyed ++ this._allWindowsMenuItem.setSensitive(false); ++ }); ++ } ++ } ++ } ++}; ++Signals.addSignalMethods(MyAppIconMenu.prototype); ++ ++function getWindows(app, location) { ++ if (location != null && Docking.DockManager.getDefault().fm1Client) { ++ return Docking.DockManager.getDefault().fm1Client.getWindows(location); ++ } else { ++ return app.get_windows(); ++ } ++} ++ ++// Filter out unnecessary windows, for instance ++// nautilus desktop window. ++function getInterestingWindows(app, monitorIndex, location) { ++ let windows = getWindows(app, location).filter(function(w) { ++ return !w.skip_taskbar; ++ }); ++ ++ let settings = Docking.DockManager.settings; ++ ++ // When using workspace isolation, we filter out windows ++ // that are not in the current workspace ++ if (settings.get_boolean('isolate-workspaces')) ++ windows = windows.filter(function(w) { ++ return w.get_workspace().index() == global.workspace_manager.get_active_workspace_index(); ++ }); ++ ++ if (settings.get_boolean('isolate-monitors')) ++ windows = windows.filter(function(w) { ++ return w.get_monitor() == monitorIndex; ++ }); ++ ++ return windows; ++} ++ ++/** ++ * A ShowAppsIcon improved class. ++ * ++ * - set label position based on dash orientation (Note, I am reusing most machinery of the appIcon class) ++ * - implement a popupMenu based on the AppIcon code (Note, I am reusing most machinery of the appIcon class) ++ * ++ */ ++ ++var MyShowAppsIcon = GObject.registerClass({ ++ Signals: { ++ 'menu-state-changed': { param_types: [GObject.TYPE_BOOLEAN] }, ++ 'sync-tooltip': {} ++ } ++} ++, class DashToDock_MyShowAppsIcon extends Dash.ShowAppsIcon { ++ _init() { ++ super._init(); ++ ++ // Re-use appIcon methods ++ let appIconPrototype = AppDisplay.AppIcon.prototype; ++ this.toggleButton.y_expand = false; ++ this.toggleButton.connect('popup-menu', ++ appIconPrototype._onKeyboardPopupMenu.bind(this)); ++ this.toggleButton.connect('clicked', ++ this._removeMenuTimeout.bind(this)); ++ ++ this.reactive = true; ++ this.toggleButton.popupMenu = () => this.popupMenu.call(this); ++ this.toggleButton._removeMenuTimeout = () => this._removeMenuTimeout.call(this); ++ ++ this._menu = null; ++ this._menuManager = new PopupMenu.PopupMenuManager(this); ++ this._menuTimeoutId = 0; ++ } ++ ++ vfunc_leave_event(leaveEvent) ++ { ++ return AppDisplay.AppIcon.prototype.vfunc_leave_event.call( ++ this.toggleButton, leaveEvent); ++ } ++ ++ vfunc_button_press_event(buttonPressEvent) ++ { ++ return AppDisplay.AppIcon.prototype.vfunc_button_press_event.call( ++ this.toggleButton, buttonPressEvent); ++ } ++ ++ vfunc_touch_event(touchEvent) ++ { ++ return AppDisplay.AppIcon.prototype.vfunc_touch_event.call( ++ this.toggleButton, touchEvent); ++ } ++ ++ showLabel() { ++ itemShowLabel.call(this); ++ } ++ ++ _onMenuPoppedDown() { ++ AppDisplay.AppIcon.prototype._onMenuPoppedDown.apply(this, arguments); ++ } ++ ++ _setPopupTimeout() { ++ AppDisplay.AppIcon.prototype._onMenuPoppedDown.apply(this, arguments); ++ } ++ ++ _removeMenuTimeout() { ++ AppDisplay.AppIcon.prototype._removeMenuTimeout.apply(this, arguments); ++ } ++ ++ popupMenu() { ++ this._removeMenuTimeout(); ++ this.toggleButton.fake_release(); ++ ++ if (!this._menu) { ++ this._menu = new MyShowAppsIconMenu(this); ++ this._menu.connect('open-state-changed', (menu, isPoppedUp) => { ++ if (!isPoppedUp) ++ this._onMenuPoppedDown(); ++ }); ++ let id = Main.overview.connect('hiding', () => { ++ this._menu.close(); ++ }); ++ this._menu.actor.connect('destroy', function() { ++ Main.overview.disconnect(id); ++ }); ++ this._menuManager.addMenu(this._menu); ++ } ++ ++ this.emit('menu-state-changed', true); ++ ++ this.toggleButton.set_hover(true); ++ this._menu.popup(); ++ this._menuManager.ignoreRelease(); ++ this.emit('sync-tooltip'); ++ ++ return false; ++ } ++}); ++ ++ ++/** ++ * A menu for the showAppsIcon ++ */ ++var MyShowAppsIconMenu = class DashToDock_MyShowAppsIconMenu extends MyAppIconMenu { ++ _rebuildMenu() { ++ this.removeAll(); ++ ++ /* Translators: %s is "Settings", which is automatically translated. You ++ can also translate the full message if this fits better your language. */ ++ let name = __('Dash to Dock %s').format(_('Settings')) ++ let item = this._appendMenuItem(name); ++ ++ item.connect('activate', function () { ++ if (typeof ExtensionUtils.openPrefs === 'function') { ++ ExtensionUtils.openPrefs(); ++ } else { ++ Util.spawn(["gnome-shell-extension-prefs", Me.metadata.uuid]); ++ } ++ }); ++ } ++}; ++ ++/** ++ * This function is used for both extendShowAppsIcon and extendDashItemContainer ++ */ ++function itemShowLabel() { ++ // Check if the label is still present at all. When switching workpaces, the ++ // item might have been destroyed in between. ++ if (!this._labelText || this.label.get_stage() == null) ++ return; ++ ++ this.label.set_text(this._labelText); ++ this.label.opacity = 0; ++ this.label.show(); ++ ++ let [stageX, stageY] = this.get_transformed_position(); ++ let node = this.label.get_theme_node(); ++ ++ let itemWidth = this.allocation.x2 - this.allocation.x1; ++ let itemHeight = this.allocation.y2 - this.allocation.y1; ++ ++ let labelWidth = this.label.get_width(); ++ let labelHeight = this.label.get_height(); ++ ++ let x, y, xOffset, yOffset; ++ ++ let position = Utils.getPosition(); ++ this._isHorizontal = ((position == St.Side.TOP) || (position == St.Side.BOTTOM)); ++ let labelOffset = node.get_length('-x-offset'); ++ ++ switch (position) { ++ case St.Side.LEFT: ++ yOffset = Math.floor((itemHeight - labelHeight) / 2); ++ y = stageY + yOffset; ++ xOffset = labelOffset; ++ x = stageX + this.get_width() + xOffset; ++ break; ++ case St.Side.RIGHT: ++ yOffset = Math.floor((itemHeight - labelHeight) / 2); ++ y = stageY + yOffset; ++ xOffset = labelOffset; ++ x = Math.round(stageX) - labelWidth - xOffset; ++ break; ++ case St.Side.TOP: ++ y = stageY + labelOffset + itemHeight; ++ xOffset = Math.floor((itemWidth - labelWidth) / 2); ++ x = stageX + xOffset; ++ break; ++ case St.Side.BOTTOM: ++ yOffset = labelOffset; ++ y = stageY - labelHeight - yOffset; ++ xOffset = Math.floor((itemWidth - labelWidth) / 2); ++ x = stageX + xOffset; ++ break; ++ } ++ ++ // keep the label inside the screen border ++ // Only needed fot the x coordinate. ++ ++ // Leave a few pixel gap ++ let gap = 5; ++ let monitor = Main.layoutManager.findMonitorForActor(this); ++ if (x - monitor.x < gap) ++ x += monitor.x - x + labelOffset; ++ else if (x + labelWidth > monitor.x + monitor.width - gap) ++ x -= x + labelWidth - (monitor.x + monitor.width) + gap; ++ ++ this.label.remove_all_transitions(); ++ this.label.set_position(x, y); ++ this.label.ease({ ++ opacity: 255, ++ duration: Dash.DASH_ITEM_LABEL_SHOW_TIME, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD ++ }); ++} +diff --git a/extensions/dash-to-dock/dash.js b/extensions/dash-to-dock/dash.js +new file mode 100644 +index 00000000..bac49c25 +--- /dev/null ++++ b/extensions/dash-to-dock/dash.js +@@ -0,0 +1,1072 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Clutter = imports.gi.Clutter; ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const GObject = imports.gi.GObject; ++const Meta = imports.gi.Meta; ++const Shell = imports.gi.Shell; ++const St = imports.gi.St; ++ ++const AppDisplay = imports.ui.appDisplay; ++const AppFavorites = imports.ui.appFavorites; ++const Dash = imports.ui.dash; ++const DND = imports.ui.dnd; ++const IconGrid = imports.ui.iconGrid; ++const Main = imports.ui.main; ++const PopupMenu = imports.ui.popupMenu; ++const Util = imports.misc.util; ++const Workspace = imports.ui.workspace; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Docking = Me.imports.docking; ++const Utils = Me.imports.utils; ++const AppIcons = Me.imports.appIcons; ++const Locations = Me.imports.locations; ++ ++const DASH_ANIMATION_TIME = Dash.DASH_ANIMATION_TIME; ++const DASH_ITEM_LABEL_HIDE_TIME = Dash.DASH_ITEM_LABEL_HIDE_TIME; ++const DASH_ITEM_HOVER_TIMEOUT = Dash.DASH_ITEM_HOVER_TIMEOUT; ++ ++/** ++ * Extend DashItemContainer ++ * ++ * - set label position based on dash orientation ++ * ++ */ ++let MyDashItemContainer = GObject.registerClass( ++class DashToDock_MyDashItemContainer extends Dash.DashItemContainer { ++ ++ showLabel() { ++ return AppIcons.itemShowLabel.call(this); ++ } ++}); ++ ++const MyDashIconsVerticalLayout = GObject.registerClass( ++ class DashToDock_MyDashIconsVerticalLayout extends Clutter.BoxLayout { ++ _init() { ++ super._init({ ++ orientation: Clutter.Orientation.VERTICAL, ++ }); ++ } ++ ++ vfunc_get_preferred_height(container, forWidth) { ++ const [natHeight] = super.vfunc_get_preferred_height(container, forWidth); ++ return [natHeight, 0]; ++ } ++}); ++ ++ ++const baseIconSizes = [16, 22, 24, 32, 48, 64, 96, 128]; ++ ++/** ++ * This class is a fork of the upstream dash class (ui.dash.js) ++ * ++ * Summary of changes: ++ * - disconnect global signals adding a destroy method; ++ * - play animations even when not in overview mode ++ * - set a maximum icon size ++ * - show running and/or favorite applications ++ * - hide showApps label when the custom menu is shown. ++ * - add scrollview ++ * ensure actor is visible on keyfocus inseid the scrollview ++ * - add 128px icon size, might be usefull for hidpi display ++ * - sync minimization application target position. ++ * - keep running apps ordered. ++ */ ++var MyDash = GObject.registerClass({ ++ Signals: { ++ 'menu-closed': {}, ++ 'icon-size-changed': {}, ++ } ++}, class DashToDock_MyDash extends St.Widget { ++ ++ _init(remoteModel, monitorIndex) { ++ // Initialize icon variables and size ++ this._maxWidth = -1; ++ this._maxHeight = -1; ++ this.iconSize = Docking.DockManager.settings.get_int('dash-max-icon-size'); ++ this._availableIconSizes = baseIconSizes; ++ this._shownInitially = false; ++ this._initializeIconSize(this.iconSize); ++ ++ this._separator = null; ++ ++ this._remoteModel = remoteModel; ++ this._monitorIndex = monitorIndex; ++ this._position = Utils.getPosition(); ++ this._isHorizontal = ((this._position == St.Side.TOP) || ++ (this._position == St.Side.BOTTOM)); ++ this._signalsHandler = new Utils.GlobalSignalsHandler(); ++ ++ this._dragPlaceholder = null; ++ this._dragPlaceholderPos = -1; ++ this._animatingPlaceholdersCount = 0; ++ this._showLabelTimeoutId = 0; ++ this._resetHoverTimeoutId = 0; ++ this._labelShowing = false; ++ ++ super._init({ ++ name: 'dash', ++ offscreen_redirect: Clutter.OffscreenRedirect.ALWAYS, ++ layout_manager: new Clutter.BinLayout() ++ }); ++ ++ this._dashContainer = new St.BoxLayout({ ++ x_align: Clutter.ActorAlign.CENTER, ++ y_align: this._isHorizontal ? Clutter.ActorAlign.CENTER: Clutter.ActorAlign.START, ++ vertical: !this._isHorizontal, ++ y_expand: this._isHorizontal, ++ x_expand: !this._isHorizontal, ++ pack_start: Docking.DockManager.settings.get_boolean('show-apps-at-top') ++ }); ++ ++ this._scrollView = new St.ScrollView({ ++ name: 'dashtodockDashScrollview', ++ // TODO: Fix scrolling ++ hscrollbar_policy: this._isHorizontal ? St.PolicyType.EXTERNAL : St.PolicyType.NEVER, ++ vscrollbar_policy: this._isHorizontal ? St.PolicyType.NEVER : St.PolicyType.EXTERNAL, ++ x_expand: this._isHorizontal, ++ y_expand: !this._isHorizontal, ++ enable_mouse_scrolling: false ++ }); ++ ++ if (Docking.DockManager.settings.get_boolean('extend-height')) { ++ if (!this._isHorizontal) { ++ this._scrollView.y_align = Clutter.ActorAlign.START; ++ } else { ++ this._scrollView.x_align = Clutter.ActorAlign.START; ++ } ++ } ++ ++ this._scrollView.connect('scroll-event', this._onScrollEvent.bind(this)); ++ ++ let rtl = Clutter.get_default_text_direction() == Clutter.TextDirection.RTL; ++ this._box = new St.BoxLayout({ ++ vertical: !this._isHorizontal, ++ clip_to_allocation: false, ++ ...(!this._isHorizontal ? { layout_manager: new MyDashIconsVerticalLayout() } : {}), ++ x_align: rtl ? Clutter.ActorAlign.END : Clutter.ActorAlign.START, ++ y_align: this._isHorizontal ? Clutter.ActorAlign.CENTER: Clutter.ActorAlign.START, ++ y_expand: !this._isHorizontal, ++ x_expand: this._isHorizontal ++ }); ++ this._box._delegate = this; ++ this._dashContainer.add_actor(this._scrollView); ++ this._scrollView.add_actor(this._box); ++ ++ this._showAppsIcon = new AppIcons.MyShowAppsIcon(); ++ this._showAppsIcon.show(false); ++ this._showAppsIcon.icon.setIconSize(this.iconSize); ++ this._showAppsIcon.x_expand = false; ++ this._showAppsIcon.y_expand = false; ++ if (!this._isHorizontal) ++ this._showAppsIcon.y_align = Clutter.ActorAlign.START; ++ this._hookUpLabel(this._showAppsIcon); ++ this._showAppsIcon.connect('menu-state-changed', (_icon, opened) => { ++ this._itemMenuStateChanged(this._showAppsIcon, opened); ++ }); ++ ++ this._dashContainer.add_child(this._showAppsIcon); ++ ++ this._background = new St.Widget({ ++ style_class: 'dash-background', ++ y_expand: this._isHorizontal, ++ x_expand: !this._isHorizontal, ++ }); ++ ++ const sizerBox = new Clutter.Actor(); ++ sizerBox.add_constraint(new Clutter.BindConstraint({ ++ source: this._isHorizontal ? this._showAppsIcon.icon : this._dashContainer, ++ coordinate: Clutter.BindCoordinate.HEIGHT, ++ })); ++ sizerBox.add_constraint(new Clutter.BindConstraint({ ++ source: this._isHorizontal ? this._dashContainer : this._showAppsIcon.icon, ++ coordinate: Clutter.BindCoordinate.WIDTH, ++ })); ++ this._background.add_child(sizerBox); ++ ++ this.add_child(this._background); ++ this.add_child(this._dashContainer); ++ ++ this._workId = Main.initializeDeferredWork(this._box, this._redisplay.bind(this)); ++ ++ this._shellSettings = new Gio.Settings({ ++ schema_id: 'org.gnome.shell' ++ }); ++ ++ this._appSystem = Shell.AppSystem.get_default(); ++ ++ this.iconAnimator = new Docking.IconAnimator(this); ++ ++ this._signalsHandler.add([ ++ this._appSystem, ++ 'installed-changed', ++ () => { ++ AppFavorites.getAppFavorites().reload(); ++ this._queueRedisplay(); ++ } ++ ], [ ++ AppFavorites.getAppFavorites(), ++ 'changed', ++ this._queueRedisplay.bind(this) ++ ], [ ++ this._appSystem, ++ 'app-state-changed', ++ this._queueRedisplay.bind(this) ++ ], [ ++ Main.overview, ++ 'item-drag-begin', ++ this._onItemDragBegin.bind(this) ++ ], [ ++ Main.overview, ++ 'item-drag-end', ++ this._onItemDragEnd.bind(this) ++ ], [ ++ Main.overview, ++ 'item-drag-cancelled', ++ this._onItemDragCancelled.bind(this) ++ ], [ ++ Main.overview, ++ 'window-drag-begin', ++ this._onWindowDragBegin.bind(this) ++ ], [ ++ Main.overview, ++ 'window-drag-cancelled', ++ this._onWindowDragEnd.bind(this) ++ ], [ ++ Main.overview, ++ 'window-drag-end', ++ this._onWindowDragEnd.bind(this) ++ ]); ++ ++ this.connect('destroy', this._onDestroy.bind(this)); ++ } ++ ++ vfunc_get_preferred_height(forWidth) { ++ let [minHeight, natHeight] = super.vfunc_get_preferred_height.call(this, forWidth); ++ if (!this._isHorizontal && this._maxHeight !== -1 && natHeight > this._maxHeight) ++ return [minHeight, this._maxHeight] ++ else ++ return [minHeight, natHeight] ++ } ++ ++ vfunc_get_preferred_width(forHeight) { ++ let [minWidth, natWidth] = super.vfunc_get_preferred_width.call(this, forHeight); ++ if (this._isHorizontal && this._maxWidth !== -1 && natWidth > this._maxWidth) ++ return [minWidth, this._maxWidth] ++ else ++ return [minWidth, natWidth] ++ } ++ ++ get _container() { ++ return this._dashContainer; ++ } ++ ++ _onDestroy() { ++ this.iconAnimator.destroy(); ++ this._signalsHandler.destroy(); ++ } ++ ++ ++ _onItemDragBegin() { ++ return Dash.Dash.prototype._onItemDragBegin.call(this, ...arguments); ++ } ++ ++ _onItemDragCancelled() { ++ return Dash.Dash.prototype._onItemDragCancelled.call(this, ...arguments); ++ } ++ ++ _onItemDragEnd() { ++ return Dash.Dash.prototype._onItemDragEnd.call(this, ...arguments); ++ } ++ ++ _endItemDrag() { ++ return Dash.Dash.prototype._endItemDrag.call(this, ...arguments); ++ } ++ ++ _onItemDragMotion() { ++ return Dash.Dash.prototype._onItemDragMotion.call(this, ...arguments); ++ } ++ ++ _appIdListToHash() { ++ return Dash.Dash.prototype._appIdListToHash.call(this, ...arguments); ++ } ++ ++ _queueRedisplay() { ++ return Dash.Dash.prototype._queueRedisplay.call(this, ...arguments); ++ } ++ ++ _hookUpLabel() { ++ return Dash.Dash.prototype._hookUpLabel.call(this, ...arguments); ++ } ++ ++ _syncLabel() { ++ return Dash.Dash.prototype._syncLabel.call(this, ...arguments); ++ } ++ ++ _clearDragPlaceholder() { ++ return Dash.Dash.prototype._clearDragPlaceholder.call(this, ...arguments); ++ } ++ ++ _clearEmptyDropTarget() { ++ return Dash.Dash.prototype._clearEmptyDropTarget.call(this, ...arguments); ++ } ++ ++ handleDragOver(source, actor, x, y, time) { ++ let ret; ++ if (this._isHorizontal) { ++ ret = Dash.Dash.prototype.handleDragOver.call(this, source, actor, x, y, time); ++ ++ if (ret == DND.DragMotionResult.CONTINUE) ++ return ret; ++ } else { ++ Object.defineProperty(this._box, 'height', { ++ configurable: true, ++ get: () => this._box.get_children().reduce((a, c) => a + c.height, 0), ++ }); ++ ++ let replacedPlaceholderWidth = false; ++ if (this._dragPlaceholder) { ++ replacedPlaceholderWidth = true; ++ Object.defineProperty(this._dragPlaceholder, 'width', { ++ configurable: true, ++ get: () => this._dragPlaceholder.height, ++ }); ++ } ++ ++ ret = Dash.Dash.prototype.handleDragOver.call(this, source, actor, y, x, time); ++ ++ delete this._box.height; ++ if (replacedPlaceholderWidth && this._dragPlaceholder) ++ delete this._dragPlaceholder.width; ++ ++ if (ret == DND.DragMotionResult.CONTINUE) ++ return ret; ++ ++ if (this._dragPlaceholder) { ++ this._dragPlaceholder.child.set_width(this.iconSize / 2); ++ this._dragPlaceholder.child.set_height(this.iconSize); ++ ++ let pos = this._dragPlaceholderPos; ++ if (this._isHorizontal && (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)) ++ pos = this._box.get_children() - 1 - pos; ++ ++ if (pos != this._dragPlaceholderPos) { ++ this._dragPlaceholderPos = pos; ++ this._box.set_child_at_index(this._dragPlaceholder, ++ this._dragPlaceholderPos) ++ } ++ } ++ } ++ ++ if (this._dragPlaceholder) { ++ // Ensure the next and previous icon are visible when moving the placeholder ++ // (I assume there's room for both of them) ++ if (this._dragPlaceholderPos > 0) ++ ensureActorVisibleInScrollView(this._scrollView, ++ this._box.get_children()[this._dragPlaceholderPos - 1]); ++ ++ if (this._dragPlaceholderPos < this._box.get_children().length - 1) ++ ensureActorVisibleInScrollView(this._scrollView, ++ this._box.get_children()[this._dragPlaceholderPos + 1]); ++ } ++ ++ return ret; ++ } ++ ++ acceptDrop() { ++ return Dash.Dash.prototype.acceptDrop.call(this, ...arguments); ++ } ++ ++ _onWindowDragBegin() { ++ return Dash.Dash.prototype._onWindowDragBegin.call(this, ...arguments); ++ } ++ ++ _onWindowDragEnd() { ++ return Dash.Dash.prototype._onWindowDragEnd.call(this, ...arguments); ++ } ++ ++ _onScrollEvent(actor, event) { ++ // If scroll is not used because the icon is resized, let the scroll event propagate. ++ if (!Docking.DockManager.settings.get_boolean('icon-size-fixed')) ++ return Clutter.EVENT_PROPAGATE; ++ ++ // reset timeout to avid conflicts with the mousehover event ++ if (this._ensureAppIconVisibilityTimeoutId > 0) { ++ GLib.source_remove(this._ensureAppIconVisibilityTimeoutId); ++ this._ensureAppIconVisibilityTimeoutId = 0; ++ } ++ ++ // Skip to avoid double events mouse ++ // TODO: Horizontal events are emulated, potentially due to a conflict ++ // with the workspace switching gesture. ++ if (!this._isHorizontal && event.is_pointer_emulated()) { ++ return Clutter.EVENT_STOP; ++ } ++ ++ let adjustment, delta = 0; ++ ++ if (this._isHorizontal) ++ adjustment = this._scrollView.get_hscroll_bar().get_adjustment(); ++ else ++ adjustment = this._scrollView.get_vscroll_bar().get_adjustment(); ++ ++ let increment = adjustment.step_increment; ++ ++ if (this._isHorizontal) { ++ switch (event.get_scroll_direction()) { ++ case Clutter.ScrollDirection.LEFT: ++ delta = -increment; ++ break; ++ case Clutter.ScrollDirection.RIGHT: ++ delta = +increment; ++ break; ++ case Clutter.ScrollDirection.SMOOTH: ++ let [dx, dy] = event.get_scroll_delta(); ++ // TODO: Handle y ++ //delta = dy * increment; ++ // Also consider horizontal component, for instance touchpad ++ delta = dx * increment; ++ break; ++ } ++ } else { ++ switch (event.get_scroll_direction()) { ++ case Clutter.ScrollDirection.UP: ++ delta = -increment; ++ break; ++ case Clutter.ScrollDirection.DOWN: ++ delta = +increment; ++ break; ++ case Clutter.ScrollDirection.SMOOTH: ++ let [, dy] = event.get_scroll_delta(); ++ delta = dy * increment; ++ break; ++ } ++ } ++ ++ const value = adjustment.get_value(); ++ ++ // TODO: Remove this if possible. ++ if (Number.isNaN(value)) { ++ adjustment.set_value(delta); ++ } else { ++ adjustment.set_value(value + delta); ++ } ++ ++ return Clutter.EVENT_STOP; ++ } ++ ++ _createAppItem(app) { ++ let appIcon = new AppIcons.MyAppIcon(this._remoteModel, app, ++ this._monitorIndex, this.iconAnimator); ++ ++ if (appIcon._draggable) { ++ appIcon._draggable.connect('drag-begin', () => { ++ appIcon.opacity = 50; ++ }); ++ appIcon._draggable.connect('drag-end', () => { ++ appIcon.opacity = 255; ++ }); ++ } ++ ++ appIcon.connect('menu-state-changed', (appIcon, opened) => { ++ this._itemMenuStateChanged(item, opened); ++ }); ++ ++ let item = new MyDashItemContainer(); ++ item.setChild(appIcon); ++ ++ appIcon.connect('notify::hover', () => { ++ if (appIcon.hover) { ++ this._ensureAppIconVisibilityTimeoutId = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, 100, () => { ++ ensureActorVisibleInScrollView(this._scrollView, appIcon); ++ this._ensureAppIconVisibilityTimeoutId = 0; ++ return GLib.SOURCE_REMOVE; ++ }); ++ } ++ else { ++ if (this._ensureAppIconVisibilityTimeoutId > 0) { ++ GLib.source_remove(this._ensureAppIconVisibilityTimeoutId); ++ this._ensureAppIconVisibilityTimeoutId = 0; ++ } ++ } ++ }); ++ ++ appIcon.connect('clicked', (actor) => { ++ ensureActorVisibleInScrollView(this._scrollView, actor); ++ }); ++ ++ appIcon.connect('key-focus-in', (actor) => { ++ let [x_shift, y_shift] = ensureActorVisibleInScrollView(this._scrollView, actor); ++ ++ // This signal is triggered also by mouse click. The popup menu is opened at the original ++ // coordinates. Thus correct for the shift which is going to be applied to the scrollview. ++ if (appIcon._menu) { ++ appIcon._menu._boxPointer.xOffset = -x_shift; ++ appIcon._menu._boxPointer.yOffset = -y_shift; ++ } ++ }); ++ ++ // Override default AppIcon label_actor, now the ++ // accessible_name is set at DashItemContainer.setLabelText ++ appIcon.label_actor = null; ++ item.setLabelText(app.get_name()); ++ ++ appIcon.icon.setIconSize(this.iconSize); ++ this._hookUpLabel(item, appIcon); ++ ++ return item; ++ } ++ ++ /** ++ * Return an array with the "proper" appIcons currently in the dash ++ */ ++ getAppIcons() { ++ // Only consider children which are "proper" ++ // icons (i.e. ignoring drag placeholders) and which are not ++ // animating out (which means they will be destroyed at the end of ++ // the animation) ++ let iconChildren = this._box.get_children().filter(function(actor) { ++ return actor.child && ++ !!actor.child.icon && ++ !actor.animatingOut; ++ }); ++ ++ let appIcons = iconChildren.map(function(actor) { ++ return actor.child; ++ }); ++ ++ return appIcons; ++ } ++ ++ _updateAppsIconGeometry() { ++ let appIcons = this.getAppIcons(); ++ appIcons.forEach(function(icon) { ++ icon.updateIconGeometry(); ++ }); ++ } ++ ++ _itemMenuStateChanged(item, opened) { ++ Dash.Dash.prototype._itemMenuStateChanged.call(this, item, opened); ++ ++ if (!opened) { ++ // I want to listen from outside when a menu is closed. I used to ++ // add a custom signal to the appIcon, since gnome 3.8 the signal ++ // calling this callback was added upstream. ++ this.emit('menu-closed'); ++ } ++ } ++ ++ _adjustIconSize() { ++ // For the icon size, we only consider children which are "proper" ++ // icons (i.e. ignoring drag placeholders) and which are not ++ // animating out (which means they will be destroyed at the end of ++ // the animation) ++ let iconChildren = this._box.get_children().filter(actor => { ++ return actor.child && ++ actor.child._delegate && ++ actor.child._delegate.icon && ++ !actor.animatingOut; ++ }); ++ ++ iconChildren.push(this._showAppsIcon); ++ ++ if (this._maxWidth === -1 && this._maxHeight === -1) ++ return; ++ ++ // Check if the container is present in the stage. This avoids critical ++ // errors when unlocking the screen ++ if (!this._container.get_stage()) ++ return; ++ ++ const themeNode = this.get_theme_node(); ++ const maxAllocation = new Clutter.ActorBox({ ++ x1: 0, ++ y1: 0, ++ x2: this._isHorizontal ? this._maxWidth : 42 /* whatever */, ++ y2: this._isHorizontal ? 42 : this._maxHeight ++ }); ++ let maxContent = themeNode.get_content_box(maxAllocation); ++ let availWidth; ++ if (this._isHorizontal) ++ availWidth = maxContent.x2 - maxContent.x1; ++ else ++ availWidth = maxContent.y2 - maxContent.y1; ++ let spacing = themeNode.get_length('spacing'); ++ ++ let firstButton = iconChildren[0].child; ++ let firstIcon = firstButton._delegate.icon; ++ ++ // Enforce valid spacings during the size request ++ firstIcon.icon.ensure_style(); ++ const [, , iconWidth, iconHeight] = firstIcon.icon.get_preferred_size(); ++ const [, , buttonWidth, buttonHeight] = firstButton.get_preferred_size(); ++ ++ // Subtract icon padding and box spacing from the available height ++ if (this._isHorizontal) ++ // Subtract icon padding and box spacing from the available width ++ availWidth -= iconChildren.length * (buttonWidth - iconWidth) + ++ (iconChildren.length - 1) * spacing; ++ else ++ availWidth -= iconChildren.length * (buttonHeight - iconHeight) + ++ (iconChildren.length - 1) * spacing; ++ ++ // let availHeight = this._maxHeight; ++ // availHeight -= this._background.get_theme_node().get_vertical_padding(); ++ // availHeight -= themeNode.get_vertical_padding(); ++ // availHeight -= buttonHeight - iconHeight; ++ ++ const maxIconSize = // TODO: Math.min( ++ availWidth / iconChildren.length // ); , availHeight); ++ let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; ++ let iconSizes = this._availableIconSizes.map(s => s * scaleFactor); ++ ++ let newIconSize = this._availableIconSizes[0]; ++ for (let i = 0; i < iconSizes.length; i++) { ++ if (iconSizes[i] <= maxIconSize) ++ newIconSize = this._availableIconSizes[i]; ++ } ++ ++ if (newIconSize == this.iconSize) ++ return; ++ ++ let oldIconSize = this.iconSize; ++ this.iconSize = newIconSize; ++ this.emit('icon-size-changed'); ++ ++ let scale = oldIconSize / newIconSize; ++ for (let i = 0; i < iconChildren.length; i++) { ++ let icon = iconChildren[i].child._delegate.icon; ++ ++ // Set the new size immediately, to keep the icons' sizes ++ // in sync with this.iconSize ++ icon.setIconSize(this.iconSize); ++ ++ // Don't animate the icon size change when the overview ++ // is transitioning, not visible or when initially filling ++ // the dash ++ if (!Main.overview.visible || Main.overview.animationInProgress || ++ !this._shownInitially) ++ continue; ++ ++ let [targetWidth, targetHeight] = icon.icon.get_size(); ++ ++ // Scale the icon's texture to the previous size and ++ // tween to the new size ++ icon.icon.set_size(icon.icon.width * scale, ++ icon.icon.height * scale); ++ ++ icon.icon.ease({ ++ width: targetWidth, ++ height: targetHeight, ++ duration: DASH_ANIMATION_TIME, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ }); ++ } ++ ++ if (this._separator) { ++ if (this._isHorizontal) { ++ this._separator.ease({ ++ height: this.iconSize, ++ duration: DASH_ANIMATION_TIME, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ }); ++ } else { ++ this._separator.ease({ ++ width: this.iconSize, ++ duration: DASH_ANIMATION_TIME, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ }); ++ } ++ } ++ } ++ ++ _redisplay() { ++ let favorites = AppFavorites.getAppFavorites().getFavoriteMap(); ++ ++ let running = this._appSystem.get_running(); ++ let settings = Docking.DockManager.settings; ++ ++ if (settings.get_boolean('isolate-workspaces') || ++ settings.get_boolean('isolate-monitors')) { ++ // When using isolation, we filter out apps that have no windows in ++ // the current workspace ++ let monitorIndex = this._monitorIndex; ++ running = running.filter(function(_app) { ++ return AppIcons.getInterestingWindows(_app, monitorIndex).length != 0; ++ }); ++ } ++ ++ let children = this._box.get_children().filter(actor => { ++ return actor.child && ++ actor.child._delegate && ++ actor.child._delegate.app; ++ }); ++ // Apps currently in the dash ++ let oldApps = children.map(actor => actor.child._delegate.app); ++ // Apps supposed to be in the dash ++ let newApps = []; ++ ++ if (settings.get_boolean('show-favorites')) { ++ for (let id in favorites) ++ newApps.push(favorites[id]); ++ } ++ ++ if (settings.get_boolean('show-running')) { ++ for (let i = 0; i < running.length; i++) { ++ let app = running[i]; ++ if (settings.get_boolean('show-favorites') && app.get_id() in favorites) ++ continue; ++ newApps.push(app); ++ } ++ } ++ ++ if (settings.get_boolean('show-mounts')) { ++ if (!this._removables) { ++ this._removables = new Locations.Removables(); ++ this._signalsHandler.addWithLabel('show-mounts', ++ [ this._removables, ++ 'changed', ++ this._queueRedisplay.bind(this) ]); ++ } ++ Array.prototype.push.apply(newApps, this._removables.getApps()); ++ } else if (this._removables) { ++ this._signalsHandler.removeWithLabel('show-mounts'); ++ this._removables.destroy(); ++ this._removables = null; ++ } ++ ++ if (settings.get_boolean('show-trash')) { ++ if (!this._trash) { ++ this._trash = new Locations.Trash(); ++ this._signalsHandler.addWithLabel('show-trash', ++ [ this._trash, ++ 'changed', ++ this._queueRedisplay.bind(this) ]); ++ } ++ newApps.push(this._trash.getApp()); ++ } else if (this._trash) { ++ this._signalsHandler.removeWithLabel('show-trash'); ++ this._trash.destroy(); ++ this._trash = null; ++ } ++ ++ // Figure out the actual changes to the list of items; we iterate ++ // over both the list of items currently in the dash and the list ++ // of items expected there, and collect additions and removals. ++ // Moves are both an addition and a removal, where the order of ++ // the operations depends on whether we encounter the position ++ // where the item has been added first or the one from where it ++ // was removed. ++ // There is an assumption that only one item is moved at a given ++ // time; when moving several items at once, everything will still ++ // end up at the right position, but there might be additional ++ // additions/removals (e.g. it might remove all the launchers ++ // and add them back in the new order even if a smaller set of ++ // additions and removals is possible). ++ // If above assumptions turns out to be a problem, we might need ++ // to use a more sophisticated algorithm, e.g. Longest Common ++ // Subsequence as used by diff. ++ ++ let addedItems = []; ++ let removedActors = []; ++ ++ let newIndex = 0; ++ let oldIndex = 0; ++ while (newIndex < newApps.length || oldIndex < oldApps.length) { ++ let oldApp = oldApps.length > oldIndex ? oldApps[oldIndex] : null; ++ let newApp = newApps.length > newIndex ? newApps[newIndex] : null; ++ ++ // No change at oldIndex/newIndex ++ if (oldApp == newApp) { ++ oldIndex++; ++ newIndex++; ++ continue; ++ } ++ ++ // App removed at oldIndex ++ if (oldApp && !newApps.includes(oldApp)) { ++ removedActors.push(children[oldIndex]); ++ oldIndex++; ++ continue; ++ } ++ ++ // App added at newIndex ++ if (newApp && !oldApps.includes(newApp)) { ++ addedItems.push({ app: newApp, ++ item: this._createAppItem(newApp), ++ pos: newIndex }); ++ newIndex++; ++ continue; ++ } ++ ++ // App moved ++ let nextApp = newApps.length > newIndex + 1 ++ ? newApps[newIndex + 1] : null; ++ let insertHere = nextApp && nextApp == oldApp; ++ let alreadyRemoved = removedActors.reduce((result, actor) => { ++ let removedApp = actor.child._delegate.app; ++ return result || removedApp == newApp; ++ }, false); ++ ++ if (insertHere || alreadyRemoved) { ++ let newItem = this._createAppItem(newApp); ++ addedItems.push({ app: newApp, ++ item: newItem, ++ pos: newIndex + removedActors.length }); ++ newIndex++; ++ } else { ++ removedActors.push(children[oldIndex]); ++ oldIndex++; ++ } ++ } ++ ++ for (let i = 0; i < addedItems.length; i++) { ++ this._box.insert_child_at_index(addedItems[i].item, ++ addedItems[i].pos); ++ } ++ ++ for (let i = 0; i < removedActors.length; i++) { ++ let item = removedActors[i]; ++ ++ // Don't animate item removal when the overview is transitioning ++ // or hidden ++ if (!Main.overview.animationInProgress) ++ item.animateOutAndDestroy(); ++ else ++ item.destroy(); ++ } ++ ++ this._adjustIconSize(); ++ ++ // Skip animations on first run when adding the initial set ++ // of items, to avoid all items zooming in at once ++ ++ let animate = this._shownInitially && ++ !Main.overview.animationInProgress; ++ ++ if (!this._shownInitially) ++ this._shownInitially = true; ++ ++ for (let i = 0; i < addedItems.length; i++) ++ addedItems[i].item.show(animate); ++ ++ // Update separator ++ const nFavorites = Object.keys(favorites).length; ++ const nIcons = children.length + addedItems.length - removedActors.length; ++ if (nFavorites > 0 && nFavorites < nIcons) { ++ if (!this._separator) { ++ if (!this._isHorizontal) { ++ this._separator = new St.Widget({ ++ style_class: 'vertical-dash-separator', ++ x_align: Clutter.ActorAlign.CENTER, ++ width: this.iconSize, ++ }); ++ } else { ++ this._separator = new St.Widget({ ++ style_class: 'dash-separator', ++ y_align: Clutter.ActorAlign.CENTER, ++ height: this.iconSize, ++ }); ++ } ++ ++ this._box.add_child(this._separator); ++ } ++ let pos = nFavorites; ++ if (this._dragPlaceholder) ++ pos++; ++ this._box.set_child_at_index(this._separator, pos); ++ } else if (this._separator) { ++ this._separator.destroy(); ++ this._separator = null; ++ } ++ ++ // Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=692744 ++ // Without it, StBoxLayout may use a stale size cache ++ this._box.queue_relayout(); ++ // TODO ++ // This is required for icon reordering when the scrollview is used. ++ this._updateAppsIconGeometry(); ++ ++ // This will update the size, and the corresponding number for each icon ++ this._updateNumberOverlay(); ++ } ++ ++ _updateNumberOverlay() { ++ let appIcons = this.getAppIcons(); ++ let counter = 1; ++ appIcons.forEach(function(icon) { ++ if (counter < 10){ ++ icon.setNumberOverlay(counter); ++ counter++; ++ } else if (counter == 10) { ++ icon.setNumberOverlay(0); ++ counter++; ++ } else { ++ // No overlay after 10 ++ icon.setNumberOverlay(-1); ++ } ++ icon.updateNumberOverlay(); ++ }); ++ ++ } ++ ++ toggleNumberOverlay(activate) { ++ let appIcons = this.getAppIcons(); ++ appIcons.forEach(function(icon) { ++ icon.toggleNumberOverlay(activate); ++ }); ++ } ++ ++ _initializeIconSize(max_size) { ++ let max_allowed = baseIconSizes[baseIconSizes.length-1]; ++ max_size = Math.min(max_size, max_allowed); ++ ++ if (Docking.DockManager.settings.get_boolean('icon-size-fixed')) ++ this._availableIconSizes = [max_size]; ++ else { ++ this._availableIconSizes = baseIconSizes.filter(function(val) { ++ return (val vvalue + vpageSize - voffset) ++ vvalue = Math.min(vupper -vpageSize, y2 + voffset - vpageSize); ++ ++ if (x1 < hvalue + hoffset) ++ hvalue = Math.max(0, x1 - hoffset); ++ else if (hvalue < hupper - hpageSize && x2 > hvalue + hpageSize - hoffset) ++ hvalue = Math.min(hupper - hpageSize, x2 + hoffset - hpageSize); ++ ++ if (vvalue !== vvalue0) { ++ vadjustment.ease(vvalue, { ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ duration: Util.SCROLL_TIME ++ }); ++ } ++ ++ if (hvalue !== hvalue0) { ++ hadjustment.ease(hvalue, { ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ duration: Util.SCROLL_TIME ++ }); ++ } ++ ++ return [hvalue- hvalue0, vvalue - vvalue0]; ++} +diff --git a/extensions/dash-to-dock/dbusmenuUtils.js b/extensions/dash-to-dock/dbusmenuUtils.js +new file mode 100644 +index 00000000..0d2793d0 +--- /dev/null ++++ b/extensions/dash-to-dock/dbusmenuUtils.js +@@ -0,0 +1,274 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Atk = imports.gi.Atk; ++const Clutter = imports.gi.Clutter; ++let Dbusmenu = null; /* Dynamically imported */ ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const St = imports.gi.St; ++ ++const PopupMenu = imports.ui.popupMenu; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Utils = Me.imports.utils; ++ ++// Dbusmenu features not (yet) supported: ++// ++// * The CHILD_DISPLAY property ++// ++// This seems to have only one possible value in the Dbusmenu API, so ++// there's little point in depending on it--the code in libdbusmenu sets it ++// if and only if an item has children, so for our purposes it's simpler ++// and more intuitive to just check children.length. (This does ignore the ++// possibility of a program not using libdbusmenu and setting CHILD_DISPLAY ++// independently, perhaps to indicate that an childless menu item should ++// nevertheless be displayed like a submenu.) ++// ++// * Children more than two levels deep ++// ++// PopupMenu doesn't seem to support submenus in submenus. ++// ++// * Shortcut keys ++// ++// If these keys are supposed to be installed as global shortcuts, we'd ++// have to query these aggressively and not wait for the DBus menu to be ++// mapped to a popup menu. A shortcut key that only works once the popup ++// menu is open and has key focus is possibly of marginal value. ++ ++function haveDBusMenu() { ++ if (Dbusmenu) ++ return Dbusmenu; ++ ++ try { ++ Dbusmenu = imports.gi.Dbusmenu; ++ return Dbusmenu; ++ } catch (e) { ++ log(`Failed to import DBusMenu, quicklists are not avaialble: ${e}`); ++ return null; ++ } ++} ++ ++ ++function makePopupMenuItem(dbusmenuItem, deep) { ++ // These are the only properties guaranteed to be available when the root ++ // item is first announced. Other properties might be loaded already, but ++ // be sure to connect to Dbusmenu.MENUITEM_SIGNAL_PROPERTY_CHANGED to get ++ // the most up-to-date values in case they aren't. ++ const itemType = dbusmenuItem.property_get(Dbusmenu.MENUITEM_PROP_TYPE); ++ const label = dbusmenuItem.property_get(Dbusmenu.MENUITEM_PROP_LABEL); ++ const visible = dbusmenuItem.property_get_bool(Dbusmenu.MENUITEM_PROP_VISIBLE); ++ const enabled = dbusmenuItem.property_get_bool(Dbusmenu.MENUITEM_PROP_ENABLED); ++ const accessibleDesc = dbusmenuItem.property_get(Dbusmenu.MENUITEM_PROP_ACCESSIBLE_DESC); ++ //const childDisplay = dbusmenuItem.property_get(Dbusmenu.MENUITEM_PROP_CHILD_DISPLAY); ++ ++ let item; ++ const signalsHandler = new Utils.GlobalSignalsHandler(); ++ const wantIcon = itemType === Dbusmenu.CLIENT_TYPES_IMAGE; ++ ++ // If the basic type of the menu item needs to change, call this. ++ const recreateItem = () => { ++ const newItem = makePopupMenuItem(dbusmenuItem, deep); ++ const parentMenu = item._parent; ++ parentMenu.addMenuItem(newItem); ++ // Reminder: Clutter thinks of later entries in the child list as ++ // "above" earlier ones, so "above" here means "below" in terms of the ++ // menu's vertical order. ++ parentMenu.actor.set_child_above_sibling(newItem.actor, item.actor); ++ if (newItem.menu) { ++ parentMenu.actor.set_child_above_sibling(newItem.menu.actor, newItem.actor); ++ } ++ parentMenu.actor.remove_child(item.actor); ++ item.destroy(); ++ item = null; ++ }; ++ ++ const updateDisposition = () => { ++ const disposition = dbusmenuItem.property_get(Dbusmenu.MENUITEM_PROP_DISPOSITION); ++ let icon_name = null; ++ switch (disposition) { ++ case Dbusmenu.MENUITEM_DISPOSITION_ALERT: ++ case Dbusmenu.MENUITEM_DISPOSITION_WARNING: ++ icon_name = 'dialog-warning-symbolic'; ++ break; ++ case Dbusmenu.MENUITEM_DISPOSITION_INFORMATIVE: ++ icon_name = 'dialog-information-symbolic'; ++ break; ++ } ++ if (icon_name) { ++ item._dispositionIcon = new St.Icon({ ++ icon_name, ++ style_class: 'popup-menu-icon', ++ y_align: Clutter.ActorAlign.CENTER, ++ y_expand: true, ++ }); ++ let expander; ++ for (let child = item.label.get_next_sibling();; child = child.get_next_sibling()) { ++ if (!child) { ++ expander = new St.Bin({ ++ style_class: 'popup-menu-item-expander', ++ x_expand: true, ++ }); ++ item.actor.add_child(expander); ++ break; ++ } else if (child instanceof St.Widget && child.has_style_class_name('popup-menu-item-expander')) { ++ expander = child; ++ break; ++ } ++ } ++ item.actor.insert_child_above(item._dispositionIcon, expander); ++ } else if (item._dispositionIcon) { ++ item.actor.remove_child(item._dispositionIcon); ++ item._dispositionIcon = null; ++ } ++ }; ++ ++ const updateIcon = () => { ++ if (!wantIcon) { ++ return; ++ } ++ const iconData = dbusmenuItem.property_get_byte_array(Dbusmenu.MENUITEM_PROP_ICON_DATA); ++ const iconName = dbusmenuItem.property_get(Dbusmenu.MENUITEM_PROP_ICON_NAME); ++ if (iconName) { ++ item.icon.icon_name = iconName; ++ } else if (iconData.length) { ++ item.icon.gicon = Gio.BytesIcon.new(iconData); ++ } ++ }; ++ ++ const updateOrnament = () => { ++ const toggleType = dbusmenuItem.property_get(Dbusmenu.MENUITEM_PROP_TOGGLE_TYPE); ++ switch (toggleType) { ++ case Dbusmenu.MENUITEM_TOGGLE_CHECK: ++ item.actor.accessible_role = Atk.Role.CHECK_MENU_ITEM; ++ break; ++ case Dbusmenu.MENUITEM_TOGGLE_RADIO: ++ item.actor.accessible_role = Atk.Role.RADIO_MENU_ITEM; ++ break; ++ default: ++ item.actor.accessible_role = Atk.Role.MENU_ITEM; ++ } ++ let ornament = PopupMenu.Ornament.NONE; ++ const state = dbusmenuItem.property_get_int(Dbusmenu.MENUITEM_PROP_TOGGLE_STATE); ++ if (state === Dbusmenu.MENUITEM_TOGGLE_STATE_UNKNOWN) { ++ // PopupMenu doesn't natively support an "unknown" ornament, but we ++ // can hack one in: ++ item.setOrnament(ornament); ++ item.actor.add_accessible_state(Atk.StateType.INDETERMINATE); ++ item._ornamentLabel.text = '\u2501'; ++ item.actor.remove_style_pseudo_class('checked'); ++ } else { ++ item.actor.remove_accessible_state(Atk.StateType.INDETERMINATE); ++ if (state === Dbusmenu.MENUITEM_TOGGLE_STATE_CHECKED) { ++ if (toggleType === Dbusmenu.MENUITEM_TOGGLE_CHECK) { ++ ornament = PopupMenu.Ornament.CHECK; ++ } else if (toggleType === Dbusmenu.MENUITEM_TOGGLE_RADIO) { ++ ornament = PopupMenu.Ornament.DOT; ++ } ++ item.actor.add_style_pseudo_class('checked'); ++ } else { ++ item.actor.remove_style_pseudo_class('checked'); ++ } ++ item.setOrnament(ornament); ++ } ++ }; ++ ++ const onPropertyChanged = (dbusmenuItem, name, value) => { ++ // `value` is null when a property is cleared, so handle those cases ++ // with sensible defaults. ++ switch (name) { ++ case Dbusmenu.MENUITEM_PROP_TYPE: ++ recreateItem(); ++ break; ++ case Dbusmenu.MENUITEM_PROP_ENABLED: ++ item.setSensitive(value ? value.unpack() : false); ++ break; ++ case Dbusmenu.MENUITEM_PROP_LABEL: ++ item.label.text = value ? value.unpack() : ''; ++ break; ++ case Dbusmenu.MENUITEM_PROP_VISIBLE: ++ item.actor.visible = value ? value.unpack() : false; ++ break; ++ case Dbusmenu.MENUITEM_PROP_DISPOSITION: ++ updateDisposition(); ++ break; ++ case Dbusmenu.MENUITEM_PROP_ACCESSIBLE_DESC: ++ item.actor.get_accessible().accessible_description = value && value.unpack() || ''; ++ break; ++ case Dbusmenu.MENUITEM_PROP_ICON_DATA: ++ case Dbusmenu.MENUITEM_PROP_ICON_NAME: ++ updateIcon(); ++ break; ++ case Dbusmenu.MENUITEM_PROP_TOGGLE_TYPE: ++ case Dbusmenu.MENUITEM_PROP_TOGGLE_STATE: ++ updateOrnament(); ++ break; ++ } ++ }; ++ ++ ++ // Start actually building the menu item. ++ const children = dbusmenuItem.get_children(); ++ if (children.length && !deep) { ++ // Make a submenu. ++ item = new PopupMenu.PopupSubMenuMenuItem(label, wantIcon); ++ const updateChildren = () => { ++ const children = dbusmenuItem.get_children(); ++ if (!children.length) { ++ return recreateItem(); ++ } ++ item.menu.removeAll(); ++ children.forEach(remoteChild => ++ item.menu.addMenuItem(makePopupMenuItem(remoteChild, true))); ++ }; ++ updateChildren(); ++ signalsHandler.add( ++ [dbusmenuItem, Dbusmenu.MENUITEM_SIGNAL_CHILD_ADDED, updateChildren], ++ [dbusmenuItem, Dbusmenu.MENUITEM_SIGNAL_CHILD_MOVED, updateChildren], ++ [dbusmenuItem, Dbusmenu.MENUITEM_SIGNAL_CHILD_REMOVED, updateChildren]); ++ ++ } else { ++ // Don't make a submenu. ++ if (!deep) { ++ // We only have the potential to get a submenu if we aren't deep. ++ signalsHandler.add( ++ [dbusmenuItem, Dbusmenu.MENUITEM_SIGNAL_CHILD_ADDED, recreateItem], ++ [dbusmenuItem, Dbusmenu.MENUITEM_SIGNAL_CHILD_MOVED, recreateItem], ++ [dbusmenuItem, Dbusmenu.MENUITEM_SIGNAL_CHILD_REMOVED, recreateItem]); ++ } ++ ++ if (itemType === Dbusmenu.CLIENT_TYPES_SEPARATOR) { ++ item = new PopupMenu.PopupSeparatorMenuItem(); ++ } else if (wantIcon) { ++ item = new PopupMenu.PopupImageMenuItem(label, null); ++ item.icon = item._icon; ++ } else { ++ item = new PopupMenu.PopupMenuItem(label); ++ } ++ } ++ ++ // Set common initial properties. ++ item.actor.visible = visible; ++ item.setSensitive(enabled); ++ if (accessibleDesc) { ++ item.actor.get_accessible().accessible_description = accessibleDesc; ++ } ++ updateDisposition(); ++ updateIcon(); ++ updateOrnament(); ++ ++ // Prevent an initial resize flicker. ++ if (wantIcon) { ++ item.icon.icon_size = 16; ++ } ++ ++ signalsHandler.add([dbusmenuItem, Dbusmenu.MENUITEM_SIGNAL_PROPERTY_CHANGED, onPropertyChanged]); ++ ++ // Connections on item will be lost when item is disposed; there's no need ++ // to add them to signalsHandler. ++ item.connect('activate', () => { ++ dbusmenuItem.handle_event(Dbusmenu.MENUITEM_EVENT_ACTIVATED, new GLib.Variant('i', 0), Math.floor(Date.now()/1000)); ++ }); ++ item.connect('destroy', () => signalsHandler.destroy()); ++ ++ return item; ++} +diff --git a/extensions/dash-to-dock/docking.js b/extensions/dash-to-dock/docking.js +new file mode 100644 +index 00000000..daa9de59 +--- /dev/null ++++ b/extensions/dash-to-dock/docking.js +@@ -0,0 +1,1967 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Clutter = imports.gi.Clutter; ++const GLib = imports.gi.GLib; ++const GObject = imports.gi.GObject; ++const Meta = imports.gi.Meta; ++const Shell = imports.gi.Shell; ++const St = imports.gi.St; ++const Params = imports.misc.params; ++ ++const Main = imports.ui.main; ++const Dash = imports.ui.dash; ++const IconGrid = imports.ui.iconGrid; ++const Overview = imports.ui.overview; ++const OverviewControls = imports.ui.overviewControls; ++const PointerWatcher = imports.ui.pointerWatcher; ++const Signals = imports.signals; ++const SearchController = imports.ui.searchController; ++const WorkspaceSwitcherPopup= imports.ui.workspaceSwitcherPopup; ++const Layout = imports.ui.layout; ++const LayoutManager = imports.ui.main.layoutManager; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const Utils = Me.imports.utils; ++const Intellihide = Me.imports.intellihide; ++const Theming = Me.imports.theming; ++const MyDash = Me.imports.dash; ++const LauncherAPI = Me.imports.launcherAPI; ++const FileManager1API = Me.imports.fileManager1API; ++ ++const DOCK_DWELL_CHECK_INTERVAL = 100; ++ ++var State = { ++ HIDDEN: 0, ++ SHOWING: 1, ++ SHOWN: 2, ++ HIDING: 3 ++}; ++ ++const scrollAction = { ++ DO_NOTHING: 0, ++ CYCLE_WINDOWS: 1, ++ SWITCH_WORKSPACE: 2 ++}; ++ ++/** ++ * Ported from GNOME Shell 3.38 ++ * ++ * In GNOME Shell 40+ the dash is always visible, ++ * we need to re-include a spacer because our dash ++ * is not always visible. ++ */ ++var DashSpacer = GObject.registerClass( ++ class DashSpacer extends Clutter.Actor { ++ _init(source) { ++ super._init(); ++ ++ this._bindConstraint = new Clutter.BindConstraint({ ++ source, ++ coordinate: Clutter.BindCoordinate.SIZE, ++ }); ++ this.add_constraint(this._bindConstraint); ++ } ++ ++ setMaxSize(size) { ++ // Handles overview controls trying to set the dash' max size. ++ } ++ ++ vfunc_get_preferred_width(forHeight) { ++ if (this._bindConstraint) ++ return this._bindConstraint.source.get_preferred_width(forHeight); ++ return super.vfunc_get_preferred_width(forHeight); ++ } ++ ++ vfunc_get_preferred_height(forWidth) { ++ if (this._bindConstraint) ++ return this._bindConstraint.source.get_preferred_height(forWidth); ++ return super.vfunc_get_preferred_height(forWidth); ++ } ++ } ++); ++ ++ ++/** ++ * A simple St.Widget with one child whose allocation takes into account the ++ * slide out of its child via the _slidex parameter ([0:1]). ++ * ++ * Required since I want to track the input region of this container which is ++ * based on its allocation even if the child overlows the parent actor. By doing ++ * this the region of the dash that is slideout is not steling anymore the input ++ * regions making the extesion usable when the primary monitor is the right one. ++ * ++ * The slidex parameter can be used to directly animate the sliding. The parent ++ * must have a WEST (SOUTH) anchor_point to achieve the sliding to the RIGHT (BOTTOM) ++ * side. ++*/ ++var DashSlideContainer = GObject.registerClass({ ++ Properties: { ++ 'side': GObject.ParamSpec.enum( ++ 'side', 'side', 'side', ++ GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY, ++ St.Side, St.Side.LEFT), ++ 'slidex': GObject.ParamSpec.double( ++ 'slidex', 'slidex', 'slidex', ++ GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT, ++ 0, 1, 1), ++ } ++}, class DashToDock_DashSlideContainer extends St.Bin { ++ ++ _init(params = {}) { ++ super._init(params); ++ ++ // slide parameter: 1 = visible, 0 = hidden. ++ this._slidex = params.slidex || 1; ++ this._slideoutSize = 0; // minimum size when slided out ++ } ++ ++ vfunc_allocate(box, flags) { ++ let contentBox = this.get_theme_node().get_content_box(box); ++ ++ this.set_allocation(box); ++ ++ if (this.child == null) ++ return; ++ ++ let availWidth = contentBox.x2 - contentBox.x1; ++ let availHeight = contentBox.y2 - contentBox.y1; ++ let [, , natChildWidth, natChildHeight] = ++ this.child.get_preferred_size(); ++ ++ let childWidth = natChildWidth; ++ let childHeight = natChildHeight; ++ ++ let childBox = new Clutter.ActorBox(); ++ ++ let slideoutSize = this._slideoutSize; ++ ++ if (this.side == St.Side.LEFT) { ++ childBox.x1 = (this._slidex -1) * (childWidth - slideoutSize); ++ childBox.x2 = slideoutSize + this._slidex*(childWidth - slideoutSize); ++ childBox.y1 = 0; ++ childBox.y2 = childBox.y1 + childHeight; ++ } ++ else if ((this.side == St.Side.RIGHT) || (this.side == St.Side.BOTTOM)) { ++ childBox.x1 = 0; ++ childBox.x2 = childWidth; ++ childBox.y1 = 0; ++ childBox.y2 = childBox.y1 + childHeight; ++ } ++ else if (this.side == St.Side.TOP) { ++ childBox.x1 = 0; ++ childBox.x2 = childWidth; ++ childBox.y1 = (this._slidex -1) * (childHeight - slideoutSize); ++ childBox.y2 = slideoutSize + this._slidex * (childHeight - slideoutSize); ++ } ++ ++ this.child.allocate(childBox); ++ ++ this.child.set_clip(-childBox.x1, -childBox.y1, ++ -childBox.x1+availWidth, -childBox.y1 + availHeight); ++ } ++ ++ /** ++ * Just the child width but taking into account the slided out part ++ */ ++ vfunc_get_preferred_width(forHeight) { ++ let [minWidth, natWidth] = super.vfunc_get_preferred_width(forHeight); ++ if ((this.side == St.Side.LEFT) || (this.side == St.Side.RIGHT)) { ++ minWidth = (minWidth - this._slideoutSize) * this._slidex + this._slideoutSize; ++ natWidth = (natWidth - this._slideoutSize) * this._slidex + this._slideoutSize; ++ } ++ return [minWidth, natWidth]; ++ } ++ ++ /** ++ * Just the child height but taking into account the slided out part ++ */ ++ vfunc_get_preferred_height(forWidth) { ++ let [minHeight, natHeight] = super.vfunc_get_preferred_height(forWidth); ++ if ((this.side == St.Side.TOP) || (this.side == St.Side.BOTTOM)) { ++ minHeight = (minHeight - this._slideoutSize) * this._slidex + this._slideoutSize; ++ natHeight = (natHeight - this._slideoutSize) * this._slidex + this._slideoutSize; ++ } ++ return [minHeight, natHeight]; ++ } ++ ++ set slidex(value) { ++ if (value == this._slidex) ++ return; ++ ++ this._slidex = value; ++ this.notify('slidex'); ++ ++ this.queue_relayout(); ++ } ++ ++ get slidex() { ++ return this._slidex; ++ } ++}); ++ ++var DockedDash = GObject.registerClass({ ++ Signals: { ++ 'showing': {}, ++ 'hiding': {}, ++ } ++}, class DashToDock extends St.Bin { ++ ++ _init(remoteModel, monitorIndex) { ++ this._rtl = (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL); ++ ++ // Load settings ++ let settings = DockManager.settings; ++ this._remoteModel = remoteModel; ++ this._monitorIndex = monitorIndex; ++ // Connect global signals ++ this._signalsHandler = new Utils.GlobalSignalsHandler(); ++ ++ this._bindSettingsChanges(); ++ ++ this._position = Utils.getPosition(); ++ this._isHorizontal = ((this._position == St.Side.TOP) || (this._position == St.Side.BOTTOM)); ++ ++ // Temporary ignore hover events linked to autohide for whatever reason ++ this._ignoreHover = false; ++ this._oldignoreHover = null; ++ // This variables are linked to the settings regardles of autohide or intellihide ++ // being temporary disable. Get set by _updateVisibilityMode; ++ this._autohideIsEnabled = null; ++ this._intellihideIsEnabled = null; ++ this._fixedIsEnabled = null; ++ ++ // Create intellihide object to monitor windows overlapping ++ this._intellihide = new Intellihide.Intellihide(this._monitorIndex); ++ ++ // initialize dock state ++ this._dockState = State.HIDDEN; ++ ++ // Put dock on the required monitor ++ this._monitor = Main.layoutManager.monitors[this._monitorIndex]; ++ ++ // this store size and the position where the dash is shown; ++ // used by intellihide module to check window overlap. ++ this.staticBox = new Clutter.ActorBox(); ++ ++ // Initialize pressure barrier variables ++ this._canUsePressure = false; ++ this._pressureBarrier = null; ++ this._barrier = null; ++ this._removeBarrierTimeoutId = 0; ++ ++ // Initialize dwelling system variables ++ this._dockDwelling = false; ++ this._dockWatch = null; ++ this._dockDwellUserTime = 0; ++ this._dockDwellTimeoutId = 0 ++ ++ // Create a new dash object ++ this.dash = new MyDash.MyDash(this._remoteModel, this._monitorIndex); ++ ++ if (Main.overview.isDummy || !settings.get_boolean('show-show-apps-button')) ++ this.dash.hideShowAppsButton(); ++ ++ // Create the main actor and the containers for sliding in and out and ++ // centering, turn on track hover ++ ++ let positionStyleClass = ['top', 'right', 'bottom', 'left']; ++ // This is the centering actor ++ super._init({ ++ name: 'dashtodockContainer', ++ reactive: false, ++ style_class: positionStyleClass[this._position], ++ }); ++ ++ // This is the sliding actor whose allocation is to be tracked for input regions ++ this._slider = new DashSlideContainer({ ++ side: this._position, ++ slidex: 0, ++ ...(this._isHorizontal ? { ++ x_align: Clutter.ActorAlign.CENTER, ++ } : { ++ y_align: Clutter.ActorAlign.CENTER, ++ }) ++ }); ++ ++ // This is the actor whose hover status us tracked for autohide ++ this._box = new St.BoxLayout({ ++ name: 'dashtodockBox', ++ reactive: true, ++ track_hover: true ++ }); ++ this._box.connect('notify::hover', this._hoverChanged.bind(this)); ++ ++ this._signalsHandler.add([ ++ // update when workarea changes, for instance if other extensions modify the struts ++ //(like moving th panel at the bottom) ++ global.display, ++ 'workareas-changed', ++ this._resetPosition.bind(this) ++ ], [ ++ global.display, ++ 'in-fullscreen-changed', ++ this._updateBarrier.bind(this) ++ ], [ ++ // Monitor windows overlapping ++ this._intellihide, ++ 'status-changed', ++ this._updateDashVisibility.bind(this) ++ ], [ ++ // sync hover after a popupmenu is closed ++ this.dash, ++ 'menu-closed', ++ () => { this._box.sync_hover() } ++ ]); ++ ++ if (!Main.overview.isDummy) { ++ this._signalsHandler.add([ ++ Main.overview, ++ 'item-drag-begin', ++ this._onDragStart.bind(this) ++ ], [ ++ Main.overview, ++ 'item-drag-end', ++ this._onDragEnd.bind(this) ++ ], [ ++ Main.overview, ++ 'item-drag-cancelled', ++ this._onDragEnd.bind(this) ++ ], [ ++ Main.overview, ++ 'showing', ++ this._onOverviewShowing.bind(this) ++ ], [ ++ Main.overview, ++ 'hiding', ++ this._onOverviewHiding.bind(this) ++ ], ++ [ ++ Main.overview, ++ 'hidden', ++ this._onOverviewHidden.bind(this) ++ ]); ++ } ++ ++ this._injectionsHandler = new Utils.InjectionsHandler(); ++ this._themeManager = new Theming.ThemeManager(this); ++ ++ // Since the actor is not a topLevel child and its parent is now not added to the Chrome, ++ // the allocation change of the parent container (slide in and slideout) doesn't trigger ++ // anymore an update of the input regions. Force the update manually. ++ this.connect('notify::allocation', ++ Main.layoutManager._queueUpdateRegions.bind(Main.layoutManager)); ++ ++ ++ // Since Clutter has no longer ClutterAllocationFlags, ++ // "allocation-changed" signal has been removed. MR !1245 ++ this.dash._container.connect('notify::allocation', this._updateStaticBox.bind(this)); ++ this._slider.connect(this._isHorizontal ? 'notify::x' : 'notify::y', this._updateStaticBox.bind(this)); ++ ++ // Load optional features that need to be activated for one dock only ++ if (this._monitorIndex == settings.get_int('preferred-monitor')) ++ this._enableExtraFeatures(); ++ // Load optional features that need to be activated once per dock ++ this._optionalScrollWorkspaceSwitch(); ++ ++ // Delay operations that require the shell to be fully loaded and with ++ // user theme applied. ++ ++ this._paintId = global.stage.connect('after-paint', this._initialize.bind(this)); ++ ++ // Reserve space for the dash in the overview. ++ this._dashSpacer = new DashSpacer(this._box); ++ ++ // Add dash container actor and the container to the Chrome. ++ this.set_child(this._slider); ++ this._slider.set_child(this._box); ++ this._box.add_actor(this.dash); ++ ++ // Add aligning container without tracking it for input region ++ Main.uiGroup.add_child(this); ++ if (Main.uiGroup.contains(global.top_window_group)) ++ Main.uiGroup.set_child_below_sibling(this, global.top_window_group); ++ ++ if (settings.get_boolean('dock-fixed')) { ++ // Note: tracking the fullscreen directly on the slider actor causes some hiccups when fullscreening ++ // windows of certain applications ++ Main.layoutManager._trackActor(this, {affectsInputRegion: false, trackFullscreen: true}); ++ Main.layoutManager._trackActor(this._slider, {affectsStruts: true}); ++ } ++ else ++ Main.layoutManager._trackActor(this._slider); ++ ++ // Create and apply height/width constraint to the dash. ++ if (this._isHorizontal) { ++ this.connect('notify::width', () => { ++ this.dash.setMaxSize(this.width, this.height); ++ }); ++ } else { ++ this.connect('notify::height', () => { ++ this.dash.setMaxSize(this.width, this.height) ++ }); ++ } ++ ++ if (this._position == St.Side.RIGHT) ++ this.connect('notify::width', () => this.translation_x = -this.width); ++ else if (this._position == St.Side.BOTTOM) ++ this.connect('notify::height', () => this.translation_y = -this.height); ++ ++ // Set initial position ++ this._resetPosition(); ++ ++ this.connect('destroy', this._onDestroy.bind(this)); ++ } ++ ++ _untrackDock() { ++ Main.layoutManager._untrackActor(this); ++ Main.layoutManager._untrackActor(this._slider); ++ ++ } ++ ++ _trackDock() { ++ if (DockManager.settings.get_boolean('dock-fixed')) { ++ if (Main.layoutManager._findActor(this) == -1) ++ Main.layoutManager._trackActor(this, { affectsInputRegion: false, trackFullscreen: true }); ++ if (Main.layoutManager._findActor(this._slider) == -1) ++ Main.layoutManager._trackActor(this._slider, { affectsStruts: true }); ++ } else { ++ if (Main.layoutManager._findActor(this._slider) == -1) ++ Main.layoutManager._trackActor(this._slider); ++ } ++ } ++ ++ _initialize() { ++ log('[dash-to-dock] initializing...'); ++ ++ if (this._paintId > 0) { ++ global.stage.disconnect(this._paintId); ++ this._paintId = 0; ++ } ++ ++ // Apply custome css class according to the settings ++ this._themeManager.updateCustomTheme(); ++ ++ this._updateVisibilityMode(); ++ ++ // In case we are already inside the overview when the extension is loaded, ++ // for instance on unlocking the screen if it was locked with the overview open. ++ if (Main.overview.visibleTarget) { ++ this._onOverviewShowing(); ++ } ++ ++ // Setup pressure barrier (GS38+ only) ++ this._updatePressureBarrier(); ++ this._updateBarrier(); ++ ++ // setup dwelling system if pressure barriers are not available ++ this._setupDockDwellIfNeeded(); ++ } ++ ++ _onDestroy() { ++ // Disconnect global signals ++ this._signalsHandler.destroy(); ++ // The dash, intellihide and themeManager have global signals as well internally ++ this.dash.destroy(); ++ this._intellihide.destroy(); ++ this._themeManager.destroy(); ++ ++ this._injectionsHandler.destroy(); ++ ++ if (this._marginLater) { ++ Meta.later_remove(this._marginLater); ++ delete this._marginLater; ++ } ++ ++ // Remove barrier timeout ++ if (this._removeBarrierTimeoutId > 0) ++ GLib.source_remove(this._removeBarrierTimeoutId); ++ ++ // Remove existing barrier ++ this._removeBarrier(); ++ ++ // Remove pointer watcher ++ if (this._dockWatch) { ++ PointerWatcher.getPointerWatcher()._removeWatch(this._dockWatch); ++ this._dockWatch = null; ++ } ++ } ++ ++ _bindSettingsChanges() { ++ let settings = DockManager.settings; ++ this._signalsHandler.add([ ++ settings, ++ 'changed::scroll-action', ++ () => { this._optionalScrollWorkspaceSwitch(); } ++ ], [ ++ settings, ++ 'changed::dash-max-icon-size', ++ () => { this.dash.setIconSize(settings.get_int('dash-max-icon-size')); } ++ ], [ ++ settings, ++ 'changed::icon-size-fixed', ++ () => { this.dash.setIconSize(settings.get_int('dash-max-icon-size')); } ++ ], [ ++ settings, ++ 'changed::show-favorites', ++ () => { this.dash.resetAppIcons(); } ++ ], [ ++ settings, ++ 'changed::show-trash', ++ () => { this.dash.resetAppIcons(); }, ++ Utils.SignalsHandlerFlags.CONNECT_AFTER, ++ ], [ ++ settings, ++ 'changed::show-mounts', ++ () => { this.dash.resetAppIcons(); }, ++ Utils.SignalsHandlerFlags.CONNECT_AFTER ++ ], [ ++ settings, ++ 'changed::show-running', ++ () => { this.dash.resetAppIcons(); } ++ ], [ ++ settings, ++ 'changed::show-apps-at-top', ++ () => { this.dash.updateShowAppsButton(); } ++ ], [ ++ settings, ++ 'changed::show-show-apps-button', ++ () => { ++ if (!Main.overview.isDummy && ++ settings.get_boolean('show-show-apps-button')) ++ this.dash.showShowAppsButton(); ++ else ++ this.dash.hideShowAppsButton(); ++ } ++ ], [ ++ settings, ++ 'changed::dock-fixed', ++ () => { ++ this._untrackDock(); ++ this._trackDock(); ++ ++ this._resetPosition(); ++ ++ // Add or remove barrier depending on if dock-fixed ++ this._updateBarrier(); ++ ++ this._updateVisibilityMode(); ++ } ++ ], [ ++ settings, ++ 'changed::intellihide', ++ this._updateVisibilityMode.bind(this) ++ ], [ ++ settings, ++ 'changed::intellihide-mode', ++ () => { this._intellihide.forceUpdate(); } ++ ], [ ++ settings, ++ 'changed::autohide', ++ () => { ++ this._updateVisibilityMode(); ++ this._updateBarrier(); ++ } ++ ], [ ++ settings, ++ 'changed::autohide-in-fullscreen', ++ this._updateBarrier.bind(this) ++ ], ++ [ ++ settings, ++ 'changed::extend-height', ++ this._resetPosition.bind(this) ++ ], [ ++ settings, ++ 'changed::height-fraction', ++ this._resetPosition.bind(this) ++ ], [ ++ settings, ++ 'changed::require-pressure-to-show', ++ () => { ++ // Remove pointer watcher ++ if (this._dockWatch) { ++ PointerWatcher.getPointerWatcher()._removeWatch(this._dockWatch); ++ this._dockWatch = null; ++ } ++ this._setupDockDwellIfNeeded(); ++ this._updateBarrier(); ++ } ++ ], [ ++ settings, ++ 'changed::pressure-threshold', ++ () => { ++ this._updatePressureBarrier(); ++ this._updateBarrier(); ++ } ++ ]); ++ ++ } ++ ++ /** ++ * This is call when visibility settings change ++ */ ++ _updateVisibilityMode() { ++ let settings = DockManager.settings; ++ if (settings.get_boolean('dock-fixed')) { ++ this._fixedIsEnabled = true; ++ this._autohideIsEnabled = false; ++ this._intellihideIsEnabled = false; ++ } ++ else { ++ this._fixedIsEnabled = false; ++ this._autohideIsEnabled = settings.get_boolean('autohide') ++ this._intellihideIsEnabled = settings.get_boolean('intellihide') ++ } ++ ++ if (this._autohideIsEnabled) ++ this.add_style_class_name('autohide'); ++ else ++ this.remove_style_class_name('autohide'); ++ ++ if (this._intellihideIsEnabled) ++ this._intellihide.enable(); ++ else ++ this._intellihide.disable(); ++ ++ this._updateDashVisibility(); ++ } ++ ++ /** ++ * Show/hide dash based on, in order of priority: ++ * overview visibility ++ * fixed mode ++ * intellihide ++ * autohide ++ * overview visibility ++ */ ++ _updateDashVisibility() { ++ if (Main.overview.visibleTarget) ++ return; ++ ++ let settings = DockManager.settings; ++ ++ if (this._fixedIsEnabled) { ++ this._removeAnimations(); ++ this._animateIn(settings.get_double('animation-time'), 0); ++ } ++ else if (this._intellihideIsEnabled) { ++ if (this._intellihide.getOverlapStatus()) { ++ this._ignoreHover = false; ++ // Do not hide if autohide is enabled and mouse is hover ++ if (!this._box.hover || !this._autohideIsEnabled) ++ this._animateOut(settings.get_double('animation-time'), 0); ++ } ++ else { ++ this._ignoreHover = true; ++ this._removeAnimations(); ++ this._animateIn(settings.get_double('animation-time'), 0); ++ } ++ } ++ else { ++ if (this._autohideIsEnabled) { ++ this._ignoreHover = false; ++ ++ if (this._box.hover) ++ this._animateIn(settings.get_double('animation-time'), 0); ++ else ++ this._animateOut(settings.get_double('animation-time'), 0); ++ } ++ else ++ this._animateOut(settings.get_double('animation-time'), 0); ++ } ++ } ++ ++ _onOverviewShowing() { ++ this.add_style_class_name('overview'); ++ ++ this._ignoreHover = true; ++ this._intellihide.disable(); ++ this._removeAnimations(); ++ // The overview uses the monitor's work area to calculate background size. ++ // If our dock is fixed, it will shrink the monitor's work area unexpectedly. ++ this._untrackDock(); ++ this._animateIn(DockManager.settings.get_double('animation-time'), 0); ++ } ++ ++ _onOverviewHiding() { ++ this._ignoreHover = false; ++ this._intellihide.enable(); ++ this._trackDock(); ++ this._updateDashVisibility(); ++ } ++ ++ _onOverviewHidden() { ++ this.remove_style_class_name('overview'); ++ } ++ ++ _hoverChanged() { ++ if (!this._ignoreHover) { ++ // Skip if dock is not in autohide mode for instance because it is shown ++ // by intellihide. ++ if (this._autohideIsEnabled) { ++ if (this._box.hover) ++ this._show(); ++ else ++ this._hide(); ++ } ++ } ++ } ++ ++ getDockState() { ++ return this._dockState; ++ } ++ ++ _show() { ++ this._delayedHide = false; ++ if ((this._dockState == State.HIDDEN) || (this._dockState == State.HIDING)) { ++ if (this._dockState == State.HIDING) ++ // suppress all potential queued transitions - i.e. added but not started, ++ // always give priority to show ++ this._removeAnimations(); ++ ++ this.emit('showing'); ++ this._animateIn(DockManager.settings.get_double('animation-time'), 0); ++ } ++ } ++ ++ _hide() { ++ // If no hiding animation is running or queued ++ if ((this._dockState == State.SHOWN) || (this._dockState == State.SHOWING)) { ++ let settings = DockManager.settings; ++ let delay = settings.get_double('hide-delay'); ++ ++ if (this._dockState == State.SHOWING) { ++ // if a show already started, let it finish; queue hide without removing the show. ++ // to obtain this, we wait for the animateIn animation to be completed ++ this._delayedHide = true; ++ return; ++ } ++ ++ this.emit('hiding'); ++ this._animateOut(settings.get_double('animation-time'), delay); ++ } ++ } ++ ++ _animateIn(time, delay) { ++ this._dockState = State.SHOWING; ++ this.dash.iconAnimator.start(); ++ this._delayedHide = false; ++ ++ this._slider.ease_property('slidex', 1, { ++ duration: time * 1000, ++ delay: delay * 1000, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ onComplete: () => { ++ this._dockState = State.SHOWN; ++ // Remove barrier so that mouse pointer is released and can access monitors on other side of dock ++ // NOTE: Delay needed to keep mouse from moving past dock and re-hiding dock immediately. This ++ // gives users an opportunity to hover over the dock ++ if (this._removeBarrierTimeoutId > 0) ++ GLib.source_remove(this._removeBarrierTimeoutId); ++ ++ if (!this._delayedHide) { ++ this._removeBarrierTimeoutId = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, 100, this._removeBarrier.bind(this)); ++ } else { ++ this._hide(); ++ } ++ } ++ }); ++ } ++ ++ _animateOut(time, delay) { ++ this._dockState = State.HIDING; ++ ++ this._slider.ease_property('slidex', 0, { ++ duration: time * 1000, ++ delay: delay * 1000, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ onComplete: () => { ++ this._dockState = State.HIDDEN; ++ // Remove queued barried removal if any ++ if (this._removeBarrierTimeoutId > 0) ++ GLib.source_remove(this._removeBarrierTimeoutId); ++ this._updateBarrier(); ++ this.dash.iconAnimator.pause(); ++ } ++ }); ++ } ++ ++ /** ++ * Dwelling system based on the GNOME Shell 3.14 messageTray code. ++ */ ++ _setupDockDwellIfNeeded() { ++ // If we don't have extended barrier features, then we need ++ // to support the old tray dwelling mechanism. ++ if (!global.display.supports_extended_barriers() || ++ !DockManager.settings.get_boolean('require-pressure-to-show')) { ++ let pointerWatcher = PointerWatcher.getPointerWatcher(); ++ this._dockWatch = pointerWatcher.addWatch(DOCK_DWELL_CHECK_INTERVAL, this._checkDockDwell.bind(this)); ++ this._dockDwelling = false; ++ this._dockDwellUserTime = 0; ++ } ++ } ++ ++ _checkDockDwell(x, y) { ++ ++ let workArea = Main.layoutManager.getWorkAreaForMonitor(this._monitor.index) ++ let shouldDwell; ++ // Check for the correct screen edge, extending the sensitive area to the whole workarea, ++ // minus 1 px to avoid conflicting with other active corners. ++ if (this._position == St.Side.LEFT) ++ shouldDwell = (x == this._monitor.x) && (y > workArea.y) && (y < workArea.y + workArea.height); ++ else if (this._position == St.Side.RIGHT) ++ shouldDwell = (x == this._monitor.x + this._monitor.width - 1) && (y > workArea.y) && (y < workArea.y + workArea.height); ++ else if (this._position == St.Side.TOP) ++ shouldDwell = (y == this._monitor.y) && (x > workArea.x) && (x < workArea.x + workArea.width); ++ else if (this._position == St.Side.BOTTOM) ++ shouldDwell = (y == this._monitor.y + this._monitor.height - 1) && (x > workArea.x) && (x < workArea.x + workArea.width); ++ ++ if (shouldDwell) { ++ // We only set up dwell timeout when the user is not hovering over the dock ++ // already (!this._box.hover). ++ // The _dockDwelling variable is used so that we only try to ++ // fire off one dock dwell - if it fails (because, say, the user has the mouse down), ++ // we don't try again until the user moves the mouse up and down again. ++ if (!this._dockDwelling && !this._box.hover && (this._dockDwellTimeoutId == 0)) { ++ // Save the interaction timestamp so we can detect user input ++ let focusWindow = global.display.focus_window; ++ this._dockDwellUserTime = focusWindow ? focusWindow.user_time : 0; ++ ++ this._dockDwellTimeoutId = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, ++ DockManager.settings.get_double('show-delay') * 1000, ++ this._dockDwellTimeout.bind(this)); ++ GLib.Source.set_name_by_id(this._dockDwellTimeoutId, '[dash-to-dock] this._dockDwellTimeout'); ++ } ++ this._dockDwelling = true; ++ } ++ else { ++ this._cancelDockDwell(); ++ this._dockDwelling = false; ++ } ++ } ++ ++ _cancelDockDwell() { ++ if (this._dockDwellTimeoutId != 0) { ++ GLib.source_remove(this._dockDwellTimeoutId); ++ this._dockDwellTimeoutId = 0; ++ } ++ } ++ ++ _dockDwellTimeout() { ++ this._dockDwellTimeoutId = 0; ++ ++ if (!DockManager.settings.get_boolean('autohide-in-fullscreen') && ++ this._monitor.inFullscreen) ++ return GLib.SOURCE_REMOVE; ++ ++ // We don't want to open the tray when a modal dialog ++ // is up, so we check the modal count for that. When we are in the ++ // overview we have to take the overview's modal push into account ++ if (Main.modalCount > (Main.overview.visible ? 1 : 0)) ++ return GLib.SOURCE_REMOVE; ++ ++ // If the user interacted with the focus window since we started the tray ++ // dwell (by clicking or typing), don't activate the message tray ++ let focusWindow = global.display.focus_window; ++ let currentUserTime = focusWindow ? focusWindow.user_time : 0; ++ if (currentUserTime != this._dockDwellUserTime) ++ return GLib.SOURCE_REMOVE; ++ ++ // Reuse the pressure version function, the logic is the same ++ this._onPressureSensed(); ++ return GLib.SOURCE_REMOVE; ++ } ++ ++ _updatePressureBarrier() { ++ let settings = DockManager.settings; ++ this._canUsePressure = global.display.supports_extended_barriers(); ++ let pressureThreshold = settings.get_double('pressure-threshold'); ++ ++ // Remove existing pressure barrier ++ if (this._pressureBarrier) { ++ this._pressureBarrier.destroy(); ++ this._pressureBarrier = null; ++ } ++ ++ if (this._barrier) { ++ this._barrier.destroy(); ++ this._barrier = null; ++ } ++ ++ // Create new pressure barrier based on pressure threshold setting ++ if (this._canUsePressure) { ++ this._pressureBarrier = new Layout.PressureBarrier(pressureThreshold, settings.get_double('show-delay')*1000, ++ Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW); ++ this._pressureBarrier.connect('trigger', (barrier) => { ++ if (!settings.get_boolean('autohide-in-fullscreen') && this._monitor.inFullscreen) ++ return; ++ this._onPressureSensed(); ++ }); ++ } ++ } ++ ++ /** ++ * handler for mouse pressure sensed ++ */ ++ _onPressureSensed() { ++ if (Main.overview.visibleTarget) ++ return; ++ ++ // In case the mouse move away from the dock area before hovering it, in such case the leave event ++ // would never be triggered and the dock would stay visible forever. ++ let triggerTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 250, () => { ++ triggerTimeoutId = 0; ++ ++ let [x, y, mods] = global.get_pointer(); ++ let shouldHide = true; ++ switch (this._position) { ++ case St.Side.LEFT: ++ if (x <= this.staticBox.x2 && ++ x >= this._monitor.x && ++ y >= this._monitor.y && ++ y <= this._monitor.y + this._monitor.height) { ++ shouldHide = false; ++ } ++ break; ++ case St.Side.RIGHT: ++ if (x >= this.staticBox.x1 && ++ x <= this._monitor.x + this._monitor.width && ++ y >= this._monitor.y && ++ y <= this._monitor.y + this._monitor.height) { ++ shouldHide = false; ++ } ++ break; ++ case St.Side.TOP: ++ if (x >= this._monitor.x && ++ x <= this._monitor.x + this._monitor.width && ++ y <= this.staticBox.y2 && ++ y >= this._monitor.y) { ++ shouldHide = false; ++ } ++ break; ++ case St.Side.BOTTOM: ++ if (x >= this._monitor.x && ++ x <= this._monitor.x + this._monitor.width && ++ y >= this.staticBox.y1 && ++ y <= this._monitor.y + this._monitor.height) { ++ shouldHide = false; ++ } ++ } ++ if (shouldHide) { ++ this._hoverChanged(); ++ return GLib.SOURCE_REMOVE; ++ } ++ else { ++ return GLib.SOURCE_CONTINUE; ++ } ++ ++ }); ++ ++ this._show(); ++ } ++ ++ /** ++ * Remove pressure barrier ++ */ ++ _removeBarrier() { ++ if (this._barrier) { ++ if (this._pressureBarrier) ++ this._pressureBarrier.removeBarrier(this._barrier); ++ this._barrier.destroy(); ++ this._barrier = null; ++ } ++ this._removeBarrierTimeoutId = 0; ++ return false; ++ } ++ ++ /** ++ * Update pressure barrier size ++ */ ++ _updateBarrier() { ++ // Remove existing barrier ++ this._removeBarrier(); ++ ++ // The barrier needs to be removed in fullscreen with autohide disabled, otherwise the mouse can ++ // get trapped on monitor. ++ if (this._monitor.inFullscreen && ++ !DockManager.settings.get_boolean('autohide-in-fullscreen')) ++ return ++ ++ // Manually reset pressure barrier ++ // This is necessary because we remove the pressure barrier when it is triggered to show the dock ++ if (this._pressureBarrier) { ++ this._pressureBarrier._reset(); ++ this._pressureBarrier._isTriggered = false; ++ } ++ ++ // Create new barrier ++ // The barrier extends to the whole workarea, minus 1 px to avoid conflicting with other active corners ++ // Note: dash in fixed position doesn't use pressure barrier. ++ if (this._canUsePressure && this._autohideIsEnabled && ++ DockManager.settings.get_boolean('require-pressure-to-show')) { ++ let x1, x2, y1, y2, direction; ++ let workArea = Main.layoutManager.getWorkAreaForMonitor(this._monitor.index) ++ ++ if (this._position == St.Side.LEFT) { ++ x1 = this._monitor.x + 1; ++ x2 = x1; ++ y1 = workArea.y + 1; ++ y2 = workArea.y + workArea.height - 1; ++ direction = Meta.BarrierDirection.POSITIVE_X; ++ } ++ else if (this._position == St.Side.RIGHT) { ++ x1 = this._monitor.x + this._monitor.width - 1; ++ x2 = x1; ++ y1 = workArea.y + 1; ++ y2 = workArea.y + workArea.height - 1; ++ direction = Meta.BarrierDirection.NEGATIVE_X; ++ } ++ else if (this._position == St.Side.TOP) { ++ x1 = workArea.x + 1; ++ x2 = workArea.x + workArea.width - 1; ++ y1 = this._monitor.y; ++ y2 = y1; ++ direction = Meta.BarrierDirection.POSITIVE_Y; ++ } ++ else if (this._position == St.Side.BOTTOM) { ++ x1 = workArea.x + 1; ++ x2 = workArea.x + workArea.width - 1; ++ y1 = this._monitor.y + this._monitor.height; ++ y2 = y1; ++ direction = Meta.BarrierDirection.NEGATIVE_Y; ++ } ++ ++ if (this._pressureBarrier && this._dockState == State.HIDDEN) { ++ this._barrier = new Meta.Barrier({ ++ display: global.display, ++ x1: x1, ++ x2: x2, ++ y1: y1, ++ y2: y2, ++ directions: direction ++ }); ++ this._pressureBarrier.addBarrier(this._barrier); ++ } ++ } ++ } ++ ++ _isPrimaryMonitor() { ++ return (this._monitorIndex == Main.layoutManager.primaryIndex); ++ } ++ ++ _resetPosition() { ++ // Ensure variables linked to settings are updated. ++ this._updateVisibilityMode(); ++ ++ let extendHeight = DockManager.settings.get_boolean('extend-height'); ++ ++ // Note: do not use the workarea coordinates in the direction on which the dock is placed, ++ // to avoid a loop [position change -> workArea change -> position change] with ++ // fixed dock. ++ let workArea = Main.layoutManager.getWorkAreaForMonitor(this._monitorIndex); ++ ++ ++ let fraction = DockManager.settings.get_double('height-fraction'); ++ ++ if (extendHeight) ++ fraction = 1; ++ else if ((fraction < 0) || (fraction > 1)) ++ fraction = 0.95; ++ ++ if (this._isHorizontal) { ++ this.width = Math.round(fraction * workArea.width); ++ ++ let pos_y = this._monitor.y; ++ if (this._position == St.Side.BOTTOM) ++ pos_y += this._monitor.height; ++ ++ this.x = workArea.x + Math.round((1 - fraction) / 2 * workArea.width); ++ this.y = pos_y; ++ ++ if (extendHeight) { ++ this.dash._container.set_width(this.width); ++ this.add_style_class_name('extended'); ++ } else { ++ this.dash._container.set_width(-1); ++ this.remove_style_class_name('extended'); ++ } ++ } else { ++ this.height = Math.round(fraction * workArea.height); ++ ++ let pos_x = this._monitor.x; ++ if (this._position == St.Side.RIGHT) ++ pos_x += this._monitor.width; ++ ++ this.x = pos_x; ++ this.y = workArea.y + Math.round((1 - fraction) / 2 * workArea.height); ++ ++ this._signalsHandler.removeWithLabel('verticalOffsetChecker'); ++ ++ if (extendHeight) { ++ this.dash._container.set_height(this.height); ++ this.add_style_class_name('extended'); ++ } else { ++ this.dash._container.set_height(-1); ++ this.remove_style_class_name('extended'); ++ } ++ } ++ } ++ ++ _updateStaticBox() { ++ this.staticBox.init_rect( ++ this.x + this._slider.x - (this._position == St.Side.RIGHT ? this._box.width : 0), ++ this.y + this._slider.y - (this._position == St.Side.BOTTOM ? this._box.height : 0), ++ this._box.width, ++ this._box.height ++ ); ++ ++ this._intellihide.updateTargetBox(this.staticBox); ++ } ++ ++ _removeAnimations() { ++ this._slider.remove_all_transitions(); ++ } ++ ++ _onDragStart() { ++ this._oldignoreHover = this._ignoreHover; ++ this._ignoreHover = true; ++ this._animateIn(DockManager.settings.get_double('animation-time'), 0); ++ } ++ ++ _onDragEnd() { ++ if (this._oldignoreHover !== null) ++ this._ignoreHover = this._oldignoreHover; ++ this._oldignoreHover = null; ++ this._box.sync_hover(); ++ } ++ ++ /** ++ * Show dock and give key focus to it ++ */ ++ _onAccessibilityFocus() { ++ this._box.navigate_focus(null, St.DirectionType.TAB_FORWARD, false); ++ this._animateIn(DockManager.settings.get_double('animation-time'), 0); ++ } ++ ++ // Optional features to be enabled only for the main Dock ++ _enableExtraFeatures() { ++ // Restore dash accessibility ++ Main.ctrlAltTabManager.addGroup( ++ this.dash, _('Dash'), 'user-bookmarks-symbolic', ++ {focusCallback: this._onAccessibilityFocus.bind(this)}); ++ } ++ ++ /** ++ * Switch workspace by scrolling over the dock ++ */ ++ _optionalScrollWorkspaceSwitch() { ++ let label = 'optionalScrollWorkspaceSwitch'; ++ ++ function isEnabled() { ++ return DockManager.settings.get_enum('scroll-action') === scrollAction.SWITCH_WORKSPACE; ++ } ++ ++ DockManager.settings.connect('changed::scroll-action', () => { ++ if (isEnabled.bind(this)()) ++ enable.bind(this)(); ++ else ++ disable.bind(this)(); ++ }); ++ ++ if (isEnabled.bind(this)()) ++ enable.bind(this)(); ++ ++ function enable() { ++ this._signalsHandler.removeWithLabel(label); ++ ++ this._signalsHandler.addWithLabel(label, [ ++ this._box, ++ 'scroll-event', ++ onScrollEvent.bind(this) ++ ]); ++ } ++ ++ function disable() { ++ this._signalsHandler.removeWithLabel(label); ++ ++ if (this._optionalScrollWorkspaceSwitchDeadTimeId) { ++ GLib.source_remove(this._optionalScrollWorkspaceSwitchDeadTimeId); ++ this._optionalScrollWorkspaceSwitchDeadTimeId = 0; ++ } ++ } ++ ++ // This was inspired to desktop-scroller@obsidien.github.com ++ function onScrollEvent(actor, event) { ++ // When in overview change workspace only in windows view ++ if (Main.overview.visible) ++ return false; ++ ++ let activeWs = global.workspace_manager.get_active_workspace(); ++ let direction = null; ++ ++ switch (event.get_scroll_direction()) { ++ case Clutter.ScrollDirection.UP: ++ direction = Meta.MotionDirection.LEFT; ++ break; ++ case Clutter.ScrollDirection.DOWN: ++ direction = Meta.MotionDirection.RIGHT; ++ break; ++ case Clutter.ScrollDirection.SMOOTH: ++ let [dx, dy] = event.get_scroll_delta(); ++ if (dy < 0) ++ direction = Meta.MotionDirection.LEFT; ++ else if (dy > 0) ++ direction = Meta.MotionDirection.RIGHT; ++ break; ++ } ++ ++ if (direction !== null) { ++ // Prevent scroll events from triggering too many workspace switches ++ // by adding a 250ms deadtime between each scroll event. ++ // Usefull on laptops when using a touchpad. ++ ++ // During the deadtime do nothing ++ if (this._optionalScrollWorkspaceSwitchDeadTimeId) ++ return false; ++ else ++ this._optionalScrollWorkspaceSwitchDeadTimeId = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, 250, () => { ++ this._optionalScrollWorkspaceSwitchDeadTimeId = 0; ++ }); ++ ++ let ws; ++ ++ ws = activeWs.get_neighbor(direction) ++ ++ if (Main.wm._workspaceSwitcherPopup == null) ++ // Support Workspace Grid extension showing their custom Grid Workspace Switcher ++ if (global.workspace_manager.workspace_grid !== undefined) { ++ Main.wm._workspaceSwitcherPopup = ++ global.workspace_manager.workspace_grid.getWorkspaceSwitcherPopup(); ++ } else { ++ Main.wm._workspaceSwitcherPopup = new WorkspaceSwitcherPopup.WorkspaceSwitcherPopup(); ++ } ++ // Set the actor non reactive, so that it doesn't prevent the ++ // clicks events from reaching the dash actor. I can't see a reason ++ // why it should be reactive. ++ Main.wm._workspaceSwitcherPopup.reactive = false; ++ Main.wm._workspaceSwitcherPopup.connect('destroy', function() { ++ Main.wm._workspaceSwitcherPopup = null; ++ }); ++ ++ // If Workspace Grid is installed, let them handle the scroll behaviour. ++ if (global.workspace_manager.workspace_grid !== undefined) ++ ws = global.workspace_manager.workspace_grid.actionMoveWorkspace(direction); ++ else ++ Main.wm.actionMoveWorkspace(ws); ++ ++ // Do not show workspaceSwitcher in overview ++ if (!Main.overview.visible) ++ Main.wm._workspaceSwitcherPopup.display(direction, ws.index()); ++ ++ return true; ++ } ++ else ++ return false; ++ } ++ } ++ ++ _activateApp(appIndex) { ++ let children = this.dash._box.get_children().filter(function(actor) { ++ return actor.child && ++ actor.child.app; ++ }); ++ ++ // Apps currently in the dash ++ let apps = children.map(function(actor) { ++ return actor.child; ++ }); ++ ++ // Activate with button = 1, i.e. same as left click ++ let button = 1; ++ if (appIndex < apps.length) ++ apps[appIndex].activate(button); ++ } ++}); ++ ++/* ++ * Handle keybaord shortcuts ++ */ ++const DashToDock_KeyboardShortcuts_NUM_HOTKEYS = 10; ++ ++var KeyboardShortcuts = class DashToDock_KeyboardShortcuts { ++ ++ constructor() { ++ this._signalsHandler = new Utils.GlobalSignalsHandler(); ++ ++ this._hotKeysEnabled = false; ++ if (DockManager.settings.get_boolean('hot-keys')) ++ this._enableHotKeys(); ++ ++ this._signalsHandler.add([ ++ DockManager.settings, ++ 'changed::hot-keys', ++ () => { ++ if (DockManager.settings.get_boolean('hot-keys')) ++ this._enableHotKeys.bind(this)(); ++ else ++ this._disableHotKeys.bind(this)(); ++ } ++ ]); ++ ++ this._optionalNumberOverlay(); ++ } ++ ++ destroy() { ++ // Remove keybindings ++ this._disableHotKeys(); ++ this._disableExtraShortcut(); ++ this._signalsHandler.destroy(); ++ } ++ ++ _enableHotKeys() { ++ if (this._hotKeysEnabled) ++ return; ++ ++ // Setup keyboard bindings for dash elements ++ let keys = ['app-hotkey-', 'app-shift-hotkey-', 'app-ctrl-hotkey-']; ++ keys.forEach( function(key) { ++ for (let i = 0; i < DashToDock_KeyboardShortcuts_NUM_HOTKEYS; i++) { ++ let appNum = i; ++ Main.wm.addKeybinding(key + (i + 1), DockManager.settings, ++ Meta.KeyBindingFlags.IGNORE_AUTOREPEAT, ++ Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW, ++ () => { ++ DockManager.getDefault().mainDock._activateApp(appNum); ++ this._showOverlay(); ++ }); ++ } ++ }, this); ++ ++ this._hotKeysEnabled = true; ++ } ++ ++ _disableHotKeys() { ++ if (!this._hotKeysEnabled) ++ return; ++ ++ let keys = ['app-hotkey-', 'app-shift-hotkey-', 'app-ctrl-hotkey-']; ++ keys.forEach( function(key) { ++ for (let i = 0; i < DashToDock_KeyboardShortcuts_NUM_HOTKEYS; i++) ++ Main.wm.removeKeybinding(key + (i + 1)); ++ }, this); ++ ++ this._hotKeysEnabled = false; ++ } ++ ++ _optionalNumberOverlay() { ++ let settings = DockManager.settings; ++ this._shortcutIsSet = false; ++ // Enable extra shortcut if either 'overlay' or 'show-dock' are true ++ if (settings.get_boolean('hot-keys') && ++ (settings.get_boolean('hotkeys-overlay') || settings.get_boolean('hotkeys-show-dock'))) ++ this._enableExtraShortcut(); ++ ++ this._signalsHandler.add([ ++ settings, ++ 'changed::hot-keys', ++ this._checkHotkeysOptions.bind(this) ++ ], [ ++ settings, ++ 'changed::hotkeys-overlay', ++ this._checkHotkeysOptions.bind(this) ++ ], [ ++ settings, ++ 'changed::hotkeys-show-dock', ++ this._checkHotkeysOptions.bind(this) ++ ]); ++ } ++ ++ _checkHotkeysOptions() { ++ let settings = DockManager.settings; ++ ++ if (settings.get_boolean('hot-keys') && ++ (settings.get_boolean('hotkeys-overlay') || settings.get_boolean('hotkeys-show-dock'))) ++ this._enableExtraShortcut(); ++ else ++ this._disableExtraShortcut(); ++ } ++ ++ _enableExtraShortcut() { ++ if (!this._shortcutIsSet) { ++ Main.wm.addKeybinding('shortcut', DockManager.settings, ++ Meta.KeyBindingFlags.IGNORE_AUTOREPEAT, ++ Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW, ++ this._showOverlay.bind(this)); ++ this._shortcutIsSet = true; ++ } ++ } ++ ++ _disableExtraShortcut() { ++ if (this._shortcutIsSet) { ++ Main.wm.removeKeybinding('shortcut'); ++ this._shortcutIsSet = false; ++ } ++ } ++ ++ _showOverlay() { ++ for (let dock of DockManager.allDocks) { ++ if (DockManager.settings.get_boolean('hotkeys-overlay')) ++ dock.dash.toggleNumberOverlay(true); ++ ++ // Restart the counting if the shortcut is pressed again ++ if (dock._numberOverlayTimeoutId) { ++ GLib.source_remove(dock._numberOverlayTimeoutId); ++ dock._numberOverlayTimeoutId = 0; ++ } ++ ++ // Hide the overlay/dock after the timeout ++ let timeout = DockManager.settings.get_double('shortcut-timeout') * 1000; ++ dock._numberOverlayTimeoutId = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, timeout, () => { ++ dock._numberOverlayTimeoutId = 0; ++ dock.dash.toggleNumberOverlay(false); ++ // Hide the dock again if necessary ++ dock._updateDashVisibility(); ++ }); ++ ++ // Show the dock if it is hidden ++ if (DockManager.settings.get_boolean('hotkeys-show-dock')) { ++ let showDock = (dock._intellihideIsEnabled || dock._autohideIsEnabled); ++ if (showDock) ++ dock._show(); ++ } ++ } ++ } ++}; ++ ++/** ++ * Isolate overview to open new windows for inactive apps ++ * Note: the future implementaion is not fully contained here. Some bits are around in other methods of other classes. ++ * This class just take care of enabling/disabling the option. ++ */ ++var WorkspaceIsolation = class DashToDock_WorkspaceIsolation { ++ ++ constructor() { ++ ++ let settings = DockManager.settings; ++ ++ this._signalsHandler = new Utils.GlobalSignalsHandler(); ++ this._injectionsHandler = new Utils.InjectionsHandler(); ++ ++ this._signalsHandler.add([ ++ settings, ++ 'changed::isolate-workspaces', ++ () => { ++ DockManager.allDocks.forEach((dock) => ++ dock.dash.resetAppIcons()); ++ if (settings.get_boolean('isolate-workspaces') || ++ settings.get_boolean('isolate-monitors')) ++ this._enable.bind(this)(); ++ else ++ this._disable.bind(this)(); ++ } ++ ],[ ++ settings, ++ 'changed::isolate-monitors', ++ () => { ++ DockManager.allDocks.forEach((dock) => ++ dock.dash.resetAppIcons()); ++ if (settings.get_boolean('isolate-workspaces') || ++ settings.get_boolean('isolate-monitors')) ++ this._enable.bind(this)(); ++ else ++ this._disable.bind(this)(); ++ } ++ ]); ++ ++ if (settings.get_boolean('isolate-workspaces') || ++ settings.get_boolean('isolate-monitors')) ++ this._enable(); ++ ++ } ++ ++ _enable() { ++ ++ // ensure I never double-register/inject ++ // although it should never happen ++ this._disable(); ++ ++ DockManager.allDocks.forEach((dock) => { ++ this._signalsHandler.addWithLabel('isolation', [ ++ global.display, ++ 'restacked', ++ dock.dash._queueRedisplay.bind(dock.dash) ++ ], [ ++ global.window_manager, ++ 'switch-workspace', ++ dock.dash._queueRedisplay.bind(dock.dash) ++ ]); ++ ++ // This last signal is only needed for monitor isolation, as windows ++ // might migrate from one monitor to another without triggering 'restacked' ++ if (DockManager.settings.get_boolean('isolate-monitors')) ++ this._signalsHandler.addWithLabel('isolation', [ ++ global.display, ++ 'window-entered-monitor', ++ dock.dash._queueRedisplay.bind(dock.dash) ++ ]); ++ ++ }, this); ++ ++ // here this is the Shell.App ++ function IsolatedOverview() { ++ // These lines take care of Nautilus for icons on Desktop ++ let windows = this.get_windows().filter(function(w) { ++ return w.get_workspace().index() == global.workspace_manager.get_active_workspace_index(); ++ }); ++ if (windows.length == 1) ++ if (windows[0].skip_taskbar) ++ return this.open_new_window(-1); ++ ++ if (this.is_on_workspace(global.workspace_manager.get_active_workspace())) ++ return Main.activateWindow(windows[0]); ++ return this.open_new_window(-1); ++ } ++ ++ this._injectionsHandler.addWithLabel('isolation', [ ++ Shell.App.prototype, ++ 'activate', ++ IsolatedOverview ++ ]); ++ } ++ ++ _disable () { ++ this._signalsHandler.removeWithLabel('isolation'); ++ this._injectionsHandler.removeWithLabel('isolation'); ++ } ++ ++ destroy() { ++ this._signalsHandler.destroy(); ++ this._injectionsHandler.destroy(); ++ } ++}; ++ ++ ++var DockManager = class DashToDock_DockManager { ++ ++ constructor() { ++ if (Me.imports.extension.dockManager) ++ throw new Error('DashToDock has been already initialized'); ++ ++ Me.imports.extension.dockManager = this; ++ ++ this._remoteModel = new LauncherAPI.LauncherEntryRemoteModel(); ++ this._signalsHandler = new Utils.GlobalSignalsHandler(); ++ this._settings = ExtensionUtils.getSettings('org.gnome.shell.extensions.dash-to-dock'); ++ this._oldDash = Main.overview.isDummy ? null : Main.overview.dash; ++ ++ this._ensureFileManagerClient(); ++ ++ /* Array of all the docks created */ ++ this._allDocks = []; ++ this._createDocks(); ++ ++ // status variable: true when the overview is shown through the dash ++ // applications button. ++ this._forcedOverview = false; ++ ++ // Connect relevant signals to the toggling function ++ this._bindSettingsChanges(); ++ } ++ ++ static getDefault() { ++ return Me.imports.extension.dockManager ++ } ++ ++ static get allDocks() { ++ return DockManager.getDefault()._allDocks; ++ } ++ ++ static get settings() { ++ return DockManager.getDefault()._settings; ++ } ++ ++ get fm1Client() { ++ return this._fm1Client; ++ } ++ ++ get mainDock() { ++ return this._allDocks.length ? this._allDocks[0] : null; ++ } ++ ++ _ensureFileManagerClient() { ++ let supportsLocations = ['show-trash', 'show-mounts'].some((s) => { ++ return this._settings.get_boolean(s); ++ }); ++ ++ if (supportsLocations) { ++ if (!this._fm1Client) ++ this._fm1Client = new FileManager1API.FileManager1Client(); ++ } else if (this._fm1Client) { ++ this._fm1Client.destroy(); ++ this._fm1Client = null; ++ } ++ } ++ ++ _toggle() { ++ if (this._toggleLater) ++ Meta.later_remove(this._toggleLater); ++ ++ this._toggleLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => { ++ delete this._toggleLater; ++ this._restoreDash(); ++ this._deleteDocks(); ++ this._createDocks(); ++ this.emit('toggled'); ++ }); ++ } ++ ++ _bindSettingsChanges() { ++ // Connect relevant signals to the toggling function ++ this._signalsHandler.add([ ++ Meta.MonitorManager.get(), ++ 'monitors-changed', ++ this._toggle.bind(this) ++ ], [ ++ Main.sessionMode, ++ 'updated', ++ this._toggle.bind(this) ++ ], [ ++ this._settings, ++ 'changed::multi-monitor', ++ this._toggle.bind(this) ++ ], [ ++ this._settings, ++ 'changed::preferred-monitor', ++ this._toggle.bind(this) ++ ], [ ++ this._settings, ++ 'changed::dock-position', ++ this._toggle.bind(this) ++ ], [ ++ this._settings, ++ 'changed::extend-height', ++ this._adjustPanelCorners.bind(this) ++ ], [ ++ this._settings, ++ 'changed::dock-fixed', ++ this._adjustPanelCorners.bind(this) ++ ], [ ++ this._settings, ++ 'changed::show-trash', ++ () => this._ensureFileManagerClient() ++ ], [ ++ this._settings, ++ 'changed::show-mounts', ++ () => this._ensureFileManagerClient() ++ ]); ++ } ++ ++ _createDocks() { ++ ++ // If there are no monitors (headless configurations, but it can also happen temporary while disconnecting ++ // and reconnecting monitors), just do nothing. When a monitor will be connected we we'll be notified and ++ // and thus create the docks. This prevents pointing trying to access monitors throughout the code, were we ++ // are assuming that at least the primary monitor is present. ++ if (Main.layoutManager.monitors.length <= 0) { ++ return; ++ } ++ ++ this._preferredMonitorIndex = this._settings.get_int('preferred-monitor'); ++ // In case of multi-monitor, we consider the dock on the primary monitor to be the preferred (main) one ++ // regardless of the settings ++ // The dock goes on the primary monitor also if the settings are incosistent (e.g. desired monitor not connected). ++ if (this._settings.get_boolean('multi-monitor') || ++ this._preferredMonitorIndex < 0 || this._preferredMonitorIndex > Main.layoutManager.monitors.length - 1 ++ ) { ++ this._preferredMonitorIndex = Main.layoutManager.primaryIndex; ++ } else { ++ // Gdk and shell monitors numbering differ at least under wayland: ++ // While the primary monitor appears to be always index 0 in Gdk, ++ // the shell can assign a different number (Main.layoutManager.primaryMonitor) ++ // This ensure the indexing in the settings (Gdk) and in the shell are matched, ++ // i.e. that we start counting from the primaryMonitorIndex ++ this._preferredMonitorIndex = (Main.layoutManager.primaryIndex + this._preferredMonitorIndex) % Main.layoutManager.monitors.length ; ++ } ++ ++ // First we create the main Dock, to get the extra features to bind to this one ++ let dock = new DockedDash(this._remoteModel, this._preferredMonitorIndex); ++ this._allDocks.push(dock); ++ ++ // connect app icon into the view selector ++ dock.dash.showAppsButton.connect('notify::checked', this._onShowAppsButtonToggled.bind(this)); ++ ++ // Make the necessary changes to Main.overview.dash ++ this._prepareMainDash(); ++ ++ // Adjust corners if necessary ++ this._adjustPanelCorners(); ++ ++ if (this._settings.get_boolean('multi-monitor')) { ++ let nMon = Main.layoutManager.monitors.length; ++ for (let iMon = 0; iMon < nMon; iMon++) { ++ if (iMon == this._preferredMonitorIndex) ++ continue; ++ let dock = new DockedDash(this._remoteModel, iMon); ++ this._allDocks.push(dock); ++ // connect app icon into the view selector ++ dock.dash.showAppsButton.connect('notify::checked', this._onShowAppsButtonToggled.bind(this)); ++ } ++ } ++ ++ // Load optional features. We load *after* the docks are created, since ++ // we need to connect the signals to all dock instances. ++ this._workspaceIsolation = new WorkspaceIsolation(); ++ this._keyboardShortcuts = new KeyboardShortcuts(); ++ } ++ ++ _prepareMainDash() { ++ // Ensure Main.overview.dash is set to our dash in dummy mode ++ // while just use the default getter otherwise. ++ // The getter must be dynamic and not set only when we've a dummy ++ // overview because the mode can change dynamically. ++ let defaultDashGetter = Object.getOwnPropertyDescriptor( ++ Main.overview.constructor.prototype, 'dash').get; ++ Object.defineProperty(Main.overview, 'dash', { ++ configurable: true, ++ get: () => Main.overview.isDummy ? ++ this.mainDock.dash : defaultDashGetter.call(Main.overview), ++ }); ++ ++ if (Main.overview.isDummy) ++ return; ++ ++ this._signalsHandler.removeWithLabel('old-dash-changes'); ++ ++ // Hide usual Dash ++ this._oldDash.hide(); ++ ++ // Also set dash width to 1, so it's almost not taken into account by code ++ // calculaing the reserved space in the overview. The reason to keep it at 1 is ++ // to allow its visibility change to trigger an allocaion of the appGrid which ++ // in turn is triggergin the appsIcon spring animation, required when no other ++ // actors has this effect, i.e in horizontal mode and without the workspaceThumnails ++ // 1 static workspace only) ++ this._oldDash.set_height(1); ++ ++ this._signalsHandler.addWithLabel('old-dash-changes', [ ++ this._oldDash, ++ 'notify::visible', ++ () => this._prepareMainDash() ++ ], [ ++ this._oldDash, ++ 'notify::width', ++ () => this._prepareMainDash() ++ ]); ++ ++ // Pretend I'm the dash: meant to make appgrid swarm animation come from ++ // the right position of the appShowButton. ++ let overviewControls = Main.overview._overview._controls; ++ overviewControls.dash = this.mainDock.dash; ++ overviewControls._searchController._showAppsButton = this.mainDock.dash.showAppsButton; ++ ++ if (this.mainDock.dash._isHorizontal) { ++ overviewControls._dashSpacer = this.mainDock._dashSpacer; ++ Main.overview._overview._controls.add_child(this.mainDock._dashSpacer); ++ Main.overview._overview._controls.layout_manager._dash = this.mainDock._dashSpacer; ++ } ++ } ++ ++ _deleteDocks() { ++ if (!this._allDocks.length) ++ return; ++ ++ // Remove extra features ++ this._workspaceIsolation.destroy(); ++ this._keyboardShortcuts.destroy(); ++ ++ // Delete all docks ++ this._allDocks.forEach(d => d.destroy()); ++ this._allDocks = []; ++ } ++ ++ _restoreDash() { ++ Object.defineProperty(Main.overview, 'dash', ++ Object.getOwnPropertyDescriptor( ++ Main.overview.constructor.prototype, 'dash')); ++ ++ if (!this._oldDash) ++ return; ++ ++ this._signalsHandler.removeWithLabel('old-dash-changes'); ++ ++ let overviewControls = Main.overview._overview._controls; ++ Main.overview._overview._controls.layout_manager._dash = this._oldDash; ++ if (this.mainDock._dashSpacer) { ++ Main.overview._overview._controls.remove_child(this.mainDock._dashSpacer); ++ } ++ ++ overviewControls.dash = this._oldDash; ++ overviewControls._searchController._showAppsButton = this._oldDash.showAppsButton; ++ Main.overview.dash.show(); ++ Main.overview.dash.set_height(-1); // reset default dash size ++ // This force the recalculation of the icon size ++ Main.overview.dash._maxHeight = -1; ++ } ++ ++ get searchController() { ++ return Main.overview._overview.controls._searchController; ++ } ++ ++ _onShowAppsButtonToggled(button) { ++ const checked = button.checked; ++ const overviewControls = Main.overview._overview.controls; ++ ++ if (!Main.overview.visible) { ++ this.mainDock.dash.showAppsButton._fromDesktop = true; ++ Main.overview.show(OverviewControls.ControlsState.APP_GRID); ++ } else { ++ if (!checked && this.mainDock.dash.showAppsButton._fromDesktop) { ++ Main.overview.hide(); ++ this.mainDock.dash.showAppsButton._fromDesktop = false; ++ } else { ++ // TODO: I'm not sure how reliable this is, we might need to move the ++ // _onShowAppsButtonToggled logic into the extension. ++ if (!checked) { ++ this.mainDock.dash.showAppsButton._fromDesktop = false; ++ } ++ ++ // Instead of "syncing" the stock button, let's call its callback directly. ++ overviewControls._onShowAppsButtonToggled.call(overviewControls); ++ } ++ } ++ ++ // Because we "disconnected" from the search controller, we have to manage its state. ++ this.searchController._setSearchActive(false); ++ } ++ ++ destroy() { ++ this._signalsHandler.destroy(); ++ if (this._toggleLater) { ++ Meta.later_remove(this._toggleLater); ++ delete this._toggleLater; ++ } ++ this._restoreDash(); ++ this._deleteDocks(); ++ this._revertPanelCorners(); ++ if (this._oldSelectorMargin) ++ Main.overview._overview.controls._searchController.margin_bottom = this._oldSelectorMargin; ++ if (this._fm1Client) { ++ this._fm1Client.destroy(); ++ this._fm1Client = null; ++ } ++ this._remoteModel.destroy(); ++ this._settings.run_dispose(); ++ this._settings = null; ++ this._oldDash = null; ++ ++ Me.imports.extension.dockManager = null; ++ } ++ ++ /** ++ * Adjust Panel corners ++ */ ++ _adjustPanelCorners() { ++ let position = Utils.getPosition(); ++ let isHorizontal = ((position == St.Side.TOP) || (position == St.Side.BOTTOM)); ++ let extendHeight = this._settings.get_boolean('extend-height'); ++ let fixedIsEnabled = this._settings.get_boolean('dock-fixed'); ++ let dockOnPrimary = this._settings.get_boolean('multi-monitor') || ++ this._preferredMonitorIndex == Main.layoutManager.primaryIndex; ++ ++ if (!isHorizontal && dockOnPrimary && extendHeight && fixedIsEnabled) { ++ Main.panel._rightCorner.hide(); ++ Main.panel._leftCorner.hide(); ++ } ++ else ++ this._revertPanelCorners(); ++ } ++ ++ _revertPanelCorners() { ++ Main.panel._leftCorner.show(); ++ Main.panel._rightCorner.show(); ++ } ++}; ++Signals.addSignalMethods(DockManager.prototype); ++ ++// This class drives long-running icon animations, to keep them running in sync ++// with each other, and to save CPU by pausing them when the dock is hidden. ++var IconAnimator = class DashToDock_IconAnimator { ++ constructor(actor) { ++ this._count = 0; ++ this._started = false; ++ this._animations = { ++ dance: [], ++ }; ++ this._timeline = new Clutter.Timeline({ ++ duration: 3000, ++ repeat_count: -1, ++ actor ++ }); ++ ++ this._timeline.connect('new-frame', () => { ++ const progress = this._timeline.get_progress(); ++ const danceRotation = progress < 1/6 ? 15*Math.sin(progress*24*Math.PI) : 0; ++ const dancers = this._animations.dance; ++ for (let i = 0, iMax = dancers.length; i < iMax; i++) { ++ dancers[i].target.rotation_angle_z = danceRotation; ++ } ++ }); ++ } ++ ++ destroy() { ++ this._timeline.stop(); ++ this._timeline = null; ++ for (const name in this._animations) { ++ const pairs = this._animations[name]; ++ for (let i = 0, iMax = pairs.length; i < iMax; i++) { ++ const pair = pairs[i]; ++ pair.target.disconnect(pair.targetDestroyId); ++ } ++ } ++ this._animations = null; ++ } ++ ++ pause() { ++ if (this._started && this._count > 0) { ++ this._timeline.stop(); ++ } ++ this._started = false; ++ } ++ ++ start() { ++ if (!this._started && this._count > 0) { ++ this._timeline.start(); ++ } ++ this._started = true; ++ } ++ ++ addAnimation(target, name) { ++ const targetDestroyId = target.connect('destroy', () => this.removeAnimation(target, name)); ++ this._animations[name].push({ target, targetDestroyId }); ++ if (this._started && this._count === 0) { ++ this._timeline.start(); ++ } ++ this._count++; ++ } ++ ++ removeAnimation(target, name) { ++ const pairs = this._animations[name]; ++ for (let i = 0, iMax = pairs.length; i < iMax; i++) { ++ const pair = pairs[i]; ++ if (pair.target === target) { ++ target.disconnect(pair.targetDestroyId); ++ pairs.splice(i, 1); ++ this._count--; ++ if (this._started && this._count === 0) { ++ this._timeline.stop(); ++ } ++ return; ++ } ++ } ++ } ++}; +diff --git a/extensions/dash-to-dock/extension.js b/extensions/dash-to-dock/extension.js +new file mode 100644 +index 00000000..4b43d773 +--- /dev/null ++++ b/extensions/dash-to-dock/extension.js +@@ -0,0 +1,21 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const Docking = Me.imports.docking; ++ ++// We declare this with var so it can be accessed by other extensions in ++// GNOME Shell 3.26+ (mozjs52+). ++var dockManager; ++ ++function init() { ++ ExtensionUtils.initTranslations('gnome-shell-extensions'); ++} ++ ++function enable() { ++ new Docking.DockManager(); ++} ++ ++function disable() { ++ dockManager.destroy(); ++} +diff --git a/extensions/dash-to-dock/fileManager1API.js b/extensions/dash-to-dock/fileManager1API.js +new file mode 100644 +index 00000000..64ec6219 +--- /dev/null ++++ b/extensions/dash-to-dock/fileManager1API.js +@@ -0,0 +1,226 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Gio = imports.gi.Gio; ++const Signals = imports.signals; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Utils = Me.imports.utils; ++ ++const FileManager1Iface = '\ ++ \ ++ \ ++ '; ++ ++const FileManager1Proxy = Gio.DBusProxy.makeProxyWrapper(FileManager1Iface); ++ ++/** ++ * This class implements a client for the org.freedesktop.FileManager1 dbus ++ * interface, and specifically for the OpenWindowsWithLocations property ++ * which is published by Nautilus, but is not an official part of the interface. ++ * ++ * The property is a map from window identifiers to a list of locations open in ++ * the window. ++ * ++ * While OpeWindowsWithLocations is part of upstream Nautilus, for many years ++ * prior, Ubuntu patched Nautilus to publish XUbuntuOpenLocationsXids, which is ++ * similar but uses Xids as the window identifiers instead of gtk window paths. ++ * ++ * When an old or unpatched Nautilus is running, we will observe the properties ++ * to always be empty arrays, but there will not be any correctness issues. ++ */ ++var FileManager1Client = class DashToDock_FileManager1Client { ++ ++ constructor() { ++ this._signalsHandler = new Utils.GlobalSignalsHandler(); ++ this._cancellable = new Gio.Cancellable(); ++ ++ this._locationMap = new Map(); ++ this._proxy = new FileManager1Proxy(Gio.DBus.session, ++ "org.freedesktop.FileManager1", ++ "/org/freedesktop/FileManager1", ++ (initable, error) => { ++ // Use async construction to avoid blocking on errors. ++ if (error) { ++ if (!error.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) ++ global.log(error); ++ } else { ++ this._updateLocationMap(); ++ } ++ }, this._cancellable); ++ ++ this._signalsHandler.add([ ++ this._proxy, ++ 'g-properties-changed', ++ this._onPropertyChanged.bind(this) ++ ], [ ++ // We must additionally listen for Screen events to know when to ++ // rebuild our location map when the set of available windows changes. ++ global.workspace_manager, ++ 'workspace-switched', ++ this._updateLocationMap.bind(this) ++ ], [ ++ global.display, ++ 'window-entered-monitor', ++ this._updateLocationMap.bind(this) ++ ], [ ++ global.display, ++ 'window-left-monitor', ++ this._updateLocationMap.bind(this) ++ ]); ++ } ++ ++ destroy() { ++ this._cancellable.cancel(); ++ this._signalsHandler.destroy(); ++ this._proxy.run_dispose(); ++ } ++ ++ /** ++ * Return an array of windows that are showing a location or ++ * sub-directories of that location. ++ */ ++ getWindows(location) { ++ let ret = new Set(); ++ let locationEsc = location; ++ ++ if (!location.endsWith('/')) { ++ locationEsc += '/'; ++ } ++ ++ for (let [k,v] of this._locationMap) { ++ if ((k + '/').startsWith(locationEsc)) { ++ for (let l of v) { ++ ret.add(l); ++ } ++ } ++ } ++ return Array.from(ret); ++ } ++ ++ _onPropertyChanged(proxy, changed, invalidated) { ++ let property = changed.unpack(); ++ if (property && ++ ('XUbuntuOpenLocationsXids' in property || ++ 'OpenWindowsWithLocations' in property)) { ++ this._updateLocationMap(); ++ } ++ } ++ ++ _updateLocationMap() { ++ let properties = this._proxy.get_cached_property_names(); ++ if (properties == null) { ++ // Nothing to check yet. ++ return; ++ } ++ ++ if (properties.includes('OpenWindowsWithLocations')) { ++ this._updateFromPaths(); ++ } else if (properties.includes('XUbuntuOpenLocationsXids')) { ++ this._updateFromXids(); ++ } ++ } ++ ++ _updateFromPaths() { ++ let pathToLocations = this._proxy.OpenWindowsWithLocations; ++ let pathToWindow = getPathToWindow(); ++ ++ let locationToWindow = new Map(); ++ for (let path in pathToLocations) { ++ let locations = pathToLocations[path]; ++ for (let i = 0; i < locations.length; i++) { ++ let l = locations[i]; ++ // Use a set to deduplicate when a window has a ++ // location open in multiple tabs. ++ if (!locationToWindow.has(l)) { ++ locationToWindow.set(l, new Set()); ++ } ++ let window = pathToWindow.get(path); ++ if (window != null) { ++ locationToWindow.get(l).add(window); ++ } ++ } ++ } ++ this._locationMap = locationToWindow; ++ this.emit('windows-changed'); ++ } ++ ++ _updateFromXids() { ++ let xidToLocations = this._proxy.XUbuntuOpenLocationsXids; ++ let xidToWindow = getXidToWindow(); ++ ++ let locationToWindow = new Map(); ++ for (let xid in xidToLocations) { ++ let locations = xidToLocations[xid]; ++ for (let i = 0; i < locations.length; i++) { ++ let l = locations[i]; ++ // Use a set to deduplicate when a window has a ++ // location open in multiple tabs. ++ if (!locationToWindow.has(l)) { ++ locationToWindow.set(l, new Set()); ++ } ++ let window = xidToWindow.get(parseInt(xid)); ++ if (window != null) { ++ locationToWindow.get(l).add(window); ++ } ++ } ++ } ++ this._locationMap = locationToWindow; ++ this.emit('windows-changed'); ++ } ++} ++Signals.addSignalMethods(FileManager1Client.prototype); ++ ++/** ++ * Construct a map of gtk application window object paths to MetaWindows. ++ */ ++function getPathToWindow() { ++ let pathToWindow = new Map(); ++ ++ for (let i = 0; i < global.workspace_manager.n_workspaces; i++) { ++ let ws = global.workspace_manager.get_workspace_by_index(i); ++ ws.list_windows().map(function(w) { ++ let path = w.get_gtk_window_object_path(); ++ if (path != null) { ++ pathToWindow.set(path, w); ++ } ++ }); ++ } ++ return pathToWindow; ++} ++ ++/** ++ * Construct a map of XIDs to MetaWindows. ++ * ++ * This is somewhat annoying as you cannot lookup a window by ++ * XID in any way, and must iterate through all of them looking ++ * for a match. ++ */ ++function getXidToWindow() { ++ let xidToWindow = new Map(); ++ ++ for (let i = 0; i < global.workspace_manager.n_workspaces; i++) { ++ let ws = global.workspace_manager.get_workspace_by_index(i); ++ ws.list_windows().map(function(w) { ++ let xid = guessWindowXID(w); ++ if (xid != null) { ++ xidToWindow.set(parseInt(xid), w); ++ } ++ }); ++ } ++ return xidToWindow; ++} ++ ++/** ++ * Guesses the X ID of a window. ++ * ++ * This is the basic implementation that is sufficient for Nautilus ++ * windows. The pixel-saver extension has a much more complex ++ * implementation if we ever need it. ++ */ ++function guessWindowXID(win) { ++ try { ++ return win.get_description().match(/0x[0-9a-f]+/)[0]; ++ } catch (err) { ++ return null; ++ } ++} +diff --git a/extensions/dash-to-dock/intellihide.js b/extensions/dash-to-dock/intellihide.js +new file mode 100644 +index 00000000..9c10938e +--- /dev/null ++++ b/extensions/dash-to-dock/intellihide.js +@@ -0,0 +1,321 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const GLib = imports.gi.GLib; ++const Meta = imports.gi.Meta; ++const Shell = imports.gi.Shell; ++ ++const Main = imports.ui.main; ++const Signals = imports.signals; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Docking = Me.imports.docking; ++const Utils = Me.imports.utils; ++ ++// A good compromise between reactivity and efficiency; to be tuned. ++const INTELLIHIDE_CHECK_INTERVAL = 100; ++ ++const OverlapStatus = { ++ UNDEFINED: -1, ++ FALSE: 0, ++ TRUE: 1 ++}; ++ ++const IntellihideMode = { ++ ALL_WINDOWS: 0, ++ FOCUS_APPLICATION_WINDOWS: 1, ++ MAXIMIZED_WINDOWS : 2 ++}; ++ ++// List of windows type taken into account. Order is important (keep the original ++// enum order). ++const handledWindowTypes = [ ++ Meta.WindowType.NORMAL, ++ Meta.WindowType.DOCK, ++ Meta.WindowType.DIALOG, ++ Meta.WindowType.MODAL_DIALOG, ++ Meta.WindowType.TOOLBAR, ++ Meta.WindowType.MENU, ++ Meta.WindowType.UTILITY, ++ Meta.WindowType.SPLASHSCREEN ++]; ++ ++/** ++ * A rough and ugly implementation of the intellihide behaviour. ++ * Intallihide object: emit 'status-changed' signal when the overlap of windows ++ * with the provided targetBoxClutter.ActorBox changes; ++ */ ++var Intellihide = class DashToDock_Intellihide { ++ ++ constructor(monitorIndex) { ++ // Load settings ++ this._monitorIndex = monitorIndex; ++ ++ this._signalsHandler = new Utils.GlobalSignalsHandler(); ++ this._tracker = Shell.WindowTracker.get_default(); ++ this._focusApp = null; // The application whose window is focused. ++ this._topApp = null; // The application whose window is on top on the monitor with the dock. ++ ++ this._isEnabled = false; ++ this.status = OverlapStatus.UNDEFINED; ++ this._targetBox = null; ++ ++ this._checkOverlapTimeoutContinue = false; ++ this._checkOverlapTimeoutId = 0; ++ ++ this._trackedWindows = new Map(); ++ ++ // Connect global signals ++ this._signalsHandler.add([ ++ // Add signals on windows created from now on ++ global.display, ++ 'window-created', ++ this._windowCreated.bind(this) ++ ], [ ++ // triggered for instance when the window list order changes, ++ // included when the workspace is switched ++ global.display, ++ 'restacked', ++ this._checkOverlap.bind(this) ++ ], [ ++ // when windows are alwasy on top, the focus window can change ++ // without the windows being restacked. Thus monitor window focus change. ++ this._tracker, ++ 'notify::focus-app', ++ this._checkOverlap.bind(this) ++ ], [ ++ // update wne monitor changes, for instance in multimonitor when monitor are attached ++ Meta.MonitorManager.get(), ++ 'monitors-changed', ++ this._checkOverlap.bind(this) ++ ]); ++ } ++ ++ destroy() { ++ // Disconnect global signals ++ this._signalsHandler.destroy(); ++ ++ // Remove residual windows signals ++ this.disable(); ++ } ++ ++ enable() { ++ this._isEnabled = true; ++ this._status = OverlapStatus.UNDEFINED; ++ global.get_window_actors().forEach(function(wa) { ++ this._addWindowSignals(wa); ++ }, this); ++ this._doCheckOverlap(); ++ } ++ ++ disable() { ++ this._isEnabled = false; ++ ++ for (let wa of this._trackedWindows.keys()) { ++ this._removeWindowSignals(wa); ++ } ++ this._trackedWindows.clear(); ++ ++ if (this._checkOverlapTimeoutId > 0) { ++ GLib.source_remove(this._checkOverlapTimeoutId); ++ this._checkOverlapTimeoutId = 0; ++ } ++ } ++ ++ _windowCreated(display, metaWindow) { ++ this._addWindowSignals(metaWindow.get_compositor_private()); ++ } ++ ++ _addWindowSignals(wa) { ++ if (!this._handledWindow(wa)) ++ return; ++ let signalId = wa.connect('notify::allocation', this._checkOverlap.bind(this)); ++ this._trackedWindows.set(wa, signalId); ++ wa.connect('destroy', this._removeWindowSignals.bind(this)); ++ } ++ ++ _removeWindowSignals(wa) { ++ if (this._trackedWindows.get(wa)) { ++ wa.disconnect(this._trackedWindows.get(wa)); ++ this._trackedWindows.delete(wa); ++ } ++ ++ } ++ ++ updateTargetBox(box) { ++ this._targetBox = box; ++ this._checkOverlap(); ++ } ++ ++ forceUpdate() { ++ this._status = OverlapStatus.UNDEFINED; ++ this._doCheckOverlap(); ++ } ++ ++ getOverlapStatus() { ++ return (this._status == OverlapStatus.TRUE); ++ } ++ ++ _checkOverlap() { ++ if (!this._isEnabled || (this._targetBox == null)) ++ return; ++ ++ /* Limit the number of calls to the doCheckOverlap function */ ++ if (this._checkOverlapTimeoutId) { ++ this._checkOverlapTimeoutContinue = true; ++ return ++ } ++ ++ this._doCheckOverlap(); ++ ++ this._checkOverlapTimeoutId = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, INTELLIHIDE_CHECK_INTERVAL, () => { ++ this._doCheckOverlap(); ++ if (this._checkOverlapTimeoutContinue) { ++ this._checkOverlapTimeoutContinue = false; ++ return GLib.SOURCE_CONTINUE; ++ } else { ++ this._checkOverlapTimeoutId = 0; ++ return GLib.SOURCE_REMOVE; ++ } ++ }); ++ } ++ ++ _doCheckOverlap() { ++ ++ if (!this._isEnabled || (this._targetBox == null)) ++ return; ++ ++ let overlaps = OverlapStatus.FALSE; ++ let windows = global.get_window_actors(); ++ ++ if (windows.length > 0) { ++ /* ++ * Get the top window on the monitor where the dock is placed. ++ * The idea is that we dont want to overlap with the windows of the topmost application, ++ * event is it's not the focused app -- for instance because in multimonitor the user ++ * select a window in the secondary monitor. ++ */ ++ ++ let topWindow = null; ++ for (let i = windows.length - 1; i >= 0; i--) { ++ let meta_win = windows[i].get_meta_window(); ++ if (this._handledWindow(windows[i]) && (meta_win.get_monitor() == this._monitorIndex)) { ++ topWindow = meta_win; ++ break; ++ } ++ } ++ ++ if (topWindow !== null) { ++ this._topApp = this._tracker.get_window_app(topWindow); ++ // If there isn't a focused app, use that of the window on top ++ this._focusApp = this._tracker.focus_app || this._topApp ++ ++ windows = windows.filter(this._intellihideFilterInteresting, this); ++ ++ for (let i = 0; i < windows.length; i++) { ++ let win = windows[i].get_meta_window(); ++ ++ if (win) { ++ let rect = win.get_frame_rect(); ++ ++ let test = (rect.x < this._targetBox.x2) && ++ (rect.x + rect.width > this._targetBox.x1) && ++ (rect.y < this._targetBox.y2) && ++ (rect.y + rect.height > this._targetBox.y1); ++ ++ if (test) { ++ overlaps = OverlapStatus.TRUE; ++ break; ++ } ++ } ++ } ++ } ++ } ++ ++ if (this._status !== overlaps) { ++ this._status = overlaps; ++ this.emit('status-changed', this._status); ++ } ++ ++ } ++ ++ // Filter interesting windows to be considered for intellihide. ++ // Consider all windows visible on the current workspace. ++ // Optionally skip windows of other applications ++ _intellihideFilterInteresting(wa) { ++ let meta_win = wa.get_meta_window(); ++ if (!this._handledWindow(wa)) ++ return false; ++ ++ let currentWorkspace = global.workspace_manager.get_active_workspace_index(); ++ let wksp = meta_win.get_workspace(); ++ let wksp_index = wksp.index(); ++ ++ // Depending on the intellihide mode, exclude non-relevent windows ++ switch (Docking.DockManager.settings.get_enum('intellihide-mode')) { ++ case IntellihideMode.ALL_WINDOWS: ++ // Do nothing ++ break; ++ ++ case IntellihideMode.FOCUS_APPLICATION_WINDOWS: ++ // Skip windows of other apps ++ if (this._focusApp) { ++ // The DropDownTerminal extension is not an application per se ++ // so we match its window by wm class instead ++ if (meta_win.get_wm_class() == 'DropDownTerminalWindow') ++ return true; ++ ++ let currentApp = this._tracker.get_window_app(meta_win); ++ let focusWindow = global.display.get_focus_window() ++ ++ // Consider half maximized windows side by side ++ // and windows which are alwayson top ++ if((currentApp != this._focusApp) && (currentApp != this._topApp) ++ && !((focusWindow && focusWindow.maximized_vertically && !focusWindow.maximized_horizontally) ++ && (meta_win.maximized_vertically && !meta_win.maximized_horizontally) ++ && meta_win.get_monitor() == focusWindow.get_monitor()) ++ && !meta_win.is_above()) ++ return false; ++ } ++ break; ++ ++ case IntellihideMode.MAXIMIZED_WINDOWS: ++ // Skip unmaximized windows ++ if (!meta_win.maximized_vertically && !meta_win.maximized_horizontally) ++ return false; ++ break; ++ } ++ ++ if ( wksp_index == currentWorkspace && meta_win.showing_on_its_workspace() ) ++ return true; ++ else ++ return false; ++ ++ } ++ ++ // Filter windows by type ++ // inspired by Opacify@gnome-shell.localdomain.pl ++ _handledWindow(wa) { ++ let metaWindow = wa.get_meta_window(); ++ ++ if (!metaWindow) ++ return false; ++ ++ // The DropDownTerminal extension uses the POPUP_MENU window type hint ++ // so we match its window by wm class instead ++ if (metaWindow.get_wm_class() == 'DropDownTerminalWindow') ++ return true; ++ ++ let wtype = metaWindow.get_window_type(); ++ for (let i = 0; i < handledWindowTypes.length; i++) { ++ var hwtype = handledWindowTypes[i]; ++ if (hwtype == wtype) ++ return true; ++ else if (hwtype > wtype) ++ return false; ++ } ++ return false; ++ } ++}; ++ ++Signals.addSignalMethods(Intellihide.prototype); +diff --git a/extensions/dash-to-dock/launcherAPI.js b/extensions/dash-to-dock/launcherAPI.js +new file mode 100644 +index 00000000..55f44f7a +--- /dev/null ++++ b/extensions/dash-to-dock/launcherAPI.js +@@ -0,0 +1,281 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Gio = imports.gi.Gio; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const DbusmenuUtils = Me.imports.dbusmenuUtils; ++ ++const Dbusmenu = DbusmenuUtils.haveDBusMenu(); ++ ++var LauncherEntryRemoteModel = class DashToDock_LauncherEntryRemoteModel { ++ ++ constructor() { ++ this._entrySourceStacks = new Map(); ++ this._remoteMaps = new Map(); ++ ++ this._launcher_entry_dbus_signal_id = ++ Gio.DBus.session.signal_subscribe(null, // sender ++ 'com.canonical.Unity.LauncherEntry', // iface ++ 'Update', // member ++ null, // path ++ null, // arg0 ++ Gio.DBusSignalFlags.NONE, ++ (connection, sender_name, object_path, interface_name, signal_name, parameters) => ++ this._onUpdate(sender_name, ...parameters.deep_unpack())); ++ ++ this._dbus_name_owner_changed_signal_id = ++ Gio.DBus.session.signal_subscribe('org.freedesktop.DBus', // sender ++ 'org.freedesktop.DBus', // interface ++ 'NameOwnerChanged', // member ++ '/org/freedesktop/DBus', // path ++ null, // arg0 ++ Gio.DBusSignalFlags.NONE, ++ (connection, sender_name, object_path, interface_name, signal_name, parameters) => ++ this._onDBusNameChange(...parameters.deep_unpack().slice(1))); ++ ++ this._acquireUnityDBus(); ++ } ++ ++ destroy() { ++ if (this._launcher_entry_dbus_signal_id) { ++ Gio.DBus.session.signal_unsubscribe(this._launcher_entry_dbus_signal_id); ++ } ++ ++ if (this._dbus_name_owner_changed_signal_id) { ++ Gio.DBus.session.signal_unsubscribe(this._dbus_name_owner_changed_signal_id); ++ } ++ ++ this._releaseUnityDBus(); ++ } ++ ++ _lookupStackById(appId) { ++ let sourceStack = this._entrySourceStacks.get(appId); ++ if (!sourceStack) { ++ this._entrySourceStacks.set(appId, sourceStack = new PropertySourceStack(new LauncherEntry(), launcherEntryDefaults)); ++ } ++ return sourceStack; ++ } ++ ++ lookupById(appId) { ++ return this._lookupStackById(appId).target; ++ } ++ ++ _acquireUnityDBus() { ++ if (!this._unity_bus_id) { ++ this._unity_bus_id = Gio.DBus.session.own_name('com.canonical.Unity', ++ Gio.BusNameOwnerFlags.ALLOW_REPLACEMENT | Gio.BusNameOwnerFlags.REPLACE, ++ null, () => this._unity_bus_id = 0); ++ } ++ } ++ ++ _releaseUnityDBus() { ++ if (this._unity_bus_id) { ++ Gio.DBus.session.unown_name(this._unity_bus_id); ++ this._unity_bus_id = 0; ++ } ++ } ++ ++ _onDBusNameChange(before, after) { ++ if (!before || !this._remoteMaps.size) { ++ return; ++ } ++ const remoteMap = this._remoteMaps.get(before); ++ if (!remoteMap) { ++ return; ++ } ++ this._remoteMaps.delete(before); ++ if (after && !this._remoteMaps.has(after)) { ++ this._remoteMaps.set(after, remoteMap); ++ } else { ++ for (const [appId, remote] of remoteMap) { ++ const sourceStack = this._entrySourceStacks.get(appId); ++ const changed = sourceStack.remove(remote); ++ if (changed) { ++ sourceStack.target._emitChangedEvents(changed); ++ } ++ } ++ } ++ } ++ ++ _onUpdate(senderName, appUri, properties) { ++ if (!senderName) { ++ return; ++ } ++ ++ const appId = appUri.replace(/(^\w+:|^)\/\//, ''); ++ if (!appId) { ++ return; ++ } ++ ++ let remoteMap = this._remoteMaps.get(senderName); ++ if (!remoteMap) { ++ this._remoteMaps.set(senderName, remoteMap = new Map()); ++ } ++ let remote = remoteMap.get(appId); ++ if (!remote) { ++ remoteMap.set(appId, remote = Object.assign({}, launcherEntryDefaults)); ++ } ++ for (const name in properties) { ++ if (name === 'quicklist' && Dbusmenu) { ++ const quicklistPath = properties[name].unpack(); ++ if (quicklistPath && (!remote._quicklistMenuClient || remote._quicklistMenuClient.dbus_object !== quicklistPath)) { ++ remote.quicklist = null; ++ let menuClient = remote._quicklistMenuClient; ++ if (menuClient) { ++ menuClient.dbus_object = quicklistPath; ++ } else { ++ // This property should not be enumerable ++ Object.defineProperty(remote, '_quicklistMenuClient', { ++ writable: true, ++ value: menuClient = new Dbusmenu.Client({ dbus_name: senderName, dbus_object: quicklistPath }), ++ }); ++ } ++ const handler = () => { ++ const root = menuClient.get_root(); ++ if (remote.quicklist !== root) { ++ remote.quicklist = root; ++ if (sourceStack.isTop(remote)) { ++ sourceStack.target.quicklist = root; ++ sourceStack.target._emitChangedEvents(['quicklist']); ++ } ++ } ++ }; ++ menuClient.connect(Dbusmenu.CLIENT_SIGNAL_ROOT_CHANGED, handler); ++ } ++ } else { ++ remote[name] = properties[name].unpack(); ++ } ++ } ++ ++ const sourceStack = this._lookupStackById(appId); ++ sourceStack.target._emitChangedEvents(sourceStack.update(remote)); ++ } ++}; ++ ++const launcherEntryDefaults = { ++ count: 0, ++ progress: 0, ++ urgent: false, ++ quicklist: null, ++ 'count-visible': false, ++ 'progress-visible': false, ++}; ++ ++const LauncherEntry = class DashToDock_LauncherEntry { ++ constructor() { ++ this._connections = new Map(); ++ this._handlers = new Map(); ++ this._nextId = 0; ++ } ++ ++ connect(eventNames, callback) { ++ if (typeof eventNames === 'string') { ++ eventNames = [eventNames]; ++ } ++ callback(this, this); ++ const id = this._nextId++; ++ const handler = { id, callback }; ++ eventNames.forEach(name => { ++ let handlerList = this._handlers.get(name); ++ if (!handlerList) { ++ this._handlers.set(name, handlerList = []); ++ } ++ handlerList.push(handler); ++ }); ++ this._connections.set(id, eventNames); ++ return id; ++ } ++ ++ disconnect(id) { ++ const eventNames = this._connections.get(id); ++ if (!eventNames) { ++ return; ++ } ++ this._connections.delete(id); ++ eventNames.forEach(name => { ++ const handlerList = this._handlers.get(name); ++ if (handlerList) { ++ for (let i = 0, iMax = handlerList.length; i < iMax; i++) { ++ if (handlerList[i].id === id) { ++ handlerList.splice(i, 1); ++ break; ++ } ++ } ++ } ++ }); ++ } ++ ++ _emitChangedEvents(propertyNames) { ++ const handlers = new Set(); ++ propertyNames.forEach(name => { ++ const handlerList = this._handlers.get(name + '-changed'); ++ if (handlerList) { ++ for (let i = 0, iMax = handlerList.length; i < iMax; i++) { ++ handlers.add(handlerList[i]); ++ } ++ } ++ }); ++ Array.from(handlers).sort((x, y) => x.id - y.id).forEach(handler => handler.callback(this, this)); ++ } ++} ++ ++for (const name in launcherEntryDefaults) { ++ const jsName = name.replace(/-/g, '_'); ++ LauncherEntry.prototype[jsName] = launcherEntryDefaults[name]; ++ if (jsName !== name) { ++ Object.defineProperty(LauncherEntry.prototype, name, { ++ get() { ++ return this[jsName]; ++ }, ++ set(value) { ++ this[jsName] = value; ++ }, ++ }); ++ } ++} ++ ++const PropertySourceStack = class DashToDock_PropertySourceStack { ++ constructor(target, bottom) { ++ this.target = target; ++ this._bottom = bottom; ++ this._stack = []; ++ } ++ ++ isTop(source) { ++ return this._stack.length > 0 && this._stack[this._stack.length - 1] === source; ++ } ++ ++ update(source) { ++ if (!this.isTop(source)) { ++ this.remove(source); ++ this._stack.push(source); ++ } ++ return this._assignFrom(source); ++ } ++ ++ remove(source) { ++ const stack = this._stack; ++ const top = stack[stack.length - 1]; ++ if (top === source) { ++ stack.length--; ++ return this._assignFrom(stack.length > 0 ? stack[stack.length - 1] : this._bottom); ++ } ++ for (let i = 0, iMax = stack.length; i < iMax; i++) { ++ if (stack[i] === source) { ++ stack.splice(i, 1); ++ break; ++ } ++ } ++ } ++ ++ _assignFrom(source) { ++ const changedProperties = []; ++ for (const name in source) { ++ if (this.target[name] !== source[name]) { ++ this.target[name] = source[name]; ++ changedProperties.push(name); ++ } ++ } ++ return changedProperties; ++ } ++} +diff --git a/extensions/dash-to-dock/locations.js b/extensions/dash-to-dock/locations.js +new file mode 100644 +index 00000000..7636ff40 +--- /dev/null ++++ b/extensions/dash-to-dock/locations.js +@@ -0,0 +1,293 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const Gtk = imports.gi.Gtk; ++const Shell = imports.gi.Shell; ++const Signals = imports.signals; ++ ++// Use __ () and N__() for the extension gettext domain, and reuse ++// the shell domain with the default _() and N_() ++const Gettext = imports.gettext.domain('gnome-shell-extensions'); ++const __ = Gettext.gettext; ++const N__ = function(e) { return e }; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Utils = Me.imports.utils; ++ ++const UPDATE_TRASH_DELAY = 500; ++ ++/** ++ * This class maintains a Shell.App representing the Trash and keeps it ++ * up-to-date as the trash fills and is emptied over time. ++ */ ++var Trash = class DashToDock_Trash { ++ ++ constructor() { ++ this._file = Gio.file_new_for_uri('trash://'); ++ try { ++ this._monitor = this._file.monitor_directory(0, null); ++ this._signalId = this._monitor.connect( ++ 'changed', ++ this._onTrashChange.bind(this) ++ ); ++ } catch (e) { ++ log(`Impossible to monitor trash: ${e}`) ++ } ++ this._lastEmpty = true; ++ this._empty = true; ++ this._schedUpdateId = 0; ++ this._updateTrash(); ++ } ++ ++ destroy() { ++ if (this._monitor) { ++ this._monitor.disconnect(this._signalId); ++ this._monitor.run_dispose(); ++ } ++ this._file.run_dispose(); ++ } ++ ++ _onTrashChange() { ++ if (this._schedUpdateId) { ++ GLib.source_remove(this._schedUpdateId); ++ } ++ this._schedUpdateId = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, UPDATE_TRASH_DELAY, () => { ++ this._schedUpdateId = 0; ++ this._updateTrash(); ++ return GLib.SOURCE_REMOVE; ++ }); ++ } ++ ++ _updateTrash() { ++ try { ++ let children = this._file.enumerate_children('*', 0, null); ++ this._empty = children.next_file(null) == null; ++ children.close(null); ++ } catch (e) { ++ log(`Impossible to enumerate trash children: ${e}`) ++ return; ++ } ++ ++ this._ensureApp(); ++ } ++ ++ _ensureApp() { ++ if (this._trashApp == null || ++ this._lastEmpty != this._empty) { ++ let trashKeys = new GLib.KeyFile(); ++ trashKeys.set_string('Desktop Entry', 'Name', __('Trash')); ++ trashKeys.set_string('Desktop Entry', 'Icon', ++ this._empty ? 'user-trash' : 'user-trash-full'); ++ trashKeys.set_string('Desktop Entry', 'Type', 'Application'); ++ trashKeys.set_string('Desktop Entry', 'Exec', 'gio open trash:///'); ++ trashKeys.set_string('Desktop Entry', 'StartupNotify', 'false'); ++ trashKeys.set_string('Desktop Entry', 'XdtdUri', 'trash:///'); ++ if (!this._empty) { ++ trashKeys.set_string('Desktop Entry', 'Actions', 'empty-trash;'); ++ trashKeys.set_string('Desktop Action empty-trash', 'Name', __('Empty Trash')); ++ trashKeys.set_string('Desktop Action empty-trash', 'Exec', ++ 'dbus-send --print-reply --dest=org.gnome.Nautilus /org/gnome/Nautilus org.gnome.Nautilus.FileOperations.EmptyTrash'); ++ } ++ ++ let trashAppInfo = Gio.DesktopAppInfo.new_from_keyfile(trashKeys); ++ this._trashApp = new Shell.App({appInfo: trashAppInfo}); ++ this._lastEmpty = this._empty; ++ ++ this.emit('changed'); ++ } ++ } ++ ++ getApp() { ++ this._ensureApp(); ++ return this._trashApp; ++ } ++} ++Signals.addSignalMethods(Trash.prototype); ++ ++/** ++ * This class maintains Shell.App representations for removable devices ++ * plugged into the system, and keeps the list of Apps up-to-date as ++ * devices come and go and are mounted and unmounted. ++ */ ++var Removables = class DashToDock_Removables { ++ ++ constructor() { ++ this._signalsHandler = new Utils.GlobalSignalsHandler(); ++ ++ this._monitor = Gio.VolumeMonitor.get(); ++ this._volumeApps = [] ++ this._mountApps = [] ++ ++ this._monitor.get_volumes().forEach( ++ (volume) => { ++ this._onVolumeAdded(this._monitor, volume); ++ } ++ ); ++ ++ this._monitor.get_mounts().forEach( ++ (mount) => { ++ this._onMountAdded(this._monitor, mount); ++ } ++ ); ++ ++ this._signalsHandler.add([ ++ this._monitor, ++ 'mount-added', ++ this._onMountAdded.bind(this) ++ ], [ ++ this._monitor, ++ 'mount-removed', ++ this._onMountRemoved.bind(this) ++ ], [ ++ this._monitor, ++ 'volume-added', ++ this._onVolumeAdded.bind(this) ++ ], [ ++ this._monitor, ++ 'volume-removed', ++ this._onVolumeRemoved.bind(this) ++ ]); ++ } ++ ++ destroy() { ++ this._signalsHandler.destroy(); ++ this._monitor.run_dispose(); ++ } ++ ++ _getWorkingIconName(icon) { ++ if (icon instanceof Gio.EmblemedIcon) { ++ icon = icon.get_icon(); ++ } ++ if (icon instanceof Gio.ThemedIcon) { ++ let iconTheme = Gtk.IconTheme.get_default(); ++ let names = icon.get_names(); ++ for (let i = 0; i < names.length; i++) { ++ let iconName = names[i]; ++ if (iconTheme.has_icon(iconName)) { ++ return iconName; ++ } ++ } ++ return ''; ++ } else { ++ return icon.to_string(); ++ } ++ } ++ ++ _onVolumeAdded(monitor, volume) { ++ if (!volume.can_mount()) { ++ return; ++ } ++ ++ if (volume.get_identifier('class') == 'network') { ++ return; ++ } ++ ++ let activationRoot = volume.get_activation_root(); ++ if (!activationRoot) { ++ // Can't offer to mount a device if we don't know ++ // where to mount it. ++ // These devices are usually ejectable so you ++ // don't normally unmount them anyway. ++ return; ++ } ++ ++ let escapedUri = activationRoot.get_uri() ++ let uri = GLib.uri_unescape_string(escapedUri, null); ++ ++ let volumeKeys = new GLib.KeyFile(); ++ volumeKeys.set_string('Desktop Entry', 'Name', volume.get_name()); ++ volumeKeys.set_string('Desktop Entry', 'Icon', this._getWorkingIconName(volume.get_icon())); ++ volumeKeys.set_string('Desktop Entry', 'Type', 'Application'); ++ volumeKeys.set_string('Desktop Entry', 'Exec', 'gio open "' + uri + '"'); ++ volumeKeys.set_string('Desktop Entry', 'StartupNotify', 'false'); ++ volumeKeys.set_string('Desktop Entry', 'XdtdUri', escapedUri); ++ volumeKeys.set_string('Desktop Entry', 'Actions', 'mount;'); ++ volumeKeys.set_string('Desktop Action mount', 'Name', __('Mount')); ++ volumeKeys.set_string('Desktop Action mount', 'Exec', 'gio mount "' + uri + '"'); ++ let volumeAppInfo = Gio.DesktopAppInfo.new_from_keyfile(volumeKeys); ++ let volumeApp = new Shell.App({appInfo: volumeAppInfo}); ++ this._volumeApps.push(volumeApp); ++ this.emit('changed'); ++ } ++ ++ _onVolumeRemoved(monitor, volume) { ++ for (let i = 0; i < this._volumeApps.length; i++) { ++ let app = this._volumeApps[i]; ++ if (app.get_name() == volume.get_name()) { ++ this._volumeApps.splice(i, 1); ++ } ++ } ++ this.emit('changed'); ++ } ++ ++ _onMountAdded(monitor, mount) { ++ // Filter out uninteresting mounts ++ if (!mount.can_eject() && !mount.can_unmount()) ++ return; ++ if (mount.is_shadowed()) ++ return; ++ ++ let volume = mount.get_volume(); ++ if (!volume || volume.get_identifier('class') == 'network') { ++ return; ++ } ++ ++ let escapedUri = mount.get_root().get_uri() ++ let uri = GLib.uri_unescape_string(escapedUri, null); ++ ++ let mountKeys = new GLib.KeyFile(); ++ mountKeys.set_string('Desktop Entry', 'Name', mount.get_name()); ++ mountKeys.set_string('Desktop Entry', 'Icon', ++ this._getWorkingIconName(volume.get_icon())); ++ mountKeys.set_string('Desktop Entry', 'Type', 'Application'); ++ mountKeys.set_string('Desktop Entry', 'Exec', 'gio open "' + uri + '"'); ++ mountKeys.set_string('Desktop Entry', 'StartupNotify', 'false'); ++ mountKeys.set_string('Desktop Entry', 'XdtdUri', escapedUri); ++ mountKeys.set_string('Desktop Entry', 'Actions', 'unmount;'); ++ if (mount.can_eject()) { ++ mountKeys.set_string('Desktop Action unmount', 'Name', __('Eject')); ++ mountKeys.set_string('Desktop Action unmount', 'Exec', ++ 'gio mount -e "' + uri + '"'); ++ } else { ++ mountKeys.set_string('Desktop Entry', 'Actions', 'unmount;'); ++ mountKeys.set_string('Desktop Action unmount', 'Name', __('Unmount')); ++ mountKeys.set_string('Desktop Action unmount', 'Exec', ++ 'gio mount -u "' + uri + '"'); ++ } ++ let mountAppInfo = Gio.DesktopAppInfo.new_from_keyfile(mountKeys); ++ let mountApp = new Shell.App({appInfo: mountAppInfo}); ++ this._mountApps.push(mountApp); ++ this.emit('changed'); ++ } ++ ++ _onMountRemoved(monitor, mount) { ++ for (let i = 0; i < this._mountApps.length; i++) { ++ let app = this._mountApps[i]; ++ if (app.get_name() == mount.get_name()) { ++ this._mountApps.splice(i, 1); ++ } ++ } ++ this.emit('changed'); ++ } ++ ++ getApps() { ++ // When we have both a volume app and a mount app, we prefer ++ // the mount app. ++ let apps = new Map(); ++ this._volumeApps.map(function(app) { ++ apps.set(app.get_name(), app); ++ }); ++ this._mountApps.map(function(app) { ++ apps.set(app.get_name(), app); ++ }); ++ ++ let ret = []; ++ for (let app of apps.values()) { ++ ret.push(app); ++ } ++ return ret; ++ } ++} ++Signals.addSignalMethods(Removables.prototype); +diff --git a/extensions/dash-to-dock/media/glossy.svg b/extensions/dash-to-dock/media/glossy.svg +new file mode 100644 +index 00000000..55b71baa +--- /dev/null ++++ b/extensions/dash-to-dock/media/glossy.svg +@@ -0,0 +1,139 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/highlight_stacked_bg.svg b/extensions/dash-to-dock/media/highlight_stacked_bg.svg +new file mode 100644 +index 00000000..19be5a9d +--- /dev/null ++++ b/extensions/dash-to-dock/media/highlight_stacked_bg.svg +@@ -0,0 +1,82 @@ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/highlight_stacked_bg_h.svg b/extensions/dash-to-dock/media/highlight_stacked_bg_h.svg +new file mode 100644 +index 00000000..eeaa8691 +--- /dev/null ++++ b/extensions/dash-to-dock/media/highlight_stacked_bg_h.svg +@@ -0,0 +1,82 @@ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/logo.svg b/extensions/dash-to-dock/media/logo.svg +new file mode 100644 +index 00000000..eebd0b1d +--- /dev/null ++++ b/extensions/dash-to-dock/media/logo.svg +@@ -0,0 +1,528 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Dash to Dock ++ Michele ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/screenshot.jpg b/extensions/dash-to-dock/media/screenshot.jpg +new file mode 100644 +index 0000000000000000000000000000000000000000..4e9b4c6754a0a6d7ff43840812fa807c0937b2da +GIT binary patch +literal 111454 +zcmdSAby$?`*DgGWf`Ev0!=rRdH>08;gACFssB{e7H6jAi(nyVTcXxNEbhk7^Gq7jC +z=lAZt-~G>b9DD!q-5iH8*L|(~Ty?Isu6wwdxLE)^0ZGY70npF@05s$e;AR>i2|&Mx +zx=??jBd_}y_fgkF42%aDSP!wWu^wV!VL!rqgpKnU2MY@qANMidlPCC3upbc+5;S^o*(9@;&0jC=Pna34Ix!@xu;bq^i?{!{J;7z8gBK4DrDKI8Fx +z7#dzQyiY_-O2_+3QCTIaX=vn4L}bb$76}>OXB*pOdPaW9*Gj5-_FuzNOG-x>1ccPQ +z4w%&S?Y>17OQArZ{WlQEr~C(m6h6|N_wJ#gJwShmiGgts?Ew-5K05c)`ws|sUMeVt +z4q*@ylRW!mokYZ|p2etECUr9!h&EZU1MH;rk@qI>2OyjCocT$44j1$~~ho>wNSD?a&PX8~8vBbdcdv +zOEuTGKig%Ieze!mS-u6yR!PC?z!Y)H4sTKM2$qwpnZiNK08-?!iOZA&Vx4!G;fth!jcmepw;2uj)o{9Igx_E&V~uQF$q7!<|Uv +zbWrAKX}*`(Gvf{mnMESwZT*<>y?t>@Z^i%dg3&U${#@fU!i*ZWZikpRtL(pDUEqV +zm{Ot($FgnW6;&z~H69M*ym}TlfUnbdPC2jg*^Cyg@dH;Ci3){W#`Hkm6bj)G<@|N} +z{4^GUT+IHD9yp2EOSQUD8!c_*pB+@0>{)hpU?t3uoye2s^1(=HuolO%@~RhnXffg} +zawI@iwFYoS*)G?Wu{i(zQqPWg_hf$?q>iQZz6o-!kSKtyyv(>R!lD!lsUVkRA|*jP +z`0LyM+c}7N>gyL*QFvvrFWDlGY2`#=HQ(pG7~D6v^E-#O86pDp@DVl2FNQn0*qfv| +ztYWc8?qWvof7{QoDsS+kya6oj1yCwEFsOWXjw?>^jUv3oeSf9g~|J~b_*Zm~Nzp=?d#51VwwGvf!*gav+TEh75U +z&8n!hxEP^}UH^j1`_gamdc{rTIi+8Xs~~xuYfX*Tt9n9WHDg&kHJ`Fa^y75o63oqE +zX|JjiloRH0iQ`j;Ke_@R$t*kk_L}yswVD4Az2wg7s%N}tX1RugC5gk_EdvVf%>vQX +z8c~3srpDQGyX0&AWb`xAKaWFwdo6B?(Sn{}F0#p3JaBG<| +zqC^N=Azs~?wsO?$zM7jgC7b&Rm!CRENPX!U+rqw+Isb>QrV0_OW_~;!>nw$AkODXk +zuB}$ni8mnj&qU47YV|t!0i8_+t&@Po_{P9A91r790%&naA5;Q}mHrVx3yi>kMELEEI +z2MP5ZX!KRdusz3HdH#PpBmwAK73fw*4fX;vTbAJV+3m-B=51xx6Nv00#T0BVLP=aA +zBoNKq)UBl~`UnoQ^06<#{448&XcIRsfyc{dqIhIiPkn~lA!6d1h0W%9D=pQRhV}>Q +zE<_vs`H!uY86@$2YqAWpFQi+4{lMHG#GE{1tC^;Cb<>{_ADyG3opfb`SPJw^o^1nD +zBZ0EMdHxyTRH0v^DNbEEZRrK!@6Zvl2L%g%77W{FaGUmhe6~N8)2u8x7ElLvNJX*c +z8eok~Q0f%7f@{;a!0!{7K}X@L>B)P<&1h!>&0(~b^>~!Wr4`|Z!;L%G(`?qK_4W8l +z3&E65*26iz9a7v^8X`oSRUGbyb2bpqYuhhSSvNv%r-Y&X-yL|w6{-;i^)-1l6Czq9 +z*t>vDT{)PQkr5O +zw!N8>zs4J>JW!~NexAh(TG*LQtw`dT`Go|Vv_;-z9#A?cr-*GhBj8seDA%1sBs4ZS +zpF}Q?!o?FoxF5H#yWqNTvTnYG3@op@%gNg57H=P3Lxte6CgtYA7J2^ftyZ6u!<;im +zz&sYGi!xuJ%wGTi%n1uTe^F>lP-I;Vuj9U`h|)ZDkkZFxZYO`+NEb4Z@WAZ$fWXnu +z>n&tm-8@|ekQd_a?FUCtG0~aWnvfdkN2Qj$#il(eJaW~DRli0E70+T2h%4yT@YjXd +zc=~voPW0(17#3o;?aaHdR&k;xyo$1-wg!(@%|w>6sQg`~c#=*wD5W(^IV?78sX7F& +zLLhhgBMo@?VBKO_fa|+fO^GAW-hr|A;F&8=`f&4hFN3M_esSZdJxeX0fhq__HEpZ7 +z4BqqohCVz+i}Xf$I$jGEhJa5;0vC3Xlbc1iES`cGMDuY-l2d!O`>79^i`_^F`upm- +zBfxrev#1-lC@oab)ogcd8}i}j62|XV$dwK$<<~5sZA6OJur8rjSY{g7T7@DYJXVHn +zUet5a^Gw+(yyWDhW!lN@@m_ag$IOhxlIrAGp<4+ +zN-UQv=*&&v__Jg5F2`b|DOvoZ=Ri}|ZPNmDIVm^OT+(!SXg1sy9&N4atc|{2t8gIb +zT&pwBu6ns=G-1`gWHOY5O(sI)i|3mJ!cGuTPI7D^YiD6AKQEua>_U3*|HVa{3;|M~ +z?$OqYde;eQESwmQ>@VwobP#AS_?jV9A&sM$2C~gg6K3hFE>^5~q;0b}zTjRya%Sih +zT_HH)>R4g9+rGA=&3LKUq%=+05Ih;lwq0G)tQ5$s5+tl*Pp8N#Se+H;q92CdKilA4 +z5g=N&bRyX9!uEMtpj{A9uGRF}O3wU3=&g&ORHO*eD$T=TyDSivSla#BX-D)$F^K~; +zw=2H+DG9pWHHr9>UM5YIw7}Gy;WnvK1B$^sECZoFkW8L!waMfcR}cELgIW)|-8oE~ +z#p=tP>bR;e?E@wq`nz*|PVdCE&664rh=nqQ!EQ9!$GItCFKDT&E<0rHD#9Ps@>f{u +zLC!v|vWO>?GlR?V@SQ*cSr5SkCf3$$GKSGVFt=)M0Q*Jra+lL_Wp#FfbT*E9PJ&AK +z-||Wv%3CInH<$F}aY-ro=>Mo?kt_I{jV|_gpMQ8Rb_00gK}fmSFkMvU2#(s=HT<(s +z;Y%t@U13l&O}DLCqgf^_JQDTHCVn?XSU9u8+ge~J1~a<4;h`n5pq6Xl^s162qPBH# +zqG4|J9p{wqq?0zdYq6wBC4=dY!g`B+qGRQK$Gwh_C#Qd$thC%A*rFBGktHd`4u<0*Bpk%~H(nE9NVe**!`(hdE2aQzgt&t2j1@yZ4DW +zbrP8903R+SLd4KPVH>Zq3X;>5XDoI82gnMzWS0+!I||xQ5BYj2X^M!hA(JbThb&~O +zf|Z(n2eFRMn1HVHgjo+Gk_;=uO#6DiE +z)ul1k@^R~pQVN4(i;=-lZVYXIoSxZ^+``nvY)$#WSW%6n@e=FjBK6qer7X?Tl~v)c +zBS`st4CX&52h%2Pb3JmqCk-Zx|N`DEpzeCrH8BD;}KNWRwwlu8W5{P +zv8`SsOB^hJb>>dUcFw)YkQZP4(=-z96^; +z;IM%M%bEF4*N(wAfC{{1+8l}S9pt`7kLdLa`E_Ijx3^sFQQrV8XkP>Ww|%s>?kJI~ +zPvMfsdc*Fy_2*}J!^kF2=IRE3e=0ZuO<1m1qyGA;c|ltSn+Fa9-yI>Cj;^FG!t`L_3?k*#(PYT*Mv!801yi{5>L7-EflWqtetRs;{)#^;F_gi!!Zy~x~ +zo-R2*89CR4zGxVQ86j$~ub{)Q5wU;$M>7i>D2H{AT%aS~oHw6Og0abO;2hIU-T*9t4Ycr(f8~-OIvkOEv+nj@-t9#i +zY}B1;7W$-?dN$bUzc0czCH|a+RIY7%K+7alVS{+1A%F1#-`OIN8%YrDr@BXo|5fUL +zAu_YS0RV3yVQ$HnT+gAbMVl^s9e#ezaT#RMuzqVN07B+Jdj54%yW_u78x-APcVYMz +z!F{VJt#!h0q#aG&@_@g9|1sb#prb3TQ?gm;FeS?T|0l76T5z9Hl;wf{O|0dNo_)hx +zhgwbe +znE>BvX=Y0gJ0L)$ghyu$bmB}*my^g~X6u=n8Ma5>kOstXv~XFz^(|&n$2s~2&shn| +zz3i6dRqNeQVB45{BVr=4M$+^u54ad7e+4`-8VCcj*T3mjykqBi8O1 +z68vwrl5P#8UTU}>?GsML&!bq71kvs2cr=@G7=g@`+za`#=y@PIf~g1fIGpC7SruLE_76jUS7aocw*Dqe5REVD=c{{<0zlQ4IHm+|u3mHYg;fCRVVf{~mt?W*U +zOm5gFZJKaBG9l=8`KxaLupLwYq902Sx!2a8BNyv^9r&@_XRO%orf=9p(%4s?95Ux8LLB>#=fyyi2Ef}&oxudF+ +zFLH7I)OVr$kIfXN8j>^6JhCphP{A?`O%;|vdWEH@Derg474VjAxW?q)oD?IC1iF-t +zazmn(J*Aorxw9@hLK&`$jB02aFty49xs&}ec(-GH8pT9t9@#E;Qh_oycg5>JT#dPv +zk#dWM;X*zd%+;ld8!FY* +z#JTR85jtdAoFbNYWojI505nsY&~_zcuvBe&jO)5xVQ$jsrrrP=_AF;Y9QLloOUrHm +zfk=vkGP&Pw_Z%=rs)V=!I3Ww<{Q9&kGAjUx5AX(5hNJ(ra7Y!+&h(Y535v35bLyk- +z8l4}j7bw3WIx8%XcG6Jsa0B=Y%Jcf~qI>5l10K+$ddzZ7;`&#z#bX+ATdGl90z{LdHL#?4LU00NYlz!XjMxayzH+Z=g +z$S@X7E6iUzzy^6%uVUdbW*Vq23<_Skc*TY3_-U=^QXW;y$mFiR5zpw6m*YVlNW4t+=jtE?MRhGXik&(7~*M}hbnBp?V@N?0_BLuE^~L=O!sB& +zp>H9Ukr`Ld5$bnTiir>m-=wI;pOw7$sT~>(%by~{bpe=u=>D{R@iOB= +z(hTVWWCr}DOW%|{KpJx2@`BE$xI^%7RE5ABgUO&0 +zU;#RObRo%g&+*L-fO!WRm3GDLk>_&9ve%KY!JbCE`I%HMU4`MsP7P +z^jY$i^5997I5xa4s9eIh@U6i?-HsU$Jg>x!(SBEX^ETl5mTrp(P#Hl4D@)Y6=0z}w +zt1*6fyQPcK*Wt1QsX2s0zsYYE++{KclY}lWmzV0&G-7;uo=f`d6+#6Lz0F45#Lk|D +zk;;N|ElamL+C|K*io0}U61L$vdiqOZ@oGKMP%zkoB^Y8^Do2 +zu$gqL;m$R{eg&n4j>=H4u&GP;>1&UWeea8+jcb&1a5!b@65J?G$&oM5cIJ`t=;DrD +zhY`1(dA|~u7kH^*6;g-7%r&+rduzgiekG`v#L{)tU%Pz(Djps7cQ14xDQ-Mdlp(Mb<_R@yMZTnE8aEl27rOvjNq!J +z?PtCLJcRxd7ragPS)Mb_U7TyRIlOfu;5V*8nz-9+w18caoT9_q_n|^bNNafBp}{Oi +zzRno%y#b^P`kuGpEn;ra-igP(#=fS#j+vvq6QXk`gx`(0Rsz9Y3+!ix-Uq(CgNSZ< +z#(L&{VdT^h|Ni=+$JaZ_XgLd6i+kcFwYq=rg`(6!A8KflZJ8etZM$0X-G6g|GlH-| +zhMSA&8S|OT4Is)f0EuG3cY{m*7+DxRO&S)G7WXz2maeTO&z>UhzMX||1+NIN#1Z`e +z5q)bZwDf|nmc9dm<&HtnD}UN1+6^u_(H^eVGhBD{Go~}U(rK;s8^HA&yoCTbZF++k +zl2vJI(xG3Wz76UBdF-9?eA_Ko_+o{%13;h01%fRFkK%zy_5N}!MhxY-EBpZ@ +zRowcJuVY_ge+v7+e~Y9q5LI%QFg~w7|4$kskv73R#1+i +z`?ukHP~7m<(bw$U%;^Sj8w-CsvwNpmv`vyNZCC$BgX-O!{MG$JZC`Q!0Ls2cdW3S> +zR>xhNM}wfR$F8SIgI0*PWgsK)D{w4C`qpIP7i$Ikdiz^J!_%TIOw;(1XHw+X@-8gP +zR4CdKzZA9ZS@>O;x_>5$@HU8_vPkmMh@F +zDE62_ZnYoi0^T(wO739Wl?dc(iKs*^C5T%c*J329yS!}#L6+J5Zb`IFN46w!@(?%V +z^bv9_J%}80&#xoqHM%6;hb-IxsU6j0wS-@gYCf7^(OE38=>E$Q3EkYnJT7NLI^ +zCr`0v**@%WVCq1SguBGK^cyPnBthRe>W18zIjO0NxQi1B*g{KLb@5%X==kX!;ePYwr` +zGGtyAV~(>KxBdmj3&0lups}Uk5klGJ45~(T6})kY*ST6(?G9{S=Qo@__i0fg|ALE7 +z`h>b2QumDlW;J0+`Vj-Xsqw|s*&dyAmjZXG5|=_u{*6sh^ZF2LmOwCUBd)_<;@a;- +zq~0f9Tj`;OfsNhpuduKch(R`qyS@}#)n`7?(H1LJ;vXP+{FVpJ>}ZTJfD@*Uu5e4eyRd$ +zZ^aMC*OzJ{PH6h)g$-cz@&N_dPB}`Aj@{5bzMPI3#3f~G)M9-kqTQ`(GqmwB-9P>z +z--E_#Q#Hp=CE<_{Pa;R&dktlr3DE>Lln~>$U2-=l!A9*LR~>0mMI?tNjHMDx4*ju+ +z7bC1u6>%5;si|gLmOC;y*CR?$#`*3;=2GcY&G%kUMH*(@xBjuAa{hWY)&85meVdfC +zN6MwaR0Phwb${GG!}rfXcH_~86&y|hF>ZhInWMs+vuqipUa3a-uMsP}!G|cQw}q>u +zkB7{~(wA(uk(~&cWF~Wd^{3y4+fzOqeGBqYz)yVsktk5a20t@-nm`v%nOrytf~ +zg(7R~O@~}jzY5V|CyZNjaA->J@r!a7 +zz)J+c9rNv@ce#R&NdxJsfC}dxEwLw?@EgDb+t?CPz~EC4%XQq5pi1*;t4YtG(ihse +zS+idtQ=RC_r2ze1VUB8_G!d}o%+?b8H`^*Hhe+0YaZU-W5OWI$_?GvBmL%=+cgF2n +zZedmmX7tWSY+5sJ4{LoW+f#buB05TThCs!#oIdAA(;?gGdY51~9X6lM4X65?Xm*>! +ztroH+6*@tu;>vUDekZV!@^8Mkay~8208l+ikiAKpZe~f$I)8N7sr{N*_cTwLpo>X2 +z^J32=G`{>m7xTQ&P3DyscvzK=hP-8I;Mw|~-9`{UaV&M`8c-?cnOjc!d?lsDQ;O88 +z8CLJs2aPz#l_8LKc%QF7B~M#WhzIx&%BTc7&#bK+6Vl=v)7!OFW+a6|_OUZgqZcTP2lHz1nN!8V@>GeUP|4AQZkovCb +zSx4sam_|BDg6x@4fuV#EFl&q2Hr_`cW3ySH;Ag}AxiqN$+-#$JBQ4xuWhtq}E0^;|!-3S@k8eQAyO3C-$=EUl*K^|t +z*EhrS>w<<2E#`4hF|35zf;!|))X&ChG?QTLreZEkW$Lfh?oUpzH&1AqJ_vj%m8NNA +zXZxx*7w|elF}+;bpu(TN0O%l +zCAvb~iwEJArIfBUj)2+M7V*GhBrA+|2+|>sC0#vq3s=vp>ww4heLqVW=bxj`VGQC{ +zemO)p{RjbH0MI7@5P(x#=X{74dktGuf^w$4bW+=9szH=RwVmRs8MVzj7o(c+^e3RJ +zuPa&pKbdRDY_)dBWBPSD)Z~mur6`nzuek7d +z^cvV4EmCRMsXEhCELnD}uDQs(QVS^R0a{OOrUh!S`kdKLF4O;U7tv#2u-gsJis+=D$y3`VD_AF+`gY@V3X4RIOvS_8AHTchi +z^NwB<-g$rTt6*>xC*XrUU^)qaG5uwt+E|LP7dNSxJ%em({6k=suyvE7X3#s3ESss- +zq0MUNu#Bi}e{SlLGkI5%4bgmlZBIw3!C<(XoZ~aQnu)+z$KZDu@Qt(pGnUxJz9`yy +zT+o*HTR9ybk^R*Ui4e{0Q@#wc=`Ff*#))hetu6ZD`RB4081r-JA91t33v4=~lbYXC +z{}vH0gm`mA8t6yH%prj!2$>eNGJwmIlYd+Y7kx!#iML;`A5*^(9u~&>Wj*3OE_Fpc +zxcPQtLX3W_n!xoUv(jKPa?d?!_i9<20!PAHv1KGpxHQ?nC4_y?(Q9gD +zFC~suW@A$J89{i2ZzLwHNBDIJk8DOdO^cni7%i%G5ubwmCnm1=#&T#k{g0yp&L8F{+lPbLBu0xzQt_mjmG)7 +zHur{{)VP~RsJLRx8Id$`@;U;8Pnr^qiMfrfhW+d6?f^pu1`{=yG>D;%vo_eR>U0_3 +zu*TUwLovrDi!EllraI2yTgsqKa_cHVIkK7fXUZ;O`Nt~#DvcNYDtigiTTwnuEb)`lTN05q6t{TRfP0u8P$%d~cH-+jl +zRxhC~SUpNnT9;OEELc5*9WG+st;?No!NjKB5Qe=BdEr0bO38tr@BXD!M%@ZODO8i{ +z!N`wp7UBv2X)-hCZy9bt&b0yl#gfj4x_MqND?Ys77f2XfE%{X^CJP$r{Y@jEot7VK +z52c9jOV@q5l#s2Wk{Y3t@Kf_=h65cteNwy!9aw_PF?H3UGlSG9E6vDNL8297cFU_| +zG9rAud2re(`u*YOW=e}sMdf&ggJ}9hB83C=A!-2^F)g99*C+FOanRDOh3ovPeDlT+ +zXr(ymGkAKPQlpJHo;$xFI{UaXCGUiG?aJ#!9?R)F9=Lplb~%M#RacR6)#plh#<7L+QZ8qS{cI+eQiUUGL1 +z66`6!Gjk1*(wz)!m}BI=$UQ(fwr(st%gx3YZjjR?IFC3>xI8wnKJq(Vs^0wk324S> +z_i2DD(0>{JfzNUhVv0BZ`{&qZy-C;9&+KnuVWp9~ltUU7kC_ac9V4k=l5ue(pL*7u +zlC=W*azJS;n%2fg!cM$P^=dp3iH3~g3y{;oe=vl7f*;eDm#AtInj}nHohIC+VDwDnH^Ou( +z@;H81x|J57)UCnmCcJ$Rn_eJWVQ<%;YxC3j>vkB;(A#5D=ljhG8Ga|9gP{teikK{a +zAhQ3YZ#3slHemLOM5V77#Gt;1 +zd!Dw2bYav~(dEdfOuv(L=F9?x>hr=N^|qOCg*WOfE$tkBifm*K`r9iCFF-@1e4PUB +z2`{mSo)!6iB40#%pKD^x9vS`qPalwPQ%acqs?Fwtrargq$oczp3w=?@pz>#>mtM9d$n-*iI;=~mAv^n6}~RkCd$c>wmt +zdOMdsi@(#A?cu`U$!qJ*2j3!WiY2G)R@y$ByjQh2+z31ub{`-tx#nWS|DL0()?7^& +z&A#h+5^yR_pE4nkz{Gq)@pj>U#6qHE^qbF$e((K|ADDyRZwo6a#7hxINVC2jdRs&; +zo%K@qwN)mnx5VXX2=PIthQvDVgnw@UR=5PR#}Tt(;a +zN81Jwq#MEgVu&?WCc4*=p7@))9dq*|a4xRe|urqAV%P`lMl+@&QV|WHmB2!_!|JKFw!`NV#z*oQ1aoRb~#wEn7F1 +zoNb&Zslt<@%DHCrr@vsGqEC$$@pzR$@>lf|T2ijLB(Zde8MbOKXke+U9pbG<>@L`# +zj`xtg6l_R?DjfsJDu;%=ebf7hUv@Tf{j-C4^2~-I^01&j*kC=-VtLvJ^xlm}j<Ufv@yHFii-EpS5!DYR+~G?2rH=rL3C>M_?1U`@oeJj8)n2o;yR7ub3!g4O +zD_N(QtUc^568-YrOQ^KCS5L17zpH-W7fa^L9I&Q6u~0Cb`poM3S@OZADBDIL(SyRV +zOfM;`E~8k+ta;j|Ryb43{T(s+5<=wh0PcO8pFc9~KG{cC&U>v{q~?!Rl_blBXW)Iy +zQj0`pIpzS*+|_4z=Eu!pH4_2IGI_2W=cl9m%$yCzFgBdSPHB>F;oY)x9FxOktp2g% +zVr^9}YCk6A)Pc3=+oycXUwO#9&odcF^Q-9ZcYl<%nv9l5uCxu29v}c%jLb&Xa0) +z?$bmik`$`ViyIXl$=$6ge1O%?**k*AAI(tg7+XU;eMkMvOOqqieSQU$eUz-#Ox0*;PtSB%sPb&+_fQ5|}T|f#{sqrb< +zMG7QL^gJNhUrVMoehT!)cHt&#JYWS@e2Nv{NxObF1GB=>;k44JwXS;8Tyv=N@8*tY +zT?V#k33Oy^z1X4oo!F7bm5caOEsxfSk`|Nr%Q1#7zc~Qe%cT?dF_1I-YvdQ()B*1d +z>##?BOcLgzMd`#6N^_*lQbakmUfX3y%gBB3D7u{9(YzqAqvLPGw7=-;!HcJ~?Is9V +z(=+so29PFvd35RNGjBy{>fT8CU6aE8Q>k=L3qtm>n%n%G!HUg*-|rTL95UbgIngT6 +zNy#9)XgTl0hK820#KDO`d7JILk@R4ilX~BzjwWs+TL+~S14GLty9BLO<5X|c)S;0L +z27wbz|5YZvVo(NVO +zw$Di?1tDVkPu}Srldrh!`881XSV|bNi%xS*U?mlDKA%pam@pCQ`g>RPR=0mJEtG46gdW;NQB +z?zTnNPbE5~E{ST{3$?sX&Z>eQZ2eifVWay;17dqS0tZhbrpLBk$FfBxFTVuX-{@rs2$vUr8GM}vN2lOUzd4qXAQGgXbpGt7+t55`oQ+p`@tB1Sr(}32HLP~F273}uS8{ffSf4APWW1X1 +zBaymO2b%z$!W%o10jc-6iE)kK0V(AcJ-PQiFLB9V2v}$1{3@qxq!b^|hSbncSFThf +zyJ`V3Rr$ih%7(@^5du2bQ#0!|bjixG4#peB%l1l>)ZFIC_8y}vm{zFgja7AF_-7mM +zVp@Yw43AsrS25jus3s~eeBvE@Xf&3@KtrW-(oETB12m!54RkOUzBIJ$@CeXc7fVZ+ +zq&KpdYsvZXVS%mI(8yaW;|PsSGP^}4Ou*KxBw=A2DsqPrKNcDIl;uEgGyUUJI!&@< +z9%a#21>@7_^9}P=MT!w9HJlLfg^yxLu!h#WcAJ`KRI6xru!6657LV|zf1rCEM*I53 +zgQ#S%-_uY7Yai2gqOV=}n#+Tx7gviUSA|E*>%S^{_0PY1dm&HPG68`5c=EE;i3!47 +zI5S(h^%mb%!c?7q{d8C1@NZ5Y=W*nVUdOXJQ}XBas4m&^KX9e-kQx28o5Pw46%VkW*2F<-Nru@8A-Agv8nKPuffRgc6a|7&wf7h%7C}(&*`6 +zB%KAvpF#~~nMtzsJ|jaT|#% +z-3CiVeO949Xh`wf(6fK~ +zx=5lI?BS6d_KiW%xUGcB>2Rg`>#PI(`K54;NCWZye@qWbe{bjP00-xzJ +z*J8UZ%{b-*Rs2L|kO;AmotLR5TN2+==<94}g{LZcU^#>ADvI+qkF8oga+6HtmvKt7 +z_=iTR>~SQl)+3*lJaw5Gd>5O=SE_eh#pd7sPuiy^Q|n%%A#;;_#hYDZ@stE?4|Q6% +zS5%%-6b2CQr={RIKYiQMtHqxrQ|1`9OR9J-Ea6WdrJ!@5Rh4Gkjidl65`a@v-IL7m +z{$J<*VLGzm_SI9+_BmX^o4(~l|L +zR^l8-##*+wgxu+z?Tu71}RVn4e!L=hIX}P4YB9_01zeT(#m3b*487Tr*o`uu& +zXxc14JuLxCOxW7(|7jVw=-|p~D0hN?OB!6?hR3H&xD(iXG0z1llzW3@z@)5-!#qJH +zv@-RI5w5r_U^;pOnzS93?tkJ4BGkLc+oB>;ePSb0CahUxh_O?L-hyR0FmYrmr&Sf0 +zp6+eL3B-r#dCBzjW-Wxv@>?Z4*r#=#m)6mASYp28p_6{~c7&=1{JqhCVG?GFM-vgf^ZJ?U8#DTJR16IHI}HV#)6hdT!Ptr__r{{SD9G8fM); +z?U_um%6^^Ze=W={FyT|~*%Hy@H4`dc9o+8cTgx*boqxHdFCvvrqu|VCO>R9oC^g>o +zb3^dO_5(%^%7TZ7;$Ye>?U^|mZ}~>qvS5va8li^FeAyI305cC*lhl_+1FpKMX{WV< +z9Md7rnLWVA)#~;+Z+AMd0z@JEo8JhAh)p`}&2UV8D$DbV`Z#@@ZF<2L8LT;Z!RA$* +zX6+2D1)&t;ojRQCmygOv+bLkOwxp7BbtMphXYKcuGm{P~M2Zi8TIKNQg=cl)0EaX6 +z*%dylH)j4*qHf+!17T0SgAA3CE9nQ+>$S^6bjXD#o3BUJ$Y#B9-&6v8!;acl$2xFCF=&uDtdg5j +zShPE6+=VKBE*$w9@GPw+;Hy=nuvNc+QFK=ujCfo&O6Mn(j+fj4dD@4cv{S&dzpcP! +zavm!3pz2UOZjZury{@o#hm-Y7M)Mvfy-^GAy|dUzXof +znKH=f7T!}2F`eAr63rKecOd>**xq4gJ+f^cf@aO +zw(zeqoCX{{87frbA{tV{$4oAt(nynMlM-M^E(!)Umnj&(AuOXvwUqOR^CVIgc{UlVauZ(6jlwc6rVbxJUm`quNQbvz%!@p-JLyB?H0eaB%gBZ%w(nJ +zMsIPM4K7?v2=E;{K!8d!YRIGhL*#K@f0#4BZBiFhgvMpzSbpAYL +zj`U^!-c^qYTJkUGCT~6;MEi=q44C%Z)3Yd8FG5ATu{$ +z-e~^tc+6Y9hbf$|gGD-WQJ~m4-xn;{o<(8zNkx-QB1F-q*pWheX$m}P4#PVpN~Ak2N1P^%-vVV&lvAMD4erqG+pBA7MZw&}Q*zM7%JE`CmZ +zX8le>JI`JzgKVROul!Z0N~pk89gaWQ(%bmrn3IQFhjqbj=N3B8)>uG!y$vp9$-;tJ +znv_^y$e-h?X#z|?QnnJEjPHIQSj?abA6*DwZh0Y6cmpWhgWZ?zjafJ5?K!TiSaR0x +z=XQm(7!vNHRU83k8b@0ibd^#@92Mex(k1UGUg6wu>kF}qGpy#r^xY8AxFNT* +zj=KDrstm)tpX;kZ9c?BL4%d_Zfg?}syIYFucyva7D>BK}6))pHq58lJnAQ~lbhpME +z+d&#$GQ-77GQ6tetL^6LvP-b?Yg^Nks7$dlKT+D9eKS!TYX;i$|JrB&x{0BBz;!Z@QR4TUYV1qOm7KOmAX= +zIrSr(aw$vs_K%Fv;e&4<>)hsFYQa_Ov)Q`fAF#4F-%1zaGN%km&x54yPh}AY($aTL +zMFff@nXicHb!rLYk@<|J5%Hb|7~135;2U27@>sy%wq&H9KQ>rWQWcz6z)m<$jJl-P#!n`e1ZeJ{T+#h|QG(`9>%rh=K0{Q!1jkaupo@ +zqq}vAid8z#N0Fbstvrf3N=;PAMK4r8_?vosG#eV@FimHm30p4)axkDt1AqNdMVycA +zjLq7>*kJ2KPAd4?J3m?iKb(Zyt%@*PxCkn`}#` +z8jwm8*x%#)X652mJYYZRqjVt-N_gB+(ALClH8X3s(Pr3pr8g|Pqn^s9@-$Ah6QmdE +zZJzM8I%-W1CQwf-Q<|n0ikz+UUkM8wQ4JMeFZz6sbMyJUKoJ9oK^_YVhBJjDbH2oR +zGM+n)qeXw(vpUm$+i}2$Ztb08;Q;UW$#l?a#m~0KCtSY>EwCxR^WkcXUM`Mo)@1gL +z{~UeLNG@9$lr@PRXK97|p&Bj4FI{tK(_W(@pNfShNUDV<_S+5h0_E2Elx|G0-JA_@qI)Bq)= +zyGwx)lMNX;B%~V|Jw!kxWRx(vyFo(BEhq!?9FbKPx0o%rwW9dnmD{CzREZOwt=dvkGk?D!N&qsg<%NibWc6@% +zo6Pnb3kGPx+w93`CfWDk-lfGDD0e@SX4#1iTbO(2S7Ulj5vOHEd=7B(bzrP1MRT!5 +zd!6O)dlwXhE8=P-G-S=oNIvh7lyE(Q8DSul`IMA7UlhewtAWm6dJh2%0ly82F-?zy +zl#6Q3lene1B*5b=J(^@mM=)fmg5a-qB)7$BsE!q*8+Ga_wLsq_>#u@O1DAz~aD%U_ +z`{@sX4gKV*$JeuBGQ7H0H>|-%mWg6ly_EL)M>!uYCZoRWO;{bmP7Nolh>_iASIaYJ +z-!bSCqFZ}V3-SOhMMG6cTiCt&j4wkA^FPje)#-b_rJyv!F*E0^^ +za!$MxN&R^7<&;?tGh1gXu`B0uA3OGQm;vMJ&}-ai10O1glHr%oEez!sR(NNHy6DRA +z_C2@#y}y1gagzpY%n)HMarfR;ajE(7idyzThh`K6Nm +zz&cWBeHsH#L9Bg$u)n(2nql^uDT64^>HxPC^V3IDlk;(DVyZyyXk|!X*M^f;P}joH +zWbm&xxhSFt^0b&};y0y|$n#ZNp?tZj?X#d8wPEdT8Rh4=_7dzpr +z<$bo%B6v4gy-T$7HUG+CGuP@e5mN1=4%_8J7mC-NAxo<>q#QMB;=FST4)4X( +znxWs2J8E=CLNJwHwb0y90P&Iwtp5sP&`+ +z$wyA#Bmxw}tKvF>Qq?&>fHWWLx7zf0vha1Dk>FMLKJ81Vuk4?Oy4TMcdy@)jn?!Re +zt|O{?H$2FF4(63Wi}_mfRpX&#lGi3LhrGrMiFp*o#pd$HKD`tkg!%}Y6wW6?N2JhGGVFCe<)?l$3b@y{<>0KcZ`BNSwk_ +zr3Pcuqi7OOGrUJq?p?}5*;w}YMIB@{sNBgG$HKi<5SQjLO!iA%LS+fnJU+CZF?(;=Te0++2aEAWS7MTn`OZlY(#Foc5}D)m)pIJO=T)ZGcGC^xO>yH@WNvUV +zlvFZ#8RmlbzKY`4*feN2Z}q!ejOLm64}{bYRU6=xtfIqJ0f3+Sqg0ACbhKsMl$CNm +z+wEYr3vgaUPO?=VC&Rx}yf3;#m;Y#k1AspSJe|jC-b*d4o@f}HuB198{a@NIPKU0WWus`jmc)d1O?EaY3G#0Fx{`dsM3wqrLGCTqCKN-38 +zL)2FGd#2``Yt$!uPd$4U?vDi7iLY)gg2Zp0-X591GhfEr@`HMEv0W77 +z8!F{DZ-^(e{$569!WQB1y28dCjs=ww@v9H@H_x4lKaKXt^q|u+avNKHT+1RzOEq0S +z>L)Qn70Xt>Z@0QNy1%a^sY=0X=aL~4F{zItUSGJ0CoMGd?fAG$^(`}TMW>|CkCy~O +z^PHSu`6qhzkL$QSymJxU>J7z=L%LQGbsOdvGWr>G%hw6$_T1T-tv^O40wbG9i+Ox8 +z+$HhB>Ueu-BmfSOPPxIX5({`fTQ>$!Bop+0n#?{>VD%&0bv4+1ssEHNH|tra$WsPH +z$J73fheN!K&?s4x64u0z=$Eni4TZ+QPH!^s3y4C43|jxvM`k}8J-kcLuGC{Pr6}=l +z4nQ;3tb`rLHdlvR%TA(1o57`_7(x#-{knhkAtGH%WheCImy(b#;^w(8 +ze-;mhsNP~kQoA$VbuBvcZ?;m~#ZEXe!Ep@io +z69ES-l-nVzzT$gv0fQVs*l{y_n<0n&ASgKUq}V09+fQI1>GzaW?tLP8n_XX}=8ct; +zAMv5iQlTrWH$TiFLe^|1{Po)7U}2upC;@mT58bp0#Uu&Z7E&=t`fS#g%W#>@@NDf_ +zotXO-4PS-@lLl(QzTLsuQJNNmh-b^?5A`oNN17#6`!3hYVME-OR*y~7oM6#Xm7K!*L|ucB7GA;ulkY(}{id&+;?x-8WhUo>uFB4UTgyR@Bi-Rq~@8jfNTIz<|u*st#C +zBvPx_yKcp=xAYwkFE|RpHvCcXy=&v@2~w3{#n_4M)pMl98kDo4I&^7cx9l-q^D +zGVzejJ9>^>(Vw4J1%mQ0Y +zH%Th;QLIonF)k0$cAFSijnQVAnkjxOjzk1dnAjR@;@s}CpSIrK6)G36QYc_*F +zo36l?UzCaQM1MIGh{_Wrcf;vID`ki$UnphOX^z|)gveeH- +zU|sO50jdYT+-K5IU2-cl<27JiN*1b|v`O8w&|q?qgkK2s0pCW{I-k6gHFx}%HulTE +z$|3(oJWH-2v-L%5+t)ml<^-_a$%Nwy`9l>{<^!Dmy2#bp<2P}j4`Z&Ml8d4kTxSK~|SD{{nf +zFTlcgc$D;O@S~>Xb~zCu(a*Rv0HNP6&P}Ox3s1z=7qd +zl780c>&0nEwK$N}HU%3AUj~nE?|q4)qtfyIBu6WNU{ZCzH1q8@mF(>W-$2Y$R7D^x +z&BW{OD+%pu&dkY{yO_ZlJGF`*_Uyi4bvpXdm!_X50+y9q{fy_6v +z$x3{;LXHf?@7{eg1C|S}%KkRj6*5$c0SBa#j{0nQ7DvEdhc62>znWj?m4@eG2#AAiw>egJKS<8vqI;UuQ9!c +z)w2nV?dIn9wSGsd%*WuyJ*kG_1JdAoh0@$Nk&QR-YwM#n&FYiRKMM+Oo5!j0`E)Wp +zrNXCYms?wRlU*B^y`(m_zLUz1;t~J_cO^Alsg0TP21QZJqx7fGelg+mtZ0(PEk4pk +zcC8$yHEvx!L%LdozAu;#4aezqFG7t3uj8|aGR2XXSHcxsY&P6RC&rY((chXVU2nJ2 +z-MDLgSiuv~CW^xvmuph{S>h9DI?HhUiMqLb@IwLp4!SD*ecIC@#_GX>H5rODpT|M# +zNh<~s7^v%}FjOrEwkbS~&7a6j*#kZu90iFfLB!TP!@mDb%7%Ujl3sU4If|o$lJuIvz<47__kc+^qn3TpS+nVXYPHoD)g=$&cjQo +z;jWe{n-}WjKTu7xjrDF)Qv)eF1J=NM-SQqHT@Zuw?NJ7%sXURAxv5*aBv$3M(xO5lvKSaBYTw^-t2h~HW^ZB +zAG5YsTn}#dfDSWJJ4uN*r@Z7nDxE>#pU+Ap*{;1B!eeG@g?KOvRJ&2m{xICIf<2mx +zUryE+PDl~#mG+i-z>rCx=*%dM$tI~O;aXqXhT85y)2G!qxq`?`nc{wnqKFRLJ6xS^ +z14548D{k#%vy8Pa_S~mKfLe4l>FO|AZ2D0`NO&(3TeR~7Ye#=QnPMBepQ4mTkn_EDWw*{-8|D)y8>Ig7lFb3=Xi4T&hcKXe&s?72d +zk`=ISlIAvoshN&ms=YRUt79e03YU5p#iMxqDF~w|kbOTTypyF+wv^gsZZZN=nI^|a +zyUcHX>Z3jJb>IFn6Fhx>0_2pT>Rm=c?#L=i@&=W50e##NTG&I1w3U%^uzV!9Hmgh1riL=7?1m8m9!qW +z9CB&PEM_n}oziw)ii}B+3E{p_6Rt_5ploSKbA#~OgHk-sj||?M=1&!!@fW|z<419o +z*7_f4N(a9(#HSJJtf5C4#li>Y{s}lQn#_Cw=qi70E3;0v{hjT;l*&m#W6XRsKez_j +zDxkHEmQzUc#eMkHIgvMqLeri2I4m(r*>GIzv*o6zNY&Y3c(7E4QB1NP1&Pj%`draz +zB~IQ+i-mgCF1f!N|JJ+N?D8FB_~r-F&z*k>E{*1KCggX|#MOaeiViHRS{V)8@t=n5 +zCF3eq538Ai>fLQu*=bTaR@xJ#*pIO}v~gDpWl|z*?c}^1##}qB0wNvZ6Kk0fNmh}; +zvC^xQDO-O?psq?#;ay4fKUa_Bt)pFaEzkn!<*uV@e09A&M%@j}X55>Cv}d?&MM0|* +zzkA!qFb3;Lo=V(&{dv`Q9%TEV_O>VpL<*7&7$UP#Ej*BN-~K4$Adr&Q{4PvyE|*KT +zR;(+WACB2zIooEuHc7GAtinscq#sZ0#cDn{s2iottG=%s`J#qqANQpn#`@sOa{EkE +zJ)^+eCIKm67}d%)FQ=e+V{8-eZtj2gr=by_>%2bc?&?Jdx^Hc&|*C +z(lCHueA}{d3x570OYw&&e=R7VW-mAQ<7z&(Vt{FA}9FFCPQ^|G-S>D-ZKNd(w+B6e3_QJx1Ti1OCRI!G>|$cP1;p{kBVc#P{Q8r`hq{d^^)h +zcerfy*+-U{=mZXEQW?Jl+2KOC*c|>u!I)S}LZ27eZbQe*4_H$(S25isnIru@4nO;g=6UbeJwBHmQL1QC(=2_+Ec?zb +zniJ1i6^uiaTh8$?YbP*CF~Fq~(-=oFvCV+o-)d8UE`J5Kkope=>8eU^_V`gr0_}F1 +z#8Ag5aS}Z>C^Nd6j*o80!HTb4rWyUZFctXZ?~8VmdarsOFS$$%JFN;k;EE`rrammw +zDXJ8(d-G*HpSzClJ|8@T-y!T6KFW%F7KL0-m0HoJF*`=qCtByPnz +zJEypd4$LyntO%t +z*xJ5HMhLm~~FH18i@*?fVQwIKY5HeBm^GL>yvXq +zpwN~6ouA>#1J~iSz0z!&inP!W6W_16ZoZI!dmnmtD*`6+{neR;)@G|Ur`|R(v$i`B +z*>{%ZoHz4;59RKxAViQ1YyHCXTAt5np;vXb0c+f&`6jZ|Z}P$hUW%C+d2Mtz_~mVJ +znH75Pb)HLoxiA`7XuS4YU#O7h$_|da-_to}xJc#wllqtA=#VM*)x*XS5#EreQ-N9u +zXp&;-xm=)DL<+I_&>Gq(8VPe09q)46tImCi+*Xj0nE#q +zHc!`>ED$l#<{G<<%J$DH%!$-q6Xa8SS(Y)3?rd3j_HauShCuV0PgLc7Ps^Z-vW^g+ +z%jDy!RP4qmcp5lBkot>6&_gYXou7_sl`jfeZY0j@+Adi~QG-9>GmY8&&(sTe^J;XC +z2iCm8N4_1P$Ik6{CVG!Ia9%j$R+C(ChfU1S6(JqeJxO)bLGRzmzBa2ZRb4<U7ck%Kq=X@pn_L8!Na(SB8mC +zGLL1VEbgh{DXIk#`DhI~$(geM37-g7cn?|hW>BJfO>wWerrpq0MgA`m;78j@F6DCC +zFHbg|cK^~|`6;9h$I4zdM@)I`8Wk78tg^-;rXT}x90I3R_+oX|>4dDOJ26-z>KEbA>rX4b +zL!dh|1eq?t{Tws2_OPIY%a8V>IqRpYh1)lL13x*CTdbqmic?NZo3aKgV&Eq0y+U=C +z`ix2S*DvfdKk;4>bqP2bR2cNHsUd{R&s +zy4!CuY>IdOlHm9kB`eL)f4f3&e*Y^9k>XqBgT%yNzrw%LCown^5t=m&42#O`i%(y; +zk^i7&{NNe%>vd$Rd!BkkzE*dirG)aS0UxXlPt%M#lRuv39kE+{e%<(Qljeqgw~C +z=~P;}PY;s1l^U{Yn`590lbbk4`$??~Y%; +zo@Hh?!CNyB83qXZ*XnB7>N#)$%+W?QT26qDi>KhNaI)rY??T>K9}1 +zE($*0;C#>LaFMKnIVs#+&>baYj~YH{itq1<=ACkR*CBaQ^;)={=_I<6tTblh^f&L9 +zn=;w1WQQJ98lz{;6OmgH)n9JuUBuvrk5!W5S<|y?2}7guD!3l?XRFOkw+Bl2%6*c@ +z`R=mSwI!up-#}I&*@JaY+I|%6cAWx9C}t^aQKbk!_DgrujZb99*BX_(0bT*?grkZGadSN2bM6`?>ROs{X(KW% +z{9E0uun-OD#rciqG@gT52A(jev^nxN7WbFRNl|1n$!736b?u6*wDh*!q_#fVoa9w4 +z<=^7#!hT#iWtuKLPc!-}fca%Nm2W5!gl#Hh7MB7tNwZxVyB+353Tfm$HdmPnqKx+X +zaUHFAC1N~T5aFh|B&C-c~Ge(n$R`x}4;sXHS5JZr?2E)gU_Uu#-*Dlm< +z7l!Wp7@4F#UYG! +z)c>g7Hnx5aQvw|P`{}Lzw>1Zox-ZGd4aV=L&R?Y6zrUA6bZtsYkSNGxcuRZqU*YIZ +zOIL+=X@k7Aw`+?N}> +zdgf|uV%*wrqtFH12e^pWn1Bp3%UgyoJH# +zy2pdf;l(OIn?%)9<{T;Ox|hAPrWdnd%BeFn`6r#gP_B-cO2$9Na1`5mP#d``$@c3z +z^vJM%c=^H_HkX@|!cyVwuB})a(k;*?a2i8Xg4QJNlmaWa>UKBQJ}gNLtm0%DjeaAx +z!a!x$UTLN>LyYc7TOL364=?Z)+EtOAZ8YTJBLJk7)MDAdN4km@ky*1qg&6HL7n1a4 +z1DC@1!&61@QlU2Ey}eE;mmw>PXDidGQf?b~eyrPXNgcNqAtjx6t^~O*7aU0|#vogl +zEP667SHkh78PuPyzVUJIbs*nuAsVW+@5Nf(7{Hbz1qrgvJ4^d)9ESWk$D}+@el;kAryc)fB@mTD$2BMMgBDAH8-2gJ$^Tt1d%RT +zDfSfa@6NC$nVRqIzEiPPU*z_&wl3vv`hIz>kwOR20$rvIwE{b)$sMJaz;b`sdNs3R +ztO9v@Z=rTBXdq0{0TF|U(Rv26$+nCb;mBqK3Iv22>L9!-U^`q5h9bD04J&-gQ9;M4 +zA4B!{k3t` +z62!-vm$P#>*}H9|_vhg@;|g8f-(hnaP~o1Sl#09bNfYy*Y*pt(*Df(_;K!9B6K6Mi +zQqri5&QnSMUpyuLx?l&zg>P9821y$Zg=r{LT|m~OA5cU~|AB4-?qC17^2m!;e`MfMcTTQl*7flM3zgV*4hPY)a{pNxFzX&z}$q +zzd;pW*^Q_^$arHm9;r5`mR6Nmqv&m?Bx&7&3^5W%hjJs!HFV}baY1e_xZG?xZQdkQ +z@>}+p^ac_c2I&}PFzHgZt4%ZU_>L;L6^OC|OWUCn8?IZYdte0?L69p2xU}MXFX`ty +z2y~&Y8!_|W`h}Oq%k{I|)12Rf2Ez*Y==kZ_rd4<(WYbe!R_m47_g31FelJH>x6Zt` +zw#XmZDk0@sX8+9qr +zhU+^>SN6rfhFFmK{ +zp2o1db&dc^Ywinn2M9@t^pjwHYRrMTZhltSRr#p8n;Bf-HcZEaDc5$K_(xtJX@j)2GDS;lSFSSBQZ1 +zH>BER_8;pwFN;;FxL<3t|9psDw+ymgdHnSY?H2;auW|=Li8K2hnp?3AH5aVos7)`C +zQLxgR*iYZUZhh?c>L!Zf3MnFUrF>+Dh9G>eJ@3n+1>P;R#9cbIZ`@N1N}F>+wUL3F +zP+bWcOqJyPMy)daU6@it?LrBxzXs@rLl*JqqzHEIopnHpEa%-OI2`r5@fh_^+&wk! +zv2g@ImADSAtQNRhMNVnT+x5&ragTk`s6{IVi@0`kH_I-!sgB!;=Enz_d`n^{3@;R* +z*F$akUCd%K6(nij*>yM&uafPGbf&tXlr@+5bdJ1U%vN!+WyJZQzvzTL^*x%AynJyZ +zn2MpbC@UX;NxW1UfC|%5Xs4?iKC8HXQC2PDEM#ytFri`a;=^v!kf~Jz3 +z{|eO9h)6{hXQ@>7eU}&{_kO6}V5ui*l|J#ful89(@p9MpU$h85Ruv|F&w6y*BBio%bap8S}s#wVJmQbN@QAwVjZ~bLh(v@Y2xLJAa@jcIhQG$RcAc-W> +z`U|DmT5_kTqIQK(`q>{Q&gB%4Lj98w7nFxC%Tdi87r8+VBF{mDjSPAglA!zTX1TTm +zGiEuYpzmMr%n=GZS;~EIC@rn{R+-%(Ly@Smo>+S>>0ZyjGBWy^YczCZe+}SCEPMal +zr71HJ5Hl_Qnl+vIgfJ-r`D=twcj+T`Y1?TuB(HJ2Xg_LL6DQa*l%fA#jFNXyE5_k$eYxBCB^KsoIobhzM@`vfnWYR8Je^pj3q! +zP99R#YmHZWvp}Vgw}cNW*j-_z^#{*(26E5!j9=pJfA&Ol0lDOk+esSI0E?o>pa$wv +zdmc#=5CkuyX%Jv_=HISVq&9Lz=N2-(4BPP@5FYED*%IE42yv_FxfQ|6XQ;EM8dCNs +z@x9tG*e#{6?5fq*Zy?U}G2L;6LyD{>a=XE+dz=Avuvt4^8=vXc-?-ph?Lhwt@fn#- +zU)4XiDx#{zwXJl7lCjZZ7M?<~k~uWdgqb(zCZp5}VE?y3Chgy+5}%<#xK2xa?}%eKN63hXG2wYqanV&3I%816x@NZPQG?<27XhI-i%z4Wl|NTo~ +zy4XIuFjY>w` +zcXAr)z|t2Ty0sSlJ6>B6aMJ`$`Id95bvF%X37yl98dLUK1>$S`x#G#qQx +zo^sn7&iYzVZ<+&Ld{qS)X|s75{!4DQ8LcR&hfzD|iUxCrpp7TE=~X=FPU*RgaFjDs +zaVB{SRwl9yz)ls`AuKl^4YR_@Cq}xTOMAD$GK68@$_rC$Jn7alHJn#0ksQCHIASht +zXC%{!uPJoP8cwgLY@>iw!K;tGSfAX=@G+~zwB(J9bkU>h;g`|jOj0Y6-=~%BdSxRi +zX3s`+nrY|`l06B>O5%eCv?_W +zLxOgDwa!f`h4E2VzD)QB!U$*dR<skXy(dTcC|M9UQq7T?lfs@SX7#Jmhf^Q~6GtGsHn_hf;yj-0-;C2Q9?3sW^dIWBG-N5OMOCW +zeLbvzT`P)&?hn^&4?H9K9zXIQ=#$gux-%*I0K2>pb{BI0H#{pFn|45{s0ce!Eqs>V +zKT5yM3_ecJ5%^U-!`-hIJg2(NUk91y6kZ8!ZMxYExgJwEFImP9 +zhKY-|ktSLZW$Gzs9$5Lvr~C)1s=y43M{V)1CS94{jq>2H(Ri^BIu8M*Ei0+)u6BI50g-K?2f#x_EP*EVGzh$I`HY~@Gu +z;4Rty#Km!(@N;BqXMP@km5C^fn~6xrK-?zLG^bFi(I`qWQEraBb6}xR1Yn6_#n?L1 +zRKwEM%wn2pL{*~9AHL%sZJYa1kK^yys>;}VnDs=-zfEc35YZyRDVrt2rCO?ICb(^N +zY_vX)U?*(ZYQZp0>I@AZF30VWZm|QB~&i>l~@Kz +z6N2<{);P8Zkxgv3P7jw(bG2ZTQH!0>m@_O~RhD?yq3f6v(1zFRKGz0`z9IfsA|@9I +zEgW(#|FX8pfr;AJCeLmx@%#WLVJ>e&dbw8!+=Cz)?iK(deCtB^Tri0dr~@(~EQ +zm64FtFu<0eD1IE`Bf(qQQ`|)_yz>X?MR#A6)qUj#TNC{w>qYPAQ$|hl}q-ioyG|i9|zf!pbR}0ToY`^nO;X@eB3)xDd)!D +zlhg27?o6;!Y$LIivr;I16G+^1^A^Leuvd5?1~)>W6s$BYK;;BFRfoukB=!`9&4(DD +z)3cO@ICn}Cyg0wfc~I9x5>oJF=i56+K)oREjJI_5v7b;`Vh7JkA!Q`>jSF`z&Cr#9 +zN@IP8Nd`=&G`vrKuIj}bM~XkFBY`QFL@J63F-S)}ZBm-ZbfUuzZy#-(%4+f93e#WT +ze@)J#6W+kt2ON8VM7>DS$mjKtnmPmY%QBo=^e2WpbyQ@|xf(B-dg%?THe8*iRar|( +z%i4NdnMEp!?B6OQxYx^Vb6^HpMta04&Y$>|xoialbqtB2;SkEk)_bMl-z?c7Z)zG# +z3KJos`!M}bh*(m|y8Aavh>rUUYxXWZQ=eZsu9tR8v4N6B;olw>(**iN72C$ZY}tLg +zivaW?)3{~tKafoq5EialxC=m&d*2xDm{;HFv3SgvQuV3fOWv!vfzqGaCl=|2*dLXj +z9j4y4$bQ$v-C!Pw#yV%f_}?cj%coCM(RT`WJTWmz*2V%VZmFV!0St&2{qP61BEB*fLR( +z*~s73#^JbHn@Qhtp6=c}qb%mgoRmBAm7}^QY3ByT(>J6aoKE^S_o~%fRSphdaKT8*md^yz{$1!C1N~ +zV-U`B3?PgXC=Q_G+kyz11FRzmwFx8d+&{TxON(3=B+OK=>*`CU{%Q`o`Kt +zrHs(tNj9K%w`=z6!T(l(o=$`wW^m&ijCM6PZ*`670?UM-PrZL2wDL>fz*Fx)r>rcd +zA{<7_pbUF%X0j^&LG-~rSUAcH{%!LvOcqj>*R<;tErDkpJBp3%UuJ!emmoM<7m2(j +zo+TsP$e{gHt6iT^c>OMet4_W^Ck{B!z~o;ANs$gFLdt~KskDy7gW^WAqcu@a+Z6A@ +z@A;gZh^-!m+M^lfE5%;LmLzEDADU$fjJh#iq&jWR2G?JePNhyfA7#@NJuZH>eZp;n +z+A$38L}euZV>tPEzV|S^iekJ&^dn-e>sc{y_Ga1n6xJyI`y#1a0&bd@8`kp53M%9}->CXiak@Lrgf?Ni<6C(xWP?TSY3FCL;s +zNeNJ+n%NQqYX!vdO8R>FfD3^tu?v0{_gIzK~FXK +z4+qd4J&87XHkXFrs(7BC)AZ}{kdAuBvj@7SKIzSZ>4}_Orr^ocUm0GUJxF*&{NRLh +zAE5=f2J~iT1i-kXGX8$Er$s_xY#B}`qGzWUC+_}DbW!uQc1s!5+_B?f+a2h3-!Wg_ +zLsQk@Pu+Um_%Z#W&1F5;jrf5p8|M+rK%vg!Au@I@%iD2vbTZ(`hteBqEq2g#^O?)ow6s*$5P?Fe~}zHBAs?*CmZ +z;^@{qxig$eK1}m5a<-03HYUR_kxWz8kB8ZB?O3*?D(*D`21WuD=-RV3{CI|9Sh4Wu +ztr8@wIE83THlnqW>sx<(l~9xWnczIr!`fr=u(Ne{vu_C|uEz`(A(H6B79)$>xwLsP +z(;*^s#q^#*;S@u!SiqAe`NBgz#=GGW!aM!ih_wf4rxuDL6GfPCi->+cl3=xSI*v0s +zgfJ#PP_blXkYC0`Hj%n`m1-+Fy?1pUyy-kZJ$cR~J8QODi@R%NnGq=SRYVj$3+uM(zH +z1OZMUg<3*qqNN|^KU@fEEhm$Tzw%v@sdpIsuq85|z9%u_VHOJ=?`K>Pc0jT$%QG%T +zQ3jW#ta};>Rq^{YzAj6oys=T>B>$Chww8XEVO}JfUq;%fczgeMGHu7_qPOzTVU4uE +z{Icl+?i18^R;d_%Qc`sNcy4vb1Bj6r3evstlL?yV3~P7+Gs~eCB4dye-}@CMEfR^I +zKGGs=>^Ki +z{q;rlzC$#1yPeY{ael0x_yq3jep0i}u68uN(doA9?=+!d<~f}VU)cx~CassF70)U{ +zKkRxtUi$XVAWs!}N;h5fN^pu?I5wc%_M|BNH$}zwbC;}b(p?C9>pfLd$l`f;`?^`Q-fA9IHMV#!WLo-qg +zRyM>8j;-+&uWG=VKmCVkn9q +z>L7&rNb3@pY}RqnC|T?U&)UBq58awcZNd4G$KFQAs_(&95G`o&d4`{YlbN7IU~H+b +zAFoM<?gKZQnTrT(9XRAad1~_ISF}B0gLG +z-f2XgwB!w3${XKfcX;@gS!n7{O}=QEsQSelE~`UgJyw=5DVeH*W*2&BC+>IO?n=l0 +zZk<)~>>WjoqM%HZuG^0GyeVIl=BSzAH}}H^4&~o6ThI8!L#gl_=X>;j#<|KCu22iUt4CD^+;Ok_=e86$bFYpITwks>vd8pW +zCF-y~Yf@L?J~(0IbKaQ@ou%eB^Z+h2+H?vfLtgEQCaE9G5x>e;1dINNnZ@-)G4j0Q +zjl2!F&`vS^VmAB=m0n?3nXHuor>~Sr*y_g%&#Z5yS1cKlv1CiUtDc<*i5-T&pi(>M +z;!_)!Z-j8q{ +zSR41JL;JogkI$=kFCp&wclXlBx*3}HHjNG!H()yF#M{yI{pUN`Kpuz^DbS#2tZ-j! +zcTJh?@P*2v(tF%*I0|RTo$dhdP(Qe3%V1Gl$lT2oa>sgDd;EHKDcxXtw|ljN(cS+5 +zN8xyz(TpfS_#A5~T0PjJY|l32FaO+0Kcp5xzy4 +zf@;#tD`qp0gYTp$;`MnG0F_K4yITGIqv$?gxk;JPaWXM`%^|HKuGG&Fos@cWtGXcs +z&)L1Tu{9%Qk_RX6JV)$&>W5Bcy!SJ>q_wNJ%N*Irs-s?tTP3okgFj8j<vWEnrWgs7NL{^`m(B3A;ZHlw2CUl*6{Skw*MAI0x2LSdm6|2AuN+-} +zZ_bGfGGqcEI|^OMnx;aWn&IKqvb-aY +z@`wqm@kXL7&@I|lKPmz;UYJhiv$A(tNZ=O{dj-f45_jPO3fhS%rEi+fDIC#M*$#wRpl^ +z@?euZ=l?)lyB48DlE%w?%_))CrjfV;qKKx5@zg%m2HDzYzG>&eUa +zk}<<3jKNj9-yn2OKiVYZnuKyy&6zNrJKh=lXNFp8kfgGV#3vw-o2i|E~x1s(x`$opy$)x-TO!T=~#`IGVFJ+{l7Y(!2raKeZBP`=rxEgi}X2tz>k}+1!VyQ +z0qsqn<_NPM%@+}>kZH0M(6G#!&;%bFuKx#8`6WBd`O}dtLG49{vGUzRLIuuE5yHE{ +zc1rpli;2Sw@-=we4Pv8gu%a}e7wU{29UWLXvbqsco7_s%&VMo +zB|>sfE}Npj_Un%Z0g^3oh4rs1cz?DmDW~)m-6(eelnly!kjG;!ZZDzzPyYJ7zbnFR5U&YG^vkg5YQQ>K)-+UyW +zc585%NeZKD`laR1hZV_Q=ui1ToK%!*KBM}}^h8BqfpSu@9%%3O9Yp`e;HvpVq~h}4 +zVNymyX-XXyv>6gVkzU+JxEAa$^DCP|IMd$g3|x=9Z^8A_4F8uCQZk0rjZ(4KV=>|G +z61Gpkj3@sen%+99$^ZQypYjp~0R^N(C1rGs9H{gL3>iI2>4uFC5fudK&H<8RbT^0~ +zIhp~|(jihq1u=fN@6Y#l&d$#M+0J(EJ+J$^9@itlIl@4j{~u+pQC!zL1IO*IS6xid +zYO4C*MOf6m;=NtqyaTL(?x>ayDY}h<|FCWzA6DA{aIPxt`t7I>4y9%35nQgwT6rAd8l#MrX$N0H*9AeCYK1)F~AyoUR^nd-QAhVckc&9nElb1D)&Vn<) +zvK;WKTnjRx-i*mAjx!fkgA@X-g1X81_{bkOdy}2Z^7&YlPvHOp4kKwF_Cmd~`_qtw +zGSf3DI6d*c=QigqtMCj~eXq<+ZC#{IlU036T1X^yZ^@?-t; +z^D8mSz;fD=1)pN8fI?0JEYnGs6l)Ka&+Q%0+#l48c +z9_g3|tPH#~yZH22D{&bP{ExO)p(5Q@Qtu(>x13^mOgxugqu(}T_q9(SK9c~Nk5HSp +zhDvR$*lo}iz49*^%pl1}S6`TgI^u7v{32|eznf+vHAr)(a9GwvL!%So%+C8(orbW#k%#+t=mh=+tgqY7|e0 +zYcBG|b~unH;=^@6!Kz|1a1QA$J9T43`Vq2#S6SDg +zjW^UuEo9!b-EA)i?Mh=N-RyHRJS>0#Ul$y`^1u1sQUWn5<<=V9?cKfJ@c!mqQUZcF +z-ftb{Orp&eG&e-EW@HS^yz%(PyhW&rFS3&}@Js%|Z03Nsnek&+_fG~wEG{68G +z$4##tf(JaYA$^tpQ1>o2ZUCvFDNoe6=3%Ww;&jj7n5T2w^zv<1lfT6;6f3^*Uc6Zw +z83!|&g~>l?cr^ZjHTsS7ZcJ^aj^X%H%CTD@F=tLCB6(_l=h{eDQIyksC5?j62}NUQ< +z_J1S2p%yg_ceJX(dJV7EG=m(|8}mLLKuA$|AoJq)C~o_YSNZfe3+8W}4SKbev@BC( +zM)FHp#rm!C;>O34e?brckq1ux$M;UTAsUBVwZYu=* +z8)%_R2W~N6l(zo9D;G6jjjlh-h^o>}+Kdw-5t5Ghj22=?di4QC3LA*bX72TBQnM$Y +z%+k|38=kHENuP8IqdvgoA$M6@nqXxx9d`7$d1iIW54%8wTB2NMLtNnas8kc)TnPWPZsD +z%pr$O*=&YHpTU&rE$eiJwFoQ;(^*aQ#_qg7C&!0+W#%^Y$eP8@hW2R(pY@8AzNp%roQl)G` +zkRB0kt^x1_qckry^!eZsqBx(Jd|z-gU>Xx<4&J3o7u6|w?q~nL=r2z +z17n0JV5EGkig&zPFlifJcu8S);1>j(?L1)P2E9w|5z))p5FATvP<2+lnlQAKh1PTg +zmk`^FWs6p{#dEbD%FgWs>AS4?ninG)w@hDjRvPE2jO>hgZrNM3c3yCAi(h)MG_b|O +zj`g>0Y_zH +zgw|Q=VE}I6*o5qWl&tNHHSQ;9ngA#v{7LDl;C5D6hC!i{jZ|^QC~J%-b~*s!sh^Ac +zcetB!*E2TPD@M7gu+z2LE?K$>)5wJRPxsY*tf;I%nHNF*Psh%EravfWt>d$I5kD4j +zG*oDkj)2*N&DQIkRaxBp34J8`z^ej0NN0?Vj?TW+D#e|#E7ym#|DEnQk%0YYto`?U +z+1~)rTC>yUft)Leys4n9sKr_E$4zm<4}<-U3GcKTKQ%N#;#4@*B*!PsqTzAjJ#r;6 +z5DiEi_wmX*9aKThfg;uQ24G14VG0cCU%59iR&i|}ak6UyuU$cdWFW{xG3rNv`3Z=o +z_iC()-UdRq$v)#`ao)}3F>i@IiRCTII*wXR^9Gx`*c|c6=S|5s05eD~cKDoaYNFsh +z>jK+GAHQ9@vG*F-H%Z6B*3w_QD2*yu4*WUm8y?yw8J#?BxMj*kQgFz5bCvRh96> +z7K}!T&Z(XJQf^zjE=)TEOk;>F?}GY(Y?}dbw)t{VBPCms&n-F)UYoQ^wFwlZhQhUD +zv>`E7kZOU%07;8XRkL}Q${4}roGAn>a;MhP4FEI1U@sEXkWf^t?!8)3x9@q1-WphR +zvO}_RGpIeQQmqoDd2G^#S+t`|B45LQmDRUC@d{D_xALTxOW~!zAg_Dv02k-;e$zndx56?R)a371 +zk^@ijO}b$82zuI>-lzEkk!6LGULot4dX|oGg6=Jj4u%uzsU93Wd*^&)dpv8E87I^{ +z-96xXATptQkb#E%c_`(z#b+r&V%{2%2ws_3{$)wsmSS9jtDG$#We?6x8hEjJR-G45I(n}GE*Kqa8NR$SI(THTu;a8m1X8qACF9?I +zoZTnyF}Xf>=Y@cCY|Dk$#+MP}9r5vgOTjr@RN>oKcz8ilz@{(y)MjYXPKauTO{Zg6 +zYD;8evJeTw5z*2eLS~H`+afQLUs*v0_$qC3sq>ZWJ}!i7{OsM1fUY8^o#~U=bM>2{ +z#kt`Or3N#pBsFziBMEg~q0p)18e+Km6R*+DtF2`X25Okuz^dLDjOUD>R1C(;z)rl2 +z_H)WAmEr2sm3Hm^t#x_FgPpI&z6ZjK(}lNms^#QmpCO=PQLvjBE9&3#F+}ykq39uQ +z{%ipTzEc67r%~8p9R!M6D%6l`zWd&VK<<&`CfaL!K`hpWQtZk*X3%q>HD{#*R(o^N +zf)WUf$w62?#7TsSc+fJ^#mIztJDoHV>(XaHnv~iFnX4{_l8KQ&^kg>rZOyG=V0rg; +zwaS&Rz-<2)B<+VYk_%!ok25=&QzH$qt5{E5aR!Ba29X)hiBS{(a{#U(v)m%rNzbO1 +zI@Tt)VwK%qk@{d^({iXIjI}~C#d5VmV4{zr)ZTT)2tfFecg(&wNDoBsB%(U3(_m~c +zepOqDO2x*}e{=5PcT3ahdaE-4oB!*G`4F~xdCtsLykOVzIdOHke~T9WOYa?ptix54-H +z`F=rkSnE!EbyICafOM{?ttops)CW{VQ5N-4gYiw#w4q}d+GH2p_*6%> +z;lGwTSh-ZDwAKPah%2NK+Rh%_m1QL>%HEI_^X@CJz2{b(iGQWtLXGLJ@@!mzY@?!a +zMmonGph@UdyixAms~qASt@6ac`%zY*(Tl+53(c56tOY9HffgaI06Ad|c{gOf=ja@+ +zV*=C+j^!7Z(s|hzW4X89G!3l9TMNx=J<_0-PuY7+EQj2v1lYD4Lmk2Hr)n}A;jc3M}F$!e)g`Vj{ +z3CWFtIW0>@S +zFf`)yT1vVVk@a0=e1T1XGpLLn&r6BMB>Tbyo37e;we=mjekGRcfftn#*Z_UYY0|Ex +zta)zw_4>b{m95L%ROdTlDV>a**k^ZIIb@%S@6BKbC@LHx-bUqYjuwuOb^NSrJd}Y{ +zISv1eFEY~Wo9!8o3)f(pPPjZ3-z3nq1<4Ap;ZVdAtyfm5LpjV|OTiA?&rus`a^KcF +zA8N4-MA7LeIUe*1U{|P#&AFP1d3QlzkYAFHR|MvGEnAW^E0Abf4P}@V=L_e@=DQ5trVGxKs +zl={x*LDT?Sx=JxOOlS+=1;zN9E#ySgzPtK!Q;ccu-W8YMp`P7tL{)!eN}gJXeang2 +zcG{ol9!gg3LUukyYL3k(jyEO@U*}n|y6#VZCWY~lV`1Dz +zrPS|kX&fh#lno9Ptuj*o^8wAwyv%gweuIjt7>XRfvz26Qow4XcJ*i7Q=CR}!!8D^k +zo}T|oFDA=qh$C1+>$3uTT4j-2>YM`?reZ~JqE|#WMUn1n`*OxAICksg#*PLm3hO*^ +zhgfy+zzVWA>9%6Z3h)~paH`e?6{)c$65cL)-wD0z;TAV`;gRaYT_eU`BJKq^I}LD3 +zBx?d+)dQfcDBj37=>V8~)0b*S6%?`+SCG{l6y_*-TEknr8xSYKa>NlsgMEi|`e;j}qbSLT>r1JWf11BfgB +za#HRWMD_LHx@-eSxIx3+$E=fd1+~7`ij_=>;P{&50l-X0pbDT3_$#sQ4&Z7zL?;&2 +z*9JVunQjL92N~gAY=0Zr=8hSkUu3 +zOk>ubjmPz8{!#9?-b?=bKRk@$cCui}mVK?tbC?$VhWQh9+OJTzeb?pX{*AA40~1p( +zVtKPq)d1!G+1~ouJSNzZ`-^nQ&bcDBEr%hs&t)iad~wZ}Gg +zaZ1bkA+|FHL?Oq=Xo+vR_VEe|&3P!5xZpDSgn3j<*1o~pMmbFzV8Y7fC;tswd6+aH +z6T6}$XdX}v=$t$#nmj+fH$r~SQ};ptd>ibrR#l?!FYmxJt6~0oq`bfXVV6X}A2am0 +z0(x}Q=3durY@I;P=}z{zMA4+xQrL=$j@L|ZIg$G +zabvS=J9}GEazO%k!fTd}70Q&V5{rf-5!&?nX?CjodEcEIDhtW(&eQPVqH({> +zQ|8v4a`= +zsNS#9TS^wxP5zGj3P}Q}B_-Tx1(Hrj$_9>P{NDFV=C$~$!fm@~?*Rz* +z+0;d!7e70G4BKMI7^hv^vTT(733WO654Lzh1|WrDTkO;9!yCZ@)9|(cn8_-qX)t3- +z4%i2|ZcH#RG8u_SXsc5c2cb2}X4rpW&G_#epT0qlvIm@)2lsh6RZ^wce!J~Vr0Tw< +zbzDn&gs$crG=DnUG^osSHNOxORI*q6CZ%F4>G!{qxX{>aAkdRl2eWk(&lsmntRzj6 +z&v0d+PR^3_Mi-ZuF+;8|{rLH_Z@ODx9b-Gfs0r)zDwS$*0Yu8yFrgfbUMSte!EaC6 +z18>L56KmWbF%*Bj9Ej+nY?I@-Mgz94uD>fO;+{W7piljW7Vwn`02|4C*S9#DI@-R^ +zr>Zl8SJ;j2mHwj(swg`b)Y7Ggrb4p}p6S^G*4CT|_5cM->5sXb-lQ2T{qfDug!plE +z1rU`yTS6K-4ShjNZSngEm}^Ael%}j0%Q}tUR3qKoa(R?&B>G6U +zF7U?88#kV?(x24H9SVY1UdPcj@rlwhE)?Z@NE~nX#s#%n3D=IfXm0qf2y*!21Lbut +zX#+3b1h?873%7DzX1vBts27>u+qdYRiMe=)mGay--o58?M&?Eu0lgQ$vH0ed309cO +zLI%FkE(R>`y3c$Vh@ce#KesIHkRZgbyQ-GEZ-=zodUbJ^SuS~^PXqu3wwpAQH1Jpz$4-tx%xSJ8t3S8mpkj1VdFV>m@BFQM1G4Bnbyj>(dUt6EDSDW-aEDU*Zjp35D3+v*mu%g6~IQ!6GbuQV5fg4nq%M)_KZ%7X>gD28Q-3NKxAe7ujW) +z=?^*A`o>>bU^iuQ%EC$sT0FdA4bUh2(+_mezI*~3HkZPH!0JTzS+&(6yg<@ +z6=&wZ>ny#;TPPPGtBN5O%Lf7>;hE3SU(Kv}76*YLhfc|n2C}aVU^^a9Xaf!S^%a?r +z00L5Z0jQUH(t>~1yZUd7Ygx`V_Zu3(ivh@V#e%ACGedY>z8+ttRUmgdw)M&TABbYb +zBAX#4IXyoLqB`nRT*#qybVgyx%ot_|a4V44}!B}R>kWZM80-*sb%2dYO} +z%u3<}8~9S3B(c5Eeo!lCQ1poS67pmh9<7qdSK*~B+n{E6=cUx_Yr6Fl2FSB~2-?IC +z=p$MLwH{@47{4Y+c%-Tms3~?Bdj5j+Mu+xJ2xCg%bp&>=9ic>etpsg3taAZ3ERQ(j +zTplkz7LmVq5jkq{d+!A{lCV~Wxb>bpF6+d$Oqjeaskrdn6)ToEAEwV*vL;_`%_OG| +zP;{hX5=rO3_bM&VY6K_se^vLtXaRC@8PEGtH=92OfGd`Mb7y1Re{}iDxitVzvh_0Q +z^x=(A!!P<@&Iv!Vo{gt*ie}7lT9xnDn5o>1#SKK170-BS*t2KsOb6KIawG<%>!=>^ +zx=vbO*SvH`NqIj-6plVTd(*{VkC4Kv>EjrfE9s16GDhqRO}EtU)lR-7 +zCaaq4_4cyId|mY4s)oKa#zn{H>PnoTy^JFw(>x?{efp2iUs=S9;#4Nx +zPx}%C+CM!KaR)WGhHb1TIM*OAhVJbS}w%4^6Id~0}Vx^dd`vw>%KeL +z!Vs3)v1#+u;7M5N(B=RoFaO{jY)a8r2H%0nq4u>vGr3Fuh@Lhte&4f$jkEXAQKTpC +zE)d8e_$~Pe_QGyjJmWkLHvHpR=LNnB6;s+j2VIVesq-QVy6#H`kjckkVGVlC{wSEE!EwqWAjihoJ<=diOXGw!N?dO*ZrKNQ93>4jLoYJaD{RE>k%P$Z +zQG*x(t^*xrZmy`r@1{-oW7R$&a=(65FjhviNcMOxf&k{Oa9)U9roE*oe1)H4u +zV)pvXD3GZO=6d^aoCvC#Kh(Ubcb?jthZ|Ehkh!WB;+{hGj8jm^QC6EFhbTWLb6(2C +zx_aGY09C<-?NNSW9+J_`Y4;G~odMB< +z%CAlCm~D7GrB`-?4SFM%P^|D^&4x{G8vycT05_J8K7v9?QcLFHcq6Hq?LmS-%xUR% +zE}z%19Cx0GR-ocr3~JTWfcdrPmJ>(nm#Q5)#CN?sIoz9DCQC+{DOyhLzG-x-y1Ekdvm?g$Y^pfWObLqFL83%?0O^3&ZAQYYdvKZWYZ3&F0|UnCDON +zcNgMf6xDJiJ>vN;p9@o-m47fOmK_sS&($y(wv%BUF0+v=;f8dN6md!923+|zpK>~S +zdW$T`InSu~5!%ZYv@wVh^{;v=Y!h(*S7e6;89YlOQTRkYF&7ad-~b`U%5wvm8@^;i +z>l-`CY6I6H{ysZjB-#Tm<~U#sCDMg*B6gZlDY$2QjQM7?l+L58HRdIXsYAV1^zxZ# +zQ)as%56$)}Q|XJ$9z4S0&?qTvYY9)UhpiKY*|EEG-xL8uSgn!=LypFLD*`0?pWDp# +zd~E}?NL>|UaS!#-CqqA~O?Hm`&U}WQ;U`Xo%~U1&Xr_Uvm`wBoojAUHX(U+Ux6RG9 +zCc9wejdc92VcVr&`|{_{`GUJVBEOvZ2ZI}#Pqa?wInORG0)vB@(YiFK`jni_!KO`9 +zIWUZYWnsJYpixA!3KgHP7pG}prygLDFa0x>1r_#56#z?OPT{((+EWRW$m9ojiwdfJ +zq+ROUTA)V(!>Az&u~)=zE^hG!b&Mwg4T@KP?du6D>hz}o1&+L;pS4jPYenaw)%~TS +z+MZDQwiyHj(SknoMkrIajIly^*&8h=SBG=*R7!i?kA0sr9}kQlTnK+@wg)~KVjpOk +zbx2&vk=-3eM!_$bwM9&qAb0dMFd4(zshAj{HDYsBpXuZqYefSiK4rTj-~w| +z41N68?nvL3o$_c8uoaseY3o8|0g6DJ`iVC`&sHt9rheD*rQ1R8LeibHmslKuP2JkB +zp7q%n@NkYR)ena_7H_-owC5T(>2`DDFd{70B{0;=$2djRG!>MtrEg64^ +zS{Vr*X$_1DkIUW2`0js3i|14}-_zWMmD8G(R(SKQ*IHkQ2w%@vq)ClOv!fWh3d&JD +z(?}WOoers%bjIk>e{~}#vXUvXtYE@+rtjU5f!=hinp6MpK?0RmR(V(&RWVL2b%SGVVmw8pk+kzx +zar!Ovi>;)hX7-hiJYcy^XKp6xT&5(sN5_kT-8Y{{bz9_bwB+Qlgt3+=kC +z%Lf=l@S#oT@{~Ge#M3*b*t)2dQJ=-_o?!D~%b+&2Z~Azb9i(S_l8)^n@<$u?mDdX?ubI5YNjxUq|LXjM<4fQ(h6VI +zZ_>sY67=H4t6*K*iK##3_TOUxvZmBGfiz8>?Ex0l4z^xY`>Q%CHV5vC&Vd6|k(h`g +zemD^Y +z0+^L}R&+3ofK!vKtHW9I0n!TcNDwtUwYD`xoZWf+QPSd?88SxzwuPS@7_gi7@X(sRqrNqm(2DCWP(a4E8j;P)A062OuGBm$fAX$JU;h*&cX}SW^Jbrt1CVgsxB|em +zD>|~b*^neMiQ6x)>7^?_p824oJRt!h)=@i-ywwkQ+24>=Z>&Q(WRL$kYJ8393v%eJ +z3s~Y7r;kzdSs4R75cqVoj*l$B1o1JVko75*l9+fjYx +zQtIr_PqjV^>fcg#LpTZWRb0dip}R1`@XwVIISRu{4f53sHV$LnsQP9OZEc$rNe3nK +z`n$K!!paau)%=%n!F8>^uBw@d;0RRISs_0LA*dd<-;tV*+-Blcw8)9TA>0-Y7wYR@ +zQ^c0X!@K}r$NviNgQXt7roQd`1K_a7G|-l7fupvbozNFcxogC|3u5TZxX8qOqv5B| +zDidUEpv~nnFub{0%mpsCe%xo1A-dThig7d&*~Fqat{DO7CPI+TkO5Z;7G}ywWqQq9 +zRQ_QbT-v|_0bZQ(d~Yx*Sf5OSe~oro@Nt@~%9{M*1CaiEX<(QAKc+u_&t2?a=LL&h +z&hVxdkV0H9a)ayB#*-C>FvleQT{OQ#^tE!vZ+x-kEI#|(@=r0Pnc(@2`z+JL>r+id +zcANJFh+z&f3!HI^7MUHgBV1;+9d>R9~^Y +z$qKR;wc~v!W+NpQiZmi`+7z=6sL&=TX}r?Y>v!)>*mY<2E0W7uh~7`WQ*n5odSD`I +zmHdR(!enaLSM}3^Y%Tpzd)V9IbAOZltn}!JtPT_j*0fNos{kf_v7TzfEQ)! +z0W6dSzNM*FQf^Sr{A@$Oz=M~4k}`wo;dR^^Yc +z0Gd)lTHyNmix+=Ex+R~#LkB3*@#kI1e?iUfjbDX7R8ywJ8b8SC`hFCVFE$Vt)G~fc +zx}(wW#(+HO%OFnLu+MNgWdOWYHXI|E=GtJpT{fwgTIC$KHAoPBpp(i>eLpA-?S2Z0xVH@qv(h|-qV}i +z)S&*V>$T5vKlOy(`_wTi+r>q|=}6YqmRxoCcyG1p6$o^L+NC|^em(-(7%RTs>dRqp +z{7a6YQeYEDKQsVyy!x^h@$@EM8FS +zm4Bzqd`pgcm0xhr^)T03*8Q={6M=F)c8^0c_g7C+Wes9+cLv9Sd*0wq1h4s>LOT|bmMGKvQPx3#r1FT;FfOr`ARnTu2p +zfp*T$d`PMAiyFtv|Xp(I7p>qjLFg9QgWV-Hlha+TRbI{o+iIm|QzN-l$$BRqan*&gv%4^gVQJt=8qH +z7dmiZZ#B-bH16^h3Hc%IPI-iE*dA^v>F)(^;YGIkeOny_`OMhMvkHlL79v=pP$;4F +zRK(vdiQaenM(HrTPjl=7{(KmY4A^qF<0|HpP5Cql<4;(3#;{WG$=#@MYKXCejmFY9 +zIfDhaaQR37S_0lOxeeW9kQ7Cz_4h|NGai7Xo)-a3(^cBbx=J;ZF6X6hRhUb2{L +zcj6oK)3T&|aQCAf5iGzLwsqaVDQW;(vs)!mNjZ^=9Quahki}^KLQIx3#Zo{Q>j2xu +zffp+}qmDgd6ALh?s>kyjXL32JTPvXMr&RZ+W3BH9gBHjqsIAPqZ!JL@9@px$^T>%< +zFrIZhsI<#$f(Cw7u;9s0OBeld16zv2V(d-P!Ry6S2)a0(hmrjRk+KcBw@-#Pg~{mb +zQLkb`W$v>i;2WX6>bBgm*Q6d19?3eORfM%6@^fwV`!N@?=o +z_#+qZ40;6z201;j;p +z2s}Ks8i5y*-fA7yksQMFT&eQZAIUqzNBMO6El1$#n-9^WdDKS?THnBK3X-{_zKz_1 +zUbmyvl_l|44)!gsA@uu|^@#1Z!ejzg84W=a39)5br7SIB(p`61tSIyhduLO4+PpZw +zZG-I&&wg5DcBYi^YTf0efOc|CUKHZuiC_BNYBw`|f2^SxxNrz(y+ElWuWEK+NY8JX +z-WLBy+4!`1&sd?_^DODap7IT{t7!K8+$Bv_roZEBVN*?z{KJs)fYUH9*X)f^U4DFT +zl=Jrs4qWp|(Bnp?UHl(ypAgsnQ;&X8(QM+*==ym)@9=h@*FoH)Z2gov_O}S+DKlK# +zvl2Gk=Oi$u!oZ@H&5BHEPsxgz*MrExhmRiP+((n!FU>rR4Vpq&5lr982oE$?M`A8& +zH%^v+YUJ;Brtd30|NXWiq#3uHP1d`dS$mF_U9>(CR2T}ZJykcRL3lvZ_4giLK92_s +zTT9O9F+uasJplaq3?ggYVx0tYj6LqRfkZb8wyjqSvT7(96OtNM3u>$He%#*bgl3)k +zx#E<3c8t=RThW9ZPop$77|?7CA+?~xSrwQnc+8Z#Z)+K}je*6ACZJ>3&YYB5WnlLt +z+fN`z*+Wr1CMkKa#796{){yU_wjK}r!Ro{&kjXX}C|t5k65vTt7PQgf7U12!aZ#Tk +za5_ElzpjIRhJCVPmnxLj?3!jb;Edwx^Ut#JY_G)ENT&WqD0$IJp6q4=>zyTF%`re? +z0M58y^2GE?e=xUMR9W*uI3{_ttY0_DtI`!P+DsQoUFX@}B-uJPH(k44{59+NI}jvo +zFvGSU;By0Y3qUj-o#Gh?weD%*vIBtHk|G{PGQ=UD4B58<3~%&tc1%^IL0H58<@-)S +zs>ZV(WSzCdzNSW936-6kc6@!C?4JH3NXP_L<8s3G(d%gSvP5!>+~`g +zzT|qVgfWgF(GeQ|o4grps4iV81X3UF?bUI&HDhbw%p5$oqXzHg*Du_*+i@9jqmk6+T8}$p(zB +zzz3%RRjZBru=kqoywM@BG(8I{m!V8ttK@_Xk<^nPrn06tIK09>cNUFPl*`|@3hP|v +zsvG*^a@%bi0QTrRRuge_h0TezjaM2pnkxEK9`(QCfLv+30)d9Z;2{en!T5EW)cgsJ +z$QZ-+uzvuBtjX>(gEG|zgI5#(InUQXtcS`B73lDW(RAyzw$rI5&i`avX%%-fxda(0 +zqd!E>#3aq++u0g;lx)%GiRc!>HU(sIMkJOEP&60jK>uPf5os%K2k1U+qs@) +zXOm`Pu@0o6i{j@Ohr$L>ImWxrf3$OThjM~L3anWC-Qx5`a;q6Ga=hWAno8~=zwWhYFflo-7g&?;wj +zMkbtP#bgK6MP*Zj_kCqo?tLmosy5P{fAxM~!gME|eZ^1bxlHl)x6Df{GeARF_2^n& +zy=lY1Zg~PQHOpwf8)t9ZV79ite0L!I1)V>Ck^d`q{qt-{`S-e?!MOFyELm3(${5FI +z4|-B%%OCWavZ7CH1|Ts(e?h{CR7*!}*&1sB6QuR?z?km?;edTL!mbb2HF`Vk(|@8*rDMjm7S*vpQk}d5lYk(Hxxe{O +zmSs(Uq?SzPTs(VU+E*oPG+(Ta^7Y$_@>8)X^?+0E?;>-*smT=kPUDdNDZzb +zD%mQ3Ics3`+X#*MshfK%PCzv2ZaHW8qfdEeJu5synzd@KPi2S>-R;-ee@#W4&8XywCcfW(#`l$ +z8Ma%mesQ1PWwKV#8O8qoY_F{@>h|cn?GQDQ>K?gyDD~}1N~B+w8v2*&zHZ{A=9ee; +z4S&{>#JBb^7d%vV%4|8uGFaB(1&JIGYZ6x(xSnUdCio@Vq|Rx$$TH*vZ20bU&=761 +zsROZ|Ln7FwN;m86O);>kqD6zv6<5F$!=fP>uD0X)7Fp}ZS0>1m5hu*zgfVC^VYiH_ +z4>)}xR+g7Nx=_?Hzh<}W)vHF*PK8(SAX2TMM@shfoXvQsjBsF{G`o1trOC1q}JOnM7-h6}x9^$*-zxleK +zY=}wY^x7KI*N3({GW{`j1JmXKu3yhSaa6xvpzWkg%aes>{c|=NA22LxCvg~p`?3Bw +zo+RUT`-OS4YEd#L4;?Vnpay1;^~>*|dIiXemp#ulwX_Hp&F-_QWggB=rZpTh{Zb$& +zIWBZr@pXB*%1=VtD0MWX1~I%X2Ge@SE2nd6=Qy3xtERc#mRf`p_`x2Qf(x}JW1nDw|G5pWy=O+OIpXm!|# +zdhz@(Xz#4+^{F59+tB_YZp!cXUy#P0g5cAG%GVJl&vU}Vr5aN^o%~!YWNo{?TYAiV +z3x+~1^KOkEZyb&u|d|6}Jo%HwWnSk}yN5EaBBH +z$<-P7{6mtG{vH0W+*y!t*JnUA0qka|QCa_kK@A^Br;e+Td}|vg0qT}*tm2aAdE}Db +zs|GiWyPrshO2%*fl%sOVR@hWkT@1ze)c5%$m>6l^^(7Sc}uEj++LVKU2_*|+|UZcvXM~q;W+&|Yk8ja0J9(u$J +zb(U6``rZjR23h|-`Krj7*Yht)B_EQq9=BciMC($G@8^$^cor`0edBFbHmJjBa`A(r +zupo(aOY8b)NhP`H!Cn!T;PuL6*>;FcwvfAG?g(xv)x%!@kd+*HJ9eEcWl4pNUD;@% +zh?ULbwxb*NaemVY`I|+`>0$^HyJXwoG#@UPn%-N;)QJ8xsLmXtTFhK-rlLD$hyLLv +zRNopps*R?JMa>-HAjs&vt6tN1z1ne;R`~p8%+yu1k^s$$5stezn +zUtqqkoQz54t4;LE%#*>xOZx>PN(w>!)kl}!>rcTptPeO!FkVie_zL)F@K2)__?xjw%L|Lr{Ej5HQ}_F +zi`?PL*lh1{C|vimOlvJ8jo*NSVZLV@^sd?)UvF&@ccYIUv(C1J%^E +zo$#<&208JP#Mn&c&)jzRVmu?~VGXgQ|7z@zX@Ly%%#GvUlHpy>CAk|*|F2hoy4;Wi +zngkHYIXaLjj)`ZHyCC*v`;aLI*4+POHHgQ|)lX$|+SIhZTEybljf~Yye!VVxw!{}7 +zm?T7uaIWs_d?3e1KJQBHvM0O-p#su?Va!_RrkSN!OaPm+?rlM>MacR=-Ckg;+2HN~ +z5GWokQNSwJO&v{J8s@qk8r)4@`=$pIUpH^EgWfd-A6K&2i5g}DCTnT~aFaS`;~~K% +zFSc}zR)%nfput5>IR$`b(FPNW1%Zg5d&WAb&{$>Zo!mld{V0UY*m|qZo?f{!zCWoX +z65_=yLA)|sAf6g#o5ORsk#57@QViIu@?tG=)tT7h-FO$Rvxn$B;g#~JhOG%~{Qv{Z +zS+ZKbt)nvkjp!{)D+?#5GO4Mxjim +z38Y#0c}Dg|4`ASw@a>0>VBa3o%~Q`|iIQ^%#;l6}nc*y!Uc(?V0Q?*Orm&i*Rje+pc+CdxUGRaBWe^y!OmW +z*@UvA^!~l{`JSJ{z5h7(9QSzK=kxh^KAw+964t4!*oPs3WQTQoZI)04(9RvYay@Cz +z!Qof$HY(Eus)^@N@kU%YAlf|?ukvuf7A9L*YwRIM)ZrQ29HTIO&at->tM*jvKl +zhMgrGJ}(c1{E4xfuLb%O`W;m4YlHVoZZ~Pu!i5|!^Sx`MotHm`Q`y<-VFBKlAMbZkYL+6m)LH&mef_=vTbbD<~pn$R#K4DHh`0dfl4R$vxm +z_}(Aq?o`~MxcdN6UQI?X$hM^Ejchr_D##kENEauc82{S=>szyUCCUs1v> +zqG|@vM)xL-xlEVRm=WgQ4n=5GPko85c~4x34)sp0a{p&LbAsJr6O+du9m@yHGQ~TK +zWX~0I`n=)>y}k?&!#KSV9Vc>wN2XyPS`kbQ{yp7INgUwbeapb%K7RC68x_S+z-{oe +zzd-r{Ixdg{5u>J~Ti=stMtiZ#z1X$nMyjdMr+8CZF**{;=K0vxT*f?frRdtd1 +z{`wpCdJkW(aKQJHcN^T?_jz2Re0Jh$S*reM?R2i@B-oZmk@|pMqD&rkLGmAy(8piK +zq#;>dz~a%CT|Mc=*8Ro-unrzRre5zXEmc)y87vg;Ir85 +z4r=tmO#6)?eT>c#MC2Wd@!YL?+{vuJ!CZHnF&*~|dxDW_Mt8Ssm3SOmKyo>g)CDG~ +zaQ*7rdWo-?QC9`wqK@#(LAk2(5`LKGwq?&6j;>hmLfopsH#=pSg}6j>^xm+oF(a$q +zfJgnWG6%dWx3*c_;e~I5IT;dnU5|tRq5E6ezvOfrNSNdrEwL~ +z*Q*hF&1+8&SkZm{IW+=Wj~OIIc2_mzui)j~9vzveRwJ`DF?!D$*=}8}8M&SZSJl&> +zMm!PPwKtztwwdy%sgdk6X<7X2zWoUOO1S-1P8^U}N7{}=%_@V0Qma>G4~{O-|VUPnBvNAI8L-1Mc=xl;9X4Sx`3!f +z*bDoV#6;q=1Uw@ixBT|`1240B&Dd<{cY9-;Ep6a$^-0H*0sOaZxmNL!V}XY@F`LIF +zO?w&7pX>!PP*7C!s?xq_)6dp{_Xrw+JXjVf5WBJvBDW>1XR4W!gHPC@rOlPZFkR@k +z=zw3#s=wHWwuuw_g&oWC=s$(LNxrEuy^}o|hjKU0eBAyBO#2AU9|1dnxH~Q0gs?1y +znMq?xC)-Yz$q9OO^I@Ty0lmq~sG2_UnOg6QwGw1bZZdBDx-YY|KK=q&P>v-;;4*Er +zIf>@V+A*Zz?$06->6y=V@cJ$uoU!eEnWj-9QMicC>zbo>7rL*cgO1#@MgP3azT|?5 +zUh>4f?kX9W#%Vl~>!!FsZgD1)ka0@+cH3ciRJXd0P!BH-v_&V~Mrqeo@V +zeV+ZLM2E5iV}S(jhN#;VHax7ff{XQDW(3Fa7NA(dvkZ9*59#>ly7=vMXO0CU?E7&N +z+waRPVRu$T9?`#soLPIKl5T-(^fFvp^s*VU8`W8u(z*{hFGRr?l>ZJ=NWs_zfxcvM +zktJH)YNzxrqZ{o(Q1?q}ia5vc{|E6aM|9}LH=B~G_A)_o-FXTp2lqOQ;%kPPald-8 +zi^oWteVxta+1`Zr!WA}OI5J*{<&SjfzmHU?9@fmvuits9oTZFM_c3bRR-xFuy07z4|rES1Eu|5+2p+u2*kB0N0z->R($TzI2BKTFIDc +z)^fR|gldLRO1-t5-VvGKwBiZ$5-YfJ&8hupTC;AD^&IViWuqk +zF`|;@Rm`z_J3=NbDs;y`AIlI)HX}5Z^#{S96i!|=VleahWz3QwY3P%21v0@au|He_ +zA*~>1Z~jg(smH0jKK=}V_fCuKCMvwFj?`D9)=zmy9)rl(@Mqvjr<%5M?vQdL(Q +z?>J=3R0JZm9U0-3wnZjyB}y&Y4Qp&bZC2LripH%qodx=XLHknMAt{4aE*q{<4T2fA +z$7;DX*@$f}!@#FR+S?)YNx4slF^9(FXj2$3kwYrUgRMWm?SXL7g~NTR#8==Ms+sZL +zrAPacYAcmKLyQBu<o-Z!{^b>%4Ye1y +z*5wL({>V%-yLQq=pw`_ +zK5J+b^DW=PW7(`=oc%-@T4NW#)zcZG`NM9xrC=oBv4CbwL%ZnRv{7tjZa!TXAc^aG +zX{F*<-zzyto6|yj132O8eC1cmJPl$erxv=7hYiBB097>WZOg^(c`yTEK>) +zMVXrtfBSdfto9YpjGg3cSslM|lpxk0WF$D5lh*Qr-6U7tggT@Bb;>o%sWrMya1H$1 +zGAejlpY-+ed`3wbmCWy{-f8}HuI~svI(XOSX=dq_+A|Od$hoxcJNe>>Lh-^<-nvcZ +zg*Kk_l$pQL$>KC|6QQD=ZPH>SjEbs`q}H)^A|HwMW=+_4$eCc+|KM*~A;6K#7KzNU +zDH41S4K57p(ufM65xM|%Jd?h4H2kb4vMwclSX>6lgpPUg1w0o +z%@b_uf#}0$AsGhm(*L|hs!LtFv%I)98P&4{Aji#{zXQE2?_k;4dO)4NK`FL-^{6iE +zb^$HJLb{2~V_DXn)ja+1$r4{Fp~b@{<%phU_5|Ul%1I#gNm6_YNnDri{$~h*bqcyk +zDY>+HR~V1{?licp{wJ!7H!93fk)8Lu3Y?}!;k?2d{r@c|xMIh;766J7G?obyQOAQcAG1qT8?Ko^FK-r0g< +zi=Y=D2&bAZ6+s<@^qwO8v68#}i}t$fy-D!6N5v7!JDg*Y{fBf#4AcZQAwzx!F5YCA +z36L5TL9ZLa!)MGy?*Kz(KXSdk8EQ+1KwrR>g+B_HZIv$kdnB-%^6ks#bKSBT>fQ{| +z`uSWi=*o-{MNt@3?TUl``upC3=V3szpxFwVfxKsrXwi*>XYdRm)9nw3^W2zx8xN`b +zelg_1{lDCziwSKxR?IY`KW9tk<#J +zES@Y>-BZ6lPy$zxG^Y1A6*2H!vV7`Pau;M5SlY*x~tJ5 +z#9e35HTbS@nzuxBq}yZ)ajq+czK-R0{VYgR~0SIP2yhcf~0{VBh~<=ICAN2rHzJ +zpGT!Ze(yrfDKm2;}8N^$%*lgR55Xvei#=_UheB +z$phK2k^FZKzJs{xP71u!vD0X(8DiD?h@7Yw5HCg7$e#QAoNMhPy22aFNu)phS}pJ| +zUJS&nu9?=i=R~lN3{aF%M>tc>RjI3(K{zfs!7uo3eB79Skc2HSM)4lyRo*VuD|AM& +zWV8;O6m^+eL|X189aLI?U6g%%ISA##*$Z$iQZqI4TI1AMo)(}k6ktki5~g{ +zJ4Pr^YCuxxr;m;PtQTcWKttbZB3sNJ$tT!@Fdp+f)ESNX8LT1t#`m +zrlZ_XPgbBv#7V6SA8~JT9bRK2kZc5pF=jQZl-dSiGf@xgOQGDSBfg521l;h^(e*so +zMO!$A#~KcU`clZ)^20FLi9Zv&*L9!W%G5C~;hN24(;GnOb55mFOeU1_!<2rc(#xi( +zmzHx##gZ-)8^H|EeZCqdC=A=JCvl;&Ht2xsL9YmN$L+^rXPW(A*nEp8h1d5s>+eLV +zsXLta@?2_j_$a$rKPR_rHeAax$9~DQ<3}Ocnyg8=T5HU=`|##sQsi|H3ukO&H+s8jh`ZmV8bzn%lRoMB{V|V>JP4%y4 +z)#2m2Hrwvs<*cU2M{+w+QYHZ&c?#)HAK^VhMrz|WLa80HMTHIs=_tMEz}K2Vo=;VC +z5wVEp3L1egmbA(2j)(giS`VWw^u5LiJf#9bkd`gJn=6J+S+T$gK3V$VfD(79KJA4C|W4)!G_2jSHKk#Ata)*GEcm4 +zpSkwVTsu)@41JKUH(-872$m=_BPy!U#gkovq4U^W74d +zBa?&YoD!4#)w2+L97~it&>yBHM5@F`2ll7CC-3zyRpVYzt=^fMFDPEVvA^&TSjVta +z35D!jOS|RjPY7*4-#to_`b?s^O)KwcaL_N)0w2Gjfu^^ksj;{OT-3iw5&R5-_JC+$ +zyWeieKO?#NpQ(cngEJ?SUKS1gy0lMyS@Ho-LP40@*sCgV5>WTaJp9leA$#}V%Tun6 +zS2;WoRz+*KTAXt~)3EZtQtb~)b$?Vhl +z){Hcy`YWk%gZGp)qFB$SODUAG=N5^~hiS?v>qz~4HrgB|@mt*1W!%2zzLdsccy!>C +zHDYPCsYowUoNe4MTu(ahor=ds0~mCz@i +zP~AI*)i6hXD4s4w2s(OnNfnmRXksSUoA>a%K6!?ptv_$(UbDO_8o>RS>J27SVQ8aA +zo{Pmg&&4AoWV$n%BxYJTU=e^%Vw3by>qmtma+8pJm7FuX!b6+!gtEoEaW0C(MkP!l +z>~I42=FJZlt?m};jio|lnRhex-!~6E+gR*HJL&6I_+%MVv(JAg_w8_NRsRZ9ZCaC! +zYMt7@&jg2aSzbP{iDm1Co!P(>+G!=#?9=mR&gv%v7lh@DfP%BQdFPj>L89V_v^l|{ +zw+L!y?wuFAz)})IN_1sXYlD9);rB#J?v`s*nX}FR`nQW;9#6Cx$*f;TEwH2$>;lO+ +zSI@pbOF}gls}^J%R`^x=M;DL4p@8;f;UeutJudDv7Hu8fWrP~>VXDez%Kc*3Wf4N< +zM;?#-L@g)Y>&&;*^8#in=$SeEXUuT#ZRaz>-C(a}i9$iaci6HbQN`WQIXFO#IUrALv4#2~e(n-|W+vOruRXG1FG +zubSA$keYiy+wILyH{J#0%B@#n)R{xwN!~;l_rx1!eP0F9Y}3-b)O9e8XQB`>Lqq4G +z3V%Qp)L~_-NW4k#6{DmMyDX9aAl~}7ictx9B@Mx~2XAW*<6XOGHQXjF?X0&I-$@;1 +z7^dV_)Ei81uTx3B{0G|@frz>c;S`=L|AVa}C!LBJ*i|WA4q_rvLNPZ6==A4aw;3)= +zPUXZMC_NYcq~f=%-uCG-FX_74Sdpln@^8vK`~7k=U0x>oHnT>Vgv`jdlYCS6-bVg+eJ|^uxIL~PD>?rf9A9^g +znsz_O-B? +z(ib<2(CpBv2;vSCjI$$610$sjOerTwqFu72eB*@H#`T>bpE88sBQCD07U?H-Nl6Q}ZgeXfxg4*UV-} +zDgQsnL#pZRGFl`|4cfAbLowBrPn-2}}-jzmx+Ui82In(g}hv4TV +zf+ALdu23UX-nEYkM=m5?p>q^oUGg%CQZXCJdYZhD +zJ+E!BIR=K_xPn{uo8gri7~YyY+M*mks0$y{^BdXwTcadhSZIA!pw=Gd1<@hSp|9ym +zXz4^X(a);vlLPOK664B2_#|uHuob6u7S}ttqCu|4J4y`_hlKR3x;g6C?a>y*idg2V +zN}yq_OTA@Fgsy<6P-V!otd+=R=Wp9LHOdq3Boy_?q~2-RsBX8l(xbdyk6Vj?F5E7t +zd9)cP#uVp6zjH(9_*#)J0~OKg9s<*0-Yr|0@u?61xRA(|nNz7zbfKR}ucy{!Fdw0? +zF^UV$gPkuo&+0v2x8nJ%xp{KlZr1v3Mnk-`R4gRa(vG?a7ju}1*z_tt +zv(gg`ex1TzpO$U9ea6hF@6+uuo;S3YZ_}dd1Zfw*&)$oBx+M%zs~fJbYYtAVRIA;G +z69k+L<4GJp7{k4#y^f!2lGg<`25uRzJ!$xM(DQjqBHgtzIWOzRLZIp4tz<^E{Qz6xzaAD%{8oJ)cv>ml4xML-Y0$}>TA8g +zj7mQO5w5jxi4n%qBB;;OrdlNii3%G^Z^D&nptn#{^jzhSv^_^-_W&$;0y{Yn<^)@P +zzLE&iE?lSw^uH~^U2X8M6$0tQs$zy@v}MUtz}}?)sVm4ZG7cbAAOnE}rE0XklZQ)P +zT850nT*I$}byZq}UPh6c%O)@f8A7M|N5Rxr3IVMZdR0XPUFY#pM`wvMJ^&Xs`+44# +z<7r34dm2zmJBii3&)=s!p=!ys)-AGhP`00wm9$IQ+?`CqWg&QmpdF}XPjkLqCQS#Y +zdJ))4-o_AdscW?@^cfalb3|{^jWd%&cFLLN-`@HRc%%SX2EmSwb@DKIby<@KY9bMOunPIV>Z&2AZKnc?P`9)KK$LlwHyk$*~<4?4HEbL3H%>OE^>NFPc +z8011{)iwhgg8M&oS{xpT?a~WhfQZYS)GcGJP77%^xR1MibYW1q?2KLo*dxa}h5?WY +zLg(Rfsv#x4ce2M{=`G|x61~F_0>)AW11Wj~sgqacdKh+TudgR{pn^_iR0c+AeYf)C +zSBt+9Ry?Y3-n_dcWDf(v)OQvL=vChObsSQh-pv7*;Q5rMYyu;K2>4sf!=^j+vrK^D +zOGDD*ettk~Fgd}X&=%z&k|ikjwD`}T-s^U_ww-59DiSD +zNysVz78?-@d!7y-Ja!{Ll5%EjQ=Pd}XlOF_IKPch$e0k|Me#Rqi8v$5>&sl=4pt>6 +zX@jl=>hOah!E2|12ObxTL_n_rc`6#%)WpRmcmoxDCVfyMSV2=f^Op?R*>wm{a$&}5 +zb%z~{aZ`CC=c&+DS5aB_C3T?|>(r>g_Oh4lzSfQhk2xE{&i#G~T3s=Tx!XfOROWq# +zs6sj!-G??{zht-t9OpTL-&+@0mbNlbAMCC&bWiKZ$sAQ3x~EkPiu<;~-M_ZG +z(JG_ON@Z>pH_r+6qR6du8v)Pl7h*QCN3FU^|3Szurwd`iQDTkIv +za-V9MD0fb?qPeiIn&zwdsk|#8n!rbY7h)CrI)V9Usl(-1N2?Td^J&(kQz+gelE5 +zzY|rzCqQtTSmN}uAqzN-XV76x^D!QUs*pDMa~wzKI@Puhl2Xi{-w@Xr@@Lgb1&MU> +zjz$Si1LOXCX6Y==_)BIB{L%j731jaFLo5vro}0u}Ej;ESvpbC0_>ZNfz4_ePpPQes +zYuOEyg6ym}guHo|p7HKEs4^A~#B_RyLoE{-uj`P;GV;9fvTT>l{rQHmi9UOh8T)C< +zD!m*RXa~TWH$5fLuz4-0m=${^PUMDnqC!N-@{6e&P8L-r60|OvDULfP?%Sq-U__|d +zMO8ozKjJ|Buc8XXwN-rPYU@NRc|SZwYexmX(&Y1K%qFEW2f2%&d`DaIhFRFR@l@<8 +zyq;(g{M^58I4>^Rzdu@%IE^=6_Me=c8b{na?h^c!Jz>k%7^tdzt&CNvK;ik5m^ApG +zt19m!@*cu5N)(|^TL%MEmDnO}{gNJ{VODElsY;;4%F_04eP5qwGCm=D&2bJMYi#*9 +z$lPmTAQCC}1!K#(7A#xD0QXSZY2fy2{&Yi2BQ$b{ZquaFQ29pF4*hxE)N6TY6hjiS +zKX3mn=?1R)Fx&zLwH2NmZH&~I8vW9+^IS-b?ay7=B7qidWa&0`Gvs5Ek$MVHiQp+j +zKY=1DZ;xhpS>N8G(QvyH%raPG2C^zgS&n@%!ptdqsgKjW>cS1v}83kudwvOG`9t*)=0Ab>I?rPBTT +z6)Em$3` +zEN;mh4}`}LRct_U7;7;8`b?-r^O&m`=!iUKf0d;*z!Ir1sAai`~r2UPW>|!)g0Ikj1EJs-*5sVP{H%T>h~6RL^`FzhJTi)4d@4Yrg&K(D&n$JE>JF> +z-(i5V$qlnzKLE=gqp(uP9XfRA|6x=o%dvkyK!dQU@ +zdVGz^x)aOnH4c9Cav +zvy;y=tzFjV4dlhl?!jCNDDXp452INxh-U;j)O=QEP6g4x@-sp1WO-qJc{a|G3^umm +z-Fx)mgUW1D*K-XoOqEkdup?Qi)1|KE#Em9DPUrb2?<)4;aKxw{gsVo<6|s8O7w75G +zS=SA#AoOLb;`B1($cRPjM4w_N8bVyFY0C@FBPxg8ZP93rI3u3G^n~&4AE>TP;5Q7I1<2- +z2s$oFI*e5&I5%n4o0}hjfq60zU<>SQ;AoYCV4`WovrB0-mu28KtSjfTjm+7w)Jy0M;`f)7gh-PDw?)S +zw^$CGFIf1RRekr}k8NN65vIHuBc#5ERSF_%o)*@uFudT`6n@|1?2_vS{9QD=%aR+N +z=>2Amqj0DGi^oG<14v0jeg$(qA4~_-#$yu;-v9U~97*nyYKt70t~vqs2lkxun~^YCF%TqoJ#Sa; +zdYWGL_CxOGowuh;Tbqr!c(V+#?|n8GrFtY4#mADD$OmRx&k7qfbaq^m=Mb0fOOE*O +zj#4PuX7G}$QRE1_WtK*ToIT5lbxD7L<-c45Q=a{#ym%i~WMC3Eo|U2C>#dZ5zMleY +zGlS_lRSse@Db~Xq(>eIP1}=v=#fnIQ{=G<%?*+=LQ`HWZGM;QBH36yeqk<352jzjF +zWv6mSzokTRzv0bkRhBfpvLr7bkK+{Juqw{Hb$YYj^`J?s`ddZTyhl8VZq%*=kQT`_38hC`L#P;`Po(ZBwVl(VNToU)NgI +z2sOjgjs$^0w}KJl!{L@va*G|BYi-EdFEsvXDIp^r0X%*iN89)|*YqlV$2$x$stP)= +zGkh^d9!s<4Mu2{6yAt+8r)%A7IPzY8cX4^piP}-MR?7t**T^H>XsOj5CB0`qMQvhX +zYAy5V%76=BD?;1m*Q6v;^@=WHh%ZcqQ!5BlzoRGUpW>z0XQ6jf@E+Km0B4!6M`ojl +zZx|_w2y}tO;sTd_n5U^j#OI#g)XT}Z?MHwxM%?i00-nr#TaDowDj?_hXhszoo%hhP +zKfmFUYITSIvQCsqpXprgQRrj~)#H7@L@^`3(%FI8A65=swQI372IaXl{B@N$Y@yCMaO}YiYjJl^BM;% +z(T?CTp5hU$10RM90>P#x8kAzuJl`TSYkVe_bZOyNGS)I()YjlM1OVTl7h>3_N7!+| +zp!}lhERQtdM6MaDeWlU~k$kh%6mi^Y>cUx@E*`I=YKr!ZycM3^V!*NqP% +zXUOyXPbnfWYk2qiqYSpcc^*90ug|=E4*|E%60bvlAO*IXFn^!WQq-5v6EPfD} +zSu5A=U4^exGGF?$Vq>}193uCSw(zoeMyn&0Bxm`~;prxFC%xouyC6An?q;!4R@tV# +zox{5+aDR1OyA#MYq2 +z)WacWxmx~@WeL$?2Dpjh{ðllJv{ocssv;seN+N5ZO%eA3Mh&pya%e_PLL`XQjo +ztW&*T1{KdPXDhg@xzcV#T5D(!yPfMve}0*_+Vh^GQBG_x>8b<^FxnmRVYDayQ)DZa +zov{)wyC{+Ku+WwROv5tX+^J!jp$f4J1s6B(a#$iqH?&j#^scKTDy^tYjsM_T8stJO +zd3bz!`RAM?eK+V*w#hfiJ%zoRjCc%U$&Ru>Po8 +z^QXLH)AzVk!s}jx1EO26N~v28MTBy=hVsi2;3;z>k|}*!)%KxS8ILYhS==SRD*iAW +zy1kI)v7Kh+>G4}?|E=$*LDR)|j^*DEp`RCkwJtEw_k)psfnm9bK}g2rml9>SbW6eD1$$dRXewFl!^z +zvg;ctlA%LmG*@JYHwggx3h>YB;kP~0^mEVe>5Z(K?v=y43Ln1yOlA^l`?{*1rz6Sx +z!IT*ouFA@I%P5a9^=92ODbmW)LyBs$8)`hhT}jMVOD(j!gIRK82-v+g{b{W9=sf0S +zZ|1~#`cH2c8~?t&KflH0Qm&=(8A~xO@#4T#)BNaclSU4D>`C|OcG**h)+tqTXTG{u +zGHL8$_cCs;EDtzfP61mwr*i);$C^H)fMtpP2`+Wh8v|fp%dcrea39NTNND3>HQi~@ +z1H0VO#5@&A1N##rr_O1b8G5$7z|TwOBk{g=K*=GqC@WM06YB8oLD?vv1ItCg=@Xrk +zZAWUF%{|-AB0W*D>A|P;h^ouK`3Y5x+MF+vQHXl(%E|&esBrAr1g+((wI2%Hva&X0 +zpZWHFoBCh9{vV`gLb8(ob<#yO|3NYtr9meC!~*)aQ8<HG +zRV=XfR}{CDR<}y@D{*BSLk%PCZIxr;g2++3(8%RW(O-h8_tuvf9fmUg1lI5T;cdz& +zDG^Yu&Yxx=R6Do}^D8;XGxw^})KH*$RZh_@QRv0{T)6WM0X9tjt>nH6j}9-Ev3#km +zwjN$A#gMS}aZ-IQyMV5d%S>oQ%*Z_63!A^LVLG!yMkHZEqJwx>>FFaEIgIWA9rQ|a +z0@0tHuVTu9;W<4>6|Zf&awP(>_&sW0O5J2pqsdG8WJ{n)K;Wi=h^vjLGJ~Z&eRQHy +zYJ};__B$VoVT|$D2$6K{cRrwt7|zq{zAb8ws%V@RcjnPk95ikyZ&!x)pS-JQHgc4N!Oma}?ezTpLZy%SY8*NDOn(w}Dtz?-RTv%`%%EWZ{axh`{a5Mp{UljfydZnkd77w%QQbRRY3 +z9|uIBc6pGJv1{Fi8ZuSuKt1>A-HOPf7UF&hUr3~R4W~XR&v}Fh9B8*oOC@hE&X?Q) +zKsC&l__rWx2N;HHj*6a=(b3dZuxLPXDW4)Z8C4@$8`4jlo$U!PQqRth`|L=HU#1gV +zlhl;HQ$wULcc~C*eaXBUDtgV-9#YZkNVK_4sd151>LJpA6IzvcU;{A_nS;1z-M#zy +z3CoX^PLf0KN_$1uX#d~4!HJsuRI#Th1{aTFD90i~=A~*2&9_hR|0d=K3W5FoXc21H +z5Smx9R~;dcy?51?NHXG^|H?-%g%(cUF396Tc@c@5`@HX|3MV}@$1F@G?F4^CwuH+l +zn4!5q +z^L<24+x6|ljDKv`G1b-i_&3h;S7=jt33PIftQk>K44MIsNY{VlG#Q4R^9rZmzx=V +zlp6Ae8AVrfPH(|$DnzHHBU2 +z{v`0+XLsy7MJu(v5?W201;%@n^E+80VU(RR|bB45?_0L%Dl0f`o2*6QshvFco0HXLi=^-MQ~X(W;l^>ICisIK9Sd^FT!$M<3s +zJz!jzV8^a6m1zB@lxtINVEJkw%My@6WQysNxr?qn!8~Njv!>uqeE8&4fYI|_CiR!}V#a$WM|i>t*kCgzD_X%(VyeQWEvTOD99eIzJv;c7Mi*rptA=Kai@S-&{QP +z0pW4e4SjuCK)4kcZy8rUPWIXzr5{RY0hEN?yaC2VBc#4~!5}$dy6KKF4UzHV8}!>G +zFg$DDZuJ1i*v5gc_6jA!otQmf(Fz96vGB|6aC$OAtl@0-gQiCY9EtLFSlY`Y2~8m} +zP8!DGRjDf@s*b>sM4^slSvk;A2`(K;6iYXEbO394AAOeM>y9pE8oENCxVZHUrk5V# +zx_OfKBK3X!D+h?$Sw_-)acIY4tUuw}gSP^d%aj_kp;z_r%t!CbkYP@Uzz&PI?C7fS +zn1dIO&W$@tJn*}I5?axJRH~OHoGB_Q^REgUnF$Di&iWsM1-uT?5czSOMy +zz<02-LpP*cw`jI=y^`GV3 +z_oz+vu78}A-e7T5=grbdsGZQp2*GD3va3x_d#?x@xN9%&?J*R5Iy_(T+VoLPd5gXy +zX%JbfG*%dFcq5V$0Z3(&_?oLMTqpJ(4%>$9j(_Q{#LVj#OR}CZk$ZG$Hh}l2YUkJO +zqg1}``)g4Et;vOE0(j0Cy43Kn(MV8xukgS|0QoGiLJ4D_%JILhGQhaV^=aFWk6SJ> +zJ2IC#Hjqdm|%ciNa$71{<`1 +z#}QIFbS$3Kb)mJ)WK+a~93m+uM_+0vm>mh7|JZl3W4wMkC*MS>Vf+D4Z60KgR=ix6 +zQSB2lUjFvC^d+g06}yDM~UcI4;wcNJ&WaV1Djy%chmp$rU +z^$0MR__MU!GM)e%epR4B7i1HUGmKY>S0AasaEBCWB`00Zo6!tGQ!2u|ADNfE3(AGv +z9{z@}Lm5-H8v?^9t`As)G32~K*}IqdeeJOo8n44NqR^}Dc^zV0_dZeM<{z0Od?|um +zZm1$WLBc8|J+C)FwgBdRZVI=^gt(uO24iSgCymTs5})Gt-~T#Mb<*MQ@iftwhtf$T +z)!wY?2u#RhN!S!1rOG$Jp~~U$K>4^-a%TZ(Fp^51q1bj +z#R)Gnj=3k*fmum_a#2&|kJZTET|0vT$N9tEF{HSvuqZ+qHzBO(!J-ISRz?0oS&%lu +zCj4!4$4%6vKTYy+5dCX-$8ML00M+xi`werV5yH#XOsVmMKNfzO8YU)gi9moa68Jjx +z9e@lxx3u|!TMr~!E?Zsm-n&bUSxt+|RBA<=<~#wvCVSU$IudMtoBxB{_yVpE3HmqH +zYb;h}>3{M_=pW3^DfR9wcisx^slgZ`bo?#JIg(X9E53%D8Qiz!8ec$e4zf60i)iwv +zo|HDiXV~wAc35YL{dv?7GlrO5Nr^sOE_~{J^%g*qPXF59O0q*TGO-}s8MYja^RHXr +z{B9v-BhhEcH)XLWMucmyYyq>r`d>MH0FA=kGW|F(^kz6Ng^d28Y3^g-{B^v{li3fQG*6k5qIOlMcK{t#%7tn4LC%k +zMbBPMw=Yi_iq;npY&4|TfjZuX0H34zQ4e~@rVmSfSkZ;$ftd1$1;kKxRDsdZv(iT4 +z!G)Dhe5au}Gb`_S0_GZyM1j5{x_rG_YLuqyGHcpzgEgW*ZkEf5^aJD;akC8ck+K)s_F%)dJZ=(<_X;37SdjV0m +zMbTkip1XPYye(k=mxnYqH;*PY_x$&};^Z#ROG!U{e;(h>;+Z+QbmqkemnpiohweXf +zbr5PLOuhE9(u-gbjKPS5b*Z8`Pm%j5NsvnoI>J@KnuXjWn7A0@r-%1i*la +zsu48vXPE9`F}ZF&mqfS9KC41~GF>bgE89~kYkK}1T|`%h&mnX4{F32D;xhz7^9Gfv +zG*!q*LTK(J*KPhhSXh|~cGU>@wjvjl%Q0135|KUtyeU%)<+-BCTi21Fm%Mg8=n{lY +zb6M(LcA<9off8iU>Gny@1DGhIEli(Qc3*5#Jk>o5E|yEh*MDBRpT-Pm?V29k=5ZcO +zZ0D95(dSlH>hqVJ8=(_wq_WRtUiClUQd06$G!}b+<8QDS>&~Z6 +ze)NJy+k^xsBPPhIHwA{12ssmgjJhvqzmuw#4#Ov81P*T@Ex1Na&fA3$q4* +zqbP^U@g9z@E$mBLF9-;UUknJiQKDa(bgp`>cdHE#Y>7pss%sL1gV~EOPPG8PKz>gM +z7=wL)=MiVS*)bP9K1&9N>RD{~Jw?EQIJjP388)RcW%^bV0;`0T>k-q>1Mf*TmA(F^ +z3$RQ1T*`OA_tAA@DKwu7$x@*t(;$+LI9J*)^A}!U!}I;k!mp_D=+rxLjz+M-tS`CG +zvuhraCwjPkr;Q_OZkEcigR4pO(;;!F3HCV9UuJ;*XOpqDD}R(> +zC%tk#wuoiEt6GQUSJlGid!nYK?nRkh0Au6s?dwSu2ycg|B=4~KS_>~81-T^OLuO~! +za;9HFU=jx6stT^jXWQM_waNB1?BZ@x*a^p@tuNi54eA9=?ADlo+n^-*i&He)_tQx@ +z0!+dQsdl7|?tH4p+)Ug>_8h3EUQ)G|RuMA#*Jt<-fi@G5h3;j +zL1@#MWN8Ws=~`r^jYq$AZaj~g(kT$VU|v*!P3Y|r?nUT~@`tG=FS6Gv!TqiW@S +zniG#U4=tk8cX1*`9WqO6%z1n)>Q0Ck_kBX(jv%yTD5a|Ag(R9gl>)RHNjp*wAwPGg +zlUTSNcc3WKwboO*ubUX~gx=rx&k}!i9W1G;bJ0u70XGBric9Y0ll~9KkW(@X +zx<8mJ@~q*E2yL;p+=m|~MojB!zQF$F!H6|OUR2OeKV7nt+r;#dyRHUU4}DnX^w +z;yxvNJm+Xk^NqESzumefB5R};vTFdbeZ%6Sfu4||<0`lSV&E{M(Tw;+;M~DW3THaC +zJGNR}ikXi%l3GBjt!FEZ=a{XXtjoESwp`G!&9`qE4SNMpNKk805N>}fYLn~&rbS6z +zMr-F~3^xaw50)YQvaR4@LCy7R|Bt%A4vPBy!+-Hb6cuUd5=B6|J0zr*USN^#?xhhC +zrIhZayHmOmrCFLq8YGqmr9r{>x&3_S_nY(Ane*@28PM5bKxepL_cN~RaTSTZrFd%h +zTkGXVMOJh*uHa3#)1E9ZJd5oN^G~d)EPzg)#S-@I5^)2! +zo%3{%6AIh8rY5h2+=%5$7yyp)R{tRR7-8I}bk9Rq^Q`?R& +zSv$Nmkl)B^VNPL%8i<*d3e2~h9xU|_7=Lt^8Kj&vG?>`tg@X<9_h2=kar{3o8rbhS +z$nPD9;lA0ORYL+Cpy26&9sUk6dsrJ%d`K!9UF4D+QlO&O3)rcJo0qmB^G)!?3R`AN +z_ohEnht;?9EJODxNPO!4;@w%qp(c8$&NEtToitFNfVR~~F(m+tPpj8jW&f+gEvwuK +zJO2IL_g!tI5J;#THIV}?KCT%aUV5mya9nI|&|Z#}dKP&`+ZVo8zk_e8iBU7ZhIPx( +zliL$x)_fV!*1szTNzr_dmUC%crDTO7g1M`u-77RjRxE^a-%{z{W0Y;TPHAk77zQ$nYH>Ta1L@doocuC}%$tWX#RaqEsy$y?P^Tr53|VOdWq6 +zs?JId?Z|Qf5)f9UFKG1`c8X$)TKndG{@9lhRUmX8PVn-h*!tly9drH&G?K+ZYdnLU +z`vd90qz%CARDZZ1iLJ$>wSGo?R%o2uQ@ijfNWy?j3tf5WHd#io#ZYL4ST# +zhm`5S&{)&V_zQ+PQ%6%*sNF$I14$NlLtdhOjNwIe8^Oe +z-8_zASsgwLBL^Rn0!<`!dXqE|69YDRa({_eF4v=m+szpj159z-oxb07PCB*}?rdOV +zE5t+*$um`CiF|5zfqH+CU?v32IRYe!l)Iuzj~yPTQ#)oOw*HxDxiTYcT}MaZ0Y^HZ +zxkUdHMnO-`4QWrd$FBUm3aiIlG-3)i0k1pXHZi53a~O1;eq-|vM!$fCUZK98HM-ib +z(?!VpkV-08zR;C7e@glEE=&?PMBzGGAm(;hnMQ+w4gPb`zUWpuE9hBmyulqyD&BS* +z5&15CJl-xi71{O9J?%0BqEl{KPRkrF5s~us#o=ojRc3y#fgCRV7L0LoA`7=xjMOvc +zCt8|6xBOb3@>4D9PuuVOyVMXSVs{L>{|`nJXcq5+0+j$KFRXC6Qk3)fP9|}fN8n}; +z2z4#-J{!_?cB^2Te2i%IM%aBuODP&kYKbgL^qHgxtuY_03ZaW%cG40XCu@0kt{<#)XS6hfCjhaXGGm1y*)Q>n}@I_MI+hxgr;WW +z`!9BuShop3a{T6k>sKjH_EZj*N7sGfj#4P}A`>J^rlZtwzNT^aQJZU2_z%J;=9J7z +zC;0qDYLX{TJ_$OKOwcm0aOPD`!3P1L+C!_?W^@Yx_+Y?F~|DKaABavV4 +z9@g6E0)@od}JWN +zR`60KUI&9s=xg9zmukcN!}nIooTfa6x>2c>U6IA{lpI-tnhDue>n}7omB_@T85gp8 +zO=M-f$(^0}U?HlS(<1QhYq=`OG{0ZZ;wG6UZgZbCk<6a8#++(;kb>Ri_b0bueFr8D +z901mB#WaK4NTUULueXIX6bx;iIh4G2cXs~b)=5iiJY-Y}ww~RajMgXktkLfenz1b{ +z_@Me$I7vmR{nLn}dk)$u(ph<;Mx_~^+hts9h2R7|E0CxeLc#r#hG&@+m)yg2hfMSZ +zj4YG=l5;Bmou2$v0)vEFvEOwlR7zn@0T*wzpO7|f_0l;d$SW=aC`YvQBJcjr*p$%2 +zMxl8aL)9e}OgJF?nbH7ss_9`v)snkl?8}c2B!VLP6NE%q4aYW^#dr8B%^tG$i#F+` +z)Q=~a1BNNz3QBk&c5i+2oPwLO#bMnjV}yTm;K9Ih^Qf#gVr-ikq_ws_XR|T4&;BVs +z{FN%TzrJ{S;%85>C^sEW`u96LK&*e~-vxxNO%)@Htu^*7t^`S@Xl0!EDdA>qYr6=E?qp@GVe|5(Uj~`5U_%@Zp +zf;QOxLQv>{`>}mSj&c#@VMIb?Olm6x{i)k2bok;gHni(XD}QH+oNVO8rlG2rp-}yj +zcYbf#jME+{)XbyFsP9vUI7@@iK^wAXHpcg!rr9wH=#9ZYL=enxO4@-KxQ$F#;*n}e +z`sT&_Y?h=hekajweX^L3jZB_Lj;o0glQ$f1lqm*YIuIt-zD0=rRg&-|D80_++oRFZ +zRR&4kmjvTmD~~wpWoy-rKGv$KJq8B#Pg*mf&5uun){erB)W%rJnW#k*)n3=K(M$He +z(ZVg)Wi%6fHl(BWML*N;Mz;`_=%6IBeMsjepQV!whOb~m`}dMi$i(!n=%U5%G+lZQ +zFlhmY2s=FT2q*vTD;re;R*E^Sq*koH$0RZ7b_VyOLI|nwev4U%ZtlJZ|FT|>%QWHS +zx@pbNm-WR3xgXB#(B-$f)-&Pht(a9gLiH4XR0aF;?`k!%0(MhLF4Bu%Y_eq9QR{^O +z$UWqoR1nrRp7hp1IKikj^V(g1>ps(hcS60fs+T#Id1qcVj$MH(ctJU +zwfYL|uAd4Wyzj{^sYGiOkk8=dz#m1oG!>T|e{!28Y2so!>@W&>;}BQ=!}VzZl5#E? +z3`nW^l8l4pY@0Kv3?Lkyc4`-ezJ{W;28%LAhEX@GY +zb`-dd621V!!!AHI5b#t($C-_iW4wS-)M*QIoD<^O6H}PtlnT1A46t~7sPYfp2I%j$ +z4kV7}G0%!u^zpOUlh0YnM7clO&(p{}h)zn^%g)uQvsB~!%JD^$+OjD)6!cl~^to{& +z4;CWY?a7{jgtYCd$SAIY<8+XG=3=6uT|?RNd#;4b2Fc;Og!EgU%NNpiT)E+X5`T# +zW4f2M)ZhTek#V)<(+8S640BBl)+#mk$~5-ISs7YXwu#$ue|(SF4BUHrruzp6kEfrF +z5~~1$Eidyr2x7$_1@I4g*wLF<$?qVO$kHpIBFxmX#gDA=$Ko;1B`q@W%qc$+>`B>J +zkNt5}5K*GXjJEPrEq;evY;bJ+=mOt8*9|43jkO5?^Z3U64@xKapNrxv^)(j5=|99n +z#T?N>;?75E<x!oLxkNFzbh@^MTy%aYNFXxLxVxLvBZt&fh;bBp7a +zzi2a(k)KPZtQ2L;JFY)9PpvV( +zWW*n)RmpRspVs%C6JKlb2!dvRgQNZ)9WQnu6UYb`52B1M;rcZH5fm8W~l7uF4SzSuMFGtYt!&7WA! +zxe`Wx7vc7dDs20tnf&?8vBpI7+#o*XF{9u4=VZGsrhUb7(UWiM8N}L-iX++Y6OFos +zc^##V9!#dlRwV7N#v$=R(u_`VOS&90>009F^0jK*XxKQfpHaJWZ_CV6HZ6B9_%g5V +z-Gkn;wQ7BaYqtCBB$G&N>+Zf&lBNMr>M1ht3E?O*^VUI);>ag6gW@x5vijk>xCwg$ +z#GvBa8z=@D2_pb}#Iby88K0s%3fH&NNdWe;edu))C;r!=5z{weZFutkk4o) +zpGXBeyF)?6yO=r{{lO7O>3gqiwqCoyz@x;R#2i`)#T-*gOu*>oz(Y)5irg&UQHQ!{eKc(jYQ$g-y>Cm8VA_xks +z56x?%K-%rUeAK*I+eR_}-%~q!oxJ;_+yZqO*{xh5rox_^QJ_%%7jRz2`Q4!r!ITkL$ +z9Rbm|ucu>LtMil2Pi>!u@#0j=1u@{`QcgY%q7GWXxsMxKYUkALRB=Uay%+ePQrz7~ +zB+2n3sd?@lY!~}g-f_Aoj+6cB$@xbcORMy*De|-Gzjb$K^diUe8fG#g(^PbEi$5+j +zLeSw)$8nT9;$cAM4IAC!KXGh6A}jwM?ekWd#(_8u>tN7;pG!8MUFBE&sl59?bJ}k& +zYl8jOU2~NCv3^_G41hfxxbmlYLYE4n)tVS3luHQ7X^h|`jtVrBrAgKW&F1=DNnKQe +z!d`>Z;ce_i;xw5O#-X|dY0QP5%$a~Z7_Lg7`?!@YJo2;l|L&_x1NG#>TQ8Tqfn&Pe +z8H%Od7oG=fMbm$l0#K+Qq1-9OQAmQUAhh~#UV@}Zz!sI2+}Ztrk+6Py??wh4M5mJV +z?Zs|M`e*DiE7A+cPl~EIW358i4)RS?Dobn#v7I$*Zi8au$W+6vYK@Az^biU>-Dt^q +zF<99t#G233ffdo&`{tK#r}Ko)3JtRIXmZk&uzOA>>y!Panp#HhUnPYWu=`-u +zL5(4aNv%ufRD-x^7LG>zXK0pZ4UwK9E3Gm7AY4G1tjc>FL>xV>ZA8KKXsweG-yK7d +z;{PhbqJ7$%`iuB41o{mtR`mdqV316?u${39m_waVYnUth2R4|GJ^_EBQ=ZcDDXp?0 +zwSF%hbBg}%G1;2XoT6LdR~#dE!30b8HR|L%LVIM4Q0+L9R@`lNK=_R~&Bg%lsgV)b +zI@v?S`!+{WC=^uZPg>=fTY#m~LL`B&;+p2|q +zJagZTQ5ldinKHw}eqsy>qP+7^=m5FLW{GGEZzK~L5Q|-UIY014pxISESz#6rVI1m= +zs%7qoQ^27)pGb6_mBw>s%D9zr%CNVd2#BDNrX`;1v5&9MG0eh7nPX +zK;&?+gWNRv_$HG1YX0rq%dVcTEk+EGEHsc|?TJ7jjo1(d$lMUv4e-?tZ}?!>#Yk2F +zQB2unxR9tX>g!0Qk8Gg>*9&C<$08KlCmTsx3Co!qx$jZ?Y8+%R0jL9!D=$^Nz(Oij +z%9lADD~3jj%fajXmcK82O7s_-6e8_6X=XuWa<5=g)?~HB!c|yT%*P>R6Rxe3k&f=d +z*V%ZL8FB<}nGFNUI{Q_F5*a%5%W-}aVzLH~cnVELqLG?)yE?P;`5B^J|_>;C*VlmHg7fJJf}05XtxP5mk2Ykl964n~WY +zD*v!Jw@f|T0IvuYxB5*Ys=DN= +zo>WTQ!AW}>sSTx`Mw#bH$2ZF{Da1x4aYC~Flg~n@1V(~! +zc#92nNG;z^G)+a)^jVj(!IxB$+^v`dm2@?YRKnWsDF{y}pib_Mb9~WaBO4R|1NIPW +z1opf&I~EJ8)%_`tIHjxtR>L%ThsSTf3R1P(Nb&<2X`c2aKN#u_0?=QhjR=YjQ#uUF +zLW8LxBqLr;c!q&~lgEk1g2oU^7@5YKtve3WpDWfYv^se(jAovKV~B?h2~&MQAiJ1f9Ns>< +zIP&%3o~5|MLO`q{ed^3cZn-K}kkcLKYN?Uq!iDt=Eo0QB4ZX*o#Llx>81K3Lz{*hT +z;znuU&l#abA18%w(1vkU;waB(dF!{QZjZ8j1Uv4B>e^eAqbYjaf(Fxf&2UEP6#eh` +z=ew78$|f1Qt{LmOB|4z?3=@hNR*Wi%;+ +zrJe>q$H7sh6p&ZP{qjE0MymL4FPv_cxc772e~<%GVH0Ueh><_Ov>6^26<1zv6{}A1 +zRifQ2-bv3D;g2)7s~u&xQMay6^-7NcsSY+{@BK(M<_5Z7Qw|y856xJ6*q_n_tny+% +z)sB|sfBMz%4Q?hpeC_EL@T&hnmDtZy^%s+_&6=~(^Cfwxf8}dgy>BeAZ^~-Dw9}Jr +zN=4ok6EZ!@FBhSx;g)3eJ0hb5|DQCRV7G03EI2|z`H%kP7KP4OLGpAPSwwPK9LNNl +z5PK_MBv*W&G!mudS(tI2E^>NRp;Sb%pLcvCJ8NJoE#^(!H~j}KG4Jyu{M6#DKNWS^ +z`(Y~}G<%<=BqPtv7^aGMoJbb2GTz(vaV+C)JwARmCnsd4L>+`4eo#Rw92UtEorAKd +zNdn>h#*;Zxr<@h5r|h92UmP~84JUp!-%dA13~Y=0BF68W9n+j=9QmdBsC%M+*XgoW +zGvOTJT6#kiPVTTHWuDh*CDhBdjI`4+vN;>~4oI;}^jLTwj5uJ#61I;+Ps-FBeO}F# +zqJKYhULPdG59lrXF_h41=w=c+$0o?jCA6-sQ%|0ZZC)hfGXhPjI&I;)|CIJbk3omC +zFIVq*5D9Dy94ROap9EpaS-@($57gLE+bJ?r?Ae9w(L$iDip~P(2x#j$m6I98fy;3a +z@U^xoIMUq1ytZ_ci{itd-{v2Q77s?%9gb_A(}+c_SVryf`6cV?6n^6`ObI1p^w}OM +zO;;?Pf`1i^p0ieZ9yT@F5T4&`+*)DDs4?#Ym_dt+iAeNFfW>LWhRF4vGomNP&)pia +z*aA?duQLy-$2?da!Jmx-dGIJ9K+eUCg>!J1t2M}?b3o#8zHKWwLVZ+w +zQ6=DR3b&jbC?@mWVN-)p(h9H+yE0j$TVta!>*Qn0V*2b*nV`3!D0XS +zJujj{PSI;J!+g{>D#FDR9H?R4y3QO0SB|kjl&Z(?HcfbKNB82NUWJd*%}VJOw-c-t +zOF^76w-@ZKM(=1TN?d%znQW{`&#X(62^z@wpVAs+V(6$|pBUj}k?t$_Nu*7NGmCmU +zmSmUKd#>eF9!>z-0-d`U0TrKjLBE=KE^N|0MS}&cH|U&xyQyCUwccVB^C8aSeO;On +z*e+6c)DQvlP6t_8WV7VgSpr33==7qNuJb2C##ankO&p_OmWMXDuZp(|$yCtIa?Q=4ivfnaPFRL_DqEg2 +zlT#)!aysQ`OMFhFZ6fa1ngN8z0ryh_=-kl4;COM|@OVAJ47-QE0B+J_9jo3}gF@V- +z*%KyrB*?mH;d*ra(0q8%A<3PW-O2SS8~F}28{5wcOd!7-5}0%BEEr8CT7B) +zvjFBp?eI9RP~HQLL?moypq;8bbmPEf1SWqd7Kvq)wPQ;CP%`DViL>55CE`Z@3xPxI +z-bXM=9~aKHv`*l&R`Am){sx?eD@Cth$}1bnl+)1Vpt3j7Oim=xM)G0??e(f|t)kbW +z#~XfEQJ&ecjDBGv8eDkS^%ysu8rDRR)phqLv($Y9Mvj4=B;bm9PejWC^b3h($ +zI|a+ssDxmr$&_>Mrf%ZCV5-U)k$kIGlP4z)r`%HyI(iCzIHlf^sF%;f896#wa)AJb +zep^9e@i?KVCpC1CSYt!n>G$1sI!BL5%-mSPxA6nXhAFmXq9*q6xuQ;D*BWRTX)`f +zxD2pW&f>FA0|H(#+@hyaw2iXVa0za($ch-xYqUBTgpZ|0GlMY%W>KE?r9Kc$zDz7r +z+Ep!4O)tv$gZ9`O<^FoN>y>qUdQ<*8Q8pOgCXdyh1Vk2e1n)R`IiaONxairGU;72N +zgz+-6m(6`rgImbWf-uz`J+#6LRF<~yh9JQVq~V82A07h&Go~>$g*V`=WXR0T#!vK9Nhcu1k-1nug)< +z#iX5?s%!4qo#Z;d5WL2-Cm+o0cp!J45D`HPgQ#MdrummJesg(}s>g>VgJ+4}O|}JL +zLZb?zVr$9@!sQ2TWN(+mPql>ooyr$yiYq@3FZ~fM&2IgSx5o&9Jf=%A2R1!*uPN^s +zTd9Cm4n3aVd91DCAmi+hA@?Rjx6pgxR7xr^bGIxt4GCD(jwkjh)qz2xAlN~K=H+q+ +zG@AJL2oJ%zf=EMtke@=hhblh|y`l3Qcrs))Z)=_nZaKz#L}gbLTjqORVCI0Jb*6;a +zKv06Ic68eN#}q7R8Z|zp>R8$9k3FEK%zg8T?rtwN&l4@DAJO_UCHHN&;G#?1@2lDY +zlxtbxOFvLb@`5OH-54MGl@K-sd+6gY@o@WUQPno>cy_^h>_^fQ2BDoC5~%+bbDsL& +z!}2be_!?tJhl4wOoLsnLGg2diYr3KQnD*7(tOwY1Hfywv8%uKB@hEmdaDA +zq&A#b+o;CRVK)-+LuNk!5YZe~S&@w@ic5Zh*uxnUBE5jmk+J*WGe-tJ(4mrA7eV*I +z?Yh==#C--cgjy8uRjML@^R-naeQ49t28bF=nVI@8RSh)P_vVmu>;A>K6eulF%;{LB +z=wUB%g_OznG&;w~PSy?*7?TZgEaKyru$~aKJ#2lg*s#sM!`Dcq!lPEEF7wFcpR4Yn +zidH?qnkw6x_ZnIElop(V*Rz= +zjoZqj6U4BK`iU)bz`RXsR0yA@6Yh7AescI;If}uO(ySZ8J%few@`q~6CuALj=Jyh| +zxeP+ +zgJ_V68ib8!A<}&}>vf-X2H$v!2C)ZSo>;>F@~(giu=*1M8zi_@n!WY1U^M%=|co@GrIFn&pZ4pxt$`M>$UGSd3Fkoy>^-1%(?Y!{3Mq|&LdSn +z!3`Eq1HTH1Z=*mqDD<89qMCjsMaug4M$>w_^UYYlGj^DbhLDnj#d2mAAN_a=ssAx?<@=Kud-s67U`Aa&)O0kE?e`9z~D}uPCQZd +z*qivmx7`kGfr_^>(-ST;)8?J+B|M7+t`hZgzXhTt+n$|>vC5U0Q(yi;2h95g5UGE& +zf%1U`t^dl`f`w02FhZP4M%H$wpXAMxZDm?f28dCx{HPJQ*wM)6a2i@n9XU>st}3H? +ziro(%;g0j-l>EkD@c_ezWagwox7B8k6`}EVZ@%HcuorcLToqw04OQ8Evqd3N8dO8a +zFZofZ^>Sp7HWMs;2TE()`-VXJ4ZB(P+^RHQ3;AL%{VNBna{3>w24LAdfuv4-Aug%) +zKbm`jru(Q(Ou*H_DK%7`IVxTFlcX2H3^oWp5^4XCyS~G{-txWgM94^yor_wVW>CNy +zp&~7?R6l}OZLq}&P7$FD)u4O>hU@*jLCB^gGuoELRjNBuvy7dLY60NG`^RP_Fu;QP +zPle~0rUfPkLc^BH9^X?`D_>*&6?Xgtt{=D6?dwHAc<_kRp7YIDDxG4~b-`v*R-@$< +zq79+fH(i_#YZn}d*<9Z`f4#Orzv9A3!@6=JbQ{Bp+1?(?;XGN((&IEy6bj5=r95LM +zVF~CQc=@)b7%$k2)22YJ(kw;T?0`S3pAzV5nXwE6CLpNPp;#F^=OAgbr{DYu1a@nN +zVuI%)xP2#@j@uYSG6H8XDN +zLexG~pCf)0$*kXyI+)>u9vMETyaO@M#gTSy+v9`W2{ZsqHKdCfKGBy4&KiBpT;~r2 +z2)d~m?@2?jC@HbYg)RtCifTrL&S(VX?N@2Y%LWh;fSYU=V)oZWx-QUScH%!sB(CrQ}!E)x4;REoVMjH&x&S>q{wH5R6?!Ngkn!Um_3_h9RiyD(M +z*cjrD%JO`&YPn_lWPsWvYchT=I_)h2AE#(gSJCt{0OpWHRlUKKzEAv|luu+zc-T0% +z^W!LDPmPX=AlnK=2t;U?z1X?!1BRZjZT2%!9lvQdG6!$^5_dpoPU-{S&W8dCNreXp +zBj@4W$~rMt#bEI*=P>%i1?PpKew6|NlAY_4G(lL!yH2@LWZ(l9bLA7hsV2{Z`|}%q +z63KJzQdt6}MVYHD{}NMaJiiSOSvfw>qDN~yO^-0Ggi}qog#22ZBlYc)1t7FLNs(<- +zbkOn74S0niWg309=2RP8?_~-k4$VaDP^DDUN39>JR9Zm#cT*ic{f&h8t&N}lzkBFa +zW{GMBHMIXXPOwP*AU4g`y)OkK2_vsWg6{tOiOm#qoqM*rlLB)VxBZrL +zEWN%dfs3hDIO)krt)V>XMLS~wEi*mB4-DU=OdpqI!8%ID8M!pHSfZ#@S-hC%hf?&| +z+gfqwqJyzMv%l`oc>T~4+iWNZ(ru=C`$LHDFqdfSZZ}?MP|%I0ME8dWbW_3lRfNSU +zdKqr@Bb+tK!OLkn2g5k4X?4Eriuh5L`LLnV{diGel-gWX8mpfYrM*5iYP08=wQE{w +z=F=n&V&)BdiW3FItB@X#BM9UPxK1Dfnx-KSPo8nzJZHt0#wUIs#0zOK0|PVS58Bf@ +zRTd?2=p){y1jq;;1fTTNZm{MZ2eo#N9>aqdr3!`g{s;+=zgcvUT8y-_&mA*L$co_7gd|$Le(*Oh=NB +zq#Oqltm*yoT +z*JTZ^hi4Yv>iThoD!T?ROlw7p^k1KGOL#>k6`klDnYHWyI+Ra}Ql;;aVyBpWKaW1m +zM#w<^%8aUQJs{g`ViA83A_^ij?I(STW3^1AtP~Q=5iu?Vg^{blJ;Y^StJTE-t&Dq%=#BoYNR9c?qPU1 +z-Bp&f;2M&C&`fCttX!!OEZ$Ys?qJBkCd8&Y!^OOQ7ER#%Y?jTkD|o8SpMM9euTMap +z+r^NK)Cf;ol~0Ui=zuYy9Bpyhc64Z#e7>k3A}xS5{$cT{ZB7oo;j(kIaxcmeY31G| +zmox`?>qQ9x5l%Rtdw`+KIS2wVdq7y7i%)mwhCydj)%Z&JPgqd50ECtYRBVt3SgClP +zrw{J1TNju4K+u1JqN#!)xIs8tDhu9+BmTcr{zfB)C*g8P%-smN7k^Og>67a-&u5CO +zKaS&xcGwcQKH+6c)fMbhUEe&rKK9GDRP|VOvHzy&oxqoEKxE$8onB8K+-wVoS=-rD#gMJfkb~1!CBll6B!%9Gm2YXVHjV!!>ahJ_Ecc~YRx1Iy{DeB9+Lhx +zZD%d3rx@5lg&BryMaF +z3jQj1be}qv3Ju=N3IhpJX5xIve_hcT@v#0nBVJ-VIo$FX|7RhSiO1}7b0lXcZ4|6F +z4#wAc6D}?s$?88YWgDB*XCSBG!nHe><^}3WOXp;bs8xE?6uA-4vVMnSKk6gecKkC7 +zA!DqV=L};{6J3CRqkCw>c`sd_K9$hfGu@;D5^`Ca$~*HB<}vbW-KB1z3t66_coA +z>aJxWp +zVM&FksOZU9X1}bEr8?gar!Q_3c;-kT#*VIi&-)qAjFJZj@)!bs?`40eVs3M(G9WWV +z)Go>oTzKoY#MS4PBhkHlm&}+znHk*Og@fNWqHbF`otu~s6^|cuERO}M+6Z50^A1z# +zdYtU2U4B_{jAibCi#Z<4vvtlRzroXo@-B(3L)|puV*>cjJf0U3*n+$-J&v-LIhB>+ +znINn%2vuNS9ApA}KNo_PV+;|1NZZ7`4rAH}+s!xnxZ?YTq790dvE@e?1v$9Z!-;?kZ=#(4ytQ>M!a4WB3 +zhAs)@*p3sdmA*@v$oo-6k?K5 +zjdXm3HeJD;w1#-M@7#@yBaP#eqx;7S(|4pshUOH!p3;wcncIyNGC3;&y#Yy4!k56E2lAX!>6gUcxvVw6v9!48XXbMMHtnIQK8Bd$)u?dh_8Z#oG@%ck +zw%zj+>vz4nWw~6vA9Y!s^WM3trqKsU%mH8NLp^2{FX#Lsr*e}jC-2hM<#eOCAocy+ +z1ijgMit#$hVZC9wo%I$`wGB_ZXtoVB54(QxcVkrZk74~6o}PfDcWzk!|F?f&AG(a) +z^x&Up-FDw!SkAf*quDI@6GYh9E`Ew9JfwIDdE)5pvqkBe5PJlX`hM_pglCoM$r9vk +z)%kc3@bIeUD;bTea%JS$2EQB<82P +z^~UbWm!%F-zHdh_{pJj9!dB+4)M~>cqj+`DS2XP*4N0b+(og3MTP=rqii8yV%ztQ(-K?|xx+-Sfe_dreVlKkIXXy(L +zSWi-*!f1uPHctFwOtn@un2Y?-e)Zvr=*11vjgU{Y-+wlqk;{tpi)lr_ub0MZ$1>=Z +zeD)oS?+0Z+RVgS8f(TOYa@~dS8o%FdQj*J^hZ$s~%>U%FtRAeoc!Zqb?Fz|!@G5G5 +zXg7WqDdc_i3zMoK+mTc+F8Q*uWuA|t<>F_azL#Qa_||pp3YXEbSHFEl=Jl^7{gG<4mkv|OYj?q3U_2fgGrf5uJac`H>8Q$Z0G{n=cC#6 +zSOwQup&J`*-vDk){FuCt`p~HzRLhYog#zs~H$|V9e7rGTX(4ur0@d$vZ5P7SMqu4m +zj6e)ABrL8OPUmL{r1+(8^wo&6ypx} +z11pI$A`0$A=zqv+;U~Ajk4jJvSq_MecWMmJMXT_KV`n@Y1f{NEE;7G(z<|xe%1XHPX6_ +zUZ42&MGrvBSn^Ov`q$YKNE|4eia@n3SH_>Y?FB?|EaI{b_2|)ylEKW+Y0SpVYZKe! +z0EF)G3`(ckG2D45Oc5wkKaI-(F_OmPebWG$gg_>z*8K5O3g!QUwCTXGArRrXZsH&w +zy*LPj;qJ^I8BN3`R(7+-R~8gYLN +zb=<_%8H+h)A`!o^6%W>WcIQzIOm*bt`%o?o9@O%fqX^t_;hzq3{>wd +z{uI!X*Q}>MAKC~|3V%rrl6J;+vRY&Bo39Q|GYa@t@2YseaSztu*u@0MTdE#c9lGX2 +z*-yG8BPi2FKCWbfXxMsG4S}l1?qX=WGn0o4VR}VZ7W@2AR?D&BR`F&BEJlT!(JyKs +z*Y^vrRy{Kl>)lNtP<6P8w(BQ7Ej{|ps6S968huN>FT6JZ>_|u!6n!$wSY&F2i{DG* +zGq8VejMm^&_Y;dN74x>(E7x5!?qjdma*bt)WmNCr*kE0jQq&;KSQDJf@j%SCe;i3= +z(=PLx5Uhvs508ES+@p{K@5ikQtNk`(K~v4tUH=BY-@vt`+MbAr8NUEi%33OnGQos2-n$ +z1gX`#khICCfB+1XLf|6<7aZt@_os^}*b9>%U!hz$eQL^boEqu1GFg?bjU{{F_}DUOj9HfWH%vnT9asWaeWLjwh-^ +zj4y~vD)x5xGmVgrM?t=D^vJ(ng_XOvS%OjQ$48&<_ILA`gGUY@n2VZmhR;JBqWe1O +zKQso{wc1DT4^i+mH!L<8b&e=UUlTj$eSl!oTjF8eKO%cJEJ{apy!6^K-q(ZTNpI&B +zAKbPmR@Fnx?m-yL-A~GgGq^R3GHgaTtJYt`1h*9}{IcB5rse+$u*nimc9Z~@dNBhxcNE9Xx6 +z&p6brxgwqn{q^{iqYNoyVNH(3RRZb(0RdkqBD8(4KcahB_GL1SGDVO5jzF+tyN5a# +z!IT25@A0Qv0~tHz+MpopSNC7~QnmyuP~%|d`kRKvrj-y5JmShKab&;|Fryj7)^igz +zz`0A&Gu$Z3DyuGJb7OMz_aRE7U|!sS)+DB_zPZ7F1&POXyE5j1k+8a4gYiQ(6M)Fm +zI;(kr6`7j&`{Jmg)e-q)PoHp~ +z3pL}`kZja|#lAUjk{whkJKDgvys?DJUli(|X_Ne8I>tU%%AcNWz4lE}RPZ_Jibp><(JSpZ(2d&KXf*t-6k?~Mngz{G6AogK^&99gD+uH}aQkMr8-`r^$ +zTTY*-`81d6WCC)HZP(azN}z%)yXHM2<;nK_MuN64S_eLHshFSoni2?mJpPfTLE`W; +z`_ZGuwWjU*g8K3SlI7QIxDJ`VJSX8r&c`fl5wxO0MR7RJ|3U5wXP7x<)kIe`T@Y~F +zyI{n;nvQzEtvjeZsoNcM4<~!w=8)N93nNM|5p97gD=UiA5XyPJII{Wn%jZegACI2p +z#EwPzpMv;_YKM3>Vo`PzDda`^Zk2-mDv=S7MBV)$|EjY2#aTlSq1n(sQpNWlb)`C4 +zZPy>S^ockPUx}(5H0=*@Ur5-$_`Z&;qHJZ}-0*giXj^&UD(D37i8*qv3hgj_>5A^1 +z>^W4+`c(S4!NI(&JT-OJYj-;9iM(=og2x9V`UayoCrQrfUjydr6+d0Z!sg};S4|(b +zC40w=R@9b6x|c-#;U|Rhu9c}LVZ_xPL;L!UnQIau*H=e4*k)Hbb;6GVg^^gHJ>zy} +zzuH~Nf~$5J>ltD0x@)2>rEN*t$R~uPI{CAY>nY!|L@m~HP6Gbvc?W)88@hbmwO(ij +zFHo3*Hjqx(rb4~)*ZCFl(RvYO_3#BLA*0I`d$aI6>;_)SWz6#RdJ~xgsrTPI(f-rD +z2c{}o+OS@3`5q?fgeaCBYu$b|`NHL3^UHR{AD3$vk9+Y?mS6i;)jtiMqxqueFi{4h +z+!iCVq*mjQi@}}xuz_$$cMa33Z%a_<+4vktYT2A0w(0aXSi{`B*6eet(@g_iu+Oy5LagBxXfZI5PI +zNC|aIk@0Max@RXDYky%zEFpG>QLy=}#*hCX&Bv2-b5*OWoajZvm(IEiIvcTH*K3Ij +zLSN%a@KTn|>e_vCi(=J*H9tzK+AHxrrXdVnG5!Sp3-V@e;^TGRw-oAv#oqH)Cl1 +zkgi>hAk)5)l`c~X$#FCLX`Bb|m{T-3?&5ZLH4XtBtf`}1;CJ2Re`atP)6V{{mwV#=d +z%)$DR2Z9YrPqdhuMyL`Z9&G`nhf$d!w>Am;XkrRHmB@?;GU~$fgy-HC&rA-lCMr8e +zSp9{GE%}qjzAkoWwYw>{26tb9jo)Nu{)w#~MHwo#Z&%c^SzhdNCTs4*{d9a~fJ30e +zCVk&hN<+go^;3txWa5#Bk<($5L_25%izYmnmTXMi)vDFVtSZlKt=&}zr0CAdQWBG% +z$N_PZ(O?YsI{8_?eynvK*vjzlmtt4l_h)}~#-CMlJ4Kp;)$p(hwZwyC2B<}N*b?@` +z(BE7&GDG%;#mD_mg7w~-9?);@v@<$yEiYas29!d~h!e1F%+!pbB9xS}MFt{JIXR=Y +zaGEkmB_42;2eV}LzU!>Q`YhZ1w-xeUs9x@}GBkfkp%`Y6xs;tjpdoTq!q?KeXP)U1 +z*(T!ABgI}>pz4GwbXq@{6rZ2#=fR<7yZ@62OBHOA1jy!h1IeXqGGEfF8;h%dH?wrM +zz!HLB9UPaicBIG+&}5;>hZcSnP}-c@s?%ye5v1Te%eQHR&biuW(dTUG?wHrk{2E86 +z7!xe{N$LBAG9i6C4{#<*KB>f_eMak5eQQ`U=_oz+2NJsj3nYmT@h +z>sL0a`2AsJR4qFuqD%58JE2zR=vmq=dFx14mXYdUS2Izyzzz6VQ4a4vbM61d*L%k` +zwRCO6Q4}m7Dk30Ajt7+kNS9t>Il=*iNUsv5gsr_P&1}f=LSNtVYVbsjJ*;4OrD|%$ +zBY!*&z+;fS#ghyGn008-*as**Z}9{)wD5Bq%=lkgXEn>=KgXtIDsZ@987D&;rv%(- +zTI0Mk)%n)K&h*p|-X2$4^2mfu^LVrf3)8At?#X=X;emrc(CO_xwhA +z!Af79@K)+$t&8E9vXb%d!u)Yu>jL_*<@v(Wsa|<`>81gLY%FgpXnHfw>hF?bI@(=g +zmS>%9_L82e_GDL8*MZb4_`d;|b|z=e53c8AU^WITp*qkEy!IOE;WGJbgX7dMnym#sin?4QQe`SEKR7 +z;Wig#*~##k3B$b_NAI~EAFVqetpqQhXHsq??U79N1n +zfw)D^3l$z@WecHu*LxFxZxC6`Rr_kU3X632coQ$Qr{=oja*O3doq6xVh}*@|`qxcU +zP(PBl!!||9E-W~q?6bACd>gx>PFkbb-Ke*&zIA#-57?n_GOoTJ?C*2wB7BFWvSaye +zoT~Lg>!MzRYTvj1Nr3sPebHiYKE@%yXNl9VT_3|+uOOi$7ueq0GHqrq{;E3gRCQI; +zR#)Cw;^a5$eBD-S5uE*tkk)v6{dXIWQgbzGpVT%fbk2pD0_^69Mb{0obVDl4Pg#D7 +z7Z=%X<#VkhiPcic?&aP=ZY)(S%)VAHCIG-kTyvh|aKYN)e^b>Dsw$2!_YGcmnR#0# +zo7X*_`f%Xewo0nDzFx~{T+{D~S6%h=as%sJ0Y=3rXhh^wRW#2c|B5R!;g3p*lzlZB?lu~v*IR=N}Qyu&E +z@<<=fbeFnAqHojFE2=JCZ}{@k +z$5|qYp8H{f9K;q}@WIegW6`m{t;=9R?0jnm5bh2@E2ga3-~8GfL3HajL6`296Hs3J +z3FwC-I+J?w1O#1ToPa0=_2Gtqyk^k_sRXVpN&0j8inxikY+Spv}qaTa{{6Qsp!TY +zu0@PJJdL0D{yAkCUExVVe(<}tYBb@IkhLgUb|jp04)EsGv@wH1d4TPQd7|loOjYhn +zGex#{I9pF^yErzVk5ydapX};Bf*zVk0pObyad&2=hEO9`IWnR@Y6y^<+!t;jC;zP<31**U{R(P0dlJh8LTD;LFAGD!Fc +z7YmZRB3<)AP1Md-P9z9GZZ7J)njE@sfz?gC?*E}OD8eIIdNy)tfNx@NE=~hAqVPCB +zEYYV{KR)nO>B<*w__s5*m>U0AhUNWz;`Cw0?;k;vXQrZ0g#v`yfXOhjMx!Yz05ZG2 +z>3|)M98O2xFN@DP2nfkEw~u>rB@}?9-fCdHkQI0T-kb+hc~Hg6U1)aZjzGMtQ;53K +z`Tg6^4o>m(+u&knYJ-)!< +zkw5YuJqxh$m|60UgL3sir_XTr+%f^Z17GHSaLIE1iY5d&G6FUU=I2UgwbS2!lYRfr +zYI*DLAM1cu^gLW3$S=hI_f?|l?FzMhM?alrUGDuCu4y+FhU3Zs>!gk0O9qN|sj>c^O*fLTDry$wAWF&V_m8&`o*Z&PS +z@)4SC)s3{Y&c5V;idw9T6VP56h&z6lEr@OqO7{PFISwGy1oBXF?FdNO3?=;8o;@+t +zX?IN|BBXBr{sKVAhxT%}6$w?eG8(~{=>|*>@oOoG+`RlHw`bHe;0_1RRwodUbUb~l +zb@9%|*W=^^ZL6YxqPOt^sX#qXWr&c)VcIu4y(`I@Ga%A2{;FVbUwiQ}O`Ktud@z@w +ze*)T8o?~DSt>)eUyyeJlBrfCqzw7M({Zmmkq#w7H=E8<4D;;&t80de^J|DKk>5yNx*P>bQ8`X5Y!06B;jYhSi_v37N<81$QC*2YH%hn0W6Wg|s +zwPKX@9N?X9N8K3}gXwR|H{PH1-lv)ezzU(4$j16Z3q+G8s%ew?XrMJ}80H)CEhtag +zVWe2lzuHR&sviN~A~a0t +zoBGq96z4y?D*kyp@6Pb*^-xw&hm^H5lNbQIX2rfbGuyoMimas#?*ZHk +zvzcoUXDW>nQ;IBE0WcN%dIwv7c5AQT?ys`kG2DRmz>E(s#ZTV +zx_Fjthcy0La`)Pmu{$KC0|F}xMV9q-;5GpYx_lapw4IJjr&>Y74K;Kt4B@4$| +zemS%rxUjPS#_Ev)=ssYkW!qw&QRC^G*KRVtvX%XAApD#A6YDJ?2a>wd%io$W_OLaE +zpKX>=wUTxW9S?iLR^WNzj`rV%4b5ld?R1VM;jw(>rY*|;@A4l>8^3PrUiWP40|W~s +zSd{0=JI4AOXJx%Vcd@dE{iXN8WtV1t)PnU7mo`FcH^yVK?_JSWF#%+DjknM2#>;lk +zgCNeXC)u2Q9~C`XUn>7TW%gX)$@`S7sR|>XbDt~hTQ5cySgO_R%^nag!LlkuZ9<(3pldzbtY1(?F3i02IJ^ID_U +z>gCdFQ>uacd2SQG*0H)e2D>eAAV3)VnO)@n_hKKW$<|Fz^P7#f186eNdm$gTgib&t +z#=j>``JxhJu4n0%T8@_+kOVoQ`)@y90V~l=%SJ^>&w@MGEad^_TrnMI`O>5Ex}cqr +z*%Sl)@S6qeUIX()IdO$1uhBrS26@$^j_sS(=2z~n=;^FlTBKQ~IQr~)(pFV1kM8&b +zJk8m?8}9p*=vudol%D`DZXwijh)Hu}XxNyH`)^b`CT9?+%5*vMLy^LUCna`~uvVD1 +zahkQJVio%e-k6%pfGhB) +z@e{y@+y1fETXVd>)O2ANMd=NtR{jm?gu%>uA7EY1k(wRtyrODTlBT>D9a4iAG5^Vi~lif#gJQ$N+QpQgv1cj6!a`qj!UVNWVPx^8$hgiCVLK0 +z3NtfH9MkDrhr=K~(96&6B4C@ra4Cb~Gu-EzWuwn*7xw`qAeWsU~jp(Fblu}VC3xt39${tg6G!RvTCJK$!``d;oK`O?V +zEcnVh^o^-wvBtbLv|sy*j`qL}As7>|b1<11k~8$w0e9dhw7i^75OeVBd7Q_2bG +zNv9pR1>xAjj&ZDvr|uI=4!PmVGx8xVlh{vHSfV%LlRq{qIFlZZ*k2*vr~Lq%%$4{Q +zuZb4ZZ^G7C*3kBdmuOmT2-87Q@Cz!FQ^@Pd6VN~HRfw(C6Obs4eGa#w+CB-% +ztSTl3BR+w%gW)6vL^t9Tkn$RAeXgCC +zv|K;E3VvN_nR?Ob1f(`bVS%mfn$i=03Q)~Us&+|SOid!D|=<269ejkUh7c@ +zI-XHa1@b?wU|(+q7fiwS1D%0}tyDupq7UcBe+?msYFdR|CQUG+zXgNnJe!D8Jj0xP +zid5`^=-e)+^Sq~=qDYUPfPRU?v~34Gy11$Tk)`loS?;Tjx}c9$su0soj-138{iJiPj~v}Wm`8n?e~LRfJ+Oh>n)bQ?XTv&{m|K|ua6$~fTquvT)40Xj?2nt8Wt&|Ng#wvv~j?dmw#Eg7c5>FIZ*lh3!n=kGBV$ +zv9l_%9f#fmD3zTb-|IN-A~Dw$bN&&BX*N1;a0#8JZ1{9X1+Yuz^46p&Sfg%^>gJRS +zEik9}*gwv0O9=BCplbFL%DymxwsIDHi^_O!g)W6pYLJ?1B^%ZqDaLQoYh +zBO`g+^x?Nf!;OlX1HFf`NA8OUs1)Vl6+N$BAml`lRH{Z1*4R*OvaY*s1O+SBM +zo(|FuswNN)h5n{H1R4>a6qtxFyRx0&Sjm}Td_4%o2Q~j11~4w;6i^QhZ>>3ZHa;NP +z?0nF4>=AUg%y^o+Dc!k3-t-T;B$j7qD|Q63 +zp#V`CDokcqlmFrrab*DuG}b4RUSTRpw*~mD4-1}=tl#erK%0M!#>(&s}x8%Xr5JF9*#!=F#Cs=euv +zRPCwO>S1^_GsJ1ZUDDN?1NEm%`})C;CV}3=jNt`hT<=Vf&-iRtWonGVUI&H0nk#2% +zK7-_zaA-NWdWh27P&MYPa5Rn!(mt~Bq;x{yF})F&8pZ_T0HV}`eIR*qs4AG%;8Bv`m|*k +zo~OK=}RM0wXYI1bV5co>=QLO +zyejoH2Hi*?N09jRi=W~!Ge2Nu4b^w4KL=vc1vTp)_6M>(dGIwj&LW~m>|MI`Wk>%| +zkZiN;*AC|3W*$l2=Y;@KssDJ7SGM>Q4Y4}~LC81~zPdOIPk~@kyI0-1flX{PKpfuZ +zf83{&hK2)1_9euKdS6IMpgI-0f}AH})hKS|wB1E~IRQbyZhWG@AR$TUZg6u*EO8Eg +zJlBr>&rPrzh>1!z9kY+y0~7}F35G8L{Hq8%@{rQ94c>+%LPF`h>rMCr?0f3V=o3)v +z3CJ*H{=XHTfYbwiHKjUk1&Dzi`M+vxl>1pDyS+8!za@~PUsc}xRpp1ofe!4^7Pc2w +zBSiu%8(t~haR^2Y<19sKC>XtpxZ2J2KCzOE9&b&7jUgOpnEB#0e)QG}NQsX{EFaRJp;qBSbn4 +zN}96|@nGZtShr0uptt}@A}>K+heQ*x*2i<-f~zLQ8CMuz5$+*nflw-JZ;1>j52$~e +zbqUVoV|>TczB3jWrBvu@H-isx8W^Dvlb=#mnY%e^m@Wb=J5rDu>?qPnW2X-W{#8K; +zsvdcO{h&Iv4eo;sBXnf&I_WyO5Bp;0^U7mQBI`k?QB@hx{6Sw+e*( +z2}lo81N)jW#2BN=GXUKzmkQ})h*CZNrwn33$Iy$(9yFG7EFU^eyFAXRUZMrpg0n*UV>&i;2Uz^AqgkLM`= +z&|4_@ZP+%V4LOhaPZ8Lys(2MPf&+Rl_y5rvLXlAfseza_7W`lRGbd4AsEKm@s)=l-jEPmTc5aNBtdjc(o +z1hBOJY#2P?7lQtQ*xd}kY9e%@Ybhb+RO4SWkc+4T#vCL6TN3eq9tq<^8wmll_v0`m +zfsysIz5k9MBdQJ9J!A`Mvz4?0`V&YN`0MQOuerlQ=ZacqxR_HL5xI!Z7~DY{TvIvNXz|L&ZMd?q(fqR<%y@!b+$2CO50kE&ef@5<^Bk6p$H5L14Palf +z?fiR-_$bT~;RGy=Q*?0Dn&~cy)YZA|iXdETdS3?gHa(@`-`(6$`B6RSY0O^4NRcnQq{8psTfpqV#U-V3mGV$Q!jbS9j@%fjR-z4^jl^wj|82 +z=_kHMLp(fsG{-)80y+x#DVxf_vat|DAlV^nsY?`V#;(>{#HL^+%n +z@ji||iyB}bg#rvdKgDLE;lKk0-<}ibk|!YFTwrwmXR!j0R}x2*o8b-mSUrWNHvSx* +zjDLsc>~SpQ6E)inz5eU};{UDf)V~G0|0#g{w}6R;2Lq!PLo^Mp{neXWl+JC)uT=p7 +zTJbsoA*fS<^eRRcYCxfkbW|Zav&=AITud{8#v!ou{|q*Cea;?uIhNAc4@~GRGfaV4 +ztrO79dhlhs5}=n<05>ol_|bWf9?k;5zyFMl4)yV`tpXy0><{j*#uBl=24JYEpD_fi +z5%ykd;;VtVn~Y*kMZaVDM&8UPu%-7{odCcR{qy}zn}s}qG+{5JXb{R5a1G>t7pN6( +z5iSDS(8gzApHTRZ1T4o5A+eAu^9j<>HXvGh%NkuSGc(X(aIDIBbixt`SqJMM@2>M^ +zoPf+nArS|=%f+5fIxCG$w-|pjzC;Wt{Oy9AEJfuH~9TF1kFZC?t};RRUB +z-=9U?)W+Q5EHDWWo4ckBucl}ID&_wnIMF1sYsqotM$!hcw4!)ZKmCuE%87OnNc7q~ +zE&H&+-|b@$W=Ic_7*Pu@-g;jAZmM1?e7L!@&TuJE#cEVXyv|pBIsm4R+m!eCv9yt0 +zfC+#<3j3C4ap~F2x56?KPnSmb2%AWV#dexp)lgP-;#0NNc5C~WFILU6jFv6=Og*1l +z{W#<=j~dcmg^5T0%?DhvyVD4mZ}){c~{8dz+a(!rM@WIBZ;Ul0Fq_qK63`tOxXZgfOr6;{AJL2 +z{YQjt1qHie_`d-k9?F(KS?EOFoEDL- +z5UHSB4=f&$9IL5-yG?8>61@ +za9Vuj#;-vI&N(_-Bhd!dQ_00xEO%**X;98$a-xNoKw_&Vi&&5`=h8fTs~ +zZprx%v>7$lU;NCkL#03fjinkl=-qE1j-HqK2`s%PYfb@R*{gXC{U4iUHzaOcjz1OU +z&nk1OBTty0S*ZF$0bo8+I2NoZY^qM2t3(}-jR%+(u|nRRfNuBQodIK7ZNcV<$k@&FwVPO$8uCAYCQh6L2k +zXeiIkc@xn}^da9i%n(HfX6U?>4pIE}vXoo-iN#&9Fip-i?V$qA96tDY44g+W#i8In +zKC?~PUov^YS3KD|rCTij>V_qdHHR5gp?$qVR&+Rj+03EiS!V$ZB}vrpJo5<<5x|C) +z4qr&R3ZzZ|KED8gj6cV`Wz#NtaV7_{2QT^Z>+abrv)g +z^|1OuAQyi}iWH#1=AEhrzHnBm@iQ|Jjd8Oc%+9JNBOFP1Lgt&PMswCy(E+w4CbYGyl%KINPQl9do+a_)`3n*H66 +z6g8EY-LrbgCV8vJ1^bNI$c)1l68Ny}$Mvi!%?V4%vu?k;nzLg64yA0ILT&b+vtS-S +zmHoHGIq_-0%?gtzG97`ejvQ}@hVS>^=LW%gUd9}3-MFjbzj3+@FPL=BCe#W9cXxLD$8fk95JD)WjVo2M{654z^y;*2hYN6yYGw;u#VGzutgfcE-nWmN=KLF2=h9zeYanbA^5WIz2+nue9}-wkd&bD= +zK5y@wFjMf*o)jr8S4B)95@!2I=yFd|B{p>-*}@kU<$W+bhYy +z7YE|IoDj?V5E;}eL`G>A+sGIpb1dxal2sOpaC;}9mwGwbp_x2Zn=Ph`rFt5pg@Og1 +ziKszgkw1~ZVXX`7a=>^-RY#2-%teyXaGpK<4mx<|82ey}^okf{LcpUAikG1gxR!^; +z`4!6kdrR>iXv8uN*9nlTn#FAmh-jYWuZ@2ldzSoTzQ2@FEFg6mA +zER&4xx+Y8{g69M@w{(Pk>yy|s$;%6d*={>?I^Pv%Q@v0j^03t%rIt*^vCDx!w|Ww6 +z#pDVUgGNoJUCXw+93L<_pDhivzscpM1$UlS`~6jZf3|Q<+Mn_ELt09WY$dIm2*vJu +zw9VxckX_S-kke$_`HcCkm{gURazfx#WNRB|Wod$ahxc>Sc8`Gl!Sgd}LX+KUJ9Ejs +z!Bn@-AzU%qZO-=Qcy&Q}6{1s5;gDB(JHPx$-{Hl^d@1#!ot1l~)sj(y=KWkAT((8~ +zJa8Ji4XHanueM2sF50pC(^Q*>T6bm-_3}+$elE~&vzlj6xkYbX&%K_V=;Cm2p~a|l!y0~8?r?E(R~g +zYJSh8gw`Mm4*UJdpmoq=Qi=79C +zT5F0nwjz7D3p*~M!8nX@*cl>&;M9`WX3L#8rYXpM+vTq&?gEVaa-@OXk> +za$w+OlC4K~swi&h1jMTRJosSG=~ctSS(tjvth}2l#74_OQ6eUw=1ExFNQ~mgNF7J% +z_%y#_*Sm=rV6i03;)%1pq*!HD6uU3)yE^pq6-bx*Oo(Vv%Y9)Yz +zbz5rtVMzvdnD}OP>>j(PEc64v)K2)a%Zib?oRf>9frm$~AdgOD1BUZXN?nw(X~A^t +z(<1pPcAk37fFWVYXGG&GS4(~C=a<9itQcp007opboC_)E;;1U>qF+7%$%Kr&3QVG3 +zXb2eZhQ39;Lk~8ISvG +zi+kje_tBX~>42qiN%)GR1}6Q(NSlIOBSzUK100!B4(yI|66~AeJKp4*3v)55cim1C +z1gr{6L&ueb<sryu-Bp{9Kl+@#R{DB8W-5V+l0mW*SP`7}Z5F%g9++Nx +zwR}_tew&t(fUY6J%jg*Rp=od*@3#13@xvtgZq_*X4El{Mah@^0a{_wDTN~Rt({7xr +zQ=A=VmMbWtr3Ki<$`6t%;yuM +zAxh|x;(G8Z>gY)j+um-A8;4x5pG&C`uGwWf;huI7o8rfGVekAA56=h=S7D6~LSs=; +zp;z%+rL=v#!X1R5sJ6r7YY#vmI&UkC)klr;l2mlC>pJ~yt9NGHu%spkI&L6f&K3F1 +zN<|>|QMBzJ?Q%C{a#jWHKP%^Kb0Nj=w0+~~rm(+~HGY@M(Qj4l*0Md5lBrQ#CQB>W +z4tioygb@>tckiqyCiC8#8P<17ox?*?8fR2@VgqNg`q`#M{Nh4tbk>QN=Pc%Nuv +z3DNhaJ#!A?v$8i8fl&+=)TER-00wpxvvNb32sC{xq@ +zD_!+UpQ~ha&8FJ+^M{s?af#i_PSEA!mR8Sql~E4qw?aWI7=ZX`DeeUHC*#$r-SD=x +z>WgjL2Ly<}I~84Hj{PvD1mon<$+!`5;n1pBNK?;IB63yee!1xn5t{?;)Z+!lv7dEA +zO*($AckbI(aPd3cgr_ng*U2`;JZieG(orjaR8{ueLG`d_B3O2LtQU%Bg2{*qY$F%D +z2B~YWI=it^Fnf`h0a*2rZEbxd_5ioXQ1rAodo}(WeWh(DWWkjo=)4_dV5{io$R{!q +z*^n!w@wrt5@Fw-blgtHEJW`MT6=6IEKR5HgMBv)!w3Ld@nuc?A>AE;2Y2BOVoR1M_ +zal?{qxM+jN6S{g>?Y-bBpHkBkP#Xp?gFU70cDm6rU&Q{cgJS~$R9L> +z6O9K~|6Euk&UywN$>jrs~7&}`L8ZN%HQaI009hQ5og#@&VZlE!fH5vlAd%tbq3Y6ojFSdSRSbllIGl5>$VA@@UdrXr>&1zrNs+Q +zJsz7qqta6H`$%he6C5F(=+pj1VsX0y(ERQlNcDTCxdG7p|9!FP#BT(O+$jJYr`Dcp +zg#+Y#J<`>Dkqx5dj;#|P!tX#oZB?%Q?$l0a)$F&ALeL5ICv~k3oa(w+evMCX9omw( +zHUV9GU#Ra#SIL?Jo|XJW6O&|Tl_ApmgBv|71kL#ahq;m!k%;~nPkW!I^%{JNe8)gg +z_O9R`J_=jql|Ap5l7Lt6NJPoh)Cs8Ma_uufIBw95$}7#Fb4j4@pB;;BQ*HFCIIc7E +zevTUweaWj|mCadr?$PUNT_F3D_`?M&2)i-u=m7l>Rs95{&{1ZGT7CU{d`!5Us!B5k5z#|;>FX;#cS&Y0UAa7ZsGLbDd-r)BC^6?fsVKHn45^3 +z?LL}|XRNPMR|lv_#&rhNn$8tB#aB)$tLB5eLUS^xOVr{KxFM}S)GEjjgL +z!t-Nd?qYN_d@jNubd +zE2JCt9p4RxFKpo*d)yDJ0&8D(BH(c=417Sx4x*NTSHX+p{jhiFEam=gVnHE?vqwRj +zeUwey7<7~-NznQ>u}v|TO&o4@u^;v^0WdxH9gR0{7@BDzv*OCv+)h9Ml?VCZG5cEM +zKj;bx;snJU$ymLl0FMQ0b>c+n$Rd-a+5@a5))=?GkMklRo(@cka6~-oc$up)@@6U9 +z^zM>(noXPo(Z|If-8%O6z@nN@D%p|TDh>{o_B6FZoVIp+I^3e)7iB_2E(&fhziuSbj#wAPI~{bT5%YlYHCBH{C@}B_e<=h +zUxd_WS9p)XhU*gLO4zu*=TZI7)y?~dePZ&QD*mtI?+X|IOJV9)v?}qpuabG +z2x-YqjZ_EqeU&FHb-WDE$++#cl3_ZPXkOJ6xF9J9d8@i9cV3;|=)#%{xTO}5-?8G# +zf#&SM>;uG?TZjEK8=Q`!`7+XA-y=GjazG-(nlIW&u-9WJAPyzKGOq!cO_?)MkV9{i +zAlE6`Zp%#7fK&FON(QUzsbq`8>Ns^!0*Mj`#`K`HP><+!R +zVYjP`X4v~0G}?Fg2j?0qWA^~44%n4B7iQ$fhKN2p=LGs67DQwvZ-7tzg8v>Y;DS +z`fiaK-OWQ<3Askuh!aq}C#5KBZ=3GD_pQSvO)#v+Z)?IJ_D0iiHk4P`g~9&D6Um9? +zij^Egvnzqkk59F?bZ=|<2PRF$GV0NIbAXotDJTvuU;RO;)j)(718V%@W761)8*#Ul +zrA&2&S_rjLL|6??aGSJ0n$Q|}(%G~<(^NRka3hTdB~#Ti_Gy+3bLuAGzq4HmSB(ny +zINZVS2aFI5O64hgnSbbm6yXzkJftH4CWJKv$U +z9zD0nyl$MnQ$n^;Dh!AlcopE951%6Q+*DGF)dhgON7y$$2UaD##(ve-+eTo=7qYPz +zGQ@d8izC7U{AzSRqp}l(KXmvT#((Ux(2a^()KG=#Dt_0Qo8^s|N4FFpNS>2{9N(1f +zwzv77I#)USq^q7a-0O~&Xm2%KNsa2tEsxTnNh$m=v#i>$e%t(1Y<00l77=-^U{Kq% +zaN00KC*va~2Gh1Ba=$1gZwapX_HAuKorkM$m=f|sf^l__LA&#ol4iPQf9s3A3kqrq +z0j5TgX15D%YOD%5ukq8fRJA&8Rs#CsRCTN+yHS4C(U*)HmClwEg#jZ%`p;-)Wt!K> +zK=RE`(SGsq<`%kj+87<{vKZyMc;51i!8})o89Ob>+!@q+ed7TzG +z7FD2^Wq-*v)G|0he#&_vHY@v4TJG&!-CUfYaGa}=*<@Estm@Xlu3Jx}AbyvHybKu- +zPfs{cfxnXi95^QE6HqXOrU;)4(efwyBia$&*Wf`-8w~j1-}PrNmh#5&R7%vyS1S}0 +z8Otoq<3EyP!TQ_$;@ZkHV_h!68)>^YycS{u_%U4BZIOW!O>VxMW +zTM+HBAJE`V&yW*Smhvy=_w-Cy-oZ1aDwlUn7nEs3&zkW(2C>ut7=*1;APF(iaM>F_ +znYg50aCd*^;N|AJT>0K+3Uo(Xici~fc=)GjF;^ibjlOitgIV%#tb3@zS +zGwp2&FQ`L80XQd!yI+36L;u8tFb}n5xPxBCFq#LXVaQL-D?4kyfyZto*nI*;_w4@g +zq)mXQU$#$a3>;@;`Ts$y#U=`u$6N_zS_HyQq8|MGCB4|s^Z@tm%y@g}Ui1r79&ZwbY)J{*x?cLz(-nL5j;*I_>y)BYZt}fW~E(w%#zjOfA!ZX_|2EVsm +zb@NW3Qp!@I$?Ufq7~pWP +zyG&jt&lU)la~6$Tp?v5*|Ibwe3J|=qnfo*@o;AQhh|g^J1?a^J8~=Ca9@bFq%cp+> +zeXnucm-&uyzT?d8*!fy^?9VvRRA8v}snblXzMu9=!4dh4z+?P(I`Gm@1MC%1;s?d0 +z#JS;@G{NJ`fMVH8hAcU}RF)h!SksDlBV$9=7)?bKqN5n50rzTybGsA08iQxI5YJCQ +z3r9J)L*v1~M$-i9K{uk8&R!Oz+v;2xgPff5WYe3daf2%887Dj)*3&BR)XED&b_au( +z)$>XC%0@_8V>%p*N7t+DloDL3=(iJTyGY(*@%_|(530x;N`YIwDl`t&s^qk-XqfnY +zyj~psrPLz~4jmlBggEL9VCni)rhQtuN9pJ$i +zQYqhZh1fFm1Auor#chLJ>+g;uzf6xihKd&xLn2oL2zGNEd)4g&--5W0+RjIndrQ0$ +zo+y~q;#AY6JNWY#FJF>n=hbcr=fZT@WZF)5}&7c;y2a1|jy1bga-2sF_8l +z4|Pc@6}uun+`UL%R8YM^#j|<1hXXH{2wn>j=l-`?V`HlB(C#J=eaE5%@L$%_JNHH= +z{I-~fXL{EPA9;?GT?!PrW4UKEh0i@NLa970m)a8|*Am<5x4`CRVl92w_75spU{F-V`k6nZWd{!wvEQF!G;!tMH2Z-}u4Dak&&qQuO0>c^BnSuk2=m-bI7lyz-tQ$}NuSy6s1=tEHJ}|-@ +z#RCCG-=O>rD%KSW1((q-VadtU>=aEHS%&o(TkxfA5!v-eyP`*M%#3(HO_4D64S&JM +zQqbB}ZFs`O;;#4=lD5g>5dv<#yy5BU)9dgY+*fe +zR=e6L=6PlXf#cgET%Aql-5ouheGiPL{Xv!Ynu{x&rViN1*I +zmW$aj{=w@zKQeFB-a0&)L~lvWJ%VoE{6eKjGlE4;G;$ZFWcf)rfZ*$Sn{qD}7XIc(QNvv3)<**5ho>V>> +zrlgAb*5}L7Y(5$nuLpzKvli3%I85+~+W?HpiFh;4*luiM*m3K_P~uhHMmaW_zN5aQ +z#@+PYpg!}2uAMrYq+a#o7W(KeeRFS#5jzPc$LpY>2Wro;p+*>^f$aDPOuQv5n~1Y% +zk1cJN)j^K_99)6mJ +zb6Ihk?)vq08@Yi5zyclu`Dr<~*|#=>#3(KC#!3 +zu$(@PTA7QY9}H@3^(Dv3zCvvd^2e8AWdZG*bksV01=N6 +zG*84Dy6;2z!`=4~FY*nt?E)&wQf9$dz1;$lIic4K#1ZddZIvMtm%}yk}57Ux5-wS^Ih~VJ@L?Dfle#g6`mVjNAYA*8mIE2!Md9(YW$h0Raa>6Jr4ak>b1L +zDYx1ov>f=%s0t99SmZm~yJAqF7`vmM-i=3#yMDO6E{q(JR9p$bO23U;EPQb{s0Tg{ +zIs);%;|XeJrhsfaZv58r_m$UiDhq0DFPU*2QsdRnPB$}0C500;Q@En{qbw?ABo425 +zK;ADuYkKi``V{i}3&{)kqEKyUT+a*hPxjZC0DIy#h`Tp!G^qLFO80|XuFg!{&eBWV +z_8bbpaZvgJ~GSvhtGE~$&;a(Vev8BAUsNPPQs>CYFy7k^%=K+5Vb +zIoauUi-m!rruuBhja-dHn=dPEI?7kJ3l6N0DwnQ~QlEzX{O;HL>S{11k%=77j&b7a +z9BnW+he68ywzzxZuNU(#G@4FC$SS92EtaL&+Tw^%_2|Onm=uG)j+zeBwKk{W@3Eqe +zkr}!kB{6s5sB7Qdp2RDp)&69;(s^d*G~x1{IZ6JM`EL@S`)VzhLAKNj;l%>Zkv^?f +z;}ZR+E+jaazE`sVI)1^?xYGhKCXOMgzXSV)80;rFBZ$)HMg{>!)d7>C@0U^6!;~lbgu3F)R@u$ya%-JGy6*u&X(xOhA-v75J+2JgbBO&?>QkZ`4b!TIZ6#IzxjC!qWshj;-m89!eH +z#~)is!;>aF&j-{0n9X`Fcs2!76Q&`(ur!~Jh^qzo1 +zW-KhLhxe>^JpP}?t~08sELvY+#s-SYAYdq?AkwS!5@#$-KtQ^56p>Eo1PBR=fKrS~ +zQz=neP!yztbdex6AP9j#5JG6u0)Y@n;=9axKi*sKt+!r&#yl7 +zaYBcLQhCC=>SJvT^28z&unmSI35wk*j-F+cK5+FUK^b +zxw7O0y#W@ciyf$M2&y9tfYzkl!@hT%Ucc43sQWz3bKfvxFI5L_;bhfcuFzQz5SM?y +zaTM*rg1F%}{vo~X0kN+yKH|M~n|BG7tOuWVYSA3MUx2N07VBg7PB@fC*b9ydRnbt@ +zcssLbT)k}b{NefHby=;uE$Z8o%!}e$`c40^#zd7sl5(wuv?ekOEu_2pcn3`<#;xK7 +zlGut%@B=QpejnlpW=6Xp?qfn?+wbIUGh1oy9NZV1cH?;ap;Eb_TpjHmrGTaPuME>p +zz`9ci5^7Au%b-cMdg^4P>rrhPq(JyFOOP(337lkmqUR<&=UlVuP@`a=+67(i-m{xS +zj#YuX0f;&bC+|+~j*S3n%~y*7RPToFFJRU)5V|Cb{xPC9&nYYAPl75G?8-19tKVMx +z@g}q#Ph8$l1lcIhlxg}C(4a+ezfr}hl2|vo_?cxrG%zx8JPwbOHpH*!dM_%(pvC_K65zXd!S +z#zRb7I!h$NGfFEt7-cZ^YvRz-^#jye5dultwF|1M=2P(0D!NnW_eTfoyah4KKs;|9oK17K0CTV;diJAXa$u9;G*p0*#ow?W +z-?*DwRYS8#Uz#ZiEVq^0OfQlyI8qjzW}=aIm$b$#?q`8w9AuL!*~x5SeSUp5+;Hr( +zOi%IIR^ILZ4?)^HQdclLL(jt`e~Z%NK>7Lgh%R(;0v1~DA_2!f-tSGEWPhGwnT=2E +zmh^;fjA+{w2u2!Prdd3+(}5MeBB)F^67O*k=oS~@b)}0TjI9Woo`mnrA0Af6UE^Cs +z&{km-=4pSDx# +zpZttZE9*~g&fk2IDX|9ufM2-V--|rTd6%zPBoL1{9nWn8|YnooXn0eGvyKnn}~ro@cZq2 +z-H=^-E0cc1ch@iUDS-OrCaH2{g^h+g7xSG>r{TG*vVdico{d!w0+#+ +zvRsJ;{sbUTXWlhu{~N~Gwzm!P0sdDrRUvjy+bPDDbHZR(kGQh2c;R+2fdp7n+BzK9 +z4{|&BQgmU~01CPaWihl^k?7nQY$2zBe+Jqu89zv8M8Ms(;69cU2(1V{9PhZ9{&!|L +z^3|2hFl5i3ayPuk)rKj%s$lSD3HcL$i&cqdq=H;4%GP8b`wfDfwdL`5d*f_JfnCsS +z{sb?i?Azk{_Kh|p#7#G&0$MODgzo7cxF^bLPiL8Z2nB8{(GrY`)*HCq-EEX@*ThUj +z;!#UEYg#py9Tv7`XfzTn1lGs?*cw9Wmmjoh%7?6iXz%d_YthNwDGpEY(Xh{WzI +z$KjjAW@)8djoPxKrH^xUHN71-GF<0ALu)t%WIFWOY5V@=n$~ods}>Wss_elr-P8LS +zQ}CSf=;zkM7#j;6TwbPSK&=`BLoVOWQyk~ZlcKl2$ +zlEdG`PH6j?+I>4&DgqsODbi1I%adn+-B?G2o6*!+rdawo2LY+7rr^!`mki@)8R|3>afNqT&=0 +zQjyTvajJS$w`?d!yV=W%jy(30X0!G4C21*mt8o~cCf533**e4iQ(8oN?)Z>@T_}hJ +z+*IMJ;4bDy`?CJfG#ewkJ{aBd%O#BquYP#azP<(#apjHeFhAw+$Azke->rt)b+l<7 +zp_md@>UIluaNkOSZ5DDguqu2RPR27>7my69Q4#19i4)aUZLrS)FXYgJ-r1W#i6O8D +zMBc_&%sFihnI65?R5L}dVe3uLCFXv}xaf;X^=;8`*E7*XjxvF^V_yBSN&yj)37X69 +zqZY(vVxH}|PEt@{1*SrJt5*dJ8PO`p7F$QI1%vnz3(J6NFb9+)97buQEwA=;q509C +zWCnY{l+o2>I{B)IK#LEmx*Deo)D^d**1o+Hx8U9=GD +z3f9{*z&>yROh754mG +z8#>efJW_6<7%NePghXKZ8_0SAX0+K6XHlim!goQiYk>oFGF*y{Ebk*^!g&Q#zoW0L +zO2j^){-AAdRI?EHp?KZrH*r>>Y^gVpxtvT{*-H(DP0uiN0tedvZQ&Qd)eJ7~1Jsn=NK>+yZ2m$^b6 +zttLF@^fDEeLskI5-_k2u5!wW8&}kw`dhRB-LU_bda7IGawT2R>5>n=}M7?aX3Tw8# +zZIU-{P`9nVd_a_E?cLic`YzUIZz=D;*XyhdPkcmr*0`(h +ztXtpwvQkwz<;FQFwy5uSOo4fUPdYZu$Q75T=z)dL=qeI&DTOls!ZiCRryQ>tIuyehK^y5?t~d^5eZRR4j=SUCu*QD3%p5^ +zTBNaJ)TDibe$G@*eOg+MZ{((uUPX3kjSNN3CbPR!>wU}C#Zg9&D|LFJnYv1YR-Q?C +z?pR)@+2@(i;l~{CcQE!hvhzgAZ)dPS+?^Ji9zSuJBfA?$2{)W`D+w_5FESFSQx%L+ +zL>ioZmhRP{cp*D2>$f5Wc9t?eJs0NN0re`~ZO|*t?W~RcuR+e?7Op)^dso+onvGD} +zSug~z*inM`UN1XVHh_049SLpLINBrNqj4H}+7fptH!syuO}%6KmCg+I2tizP?6drr +zsO(=rt)?dAE?!vI5qk8&8;cQZFRS#z^mmu)=ctzcJ-v?hw{Fd>nRESDRrAK_EcBP8Uj_Vnmt@WT{ +znlD{UKuYQ(NUlf9Pc6eaL?Y2YP1tS8k0pI9-pIn@jhW?h%aU)Dvc*i2>LA`9f}j` +z+4ot%>f^)8Im^2#VGjL!UBe)l%s`L>M6HD6{Tr*|6w2(vsy76r4z;QMxLdL*Dn~^P +zwRh8OpL*UoU*gU^3tV>MQ6{?I`SCmPBqIe-j2-ltmgcJExfeI&=X!I97xRVhq}0TW +z_ywn`#oNoewoj8nAmaXGLQTAyqxZ(CuE<6y8)h^Bzusu`xHvhd{e2C +z0Ul8iAli3Hwx^)lhI3a(anZ4WoMD)8f%A?{^%afY#9m6vDPF%Aeol=o)*c7BKYGW+uUbxg< +ztdr4&gIBQ&ei~#D49xSXy%?P>{5YE9xz-}TtkNP2zb-B+i0b&#+EaQB$0_}%b--j2 +zGi)HlQ3v@eCxZdk{>|w!1jwSqDO}tXF8`yh;FS4;EF$9GFW_v(nd!a$Hv`UL=k^FJ +zFIMrk6KX+dez$y#PYKK?Geek$?hp)qRc>7n(`oa?CK4<)7cix#gpc$HZY=LNC|HF$ +zuA-usW6(-YFQ@ZtNi1k6d$=RV?Bu_b@y#38_ty?7g91-RiMgRh16&_L96e?PcfG7i +za7T8MUWGe9%X8B9nD1b`k5S%rKuSTGjbJ&Kp}pTgAfK`)(G0VjaotEQH@5cKt*gzE +zuD|;M<{bT6VrZ8WM=tNHZ5f*&wb#h6erT+w>0J?f98v0e%3>gx(c)Zvy?#b@NssjO +zH3*kH0!8mT93jNmY}SL_6_=rnE@V*ji88}exTI9w(B*IM^GO&n-HLRGUAVuq^Z5MN +zUcQjs{9-$CESMxFc6|otDmx6UD+4NLFnvL6L1te|0n31M2FoJ7Wgo9>qWe&PT+8naJ!aAc*ax){Td}f +z8!6l1)QE(60Ne+OJ0Si(qC84cP2Tk119evs&^dx^DVI;gQ5x(QEFHtxeUZ)PLd9Lv^8@aNwLe)?VXB4~ +z264LEKi4&MLuaWv1GnOZJMWR;SHnD4;Le~%A8MYH)?df_*08PvE8)GTztVNW&%fC` +z3Z)F)Um=$>O>5A3BkTq28igJn{k{9iM5DQn@#%?ZBf;d*;hSMUjSG^ZNRJy&z;xv! +zNa=0>5DlDZrvzm~11|G*lgKAVJU@?7PT=#RT9)C_T3Q3tZj^%!B_|L1bXY5k6V;^qo8VkW>Tf`Y`8214ETM+`Mp7eM*2*@!*8;C$OW3 +zT~r25Pz=`1fUEljzMw1m57PghJPa6L}+xp=MZ +z;`0)3Nxh8n7o_cs8)5nEM>4JY)2s4PiU!B0;488VAia7Qb)R`LgA)!u)~9V}}mksd?Q-1TJ6CHS?-}MSVMekV~gZYLDp9`)=pU**$YT2fR((Z;NdM +z+Ej=qIfLA*p?&CjUg^z9WlSWU#RFj1l;7qfk>b5 +z;E#9IXIBGR1B)r2w4`*q^Q}S8LZ`9WkZCQKxzVx6QUBgeyH({W#(%0lG&)wg@(1md +z(@&o?K4^uCbO)Xuj1r;#a|LxS)N`Y<_*pN+Ej3x%o&hNQrm!C?l9IhW$OBqMC(5do +zMb``jHw*6#H0jK{fPS*YcUa4{)6B<>NwT5p^+ah~jlxl1)zId?Mupd7PZ^c<_p&oHOcJk#f*stJa%*eO{5`%Xnfp?jd2CAA5jmjhDCCSDFj;_# +z?0}QTT7&O`fsF3Hxe1zhyByr&q|DCj5qS>o@PE7@Vwd0E{}cGnFVDFYepd+u0G>hO +zeu&Q+NBUO(vn0A8&h%S)y`)}e^+a`=Lt*$Hzjsu*$0ivL%WBMcMJ}SvvZ#AT7vIwj +zu@j;p$s?3?Sj1Ew`V*mae^y11Gqe0a4sEinxrqP~?z5Nz)bTG_tlI|?30u{Xgg +zF5Iu(03kP1bEP|nQi{Oh-KH?T;)Wvz4tnhlr;KZkjQGAnYVk~9rzL&?1)QpVU`H37Jjuhz7KWH|eNe(m2Tk)PZ^mk;N2u}lL_k@^duqeszhD-TosXFh1xTz}|Y +z*Wa7;Whya4);Ksg4Mc^eRSypaY;!(i_w2SL>B`+uR_4E!gDuV|=M$Qr^K*pohR$(u +zJITYx!+oA`BPrhL`4~BH6KPZa6;&y<(%A@XDxKy2Arh3zx5pJq0*D{0HQRV5B^M(^ +z{P?f75y5EydWl?eUQTkZD-=MeiRah&e*j6IE5rZ* + +literal 0 +HcmV?d00001 + +diff --git a/extensions/dash-to-dock/meson.build b/extensions/dash-to-dock/meson.build +new file mode 100644 +index 00000000..35ba2ecf +--- /dev/null ++++ b/extensions/dash-to-dock/meson.build +@@ -0,0 +1,27 @@ ++extension_data += configure_file( ++ input: metadata_name + '.in', ++ output: metadata_name, ++ configuration: metadata_conf ++) ++ ++extension_sources += files( ++ 'appIconIndicators.js', ++ 'appIcons.js', ++ 'dash.js', ++ 'dbusmenuUtils.js', ++ 'docking.js', ++ 'extension.js', ++ 'fileManager1API.js', ++ 'intellihide.js', ++ 'launcherAPI.js', ++ 'locations.js', ++ 'prefs.js', ++ 'Settings.ui', ++ 'theming.js', ++ 'utils.js', ++ 'windowPreview.js' ++) ++ ++extension_schemas += files(join_paths('schemas', metadata_conf.get('gschemaname') + '.gschema.xml')) ++ ++install_subdir('media', install_dir: join_paths(extensiondir, uuid)) +diff --git a/extensions/dash-to-dock/metadata.json.in b/extensions/dash-to-dock/metadata.json.in +new file mode 100644 +index 00000000..641a935c +--- /dev/null ++++ b/extensions/dash-to-dock/metadata.json.in +@@ -0,0 +1,12 @@ ++{ ++"extension-id": "@extension_id@", ++"uuid": "@uuid@", ++"settings-schema": "@gschemaname@", ++"gettext-domain": "@gettext_domain@", ++"original-author": "micxgx@gmail.com", ++"name": "Dash to Dock", ++"description": "A dock for the Gnome Shell. This extension moves the dash out of the overview transforming it in a dock for an easier launching of applications and a faster switching between windows and desktops. Side and bottom placement options are available.", ++"shell-version": [ "@shell_current@" ], ++"version": 66, ++"url": "https://micheleg.github.io/dash-to-dock/" ++} +diff --git a/extensions/dash-to-dock/po/ar.po b/extensions/dash-to-dock/po/ar.po +new file mode 100644 +index 00000000..3bc311dd +--- /dev/null ++++ b/extensions/dash-to-dock/po/ar.po +@@ -0,0 +1,573 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-06-04 12:35+0100\n" ++"PO-Revision-Date: 2015-04-18 18:01+0100\n" ++"Last-Translator: Jean-Baptiste Le Cz \n" ++"Language-Team: Faissal Chamekh \n" ++"Language: ar_DZ\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " ++"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" ++"X-Generator: Poedit 1.7.5\n" ++"X-Poedit-SourceCharset: UTF-8\n" ++ ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "الشاشة الرئيسية" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "الشاشة الثانوية" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "يمين" ++ ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "يسار" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "تخصيص الإخفاء التلقائي" ++ ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "العودة للافتراضي" ++ ++#: prefs.js:386 ++#, fuzzy ++msgid "Show dock and application numbers" ++msgstr "أظهر التطبيقات قيد التشغيل" ++ ++#: prefs.js:443 ++#, fuzzy ++msgid "Customize middle-click behavior" ++msgstr "خصّص الإعتام" ++ ++#: prefs.js:514 ++#, fuzzy ++msgid "Customize running indicators" ++msgstr "أظهر التطبيقات قيد التشغيل" ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "جميع النوافذ" ++ ++#: Settings.ui.h:1 ++#, fuzzy ++msgid "Customize indicator style" ++msgstr "خصّص الإعتام" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "اللون" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "لون الحواف" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "عرض الحواف" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "عدد التراكب" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"عرض أرقام التطبيق مؤقتا على الرموز، المقابلة" ++"للاختصار." ++"" ++ ++#: Settings.ui.h:7 ++#, fuzzy ++msgid "Show the dock if it is hidden" ++msgstr "أظهر المرساة فوق" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"إذا اُستخدم الإخفاء التلقائي الشريط سيظهر لوقت قصير عند الضغط" ++"على الإختصار." ++"" ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "الإختصار للخيارات في الأعلى" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "البنية: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "زمن الاختفاء (ثا)" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"عند التصغير النقر المزدوج سيصغر جميع نوافذ" ++"التطبيق." ++"" ++"" ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "حدث Shift+Click" ++ ++#: Settings.ui.h:14 ++#, fuzzy ++msgid "Raise window" ++msgstr "صغّر النافذة" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "صغّر النافذة" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "شغّل نسخة جديدة" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "التبديل بين النوافذ" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "خروج" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "سلوك الزر المتوسط." ++ ++#: Settings.ui.h:20 ++#, fuzzy ++msgid "Middle-Click action" ++msgstr "حدث النقر" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "سلوك Shift+Middle-Click." ++ ++#: Settings.ui.h:22 ++#, fuzzy ++msgid "Shift+Middle-Click action" ++msgstr "حدث Shift+Click" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "أظهر المرساة فوق" ++ ++#: Settings.ui.h:24 ++#, fuzzy ++msgid "Show on all monitors." ++msgstr "الشاشة الثانوية" ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "الموضع على الشاشة" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "أسفل" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "أعلى" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "إخفاء المرساة عندما تحجب نافذة التطبيق الحالي. تخصيصات أكثر متوفرة." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "إخفاء تلقائي ذكي" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "حدّ حجم المرساة" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "نمط الشريط: تمديد إلى حواف الشاشة" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "حدّ حجم الأيقونة" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "حجم أيقونات ثابت: استعمل التمرير لكشف أيقونات أخرى" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "الموضع والحجم" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "أظهر التطبيقات المفضّلة" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "أظهر التطبيقات قيد التشغيل" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "عزل مساحات العمل." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "عرض معاينات النوافذ المفتوحة." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"إذا تم تعطيله هذه الإعدادت يمكن الوصول إليها من gnome-tweak-tool أو " ++"موقع الإضافات." ++"" ++ ++#: Settings.ui.h:42 ++#, fuzzy ++msgid "Show Applications icon" ++msgstr "أظهر أيقونة التطبيقات أولا" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "تحريك زر التطبيقات في بداية الشريط." ++ ++#: Settings.ui.h:44 ++#, fuzzy ++msgid "Animate Show Applications." ++msgstr "أظهر أيقونة التطبيقات أولا" ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "المشغلات" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"تفعيل Super+(0-9) كاختصار لتمكين التطبيقات. يمكن أيضاً استخدامها " ++"معاً مع Shift و Ctrl" ++"" ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "استخدام إختصارات لوحة المفاتيح لتفعيل التطبيقات" ++ ++#: Settings.ui.h:48 ++#, fuzzy ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "التصرّف عن النقر على أيقونة التطبيق قيد التشغيل." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "حدث النقر" ++ ++#: Settings.ui.h:50 ++msgid "Minimize" ++msgstr "صغّر" ++ ++#: Settings.ui.h:51 ++#, fuzzy ++msgid "Minimize or overview" ++msgstr "صغّر النافذة" ++ ++#: Settings.ui.h:52 ++#, fuzzy ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "التصرّف عن النقر على أيقونة التطبيق قيد التشغيل." ++ ++#: Settings.ui.h:53 ++#, fuzzy ++msgid "Scroll action" ++msgstr "حدث النقر" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "لا تفعل شيئا" ++ ++#: Settings.ui.h:55 ++#, fuzzy ++msgid "Switch workspace" ++msgstr "تبديل مساحة عمل واحدة في نفس الوقت" ++ ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "السلوك" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"القليل من التخصيصات يعني إضافة الشريط مع سِمَة غنوم. " ++"بدلاً من هذا, خيارات محددة يُمكن اختيارها من الأسفل." ++"" ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "استعمل السمة المضمّنة" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "حفظ المساحة يقلل من الحشو ونصف قطر الحافة." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "تقليص المرساة" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "أظهر نقطة لكل نوافذة من التطبيق." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "أظهر مؤشرات عدد النوافذ" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "تعيين لون الخلفية لشَرِطة" ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "تخصيص لون الشَرِطة" ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "ضبط إعتام خلفية المرساة." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "خصّص الإعتام" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "العتمة" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "الزاوي المستقيمة\n" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "المظهر" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "الإصدار:" ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "تحريك الشريط خارج النظرة العامة في الشَرِطة" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "أنشئ من طرف" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "صفحة الويب" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"هذا البرنامج يأتي بدون أي ضمانات.\n" ++"لمزيد من المعلومات أنظر رخصة غنو العمومية، الإصدارة 2 فما فوق." ++ ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "حول" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "أظهر المرساة بتمرير الفأرة على حافة النافذة" ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "إخفاء تلقائي" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "اضغط للإظهار: يتطلب ضغطا لإظهار المرساة" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "تمكين في وضع ملئ الشاشة" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "إظهار المرساة عندما لا تحجب نوافذ التطبيق." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "حيلة النوافذ" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "جميع النوافذ" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "نوافذ التطبيق المركزة فقط" ++ ++#: Settings.ui.h:86 ++#, fuzzy ++msgid "Only maximized windows" ++msgstr "صغّر النافذة" ++ ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "مدة التحريك (ثا)" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0.000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "زمن الظهور (ثا)" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "عتبة الضغط" ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "بدّل مساحة العمل عند التمرير فوق المرساة" ++ ++#~ msgid "Main Settings" ++#~ msgstr "الخصائص الأساسية" ++ ++#~ msgid "Dock Position" ++#~ msgstr "موضع المرساة" ++ ++#~ msgid "Dock is fixed and always visible" ++#~ msgstr "المرساة ثابتة وظاهرة دائما" ++ ++#~ msgid "Show delay [ms]" ++#~ msgstr "تأخير الظهور (ميلي ثانية)" ++ ++#~ msgid "Hide delay [ms]" ++#~ msgstr "تأخير الإخفاء (ميلي ثانية)" ++ ++#~ msgid "Application based intellihide" ++#~ msgstr "إخفاء تلقائي على حسب التطبيق" ++ ++#~ msgid "Show the dock on following monitor (if attached)" ++#~ msgstr "أظهر المرساة في الشاشة الحالية (إن وُصلت)" ++ ++#~ msgid "Primary (default)" ++#~ msgstr "الأساسية (الافتراضي)" ++ ++#~ msgid "1" ++#~ msgstr "1" ++ ++#~ msgid "2" ++#~ msgstr "2" ++ ++#~ msgid "3" ++#~ msgstr "3" ++ ++#~ msgid "4" ++#~ msgstr "4" ++ ++#~ msgid "Max height" ++#~ msgstr "الارتفاع الأقصى" ++ ++#~ msgid "Expand (experimental and buggy)" ++#~ msgstr "تمديد (تجريبي)" ++ ++#~ msgid "Maximum icon size" ++#~ msgstr "الحجم الأقصى للأيقونة" ++ ++#~ msgid "16" ++#~ msgstr "16" ++ ++#~ msgid "24" ++#~ msgstr "24" ++ ++#~ msgid "32" ++#~ msgstr "32" ++ ++#~ msgid "48" ++#~ msgstr "48" ++ ++#~ msgid "64" ++#~ msgstr "64" ++ ++#~ msgid "Optional features" ++#~ msgstr "ميزات إضافية" ++ ++#~ msgid "Deadtime between each workspace switching [ms]" ++#~ msgstr "الوقت بين تبديل كل مساحة عمل" ++ ++#~ msgid "Only a 1px wide area close to the screen edge is active" ++#~ msgstr "مساحة بعرض 1 بكسل فقط قريبة من حافة الشاشة هي النشطة" ++ ++#~ msgid "All the area of the dock is active" ++#~ msgstr "جميع مناطق المرساة نشطة" ++ ++#~ msgid "Customize actions on mouse click" ++#~ msgstr "خصّص حدث النقر على الفأرة" ++ ++#~ msgid "Action on clicking on running app" ++#~ msgstr "الحدث عن النقر على تطبيق قيد التشغيل" ++ ++#~ msgid "Minimize window on shift+click (double click for all app windows)" ++#~ msgstr "" ++#~ "تصغير النافذة عند النقر مع shift (الضغط المزدوج بالنسبة لكل نوافذ التطبيق)" ++ ++#~ msgid "Make message tray insensitive to mouse events" ++#~ msgstr "اجعل رسالة التنبيه غير حساسة لأحداث الفأرة" ++ ++#~ msgid "Appearence and Themes" ++#~ msgstr "المظهر والسمة" ++ ++#~ msgid "" ++#~ "A customized theme is built in the extension. This is meant to work with " ++#~ "the default Adwaita theme: the dash is shrunk to save space, its " ++#~ "background transparency reduced, and custom indicators for the number of " ++#~ "windows of each application are added." ++#~ msgstr "" ++#~ "تم تضمين سمة مخصّصة للإضافة، هذا يعني أنها تعمل مع السمة الافتراضية " ++#~ "Adwaita: تقليص المرساة لكسب مساحة، إنقاص شفافيتها، كذلك تم إضافة مؤشرات " ++#~ "لعدد نوافذ التطبيق." ++ ++#~ msgid "" ++#~ "Alternatively, for a better integration with custom themes, each " ++#~ "customization can be applied indipendently" ++#~ msgstr "بدلا من هذا، لتكاملية أفضل مع سمات مخصّصة، كل تخصيص يطبّق على حدة" ++ ++#~ msgid "Shrink the dash size by reducing padding" ++#~ msgstr "مساحة المرساة بإنقاص الحشو" ++ ++#~ msgid "Only when in autohide" ++#~ msgstr "فقط عند الإخفاء التلقائي" +diff --git a/extensions/dash-to-dock/po/cs.po b/extensions/dash-to-dock/po/cs.po +new file mode 100644 +index 00000000..dc4f9a98 +--- /dev/null ++++ b/extensions/dash-to-dock/po/cs.po +@@ -0,0 +1,552 @@ ++# Translation for cs ++# Copyright (C) 2014 Michele ++# This file is distributed under the same license as the dash-to-dock package. ++# Jiří Doubravský , 2015. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-05-16 13:48+0200\n" ++"PO-Revision-Date: 2020-05-16 13:54+0200\n" ++"Last-Translator: Daniel Rusek \n" ++"Language-Team: CZECH \n" ++"Language: cs\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3\n" ++"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "Hlavní obrazovka" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "Sekundární obrazovka " ++ ++#: prefs.js:309 Settings.ui.h:28 ++msgid "Right" ++msgstr "Vpravo" ++ ++#: prefs.js:310 Settings.ui.h:25 ++msgid "Left" ++msgstr "Vlevo" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "Přizpůsobení chytrého skrývání" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "Obnovit výchozí nastavení" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "Zobrazování doku a čísel aplikací" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "Nastavit chování prostředního tlačítka" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "Nastavit indikátory spuštěných aplikací" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Přizpůsobení průhlednosti" ++ ++#: appIcons.js:797 ++msgid "All Windows" ++msgstr "Všechna okna" ++ ++#: appIcons.js:916 ++#, javascript-format ++msgid "Quit %d Windows" ++msgstr "Ukončit %d oken" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1134 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s Dash to Docku" ++ ++#: locations.js:65 ++msgid "Trash" ++msgstr "Koš" ++ ++#: locations.js:74 ++msgid "Empty Trash" ++msgstr "Vyprázdnit koš" ++ ++#: locations.js:192 ++msgid "Mount" ++msgstr "Připojit" ++ ++#: locations.js:235 ++msgid "Eject" ++msgstr "Vysunout" ++ ++#: locations.js:240 ++msgid "Unmount" ++msgstr "Odpojit" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Pokud je nastavena minimalizace, dvojklik minimalizuje všechna okna aplikace." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Shift + levé tlačítko" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Přenést okno do popředí" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimalizovat okno" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Spustit novou instanci" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Přepínat mezi okny" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimalizovat nebo zobrazit přehled" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Zobrazit náhledy oken" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimalizovat nebo zobrazit náhledy oken" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Zaměřit nebo zobrazit náhledy oken" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Ukončit" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Chování při kliknutím prostředního tlačítka" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Prostřední tlačítko" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Chování při kliknutím prostředního tlačítka a stiknuté klávese Shift" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Shift + prostřední tlačítko" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Podsvícení ikon jako v Unity 7" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Použít převládající barvu ikony" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Vlastní styl indikátorů" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Barva" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Barva ohraničení" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Šířka ohraničení" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Kde zobrazit dok" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Zobrazit na všech obrazovkách" ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Umístění na obrazovce" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Dole" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Nahoře" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Skrýt dok, pokud překáží oknu aktivní aplikace. K dispozici jsou podrobnější " ++"nastavení." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Chytré skrývání" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Maximální velikost doku" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Režim panelu (roztáhnout dok po celé délce obrazovky)" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Maximální velikost ikon" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "" ++"Neměnná velikost ikon (rolováním na doku je možné zobrazit další ikony)" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Umístění a velikost" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Zobrazit oblíbené aplikace" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Zobrazit spuštěné aplikace" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Izolovat pracovní plochy" ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Izolovat obrazovky" ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Zobrazit náhledy oken" ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Pokud je zakázáno, jsou tato nastavení dostupná z GNOME Tweaks nebo z webové " ++"stránky GNOME Shell Extensions." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Tlačítko přístupu ke všem aplikacím" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Přesunout tlačítko přístupu ke všem aplikacím na začátek doku" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animace při zobrazení všech aplikací" ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Zobrazit koš" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Zobrazit připojené svazky a zařízení" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Spouštěče" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Povolit klávesovou zkratku Super+[0-9] pro spuštění aplikací; tuto " ++"klávesovou zkratku lze též použít s klávesami Shift a Ctrl." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Klávesová zkratka pro aktivaci aplikací" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Chování při kliknutí na ikonu běžící aplikace" ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Kliknutí tlačítkem myši" ++ ++#: Settings.ui.h:52 ++msgid "Minimize" ++msgstr "Minimalizovat" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Chování při rolování na ikoně běžící aplikace" ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Rolování kolečkem myši" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Nedělat nic" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Přepnout pracovní plochu" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Chování" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Nastavení kvůli integraci doku s výchozím motivem GNOME; jinak lze použít " ++"samostatné předvolby níže." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Použít výchozí motiv doku" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "Prostorově méně náročné zobrazení (zmenšení volného místa kolem ikon)" ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Zmenšený dok" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "Indikátory počtu otevřených oken" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "Výchozí" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Tečky" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Čtverečky" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Čárky" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Dělená linka" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Plná linka" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "Styl Ciliora" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "Styl Metro" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Nastavit barvu pozadí doku" ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Vlastní barva doku" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Nastavit průhlednost doku" ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Neměnná" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Dynamická" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Průhlednost" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner" ++msgstr "Zakázat zaoblené rohy" ++ ++#: Settings.ui.h:79 ++msgid "Appearance" ++msgstr "Vzhled" ++ ++#: Settings.ui.h:80 ++msgid "version: " ++msgstr "verze: " ++ ++#: Settings.ui.h:81 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Vytvoří dok z přehledu činností a oblíbených aplikací" ++ ++#: Settings.ui.h:82 ++msgid "Created by" ++msgstr "Autor" ++ ++#: Settings.ui.h:83 ++msgid "Webpage" ++msgstr "Webová stránka" ++ ++#: Settings.ui.h:84 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Na tento program NEJSOU POSKYTOVÁNY ZÁRUKY.\n" ++"Podrobněji viz GNU General Public License, verze 2 nebo pozdější." ++ ++#: Settings.ui.h:86 ++msgid "About" ++msgstr "O tomto doplňku" ++ ++#: Settings.ui.h:87 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Nastavit minimální a maximální hodnoty průhlednosti" ++ ++#: Settings.ui.h:88 ++msgid "Minimum opacity" ++msgstr "Minimální průhlednost" ++ ++#: Settings.ui.h:89 ++msgid "Maximum opacity" ++msgstr "Maximální průhlednost" ++ ++#: Settings.ui.h:90 ++msgid "Number overlay" ++msgstr "Čísla aplikací" ++ ++#: Settings.ui.h:91 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "Krátce ukázat čísla aplikací odpovídající klávesové zkratce" ++ ++#: Settings.ui.h:92 ++msgid "Show the dock if it is hidden" ++msgstr "Zobrazit dok, pokud je skrytý" ++ ++#: Settings.ui.h:93 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Pokud je nastaveno automatické skrývání, stisknutím klávesové zkratky se dok " ++"krátce zobrazí." ++ ++#: Settings.ui.h:94 ++msgid "Shortcut for the options above" ++msgstr "Klávesová zkratka" ++ ++#: Settings.ui.h:95 ++msgid "Syntax: , , , " ++msgstr "Syntaxe: , , , " ++ ++#: Settings.ui.h:96 ++msgid "Hide timeout (s)" ++msgstr "Prodleva při skrytí (s)" ++ ++#: Settings.ui.h:97 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Zobrazit dok najetím myši ke kraji obrazovky" ++ ++#: Settings.ui.h:98 ++msgid "Autohide" ++msgstr "Automatické skrývání" ++ ++#: Settings.ui.h:99 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Zobrazit dok až po zatlačení na kraj obrazovky" ++ ++#: Settings.ui.h:100 ++msgid "Enable in fullscreen mode" ++msgstr "Povolit celoobrazovkový režim" ++ ++#: Settings.ui.h:101 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Zobrazit dok pokud nepřekáží oknům aplikací" ++ ++#: Settings.ui.h:102 ++msgid "Dodge windows" ++msgstr "Uhýbání oknům" ++ ++#: Settings.ui.h:103 ++msgid "All windows" ++msgstr "Všechna okna" ++ ++#: Settings.ui.h:104 ++msgid "Only focused application's windows" ++msgstr "Pouze aktivní okna" ++ ++#: Settings.ui.h:105 ++msgid "Only maximized windows" ++msgstr "Pouze maximalizovaná okna" ++ ++#: Settings.ui.h:106 ++msgid "Animation duration (s)" ++msgstr "Trvání animace (s)" ++ ++#: Settings.ui.h:107 ++msgid "Show timeout (s)" ++msgstr "Prodleva při zobrazení (s)" ++ ++#: Settings.ui.h:108 ++msgid "Pressure threshold" ++msgstr "Míra tlaku (px)" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "Zobrazit u ikon tečku indikující každé otevřené okno aplikace" ++ ++#~ msgid "Show windows counter indicators" ++#~ msgstr "Indikátory počtu oken" ++ ++#~ msgid "Adaptive" ++#~ msgstr "Adaptivní" +diff --git a/extensions/dash-to-dock/po/de.po b/extensions/dash-to-dock/po/de.po +new file mode 100644 +index 00000000..65f840f0 +--- /dev/null ++++ b/extensions/dash-to-dock/po/de.po +@@ -0,0 +1,586 @@ ++# Translation for de ++# Copyright (C) 2014 Michele ++# This file is distributed under the same license as the dash-to-dock package. ++# Morris Jobke , 2014. ++# Jonatan Zeidler , 2012 ++# jonius , 2012 ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-06-04 12:35+0100\n" ++"PO-Revision-Date: 2017-12-11 19:21+0100\n" ++"Last-Translator: Klaus Staedtler \n" ++"Language-Team: jonius \n" ++"Language: de\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.0.4\n" ++ ++# Konjugation wegen Stellung im Satz ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Primärer Anzeige" ++ ++# Konjugation wegen Stellung im Satz ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Sekundärer Anzeige" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "Rechts" ++ ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "Links" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Automatisches Ausblenden anpassen" ++ ++# Verwende Übersetzung aus Nautilus ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "Auf Vorgaben zurücksetzen" ++ ++#: prefs.js:386 ++msgid "Show dock and application numbers" ++msgstr "Zeige Dock und Anwendungsnummern" ++ ++#: prefs.js:443 ++msgid "Customize middle-click behavior" ++msgstr "Verhalten des mittleren Klick anpassen" ++ ++#: prefs.js:514 ++msgid "Customize running indicators" ++msgstr "Laufende Anzeigen anpassen" ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "Alle Fenster" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Anzeigenstil anpassen" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Farbe" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Randfarbe" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Randbreite" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Nummer der Überlagung" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Zeige vorübergehend die Nummer der Anwendung über den Icons, passend zum " ++"Tastaturkürzel." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Dock anzeigen wenn es versteckt ist" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Wenn automatisches Ausblenden benutzt wird, erscheint kurzzeitig das Dock " ++"durch drücken des Tastaturkürzels." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Tastaturkürzel für die obigen Aktionen" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Syntax: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Ausblende-Verzögerung in s" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Wenn auf »Minimieren« eingestellt, können durch Doppelklick alle Fenster der " ++"Anwendung gleichzeitig minimiert werden." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Wirkung bei Umschalttaste + Mausklick" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "Fenster anheben" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Minimieren" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Neues Fenster" ++ ++# Vielleicht einen Tick besser als „umschalten“? ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Zwischen den Fenstern der Anwendung wechseln" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "Beenden" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "Verhalten bei Mittel-Klick " ++ ++#: Settings.ui.h:20 ++#, fuzzy ++msgid "Middle-Click action" ++msgstr "Wirkung bei Mausklick" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Verhalten bei Umschalttaste+Mittel-Klick." ++ ++#: Settings.ui.h:22 ++#, fuzzy ++msgid "Shift+Middle-Click action" ++msgstr "Wirkung bei Umschalttaste + Mausklick" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "Dock anzeigen auf" ++ ++# Konjugation wegen Stellung im Satz ++#: Settings.ui.h:24 ++msgid "Show on all monitors." ++msgstr "Auf allen Bildschirmen anzeigen" ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Position auf Bildschirm" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Unten" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Oben" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Das Dock automatisch ausblenden, falls es ein Fenster der laufenden " ++"Anwendung überlagert. Einstellungen können weiter verfeinert werden." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Automatisch ausblenden" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Maximale Dockgröße" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Panelmodus: bis zu Bildschirmkanten ausdehnen" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Maximale Icongröße" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Feste Icongröße: andere Icons durch Scrollen sichtbar machen" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Position und Größe" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Favoriten anzeigen" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Laufende Anwendungen anzeigen" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Isoliere Arbeitsflächen." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Zeige Vorschau der geöffneten Fenster" ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Falls deaktiviert, sind diese Einstellungen über Gnome-Tweak-Tool oder die " ++"Erweiterungsseite erreichbar." ++ ++# Durchkopplung von Kompositum ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Symbol Anwendungen anzeigen anzeigen" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Anwendungen-anzeigen-Button an den Anfang verschieben." ++ ++# Durchkopplung von Kompositum ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Symbol Anwendungen anzeigen animieren" ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Starter" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Benutze Super+(0-9) als Tastaturkürzel um Anwendungen zu aktivieren. Kann " ++"auch zusammen mit Umschalttaste und Strg. genutzt werden." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Benutze Tastaturkürzel um Anwendungen zu aktivieren" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Verhalten bei Mausklick auf das Icon einer laufenden Anwendung." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Wirkung bei Mausklick" ++ ++#: Settings.ui.h:50 ++msgid "Minimize" ++msgstr "Minimieren" ++ ++#: Settings.ui.h:51 ++msgid "Minimize or overview" ++msgstr "Minimieren oder Übersicht" ++ ++#: Settings.ui.h:52 ++#, fuzzy ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Verhalten bei Mausklick auf das Icon einer laufenden Anwendung." ++ ++#: Settings.ui.h:53 ++#, fuzzy ++msgid "Scroll action" ++msgstr "Wirkung bei Mausklick" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "Nichts tun" ++ ++#: Settings.ui.h:55 ++msgid "Switch workspace" ++msgstr "Arbeitsfläche umschalten" ++ ++# Verwende Übersetzung aus Nautilus ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "Verhalten" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Einige Anpassungen, durch die das Dock besser in das standardmäßige GNOME-" ++"Thema eingepasst werden soll. Alternativ können im Folgenden besondere " ++"Einstellungen vorgenommen werden." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "Angepasstes Thema dieser Erweiterung nutzen" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "Platz sparen, indem Innenabstand und Eckenradius verkleinert werden." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "Dash verkleinern" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "Für jedes Fenster einer Anwendung einen kleinen Indikator einblenden." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "Indikatoren für Fensterzahl" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "Setze Hintergrundfarbe für das Dash" ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "Farbe des Dash anpassen" ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "Die Hintergrundtransparenz des Dash einstellen." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "Transparenz anpassen" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "Transparenz" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "Erzwinge rechte Ecke\n" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "Erscheinungsbild" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "Version: " ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Verwandelt das Dash aus dem Übersichtsmodus in ein Dock" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "Erstellt von" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "Internetseite" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Für dieses Programm besteht KEINERLEI GARANTIE.\n" ++" Details finden Sie in der GNU General Public License, Version 2 oder später." ++ ++# Verwende Übersetzung aus Nautilus ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "Info" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Dock einblenden, wenn Mauszeiger an Bildschirmkante anliegt." ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "Automatisch ausblenden" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "" ++"Anstoßen erforderlich: Dock nur einblenden, wenn Mauszeiger schnell gegen " ++"Bildschirmkante stößt" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "Im Vollbildmodus einschalten" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Dock einblenden, falls es keine Anwendungsfenster überlagert." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "Fenstern ausweichen" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "Alle Fenster" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "Nur Anwendungsfenster mit Fokus" ++ ++#: Settings.ui.h:86 ++msgid "Only maximized windows" ++msgstr "Nur maximierte Fenster" ++ ++# Nach DIN 1313 werden Einheiten nicht in Klammern gesetzt ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "Animationsdauer in s" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0,000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "Einblende-Verzögerung in s" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "Stoßschwellwert" ++ ++#: Settings.ui.h:91 ++msgid "Isolate monitors." ++msgstr "Isoliere Monitore." ++ ++#, fuzzy ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "Falls es zu viele Symbole auf dem Dock werden, dann bleibt nur " ++#~ "Anwendungen anzeigen aktiv." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Arbeitsfläche durch Scrollen wechseln" ++ ++#~ msgid "Only consider windows of the focused application" ++#~ msgstr "Nur Fenster der fokussierten Anwendung einbeziehen" ++ ++#~ msgid "Main Settings" ++#~ msgstr "Grundeinstellungen" ++ ++#~ msgid "Dock Position" ++#~ msgstr "Dock-Position" ++ ++#~ msgid "Dock is fixed and always visible" ++#~ msgstr "Das Dock hat eine feste Position und ist immer sichtbar" ++ ++#~ msgid "Show delay [ms]" ++#~ msgstr "Einblendeverzögerung [ms]" ++ ++#~ msgid "Hide delay [ms]" ++#~ msgstr "Ausblendeverzögerung [ms]" ++ ++#~ msgid "Application based intellihide" ++#~ msgstr "Anwendungsbasiertes intelligentes Verstecken" ++ ++#~ msgid "Show the dock on following monitor (if attached)" ++#~ msgstr "Zeige Dock auf folgendem Monitor (falls angeschlossen)" ++ ++#~ msgid "Primary (default)" ++#~ msgstr "Primäranzeige (Standard)" ++ ++#~ msgid "1" ++#~ msgstr "1" ++ ++#~ msgid "2" ++#~ msgstr "2" ++ ++#~ msgid "3" ++#~ msgstr "3" ++ ++#~ msgid "4" ++#~ msgstr "4" ++ ++#~ msgid "Max height" ++#~ msgstr "Maximale Höhe" ++ ++#~ msgid "Expand (experimental and buggy)" ++#~ msgstr "Komplette Höhe (experimentell und fehlerbehaftet)" ++ ++#~ msgid "Maximum icon size" ++#~ msgstr "Maximale Symbolgröße" ++ ++#~ msgid "16" ++#~ msgstr "16" ++ ++#~ msgid "24" ++#~ msgstr "24" ++ ++#~ msgid "32" ++#~ msgstr "32" ++ ++#~ msgid "48" ++#~ msgstr "48" ++ ++#~ msgid "64" ++#~ msgstr "64" ++ ++#~ msgid "Optional features" ++#~ msgstr "Optionale Funktionen" ++ ++#~ msgid "Deadtime between each workspace switching [ms]" ++#~ msgstr "Stillstandszeit zwischen Arbeitsflächenwechsel [ms]" ++ ++#~ msgid "Only a 1px wide area close to the screen edge is active" ++#~ msgstr "Nur einen 1 Pixel-breiten Bereich am Rand nutzen" ++ ++#~ msgid "All the area of the dock is active" ++#~ msgstr "Den gesamten Bereich des Docks nutzen" ++ ++#~ msgid "Customize actions on mouse click" ++#~ msgstr "Aktion bei Mausklick anpassen" ++ ++#~ msgid "Action on clicking on running app" ++#~ msgstr "Aktion beim Klicken auf eine laufende Anwendung" ++ ++#~ msgid "Minimize window on shift+click (double click for all app windows)" ++#~ msgstr "" ++#~ "Fenster mit Shift+Klick minimieren (Doppelklick für alle Fenster der " ++#~ "Anwendung)" ++ ++#~ msgid "Appearence and Themes" ++#~ msgstr "Erscheinungsbild und Themen" ++ ++#~ msgid "" ++#~ "A customized theme is built in the extension. This is meant to work with " ++#~ "the default Adwaita theme: the dash is shrunk to save space, its " ++#~ "background transparency reduced, and custom indicators for the number of " ++#~ "windows of each application are added." ++#~ msgstr "" ++#~ "Ein angepasstes Thema ist in dieser Erweiterung enthalten. Es ist für das " ++#~ "Vorgabe-Adwaita-Thema gedacht: Das Dash ist schmaler, um Platz zu sparen, " ++#~ "die Hintergrundtransparenz ist reduziert und für jede Anwendung wird ein " ++#~ "Indikator für die Anzahl der Fenster eingefügt." ++ ++#~ msgid "" ++#~ "Alternatively, for a better integration with custom themes, each " ++#~ "customization can be applied indipendently" ++#~ msgstr "" ++#~ "Alternativ können für eine bessere Integration Anpassungen vorgenommen " ++#~ "werden" ++ ++#~ msgid "Shrink the dash size by reducing padding" ++#~ msgstr "Das Dash schmaler machen durch Verkleinern des Abstands zum Rand" ++ ++#~ msgid "Apply custom theme (work only with the default Adwaita theme)" ++#~ msgstr "" ++#~ "Benutzerdefiniertes Theme verwenden (funktioniert nur mit dem Standard-" ++#~ "Adwaita-Theme)" +diff --git a/extensions/dash-to-dock/po/el.po b/extensions/dash-to-dock/po/el.po +new file mode 100644 +index 00000000..88285213 +--- /dev/null ++++ b/extensions/dash-to-dock/po/el.po +@@ -0,0 +1,444 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# Δημήτριος-Ρωμανός Ησαΐας , 2017. ++# Vangelis Skarmoutsos , 2017. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-06-04 12:35+0100\n" ++"PO-Revision-Date: 2017-09-29 21:48+0300\n" ++"Last-Translator: Vangelis Skarmoutsos \n" ++"Language-Team:\n" ++"Language: el\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.0.3\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++ ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Κύρια οθόνη" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Δευτερεύουσα οθόνη " ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "Δεξιά" ++ ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "Αριστερά" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Προσαρμογή έξυπνης απόκρυψης" ++ ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "Επαναφορά στις προεπιλογές" ++ ++#: prefs.js:386 ++msgid "Show dock and application numbers" ++msgstr "Προβολή της μπάρας και της αρίθμησης εφαρμογών" ++ ++#: prefs.js:443 ++msgid "Customize middle-click behavior" ++msgstr "Προσαρμογή συμπεριφοράς μεσαίου κλικ" ++ ++#: prefs.js:514 ++msgid "Customize running indicators" ++msgstr "Προσαρμογή δεικτών τρεχόντων εφαρμογών" ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "Όλα τα παράθυρα" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Προσαρμογή του στυλ του δείκτη" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Χρώμα" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Χρώμα περιγράμματος" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Πλάτος περιγράμματος" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Επίστρωση αριθμού" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Προσωρινή εμφάνιση αριθμών εφαρμογής πάνω από τα εικονίδια, που αντιστοιχούν " ++"στη συντόμευση πληκτρολογίου." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Προβολή της μπάρας αν είναι κρυμμένη" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Αν χρησιμοποιείται η αυτόματη απόκρυψη, η μπάρα θα εμφανίζεται για λίγο " ++"χρόνο όταν πατιέται η συντόμευση." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Συντόμευση για τις παραπάνω επιλογές" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Σύνταξη: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Καθυστέρηση απόκρυψης" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Όταν είναι ρυθμισμένο στην ελαχιστοποίηση, το διπλό κλικ ελαχιστοποιεί όλα " ++"τα παράθυρα της εφαρμογής." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Λειτουργία του Shift+Click" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "Ανύψωση παραθύρου" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Ελαχιστοποίηση παραθύρου" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Εκκίνηση νέου παραθύρου" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Περιήγηση στα ανοικτά παράθυρα" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "Έξοδος" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "Συμπεριφορά μεσαίου κλικ." ++ ++#: Settings.ui.h:20 ++msgid "Middle-Click action" ++msgstr "Λειτουργία του μεσαίου κλικ" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Συμπεριφορά Shift+Μεσαίο κλικ." ++ ++#: Settings.ui.h:22 ++msgid "Shift+Middle-Click action" ++msgstr "Λειτουργία του Shift+Μεσαίο κλικ" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "Εμφάνιση της μπάρας στην" ++ ++#: Settings.ui.h:24 ++msgid "Show on all monitors." ++msgstr "Εμφάνιση σε όλες τις οθόνες." ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Θέση στην οθόνη" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Κάτω" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Πάνω" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the the current application. " ++"More refined settings are available." ++msgstr "" ++"Απόκρυψη της μπάρας όταν εμποδίζει ένα παράθυρο της τρέχουσας εφαρμογής. Πιο " ++"εξειδικευμένες επιλογές είναι επίσης διαθέσιμες." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Έξυπνη απόκρυψη" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Περιορισμός μεγέθους μπάρας" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Λειτουργιά πάνελ: επέκταση της μπάρας ως τις άκρες της οθόνης" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Περιορισμός μεγέθους εικονιδίων" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "" ++"Σταθερό μέγεθος εικονιδίων: κύλιση για την εμφάνιση περαιτέρω εικονιδίων" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Θέση και μέγεθος" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Εμφάνιση αγαπημένων εφαρμογών" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Εμφάνιση εκτελούμενων εφαρμογών" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Απομόνωση χώρων εργασίας." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Εμφάνιση προεπισκόπησης ανοικτών παραθύρων." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Αν είναι απενεργοποιημένο, αυτές οι ρυθμίσεις είναι προσβάσιμες από το " ++"εργαλείο μικρορυθμίσεων του GNOME ή τον ιστοτόπο επεκτάσεων." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Εμφάνιση εικονιδίου Εφαρμογές" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Μετακίνηση του πλήκτρου εφαρμογών στην αρχή της μπάρας." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Ενεργοποίηση γραφικών κατά την Εμφάνιση Εφαρμογών." ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Εκκινητές" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Ενεργοποίηση του Super+(0-9) ως συντομεύσεις για την ενεργοποίηση εφαρμογών. " ++"Μπορεί επίσης να χρησιμοποιηθεί με το Shift και το Ctrl." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Χρήση συντομεύσεων πληκτρολογίου για την ενεργοποίηση εφαρμογών" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Συμπεριφορά κατά το κλικ σε εικονίδιο τρέχουσας εφαρμογής." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Συμπεριφορά κλικ" ++ ++#: Settings.ui.h:50 ++msgid "Minimize" ++msgstr "Ελαχιστοποίηση" ++ ++#: Settings.ui.h:51 ++msgid "Minimize or overview" ++msgstr "Ελαχιστοποίηση ή επισκόπηση" ++ ++#: Settings.ui.h:52 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Συμπεριφορά κατά την κύλιση σε εικονίδιο τρέχουσας εφαρμογής." ++ ++#: Settings.ui.h:53 ++msgid "Scroll action" ++msgstr "Συμπεριφορά κύλισης" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "Καμία δράση" ++ ++#: Settings.ui.h:55 ++msgid "Switch workspace" ++msgstr "Αλλαγή χώρου εργασίας" ++ ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "Συμπεριφορά" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Μερικές προσαρμογές στοχεύουν στο να ενοποιήσουν την μπάρα με το " ++"προκαθορισμένο θέμα του GNOME. Εναλλακτικά, ειδικές επιλογές μπορούν να " ++"ενεργοποιηθούν παρακάτω." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "Χρήση ενσωματωμένου θέματος" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "Εξοικονόμηση χώρου μειώνοντας τα κενά και τα περιθώρια." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "Σμίκρυνση της μπάρας" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "Εμφανίζει μία τελεία για κάθε παράθυρο της εφαρμογής." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "Εμφάνιση μετρητή παραθύρων" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "Ορισμός χρώματος φόντου της μπάρας." ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "Προσαρμογή του χρώματος της μπάρας" ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "Αλλαγή της αδιαφάνειας του φόντου της μπάρας." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "Προσαρμογή αδιαφάνειας" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "Αδιαφάνεια" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "Εξαναγκασμός ευθείας γωνίας\n" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "Εμφάνιση" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "έκδοση: " ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "" ++"Μετακινεί το ταμπλό και εκτός της προεπισκόπησης μετατρέποντάς το σε μπάρα " ++"εφαρμογών" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "Δημιουργήθηκε από" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "Ιστοσελίδα" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Αυτό πρόγραμμα παρέχεται χωρίς ΑΠΟΛΥΤΩΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ.\n" ++"Για λεπτομέρειες δείτε την Γενική δημόσια άδεια GNU, έκδοση 2 ή νεότερη. " ++ ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "Περί" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Εμφάνιση της μπάρας όταν το ποντίκι πηγαίνει στην άκρη της οθόνης." ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "Αυτόματη απόκρυψη" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Πίεση για εμφάνιση: απαιτείται πίεση για την εμφάνιση της μπάρας" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "Ενεργοποίηση σε κατάσταση πλήρους οθόνης" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Εμφάνιση της μπάρας όταν δεν εμποδίζει τα παράθυρά των εφαρμογών." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "Αποφυγή παραθύρων" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "Όλα τα παράθυρα" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "Μόνο τα παράθυρα της εστιασμένης εφαρμογής" ++ ++#: Settings.ui.h:86 ++msgid "Only maximized windows" ++msgstr "Μόνο μεγιστοποιημένα παράθυρα" ++ ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "Διάρκεια κίνησης γραφικών (s)" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0.000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "Χρονικό όριο εμφάνισης" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "Ελάχιστη πίεση" +diff --git a/extensions/dash-to-dock/po/es.po b/extensions/dash-to-dock/po/es.po +new file mode 100644 +index 00000000..0bdfaa67 +--- /dev/null ++++ b/extensions/dash-to-dock/po/es.po +@@ -0,0 +1,521 @@ ++# Dash to Dock spanish translation. ++# This file is distributed under the same license as the Dash to Dock package. ++# Hugo Olabera , 2015. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2019-03-06 01:57-0600\n" ++"PO-Revision-Date: 2020-03-23 11:25+0100\n" ++"Last-Translator: Adolfo Jayme Barrientos \n" ++"Language-Team: \n" ++"Language: es\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++ ++#: prefs.js:264 ++msgid "Primary monitor" ++msgstr "Monitor principal" ++ ++#: prefs.js:273 prefs.js:280 ++msgid "Secondary monitor " ++msgstr "Monitor secundario" ++ ++#: prefs.js:305 Settings.ui.h:28 ++msgid "Right" ++msgstr "Derecha" ++ ++#: prefs.js:306 Settings.ui.h:25 ++msgid "Left" ++msgstr "Izquierda" ++ ++#: prefs.js:356 ++msgid "Intelligent autohide customization" ++msgstr "Personalización de ocultamiento inteligente" ++ ++#: prefs.js:363 prefs.js:548 prefs.js:604 ++msgid "Reset to defaults" ++msgstr "Restablecer la configuración predeterminada" ++ ++#: prefs.js:541 ++msgid "Show dock and application numbers" ++msgstr "Mostrar dock y números de aplicación" ++ ++#: prefs.js:597 ++msgid "Customize middle-click behavior" ++msgstr "Personalizar comportamiento del botón central" ++ ++#: prefs.js:680 ++msgid "Customize running indicators" ++msgstr "Personalizar indicadores de ejecución" ++ ++#: appIcons.js:790 ++msgid "All Windows" ++msgstr "Todas las ventanas" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1092 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s • Dash to Dock" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Cuando se selecciona minimizar, una pulsación doble minimiza todas las " ++"ventanas de la aplicación." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Acción de Mayús + pulsación" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Elevar ventana" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimizar ventana" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Iniciar una instancia nueva" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Alternar entre ventanas" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimizar o vista de actividades" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Mostrar previsualizaciones de ventanas" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimizar o mostrar previsualizaciones" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Focalizar o mostrar previsualizaciones" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Salir" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Comportamiento del botón central" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Acción del botón central" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Comportamiento de Mayús + botón central" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Acción de Mayús + botón central" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Activar elementos retroiluminados a la Unity 7" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Utilizar el color dominante" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Personalizar estilo del indicador" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Color" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Color del borde" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Grosor del borde" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Mostrar el dock en" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Mostrar en todos los monitores." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Posición en pantalla" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Inferior" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Superior" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Ocultar el dock cuando cubre una ventana de la aplicación activa. Otras " ++"opciones disponibles." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Ocultamiento automático inteligente" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Tamaño máximo del dock" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Modo panel: extender hasta los bordes de la pantalla" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Tamaño máximo de los iconos" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Tamaño fijo de los iconos: desplazarse para mostrar otros" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Posición y tamaño" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Mostrar aplicaciones favoritas" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Mostrar aplicaciones en ejecución" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Aislar los espacios de trabajo." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Aislar los monitores." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Mostrar vista rápida de ventanas." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Si se desactiva, estas opciones estarán disponibles en Retoques de GNOME y " ++"el sitio web de la extensión." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Mostrar el icono Aplicaciones" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Mover el botón de aplicaciones al comienzo del dock" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animar Mostrar aplicaciones" ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Lanzadores" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Activar Súper + (0-9) como atajos para activar aplicaciones. Pueden " ++"emplearse en conjunto con Mayús y Ctrl." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Usar atajos de teclado para activar aplicaciones" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Comportamiento al pulsar el icono de una aplicación en ejecución" ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Acción al pulsar" ++ ++#: Settings.ui.h:50 ++msgid "Minimize" ++msgstr "Minimizar" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Comportamiento al usar la rueda sobre el icono de una aplicación." ++ ++#: Settings.ui.h:52 ++msgid "Scroll action" ++msgstr "Acción al desplazarse" ++ ++#: Settings.ui.h:53 ++msgid "Do nothing" ++msgstr "No hacer nada" ++ ++#: Settings.ui.h:54 ++msgid "Switch workspace" ++msgstr "Cambiar de espacio de trabajo." ++ ++#: Settings.ui.h:55 ++msgid "Behavior" ++msgstr "Comportamiento" ++ ++#: Settings.ui.h:56 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Utilizar el tema predeterminado de GNOME. Alternativamente, pueden elegirse " ++"ciertas opciones más abajo." ++ ++#: Settings.ui.h:57 ++msgid "Use built-in theme" ++msgstr "Utilizar el tema incorporado" ++ ++#: Settings.ui.h:58 ++msgid "Save space reducing padding and border radius." ++msgstr "Reducir los márgenes para ganar espacio" ++ ++#: Settings.ui.h:59 ++msgid "Shrink the dash" ++msgstr "Encoger el tablero" ++ ++#: Settings.ui.h:60 ++msgid "Customize windows counter indicators" ++msgstr "Personalizar los contadores de ventanas" ++ ++#: Settings.ui.h:61 ++msgid "Default" ++msgstr "Predeterminado" ++ ++#: Settings.ui.h:62 ++msgid "Dots" ++msgstr "Puntos" ++ ++#: Settings.ui.h:63 ++msgid "Squares" ++msgstr "Cuadrados" ++ ++#: Settings.ui.h:64 ++msgid "Dashes" ++msgstr "Rayas" ++ ++#: Settings.ui.h:65 ++msgid "Segmented" ++msgstr "Segmentado" ++ ++#: Settings.ui.h:66 ++msgid "Solid" ++msgstr "Sólido" ++ ++#: Settings.ui.h:67 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:68 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:69 ++msgid "Set the background color for the dash." ++msgstr "Escoger el color de fondo del dock." ++ ++#: Settings.ui.h:70 ++msgid "Customize the dash color" ++msgstr "Personalizar el color del dock" ++ ++#: Settings.ui.h:71 ++msgid "Tune the dash background opacity." ++msgstr "Ajustar la opacidad del fondo del dock." ++ ++#: prefs.js:792 Settings.ui.h:72 ++msgid "Customize opacity" ++msgstr "Personalizar opacidad" ++ ++#: Settings.ui.h:73 ++msgid "Fixed" ++msgstr "Fijo" ++ ++#: Settings.ui.h:74 ++msgid "Dynamic" ++msgstr "Dinámico" ++ ++#: Settings.ui.h:75 ++msgid "Opacity" ++msgstr "Opacidad" ++ ++#: Settings.ui.h:76 ++msgid "Force straight corner" ++msgstr "Forzar esquinas rectas" ++ ++#: Settings.ui.h:78 ++msgid "Appearance" ++msgstr "Apariencia" ++ ++#: Settings.ui.h:79 ++msgid "version: " ++msgstr "versión: " ++ ++#: Settings.ui.h:80 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "" ++"Mueve el panel fuera de la vista de actividades trasformándolo en un dock" ++ ++#: Settings.ui.h:81 ++msgid "Created by" ++msgstr "Creado por" ++ ++#: Settings.ui.h:82 ++msgid "Webpage" ++msgstr "Sitio web" ++ ++#: Settings.ui.h:83 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Este programa viene SIN NINGUNA GARANTÍA.\n" ++"Consulte la Licencia Pública General de GNU, versión 2 o posterior para obtener " ++"más detalles." ++ ++#: Settings.ui.h:85 ++msgid "About" ++msgstr "Acerca de" ++ ++#: Settings.ui.h:86 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Personalizar los valores mínimo y máximo de opacidad" ++ ++#: Settings.ui.h:87 ++msgid "Minimum opacity" ++msgstr "Opacidad mínima" ++ ++#: Settings.ui.h:88 ++msgid "Maximum opacity" ++msgstr "Opacidad máxima" ++ ++#: Settings.ui.h:89 ++msgid "Number overlay" ++msgstr "Número sobrepuesto" ++ ++#: Settings.ui.h:90 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Al usar atajos, mostrar momentáneamente el número de aplicación sobre los " ++"iconos." ++ ++#: Settings.ui.h:91 ++msgid "Show the dock if it is hidden" ++msgstr "Mostrar el dock si está oculto" ++ ++#: Settings.ui.h:92 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Si se activa el ocultamiento automático, el dock aparecerá momentáneamente " ++"al usar el atajo." ++ ++#: Settings.ui.h:93 ++msgid "Shortcut for the options above" ++msgstr "Atajo para las opciones anteriores" ++ ++#: Settings.ui.h:94 ++msgid "Syntax: , , , " ++msgstr "Sintaxis: , , , " ++ ++#: Settings.ui.h:95 ++msgid "Hide timeout (s)" ++msgstr "Tiempo de ocultación (s)" ++ ++#: Settings.ui.h:96 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Mostrar el dock al mover el puntero al borde de la pantalla" ++ ++#: Settings.ui.h:97 ++msgid "Autohide" ++msgstr "Ocultar automáticamente" ++ ++#: Settings.ui.h:98 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Empujar para mostrar: requiere hacer presión para mostrar el dock" ++ ++#: Settings.ui.h:99 ++msgid "Enable in fullscreen mode" ++msgstr "Activar en modo de pantalla completa" ++ ++#: Settings.ui.h:100 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Mostrar el dock cuando no cubra otras ventanas de aplicaciones." ++ ++#: Settings.ui.h:101 ++msgid "Dodge windows" ++msgstr "Esquivar las ventanas" ++ ++#: Settings.ui.h:102 ++msgid "All windows" ++msgstr "Todas las ventanas" ++ ++#: Settings.ui.h:103 ++msgid "Only focused application's windows" ++msgstr "Solo las ventanas de la aplicación activa" ++ ++#: Settings.ui.h:104 ++msgid "Only maximized windows" ++msgstr "Solo las ventanas maximizadas" ++ ++#: Settings.ui.h:105 ++msgid "Animation duration (s)" ++msgstr "Duración de la animación (s)" ++ ++#: Settings.ui.h:106 ++msgid "Show timeout (s)" ++msgstr "Tiempo de aparición (s)" ++ ++#: Settings.ui.h:107 ++msgid "Pressure threshold" ++msgstr "Nivel de presión" ++ ++#: Settings.ui.h:108 ++msgid "Show trash can" ++msgstr "Mostrar el icono Papelera" ++ ++#: Settings.ui.h:109 ++msgid "Show mounted volumes and devices" ++msgstr "Mostrar los dispositivos montados" +diff --git a/extensions/dash-to-dock/po/eu.po b/extensions/dash-to-dock/po/eu.po +new file mode 100644 +index 00000000..fa780b1b +--- /dev/null ++++ b/extensions/dash-to-dock/po/eu.po +@@ -0,0 +1,543 @@ ++# Dash to Dock Basque translation. ++# This file is distributed under the same license as the Dash to Dock package. ++# Ibai Oihanguren Sala , 2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-03-22 23:54+0100\n" ++"PO-Revision-Date: 2020-03-22 23:54+0100\n" ++"Last-Translator: Ibai Oihanguren Sala \n" ++"Language-Team: \n" ++"Language: eu\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "Monitore nagusia" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "Bigarren monitorea " ++ ++#: prefs.js:309 Settings.ui.h:29 ++msgid "Right" ++msgstr "Eskuinean" ++ ++#: prefs.js:310 Settings.ui.h:26 ++msgid "Left" ++msgstr "Ezkerrean" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "Ezkutatze adimentsuaren pertsonalizazioa" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "Berrezarri balio lehenetsiak" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "Erakutsi atrakea eta aplikazioen zenbakiak" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "Pertsonalizatu erdiko klikaren portaera" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "Pertsonalizatu martxan egotearen adierazleak" ++ ++#: prefs.js:804 Settings.ui.h:75 ++msgid "Customize opacity" ++msgstr "Pertsonalizatu opakutasuna" ++ ++#: appIcons.js:792 ++msgid "All Windows" ++msgstr "Leiho guztiak" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1119 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %s" ++ ++#: locations.js:65 ++msgid "Trash" ++msgstr "Zakarrontzia" ++ ++#: locations.js:74 ++msgid "Empty Trash" ++msgstr "Hustu zakarrontzia" ++ ++#: locations.js:189 ++msgid "Mount" ++msgstr "Muntatu" ++ ++#: locations.js:232 ++msgid "Eject" ++msgstr "Egotzi" ++ ++#: locations.js:237 ++msgid "Unmount" ++msgstr "Desmuntatu" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Minimizatzea hautatuz gero, klik bikoitzak aplikazioaren leiho guztiak " ++"minimizatzen ditu." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Maius+Klik ekintza" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Goratu leihoa" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimizatu leihoa" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Abiarazi instantzia berria" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Txandakatu leihoak" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimizatu edo ikuspegi orokorra" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Erakutsi leihoen aurrebistak" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimizatu edo erakutsi aurrebistak" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Fokuratu edo erakutsi aurrebistak" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Irten" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Erdiko klikaren portaera" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Erdiko klikaren ekintza" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Maius+Erdiko klikaren portaera" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Maius+Erdiko klikaren ekintza" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Gaitu Unity7 erako atzeko argidun elementu distiratsuak" ++ ++#: Settings.ui.h:17 ++msgid "Apply glossy effect." ++msgstr "Aplikatu efektu distiratsua." ++ ++#: Settings.ui.h:18 ++msgid "Use dominant color" ++msgstr "Erabili kolore nagusia" ++ ++#: Settings.ui.h:19 ++msgid "Customize indicator style" ++msgstr "Pertsonalizatu adierazleen estiloa" ++ ++#: Settings.ui.h:20 ++msgid "Color" ++msgstr "Kolorea" ++ ++#: Settings.ui.h:21 ++msgid "Border color" ++msgstr "Ertzaren kolorea" ++ ++#: Settings.ui.h:22 ++msgid "Border width" ++msgstr "Ertzaren zabalera" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "Erakutsi atrakea hemen" ++ ++#: Settings.ui.h:24 ++msgid "Show on all monitors." ++msgstr "Erakutsi monitore guztietan." ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Pantailako posizioa" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Behean" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Goian" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Ezkutatu atrakea uneko aplikazioaren leiho bat eragozten duenean. Ezarpen " ++"zehatzagoak erabilgarri daude." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Ezkutatze adimentsua" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Atrakearen tamaina-muga" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Panel modua: hedatu pantailaren ertzetara" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Ikonoen tamaina-muga" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Ikono-tamaina finkoa: korritu beste ikonoak erakusteko" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Posizioa eta tamaina" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Erakutsi gogoko aplikazioak" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Erakutsi martxan dauden aplikazioak" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Isolatu laneako areak." ++ ++#: Settings.ui.h:40 ++msgid "Isolate monitors." ++msgstr "Isolatu monitoreak." ++ ++#: Settings.ui.h:41 ++msgid "Show open windows previews." ++msgstr "Erakutsi irekitako leihoen aurrebistak." ++ ++#: Settings.ui.h:42 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Desgaituz gero, ezarpen hauek gnome-tweak-tool aplikazioan edo hedapenen " ++"webgunean daude erabilgarri." ++ ++#: Settings.ui.h:43 ++msgid "Show Applications icon" ++msgstr "Erakutsi Aplikazioak ikonoa" ++ ++#: Settings.ui.h:44 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Eraman aplikazioen botoia atrakearen hasierara." ++ ++#: Settings.ui.h:45 ++msgid "Animate Show Applications." ++msgstr "Animatu Erakutsi aplikazioak ekintza." ++ ++#: Settings.ui.h:46 ++msgid "Show trash can" ++msgstr "Erakutsi zakarrontzia" ++ ++#: Settings.ui.h:47 ++msgid "Show mounted volumes and devices" ++msgstr "Erakutsi muntatutako bolumen eta gailuak" ++ ++#: Settings.ui.h:48 ++msgid "Launchers" ++msgstr "Abiarazleak" ++ ++#: Settings.ui.h:49 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Gaitu Super+(0-9) aplikazioak aktibatzeko laster-tekla gisa. Maius eta Ktrl " ++"teklekin batera ere erabil daiteke." ++ ++#: Settings.ui.h:50 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Erabili laster-teklak aplikazioak aktibatzeko" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Martxan dagoen aplikazio baten ikonoak klik egitean duen portaera." ++ ++#: Settings.ui.h:52 ++msgid "Click action" ++msgstr "Klik ekintza" ++ ++#: Settings.ui.h:53 ++msgid "Minimize" ++msgstr "Minimizatu" ++ ++#: Settings.ui.h:54 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Aplikazio baten ikonoaren gainean sagua korritzean duen portaera." ++ ++#: Settings.ui.h:55 ++msgid "Scroll action" ++msgstr "Korritze-ekintza" ++ ++#: Settings.ui.h:56 ++msgid "Do nothing" ++msgstr "Ez egin ezer" ++ ++#: Settings.ui.h:57 ++msgid "Switch workspace" ++msgstr "Aldatu laneko areaz" ++ ++#: Settings.ui.h:58 ++msgid "Behavior" ++msgstr "Portaera" ++ ++#: Settings.ui.h:59 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Atrakea GNOMEren gai lehenetsiarekin integratzeko ezarritako pertsonalizazio " ++"txikiak. Honen ordez aukera zehatzak gaitu daitezke jarraian." ++ ++#: Settings.ui.h:60 ++msgid "Use built-in theme" ++msgstr "Erabili integrazio gaia" ++ ++#: Settings.ui.h:61 ++msgid "Save space reducing padding and border radius." ++msgstr "Hartu leku gutxiago betegarria eta ertzen erradioa txikituz." ++ ++#: Settings.ui.h:62 ++msgid "Shrink the dash" ++msgstr "Txikiagotu abiarazle-panela" ++ ++#: Settings.ui.h:63 ++msgid "Customize windows counter indicators" ++msgstr "Pertsonalizatu leiho kopuruen adierazleak" ++ ++#: Settings.ui.h:64 ++msgid "Default" ++msgstr "Lehenetsia" ++ ++#: Settings.ui.h:65 ++msgid "Dots" ++msgstr "Puntuak" ++ ++#: Settings.ui.h:66 ++msgid "Squares" ++msgstr "Laukiak" ++ ++#: Settings.ui.h:67 ++msgid "Dashes" ++msgstr "Marrak" ++ ++#: Settings.ui.h:68 ++msgid "Segmented" ++msgstr "Zatikatua" ++ ++#: Settings.ui.h:69 ++msgid "Solid" ++msgstr "Solidoa" ++ ++#: Settings.ui.h:70 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:71 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:72 ++msgid "Set the background color for the dash." ++msgstr "Ezarri abiarazle-panelaren atzeko planoko kolorea" ++ ++#: Settings.ui.h:73 ++msgid "Customize the dash color" ++msgstr "Personalizatu abiarazle-panelaren kolorea" ++ ++#: Settings.ui.h:74 ++msgid "Tune the dash background opacity." ++msgstr "Doitu abiarazle-panelaren atzeko planoaren opakutasuna." ++ ++#: Settings.ui.h:76 ++msgid "Fixed" ++msgstr "Finkoa" ++ ++#: Settings.ui.h:77 ++msgid "Dynamic" ++msgstr "Dinamikoa" ++ ++#: Settings.ui.h:78 ++msgid "Opacity" ++msgstr "Opakutasuna" ++ ++#: Settings.ui.h:79 ++msgid "Force straight corner\n" ++msgstr "Behartu erpin zuzena\n" ++ ++#: Settings.ui.h:80 ++msgid "Appearance" ++msgstr "Itxura" ++ ++#: Settings.ui.h:81 ++msgid "version: " ++msgstr "bertsioa: " ++ ++#: Settings.ui.h:82 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Abiarazle-panela ikuspegi orokorretik ateratzen du, atrake bihurtuz" ++ ++#: Settings.ui.h:83 ++msgid "Created by" ++msgstr "Sortzaileak" ++ ++#: Settings.ui.h:84 ++msgid "Webpage" ++msgstr "Webgunea" ++ ++#: Settings.ui.h:85 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for " ++"details." ++msgstr "" ++"Programa honek ez du inolako bermerik.\n" ++"Xehetasun gehiagorako, ikusi GNUren Lizentzia Publiko Orokorra, 2. bertsioa edo " ++"berriagoa" ++ ++#: Settings.ui.h:87 ++msgid "About" ++msgstr "Honi buruz" ++ ++#: Settings.ui.h:88 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Pertsonalizatu opakutasun minimo eta maximoa" ++ ++#: Settings.ui.h:89 ++msgid "Minimum opacity" ++msgstr "Opakutasun minimoa" ++ ++#: Settings.ui.h:90 ++msgid "Maximum opacity" ++msgstr "Opakutasun maximoa" ++ ++#: Settings.ui.h:91 ++msgid "Number overlay" ++msgstr "Gainjarritako zenbakiak" ++ ++#: Settings.ui.h:92 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Erakutsi une batez laster-teklei dagozkien aplikazio-zenbakiak ikonoen " ++"gainean." ++ ++#: Settings.ui.h:93 ++msgid "Show the dock if it is hidden" ++msgstr "Erakutsi atrakea ezkutatua badago" ++ ++#: Settings.ui.h:94 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Ezkutatze automatikoa erabiltzean, laster-tekla sakatuz atrakea une baterako " ++"azalduko da." ++ ++#: Settings.ui.h:95 ++msgid "Shortcut for the options above" ++msgstr "Goiko aukeretarako laster-teklak" ++ ++#: Settings.ui.h:96 ++msgid "Syntax: , , , " ++msgstr "Sintaxia: , , , " ++ ++#: Settings.ui.h:97 ++msgid "Hide timeout (s)" ++msgstr "Ezkutatzeko denbora-muga (s)" ++ ++#: Settings.ui.h:98 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Erakutsi atrakea sagua pantailaren ertzera eramatean." ++ ++#: Settings.ui.h:99 ++msgid "Autohide" ++msgstr "Ezkutatze automatikoa" ++ ++#: Settings.ui.h:100 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Bultzatu erakusteko: presio pixka bat egin behar da atrakea erakusteko" ++ ++#: Settings.ui.h:101 ++msgid "Enable in fullscreen mode" ++msgstr "Gaitu pantaila osoko moduan" ++ ++#: Settings.ui.h:102 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Erakutsi atrakea aplikazioaren leihoak eragozten ez dituenean." ++ ++#: Settings.ui.h:103 ++msgid "Dodge windows" ++msgstr "Saihestu leihoak" ++ ++#: Settings.ui.h:104 ++msgid "All windows" ++msgstr "Leiho guztiak" ++ ++#: Settings.ui.h:105 ++msgid "Only focused application's windows" ++msgstr "Fokuratutako aplikazioen leihoetan soilik" ++ ++#: Settings.ui.h:106 ++msgid "Only maximized windows" ++msgstr "Maximizatutako leihoetan soilik" ++ ++#: Settings.ui.h:107 ++msgid "Animation duration (s)" ++msgstr "Animazioaren iraupena (s)" ++ ++#: Settings.ui.h:108 ++msgid "Show timeout (s)" ++msgstr "Erakusteko denbora-muga (s)" ++ ++#: Settings.ui.h:109 ++msgid "Pressure threshold" ++msgstr "Presio-atalasea" +diff --git a/extensions/dash-to-dock/po/fr.po b/extensions/dash-to-dock/po/fr.po +new file mode 100644 +index 00000000..c5a13e8a +--- /dev/null ++++ b/extensions/dash-to-dock/po/fr.po +@@ -0,0 +1,529 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2019-12-07 16:40+0900\n" ++"PO-Revision-Date: 2019-12-07 16:52+0900\n" ++"Last-Translator: Julien Humbert \n" ++"Language-Team: Jean-Baptiste Le Cz \n" ++"Language: fr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.2.4\n" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "Moniteur principal" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "Moniteur secondaire " ++ ++#: prefs.js:309 Settings.ui.h:28 ++msgid "Right" ++msgstr "Droite" ++ ++#: prefs.js:310 Settings.ui.h:25 ++msgid "Left" ++msgstr "Gauche" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "Personnalisation du masquage automatique" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "Restaurer la configuration par défaut" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "Afficher le dock et le numéro d’application" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "Personnaliser le comportement du clic milieu" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "Régler les indicateurs de fenêtres" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Régler l’opacité du dock" ++ ++#: appIcons.js:810 ++msgid "All Windows" ++msgstr "Toutes les fenêtres" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1127 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %s" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Quand réglé sur Minimiser, double-cliquer minimise toutes les fenêtres de " ++"l’application." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Action Maj+Clic" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Faire apparaître la fenêtre" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimiser la fenêtre" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Lancer une nouvelle fenêtre" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Cycler sur les fenêtres" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimiser ou lancer l’exposé" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Afficher des aperçus de fenêtres" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimiser ou afficher l’aperçu des fenêtres" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Activer ou afficher l’aperçu des fenêtres" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Quitter" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Comportement pour le clic milieu." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Action du clic milieu" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Comportement pour Maj+Clic milieu." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Action de Maj+Clic milieu" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Activer un fond brillant à la Unity 7" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Utiliser la couleur dominante" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Régler le style des indicateurs" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Couleur" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Couleur de la bordure" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Épaisseur de la bordure" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Afficher le dock sur le" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Afficher sur tous les écrans." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Position sur l’écran" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Bas" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Haut" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Cache le dock quand il gêne l’application principale. D’autres paramètres " ++"plus spécifiques sont disponibles." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Masquage intelligent" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Taille maximum du dock" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Mode barre : étendre aux bords de l’écran" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Taille maximum des icônes" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Taille des icônes fixe : faire défiler pour voir les autres icônes" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Position et taille" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Afficher les applications favorites" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Afficher les applications en cours" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Isoler les espaces de travail." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Isoler les moniteurs." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Afficher des aperçus de fenêtres." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Si désactivés, ces paramètres sont accessibles via gnome-tweak-tool ou le " ++"site d’extension GNOME." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Afficher le raccourci Afficher les Applications" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Placer le bouton des applications en première position." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animer le raccourci Afficher les Applications." ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Afficher la corbeille" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Afficher les appareils et volumes montés" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Lanceurs" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Activer Super+(0-9) comme raccourcis pour activer les applications. On peut " ++"l’utiliser aussi avec Maj et Ctrl." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Utiliser des raccourcis clavier pour activer les applications" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Comportement du clic sur l’icône d’une application ouverte." ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Action du clic" ++ ++#: Settings.ui.h:52 ++msgid "Minimize" ++msgstr "Minimiser la fenêtre" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Comportement lors du défilement sur l’icône d’une application." ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Action du défilement" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Ne rien faire" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Changer d’espace de travail" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Comportement" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Assortir le dock avec le thème par défaut. Sinon, vous pouvez personnaliser " ++"quelques paramètres ci-dessous." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Utiliser le thème par défaut" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "Réduire la taille des marges pour gagner de la place." ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Réduire les marges" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "Personnaliser l’indicateur du compteur de fenêtres" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "Défaut" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Points" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Carrés" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Tirets" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Segments" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Solides" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "Métro" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Choisir la couleur de fond du dock." ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Changer la couleur du dock" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Régler l’opacité en fond du dock." ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Fixe" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Dynamique" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Opacité" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner\n" ++msgstr "Forcer des coins droits\n" ++ ++#: Settings.ui.h:80 ++msgid "Appearance" ++msgstr "Apparence" ++ ++#: Settings.ui.h:81 ++msgid "version: " ++msgstr "Version : " ++ ++#: Settings.ui.h:82 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Place le dash hors de l’aperçu des fenêtres, le transformant en dock" ++ ++#: Settings.ui.h:83 ++msgid "Created by" ++msgstr "Conçu par" ++ ++#: Settings.ui.h:84 ++msgid "Webpage" ++msgstr "Site web" ++ ++#: Settings.ui.h:85 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Ce programme est distribué SANS AUCUNE GARANTIE.\n" ++"Consultez la Licence Générale Publique GNU version 2 ou plus récente pour plus " ++"d’informations." ++ ++#: Settings.ui.h:87 ++msgid "About" ++msgstr "À propos" ++ ++#: Settings.ui.h:88 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Personnaliser les valeurs minimum et maximum de l’opacité" ++ ++#: Settings.ui.h:89 ++msgid "Minimum opacity" ++msgstr "Opacité minimum" ++ ++#: Settings.ui.h:90 ++msgid "Maximum opacity" ++msgstr "Opacité maximum" ++ ++#: Settings.ui.h:91 ++msgid "Number overlay" ++msgstr "Numéro d’application" ++ ++#: Settings.ui.h:92 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Afficher temporairement les numéros d’application sur les icônes, " ++"correspondant au raccourci clavier." ++ ++#: Settings.ui.h:93 ++msgid "Show the dock if it is hidden" ++msgstr "Afficher le dock s’il est caché" ++ ++#: Settings.ui.h:94 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Si le masquage automatique est actif, le dock apparaîtra temporairement lors " ++"de l’utilisation du raccourci." ++ ++#: Settings.ui.h:95 ++msgid "Shortcut for the options above" ++msgstr "Raccourci pour les options dessus" ++ ++#: Settings.ui.h:96 ++msgid "Syntax: , , , " ++msgstr "Syntaxe : , , , " ++ ++#: Settings.ui.h:97 ++msgid "Hide timeout (s)" ++msgstr "Délai de masquage (s)" ++ ++#: Settings.ui.h:98 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Afficher le dock en survolant le bord de l’écran." ++ ++#: Settings.ui.h:99 ++msgid "Autohide" ++msgstr "Masquage automatique" ++ ++#: Settings.ui.h:100 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Pousser pour Afficher : requiert une pression pour afficher le dock" ++ ++#: Settings.ui.h:101 ++msgid "Enable in fullscreen mode" ++msgstr "Activer en mode plein-écran" ++ ++#: Settings.ui.h:102 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Afficher le dock quand il ne gêne pas les fenêtres." ++ ++#: Settings.ui.h:103 ++msgid "Dodge windows" ++msgstr "Masquage automatique intelligent" ++ ++#: Settings.ui.h:104 ++msgid "All windows" ++msgstr "Toutes les fenêtres" ++ ++#: Settings.ui.h:105 ++msgid "Only focused application's windows" ++msgstr "Seulement la fenêtre de l’application active" ++ ++#: Settings.ui.h:106 ++msgid "Only maximized windows" ++msgstr "Seulement les fenêtres maximisées" ++ ++#: Settings.ui.h:107 ++msgid "Animation duration (s)" ++msgstr "Durée de l’animation (s)" ++ ++#: Settings.ui.h:108 ++msgid "Show timeout (s)" ++msgstr "Délai d’apparition (s)" ++ ++#: Settings.ui.h:109 ++msgid "Pressure threshold" ++msgstr "Seuil de pression" ++ ++#~ msgid "Adaptive" ++#~ msgstr "Adaptatif" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "Afficher un point pour chaque fenêtre ouverte de l’application." ++ ++#~ msgid "0.000" ++#~ msgstr "0.000" +diff --git a/extensions/dash-to-dock/po/gl.po b/extensions/dash-to-dock/po/gl.po +new file mode 100644 +index 00000000..15f8122f +--- /dev/null ++++ b/extensions/dash-to-dock/po/gl.po +@@ -0,0 +1,438 @@ ++# Dash to Dock galician translation. ++# This file is distributed under the same license as the Dash to Dock package. ++# Xosé M. Lamas , 2018. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2018-03-30 11:27-0400\n" ++"PO-Revision-Date: 2018-03-30 16:42-0500\n" ++"Last-Translator: Xosé M. Lamas \n" ++"Language-Team: \n" ++"Language: gl\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.0.3\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++ ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Monitor principal" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Monitor secundario" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "Dereita" ++ ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "Esquerda" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Personalización de agochamento intelixente" ++ ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "Restablecer aos valores por omisión" ++ ++#: prefs.js:386 ++msgid "Show dock and application numbers" ++msgstr "Mostrar dock e números do aplicativo" ++ ++#: prefs.js:443 ++msgid "Customize middle-click behavior" ++msgstr "Personalizar comportamento do botón central" ++ ++#: prefs.js:514 ++msgid "Customize running indicators" ++msgstr "Personalizar indicadores en execución" ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "Todas as ventás" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Personalizar estilo do indicador" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Cor" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Cor do borde" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Ancho do borde" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Número na vista extendida" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Mostrar brevemente o número de aplicativo sobre a icona que corresponda " ++"ao atallo." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Mostrar o dock si está agochado" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Si se activa o agochamento automático, o dock aparecerá brevemente " ++"ao utilizar o atallo." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Atallo para os axustes de arriba" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Sintaxe: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Tempo en agocharse (s)" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Cando se establece minimizar, facendo duplo click minimiza todas as ventás " ++"do aplicativo." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Acción de Maiús + pulsación" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "Elevar ventá" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Minimizar ventá" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Iniciar unha nova instancia" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Alternar entre ventás" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "Saír" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "Comportamento do botón central" ++ ++#: Settings.ui.h:20 ++msgid "Middle-Click action" ++msgstr "Acción do botón central" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Comportamento de Maiús + botón central" ++ ++#: Settings.ui.h:22 ++msgid "Shift+Middle-Click action" ++msgstr "Acción de Maiús + botón central" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "Mostrar o dock en" ++ ++#: Settings.ui.h:24 ++msgid "Show on all monitors." ++msgstr "Mostrar en todos os monitores." ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Posición na pantalla" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Inferior" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Superior" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Agochar o dock cando obstrúe a ventá do aplicativo actual. Dispoñibles " ++"máis opcións." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Agochamento automático intelixente" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Tamaño máximo do dock" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Modo panel: extender ate os bordes da pantalla" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Tamaño máximo das iconas" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Tamaño fixo das iconas: desprazarse para mostrar outros" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Posición e tamaño" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Mostrar aplicativos favoritos" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Mostrar aplicativos en execución" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Illar os espazos de traballo." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Mostrar vista rápida de ventás." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Si está deshabilitado, estas opcions están dispoñibles desde gnome-tweak-tool " ++"ou desde o sitio web de extensións." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Mostrar a icona Aplicativos" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Mover o botón de aplicativos ao principio do dock" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animar Mostrar aplicativos" ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Lanzadores" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Habilitar Súper+(0-9) como atallos para activar aplicativos. Tamén puede " ++"ser utilizado xunto con Maiús e Ctrl." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Usar atallos de teclado para activar aplicativos" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Comportamiento ao pulsar na icona de un aplicativo en execución." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Acción de pulsación" ++ ++#: Settings.ui.h:50 ++msgid "Minimize" ++msgstr "Minimizar" ++ ++#: Settings.ui.h:51 ++msgid "Minimize or overview" ++msgstr "Minimizar ou vista de actividades" ++ ++#: Settings.ui.h:52 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Comportamiento ao utilizar a roda sobre a icona de un aplicativo." ++ ++#: Settings.ui.h:53 ++msgid "Scroll action" ++msgstr "Acción de desprazamento" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "Non facer nada" ++ ++#: Settings.ui.h:55 ++msgid "Switch workspace" ++msgstr "Cambiar de espazo de traballo." ++ ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "Comportamento" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Utilizar o decorado predeterminado de GNOME. De xeito alternativo, poden habilitarse " ++"certos axustes aquí abaixo." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "Utilizar o decorado incorporado" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "Reducir as marxes para gañar espazo." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "Comprimir o taboleiro" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "Mostrar un punto por cada ventá do aplicativo." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "Mostrar contador de ventás" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "Escoller a cor de fondo do taboleiro." ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "Personalizar a cor do dock" ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "Axustar a opacidade do fondo." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "Personalizar opacidade" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "Opacidade" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "Forzar esquinas rectas\n" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "Aparencia" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "versión: " ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "" ++"Move o panel da vista de actividades transformándoo nun dock" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "Creado por" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "Sitio web" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Este programa ven SIN GARANTÍA ALGUNHA.\n" ++"Consulte a Licenza Pública Xeral de GNU, versión 2 ou posterior para obter " ++"máis detalles." ++ ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "Sobre o" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Mostrar o dock ao pasar o punteiro sobre o borde da pantalla." ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "Agochar automáticamente" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Empurrar para mostrasr: require facer presión para mostrar o dock" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "Activar en modo de pantalla completa" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Mostrar o dock cando non cubra outras ventás de aplicativos." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "Evitar as ventás" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "Todas as ventás" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "Só as ventás do aplicativo activo" ++ ++#: Settings.ui.h:86 ++msgid "Only maximized windows" ++msgstr "Só as ventás maximizadas" ++ ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "Duración da animación (s)" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0.000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "Tempo de aparición" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "Límite de presión" +diff --git a/extensions/dash-to-dock/po/hu.po b/extensions/dash-to-dock/po/hu.po +new file mode 100644 +index 00000000..36235281 +--- /dev/null ++++ b/extensions/dash-to-dock/po/hu.po +@@ -0,0 +1,440 @@ ++# Hungarian translation for dash-to-dock. ++# Copyright (C) 2017 Free Software Foundation, Inc. ++# This file is distributed under the same license as the dash-to-dock package. ++# ++# Balázs Úr , 2017. ++msgid "" ++msgstr "" ++"Project-Id-Version: dash-to-dock master\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-06-04 12:35+0100\n" ++"PO-Revision-Date: 2017-04-10 22:02+0100\n" ++"Last-Translator: Balázs Úr \n" ++"Language-Team: Hungarian \n" ++"Language: hu\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Lokalize 2.0\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++ ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Elsődleges kijelző" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Másodlagos kijelző" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "Jobb" ++ ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "Bal" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Intelligens automatikus elrejtés személyre szabása" ++ ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "Visszaállítás az alapértékekre" ++ ++#: prefs.js:386 ++msgid "Show dock and application numbers" ++msgstr "A dokk és az alkalmazás számainak megjelenítése" ++ ++#: prefs.js:443 ++msgid "Customize middle-click behavior" ++msgstr "Középső kattintás viselkedésének személyre szabása" ++ ++#: prefs.js:514 ++msgid "Customize running indicators" ++msgstr "Futásjelzők személyre szabása" ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "Összes Ablak" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Jelző stílusának személyre szabása" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Szín" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Szegély színe" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Szegély szélessége" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Szám rátét" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Az alkalmazás számainak átmeneti megjelenítése az ikonok fölött a " ++"gyorsbillentyűnek megfelelően." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "A dokk megjelenítése, ha el van rejtve" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Az automatikus elrejtés használatakor a dokk meg fog jelenni egy rövid ideig " ++"a gyorsbillentyű megnyomásakor." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Gyorsbillentyűk a fenti beállításokhoz" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Szintaxis: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Elrejtési időkorlát (mp)" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Ha minimalizálásra van állítva, akkor a dupla kattintás az alkalmazás összes " ++"ablakát minimalizálja." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Shift + kattintás művelet" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "Ablak előre hozása" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Ablak minimalizálása" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Új példány indítása" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Ablakok körbeléptetése" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "Kilépés" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "A középső kattintás viselkedése." ++ ++#: Settings.ui.h:20 ++msgid "Middle-Click action" ++msgstr "Középső kattintás művelet" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "A Shift + középső kattintás viselkedése." ++ ++#: Settings.ui.h:22 ++msgid "Shift+Middle-Click action" ++msgstr "Shift + középső kattintás művelet" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "A dokk megjelenítése" ++ ++#: Settings.ui.h:24 ++#, fuzzy ++msgid "Show on all monitors." ++msgstr "Másodlagos kijelző" ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Elhelyezkedés a képernyőn" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Lent" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Fent" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"A dokk elrejtése, amikor az aktuális alkalmazás ablakát akadályozza. További " ++"finombeállítások is elérhetők." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Intelligens automatikus elrejtés" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Dokk méretkorlátja" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Panel mód: kiterjesztés a képernyő széléig" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Ikon méretkorlátja" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Rögzített ikonméret: görgetés egyéb ikonok felfedéséhez" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Elhelyezkedés és méret" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Kedvenc alkalmazások megjelenítése" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Futó alkalmazások megjelenítése" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Munkaterületek elkülönítése." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Nyitott ablakok előnézeteinek megjelenítése." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Ha le van tiltva, akkor ezek a beállítások elérhetők a GNOME finomhangoló " ++"eszközből vagy a kiegészítők weboldaláról." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Alkalmazások ikon megjelenítése" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Az alkalmazások gombjának áthelyezése a dokk elejére." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Alkalmazások megjelenítése animálása." ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Indítok" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Szuper + (0-9) engedélyezése gyorsbillentyűként az alkalmazások " ++"aktiválásához. Használható a Shift és a Ctrl billentyűkkel együtt is." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Gyorsbillentyűk használata az alkalmazások aktiválásához" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Viselkedés egy futó alkalmazás ikonjára való kattintáskor." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Kattintás művelet" ++ ++#: Settings.ui.h:50 ++msgid "Minimize" ++msgstr "Minimalizálás" ++ ++#: Settings.ui.h:51 ++#, fuzzy ++msgid "Minimize or overview" ++msgstr "Ablak minimalizálása" ++ ++#: Settings.ui.h:52 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Viselkedés egy alkalmazás ikonján való görgetéskor." ++ ++#: Settings.ui.h:53 ++msgid "Scroll action" ++msgstr "Görgetési művelet" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "Ne tegyen semmit" ++ ++#: Settings.ui.h:55 ++msgid "Switch workspace" ++msgstr "Munkaterület váltása" ++ ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "Viselkedés" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Néhány személyre szabás célja, hogy integrálja a dokkot az alapértelmezett " ++"GNOME témába. Alternatív esetben bizonyos beállítások engedélyezhetők lent." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "Beépített téma használata" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "Helymegtakarítás a kitöltés és a szegély sugarának csökkentésével." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "A dash zsugorítása" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "Egy pont megjelenítése az alkalmazás minden ablakánál." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "Ablakszámlálók jelzőinek megjelenítése" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "A dash háttérszínének beállítása." ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "A dash színének személyre szabása" ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "A dash háttér átlátszatlanságának finomhangolása." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "Átlátszatlanság személyre szabása" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "Átlátszatlanság" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "Egyenes sarok kényszerítése\n" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "Megjelenés" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "verzió: " ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Áthelyezi a dasht az áttekintőn kívülre egy dokká alakítva azt" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "Létrehozta" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "Weboldal" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Ehhez a programhoz SEMMILYEN GARANCIA NEM JÁR.\n" ++"Nézze meg a GNU General Public License 2. vagy későbbi verzióját a részletekért." ++ ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "Névjegy" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "A dokk megjelenítése a képernyő szélére történő egér rámutatással." ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "Automatikus elrejtés" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Nyomás a megjelenítéshez: nyomást igényel a dokk megjelenítéséhez" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "Engedélyezés teljes képernyős módban" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "A dokk megjelenítése, amikor nem akadályozza az alkalmazás ablakait." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "Ablakok kikerülése" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "Összes ablak" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "Csak a kijelölt alkalmazások ablakai" ++ ++#: Settings.ui.h:86 ++msgid "Only maximized windows" ++msgstr "Csak a maximalizált ablakok" ++ ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "Animáció időtartama (mp)" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0,000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "Megjelenítési időkorlát (mp)" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "Nyomás küszöbszintje" +diff --git a/extensions/dash-to-dock/po/id.po b/extensions/dash-to-dock/po/id.po +new file mode 100644 +index 00000000..ac09c410 +--- /dev/null ++++ b/extensions/dash-to-dock/po/id.po +@@ -0,0 +1,450 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash-to-Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-06-04 12:35+0100\n" ++"PO-Revision-Date: 2017-10-02 11:25+0700\n" ++"Last-Translator: Mahyuddin \n" ++"Language-Team: Mahyuddin \n" ++"Language: id\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++"X-Generator: Poedit 1.8.11\n" ++ ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Monitor primer" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Monitor sekunder" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "Kanan" ++ ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "Kiri" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Kustomisasi autohide yang cerdas" ++ ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "Setel ulang ke bawaan" ++ ++#: prefs.js:386 ++msgid "Show dock and application numbers" ++msgstr "Tampilkan dock dan nomor aplikasi" ++ ++#: prefs.js:443 ++msgid "Customize middle-click behavior" ++msgstr "Sesuaikan perilaku klik menengah" ++ ++#: prefs.js:514 ++msgid "Customize running indicators" ++msgstr "Sesuaikan indikator yang sedang berjalan" ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "Semua Jendela" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Sesuaikan gaya indikator" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Warna" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Warna border" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Lebar border" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Nomor overlay" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Untuk sementara menunjukkan nomor aplikasi di atas ikon, sesuai dengan " ++"pintasan." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Tunjukkan dock jika tersembunyi" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Jika menggunakan autohide, dock akan muncul dalam waktu singkat saat memicu " ++"pintasan." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Pintasan untuk opsi di atas" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Sintaks: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Sembunyikan batas waktu (s)" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Bila disetel untuk meminimalkan, klik ganda meminimalkan semua jendela " ++"aplikasi." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Tindakan Shift+Klik" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "Menaikkan jendela" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Minimalkan jendela" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Luncurkan contoh baru" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Siklus melalui jendela" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "Berhenti" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "Perilaku untuk Klik-Tengah." ++ ++#: Settings.ui.h:20 ++msgid "Middle-Click action" ++msgstr "Tindakan Klik-Tengah" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Perilaku untuk Shift+Klik-Tengah." ++ ++#: Settings.ui.h:22 ++msgid "Shift+Middle-Click action" ++msgstr "Tindakan Shift+Klik-Tengah" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "Tunjukkan dock pada" ++ ++#: Settings.ui.h:24 ++msgid "Show on all monitors." ++msgstr "Tunjukkan pada semua monitor." ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Posisi pada layar" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Bawah" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Atas" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Sembunyikan dock saat menghalangi jendela aplikasi saat ini. Setelan yang " ++"lebih halus juga tersedia." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Autohide cerdas" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Batas ukuran dock" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Mode panel: meluas ke tepi layar" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Batas ukuran ikon" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Ukuran ikon tetap: gulir untuk menampilkan ikon lain" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Posisi dan ukuran" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Tampilkan aplikasi favorit" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Tampilkan aplikasi yang sedang berjalan" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Isolasi ruang kerja." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Tampilkan pratinjau windows yang terbuka." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Jika dinonaktifkan, setelan ini dapat diakses dari gnome-tweak-tool atau " ++"situs ekstensi." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Tampilkan ikon Aplikasi" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Pindahkan tombol aplikasi di awal dock." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animasi Tampilkan Aplikasi." ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Peluncur" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Aktifkan Super+(0-9) sebagai cara pintas untuk mengaktifkan aplikasi. Ini " ++"juga bisa digunakan bersamaan dengan Shift dan Ctrl." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Gunakan pintasan papan tik untuk mengaktifkan aplikasi" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Perilaku saat mengklik ikon aplikasi yang sedang berjalan." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Klik tindakan" ++ ++#: Settings.ui.h:50 ++msgid "Minimize" ++msgstr "Minimalkan" ++ ++#: Settings.ui.h:51 ++msgid "Minimize or overview" ++msgstr "Minimalkan atau ikhtisar" ++ ++#: Settings.ui.h:52 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Perilaku saat menggulir pada ikon aplikasi." ++ ++#: Settings.ui.h:53 ++msgid "Scroll action" ++msgstr "Gulir tindakan" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "Tidak melakukan apapun" ++ ++#: Settings.ui.h:55 ++msgid "Switch workspace" ++msgstr "Beralih ruang kerja" ++ ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "Perilaku" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Beberapa penyesuaian dimaksudkan untuk mengintegrasikan dock dengan tema " ++"GNOME bawaan. Sebagai alternatif, pilihan spesifik dapat diaktifkan di bawah " ++"ini." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "Gunakan tema bawaan" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "Hemat ruang padding mengurangi dan radius border." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "Penyusutan dash" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "Tampilkan titik untuk setiap jendela aplikasi." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "Tampilkan indikator counter jendela" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "Atur warna latar belakang untuk dash." ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "Sesuaikan warna dash." ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "Cocokkan opacity latar belakang." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "Menyesuaikan opacity" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "Opacity" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "Paksa sudut lurus\n" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "Penampilan" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "versi: " ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Memindahkan dash keluar dari ikhtisar yang mengubahnya di dock" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "Dibuat oleh" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "Halaman web" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Program ini hadir dengan TIDAK ADA JAMINAN TIDAK " ++"BENAR.\n" ++"Lihat " ++"GNU General Public License, versi 2 atau yang lebih baru untuk " ++"detailnya. " ++ ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "Tentang" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Tunjukkan dock dengan mouse hover di tepi layar." ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "Autohide" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Tekan untuk tampilkan: butuh tekanan untuk menunjukkan dock" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "Aktifkan dalam mode layar penuh" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Tunjukkan dokk bila tidak menghalangi jendela aplikasi." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "Dodge jendela" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "Semua jendela" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "Hanya fokus aplikasi jendela" ++ ++#: Settings.ui.h:86 ++msgid "Only maximized windows" ++msgstr "Hanya jendela yang maksimal" ++ ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "Durasi animasi (s)" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0.000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "Tampilkan batas waktu (s)" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "Ambang tekanan" ++ ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "Con la dimensione fissa delle icone, solo il bordo della dock e l'icona " ++#~ " Mostra Applicazioni sono attive." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Cambia spazio di lavoro scorrendo sulla dock" +diff --git a/extensions/dash-to-dock/po/it.po b/extensions/dash-to-dock/po/it.po +new file mode 100644 +index 00000000..2806ad5f +--- /dev/null ++++ b/extensions/dash-to-dock/po/it.po +@@ -0,0 +1,517 @@ ++# Dash-to-Dock Italian translation. ++# Copyright (C) 2018 the Dash-to-Dock copyright holder. ++# This file is distributed under the same license as the Dash-to-Dock package. ++# Milo Casagrande , 2018 ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash-to-Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2018-04-03 17:18+0200\n" ++"PO-Revision-Date: 2018-04-04 10:13+0200\n" ++"Last-Translator: Milo Casagrande \n" ++"Language-Team: Italian \n" ++"Language: it\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++ ++#: prefs.js:140 ++msgid "Primary monitor" ++msgstr "Monitor primario" ++ ++#: prefs.js:149 prefs.js:156 ++msgid "Secondary monitor " ++msgstr "Monitor secondario " ++ ++#: prefs.js:181 Settings.ui.h:27 ++msgid "Right" ++msgstr "Destra" ++ ++#: prefs.js:182 Settings.ui.h:24 ++msgid "Left" ++msgstr "Sinistra" ++ ++#: prefs.js:232 ++msgid "Intelligent autohide customization" ++msgstr "Personalizzazione nascondimento automatico intelligente" ++ ++#: prefs.js:239 prefs.js:424 prefs.js:481 ++msgid "Reset to defaults" ++msgstr "Ripristina a predefinito" ++ ++#: prefs.js:417 ++msgid "Show dock and application numbers" ++msgstr "Mostra applicazioni in esecuzione" ++ ++#: prefs.js:474 ++msgid "Customize middle-click behavior" ++msgstr "Personalizza comportamento clic centrale" ++ ++#: prefs.js:557 ++msgid "Customize running indicators" ++msgstr "Personalizza indicatori in esecuzione" ++ ++#: prefs.js:671 ++#: Settings.ui.h:71 ++msgid "Customize opacity" ++msgstr "Personalizza opacità" ++ ++#: appIcons.js:785 ++msgid "All Windows" ++msgstr "Tutte le finestre" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1091 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s di «Dash to Dock»" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Quando impostato su minimizza, un doppio clic minimizza tutte le finestre " ++"dell'applicazione" ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Azione Maiusc+Clic" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Solleva finestra" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimizza finestra" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Lancia nuova istanza" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Passa attraverso le finestre" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimizza o mostra attività" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Mostra anteprime finestra" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimizza o mostra anteprime" ++ ++#: Settings.ui.h:10 ++msgid "Quit" ++msgstr "Chiudi" ++ ++#: Settings.ui.h:11 ++msgid "Behavior for Middle-Click." ++msgstr "Comportamento del clic-centrale" ++ ++#: Settings.ui.h:12 ++msgid "Middle-Click action" ++msgstr "Azione clic-centrale" ++ ++#: Settings.ui.h:13 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Comportamento per Maiusc+Clic-centrale" ++ ++#: Settings.ui.h:14 ++msgid "Shift+Middle-Click action" ++msgstr "Azione Maiusc+Clic-centrale" ++ ++#: Settings.ui.h:15 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Abilitare elementi lucidi retroilluminati come Unity7" ++ ++#: Settings.ui.h:16 ++msgid "Use dominant color" ++msgstr "Usare colore dominante" ++ ++#: Settings.ui.h:17 ++msgid "Customize indicator style" ++msgstr "Personalizza stile indicatori" ++ ++#: Settings.ui.h:18 ++msgid "Color" ++msgstr "Colore" ++ ++#: Settings.ui.h:19 ++msgid "Border color" ++msgstr "Colore bordo" ++ ++#: Settings.ui.h:20 ++msgid "Border width" ++msgstr "Larghezza bordo" ++ ++#: Settings.ui.h:21 ++msgid "Show the dock on" ++msgstr "Mostra dock su" ++ ++#: Settings.ui.h:22 ++msgid "Show on all monitors." ++msgstr "Mostra su tutti gli schermi" ++ ++#: Settings.ui.h:23 ++msgid "Position on screen" ++msgstr "Posizione sullo schermo" ++ ++#: Settings.ui.h:25 ++msgid "Bottom" ++msgstr "Basso" ++ ++#: Settings.ui.h:26 ++msgid "Top" ++msgstr "Alto" ++ ++#: Settings.ui.h:28 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Nasconde la dock quando questa ostruisce una finestra dell'applicazione " ++"corrente. Sono disponibili maggiori impostazioni." ++ ++#: Settings.ui.h:29 ++msgid "Intelligent autohide" ++msgstr "Nascondi automaticamente intelligente" ++ ++#: Settings.ui.h:30 ++msgid "Dock size limit" ++msgstr "Limite dimensione dock" ++ ++#: Settings.ui.h:31 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Modalità pannello: si estende fino al bordo dello schermo" ++ ++#: Settings.ui.h:32 ++msgid "Icon size limit" ++msgstr "Limite dimensione icone" ++ ++#: Settings.ui.h:33 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Dimensione icona fissa: scorrere per rivelare le altre icone" ++ ++#: Settings.ui.h:34 ++msgid "Position and size" ++msgstr "Posizione e dimensione" ++ ++#: Settings.ui.h:35 ++msgid "Show favorite applications" ++msgstr "Mostra applicazioni preferite" ++ ++#: Settings.ui.h:36 ++msgid "Show running applications" ++msgstr "Mostra applicazioni in esecuzione" ++ ++#: Settings.ui.h:37 ++msgid "Isolate workspaces." ++msgstr "Isola spazi di lavoro" ++ ++#: Settings.ui.h:38 ++msgid "Isolate monitors." ++msgstr "Isola gli schermi" ++ ++#: Settings.ui.h:39 ++msgid "Show open windows previews." ++msgstr "Mostra anteprime delle finestre aperte" ++ ++#: Settings.ui.h:40 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Se disabilitate, queste impostazioni sono accessibili da gnome-tweak-tool o " ++"dal sito web delle estensioni." ++ ++#: Settings.ui.h:41 ++msgid "Show Applications icon" ++msgstr "Mostra icona Applicazioni" ++ ++#: Settings.ui.h:42 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Sposta il pulsante delle applicazioni all'inizio della dock" ++ ++#: Settings.ui.h:43 ++msgid "Animate Show Applications." ++msgstr "Anima Mostra applicazioni" ++ ++#: Settings.ui.h:44 ++msgid "Launchers" ++msgstr "Icone applicazioni" ++ ++#: Settings.ui.h:45 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Attiva Super+(0-9) come scorciatoie per attivare le applicazioni, funziona " ++"anche con Maiusc e Ctrl." ++ ++#: Settings.ui.h:46 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Usa scorciatoie da tastiera per attivare le applicazioni" ++ ++#: Settings.ui.h:47 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "" ++"Comportamento quando si fa clic sull'icona di una applicazione in esecuzione." ++ ++#: Settings.ui.h:48 ++msgid "Click action" ++msgstr "Azione clic" ++ ++#: Settings.ui.h:49 ++msgid "Minimize" ++msgstr "Minimizza" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "" ++"Comportamento quando si scorre sull'icona di una applicazione in esecuzione" ++ ++#: Settings.ui.h:51 ++msgid "Scroll action" ++msgstr "Azione scorrimento" ++ ++#: Settings.ui.h:52 ++msgid "Do nothing" ++msgstr "Non fare nulla" ++ ++#: Settings.ui.h:53 ++msgid "Switch workspace" ++msgstr "Cambia spazio di lavoro" ++ ++#: Settings.ui.h:54 ++msgid "Behavior" ++msgstr "Comportamento" ++ ++#: Settings.ui.h:55 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Poche personalizzazioni significative per integrare la dock con il tema " ++"predefinito di GNOME. In alternativa, delle opzioni specifiche possono " ++"essere abilitate qui sotto." ++ ++#: Settings.ui.h:56 ++msgid "Use built-in theme" ++msgstr "Usa tema integrato" ++ ++#: Settings.ui.h:57 ++msgid "Save space reducing padding and border radius." ++msgstr "Salva spazio riducendo il margine e il raggio dei bordi" ++ ++#: Settings.ui.h:58 ++msgid "Shrink the dash" ++msgstr "Riduci la dash" ++ ++#: Settings.ui.h:59 ++msgid "Customize windows counter indicators" ++msgstr "Personalizza indicatori conteggio finestre" ++ ++#: Settings.ui.h:60 ++msgid "Default" ++msgstr "Predefinito" ++ ++#: Settings.ui.h:61 ++msgid "Dots" ++msgstr "Puntini" ++ ++#: Settings.ui.h:62 ++msgid "Squares" ++msgstr "Quadrati" ++ ++#: Settings.ui.h:63 ++msgid "Dashes" ++msgstr "Trattini" ++ ++#: Settings.ui.h:64 ++msgid "Segmented" ++msgstr "Segmenti" ++ ++#: Settings.ui.h:65 ++msgid "Solid" ++msgstr "Solido" ++ ++#: Settings.ui.h:66 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:67 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:68 ++msgid "Set the background color for the dash." ++msgstr "Imposta il colore di sfondo della dash" ++ ++#: Settings.ui.h:69 ++msgid "Customize the dash color" ++msgstr "Personalizza il colore della dash" ++ ++#: Settings.ui.h:70 ++msgid "Tune the dash background opacity." ++msgstr "Personalizza l'opacità dello sfondo della dash" ++ ++#: Settings.ui.h:72 ++msgid "Fixed" ++msgstr "Fisso" ++ ++#: Settings.ui.h:73 ++msgid "Adaptive" ++msgstr "Adattivo" ++ ++#: Settings.ui.h:74 ++msgid "Dynamic" ++msgstr "Dinamico" ++ ++#: Settings.ui.h:75 ++msgid "Opacity" ++msgstr "Opacità" ++ ++#: Settings.ui.h:76 ++msgid "Force straight corner\n" ++msgstr "Forza angoli squadrati\n" ++ ++#: Settings.ui.h:78 ++msgid "Appearance" ++msgstr "Aspetto" ++ ++#: Settings.ui.h:79 ++msgid "version: " ++msgstr "versione: " ++ ++#: Settings.ui.h:80 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Sposta la dash fuori dalla panoramica trasformandola in una dock" ++ ++#: Settings.ui.h:81 ++msgid "Created by" ++msgstr "Creata da" ++ ++#: Settings.ui.h:82 ++msgid "Webpage" ++msgstr "Sito web" ++ ++#: Settings.ui.h:83 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Questo programma viene fornito senza ALCUNA GARANZIA.\n" ++"Per maggiori informazioni, consultare la GNU General Public License, versione 2 " ++"o successiva." ++ ++#: Settings.ui.h:85 ++msgid "About" ++msgstr "Informazioni" ++ ++#: Settings.ui.h:86 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Personalizza i valori minimo e massimo dell'opacità" ++ ++#: Settings.ui.h:87 ++msgid "Minimum opacity" ++msgstr "Opacità minima" ++ ++#: Settings.ui.h:88 ++msgid "Maximum opacity" ++msgstr "Opacità massima" ++ ++#: Settings.ui.h:89 ++msgid "Number overlay" ++msgstr "Indicatore numerico in sovraimpressione" ++ ++#: Settings.ui.h:90 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Mostra brevemente il numero corrispondente alla scorciatoia sull'icona " ++"dell'applicazione." ++ ++#: Settings.ui.h:91 ++msgid "Show the dock if it is hidden" ++msgstr "Mostra dock se nascosta" ++ ++#: Settings.ui.h:92 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"In modalità «Nascondi automaticamente intelligente», la dock viene mostrata " ++"per un istante quando la scorciatoia è attivata" ++ ++#: Settings.ui.h:93 ++msgid "Shortcut for the options above" ++msgstr "Scorciatoia" ++ ++#: Settings.ui.h:94 ++msgid "Syntax: , , , " ++msgstr "Formato: , , , " ++ ++#: Settings.ui.h:95 ++msgid "Hide timeout (s)" ++msgstr "Timeout nascondimento (s)" ++ ++#: Settings.ui.h:96 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Mostra la dock passando con il mouse sul bordo dello schermo" ++ ++#: Settings.ui.h:97 ++msgid "Autohide" ++msgstr "Nascondi automaticamente" ++ ++#: Settings.ui.h:98 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Premere per vedere: richiede una pressione per mostrare la dock" ++ ++#: Settings.ui.h:99 ++msgid "Enable in fullscreen mode" ++msgstr "Abilita in modalità a schermo intero" ++ ++#: Settings.ui.h:100 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "" ++"Mostra la dock quando questa non ostruisce le finestre dell'applicazione" ++ ++#: Settings.ui.h:101 ++msgid "Dodge windows" ++msgstr "Schive finestre" ++ ++#: Settings.ui.h:102 ++msgid "All windows" ++msgstr "Tutte le finestre" ++ ++#: Settings.ui.h:103 ++msgid "Only focused application's windows" ++msgstr "Solo le finestre delle applicazione col focus" ++ ++#: Settings.ui.h:104 ++msgid "Only maximized windows" ++msgstr "Solo le finestre massimizzate" ++ ++#: Settings.ui.h:105 ++msgid "Animation duration (s)" ++msgstr "Durata animazione (s)" ++ ++#: Settings.ui.h:106 ++msgid "Show timeout (s)" ++msgstr "Timeout rivelazione (s)" ++ ++#: Settings.ui.h:107 ++msgid "Pressure threshold" ++msgstr "Soglia pressione" ++ +diff --git a/extensions/dash-to-dock/po/ja.po b/extensions/dash-to-dock/po/ja.po +new file mode 100644 +index 00000000..37cf8dd7 +--- /dev/null ++++ b/extensions/dash-to-dock/po/ja.po +@@ -0,0 +1,585 @@ ++# Dash to Dock master ja.po ++# Copyright (C) 2013-2017, 2019-2020 THE dash-to-dock'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the dash-to-dock package. ++# Jiro Matsuzawa , 2013. ++# Debonne Hooties , 2014-2017. ++# sicklylife , 2019-2020. ++# Ryo Nakano , 2019. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: dash-to-dock master\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-06-14 23:00+0900\n" ++"PO-Revision-Date: 2020-06-15 07:30+0900\n" ++"Last-Translator: sicklylife \n" ++"Language-Team: Japanese <>\n" ++"Language: ja\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++ ++#: appIcons.js:797 ++msgid "All Windows" ++msgstr "ウィンドウプレビューの表示" ++ ++#: appIcons.js:808 ++msgid "New Window" ++msgstr "新しいウィンドウ" ++ ++#: appIcons.js:823 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "専用のグラフィックカードを使用して起動" ++ ++#: appIcons.js:851 ++msgid "Remove from Favorites" ++msgstr "お気に入りから削除" ++ ++#: appIcons.js:857 ++msgid "Add to Favorites" ++msgstr "お気に入りに追加" ++ ++#: appIcons.js:868 ++msgid "Show Details" ++msgstr "詳細を表示" ++ ++# ここの翻訳は GNOME Shell の訳が優先される様子 ++#: appIcons.js:896 appIcons.js:914 Settings.ui.h:11 ++msgid "Quit" ++msgstr "終了" ++ ++# ここの「Quit」は GNOME Shell の訳に合わせた方が良さげ ++#: appIcons.js:916 ++#, javascript-format ++msgid "Quit %d Windows" ++msgstr "%d 個のウィンドウを終了" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1134 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock の%s" ++ ++#: appIcons.js:1134 ++msgid "Settings" ++msgstr "設定" ++ ++#: docking.js:1188 ++msgid "Dash" ++msgstr "Dash" ++ ++#: locations.js:65 ++msgid "Trash" ++msgstr "ゴミ箱" ++ ++#: locations.js:74 ++msgid "Empty Trash" ++msgstr "ゴミ箱を空にする" ++ ++#: locations.js:192 ++msgid "Mount" ++msgstr "マウント" ++ ++#: locations.js:235 ++msgid "Eject" ++msgstr "取り出す" ++ ++#: locations.js:240 ++msgid "Unmount" ++msgstr "アンマウント" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "プライマリーモニター" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "セカンダリーモニター" ++ ++#: prefs.js:309 Settings.ui.h:28 ++msgid "Right" ++msgstr "右" ++ ++#: prefs.js:310 Settings.ui.h:25 ++msgid "Left" ++msgstr "左" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "インテリジェント表示の設定" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "既定値にリセット" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "ドック表示とアプリケーション番号" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "中ボタンクリック時のアクション" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "インジケーターの表示設定" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "不透明度の調整" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"[ウィンドウの最小化] に設定したときは、アイコンをダブルクリックするとそのアプ" ++"リケーションのウィンドウをすべて最小化します。" ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Shift + クリック時のアクション" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "ウィンドウの再表示" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "ウィンドウの最小化" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "新しいウィンドウを開く" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "ウィンドウの切り替え" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "ウィンドウの最小化またはオーバービュー" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "ウィンドウのプレビュー表示" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "ウィンドウの最小化またはプレビュー表示" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "フォーカスまたはプレビュー表示" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "中ボタンをクリックしたときの動作を設定します。" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "中ボタンクリック時のアクション" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Shift を押しながら中ボタンをクリックしたときの動作を設定します。" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Shift + 中ボタンクリック時のアクション" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Unity7 のような色付きのアイテム背景" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "ドミナントカラーを使用" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "表示スタイルの設定" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "ボディ色" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "縁取り色" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "縁取り幅" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "ドックを表示するモニター" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "すべてのモニターで表示" ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "表示位置" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "下" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "上" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"開いているウィンドウの邪魔にならないようドックの表示/非表示を自動的に切り替え" ++"ます。より洗練された表示設定も可能です。" ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "インテリジェント表示" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "ドックサイズの上限" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "パネルモード (画面の端までドックを拡張)" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "アイコンサイズの上限" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "アイコンサイズの固定 (隠れたアイコンはスクロールで表示)" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "位置とサイズ" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "お気に入りアプリケーションの表示" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "実行中アプリケーションの表示" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "現在のワークスペースのみ表示" ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "現在のモニターのみ表示" ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "ウィンドウのプレビューを右クリックで表示可能にする" ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"オフにしたときは gnome-tweak-tool または拡張機能ウェブサイトを経由してこの設" ++"定ダイアログにアクセスします。" ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "[アプリケーションを表示する] アイコンの表示" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "ドックの先頭 (最上段または左端) に表示" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "アニメーションしながらアプリケーション一覧を表示" ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "ゴミ箱を表示" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "マウントしたボリュームとデバイスを表示" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "ランチャー" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Super キーと番号 (0-9) を同時に押すことでアプリケーションのアクティブ化を可" ++"能にします。\n" ++"Shift キーまたは Ctrl キーを Super キーとともに押しても機能します。" ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "アプリのアクティブ化にキーボードショートカットを使用" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "実行中アプリケーションのアイコンをクリックしたときの動作を設定します。" ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "クリック時のアクション" ++ ++#: Settings.ui.h:52 ++msgid "Minimize" ++msgstr "ウィンドウの最小化" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "" ++"実行中アプリケーションのアイコン上でスクロールしたときの動作を設定します。" ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "スクロール時のアクション" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "何もしない" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "ワークスペースの切り替え" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "動作" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"この設定がオンのときは、お使いの GNOME テーマとの調和を図るためカスタマイズは" ++"無効になります。オフのときには以下のカスタマイズが可能です。" ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "ビルトインテーマの使用" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "境界線の太さとパディングを減らして表示域を小さくします。" ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Dash の縮小表示" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "ウィンドウ数インジケーターの設定" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "デフォルト" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Dash の背景色を設定します" ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Dash 背景色の設定" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Dash 背景の不透明度を調整します。" ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "固定" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "動的" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "不透明度" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner" ++msgstr "角を丸めない" ++ ++#: Settings.ui.h:79 ++msgid "Appearance" ++msgstr "外観" ++ ++#: Settings.ui.h:80 ++msgid "version: " ++msgstr "バージョン: " ++ ++#: Settings.ui.h:81 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "" ++"Dash をドック化してアクティビティ画面以外でも Dash 操作を可能にします。" ++ ++#: Settings.ui.h:82 ++msgid "Created by" ++msgstr "作者:" ++ ++#: Settings.ui.h:83 ++msgid "Webpage" ++msgstr "ウェブページ" ++ ++#: Settings.ui.h:84 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"このプログラムに保証は一切ありません。\n" ++"詳しくは GNU 一般公衆ライセンス (GPL) バージョン 2 またはそれ以降のバージョン" ++"をご覧ください。" ++ ++#: Settings.ui.h:86 ++msgid "About" ++msgstr "情報" ++ ++#: Settings.ui.h:87 ++msgid "Customize minimum and maximum opacity values" ++msgstr "不透明度の最小値と最大値の設定" ++ ++#: Settings.ui.h:88 ++msgid "Minimum opacity" ++msgstr "最小不透明度" ++ ++#: Settings.ui.h:89 ++msgid "Maximum opacity" ++msgstr "最大不透明度" ++ ++#: Settings.ui.h:90 ++msgid "Number overlay" ++msgstr "番号の表示" ++ ++#: Settings.ui.h:91 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"ショートカットキーが押されたときに、アイコン上にアプリケーション番号を一時的" ++"に表示します。" ++ ++#: Settings.ui.h:92 ++msgid "Show the dock if it is hidden" ++msgstr "ドックが非表示なら一時的に表示" ++ ++#: Settings.ui.h:93 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"ドックが表示されていない状態のとき、ショーカットキーで一時的にドックを表示し" ++"ます。" ++ ++#: Settings.ui.h:94 ++msgid "Shortcut for the options above" ++msgstr "上記設定のためのショートカットキー" ++ ++#: Settings.ui.h:95 ++msgid "Syntax: , , , " ++msgstr "表記法: , , , " ++ ++#: Settings.ui.h:96 ++msgid "Hide timeout (s)" ++msgstr "非表示までのタイムアウト (秒)" ++ ++#: Settings.ui.h:97 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "" ++"ドックを表示したいとき、ポインターを画面端に移動するとドックが表示されます。" ++ ++#: Settings.ui.h:98 ++msgid "Autohide" ++msgstr "オンデマンド表示" ++ ++#: Settings.ui.h:99 ++msgid "Push to show: require pressure to show the dock" ++msgstr "" ++"押し込んで表示 (画面外にポインターを移動するようにマウスを動かして表示)" ++ ++#: Settings.ui.h:100 ++msgid "Enable in fullscreen mode" ++msgstr "フルスクリーンモード時でも表示" ++ ++#: Settings.ui.h:101 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "" ++"ドックを常に表示しますが、アプリケーションウィンドウと重なるときは表示しませ" ++"ん。" ++ ++#: Settings.ui.h:102 ++msgid "Dodge windows" ++msgstr "ウィンドウ重なり防止" ++ ++#: Settings.ui.h:103 ++msgid "All windows" ++msgstr "すべてのウィンドウが対象" ++ ++#: Settings.ui.h:104 ++msgid "Only focused application's windows" ++msgstr "フォーカスされたアプリケーションのウィンドウが対象" ++ ++#: Settings.ui.h:105 ++msgid "Only maximized windows" ++msgstr "最大化されたウィンドウが対象" ++ ++#: Settings.ui.h:106 ++msgid "Animation duration (s)" ++msgstr "アニメーション表示時間 (秒)" ++ ++#: Settings.ui.h:107 ++msgid "Show timeout (s)" ++msgstr "表示までのタイムアウト (秒)" ++ ++#: Settings.ui.h:108 ++msgid "Pressure threshold" ++msgstr "押し込み量 (ピクセル)" +diff --git a/extensions/dash-to-dock/po/nb.po b/extensions/dash-to-dock/po/nb.po +new file mode 100644 +index 00000000..77a0f0db +--- /dev/null ++++ b/extensions/dash-to-dock/po/nb.po +@@ -0,0 +1,506 @@ ++# Norwegian Bokmål translation for Dash to Dock. ++# Copyright (C) 2018 Michele ++# This file is distributed under the same license as the dash-to-dock package. ++# Harald H. , 2018. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash-to-Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2018-02-28 09:47+0100\n" ++"PO-Revision-Date: 2018-03-02 11:02+0100\n" ++"Language-Team: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 1.8.7.1\n" ++"Last-Translator: Harald H. \n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"Language: nb\n" ++ ++#: prefs.js:131 ++msgid "Primary monitor" ++msgstr "Primærskjerm" ++ ++#: prefs.js:140 prefs.js:147 ++msgid "Secondary monitor " ++msgstr "Sekundærskjerm" ++ ++#: prefs.js:172 Settings.ui.h:26 ++msgid "Right" ++msgstr "Høyre" ++ ++#: prefs.js:173 Settings.ui.h:23 ++msgid "Left" ++msgstr "Venstre" ++ ++#: prefs.js:223 ++msgid "Intelligent autohide customization" ++msgstr "Tilpass intelligent autoskjul" ++ ++#: prefs.js:230 prefs.js:415 prefs.js:472 ++msgid "Reset to defaults" ++msgstr "Tilbakestill til standard" ++ ++#: prefs.js:408 ++msgid "Show dock and application numbers" ++msgstr "Vis dokk og programnumre" ++ ++#: prefs.js:465 ++msgid "Customize middle-click behavior" ++msgstr "Tilpass oppførsel for mellomklikk" ++ ++#: prefs.js:548 ++msgid "Customize running indicators" ++msgstr "Tilpass kjørende indikatorer" ++ ++#: prefs.js:662 ++#: Settings.ui.h:70 ++msgid "Customize opacity" ++msgstr "Tilpass gjennomsiktighet" ++ ++#: appIcons.js:763 ++msgid "All Windows" ++msgstr "Alle vinduer" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1069 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %s" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Når satt til minimer vil dobbeltklikking minimere alle åpne instanser av " ++"programmet." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Handling for Shift + klikk" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Fremhev vindu" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimer vindu" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Åpne ny instans" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Veksle mellom vinduer" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimer eller oversikt" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Vis forhåndsvisning" ++ ++#: Settings.ui.h:9 ++msgid "Quit" ++msgstr "Avslutt" ++ ++#: Settings.ui.h:10 ++msgid "Behavior for Middle-Click." ++msgstr "Oppførsel for mellomklikk." ++ ++#: Settings.ui.h:11 ++msgid "Middle-Click action" ++msgstr "Mellomklikk" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Oppførsel for Shift + mellomklikk." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Middle-Click action" ++msgstr "Shift + mellomklikk" ++ ++#: Settings.ui.h:14 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Aktiver Unity7-lignende bakgrunnsglans" ++ ++#: Settings.ui.h:15 ++msgid "Use dominant color" ++msgstr "Bruk dominerende farge" ++ ++#: Settings.ui.h:16 ++msgid "Customize indicator style" ++msgstr "Tilpass indikatorstil" ++ ++#: Settings.ui.h:17 ++msgid "Color" ++msgstr "Farge" ++ ++#: Settings.ui.h:18 ++msgid "Border color" ++msgstr "Kantfarge" ++ ++#: Settings.ui.h:19 ++msgid "Border width" ++msgstr "Kantbredde" ++ ++#: Settings.ui.h:20 ++msgid "Show the dock on" ++msgstr "Vis dokken på" ++ ++#: Settings.ui.h:21 ++msgid "Show on all monitors." ++msgstr "Vis på alle skjermer." ++ ++#: Settings.ui.h:22 ++msgid "Position on screen" ++msgstr "Skjermposisjon" ++ ++#: Settings.ui.h:24 ++msgid "Bottom" ++msgstr "Bunn" ++ ++#: Settings.ui.h:25 ++msgid "Top" ++msgstr "Topp" ++ ++#: Settings.ui.h:27 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Skjul dokken når den forstyrrer et aktivt programvindu. Flere innstillinger " ++"er tilgjengelig." ++ ++#: Settings.ui.h:28 ++msgid "Intelligent autohide" ++msgstr "Intelligent autoskjul" ++ ++#: Settings.ui.h:29 ++msgid "Dock size limit" ++msgstr "Maks dokkstørrelse" ++ ++#: Settings.ui.h:30 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Panelmodus: strekker seg til skjermkanten" ++ ++#: Settings.ui.h:31 ++msgid "Icon size limit" ++msgstr "Ikonstørrelse" ++ ++#: Settings.ui.h:32 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Fast ikonstørrelse: rull for vise andre ikoner" ++ ++#: Settings.ui.h:33 ++msgid "Position and size" ++msgstr "Posisjon og størrelse" ++ ++#: Settings.ui.h:34 ++msgid "Show favorite applications" ++msgstr "Vis favorittprogrammer" ++ ++#: Settings.ui.h:35 ++msgid "Show running applications" ++msgstr "Vis kjørende programmer" ++ ++#: Settings.ui.h:36 ++msgid "Isolate workspaces." ++msgstr "Isoler arbeidsområder." ++ ++#: Settings.ui.h:37 ++msgid "Isolate monitors." ++msgstr "Isoler skjermer." ++ ++#: Settings.ui.h:38 ++msgid "Show open windows previews." ++msgstr "Vis forhåndsvisning av åpne vinduer." ++ ++#: Settings.ui.h:39 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Om deaktivert er disse innstillingene tilgjengelig i gnome-tweak-tool eller " ++"på nettsiden for utvidelser." ++ ++#: Settings.ui.h:40 ++msgid "Show Applications icon" ++msgstr "Vis programmer ikon" ++ ++#: Settings.ui.h:41 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Flytt programmer-knappen til starten av dokken." ++ ++#: Settings.ui.h:42 ++msgid "Animate Show Applications." ++msgstr "Animere Vis programmer." ++ ++#: Settings.ui.h:43 ++msgid "Launchers" ++msgstr "Utløsere" ++ ++#: Settings.ui.h:44 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Bruk Super+(0-9) som snarvei for å aktivere apper. Den kan også brukes i " ++"kombinasjon med Shift og Ctrl." ++ ++#: Settings.ui.h:45 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Bruk tastatursnarveier for å åpne apper" ++ ++#: Settings.ui.h:46 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Oppførsel når du klikker på ikonet for et åpent program." ++ ++#: Settings.ui.h:47 ++msgid "Click action" ++msgstr "Klikkhandling" ++ ++#: Settings.ui.h:48 ++msgid "Minimize" ++msgstr "Minimer" ++ ++#: Settings.ui.h:49 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Oppførsel ved rulling over et programikon." ++ ++#: Settings.ui.h:50 ++msgid "Scroll action" ++msgstr "Rullehandling" ++ ++#: Settings.ui.h:51 ++msgid "Do nothing" ++msgstr "Ikke gjør noe" ++ ++#: Settings.ui.h:52 ++msgid "Switch workspace" ++msgstr "Bytt arbeidsområde" ++ ++#: Settings.ui.h:53 ++msgid "Behavior" ++msgstr "Oppførsel" ++ ++#: Settings.ui.h:54 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Enkelte tilpasninger som forsøker å integrere dokken med det standard GNOME-" ++"temaet. Alternativt kan bestemte valg aktiveres nedenfor." ++ ++#: Settings.ui.h:55 ++msgid "Use built-in theme" ++msgstr "Bruk innebygget tema" ++ ++#: Settings.ui.h:56 ++msgid "Save space reducing padding and border radius." ++msgstr "Spar plass ved å redusere utfylling og kant-radius." ++ ++#: Settings.ui.h:57 ++msgid "Shrink the dash" ++msgstr "Krymp dash" ++ ++#: Settings.ui.h:58 ++msgid "Customize windows counter indicators" ++msgstr "Tilpass vinduenes nummer-indikatorer" ++ ++#: Settings.ui.h:59 ++msgid "Default" ++msgstr "Standard" ++ ++#: Settings.ui.h:60 ++msgid "Dots" ++msgstr "Prikker" ++ ++#: Settings.ui.h:61 ++msgid "Squares" ++msgstr "Firkanter" ++ ++#: Settings.ui.h:62 ++msgid "Dashes" ++msgstr "Streker" ++ ++#: Settings.ui.h:63 ++msgid "Segmented" ++msgstr "Segmentert" ++ ++#: Settings.ui.h:64 ++msgid "Solid" ++msgstr "Solid" ++ ++#: Settings.ui.h:65 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:66 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:67 ++msgid "Set the background color for the dash." ++msgstr "Avgjør bakgrunnsfargen." ++ ++#: Settings.ui.h:68 ++msgid "Customize the dash color" ++msgstr "Tilpass fargen" ++ ++#: Settings.ui.h:69 ++msgid "Tune the dash background opacity." ++msgstr "Justere bakgrunnens gjennomsiktighet." ++ ++#: Settings.ui.h:71 ++msgid "Fixed" ++msgstr "Fast" ++ ++#: Settings.ui.h:72 ++msgid "Adaptive" ++msgstr "Adaptiv" ++ ++#: Settings.ui.h:73 ++msgid "Dynamic" ++msgstr "Dynamisk" ++ ++#: Settings.ui.h:74 ++msgid "Opacity" ++msgstr "Gjennomsiktighet" ++ ++#: Settings.ui.h:75 ++msgid "Force straight corner\n" ++msgstr "Tving rette hjørner\n" ++ ++#: Settings.ui.h:77 ++msgid "Appearance" ++msgstr "Utseende" ++ ++#: Settings.ui.h:78 ++msgid "version: " ++msgstr "versjon: " ++ ++#: Settings.ui.h:79 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Flytter dash ut av oversikten og omformer den til en dokk" ++ ++#: Settings.ui.h:80 ++msgid "Created by" ++msgstr "Laget av" ++ ++#: Settings.ui.h:81 ++msgid "Webpage" ++msgstr "Nettside" ++ ++#: Settings.ui.h:82 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Dette programmet leveres med ABSOLUTT INGEN GARANTI.\n" ++"Se GNU " ++"General Public License, versjon 2 eller senere for detaljer." ++ ++#: Settings.ui.h:84 ++msgid "About" ++msgstr "Om" ++ ++#: Settings.ui.h:85 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Tilpass verdier for minimum og maks gjennomsiktighet" ++ ++#: Settings.ui.h:86 ++msgid "Minimum opacity" ++msgstr "Minimum gjennomsiktighet" ++ ++#: Settings.ui.h:87 ++msgid "Maximum opacity" ++msgstr "Maksimum gjennomsiktighet" ++ ++#: Settings.ui.h:88 ++msgid "Number overlay" ++msgstr "Nummerert overlag" ++ ++#: Settings.ui.h:89 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "Midlertidig vis programnummer over ikoner, som svarer til snarveien." ++ ++#: Settings.ui.h:90 ++msgid "Show the dock if it is hidden" ++msgstr "Vis dokken om den er skjult" ++ ++#: Settings.ui.h:91 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Om autoskjul er i bruk vil dokken vises en kort stund når snarveien utløses." ++ ++#: Settings.ui.h:92 ++msgid "Shortcut for the options above" ++msgstr "Snarvei for valgene ovenfor" ++ ++#: Settings.ui.h:93 ++msgid "Syntax: , , , " ++msgstr "Syntaks: , , , " ++ ++#: Settings.ui.h:94 ++msgid "Hide timeout (s)" ++msgstr "Skjuleperiode (s)" ++ ++#: Settings.ui.h:95 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Vis dokken når musepekeren holdes langs skjermkanten." ++ ++#: Settings.ui.h:96 ++msgid "Autohide" ++msgstr "Autoskjul" ++ ++#: Settings.ui.h:97 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Dytt for å vise: krev et økt trykk for å vise dokken" ++ ++#: Settings.ui.h:98 ++msgid "Enable in fullscreen mode" ++msgstr "Aktiver i fullskjermmodus" ++ ++#: Settings.ui.h:99 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Vis dokken når den ikke forstyrrer programvinduer." ++ ++#: Settings.ui.h:100 ++msgid "Dodge windows" ++msgstr "Smett unna vinduer" ++ ++#: Settings.ui.h:101 ++msgid "All windows" ++msgstr "Alle vinduer" ++ ++#: Settings.ui.h:102 ++msgid "Only focused application's windows" ++msgstr "Kun fokuserte programvinduer" ++ ++#: Settings.ui.h:103 ++msgid "Only maximized windows" ++msgstr "Kun maksimerte programvinduer" ++ ++#: Settings.ui.h:104 ++msgid "Animation duration (s)" ++msgstr "Animasjonsvarighet (s)" ++ ++#: Settings.ui.h:105 ++msgid "Show timeout (s)" ++msgstr "Visningslengde (s)" ++ ++#: Settings.ui.h:106 ++msgid "Pressure threshold" ++msgstr "Trykkterskel" +diff --git a/extensions/dash-to-dock/po/nl.po b/extensions/dash-to-dock/po/nl.po +new file mode 100644 +index 00000000..ea742c74 +--- /dev/null ++++ b/extensions/dash-to-dock/po/nl.po +@@ -0,0 +1,662 @@ ++# Translation for de ++# Copyright (C) 2014 Michele ++# This file is distributed under the same license as the dash-to-dock package. ++# ++# Morris Jobke , 2014. ++# Jonatan Zeidler , 2012. ++# jonius , 2012. ++# Heimen Stoffels , 2015, 2019. ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2019-10-10 20:27+0200\n" ++"PO-Revision-Date: 2019-10-10 20:46+0200\n" ++"Last-Translator: Heimen Stoffels \n" ++"Language-Team: Dutch \n" ++"Language: de\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Lokalize 19.11.70\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++ ++#: prefs.js:264 ++msgid "Primary monitor" ++msgstr "Primair beeldscherm" ++ ++#: prefs.js:273 prefs.js:280 ++msgid "Secondary monitor " ++msgstr "Secundair beeldscherm" ++ ++#: prefs.js:305 Settings.ui.h:28 ++msgid "Right" ++msgstr "Rechts" ++ ++#: prefs.js:306 Settings.ui.h:25 ++msgid "Left" ++msgstr "Links" ++ ++#: prefs.js:356 ++msgid "Intelligent autohide customization" ++msgstr "Voorkeuren voor slim verbergen" ++ ++#: prefs.js:363 prefs.js:556 prefs.js:612 ++msgid "Reset to defaults" ++msgstr "Standaardwaarden" ++ ++#: prefs.js:549 ++msgid "Show dock and application numbers" ++msgstr "Dock en programmanummers tonen" ++ ++#: prefs.js:605 ++msgid "Customize middle-click behavior" ++msgstr "Middelste muisknop-gedrag aanpassen" ++ ++#: prefs.js:688 ++msgid "Customize running indicators" ++msgstr "Indicatoren van draaiende programma's aanpassen" ++ ++#: prefs.js:800 ++#: Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Doorzichtigheid aanpassen" ++ ++#: appIcons.js:809 ++msgid "All Windows" ++msgstr "Alle vensters" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1126 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %s" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Als je gekozen hebt voor minimaliseren, dan zorgt dubbelklikken ervoor dat " ++"alle vensters van het huidige programma worden geminimaliseerd." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Shift+klikken-actie" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Venster naar voren halen" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Venster minimalisren" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Nieuw proces openen" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Schakelen tussen vensters" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimaliseren of activiteitenoverzicht" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Venstervoorbeelden tonen" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimaliseren of voorbeelden tonen" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Focussen of voorbeelden tonen" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Afsluiten" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Wat er gebeurt bij middelklikken." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Middelklikactie" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Wat er gebeurt bij Shift+middelklikken." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Shift+middelklik-actie" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Unity7-achtige itemachtergrond gebruiken" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Dominante kleur gebruiken" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Indicatorstijl aanpassen" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Kleur" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Randkleur" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Randbreedte" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Dock tonen op" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Tonen op alle beeldschermen." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Positie op het scherm" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Onderaan" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Bovenaan" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Verberg het dock als het een venster van het huidige programma in de weg " ++"zit. Er zijn uitgebreide instellingen hiervoor beschikbaar." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Slim verbergen" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Maximale dockgrootte" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Paneelmodus: uitrekken tot aan de schermrand" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Maximale pictogramgrootte" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "" ++"Vastgezette pictogramgrootte: scroll om meer pictogrammen weer te geven" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Positie en grootte" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Favoriete programma's tonen" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Geopende programma's tonen" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Werkbladen isoleren." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Beeldschermen isoleren." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Voorbeelden van geopende vensters tonen." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Als je dit uitschakelt, dan zijn deze instellingen toegankelijk via gnome-" ++"tweaks of de extensiesite." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Pictogram voor Alle programma's tonen" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Verplaatst de 'Alle programma's'-knop naar het begin van het dock." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animatie na klikken op Alle programma's tonen." ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Prullenbak tonen" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Aangekoppelde schijven en apparaten tonen" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Starters" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Gebruik Super+(0-9) om programma's te openen en focussen. Kan ook worden " ++"gebruikt met Shift en Ctrl." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Sneltoetsen gebruiken om programma's te openen/focussen" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "" ++"Wat er gebeurt bij het klikken op het pictogram van een geopend programma." ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Klikactie" ++ ++#: Settings.ui.h:52 ++msgid "Minimize" ++msgstr "Minimaliseren" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "" ++"Wat er gebeurt bij het scrollen op het pictogram van een geopend programma." ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Scrollactie" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Niets doen" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Van werkblad wisselen" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Gedrag" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Enkele aanpassingen, bedoeld om het dock te integreren met het standaard " ++"GNOME-thema. In plaats daarvan kun je hieronder specifieke opties inschakelen." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Ingebouwd thema gebruiken" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "Bespaar ruimte door de straal van de dikte en rand te verkleinen." ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Snelstarter verkleinen" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "Vensterindicatoren aanpassen" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "Standaard" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Stipjes" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Vierkantjes" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Streepjes" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Gesegmenteerd" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Vast" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Stel de achtergrondkleur in van de snelstarter." ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Snelstarterkleur aanpassen" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Pas de doorzichtigheid van de snelstarterachtergrond aan." ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Vooringesteld" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Dynamisch" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Doorzichtigheid" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner\n" ++msgstr "Rechte hoek afdwingen\n" ++ ++#: Settings.ui.h:80 ++msgid "Appearance" ++msgstr "Uiterlijk" ++ ++#: Settings.ui.h:81 ++msgid "version: " ++msgstr "versie: " ++ ++#: Settings.ui.h:82 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "" ++"Toont de snelstarter buiten het activiteitenoverzicht zodat het een dock " ++"wordt" ++ ++#: Settings.ui.h:83 ++msgid "Created by" ++msgstr "Gemaakt door" ++ ++#: Settings.ui.h:84 ++msgid "Webpage" ++msgstr "Website" ++ ++#: Settings.ui.h:85 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Dit programma wordt geleverd ZONDER ENIGE GARANTIE.\n" ++"Lees de GNU General Public License, versie 2 of nieuwer, voor meer informatie." ++"" ++ ++#: Settings.ui.h:87 ++msgid "About" ++msgstr "Over" ++ ++#: Settings.ui.h:88 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Minimum- en maximumwaarden van doorzichtigheid aanpassen" ++ ++#: Settings.ui.h:89 ++msgid "Minimum opacity" ++msgstr "Minimale doorzichtigheid" ++ ++#: Settings.ui.h:90 ++msgid "Maximum opacity" ++msgstr "Maximale doorzichtigheid" ++ ++#: Settings.ui.h:91 ++msgid "Number overlay" ++msgstr "Nummers tonen" ++ ++#: Settings.ui.h:92 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Toon tijdelijk de programmanummers, behorende bij de sneltoets, op de " ++"pictogrammen." ++ ++#: Settings.ui.h:93 ++msgid "Show the dock if it is hidden" ++msgstr "Dock tonen indien verborgen" ++ ++#: Settings.ui.h:94 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Als je automatisch verbergen gebruikt, dan wordt het dock, middels de " ++"sneltoets, korte tijd getoond." ++ ++#: Settings.ui.h:95 ++msgid "Shortcut for the options above" ++msgstr "Sneltoets voor bovenstaande opties" ++ ++#: Settings.ui.h:96 ++msgid "Syntax: , , , " ++msgstr "Syntax: , , , " ++ ++#: Settings.ui.h:97 ++msgid "Hide timeout (s)" ++msgstr "Verberginterval (s)" ++ ++#: Settings.ui.h:98 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Dock tonen door de muiscursor op de schermrand te plaatsen." ++ ++#: Settings.ui.h:99 ++msgid "Autohide" ++msgstr "Automatisch verbergen" ++ ++#: Settings.ui.h:100 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Tonen middels druk: druk toepassen om het dock te tonen" ++ ++#: Settings.ui.h:101 ++msgid "Enable in fullscreen mode" ++msgstr "Inschakelen in beeldvullende modus" ++ ++#: Settings.ui.h:102 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Toon het dock als het geen programmavensters in de weg zit." ++ ++#: Settings.ui.h:103 ++msgid "Dodge windows" ++msgstr "Vensters ontwijken" ++ ++#: Settings.ui.h:104 ++msgid "All windows" ++msgstr "Alle vensters" ++ ++#: Settings.ui.h:105 ++msgid "Only focused application's windows" ++msgstr "Alleen gefocuste programmavensters" ++ ++#: Settings.ui.h:106 ++msgid "Only maximized windows" ++msgstr "Alleen gemaximaliseerde vensters" ++ ++#: Settings.ui.h:107 ++msgid "Animation duration (s)" ++msgstr "Animatieduur (s)" ++ ++#: Settings.ui.h:108 ++msgid "Show timeout (s)" ++msgstr "Weergave-interval (s)" ++ ++#: Settings.ui.h:109 ++msgid "Pressure threshold" ++msgstr "Drukwaarde" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "Toon een stip voor elk geopend venster." ++ ++#~ msgid "0.000" ++#~ msgstr "0.000" ++ ++#, fuzzy ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "Het gebied nabij de schermrand en de Applicaties weergeven-knop " ++#~ "zijn actief." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Van werkblad wisselen door te scrollen op het dock" ++ ++#~ msgid "Only consider windows of the focused application" ++#~ msgstr "Alleen vensters van de huidige gefocuste applicatie overwegen" ++ ++#~ msgid "Main Settings" ++#~ msgstr "Grundeinstellungen" ++ ++#~ msgid "Dock Position" ++#~ msgstr "Dock-Position" ++ ++#~ msgid "Dock is fixed and always visible" ++#~ msgstr "Das Dock hat eine feste Position und ist immer sichtbar" ++ ++#~ msgid "Show delay [ms]" ++#~ msgstr "Einblendeverzögerung [ms]" ++ ++#~ msgid "Hide delay [ms]" ++#~ msgstr "Ausblendeverzögerung [ms]" ++ ++#~ msgid "Application based intellihide" ++#~ msgstr "Anwendungsbasiertes intelligentes Verstecken" ++ ++#~ msgid "Show the dock on following monitor (if attached)" ++#~ msgstr "Zeige Dock auf folgendem Monitor (falls angeschlossen)" ++ ++#~ msgid "Primary (default)" ++#~ msgstr "Primäranzeige (Standard)" ++ ++#~ msgid "1" ++#~ msgstr "1" ++ ++#~ msgid "2" ++#~ msgstr "2" ++ ++#~ msgid "3" ++#~ msgstr "3" ++ ++#~ msgid "4" ++#~ msgstr "4" ++ ++#~ msgid "Max height" ++#~ msgstr "Maximale Höhe" ++ ++#~ msgid "Expand (experimental and buggy)" ++#~ msgstr "Komplette Höhe (experimentell und fehlerbehaftet)" ++ ++#~ msgid "Maximum icon size" ++#~ msgstr "Maximale Symbolgröße" ++ ++#~ msgid "16" ++#~ msgstr "16" ++ ++#~ msgid "24" ++#~ msgstr "24" ++ ++#~ msgid "32" ++#~ msgstr "32" ++ ++#~ msgid "48" ++#~ msgstr "48" ++ ++#~ msgid "64" ++#~ msgstr "64" ++ ++#~ msgid "Optional features" ++#~ msgstr "Optionale Funktionen" ++ ++#~ msgid "Deadtime between each workspace switching [ms]" ++#~ msgstr "Stillstandszeit zwischen Arbeitsflächenwechsel [ms]" ++ ++#~ msgid "Only a 1px wide area close to the screen edge is active" ++#~ msgstr "Nur einen 1 Pixel-breiten Bereich am Rand nutzen" ++ ++#~ msgid "All the area of the dock is active" ++#~ msgstr "Den gesamten Bereich des Docks nutzen" ++ ++#~ msgid "Customize actions on mouse click" ++#~ msgstr "Aktion bei Mausklick anpassen" ++ ++#~ msgid "Action on clicking on running app" ++#~ msgstr "Aktion beim Klicken auf eine laufende Anwendung" ++ ++#~ msgid "Minimize window on shift+click (double click for all app windows)" ++#~ msgstr "" ++#~ "Fenster mit Shift+Klick minimieren (Doppelklick für alle Fenster der " ++#~ "Anwendung)" ++ ++#~ msgid "Appearence and Themes" ++#~ msgstr "Erscheinungsbild und Themen" ++ ++#~ msgid "" ++#~ "A customized theme is built in the extension. This is meant to work with " ++#~ "the default Adwaita theme: the dash is shrunk to save space, its " ++#~ "background transparency reduced, and custom indicators for the number of " ++#~ "windows of each application are added." ++#~ msgstr "" ++#~ "Ein angepasstes Thema ist in dieser Erweiterung enthalten. Es ist für das " ++#~ "Vorgabe-Adwaita-Thema gedacht: Das Dash ist schmaler, um Platz zu sparen, " ++#~ "die Hintergrundtransparenz ist reduziert und für jede Anwendung wird ein " ++#~ "Indikator für die Anzahl der Fenster eingefügt." ++ ++#~ msgid "" ++#~ "Alternatively, for a better integration with custom themes, each " ++#~ "customization can be applied indipendently" ++#~ msgstr "" ++#~ "Alternativ können für eine bessere Integration Anpassungen vorgenommen " ++#~ "werden" ++ ++#~ msgid "Shrink the dash size by reducing padding" ++#~ msgstr "Das Dash schmaler machen durch Verkleinern des Abstands zum Rand" ++ ++#~ msgid "Apply custom theme (work only with the default Adwaita theme)" ++#~ msgstr "" ++#~ "Benutzerdefiniertes Theme verwenden (funktioniert nur mit dem Standard-" ++#~ "Adwaita-Theme)" +diff --git a/extensions/dash-to-dock/po/pl.po b/extensions/dash-to-dock/po/pl.po +new file mode 100644 +index 00000000..b45c00a0 +--- /dev/null ++++ b/extensions/dash-to-dock/po/pl.po +@@ -0,0 +1,558 @@ ++# Polish translation for dash-to-dock GNOME Shell extension ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the dash-to-dock package. ++# ++# ++# Piotr Sokół , 2012, 2013, 2015, 2016, 2017. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: 55\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2019-10-10 10:10+0200\n" ++"PO-Revision-Date: 2019-10-10 10:31+0200\n" ++"Last-Translator: Piotr Sokół \n" ++"Language-Team: polski <>\n" ++"Language: pl\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " ++"|| n%100>=20) ? 1 : 2;\n" ++"X-Generator: Poedit 2.2.3\n" ++ ++#: prefs.js:264 ++msgid "Primary monitor" ++msgstr "Podstawowy" ++ ++#: prefs.js:273 prefs.js:280 ++msgid "Secondary monitor " ++msgstr "Drugorzędny " ++ ++#: prefs.js:305 Settings.ui.h:28 ++msgid "Right" ++msgstr "Po prawej" ++ ++#: prefs.js:306 Settings.ui.h:25 ++msgid "Left" ++msgstr "Po lewej" ++ ++#: prefs.js:356 ++msgid "Intelligent autohide customization" ++msgstr "Dostosowanie automatycznego ukrywania" ++ ++#: prefs.js:363 prefs.js:556 prefs.js:612 ++msgid "Reset to defaults" ++msgstr "Przywróć domyślne" ++ ++#: prefs.js:549 ++msgid "Show dock and application numbers" ++msgstr "Wyświetlanie doku i numerów programów" ++ ++#: prefs.js:605 ++msgid "Customize middle-click behavior" ++msgstr "Dostosowanie działania przycisków myszy" ++ ++#: prefs.js:688 ++msgid "Customize running indicators" ++msgstr "Dostosowanie wskaźników okien" ++ ++#: prefs.js:800 ++#: Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Dostosowanie nieprzejrzystości" ++ ++#: appIcons.js:809 ++msgid "All Windows" ++msgstr "Wszystkie okna" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1126 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s Dash to Dock" ++ ++#: locations.js:65 ++msgid "Trash" ++msgstr "Kosz" ++ ++#: locations.js:74 ++msgid "Empty Trash" ++msgstr "Pusty kosz" ++ ++#: locations.js:182 ++msgid "Mount" ++msgstr "Zamontuj" ++ ++#: locations.js:225 ++msgid "Eject" ++msgstr "Wysuń" ++ ++#: locations.js:230 ++msgid "Unmount" ++msgstr "Odmontuj" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Wybranie zminimalizowania okna, umożliwia minimalizowanie wszystkich okien " ++"programu dwukrotnym kliknięciem" ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Kliknięcia lewym przyciskiem + Shift" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Przywrócenie okna" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Zminimalizowanie okna" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Otwarcie nowego okna" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Przełączenie pomiędzy oknami" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Zminimalizowanie lub ekran podglądu" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Wyświetlenie podglądu okien" ++ ++#: Settings.ui.h:9 ++#, fuzzy ++#| msgid "Minimize or overview" ++msgid "Minimize or show previews" ++msgstr "Zminimalizowanie lub ekran podglądu" ++ ++#: Settings.ui.h:10 ++#, fuzzy ++#| msgid "Show window previews" ++msgid "Focus or show previews" ++msgstr "Wyświetlenie podglądu okien" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Zakończenie działania" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Konfiguruje działanie kliknięcia środkowym przyciskiem myszy" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Kliknięcie środkowym przyciskiem" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "" ++"Konfiguruje działanie kliknięcia środkowym przyciskiem myszy z przytrzymanym " ++"klawiszem Shift" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Kliknięcie środkowym przyciskiem + Shift" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Podświetlenie elementów w stylu Unity7" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Użyj dominującego koloru" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Dostosowanie stylu wskaźników" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Kolor" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Kolor obramowania" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Szerokość obramowania" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Ekran wyświetlania doku" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Na wszystkich ekranach" ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Położenie na ekranie" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Na dole" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "U góry" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Ukrywa dok jeśli zakrywa okno bieżącego programu. Dostępnych jest więcej " ++"szczegółowych opcji." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Inteligentne ukrywanie" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Ograniczenie rozmiaru doku" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Tryb panelu: rozciągnięcie do krawędzi ekranu" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Ograniczenie rozmiaru ikon" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Ustalony rozmiar ikon: odsłanianie ikon przewijaniem" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Położenie i rozmiar" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Ulubione programy" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Uruchomione programy" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Izolowanie obszarów roboczych" ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Izolowanie ekranów" ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Podgląd otwartych okien" ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Przełącza widoczność przycisku programów. Można też skonfigurować za pomocą " ++"narzędzia dostrajania lub witryny internetowej z rozszerzeniami." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Przycisk Wyświetl programy" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Przemieszczenie przycisku programów na początek doku" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animowanie przycisku Wyświetl programy" ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Pokaż kosz na śmieci" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Pokaż zamontowane woluminy oraz urządzenia" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Aktywatory" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Używa skrótu Super+(0-9) do uruchomienia aktywatorów. Można użyć z " ++"modyfikatorem Shift lub Ctrl." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Uruchamianie aktywatorów skrótami klawiszowymi" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Określa działanie kliknięcia ikony uruchomionego programu" ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Działanie kliknięcia" ++ ++#: Settings.ui.h:52 ++msgid "Minimize" ++msgstr "Zminimalizowanie okna" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Określa działanie przewijania kółkiem ikony programu" ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Działanie przewijania" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Brak" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Przełączenie obszaru roboczego" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Zachowanie" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Integruje dok z domyślnym stylem GNOME przy użyciu kilku ustawień. " ++"Opcjonalnie ustawienia te można określić poniżej." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Użycie zintegrowanego stylu" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "" ++"Zmniejsza zajmowaną powierzchnię redukując\n" ++"odległość od krawędzi i jej zaokrąglenie" ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Zmniejszenie kokpitu" ++ ++#: Settings.ui.h:62 ++#, fuzzy ++#| msgid "Show windows counter indicators" ++msgid "Customize windows counter indicators" ++msgstr "Wskaźniki ilości okien" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "Domyślnie" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Kropki" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Kwadraty" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Kreski" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Posegmentowane" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Nieprzerywane" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Ustala wybrany kolor tła kokpitu" ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Kolor kokpitu" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Modyfikuje zaciemnienie tła kokpitu" ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Ustalona" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Dynamiczna" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Nieprzejrzystość" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner\n" ++msgstr "Kąty proste narożników\n" ++ ++#: Settings.ui.h:80 ++msgid "Appearance" ++msgstr "Wygląd" ++ ++#: Settings.ui.h:81 ++msgid "version: " ++msgstr "wersja: " ++ ++#: Settings.ui.h:82 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Przemieszcza kokpit z widoku podglądu do doku" ++ ++#: Settings.ui.h:83 ++msgid "Created by" ++msgstr "Stworzony przez" ++ ++#: Settings.ui.h:84 ++msgid "Webpage" ++msgstr "Strona internetowa" ++ ++#: Settings.ui.h:85 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Niniejszy program rozpowszechniany jest bez " ++"jakiejkolwiek gwarancji.\n" ++"Więcej informacji: Powszechna licencja publiczna GNU, wersja 2 lub późniejsza." ++ ++#: Settings.ui.h:87 ++msgid "About" ++msgstr "O programie" ++ ++#: Settings.ui.h:88 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Dostosowanie minimalnej i maksymalnej wartości nieprzejrzystości" ++ ++#: Settings.ui.h:89 ++msgid "Minimum opacity" ++msgstr "Minimalna nieprzejrzystość" ++ ++#: Settings.ui.h:90 ++msgid "Maximum opacity" ++msgstr "Maksymalna nieprzejrzystość" ++ ++#: Settings.ui.h:91 ++msgid "Number overlay" ++msgstr "Nakładka z numerem" ++ ++#: Settings.ui.h:92 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "Wyświetla chwilowo na ikonach numery programów powiązane ze skrótami" ++ ++#: Settings.ui.h:93 ++msgid "Show the dock if it is hidden" ++msgstr "Wyświetlenie ukrytego doku" ++ ++#: Settings.ui.h:94 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "Wyświetla chwilowo dok po wciśnięciu skrótu klawiszowego" ++ ++#: Settings.ui.h:95 ++msgid "Shortcut for the options above" ++msgstr "Skrót klawiszowy dla powyższych poleceń" ++ ++#: Settings.ui.h:96 ++msgid "Syntax: , , , " ++msgstr "Składnia: , , , " ++ ++#: Settings.ui.h:97 ++msgid "Hide timeout (s)" ++msgstr "Czas ukrywania (s)" ++ ++#: Settings.ui.h:98 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Wyświetla dok po przemieszczeniu wskaźnika myszy do krawędzi ekranu" ++ ++#: Settings.ui.h:99 ++msgid "Autohide" ++msgstr "Automatyczne ukrywanie" ++ ++#: Settings.ui.h:100 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Wymagany nacisk do wyświetlenia doku" ++ ++#: Settings.ui.h:101 ++msgid "Enable in fullscreen mode" ++msgstr "Wyświetlanie na pełnym ekranie" ++ ++#: Settings.ui.h:102 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Wyświetla dok jeśli nie zakrywa okien programu" ++ ++#: Settings.ui.h:103 ++msgid "Dodge windows" ++msgstr "Ukrywanie przed oknami" ++ ++#: Settings.ui.h:104 ++msgid "All windows" ++msgstr "Wszystkie okna" ++ ++#: Settings.ui.h:105 ++msgid "Only focused application's windows" ++msgstr "Tylko aktywne okna programu" ++ ++#: Settings.ui.h:106 ++msgid "Only maximized windows" ++msgstr "Tylko zmaksymalizowane okna" ++ ++#: Settings.ui.h:107 ++msgid "Animation duration (s)" ++msgstr "Czas animacji (s)" ++ ++#: Settings.ui.h:108 ++msgid "Show timeout (s)" ++msgstr "Czas wyświetlania (s)" ++ ++#: Settings.ui.h:109 ++msgid "Pressure threshold" ++msgstr "Próg nacisku" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "Wyświetla kropkę dla każdego okna programu" ++ ++#~ msgid "Adaptive" ++#~ msgstr "Adaptacyjna" +diff --git a/extensions/dash-to-dock/po/pt.po b/extensions/dash-to-dock/po/pt.po +new file mode 100644 +index 00000000..d65da5f1 +--- /dev/null ++++ b/extensions/dash-to-dock/po/pt.po +@@ -0,0 +1,509 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# Carlos Alberto Junior Spohr Poletto , 2012. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2019-03-06 01:57-0600\n" ++"PO-Revision-Date: 2019-03-06 03:55-0600\n" ++"Last-Translator: Adolfo Jayme Barrientos \n" ++"Language-Team: Carlos Alberto Junior Spohr Poletto \n" ++"Language: pt\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.2.1\n" ++ ++#: prefs.js:264 ++msgid "Primary monitor" ++msgstr "Monitor primário" ++ ++#: prefs.js:273 prefs.js:280 ++msgid "Secondary monitor " ++msgstr "Monitor secundário " ++ ++#: prefs.js:305 Settings.ui.h:28 ++msgid "Right" ++msgstr "Direita" ++ ++#: prefs.js:306 Settings.ui.h:25 ++msgid "Left" ++msgstr "Esquerda" ++ ++#: prefs.js:356 ++msgid "Intelligent autohide customization" ++msgstr "Personalização do auto-hide inteligente" ++ ++#: prefs.js:363 prefs.js:548 prefs.js:604 ++msgid "Reset to defaults" ++msgstr "Repor padrão" ++ ++#: prefs.js:541 ++msgid "Show dock and application numbers" ++msgstr "Mostrar números das docks e aplicações" ++ ++#: prefs.js:597 ++msgid "Customize middle-click behavior" ++msgstr "Personalizar comportamento do clique do meio" ++ ++#: prefs.js:680 ++msgid "Customize running indicators" ++msgstr "Personalizar indicadores de execução" ++ ++#: prefs.js:792 ++#: Settings.ui.h:72 ++msgid "Customize opacity" ++msgstr "Personalizar opacidade" ++ ++#: appIcons.js:790 ++msgid "All Windows" ++msgstr "Todas as janelas" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1092 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s do Dash to Dock" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Quando definido para minimizar, duplo clique minimiza todas as janelas da " ++"aplicação." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Ação de Shift+Clique" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Levantar janela" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimizar janela" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Abrir nova janela" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Percorrer janelas" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimizar ou antever" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Mostrar antevisão das janelas abertas" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimizar ou antever" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Focar ou antever" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Sair" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Comportamento do clique do meio." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Ação do clique do meio" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Comportamento do Shift+Clique do meio." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Ação do Shift+Clique do meio" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Usar efeito polido no fundo (estilo Unity7)" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Usar cor dominante" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Personalizar indicadores" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Cor" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Cor da borda" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Largura da borda" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Mostrar a dock em" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Mostrar em todos os monitores." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Posição no ecrã" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Em baixo" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Em cima" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Esconder a dock quando obstrói uma janela da aplicação atual. Estão " ++"disponíveis opções mais detalhadas." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Ocultação inteligente" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Limite do tamanho da dock" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Modo Painel: expandir até ao limite do ecrã" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Limite do tamanho dos ícones" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Tamanho fixo dos ícones: scroll para revelar outros ícones" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Posição e dimensão" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Mostrar aplicações favoritas" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Mostrar aplicações em execução" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Isolar áreas de trabalho." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Isolar monitores." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Mostrar antevisão das janelas abertas." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Se desativadas, estas opções estão acessíveis através do gnome-tweak-tool ou " ++"no site das extensões." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Mostrar ícone das Aplicações" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Mover o botão das aplicações para o início da dock." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animar Mostrar aplicações." ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Lançadores" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Usar Super+(0-9) como atalhos para as aplicações. Também pode ser usado com " ++"Shift e Ctrl." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Usar atalhos de teclado para aplicações" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Comportamento do clique no ícone de uma aplicação em execução." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Ação do clique" ++ ++#: Settings.ui.h:50 ++msgid "Minimize" ++msgstr "Minimizar" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Comportamento do scroll no ícone de uma aplicação." ++ ++#: Settings.ui.h:52 ++msgid "Scroll action" ++msgstr "Ação do scroll" ++ ++#: Settings.ui.h:53 ++msgid "Do nothing" ++msgstr "Não fazer nada" ++ ++#: Settings.ui.h:54 ++msgid "Switch workspace" ++msgstr "Alternar espaço de trabalho" ++ ++#: Settings.ui.h:55 ++msgid "Behavior" ++msgstr "Comportamento" ++ ++#: Settings.ui.h:56 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Menos opções visando a integração da doca com o tema padrão do GNOME. " ++"Alternativamente, opções mais detalhadas podem ser ativadas abaixo." ++ ++#: Settings.ui.h:57 ++msgid "Use built-in theme" ++msgstr "Usar tema embutido" ++ ++#: Settings.ui.h:58 ++msgid "Save space reducing padding and border radius." ++msgstr "Poupar espaço reduzindo o preenchimento e as bordas." ++ ++#: Settings.ui.h:59 ++msgid "Shrink the dash" ++msgstr "Encolher a dock" ++ ++#: Settings.ui.h:60 ++msgid "Customize windows counter indicators" ++msgstr "Mostrar indicador com contagem de janelas" ++ ++#: Settings.ui.h:61 ++msgid "Default" ++msgstr "Padrão" ++ ++#: Settings.ui.h:62 ++msgid "Dots" ++msgstr "Pontos" ++ ++#: Settings.ui.h:63 ++msgid "Squares" ++msgstr "Quadrados" ++ ++#: Settings.ui.h:64 ++msgid "Dashes" ++msgstr "Linhas" ++ ++#: Settings.ui.h:65 ++msgid "Segmented" ++msgstr "Segmentado" ++ ++#: Settings.ui.h:66 ++msgid "Solid" ++msgstr "Sólido" ++ ++#: Settings.ui.h:67 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:68 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:69 ++msgid "Set the background color for the dash." ++msgstr "Definir a cor de fundo do painel." ++ ++#: Settings.ui.h:70 ++msgid "Customize the dash color" ++msgstr "Personalizar cor do painel" ++ ++#: Settings.ui.h:71 ++msgid "Tune the dash background opacity." ++msgstr "Afinar a cor de fundo do painel." ++ ++#: Settings.ui.h:73 ++msgid "Fixed" ++msgstr "Fixo" ++ ++#: Settings.ui.h:74 ++msgid "Dynamic" ++msgstr "Dinâmico" ++ ++#: Settings.ui.h:75 ++msgid "Opacity" ++msgstr "Opacidade" ++ ++#: Settings.ui.h:76 ++msgid "Force straight corner\n" ++msgstr "Forçar cantos retos\n" ++ ++#: Settings.ui.h:78 ++msgid "Appearance" ++msgstr "Aparência" ++ ++#: Settings.ui.h:79 ++msgid "version: " ++msgstr "versão: " ++ ++#: Settings.ui.h:80 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Retira o painel da vista de Atividades, tornando-o numa dock" ++ ++#: Settings.ui.h:81 ++msgid "Created by" ++msgstr "Criado por" ++ ++#: Settings.ui.h:82 ++msgid "Webpage" ++msgstr "Página web" ++ ++#: Settings.ui.h:83 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++ ++#: Settings.ui.h:85 ++msgid "About" ++msgstr "Sobre" ++ ++#: Settings.ui.h:86 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Personalizar valor mínimo e máximo da opacidade" ++ ++#: Settings.ui.h:87 ++msgid "Minimum opacity" ++msgstr "Opacidade mínima" ++ ++#: Settings.ui.h:88 ++msgid "Maximum opacity" ++msgstr "Opacidade máxima" ++ ++#: Settings.ui.h:89 ++msgid "Number overlay" ++msgstr "Números sobrepostos" ++ ++#: Settings.ui.h:90 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Mostrar temporariamente o número das aplicações sobre os ícones, " ++"correspondendo os atalhos." ++ ++#: Settings.ui.h:91 ++msgid "Show the dock if it is hidden" ++msgstr "Mostrar a dock se estiver escondida" ++ ++#: Settings.ui.h:92 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Se o auto-hide estiver ativo, a dock aparecerá temporariamente ao utilizar o " ++"atalho." ++ ++#: Settings.ui.h:93 ++msgid "Shortcut for the options above" ++msgstr "Atalho para as opções acima" ++ ++#: Settings.ui.h:94 ++msgid "Syntax: , , , " ++msgstr "Síntaxe: , , , " ++ ++#: Settings.ui.h:95 ++msgid "Hide timeout (s)" ++msgstr "Tempo limite para esconder (s)" ++ ++#: Settings.ui.h:96 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Mostrar a dock ao passar o rato na borda do ecrã." ++ ++#: Settings.ui.h:97 ++msgid "Autohide" ++msgstr "Ocultação inteligente" ++ ++#: Settings.ui.h:98 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Pressionar para mostrar: requerer pressão para mostrar a doca" ++ ++#: Settings.ui.h:99 ++msgid "Enable in fullscreen mode" ++msgstr "Ativar no modo de ecrã inteiro" ++ ++#: Settings.ui.h:100 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Mostrar a dock quando esta não obstrui as janelas." ++ ++#: Settings.ui.h:101 ++msgid "Dodge windows" ++msgstr "Esquivar as janelas" ++ ++#: Settings.ui.h:102 ++msgid "All windows" ++msgstr "Todas as janelas" ++ ++#: Settings.ui.h:103 ++msgid "Only focused application's windows" ++msgstr "Apenas janelas da aplicação focada" ++ ++#: Settings.ui.h:104 ++msgid "Only maximized windows" ++msgstr "Apenas janelas maximizadas" ++ ++#: Settings.ui.h:105 ++msgid "Animation duration (s)" ++msgstr "Tempo da animação (s)" ++ ++#: Settings.ui.h:106 ++msgid "Show timeout (s)" ++msgstr "Mostrar tempo limite (s)" ++ ++#: Settings.ui.h:107 ++msgid "Pressure threshold" ++msgstr "Limite de pressão" +diff --git a/extensions/dash-to-dock/po/pt_BR.po b/extensions/dash-to-dock/po/pt_BR.po +new file mode 100644 +index 00000000..6cb10a33 +--- /dev/null ++++ b/extensions/dash-to-dock/po/pt_BR.po +@@ -0,0 +1,513 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# Carlos Alberto Junior Spohr Poletto , 2012. ++# Fábio Nogueira , 2016. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2019-03-06 01:57-0600\n" ++"PO-Revision-Date: 2019-03-06 03:56-0600\n" ++"Last-Translator: Adolfo Jayme Barrientos \n" ++"Language-Team: Português do Brasil\n" ++"Language: pt_BR\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.2.1\n" ++ ++#: prefs.js:264 ++msgid "Primary monitor" ++msgstr "Monitor primário" ++ ++#: prefs.js:273 prefs.js:280 ++msgid "Secondary monitor " ++msgstr "Monitor secundário" ++ ++#: prefs.js:305 Settings.ui.h:28 ++msgid "Right" ++msgstr "Direita" ++ ++#: prefs.js:306 Settings.ui.h:25 ++msgid "Left" ++msgstr "Esquerda" ++ ++#: prefs.js:356 ++msgid "Intelligent autohide customization" ++msgstr "Configuração da ocultação inteligente" ++ ++#: prefs.js:363 prefs.js:548 prefs.js:604 ++msgid "Reset to defaults" ++msgstr "Restaurar o padrão" ++ ++#: prefs.js:541 ++msgid "Show dock and application numbers" ++msgstr "Exibir o dock e os números dos aplicativos" ++ ++#: prefs.js:597 ++msgid "Customize middle-click behavior" ++msgstr "Customizar o comportamento do clique do botão do meio" ++ ++#: prefs.js:680 ++msgid "Customize running indicators" ++msgstr "Customizar os indicadores de execução" ++ ++#: prefs.js:792 ++#: Settings.ui.h:72 ++msgid "Customize opacity" ++msgstr "Customizar opacidade" ++ ++#: appIcons.js:790 ++msgid "All Windows" ++msgstr "Todas as janelas" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1092 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s do Dash to Dock" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Quando minimizar, o duplo clique minizará todas as janelas dos aplicativos" ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Ação do Shift+Clique" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Aumentar janela" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimizar janela" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Iniciar nova instância" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Percorrer através das janelas" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimizar o visão geral" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Mostrar pré-visualizações das janelas" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimizar o mostrar pré-visualizações" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Pôr em foco o pré-visualizar" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Sair" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Comportamento do Clique do botão do meio." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Ação do clique do botão do meio" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Comportamento para Shift + Clique do botão do meio." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Ação do Shift+Clique do botão do meio" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Ativar retroiluminação estilo Unity 7 dos elementos" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Usar cor dominante" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Customizar o estilo do indicador" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Cor" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Cor da borda" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Tamanho da borda" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Exibir o dock" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Mostrar em todos os monitores." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Posição na tela" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Embaixo" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Em cima" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Ocultar o dock quando o mesmo sobrepor a janela do aplicativo em uso. " ++"Definições mais aperfeiçoadas estão disponíveis." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Ocultação inteligente" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Tamanho limite do dock" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Modo do painel: estender até a borda da tela" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Tamanho limite do ícone" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Tamanho do ícone fixo: use o scroll do mouse para revelar outro ícone" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Posição e tamanho" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Mostrar aplicativos favoritos" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Mostrar aplicativos em execução" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Isolar espaços de trabalho." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Isolar monitores." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Mostrar pré-visualizações de janelas abertas." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Se desabilitado, essas configurações estão acessíveis através do gnome-tweak-" ++"tool ou no site da extensão." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Exibir ícone dos Aplicativos" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Mover o botão de aplicativos para o início do dock." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Mostrar aplicativos com efeitos." ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Lançadores" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Habilita tecla Super+(0-9) como atalhos para ativar aplicativos. Também pode " ++"ser usado junto com Shift e Ctrl." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Usar atalhos de teclado para ativar aplicativos" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Comportamento ao clicar sobre o ícone de um aplicativo em execução." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Ação do clique" ++ ++#: Settings.ui.h:50 ++msgid "Minimize" ++msgstr "Minimizar" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Comportamento ao rolar sobre o ícone de um aplicativo." ++ ++#: Settings.ui.h:52 ++msgid "Scroll action" ++msgstr "Ação da rolagem" ++ ++#: Settings.ui.h:53 ++msgid "Do nothing" ++msgstr "Não fazer nada" ++ ++#: Settings.ui.h:54 ++msgid "Switch workspace" ++msgstr "Alternar espaço de trabalho" ++ ++#: Settings.ui.h:55 ++msgid "Behavior" ++msgstr "Comportamento" ++ ++#: Settings.ui.h:56 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Algumas personalizações se destinam a integrar o dock com o tema padrão do " ++"GNOME. Alternativamente, as opções específicas podem ser ativadas abaixo." ++ ++#: Settings.ui.h:57 ++msgid "Use built-in theme" ++msgstr "Usar o tema do sistema" ++ ++#: Settings.ui.h:58 ++msgid "Save space reducing padding and border radius." ++msgstr "Economizar espaço reduzindo preenchimento e a borda arredondada" ++ ++#: Settings.ui.h:59 ++msgid "Shrink the dash" ++msgstr "Encolher o dash" ++ ++#: Settings.ui.h:60 ++msgid "Customize windows counter indicators" ++msgstr "Customizar indicadores de contagem de janelas" ++ ++#: Settings.ui.h:61 ++msgid "Default" ++msgstr "Padrão" ++ ++#: Settings.ui.h:62 ++msgid "Dots" ++msgstr "Pontos" ++ ++#: Settings.ui.h:63 ++msgid "Squares" ++msgstr "Quadrados" ++ ++#: Settings.ui.h:64 ++msgid "Dashes" ++msgstr "Linhas" ++ ++#: Settings.ui.h:65 ++msgid "Segmented" ++msgstr "Segmentado" ++ ++#: Settings.ui.h:66 ++msgid "Solid" ++msgstr "Sólido" ++ ++#: Settings.ui.h:67 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:68 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:69 ++msgid "Set the background color for the dash." ++msgstr "Define a cor de fundo para o dash." ++ ++#: Settings.ui.h:70 ++msgid "Customize the dash color" ++msgstr "Customizar a cor do dash" ++ ++#: Settings.ui.h:71 ++msgid "Tune the dash background opacity." ++msgstr "Ajustar a opacidade do fundo do dash." ++ ++#: Settings.ui.h:73 ++msgid "Fixed" ++msgstr "Fixo" ++ ++#: Settings.ui.h:74 ++msgid "Dynamic" ++msgstr "Dinâmico" ++ ++#: Settings.ui.h:75 ++msgid "Opacity" ++msgstr "Opacidade" ++ ++#: Settings.ui.h:76 ++msgid "Force straight corner\n" ++msgstr "Forçar canto reto\n" ++ ++#: Settings.ui.h:78 ++msgid "Appearance" ++msgstr "Aparência" ++ ++#: Settings.ui.h:79 ++msgid "version: " ++msgstr "versão:" ++ ++#: Settings.ui.h:80 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Mover o dash para fora da visão geral transformando-o em dock" ++ ++#: Settings.ui.h:81 ++msgid "Created by" ++msgstr "Criado por" ++ ++#: Settings.ui.h:82 ++msgid "Webpage" ++msgstr "Página Web" ++ ++#: Settings.ui.h:83 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Este programa é distribuido SEM QUALQUER GARANTIA.\n" ++"Veja em GNU General Public License, versão 2 ou posterior para maiores " ++"detalhes." ++ ++#: Settings.ui.h:85 ++msgid "About" ++msgstr "Sobre" ++ ++#: Settings.ui.h:86 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Customizar os valores mínimo e máximo da opacidade" ++ ++#: Settings.ui.h:87 ++msgid "Minimum opacity" ++msgstr "Opacidade mínima" ++ ++#: Settings.ui.h:88 ++msgid "Maximum opacity" ++msgstr "Opacidade máxima" ++ ++#: Settings.ui.h:89 ++msgid "Number overlay" ++msgstr "Sobreposição de número" ++ ++#: Settings.ui.h:90 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Mostrar temporariamente os números dos aplicativos sobre os ícones, " ++"correspondentes ao atalho." ++ ++#: Settings.ui.h:91 ++msgid "Show the dock if it is hidden" ++msgstr "Exibir o dock se este estiver oculto" ++ ++#: Settings.ui.h:92 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Se utilizar a ocultação, o dock será exibido por um curto período de tempo " ++"ao acionar o atalho." ++ ++#: Settings.ui.h:93 ++msgid "Shortcut for the options above" ++msgstr "Atalho para as opções acima" ++ ++#: Settings.ui.h:94 ++msgid "Syntax: , , , " ++msgstr "Sintaxe: , , , " ++ ++#: Settings.ui.h:95 ++msgid "Hide timeout (s)" ++msgstr "Ocultar tempo limite [s]" ++ ++#: Settings.ui.h:96 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Mostrar o dock quando o mouse pairar sobre a tela." ++ ++#: Settings.ui.h:97 ++msgid "Autohide" ++msgstr "Ocultação" ++ ++#: Settings.ui.h:98 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Empurrar para mostrar: requer pressão para mostrar o dock" ++ ++#: Settings.ui.h:99 ++msgid "Enable in fullscreen mode" ++msgstr "Habilitar modo tela cheia" ++ ++#: Settings.ui.h:100 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Mostrar o dock quando nenhum aplicativo sobrepor o mesmo." ++ ++#: Settings.ui.h:101 ++msgid "Dodge windows" ++msgstr "Esconder janela" ++ ++#: Settings.ui.h:102 ++msgid "All windows" ++msgstr "Todas as janelas" ++ ++#: Settings.ui.h:103 ++msgid "Only focused application's windows" ++msgstr "Apenas janelas de aplicativos em foco" ++ ++#: Settings.ui.h:104 ++msgid "Only maximized windows" ++msgstr "Somente janelas maximizadas" ++ ++#: Settings.ui.h:105 ++msgid "Animation duration (s)" ++msgstr "Tempo da animação [s]" ++ ++#: Settings.ui.h:106 ++msgid "Show timeout (s)" ++msgstr "Mostrar tempo limite [s]" ++ ++#: Settings.ui.h:107 ++msgid "Pressure threshold" ++msgstr "Limite de pressão" +diff --git a/extensions/dash-to-dock/po/ru.po b/extensions/dash-to-dock/po/ru.po +new file mode 100644 +index 00000000..b41fa0c0 +--- /dev/null ++++ b/extensions/dash-to-dock/po/ru.po +@@ -0,0 +1,626 @@ ++# Russian translation for dash-to-dock GNOME Shell extension ++# Ivan Komaritsyn , 2015-2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: dash-to-dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-01-31 14:36+0300\n" ++"PO-Revision-Date: 2020-01-31 14:40+0300\n" ++"Last-Translator: Ivan Komaritsyn \n" ++"Language-Team: \n" ++"Language: ru\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" ++"X-Generator: Gtranslator 2.91.7\n" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "Основной монитор" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "Дополнительный монитор" ++ ++#: prefs.js:309 Settings.ui.h:28 ++msgid "Right" ++msgstr "Справа" ++ ++#: prefs.js:310 Settings.ui.h:25 ++msgid "Left" ++msgstr "Слева" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "Настройка автоскрытия" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "Сбросить настройки" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "Показывать количество запущенных приложений" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "Настройка действий для средней кнопки мыши" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "Настройка индикаторов запуска" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Настроить прозрачность" ++ ++#: appIcons.js:810 ++msgid "All Windows" ++msgstr "Все окна" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1127 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Если установлено на «Минимизировать», то двойной клик минимизирует все окна " ++"данного приложения." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Действие по Shift+Click" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Показать окно" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Минимизировать окно" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Открыть новое окно" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Переключить окно приложения" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Минимизация или обзор" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Показать миниатюры окон" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Минимизация или показ миниатюр" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Минимизация или показ миниатюр" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Выйти" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Действие по нажатию средней кнопки мыши." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Действие по Middle-Click" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Действие по нажатию Shift + средняя кнопка мыши." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Действие по Shift+Middle-Click" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Включить подсветку элементов как в Unity7" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Использовать доминирующий цвет" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Настроить стиль индикатора" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Цвет" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Цвет границы" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Ширина границы" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Показывать Док на" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Показывать на всех мониторах." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Расположение на экране" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Снизу" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Сверху" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Скрывать Док, если он перекрывается окном активного приложения. Доступны " ++"дополнительные настройки." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Интеллектуальное скрытие" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Ограничение размера Дока" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Режим панели: Док растянут по всей стороне экрана" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Ограничение размера иконок" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "" ++"Фиксированный размер иконок: используйте прокрутку для доступа к нужному " ++"приложению" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Положение и размер" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Показывать избранные приложения" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Показывать запущенные приложения" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Для текущего рабочего стола." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Изолировать мониторы." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Показывать миниатюры открытых окон." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Если отключено, то эти настройки доступны в gnome-tweak-tool или через сайт " ++"дополнений." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Показывать иконку «Приложения»" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Расположить кнопку «Приложения» с другой стороны Дока." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Анимация при показе «Приложений»" ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Показывать корзину" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Показывать примонтированные разделы и устройства" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Команды" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Включить сочетания клавиш Super+(0-9) для выбора приложений. Также может " ++"быть использовано совместно с Shift и Ctrl." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Использовать сочетания клавиш для выбора приложений" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Поведение при нажатии на иконку запущенного приложения." ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Действие по нажатию" ++ ++#: Settings.ui.h:52 ++msgid "Minimize" ++msgstr "Минимизировать" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Поведение при прокрутке на иконке приложения." ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Действие при прокрутке" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Ничего не делать" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Переключить рабочий стол" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Поведение" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Сбалансированные настройки для интеграции Дока с темой Gnome по умолчанию. " ++"Ниже можно установить настройки вручную." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Использовать встроенную тему" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "" ++"Экономия рабочего пространства за счёт уменьшения промежутков и " ++"использования скругленных углов." ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Сжать Док" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "Настроить индикаторы количества окон" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "По умолчанию" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Точки" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Квадраты" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Линии" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Сегменты" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Слитно" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "Метро" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Вобор цвета фона для панели." ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Настроить цвет Дока" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Настройка прозрачности фона Дока." ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Постоянная" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Динамическая" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Непрозрачность" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner\n" ++msgstr "Не скруглять углы\n" ++ ++#: Settings.ui.h:80 ++msgid "Appearance" ++msgstr "Внешний вид" ++ ++#: Settings.ui.h:81 ++msgid "version: " ++msgstr "версия: " ++ ++#: Settings.ui.h:82 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Показывает панель из режима «Обзор» в виде дока" ++ ++#: Settings.ui.h:83 ++msgid "Created by" ++msgstr "Автор" ++ ++#: Settings.ui.h:84 ++msgid "Webpage" ++msgstr "Домашняя страница" ++ ++#: Settings.ui.h:85 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Эта программа распространяется БЕЗ КАКИХ ЛИБО " ++"ГАРАНТИЙ.\n" ++"Смотри GNU General Public License, версия 2 или позднее для информации." ++ ++#: Settings.ui.h:87 ++msgid "About" ++msgstr "О дополнении" ++ ++#: Settings.ui.h:88 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Настройка минимального и максимального значения прозрачности" ++ ++#: Settings.ui.h:89 ++msgid "Minimum opacity" ++msgstr "Минимальная прозрачность" ++ ++#: Settings.ui.h:90 ++msgid "Maximum opacity" ++msgstr "Максимальная прозрачность" ++ ++#: Settings.ui.h:91 ++msgid "Number overlay" ++msgstr "Отображение номера" ++ ++#: Settings.ui.h:92 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Временно показывать номера приложений рядом с иконками, при нажатии " ++"сочетания клавиш." ++ ++#: Settings.ui.h:93 ++msgid "Show the dock if it is hidden" ++msgstr "Показать Док, если он скрыт" ++ ++#: Settings.ui.h:94 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Если используется автоматическое скрытие, то Док кратковреммено появится при " ++"обработке сочетания клавиш." ++ ++#: Settings.ui.h:95 ++msgid "Shortcut for the options above" ++msgstr "Сочетания клавиш для указанных параметров" ++ ++#: Settings.ui.h:96 ++msgid "Syntax: , , , " ++msgstr "Синтаксис: , , , " ++ ++#: Settings.ui.h:97 ++msgid "Hide timeout (s)" ++msgstr "Задержка скрытия (сек.)" ++ ++#: Settings.ui.h:98 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Показывать Док при подведении мыши к стороне экрана." ++ ++#: Settings.ui.h:99 ++msgid "Autohide" ++msgstr "Автоматическое скрытие" ++ ++#: Settings.ui.h:100 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Давление для появления: требуется давление для открытия Дока" ++ ++#: Settings.ui.h:101 ++msgid "Enable in fullscreen mode" ++msgstr "Включить для полноэкранного режима" ++ ++#: Settings.ui.h:102 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Скрывать Док, когда он перекрыт окнами приложений" ++ ++#: Settings.ui.h:103 ++msgid "Dodge windows" ++msgstr "Перекрытие окнами" ++ ++#: Settings.ui.h:104 ++msgid "All windows" ++msgstr "Все окна" ++ ++#: Settings.ui.h:105 ++msgid "Only focused application's windows" ++msgstr "Только активное окно приложения" ++ ++#: Settings.ui.h:106 ++msgid "Only maximized windows" ++msgstr "Только развёрнутые окна" ++ ++#: Settings.ui.h:107 ++msgid "Animation duration (s)" ++msgstr "Время анимации (сек.)" ++ ++#: Settings.ui.h:108 ++msgid "Show timeout (s)" ++msgstr "Задержка открытия (сек.)" ++ ++#: Settings.ui.h:109 ++msgid "Pressure threshold" ++msgstr "Порог давления" ++ ++#~ msgid "Adaptive" ++#~ msgstr "Адаптивная" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "Отображает точку для каждого окна приложения." ++ ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "При фиксированном размере иконок приложений активна только область иконки " ++#~ "«Приложения» и край дока." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Переключать рабочие столы при прокрутке на Доке" ++ ++#~ msgid "Only consider windows of the focused application" ++#~ msgstr "Применить только к активным окнам приложений" ++ ++#~ msgid "Main Settings" ++#~ msgstr "Основные настройки" ++ ++#~ msgid "Dock Position" ++#~ msgstr "Расположение Дока" ++ ++#~ msgid "Dock is fixed and always visible" ++#~ msgstr "Док зафиксирован и всегда виден" ++ ++#~ msgid "Show delay [ms]" ++#~ msgstr "Задержка перед появлением [мс]" ++ ++#~ msgid "Hide delay [ms]" ++#~ msgstr "Задержка перед скрытием [мс]" ++ ++#~ msgid "Application based intellihide" ++#~ msgstr "Интеллектуальное скрытие действует только для активных окон" ++ ++#~ msgid "Show the dock on following monitor (if attached)" ++#~ msgstr "Показывать Док на дополнительном мониторе (если подключен)" ++ ++#~ msgid "Primary (default)" ++#~ msgstr "Главный (по умолчанию)" ++ ++#~ msgid "Max height" ++#~ msgstr "Максимальная высота" ++ ++#~ msgid "Expand (experimental and buggy)" ++#~ msgstr "Расширяемый (экспериментально и неустойчиво)" ++ ++#~ msgid "Maximum icon size" ++#~ msgstr "Максимальный размер иконки" ++ ++#~ msgid "Optional features" ++#~ msgstr "Дополнительные функции" ++ ++#~ msgid "Deadtime between each workspace switching [ms]" ++#~ msgstr "Задержка между каждым переключением [мс]" ++ ++#~ msgid "Only a 1px wide area close to the screen edge is active" ++#~ msgstr "Активная область - 1 пиксель от края экрана" ++ ++#~ msgid "All the area of the dock is active" ++#~ msgstr "Активен весь Док" ++ ++#~ msgid "Customize actions on mouse click" ++#~ msgstr "Настроить действия по нажатию мыши" ++ ++#~ msgid "Action on clicking on running app" ++#~ msgstr "Действие по нажатию на иконку запущенного приложения" ++ ++#~ msgid "Minimize window on shift+click (double click for all app windows)" ++#~ msgstr "" ++#~ "Минимизировать окно при shift+click (двойное нажатие скрывает все окна " ++#~ "приложений)" ++ ++#~ msgid "Make message tray insensitive to mouse events" ++#~ msgstr "Сделать область сообщений нечувствительной к мыши" ++ ++#~ msgid "Appearence and Themes" ++#~ msgstr "Внешний вид и Темы" ++ ++#~ msgid "" ++#~ "A customized theme is built in the extension. This is meant to work with " ++#~ "the default Adwaita theme: the dash is shrunk to save space, its " ++#~ "background transparency reduced, and custom indicators for the number of " ++#~ "windows of each application are added." ++#~ msgstr "" ++#~ "Тема встроена в расширение. Она оптимизирована для темы Adwaita по " ++#~ "умолчанию: Док уменьшен, чтобы сохранить пространство; прозрачность фона " ++#~ "снижена; включены индикаторы количества окон для каждого приложения." ++ ++#~ msgid "" ++#~ "Alternatively, for a better integration with custom themes, each " ++#~ "customization can be applied indipendently" ++#~ msgstr "" ++#~ "Для большей интеграции с пользовательской темой, каждый параметр можно " ++#~ "настроить независимо" ++ ++#~ msgid "Shrink the dash size by reducing padding" ++#~ msgstr "Уменьшить Док за счёт промежутков" +diff --git a/extensions/dash-to-dock/po/sk.po b/extensions/dash-to-dock/po/sk.po +new file mode 100644 +index 00000000..9bcd3444 +--- /dev/null ++++ b/extensions/dash-to-dock/po/sk.po +@@ -0,0 +1,454 @@ ++# Slovak translation of dash-to-dock. ++# Copyright (C) 2016 Dušan Kazik ++# This file is distributed under the same license as the PACKAGE package. ++# Dušan Kazik , 2015, 2016. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-06-04 12:35+0100\n" ++"PO-Revision-Date: 2016-07-15 12:48+0200\n" ++"Last-Translator: Dušan Kazik \n" ++"Language-Team: \n" ++"Language: sk\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 1.8.7.1\n" ++"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" ++ ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Hlavnom monitore" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Vedľajšom monitore" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "Vpravo" ++ ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "Vľavo" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Prispôsobenie inteligentného automatického skrývania" ++ ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "Obnoviť pôvodné" ++ ++#: prefs.js:386 ++#, fuzzy ++msgid "Show dock and application numbers" ++msgstr "Zobraziť spustené aplikácie" ++ ++#: prefs.js:443 ++#, fuzzy ++msgid "Customize middle-click behavior" ++msgstr "Prispôsobenie štýlu indikátorov" ++ ++#: prefs.js:514 ++msgid "Customize running indicators" ++msgstr "Prispôsobenie " ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "Všetky okná" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Prispôsobenie štýlu indikátorov" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Farba" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Farba okraja" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Šírka okraja" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++ ++#: Settings.ui.h:7 ++#, fuzzy ++msgid "Show the dock if it is hidden" ++msgstr "Zobraziť dok na" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "" ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Časový limit na skrytie (s)" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Keď je nastavené na minimalizovanie, dvojklik minimalizuje všetky okná " ++"aplikácie." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Akcia Shift+Kliknutie" ++ ++#: Settings.ui.h:14 ++#, fuzzy ++msgid "Raise window" ++msgstr "Minimalizovať okno" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Minimalizovať okno" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Spustiť novú inštanciu" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Striedať okná" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "" ++ ++#: Settings.ui.h:20 ++#, fuzzy ++msgid "Middle-Click action" ++msgstr "Akcia po kliknutí" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "" ++ ++#: Settings.ui.h:22 ++#, fuzzy ++msgid "Shift+Middle-Click action" ++msgstr "Akcia Shift+Kliknutie" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "Zobraziť dok na" ++ ++#: Settings.ui.h:24 ++#, fuzzy ++msgid "Show on all monitors." ++msgstr "Vedľajšom monitore" ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Pozícia na obrazovke" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Na spodku" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Na vrchu" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Skryť dok, keď zasahuje do okna aktuálnej aplikácie. Sú dostupné " ++"podrobnejšie nastavenia." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Inteligentné automatické skrývanie" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Limit veľkosti doku" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Režim panelu: roztiahnutie k hranám obrazovky" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Limit veľkosti ikôn" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Pevná veľkosť ikôn: rolovaním odhalíte ostatné ikony" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Pozícia a veľkosť" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Zobraziť obľúbené aplikácie" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Zobraziť spustené aplikácie" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Oddelené pracovné priestory." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "" ++ ++#: Settings.ui.h:41 ++#, fuzzy ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Ak je voľba zakázaná, nastavenia sú dostupné z nástroja na vyladenie " ++"nastavení prostredia Gnome alebo webovej stránky rozšírenia." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Zobraziť ikonu Aplikácie" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Premiestni tlačidlo aplikácií na začiatok doku." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animovať položku Zobraziť aplikácie." ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Správanie pri kliknutí na ikonu spustenej aplikácie." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Akcia po kliknutí" ++ ++#: Settings.ui.h:50 ++msgid "Minimize" ++msgstr "Minimalizovať" ++ ++#: Settings.ui.h:51 ++#, fuzzy ++msgid "Minimize or overview" ++msgstr "Minimalizovať okno" ++ ++#: Settings.ui.h:52 ++#, fuzzy ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Správanie pri kliknutí na ikonu spustenej aplikácie." ++ ++#: Settings.ui.h:53 ++#, fuzzy ++msgid "Scroll action" ++msgstr "Akcia po kliknutí" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "Nevykonať nič" ++ ++#: Settings.ui.h:55 ++#, fuzzy ++msgid "Switch workspace" ++msgstr "Oddelené pracovné priestory." ++ ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "Správanie" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Niekoľko úprav na integrovanie doku s predvolenou témou prostredia GNOME. " ++"Alternatívne môžu byť povolené špecifické voľby nižšie." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "Použiť zabudovanú tému" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "Ušetrí miesto zmenšením rádiusu odsadenia a okrajov." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "Zmenšiť panel" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "Zobrazí bodku za každé okno aplikácie." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "Zobraziť indikátory počítadiel okien" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "Nastaví farbu pozadia panelu." ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "Prispôsobenie farby panelu" ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "Vyladí krytie pozadia panelu." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "Prispôsobenie krytia" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "Krytie" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "Vzhľad" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "Verzia: c" ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Presunie panel z prehľadu transformovaním do doku" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "Vytvoril" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "Webová stránka" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Tento program je ABSOLÚTNE BEZ ZÁRUKY.\n" ++"Pre viac podrobností si pozrite Licenciu GNU General Public, verzie 2 alebo novšiu." ++ ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "O rozšírení" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Zobrazí dok prejdením myši na hranu obrazovky." ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "Automatické skrytie" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Zobraziť stlačením: vyžaduje tlak na zobrazenie doku" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "Povoliť v režime na celú obrazovku" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Zobrazí dok, keď nebude zasahovať do okien aplikácií." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "Vyhýbať sa oknám" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "Všetky okná" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "Iba zamerané okná aplikácií" ++ ++#: Settings.ui.h:86 ++msgid "Only maximized windows" ++msgstr "Iba maximalizované okná" ++ ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "Trvanie animácie (s)" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0.000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "Zobraziť časový limit (s)" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "Medza tlaku" ++ ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "S pevnou veľkosťou ikon je aktívna iba hrana doku a ikona Zobraziť " ++#~ "aplikácie." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Prepínať pracovné priestory rolovaním na doku" +diff --git a/extensions/dash-to-dock/po/sr.po b/extensions/dash-to-dock/po/sr.po +new file mode 100644 +index 00000000..af9ff533 +--- /dev/null ++++ b/extensions/dash-to-dock/po/sr.po +@@ -0,0 +1,470 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-09-16 13:45+0200\n" ++"PO-Revision-Date: 2017-09-20 18:59+0200\n" ++"Last-Translator: Слободан Терзић \n" ++"Language-Team: \n" ++"Language: sr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.0.3\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ++ ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "примарном монитору" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "секундарном монитору" ++ ++#: prefs.js:154 Settings.ui.h:31 ++msgid "Right" ++msgstr "десно" ++ ++#: prefs.js:155 Settings.ui.h:28 ++msgid "Left" ++msgstr "лево" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Поставке интелигентног аутоматског сакривања" ++ ++#: prefs.js:212 prefs.js:397 prefs.js:454 ++msgid "Reset to defaults" ++msgstr "Поврати основно" ++ ++#: prefs.js:390 ++msgid "Show dock and application numbers" ++msgstr "Прикажи док и бројеве програма" ++ ++#: prefs.js:447 ++msgid "Customize middle-click behavior" ++msgstr "Прилагоћавање понашања средњег клика" ++ ++#: prefs.js:518 ++msgid "Customize running indicators" ++msgstr "Прилагођавање индикатора покренутих" ++ ++#: appIcons.js:1144 ++msgid "All Windows" ++msgstr "Сви прозори" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1450 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s плоче/панела" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Прилагоћавање стила индикатора" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Боја" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Боја ивице" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Ширина ивице" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Бројне налепнице" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Привремено прикажи бројеве програма изнад иконица, према припадајућој " ++"пречици." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Прикажи док уколико је сакривен" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Уколико се користи аутоматско сакривање, док ће се приказати на тренутак при " ++"окидању пречице." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Пречица за горе наведене опције" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Синтакса: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Застој скривања" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Кад је постављено на минимизовање, дупли клик минимизује све прозоре " ++"програма." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Радња шифт+клика" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "издигни прозор" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "минимизуј прозор" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "покрени нови примерак" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "кружење кроз прозоре" ++ ++#: Settings.ui.h:18 ++msgid "Minimize or overview" ++msgstr "минимиуј или преглед" ++ ++#: Settings.ui.h:19 ++msgid "Show window previews" ++msgstr "прикажи сличице прозора" ++ ++#: Settings.ui.h:20 ++msgid "Quit" ++msgstr "напусти" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Middle-Click." ++msgstr "Понашање средњег клика." ++ ++#: Settings.ui.h:22 ++msgid "Middle-Click action" ++msgstr "Радња средњег клика" ++ ++#: Settings.ui.h:23 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Пoнашање шифт+средњег клика." ++ ++#: Settings.ui.h:24 ++msgid "Shift+Middle-Click action" ++msgstr "Радња шифт+средњегклика" ++ ++#: Settings.ui.h:25 ++msgid "Show the dock on" ++msgstr "Прикажи док на" ++ ++#: Settings.ui.h:26 ++msgid "Show on all monitors." ++msgstr "Прикажи на свим мониторима." ++ ++#: Settings.ui.h:27 ++msgid "Position on screen" ++msgstr "Позиција на екрану" ++ ++#: Settings.ui.h:29 ++msgid "Bottom" ++msgstr "дно" ++ ++#: Settings.ui.h:30 ++msgid "Top" ++msgstr "врх" ++ ++#: Settings.ui.h:32 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Сакриј док када је на путу прозора тренутног програма. Доступне су финије " ++"поставке." ++ ++#: Settings.ui.h:33 ++msgid "Intelligent autohide" ++msgstr "Интелигентно аутоматско сакривање" ++ ++#: Settings.ui.h:34 ++msgid "Dock size limit" ++msgstr "Ограничење величине дока" ++ ++#: Settings.ui.h:35 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Режим панела: проширен до ивица екрана" ++ ++#: Settings.ui.h:36 ++msgid "Icon size limit" ++msgstr "Ограничење величине иконица" ++ ++#: Settings.ui.h:37 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Устаљена величина иконица: клизајте за друге иконе" ++ ++#: Settings.ui.h:38 ++msgid "Position and size" ++msgstr "Позиција и величина" ++ ++#: Settings.ui.h:39 ++msgid "Show favorite applications" ++msgstr "Приказ омиљених програма" ++ ++#: Settings.ui.h:40 ++msgid "Show running applications" ++msgstr "Приказ покренутих програма" ++ ++#: Settings.ui.h:41 ++msgid "Isolate workspaces." ++msgstr "Изолуј радне просторе." ++ ++#: Settings.ui.h:42 ++msgid "Isolate monitors." ++msgstr "Изолуј мониторе." ++ ++#: Settings.ui.h:43 ++msgid "Show open windows previews." ++msgstr "Прикажи сличице отворених прозора." ++ ++#: Settings.ui.h:44 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Уколико је онемогућено, ове поставке су доступне кроз алатку за лицкање или " ++"веб сајт проширења." ++ ++#: Settings.ui.h:45 ++msgid "Show Applications icon" ++msgstr "Приказ иконице Прикажи програме" ++ ++#: Settings.ui.h:46 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Помери дугме програма на почетак дока." ++ ++#: Settings.ui.h:47 ++msgid "Animate Show Applications." ++msgstr "Анимирај приказ програма." ++ ++#: Settings.ui.h:48 ++msgid "Launchers" ++msgstr "Покретачи" ++ ++#: Settings.ui.h:49 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Укључује Супер+(0-9) као пречице за активацију програма. Такође је могуће " ++"користити уз shift и ctrl." ++ ++#: Settings.ui.h:50 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Активирај програме пречицама тастатуре" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Понашање при клику на покренути програм." ++ ++#: Settings.ui.h:52 ++msgid "Click action" ++msgstr "Радња клика" ++ ++#: Settings.ui.h:53 ++msgid "Minimize" ++msgstr "минимизуј" ++ ++#: Settings.ui.h:54 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Понашање при клизању на иконицу покренутог програма." ++ ++#: Settings.ui.h:55 ++msgid "Scroll action" ++msgstr "Радња клизања на иконицу" ++ ++#: Settings.ui.h:56 ++msgid "Do nothing" ++msgstr "ништа" ++ ++#: Settings.ui.h:57 ++msgid "Switch workspace" ++msgstr "пребаци радни простор" ++ ++#: Settings.ui.h:58 ++msgid "Behavior" ++msgstr "Понашање" ++ ++#: Settings.ui.h:59 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Неколико поставки намењених уграђивању дока у основну тему Гнома. " ++"Алтернативно, посебне поставке се могу уредити испод." ++ ++#: Settings.ui.h:60 ++msgid "Use built-in theme" ++msgstr "Користи уграђену тему" ++ ++#: Settings.ui.h:61 ++msgid "Save space reducing padding and border radius." ++msgstr "Чува простор сужавањем попуне и опсега ивица." ++ ++#: Settings.ui.h:62 ++msgid "Shrink the dash" ++msgstr "Скупи плочу" ++ ++#: Settings.ui.h:63 ++msgid "Show a dot for each windows of the application." ++msgstr "Приказује тачку за сваки прозор програма." ++ ++#: Settings.ui.h:64 ++msgid "Show windows counter indicators" ++msgstr "Приказ индикаторa бројача прозора." ++ ++#: Settings.ui.h:65 ++msgid "Set the background color for the dash." ++msgstr "Постави позадинску боју плоче." ++ ++#: Settings.ui.h:66 ++msgid "Customize the dash color" ++msgstr "Прилагоди боју плоче" ++ ++#: Settings.ui.h:67 ++msgid "Tune the dash background opacity." ++msgstr "Прилагоди прозирност позадине плоче." ++ ++#: Settings.ui.h:68 ++msgid "Customize opacity" ++msgstr "Прилагоћавање прозирности" ++ ++#: Settings.ui.h:69 ++msgid "Opacity" ++msgstr "Прозирност" ++ ++#: Settings.ui.h:70 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Укључи позадинске ефекте попут Unity7" ++ ++#: Settings.ui.h:71 ++msgid "Force straight corner\n" ++msgstr "Наметни равне углове\n" ++ ++#: Settings.ui.h:73 ++msgid "Appearance" ++msgstr "Изглед" ++ ++#: Settings.ui.h:74 ++msgid "version: " ++msgstr "верзија: " ++ ++#: Settings.ui.h:75 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Помера плочу из глобалног приказа, претварајући је у док" ++ ++#: Settings.ui.h:76 ++msgid "Created by" ++msgstr "Направи" ++ ++#: Settings.ui.h:77 ++msgid "Webpage" ++msgstr "Веб страница" ++ ++#: Settings.ui.h:78 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Овај програм се доставља БЕЗ ИКАКВИХ ГАРАНЦИЈА.\n" ++"Погледајте ГНУову Општу Јавну лиценцу, верзија 2 или каснија, за детаље." ++ ++#: Settings.ui.h:80 ++msgid "About" ++msgstr "О програму" ++ ++#: Settings.ui.h:81 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Прикажи док прелазом миша пеко ивице екрана." ++ ++#: Settings.ui.h:82 ++msgid "Autohide" ++msgstr "Аутоматско сакривање" ++ ++#: Settings.ui.h:83 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Приказ притиском: захтева притисак за приказ дока" ++ ++#: Settings.ui.h:84 ++msgid "Enable in fullscreen mode" ++msgstr "Омогући у целоекранском режиму" ++ ++#: Settings.ui.h:85 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Приказује док када није на путу прозорима програма." ++ ++#: Settings.ui.h:86 ++msgid "Dodge windows" ++msgstr "Избегавање розора" ++ ++#: Settings.ui.h:87 ++msgid "All windows" ++msgstr "Сви прозори" ++ ++#: Settings.ui.h:88 ++msgid "Only focused application's windows" ++msgstr "Само прозор фокусираног програма" ++ ++#: Settings.ui.h:89 ++msgid "Only maximized windows" ++msgstr "Само максимизовани прозори" ++ ++#: Settings.ui.h:90 ++msgid "Animation duration (s)" ++msgstr "Трајање(а) анимације" ++ ++#: Settings.ui.h:91 ++msgid "Show timeout (s)" ++msgstr "Застој приказивања" ++ ++#: Settings.ui.h:92 ++msgid "Pressure threshold" ++msgstr "Праг притиска" ++ ++#~ msgid "0.000" ++#~ msgstr "0,000" ++ ++#, fuzzy ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "Ако се иконе преклапају на доку, приказује се само икона Прикажи " ++#~ "програме." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Промена радног простора клизањем по доку" ++ ++#~ msgid "Only consider windows of the focused application" ++#~ msgstr "Разматрај само прозор фокусираног програма" +diff --git a/extensions/dash-to-dock/po/sr@latin.po b/extensions/dash-to-dock/po/sr@latin.po +new file mode 100644 +index 00000000..e7f7794f +--- /dev/null ++++ b/extensions/dash-to-dock/po/sr@latin.po +@@ -0,0 +1,469 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-09-16 13:45+0200\n" ++"PO-Revision-Date: 2017-09-20 18:56+0200\n" ++"Last-Translator: Slobodan Terzić \n" ++"Language-Team: \n" ++"Language: sr@latin\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.0.3\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ++ ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "primarnom monitoru" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "sekundarnom monitoru" ++ ++#: prefs.js:154 Settings.ui.h:31 ++msgid "Right" ++msgstr "desno" ++ ++#: prefs.js:155 Settings.ui.h:28 ++msgid "Left" ++msgstr "levo" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Postavke inteligentnog automatskog sakrivanja" ++ ++#: prefs.js:212 prefs.js:397 prefs.js:454 ++msgid "Reset to defaults" ++msgstr "Povrati osnovno" ++ ++#: prefs.js:390 ++msgid "Show dock and application numbers" ++msgstr "Prikaži dok i brojeve programa" ++ ++#: prefs.js:447 ++msgid "Customize middle-click behavior" ++msgstr "Prilagoćavanje ponašanja srednjeg klika" ++ ++#: prefs.js:518 ++msgid "Customize running indicators" ++msgstr "Prilagođavanje indikatora pokrenutih" ++ ++#: appIcons.js:1144 ++msgid "All Windows" ++msgstr "Svi prozori" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1450 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s ploče/panela" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Prilagoćavanje stila indikatora" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Boja" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Boja ivice" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Širina ivice" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Brojne nalepnice" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to the " ++"shortcut." ++msgstr "" ++"Privremeno prikaži brojeve programa iznad ikonica, prema pripadajućoj prečici." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Prikaži dok ukoliko je sakriven" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Ukoliko se koristi automatsko sakrivanje, dok će se prikazati na trenutak pri " ++"okidanju prečice." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Prečica za gore navedene opcije" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Sintaksa: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Zastoj skrivanja" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Kad je postavljeno na minimizovanje, dupli klik minimizuje sve prozore " ++"programa." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Radnja šift+klika" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "izdigni prozor" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "minimizuj prozor" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "pokreni novi primerak" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "kruženje kroz prozore" ++ ++#: Settings.ui.h:18 ++msgid "Minimize or overview" ++msgstr "minimiuj ili pregled" ++ ++#: Settings.ui.h:19 ++msgid "Show window previews" ++msgstr "prikaži sličice prozora" ++ ++#: Settings.ui.h:20 ++msgid "Quit" ++msgstr "napusti" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Middle-Click." ++msgstr "Ponašanje srednjeg klika." ++ ++#: Settings.ui.h:22 ++msgid "Middle-Click action" ++msgstr "Radnja srednjeg klika" ++ ++#: Settings.ui.h:23 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Ponašanje šift+srednjeg klika." ++ ++#: Settings.ui.h:24 ++msgid "Shift+Middle-Click action" ++msgstr "Radnja šift+srednjegklika" ++ ++#: Settings.ui.h:25 ++msgid "Show the dock on" ++msgstr "Prikaži dok na" ++ ++#: Settings.ui.h:26 ++msgid "Show on all monitors." ++msgstr "Prikaži na svim monitorima." ++ ++#: Settings.ui.h:27 ++msgid "Position on screen" ++msgstr "Pozicija na ekranu" ++ ++#: Settings.ui.h:29 ++msgid "Bottom" ++msgstr "dno" ++ ++#: Settings.ui.h:30 ++msgid "Top" ++msgstr "vrh" ++ ++#: Settings.ui.h:32 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Sakrij dok kada je na putu prozora trenutnog programa. Dostupne su finije " ++"postavke." ++ ++#: Settings.ui.h:33 ++msgid "Intelligent autohide" ++msgstr "Inteligentno automatsko sakrivanje" ++ ++#: Settings.ui.h:34 ++msgid "Dock size limit" ++msgstr "Ograničenje veličine doka" ++ ++#: Settings.ui.h:35 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Režim panela: proširen do ivica ekrana" ++ ++#: Settings.ui.h:36 ++msgid "Icon size limit" ++msgstr "Ograničenje veličine ikonica" ++ ++#: Settings.ui.h:37 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Ustaljena veličina ikonica: klizajte za druge ikone" ++ ++#: Settings.ui.h:38 ++msgid "Position and size" ++msgstr "Pozicija i veličina" ++ ++#: Settings.ui.h:39 ++msgid "Show favorite applications" ++msgstr "Prikaz omiljenih programa" ++ ++#: Settings.ui.h:40 ++msgid "Show running applications" ++msgstr "Prikaz pokrenutih programa" ++ ++#: Settings.ui.h:41 ++msgid "Isolate workspaces." ++msgstr "Izoluj radne prostore." ++ ++#: Settings.ui.h:42 ++msgid "Isolate monitors." ++msgstr "Izoluj monitore." ++ ++#: Settings.ui.h:43 ++msgid "Show open windows previews." ++msgstr "Prikaži sličice otvorenih prozora." ++ ++#: Settings.ui.h:44 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Ukoliko je onemogućeno, ove postavke su dostupne kroz alatku za lickanje ili " ++"veb sajt proširenja." ++ ++#: Settings.ui.h:45 ++msgid "Show Applications icon" ++msgstr "Prikaz ikonice Prikaži programe" ++ ++#: Settings.ui.h:46 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Pomeri dugme programa na početak doka." ++ ++#: Settings.ui.h:47 ++msgid "Animate Show Applications." ++msgstr "Animiraj prikaz programa." ++ ++#: Settings.ui.h:48 ++msgid "Launchers" ++msgstr "Pokretači" ++ ++#: Settings.ui.h:49 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Uključuje Super+(0-9) kao prečice za aktivaciju programa. Takođe je moguće " ++"koristiti uz shift i ctrl." ++ ++#: Settings.ui.h:50 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Aktiviraj programe prečicama tastature" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Ponašanje pri kliku na pokrenuti program." ++ ++#: Settings.ui.h:52 ++msgid "Click action" ++msgstr "Radnja klika" ++ ++#: Settings.ui.h:53 ++msgid "Minimize" ++msgstr "minimizuj" ++ ++#: Settings.ui.h:54 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Ponašanje pri klizanju na ikonicu pokrenutog programa." ++ ++#: Settings.ui.h:55 ++msgid "Scroll action" ++msgstr "Radnja klizanja na ikonicu" ++ ++#: Settings.ui.h:56 ++msgid "Do nothing" ++msgstr "ništa" ++ ++#: Settings.ui.h:57 ++msgid "Switch workspace" ++msgstr "prebaci radni prostor" ++ ++#: Settings.ui.h:58 ++msgid "Behavior" ++msgstr "Ponašanje" ++ ++#: Settings.ui.h:59 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Nekoliko postavki namenjenih ugrađivanju doka u osnovnu temu Gnoma. " ++"Alternativno, posebne postavke se mogu urediti ispod." ++ ++#: Settings.ui.h:60 ++msgid "Use built-in theme" ++msgstr "Koristi ugrađenu temu" ++ ++#: Settings.ui.h:61 ++msgid "Save space reducing padding and border radius." ++msgstr "Čuva prostor sužavanjem popune i opsega ivica." ++ ++#: Settings.ui.h:62 ++msgid "Shrink the dash" ++msgstr "Skupi ploču" ++ ++#: Settings.ui.h:63 ++msgid "Show a dot for each windows of the application." ++msgstr "Prikazuje tačku za svaki prozor programa." ++ ++#: Settings.ui.h:64 ++msgid "Show windows counter indicators" ++msgstr "Prikaz indikatora brojača prozora." ++ ++#: Settings.ui.h:65 ++msgid "Set the background color for the dash." ++msgstr "Postavi pozadinsku boju ploče." ++ ++#: Settings.ui.h:66 ++msgid "Customize the dash color" ++msgstr "Prilagodi boju ploče" ++ ++#: Settings.ui.h:67 ++msgid "Tune the dash background opacity." ++msgstr "Prilagodi prozirnost pozadine ploče." ++ ++#: Settings.ui.h:68 ++msgid "Customize opacity" ++msgstr "Prilagoćavanje prozirnosti" ++ ++#: Settings.ui.h:69 ++msgid "Opacity" ++msgstr "Prozirnost" ++ ++#: Settings.ui.h:70 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Uključi pozadinske efekte poput Unity7" ++ ++#: Settings.ui.h:71 ++msgid "Force straight corner\n" ++msgstr "Nametni ravne uglove\n" ++ ++#: Settings.ui.h:73 ++msgid "Appearance" ++msgstr "Izgled" ++ ++#: Settings.ui.h:74 ++msgid "version: " ++msgstr "verzija: " ++ ++#: Settings.ui.h:75 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Pomera ploču iz globalnog prikaza, pretvarajući je u dok" ++ ++#: Settings.ui.h:76 ++msgid "Created by" ++msgstr "Napravi" ++ ++#: Settings.ui.h:77 ++msgid "Webpage" ++msgstr "Veb stranica" ++ ++#: Settings.ui.h:78 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Ovaj program se dostavlja BEZ IKAKVIH GARANCIJA.\n" ++"Pogledajte GNUovu Opštu Javnu licencu, verzija 2 ili kasnija, za detalje." ++ ++#: Settings.ui.h:80 ++msgid "About" ++msgstr "O programu" ++ ++#: Settings.ui.h:81 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Prikaži dok prelazom miša peko ivice ekrana." ++ ++#: Settings.ui.h:82 ++msgid "Autohide" ++msgstr "Automatsko sakrivanje" ++ ++#: Settings.ui.h:83 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Prikaz pritiskom: zahteva pritisak za prikaz doka" ++ ++#: Settings.ui.h:84 ++msgid "Enable in fullscreen mode" ++msgstr "Omogući u celoekranskom režimu" ++ ++#: Settings.ui.h:85 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Prikazuje dok kada nije na putu prozorima programa." ++ ++#: Settings.ui.h:86 ++msgid "Dodge windows" ++msgstr "Izbegavanje rozora" ++ ++#: Settings.ui.h:87 ++msgid "All windows" ++msgstr "Svi prozori" ++ ++#: Settings.ui.h:88 ++msgid "Only focused application's windows" ++msgstr "Samo prozor fokusiranog programa" ++ ++#: Settings.ui.h:89 ++msgid "Only maximized windows" ++msgstr "Samo maksimizovani prozori" ++ ++#: Settings.ui.h:90 ++msgid "Animation duration (s)" ++msgstr "Trajanje(a) animacije" ++ ++#: Settings.ui.h:91 ++msgid "Show timeout (s)" ++msgstr "Zastoj prikazivanja" ++ ++#: Settings.ui.h:92 ++msgid "Pressure threshold" ++msgstr "Prag pritiska" ++ ++#~ msgid "0.000" ++#~ msgstr "0,000" ++ ++#, fuzzy ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "Ako se ikone preklapaju na doku, prikazuje se samo ikona Prikaži " ++#~ "programe." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Promena radnog prostora klizanjem po doku" ++ ++#~ msgid "Only consider windows of the focused application" ++#~ msgstr "Razmatraj samo prozor fokusiranog programa" +diff --git a/extensions/dash-to-dock/po/sv.po b/extensions/dash-to-dock/po/sv.po +new file mode 100644 +index 00000000..dd5b4bdb +--- /dev/null ++++ b/extensions/dash-to-dock/po/sv.po +@@ -0,0 +1,545 @@ ++# Swedish translation for dash-to-dock. ++# Copyright © 2020 dash-to-dock's COPYRIGHT HOLDER ++# This file is distributed under the same license as the dash-to-dock package. ++# Anders Jonsson , 2016. ++# Morgan Antonsson , 2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-08-03 19:27+0200\n" ++"PO-Revision-Date: 2020-08-03 19:41+0200\n" ++"Last-Translator: Morgan Antonsson \n" ++"Language-Team: \n" ++"Language: sv\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3\n" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "Primär skärm" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "Sekundär skärm " ++ ++#: prefs.js:309 Settings.ui.h:28 ++msgid "Right" ++msgstr "Höger" ++ ++#: prefs.js:310 Settings.ui.h:25 ++msgid "Left" ++msgstr "Vänster" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "Anpassning av intelligent automatiskt döljande" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "Återställ till standardvärden" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "Visa docka och programnummer" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "Anpassa mellanklicksbeteende" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "Anpassa körningsindikatorer" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Anpassa opacitet" ++ ++#: appIcons.js:797 ++msgid "All Windows" ++msgstr "Alla fönster" ++ ++#: appIcons.js:916 ++#, javascript-format ++msgid "Quit %d Windows" ++msgstr "Stäng %d fönster" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1134 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s för Dash to Dock" ++ ++#: locations.js:80 ++msgid "Trash" ++msgstr "Papperskorg" ++ ++#: locations.js:89 ++msgid "Empty Trash" ++msgstr "Töm papperskorgen" ++ ++#: locations.js:207 ++msgid "Mount" ++msgstr "Montera" ++ ++#: locations.js:250 ++msgid "Eject" ++msgstr "Mata ut" ++ ++#: locations.js:255 ++msgid "Unmount" ++msgstr "Avmontera" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Då inställd till minimera så minimerar dubbelklick alla fönster för " ++"programmet." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Skift+klick-åtgärd" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Höj fönster" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimera fönster" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Starta ny instans" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Växla mellan fönster" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimera eller visa översikt" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Visa förhandsgranskningar av fönster" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimera eller visa förhandsgranskningar" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Fokusera eller visa förhandsgranskningar" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Avsluta" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Beteende för mellanklick." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Åtgärd för mellanklick" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Beteende för skift+mellanklick." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Åtgärd för skift+mellanklick" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Aktivera bakgrundsbelysta blanka knappar" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Använd dominerande färg" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Anpassa indikatorstil" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Färg" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Kantfärg" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Kantbredd" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Visa dockan på" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Visa på alla skärmar." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Position på skärmen" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Nederkant" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Överkant" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Dölj dockan då den är i vägen för ett fönster för det aktuella programmet. " ++"Mer förfinade inställningar finns tillgängliga." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Intelligent automatiskt döljande" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Storleksgräns för docka" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Panelläge: sträck ut till skärmkanten" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Storleksgräns för ikoner" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Fast ikonstorlek: rulla för att visa dolda ikoner" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Position och storlek" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Visa favoritprogram" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Visa körande program" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Visa endast arbetsytans fönster." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Visa endast skärmens fönster." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Visa förhandsgranskningar av öppna fönster." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Om inaktiverad är dessa inställningar tillgängliga från justeringsverktyg " ++"eller webbplatsen för utökningar." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Visa Program-ikon" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Flytta programknappen till början av dockan." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animera Visa program." ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Visa papperskorgen" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Visa monterade volymer och enheter" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Programstartare" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Använd Super+(0-9) som tangentbordsgenvägar för att aktivera program. De kan " ++"även användas tillsammans med skift- och ctrl-tangenterna." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Använd tangentbordsgenvägar för att aktivera program" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Beteende då ikonen för ett körande program klickas." ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Klickåtgärd" ++ ++#: Settings.ui.h:52 ++msgid "Minimize" ++msgstr "Minimera" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Beteende vid rullning över programikon." ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Rullåtgärd" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Gör ingenting" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Byt arbetsyta" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Beteende" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Några anpassningar för att integrera dockan med GNOME:s standardtema. " ++"Alternativt kan specifika alternativ aktiveras nedan." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Använd inbyggt tema" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "Spara utrymme genom att minska utfyllnad och kantradie." ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Krymp snabbstartspanelen" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "Anpassa räknare för öppna fönster" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "Standard" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Prickar" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Kvadrater" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Streck" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Segment" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Solid" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Ställ in bakgrundsfärg för snabbstartspanelen." ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Anpassa färgen för snabbstartspanelen" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Justera opacitet för bakgrunden till snabbstartspanelen." ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Fast" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Dynamisk" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Opacitet" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner" ++msgstr "Tvinga räta hörn" ++ ++#: Settings.ui.h:79 ++msgid "Appearance" ++msgstr "Utseende" ++ ++#: Settings.ui.h:80 ++msgid "version: " ++msgstr "version: " ++ ++#: Settings.ui.h:81 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "" ++"Flyttar snabbstartspanelen från översiktsvyn och förvandlar den till en docka" ++ ++#: Settings.ui.h:82 ++msgid "Created by" ++msgstr "Skapat av" ++ ++#: Settings.ui.h:83 ++msgid "Webpage" ++msgstr "Webbsida" ++ ++#: Settings.ui.h:84 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Detta program kommer HELT UTAN GARANTI.\n" ++"Se GNU " ++"General Public License, version 2 eller senare för detaljer." ++ ++#: Settings.ui.h:86 ++msgid "About" ++msgstr "Om" ++ ++#: Settings.ui.h:87 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Anpassa minsta och högsta värden för opacitet" ++ ++#: Settings.ui.h:88 ++msgid "Minimum opacity" ++msgstr "Minsta opacitet" ++ ++#: Settings.ui.h:89 ++msgid "Maximum opacity" ++msgstr "Högsta opacitet" ++ ++#: Settings.ui.h:90 ++msgid "Number overlay" ++msgstr "Nummermarkeringar" ++ ++#: Settings.ui.h:91 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Visa tillfälligt programmens tangentbordsgenvägsnummer ovanpå dess ikoner." ++ ++#: Settings.ui.h:92 ++msgid "Show the dock if it is hidden" ++msgstr "Visa dockan om den är dold" ++ ++#: Settings.ui.h:93 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Om automatiskt döljande är aktiverat kommer dockan att synas tillfälligt när " ++"tangentbordsgenvägen triggas." ++ ++#: Settings.ui.h:94 ++msgid "Shortcut for the options above" ++msgstr "Tangentbordsgenväg för alternativen ovan" ++ ++#: Settings.ui.h:95 ++msgid "Syntax: , , , " ++msgstr "Syntax: , , , " ++ ++#: Settings.ui.h:96 ++msgid "Hide timeout (s)" ++msgstr "Tidsgräns för att dölja (s)" ++ ++#: Settings.ui.h:97 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Visa dockan genom att flytta muspekaren till skärmkanten." ++ ++#: Settings.ui.h:98 ++msgid "Autohide" ++msgstr "Dölj automatiskt" ++ ++#: Settings.ui.h:99 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Tryck för att visa: kräv tryck för att visa dockan" ++ ++#: Settings.ui.h:100 ++msgid "Enable in fullscreen mode" ++msgstr "Aktivera i helskärmsläge" ++ ++#: Settings.ui.h:101 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Visa dockan då den inte är i vägen för programfönster." ++ ++#: Settings.ui.h:102 ++msgid "Dodge windows" ++msgstr "Undvik fönster" ++ ++#: Settings.ui.h:103 ++msgid "All windows" ++msgstr "Alla fönster" ++ ++#: Settings.ui.h:104 ++msgid "Only focused application's windows" ++msgstr "Endast fokuserade programs fönster" ++ ++#: Settings.ui.h:105 ++msgid "Only maximized windows" ++msgstr "Endast maximerade fönster" ++ ++#: Settings.ui.h:106 ++msgid "Animation duration (s)" ++msgstr "Animationens varaktighet (s)" ++ ++#: Settings.ui.h:107 ++msgid "Show timeout (s)" ++msgstr "Tidsgräns för att visa (s)" ++ ++#: Settings.ui.h:108 ++msgid "Pressure threshold" ++msgstr "Tröskelvärde för tryck" +diff --git a/extensions/dash-to-dock/po/tr.po b/extensions/dash-to-dock/po/tr.po +new file mode 100644 +index 00000000..e4bf8a8b +--- /dev/null ++++ b/extensions/dash-to-dock/po/tr.po +@@ -0,0 +1,525 @@ ++# Turkish translation for dash-to-dock GNOME shell extension. ++# Copyright (C) 2015-2019, dash-to-dock'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the dash-to-dock package. ++# ++# Mustafa Akgün , 2015. ++# Çağatay Yiğit Şahin , 2016. ++# Serdar Sağlam , 2018, 2019. ++# Sabri Ünal , 2019. ++# ++# Note for all turkish translators: ++# Lütfen GNOME Shell çevirileri ile uyumlu çevirmeye gayret edelim. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: dash-to-dock master\n" ++"Report-Msgid-Bugs-To: https://github.com/micheleg/dash-to-dock\n" ++"POT-Creation-Date: 2019-10-13 08:54+0300\n" ++"PO-Revision-Date: 2019-11-11 17:21+0300\n" ++"Last-Translator: Sabri Ünal \n" ++"Language-Team: \n" ++"Language: tr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++"X-Generator: Poedit 2.0.6\n" ++ ++#: prefs.js:264 ++msgid "Primary monitor" ++msgstr "Ana ekran" ++ ++#: prefs.js:273 prefs.js:280 ++msgid "Secondary monitor " ++msgstr "İkincil ekran " ++ ++#: prefs.js:305 Settings.ui.h:28 ++msgid "Right" ++msgstr "Sağ" ++ ++#: prefs.js:306 Settings.ui.h:25 ++msgid "Left" ++msgstr "Sol" ++ ++#: prefs.js:356 ++msgid "Intelligent autohide customization" ++msgstr "Akıllı otomatik gizleme özelleştirmeleri" ++ ++#: prefs.js:363 prefs.js:556 prefs.js:612 ++msgid "Reset to defaults" ++msgstr "Varsayılan ayarlara dön" ++ ++#: prefs.js:549 ++msgid "Show dock and application numbers" ++msgstr "Rıhtımı ve uygulama sayılarını göster" ++ ++#: prefs.js:605 ++msgid "Customize middle-click behavior" ++msgstr "Orta tık davranışını özelleştir" ++ ++#: prefs.js:688 ++msgid "Customize running indicators" ++msgstr "Çalışan göstergeleri özelleştir" ++ ++#: prefs.js:800 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Matlığı özelleştir" ++ ++#: appIcons.js:809 ++msgid "All Windows" ++msgstr "Tüm Pencereler" ++ ++# %s değişkeni Ayarlar olarak çevrildiği için, bir ı harfi ekleyerek Türkçeye uyumlu hale getiriyoruz. ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1126 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %sı" ++ ++#: Settings.ui.h:1 ++msgid "When set to minimize, double clicking minimizes all the windows of the application." ++msgstr "Küçültmeye ayarlandığında, çift tıklamak uygulamanın tüm pencerelerini küçültür." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Shift + Tıklama eylemi" ++ ++# Tweak ayarlarında raise için öne çıkar kullanılmış ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Pencereyi büyüt" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Pencereyi küçült" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Yeni uygulama örneği başlat" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Pencere döngüsü" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Küçült yada genel bakış" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Pencere önizlemelerini göster" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Küçült yada önizlemeleri göster" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Odaklan veya önizlemeleri göster" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Çık" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Orta Tıklama davranışı." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Orta Tıklama eylemi" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Shift + Orta Tıklama davranışı." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Shift + Orta Tıklama eylemi" ++ ++# glossy backlit için serbest çeviri yapıldı ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Unity7 tipi parlak öğeleri etkinleştir" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Baskın rengi kullan" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Gösterge biçemini özelleştir" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Renk" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Kenarlık rengi" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Kenarlık genişliği" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Rıhtım'ı göster" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Tüm ekranlarda göster." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Ekrandaki konumu" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Alt" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Üst" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More refined settings are available." ++msgstr "Geçerli uygulamanın penceresini engellediğinde rıhtımı gizle. Daha detaylı ayarlar mevcuttur." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Akıllı gizleme" ++ ++# son limit cümlesi kasten çevrilmedi ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Rıhtım boyutu" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Panel kipi: Ekran köşelerine genişlet" ++ ++# son limit cümlesi kasten çevrilmedi ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Simge boyutu" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Sabit simge boyutu: Diğer simgeleri görmek için kaydır" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Konum ve boyut" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Sık kullanılan uygulamaları göster" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Çalışan uygulamaları göster" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Çalışma alanlarını ayır." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Ekranları ayır." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Açık pencere önizlemelerini göster." ++ ++# Anlamlı ve açıklayıcı olması için ilave değerler eklendi ++#: Settings.ui.h:41 ++msgid "If disabled, these settings are accessible from gnome-tweak-tool or the extension website." ++msgstr "" ++"Eğer kapatılmışsa, bu ayarlara GNOME İnce Ayarlar (gnome-tweak-tool) uygulamasından veya GNOME eklentileri " ++"(https://extensions.gnome.org) sitesinden ulaşılabilir." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Uygulamalar simgesini göster" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Uygulamalar simgesini rıhtım'ın başlangıcına taşı." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Uygulamalar açılırken canlandırma göster." ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Çöp kutusunu göster" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Bağlı birimleri ve aygıtları göster" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Başlatıcılar" ++ ++#: Settings.ui.h:48 ++msgid "Enable Super+(0-9) as shortcuts to activate apps. It can also be used together with Shift and Ctrl." ++msgstr "" ++"Uygulamaları etkinleştirmek için Super+(0-9) seçeneğini kısayol olarak etkinleştir. Ayrıca Shift ve Ctrl " ++"ile birlikte de kullanılabilir." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Uygulamaları etkinleştirmek için klavye kısayollarını kullan" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Çalışan bir uygulamanın simgesine tıklandığındaki davranışı." ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Tıklama eylemi" ++ ++#: Settings.ui.h:52 ++msgid "Minimize" ++msgstr "Küçült" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Bir uygulamanın simgesini kaydırdığınızdaki davranışı." ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Kaydırma eylemi" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Hiçbir şey yapma" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Çalışma alanını değiştir" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Davranış" ++ ++# Çeviri yapmak yerine, Türkçe'de anlamlı, konuma uyumlu özgün metin oluşturuldu. ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. Alternatively, specific " ++"options can be enabled below." ++msgstr "" ++"Sistemde bulunan etkin GNOME teması kullanılır ve rıhtım ona göre şekillenir. Özelleştirmek isterseniz bu " ++"menüyü kapatın." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Yerleşik temayı kullan" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "Dolgu ve kenarlığı azaltarak yer kazan." ++ ++# Shrink için genelde küçült çevirisini kullanıyoruz ama, ++# anlamlı ve eylemle uyumlu olduğu için daralt çevirisi kullanıldı ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Paneli daralt" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "Pencere sayı göstergelerini özelleştir" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "Varsayılan" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Noktalar" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Kareler" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Tireler" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Segmentler" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Kalın çizgi" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "Nokta ve çizgi" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Panel arkaplan rengini ayarla." ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Panel rengini özelleştir" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Panel arkaplan matlığını ayarla." ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Sabit" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Dinamik" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Matlık" ++ ++# Daha anlaşılır olması için serbest çeviri yapıldı ++#: Settings.ui.h:78 ++msgid "Force straight corner\n" ++msgstr "Köşeleri düzleştir\n" ++ ++#: Settings.ui.h:80 ++msgid "Appearance" ++msgstr "Görünüm" ++ ++#: Settings.ui.h:81 ++msgid "version: " ++msgstr "sürüm: " ++ ++#: Settings.ui.h:82 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Paneli genel görünümden taşır ve rıhtıma dönüştürür" ++ ++# Çeviri anlamlı olması için : eklendi ++#: Settings.ui.h:83 ++msgid "Created by" ++msgstr "Oluşturan:" ++ ++#: Settings.ui.h:84 ++msgid "Webpage" ++msgstr "Web sitesi" ++ ++#: Settings.ui.h:85 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, " ++"version 2 or later for details." ++msgstr "" ++"Bu program kesinlikle hiçbir garanti vermiyor..\n" ++"Ayrıntılar için GNU Genel Kamu Lisansı, " ++"sürüm 2 veya üstü bağlantısına bakın" ++ ++#: Settings.ui.h:87 ++msgid "About" ++msgstr "Hakkında" ++ ++# minimum and maximum değerleri çevrilmedi ++#: Settings.ui.h:88 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Matlık değerlerini özelleştir" ++ ++#: Settings.ui.h:89 ++msgid "Minimum opacity" ++msgstr "Asgari matlık" ++ ++#: Settings.ui.h:90 ++msgid "Maximum opacity" ++msgstr "Azami matlık" ++ ++#: Settings.ui.h:91 ++msgid "Number overlay" ++msgstr "Sayı yerleşimi" ++ ++#: Settings.ui.h:92 ++msgid "Temporarily show the application numbers over the icons, corresponding to the shortcut." ++msgstr "Uygulama numaralarını, karşılık gelen simgelere göre geçici olarak göster kısayol." ++ ++#: Settings.ui.h:93 ++msgid "Show the dock if it is hidden" ++msgstr "Gizlenmişse rıhtım'ı göster" ++ ++#: Settings.ui.h:94 ++msgid "If using autohide, the dock will appear for a short time when triggering the shortcut." ++msgstr "Otomatik gizleme kullanıyorsanız, kısayol tetiklendiğinde rıhtım kısa bir süre için görünür." ++ ++#: Settings.ui.h:95 ++msgid "Shortcut for the options above" ++msgstr "Yukarıdaki seçenekler için kısayol" ++ ++#: Settings.ui.h:96 ++msgid "Syntax: , , , " ++msgstr "Sözdizimi: , , , " ++ ++#: Settings.ui.h:97 ++msgid "Hide timeout (s)" ++msgstr "Gizleme zaman aşımı (s)" ++ ++#: Settings.ui.h:98 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Fare ekran köşeleri üzerindeyken rıhtım'ı göster." ++ ++#: Settings.ui.h:99 ++msgid "Autohide" ++msgstr "Otomatik gizle" ++ ++# Anlaşılması kolay olsun diye, pressure burada etki olarak çevrilmiştir ++#: Settings.ui.h:100 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Göstermek için it: Rıhtım'ın gösterilmesi için etki gerekir" ++ ++#: Settings.ui.h:101 ++msgid "Enable in fullscreen mode" ++msgstr "Tam ekran kipinde etkinleştir" ++ ++#: Settings.ui.h:102 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Uygulama penceresine engel olmadığında rıhtımı göster." ++ ++#: Settings.ui.h:103 ++msgid "Dodge windows" ++msgstr "Pencelereleri atlat" ++ ++#: Settings.ui.h:104 ++msgid "All windows" ++msgstr "Tüm pencereler" ++ ++#: Settings.ui.h:105 ++msgid "Only focused application's windows" ++msgstr "Sadece odaklanılan uygulamanın pencereleri" ++ ++#: Settings.ui.h:106 ++msgid "Only maximized windows" ++msgstr "Sadece büyütülen pencereler" ++ ++#: Settings.ui.h:107 ++msgid "Animation duration (s)" ++msgstr "Canlandırma süresi (s)" ++ ++#: Settings.ui.h:108 ++msgid "Show timeout (s)" ++msgstr "Gösterim zaman aşımı (s)" ++ ++# Anlaşılması kolay olsun diye, pressure burada etki olarak çevrilmiştir ++#: Settings.ui.h:109 ++msgid "Pressure threshold" ++msgstr "Etki eşiği" ++ ++#~ msgid "Adaptive" ++#~ msgstr "Uyarlanır" +diff --git a/extensions/dash-to-dock/po/uk_UA.po b/extensions/dash-to-dock/po/uk_UA.po +new file mode 100644 +index 00000000..3252304c +--- /dev/null ++++ b/extensions/dash-to-dock/po/uk_UA.po +@@ -0,0 +1,575 @@ ++# Ukrainian translation for dash-to-dock GNOME Shell extension ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: dash-to-dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-08-28 10:52+0300\n" ++"PO-Revision-Date: 2018-01-03 17:00+0200\n" ++"Language-Team: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ++"X-Generator: Poedit 2.0.5\n" ++"Last-Translator: \n" ++"Language: uk_UA\n" ++ ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Головний монітор" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Додатковий монітор " ++ ++#: prefs.js:154 Settings.ui.h:31 ++msgid "Right" ++msgstr "Праворуч" ++ ++#: prefs.js:155 Settings.ui.h:28 ++msgid "Left" ++msgstr "Ліворуч" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Налаштувати розумне приховування" ++ ++#: prefs.js:212 prefs.js:397 prefs.js:454 ++msgid "Reset to defaults" ++msgstr "Скинути налаштування" ++ ++#: prefs.js:390 ++msgid "Show dock and application numbers" ++msgstr "Показувати кількість активних додатків" ++ ++#: prefs.js:447 ++msgid "Customize middle-click behavior" ++msgstr "Налаштування дій середньої кнопки миші" ++ ++#: prefs.js:518 ++msgid "Customize running indicators" ++msgstr "Налаштування індикатора пускача" ++ ++#: appIcons.js:1131 ++msgid "All Windows" ++msgstr "Усі вікна" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1429 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Налаштувати вигляд індикатора" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Колір" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Колір контуру" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Товщина контуру" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Відображення номеру" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "Тимчасово показувати номери програм за сполученням клавіш." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Показувати Док, якщо він прихований" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Док з'явиться за сполученням клавіш, якщо використовується автоматичне " ++"приховування." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Сполучення клавіш для вказаних параметрів" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Синтаксис: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Затримка приховування (сек.)" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Якщо встановлено на \"Мінімізувати\", подвійний клік мінімізує усі вікна " ++"програми." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Дія за Shift+Click" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "Показати вікно" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Мінімізувати вікно" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Відкрити нове вікно" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Переключити вікно програми" ++ ++#: Settings.ui.h:18 ++msgid "Minimize or overview" ++msgstr "Мінімізувати або відобразити" ++ ++#: Settings.ui.h:19 ++msgid "Show window previews" ++msgstr "Показувати мініатюри вікон" ++ ++#: Settings.ui.h:20 ++msgid "Quit" ++msgstr "Вийти" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Middle-Click." ++msgstr "Дія при натисканні середньої кнопки миші." ++ ++#: Settings.ui.h:22 ++msgid "Middle-Click action" ++msgstr "Дія за Middle-Click" ++ ++#: Settings.ui.h:23 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Поведінка за Shift+Middle-Click." ++ ++#: Settings.ui.h:24 ++msgid "Shift+Middle-Click action" ++msgstr "Дія за Shift+Middle-Click" ++ ++#: Settings.ui.h:25 ++msgid "Show the dock on" ++msgstr "Показувати Док на" ++ ++#: Settings.ui.h:26 ++msgid "Show on all monitors." ++msgstr "Показувати Док на усіх моніторах." ++ ++#: Settings.ui.h:27 ++msgid "Position on screen" ++msgstr "Позиція на екрані" ++ ++#: Settings.ui.h:29 ++msgid "Bottom" ++msgstr "Знизу" ++ ++#: Settings.ui.h:30 ++msgid "Top" ++msgstr "Зверху" ++ ++#: Settings.ui.h:32 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Приховувати Док якщо він перекривається вікном активної програми. Доступні " ++"додаткові налаштування." ++ ++#: Settings.ui.h:33 ++msgid "Intelligent autohide" ++msgstr "Делікатне приховування" ++ ++#: Settings.ui.h:34 ++msgid "Dock size limit" ++msgstr "Обмеження розміру Дока" ++ ++#: Settings.ui.h:35 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Режим панелі: Док заповнює активну сторону екрану" ++ ++#: Settings.ui.h:36 ++msgid "Icon size limit" ++msgstr "Обмеження розміру піктограм" ++ ++#: Settings.ui.h:37 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "" ++"Фіксований розмір піктограм: використайте коліщатко миші, щоб виявити інші " ++"піктограми" ++ ++#: Settings.ui.h:38 ++msgid "Position and size" ++msgstr "Позиція та розмір" ++ ++#: Settings.ui.h:39 ++msgid "Show favorite applications" ++msgstr "Показувати закріплені програми" ++ ++#: Settings.ui.h:40 ++msgid "Show running applications" ++msgstr "Показувати запущені програми" ++ ++#: Settings.ui.h:41 ++msgid "Isolate workspaces." ++msgstr "Обмежити робочим простором." ++ ++#: Settings.ui.h:42 ++msgid "Isolate monitors." ++msgstr "Обмежити монітором." ++ ++#: Settings.ui.h:43 ++msgid "Show open windows previews." ++msgstr "Показувати мініатюри відкритих вікон." ++ ++#: Settings.ui.h:44 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Якщо відключено, ці налаштування доступні з \"gnome-tweak-tool\" або з сайту " ++"додатків." ++ ++#: Settings.ui.h:45 ++msgid "Show Applications icon" ++msgstr "Показувати піктограму Програми" ++ ++#: Settings.ui.h:46 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Кнопка \"Програми\" з іншої сторони Дока." ++ ++#: Settings.ui.h:47 ++msgid "Animate Show Applications." ++msgstr "Анімувати показ програм." ++ ++#: Settings.ui.h:48 ++msgid "Launchers" ++msgstr "Пускачі" ++ ++#: Settings.ui.h:49 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Активувати сполучення клавіш Super+(0-9) щоб вибрати програму. Можливе " ++"використання разом з Shift та Ctrl." ++ ++#: Settings.ui.h:50 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Використовувати сполучення клавіш для вибору програми" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Поведінка при натисканні на піктограму активної програми." ++ ++#: Settings.ui.h:52 ++msgid "Click action" ++msgstr "Дія при натисканні" ++ ++#: Settings.ui.h:53 ++msgid "Minimize" ++msgstr "Мінімізувати" ++ ++#: Settings.ui.h:54 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Поведінка при прокручуванні на піктограмі програми." ++ ++#: Settings.ui.h:55 ++msgid "Scroll action" ++msgstr "Дія при прокручуванні" ++ ++#: Settings.ui.h:56 ++msgid "Do nothing" ++msgstr "Нічого" ++ ++#: Settings.ui.h:57 ++msgid "Switch workspace" ++msgstr "Переключити робочій простір" ++ ++#: Settings.ui.h:58 ++msgid "Behavior" ++msgstr "Поведінка" ++ ++#: Settings.ui.h:59 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Збалансовані налаштування для інтеграції Дока з оформленням Gnome по " ++"замовчуванню. Нижче можна встановити власні параметри." ++ ++#: Settings.ui.h:60 ++msgid "Use built-in theme" ++msgstr "Використовувати стандартне оформлення" ++ ++#: Settings.ui.h:61 ++msgid "Save space reducing padding and border radius." ++msgstr "" ++"Економія робочого простору за рахунок зменшення проміжків та застосування " ++"заокруглених кутів." ++ ++#: Settings.ui.h:62 ++msgid "Shrink the dash" ++msgstr "Стиснути Док" ++ ++#: Settings.ui.h:63 ++msgid "Show a dot for each windows of the application." ++msgstr "Показує точку для кожного вікна програми." ++ ++#: Settings.ui.h:64 ++msgid "Show windows counter indicators" ++msgstr "Показує індикатори кількості вікон" ++ ++#: Settings.ui.h:65 ++msgid "Set the background color for the dash." ++msgstr "Встановити колір фону." ++ ++#: Settings.ui.h:66 ++msgid "Customize the dash color" ++msgstr "Змінити колір фону" ++ ++#: Settings.ui.h:67 ++msgid "Tune the dash background opacity." ++msgstr "Застосувати прозорість фону." ++ ++#: Settings.ui.h:68 ++msgid "Customize opacity" ++msgstr "Налаштувати прозорість" ++ ++#: Settings.ui.h:69 ++msgid "Opacity" ++msgstr "Непрозорість" ++ ++#: Settings.ui.h:70 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Застосувати підсвічування елементів як в Unity7" ++ ++#: Settings.ui.h:71 ++msgid "Force straight corner\n" ++msgstr "Прямі кути\n" ++ ++#: Settings.ui.h:73 ++msgid "Appearance" ++msgstr "Зовнішній вигляд" ++ ++#: Settings.ui.h:74 ++msgid "version: " ++msgstr "версія: " ++ ++#: Settings.ui.h:75 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Відображає панель з режиму \"Огляд\" у вигляді Дока" ++ ++#: Settings.ui.h:76 ++msgid "Created by" ++msgstr "Автор" ++ ++#: Settings.ui.h:77 ++msgid "Webpage" ++msgstr "Домашня сторінка" ++ ++#: Settings.ui.h:78 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Цей додаток розповсюджується БЕЗ БУДЬ ЯКИХ ГАРАНТИЙ.\n" ++"Дивись GNU General Public License, версія 2 або пізніше для детальної " ++"інформації." ++ ++#: Settings.ui.h:80 ++msgid "About" ++msgstr "Про додаток" ++ ++#: Settings.ui.h:81 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Показувати Док якщо курсор наблизиться до краю екрану." ++ ++#: Settings.ui.h:82 ++msgid "Autohide" ++msgstr "Автоматично приховувати" ++ ++#: Settings.ui.h:83 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Тиск для показу: потрібне сильніше притискання для відкриття Дока" ++ ++#: Settings.ui.h:84 ++msgid "Enable in fullscreen mode" ++msgstr "Застосувати для повноекранного режиму" ++ ++#: Settings.ui.h:85 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Показати Док, якщо він не заважає вікну програми у фокусі." ++ ++#: Settings.ui.h:86 ++msgid "Dodge windows" ++msgstr "Перекривання вікнами" ++ ++#: Settings.ui.h:87 ++msgid "All windows" ++msgstr "Усі вікна" ++ ++#: Settings.ui.h:88 ++msgid "Only focused application's windows" ++msgstr "Тільки вікна програми у фокусі" ++ ++#: Settings.ui.h:89 ++msgid "Only maximized windows" ++msgstr "Тільки розгорнуті вікна" ++ ++#: Settings.ui.h:90 ++msgid "Animation duration (s)" ++msgstr "Час анімації (сек.)" ++ ++#: Settings.ui.h:91 ++msgid "Show timeout (s)" ++msgstr "Затримка показу (сек.)" ++ ++#: Settings.ui.h:92 ++msgid "Pressure threshold" ++msgstr "Поріг притискання" ++ ++msgid "" ++"With fixed icon size, only the edge of the dock and the Show " ++"Applications icon are active." ++msgstr "" ++"При фіксованому розмірі піктограм програм активна тільки область піктограми " ++"«Програми» та край Дока." ++ ++msgid "Switch workspace by scrolling on the dock" ++msgstr "Змінити робочий простір при прокрутці на Доку" ++ ++msgid "Only consider windows of the focused application" ++msgstr "Застосувати тільки до вікон програм у фокусі" ++ ++msgid "Main Settings" ++msgstr "Загальні налаштування" ++ ++msgid "Dock Position" ++msgstr "Позиція Дока" ++ ++msgid "Dock is fixed and always visible" ++msgstr "Док зафіксовано та завжди на екрані" ++ ++msgid "Show delay [ms]" ++msgstr "Затримка перед появою [мс]" ++ ++msgid "Hide delay [ms]" ++msgstr "Затримка перед приховуванням [мс]" ++ ++msgid "Application based intellihide" ++msgstr "Делікатне приховування діє тільки для активних вікон" ++ ++msgid "Show the dock on following monitor (if attached)" ++msgstr "Показувати Док на додатковому моніторі (якщо під'єднано)" ++ ++msgid "Primary (default)" ++msgstr "Головний (за замовчуванням)" ++ ++msgid "1" ++msgstr "1" ++ ++msgid "2" ++msgstr "2" ++ ++msgid "3" ++msgstr "3" ++ ++msgid "4" ++msgstr "4" ++ ++msgid "Max height" ++msgstr "Максимальна висота" ++ ++msgid "Expand (experimental and buggy)" ++msgstr "Розширюється (експериментальна, можливі помилки)" ++ ++msgid "Maximum icon size" ++msgstr "Максимальній розмір піктограми" ++ ++msgid "16" ++msgstr "16" ++ ++msgid "24" ++msgstr "24" ++ ++msgid "32" ++msgstr "32" ++ ++msgid "48" ++msgstr "48" ++ ++msgid "64" ++msgstr "64" ++ ++msgid "Optional features" ++msgstr "Додаткові функції" ++ ++msgid "Deadtime between each workspace switching [ms]" ++msgstr "Затримка між кожним перемиканням [мс]" ++ ++msgid "Only a 1px wide area close to the screen edge is active" ++msgstr "Активна лише область розміром з 1 піксель, близька до краю екрана" ++ ++msgid "All the area of the dock is active" ++msgstr "Вся площа Доку активна" ++ ++msgid "Customize actions on mouse click" ++msgstr "Налаштувати дії на клік мишею" ++ ++msgid "Action on clicking on running app" ++msgstr "Дія при натисканні на запущену програму" ++ ++msgid "Minimize window on shift+click (double click for all app windows)" ++msgstr "" ++"Мінімізувати вікно за shift+click (подвійне натискання приховує усі вікна " ++"програм)" ++ ++msgid "Make message tray insensitive to mouse events" ++msgstr "Зробити область повідомлень нечутливою до миші" ++ ++msgid "Appearence and Themes" ++msgstr "Зовнішній вигляд та Теми" ++ ++msgid "" ++"A customized theme is built in the extension. This is meant to work with the " ++"default Adwaita theme: the dash is shrunk to save space, its background " ++"transparency reduced, and custom indicators for the number of windows of " ++"each application are added." ++msgstr "" ++"Тема влаштована в додаток. Вона оптимізована для теми Adwaita: Док зменшено, " ++"щоб зберегти простір; прозорість фону знижено; активні індикатори кількості " ++"вікон для кожної програми." ++ ++msgid "" ++"Alternatively, for a better integration with custom themes, each " ++"customization can be applied indipendently" ++msgstr "" ++"Для кращої інтеграцією з користувацькою темою, кожен параметр можна " ++"налаштувати незалежно" ++ ++msgid "Shrink the dash size by reducing padding" ++msgstr "Зменшити Док за рахунок проміжків" +diff --git a/extensions/dash-to-dock/po/zh_CN.po b/extensions/dash-to-dock/po/zh_CN.po +new file mode 100644 +index 00000000..cae290f7 +--- /dev/null ++++ b/extensions/dash-to-dock/po/zh_CN.po +@@ -0,0 +1,626 @@ ++# Simplified Chinese translation of dash-to-dock ++# Copyright (C) 2013 tuhaihe ++# This file is distributed under the same license as the dash-to-dock package. ++# tuhaihe <1132321739qq@gmail.com>, 2013. ++# 绿色圣光 , 2015, 2016, 2017. ++# zhmars <1403122061@qq.com>, 2019, 2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-03-23 15:33+0800\n" ++"PO-Revision-Date: 2017-08-03 22:49+0800\n" ++"Last-Translator: zhmars <1403122061@qq.com>\n" ++"Language-Team: Chinese (Simplified) <>\n" ++"Language: zh_CN\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Gtranslator 2.91.7\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "主显示器" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "副显示器" ++ ++#: prefs.js:309 Settings.ui.h:28 ++msgid "Right" ++msgstr "右侧" ++ ++#: prefs.js:310 Settings.ui.h:25 ++msgid "Left" ++msgstr "左侧" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "智能自动隐藏自定义" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "重置为默认值" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "显示 Dock 和应用程序编号" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "自定义中键点击行为" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "自定义“运行中”指示器" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "自定义不透明度" ++ ++#: appIcons.js:810 ++msgid "All Windows" ++msgstr "所有窗口" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1125 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %s" ++ ++#: locations.js:65 ++msgid "Trash" ++msgstr "回收站" ++ ++#: locations.js:74 ++msgid "Empty Trash" ++msgstr "清空回收站" ++ ++#: locations.js:189 ++msgid "Mount" ++msgstr "挂载" ++ ++#: locations.js:232 ++msgid "Eject" ++msgstr "弹出" ++ ++#: locations.js:237 ++msgid "Unmount" ++msgstr "卸载" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "当设置为最小化时,双击会最小化应用程序的所有窗口。" ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Shift+点击动作" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "提升窗口" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "最小化窗口" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "启动新实例" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "在窗口间循环" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "最小化或概览" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "显示打开窗口预览" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "最小化或显示预览" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "聚焦或显示预览" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "退出" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "中键点击的行为。" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "中键点击动作" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Shift+中键点击的行为。" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Shift+中键点击动作" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "启用类似 Unity 7 的高亮阴影" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "使用主色调" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "自定义指示器样式" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "颜色" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "边框颜色" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "边框宽度" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "显示 Dock 于" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "所有显示器上都显示" ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "屏幕中的位置" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "底部" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "顶部" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"当 Dock 会挡住当前应用程序的某个窗口时,将其隐藏。点击右侧设置按钮可以设置更" ++"多细节。" ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "智能隐藏" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Dock 大小限制" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "面板模式:延伸到屏幕边缘" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "图标大小限制" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "固定图标大小:滚动显示其它图标" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "位置和大小" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "显示收藏的应用程序" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "显示正在运行的应用程序" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "隔离工作区" ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "隔离显示器" ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "显示打开窗口预览" ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "禁用之后,可以通过 gnome-tweak-tool 或者扩展网站来访问这些设置。" ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "显示 应用程序 图标" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "将应用程序图标移至 Dock 的起始位置" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "动画方式 显示应用程序" ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "显示回收站" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "显示挂载卷和设备" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "启动器" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "启用 Super+(0-9) 作为快捷键来激活应用。也可与 Shift 和 Ctrl 一起使用。" ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "使用键盘快捷键激活应用" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "点击一个正在运行的应用程序图标时的行为。" ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "点击动作" ++ ++#: Settings.ui.h:52 ++msgid "Minimize" ++msgstr "最小化" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "在一个应用程序图标上滚动时的行为。" ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "滚动动作" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "无动作" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "切换工作区" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "行为" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"几个自定义项可以将 Dock 整合到默认 GNOME 主题中。或者,也可以启动下面的几个特" ++"殊选项。" ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "使用内置主题" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "减小填充和边框半径以节省空间。" ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "收缩 Dash" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "显示窗口个数指示器" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "默认" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "圆点" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "正方形" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "破折号" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "分段" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "设置 Dash 的背景颜色。" ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "自定义 Dash 颜色" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "调整 Dash 的背景不透明度。" ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "固定" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "动态" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "不透明度" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner" ++msgstr "强制边框直角" ++ ++#: Settings.ui.h:79 ++msgid "Appearance" ++msgstr "外观" ++ ++#: Settings.ui.h:80 ++msgid "version: " ++msgstr "版本:" ++ ++#: Settings.ui.h:81 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "让 Dash 跳出概览之外,转化为一个 Dock" ++ ++#: Settings.ui.h:82 ++msgid "Created by" ++msgstr "作者:" ++ ++#: Settings.ui.h:83 ++msgid "Webpage" ++msgstr "网站主页" ++ ++#: Settings.ui.h:84 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"本程序不提供任何担保。\n" ++"参见 GNU " ++"通用公共许可证,第二版或更高版本以了解更多细节。" ++ ++#: Settings.ui.h:86 ++msgid "About" ++msgstr "关于" ++ ++#: Settings.ui.h:87 ++msgid "Customize minimum and maximum opacity values" ++msgstr "自定义窗口最小化和最大化时 Dock 的不透明度" ++ ++#: Settings.ui.h:88 ++msgid "Minimum opacity" ++msgstr "最小化不透明度" ++ ++#: Settings.ui.h:89 ++msgid "Maximum opacity" ++msgstr "最大化不透明度" ++ ++#: Settings.ui.h:90 ++msgid "Number overlay" ++msgstr "编号覆盖" ++ ++#: Settings.ui.h:91 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "临时显示与快捷键对应的图标上的应用程序编号。" ++ ++#: Settings.ui.h:92 ++msgid "Show the dock if it is hidden" ++msgstr "若 Dock 已隐藏,将其显示" ++ ++#: Settings.ui.h:93 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "如果使用了自动隐藏,Dock 将在触发快捷键时短暂显示。" ++ ++#: Settings.ui.h:94 ++msgid "Shortcut for the options above" ++msgstr "以上选项的快捷键" ++ ++#: Settings.ui.h:95 ++msgid "Syntax: , , , " ++msgstr "语法:" ++ ++#: Settings.ui.h:96 ++msgid "Hide timeout (s)" ++msgstr "隐藏超时时间(秒)" ++ ++#: Settings.ui.h:97 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "鼠标移至屏幕边缘时显示 Dock。" ++ ++#: Settings.ui.h:98 ++msgid "Autohide" ++msgstr "自动隐藏" ++ ++#: Settings.ui.h:99 ++msgid "Push to show: require pressure to show the dock" ++msgstr "推压以显示:需要一定压力来显示 Dock" ++ ++#: Settings.ui.h:100 ++msgid "Enable in fullscreen mode" ++msgstr "在全屏模式下启用" ++ ++#: Settings.ui.h:101 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "在不妨碍应用程序窗口时,显示 Dock。" ++ ++#: Settings.ui.h:102 ++msgid "Dodge windows" ++msgstr "避开窗口" ++ ++#: Settings.ui.h:103 ++msgid "All windows" ++msgstr "所有窗口" ++ ++#: Settings.ui.h:104 ++msgid "Only focused application's windows" ++msgstr "仅焦点程序窗口" ++ ++#: Settings.ui.h:105 ++msgid "Only maximized windows" ++msgstr "仅最大化窗口" ++ ++#: Settings.ui.h:106 ++msgid "Animation duration (s)" ++msgstr "动画持续时间(秒)" ++ ++#: Settings.ui.h:107 ++msgid "Show timeout (s)" ++msgstr "显示超时时间(秒)" ++ ++#: Settings.ui.h:108 ++msgid "Pressure threshold" ++msgstr "压力阈值" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "为应用程序的每个窗口显示一个点。" ++ ++#~ msgid "0.000" ++#~ msgstr "0.000" ++ ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "如果固定了图标大小,只有 dock 边缘和“显示应用程序”图标会激活该功" ++#~ "能。" ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "通过滚动 dock 来切换工作区" ++ ++#~ msgid "Main Settings" ++#~ msgstr "主设置" ++ ++#~ msgid "Dock is fixed and always visible" ++#~ msgstr "Dock 固定且总是可见" ++ ++#~ msgid "Show delay [ms]" ++#~ msgstr "显示延迟(毫秒)" ++ ++#~ msgid "Hide delay [ms]" ++#~ msgstr "隐藏延迟(毫秒)" ++ ++#~ msgid "Application based intellihide" ++#~ msgstr "应用程序基于智能隐藏" ++ ++#~ msgid "Show the dock on following monitor (if attached)" ++#~ msgstr "Dock 将在如下显示器显示(如果已连接)" ++ ++#~ msgid "Primary (default)" ++#~ msgstr "主显示器(默认)" ++ ++#~ msgid "1" ++#~ msgstr "1" ++ ++#~ msgid "2" ++#~ msgstr "2" ++ ++#~ msgid "3" ++#~ msgstr "3" ++ ++#~ msgid "4" ++#~ msgstr "4" ++ ++#~ msgid "Max height" ++#~ msgstr "最大高度" ++ ++#~ msgid "Expand (experimental and buggy)" ++#~ msgstr "全部展开(实验阶段且存在问题)" ++ ++#~ msgid "Maximum icon size" ++#~ msgstr "最大图标尺寸" ++ ++#~ msgid "16" ++#~ msgstr "16" ++ ++#~ msgid "24" ++#~ msgstr "24" ++ ++#~ msgid "32" ++#~ msgstr "32" ++ ++#~ msgid "48" ++#~ msgstr "48" ++ ++#~ msgid "64" ++#~ msgstr "64" ++ ++#~ msgid "Optional features" ++#~ msgstr "可选功能" ++ ++#~ msgid "Only a 1px wide area close to the screen edge is active" ++#~ msgstr "仅当靠近屏幕边缘1像素宽区域时启用" ++ ++#~ msgid "All the area of the dock is active" ++#~ msgstr "Dock 全部区域时启用" ++ ++#~ msgid "Customize actions on mouse click" ++#~ msgstr "自定义鼠标点击动作" ++ ++#~ msgid "Action on clicking on running app" ++#~ msgstr "点击正在运行程序的动作" ++ ++#~ msgid "Minimize window on shift+click (double click for all app windows)" ++#~ msgstr "当按下“Shift+单击”(双击适用于全部程序窗口)时最小化窗口" ++ ++#~ msgid "Only when in autohide" ++#~ msgstr "仅当自动隐藏时" +diff --git a/extensions/dash-to-dock/po/zh_TW.po b/extensions/dash-to-dock/po/zh_TW.po +new file mode 100644 +index 00000000..84cb252a +--- /dev/null ++++ b/extensions/dash-to-dock/po/zh_TW.po +@@ -0,0 +1,542 @@ ++# Traditional Chinese translation of dash-to-dock ++# Copyright (C) 2013 micheleg ++# This file is distributed under the same license as the dash-to-dock package. ++# Cheng-Chia Tseng , 2017 ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-05-23 23:49+0800\n" ++"PO-Revision-Date: 2020-05-24 00:08+0800\n" ++"Last-Translator: Yi-Jyun Pan \n" ++"Language-Team: Chinese (Traditional) <>\n" ++"Language: zh_TW\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3.1\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "主螢幕" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "次螢幕 " ++ ++#: prefs.js:309 Settings.ui.h:28 ++msgid "Right" ++msgstr "右側" ++ ++#: prefs.js:310 Settings.ui.h:25 ++msgid "Left" ++msgstr "左側" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "自訂智慧型自動隱藏" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "重設回預設值" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "顯示 Dock 和應用程式數量" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "自訂滑鼠中鍵行為" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "自訂執行中指示器" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "自訂不透明度" ++ ++#: appIcons.js:797 ++msgid "All Windows" ++msgstr "所有視窗" ++ ++#: appIcons.js:916 ++#, javascript-format ++msgid "Quit %d Windows" ++msgstr "結束 %d 個視窗" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1134 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %s" ++ ++#: locations.js:65 ++msgid "Trash" ++msgstr "垃圾桶" ++ ++#: locations.js:74 ++msgid "Empty Trash" ++msgstr "清空垃圾桶" ++ ++#: locations.js:192 ++msgid "Mount" ++msgstr "掛載" ++ ++#: locations.js:235 ++msgid "Eject" ++msgstr "退出" ++ ++#: locations.js:240 ++msgid "Unmount" ++msgstr "卸載" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "當設定為最小化時,雙點滑鼠可將應用程式的所有視窗最小化。" ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Shift+滑鼠點按 動作" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "擡升視窗" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "最小化視窗" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "啟動新實體" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "在視窗之間循環" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "最小化或概覽" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "顯示視窗預覽" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "最小化或顯示預覽" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "聚焦或顯示預覽" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "結束" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "滑鼠中鍵的行為。" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "滑鼠中鍵動作" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Shift+滑鼠中鍵的行為。" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Shift+滑鼠中鍵動作" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "啟用 Unity7 類平滑背光項目" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "使用主色調" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "自訂指示器樣式" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "色彩" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "邊框色彩" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "邊框寬度" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Dock 顯示於" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "在所有顯示器顯示。" ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "螢幕上的位置" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "下面" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "上面" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "當 Dock 遮到目前應用程式的視窗時隱藏。可調整更多細部設定。" ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "智慧型自動隱藏" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Dock 大小限制" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "面板模式:延伸到螢幕邊緣" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "圖示大小限制" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "固定圖示大小:捲動滑鼠以揭開其他圖示" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "位置與大小" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "顯示喜愛的應用程式" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "顯示執行中應用程式" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "獨立工作區。" ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "獨立顯示器。" ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "顯示開啟視窗的預覽。" ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "若停用,這些設定值可從 gnome-tweak-tool 或擴充套件網站存取。" ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "顯示 應用程式 圖示" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "將應用程式按鈕移動到 Dock 開頭。" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "讓 顯示應用程式 有動畫。" ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "顯示垃圾桶" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "顯示掛載儲存區和裝置" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "啟動器" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"啟用 Super+(0-9) 作為啟用 App 的快捷鍵。這也可以搭配 Shift 和 Ctrl 使用。" ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "使用鍵盤快捷鍵啟用 App" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "點按執行中應用程式圖示時的行為。" ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "點按動作" ++ ++#: Settings.ui.h:52 ++msgid "Minimize" ++msgstr "最小化" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "捲動應用程式圖示時的行為。" ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "捲動動作" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "什麼都不做" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "切換工作區" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "行為" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"不自訂即代表將 Dock 與預設 GNOME 主題整合。或者可以啟用下方的特定選項。" ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "使用內建主題" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "透過縮小邊框間距及邊框半徑來節省空間。" ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "縮小 Dash" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "自訂視窗計數器的指示器" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "預設" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "圓點" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "方框" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "小槓線" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "長段線" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "實心" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "現代" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "設定 Dash 的背景色彩。" ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "自訂 Dash 色彩" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "調整 Dash 的背景不透明度。" ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "固定" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "動態" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "不透明" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner" ++msgstr "強制邊緣直角" ++ ++#: Settings.ui.h:79 ++msgid "Appearance" ++msgstr "外觀" ++ ++#: Settings.ui.h:80 ++msgid "version: " ++msgstr "版本:" ++ ++#: Settings.ui.h:81 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "將 Dash 移出概覽轉變成 Dock" ++ ++#: Settings.ui.h:82 ++msgid "Created by" ++msgstr "作者" ++ ++#: Settings.ui.h:83 ++msgid "Webpage" ++msgstr "網頁" ++ ++#: Settings.ui.h:84 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"本程式「絕無任何擔保」。\n" ++"請見 GNU " ++"通用公眾授權第 2 版,或後續版本 深入瞭解更多細節。" ++ ++#: Settings.ui.h:86 ++msgid "About" ++msgstr "關於" ++ ++#: Settings.ui.h:87 ++msgid "Customize minimum and maximum opacity values" ++msgstr "自訂最低與最高不透明值" ++ ++#: Settings.ui.h:88 ++msgid "Minimum opacity" ++msgstr "最小化不透明度" ++ ++#: Settings.ui.h:89 ++msgid "Maximum opacity" ++msgstr "最大化不透明度" ++ ++#: Settings.ui.h:90 ++msgid "Number overlay" ++msgstr "數字覆層" ++ ++#: Settings.ui.h:91 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "暫時在圖示上顯示應用程式數量,對應到快捷鍵。" ++ ++#: Settings.ui.h:92 ++msgid "Show the dock if it is hidden" ++msgstr "若隱藏時顯示 Dock" ++ ++#: Settings.ui.h:93 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "若使用自動隱藏,則觸發快捷鍵時 Dock 會出現一段時間。" ++ ++#: Settings.ui.h:94 ++msgid "Shortcut for the options above" ++msgstr "上述選項的快捷鍵" ++ ++#: Settings.ui.h:95 ++msgid "Syntax: , , , " ++msgstr "語法:, , , " ++ ++#: Settings.ui.h:96 ++msgid "Hide timeout (s)" ++msgstr "隱藏等候時間" ++ ++#: Settings.ui.h:97 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "滑鼠停駐在螢幕邊緣時顯示 Dock。" ++ ++#: Settings.ui.h:98 ++msgid "Autohide" ++msgstr "自動隱藏" ++ ++#: Settings.ui.h:99 ++msgid "Push to show: require pressure to show the dock" ++msgstr "推擠才顯示:需要一些壓力才會顯示 Dock" ++ ++#: Settings.ui.h:100 ++msgid "Enable in fullscreen mode" ++msgstr "在全螢幕模式啟用" ++ ++#: Settings.ui.h:101 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "在 Dock 不會遮到應用程式視窗時顯示。" ++ ++#: Settings.ui.h:102 ++msgid "Dodge windows" ++msgstr "躲避視窗" ++ ++#: Settings.ui.h:103 ++msgid "All windows" ++msgstr "所有視窗" ++ ++#: Settings.ui.h:104 ++msgid "Only focused application's windows" ++msgstr "僅聚焦中的應用程式視窗" ++ ++#: Settings.ui.h:105 ++msgid "Only maximized windows" ++msgstr "僅最大化的視窗" ++ ++#: Settings.ui.h:106 ++msgid "Animation duration (s)" ++msgstr "動畫時間長度" ++ ++#: Settings.ui.h:107 ++msgid "Show timeout (s)" ++msgstr "顯示等候秒數" ++ ++#: Settings.ui.h:108 ++msgid "Pressure threshold" ++msgstr "壓力閾值" ++ ++#~ msgid "Adaptive" ++#~ msgstr "自適應" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "為應用程式的每個視窗顯示圓點。" ++ ++#~ msgid "0.000" ++#~ msgstr "0.000" +diff --git a/extensions/dash-to-dock/prefs.js b/extensions/dash-to-dock/prefs.js +new file mode 100644 +index 00000000..c1e57b67 +--- /dev/null ++++ b/extensions/dash-to-dock/prefs.js +@@ -0,0 +1,838 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const GObject = imports.gi.GObject; ++const Gtk = imports.gi.Gtk; ++const Gdk = imports.gi.Gdk; ++ ++// Use __ () and N__() for the extension gettext domain, and reuse ++// the shell domain with the default _() and N_() ++const Gettext = imports.gettext.domain('gnome-shell-extensions'); ++const __ = Gettext.gettext; ++const N__ = function (e) { return e }; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++ ++const SCALE_UPDATE_TIMEOUT = 500; ++const DEFAULT_ICONS_SIZES = [128, 96, 64, 48, 32, 24, 16]; ++ ++const TransparencyMode = { ++ DEFAULT: 0, ++ FIXED: 1, ++ DYNAMIC: 3 ++}; ++ ++const RunningIndicatorStyle = { ++ DEFAULT: 0, ++ DOTS: 1, ++ SQUARES: 2, ++ DASHES: 3, ++ SEGMENTED: 4, ++ SOLID: 5, ++ CILIORA: 6, ++ METRO: 7 ++}; ++ ++// TODO: ++// function setShortcut(settings) { ++// let shortcut_text = settings.get_string('shortcut-text'); ++// let [key, mods] = Gtk.accelerator_parse(shortcut_text); ++ ++// if (Gtk.accelerator_valid(key, mods)) { ++// let shortcut = Gtk.accelerator_name(key, mods); ++// settings.set_strv('shortcut', [shortcut]); ++// } ++// else { ++// settings.set_strv('shortcut', []); ++// } ++// } ++ ++var Settings = GObject.registerClass({ ++ Implements: [Gtk.BuilderScope], ++}, class DashToDock_Settings extends GObject.Object { ++ ++ _init() { ++ super._init(); ++ ++ this._settings = ExtensionUtils.getSettings('org.gnome.shell.extensions.dash-to-dock'); ++ ++ this._rtl = (Gtk.Widget.get_default_direction() == Gtk.TextDirection.RTL); ++ ++ this._builder = new Gtk.Builder(); ++ this._builder.set_scope(this); ++ this._builder.set_translation_domain(Me.metadata['gettext-domain']); ++ this._builder.add_from_file(Me.path + '/Settings.ui'); ++ ++ this.widget = new Gtk.ScrolledWindow({ hscrollbar_policy: Gtk.PolicyType.NEVER }); ++ this._notebook = this._builder.get_object('settings_notebook'); ++ this.widget.set_child(this._notebook); ++ ++ // Timeout to delay the update of the settings ++ this._dock_size_timeout = 0; ++ this._icon_size_timeout = 0; ++ this._opacity_timeout = 0; ++ ++ this._bindSettings(); ++ } ++ ++ vfunc_create_closure(builder, handlerName, flags, connectObject) { ++ if (flags & Gtk.BuilderClosureFlags.SWAPPED) ++ throw new Error('Unsupported template signal flag "swapped"'); ++ ++ if (typeof this[handlerName] === 'undefined') ++ throw new Error(`${handlerName} is undefined`); ++ ++ return this[handlerName].bind(connectObject || this); ++ } ++ ++ dock_display_combo_changed_cb(combo) { ++ this._settings.set_int('preferred-monitor', this._monitors[combo.get_active()]); ++ } ++ ++ position_top_button_toggled_cb(button) { ++ if (button.get_active()) ++ this._settings.set_enum('dock-position', 0); ++ } ++ ++ position_right_button_toggled_cb(button) { ++ if (button.get_active()) ++ this._settings.set_enum('dock-position', 1); ++ } ++ ++ position_bottom_button_toggled_cb(button) { ++ if (button.get_active()) ++ this._settings.set_enum('dock-position', 2); ++ } ++ ++ position_left_button_toggled_cb(button) { ++ if (button.get_active()) ++ this._settings.set_enum('dock-position', 3); ++ } ++ ++ icon_size_combo_changed_cb(combo) { ++ this._settings.set_int('dash-max-icon-size', this._allIconSizes[combo.get_active()]); ++ } ++ ++ dock_size_scale_value_changed_cb(scale) { ++ // Avoid settings the size continuously ++ if (this._dock_size_timeout > 0) ++ GLib.source_remove(this._dock_size_timeout); ++ const id = this._dock_size_timeout = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, SCALE_UPDATE_TIMEOUT, () => { ++ if (id === this._dock_size_timeout) { ++ this._settings.set_double('height-fraction', scale.get_value()); ++ this._dock_size_timeout = 0; ++ return GLib.SOURCE_REMOVE; ++ } ++ }); ++ } ++ ++ icon_size_scale_value_changed_cb(scale) { ++ // Avoid settings the size consinuosly ++ if (this._icon_size_timeout > 0) ++ GLib.source_remove(this._icon_size_timeout); ++ this._icon_size_timeout = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, SCALE_UPDATE_TIMEOUT, () => { ++ log(scale.get_value()); ++ this._settings.set_int('dash-max-icon-size', scale.get_value()); ++ this._icon_size_timeout = 0; ++ return GLib.SOURCE_REMOVE; ++ }); ++ } ++ custom_opacity_scale_value_changed_cb(scale) { ++ // Avoid settings the opacity consinuosly as it's change is animated ++ if (this._opacity_timeout > 0) ++ GLib.source_remove(this._opacity_timeout); ++ this._opacity_timeout = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, SCALE_UPDATE_TIMEOUT, () => { ++ this._settings.set_double('background-opacity', scale.get_value()); ++ this._opacity_timeout = 0; ++ return GLib.SOURCE_REMOVE; ++ }); ++ } ++ min_opacity_scale_value_changed_cb(scale) { ++ // Avoid settings the opacity consinuosly as it's change is animated ++ if (this._opacity_timeout > 0) ++ GLib.source_remove(this._opacity_timeout); ++ this._opacity_timeout = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, SCALE_UPDATE_TIMEOUT, () => { ++ this._settings.set_double('min-alpha', scale.get_value()); ++ this._opacity_timeout = 0; ++ return GLib.SOURCE_REMOVE; ++ }); ++ } ++ max_opacity_scale_value_changed_cb(scale) { ++ // Avoid settings the opacity consinuosly as it's change is animated ++ if (this._opacity_timeout > 0) ++ GLib.source_remove(this._opacity_timeout); ++ this._opacity_timeout = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, SCALE_UPDATE_TIMEOUT, () => { ++ this._settings.set_double('max-alpha', scale.get_value()); ++ this._opacity_timeout = 0; ++ return GLib.SOURCE_REMOVE; ++ }); ++ } ++ ++ all_windows_radio_button_toggled_cb(button) { ++ if (button.get_active()) ++ this._settings.set_enum('intellihide-mode', 0); ++ } ++ focus_application_windows_radio_button_toggled_cb(button) { ++ if (button.get_active()) ++ this._settings.set_enum('intellihide-mode', 1); ++ } ++ maximized_windows_radio_button_toggled_cb(button) { ++ if (button.get_active()) ++ this._settings.set_enum('intellihide-mode', 2); ++ } ++ ++ ++ _bindSettings() { ++ // Position and size panel ++ ++ // Monitor options ++ ++ this._monitors = []; ++ // Build options based on the number of monitors and the current settings. ++ let monitors = Gdk.Display.get_default().get_monitors(); ++ let n_monitors = monitors.length; ++ let primary_monitor = 0; // Gdk.Screen.get_default().get_primary_monitor(); ++ ++ let monitor = this._settings.get_int('preferred-monitor'); ++ ++ // Add primary monitor with index 0, because in GNOME Shell the primary monitor is always 0 ++ this._builder.get_object('dock_monitor_combo').append_text(__('Primary monitor')); ++ this._monitors.push(0); ++ ++ // Add connected monitors ++ let ctr = 0; ++ for (let i = 0; i < n_monitors; i++) { ++ if (i !== primary_monitor) { ++ ctr++; ++ this._monitors.push(ctr); ++ this._builder.get_object('dock_monitor_combo').append_text(__('Secondary monitor ') + ctr); ++ } ++ } ++ ++ // If one of the external monitor is set as preferred, show it even if not attached ++ if ((monitor >= n_monitors) && (monitor !== primary_monitor)) { ++ this._monitors.push(monitor) ++ this._builder.get_object('dock_monitor_combo').append_text(__('Secondary monitor ') + ++ctr); ++ } ++ ++ this._builder.get_object('dock_monitor_combo').set_active(this._monitors.indexOf(monitor)); ++ ++ // Position option ++ let position = this._settings.get_enum('dock-position'); ++ ++ switch (position) { ++ case 0: ++ this._builder.get_object('position_top_button').set_active(true); ++ break; ++ case 1: ++ this._builder.get_object('position_right_button').set_active(true); ++ break; ++ case 2: ++ this._builder.get_object('position_bottom_button').set_active(true); ++ break; ++ case 3: ++ this._builder.get_object('position_left_button').set_active(true); ++ break; ++ } ++ ++ if (this._rtl) { ++ /* Left is Right in rtl as a setting */ ++ this._builder.get_object('position_left_button').set_label(__('Right')); ++ this._builder.get_object('position_right_button').set_label(__('Left')); ++ } ++ ++ // Intelligent autohide options ++ this._settings.bind('dock-fixed', ++ this._builder.get_object('intelligent_autohide_switch'), ++ 'active', ++ Gio.SettingsBindFlags.INVERT_BOOLEAN); ++ this._settings.bind('dock-fixed', ++ this._builder.get_object('intelligent_autohide_button'), ++ 'sensitive', ++ Gio.SettingsBindFlags.INVERT_BOOLEAN); ++ this._settings.bind('autohide', ++ this._builder.get_object('autohide_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('autohide-in-fullscreen', ++ this._builder.get_object('autohide_enable_in_fullscreen_checkbutton'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('require-pressure-to-show', ++ this._builder.get_object('require_pressure_checkbutton'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('intellihide', ++ this._builder.get_object('intellihide_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('animation-time', ++ this._builder.get_object('animation_duration_spinbutton'), ++ 'value', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('hide-delay', ++ this._builder.get_object('hide_timeout_spinbutton'), ++ 'value', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('show-delay', ++ this._builder.get_object('show_timeout_spinbutton'), ++ 'value', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('pressure-threshold', ++ this._builder.get_object('pressure_threshold_spinbutton'), ++ 'value', ++ Gio.SettingsBindFlags.DEFAULT); ++ ++ //this._builder.get_object('animation_duration_spinbutton').set_value(this._settings.get_double('animation-time')); ++ ++ // Create dialog for intelligent autohide advanced settings ++ this._builder.get_object('intelligent_autohide_button').connect('clicked', () => { ++ ++ let dialog = new Gtk.Dialog({ ++ title: __('Intelligent autohide customization'), ++ transient_for: this.widget.get_root(), ++ use_header_bar: true, ++ modal: true ++ }); ++ ++ // GTK+ leaves positive values for application-defined response ids. ++ // Use +1 for the reset action ++ dialog.add_button(__('Reset to defaults'), 1); ++ ++ let box = this._builder.get_object('intelligent_autohide_advanced_settings_box'); ++ dialog.get_content_area().append(box); ++ ++ this._settings.bind('intellihide', ++ this._builder.get_object('intellihide_mode_box'), ++ 'sensitive', ++ Gio.SettingsBindFlags.GET); ++ ++ // intellihide mode ++ ++ let intellihideModeRadioButtons = [ ++ this._builder.get_object('all_windows_radio_button'), ++ this._builder.get_object('focus_application_windows_radio_button'), ++ this._builder.get_object('maximized_windows_radio_button') ++ ]; ++ ++ intellihideModeRadioButtons[this._settings.get_enum('intellihide-mode')].set_active(true); ++ ++ this._settings.bind('autohide', ++ this._builder.get_object('require_pressure_checkbutton'), ++ 'sensitive', ++ Gio.SettingsBindFlags.GET); ++ ++ this._settings.bind('autohide', ++ this._builder.get_object('autohide_enable_in_fullscreen_checkbutton'), ++ 'sensitive', ++ Gio.SettingsBindFlags.GET); ++ ++ this._settings.bind('require-pressure-to-show', ++ this._builder.get_object('show_timeout_spinbutton'), ++ 'sensitive', ++ Gio.SettingsBindFlags.INVERT_BOOLEAN); ++ this._settings.bind('require-pressure-to-show', ++ this._builder.get_object('show_timeout_label'), ++ 'sensitive', ++ Gio.SettingsBindFlags.INVERT_BOOLEAN); ++ this._settings.bind('require-pressure-to-show', ++ this._builder.get_object('pressure_threshold_spinbutton'), ++ 'sensitive', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('require-pressure-to-show', ++ this._builder.get_object('pressure_threshold_label'), ++ 'sensitive', ++ Gio.SettingsBindFlags.DEFAULT); ++ ++ dialog.connect('response', (dialog, id) => { ++ if (id == 1) { ++ // restore default settings for the relevant keys ++ let keys = ['intellihide', 'autohide', 'intellihide-mode', 'autohide-in-fullscreen', 'require-pressure-to-show', ++ 'animation-time', 'show-delay', 'hide-delay', 'pressure-threshold']; ++ keys.forEach(function (val) { ++ this._settings.set_value(val, this._settings.get_default_value(val)); ++ }, this); ++ intellihideModeRadioButtons[this._settings.get_enum('intellihide-mode')].set_active(true); ++ } else { ++ // remove the settings box so it doesn't get destroyed; ++ dialog.get_content_area().remove(box); ++ dialog.destroy(); ++ } ++ return; ++ }); ++ ++ dialog.present(); ++ ++ }); ++ ++ // size options ++ const dock_size_scale = this._builder.get_object('dock_size_scale'); ++ dock_size_scale.set_value(this._settings.get_double('height-fraction')); ++ dock_size_scale.add_mark(0.9, Gtk.PositionType.TOP, null); ++ dock_size_scale.set_format_value_func((_, value) => { ++ return Math.round(value * 100) + ' %'; ++ }); ++ let icon_size_scale = this._builder.get_object('icon_size_scale'); ++ icon_size_scale.set_range(8, DEFAULT_ICONS_SIZES[0]); ++ icon_size_scale.set_value(this._settings.get_int('dash-max-icon-size')); ++ DEFAULT_ICONS_SIZES.forEach(function (val) { ++ icon_size_scale.add_mark(val, Gtk.PositionType.TOP, val.toString()); ++ }); ++ icon_size_scale.set_format_value_func((_, value) => { ++ return value + ' px'; ++ }); ++ ++ // Corrent for rtl languages ++ if (this._rtl) { ++ // Flip value position: this is not done automatically ++ dock_size_scale.set_value_pos(Gtk.PositionType.LEFT); ++ icon_size_scale.set_value_pos(Gtk.PositionType.LEFT); ++ // I suppose due to a bug, having a more than one mark and one above a value of 100 ++ // makes the rendering of the marks wrong in rtl. This doesn't happen setting the scale as not flippable ++ // and then manually inverting it ++ icon_size_scale.set_flippable(false); ++ icon_size_scale.set_inverted(true); ++ } ++ ++ this._settings.bind('icon-size-fixed', this._builder.get_object('icon_size_fixed_checkbutton'), 'active', Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('extend-height', this._builder.get_object('dock_size_extend_checkbutton'), 'active', Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('extend-height', this._builder.get_object('dock_size_scale'), 'sensitive', Gio.SettingsBindFlags.INVERT_BOOLEAN); ++ ++ ++ // Apps panel ++ ++ this._settings.bind('show-running', ++ this._builder.get_object('show_running_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('isolate-workspaces', ++ this._builder.get_object('application_button_isolation_button'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('isolate-monitors', ++ this._builder.get_object('application_button_monitor_isolation_button'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('show-windows-preview', ++ this._builder.get_object('windows_preview_button'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('multi-monitor', ++ this._builder.get_object('multi_monitor_button'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('show-favorites', ++ this._builder.get_object('show_favorite_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('show-trash', ++ this._builder.get_object('show_trash_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('show-mounts', ++ this._builder.get_object('show_mounts_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('show-show-apps-button', ++ this._builder.get_object('show_applications_button_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('show-apps-at-top', ++ this._builder.get_object('application_button_first_button'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('show-show-apps-button', ++ this._builder.get_object('application_button_first_button'), ++ 'sensitive', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('animate-show-apps', ++ this._builder.get_object('application_button_animation_button'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('show-show-apps-button', ++ this._builder.get_object('application_button_animation_button'), ++ 'sensitive', ++ Gio.SettingsBindFlags.DEFAULT); ++ ++ ++ // Behavior panel ++ ++ this._settings.bind('hot-keys', ++ this._builder.get_object('hot_keys_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('hot-keys', ++ this._builder.get_object('overlay_button'), ++ 'sensitive', ++ Gio.SettingsBindFlags.DEFAULT); ++ ++ this._builder.get_object('click_action_combo').set_active(this._settings.get_enum('click-action')); ++ this._builder.get_object('click_action_combo').connect('changed', (widget) => { ++ this._settings.set_enum('click-action', widget.get_active()); ++ }); ++ ++ this._builder.get_object('scroll_action_combo').set_active(this._settings.get_enum('scroll-action')); ++ this._builder.get_object('scroll_action_combo').connect('changed', (widget) => { ++ this._settings.set_enum('scroll-action', widget.get_active()); ++ }); ++ ++ this._builder.get_object('shift_click_action_combo').connect('changed', (widget) => { ++ this._settings.set_enum('shift-click-action', widget.get_active()); ++ }); ++ ++ this._builder.get_object('middle_click_action_combo').connect('changed', (widget) => { ++ this._settings.set_enum('middle-click-action', widget.get_active()); ++ }); ++ this._builder.get_object('shift_middle_click_action_combo').connect('changed', (widget) => { ++ this._settings.set_enum('shift-middle-click-action', widget.get_active()); ++ }); ++ ++ // Create dialog for number overlay options ++ this._builder.get_object('overlay_button').connect('clicked', () => { ++ ++ let dialog = new Gtk.Dialog({ ++ title: __('Show dock and application numbers'), ++ transient_for: this.widget.get_root(), ++ use_header_bar: true, ++ modal: true ++ }); ++ ++ // GTK+ leaves positive values for application-defined response ids. ++ // Use +1 for the reset action ++ dialog.add_button(__('Reset to defaults'), 1); ++ ++ let box = this._builder.get_object('box_overlay_shortcut'); ++ dialog.get_content_area().append(box); ++ ++ this._builder.get_object('overlay_switch').set_active(this._settings.get_boolean('hotkeys-overlay')); ++ this._builder.get_object('show_dock_switch').set_active(this._settings.get_boolean('hotkeys-show-dock')); ++ ++ // We need to update the shortcut 'strv' when the text is modified ++ this._settings.connect('changed::shortcut-text', () => { setShortcut(this._settings); }); ++ this._settings.bind('shortcut-text', ++ this._builder.get_object('shortcut_entry'), ++ 'text', ++ Gio.SettingsBindFlags.DEFAULT); ++ ++ this._settings.bind('hotkeys-overlay', ++ this._builder.get_object('overlay_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('hotkeys-show-dock', ++ this._builder.get_object('show_dock_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('shortcut-timeout', ++ this._builder.get_object('timeout_spinbutton'), ++ 'value', ++ Gio.SettingsBindFlags.DEFAULT); ++ ++ dialog.connect('response', (dialog, id) => { ++ if (id == 1) { ++ // restore default settings for the relevant keys ++ let keys = ['shortcut-text', 'hotkeys-overlay', 'hotkeys-show-dock', 'shortcut-timeout']; ++ keys.forEach(function (val) { ++ this._settings.set_value(val, this._settings.get_default_value(val)); ++ }, this); ++ } else { ++ // remove the settings box so it doesn't get destroyed; ++ dialog.get_content_area().remove(box); ++ dialog.destroy(); ++ } ++ return; ++ }); ++ ++ dialog.present(); ++ }); ++ ++ // Create dialog for middle-click options ++ this._builder.get_object('middle_click_options_button').connect('clicked', () => { ++ ++ let dialog = new Gtk.Dialog({ ++ title: __('Customize middle-click behavior'), ++ transient_for: this.widget.get_root(), ++ use_header_bar: true, ++ modal: true ++ }); ++ ++ // GTK+ leaves positive values for application-defined response ids. ++ // Use +1 for the reset action ++ dialog.add_button(__('Reset to defaults'), 1); ++ ++ let box = this._builder.get_object('box_middle_click_options'); ++ dialog.get_content_area().append(box); ++ ++ this._builder.get_object('shift_click_action_combo').set_active(this._settings.get_enum('shift-click-action')); ++ ++ this._builder.get_object('middle_click_action_combo').set_active(this._settings.get_enum('middle-click-action')); ++ ++ this._builder.get_object('shift_middle_click_action_combo').set_active(this._settings.get_enum('shift-middle-click-action')); ++ ++ this._settings.bind('shift-click-action', ++ this._builder.get_object('shift_click_action_combo'), ++ 'active-id', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('middle-click-action', ++ this._builder.get_object('middle_click_action_combo'), ++ 'active-id', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('shift-middle-click-action', ++ this._builder.get_object('shift_middle_click_action_combo'), ++ 'active-id', ++ Gio.SettingsBindFlags.DEFAULT); ++ ++ dialog.connect('response', (dialog, id) => { ++ if (id == 1) { ++ // restore default settings for the relevant keys ++ let keys = ['shift-click-action', 'middle-click-action', 'shift-middle-click-action']; ++ keys.forEach(function (val) { ++ this._settings.set_value(val, this._settings.get_default_value(val)); ++ }, this); ++ this._builder.get_object('shift_click_action_combo').set_active(this._settings.get_enum('shift-click-action')); ++ this._builder.get_object('middle_click_action_combo').set_active(this._settings.get_enum('middle-click-action')); ++ this._builder.get_object('shift_middle_click_action_combo').set_active(this._settings.get_enum('shift-middle-click-action')); ++ } else { ++ // remove the settings box so it doesn't get destroyed; ++ dialog.get_content_area().remove(box); ++ dialog.destroy(); ++ } ++ return; ++ }); ++ ++ dialog.present(); ++ ++ }); ++ ++ // Appearance Panel ++ ++ this._settings.bind('apply-custom-theme', this._builder.get_object('customize_theme'), 'sensitive', Gio.SettingsBindFlags.INVERT_BOOLEAN | Gio.SettingsBindFlags.GET); ++ this._settings.bind('apply-custom-theme', this._builder.get_object('builtin_theme_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('custom-theme-shrink', this._builder.get_object('shrink_dash_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); ++ ++ // Running indicators ++ this._builder.get_object('running_indicators_combo').set_active( ++ this._settings.get_enum('running-indicator-style') ++ ); ++ this._builder.get_object('running_indicators_combo').connect( ++ 'changed', ++ (widget) => { ++ this._settings.set_enum('running-indicator-style', widget.get_active()); ++ } ++ ); ++ ++ if (this._settings.get_enum('running-indicator-style') == RunningIndicatorStyle.DEFAULT) ++ this._builder.get_object('running_indicators_advance_settings_button').set_sensitive(false); ++ ++ this._settings.connect('changed::running-indicator-style', () => { ++ if (this._settings.get_enum('running-indicator-style') == RunningIndicatorStyle.DEFAULT) ++ this._builder.get_object('running_indicators_advance_settings_button').set_sensitive(false); ++ else ++ this._builder.get_object('running_indicators_advance_settings_button').set_sensitive(true); ++ }); ++ ++ // Create dialog for running indicators advanced settings ++ this._builder.get_object('running_indicators_advance_settings_button').connect('clicked', () => { ++ ++ let dialog = new Gtk.Dialog({ ++ title: __('Customize running indicators'), ++ transient_for: this.widget.get_root(), ++ use_header_bar: true, ++ modal: true ++ }); ++ ++ let box = this._builder.get_object('running_dots_advance_settings_box'); ++ dialog.get_content_area().append(box); ++ ++ this._settings.bind('running-indicator-dominant-color', ++ this._builder.get_object('dominant_color_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ ++ this._settings.bind('custom-theme-customize-running-dots', ++ this._builder.get_object('dot_style_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('custom-theme-customize-running-dots', ++ this._builder.get_object('dot_style_settings_box'), ++ 'sensitive', Gio.SettingsBindFlags.DEFAULT); ++ ++ let rgba = new Gdk.RGBA(); ++ rgba.parse(this._settings.get_string('custom-theme-running-dots-color')); ++ this._builder.get_object('dot_color_colorbutton').set_rgba(rgba); ++ ++ this._builder.get_object('dot_color_colorbutton').connect('notify::rgba', (button) => { ++ let css = button.rgba.to_string(); ++ ++ this._settings.set_string('custom-theme-running-dots-color', css); ++ }); ++ ++ rgba.parse(this._settings.get_string('custom-theme-running-dots-border-color')); ++ this._builder.get_object('dot_border_color_colorbutton').set_rgba(rgba); ++ ++ this._builder.get_object('dot_border_color_colorbutton').connect('notify::rgba', (button) => { ++ let css = button.rgba.to_string(); ++ ++ this._settings.set_string('custom-theme-running-dots-border-color', css); ++ }); ++ ++ this._settings.bind('custom-theme-running-dots-border-width', ++ this._builder.get_object('dot_border_width_spin_button'), ++ 'value', ++ Gio.SettingsBindFlags.DEFAULT); ++ ++ ++ dialog.connect('response', (dialog, id) => { ++ // remove the settings box so it doesn't get destroyed; ++ dialog.get_content_area().remove(box); ++ dialog.destroy(); ++ return; ++ }); ++ ++ dialog.present(); ++ ++ }); ++ ++ this._settings.bind('custom-background-color', this._builder.get_object('custom_background_color_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('custom-background-color', this._builder.get_object('custom_background_color'), 'sensitive', Gio.SettingsBindFlags.DEFAULT); ++ ++ let rgba = new Gdk.RGBA(); ++ rgba.parse(this._settings.get_string('background-color')); ++ this._builder.get_object('custom_background_color').set_rgba(rgba); ++ ++ this._builder.get_object('custom_background_color').connect('notify::rgba', (button) => { ++ let css = button.rgba.to_string(); ++ ++ this._settings.set_string('background-color', css); ++ }); ++ ++ // Opacity ++ this._builder.get_object('customize_opacity_combo').set_active_id( ++ this._settings.get_enum('transparency-mode').toString() ++ ); ++ this._builder.get_object('customize_opacity_combo').connect( ++ 'changed', ++ (widget) => { ++ this._settings.set_enum('transparency-mode', parseInt(widget.get_active_id())); ++ } ++ ); ++ ++ const custom_opacity_scale = this._builder.get_object('custom_opacity_scale'); ++ custom_opacity_scale.set_value(this._settings.get_double('background-opacity')); ++ custom_opacity_scale.set_format_value_func((_, value) => { ++ return Math.round(value * 100) + '%'; ++ }); ++ ++ if (this._settings.get_enum('transparency-mode') !== TransparencyMode.FIXED) ++ this._builder.get_object('custom_opacity_scale').set_sensitive(false); ++ ++ this._settings.connect('changed::transparency-mode', () => { ++ if (this._settings.get_enum('transparency-mode') !== TransparencyMode.FIXED) ++ this._builder.get_object('custom_opacity_scale').set_sensitive(false); ++ else ++ this._builder.get_object('custom_opacity_scale').set_sensitive(true); ++ }); ++ ++ if (this._settings.get_enum('transparency-mode') !== TransparencyMode.DYNAMIC) { ++ this._builder.get_object('dynamic_opacity_button').set_sensitive(false); ++ } ++ ++ this._settings.connect('changed::transparency-mode', () => { ++ if (this._settings.get_enum('transparency-mode') !== TransparencyMode.DYNAMIC) { ++ this._builder.get_object('dynamic_opacity_button').set_sensitive(false); ++ } ++ else { ++ this._builder.get_object('dynamic_opacity_button').set_sensitive(true); ++ } ++ }); ++ ++ // Create dialog for transparency advanced settings ++ this._builder.get_object('dynamic_opacity_button').connect('clicked', () => { ++ ++ let dialog = new Gtk.Dialog({ ++ title: __('Customize opacity'), ++ transient_for: this.widget.get_root(), ++ use_header_bar: true, ++ modal: true ++ }); ++ ++ let box = this._builder.get_object('advanced_transparency_dialog'); ++ dialog.get_content_area().append(box); ++ ++ this._settings.bind( ++ 'customize-alphas', ++ this._builder.get_object('customize_alphas_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT ++ ); ++ this._settings.bind( ++ 'customize-alphas', ++ this._builder.get_object('min_alpha_scale'), ++ 'sensitive', ++ Gio.SettingsBindFlags.DEFAULT ++ ); ++ this._settings.bind( ++ 'customize-alphas', ++ this._builder.get_object('max_alpha_scale'), ++ 'sensitive', ++ Gio.SettingsBindFlags.DEFAULT ++ ); ++ ++ const min_alpha_scale = this._builder.get_object('min_alpha_scale'); ++ const max_alpha_scale = this._builder.get_object('max_alpha_scale'); ++ min_alpha_scale.set_value( ++ this._settings.get_double('min-alpha') ++ ); ++ min_alpha_scale.set_format_value_func((_, value) => { ++ return Math.round(value * 100) + ' %'; ++ }); ++ max_alpha_scale.set_format_value_func((_, value) => { ++ return Math.round(value * 100) + ' %'; ++ }); ++ ++ max_alpha_scale.set_value( ++ this._settings.get_double('max-alpha') ++ ); ++ ++ dialog.connect('response', (dialog, id) => { ++ // remove the settings box so it doesn't get destroyed; ++ dialog.get_content_area().remove(box); ++ dialog.destroy(); ++ return; ++ }); ++ ++ dialog.present(); ++ }); ++ ++ ++ this._settings.bind('unity-backlit-items', ++ this._builder.get_object('unity_backlit_items_switch'), ++ 'active', Gio.SettingsBindFlags.DEFAULT ++ ); ++ ++ this._settings.bind('force-straight-corner', ++ this._builder.get_object('force_straight_corner_switch'), ++ 'active', Gio.SettingsBindFlags.DEFAULT); ++ ++ // About Panel ++ ++ this._builder.get_object('extension_version').set_label(Me.metadata.version.toString()); ++ } ++}); ++ ++function init() { ++ ExtensionUtils.initTranslations(); ++} ++ ++function buildPrefsWidget() { ++ let settings = new Settings(); ++ let widget = settings.widget; ++ if (widget.show_all) widget.show_all(); ++ return widget; ++} +diff --git a/extensions/dash-to-dock/schemas/org.gnome.shell.extensions.dash-to-dock.gschema.xml b/extensions/dash-to-dock/schemas/org.gnome.shell.extensions.dash-to-dock.gschema.xml +new file mode 100644 +index 00000000..54dd9f21 +--- /dev/null ++++ b/extensions/dash-to-dock/schemas/org.gnome.shell.extensions.dash-to-dock.gschema.xml +@@ -0,0 +1,551 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 'BOTTOM' ++ Dock position ++ Dock is shown on the Left, Right, Top or Bottom side of the screen. ++ ++ ++ 0.2 ++ Animation time ++ Sets the time duration of the autohide effect. ++ ++ ++ 0.25 ++ Show delay ++ Sets the delay after the mouse reaches the screen border before showing the dock. ++ ++ ++ 0.20 ++ Show delay ++ Sets the delay after the mouse left the dock before hiding it. ++ ++ ++ false ++ Set a custom dash background background color ++ Sets the color for the dash background. ++ ++ ++ "#ffffff" ++ Dash background color. ++ Customize the background color of the dash. ++ ++ ++ 'DEFAULT' ++ Transparency mode for the dock ++ FIXED: constant transparency. DYNAMIC: dock takes the opaque style only when windows are close to it. ++ ++ ++ 'DEFAULT' ++ ... ++ DEFAULT: .... DOTS: .... ++ ++ ++ false ++ Use application icon dominant color for the indicator color ++ ++ ++ ++ false ++ Manually set the min and max opacity ++ For the dynamic mode, the min/max opacity values will be given by 'min-alpha' and 'max-alpha'. ++ ++ ++ 0.2 ++ Opacity of the dash background when free-floating ++ Sets the opacity of the dash background when no windows are close. ++ ++ ++ 0.8 ++ Opacity of the dash background when windows are close. ++ Sets the opacity of the dash background when windows are close. ++ ++ ++ 0.8 ++ Opacity of the dash background ++ Sets the opacity of the dash background when in autohide mode. ++ ++ ++ true ++ Dock dodges windows ++ Enable or disable intellihide mode ++ ++ ++ 'FOCUS_APPLICATION_WINDOWS' ++ Define which windows are considered for intellihide. ++ ++ ++ ++ true ++ Dock shown on mouse over ++ Enable or disable autohide mode ++ ++ ++ true ++ Require pressure to show dash ++ Enable or disable requiring pressure to show the dash ++ ++ ++ 100 ++ Pressure threshold ++ Sets how much pressure is needed to show the dash. ++ ++ ++ false ++ Enable autohide in fullscreen mode. ++ Enable autohide in fullscreen mode. ++ ++ ++ false ++ Dock always visible ++ Dock is always visible ++ ++ ++ true ++ Switch workspace by scrolling over the dock ++ Add the possibility to switch workspace by mouse scrolling over the dock. ++ ++ ++ 48 ++ Maximum dash icon size ++ Set the allowed maximum dash icon size. Allowed range: 16..64. ++ ++ ++ false ++ Fixed icon size ++ Keep the icon size fived by scrolling the dock. ++ ++ ++ false ++ Apply custom theme ++ Apply customization to the dash appearance ++ ++ ++ false ++ TODO ++ TODO ++ ++ ++ false ++ Customize the style of the running application indicators. ++ Customize the style of the running application indicators. ++ ++ ++ "#ffffff" ++ Running application indicators color ++ Customize the color of the running application indicators. ++ ++ ++ "#ffffff" ++ Running application indicators border color. ++ Customize the border color of the running application indicators. ++ ++ ++ 0 ++ Running application indicators border width. ++ Customize the border width of the running application indicators. ++ ++ ++ true ++ Show running apps ++ Show or hide running applications icons in the dash ++ ++ ++ false ++ Provide workspace isolation ++ Dash shows only windows from the currentworkspace ++ ++ ++ false ++ Provide monitor isolation ++ Dash shows only windows from the monitor ++ ++ ++ true ++ Show preview of the open windows ++ Replace open windows list with windows previews ++ ++ ++ true ++ Show favorites apps ++ Show or hide favorite applications icons in the dash ++ ++ ++ true ++ Show trash can ++ Show or hide the trash can icon in the dash ++ ++ ++ true ++ Show mounted volumes and devices ++ Show or hide mounted volume and device icons in the dash ++ ++ ++ true ++ Show applications button ++ Show applications button in the dash ++ ++ ++ false ++ Show application button on the left ++ Show application button on the left of the dash ++ ++ ++ true ++ Animate Show Applications from the desktop ++ Animate Show Applications from the desktop ++ ++ ++ true ++ Basic compatibility with bolt extensions ++ Make the extension work properly when bolt extensions is enabled ++ ++ ++ 0.90 ++ Dock max height (fraction of available space) ++ ++ ++ false ++ Extend the dock container to all the available height ++ ++ ++ -1 ++ Monitor on which putting the dock ++ Set on which monitor to put the dock, use -1 for the primary one ++ ++ ++ false ++ Enable multi-monitor docks ++ Show a dock on every monitor ++ ++ ++ true ++ Minimize on shift+click ++ ++ ++ true ++ Activate only one window ++ ++ ++ 'cycle-windows' ++ Action when clicking on a running app ++ Set the action that is executed when clicking on the icon of a running application ++ ++ ++ 'do-nothing' ++ Action when scrolling app ++ Set the action that is executed when scrolling on the application icon ++ ++ ++ 'minimize' ++ Action when shift+clicking on a running app ++ Set the action that is executed when shift+clicking on the icon of a running application ++ ++ ++ 'launch' ++ Action when clicking on a running app ++ Set the action that is executed when middle-clicking on the icon of a running application ++ ++ ++ 'launch' ++ Action when clicking on a running app ++ Set the action that is executed when shift+middle-clicking on the icon of a running application ++ ++ ++ true ++ Super Hot-Keys ++ Launch and switch between dash items using Super+(0-9) ++ ++ ++ true ++ Show the dock when using the hotkeys ++ The dock will be quickly shown so that the number-overlay is visible and app activation is easier ++ ++ ++ "<Super>q" ++ Keybinding to show the dock and the number overlay. ++ Behavior depends on hotkeys-show-dock and hotkeys-overlay. ++ ++ ++ q']]]> ++ Keybinding to show the dock and the number overlay. ++ Behavior depends on hotkeys-show-dock and hotkeys-overlay. ++ ++ ++ 2 ++ Timeout to hide the dock ++ Sets the time duration before the dock is hidden again. ++ ++ ++ true ++ Show the dock when using the hotkeys ++ The dock will be quickly shown so that the number-overlay is visible and app activation is easier ++ ++ ++ 1']]]> ++ Keybinding to launch 1st dash app ++ ++ Keybinding to launch 1st app. ++ ++ ++ ++ 2']]]> ++ Keybinding to launch 2nd dash app ++ ++ Keybinding to launch 2nd app. ++ ++ ++ ++ 3']]]> ++ Keybinding to launch 3rd dash app ++ ++ Keybinding to launch 3rd app. ++ ++ ++ ++ 4']]]> ++ Keybinding to launch 4th dash app ++ ++ Keybinding to launch 4th app. ++ ++ ++ ++ 5']]]> ++ Keybinding to launch 5th dash app ++ ++ Keybinding to launch 5th app. ++ ++ ++ ++ 6']]]> ++ Keybinding to launch 6th dash app ++ ++ Keybinding to launch 6th app. ++ ++ ++ ++ 7']]]> ++ Keybinding to launch 7th dash app ++ ++ Keybinding to launch 7th app. ++ ++ ++ ++ 8']]]> ++ Keybinding to launch 8th dash app ++ ++ Keybinding to launch 8th app. ++ ++ ++ ++ 9']]]> ++ Keybinding to launch 9th dash app ++ ++ Keybinding to launch 9th app. ++ ++ ++ ++ 0']]]> ++ Keybinding to launch 10th dash app ++ ++ Keybinding to launch 10th app. ++ ++ ++ ++ 1']]]> ++ Keybinding to trigger 1st dash app with shift behavior ++ ++ Keybinding to trigger 1st app with shift behavior. ++ ++ ++ ++ 2']]]> ++ Keybinding to trigger 2nd dash app with shift behavior ++ ++ Keybinding to trigger 2nd app with shift behavior. ++ ++ ++ ++ 3']]]> ++ Keybinding to trigger 3rd dash app with shift behavior ++ ++ Keybinding to trigger 3rd app with shift behavior. ++ ++ ++ ++ 4']]]> ++ Keybinding to trigger 4th dash app with shift behavior ++ ++ Keybinding to trigger 4th app with shift behavior. ++ ++ ++ ++ 5']]]> ++ Keybinding to trigger 5th dash app with shift behavior ++ ++ Keybinding to trigger 5th app with shift behavior. ++ ++ ++ ++ 6']]]> ++ Keybinding to trigger 6th dash app with shift behavior ++ ++ Keybinding to trigger 6th app with shift behavior. ++ ++ ++ ++ 7']]]> ++ Keybinding to trigger 7th dash app with shift behavior ++ ++ Keybinding to trigger 7th app with shift behavior. ++ ++ ++ ++ 8']]]> ++ Keybinding to trigger 8th dash app with shift behavior ++ ++ Keybinding to trigger 8th app with shift behavior. ++ ++ ++ ++ 9']]]> ++ Keybinding to trigger 9th dash app with shift behavior ++ ++ Keybinding to trigger 9th app with shift behavior. ++ ++ ++ ++ 0']]]> ++ Keybinding to trigger 10th dash app with shift behavior ++ ++ Keybinding to trigger 10th app with shift behavior. ++ ++ ++ ++ 1']]]> ++ Keybinding to trigger 1st dash app ++ ++ Keybinding to either show or launch the 1st application in the dash. ++ ++ ++ ++ 2']]]> ++ Keybinding to trigger 2nd dash app ++ ++ Keybinding to either show or launch the 2nd application in the dash. ++ ++ ++ ++ 3']]]> ++ Keybinding to trigger 3rd dash app ++ ++ Keybinding to either show or launch the 3rd application in the dash. ++ ++ ++ ++ 4']]]> ++ Keybinding to trigger 4th dash app ++ ++ Keybinding to either show or launch the 4th application in the dash. ++ ++ ++ ++ 5']]]> ++ Keybinding to trigger 5th dash app ++ ++ Keybinding to either show or launch the 5th application in the dash. ++ ++ ++ ++ 6']]]> ++ Keybinding to trigger 6th dash app ++ ++ Keybinding to either show or launch the 6th application in the dash. ++ ++ ++ ++ 7']]]> ++ Keybinding to trigger 7th dash app ++ ++ Keybinding to either show or launch the 7th application in the dash. ++ ++ ++ ++ 8']]]> ++ Keybinding to trigger 8th dash app ++ ++ Keybinding to either show or launch the 8th application in the dash. ++ ++ ++ ++ 9']]]> ++ Keybinding to trigger 9th dash app ++ ++ Keybinding to either show or launch the 9th application in the dash. ++ ++ ++ ++ 0']]]> ++ Keybinding to trigger 10th dash app ++ ++ Keybinding to either show or launch the 10th application in the dash. ++ ++ ++ ++ false ++ Force straight corners in dash ++ Make the borders in the dash non rounded ++ ++ ++ false ++ Enable unity7 like glossy backlit items ++ Emulate the unity7 backlit glossy items behaviour ++ ++ ++ +diff --git a/extensions/dash-to-dock/stylesheet.css b/extensions/dash-to-dock/stylesheet.css +new file mode 100644 +index 00000000..9a427f24 +--- /dev/null ++++ b/extensions/dash-to-dock/stylesheet.css +@@ -0,0 +1,231 @@ ++/* Shrink the dash by reducing padding */ ++#dashtodockContainer.bottom.shrink #dash .dash-background { ++ border: 1px; ++ padding: 2.5px; ++ border-bottom: 0px; } ++ ++#dashtodockContainer.bottom.shrink #dash .dash-item-container .app-well-app, ++#dashtodockContainer.bottom.shrink #dash .dash-item-container .show-apps { ++ padding: 2.5px; } ++ ++#dashtodockContainer.bottom.extended #dash { ++ margin-top: 0; ++ margin-bottom: 0; } ++ ++#dashtodockContainer.top.shrink #dash .dash-background { ++ border: 1px; ++ padding: 2.5px; ++ border-top: 0px; } ++ ++#dashtodockContainer.top.shrink #dash .dash-item-container .app-well-app, ++#dashtodockContainer.top.shrink #dash .dash-item-container .show-apps { ++ padding: 2.5px; } ++ ++#dashtodockContainer.top.extended #dash { ++ margin-top: 0; ++ margin-bottom: 0; } ++ ++#dashtodockContainer.left.shrink #dash .dash-background { ++ border: 1px; ++ padding: 2.5px; ++ border-left: 0px; } ++ ++#dashtodockContainer.left.shrink #dash .dash-item-container .app-well-app, ++#dashtodockContainer.left.shrink #dash .dash-item-container .show-apps { ++ padding: 2.5px; } ++ ++#dashtodockContainer.left.extended #dash { ++ margin-top: 0; ++ margin-bottom: 0; } ++ ++#dashtodockContainer.right.shrink #dash .dash-background { ++ border: 1px; ++ padding: 2.5px; ++ border-right: 0px; } ++ ++#dashtodockContainer.right.shrink #dash .dash-item-container .app-well-app, ++#dashtodockContainer.right.shrink #dash .dash-item-container .show-apps { ++ padding: 2.5px; } ++ ++#dashtodockContainer.right.extended #dash { ++ margin-top: 0; ++ margin-bottom: 0; } ++ ++#dashtodockContainer.bottom.shrink #dash .dash-background { ++ margin-top: 0; ++ margin-bottom: 4px; } ++ ++#dashtodockContainer.straight-corner #dash .dash-background, ++#dashtodockContainer.shrink.straight-corner #dash .dash-background { ++ border-radius: 0px; } ++ ++/* Scrollview style */ ++.bottom #dashtodockDashScrollview, ++.top #dashtodockDashScrollview { ++ -st-hfade-offset: 24px; } ++ ++.left #dashtodockDashScrollview, ++.right #dashtodockDashScrollview { ++ -st-vfade-offset: 24px; } ++ ++#dashtodockContainer.running-dots .dash-item-container > StButton, ++#dashtodockContainer.dashtodock .dash-item-container > StButton { ++ transition-duration: 250; ++ background-size: contain; } ++ ++#dashtodockContainer #dash .dash-separator { ++ margin-bottom: 0; } ++ ++#dashtodockContainer #dash .vertical-dash-separator { ++ height: 1px; ++ margin: 6.5px 0; ++ background-color: rgba(238, 238, 236, 0.3); } ++ ++#dashtodockContainer.bottom #dash { ++ margin-top: 0; } ++ #dashtodockContainer.bottom #dash .dash-background { ++ margin-bottom: 8px; } ++ #dashtodockContainer.bottom #dash .dash-item-container .app-well-app, ++ #dashtodockContainer.bottom #dash .dash-item-container .show-apps { ++ padding: 10px 1.5px 18px; } ++ ++#dashtodockContainer.bottom.overview #dash { ++ margin-top: 12px; } ++ ++#dashtodockContainer.bottom.extended #dash .dash-background, #dashtodockContainer.bottom.shrink #dash .dash-background { ++ margin-bottom: 0; } ++ ++#dashtodockContainer.bottom.extended #dash .dash-item-container .app-well-app, ++#dashtodockContainer.bottom.extended #dash .dash-item-container .show-apps { ++ padding-bottom: 10px; } ++ ++#dashtodockContainer.bottom.shrink #dash .dash-item-container .app-well-app, ++#dashtodockContainer.bottom.shrink #dash .dash-item-container .show-apps { ++ padding-bottom: 2.5px; } ++ ++#dashtodockContainer.left #dash, ++#dashtodockContainer.right #dash { ++ padding-left: 4px; ++ padding-right: 4px; } ++ #dashtodockContainer.left #dash .dash-item-container .app-well-app, ++ #dashtodockContainer.left #dash .dash-item-container .show-apps, ++ #dashtodockContainer.right #dash .dash-item-container .app-well-app, ++ #dashtodockContainer.right #dash .dash-item-container .show-apps { ++ /* In vertical we don't want to add additional padding below the button. */ ++ padding-bottom: 6px; ++ padding-top: 6px; } ++ ++#dashtodockContainer.left.shrink #dash, ++#dashtodockContainer.right.shrink #dash { ++ padding-left: 0; ++ padding-right: 0; } ++ ++#dashtodockContainer.top #dash { ++ margin-bottom: 0px; } ++ ++/* Dash height extended to the whole available vertical space */ ++#dashtodockContainer.extended.left #dash, #dashtodockContainer.extended.right #dash, #dashtodockContainer.extended.top #dash, #dashtodockContainer.extended.bottom #dash { ++ padding-top: 0; ++ padding-bottom: 0; ++ padding-left: 0; ++ padding-right: 0; } ++ #dashtodockContainer.extended.left #dash .dash-background, #dashtodockContainer.extended.right #dash .dash-background, #dashtodockContainer.extended.top #dash .dash-background, #dashtodockContainer.extended.bottom #dash .dash-background { ++ border-radius: 0; } ++ ++#dashtodockContainer.extended.top #dash, #dashtodockContainer.extended.bottom #dash { ++ border-left: 0px; ++ border-right: 0px; } ++ #dashtodockContainer.extended.top #dash .dash-background, #dashtodockContainer.extended.bottom #dash .dash-background { ++ padding-left: 0; ++ padding-right: 0; } ++ ++#dashtodockContainer.extended.left #dash, #dashtodockContainer.extended.right #dash { ++ border-top: 0px; ++ border-bottom: 0px; } ++ ++/* Running and focused application style */ ++#dashtodockContainer.running-dots .app-well-app.running > .overview-icon, ++#dashtodockContainer.dashtodock .app-well-app.running > .overview-icon { ++ background-image: none; } ++ ++#dashtodockContainer.running-dots .app-well-app.focused .overview-icon, ++#dashtodockContainer.dashtodock .app-well-app.focused .overview-icon { ++ background-color: rgba(238, 238, 236, 0.2); } ++ ++#dashtodockContainer.dashtodock #dash .dash-background { ++ background: #2e3436; } ++ ++#dashtodockContainer.dashtodock .progress-bar { ++ /* Customization of the progress bar style, e.g.: ++ -progress-bar-background: rgba(0.8, 0.8, 0.8, 1); ++ -progress-bar-border: rgba(0.9, 0.9, 0.9, 1); ++ */ } ++ ++#dashtodockContainer.top #dash .placeholder, ++#dashtodockContainer.bottom #dash .placeholder { ++ width: 32px; ++ height: 1px; } ++ ++/* ++ * This is applied to a dummy actor. Only the alpha value for the background and border color ++ * and the transition-duration are used ++ */ ++#dashtodockContainer.dummy-opaque { ++ background-color: rgba(0, 0, 0, 0.8); ++ border-color: rgba(0, 0, 0, 0.4); ++ transition-duration: 300ms; } ++ ++/* ++ * This is applied to a dummy actor. Only the alpha value for the background and border color ++ * and the transition-duration are used ++ */ ++#dashtodockContainer.dummy-transparent { ++ background-color: rgba(0, 0, 0, 0.2); ++ border-color: rgba(0, 0, 0, 0.1); ++ transition-duration: 500ms; } ++ ++#dashtodockContainer .number-overlay { ++ color: white; ++ background-color: rgba(0, 0, 0, 0.8); ++ text-align: center; } ++ ++#dashtodockContainer .notification-badge { ++ color: white; ++ background-color: red; ++ padding: 0.2em 0.5em; ++ border-radius: 1em; ++ font-weight: bold; ++ text-align: center; ++ margin: 2px; } ++ ++#dashtodockPreviewSeparator.popup-separator-menu-item-horizontal { ++ width: 1px; ++ height: auto; ++ border-right-width: 1px; ++ margin: 32px 0px; } ++ ++.dashtodock-app-well-preview-menu-item { ++ padding: 1em 1em 0.5em 1em; } ++ ++#dashtodockContainer .metro .overview-icon { ++ border-radius: 0px; } ++ ++#dashtodockContainer.bottom .metro.running2.focused, ++#dashtodockContainer.bottom .metro.running3.focused, ++#dashtodockContainer.bottom .metro.running4.focused, ++#dashtodockContainer.top .metro.running2.focused, ++#dashtodockContainer.top .metro.running3.focused, ++#dashtodockContainer.top .metro.running4.focused { ++ background-image: url("./media/highlight_stacked_bg.svg"); ++ background-position: 0px 0px; ++ background-size: contain; } ++ ++#dashtodockContainer.left .metro.running2.focused, ++#dashtodockContainer.left .metro.running3.focused, ++#dashtodockContainer.left .metro.running4.focused, ++#dashtodockContainer.right .metro.running2.focused, ++#dashtodockContainer.right .metro.running3.focused, ++#dashtodockContainer.right .metro.running4.focused { ++ background-image: url("./media/highlight_stacked_bg_h.svg"); ++ background-position: 0px 0px; ++ background-size: contain; } +diff --git a/extensions/dash-to-dock/theming.js b/extensions/dash-to-dock/theming.js +new file mode 100644 +index 00000000..4b9e10ac +--- /dev/null ++++ b/extensions/dash-to-dock/theming.js +@@ -0,0 +1,553 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const Signals = imports.signals; ++const Meta = imports.gi.Meta; ++const Shell = imports.gi.Shell; ++const St = imports.gi.St; ++const Clutter = imports.gi.Clutter; ++ ++const AppDisplay = imports.ui.appDisplay; ++const AppFavorites = imports.ui.appFavorites; ++const Dash = imports.ui.dash; ++const DND = imports.ui.dnd; ++const IconGrid = imports.ui.iconGrid; ++const Main = imports.ui.main; ++const PopupMenu = imports.ui.popupMenu; ++const Util = imports.misc.util; ++const Workspace = imports.ui.workspace; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Docking = Me.imports.docking; ++const Utils = Me.imports.utils; ++ ++/* ++ * DEFAULT: transparency given by theme ++ * FIXED: constant transparency chosen by user ++ * DYNAMIC: apply 'transparent' style when no windows are close to the dock ++ * */ ++const TransparencyMode = { ++ DEFAULT: 0, ++ FIXED: 1, ++ DYNAMIC: 3 ++}; ++ ++/** ++ * Manage theme customization and custom theme support ++ */ ++var ThemeManager = class DashToDock_ThemeManager { ++ ++ constructor(dock) { ++ this._signalsHandler = new Utils.GlobalSignalsHandler(); ++ this._bindSettingsChanges(); ++ this._actor = dock; ++ this._dash = dock.dash; ++ ++ // initialize colors with generic values ++ this._customizedBackground = {red: 0, green: 0, blue: 0, alpha: 0}; ++ this._customizedBorder = {red: 0, green: 0, blue: 0, alpha: 0}; ++ this._transparency = new Transparency(dock); ++ ++ this._signalsHandler.add([ ++ // When theme changes re-obtain default background color ++ St.ThemeContext.get_for_stage (global.stage), ++ 'changed', ++ this.updateCustomTheme.bind(this) ++ ], [ ++ // update :overview pseudoclass ++ Main.overview, ++ 'showing', ++ this._onOverviewShowing.bind(this) ++ ], [ ++ Main.overview, ++ 'hiding', ++ this._onOverviewHiding.bind(this) ++ ]); ++ ++ this._updateCustomStyleClasses(); ++ ++ // destroy themeManager when the managed actor is destroyed (e.g. extension unload) ++ // in order to disconnect signals ++ this._actor.connect('destroy', this.destroy.bind(this)); ++ ++ } ++ ++ destroy() { ++ this._signalsHandler.destroy(); ++ this._transparency.destroy(); ++ } ++ ++ _onOverviewShowing() { ++ this._actor.add_style_pseudo_class('overview'); ++ } ++ ++ _onOverviewHiding() { ++ this._actor.remove_style_pseudo_class('overview'); ++ } ++ ++ _updateDashOpacity() { ++ let newAlpha = Docking.DockManager.settings.get_double('background-opacity'); ++ ++ let [backgroundColor, borderColor] = this._getDefaultColors(); ++ ++ if (backgroundColor==null) ++ return; ++ ++ // Get the background and border alphas. We check the background alpha ++ // for a minimum of .001 to prevent division by 0 errors ++ let backgroundAlpha = Math.max(Math.round(backgroundColor.alpha/2.55)/100, .001); ++ let borderAlpha = Math.round(borderColor.alpha/2.55)/100; ++ ++ // The border and background alphas should remain in sync ++ // We also limit the borderAlpha to a maximum of 1 (full opacity) ++ borderAlpha = Math.min((borderAlpha/backgroundAlpha)*newAlpha, 1); ++ ++ this._customizedBackground = 'rgba(' + ++ backgroundColor.red + ',' + ++ backgroundColor.green + ',' + ++ backgroundColor.blue + ',' + ++ newAlpha + ')'; ++ ++ this._customizedBorder = 'rgba(' + ++ borderColor.red + ',' + ++ borderColor.green + ',' + ++ borderColor.blue + ',' + ++ borderAlpha + ')'; ++ ++ } ++ ++ _getDefaultColors() { ++ // Prevent shell crash if the actor is not on the stage. ++ // It happens enabling/disabling repeatedly the extension ++ if (!this._dash._container.get_stage()) ++ return [null, null]; ++ ++ // Remove custom style ++ let oldStyle = this._dash._container.get_style(); ++ this._dash._container.set_style(null); ++ ++ let themeNode = this._dash._container.get_theme_node(); ++ this._dash._container.set_style(oldStyle); ++ ++ let backgroundColor = themeNode.get_background_color(); ++ ++ // Just in case the theme has different border colors .. ++ // We want to find the inside border-color of the dock because it is ++ // the side most visible to the user. We do this by finding the side ++ // opposite the position ++ let position = Utils.getPosition(); ++ let side = position + 2; ++ if (side > 3) ++ side = Math.abs(side - 4); ++ ++ let borderColor = themeNode.get_border_color(side); ++ ++ return [backgroundColor, borderColor]; ++ } ++ ++ _updateDashColor() { ++ // Retrieve the color. If needed we will adjust it before passing it to ++ // this._transparency. ++ let [backgroundColor, borderColor] = this._getDefaultColors(); ++ ++ if (backgroundColor==null) ++ return; ++ ++ let settings = Docking.DockManager.settings; ++ ++ if (settings.get_boolean('custom-background-color')) { ++ // When applying a custom color, we need to check the alpha value, ++ // if not the opacity will always be overridden by the color below. ++ // Note that if using 'dynamic' transparency modes, ++ // the opacity will be set by the opaque/transparent styles anyway. ++ let newAlpha = Math.round(backgroundColor.alpha/2.55)/100; ++ if (settings.get_enum('transparency-mode') == TransparencyMode.FIXED) ++ newAlpha = settings.get_double('background-opacity'); ++ ++ backgroundColor = settings.get_string('background-color'); ++ ++ this._customizedBackground = backgroundColor; ++ ++ this._customizedBorder = this._customizedBackground; ++ ++ // backgroundColor is a string like rgb(0,0,0) ++ const color = Clutter.Color.from_string(backgroundColor); ++ color.alpha = newAlpha; ++ ++ this._transparency.setColor(color); ++ } else { ++ // backgroundColor is a Clutter.Color object ++ this._transparency.setColor(backgroundColor); ++ } ++ } ++ ++ _updateCustomStyleClasses() { ++ let settings = Docking.DockManager.settings; ++ ++ if (settings.get_boolean('apply-custom-theme')) ++ this._actor.add_style_class_name('dashtodock'); ++ else ++ this._actor.remove_style_class_name('dashtodock'); ++ ++ if (settings.get_boolean('custom-theme-shrink')) ++ this._actor.add_style_class_name('shrink'); ++ else ++ this._actor.remove_style_class_name('shrink'); ++ ++ if (settings.get_enum('running-indicator-style') !== 0) ++ this._actor.add_style_class_name('running-dots'); ++ else ++ this._actor.remove_style_class_name('running-dots'); ++ ++ // If not the built-in theme option is not selected ++ if (!settings.get_boolean('apply-custom-theme')) { ++ if (settings.get_boolean('force-straight-corner')) ++ this._actor.add_style_class_name('straight-corner'); ++ else ++ this._actor.remove_style_class_name('straight-corner'); ++ } else { ++ this._actor.remove_style_class_name('straight-corner'); ++ } ++ } ++ ++ updateCustomTheme() { ++ this._updateCustomStyleClasses(); ++ this._updateDashOpacity(); ++ this._updateDashColor(); ++ this._adjustTheme(); ++ this._dash._redisplay(); ++ } ++ ++ /** ++ * Reimported back and adapted from atomdock ++ */ ++ _adjustTheme() { ++ // Prevent shell crash if the actor is not on the stage. ++ // It happens enabling/disabling repeatedly the extension ++ if (!this._dash._background.get_stage()) ++ return; ++ ++ let settings = Docking.DockManager.settings; ++ ++ // Remove prior style edits ++ this._dash._background.set_style(null); ++ this._transparency.disable(); ++ ++ // If built-in theme is enabled do nothing else ++ if (settings.get_boolean('apply-custom-theme')) ++ return; ++ ++ let newStyle = ''; ++ let position = Utils.getPosition(settings); ++ ++ // obtain theme border settings ++ let themeNode = this._dash._background.get_theme_node(); ++ let borderColor = themeNode.get_border_color(St.Side.TOP); ++ let borderWidth = themeNode.get_border_width(St.Side.TOP); ++ ++ // We're copying border and corner styles to left border and top-left ++ // corner, also removing bottom border and bottom-right corner styles ++ let borderInner = ''; ++ let borderMissingStyle = ''; ++ ++ if (this._rtl && (position != St.Side.RIGHT)) ++ borderMissingStyle = 'border-right: ' + borderWidth + 'px solid ' + ++ borderColor.to_string() + ';'; ++ else if (!this._rtl && (position != St.Side.LEFT)) ++ borderMissingStyle = 'border-left: ' + borderWidth + 'px solid ' + ++ borderColor.to_string() + ';'; ++ ++ newStyle = borderMissingStyle; ++ ++ // I do call set_style possibly twice so that only the background gets the transition. ++ // The transition-property css rules seems to be unsupported ++ this._dash._background.set_style(newStyle); ++ ++ // Customize background ++ let fixedTransparency = settings.get_enum('transparency-mode') == TransparencyMode.FIXED; ++ let defaultTransparency = settings.get_enum('transparency-mode') == TransparencyMode.DEFAULT; ++ if (!defaultTransparency && !fixedTransparency) { ++ this._transparency.enable(); ++ } ++ else if (!defaultTransparency || settings.get_boolean('custom-background-color')) { ++ newStyle = newStyle + 'background-color:'+ this._customizedBackground + '; ' + ++ 'border-color:'+ this._customizedBorder + '; ' + ++ 'transition-delay: 0s; transition-duration: 0.250s;'; ++ this._dash._background.set_style(newStyle); ++ } ++ } ++ ++ _bindSettingsChanges() { ++ let keys = ['transparency-mode', ++ 'customize-alphas', ++ 'min-alpha', ++ 'max-alpha', ++ 'background-opacity', ++ 'custom-background-color', ++ 'background-color', ++ 'apply-custom-theme', ++ 'custom-theme-shrink', ++ 'custom-theme-running-dots', ++ 'extend-height', ++ 'force-straight-corner']; ++ ++ keys.forEach(function(key) { ++ this._signalsHandler.add([ ++ Docking.DockManager.settings, ++ 'changed::' + key, ++ this.updateCustomTheme.bind(this) ++ ]); ++ }, this); ++ } ++}; ++ ++/** ++ * The following class is based on the following upstream commit: ++ * https://git.gnome.org/browse/gnome-shell/commit/?id=447bf55e45b00426ed908b1b1035f472c2466956 ++ * Transparency when free-floating ++ */ ++var Transparency = class DashToDock_Transparency { ++ ++ constructor(dock) { ++ this._dash = dock.dash; ++ this._actor = this._dash._container; ++ this._backgroundActor = this._dash._background; ++ this._dockActor = dock; ++ this._dock = dock; ++ this._panel = Main.panel; ++ this._position = Utils.getPosition(); ++ ++ // All these properties are replaced with the ones in the .dummy-opaque and .dummy-transparent css classes ++ this._backgroundColor = '0,0,0'; ++ this._transparentAlpha = '0.2'; ++ this._opaqueAlpha = '1'; ++ this._transparentAlphaBorder = '0.1'; ++ this._opaqueAlphaBorder = '0.5'; ++ this._transparentTransition = '0ms'; ++ this._opaqueTransition = '0ms'; ++ this._base_actor_style = ""; ++ ++ this._signalsHandler = new Utils.GlobalSignalsHandler(); ++ this._injectionsHandler = new Utils.InjectionsHandler(); ++ this._trackedWindows = new Map(); ++ } ++ ++ enable() { ++ // ensure I never double-register/inject ++ // although it should never happen ++ this.disable(); ++ ++ this._base_actor_style = this._actor.get_style(); ++ if (this._base_actor_style == null) { ++ this._base_actor_style = ""; ++ } ++ ++ this._signalsHandler.addWithLabel('transparency', [ ++ global.window_group, ++ 'actor-added', ++ this._onWindowActorAdded.bind(this) ++ ], [ ++ global.window_group, ++ 'actor-removed', ++ this._onWindowActorRemoved.bind(this) ++ ], [ ++ global.window_manager, ++ 'switch-workspace', ++ this._updateSolidStyle.bind(this) ++ ], [ ++ Main.overview, ++ 'hiding', ++ this._updateSolidStyle.bind(this) ++ ], [ ++ Main.overview, ++ 'showing', ++ this._updateSolidStyle.bind(this) ++ ]); ++ ++ // Window signals ++ global.window_group.get_children().filter(function(child) { ++ // An irrelevant window actor ('Gnome-shell') produces an error when the signals are ++ // disconnected, therefore do not add signals to it. ++ return child instanceof Meta.WindowActor && ++ child.get_meta_window().get_wm_class() !== 'Gnome-shell'; ++ }).forEach(function(win) { ++ this._onWindowActorAdded(null, win); ++ }, this); ++ ++ if (this._actor.get_stage()) ++ this._updateSolidStyle(); ++ ++ this._updateStyles(); ++ this._updateSolidStyle(); ++ ++ this.emit('transparency-enabled'); ++ } ++ ++ disable() { ++ // ensure I never double-register/inject ++ // although it should never happen ++ this._signalsHandler.removeWithLabel('transparency'); ++ ++ for (let key of this._trackedWindows.keys()) ++ this._trackedWindows.get(key).forEach(id => { ++ key.disconnect(id); ++ }); ++ this._trackedWindows.clear(); ++ ++ this.emit('transparency-disabled'); ++ } ++ ++ destroy() { ++ this.disable(); ++ this._signalsHandler.destroy(); ++ this._injectionsHandler.destroy(); ++ } ++ ++ _onWindowActorAdded(container, metaWindowActor) { ++ let signalIds = []; ++ ['notify::allocation', 'notify::visible'].forEach(s => { ++ signalIds.push(metaWindowActor.connect(s, this._updateSolidStyle.bind(this))); ++ }); ++ this._trackedWindows.set(metaWindowActor, signalIds); ++ } ++ ++ _onWindowActorRemoved(container, metaWindowActor) { ++ if (!this._trackedWindows.get(metaWindowActor)) ++ return; ++ ++ this._trackedWindows.get(metaWindowActor).forEach(id => { ++ metaWindowActor.disconnect(id); ++ }); ++ this._trackedWindows.delete(metaWindowActor); ++ this._updateSolidStyle(); ++ } ++ ++ _updateSolidStyle() { ++ let isNear = this._dockIsNear(); ++ if (isNear) { ++ this._backgroundActor.set_style(this._opaque_style); ++ this._dockActor.remove_style_class_name('transparent'); ++ this._dockActor.add_style_class_name('opaque'); ++ } ++ else { ++ this._backgroundActor.set_style(this._transparent_style); ++ this._dockActor.remove_style_class_name('opaque'); ++ this._dockActor.add_style_class_name('transparent'); ++ } ++ ++ this.emit('solid-style-updated', isNear); ++ } ++ ++ _dockIsNear() { ++ if (this._dockActor.has_style_pseudo_class('overview')) ++ return false; ++ /* Get all the windows in the active workspace that are in the primary monitor and visible */ ++ let activeWorkspace = global.workspace_manager.get_active_workspace(); ++ let dash = this._dash; ++ let windows = activeWorkspace.list_windows().filter(function(metaWindow) { ++ return metaWindow.get_monitor() === dash._monitorIndex && ++ metaWindow.showing_on_its_workspace() && ++ metaWindow.get_window_type() != Meta.WindowType.DESKTOP; ++ }); ++ ++ /* Check if at least one window is near enough to the panel. ++ * If the dock is hidden, we need to account for the space it would take ++ * up when it slides out. This is avoid an ugly transition. ++ * */ ++ let factor = 0; ++ if (!Docking.DockManager.settings.get_boolean('dock-fixed') && ++ this._dock.getDockState() == Docking.State.HIDDEN) ++ factor = 1; ++ let [leftCoord, topCoord] = this._actor.get_transformed_position(); ++ let threshold; ++ if (this._position === St.Side.LEFT) ++ threshold = leftCoord + this._actor.get_width() * (factor + 1); ++ else if (this._position === St.Side.RIGHT) ++ threshold = leftCoord - this._actor.get_width() * factor; ++ else if (this._position === St.Side.TOP) ++ threshold = topCoord + this._actor.get_height() * (factor + 1); ++ else ++ threshold = topCoord - this._actor.get_height() * factor; ++ ++ let scale = St.ThemeContext.get_for_stage(global.stage).scale_factor; ++ let isNearEnough = windows.some((metaWindow) => { ++ let coord; ++ if (this._position === St.Side.LEFT) { ++ coord = metaWindow.get_frame_rect().x; ++ return coord < threshold + 5 * scale; ++ } ++ else if (this._position === St.Side.RIGHT) { ++ coord = metaWindow.get_frame_rect().x + metaWindow.get_frame_rect().width; ++ return coord > threshold - 5 * scale; ++ } ++ else if (this._position === St.Side.TOP) { ++ coord = metaWindow.get_frame_rect().y; ++ return coord < threshold + 5 * scale; ++ } ++ else { ++ coord = metaWindow.get_frame_rect().y + metaWindow.get_frame_rect().height; ++ return coord > threshold - 5 * scale; ++ } ++ }); ++ ++ return isNearEnough; ++ } ++ ++ _updateStyles() { ++ this._getAlphas(); ++ ++ this._transparent_style = this._base_actor_style + ++ 'background-color: rgba(' + ++ this._backgroundColor + ', ' + this._transparentAlpha + ');' + ++ 'border-color: rgba(' + ++ this._backgroundColor + ', ' + this._transparentAlphaBorder + ');' + ++ 'transition-duration: ' + this._transparentTransition + 'ms;'; ++ ++ this._opaque_style = this._base_actor_style + ++ 'background-color: rgba(' + ++ this._backgroundColor + ', ' + this._opaqueAlpha + ');' + ++ 'border-color: rgba(' + ++ this._backgroundColor + ',' + this._opaqueAlphaBorder + ');' + ++ 'transition-duration: ' + this._opaqueTransition + 'ms;'; ++ ++ this.emit('styles-updated'); ++ } ++ ++ setColor(color) { ++ this._backgroundColor = color.red + ',' + color.green + ',' + color.blue; ++ this._updateStyles(); ++ } ++ ++ _getAlphas() { ++ // Create dummy object and add to the uiGroup to get it to the stage ++ let dummyObject = new St.Bin({ ++ name: 'dashtodockContainer', ++ }); ++ Main.uiGroup.add_child(dummyObject); ++ ++ dummyObject.add_style_class_name('dummy-opaque'); ++ let themeNode = dummyObject.get_theme_node(); ++ this._opaqueAlpha = themeNode.get_background_color().alpha / 255; ++ this._opaqueAlphaBorder = themeNode.get_border_color(0).alpha / 255; ++ this._opaqueTransition = themeNode.get_transition_duration(); ++ ++ dummyObject.add_style_class_name('dummy-transparent'); ++ themeNode = dummyObject.get_theme_node(); ++ this._transparentAlpha = themeNode.get_background_color().alpha / 255; ++ this._transparentAlphaBorder = themeNode.get_border_color(0).alpha / 255; ++ this._transparentTransition = themeNode.get_transition_duration(); ++ ++ Main.uiGroup.remove_child(dummyObject); ++ ++ let settings = Docking.DockManager.settings; ++ ++ if (settings.get_boolean('customize-alphas')) { ++ this._opaqueAlpha = settings.get_double('max-alpha'); ++ this._opaqueAlphaBorder = this._opaqueAlpha / 2; ++ this._transparentAlpha = settings.get_double('min-alpha'); ++ this._transparentAlphaBorder = this._transparentAlpha / 2; ++ } ++ } ++}; ++Signals.addSignalMethods(Transparency.prototype); +diff --git a/extensions/dash-to-dock/utils.js b/extensions/dash-to-dock/utils.js +new file mode 100644 +index 00000000..3dd8029c +--- /dev/null ++++ b/extensions/dash-to-dock/utils.js +@@ -0,0 +1,308 @@ ++const Clutter = imports.gi.Clutter; ++const Meta = imports.gi.Meta; ++const St = imports.gi.St; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Docking = Me.imports.docking; ++ ++var SignalsHandlerFlags = { ++ NONE: 0, ++ CONNECT_AFTER: 1 ++}; ++ ++/** ++ * Simplify global signals and function injections handling ++ * abstract class ++ */ ++const BasicHandler = class DashToDock_BasicHandler { ++ ++ constructor() { ++ this._storage = new Object(); ++ } ++ ++ add(/* unlimited 3-long array arguments */) { ++ // Convert arguments object to array, concatenate with generic ++ // Call addWithLabel with ags as if they were passed arguments ++ this.addWithLabel('generic', ...arguments); ++ } ++ ++ destroy() { ++ for( let label in this._storage ) ++ this.removeWithLabel(label); ++ } ++ ++ addWithLabel(label /* plus unlimited 3-long array arguments*/) { ++ if (this._storage[label] == undefined) ++ this._storage[label] = new Array(); ++ ++ // Skip first element of the arguments ++ for (let i = 1; i < arguments.length; i++) { ++ let item = this._storage[label]; ++ try { ++ item.push(this._create(arguments[i])); ++ } catch (e) { ++ logError(e); ++ } ++ } ++ } ++ ++ removeWithLabel(label) { ++ if (this._storage[label]) { ++ for (let i = 0; i < this._storage[label].length; i++) ++ this._remove(this._storage[label][i]); ++ ++ delete this._storage[label]; ++ } ++ } ++ ++ // Virtual methods to be implemented by subclass ++ ++ /** ++ * Create single element to be stored in the storage structure ++ */ ++ _create(item) { ++ throw new GObject.NotImplementedError(`_create in ${this.constructor.name}`); ++ } ++ ++ /** ++ * Correctly delete single element ++ */ ++ _remove(item) { ++ throw new GObject.NotImplementedError(`_remove in ${this.constructor.name}`); ++ } ++}; ++ ++/** ++ * Manage global signals ++ */ ++var GlobalSignalsHandler = class DashToDock_GlobalSignalHandler extends BasicHandler { ++ ++ _create(item) { ++ let object = item[0]; ++ let event = item[1]; ++ let callback = item[2] ++ let flags = item.length > 3 ? item[3] : SignalsHandlerFlags.NONE; ++ ++ if (!object) ++ throw new Error('Impossible to connect to an invalid object'); ++ ++ let after = flags == SignalsHandlerFlags.CONNECT_AFTER; ++ let connector = after ? object.connect_after : object.connect; ++ ++ if (!connector) { ++ throw new Error(`Requested to connect to signal '${event}', ` + ++ `but no implementation for 'connect${after ? '_after' : ''}' `+ ++ `found in ${object.constructor.name}`); ++ } ++ ++ let id = connector.call(object, event, callback); ++ ++ return [object, id]; ++ } ++ ++ _remove(item) { ++ item[0].disconnect(item[1]); ++ } ++}; ++ ++/** ++ * Color manipulation utilities ++ */ ++var ColorUtils = class DashToDock_ColorUtils { ++ ++ // Darken or brigthen color by a fraction dlum ++ // Each rgb value is modified by the same fraction. ++ // Return "#rrggbb" string ++ static ColorLuminance(r, g, b, dlum) { ++ let rgbString = '#'; ++ ++ rgbString += ColorUtils._decimalToHex(Math.round(Math.min(Math.max(r*(1+dlum), 0), 255)), 2); ++ rgbString += ColorUtils._decimalToHex(Math.round(Math.min(Math.max(g*(1+dlum), 0), 255)), 2); ++ rgbString += ColorUtils._decimalToHex(Math.round(Math.min(Math.max(b*(1+dlum), 0), 255)), 2); ++ ++ return rgbString; ++ } ++ ++ // Convert decimal to an hexadecimal string adding the desired padding ++ static _decimalToHex(d, padding) { ++ let hex = d.toString(16); ++ while (hex.length < padding) ++ hex = '0'+ hex; ++ return hex; ++ } ++ ++ // Convert hsv ([0-1, 0-1, 0-1]) to rgb ([0-255, 0-255, 0-255]). ++ // Following algorithm in https://en.wikipedia.org/wiki/HSL_and_HSV ++ // here with h = [0,1] instead of [0, 360] ++ // Accept either (h,s,v) independently or {h:h, s:s, v:v} object. ++ // Return {r:r, g:g, b:b} object. ++ static HSVtoRGB(h, s, v) { ++ if (arguments.length === 1) { ++ s = h.s; ++ v = h.v; ++ h = h.h; ++ } ++ ++ let r,g,b; ++ let c = v*s; ++ let h1 = h*6; ++ let x = c*(1 - Math.abs(h1 % 2 - 1)); ++ let m = v - c; ++ ++ if (h1 <=1) ++ r = c + m, g = x + m, b = m; ++ else if (h1 <=2) ++ r = x + m, g = c + m, b = m; ++ else if (h1 <=3) ++ r = m, g = c + m, b = x + m; ++ else if (h1 <=4) ++ r = m, g = x + m, b = c + m; ++ else if (h1 <=5) ++ r = x + m, g = m, b = c + m; ++ else ++ r = c + m, g = m, b = x + m; ++ ++ return { ++ r: Math.round(r * 255), ++ g: Math.round(g * 255), ++ b: Math.round(b * 255) ++ }; ++ } ++ ++ // Convert rgb ([0-255, 0-255, 0-255]) to hsv ([0-1, 0-1, 0-1]). ++ // Following algorithm in https://en.wikipedia.org/wiki/HSL_and_HSV ++ // here with h = [0,1] instead of [0, 360] ++ // Accept either (r,g,b) independently or {r:r, g:g, b:b} object. ++ // Return {h:h, s:s, v:v} object. ++ static RGBtoHSV(r, g, b) { ++ if (arguments.length === 1) { ++ r = r.r; ++ g = r.g; ++ b = r.b; ++ } ++ ++ let h,s,v; ++ ++ let M = Math.max(r, g, b); ++ let m = Math.min(r, g, b); ++ let c = M - m; ++ ++ if (c == 0) ++ h = 0; ++ else if (M == r) ++ h = ((g-b)/c) % 6; ++ else if (M == g) ++ h = (b-r)/c + 2; ++ else ++ h = (r-g)/c + 4; ++ ++ h = h/6; ++ v = M/255; ++ if (M !== 0) ++ s = c/M; ++ else ++ s = 0; ++ ++ return { ++ h: h, ++ s: s, ++ v: v ++ }; ++ } ++}; ++ ++/** ++ * Manage function injection: both instances and prototype can be overridden ++ * and restored ++ */ ++var InjectionsHandler = class DashToDock_InjectionsHandler extends BasicHandler { ++ ++ _create(item) { ++ let object = item[0]; ++ let name = item[1]; ++ let injectedFunction = item[2]; ++ let original = object[name]; ++ ++ object[name] = injectedFunction; ++ return [object, name, injectedFunction, original]; ++ } ++ ++ _remove(item) { ++ let object = item[0]; ++ let name = item[1]; ++ let original = item[3]; ++ object[name] = original; ++ } ++}; ++ ++/** ++ * Return the actual position reverseing left and right in rtl ++ */ ++function getPosition() { ++ let position = Docking.DockManager.settings.get_enum('dock-position'); ++ if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) { ++ if (position == St.Side.LEFT) ++ position = St.Side.RIGHT; ++ else if (position == St.Side.RIGHT) ++ position = St.Side.LEFT; ++ } ++ return position; ++} ++ ++function drawRoundedLine(cr, x, y, width, height, isRoundLeft, isRoundRight, stroke, fill) { ++ if (height > width) { ++ y += Math.floor((height - width) / 2.0); ++ height = width; ++ } ++ ++ height = 2.0 * Math.floor(height / 2.0); ++ ++ var leftRadius = isRoundLeft ? height / 2.0 : 0.0; ++ var rightRadius = isRoundRight ? height / 2.0 : 0.0; ++ ++ cr.moveTo(x + width - rightRadius, y); ++ cr.lineTo(x + leftRadius, y); ++ if (isRoundLeft) ++ cr.arcNegative(x + leftRadius, y + leftRadius, leftRadius, -Math.PI/2, Math.PI/2); ++ else ++ cr.lineTo(x, y + height); ++ cr.lineTo(x + width - rightRadius, y + height); ++ if (isRoundRight) ++ cr.arcNegative(x + width - rightRadius, y + rightRadius, rightRadius, Math.PI/2, -Math.PI/2); ++ else ++ cr.lineTo(x + width, y); ++ cr.closePath(); ++ ++ if (fill != null) { ++ cr.setSource(fill); ++ cr.fillPreserve(); ++ } ++ if (stroke != null) ++ cr.setSource(stroke); ++ cr.stroke(); ++} ++ ++/** ++ * Convert a signal handler with n value parameters (that is, excluding the ++ * signal source parameter) to an array of n handlers that are each responsible ++ * for receiving one of the n values and calling the original handler with the ++ * most up-to-date arguments. ++ */ ++function splitHandler(handler) { ++ if (handler.length > 30) { ++ throw new Error("too many parameters"); ++ } ++ const count = handler.length - 1; ++ let missingValueBits = (1 << count) - 1; ++ const values = Array.from({ length: count }); ++ return values.map((_ignored, i) => { ++ const mask = ~(1 << i); ++ return (obj, value) => { ++ values[i] = value; ++ missingValueBits &= mask; ++ if (missingValueBits === 0) { ++ handler(obj, ...values); ++ } ++ }; ++ }); ++} +diff --git a/extensions/dash-to-dock/windowPreview.js b/extensions/dash-to-dock/windowPreview.js +new file mode 100644 +index 00000000..8cb14b88 +--- /dev/null ++++ b/extensions/dash-to-dock/windowPreview.js +@@ -0,0 +1,598 @@ ++/* ++ * Credits: ++ * This file is based on code from the Dash to Panel extension by Jason DeRose ++ * and code from the Taskbar extension by Zorin OS ++ * Some code was also adapted from the upstream Gnome Shell source code. ++ */ ++const Clutter = imports.gi.Clutter; ++const GLib = imports.gi.GLib; ++const GObject = imports.gi.GObject; ++const St = imports.gi.St; ++const Main = imports.ui.main; ++ ++const Params = imports.misc.params; ++const PopupMenu = imports.ui.popupMenu; ++const Workspace = imports.ui.workspace; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Utils = Me.imports.utils; ++ ++const PREVIEW_MAX_WIDTH = 250; ++const PREVIEW_MAX_HEIGHT = 150; ++ ++const PREVIEW_ANIMATION_DURATION = 250; ++ ++var WindowPreviewMenu = class DashToDock_WindowPreviewMenu extends PopupMenu.PopupMenu { ++ ++ constructor(source) { ++ let side = Utils.getPosition(); ++ super(source, 0.5, side); ++ ++ // We want to keep the item hovered while the menu is up ++ this.blockSourceEvents = true; ++ ++ this._source = source; ++ this._app = this._source.app; ++ let monitorIndex = this._source.monitorIndex; ++ ++ this.actor.add_style_class_name('app-well-menu'); ++ this.actor.set_style('max-width: ' + (Main.layoutManager.monitors[monitorIndex].width - 22) + 'px; ' + ++ 'max-height: ' + (Main.layoutManager.monitors[monitorIndex].height - 22) + 'px;'); ++ this.actor.hide(); ++ ++ // Chain our visibility and lifecycle to that of the source ++ this._mappedId = this._source.connect('notify::mapped', () => { ++ if (!this._source.mapped) ++ this.close(); ++ }); ++ this._destroyId = this._source.connect('destroy', this.destroy.bind(this)); ++ ++ Main.uiGroup.add_actor(this.actor); ++ ++ // Change the initialized side where required. ++ this._arrowSide = side; ++ this._boxPointer._arrowSide = side; ++ this._boxPointer._userArrowSide = side; ++ ++ this.connect('destroy', this._onDestroy.bind(this)); ++ } ++ ++ _redisplay() { ++ if (this._previewBox) ++ this._previewBox.destroy(); ++ this._previewBox = new WindowPreviewList(this._source); ++ this.addMenuItem(this._previewBox); ++ this._previewBox._redisplay(); ++ } ++ ++ popup() { ++ let windows = this._source.getInterestingWindows(); ++ if (windows.length > 0) { ++ this._redisplay(); ++ this.open(); ++ this.actor.navigate_focus(null, St.DirectionType.TAB_FORWARD, false); ++ this._source.emit('sync-tooltip'); ++ } ++ } ++ ++ _onDestroy() { ++ if (this._mappedId) ++ this._source.disconnect(this._mappedId); ++ ++ if (this._destroyId) ++ this._source.disconnect(this._destroyId); ++ } ++}; ++ ++var WindowPreviewList = class DashToDock_WindowPreviewList extends PopupMenu.PopupMenuSection { ++ ++ constructor(source) { ++ super(); ++ this.actor = new St.ScrollView({ ++ name: 'dashtodockWindowScrollview', ++ hscrollbar_policy: St.PolicyType.NEVER, ++ vscrollbar_policy: St.PolicyType.NEVER, ++ enable_mouse_scrolling: true ++ }); ++ ++ this.actor.connect('scroll-event', this._onScrollEvent.bind(this)); ++ ++ let position = Utils.getPosition(); ++ this.isHorizontal = position == St.Side.BOTTOM || position == St.Side.TOP; ++ this.box.set_vertical(!this.isHorizontal); ++ this.box.set_name('dashtodockWindowList'); ++ this.actor.add_actor(this.box); ++ this.actor._delegate = this; ++ ++ this._shownInitially = false; ++ ++ this._source = source; ++ this.app = source.app; ++ ++ this._redisplayId = Main.initializeDeferredWork(this.actor, this._redisplay.bind(this)); ++ ++ this.actor.connect('destroy', this._onDestroy.bind(this)); ++ this._stateChangedId = this.app.connect('windows-changed', ++ this._queueRedisplay.bind(this)); ++ } ++ ++ _queueRedisplay () { ++ Main.queueDeferredWork(this._redisplayId); ++ } ++ ++ _onScrollEvent(actor, event) { ++ // Event coordinates are relative to the stage but can be transformed ++ // as the actor will only receive events within his bounds. ++ let stage_x, stage_y, ok, event_x, event_y, actor_w, actor_h; ++ [stage_x, stage_y] = event.get_coords(); ++ [ok, event_x, event_y] = actor.transform_stage_point(stage_x, stage_y); ++ [actor_w, actor_h] = actor.get_size(); ++ ++ // If the scroll event is within a 1px margin from ++ // the relevant edge of the actor, let the event propagate. ++ if (event_y >= actor_h - 2) ++ return Clutter.EVENT_PROPAGATE; ++ ++ // Skip to avoid double events mouse ++ if (event.is_pointer_emulated()) ++ return Clutter.EVENT_STOP; ++ ++ let adjustment, delta; ++ ++ if (this.isHorizontal) ++ adjustment = this.actor.get_hscroll_bar().get_adjustment(); ++ else ++ adjustment = this.actor.get_vscroll_bar().get_adjustment(); ++ ++ let increment = adjustment.step_increment; ++ ++ switch ( event.get_scroll_direction() ) { ++ case Clutter.ScrollDirection.UP: ++ delta = -increment; ++ break; ++ case Clutter.ScrollDirection.DOWN: ++ delta = +increment; ++ break; ++ case Clutter.ScrollDirection.SMOOTH: ++ let [dx, dy] = event.get_scroll_delta(); ++ delta = dy*increment; ++ delta += dx*increment; ++ break; ++ ++ } ++ ++ adjustment.set_value(adjustment.get_value() + delta); ++ ++ return Clutter.EVENT_STOP; ++ } ++ ++ _onDestroy() { ++ this.app.disconnect(this._stateChangedId); ++ this._stateChangedId = 0; ++ } ++ ++ _createPreviewItem(window) { ++ let preview = new WindowPreviewMenuItem(window); ++ return preview; ++ } ++ ++ _redisplay () { ++ let children = this._getMenuItems().filter(function(actor) { ++ return actor._window; ++ }); ++ ++ // Windows currently on the menu ++ let oldWin = children.map(function(actor) { ++ return actor._window; ++ }); ++ ++ // All app windows with a static order ++ let newWin = this._source.getInterestingWindows().sort(function(a, b) { ++ return a.get_stable_sequence() > b.get_stable_sequence(); ++ }); ++ ++ let addedItems = []; ++ let removedActors = []; ++ ++ let newIndex = 0; ++ let oldIndex = 0; ++ ++ while (newIndex < newWin.length || oldIndex < oldWin.length) { ++ // No change at oldIndex/newIndex ++ if (oldWin[oldIndex] && ++ oldWin[oldIndex] == newWin[newIndex]) { ++ oldIndex++; ++ newIndex++; ++ continue; ++ } ++ ++ // Window removed at oldIndex ++ if (oldWin[oldIndex] && ++ newWin.indexOf(oldWin[oldIndex]) == -1) { ++ removedActors.push(children[oldIndex]); ++ oldIndex++; ++ continue; ++ } ++ ++ // Window added at newIndex ++ if (newWin[newIndex] && ++ oldWin.indexOf(newWin[newIndex]) == -1) { ++ addedItems.push({ item: this._createPreviewItem(newWin[newIndex]), ++ pos: newIndex }); ++ newIndex++; ++ continue; ++ } ++ ++ // Window moved ++ let insertHere = newWin[newIndex + 1] && ++ newWin[newIndex + 1] == oldWin[oldIndex]; ++ let alreadyRemoved = removedActors.reduce(function(result, actor) { ++ let removedWin = actor._window; ++ return result || removedWin == newWin[newIndex]; ++ }, false); ++ ++ if (insertHere || alreadyRemoved) { ++ addedItems.push({ item: this._createPreviewItem(newWin[newIndex]), ++ pos: newIndex + removedActors.length }); ++ newIndex++; ++ } else { ++ removedActors.push(children[oldIndex]); ++ oldIndex++; ++ } ++ } ++ ++ for (let i = 0; i < addedItems.length; i++) ++ this.addMenuItem(addedItems[i].item, ++ addedItems[i].pos); ++ ++ for (let i = 0; i < removedActors.length; i++) { ++ let item = removedActors[i]; ++ if (this._shownInitially) ++ item._animateOutAndDestroy(); ++ else ++ item.actor.destroy(); ++ } ++ ++ // Skip animations on first run when adding the initial set ++ // of items, to avoid all items zooming in at once ++ let animate = this._shownInitially; ++ ++ if (!this._shownInitially) ++ this._shownInitially = true; ++ ++ for (let i = 0; i < addedItems.length; i++) ++ addedItems[i].item.show(animate); ++ ++ // Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=692744 ++ // Without it, StBoxLayout may use a stale size cache ++ this.box.queue_relayout(); ++ ++ if (newWin.length < 1) ++ this._getTopMenu().close(~0); ++ ++ // As for upstream: ++ // St.ScrollView always requests space horizontally for a possible vertical ++ // scrollbar if in AUTOMATIC mode. Doing better would require implementation ++ // of width-for-height in St.BoxLayout and St.ScrollView. This looks bad ++ // when we *don't* need it, so turn off the scrollbar when that's true. ++ // Dynamic changes in whether we need it aren't handled properly. ++ let needsScrollbar = this._needsScrollbar(); ++ let scrollbar_policy = needsScrollbar ? ++ St.PolicyType.AUTOMATIC : St.PolicyType.NEVER; ++ if (this.isHorizontal) ++ this.actor.hscrollbar_policy = scrollbar_policy; ++ else ++ this.actor.vscrollbar_policy = scrollbar_policy; ++ ++ if (needsScrollbar) ++ this.actor.add_style_pseudo_class('scrolled'); ++ else ++ this.actor.remove_style_pseudo_class('scrolled'); ++ } ++ ++ _needsScrollbar() { ++ let topMenu = this._getTopMenu(); ++ let topThemeNode = topMenu.actor.get_theme_node(); ++ if (this.isHorizontal) { ++ let [topMinWidth, topNaturalWidth] = topMenu.actor.get_preferred_width(-1); ++ let topMaxWidth = topThemeNode.get_max_width(); ++ return topMaxWidth >= 0 && topNaturalWidth >= topMaxWidth; ++ } else { ++ let [topMinHeight, topNaturalHeight] = topMenu.actor.get_preferred_height(-1); ++ let topMaxHeight = topThemeNode.get_max_height(); ++ return topMaxHeight >= 0 && topNaturalHeight >= topMaxHeight; ++ } ++ ++ } ++ ++ isAnimatingOut() { ++ return this.actor.get_children().reduce(function(result, actor) { ++ return result || actor.animatingOut; ++ }, false); ++ } ++}; ++ ++var WindowPreviewMenuItem = GObject.registerClass( ++class DashToDock_WindowPreviewMenuItem extends PopupMenu.PopupBaseMenuItem { ++ _init(window, params) { ++ super._init(params); ++ ++ this._window = window; ++ this._destroyId = 0; ++ this._windowAddedId = 0; ++ [this._width, this._height, this._scale] = this._getWindowPreviewSize(); // This gets the actual windows size for the preview ++ ++ // We don't want this: it adds spacing on the left of the item. ++ this.remove_child(this._ornamentLabel); ++ this.add_style_class_name('dashtodock-app-well-preview-menu-item'); ++ ++ // Now we don't have to set PREVIEW_MAX_WIDTH and PREVIEW_MAX_HEIGHT as preview size - that made all kinds of windows either stretched or squished (aspect ratio problem) ++ this._cloneBin = new St.Bin(); ++ this._cloneBin.set_size(this._width*this._scale, this._height*this._scale); ++ ++ // TODO: improve the way the closebutton is layout. Just use some padding ++ // for the moment. ++ this._cloneBin.set_style('padding-bottom: 0.5em'); ++ ++ this.closeButton = new St.Button({ style_class: 'window-close', ++ x_expand: true, ++ y_expand: true}); ++ this.closeButton.add_actor(new St.Icon({ icon_name: 'window-close-symbolic' })); ++ this.closeButton.set_x_align(Clutter.ActorAlign.END); ++ this.closeButton.set_y_align(Clutter.ActorAlign.START); ++ ++ ++ this.closeButton.opacity = 0; ++ this.closeButton.connect('clicked', this._closeWindow.bind(this)); ++ ++ let overlayGroup = new Clutter.Actor({layout_manager: new Clutter.BinLayout(), y_expand: true }); ++ ++ overlayGroup.add_actor(this._cloneBin); ++ overlayGroup.add_actor(this.closeButton); ++ ++ let label = new St.Label({ text: window.get_title()}); ++ label.set_style('max-width: '+PREVIEW_MAX_WIDTH +'px'); ++ let labelBin = new St.Bin({ child: label, ++ x_align: Clutter.ActorAlign.CENTER, ++ }); ++ ++ this._windowTitleId = this._window.connect('notify::title', () => { ++ label.set_text(this._window.get_title()); ++ }); ++ ++ let box = new St.BoxLayout({ vertical: true, ++ reactive:true, ++ x_expand:true }); ++ box.add(overlayGroup); ++ box.add(labelBin); ++ this.add_actor(box); ++ ++ this._cloneTexture(window); ++ ++ this.connect('destroy', this._onDestroy.bind(this)); ++ } ++ ++ _getWindowPreviewSize() { ++ let mutterWindow = this._window.get_compositor_private(); ++ let [width, height] = mutterWindow.get_size(); ++ let scale = Math.min(1.0, PREVIEW_MAX_WIDTH/width, PREVIEW_MAX_HEIGHT/height); ++ return [width, height, scale]; ++ } ++ ++ _cloneTexture(metaWin){ ++ ++ let mutterWindow = metaWin.get_compositor_private(); ++ ++ // Newly-created windows are added to a workspace before ++ // the compositor finds out about them... ++ // Moreover sometimes they return an empty texture, thus as a workarounf also check for it size ++ if (!mutterWindow || !mutterWindow.get_texture() || !mutterWindow.get_size()[0]) { ++ this._cloneTextureId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => { ++ // Check if there's still a point in getting the texture, ++ // otherwise this could go on indefinitely ++ if (metaWin.get_workspace()) ++ this._cloneTexture(metaWin); ++ this._cloneTextureId = 0; ++ return GLib.SOURCE_REMOVE; ++ }); ++ GLib.Source.set_name_by_id(this._cloneTextureId, '[dash-to-dock] this._cloneTexture'); ++ return; ++ } ++ ++ let clone = new Clutter.Clone ({ source: mutterWindow, ++ reactive: true, ++ width: this._width * this._scale, ++ height: this._height * this._scale }); ++ ++ // when the source actor is destroyed, i.e. the window closed, first destroy the clone ++ // and then destroy the menu item (do this animating out) ++ this._destroyId = mutterWindow.connect('destroy', () => { ++ clone.destroy(); ++ this._destroyId = 0; // avoid to try to disconnect this signal from mutterWindow in _onDestroy(), ++ // as the object was just destroyed ++ this._animateOutAndDestroy(); ++ }); ++ ++ this._clone = clone; ++ this._mutterWindow = mutterWindow; ++ this._cloneBin.set_child(this._clone); ++ ++ this._clone.connect('destroy', () => { ++ if (this._destroyId) { ++ mutterWindow.disconnect(this._destroyId); ++ this._destroyId = 0; ++ } ++ this._clone = null; ++ }) ++ } ++ ++ _windowCanClose() { ++ return this._window.can_close() && ++ !this._hasAttachedDialogs(); ++ } ++ ++ _closeWindow(actor) { ++ this._workspace = this._window.get_workspace(); ++ ++ // This mechanism is copied from the workspace.js upstream code ++ // It forces window activation if the windows don't get closed, ++ // for instance because asking user confirmation, by monitoring the opening of ++ // such additional confirmation window ++ this._windowAddedId = this._workspace.connect('window-added', ++ this._onWindowAdded.bind(this)); ++ ++ this.deleteAllWindows(); ++ } ++ ++ deleteAllWindows() { ++ // Delete all windows, starting from the bottom-most (most-modal) one ++ //let windows = this._window.get_compositor_private().get_children(); ++ let windows = this._clone.get_children(); ++ for (let i = windows.length - 1; i >= 1; i--) { ++ let realWindow = windows[i].source; ++ let metaWindow = realWindow.meta_window; ++ ++ metaWindow.delete(global.get_current_time()); ++ } ++ ++ this._window.delete(global.get_current_time()); ++ } ++ ++ _onWindowAdded(workspace, win) { ++ let metaWindow = this._window; ++ ++ if (win.get_transient_for() == metaWindow) { ++ workspace.disconnect(this._windowAddedId); ++ this._windowAddedId = 0; ++ ++ // use an idle handler to avoid mapping problems - ++ // see comment in Workspace._windowAdded ++ let activationEvent = Clutter.get_current_event(); ++ let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => { ++ this.emit('activate', activationEvent); ++ return GLib.SOURCE_REMOVE; ++ }); ++ GLib.Source.set_name_by_id(id, '[dash-to-dock] this.emit'); ++ } ++ } ++ ++ _hasAttachedDialogs() { ++ // count trasient windows ++ let n=0; ++ this._window.foreach_transient(function(){n++;}); ++ return n>0; ++ } ++ ++ vfunc_key_focus_in() { ++ super.vfunc_key_focus_in(); ++ this._showCloseButton(); ++ } ++ ++ vfunc_key_focus_out() { ++ super.vfunc_key_focus_out(); ++ this._hideCloseButton(); ++ } ++ ++ vfunc_enter_event(crossingEvent) { ++ this._showCloseButton(); ++ return super.vfunc_enter_event(crossingEvent); ++ } ++ ++ vfunc_leave_event(crossingEvent) { ++ this._hideCloseButton(); ++ return super.vfunc_leave_event(crossingEvent); ++ } ++ ++ _idleToggleCloseButton() { ++ this._idleToggleCloseId = 0; ++ ++ this._hideCloseButton(); ++ ++ return GLib.SOURCE_REMOVE; ++ } ++ ++ _showCloseButton() { ++ ++ if (this._windowCanClose()) { ++ this.closeButton.show(); ++ this.closeButton.remove_all_transitions(); ++ this.closeButton.ease({ ++ opacity: 255, ++ duration: Workspace.WINDOW_OVERLAY_FADE_TIME, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD ++ }); ++ } ++ } ++ ++ _hideCloseButton() { ++ if (this.closeButton.has_pointer || ++ this.get_children().some(a => a.has_pointer)) ++ return; ++ ++ this.closeButton.remove_all_transitions(); ++ this.closeButton.ease({ ++ opacity: 0, ++ duration: Workspace.WINDOW_OVERLAY_FADE_TIME, ++ mode: Clutter.AnimationMode.EASE_IN_QUAD ++ }); ++ } ++ ++ show(animate) { ++ let fullWidth = this.get_width(); ++ ++ this.opacity = 0; ++ this.set_width(0); ++ ++ let time = animate ? PREVIEW_ANIMATION_DURATION : 0; ++ this.remove_all_transitions(); ++ this.ease({ ++ opacity: 255, ++ width: fullWidth, ++ duration: time, ++ mode: Clutter.AnimationMode.EASE_IN_OUT_QUAD, ++ }); ++ } ++ ++ _animateOutAndDestroy() { ++ this.remove_all_transitions(); ++ this.ease({ ++ opacity: 0, ++ duration: PREVIEW_ANIMATION_DURATION, ++ }); ++ ++ this.ease({ ++ width: 0, ++ height: 0, ++ duration: PREVIEW_ANIMATION_DURATION, ++ delay: PREVIEW_ANIMATION_DURATION, ++ onComplete: () => this.destroy() ++ }); ++ } ++ ++ activate() { ++ this._getTopMenu().close(); ++ Main.activateWindow(this._window); ++ } ++ ++ _onDestroy() { ++ if (this._cloneTextureId) { ++ GLib.source_remove(this._cloneTextureId); ++ this._cloneTextureId = 0; ++ } ++ ++ if (this._windowAddedId > 0) { ++ this._workspace.disconnect(this._windowAddedId); ++ this._windowAddedId = 0; ++ } ++ ++ if (this._destroyId > 0) { ++ this._mutterWindow.disconnect(this._destroyId); ++ this._destroyId = 0; ++ } ++ ++ if (this._windowTitleId > 0) { ++ this._window.disconnect(this._windowTitleId); ++ this._windowTitleId = 0; ++ } ++ } ++}); +\ No newline at end of file +diff --git a/meson.build b/meson.build +index f754767c..e3d94918 100644 +--- a/meson.build ++++ b/meson.build +@@ -44,6 +44,7 @@ default_extensions += [ + all_extensions = default_extensions + all_extensions += [ + 'auto-move-windows', ++ 'dash-to-dock', + 'native-window-placement', + 'top-icons', + 'user-theme' +diff --git a/po/ar.po b/po/ar.po +index fe3ad350..5a21c94a 100644 +--- a/po/ar.po ++++ b/po/ar.po +@@ -1,9 +1,18 @@ ++# #-#-#-#-# ar.po (PACKAGE VERSION) #-#-#-#-# + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. + # Khaled Hosny , 2012, 2013, 2015, 2017. ++# #-#-#-#-# ar.po (Dash to Dock) #-#-#-#-# ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# ar.po (PACKAGE VERSION) #-#-#-#-#\n" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" + "shell&keywords=I18N+L10N&component=extensions\n" +@@ -19,6 +28,21 @@ msgstr "" + "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" + "X-Generator: Virtaal 1.0.0-beta1\n" + "X-Project-Style: gnome\n" ++"#-#-#-#-# ar.po (Dash to Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-06-04 12:35+0100\n" ++"PO-Revision-Date: 2015-04-18 18:01+0100\n" ++"Last-Translator: Jean-Baptiste Le Cz \n" ++"Language-Team: Faissal Chamekh \n" ++"Language: ar_DZ\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " ++"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" ++"X-Generator: Poedit 1.7.5\n" ++"X-Poedit-SourceCharset: UTF-8\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -237,7 +261,7 @@ msgstr "أغلق" + msgid "Unminimize" + msgstr "ألغِ التصغير" + +-#: extensions/window-list/extension.js:130 ++#: extensions/window-list/extension.js:130 Settings.ui.h:50 + msgid "Minimize" + msgstr "صغّر" + +@@ -334,6 +358,430 @@ msgstr "الاسم" + msgid "Workspace %d" + msgstr "مساحة العمل %Id" + ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "يسار" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "يمين" ++ ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "الشاشة الرئيسية" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "الشاشة الثانوية" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "تخصيص الإخفاء التلقائي" ++ ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "العودة للافتراضي" ++ ++#: prefs.js:386 ++#, fuzzy ++msgid "Show dock and application numbers" ++msgstr "أظهر التطبيقات قيد التشغيل" ++ ++#: prefs.js:443 ++#, fuzzy ++msgid "Customize middle-click behavior" ++msgstr "خصّص الإعتام" ++ ++#: prefs.js:514 ++#, fuzzy ++msgid "Customize running indicators" ++msgstr "أظهر التطبيقات قيد التشغيل" ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "جميع النوافذ" ++ ++#: Settings.ui.h:1 ++#, fuzzy ++msgid "Customize indicator style" ++msgstr "خصّص الإعتام" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "اللون" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "لون الحواف" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "عرض الحواف" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "عدد التراكب" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "عرض أرقام التطبيق مؤقتا على الرموز، المقابلةللاختصار." ++ ++#: Settings.ui.h:7 ++#, fuzzy ++msgid "Show the dock if it is hidden" ++msgstr "أظهر المرساة فوق" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"إذا اُستخدم الإخفاء التلقائي الشريط سيظهر لوقت قصير عند الضغطعلى الإختصار." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "الإختصار للخيارات في الأعلى" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "البنية: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "زمن الاختفاء (ثا)" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "عند التصغير النقر المزدوج سيصغر جميع نوافذالتطبيق." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "حدث Shift+Click" ++ ++#: Settings.ui.h:14 ++#, fuzzy ++msgid "Raise window" ++msgstr "صغّر النافذة" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "صغّر النافذة" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "شغّل نسخة جديدة" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "التبديل بين النوافذ" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "خروج" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "سلوك الزر المتوسط." ++ ++#: Settings.ui.h:20 ++#, fuzzy ++msgid "Middle-Click action" ++msgstr "حدث النقر" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "سلوك Shift+Middle-Click." ++ ++#: Settings.ui.h:22 ++#, fuzzy ++msgid "Shift+Middle-Click action" ++msgstr "حدث Shift+Click" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "أظهر المرساة فوق" ++ ++#: Settings.ui.h:24 ++#, fuzzy ++msgid "Show on all monitors." ++msgstr "الشاشة الثانوية" ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "الموضع على الشاشة" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "أسفل" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "أعلى" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "إخفاء المرساة عندما تحجب نافذة التطبيق الحالي. تخصيصات أكثر متوفرة." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "إخفاء تلقائي ذكي" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "حدّ حجم المرساة" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "نمط الشريط: تمديد إلى حواف الشاشة" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "حدّ حجم الأيقونة" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "حجم أيقونات ثابت: استعمل التمرير لكشف أيقونات أخرى" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "الموضع والحجم" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "أظهر التطبيقات المفضّلة" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "أظهر التطبيقات قيد التشغيل" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "عزل مساحات العمل." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "عرض معاينات النوافذ المفتوحة." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"إذا تم تعطيله هذه الإعدادت يمكن الوصول إليها من gnome-tweak-tool أو موقع " ++"الإضافات." ++ ++#: Settings.ui.h:42 ++#, fuzzy ++msgid "Show Applications icon" ++msgstr "أظهر أيقونة التطبيقات أولا" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "تحريك زر التطبيقات في بداية الشريط." ++ ++#: Settings.ui.h:44 ++#, fuzzy ++msgid "Animate Show Applications." ++msgstr "أظهر أيقونة التطبيقات أولا" ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "المشغلات" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"تفعيل Super+(0-9) كاختصار لتمكين التطبيقات. يمكن أيضاً استخدامها معاً مع Shift " ++"و Ctrl" ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "استخدام إختصارات لوحة المفاتيح لتفعيل التطبيقات" ++ ++#: Settings.ui.h:48 ++#, fuzzy ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "التصرّف عن النقر على أيقونة التطبيق قيد التشغيل." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "حدث النقر" ++ ++#: Settings.ui.h:51 ++#, fuzzy ++msgid "Minimize or overview" ++msgstr "صغّر النافذة" ++ ++#: Settings.ui.h:52 ++#, fuzzy ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "التصرّف عن النقر على أيقونة التطبيق قيد التشغيل." ++ ++#: Settings.ui.h:53 ++#, fuzzy ++msgid "Scroll action" ++msgstr "حدث النقر" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "لا تفعل شيئا" ++ ++#: Settings.ui.h:55 ++#, fuzzy ++msgid "Switch workspace" ++msgstr "تبديل مساحة عمل واحدة في نفس الوقت" ++ ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "السلوك" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"القليل من التخصيصات يعني إضافة الشريط مع سِمَة غنوم. بدلاً من هذا, خيارات محددة " ++"يُمكن اختيارها من الأسفل." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "استعمل السمة المضمّنة" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "حفظ المساحة يقلل من الحشو ونصف قطر الحافة." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "تقليص المرساة" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "أظهر نقطة لكل نوافذة من التطبيق." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "أظهر مؤشرات عدد النوافذ" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "تعيين لون الخلفية لشَرِطة" ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "تخصيص لون الشَرِطة" ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "ضبط إعتام خلفية المرساة." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "خصّص الإعتام" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "العتمة" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "الزاوي المستقيمة\n" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "المظهر" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "الإصدار:" ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "تحريك الشريط خارج النظرة العامة في الشَرِطة" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "أنشئ من طرف" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "صفحة الويب" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"هذا البرنامج يأتي بدون أي ضمانات.\n" ++"لمزيد من المعلومات أنظر رخصة غنو العمومية، الإصدارة 2 فما فوق." ++ ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "حول" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "أظهر المرساة بتمرير الفأرة على حافة النافذة" ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "إخفاء تلقائي" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "اضغط للإظهار: يتطلب ضغطا لإظهار المرساة" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "تمكين في وضع ملئ الشاشة" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "إظهار المرساة عندما لا تحجب نوافذ التطبيق." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "حيلة النوافذ" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "جميع النوافذ" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "نوافذ التطبيق المركزة فقط" ++ ++#: Settings.ui.h:86 ++#, fuzzy ++msgid "Only maximized windows" ++msgstr "صغّر النافذة" ++ ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "مدة التحريك (ثا)" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0.000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "زمن الظهور (ثا)" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "عتبة الضغط" ++ + #~ msgid "GNOME Shell Classic" + #~ msgstr "صدفة جنوم تقليدية" + +@@ -349,12 +797,6 @@ msgstr "مساحة العمل %Id" + #~ msgid "Normal" + #~ msgstr "عادي" + +-#~ msgid "Left" +-#~ msgstr "يسار" +- +-#~ msgid "Right" +-#~ msgstr "يمين" +- + #~ msgid "Upside-down" + #~ msgstr "رأسا على عقب" + +@@ -463,3 +905,115 @@ msgstr "مساحة العمل %Id" + + #~ msgid "Removable Devices" + #~ msgstr "الأجهزة المنفصلة" ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "بدّل مساحة العمل عند التمرير فوق المرساة" ++ ++#~ msgid "Main Settings" ++#~ msgstr "الخصائص الأساسية" ++ ++#~ msgid "Dock Position" ++#~ msgstr "موضع المرساة" ++ ++#~ msgid "Dock is fixed and always visible" ++#~ msgstr "المرساة ثابتة وظاهرة دائما" ++ ++#~ msgid "Show delay [ms]" ++#~ msgstr "تأخير الظهور (ميلي ثانية)" ++ ++#~ msgid "Hide delay [ms]" ++#~ msgstr "تأخير الإخفاء (ميلي ثانية)" ++ ++#~ msgid "Application based intellihide" ++#~ msgstr "إخفاء تلقائي على حسب التطبيق" ++ ++#~ msgid "Show the dock on following monitor (if attached)" ++#~ msgstr "أظهر المرساة في الشاشة الحالية (إن وُصلت)" ++ ++#~ msgid "Primary (default)" ++#~ msgstr "الأساسية (الافتراضي)" ++ ++#~ msgid "1" ++#~ msgstr "1" ++ ++#~ msgid "2" ++#~ msgstr "2" ++ ++#~ msgid "3" ++#~ msgstr "3" ++ ++#~ msgid "4" ++#~ msgstr "4" ++ ++#~ msgid "Max height" ++#~ msgstr "الارتفاع الأقصى" ++ ++#~ msgid "Expand (experimental and buggy)" ++#~ msgstr "تمديد (تجريبي)" ++ ++#~ msgid "Maximum icon size" ++#~ msgstr "الحجم الأقصى للأيقونة" ++ ++#~ msgid "16" ++#~ msgstr "16" ++ ++#~ msgid "24" ++#~ msgstr "24" ++ ++#~ msgid "32" ++#~ msgstr "32" ++ ++#~ msgid "48" ++#~ msgstr "48" ++ ++#~ msgid "64" ++#~ msgstr "64" ++ ++#~ msgid "Optional features" ++#~ msgstr "ميزات إضافية" ++ ++#~ msgid "Deadtime between each workspace switching [ms]" ++#~ msgstr "الوقت بين تبديل كل مساحة عمل" ++ ++#~ msgid "Only a 1px wide area close to the screen edge is active" ++#~ msgstr "مساحة بعرض 1 بكسل فقط قريبة من حافة الشاشة هي النشطة" ++ ++#~ msgid "All the area of the dock is active" ++#~ msgstr "جميع مناطق المرساة نشطة" ++ ++#~ msgid "Customize actions on mouse click" ++#~ msgstr "خصّص حدث النقر على الفأرة" ++ ++#~ msgid "Action on clicking on running app" ++#~ msgstr "الحدث عن النقر على تطبيق قيد التشغيل" ++ ++#~ msgid "Minimize window on shift+click (double click for all app windows)" ++#~ msgstr "" ++#~ "تصغير النافذة عند النقر مع shift (الضغط المزدوج بالنسبة لكل نوافذ التطبيق)" ++ ++#~ msgid "Make message tray insensitive to mouse events" ++#~ msgstr "اجعل رسالة التنبيه غير حساسة لأحداث الفأرة" ++ ++#~ msgid "Appearence and Themes" ++#~ msgstr "المظهر والسمة" ++ ++#~ msgid "" ++#~ "A customized theme is built in the extension. This is meant to work with " ++#~ "the default Adwaita theme: the dash is shrunk to save space, its " ++#~ "background transparency reduced, and custom indicators for the number of " ++#~ "windows of each application are added." ++#~ msgstr "" ++#~ "تم تضمين سمة مخصّصة للإضافة، هذا يعني أنها تعمل مع السمة الافتراضية " ++#~ "Adwaita: تقليص المرساة لكسب مساحة، إنقاص شفافيتها، كذلك تم إضافة مؤشرات " ++#~ "لعدد نوافذ التطبيق." ++ ++#~ msgid "" ++#~ "Alternatively, for a better integration with custom themes, each " ++#~ "customization can be applied indipendently" ++#~ msgstr "بدلا من هذا، لتكاملية أفضل مع سمات مخصّصة، كل تخصيص يطبّق على حدة" ++ ++#~ msgid "Shrink the dash size by reducing padding" ++#~ msgstr "مساحة المرساة بإنقاص الحشو" ++ ++#~ msgid "Only when in autohide" ++#~ msgstr "فقط عند الإخفاء التلقائي" +diff --git a/po/cs.po b/po/cs.po +index 7d3258dc..572b3787 100644 +--- a/po/cs.po ++++ b/po/cs.po +@@ -1,11 +1,20 @@ ++# #-#-#-#-# cs.po (gnome-shell-extensions) #-#-#-#-# + # Czech translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. + # Petr Kovar , 2013. + # Marek Černocký , 2011, 2012, 2013, 2014, 2015, 2017, 2019, 2020. + # ++# #-#-#-#-# cs.po (Dash to Dock) #-#-#-#-# ++# Translation for cs ++# Copyright (C) 2014 Michele ++# This file is distributed under the same license as the dash-to-dock package. ++# Jiří Doubravský , 2015. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# cs.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -19,6 +28,19 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + "X-Generator: Gtranslator 2.91.6\n" ++"#-#-#-#-# cs.po (Dash to Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-05-16 13:48+0200\n" ++"PO-Revision-Date: 2020-05-16 13:54+0200\n" ++"Last-Translator: Daniel Rusek \n" ++"Language-Team: CZECH \n" ++"Language: cs\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3\n" ++"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -151,7 +173,7 @@ msgstr "Zavřít" + msgid "Unminimize" + msgstr "Zrušit minimalizaci" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:52 + msgid "Minimize" + msgstr "Minimalizovat" + +@@ -257,3 +279,532 @@ msgstr "Pracovní plocha %d" + #: extensions/workspace-indicator/prefs.js:218 + msgid "Add Workspace" + msgstr "Přidat pracovní plochu" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "Hlavní obrazovka" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "Sekundární obrazovka " ++ ++#: prefs.js:309 Settings.ui.h:28 ++msgid "Right" ++msgstr "Vpravo" ++ ++#: prefs.js:310 Settings.ui.h:25 ++msgid "Left" ++msgstr "Vlevo" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "Přizpůsobení chytrého skrývání" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "Obnovit výchozí nastavení" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "Zobrazování doku a čísel aplikací" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "Nastavit chování prostředního tlačítka" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "Nastavit indikátory spuštěných aplikací" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Přizpůsobení průhlednosti" ++ ++#: appIcons.js:797 ++msgid "All Windows" ++msgstr "Všechna okna" ++ ++#: appIcons.js:916 ++#, javascript-format ++msgid "Quit %d Windows" ++msgstr "Ukončit %d oken" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1134 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s Dash to Docku" ++ ++#: locations.js:65 ++msgid "Trash" ++msgstr "Koš" ++ ++#: locations.js:74 ++msgid "Empty Trash" ++msgstr "Vyprázdnit koš" ++ ++#: locations.js:192 ++msgid "Mount" ++msgstr "Připojit" ++ ++#: locations.js:235 ++msgid "Eject" ++msgstr "Vysunout" ++ ++#: locations.js:240 ++msgid "Unmount" ++msgstr "Odpojit" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Pokud je nastavena minimalizace, dvojklik minimalizuje všechna okna aplikace." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Shift + levé tlačítko" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Přenést okno do popředí" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimalizovat okno" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Spustit novou instanci" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Přepínat mezi okny" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimalizovat nebo zobrazit přehled" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Zobrazit náhledy oken" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimalizovat nebo zobrazit náhledy oken" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Zaměřit nebo zobrazit náhledy oken" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Ukončit" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Chování při kliknutím prostředního tlačítka" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Prostřední tlačítko" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Chování při kliknutím prostředního tlačítka a stiknuté klávese Shift" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Shift + prostřední tlačítko" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Podsvícení ikon jako v Unity 7" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Použít převládající barvu ikony" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Vlastní styl indikátorů" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Barva" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Barva ohraničení" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Šířka ohraničení" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Kde zobrazit dok" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Zobrazit na všech obrazovkách" ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Umístění na obrazovce" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Dole" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Nahoře" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Skrýt dok, pokud překáží oknu aktivní aplikace. K dispozici jsou podrobnější " ++"nastavení." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Chytré skrývání" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Maximální velikost doku" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Režim panelu (roztáhnout dok po celé délce obrazovky)" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Maximální velikost ikon" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "" ++"Neměnná velikost ikon (rolováním na doku je možné zobrazit další ikony)" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Umístění a velikost" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Zobrazit oblíbené aplikace" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Zobrazit spuštěné aplikace" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Izolovat pracovní plochy" ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Izolovat obrazovky" ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Zobrazit náhledy oken" ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Pokud je zakázáno, jsou tato nastavení dostupná z GNOME Tweaks nebo z webové " ++"stránky GNOME Shell Extensions." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Tlačítko přístupu ke všem aplikacím" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Přesunout tlačítko přístupu ke všem aplikacím na začátek doku" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animace při zobrazení všech aplikací" ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Zobrazit koš" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Zobrazit připojené svazky a zařízení" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Spouštěče" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Povolit klávesovou zkratku Super+[0-9] pro spuštění aplikací; tuto " ++"klávesovou zkratku lze též použít s klávesami Shift a Ctrl." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Klávesová zkratka pro aktivaci aplikací" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Chování při kliknutí na ikonu běžící aplikace" ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Kliknutí tlačítkem myši" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Chování při rolování na ikoně běžící aplikace" ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Rolování kolečkem myši" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Nedělat nic" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Přepnout pracovní plochu" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Chování" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Nastavení kvůli integraci doku s výchozím motivem GNOME; jinak lze použít " ++"samostatné předvolby níže." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Použít výchozí motiv doku" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "Prostorově méně náročné zobrazení (zmenšení volného místa kolem ikon)" ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Zmenšený dok" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "Indikátory počtu otevřených oken" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "Výchozí" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Tečky" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Čtverečky" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Čárky" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Dělená linka" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Plná linka" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "Styl Ciliora" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "Styl Metro" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Nastavit barvu pozadí doku" ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Vlastní barva doku" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Nastavit průhlednost doku" ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Neměnná" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Dynamická" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Průhlednost" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner" ++msgstr "Zakázat zaoblené rohy" ++ ++#: Settings.ui.h:79 ++msgid "Appearance" ++msgstr "Vzhled" ++ ++#: Settings.ui.h:80 ++msgid "version: " ++msgstr "verze: " ++ ++#: Settings.ui.h:81 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Vytvoří dok z přehledu činností a oblíbených aplikací" ++ ++#: Settings.ui.h:82 ++msgid "Created by" ++msgstr "Autor" ++ ++#: Settings.ui.h:83 ++msgid "Webpage" ++msgstr "Webová stránka" ++ ++#: Settings.ui.h:84 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Na tento program NEJSOU POSKYTOVÁNY ZÁRUKY.\n" ++"Podrobněji viz GNU General Public License, verze 2 nebo pozdější." ++ ++#: Settings.ui.h:86 ++msgid "About" ++msgstr "O tomto doplňku" ++ ++#: Settings.ui.h:87 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Nastavit minimální a maximální hodnoty průhlednosti" ++ ++#: Settings.ui.h:88 ++msgid "Minimum opacity" ++msgstr "Minimální průhlednost" ++ ++#: Settings.ui.h:89 ++msgid "Maximum opacity" ++msgstr "Maximální průhlednost" ++ ++#: Settings.ui.h:90 ++msgid "Number overlay" ++msgstr "Čísla aplikací" ++ ++#: Settings.ui.h:91 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "Krátce ukázat čísla aplikací odpovídající klávesové zkratce" ++ ++#: Settings.ui.h:92 ++msgid "Show the dock if it is hidden" ++msgstr "Zobrazit dok, pokud je skrytý" ++ ++#: Settings.ui.h:93 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Pokud je nastaveno automatické skrývání, stisknutím klávesové zkratky se dok " ++"krátce zobrazí." ++ ++#: Settings.ui.h:94 ++msgid "Shortcut for the options above" ++msgstr "Klávesová zkratka" ++ ++#: Settings.ui.h:95 ++msgid "Syntax: , , , " ++msgstr "Syntaxe: , , , " ++ ++#: Settings.ui.h:96 ++msgid "Hide timeout (s)" ++msgstr "Prodleva při skrytí (s)" ++ ++#: Settings.ui.h:97 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Zobrazit dok najetím myši ke kraji obrazovky" ++ ++#: Settings.ui.h:98 ++msgid "Autohide" ++msgstr "Automatické skrývání" ++ ++#: Settings.ui.h:99 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Zobrazit dok až po zatlačení na kraj obrazovky" ++ ++#: Settings.ui.h:100 ++msgid "Enable in fullscreen mode" ++msgstr "Povolit celoobrazovkový režim" ++ ++#: Settings.ui.h:101 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Zobrazit dok pokud nepřekáží oknům aplikací" ++ ++#: Settings.ui.h:102 ++msgid "Dodge windows" ++msgstr "Uhýbání oknům" ++ ++#: Settings.ui.h:103 ++msgid "All windows" ++msgstr "Všechna okna" ++ ++#: Settings.ui.h:104 ++msgid "Only focused application's windows" ++msgstr "Pouze aktivní okna" ++ ++#: Settings.ui.h:105 ++msgid "Only maximized windows" ++msgstr "Pouze maximalizovaná okna" ++ ++#: Settings.ui.h:106 ++msgid "Animation duration (s)" ++msgstr "Trvání animace (s)" ++ ++#: Settings.ui.h:107 ++msgid "Show timeout (s)" ++msgstr "Prodleva při zobrazení (s)" ++ ++#: Settings.ui.h:108 ++msgid "Pressure threshold" ++msgstr "Míra tlaku (px)" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "Zobrazit u ikon tečku indikující každé otevřené okno aplikace" ++ ++#~ msgid "Show windows counter indicators" ++#~ msgstr "Indikátory počtu oken" ++ ++#~ msgid "Adaptive" ++#~ msgstr "Adaptivní" +diff --git a/po/de.po b/po/de.po +index 6e797d13..30119a76 100644 +--- a/po/de.po ++++ b/po/de.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# de.po (gnome-shell-extensions master) #-#-#-#-# + # German translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -8,8 +9,18 @@ + # Paul Seyfert , 2017. + # Tim Sabsch , 2019-2020. + # ++# #-#-#-#-# de.po (Dash to Dock) #-#-#-#-# ++# Translation for de ++# Copyright (C) 2014 Michele ++# This file is distributed under the same license as the dash-to-dock package. ++# Morris Jobke , 2014. ++# Jonatan Zeidler , 2012 ++# jonius , 2012 ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# de.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -23,6 +34,18 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Poedit 2.4.1\n" ++"#-#-#-#-# de.po (Dash to Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-06-04 12:35+0100\n" ++"PO-Revision-Date: 2017-12-11 19:21+0100\n" ++"Last-Translator: Klaus Staedtler \n" ++"Language-Team: jonius \n" ++"Language: de\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.0.4\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -160,7 +183,7 @@ msgstr "Schließen" + msgid "Unminimize" + msgstr "Minimieren rückgängig" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:50 + msgid "Minimize" + msgstr "Minimieren" + +@@ -270,6 +293,442 @@ msgstr "Arbeitsfläche %d" + msgid "Add Workspace" + msgstr "Arbeitsfläche hinzufügen" + ++# Konjugation wegen Stellung im Satz ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Primärer Anzeige" ++ ++# Konjugation wegen Stellung im Satz ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Sekundärer Anzeige" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "Rechts" ++ ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "Links" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Automatisches Ausblenden anpassen" ++ ++# Verwende Übersetzung aus Nautilus ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "Auf Vorgaben zurücksetzen" ++ ++#: prefs.js:386 ++msgid "Show dock and application numbers" ++msgstr "Zeige Dock und Anwendungsnummern" ++ ++#: prefs.js:443 ++msgid "Customize middle-click behavior" ++msgstr "Verhalten des mittleren Klick anpassen" ++ ++#: prefs.js:514 ++msgid "Customize running indicators" ++msgstr "Laufende Anzeigen anpassen" ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "Alle Fenster" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Anzeigenstil anpassen" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Farbe" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Randfarbe" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Randbreite" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Nummer der Überlagung" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Zeige vorübergehend die Nummer der Anwendung über den Icons, passend zum " ++"Tastaturkürzel." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Dock anzeigen wenn es versteckt ist" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Wenn automatisches Ausblenden benutzt wird, erscheint kurzzeitig das Dock " ++"durch drücken des Tastaturkürzels." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Tastaturkürzel für die obigen Aktionen" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Syntax: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Ausblende-Verzögerung in s" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Wenn auf »Minimieren« eingestellt, können durch Doppelklick alle Fenster der " ++"Anwendung gleichzeitig minimiert werden." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Wirkung bei Umschalttaste + Mausklick" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "Fenster anheben" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Minimieren" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Neues Fenster" ++ ++# Vielleicht einen Tick besser als „umschalten“? ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Zwischen den Fenstern der Anwendung wechseln" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "Beenden" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "Verhalten bei Mittel-Klick " ++ ++#: Settings.ui.h:20 ++#, fuzzy ++msgid "Middle-Click action" ++msgstr "Wirkung bei Mausklick" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Verhalten bei Umschalttaste+Mittel-Klick." ++ ++#: Settings.ui.h:22 ++#, fuzzy ++msgid "Shift+Middle-Click action" ++msgstr "Wirkung bei Umschalttaste + Mausklick" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "Dock anzeigen auf" ++ ++# Konjugation wegen Stellung im Satz ++#: Settings.ui.h:24 ++msgid "Show on all monitors." ++msgstr "Auf allen Bildschirmen anzeigen" ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Position auf Bildschirm" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Unten" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Oben" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Das Dock automatisch ausblenden, falls es ein Fenster der laufenden " ++"Anwendung überlagert. Einstellungen können weiter verfeinert werden." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Automatisch ausblenden" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Maximale Dockgröße" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Panelmodus: bis zu Bildschirmkanten ausdehnen" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Maximale Icongröße" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Feste Icongröße: andere Icons durch Scrollen sichtbar machen" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Position und Größe" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Favoriten anzeigen" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Laufende Anwendungen anzeigen" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Isoliere Arbeitsflächen." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Zeige Vorschau der geöffneten Fenster" ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Falls deaktiviert, sind diese Einstellungen über Gnome-Tweak-Tool oder die " ++"Erweiterungsseite erreichbar." ++ ++# Durchkopplung von Kompositum ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Symbol Anwendungen anzeigen anzeigen" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Anwendungen-anzeigen-Button an den Anfang verschieben." ++ ++# Durchkopplung von Kompositum ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Symbol Anwendungen anzeigen animieren" ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Starter" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Benutze Super+(0-9) als Tastaturkürzel um Anwendungen zu aktivieren. Kann " ++"auch zusammen mit Umschalttaste und Strg. genutzt werden." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Benutze Tastaturkürzel um Anwendungen zu aktivieren" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Verhalten bei Mausklick auf das Icon einer laufenden Anwendung." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Wirkung bei Mausklick" ++ ++#: Settings.ui.h:51 ++msgid "Minimize or overview" ++msgstr "Minimieren oder Übersicht" ++ ++#: Settings.ui.h:52 ++#, fuzzy ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Verhalten bei Mausklick auf das Icon einer laufenden Anwendung." ++ ++#: Settings.ui.h:53 ++#, fuzzy ++msgid "Scroll action" ++msgstr "Wirkung bei Mausklick" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "Nichts tun" ++ ++#: Settings.ui.h:55 ++msgid "Switch workspace" ++msgstr "Arbeitsfläche umschalten" ++ ++# Verwende Übersetzung aus Nautilus ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "Verhalten" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Einige Anpassungen, durch die das Dock besser in das standardmäßige GNOME-" ++"Thema eingepasst werden soll. Alternativ können im Folgenden besondere " ++"Einstellungen vorgenommen werden." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "Angepasstes Thema dieser Erweiterung nutzen" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "Platz sparen, indem Innenabstand und Eckenradius verkleinert werden." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "Dash verkleinern" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "Für jedes Fenster einer Anwendung einen kleinen Indikator einblenden." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "Indikatoren für Fensterzahl" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "Setze Hintergrundfarbe für das Dash" ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "Farbe des Dash anpassen" ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "Die Hintergrundtransparenz des Dash einstellen." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "Transparenz anpassen" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "Transparenz" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "Erzwinge rechte Ecke\n" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "Erscheinungsbild" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "Version: " ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Verwandelt das Dash aus dem Übersichtsmodus in ein Dock" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "Erstellt von" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "Internetseite" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Für dieses Programm besteht KEINERLEI GARANTIE.\n" ++" Details finden Sie in der GNU General Public License, Version 2 oder später." ++ ++# Verwende Übersetzung aus Nautilus ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "Info" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Dock einblenden, wenn Mauszeiger an Bildschirmkante anliegt." ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "Automatisch ausblenden" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "" ++"Anstoßen erforderlich: Dock nur einblenden, wenn Mauszeiger schnell gegen " ++"Bildschirmkante stößt" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "Im Vollbildmodus einschalten" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Dock einblenden, falls es keine Anwendungsfenster überlagert." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "Fenstern ausweichen" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "Alle Fenster" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "Nur Anwendungsfenster mit Fokus" ++ ++#: Settings.ui.h:86 ++msgid "Only maximized windows" ++msgstr "Nur maximierte Fenster" ++ ++# Nach DIN 1313 werden Einheiten nicht in Klammern gesetzt ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "Animationsdauer in s" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0,000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "Einblende-Verzögerung in s" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "Stoßschwellwert" ++ ++#: Settings.ui.h:91 ++msgid "Isolate monitors." ++msgstr "Isoliere Monitore." ++ + #~ msgid "Application" + #~ msgstr "Anwendung" + +@@ -354,3 +813,129 @@ msgstr "Arbeitsfläche hinzufügen" + #~ "Das Beispiel soll zeigen, wie sich korrekt verhaltende Erweiterungen für " + #~ "die Shell erstellt werden. Es enthält grundlegende Funktionalität.\n" + #~ "Es ist möglich, die Begrüßungsnachricht zu ändern." ++ ++#, fuzzy ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "Falls es zu viele Symbole auf dem Dock werden, dann bleibt nur " ++#~ "Anwendungen anzeigen aktiv." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Arbeitsfläche durch Scrollen wechseln" ++ ++#~ msgid "Only consider windows of the focused application" ++#~ msgstr "Nur Fenster der fokussierten Anwendung einbeziehen" ++ ++#~ msgid "Main Settings" ++#~ msgstr "Grundeinstellungen" ++ ++#~ msgid "Dock Position" ++#~ msgstr "Dock-Position" ++ ++#~ msgid "Dock is fixed and always visible" ++#~ msgstr "Das Dock hat eine feste Position und ist immer sichtbar" ++ ++#~ msgid "Show delay [ms]" ++#~ msgstr "Einblendeverzögerung [ms]" ++ ++#~ msgid "Hide delay [ms]" ++#~ msgstr "Ausblendeverzögerung [ms]" ++ ++#~ msgid "Application based intellihide" ++#~ msgstr "Anwendungsbasiertes intelligentes Verstecken" ++ ++#~ msgid "Show the dock on following monitor (if attached)" ++#~ msgstr "Zeige Dock auf folgendem Monitor (falls angeschlossen)" ++ ++#~ msgid "Primary (default)" ++#~ msgstr "Primäranzeige (Standard)" ++ ++#~ msgid "1" ++#~ msgstr "1" ++ ++#~ msgid "2" ++#~ msgstr "2" ++ ++#~ msgid "3" ++#~ msgstr "3" ++ ++#~ msgid "4" ++#~ msgstr "4" ++ ++#~ msgid "Max height" ++#~ msgstr "Maximale Höhe" ++ ++#~ msgid "Expand (experimental and buggy)" ++#~ msgstr "Komplette Höhe (experimentell und fehlerbehaftet)" ++ ++#~ msgid "Maximum icon size" ++#~ msgstr "Maximale Symbolgröße" ++ ++#~ msgid "16" ++#~ msgstr "16" ++ ++#~ msgid "24" ++#~ msgstr "24" ++ ++#~ msgid "32" ++#~ msgstr "32" ++ ++#~ msgid "48" ++#~ msgstr "48" ++ ++#~ msgid "64" ++#~ msgstr "64" ++ ++#~ msgid "Optional features" ++#~ msgstr "Optionale Funktionen" ++ ++#~ msgid "Deadtime between each workspace switching [ms]" ++#~ msgstr "Stillstandszeit zwischen Arbeitsflächenwechsel [ms]" ++ ++#~ msgid "Only a 1px wide area close to the screen edge is active" ++#~ msgstr "Nur einen 1 Pixel-breiten Bereich am Rand nutzen" ++ ++#~ msgid "All the area of the dock is active" ++#~ msgstr "Den gesamten Bereich des Docks nutzen" ++ ++#~ msgid "Customize actions on mouse click" ++#~ msgstr "Aktion bei Mausklick anpassen" ++ ++#~ msgid "Action on clicking on running app" ++#~ msgstr "Aktion beim Klicken auf eine laufende Anwendung" ++ ++#~ msgid "Minimize window on shift+click (double click for all app windows)" ++#~ msgstr "" ++#~ "Fenster mit Shift+Klick minimieren (Doppelklick für alle Fenster der " ++#~ "Anwendung)" ++ ++#~ msgid "Appearence and Themes" ++#~ msgstr "Erscheinungsbild und Themen" ++ ++#~ msgid "" ++#~ "A customized theme is built in the extension. This is meant to work with " ++#~ "the default Adwaita theme: the dash is shrunk to save space, its " ++#~ "background transparency reduced, and custom indicators for the number of " ++#~ "windows of each application are added." ++#~ msgstr "" ++#~ "Ein angepasstes Thema ist in dieser Erweiterung enthalten. Es ist für das " ++#~ "Vorgabe-Adwaita-Thema gedacht: Das Dash ist schmaler, um Platz zu sparen, " ++#~ "die Hintergrundtransparenz ist reduziert und für jede Anwendung wird ein " ++#~ "Indikator für die Anzahl der Fenster eingefügt." ++ ++#~ msgid "" ++#~ "Alternatively, for a better integration with custom themes, each " ++#~ "customization can be applied indipendently" ++#~ msgstr "" ++#~ "Alternativ können für eine bessere Integration Anpassungen vorgenommen " ++#~ "werden" ++ ++#~ msgid "Shrink the dash size by reducing padding" ++#~ msgstr "Das Dash schmaler machen durch Verkleinern des Abstands zum Rand" ++ ++#~ msgid "Apply custom theme (work only with the default Adwaita theme)" ++#~ msgstr "" ++#~ "Benutzerdefiniertes Theme verwenden (funktioniert nur mit dem Standard-" ++#~ "Adwaita-Theme)" +diff --git a/po/el.po b/po/el.po +index 59b14dfb..bd0a7a5f 100644 +--- a/po/el.po ++++ b/po/el.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# el.po (gnome-shell-extensions master) #-#-#-#-# + # Greek translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -7,8 +8,18 @@ + # Vangelis Skarmoutsos , 2013. + # Efstathios Iosifidis , 2013-2019. + # ++# #-#-#-#-# el.po (Dash to Dock) #-#-#-#-# ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# Δημήτριος-Ρωμανός Ησαΐας , 2017. ++# Vangelis Skarmoutsos , 2017. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# el.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -23,6 +34,19 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Poedit 1.8.7.1\n" + "X-Project-Style: gnome\n" ++"#-#-#-#-# el.po (Dash to Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-06-04 12:35+0100\n" ++"PO-Revision-Date: 2017-09-29 21:48+0300\n" ++"Last-Translator: Vangelis Skarmoutsos \n" ++"Language-Team:\n" ++"Language: el\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.0.3\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -159,7 +183,7 @@ msgstr "Κλείσιμο" + msgid "Unminimize" + msgstr "Αποελαχιστοποίηση" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:50 + msgid "Minimize" + msgstr "Ελαχιστοποίηση" + +@@ -268,6 +292,425 @@ msgstr "Χώρος εργασίας %d" + msgid "Add Workspace" + msgstr "Προσθήκη χώρου εργασίας" + ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "Αριστερά" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "Δεξιά" ++ ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Κύρια οθόνη" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Δευτερεύουσα οθόνη " ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Προσαρμογή έξυπνης απόκρυψης" ++ ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "Επαναφορά στις προεπιλογές" ++ ++#: prefs.js:386 ++msgid "Show dock and application numbers" ++msgstr "Προβολή της μπάρας και της αρίθμησης εφαρμογών" ++ ++#: prefs.js:443 ++msgid "Customize middle-click behavior" ++msgstr "Προσαρμογή συμπεριφοράς μεσαίου κλικ" ++ ++#: prefs.js:514 ++msgid "Customize running indicators" ++msgstr "Προσαρμογή δεικτών τρεχόντων εφαρμογών" ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "Όλα τα παράθυρα" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Προσαρμογή του στυλ του δείκτη" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Χρώμα" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Χρώμα περιγράμματος" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Πλάτος περιγράμματος" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Επίστρωση αριθμού" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Προσωρινή εμφάνιση αριθμών εφαρμογής πάνω από τα εικονίδια, που αντιστοιχούν " ++"στη συντόμευση πληκτρολογίου." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Προβολή της μπάρας αν είναι κρυμμένη" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Αν χρησιμοποιείται η αυτόματη απόκρυψη, η μπάρα θα εμφανίζεται για λίγο " ++"χρόνο όταν πατιέται η συντόμευση." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Συντόμευση για τις παραπάνω επιλογές" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Σύνταξη: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Καθυστέρηση απόκρυψης" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Όταν είναι ρυθμισμένο στην ελαχιστοποίηση, το διπλό κλικ ελαχιστοποιεί όλα " ++"τα παράθυρα της εφαρμογής." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Λειτουργία του Shift+Click" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "Ανύψωση παραθύρου" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Ελαχιστοποίηση παραθύρου" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Εκκίνηση νέου παραθύρου" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Περιήγηση στα ανοικτά παράθυρα" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "Έξοδος" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "Συμπεριφορά μεσαίου κλικ." ++ ++#: Settings.ui.h:20 ++msgid "Middle-Click action" ++msgstr "Λειτουργία του μεσαίου κλικ" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Συμπεριφορά Shift+Μεσαίο κλικ." ++ ++#: Settings.ui.h:22 ++msgid "Shift+Middle-Click action" ++msgstr "Λειτουργία του Shift+Μεσαίο κλικ" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "Εμφάνιση της μπάρας στην" ++ ++#: Settings.ui.h:24 ++msgid "Show on all monitors." ++msgstr "Εμφάνιση σε όλες τις οθόνες." ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Θέση στην οθόνη" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Κάτω" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Πάνω" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the the current application. " ++"More refined settings are available." ++msgstr "" ++"Απόκρυψη της μπάρας όταν εμποδίζει ένα παράθυρο της τρέχουσας εφαρμογής. Πιο " ++"εξειδικευμένες επιλογές είναι επίσης διαθέσιμες." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Έξυπνη απόκρυψη" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Περιορισμός μεγέθους μπάρας" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Λειτουργιά πάνελ: επέκταση της μπάρας ως τις άκρες της οθόνης" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Περιορισμός μεγέθους εικονιδίων" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "" ++"Σταθερό μέγεθος εικονιδίων: κύλιση για την εμφάνιση περαιτέρω εικονιδίων" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Θέση και μέγεθος" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Εμφάνιση αγαπημένων εφαρμογών" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Εμφάνιση εκτελούμενων εφαρμογών" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Απομόνωση χώρων εργασίας." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Εμφάνιση προεπισκόπησης ανοικτών παραθύρων." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Αν είναι απενεργοποιημένο, αυτές οι ρυθμίσεις είναι προσβάσιμες από το " ++"εργαλείο μικρορυθμίσεων του GNOME ή τον ιστοτόπο επεκτάσεων." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Εμφάνιση εικονιδίου Εφαρμογές" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Μετακίνηση του πλήκτρου εφαρμογών στην αρχή της μπάρας." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Ενεργοποίηση γραφικών κατά την Εμφάνιση Εφαρμογών." ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Εκκινητές" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Ενεργοποίηση του Super+(0-9) ως συντομεύσεις για την ενεργοποίηση εφαρμογών. " ++"Μπορεί επίσης να χρησιμοποιηθεί με το Shift και το Ctrl." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Χρήση συντομεύσεων πληκτρολογίου για την ενεργοποίηση εφαρμογών" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Συμπεριφορά κατά το κλικ σε εικονίδιο τρέχουσας εφαρμογής." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Συμπεριφορά κλικ" ++ ++#: Settings.ui.h:51 ++msgid "Minimize or overview" ++msgstr "Ελαχιστοποίηση ή επισκόπηση" ++ ++#: Settings.ui.h:52 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Συμπεριφορά κατά την κύλιση σε εικονίδιο τρέχουσας εφαρμογής." ++ ++#: Settings.ui.h:53 ++msgid "Scroll action" ++msgstr "Συμπεριφορά κύλισης" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "Καμία δράση" ++ ++#: Settings.ui.h:55 ++msgid "Switch workspace" ++msgstr "Αλλαγή χώρου εργασίας" ++ ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "Συμπεριφορά" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Μερικές προσαρμογές στοχεύουν στο να ενοποιήσουν την μπάρα με το " ++"προκαθορισμένο θέμα του GNOME. Εναλλακτικά, ειδικές επιλογές μπορούν να " ++"ενεργοποιηθούν παρακάτω." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "Χρήση ενσωματωμένου θέματος" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "Εξοικονόμηση χώρου μειώνοντας τα κενά και τα περιθώρια." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "Σμίκρυνση της μπάρας" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "Εμφανίζει μία τελεία για κάθε παράθυρο της εφαρμογής." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "Εμφάνιση μετρητή παραθύρων" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "Ορισμός χρώματος φόντου της μπάρας." ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "Προσαρμογή του χρώματος της μπάρας" ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "Αλλαγή της αδιαφάνειας του φόντου της μπάρας." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "Προσαρμογή αδιαφάνειας" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "Αδιαφάνεια" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "Εξαναγκασμός ευθείας γωνίας\n" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "Εμφάνιση" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "έκδοση: " ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "" ++"Μετακινεί το ταμπλό και εκτός της προεπισκόπησης μετατρέποντάς το σε μπάρα " ++"εφαρμογών" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "Δημιουργήθηκε από" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "Ιστοσελίδα" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Αυτό πρόγραμμα παρέχεται χωρίς ΑΠΟΛΥΤΩΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ.\n" ++"Για λεπτομέρειες δείτε την Γενική δημόσια άδεια GNU, έκδοση 2 ή νεότερη. " ++ ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "Περί" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Εμφάνιση της μπάρας όταν το ποντίκι πηγαίνει στην άκρη της οθόνης." ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "Αυτόματη απόκρυψη" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Πίεση για εμφάνιση: απαιτείται πίεση για την εμφάνιση της μπάρας" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "Ενεργοποίηση σε κατάσταση πλήρους οθόνης" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Εμφάνιση της μπάρας όταν δεν εμποδίζει τα παράθυρά των εφαρμογών." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "Αποφυγή παραθύρων" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "Όλα τα παράθυρα" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "Μόνο τα παράθυρα της εστιασμένης εφαρμογής" ++ ++#: Settings.ui.h:86 ++msgid "Only maximized windows" ++msgstr "Μόνο μεγιστοποιημένα παράθυρα" ++ ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "Διάρκεια κίνησης γραφικών (s)" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0.000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "Χρονικό όριο εμφάνισης" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "Ελάχιστη πίεση" ++ + #~ msgid "Application" + #~ msgstr "Εφαρμογή" + +@@ -389,12 +832,6 @@ msgstr "Προσθήκη χώρου εργασίας" + #~ msgid "Normal" + #~ msgstr "Κανονικό" + +-#~ msgid "Left" +-#~ msgstr "Αριστερά" +- +-#~ msgid "Right" +-#~ msgstr "Δεξιά" +- + #~ msgid "Upside-down" + #~ msgstr "Αναποδογυρισμένο" + +diff --git a/po/es.po b/po/es.po +index d0b5ab1f..eaafe99e 100644 +--- a/po/es.po ++++ b/po/es.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# es.po (gnome-shell-extensions master) #-#-#-#-# + # Spanish translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -6,8 +7,15 @@ + # + # Daniel Mustieles , 2011-2020. + # ++# #-#-#-#-# es.po #-#-#-#-# ++# Dash to Dock spanish translation. ++# This file is distributed under the same license as the Dash to Dock package. ++# Hugo Olabera , 2015. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# es.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -21,6 +29,19 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Gtranslator 3.36.0\n" ++"#-#-#-#-# es.po #-#-#-#-#\n" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2019-03-06 01:57-0600\n" ++"PO-Revision-Date: 2020-03-23 11:25+0100\n" ++"Last-Translator: Adolfo Jayme Barrientos \n" ++"Language-Team: \n" ++"Language: es\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -155,7 +176,7 @@ msgstr "Cerrar" + msgid "Unminimize" + msgstr "Desminimizar" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:50 + msgid "Minimize" + msgstr "Minimizar" + +@@ -264,6 +285,505 @@ msgstr "Área de trabajo %d" + msgid "Add Workspace" + msgstr "Añadir área de trabajo" + ++#: prefs.js:306 Settings.ui.h:25 ++msgid "Left" ++msgstr "Izquierda" ++ ++#: prefs.js:305 Settings.ui.h:28 ++msgid "Right" ++msgstr "Derecha" ++ ++#: prefs.js:264 ++msgid "Primary monitor" ++msgstr "Monitor principal" ++ ++#: prefs.js:273 prefs.js:280 ++msgid "Secondary monitor " ++msgstr "Monitor secundario" ++ ++#: prefs.js:356 ++msgid "Intelligent autohide customization" ++msgstr "Personalización de ocultamiento inteligente" ++ ++#: prefs.js:363 prefs.js:548 prefs.js:604 ++msgid "Reset to defaults" ++msgstr "Restablecer la configuración predeterminada" ++ ++#: prefs.js:541 ++msgid "Show dock and application numbers" ++msgstr "Mostrar dock y números de aplicación" ++ ++#: prefs.js:597 ++msgid "Customize middle-click behavior" ++msgstr "Personalizar comportamiento del botón central" ++ ++#: prefs.js:680 ++msgid "Customize running indicators" ++msgstr "Personalizar indicadores de ejecución" ++ ++#: appIcons.js:790 ++msgid "All Windows" ++msgstr "Todas las ventanas" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1092 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s • Dash to Dock" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Cuando se selecciona minimizar, una pulsación doble minimiza todas las " ++"ventanas de la aplicación." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Acción de Mayús + pulsación" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Elevar ventana" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimizar ventana" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Iniciar una instancia nueva" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Alternar entre ventanas" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimizar o vista de actividades" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Mostrar previsualizaciones de ventanas" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimizar o mostrar previsualizaciones" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Focalizar o mostrar previsualizaciones" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Salir" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Comportamiento del botón central" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Acción del botón central" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Comportamiento de Mayús + botón central" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Acción de Mayús + botón central" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Activar elementos retroiluminados a la Unity 7" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Utilizar el color dominante" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Personalizar estilo del indicador" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Color" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Color del borde" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Grosor del borde" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Mostrar el dock en" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Mostrar en todos los monitores." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Posición en pantalla" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Inferior" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Superior" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Ocultar el dock cuando cubre una ventana de la aplicación activa. Otras " ++"opciones disponibles." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Ocultamiento automático inteligente" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Tamaño máximo del dock" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Modo panel: extender hasta los bordes de la pantalla" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Tamaño máximo de los iconos" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Tamaño fijo de los iconos: desplazarse para mostrar otros" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Posición y tamaño" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Mostrar aplicaciones favoritas" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Mostrar aplicaciones en ejecución" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Aislar los espacios de trabajo." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Aislar los monitores." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Mostrar vista rápida de ventanas." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Si se desactiva, estas opciones estarán disponibles en Retoques de GNOME y " ++"el sitio web de la extensión." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Mostrar el icono Aplicaciones" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Mover el botón de aplicaciones al comienzo del dock" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animar Mostrar aplicaciones" ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Lanzadores" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Activar Súper + (0-9) como atajos para activar aplicaciones. Pueden " ++"emplearse en conjunto con Mayús y Ctrl." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Usar atajos de teclado para activar aplicaciones" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Comportamiento al pulsar el icono de una aplicación en ejecución" ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Acción al pulsar" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Comportamiento al usar la rueda sobre el icono de una aplicación." ++ ++#: Settings.ui.h:52 ++msgid "Scroll action" ++msgstr "Acción al desplazarse" ++ ++#: Settings.ui.h:53 ++msgid "Do nothing" ++msgstr "No hacer nada" ++ ++#: Settings.ui.h:54 ++msgid "Switch workspace" ++msgstr "Cambiar de espacio de trabajo." ++ ++#: Settings.ui.h:55 ++msgid "Behavior" ++msgstr "Comportamiento" ++ ++#: Settings.ui.h:56 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Utilizar el tema predeterminado de GNOME. Alternativamente, pueden elegirse " ++"ciertas opciones más abajo." ++ ++#: Settings.ui.h:57 ++msgid "Use built-in theme" ++msgstr "Utilizar el tema incorporado" ++ ++#: Settings.ui.h:58 ++msgid "Save space reducing padding and border radius." ++msgstr "Reducir los márgenes para ganar espacio" ++ ++#: Settings.ui.h:59 ++msgid "Shrink the dash" ++msgstr "Encoger el tablero" ++ ++#: Settings.ui.h:60 ++msgid "Customize windows counter indicators" ++msgstr "Personalizar los contadores de ventanas" ++ ++#: Settings.ui.h:61 ++msgid "Default" ++msgstr "Predeterminado" ++ ++#: Settings.ui.h:62 ++msgid "Dots" ++msgstr "Puntos" ++ ++#: Settings.ui.h:63 ++msgid "Squares" ++msgstr "Cuadrados" ++ ++#: Settings.ui.h:64 ++msgid "Dashes" ++msgstr "Rayas" ++ ++#: Settings.ui.h:65 ++msgid "Segmented" ++msgstr "Segmentado" ++ ++#: Settings.ui.h:66 ++msgid "Solid" ++msgstr "Sólido" ++ ++#: Settings.ui.h:67 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:68 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:69 ++msgid "Set the background color for the dash." ++msgstr "Escoger el color de fondo del dock." ++ ++#: Settings.ui.h:70 ++msgid "Customize the dash color" ++msgstr "Personalizar el color del dock" ++ ++#: Settings.ui.h:71 ++msgid "Tune the dash background opacity." ++msgstr "Ajustar la opacidad del fondo del dock." ++ ++#: prefs.js:792 Settings.ui.h:72 ++msgid "Customize opacity" ++msgstr "Personalizar opacidad" ++ ++#: Settings.ui.h:73 ++msgid "Fixed" ++msgstr "Fijo" ++ ++#: Settings.ui.h:74 ++msgid "Dynamic" ++msgstr "Dinámico" ++ ++#: Settings.ui.h:75 ++msgid "Opacity" ++msgstr "Opacidad" ++ ++#: Settings.ui.h:76 ++msgid "Force straight corner" ++msgstr "Forzar esquinas rectas" ++ ++#: Settings.ui.h:78 ++msgid "Appearance" ++msgstr "Apariencia" ++ ++#: Settings.ui.h:79 ++msgid "version: " ++msgstr "versión: " ++ ++#: Settings.ui.h:80 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "" ++"Mueve el panel fuera de la vista de actividades trasformándolo en un dock" ++ ++#: Settings.ui.h:81 ++msgid "Created by" ++msgstr "Creado por" ++ ++#: Settings.ui.h:82 ++msgid "Webpage" ++msgstr "Sitio web" ++ ++#: Settings.ui.h:83 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Este programa viene SIN NINGUNA GARANTÍA.\n" ++"Consulte la Licencia Pública General de GNU, versión 2 o posterior para obtener " ++"más detalles." ++ ++#: Settings.ui.h:85 ++msgid "About" ++msgstr "Acerca de" ++ ++#: Settings.ui.h:86 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Personalizar los valores mínimo y máximo de opacidad" ++ ++#: Settings.ui.h:87 ++msgid "Minimum opacity" ++msgstr "Opacidad mínima" ++ ++#: Settings.ui.h:88 ++msgid "Maximum opacity" ++msgstr "Opacidad máxima" ++ ++#: Settings.ui.h:89 ++msgid "Number overlay" ++msgstr "Número sobrepuesto" ++ ++#: Settings.ui.h:90 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Al usar atajos, mostrar momentáneamente el número de aplicación sobre los " ++"iconos." ++ ++#: Settings.ui.h:91 ++msgid "Show the dock if it is hidden" ++msgstr "Mostrar el dock si está oculto" ++ ++#: Settings.ui.h:92 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Si se activa el ocultamiento automático, el dock aparecerá momentáneamente " ++"al usar el atajo." ++ ++#: Settings.ui.h:93 ++msgid "Shortcut for the options above" ++msgstr "Atajo para las opciones anteriores" ++ ++#: Settings.ui.h:94 ++msgid "Syntax: , , , " ++msgstr "Sintaxis: , , , " ++ ++#: Settings.ui.h:95 ++msgid "Hide timeout (s)" ++msgstr "Tiempo de ocultación (s)" ++ ++#: Settings.ui.h:96 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Mostrar el dock al mover el puntero al borde de la pantalla" ++ ++#: Settings.ui.h:97 ++msgid "Autohide" ++msgstr "Ocultar automáticamente" ++ ++#: Settings.ui.h:98 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Empujar para mostrar: requiere hacer presión para mostrar el dock" ++ ++#: Settings.ui.h:99 ++msgid "Enable in fullscreen mode" ++msgstr "Activar en modo de pantalla completa" ++ ++#: Settings.ui.h:100 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Mostrar el dock cuando no cubra otras ventanas de aplicaciones." ++ ++#: Settings.ui.h:101 ++msgid "Dodge windows" ++msgstr "Esquivar las ventanas" ++ ++#: Settings.ui.h:102 ++msgid "All windows" ++msgstr "Todas las ventanas" ++ ++#: Settings.ui.h:103 ++msgid "Only focused application's windows" ++msgstr "Solo las ventanas de la aplicación activa" ++ ++#: Settings.ui.h:104 ++msgid "Only maximized windows" ++msgstr "Solo las ventanas maximizadas" ++ ++#: Settings.ui.h:105 ++msgid "Animation duration (s)" ++msgstr "Duración de la animación (s)" ++ ++#: Settings.ui.h:106 ++msgid "Show timeout (s)" ++msgstr "Tiempo de aparición (s)" ++ ++#: Settings.ui.h:107 ++msgid "Pressure threshold" ++msgstr "Nivel de presión" ++ ++#: Settings.ui.h:108 ++msgid "Show trash can" ++msgstr "Mostrar el icono Papelera" ++ ++#: Settings.ui.h:109 ++msgid "Show mounted volumes and devices" ++msgstr "Mostrar los dispositivos montados" ++ + #~ msgid "Application" + #~ msgstr "Aplicación" + +@@ -387,12 +907,6 @@ msgstr "Añadir área de trabajo" + #~ msgid "Normal" + #~ msgstr "Normal" + +-#~ msgid "Left" +-#~ msgstr "Izquierda" +- +-#~ msgid "Right" +-#~ msgstr "Derecha" +- + #~ msgid "Upside-down" + #~ msgstr "Hacia abajo" + +diff --git a/po/eu.po b/po/eu.po +index 094f6749..f3e26694 100644 +--- a/po/eu.po ++++ b/po/eu.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# eu.po (gnome-shell-extensions master) #-#-#-#-# + # Basque translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -7,9 +8,18 @@ + # Edurne Labaka , 2015. + # Asier Sarasua Garmendia , 2019, 2020. + # ++# #-#-#-#-# eu.po #-#-#-#-# ++# Dash to Dock Basque translation. ++# This file is distributed under the same license as the Dash to Dock package. ++# Ibai Oihanguren Sala , 2020. ++# ++#, fuzzy + msgid "" +-msgstr "Project-Id-Version: gnome-shell-extensions master\n" +-"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues\n" ++msgstr "" ++"#-#-#-#-# eu.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-shell-extensions master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" ++"issues\n" + "POT-Creation-Date: 2020-05-28 00:55+0000\n" + "PO-Revision-Date: 2020-08-10 00:42+0200\n" + "Last-Translator: Asier Sarasua Garmendia \n" +@@ -21,6 +31,17 @@ msgstr "Project-Id-Version: gnome-shell-extensions master\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Project-Style: gnome\n" + "X-Generator: Poedit 2.2.3\n" ++"#-#-#-#-# eu.po #-#-#-#-#\n" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-03-22 23:54+0100\n" ++"PO-Revision-Date: 2020-03-22 23:54+0100\n" ++"Last-Translator: Ibai Oihanguren Sala \n" ++"Language-Team: \n" ++"Language: eu\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -46,7 +67,9 @@ msgstr "Aplikazioen eta laneko areen zerrenda" + msgid "" + "A list of strings, each containing an application id (desktop file name), " + "followed by a colon and the workspace number" +-msgstr "Kateen zerrenda bat, bakoitzak aplikazio-ID bat duena (mahaigainaren fitxategi-izena) eta jarraian bi puntu eta laneko arearen zenbakia dituena" ++msgstr "" ++"Kateen zerrenda bat, bakoitzak aplikazio-ID bat duena (mahaigainaren " ++"fitxategi-izena) eta jarraian bi puntu eta laneko arearen zenbakia dituena" + + #: extensions/auto-move-windows/prefs.js:35 + msgid "Workspace Rules" +@@ -80,7 +103,11 @@ msgid "" + "Try to use more screen for placing window thumbnails by adapting to screen " + "aspect ratio, and consolidating them further to reduce the bounding box. " + "This setting applies only with the natural placement strategy." +-msgstr "Saiatu pantaila gehiago erabiltzen leihoen koadro txikiak kokatzeko pantailaren aspektu-erlaziora egokituz, eta haiek taldekatu muga-koadroa txikiagotzeko. Ezarpen hau kokapen naturalaren estrategiarekin soilik aplikatzen da." ++msgstr "" ++"Saiatu pantaila gehiago erabiltzen leihoen koadro txikiak kokatzeko " ++"pantailaren aspektu-erlaziora egokituz, eta haiek taldekatu muga-koadroa " ++"txikiagotzeko. Ezarpen hau kokapen naturalaren estrategiarekin soilik " ++"aplikatzen da." + + #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 + msgid "Place window captions on top" +@@ -91,7 +118,10 @@ msgid "" + "If true, place window captions on top the respective thumbnail, overriding " + "shell default of placing it at the bottom. Changing this setting requires " + "restarting the shell to have any effect." +-msgstr "TRUE (egia) bada, leihoen epigrafeak dagokien koadro txikien gainean jarriko ditu, Shell-aren lehenespena (behean jartzearena) gainidatziz. Ezarpen hau aldatzeko eta aplikatzeko Shell berrabiarazi behar da." ++msgstr "" ++"TRUE (egia) bada, leihoen epigrafeak dagokien koadro txikien gainean jarriko " ++"ditu, Shell-aren lehenespena (behean jartzearena) gainidatziz. Ezarpen hau " ++"aldatzeko eta aplikatzeko Shell berrabiarazi behar da." + + #: extensions/places-menu/extension.js:89 + #: extensions/places-menu/extension.js:93 +@@ -145,7 +175,7 @@ msgstr "Itxi" + msgid "Unminimize" + msgstr "Leheneratu" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:53 + msgid "Minimize" + msgstr "Minimizatu" + +@@ -189,7 +219,10 @@ msgstr "Noiz elkartu leihoak" + msgid "" + "Decides when to group windows from the same application on the window list. " + "Possible values are “never”, “auto” and “always”." +-msgstr "Aplikazio bereko leihoak leihoen zerrendan noiz elkartuko diren erabakitzen du. Balio erabilgarriak: “never“ (inoiz ere ez), “auto“ (automatikoa) eta “always“ (beti)." ++msgstr "" ++"Aplikazio bereko leihoak leihoen zerrendan noiz elkartuko diren erabakitzen " ++"du. Balio erabilgarriak: “never“ (inoiz ere ez), “auto“ (automatikoa) eta " ++"“always“ (beti)." + + #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 + #: extensions/window-list/prefs.js:100 +@@ -198,7 +231,8 @@ msgstr "Erakutsi laneko area guztietako leihoak" + + #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 + msgid "Whether to show windows from all workspaces or only the current one." +-msgstr "Laneko area guztietako leihoak edo uneko areakoak soilik erakutsiko diren." ++msgstr "" ++"Laneko area guztietako leihoak edo uneko areakoak soilik erakutsiko diren." + + #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 + msgid "Show the window list on all monitors" +@@ -208,7 +242,9 @@ msgstr "Erakutsi leihoen zerrenda pantaila guztietan" + msgid "" + "Whether to show the window list on all connected monitors or only on the " + "primary one." +-msgstr "Leihoen zerrenda konektatutako pantaila guztietan edo soilik pantaila nagusian erakutsiko den." ++msgstr "" ++"Leihoen zerrenda konektatutako pantaila guztietan edo soilik pantaila " ++"nagusian erakutsiko den." + + #: extensions/window-list/prefs.js:29 + msgid "Window Grouping" +@@ -248,6 +284,528 @@ msgstr "%d. laneko area" + msgid "Add Workspace" + msgstr "Gehitu laneko area" + ++#: prefs.js:310 Settings.ui.h:26 ++msgid "Left" ++msgstr "Ezkerrean" ++ ++#: prefs.js:309 Settings.ui.h:29 ++msgid "Right" ++msgstr "Eskuinean" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "Monitore nagusia" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "Bigarren monitorea " ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "Ezkutatze adimentsuaren pertsonalizazioa" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "Berrezarri balio lehenetsiak" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "Erakutsi atrakea eta aplikazioen zenbakiak" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "Pertsonalizatu erdiko klikaren portaera" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "Pertsonalizatu martxan egotearen adierazleak" ++ ++#: prefs.js:804 Settings.ui.h:75 ++msgid "Customize opacity" ++msgstr "Pertsonalizatu opakutasuna" ++ ++#: appIcons.js:792 ++msgid "All Windows" ++msgstr "Leiho guztiak" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1119 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %s" ++ ++#: locations.js:65 ++msgid "Trash" ++msgstr "Zakarrontzia" ++ ++#: locations.js:74 ++msgid "Empty Trash" ++msgstr "Hustu zakarrontzia" ++ ++#: locations.js:189 ++msgid "Mount" ++msgstr "Muntatu" ++ ++#: locations.js:232 ++msgid "Eject" ++msgstr "Egotzi" ++ ++#: locations.js:237 ++msgid "Unmount" ++msgstr "Desmuntatu" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Minimizatzea hautatuz gero, klik bikoitzak aplikazioaren leiho guztiak " ++"minimizatzen ditu." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Maius+Klik ekintza" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Goratu leihoa" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimizatu leihoa" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Abiarazi instantzia berria" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Txandakatu leihoak" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimizatu edo ikuspegi orokorra" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Erakutsi leihoen aurrebistak" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimizatu edo erakutsi aurrebistak" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Fokuratu edo erakutsi aurrebistak" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Irten" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Erdiko klikaren portaera" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Erdiko klikaren ekintza" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Maius+Erdiko klikaren portaera" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Maius+Erdiko klikaren ekintza" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Gaitu Unity7 erako atzeko argidun elementu distiratsuak" ++ ++#: Settings.ui.h:17 ++msgid "Apply glossy effect." ++msgstr "Aplikatu efektu distiratsua." ++ ++#: Settings.ui.h:18 ++msgid "Use dominant color" ++msgstr "Erabili kolore nagusia" ++ ++#: Settings.ui.h:19 ++msgid "Customize indicator style" ++msgstr "Pertsonalizatu adierazleen estiloa" ++ ++#: Settings.ui.h:20 ++msgid "Color" ++msgstr "Kolorea" ++ ++#: Settings.ui.h:21 ++msgid "Border color" ++msgstr "Ertzaren kolorea" ++ ++#: Settings.ui.h:22 ++msgid "Border width" ++msgstr "Ertzaren zabalera" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "Erakutsi atrakea hemen" ++ ++#: Settings.ui.h:24 ++msgid "Show on all monitors." ++msgstr "Erakutsi monitore guztietan." ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Pantailako posizioa" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Behean" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Goian" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Ezkutatu atrakea uneko aplikazioaren leiho bat eragozten duenean. Ezarpen " ++"zehatzagoak erabilgarri daude." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Ezkutatze adimentsua" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Atrakearen tamaina-muga" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Panel modua: hedatu pantailaren ertzetara" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Ikonoen tamaina-muga" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Ikono-tamaina finkoa: korritu beste ikonoak erakusteko" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Posizioa eta tamaina" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Erakutsi gogoko aplikazioak" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Erakutsi martxan dauden aplikazioak" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Isolatu laneako areak." ++ ++#: Settings.ui.h:40 ++msgid "Isolate monitors." ++msgstr "Isolatu monitoreak." ++ ++#: Settings.ui.h:41 ++msgid "Show open windows previews." ++msgstr "Erakutsi irekitako leihoen aurrebistak." ++ ++#: Settings.ui.h:42 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Desgaituz gero, ezarpen hauek gnome-tweak-tool aplikazioan edo hedapenen " ++"webgunean daude erabilgarri." ++ ++#: Settings.ui.h:43 ++msgid "Show Applications icon" ++msgstr "Erakutsi Aplikazioak ikonoa" ++ ++#: Settings.ui.h:44 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Eraman aplikazioen botoia atrakearen hasierara." ++ ++#: Settings.ui.h:45 ++msgid "Animate Show Applications." ++msgstr "Animatu Erakutsi aplikazioak ekintza." ++ ++#: Settings.ui.h:46 ++msgid "Show trash can" ++msgstr "Erakutsi zakarrontzia" ++ ++#: Settings.ui.h:47 ++msgid "Show mounted volumes and devices" ++msgstr "Erakutsi muntatutako bolumen eta gailuak" ++ ++#: Settings.ui.h:48 ++msgid "Launchers" ++msgstr "Abiarazleak" ++ ++#: Settings.ui.h:49 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Gaitu Super+(0-9) aplikazioak aktibatzeko laster-tekla gisa. Maius eta Ktrl " ++"teklekin batera ere erabil daiteke." ++ ++#: Settings.ui.h:50 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Erabili laster-teklak aplikazioak aktibatzeko" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Martxan dagoen aplikazio baten ikonoak klik egitean duen portaera." ++ ++#: Settings.ui.h:52 ++msgid "Click action" ++msgstr "Klik ekintza" ++ ++#: Settings.ui.h:54 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Aplikazio baten ikonoaren gainean sagua korritzean duen portaera." ++ ++#: Settings.ui.h:55 ++msgid "Scroll action" ++msgstr "Korritze-ekintza" ++ ++#: Settings.ui.h:56 ++msgid "Do nothing" ++msgstr "Ez egin ezer" ++ ++#: Settings.ui.h:57 ++msgid "Switch workspace" ++msgstr "Aldatu laneko areaz" ++ ++#: Settings.ui.h:58 ++msgid "Behavior" ++msgstr "Portaera" ++ ++#: Settings.ui.h:59 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Atrakea GNOMEren gai lehenetsiarekin integratzeko ezarritako pertsonalizazio " ++"txikiak. Honen ordez aukera zehatzak gaitu daitezke jarraian." ++ ++#: Settings.ui.h:60 ++msgid "Use built-in theme" ++msgstr "Erabili integrazio gaia" ++ ++#: Settings.ui.h:61 ++msgid "Save space reducing padding and border radius." ++msgstr "Hartu leku gutxiago betegarria eta ertzen erradioa txikituz." ++ ++#: Settings.ui.h:62 ++msgid "Shrink the dash" ++msgstr "Txikiagotu abiarazle-panela" ++ ++#: Settings.ui.h:63 ++msgid "Customize windows counter indicators" ++msgstr "Pertsonalizatu leiho kopuruen adierazleak" ++ ++#: Settings.ui.h:64 ++msgid "Default" ++msgstr "Lehenetsia" ++ ++#: Settings.ui.h:65 ++msgid "Dots" ++msgstr "Puntuak" ++ ++#: Settings.ui.h:66 ++msgid "Squares" ++msgstr "Laukiak" ++ ++#: Settings.ui.h:67 ++msgid "Dashes" ++msgstr "Marrak" ++ ++#: Settings.ui.h:68 ++msgid "Segmented" ++msgstr "Zatikatua" ++ ++#: Settings.ui.h:69 ++msgid "Solid" ++msgstr "Solidoa" ++ ++#: Settings.ui.h:70 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:71 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:72 ++msgid "Set the background color for the dash." ++msgstr "Ezarri abiarazle-panelaren atzeko planoko kolorea" ++ ++#: Settings.ui.h:73 ++msgid "Customize the dash color" ++msgstr "Personalizatu abiarazle-panelaren kolorea" ++ ++#: Settings.ui.h:74 ++msgid "Tune the dash background opacity." ++msgstr "Doitu abiarazle-panelaren atzeko planoaren opakutasuna." ++ ++#: Settings.ui.h:76 ++msgid "Fixed" ++msgstr "Finkoa" ++ ++#: Settings.ui.h:77 ++msgid "Dynamic" ++msgstr "Dinamikoa" ++ ++#: Settings.ui.h:78 ++msgid "Opacity" ++msgstr "Opakutasuna" ++ ++#: Settings.ui.h:79 ++msgid "Force straight corner\n" ++msgstr "Behartu erpin zuzena\n" ++ ++#: Settings.ui.h:80 ++msgid "Appearance" ++msgstr "Itxura" ++ ++#: Settings.ui.h:81 ++msgid "version: " ++msgstr "bertsioa: " ++ ++#: Settings.ui.h:82 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Abiarazle-panela ikuspegi orokorretik ateratzen du, atrake bihurtuz" ++ ++#: Settings.ui.h:83 ++msgid "Created by" ++msgstr "Sortzaileak" ++ ++#: Settings.ui.h:84 ++msgid "Webpage" ++msgstr "Webgunea" ++ ++#: Settings.ui.h:85 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Programa honek ez du inolako bermerik.\n" ++"Xehetasun gehiagorako, ikusi GNUren Lizentzia Publiko Orokorra, 2. bertsioa edo " ++"berriagoa" ++ ++#: Settings.ui.h:87 ++msgid "About" ++msgstr "Honi buruz" ++ ++#: Settings.ui.h:88 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Pertsonalizatu opakutasun minimo eta maximoa" ++ ++#: Settings.ui.h:89 ++msgid "Minimum opacity" ++msgstr "Opakutasun minimoa" ++ ++#: Settings.ui.h:90 ++msgid "Maximum opacity" ++msgstr "Opakutasun maximoa" ++ ++#: Settings.ui.h:91 ++msgid "Number overlay" ++msgstr "Gainjarritako zenbakiak" ++ ++#: Settings.ui.h:92 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Erakutsi une batez laster-teklei dagozkien aplikazio-zenbakiak ikonoen " ++"gainean." ++ ++#: Settings.ui.h:93 ++msgid "Show the dock if it is hidden" ++msgstr "Erakutsi atrakea ezkutatua badago" ++ ++#: Settings.ui.h:94 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Ezkutatze automatikoa erabiltzean, laster-tekla sakatuz atrakea une baterako " ++"azalduko da." ++ ++#: Settings.ui.h:95 ++msgid "Shortcut for the options above" ++msgstr "Goiko aukeretarako laster-teklak" ++ ++#: Settings.ui.h:96 ++msgid "Syntax: , , , " ++msgstr "Sintaxia: , , , " ++ ++#: Settings.ui.h:97 ++msgid "Hide timeout (s)" ++msgstr "Ezkutatzeko denbora-muga (s)" ++ ++#: Settings.ui.h:98 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Erakutsi atrakea sagua pantailaren ertzera eramatean." ++ ++#: Settings.ui.h:99 ++msgid "Autohide" ++msgstr "Ezkutatze automatikoa" ++ ++#: Settings.ui.h:100 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Bultzatu erakusteko: presio pixka bat egin behar da atrakea erakusteko" ++ ++#: Settings.ui.h:101 ++msgid "Enable in fullscreen mode" ++msgstr "Gaitu pantaila osoko moduan" ++ ++#: Settings.ui.h:102 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Erakutsi atrakea aplikazioaren leihoak eragozten ez dituenean." ++ ++#: Settings.ui.h:103 ++msgid "Dodge windows" ++msgstr "Saihestu leihoak" ++ ++#: Settings.ui.h:104 ++msgid "All windows" ++msgstr "Leiho guztiak" ++ ++#: Settings.ui.h:105 ++msgid "Only focused application's windows" ++msgstr "Fokuratutako aplikazioen leihoetan soilik" ++ ++#: Settings.ui.h:106 ++msgid "Only maximized windows" ++msgstr "Maximizatutako leihoetan soilik" ++ ++#: Settings.ui.h:107 ++msgid "Animation duration (s)" ++msgstr "Animazioaren iraupena (s)" ++ ++#: Settings.ui.h:108 ++msgid "Show timeout (s)" ++msgstr "Erakusteko denbora-muga (s)" ++ ++#: Settings.ui.h:109 ++msgid "Pressure threshold" ++msgstr "Presio-atalasea" ++ + #~ msgid "Application" + #~ msgstr "Aplikazioa" + +@@ -391,12 +949,6 @@ msgstr "Gehitu laneko area" + #~ msgid "Normal" + #~ msgstr "Normala" + +-#~ msgid "Left" +-#~ msgstr "Ezkerrean" +- +-#~ msgid "Right" +-#~ msgstr "Eskuinean" +- + #~ msgid "Upside-down" + #~ msgstr "Buruz behera" + +diff --git a/po/fr.po b/po/fr.po +index ffa70d96..b1849159 100644 +--- a/po/fr.po ++++ b/po/fr.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# fr.po (gnome-shell-extensions master) #-#-#-#-# + # French translation for gnome-shell-extensions. + # Copyright (C) 2011-12 Listed translators + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -5,8 +6,16 @@ + # Alain Lojewski , 2012-2013. + # Charles Monzat , 2018. + # ++# #-#-#-#-# fr.po (Dash to Dock) #-#-#-#-# ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# fr.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -19,6 +28,18 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=(n > 1);\n" ++"#-#-#-#-# fr.po (Dash to Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2019-12-07 16:40+0900\n" ++"PO-Revision-Date: 2019-12-07 16:52+0900\n" ++"Last-Translator: Julien Humbert \n" ++"Language-Team: Jean-Baptiste Le Cz \n" ++"Language: fr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.2.4\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -154,9 +175,14 @@ msgstr "Fermer" + msgid "Unminimize" + msgstr "Restaurer" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:52 ++#, fuzzy + msgid "Minimize" +-msgstr "Réduire" ++msgstr "" ++"#-#-#-#-# fr.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Réduire\n" ++"#-#-#-#-# fr.po (Dash to Dock) #-#-#-#-#\n" ++"Minimiser la fenêtre" + + #: extensions/window-list/extension.js:125 + msgid "Unmaximize" +@@ -264,5 +290,512 @@ msgstr "Espace de travail %d" + msgid "Add Workspace" + msgstr "Ajouter un espace de travail" + ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "Moniteur principal" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "Moniteur secondaire " ++ ++#: prefs.js:309 Settings.ui.h:28 ++msgid "Right" ++msgstr "Droite" ++ ++#: prefs.js:310 Settings.ui.h:25 ++msgid "Left" ++msgstr "Gauche" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "Personnalisation du masquage automatique" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "Restaurer la configuration par défaut" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "Afficher le dock et le numéro d’application" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "Personnaliser le comportement du clic milieu" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "Régler les indicateurs de fenêtres" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Régler l’opacité du dock" ++ ++#: appIcons.js:810 ++msgid "All Windows" ++msgstr "Toutes les fenêtres" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1127 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %s" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Quand réglé sur Minimiser, double-cliquer minimise toutes les fenêtres de " ++"l’application." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Action Maj+Clic" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Faire apparaître la fenêtre" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimiser la fenêtre" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Lancer une nouvelle fenêtre" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Cycler sur les fenêtres" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimiser ou lancer l’exposé" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Afficher des aperçus de fenêtres" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimiser ou afficher l’aperçu des fenêtres" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Activer ou afficher l’aperçu des fenêtres" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Quitter" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Comportement pour le clic milieu." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Action du clic milieu" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Comportement pour Maj+Clic milieu." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Action de Maj+Clic milieu" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Activer un fond brillant à la Unity 7" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Utiliser la couleur dominante" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Régler le style des indicateurs" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Couleur" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Couleur de la bordure" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Épaisseur de la bordure" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Afficher le dock sur le" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Afficher sur tous les écrans." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Position sur l’écran" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Bas" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Haut" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Cache le dock quand il gêne l’application principale. D’autres paramètres " ++"plus spécifiques sont disponibles." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Masquage intelligent" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Taille maximum du dock" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Mode barre : étendre aux bords de l’écran" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Taille maximum des icônes" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Taille des icônes fixe : faire défiler pour voir les autres icônes" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Position et taille" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Afficher les applications favorites" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Afficher les applications en cours" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Isoler les espaces de travail." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Isoler les moniteurs." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Afficher des aperçus de fenêtres." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Si désactivés, ces paramètres sont accessibles via gnome-tweak-tool ou le " ++"site d’extension GNOME." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Afficher le raccourci Afficher les Applications" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Placer le bouton des applications en première position." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animer le raccourci Afficher les Applications." ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Afficher la corbeille" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Afficher les appareils et volumes montés" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Lanceurs" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Activer Super+(0-9) comme raccourcis pour activer les applications. On peut " ++"l’utiliser aussi avec Maj et Ctrl." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Utiliser des raccourcis clavier pour activer les applications" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Comportement du clic sur l’icône d’une application ouverte." ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Action du clic" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Comportement lors du défilement sur l’icône d’une application." ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Action du défilement" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Ne rien faire" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Changer d’espace de travail" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Comportement" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Assortir le dock avec le thème par défaut. Sinon, vous pouvez personnaliser " ++"quelques paramètres ci-dessous." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Utiliser le thème par défaut" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "Réduire la taille des marges pour gagner de la place." ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Réduire les marges" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "Personnaliser l’indicateur du compteur de fenêtres" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "Défaut" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Points" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Carrés" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Tirets" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Segments" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Solides" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "Métro" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Choisir la couleur de fond du dock." ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Changer la couleur du dock" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Régler l’opacité en fond du dock." ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Fixe" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Dynamique" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Opacité" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner\n" ++msgstr "Forcer des coins droits\n" ++ ++#: Settings.ui.h:80 ++msgid "Appearance" ++msgstr "Apparence" ++ ++#: Settings.ui.h:81 ++msgid "version: " ++msgstr "Version : " ++ ++#: Settings.ui.h:82 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Place le dash hors de l’aperçu des fenêtres, le transformant en dock" ++ ++#: Settings.ui.h:83 ++msgid "Created by" ++msgstr "Conçu par" ++ ++#: Settings.ui.h:84 ++msgid "Webpage" ++msgstr "Site web" ++ ++#: Settings.ui.h:85 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Ce programme est distribué SANS AUCUNE GARANTIE.\n" ++"Consultez la Licence Générale Publique GNU version 2 ou plus récente pour plus " ++"d’informations." ++ ++#: Settings.ui.h:87 ++msgid "About" ++msgstr "À propos" ++ ++#: Settings.ui.h:88 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Personnaliser les valeurs minimum et maximum de l’opacité" ++ ++#: Settings.ui.h:89 ++msgid "Minimum opacity" ++msgstr "Opacité minimum" ++ ++#: Settings.ui.h:90 ++msgid "Maximum opacity" ++msgstr "Opacité maximum" ++ ++#: Settings.ui.h:91 ++msgid "Number overlay" ++msgstr "Numéro d’application" ++ ++#: Settings.ui.h:92 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Afficher temporairement les numéros d’application sur les icônes, " ++"correspondant au raccourci clavier." ++ ++#: Settings.ui.h:93 ++msgid "Show the dock if it is hidden" ++msgstr "Afficher le dock s’il est caché" ++ ++#: Settings.ui.h:94 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Si le masquage automatique est actif, le dock apparaîtra temporairement lors " ++"de l’utilisation du raccourci." ++ ++#: Settings.ui.h:95 ++msgid "Shortcut for the options above" ++msgstr "Raccourci pour les options dessus" ++ ++#: Settings.ui.h:96 ++msgid "Syntax: , , , " ++msgstr "Syntaxe : , , , " ++ ++#: Settings.ui.h:97 ++msgid "Hide timeout (s)" ++msgstr "Délai de masquage (s)" ++ ++#: Settings.ui.h:98 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Afficher le dock en survolant le bord de l’écran." ++ ++#: Settings.ui.h:99 ++msgid "Autohide" ++msgstr "Masquage automatique" ++ ++#: Settings.ui.h:100 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Pousser pour Afficher : requiert une pression pour afficher le dock" ++ ++#: Settings.ui.h:101 ++msgid "Enable in fullscreen mode" ++msgstr "Activer en mode plein-écran" ++ ++#: Settings.ui.h:102 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Afficher le dock quand il ne gêne pas les fenêtres." ++ ++#: Settings.ui.h:103 ++msgid "Dodge windows" ++msgstr "Masquage automatique intelligent" ++ ++#: Settings.ui.h:104 ++msgid "All windows" ++msgstr "Toutes les fenêtres" ++ ++#: Settings.ui.h:105 ++msgid "Only focused application's windows" ++msgstr "Seulement la fenêtre de l’application active" ++ ++#: Settings.ui.h:106 ++msgid "Only maximized windows" ++msgstr "Seulement les fenêtres maximisées" ++ ++#: Settings.ui.h:107 ++msgid "Animation duration (s)" ++msgstr "Durée de l’animation (s)" ++ ++#: Settings.ui.h:108 ++msgid "Show timeout (s)" ++msgstr "Délai d’apparition (s)" ++ ++#: Settings.ui.h:109 ++msgid "Pressure threshold" ++msgstr "Seuil de pression" ++ + #~ msgid "Create new matching rule" + #~ msgstr "Créer une nouvelle règle de concordance" ++ ++#~ msgid "Adaptive" ++#~ msgstr "Adaptatif" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "Afficher un point pour chaque fenêtre ouverte de l’application." ++ ++#~ msgid "0.000" ++#~ msgstr "0.000" +diff --git a/po/gl.po b/po/gl.po +index c94dae98..f2d40ad6 100644 +--- a/po/gl.po ++++ b/po/gl.po +@@ -1,14 +1,22 @@ ++# #-#-#-#-# gl.po (gnome-shell-extensions master) #-#-#-#-# + # Galician translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. + # + # Fran Diéguez , 2011. + # Fran Dieguez , 2011-2020, 2021. ++# #-#-#-#-# gl.po #-#-#-#-# ++# Dash to Dock galician translation. ++# This file is distributed under the same license as the Dash to Dock package. ++# Xosé M. Lamas , 2018. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# gl.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" +-"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/is" +-"sues\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" ++"issues\n" + "POT-Creation-Date: 2020-10-17 20:14+0000\n" + "PO-Revision-Date: 2021-02-24 20:41+0100\n" + "Last-Translator: Fran Diéguez \n" +@@ -20,6 +28,19 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n != 1)\n" + "X-Generator: Gtranslator 3.38.0\n" + "X-Project-Style: gnome\n" ++"#-#-#-#-# gl.po #-#-#-#-#\n" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2018-03-30 11:27-0400\n" ++"PO-Revision-Date: 2018-03-30 16:42-0500\n" ++"Last-Translator: Xosé M. Lamas \n" ++"Language-Team: \n" ++"Language: gl\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.0.3\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" + + #: data/gnome-classic.desktop.in:3 + msgid "GNOME Classic" +@@ -82,8 +103,7 @@ msgid "" + "aspect ratio, and consolidating them further to reduce the bounding box. " + "This setting applies only with the natural placement strategy." + msgstr "" +-"Tente usar mais pantalla para dispor as miniaturas das xanelas adaptándose" +-" á " ++"Tente usar mais pantalla para dispor as miniaturas das xanelas adaptándose á " + "taxa de aspecto da pantalla e consolidalas para reducir a caixa envolvente. " + "Esta configuración aplícase só para a estratexia de disposición natural." + +@@ -153,7 +173,7 @@ msgstr "Pechar" + msgid "Unminimize" + msgstr "Restabelecer" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:50 + msgid "Minimize" + msgstr "Minimizar" + +@@ -262,6 +282,421 @@ msgstr "Espazos de traballo %d" + msgid "Add Workspace" + msgstr "Engadir área de traballo" + ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Monitor principal" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Monitor secundario" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "Dereita" ++ ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "Esquerda" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Personalización de agochamento intelixente" ++ ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "Restablecer aos valores por omisión" ++ ++#: prefs.js:386 ++msgid "Show dock and application numbers" ++msgstr "Mostrar dock e números do aplicativo" ++ ++#: prefs.js:443 ++msgid "Customize middle-click behavior" ++msgstr "Personalizar comportamento do botón central" ++ ++#: prefs.js:514 ++msgid "Customize running indicators" ++msgstr "Personalizar indicadores en execución" ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "Todas as ventás" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Personalizar estilo do indicador" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Cor" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Cor do borde" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Ancho do borde" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Número na vista extendida" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Mostrar brevemente o número de aplicativo sobre a icona que corresponda ao " ++"atallo." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Mostrar o dock si está agochado" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Si se activa o agochamento automático, o dock aparecerá brevemente ao " ++"utilizar o atallo." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Atallo para os axustes de arriba" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Sintaxe: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Tempo en agocharse (s)" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Cando se establece minimizar, facendo duplo click minimiza todas as ventás " ++"do aplicativo." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Acción de Maiús + pulsación" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "Elevar ventá" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Minimizar ventá" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Iniciar unha nova instancia" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Alternar entre ventás" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "Saír" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "Comportamento do botón central" ++ ++#: Settings.ui.h:20 ++msgid "Middle-Click action" ++msgstr "Acción do botón central" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Comportamento de Maiús + botón central" ++ ++#: Settings.ui.h:22 ++msgid "Shift+Middle-Click action" ++msgstr "Acción de Maiús + botón central" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "Mostrar o dock en" ++ ++#: Settings.ui.h:24 ++msgid "Show on all monitors." ++msgstr "Mostrar en todos os monitores." ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Posición na pantalla" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Inferior" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Superior" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Agochar o dock cando obstrúe a ventá do aplicativo actual. Dispoñibles máis " ++"opcións." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Agochamento automático intelixente" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Tamaño máximo do dock" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Modo panel: extender ate os bordes da pantalla" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Tamaño máximo das iconas" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Tamaño fixo das iconas: desprazarse para mostrar outros" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Posición e tamaño" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Mostrar aplicativos favoritos" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Mostrar aplicativos en execución" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Illar os espazos de traballo." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Mostrar vista rápida de ventás." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Si está deshabilitado, estas opcions están dispoñibles desde gnome-tweak-" ++"tool ou desde o sitio web de extensións." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Mostrar a icona Aplicativos" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Mover o botón de aplicativos ao principio do dock" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animar Mostrar aplicativos" ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Lanzadores" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Habilitar Súper+(0-9) como atallos para activar aplicativos. Tamén puede ser " ++"utilizado xunto con Maiús e Ctrl." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Usar atallos de teclado para activar aplicativos" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Comportamiento ao pulsar na icona de un aplicativo en execución." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Acción de pulsación" ++ ++#: Settings.ui.h:51 ++msgid "Minimize or overview" ++msgstr "Minimizar ou vista de actividades" ++ ++#: Settings.ui.h:52 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Comportamiento ao utilizar a roda sobre a icona de un aplicativo." ++ ++#: Settings.ui.h:53 ++msgid "Scroll action" ++msgstr "Acción de desprazamento" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "Non facer nada" ++ ++#: Settings.ui.h:55 ++msgid "Switch workspace" ++msgstr "Cambiar de espazo de traballo." ++ ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "Comportamento" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Utilizar o decorado predeterminado de GNOME. De xeito alternativo, poden " ++"habilitarse certos axustes aquí abaixo." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "Utilizar o decorado incorporado" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "Reducir as marxes para gañar espazo." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "Comprimir o taboleiro" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "Mostrar un punto por cada ventá do aplicativo." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "Mostrar contador de ventás" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "Escoller a cor de fondo do taboleiro." ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "Personalizar a cor do dock" ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "Axustar a opacidade do fondo." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "Personalizar opacidade" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "Opacidade" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "Forzar esquinas rectas\n" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "Aparencia" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "versión: " ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Move o panel da vista de actividades transformándoo nun dock" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "Creado por" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "Sitio web" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Este programa ven SIN GARANTÍA ALGUNHA.\n" ++"Consulte a Licenza Pública Xeral de GNU, versión 2 ou posterior para obter máis " ++"detalles." ++ ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "Sobre o" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Mostrar o dock ao pasar o punteiro sobre o borde da pantalla." ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "Agochar automáticamente" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Empurrar para mostrasr: require facer presión para mostrar o dock" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "Activar en modo de pantalla completa" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Mostrar o dock cando non cubra outras ventás de aplicativos." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "Evitar as ventás" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "Todas as ventás" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "Só as ventás do aplicativo activo" ++ ++#: Settings.ui.h:86 ++msgid "Only maximized windows" ++msgstr "Só as ventás maximizadas" ++ ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "Duración da animación (s)" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0.000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "Tempo de aparición" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "Límite de presión" ++ + #~ msgid "Application" + #~ msgstr "Aplicación" + +diff --git a/po/hu.po b/po/hu.po +index fb9d8ccd..8be4d93d 100644 +--- a/po/hu.po ++++ b/po/hu.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# hu.po (gnome-shell-extensions master) #-#-#-#-# + # Hungarian translation for gnome-shell-extensions. + # Copyright (C) 2011, 2012, 2013, 2014, 2017, 2019 Free Software Foundation, Inc. + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -5,8 +6,16 @@ + # Biró Balázs , 2011. + # Gabor Kelemen , 2011, 2012, 2013. + # Balázs Úr , 2013, 2014, 2017, 2019. ++# #-#-#-#-# hu.po (dash-to-dock master) #-#-#-#-# ++# Hungarian translation for dash-to-dock. ++# Copyright (C) 2017 Free Software Foundation, Inc. ++# This file is distributed under the same license as the dash-to-dock package. ++# ++# Balázs Úr , 2017. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# hu.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -20,6 +29,19 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.4.1\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"#-#-#-#-# hu.po (dash-to-dock master) #-#-#-#-#\n" ++"Project-Id-Version: dash-to-dock master\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-06-04 12:35+0100\n" ++"PO-Revision-Date: 2017-04-10 22:02+0100\n" ++"Last-Translator: Balázs Úr \n" ++"Language-Team: Hungarian \n" ++"Language: hu\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Lokalize 2.0\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -153,7 +175,7 @@ msgstr "Bezárás" + msgid "Unminimize" + msgstr "Minimalizálás megszüntetése" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:50 + msgid "Minimize" + msgstr "Minimalizálás" + +@@ -263,6 +285,423 @@ msgstr "%d. munkaterület" + msgid "Add Workspace" + msgstr "Munkaterület hozzáadása" + ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Elsődleges kijelző" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Másodlagos kijelző" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "Jobb" ++ ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "Bal" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Intelligens automatikus elrejtés személyre szabása" ++ ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "Visszaállítás az alapértékekre" ++ ++#: prefs.js:386 ++msgid "Show dock and application numbers" ++msgstr "A dokk és az alkalmazás számainak megjelenítése" ++ ++#: prefs.js:443 ++msgid "Customize middle-click behavior" ++msgstr "Középső kattintás viselkedésének személyre szabása" ++ ++#: prefs.js:514 ++msgid "Customize running indicators" ++msgstr "Futásjelzők személyre szabása" ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "Összes Ablak" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Jelző stílusának személyre szabása" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Szín" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Szegély színe" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Szegély szélessége" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Szám rátét" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Az alkalmazás számainak átmeneti megjelenítése az ikonok fölött a " ++"gyorsbillentyűnek megfelelően." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "A dokk megjelenítése, ha el van rejtve" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Az automatikus elrejtés használatakor a dokk meg fog jelenni egy rövid ideig " ++"a gyorsbillentyű megnyomásakor." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Gyorsbillentyűk a fenti beállításokhoz" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Szintaxis: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Elrejtési időkorlát (mp)" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Ha minimalizálásra van állítva, akkor a dupla kattintás az alkalmazás összes " ++"ablakát minimalizálja." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Shift + kattintás művelet" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "Ablak előre hozása" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Ablak minimalizálása" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Új példány indítása" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Ablakok körbeléptetése" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "Kilépés" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "A középső kattintás viselkedése." ++ ++#: Settings.ui.h:20 ++msgid "Middle-Click action" ++msgstr "Középső kattintás művelet" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "A Shift + középső kattintás viselkedése." ++ ++#: Settings.ui.h:22 ++msgid "Shift+Middle-Click action" ++msgstr "Shift + középső kattintás művelet" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "A dokk megjelenítése" ++ ++#: Settings.ui.h:24 ++#, fuzzy ++msgid "Show on all monitors." ++msgstr "Másodlagos kijelző" ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Elhelyezkedés a képernyőn" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Lent" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Fent" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"A dokk elrejtése, amikor az aktuális alkalmazás ablakát akadályozza. További " ++"finombeállítások is elérhetők." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Intelligens automatikus elrejtés" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Dokk méretkorlátja" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Panel mód: kiterjesztés a képernyő széléig" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Ikon méretkorlátja" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Rögzített ikonméret: görgetés egyéb ikonok felfedéséhez" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Elhelyezkedés és méret" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Kedvenc alkalmazások megjelenítése" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Futó alkalmazások megjelenítése" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Munkaterületek elkülönítése." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Nyitott ablakok előnézeteinek megjelenítése." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Ha le van tiltva, akkor ezek a beállítások elérhetők a GNOME finomhangoló " ++"eszközből vagy a kiegészítők weboldaláról." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Alkalmazások ikon megjelenítése" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Az alkalmazások gombjának áthelyezése a dokk elejére." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Alkalmazások megjelenítése animálása." ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Indítok" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Szuper + (0-9) engedélyezése gyorsbillentyűként az alkalmazások " ++"aktiválásához. Használható a Shift és a Ctrl billentyűkkel együtt is." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Gyorsbillentyűk használata az alkalmazások aktiválásához" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Viselkedés egy futó alkalmazás ikonjára való kattintáskor." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Kattintás művelet" ++ ++#: Settings.ui.h:51 ++#, fuzzy ++msgid "Minimize or overview" ++msgstr "Ablak minimalizálása" ++ ++#: Settings.ui.h:52 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Viselkedés egy alkalmazás ikonján való görgetéskor." ++ ++#: Settings.ui.h:53 ++msgid "Scroll action" ++msgstr "Görgetési művelet" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "Ne tegyen semmit" ++ ++#: Settings.ui.h:55 ++msgid "Switch workspace" ++msgstr "Munkaterület váltása" ++ ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "Viselkedés" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Néhány személyre szabás célja, hogy integrálja a dokkot az alapértelmezett " ++"GNOME témába. Alternatív esetben bizonyos beállítások engedélyezhetők lent." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "Beépített téma használata" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "Helymegtakarítás a kitöltés és a szegély sugarának csökkentésével." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "A dash zsugorítása" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "Egy pont megjelenítése az alkalmazás minden ablakánál." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "Ablakszámlálók jelzőinek megjelenítése" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "A dash háttérszínének beállítása." ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "A dash színének személyre szabása" ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "A dash háttér átlátszatlanságának finomhangolása." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "Átlátszatlanság személyre szabása" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "Átlátszatlanság" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "Egyenes sarok kényszerítése\n" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "Megjelenés" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "verzió: " ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Áthelyezi a dasht az áttekintőn kívülre egy dokká alakítva azt" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "Létrehozta" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "Weboldal" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Ehhez a programhoz SEMMILYEN GARANCIA NEM JÁR.\n" ++"Nézze meg a GNU General Public License 2. vagy későbbi verzióját a részletekért." ++ ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "Névjegy" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "A dokk megjelenítése a képernyő szélére történő egér rámutatással." ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "Automatikus elrejtés" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Nyomás a megjelenítéshez: nyomást igényel a dokk megjelenítéséhez" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "Engedélyezés teljes képernyős módban" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "A dokk megjelenítése, amikor nem akadályozza az alkalmazás ablakait." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "Ablakok kikerülése" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "Összes ablak" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "Csak a kijelölt alkalmazások ablakai" ++ ++#: Settings.ui.h:86 ++msgid "Only maximized windows" ++msgstr "Csak a maximalizált ablakok" ++ ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "Animáció időtartama (mp)" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0,000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "Megjelenítési időkorlát (mp)" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "Nyomás küszöbszintje" ++ + #~ msgid "Application" + #~ msgstr "Alkalmazás" + +diff --git a/po/id.po b/po/id.po +index a67d729d..af7463f3 100644 +--- a/po/id.po ++++ b/po/id.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# id.po (gnome-shell-extensions master) #-#-#-#-# + # Indonesian translation for gnome-shell-extensions. + # Copyright (C) 2012 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -5,8 +6,16 @@ + # Andika Triwidada , 2012, 2013. + # Dirgita , 2012. + # Kukuh Syafaat , 2017, 2019, 2020. ++# #-#-#-#-# id.po (Dash-to-Dock) #-#-#-#-# ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# id.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -21,6 +30,19 @@ msgstr "" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Poedit-SourceCharset: UTF-8\n" + "X-Generator: Poedit 2.3.1\n" ++"#-#-#-#-# id.po (Dash-to-Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash-to-Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-06-04 12:35+0100\n" ++"PO-Revision-Date: 2017-10-02 11:25+0700\n" ++"Last-Translator: Mahyuddin \n" ++"Language-Team: Mahyuddin \n" ++"Language: id\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++"X-Generator: Poedit 1.8.11\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -154,7 +176,7 @@ msgstr "Tutup" + msgid "Unminimize" + msgstr "Tak minimalkan" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:50 + msgid "Minimize" + msgstr "Minimalkan" + +@@ -263,6 +285,423 @@ msgstr "Ruang Kerja %d" + msgid "Add Workspace" + msgstr "Tambah Ruang Kerja" + ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Monitor primer" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Monitor sekunder" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "Kanan" ++ ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "Kiri" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Kustomisasi autohide yang cerdas" ++ ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "Setel ulang ke bawaan" ++ ++#: prefs.js:386 ++msgid "Show dock and application numbers" ++msgstr "Tampilkan dock dan nomor aplikasi" ++ ++#: prefs.js:443 ++msgid "Customize middle-click behavior" ++msgstr "Sesuaikan perilaku klik menengah" ++ ++#: prefs.js:514 ++msgid "Customize running indicators" ++msgstr "Sesuaikan indikator yang sedang berjalan" ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "Semua Jendela" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Sesuaikan gaya indikator" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Warna" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Warna border" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Lebar border" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Nomor overlay" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Untuk sementara menunjukkan nomor aplikasi di atas ikon, sesuai dengan " ++"pintasan." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Tunjukkan dock jika tersembunyi" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Jika menggunakan autohide, dock akan muncul dalam waktu singkat saat memicu " ++"pintasan." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Pintasan untuk opsi di atas" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Sintaks: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Sembunyikan batas waktu (s)" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Bila disetel untuk meminimalkan, klik ganda meminimalkan semua jendela " ++"aplikasi." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Tindakan Shift+Klik" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "Menaikkan jendela" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Minimalkan jendela" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Luncurkan contoh baru" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Siklus melalui jendela" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "Berhenti" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "Perilaku untuk Klik-Tengah." ++ ++#: Settings.ui.h:20 ++msgid "Middle-Click action" ++msgstr "Tindakan Klik-Tengah" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Perilaku untuk Shift+Klik-Tengah." ++ ++#: Settings.ui.h:22 ++msgid "Shift+Middle-Click action" ++msgstr "Tindakan Shift+Klik-Tengah" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "Tunjukkan dock pada" ++ ++#: Settings.ui.h:24 ++msgid "Show on all monitors." ++msgstr "Tunjukkan pada semua monitor." ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Posisi pada layar" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Bawah" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Atas" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Sembunyikan dock saat menghalangi jendela aplikasi saat ini. Setelan yang " ++"lebih halus juga tersedia." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Autohide cerdas" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Batas ukuran dock" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Mode panel: meluas ke tepi layar" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Batas ukuran ikon" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Ukuran ikon tetap: gulir untuk menampilkan ikon lain" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Posisi dan ukuran" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Tampilkan aplikasi favorit" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Tampilkan aplikasi yang sedang berjalan" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Isolasi ruang kerja." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Tampilkan pratinjau windows yang terbuka." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Jika dinonaktifkan, setelan ini dapat diakses dari gnome-tweak-tool atau " ++"situs ekstensi." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Tampilkan ikon Aplikasi" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Pindahkan tombol aplikasi di awal dock." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animasi Tampilkan Aplikasi." ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Peluncur" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Aktifkan Super+(0-9) sebagai cara pintas untuk mengaktifkan aplikasi. Ini " ++"juga bisa digunakan bersamaan dengan Shift dan Ctrl." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Gunakan pintasan papan tik untuk mengaktifkan aplikasi" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Perilaku saat mengklik ikon aplikasi yang sedang berjalan." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Klik tindakan" ++ ++#: Settings.ui.h:51 ++msgid "Minimize or overview" ++msgstr "Minimalkan atau ikhtisar" ++ ++#: Settings.ui.h:52 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Perilaku saat menggulir pada ikon aplikasi." ++ ++#: Settings.ui.h:53 ++msgid "Scroll action" ++msgstr "Gulir tindakan" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "Tidak melakukan apapun" ++ ++#: Settings.ui.h:55 ++msgid "Switch workspace" ++msgstr "Beralih ruang kerja" ++ ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "Perilaku" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Beberapa penyesuaian dimaksudkan untuk mengintegrasikan dock dengan tema " ++"GNOME bawaan. Sebagai alternatif, pilihan spesifik dapat diaktifkan di bawah " ++"ini." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "Gunakan tema bawaan" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "Hemat ruang padding mengurangi dan radius border." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "Penyusutan dash" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "Tampilkan titik untuk setiap jendela aplikasi." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "Tampilkan indikator counter jendela" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "Atur warna latar belakang untuk dash." ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "Sesuaikan warna dash." ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "Cocokkan opacity latar belakang." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "Menyesuaikan opacity" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "Opacity" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "Paksa sudut lurus\n" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "Penampilan" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "versi: " ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Memindahkan dash keluar dari ikhtisar yang mengubahnya di dock" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "Dibuat oleh" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "Halaman web" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Program ini hadir dengan TIDAK ADA JAMINAN TIDAK " ++"BENAR.\n" ++"Lihat " ++"GNU General Public License, versi 2 atau yang lebih baru untuk " ++"detailnya. " ++ ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "Tentang" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Tunjukkan dock dengan mouse hover di tepi layar." ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "Autohide" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Tekan untuk tampilkan: butuh tekanan untuk menunjukkan dock" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "Aktifkan dalam mode layar penuh" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Tunjukkan dokk bila tidak menghalangi jendela aplikasi." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "Dodge jendela" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "Semua jendela" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "Hanya fokus aplikasi jendela" ++ ++#: Settings.ui.h:86 ++msgid "Only maximized windows" ++msgstr "Hanya jendela yang maksimal" ++ ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "Durasi animasi (s)" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0.000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "Tampilkan batas waktu (s)" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "Ambang tekanan" ++ + #~ msgid "Application" + #~ msgstr "Aplikasi" + +@@ -350,3 +789,13 @@ msgstr "Tambah Ruang Kerja" + + #~ msgid "Memory" + #~ msgstr "Memori" ++ ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "Con la dimensione fissa delle icone, solo il bordo della dock e l'icona " ++#~ " Mostra Applicazioni sono attive." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Cambia spazio di lavoro scorrendo sulla dock" +diff --git a/po/it.po b/po/it.po +index 57124ad2..4b425925 100644 +--- a/po/it.po ++++ b/po/it.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# it.po (gnome-shell-extensions) #-#-#-#-# + # Italian translations for GNOME Shell extensions + # Copyright (C) 2011 Giovanni Campagna et al. + # Copyright (C) 2012, 2013, 2014, 2015, 2017, 2019, 2020 The Free Software Foundation, Inc. +@@ -6,8 +7,16 @@ + # Milo Casagrande , 2013, 2014, 2015, 2017, 2019, 2020. + # Gianvito Cavasoli , 2017. + # ++# #-#-#-#-# it.po (Dash-to-Dock) #-#-#-#-# ++# Dash-to-Dock Italian translation. ++# Copyright (C) 2018 the Dash-to-Dock copyright holder. ++# This file is distributed under the same license as the Dash-to-Dock package. ++# Milo Casagrande , 2018 ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# it.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -21,6 +30,17 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Poedit 2.4.1\n" ++"#-#-#-#-# it.po (Dash-to-Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash-to-Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2018-04-03 17:18+0200\n" ++"PO-Revision-Date: 2018-04-04 10:13+0200\n" ++"Last-Translator: Milo Casagrande \n" ++"Language-Team: Italian \n" ++"Language: it\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -154,7 +174,7 @@ msgstr "Chiudi" + msgid "Unminimize" + msgstr "Deminimizza" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:49 + msgid "Minimize" + msgstr "Minimizza" + +@@ -262,3 +282,497 @@ msgstr "Spazio di lavoro %d" + #: extensions/workspace-indicator/prefs.js:218 + msgid "Add Workspace" + msgstr "Aggiungi spazio di lavoro" ++ ++#: prefs.js:140 ++msgid "Primary monitor" ++msgstr "Monitor primario" ++ ++#: prefs.js:149 prefs.js:156 ++msgid "Secondary monitor " ++msgstr "Monitor secondario " ++ ++#: prefs.js:181 Settings.ui.h:27 ++msgid "Right" ++msgstr "Destra" ++ ++#: prefs.js:182 Settings.ui.h:24 ++msgid "Left" ++msgstr "Sinistra" ++ ++#: prefs.js:232 ++msgid "Intelligent autohide customization" ++msgstr "Personalizzazione nascondimento automatico intelligente" ++ ++#: prefs.js:239 prefs.js:424 prefs.js:481 ++msgid "Reset to defaults" ++msgstr "Ripristina a predefinito" ++ ++#: prefs.js:417 ++msgid "Show dock and application numbers" ++msgstr "Mostra applicazioni in esecuzione" ++ ++#: prefs.js:474 ++msgid "Customize middle-click behavior" ++msgstr "Personalizza comportamento clic centrale" ++ ++#: prefs.js:557 ++msgid "Customize running indicators" ++msgstr "Personalizza indicatori in esecuzione" ++ ++#: prefs.js:671 Settings.ui.h:71 ++msgid "Customize opacity" ++msgstr "Personalizza opacità" ++ ++#: appIcons.js:785 ++msgid "All Windows" ++msgstr "Tutte le finestre" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1091 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s di «Dash to Dock»" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Quando impostato su minimizza, un doppio clic minimizza tutte le finestre " ++"dell'applicazione" ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Azione Maiusc+Clic" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Solleva finestra" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimizza finestra" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Lancia nuova istanza" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Passa attraverso le finestre" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimizza o mostra attività" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Mostra anteprime finestra" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimizza o mostra anteprime" ++ ++#: Settings.ui.h:10 ++msgid "Quit" ++msgstr "Chiudi" ++ ++#: Settings.ui.h:11 ++msgid "Behavior for Middle-Click." ++msgstr "Comportamento del clic-centrale" ++ ++#: Settings.ui.h:12 ++msgid "Middle-Click action" ++msgstr "Azione clic-centrale" ++ ++#: Settings.ui.h:13 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Comportamento per Maiusc+Clic-centrale" ++ ++#: Settings.ui.h:14 ++msgid "Shift+Middle-Click action" ++msgstr "Azione Maiusc+Clic-centrale" ++ ++#: Settings.ui.h:15 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Abilitare elementi lucidi retroilluminati come Unity7" ++ ++#: Settings.ui.h:16 ++msgid "Use dominant color" ++msgstr "Usare colore dominante" ++ ++#: Settings.ui.h:17 ++msgid "Customize indicator style" ++msgstr "Personalizza stile indicatori" ++ ++#: Settings.ui.h:18 ++msgid "Color" ++msgstr "Colore" ++ ++#: Settings.ui.h:19 ++msgid "Border color" ++msgstr "Colore bordo" ++ ++#: Settings.ui.h:20 ++msgid "Border width" ++msgstr "Larghezza bordo" ++ ++#: Settings.ui.h:21 ++msgid "Show the dock on" ++msgstr "Mostra dock su" ++ ++#: Settings.ui.h:22 ++msgid "Show on all monitors." ++msgstr "Mostra su tutti gli schermi" ++ ++#: Settings.ui.h:23 ++msgid "Position on screen" ++msgstr "Posizione sullo schermo" ++ ++#: Settings.ui.h:25 ++msgid "Bottom" ++msgstr "Basso" ++ ++#: Settings.ui.h:26 ++msgid "Top" ++msgstr "Alto" ++ ++#: Settings.ui.h:28 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Nasconde la dock quando questa ostruisce una finestra dell'applicazione " ++"corrente. Sono disponibili maggiori impostazioni." ++ ++#: Settings.ui.h:29 ++msgid "Intelligent autohide" ++msgstr "Nascondi automaticamente intelligente" ++ ++#: Settings.ui.h:30 ++msgid "Dock size limit" ++msgstr "Limite dimensione dock" ++ ++#: Settings.ui.h:31 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Modalità pannello: si estende fino al bordo dello schermo" ++ ++#: Settings.ui.h:32 ++msgid "Icon size limit" ++msgstr "Limite dimensione icone" ++ ++#: Settings.ui.h:33 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Dimensione icona fissa: scorrere per rivelare le altre icone" ++ ++#: Settings.ui.h:34 ++msgid "Position and size" ++msgstr "Posizione e dimensione" ++ ++#: Settings.ui.h:35 ++msgid "Show favorite applications" ++msgstr "Mostra applicazioni preferite" ++ ++#: Settings.ui.h:36 ++msgid "Show running applications" ++msgstr "Mostra applicazioni in esecuzione" ++ ++#: Settings.ui.h:37 ++msgid "Isolate workspaces." ++msgstr "Isola spazi di lavoro" ++ ++#: Settings.ui.h:38 ++msgid "Isolate monitors." ++msgstr "Isola gli schermi" ++ ++#: Settings.ui.h:39 ++msgid "Show open windows previews." ++msgstr "Mostra anteprime delle finestre aperte" ++ ++#: Settings.ui.h:40 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Se disabilitate, queste impostazioni sono accessibili da gnome-tweak-tool o " ++"dal sito web delle estensioni." ++ ++#: Settings.ui.h:41 ++msgid "Show Applications icon" ++msgstr "Mostra icona Applicazioni" ++ ++#: Settings.ui.h:42 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Sposta il pulsante delle applicazioni all'inizio della dock" ++ ++#: Settings.ui.h:43 ++msgid "Animate Show Applications." ++msgstr "Anima Mostra applicazioni" ++ ++#: Settings.ui.h:44 ++msgid "Launchers" ++msgstr "Icone applicazioni" ++ ++#: Settings.ui.h:45 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Attiva Super+(0-9) come scorciatoie per attivare le applicazioni, funziona " ++"anche con Maiusc e Ctrl." ++ ++#: Settings.ui.h:46 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Usa scorciatoie da tastiera per attivare le applicazioni" ++ ++#: Settings.ui.h:47 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "" ++"Comportamento quando si fa clic sull'icona di una applicazione in esecuzione." ++ ++#: Settings.ui.h:48 ++msgid "Click action" ++msgstr "Azione clic" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "" ++"Comportamento quando si scorre sull'icona di una applicazione in esecuzione" ++ ++#: Settings.ui.h:51 ++msgid "Scroll action" ++msgstr "Azione scorrimento" ++ ++#: Settings.ui.h:52 ++msgid "Do nothing" ++msgstr "Non fare nulla" ++ ++#: Settings.ui.h:53 ++msgid "Switch workspace" ++msgstr "Cambia spazio di lavoro" ++ ++#: Settings.ui.h:54 ++msgid "Behavior" ++msgstr "Comportamento" ++ ++#: Settings.ui.h:55 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Poche personalizzazioni significative per integrare la dock con il tema " ++"predefinito di GNOME. In alternativa, delle opzioni specifiche possono " ++"essere abilitate qui sotto." ++ ++#: Settings.ui.h:56 ++msgid "Use built-in theme" ++msgstr "Usa tema integrato" ++ ++#: Settings.ui.h:57 ++msgid "Save space reducing padding and border radius." ++msgstr "Salva spazio riducendo il margine e il raggio dei bordi" ++ ++#: Settings.ui.h:58 ++msgid "Shrink the dash" ++msgstr "Riduci la dash" ++ ++#: Settings.ui.h:59 ++msgid "Customize windows counter indicators" ++msgstr "Personalizza indicatori conteggio finestre" ++ ++#: Settings.ui.h:60 ++msgid "Default" ++msgstr "Predefinito" ++ ++#: Settings.ui.h:61 ++msgid "Dots" ++msgstr "Puntini" ++ ++#: Settings.ui.h:62 ++msgid "Squares" ++msgstr "Quadrati" ++ ++#: Settings.ui.h:63 ++msgid "Dashes" ++msgstr "Trattini" ++ ++#: Settings.ui.h:64 ++msgid "Segmented" ++msgstr "Segmenti" ++ ++#: Settings.ui.h:65 ++msgid "Solid" ++msgstr "Solido" ++ ++#: Settings.ui.h:66 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:67 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:68 ++msgid "Set the background color for the dash." ++msgstr "Imposta il colore di sfondo della dash" ++ ++#: Settings.ui.h:69 ++msgid "Customize the dash color" ++msgstr "Personalizza il colore della dash" ++ ++#: Settings.ui.h:70 ++msgid "Tune the dash background opacity." ++msgstr "Personalizza l'opacità dello sfondo della dash" ++ ++#: Settings.ui.h:72 ++msgid "Fixed" ++msgstr "Fisso" ++ ++#: Settings.ui.h:73 ++msgid "Adaptive" ++msgstr "Adattivo" ++ ++#: Settings.ui.h:74 ++msgid "Dynamic" ++msgstr "Dinamico" ++ ++#: Settings.ui.h:75 ++msgid "Opacity" ++msgstr "Opacità" ++ ++#: Settings.ui.h:76 ++msgid "Force straight corner\n" ++msgstr "Forza angoli squadrati\n" ++ ++#: Settings.ui.h:78 ++msgid "Appearance" ++msgstr "Aspetto" ++ ++#: Settings.ui.h:79 ++msgid "version: " ++msgstr "versione: " ++ ++#: Settings.ui.h:80 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Sposta la dash fuori dalla panoramica trasformandola in una dock" ++ ++#: Settings.ui.h:81 ++msgid "Created by" ++msgstr "Creata da" ++ ++#: Settings.ui.h:82 ++msgid "Webpage" ++msgstr "Sito web" ++ ++#: Settings.ui.h:83 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Questo programma viene fornito senza ALCUNA GARANZIA.\n" ++"Per maggiori informazioni, consultare la GNU General Public License, versione 2 " ++"o successiva." ++ ++#: Settings.ui.h:85 ++msgid "About" ++msgstr "Informazioni" ++ ++#: Settings.ui.h:86 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Personalizza i valori minimo e massimo dell'opacità" ++ ++#: Settings.ui.h:87 ++msgid "Minimum opacity" ++msgstr "Opacità minima" ++ ++#: Settings.ui.h:88 ++msgid "Maximum opacity" ++msgstr "Opacità massima" ++ ++#: Settings.ui.h:89 ++msgid "Number overlay" ++msgstr "Indicatore numerico in sovraimpressione" ++ ++#: Settings.ui.h:90 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Mostra brevemente il numero corrispondente alla scorciatoia sull'icona " ++"dell'applicazione." ++ ++#: Settings.ui.h:91 ++msgid "Show the dock if it is hidden" ++msgstr "Mostra dock se nascosta" ++ ++#: Settings.ui.h:92 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"In modalità «Nascondi automaticamente intelligente», la dock viene mostrata " ++"per un istante quando la scorciatoia è attivata" ++ ++#: Settings.ui.h:93 ++msgid "Shortcut for the options above" ++msgstr "Scorciatoia" ++ ++#: Settings.ui.h:94 ++msgid "Syntax: , , , " ++msgstr "Formato: , , , " ++ ++#: Settings.ui.h:95 ++msgid "Hide timeout (s)" ++msgstr "Timeout nascondimento (s)" ++ ++#: Settings.ui.h:96 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Mostra la dock passando con il mouse sul bordo dello schermo" ++ ++#: Settings.ui.h:97 ++msgid "Autohide" ++msgstr "Nascondi automaticamente" ++ ++#: Settings.ui.h:98 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Premere per vedere: richiede una pressione per mostrare la dock" ++ ++#: Settings.ui.h:99 ++msgid "Enable in fullscreen mode" ++msgstr "Abilita in modalità a schermo intero" ++ ++#: Settings.ui.h:100 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "" ++"Mostra la dock quando questa non ostruisce le finestre dell'applicazione" ++ ++#: Settings.ui.h:101 ++msgid "Dodge windows" ++msgstr "Schive finestre" ++ ++#: Settings.ui.h:102 ++msgid "All windows" ++msgstr "Tutte le finestre" ++ ++#: Settings.ui.h:103 ++msgid "Only focused application's windows" ++msgstr "Solo le finestre delle applicazione col focus" ++ ++#: Settings.ui.h:104 ++msgid "Only maximized windows" ++msgstr "Solo le finestre massimizzate" ++ ++#: Settings.ui.h:105 ++msgid "Animation duration (s)" ++msgstr "Durata animazione (s)" ++ ++#: Settings.ui.h:106 ++msgid "Show timeout (s)" ++msgstr "Timeout rivelazione (s)" ++ ++#: Settings.ui.h:107 ++msgid "Pressure threshold" ++msgstr "Soglia pressione" +diff --git a/po/ja.po b/po/ja.po +index 56ef3286..30b84200 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-# + # gnome-shell-extensions ja.po + # Copyright (C) 2011-2015, 2019-2020 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -8,8 +9,19 @@ + # Hajime Taira , 2014, 2015. + # sicklylife , 2019-2020. + # ++# #-#-#-#-# ja.po (dash-to-dock master) #-#-#-#-# ++# Dash to Dock master ja.po ++# Copyright (C) 2013-2017, 2019-2020 THE dash-to-dock'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the dash-to-dock package. ++# Jiro Matsuzawa , 2013. ++# Debonne Hooties , 2014-2017. ++# sicklylife , 2019-2020. ++# Ryo Nakano , 2019. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -22,6 +34,18 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" ++"#-#-#-#-# ja.po (dash-to-dock master) #-#-#-#-#\n" ++"Project-Id-Version: dash-to-dock master\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-06-14 23:00+0900\n" ++"PO-Revision-Date: 2020-06-15 07:30+0900\n" ++"Last-Translator: sicklylife \n" ++"Language-Team: Japanese <>\n" ++"Language: ja\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -156,9 +180,14 @@ msgstr "閉じる" + msgid "Unminimize" + msgstr "最小化解除" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:52 ++#, fuzzy + msgid "Minimize" +-msgstr "最小化" ++msgstr "" ++"#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"最小化\n" ++"#-#-#-#-# ja.po (dash-to-dock master) #-#-#-#-#\n" ++"ウィンドウの最小化" + + #: extensions/window-list/extension.js:125 + msgid "Unmaximize" +@@ -265,6 +294,581 @@ msgstr "ワークスペース %d" + msgid "Add Workspace" + msgstr "ワークスペースを追加" + ++#: prefs.js:310 Settings.ui.h:25 ++#, fuzzy ++msgid "Left" ++msgstr "" ++"#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"左回り\n" ++"#-#-#-#-# ja.po (dash-to-dock master) #-#-#-#-#\n" ++"左" ++ ++#: prefs.js:309 Settings.ui.h:28 ++#, fuzzy ++msgid "Right" ++msgstr "" ++"#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"右回り\n" ++"#-#-#-#-# ja.po (dash-to-dock master) #-#-#-#-#\n" ++"右" ++ ++#: appIcons.js:808 ++#, fuzzy ++msgid "New Window" ++msgstr "" ++"#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"新しいウィンドウで開く\n" ++"#-#-#-#-# ja.po (dash-to-dock master) #-#-#-#-#\n" ++"新しいウィンドウ" ++ ++#: appIcons.js:851 ++msgid "Remove from Favorites" ++msgstr "お気に入りから削除" ++ ++#: appIcons.js:797 ++msgid "All Windows" ++msgstr "ウィンドウプレビューの表示" ++ ++#: appIcons.js:823 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "専用のグラフィックカードを使用して起動" ++ ++#: appIcons.js:857 ++msgid "Add to Favorites" ++msgstr "お気に入りに追加" ++ ++#: appIcons.js:868 ++msgid "Show Details" ++msgstr "詳細を表示" ++ ++# ここの翻訳は GNOME Shell の訳が優先される様子 ++#: appIcons.js:896 appIcons.js:914 Settings.ui.h:11 ++msgid "Quit" ++msgstr "終了" ++ ++# ここの「Quit」は GNOME Shell の訳に合わせた方が良さげ ++#: appIcons.js:916 ++#, javascript-format ++msgid "Quit %d Windows" ++msgstr "%d 個のウィンドウを終了" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1134 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock の%s" ++ ++#: appIcons.js:1134 ++msgid "Settings" ++msgstr "設定" ++ ++#: docking.js:1188 ++msgid "Dash" ++msgstr "Dash" ++ ++#: locations.js:65 ++msgid "Trash" ++msgstr "ゴミ箱" ++ ++#: locations.js:74 ++msgid "Empty Trash" ++msgstr "ゴミ箱を空にする" ++ ++#: locations.js:192 ++msgid "Mount" ++msgstr "マウント" ++ ++#: locations.js:235 ++msgid "Eject" ++msgstr "取り出す" ++ ++#: locations.js:240 ++msgid "Unmount" ++msgstr "アンマウント" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "プライマリーモニター" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "セカンダリーモニター" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "インテリジェント表示の設定" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "既定値にリセット" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "ドック表示とアプリケーション番号" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "中ボタンクリック時のアクション" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "インジケーターの表示設定" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "不透明度の調整" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"[ウィンドウの最小化] に設定したときは、アイコンをダブルクリックするとそのアプ" ++"リケーションのウィンドウをすべて最小化します。" ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Shift + クリック時のアクション" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "ウィンドウの再表示" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "ウィンドウの最小化" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "新しいウィンドウを開く" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "ウィンドウの切り替え" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "ウィンドウの最小化またはオーバービュー" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "ウィンドウのプレビュー表示" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "ウィンドウの最小化またはプレビュー表示" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "フォーカスまたはプレビュー表示" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "中ボタンをクリックしたときの動作を設定します。" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "中ボタンクリック時のアクション" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Shift を押しながら中ボタンをクリックしたときの動作を設定します。" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Shift + 中ボタンクリック時のアクション" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Unity7 のような色付きのアイテム背景" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "ドミナントカラーを使用" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "表示スタイルの設定" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "ボディ色" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "縁取り色" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "縁取り幅" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "ドックを表示するモニター" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "すべてのモニターで表示" ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "表示位置" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "下" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "上" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"開いているウィンドウの邪魔にならないようドックの表示/非表示を自動的に切り替え" ++"ます。より洗練された表示設定も可能です。" ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "インテリジェント表示" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "ドックサイズの上限" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "パネルモード (画面の端までドックを拡張)" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "アイコンサイズの上限" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "アイコンサイズの固定 (隠れたアイコンはスクロールで表示)" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "位置とサイズ" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "お気に入りアプリケーションの表示" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "実行中アプリケーションの表示" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "現在のワークスペースのみ表示" ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "現在のモニターのみ表示" ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "ウィンドウのプレビューを右クリックで表示可能にする" ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"オフにしたときは gnome-tweak-tool または拡張機能ウェブサイトを経由してこの設" ++"定ダイアログにアクセスします。" ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "[アプリケーションを表示する] アイコンの表示" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "ドックの先頭 (最上段または左端) に表示" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "アニメーションしながらアプリケーション一覧を表示" ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "ゴミ箱を表示" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "マウントしたボリュームとデバイスを表示" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "ランチャー" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Super キーと番号 (0-9) を同時に押すことでアプリケーションのアクティブ化を可能" ++"にします。\n" ++"Shift キーまたは Ctrl キーを Super キーとともに押しても機能します。" ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "アプリのアクティブ化にキーボードショートカットを使用" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "実行中アプリケーションのアイコンをクリックしたときの動作を設定します。" ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "クリック時のアクション" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "" ++"実行中アプリケーションのアイコン上でスクロールしたときの動作を設定します。" ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "スクロール時のアクション" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "何もしない" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "ワークスペースの切り替え" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "動作" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"この設定がオンのときは、お使いの GNOME テーマとの調和を図るためカスタマイズは" ++"無効になります。オフのときには以下のカスタマイズが可能です。" ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "ビルトインテーマの使用" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "境界線の太さとパディングを減らして表示域を小さくします。" ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Dash の縮小表示" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "ウィンドウ数インジケーターの設定" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "デフォルト" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Dash の背景色を設定します" ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Dash 背景色の設定" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Dash 背景の不透明度を調整します。" ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "固定" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "動的" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "不透明度" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner" ++msgstr "角を丸めない" ++ ++#: Settings.ui.h:79 ++msgid "Appearance" ++msgstr "外観" ++ ++#: Settings.ui.h:80 ++msgid "version: " ++msgstr "バージョン: " ++ ++#: Settings.ui.h:81 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "" ++"Dash をドック化してアクティビティ画面以外でも Dash 操作を可能にします。" ++ ++#: Settings.ui.h:82 ++msgid "Created by" ++msgstr "作者:" ++ ++#: Settings.ui.h:83 ++msgid "Webpage" ++msgstr "ウェブページ" ++ ++#: Settings.ui.h:84 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"このプログラムに保証は一切ありません。\n" ++"詳しくは GNU 一般公衆ライセンス (GPL) バージョン 2 またはそれ以降のバージョンを" ++"ご覧ください。" ++ ++#: Settings.ui.h:86 ++msgid "About" ++msgstr "情報" ++ ++#: Settings.ui.h:87 ++msgid "Customize minimum and maximum opacity values" ++msgstr "不透明度の最小値と最大値の設定" ++ ++#: Settings.ui.h:88 ++msgid "Minimum opacity" ++msgstr "最小不透明度" ++ ++#: Settings.ui.h:89 ++msgid "Maximum opacity" ++msgstr "最大不透明度" ++ ++#: Settings.ui.h:90 ++msgid "Number overlay" ++msgstr "番号の表示" ++ ++#: Settings.ui.h:91 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"ショートカットキーが押されたときに、アイコン上にアプリケーション番号を一時的" ++"に表示します。" ++ ++#: Settings.ui.h:92 ++msgid "Show the dock if it is hidden" ++msgstr "ドックが非表示なら一時的に表示" ++ ++#: Settings.ui.h:93 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"ドックが表示されていない状態のとき、ショーカットキーで一時的にドックを表示し" ++"ます。" ++ ++#: Settings.ui.h:94 ++msgid "Shortcut for the options above" ++msgstr "上記設定のためのショートカットキー" ++ ++#: Settings.ui.h:95 ++msgid "Syntax: , , , " ++msgstr "表記法: , , , " ++ ++#: Settings.ui.h:96 ++msgid "Hide timeout (s)" ++msgstr "非表示までのタイムアウト (秒)" ++ ++#: Settings.ui.h:97 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "" ++"ドックを表示したいとき、ポインターを画面端に移動するとドックが表示されます。" ++ ++#: Settings.ui.h:98 ++msgid "Autohide" ++msgstr "オンデマンド表示" ++ ++#: Settings.ui.h:99 ++msgid "Push to show: require pressure to show the dock" ++msgstr "" ++"押し込んで表示 (画面外にポインターを移動するようにマウスを動かして表示)" ++ ++#: Settings.ui.h:100 ++msgid "Enable in fullscreen mode" ++msgstr "フルスクリーンモード時でも表示" ++ ++#: Settings.ui.h:101 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "" ++"ドックを常に表示しますが、アプリケーションウィンドウと重なるときは表示しませ" ++"ん。" ++ ++#: Settings.ui.h:102 ++msgid "Dodge windows" ++msgstr "ウィンドウ重なり防止" ++ ++#: Settings.ui.h:103 ++msgid "All windows" ++msgstr "すべてのウィンドウが対象" ++ ++#: Settings.ui.h:104 ++msgid "Only focused application's windows" ++msgstr "フォーカスされたアプリケーションのウィンドウが対象" ++ ++#: Settings.ui.h:105 ++msgid "Only maximized windows" ++msgstr "最大化されたウィンドウが対象" ++ ++#: Settings.ui.h:106 ++msgid "Animation duration (s)" ++msgstr "アニメーション表示時間 (秒)" ++ ++#: Settings.ui.h:107 ++msgid "Show timeout (s)" ++msgstr "表示までのタイムアウト (秒)" ++ ++#: Settings.ui.h:108 ++msgid "Pressure threshold" ++msgstr "押し込み量 (ピクセル)" ++ + #~ msgid "Application" + #~ msgstr "アプリケーション" + +@@ -360,12 +964,6 @@ msgstr "ワークスペースを追加" + #~ msgid "Normal" + #~ msgstr "標準" + +-#~ msgid "Left" +-#~ msgstr "左回り" +- +-#~ msgid "Right" +-#~ msgstr "右回り" +- + #~ msgid "Upside-down" + #~ msgstr "逆さま" + +@@ -414,12 +1012,6 @@ msgstr "ワークスペースを追加" + #~ msgid "Drag here to add favorites" + #~ msgstr "ドラッグでお気に入りに追加" + +-#~ msgid "New Window" +-#~ msgstr "新しいウィンドウで開く" +- +-#~ msgid "Remove from Favorites" +-#~ msgstr "お気に入りから削除" +- + #~ msgid "Icon size" + #~ msgstr "アイコンのサイズ" + +diff --git a/po/nb.po b/po/nb.po +index 66114ec1..bc0f0833 100644 +--- a/po/nb.po ++++ b/po/nb.po +@@ -1,12 +1,22 @@ ++# #-#-#-#-# nb.po (gnome-shell-extensions 3.26.x) #-#-#-#-# + # Norwegian bokmål translation of gnome-shell-extensions. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. + # Kjartan Maraas , 2011-2017. + # ++# #-#-#-#-# nb.po (Dash-to-Dock) #-#-#-#-# ++# Norwegian Bokmål translation for Dash to Dock. ++# Copyright (C) 2018 Michele ++# This file is distributed under the same license as the dash-to-dock package. ++# Harald H. , 2018. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# nb.po (gnome-shell-extensions 3.26.x) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions 3.26.x\n" +-"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=extensions\n" ++"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" ++"shell&keywords=I18N+L10N&component=extensions\n" + "POT-Creation-Date: 2017-10-04 18:03+0000\n" + "PO-Revision-Date: 2017-11-06 13:40+0100\n" + "Last-Translator: Kjartan Maraas \n" +@@ -16,6 +26,19 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 1.5.4\n" ++"#-#-#-#-# nb.po (Dash-to-Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash-to-Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2018-02-28 09:47+0100\n" ++"PO-Revision-Date: 2018-03-02 11:02+0100\n" ++"Language-Team: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 1.8.7.1\n" ++"Last-Translator: Harald H. \n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"Language: nb\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -257,7 +280,7 @@ msgstr "Lukk" + msgid "Unminimize" + msgstr "Gjenopprett" + +-#: extensions/window-list/extension.js:130 ++#: extensions/window-list/extension.js:130 Settings.ui.h:48 + msgid "Minimize" + msgstr "Minimer" + +@@ -354,3 +377,485 @@ msgstr "Navn" + #, javascript-format + msgid "Workspace %d" + msgstr "Arbeidsområde %d" ++ ++#: prefs.js:131 ++msgid "Primary monitor" ++msgstr "Primærskjerm" ++ ++#: prefs.js:140 prefs.js:147 ++msgid "Secondary monitor " ++msgstr "Sekundærskjerm" ++ ++#: prefs.js:172 Settings.ui.h:26 ++msgid "Right" ++msgstr "Høyre" ++ ++#: prefs.js:173 Settings.ui.h:23 ++msgid "Left" ++msgstr "Venstre" ++ ++#: prefs.js:223 ++msgid "Intelligent autohide customization" ++msgstr "Tilpass intelligent autoskjul" ++ ++#: prefs.js:230 prefs.js:415 prefs.js:472 ++msgid "Reset to defaults" ++msgstr "Tilbakestill til standard" ++ ++#: prefs.js:408 ++msgid "Show dock and application numbers" ++msgstr "Vis dokk og programnumre" ++ ++#: prefs.js:465 ++msgid "Customize middle-click behavior" ++msgstr "Tilpass oppførsel for mellomklikk" ++ ++#: prefs.js:548 ++msgid "Customize running indicators" ++msgstr "Tilpass kjørende indikatorer" ++ ++#: prefs.js:662 Settings.ui.h:70 ++msgid "Customize opacity" ++msgstr "Tilpass gjennomsiktighet" ++ ++#: appIcons.js:763 ++msgid "All Windows" ++msgstr "Alle vinduer" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1069 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %s" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Når satt til minimer vil dobbeltklikking minimere alle åpne instanser av " ++"programmet." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Handling for Shift + klikk" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Fremhev vindu" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimer vindu" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Åpne ny instans" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Veksle mellom vinduer" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimer eller oversikt" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Vis forhåndsvisning" ++ ++#: Settings.ui.h:9 ++msgid "Quit" ++msgstr "Avslutt" ++ ++#: Settings.ui.h:10 ++msgid "Behavior for Middle-Click." ++msgstr "Oppførsel for mellomklikk." ++ ++#: Settings.ui.h:11 ++msgid "Middle-Click action" ++msgstr "Mellomklikk" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Oppførsel for Shift + mellomklikk." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Middle-Click action" ++msgstr "Shift + mellomklikk" ++ ++#: Settings.ui.h:14 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Aktiver Unity7-lignende bakgrunnsglans" ++ ++#: Settings.ui.h:15 ++msgid "Use dominant color" ++msgstr "Bruk dominerende farge" ++ ++#: Settings.ui.h:16 ++msgid "Customize indicator style" ++msgstr "Tilpass indikatorstil" ++ ++#: Settings.ui.h:17 ++msgid "Color" ++msgstr "Farge" ++ ++#: Settings.ui.h:18 ++msgid "Border color" ++msgstr "Kantfarge" ++ ++#: Settings.ui.h:19 ++msgid "Border width" ++msgstr "Kantbredde" ++ ++#: Settings.ui.h:20 ++msgid "Show the dock on" ++msgstr "Vis dokken på" ++ ++#: Settings.ui.h:21 ++msgid "Show on all monitors." ++msgstr "Vis på alle skjermer." ++ ++#: Settings.ui.h:22 ++msgid "Position on screen" ++msgstr "Skjermposisjon" ++ ++#: Settings.ui.h:24 ++msgid "Bottom" ++msgstr "Bunn" ++ ++#: Settings.ui.h:25 ++msgid "Top" ++msgstr "Topp" ++ ++#: Settings.ui.h:27 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Skjul dokken når den forstyrrer et aktivt programvindu. Flere innstillinger " ++"er tilgjengelig." ++ ++#: Settings.ui.h:28 ++msgid "Intelligent autohide" ++msgstr "Intelligent autoskjul" ++ ++#: Settings.ui.h:29 ++msgid "Dock size limit" ++msgstr "Maks dokkstørrelse" ++ ++#: Settings.ui.h:30 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Panelmodus: strekker seg til skjermkanten" ++ ++#: Settings.ui.h:31 ++msgid "Icon size limit" ++msgstr "Ikonstørrelse" ++ ++#: Settings.ui.h:32 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Fast ikonstørrelse: rull for vise andre ikoner" ++ ++#: Settings.ui.h:33 ++msgid "Position and size" ++msgstr "Posisjon og størrelse" ++ ++#: Settings.ui.h:34 ++msgid "Show favorite applications" ++msgstr "Vis favorittprogrammer" ++ ++#: Settings.ui.h:35 ++msgid "Show running applications" ++msgstr "Vis kjørende programmer" ++ ++#: Settings.ui.h:36 ++msgid "Isolate workspaces." ++msgstr "Isoler arbeidsområder." ++ ++#: Settings.ui.h:37 ++msgid "Isolate monitors." ++msgstr "Isoler skjermer." ++ ++#: Settings.ui.h:38 ++msgid "Show open windows previews." ++msgstr "Vis forhåndsvisning av åpne vinduer." ++ ++#: Settings.ui.h:39 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Om deaktivert er disse innstillingene tilgjengelig i gnome-tweak-tool eller " ++"på nettsiden for utvidelser." ++ ++#: Settings.ui.h:40 ++msgid "Show Applications icon" ++msgstr "Vis programmer ikon" ++ ++#: Settings.ui.h:41 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Flytt programmer-knappen til starten av dokken." ++ ++#: Settings.ui.h:42 ++msgid "Animate Show Applications." ++msgstr "Animere Vis programmer." ++ ++#: Settings.ui.h:43 ++msgid "Launchers" ++msgstr "Utløsere" ++ ++#: Settings.ui.h:44 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Bruk Super+(0-9) som snarvei for å aktivere apper. Den kan også brukes i " ++"kombinasjon med Shift og Ctrl." ++ ++#: Settings.ui.h:45 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Bruk tastatursnarveier for å åpne apper" ++ ++#: Settings.ui.h:46 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Oppførsel når du klikker på ikonet for et åpent program." ++ ++#: Settings.ui.h:47 ++msgid "Click action" ++msgstr "Klikkhandling" ++ ++#: Settings.ui.h:49 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Oppførsel ved rulling over et programikon." ++ ++#: Settings.ui.h:50 ++msgid "Scroll action" ++msgstr "Rullehandling" ++ ++#: Settings.ui.h:51 ++msgid "Do nothing" ++msgstr "Ikke gjør noe" ++ ++#: Settings.ui.h:52 ++msgid "Switch workspace" ++msgstr "Bytt arbeidsområde" ++ ++#: Settings.ui.h:53 ++msgid "Behavior" ++msgstr "Oppførsel" ++ ++#: Settings.ui.h:54 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Enkelte tilpasninger som forsøker å integrere dokken med det standard GNOME-" ++"temaet. Alternativt kan bestemte valg aktiveres nedenfor." ++ ++#: Settings.ui.h:55 ++msgid "Use built-in theme" ++msgstr "Bruk innebygget tema" ++ ++#: Settings.ui.h:56 ++msgid "Save space reducing padding and border radius." ++msgstr "Spar plass ved å redusere utfylling og kant-radius." ++ ++#: Settings.ui.h:57 ++msgid "Shrink the dash" ++msgstr "Krymp dash" ++ ++#: Settings.ui.h:58 ++msgid "Customize windows counter indicators" ++msgstr "Tilpass vinduenes nummer-indikatorer" ++ ++#: Settings.ui.h:59 ++msgid "Default" ++msgstr "Standard" ++ ++#: Settings.ui.h:60 ++msgid "Dots" ++msgstr "Prikker" ++ ++#: Settings.ui.h:61 ++msgid "Squares" ++msgstr "Firkanter" ++ ++#: Settings.ui.h:62 ++msgid "Dashes" ++msgstr "Streker" ++ ++#: Settings.ui.h:63 ++msgid "Segmented" ++msgstr "Segmentert" ++ ++#: Settings.ui.h:64 ++msgid "Solid" ++msgstr "Solid" ++ ++#: Settings.ui.h:65 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:66 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:67 ++msgid "Set the background color for the dash." ++msgstr "Avgjør bakgrunnsfargen." ++ ++#: Settings.ui.h:68 ++msgid "Customize the dash color" ++msgstr "Tilpass fargen" ++ ++#: Settings.ui.h:69 ++msgid "Tune the dash background opacity." ++msgstr "Justere bakgrunnens gjennomsiktighet." ++ ++#: Settings.ui.h:71 ++msgid "Fixed" ++msgstr "Fast" ++ ++#: Settings.ui.h:72 ++msgid "Adaptive" ++msgstr "Adaptiv" ++ ++#: Settings.ui.h:73 ++msgid "Dynamic" ++msgstr "Dynamisk" ++ ++#: Settings.ui.h:74 ++msgid "Opacity" ++msgstr "Gjennomsiktighet" ++ ++#: Settings.ui.h:75 ++msgid "Force straight corner\n" ++msgstr "Tving rette hjørner\n" ++ ++#: Settings.ui.h:77 ++msgid "Appearance" ++msgstr "Utseende" ++ ++#: Settings.ui.h:78 ++msgid "version: " ++msgstr "versjon: " ++ ++#: Settings.ui.h:79 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Flytter dash ut av oversikten og omformer den til en dokk" ++ ++#: Settings.ui.h:80 ++msgid "Created by" ++msgstr "Laget av" ++ ++#: Settings.ui.h:81 ++msgid "Webpage" ++msgstr "Nettside" ++ ++#: Settings.ui.h:82 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Dette programmet leveres med ABSOLUTT INGEN GARANTI.\n" ++"Se GNU " ++"General Public License, versjon 2 eller senere for detaljer." ++ ++#: Settings.ui.h:84 ++msgid "About" ++msgstr "Om" ++ ++#: Settings.ui.h:85 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Tilpass verdier for minimum og maks gjennomsiktighet" ++ ++#: Settings.ui.h:86 ++msgid "Minimum opacity" ++msgstr "Minimum gjennomsiktighet" ++ ++#: Settings.ui.h:87 ++msgid "Maximum opacity" ++msgstr "Maksimum gjennomsiktighet" ++ ++#: Settings.ui.h:88 ++msgid "Number overlay" ++msgstr "Nummerert overlag" ++ ++#: Settings.ui.h:89 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "Midlertidig vis programnummer over ikoner, som svarer til snarveien." ++ ++#: Settings.ui.h:90 ++msgid "Show the dock if it is hidden" ++msgstr "Vis dokken om den er skjult" ++ ++#: Settings.ui.h:91 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Om autoskjul er i bruk vil dokken vises en kort stund når snarveien utløses." ++ ++#: Settings.ui.h:92 ++msgid "Shortcut for the options above" ++msgstr "Snarvei for valgene ovenfor" ++ ++#: Settings.ui.h:93 ++msgid "Syntax: , , , " ++msgstr "Syntaks: , , , " ++ ++#: Settings.ui.h:94 ++msgid "Hide timeout (s)" ++msgstr "Skjuleperiode (s)" ++ ++#: Settings.ui.h:95 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Vis dokken når musepekeren holdes langs skjermkanten." ++ ++#: Settings.ui.h:96 ++msgid "Autohide" ++msgstr "Autoskjul" ++ ++#: Settings.ui.h:97 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Dytt for å vise: krev et økt trykk for å vise dokken" ++ ++#: Settings.ui.h:98 ++msgid "Enable in fullscreen mode" ++msgstr "Aktiver i fullskjermmodus" ++ ++#: Settings.ui.h:99 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Vis dokken når den ikke forstyrrer programvinduer." ++ ++#: Settings.ui.h:100 ++msgid "Dodge windows" ++msgstr "Smett unna vinduer" ++ ++#: Settings.ui.h:101 ++msgid "All windows" ++msgstr "Alle vinduer" ++ ++#: Settings.ui.h:102 ++msgid "Only focused application's windows" ++msgstr "Kun fokuserte programvinduer" ++ ++#: Settings.ui.h:103 ++msgid "Only maximized windows" ++msgstr "Kun maksimerte programvinduer" ++ ++#: Settings.ui.h:104 ++msgid "Animation duration (s)" ++msgstr "Animasjonsvarighet (s)" ++ ++#: Settings.ui.h:105 ++msgid "Show timeout (s)" ++msgstr "Visningslengde (s)" ++ ++#: Settings.ui.h:106 ++msgid "Pressure threshold" ++msgstr "Trykkterskel" +diff --git a/po/nl.po b/po/nl.po +index 51589f9d..6a1ee07c 100644 +--- a/po/nl.po ++++ b/po/nl.po +@@ -1,11 +1,23 @@ ++# #-#-#-#-# nl.po (gnome-shell-extensions master) #-#-#-#-# + # Dutch translation for gnome-shell-extensions. + # Copyright (C) 2013 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. + # Reinout van Schouwen , 2013, 2014. + # Nathan Follens , 2015-2017, 2019-2020. + # Hannie Dumoleyn , 2015. ++# #-#-#-#-# nl.po (Dash to Dock) #-#-#-#-# ++# Translation for de ++# Copyright (C) 2014 Michele ++# This file is distributed under the same license as the dash-to-dock package. ++# ++# Morris Jobke , 2014. ++# Jonatan Zeidler , 2012. ++# jonius , 2012. ++# Heimen Stoffels , 2015, 2019. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# nl.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -20,6 +32,19 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Poedit 2.4.1\n" + "X-Project-Style: gnome\n" ++"#-#-#-#-# nl.po (Dash to Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2019-10-10 20:27+0200\n" ++"PO-Revision-Date: 2019-10-10 20:46+0200\n" ++"Last-Translator: Heimen Stoffels \n" ++"Language-Team: Dutch \n" ++"Language: de\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Lokalize 19.11.70\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -154,7 +179,7 @@ msgstr "Sluiten" + msgid "Unminimize" + msgstr "Zichtbaar maken" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:52 + msgid "Minimize" + msgstr "Minimaliseren" + +@@ -264,6 +289,510 @@ msgstr "Werkblad %d" + msgid "Add Workspace" + msgstr "Werkblad toevoegen" + ++#: prefs.js:264 ++msgid "Primary monitor" ++msgstr "Primair beeldscherm" ++ ++#: prefs.js:273 prefs.js:280 ++msgid "Secondary monitor " ++msgstr "Secundair beeldscherm" ++ ++#: prefs.js:305 Settings.ui.h:28 ++msgid "Right" ++msgstr "Rechts" ++ ++#: prefs.js:306 Settings.ui.h:25 ++msgid "Left" ++msgstr "Links" ++ ++#: prefs.js:356 ++msgid "Intelligent autohide customization" ++msgstr "Voorkeuren voor slim verbergen" ++ ++#: prefs.js:363 prefs.js:556 prefs.js:612 ++msgid "Reset to defaults" ++msgstr "Standaardwaarden" ++ ++#: prefs.js:549 ++msgid "Show dock and application numbers" ++msgstr "Dock en programmanummers tonen" ++ ++#: prefs.js:605 ++msgid "Customize middle-click behavior" ++msgstr "Middelste muisknop-gedrag aanpassen" ++ ++#: prefs.js:688 ++msgid "Customize running indicators" ++msgstr "Indicatoren van draaiende programma's aanpassen" ++ ++#: prefs.js:800 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Doorzichtigheid aanpassen" ++ ++#: appIcons.js:809 ++msgid "All Windows" ++msgstr "Alle vensters" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1126 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %s" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Als je gekozen hebt voor minimaliseren, dan zorgt dubbelklikken ervoor dat " ++"alle vensters van het huidige programma worden geminimaliseerd." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Shift+klikken-actie" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Venster naar voren halen" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Venster minimalisren" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Nieuw proces openen" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Schakelen tussen vensters" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimaliseren of activiteitenoverzicht" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Venstervoorbeelden tonen" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimaliseren of voorbeelden tonen" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Focussen of voorbeelden tonen" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Afsluiten" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Wat er gebeurt bij middelklikken." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Middelklikactie" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Wat er gebeurt bij Shift+middelklikken." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Shift+middelklik-actie" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Unity7-achtige itemachtergrond gebruiken" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Dominante kleur gebruiken" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Indicatorstijl aanpassen" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Kleur" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Randkleur" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Randbreedte" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Dock tonen op" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Tonen op alle beeldschermen." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Positie op het scherm" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Onderaan" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Bovenaan" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Verberg het dock als het een venster van het huidige programma in de weg " ++"zit. Er zijn uitgebreide instellingen hiervoor beschikbaar." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Slim verbergen" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Maximale dockgrootte" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Paneelmodus: uitrekken tot aan de schermrand" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Maximale pictogramgrootte" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "" ++"Vastgezette pictogramgrootte: scroll om meer pictogrammen weer te geven" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Positie en grootte" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Favoriete programma's tonen" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Geopende programma's tonen" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Werkbladen isoleren." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Beeldschermen isoleren." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Voorbeelden van geopende vensters tonen." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Als je dit uitschakelt, dan zijn deze instellingen toegankelijk via gnome-" ++"tweaks of de extensiesite." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Pictogram voor Alle programma's tonen" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Verplaatst de 'Alle programma's'-knop naar het begin van het dock." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animatie na klikken op Alle programma's tonen." ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Prullenbak tonen" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Aangekoppelde schijven en apparaten tonen" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Starters" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Gebruik Super+(0-9) om programma's te openen en focussen. Kan ook worden " ++"gebruikt met Shift en Ctrl." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Sneltoetsen gebruiken om programma's te openen/focussen" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "" ++"Wat er gebeurt bij het klikken op het pictogram van een geopend programma." ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Klikactie" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "" ++"Wat er gebeurt bij het scrollen op het pictogram van een geopend programma." ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Scrollactie" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Niets doen" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Van werkblad wisselen" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Gedrag" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Enkele aanpassingen, bedoeld om het dock te integreren met het standaard " ++"GNOME-thema. In plaats daarvan kun je hieronder specifieke opties " ++"inschakelen." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Ingebouwd thema gebruiken" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "Bespaar ruimte door de straal van de dikte en rand te verkleinen." ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Snelstarter verkleinen" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "Vensterindicatoren aanpassen" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "Standaard" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Stipjes" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Vierkantjes" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Streepjes" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Gesegmenteerd" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Vast" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Stel de achtergrondkleur in van de snelstarter." ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Snelstarterkleur aanpassen" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Pas de doorzichtigheid van de snelstarterachtergrond aan." ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Vooringesteld" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Dynamisch" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Doorzichtigheid" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner\n" ++msgstr "Rechte hoek afdwingen\n" ++ ++#: Settings.ui.h:80 ++msgid "Appearance" ++msgstr "Uiterlijk" ++ ++#: Settings.ui.h:81 ++msgid "version: " ++msgstr "versie: " ++ ++#: Settings.ui.h:82 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "" ++"Toont de snelstarter buiten het activiteitenoverzicht zodat het een dock " ++"wordt" ++ ++#: Settings.ui.h:83 ++msgid "Created by" ++msgstr "Gemaakt door" ++ ++#: Settings.ui.h:84 ++msgid "Webpage" ++msgstr "Website" ++ ++#: Settings.ui.h:85 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Dit programma wordt geleverd ZONDER ENIGE GARANTIE.\n" ++"Lees de GNU General Public License, versie 2 of nieuwer, voor meer informatie." ++"" ++ ++#: Settings.ui.h:87 ++msgid "About" ++msgstr "Over" ++ ++#: Settings.ui.h:88 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Minimum- en maximumwaarden van doorzichtigheid aanpassen" ++ ++#: Settings.ui.h:89 ++msgid "Minimum opacity" ++msgstr "Minimale doorzichtigheid" ++ ++#: Settings.ui.h:90 ++msgid "Maximum opacity" ++msgstr "Maximale doorzichtigheid" ++ ++#: Settings.ui.h:91 ++msgid "Number overlay" ++msgstr "Nummers tonen" ++ ++#: Settings.ui.h:92 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Toon tijdelijk de programmanummers, behorende bij de sneltoets, op de " ++"pictogrammen." ++ ++#: Settings.ui.h:93 ++msgid "Show the dock if it is hidden" ++msgstr "Dock tonen indien verborgen" ++ ++#: Settings.ui.h:94 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Als je automatisch verbergen gebruikt, dan wordt het dock, middels de " ++"sneltoets, korte tijd getoond." ++ ++#: Settings.ui.h:95 ++msgid "Shortcut for the options above" ++msgstr "Sneltoets voor bovenstaande opties" ++ ++#: Settings.ui.h:96 ++msgid "Syntax: , , , " ++msgstr "Syntax: , , , " ++ ++#: Settings.ui.h:97 ++msgid "Hide timeout (s)" ++msgstr "Verberginterval (s)" ++ ++#: Settings.ui.h:98 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Dock tonen door de muiscursor op de schermrand te plaatsen." ++ ++#: Settings.ui.h:99 ++msgid "Autohide" ++msgstr "Automatisch verbergen" ++ ++#: Settings.ui.h:100 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Tonen middels druk: druk toepassen om het dock te tonen" ++ ++#: Settings.ui.h:101 ++msgid "Enable in fullscreen mode" ++msgstr "Inschakelen in beeldvullende modus" ++ ++#: Settings.ui.h:102 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Toon het dock als het geen programmavensters in de weg zit." ++ ++#: Settings.ui.h:103 ++msgid "Dodge windows" ++msgstr "Vensters ontwijken" ++ ++#: Settings.ui.h:104 ++msgid "All windows" ++msgstr "Alle vensters" ++ ++#: Settings.ui.h:105 ++msgid "Only focused application's windows" ++msgstr "Alleen gefocuste programmavensters" ++ ++#: Settings.ui.h:106 ++msgid "Only maximized windows" ++msgstr "Alleen gemaximaliseerde vensters" ++ ++#: Settings.ui.h:107 ++msgid "Animation duration (s)" ++msgstr "Animatieduur (s)" ++ ++#: Settings.ui.h:108 ++msgid "Show timeout (s)" ++msgstr "Weergave-interval (s)" ++ ++#: Settings.ui.h:109 ++msgid "Pressure threshold" ++msgstr "Drukwaarde" ++ + #~ msgid "Application" + #~ msgstr "Toepassing" + +@@ -357,3 +886,135 @@ msgstr "Werkblad toevoegen" + + #~ msgid "Memory" + #~ msgstr "Geheugen" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "Toon een stip voor elk geopend venster." ++ ++#~ msgid "0.000" ++#~ msgstr "0.000" ++ ++#, fuzzy ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "Het gebied nabij de schermrand en de Applicaties weergeven-knop " ++#~ "zijn actief." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Van werkblad wisselen door te scrollen op het dock" ++ ++#~ msgid "Only consider windows of the focused application" ++#~ msgstr "Alleen vensters van de huidige gefocuste applicatie overwegen" ++ ++#~ msgid "Main Settings" ++#~ msgstr "Grundeinstellungen" ++ ++#~ msgid "Dock Position" ++#~ msgstr "Dock-Position" ++ ++#~ msgid "Dock is fixed and always visible" ++#~ msgstr "Das Dock hat eine feste Position und ist immer sichtbar" ++ ++#~ msgid "Show delay [ms]" ++#~ msgstr "Einblendeverzögerung [ms]" ++ ++#~ msgid "Hide delay [ms]" ++#~ msgstr "Ausblendeverzögerung [ms]" ++ ++#~ msgid "Application based intellihide" ++#~ msgstr "Anwendungsbasiertes intelligentes Verstecken" ++ ++#~ msgid "Show the dock on following monitor (if attached)" ++#~ msgstr "Zeige Dock auf folgendem Monitor (falls angeschlossen)" ++ ++#~ msgid "Primary (default)" ++#~ msgstr "Primäranzeige (Standard)" ++ ++#~ msgid "1" ++#~ msgstr "1" ++ ++#~ msgid "2" ++#~ msgstr "2" ++ ++#~ msgid "3" ++#~ msgstr "3" ++ ++#~ msgid "4" ++#~ msgstr "4" ++ ++#~ msgid "Max height" ++#~ msgstr "Maximale Höhe" ++ ++#~ msgid "Expand (experimental and buggy)" ++#~ msgstr "Komplette Höhe (experimentell und fehlerbehaftet)" ++ ++#~ msgid "Maximum icon size" ++#~ msgstr "Maximale Symbolgröße" ++ ++#~ msgid "16" ++#~ msgstr "16" ++ ++#~ msgid "24" ++#~ msgstr "24" ++ ++#~ msgid "32" ++#~ msgstr "32" ++ ++#~ msgid "48" ++#~ msgstr "48" ++ ++#~ msgid "64" ++#~ msgstr "64" ++ ++#~ msgid "Optional features" ++#~ msgstr "Optionale Funktionen" ++ ++#~ msgid "Deadtime between each workspace switching [ms]" ++#~ msgstr "Stillstandszeit zwischen Arbeitsflächenwechsel [ms]" ++ ++#~ msgid "Only a 1px wide area close to the screen edge is active" ++#~ msgstr "Nur einen 1 Pixel-breiten Bereich am Rand nutzen" ++ ++#~ msgid "All the area of the dock is active" ++#~ msgstr "Den gesamten Bereich des Docks nutzen" ++ ++#~ msgid "Customize actions on mouse click" ++#~ msgstr "Aktion bei Mausklick anpassen" ++ ++#~ msgid "Action on clicking on running app" ++#~ msgstr "Aktion beim Klicken auf eine laufende Anwendung" ++ ++#~ msgid "Minimize window on shift+click (double click for all app windows)" ++#~ msgstr "" ++#~ "Fenster mit Shift+Klick minimieren (Doppelklick für alle Fenster der " ++#~ "Anwendung)" ++ ++#~ msgid "Appearence and Themes" ++#~ msgstr "Erscheinungsbild und Themen" ++ ++#~ msgid "" ++#~ "A customized theme is built in the extension. This is meant to work with " ++#~ "the default Adwaita theme: the dash is shrunk to save space, its " ++#~ "background transparency reduced, and custom indicators for the number of " ++#~ "windows of each application are added." ++#~ msgstr "" ++#~ "Ein angepasstes Thema ist in dieser Erweiterung enthalten. Es ist für das " ++#~ "Vorgabe-Adwaita-Thema gedacht: Das Dash ist schmaler, um Platz zu sparen, " ++#~ "die Hintergrundtransparenz ist reduziert und für jede Anwendung wird ein " ++#~ "Indikator für die Anzahl der Fenster eingefügt." ++ ++#~ msgid "" ++#~ "Alternatively, for a better integration with custom themes, each " ++#~ "customization can be applied indipendently" ++#~ msgstr "" ++#~ "Alternativ können für eine bessere Integration Anpassungen vorgenommen " ++#~ "werden" ++ ++#~ msgid "Shrink the dash size by reducing padding" ++#~ msgstr "Das Dash schmaler machen durch Verkleinern des Abstands zum Rand" ++ ++#~ msgid "Apply custom theme (work only with the default Adwaita theme)" ++#~ msgstr "" ++#~ "Benutzerdefiniertes Theme verwenden (funktioniert nur mit dem Standard-" ++#~ "Adwaita-Theme)" +diff --git a/po/pl.po b/po/pl.po +index bcfe2d6a..a97366b6 100644 +--- a/po/pl.po ++++ b/po/pl.po +@@ -1,11 +1,22 @@ ++# #-#-#-#-# pl.po (gnome-shell-extensions) #-#-#-#-# + # Polish translation for gnome-shell-extensions. + # Copyright © 2011-2020 the gnome-shell-extensions authors. + # This file is distributed under the same license as the gnome-shell-extensions package. + # Piotr Drąg , 2011-2020. + # Aviary.pl , 2011-2020. + # ++# #-#-#-#-# pl.po (55) #-#-#-#-# ++# Polish translation for dash-to-dock GNOME Shell extension ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the dash-to-dock package. ++# ++# ++# Piotr Sokół , 2012, 2013, 2015, 2016, 2017. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# pl.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -19,6 +30,20 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " + "|| n%100>=20) ? 1 : 2);\n" ++"#-#-#-#-# pl.po (55) #-#-#-#-#\n" ++"Project-Id-Version: 55\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2019-10-10 10:10+0200\n" ++"PO-Revision-Date: 2019-10-10 10:31+0200\n" ++"Last-Translator: Piotr Sokół \n" ++"Language-Team: polski <>\n" ++"Language: pl\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " ++"|| n%100>=20) ? 1 : 2;\n" ++"X-Generator: Poedit 2.2.3\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -152,9 +177,14 @@ msgstr "Zamknij" + msgid "Unminimize" + msgstr "Cofnij minimalizację" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:52 ++#, fuzzy + msgid "Minimize" +-msgstr "Zminimalizuj" ++msgstr "" ++"#-#-#-#-# pl.po (gnome-shell-extensions) #-#-#-#-#\n" ++"Zminimalizuj\n" ++"#-#-#-#-# pl.po (55) #-#-#-#-#\n" ++"Zminimalizowanie okna" + + #: extensions/window-list/extension.js:125 + msgid "Unmaximize" +@@ -259,3 +289,534 @@ msgstr "%d. obszar roboczy" + #: extensions/workspace-indicator/prefs.js:218 + msgid "Add Workspace" + msgstr "Dodaj obszar roboczy" ++ ++#: prefs.js:264 ++msgid "Primary monitor" ++msgstr "Podstawowy" ++ ++#: prefs.js:273 prefs.js:280 ++msgid "Secondary monitor " ++msgstr "Drugorzędny " ++ ++#: prefs.js:305 Settings.ui.h:28 ++msgid "Right" ++msgstr "Po prawej" ++ ++#: prefs.js:306 Settings.ui.h:25 ++msgid "Left" ++msgstr "Po lewej" ++ ++#: prefs.js:356 ++msgid "Intelligent autohide customization" ++msgstr "Dostosowanie automatycznego ukrywania" ++ ++#: prefs.js:363 prefs.js:556 prefs.js:612 ++msgid "Reset to defaults" ++msgstr "Przywróć domyślne" ++ ++#: prefs.js:549 ++msgid "Show dock and application numbers" ++msgstr "Wyświetlanie doku i numerów programów" ++ ++#: prefs.js:605 ++msgid "Customize middle-click behavior" ++msgstr "Dostosowanie działania przycisków myszy" ++ ++#: prefs.js:688 ++msgid "Customize running indicators" ++msgstr "Dostosowanie wskaźników okien" ++ ++#: prefs.js:800 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Dostosowanie nieprzejrzystości" ++ ++#: appIcons.js:809 ++msgid "All Windows" ++msgstr "Wszystkie okna" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1126 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s Dash to Dock" ++ ++#: locations.js:65 ++msgid "Trash" ++msgstr "Kosz" ++ ++#: locations.js:74 ++msgid "Empty Trash" ++msgstr "Pusty kosz" ++ ++#: locations.js:182 ++msgid "Mount" ++msgstr "Zamontuj" ++ ++#: locations.js:225 ++msgid "Eject" ++msgstr "Wysuń" ++ ++#: locations.js:230 ++msgid "Unmount" ++msgstr "Odmontuj" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Wybranie zminimalizowania okna, umożliwia minimalizowanie wszystkich okien " ++"programu dwukrotnym kliknięciem" ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Kliknięcia lewym przyciskiem + Shift" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Przywrócenie okna" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Zminimalizowanie okna" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Otwarcie nowego okna" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Przełączenie pomiędzy oknami" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Zminimalizowanie lub ekran podglądu" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Wyświetlenie podglądu okien" ++ ++#: Settings.ui.h:9 ++#, fuzzy ++#| msgid "Minimize or overview" ++msgid "Minimize or show previews" ++msgstr "Zminimalizowanie lub ekran podglądu" ++ ++#: Settings.ui.h:10 ++#, fuzzy ++#| msgid "Show window previews" ++msgid "Focus or show previews" ++msgstr "Wyświetlenie podglądu okien" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Zakończenie działania" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Konfiguruje działanie kliknięcia środkowym przyciskiem myszy" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Kliknięcie środkowym przyciskiem" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "" ++"Konfiguruje działanie kliknięcia środkowym przyciskiem myszy z przytrzymanym " ++"klawiszem Shift" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Kliknięcie środkowym przyciskiem + Shift" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Podświetlenie elementów w stylu Unity7" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Użyj dominującego koloru" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Dostosowanie stylu wskaźników" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Kolor" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Kolor obramowania" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Szerokość obramowania" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Ekran wyświetlania doku" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Na wszystkich ekranach" ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Położenie na ekranie" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Na dole" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "U góry" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Ukrywa dok jeśli zakrywa okno bieżącego programu. Dostępnych jest więcej " ++"szczegółowych opcji." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Inteligentne ukrywanie" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Ograniczenie rozmiaru doku" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Tryb panelu: rozciągnięcie do krawędzi ekranu" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Ograniczenie rozmiaru ikon" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Ustalony rozmiar ikon: odsłanianie ikon przewijaniem" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Położenie i rozmiar" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Ulubione programy" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Uruchomione programy" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Izolowanie obszarów roboczych" ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Izolowanie ekranów" ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Podgląd otwartych okien" ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Przełącza widoczność przycisku programów. Można też skonfigurować za pomocą " ++"narzędzia dostrajania lub witryny internetowej z rozszerzeniami." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Przycisk Wyświetl programy" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Przemieszczenie przycisku programów na początek doku" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animowanie przycisku Wyświetl programy" ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Pokaż kosz na śmieci" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Pokaż zamontowane woluminy oraz urządzenia" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Aktywatory" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Używa skrótu Super+(0-9) do uruchomienia aktywatorów. Można użyć z " ++"modyfikatorem Shift lub Ctrl." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Uruchamianie aktywatorów skrótami klawiszowymi" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Określa działanie kliknięcia ikony uruchomionego programu" ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Działanie kliknięcia" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Określa działanie przewijania kółkiem ikony programu" ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Działanie przewijania" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Brak" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Przełączenie obszaru roboczego" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Zachowanie" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Integruje dok z domyślnym stylem GNOME przy użyciu kilku ustawień. " ++"Opcjonalnie ustawienia te można określić poniżej." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Użycie zintegrowanego stylu" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "" ++"Zmniejsza zajmowaną powierzchnię redukując\n" ++"odległość od krawędzi i jej zaokrąglenie" ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Zmniejszenie kokpitu" ++ ++#: Settings.ui.h:62 ++#, fuzzy ++#| msgid "Show windows counter indicators" ++msgid "Customize windows counter indicators" ++msgstr "Wskaźniki ilości okien" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "Domyślnie" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Kropki" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Kwadraty" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Kreski" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Posegmentowane" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Nieprzerywane" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Ustala wybrany kolor tła kokpitu" ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Kolor kokpitu" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Modyfikuje zaciemnienie tła kokpitu" ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Ustalona" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Dynamiczna" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Nieprzejrzystość" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner\n" ++msgstr "Kąty proste narożników\n" ++ ++#: Settings.ui.h:80 ++msgid "Appearance" ++msgstr "Wygląd" ++ ++#: Settings.ui.h:81 ++msgid "version: " ++msgstr "wersja: " ++ ++#: Settings.ui.h:82 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Przemieszcza kokpit z widoku podglądu do doku" ++ ++#: Settings.ui.h:83 ++msgid "Created by" ++msgstr "Stworzony przez" ++ ++#: Settings.ui.h:84 ++msgid "Webpage" ++msgstr "Strona internetowa" ++ ++#: Settings.ui.h:85 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Niniejszy program rozpowszechniany jest bez " ++"jakiejkolwiek gwarancji.\n" ++"Więcej informacji: Powszechna licencja publiczna GNU, wersja 2 lub późniejsza." ++ ++#: Settings.ui.h:87 ++msgid "About" ++msgstr "O programie" ++ ++#: Settings.ui.h:88 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Dostosowanie minimalnej i maksymalnej wartości nieprzejrzystości" ++ ++#: Settings.ui.h:89 ++msgid "Minimum opacity" ++msgstr "Minimalna nieprzejrzystość" ++ ++#: Settings.ui.h:90 ++msgid "Maximum opacity" ++msgstr "Maksymalna nieprzejrzystość" ++ ++#: Settings.ui.h:91 ++msgid "Number overlay" ++msgstr "Nakładka z numerem" ++ ++#: Settings.ui.h:92 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "Wyświetla chwilowo na ikonach numery programów powiązane ze skrótami" ++ ++#: Settings.ui.h:93 ++msgid "Show the dock if it is hidden" ++msgstr "Wyświetlenie ukrytego doku" ++ ++#: Settings.ui.h:94 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "Wyświetla chwilowo dok po wciśnięciu skrótu klawiszowego" ++ ++#: Settings.ui.h:95 ++msgid "Shortcut for the options above" ++msgstr "Skrót klawiszowy dla powyższych poleceń" ++ ++#: Settings.ui.h:96 ++msgid "Syntax: , , , " ++msgstr "Składnia: , , , " ++ ++#: Settings.ui.h:97 ++msgid "Hide timeout (s)" ++msgstr "Czas ukrywania (s)" ++ ++#: Settings.ui.h:98 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Wyświetla dok po przemieszczeniu wskaźnika myszy do krawędzi ekranu" ++ ++#: Settings.ui.h:99 ++msgid "Autohide" ++msgstr "Automatyczne ukrywanie" ++ ++#: Settings.ui.h:100 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Wymagany nacisk do wyświetlenia doku" ++ ++#: Settings.ui.h:101 ++msgid "Enable in fullscreen mode" ++msgstr "Wyświetlanie na pełnym ekranie" ++ ++#: Settings.ui.h:102 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Wyświetla dok jeśli nie zakrywa okien programu" ++ ++#: Settings.ui.h:103 ++msgid "Dodge windows" ++msgstr "Ukrywanie przed oknami" ++ ++#: Settings.ui.h:104 ++msgid "All windows" ++msgstr "Wszystkie okna" ++ ++#: Settings.ui.h:105 ++msgid "Only focused application's windows" ++msgstr "Tylko aktywne okna programu" ++ ++#: Settings.ui.h:106 ++msgid "Only maximized windows" ++msgstr "Tylko zmaksymalizowane okna" ++ ++#: Settings.ui.h:107 ++msgid "Animation duration (s)" ++msgstr "Czas animacji (s)" ++ ++#: Settings.ui.h:108 ++msgid "Show timeout (s)" ++msgstr "Czas wyświetlania (s)" ++ ++#: Settings.ui.h:109 ++msgid "Pressure threshold" ++msgstr "Próg nacisku" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "Wyświetla kropkę dla każdego okna programu" ++ ++#~ msgid "Adaptive" ++#~ msgstr "Adaptacyjna" +diff --git a/po/pt.po b/po/pt.po +index 87270e01..99d446f9 100644 +--- a/po/pt.po ++++ b/po/pt.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# pt.po (3.14) #-#-#-#-# + # gnome-shell-extensions' Portuguese translation. + # Copyright © 2011 gnome-shell-extensions + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -10,8 +11,16 @@ + # Hugo Carvalho , 2021. + # Juliano de Souza Camargo , 2021. + # ++# #-#-#-#-# pt.po (Dash to Dock) #-#-#-#-# ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# Carlos Alberto Junior Spohr Poletto , 2012. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# pt.po (3.14) #-#-#-#-#\n" + "Project-Id-Version: 3.14\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -26,11 +35,18 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n != 1)\n" + "X-Generator: Gtranslator 40.0\n" + "X-Project-Style: gnome\n" +-"X-DL-Team: pt\n" +-"X-DL-Module: gnome-shell-extensions\n" +-"X-DL-Branch: gnome-40\n" +-"X-DL-Domain: po\n" +-"X-DL-State: Translating\n" ++"#-#-#-#-# pt.po (Dash to Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2019-03-06 01:57-0600\n" ++"PO-Revision-Date: 2019-03-06 03:55-0600\n" ++"Last-Translator: Adolfo Jayme Barrientos \n" ++"Language-Team: Carlos Alberto Junior Spohr Poletto \n" ++"Language: pt\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.2.1\n" + + #: data/gnome-classic.desktop.in:3 + msgid "GNOME Classic" +@@ -164,7 +180,7 @@ msgstr "Fechar" + msgid "Unminimize" + msgstr "Desminimizar" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:50 + msgid "Minimize" + msgstr "Minimizar" + +@@ -272,6 +288,492 @@ msgstr "Área de trabalho %d" + msgid "Add Workspace" + msgstr "Adicionar área de trabalho" + ++#: prefs.js:306 Settings.ui.h:25 ++msgid "Left" ++msgstr "Esquerda" ++ ++#: prefs.js:305 Settings.ui.h:28 ++msgid "Right" ++msgstr "Direita" ++ ++#: prefs.js:264 ++msgid "Primary monitor" ++msgstr "Monitor primário" ++ ++#: prefs.js:273 prefs.js:280 ++msgid "Secondary monitor " ++msgstr "Monitor secundário " ++ ++#: prefs.js:356 ++msgid "Intelligent autohide customization" ++msgstr "Personalização do auto-hide inteligente" ++ ++#: prefs.js:363 prefs.js:548 prefs.js:604 ++msgid "Reset to defaults" ++msgstr "Repor padrão" ++ ++#: prefs.js:541 ++msgid "Show dock and application numbers" ++msgstr "Mostrar números das docks e aplicações" ++ ++#: prefs.js:597 ++msgid "Customize middle-click behavior" ++msgstr "Personalizar comportamento do clique do meio" ++ ++#: prefs.js:680 ++msgid "Customize running indicators" ++msgstr "Personalizar indicadores de execução" ++ ++#: prefs.js:792 Settings.ui.h:72 ++msgid "Customize opacity" ++msgstr "Personalizar opacidade" ++ ++#: appIcons.js:790 ++msgid "All Windows" ++msgstr "Todas as janelas" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1092 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s do Dash to Dock" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Quando definido para minimizar, duplo clique minimiza todas as janelas da " ++"aplicação." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Ação de Shift+Clique" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Levantar janela" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimizar janela" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Abrir nova janela" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Percorrer janelas" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimizar ou antever" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Mostrar antevisão das janelas abertas" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimizar ou antever" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Focar ou antever" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Sair" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Comportamento do clique do meio." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Ação do clique do meio" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Comportamento do Shift+Clique do meio." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Ação do Shift+Clique do meio" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Usar efeito polido no fundo (estilo Unity7)" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Usar cor dominante" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Personalizar indicadores" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Cor" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Cor da borda" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Largura da borda" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Mostrar a dock em" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Mostrar em todos os monitores." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Posição no ecrã" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Em baixo" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Em cima" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Esconder a dock quando obstrói uma janela da aplicação atual. Estão " ++"disponíveis opções mais detalhadas." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Ocultação inteligente" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Limite do tamanho da dock" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Modo Painel: expandir até ao limite do ecrã" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Limite do tamanho dos ícones" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Tamanho fixo dos ícones: scroll para revelar outros ícones" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Posição e dimensão" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Mostrar aplicações favoritas" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Mostrar aplicações em execução" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Isolar áreas de trabalho." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Isolar monitores." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Mostrar antevisão das janelas abertas." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Se desativadas, estas opções estão acessíveis através do gnome-tweak-tool ou " ++"no site das extensões." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Mostrar ícone das Aplicações" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Mover o botão das aplicações para o início da dock." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animar Mostrar aplicações." ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Lançadores" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Usar Super+(0-9) como atalhos para as aplicações. Também pode ser usado com " ++"Shift e Ctrl." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Usar atalhos de teclado para aplicações" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Comportamento do clique no ícone de uma aplicação em execução." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Ação do clique" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Comportamento do scroll no ícone de uma aplicação." ++ ++#: Settings.ui.h:52 ++msgid "Scroll action" ++msgstr "Ação do scroll" ++ ++#: Settings.ui.h:53 ++msgid "Do nothing" ++msgstr "Não fazer nada" ++ ++#: Settings.ui.h:54 ++msgid "Switch workspace" ++msgstr "Alternar espaço de trabalho" ++ ++#: Settings.ui.h:55 ++msgid "Behavior" ++msgstr "Comportamento" ++ ++#: Settings.ui.h:56 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Menos opções visando a integração da doca com o tema padrão do GNOME. " ++"Alternativamente, opções mais detalhadas podem ser ativadas abaixo." ++ ++#: Settings.ui.h:57 ++msgid "Use built-in theme" ++msgstr "Usar tema embutido" ++ ++#: Settings.ui.h:58 ++msgid "Save space reducing padding and border radius." ++msgstr "Poupar espaço reduzindo o preenchimento e as bordas." ++ ++#: Settings.ui.h:59 ++msgid "Shrink the dash" ++msgstr "Encolher a dock" ++ ++#: Settings.ui.h:60 ++msgid "Customize windows counter indicators" ++msgstr "Mostrar indicador com contagem de janelas" ++ ++#: Settings.ui.h:61 ++msgid "Default" ++msgstr "Padrão" ++ ++#: Settings.ui.h:62 ++msgid "Dots" ++msgstr "Pontos" ++ ++#: Settings.ui.h:63 ++msgid "Squares" ++msgstr "Quadrados" ++ ++#: Settings.ui.h:64 ++msgid "Dashes" ++msgstr "Linhas" ++ ++#: Settings.ui.h:65 ++msgid "Segmented" ++msgstr "Segmentado" ++ ++#: Settings.ui.h:66 ++msgid "Solid" ++msgstr "Sólido" ++ ++#: Settings.ui.h:67 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:68 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:69 ++msgid "Set the background color for the dash." ++msgstr "Definir a cor de fundo do painel." ++ ++#: Settings.ui.h:70 ++msgid "Customize the dash color" ++msgstr "Personalizar cor do painel" ++ ++#: Settings.ui.h:71 ++msgid "Tune the dash background opacity." ++msgstr "Afinar a cor de fundo do painel." ++ ++#: Settings.ui.h:73 ++msgid "Fixed" ++msgstr "Fixo" ++ ++#: Settings.ui.h:74 ++msgid "Dynamic" ++msgstr "Dinâmico" ++ ++#: Settings.ui.h:75 ++msgid "Opacity" ++msgstr "Opacidade" ++ ++#: Settings.ui.h:76 ++msgid "Force straight corner\n" ++msgstr "Forçar cantos retos\n" ++ ++#: Settings.ui.h:78 ++msgid "Appearance" ++msgstr "Aparência" ++ ++#: Settings.ui.h:79 ++msgid "version: " ++msgstr "versão: " ++ ++#: Settings.ui.h:80 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Retira o painel da vista de Atividades, tornando-o numa dock" ++ ++#: Settings.ui.h:81 ++msgid "Created by" ++msgstr "Criado por" ++ ++#: Settings.ui.h:82 ++msgid "Webpage" ++msgstr "Página web" ++ ++#: Settings.ui.h:83 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++ ++#: Settings.ui.h:85 ++msgid "About" ++msgstr "Sobre" ++ ++#: Settings.ui.h:86 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Personalizar valor mínimo e máximo da opacidade" ++ ++#: Settings.ui.h:87 ++msgid "Minimum opacity" ++msgstr "Opacidade mínima" ++ ++#: Settings.ui.h:88 ++msgid "Maximum opacity" ++msgstr "Opacidade máxima" ++ ++#: Settings.ui.h:89 ++msgid "Number overlay" ++msgstr "Números sobrepostos" ++ ++#: Settings.ui.h:90 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Mostrar temporariamente o número das aplicações sobre os ícones, " ++"correspondendo os atalhos." ++ ++#: Settings.ui.h:91 ++msgid "Show the dock if it is hidden" ++msgstr "Mostrar a dock se estiver escondida" ++ ++#: Settings.ui.h:92 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Se o auto-hide estiver ativo, a dock aparecerá temporariamente ao utilizar o " ++"atalho." ++ ++#: Settings.ui.h:93 ++msgid "Shortcut for the options above" ++msgstr "Atalho para as opções acima" ++ ++#: Settings.ui.h:94 ++msgid "Syntax: , , , " ++msgstr "Síntaxe: , , , " ++ ++#: Settings.ui.h:95 ++msgid "Hide timeout (s)" ++msgstr "Tempo limite para esconder (s)" ++ ++#: Settings.ui.h:96 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Mostrar a dock ao passar o rato na borda do ecrã." ++ ++#: Settings.ui.h:97 ++msgid "Autohide" ++msgstr "Ocultação inteligente" ++ ++#: Settings.ui.h:98 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Pressionar para mostrar: requerer pressão para mostrar a doca" ++ ++#: Settings.ui.h:99 ++msgid "Enable in fullscreen mode" ++msgstr "Ativar no modo de ecrã inteiro" ++ ++#: Settings.ui.h:100 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Mostrar a dock quando esta não obstrui as janelas." ++ ++#: Settings.ui.h:101 ++msgid "Dodge windows" ++msgstr "Esquivar as janelas" ++ ++#: Settings.ui.h:102 ++msgid "All windows" ++msgstr "Todas as janelas" ++ ++#: Settings.ui.h:103 ++msgid "Only focused application's windows" ++msgstr "Apenas janelas da aplicação focada" ++ ++#: Settings.ui.h:104 ++msgid "Only maximized windows" ++msgstr "Apenas janelas maximizadas" ++ ++#: Settings.ui.h:105 ++msgid "Animation duration (s)" ++msgstr "Tempo da animação (s)" ++ ++#: Settings.ui.h:106 ++msgid "Show timeout (s)" ++msgstr "Mostrar tempo limite (s)" ++ ++#: Settings.ui.h:107 ++msgid "Pressure threshold" ++msgstr "Limite de pressão" ++ + #~ msgid "Attach modal dialog to the parent window" + #~ msgstr "Anexar diálogo modal à janela mãe" + +@@ -391,12 +893,6 @@ msgstr "Adicionar área de trabalho" + #~ msgid "Normal" + #~ msgstr "Normal" + +-#~ msgid "Left" +-#~ msgstr "Esquerda" +- +-#~ msgid "Right" +-#~ msgstr "Direita" +- + #~ msgid "Upside-down" + #~ msgstr "Invertido" + +diff --git a/po/pt_BR.po b/po/pt_BR.po +index d1bd41bc..9dc0db84 100644 +--- a/po/pt_BR.po ++++ b/po/pt_BR.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# pt_BR.po (gnome-shell-extensions master) #-#-#-#-# + # Brazilian Portuguese translation for gnome-shell-extensions. + # Copyright (C) 2020 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -10,8 +11,17 @@ + # Enrico Nicoletto , 2013, 2014. + # Rafael Fontenelle , 2013-2020. + # ++# #-#-#-#-# pt_BR.po (Dash to Dock) #-#-#-#-# ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# Carlos Alberto Junior Spohr Poletto , 2012. ++# Fábio Nogueira , 2016. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# pt_BR.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -26,6 +36,18 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n > 1)\n" + "X-Generator: Gtranslator 3.36.0\n" + "X-Project-Style: gnome\n" ++"#-#-#-#-# pt_BR.po (Dash to Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2019-03-06 01:57-0600\n" ++"PO-Revision-Date: 2019-03-06 03:56-0600\n" ++"Last-Translator: Adolfo Jayme Barrientos \n" ++"Language-Team: Português do Brasil\n" ++"Language: pt_BR\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.2.1\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -160,7 +182,7 @@ msgstr "Fechar" + msgid "Unminimize" + msgstr "Desfazer janelas minimizadas" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:50 + msgid "Minimize" + msgstr "Minimizar" + +@@ -270,6 +292,495 @@ msgstr "Espaço de trabalho %d" + msgid "Add Workspace" + msgstr "Adicionar espaço de trabalho" + ++#: prefs.js:306 Settings.ui.h:25 ++msgid "Left" ++msgstr "Esquerda" ++ ++#: prefs.js:305 Settings.ui.h:28 ++msgid "Right" ++msgstr "Direita" ++ ++#: prefs.js:264 ++msgid "Primary monitor" ++msgstr "Monitor primário" ++ ++#: prefs.js:273 prefs.js:280 ++msgid "Secondary monitor " ++msgstr "Monitor secundário" ++ ++#: prefs.js:356 ++msgid "Intelligent autohide customization" ++msgstr "Configuração da ocultação inteligente" ++ ++#: prefs.js:363 prefs.js:548 prefs.js:604 ++msgid "Reset to defaults" ++msgstr "Restaurar o padrão" ++ ++#: prefs.js:541 ++msgid "Show dock and application numbers" ++msgstr "Exibir o dock e os números dos aplicativos" ++ ++#: prefs.js:597 ++msgid "Customize middle-click behavior" ++msgstr "Customizar o comportamento do clique do botão do meio" ++ ++#: prefs.js:680 ++msgid "Customize running indicators" ++msgstr "Customizar os indicadores de execução" ++ ++#: prefs.js:792 Settings.ui.h:72 ++msgid "Customize opacity" ++msgstr "Customizar opacidade" ++ ++#: appIcons.js:790 ++msgid "All Windows" ++msgstr "Todas as janelas" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1092 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s do Dash to Dock" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Quando minimizar, o duplo clique minizará todas as janelas dos aplicativos" ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Ação do Shift+Clique" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Aumentar janela" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimizar janela" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Iniciar nova instância" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Percorrer através das janelas" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimizar o visão geral" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Mostrar pré-visualizações das janelas" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimizar o mostrar pré-visualizações" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Pôr em foco o pré-visualizar" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Sair" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Comportamento do Clique do botão do meio." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Ação do clique do botão do meio" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Comportamento para Shift + Clique do botão do meio." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Ação do Shift+Clique do botão do meio" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Ativar retroiluminação estilo Unity 7 dos elementos" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Usar cor dominante" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Customizar o estilo do indicador" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Cor" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Cor da borda" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Tamanho da borda" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Exibir o dock" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Mostrar em todos os monitores." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Posição na tela" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Embaixo" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Em cima" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Ocultar o dock quando o mesmo sobrepor a janela do aplicativo em uso. " ++"Definições mais aperfeiçoadas estão disponíveis." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Ocultação inteligente" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Tamanho limite do dock" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Modo do painel: estender até a borda da tela" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Tamanho limite do ícone" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Tamanho do ícone fixo: use o scroll do mouse para revelar outro ícone" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Posição e tamanho" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Mostrar aplicativos favoritos" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Mostrar aplicativos em execução" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Isolar espaços de trabalho." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Isolar monitores." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Mostrar pré-visualizações de janelas abertas." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Se desabilitado, essas configurações estão acessíveis através do gnome-tweak-" ++"tool ou no site da extensão." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Exibir ícone dos Aplicativos" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Mover o botão de aplicativos para o início do dock." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Mostrar aplicativos com efeitos." ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "Lançadores" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Habilita tecla Super+(0-9) como atalhos para ativar aplicativos. Também pode " ++"ser usado junto com Shift e Ctrl." ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Usar atalhos de teclado para ativar aplicativos" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Comportamento ao clicar sobre o ícone de um aplicativo em execução." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Ação do clique" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Comportamento ao rolar sobre o ícone de um aplicativo." ++ ++#: Settings.ui.h:52 ++msgid "Scroll action" ++msgstr "Ação da rolagem" ++ ++#: Settings.ui.h:53 ++msgid "Do nothing" ++msgstr "Não fazer nada" ++ ++#: Settings.ui.h:54 ++msgid "Switch workspace" ++msgstr "Alternar espaço de trabalho" ++ ++#: Settings.ui.h:55 ++msgid "Behavior" ++msgstr "Comportamento" ++ ++#: Settings.ui.h:56 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Algumas personalizações se destinam a integrar o dock com o tema padrão do " ++"GNOME. Alternativamente, as opções específicas podem ser ativadas abaixo." ++ ++#: Settings.ui.h:57 ++msgid "Use built-in theme" ++msgstr "Usar o tema do sistema" ++ ++#: Settings.ui.h:58 ++msgid "Save space reducing padding and border radius." ++msgstr "Economizar espaço reduzindo preenchimento e a borda arredondada" ++ ++#: Settings.ui.h:59 ++msgid "Shrink the dash" ++msgstr "Encolher o dash" ++ ++#: Settings.ui.h:60 ++msgid "Customize windows counter indicators" ++msgstr "Customizar indicadores de contagem de janelas" ++ ++#: Settings.ui.h:61 ++msgid "Default" ++msgstr "Padrão" ++ ++#: Settings.ui.h:62 ++msgid "Dots" ++msgstr "Pontos" ++ ++#: Settings.ui.h:63 ++msgid "Squares" ++msgstr "Quadrados" ++ ++#: Settings.ui.h:64 ++msgid "Dashes" ++msgstr "Linhas" ++ ++#: Settings.ui.h:65 ++msgid "Segmented" ++msgstr "Segmentado" ++ ++#: Settings.ui.h:66 ++msgid "Solid" ++msgstr "Sólido" ++ ++#: Settings.ui.h:67 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:68 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:69 ++msgid "Set the background color for the dash." ++msgstr "Define a cor de fundo para o dash." ++ ++#: Settings.ui.h:70 ++msgid "Customize the dash color" ++msgstr "Customizar a cor do dash" ++ ++#: Settings.ui.h:71 ++msgid "Tune the dash background opacity." ++msgstr "Ajustar a opacidade do fundo do dash." ++ ++#: Settings.ui.h:73 ++msgid "Fixed" ++msgstr "Fixo" ++ ++#: Settings.ui.h:74 ++msgid "Dynamic" ++msgstr "Dinâmico" ++ ++#: Settings.ui.h:75 ++msgid "Opacity" ++msgstr "Opacidade" ++ ++#: Settings.ui.h:76 ++msgid "Force straight corner\n" ++msgstr "Forçar canto reto\n" ++ ++#: Settings.ui.h:78 ++msgid "Appearance" ++msgstr "Aparência" ++ ++#: Settings.ui.h:79 ++msgid "version: " ++msgstr "versão:" ++ ++#: Settings.ui.h:80 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Mover o dash para fora da visão geral transformando-o em dock" ++ ++#: Settings.ui.h:81 ++msgid "Created by" ++msgstr "Criado por" ++ ++#: Settings.ui.h:82 ++msgid "Webpage" ++msgstr "Página Web" ++ ++#: Settings.ui.h:83 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Este programa é distribuido SEM QUALQUER GARANTIA.\n" ++"Veja em GNU General Public License, versão 2 ou posterior para maiores " ++"detalhes." ++ ++#: Settings.ui.h:85 ++msgid "About" ++msgstr "Sobre" ++ ++#: Settings.ui.h:86 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Customizar os valores mínimo e máximo da opacidade" ++ ++#: Settings.ui.h:87 ++msgid "Minimum opacity" ++msgstr "Opacidade mínima" ++ ++#: Settings.ui.h:88 ++msgid "Maximum opacity" ++msgstr "Opacidade máxima" ++ ++#: Settings.ui.h:89 ++msgid "Number overlay" ++msgstr "Sobreposição de número" ++ ++#: Settings.ui.h:90 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Mostrar temporariamente os números dos aplicativos sobre os ícones, " ++"correspondentes ao atalho." ++ ++#: Settings.ui.h:91 ++msgid "Show the dock if it is hidden" ++msgstr "Exibir o dock se este estiver oculto" ++ ++#: Settings.ui.h:92 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Se utilizar a ocultação, o dock será exibido por um curto período de tempo " ++"ao acionar o atalho." ++ ++#: Settings.ui.h:93 ++msgid "Shortcut for the options above" ++msgstr "Atalho para as opções acima" ++ ++#: Settings.ui.h:94 ++msgid "Syntax: , , , " ++msgstr "Sintaxe: , , , " ++ ++#: Settings.ui.h:95 ++msgid "Hide timeout (s)" ++msgstr "Ocultar tempo limite [s]" ++ ++#: Settings.ui.h:96 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Mostrar o dock quando o mouse pairar sobre a tela." ++ ++#: Settings.ui.h:97 ++msgid "Autohide" ++msgstr "Ocultação" ++ ++#: Settings.ui.h:98 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Empurrar para mostrar: requer pressão para mostrar o dock" ++ ++#: Settings.ui.h:99 ++msgid "Enable in fullscreen mode" ++msgstr "Habilitar modo tela cheia" ++ ++#: Settings.ui.h:100 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Mostrar o dock quando nenhum aplicativo sobrepor o mesmo." ++ ++#: Settings.ui.h:101 ++msgid "Dodge windows" ++msgstr "Esconder janela" ++ ++#: Settings.ui.h:102 ++msgid "All windows" ++msgstr "Todas as janelas" ++ ++#: Settings.ui.h:103 ++msgid "Only focused application's windows" ++msgstr "Apenas janelas de aplicativos em foco" ++ ++#: Settings.ui.h:104 ++msgid "Only maximized windows" ++msgstr "Somente janelas maximizadas" ++ ++#: Settings.ui.h:105 ++msgid "Animation duration (s)" ++msgstr "Tempo da animação [s]" ++ ++#: Settings.ui.h:106 ++msgid "Show timeout (s)" ++msgstr "Mostrar tempo limite [s]" ++ ++#: Settings.ui.h:107 ++msgid "Pressure threshold" ++msgstr "Limite de pressão" ++ + #~ msgid "Application" + #~ msgstr "Aplicativo" + +@@ -389,12 +900,6 @@ msgstr "Adicionar espaço de trabalho" + #~ msgid "Normal" + #~ msgstr "Normal" + +-#~ msgid "Left" +-#~ msgstr "Esquerda" +- +-#~ msgid "Right" +-#~ msgstr "Direita" +- + #~ msgid "Upside-down" + #~ msgstr "De cabeça para baixo" + +diff --git a/po/ru.po b/po/ru.po +index 8aedfbd6..de5dbbb5 100644 +--- a/po/ru.po ++++ b/po/ru.po +@@ -1,11 +1,18 @@ ++# #-#-#-#-# ru.po (gnome-shell-extensions gnome-3-0) #-#-#-#-# + # Russian translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. + # Yuri Myasoedov , 2011, 2012, 2013. + # Stas Solovey , 2011, 2012, 2013, 2015, 2017. + # ++# #-#-#-#-# ru.po (dash-to-dock) #-#-#-#-# ++# Russian translation for dash-to-dock GNOME Shell extension ++# Ivan Komaritsyn , 2015-2020. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# ru.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions gnome-3-0\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -20,6 +27,20 @@ msgstr "" + "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" + "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + "X-Generator: Poedit 2.4.1\n" ++"#-#-#-#-# ru.po (dash-to-dock) #-#-#-#-#\n" ++"Project-Id-Version: dash-to-dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-01-31 14:36+0300\n" ++"PO-Revision-Date: 2020-01-31 14:40+0300\n" ++"Last-Translator: Ivan Komaritsyn \n" ++"Language-Team: \n" ++"Language: ru\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" ++"X-Generator: Gtranslator 2.91.7\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -154,9 +175,14 @@ msgstr "Закрыть" + msgid "Unminimize" + msgstr "Вернуть" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:52 ++#, fuzzy + msgid "Minimize" +-msgstr "Свернуть" ++msgstr "" ++"#-#-#-#-# ru.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" ++"Свернуть\n" ++"#-#-#-#-# ru.po (dash-to-dock) #-#-#-#-#\n" ++"Минимизировать" + + #: extensions/window-list/extension.js:125 + msgid "Unmaximize" +@@ -264,6 +290,509 @@ msgstr "Рабочая область %d" + msgid "Add Workspace" + msgstr "Добавить рабочую область" + ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "Основной монитор" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "Дополнительный монитор" ++ ++#: prefs.js:309 Settings.ui.h:28 ++msgid "Right" ++msgstr "Справа" ++ ++#: prefs.js:310 Settings.ui.h:25 ++msgid "Left" ++msgstr "Слева" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "Настройка автоскрытия" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "Сбросить настройки" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "Показывать количество запущенных приложений" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "Настройка действий для средней кнопки мыши" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "Настройка индикаторов запуска" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Настроить прозрачность" ++ ++#: appIcons.js:810 ++msgid "All Windows" ++msgstr "Все окна" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1127 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Если установлено на «Минимизировать», то двойной клик минимизирует все окна " ++"данного приложения." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Действие по Shift+Click" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Показать окно" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Минимизировать окно" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Открыть новое окно" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Переключить окно приложения" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Минимизация или обзор" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Показать миниатюры окон" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Минимизация или показ миниатюр" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Минимизация или показ миниатюр" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Выйти" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Действие по нажатию средней кнопки мыши." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Действие по Middle-Click" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Действие по нажатию Shift + средняя кнопка мыши." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Действие по Shift+Middle-Click" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Включить подсветку элементов как в Unity7" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Использовать доминирующий цвет" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Настроить стиль индикатора" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Цвет" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Цвет границы" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Ширина границы" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Показывать Док на" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Показывать на всех мониторах." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Расположение на экране" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Снизу" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Сверху" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Скрывать Док, если он перекрывается окном активного приложения. Доступны " ++"дополнительные настройки." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Интеллектуальное скрытие" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Ограничение размера Дока" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Режим панели: Док растянут по всей стороне экрана" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Ограничение размера иконок" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "" ++"Фиксированный размер иконок: используйте прокрутку для доступа к нужному " ++"приложению" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Положение и размер" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Показывать избранные приложения" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Показывать запущенные приложения" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Для текущего рабочего стола." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Изолировать мониторы." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Показывать миниатюры открытых окон." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Если отключено, то эти настройки доступны в gnome-tweak-tool или через сайт " ++"дополнений." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Показывать иконку «Приложения»" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Расположить кнопку «Приложения» с другой стороны Дока." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Анимация при показе «Приложений»" ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Показывать корзину" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Показывать примонтированные разделы и устройства" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Команды" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Включить сочетания клавиш Super+(0-9) для выбора приложений. Также может " ++"быть использовано совместно с Shift и Ctrl." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Использовать сочетания клавиш для выбора приложений" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Поведение при нажатии на иконку запущенного приложения." ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Действие по нажатию" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Поведение при прокрутке на иконке приложения." ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Действие при прокрутке" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Ничего не делать" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Переключить рабочий стол" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Поведение" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Сбалансированные настройки для интеграции Дока с темой Gnome по умолчанию. " ++"Ниже можно установить настройки вручную." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Использовать встроенную тему" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "" ++"Экономия рабочего пространства за счёт уменьшения промежутков и " ++"использования скругленных углов." ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Сжать Док" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "Настроить индикаторы количества окон" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "По умолчанию" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Точки" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Квадраты" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Линии" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Сегменты" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Слитно" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "Метро" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Вобор цвета фона для панели." ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Настроить цвет Дока" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Настройка прозрачности фона Дока." ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Постоянная" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Динамическая" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Непрозрачность" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner\n" ++msgstr "Не скруглять углы\n" ++ ++#: Settings.ui.h:80 ++msgid "Appearance" ++msgstr "Внешний вид" ++ ++#: Settings.ui.h:81 ++msgid "version: " ++msgstr "версия: " ++ ++#: Settings.ui.h:82 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Показывает панель из режима «Обзор» в виде дока" ++ ++#: Settings.ui.h:83 ++msgid "Created by" ++msgstr "Автор" ++ ++#: Settings.ui.h:84 ++msgid "Webpage" ++msgstr "Домашняя страница" ++ ++#: Settings.ui.h:85 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Эта программа распространяется БЕЗ КАКИХ ЛИБО " ++"ГАРАНТИЙ.\n" ++"Смотри GNU General Public License, версия 2 или позднее для информации." ++ ++#: Settings.ui.h:87 ++msgid "About" ++msgstr "О дополнении" ++ ++#: Settings.ui.h:88 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Настройка минимального и максимального значения прозрачности" ++ ++#: Settings.ui.h:89 ++msgid "Minimum opacity" ++msgstr "Минимальная прозрачность" ++ ++#: Settings.ui.h:90 ++msgid "Maximum opacity" ++msgstr "Максимальная прозрачность" ++ ++#: Settings.ui.h:91 ++msgid "Number overlay" ++msgstr "Отображение номера" ++ ++#: Settings.ui.h:92 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Временно показывать номера приложений рядом с иконками, при нажатии " ++"сочетания клавиш." ++ ++#: Settings.ui.h:93 ++msgid "Show the dock if it is hidden" ++msgstr "Показать Док, если он скрыт" ++ ++#: Settings.ui.h:94 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Если используется автоматическое скрытие, то Док кратковреммено появится при " ++"обработке сочетания клавиш." ++ ++#: Settings.ui.h:95 ++msgid "Shortcut for the options above" ++msgstr "Сочетания клавиш для указанных параметров" ++ ++#: Settings.ui.h:96 ++msgid "Syntax: , , , " ++msgstr "Синтаксис: , , , " ++ ++#: Settings.ui.h:97 ++msgid "Hide timeout (s)" ++msgstr "Задержка скрытия (сек.)" ++ ++#: Settings.ui.h:98 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Показывать Док при подведении мыши к стороне экрана." ++ ++#: Settings.ui.h:99 ++msgid "Autohide" ++msgstr "Автоматическое скрытие" ++ ++#: Settings.ui.h:100 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Давление для появления: требуется давление для открытия Дока" ++ ++#: Settings.ui.h:101 ++msgid "Enable in fullscreen mode" ++msgstr "Включить для полноэкранного режима" ++ ++#: Settings.ui.h:102 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Скрывать Док, когда он перекрыт окнами приложений" ++ ++#: Settings.ui.h:103 ++msgid "Dodge windows" ++msgstr "Перекрытие окнами" ++ ++#: Settings.ui.h:104 ++msgid "All windows" ++msgstr "Все окна" ++ ++#: Settings.ui.h:105 ++msgid "Only focused application's windows" ++msgstr "Только активное окно приложения" ++ ++#: Settings.ui.h:106 ++msgid "Only maximized windows" ++msgstr "Только развёрнутые окна" ++ ++#: Settings.ui.h:107 ++msgid "Animation duration (s)" ++msgstr "Время анимации (сек.)" ++ ++#: Settings.ui.h:108 ++msgid "Show timeout (s)" ++msgstr "Задержка открытия (сек.)" ++ ++#: Settings.ui.h:109 ++msgid "Pressure threshold" ++msgstr "Порог давления" ++ + #~ msgid "Attach modal dialog to the parent window" + #~ msgstr "Прикреплять модальное диалоговое окно к родительскому окну" + +@@ -355,3 +884,104 @@ msgstr "Добавить рабочую область" + + #~ msgid "Window management and application launching" + #~ msgstr "Управление окнами и запуск приложений" ++ ++#~ msgid "Adaptive" ++#~ msgstr "Адаптивная" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "Отображает точку для каждого окна приложения." ++ ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "При фиксированном размере иконок приложений активна только область иконки " ++#~ "«Приложения» и край дока." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Переключать рабочие столы при прокрутке на Доке" ++ ++#~ msgid "Only consider windows of the focused application" ++#~ msgstr "Применить только к активным окнам приложений" ++ ++#~ msgid "Main Settings" ++#~ msgstr "Основные настройки" ++ ++#~ msgid "Dock Position" ++#~ msgstr "Расположение Дока" ++ ++#~ msgid "Dock is fixed and always visible" ++#~ msgstr "Док зафиксирован и всегда виден" ++ ++#~ msgid "Show delay [ms]" ++#~ msgstr "Задержка перед появлением [мс]" ++ ++#~ msgid "Hide delay [ms]" ++#~ msgstr "Задержка перед скрытием [мс]" ++ ++#~ msgid "Application based intellihide" ++#~ msgstr "Интеллектуальное скрытие действует только для активных окон" ++ ++#~ msgid "Show the dock on following monitor (if attached)" ++#~ msgstr "Показывать Док на дополнительном мониторе (если подключен)" ++ ++#~ msgid "Primary (default)" ++#~ msgstr "Главный (по умолчанию)" ++ ++#~ msgid "Max height" ++#~ msgstr "Максимальная высота" ++ ++#~ msgid "Expand (experimental and buggy)" ++#~ msgstr "Расширяемый (экспериментально и неустойчиво)" ++ ++#~ msgid "Maximum icon size" ++#~ msgstr "Максимальный размер иконки" ++ ++#~ msgid "Optional features" ++#~ msgstr "Дополнительные функции" ++ ++#~ msgid "Deadtime between each workspace switching [ms]" ++#~ msgstr "Задержка между каждым переключением [мс]" ++ ++#~ msgid "Only a 1px wide area close to the screen edge is active" ++#~ msgstr "Активная область - 1 пиксель от края экрана" ++ ++#~ msgid "All the area of the dock is active" ++#~ msgstr "Активен весь Док" ++ ++#~ msgid "Customize actions on mouse click" ++#~ msgstr "Настроить действия по нажатию мыши" ++ ++#~ msgid "Action on clicking on running app" ++#~ msgstr "Действие по нажатию на иконку запущенного приложения" ++ ++#~ msgid "Minimize window on shift+click (double click for all app windows)" ++#~ msgstr "" ++#~ "Минимизировать окно при shift+click (двойное нажатие скрывает все окна " ++#~ "приложений)" ++ ++#~ msgid "Make message tray insensitive to mouse events" ++#~ msgstr "Сделать область сообщений нечувствительной к мыши" ++ ++#~ msgid "Appearence and Themes" ++#~ msgstr "Внешний вид и Темы" ++ ++#~ msgid "" ++#~ "A customized theme is built in the extension. This is meant to work with " ++#~ "the default Adwaita theme: the dash is shrunk to save space, its " ++#~ "background transparency reduced, and custom indicators for the number of " ++#~ "windows of each application are added." ++#~ msgstr "" ++#~ "Тема встроена в расширение. Она оптимизирована для темы Adwaita по " ++#~ "умолчанию: Док уменьшен, чтобы сохранить пространство; прозрачность фона " ++#~ "снижена; включены индикаторы количества окон для каждого приложения." ++ ++#~ msgid "" ++#~ "Alternatively, for a better integration with custom themes, each " ++#~ "customization can be applied indipendently" ++#~ msgstr "" ++#~ "Для большей интеграции с пользовательской темой, каждый параметр можно " ++#~ "настроить независимо" ++ ++#~ msgid "Shrink the dash size by reducing padding" ++#~ msgstr "Уменьшить Док за счёт промежутков" +diff --git a/po/sk.po b/po/sk.po +index d352e15a..e8330d08 100644 +--- a/po/sk.po ++++ b/po/sk.po +@@ -1,11 +1,20 @@ ++# #-#-#-#-# sk.po (gnome-shell-extensions) #-#-#-#-# + # Slovak translation for gnome-shell-extensions. + # Copyright (C) 2012-2013 Free Software Foundation, Inc. + # This file is distributed under the same license as the gnome-shell-extensions package. + # Pavol Klačanský , 2012. + # Dušan Kazik , 2012, 2013. + # ++# #-#-#-#-# sk.po #-#-#-#-# ++# Slovak translation of dash-to-dock. ++# Copyright (C) 2016 Dušan Kazik ++# This file is distributed under the same license as the PACKAGE package. ++# Dušan Kazik , 2015, 2016. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# sk.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -19,6 +28,19 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" + "X-Generator: Poedit 2.4.1\n" ++"#-#-#-#-# sk.po #-#-#-#-#\n" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-06-04 12:35+0100\n" ++"PO-Revision-Date: 2016-07-15 12:48+0200\n" ++"Last-Translator: Dušan Kazik \n" ++"Language-Team: \n" ++"Language: sk\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 1.8.7.1\n" ++"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -169,8 +191,9 @@ msgstr "Zavrieť" + msgid "Unminimize" + msgstr "Odminimalizovať" + ++# #-#-#-#-# sk.po (gnome-shell-extensions) #-#-#-#-# + # label +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:50 + msgid "Minimize" + msgstr "Minimalizovať" + +@@ -291,6 +314,427 @@ msgstr "Pracovný priestor č. %d" + msgid "Add Workspace" + msgstr "Pridať pracovný priestor" + ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "Hlavnom monitore" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "Vedľajšom monitore" ++ ++#: prefs.js:154 Settings.ui.h:29 ++msgid "Right" ++msgstr "Vpravo" ++ ++#: prefs.js:155 Settings.ui.h:26 ++msgid "Left" ++msgstr "Vľavo" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Prispôsobenie inteligentného automatického skrývania" ++ ++#: prefs.js:212 prefs.js:393 prefs.js:450 ++msgid "Reset to defaults" ++msgstr "Obnoviť pôvodné" ++ ++#: prefs.js:386 ++#, fuzzy ++msgid "Show dock and application numbers" ++msgstr "Zobraziť spustené aplikácie" ++ ++#: prefs.js:443 ++#, fuzzy ++msgid "Customize middle-click behavior" ++msgstr "Prispôsobenie štýlu indikátorov" ++ ++#: prefs.js:514 ++msgid "Customize running indicators" ++msgstr "Prispôsobenie " ++ ++#: appIcons.js:804 ++msgid "All Windows" ++msgstr "Všetky okná" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Prispôsobenie štýlu indikátorov" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Farba" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Farba okraja" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Šírka okraja" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++ ++#: Settings.ui.h:7 ++#, fuzzy ++msgid "Show the dock if it is hidden" ++msgstr "Zobraziť dok na" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "" ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Časový limit na skrytie (s)" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Keď je nastavené na minimalizovanie, dvojklik minimalizuje všetky okná " ++"aplikácie." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Akcia Shift+Kliknutie" ++ ++#: Settings.ui.h:14 ++#, fuzzy ++msgid "Raise window" ++msgstr "Minimalizovať okno" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "Minimalizovať okno" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "Spustiť novú inštanciu" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "Striedať okná" ++ ++#: Settings.ui.h:18 ++msgid "Quit" ++msgstr "" ++ ++#: Settings.ui.h:19 ++msgid "Behavior for Middle-Click." ++msgstr "" ++ ++#: Settings.ui.h:20 ++#, fuzzy ++msgid "Middle-Click action" ++msgstr "Akcia po kliknutí" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "" ++ ++#: Settings.ui.h:22 ++#, fuzzy ++msgid "Shift+Middle-Click action" ++msgstr "Akcia Shift+Kliknutie" ++ ++#: Settings.ui.h:23 ++msgid "Show the dock on" ++msgstr "Zobraziť dok na" ++ ++#: Settings.ui.h:24 ++#, fuzzy ++msgid "Show on all monitors." ++msgstr "Vedľajšom monitore" ++ ++#: Settings.ui.h:25 ++msgid "Position on screen" ++msgstr "Pozícia na obrazovke" ++ ++#: Settings.ui.h:27 ++msgid "Bottom" ++msgstr "Na spodku" ++ ++#: Settings.ui.h:28 ++msgid "Top" ++msgstr "Na vrchu" ++ ++#: Settings.ui.h:30 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Skryť dok, keď zasahuje do okna aktuálnej aplikácie. Sú dostupné " ++"podrobnejšie nastavenia." ++ ++#: Settings.ui.h:31 ++msgid "Intelligent autohide" ++msgstr "Inteligentné automatické skrývanie" ++ ++#: Settings.ui.h:32 ++msgid "Dock size limit" ++msgstr "Limit veľkosti doku" ++ ++#: Settings.ui.h:33 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Režim panelu: roztiahnutie k hranám obrazovky" ++ ++#: Settings.ui.h:34 ++msgid "Icon size limit" ++msgstr "Limit veľkosti ikôn" ++ ++#: Settings.ui.h:35 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Pevná veľkosť ikôn: rolovaním odhalíte ostatné ikony" ++ ++#: Settings.ui.h:36 ++msgid "Position and size" ++msgstr "Pozícia a veľkosť" ++ ++#: Settings.ui.h:37 ++msgid "Show favorite applications" ++msgstr "Zobraziť obľúbené aplikácie" ++ ++#: Settings.ui.h:38 ++msgid "Show running applications" ++msgstr "Zobraziť spustené aplikácie" ++ ++#: Settings.ui.h:39 ++msgid "Isolate workspaces." ++msgstr "Oddelené pracovné priestory." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "" ++ ++#: Settings.ui.h:41 ++#, fuzzy ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Ak je voľba zakázaná, nastavenia sú dostupné z nástroja na vyladenie " ++"nastavení prostredia Gnome alebo webovej stránky rozšírenia." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Zobraziť ikonu Aplikácie" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Premiestni tlačidlo aplikácií na začiatok doku." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animovať položku Zobraziť aplikácie." ++ ++#: Settings.ui.h:45 ++msgid "Launchers" ++msgstr "" ++ ++#: Settings.ui.h:46 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++ ++#: Settings.ui.h:47 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "" ++ ++#: Settings.ui.h:48 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Správanie pri kliknutí na ikonu spustenej aplikácie." ++ ++#: Settings.ui.h:49 ++msgid "Click action" ++msgstr "Akcia po kliknutí" ++ ++#: Settings.ui.h:51 ++#, fuzzy ++msgid "Minimize or overview" ++msgstr "Minimalizovať okno" ++ ++#: Settings.ui.h:52 ++#, fuzzy ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Správanie pri kliknutí na ikonu spustenej aplikácie." ++ ++#: Settings.ui.h:53 ++#, fuzzy ++msgid "Scroll action" ++msgstr "Akcia po kliknutí" ++ ++#: Settings.ui.h:54 ++msgid "Do nothing" ++msgstr "Nevykonať nič" ++ ++#: Settings.ui.h:55 ++#, fuzzy ++msgid "Switch workspace" ++msgstr "Oddelené pracovné priestory." ++ ++#: Settings.ui.h:56 ++msgid "Behavior" ++msgstr "Správanie" ++ ++#: Settings.ui.h:57 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Niekoľko úprav na integrovanie doku s predvolenou témou prostredia GNOME. " ++"Alternatívne môžu byť povolené špecifické voľby nižšie." ++ ++#: Settings.ui.h:58 ++msgid "Use built-in theme" ++msgstr "Použiť zabudovanú tému" ++ ++#: Settings.ui.h:59 ++msgid "Save space reducing padding and border radius." ++msgstr "Ušetrí miesto zmenšením rádiusu odsadenia a okrajov." ++ ++#: Settings.ui.h:60 ++msgid "Shrink the dash" ++msgstr "Zmenšiť panel" ++ ++#: Settings.ui.h:61 ++msgid "Show a dot for each windows of the application." ++msgstr "Zobrazí bodku za každé okno aplikácie." ++ ++#: Settings.ui.h:62 ++msgid "Show windows counter indicators" ++msgstr "Zobraziť indikátory počítadiel okien" ++ ++#: Settings.ui.h:63 ++msgid "Set the background color for the dash." ++msgstr "Nastaví farbu pozadia panelu." ++ ++#: Settings.ui.h:64 ++msgid "Customize the dash color" ++msgstr "Prispôsobenie farby panelu" ++ ++#: Settings.ui.h:65 ++msgid "Tune the dash background opacity." ++msgstr "Vyladí krytie pozadia panelu." ++ ++#: Settings.ui.h:66 ++msgid "Customize opacity" ++msgstr "Prispôsobenie krytia" ++ ++#: Settings.ui.h:67 ++msgid "Opacity" ++msgstr "Krytie" ++ ++#: Settings.ui.h:68 ++msgid "Force straight corner\n" ++msgstr "" ++ ++#: Settings.ui.h:70 ++msgid "Appearance" ++msgstr "Vzhľad" ++ ++#: Settings.ui.h:71 ++msgid "version: " ++msgstr "Verzia: c" ++ ++#: Settings.ui.h:72 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Presunie panel z prehľadu transformovaním do doku" ++ ++#: Settings.ui.h:73 ++msgid "Created by" ++msgstr "Vytvoril" ++ ++#: Settings.ui.h:74 ++msgid "Webpage" ++msgstr "Webová stránka" ++ ++#: Settings.ui.h:75 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Tento program je ABSOLÚTNE BEZ ZÁRUKY.\n" ++"Pre viac podrobností si pozrite Licenciu GNU General Public, verzie 2 alebo novšiu." ++ ++#: Settings.ui.h:77 ++msgid "About" ++msgstr "O rozšírení" ++ ++#: Settings.ui.h:78 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Zobrazí dok prejdením myši na hranu obrazovky." ++ ++#: Settings.ui.h:79 ++msgid "Autohide" ++msgstr "Automatické skrytie" ++ ++#: Settings.ui.h:80 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Zobraziť stlačením: vyžaduje tlak na zobrazenie doku" ++ ++#: Settings.ui.h:81 ++msgid "Enable in fullscreen mode" ++msgstr "Povoliť v režime na celú obrazovku" ++ ++#: Settings.ui.h:82 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Zobrazí dok, keď nebude zasahovať do okien aplikácií." ++ ++#: Settings.ui.h:83 ++msgid "Dodge windows" ++msgstr "Vyhýbať sa oknám" ++ ++#: Settings.ui.h:84 ++msgid "All windows" ++msgstr "Všetky okná" ++ ++#: Settings.ui.h:85 ++msgid "Only focused application's windows" ++msgstr "Iba zamerané okná aplikácií" ++ ++#: Settings.ui.h:86 ++msgid "Only maximized windows" ++msgstr "Iba maximalizované okná" ++ ++#: Settings.ui.h:87 ++msgid "Animation duration (s)" ++msgstr "Trvanie animácie (s)" ++ ++#: Settings.ui.h:88 ++msgid "0.000" ++msgstr "0.000" ++ ++#: Settings.ui.h:89 ++msgid "Show timeout (s)" ++msgstr "Zobraziť časový limit (s)" ++ ++#: Settings.ui.h:90 ++msgid "Pressure threshold" ++msgstr "Medza tlaku" ++ + # TreeViewColumn + #~ msgid "Application" + #~ msgstr "Aplikácia" +@@ -406,3 +850,13 @@ msgstr "Pridať pracovný priestor" + # RadioButton label + #~ msgid "Window management and application launching" + #~ msgstr "Správca okien a spúšťanie aplikácií" ++ ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "S pevnou veľkosťou ikon je aktívna iba hrana doku a ikona Zobraziť " ++#~ "aplikácie." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Prepínať pracovné priestory rolovaním na doku" +diff --git a/po/sr.po b/po/sr.po +index dba6f9ff..92ab6945 100644 +--- a/po/sr.po ++++ b/po/sr.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# sr.po (gnome-shell-extensions master) #-#-#-#-# + # Serbian translation for gnome-shell-extensions. + # Courtesy of Prevod.org team (http://prevod.org/) -- 2012—2017. + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -5,8 +6,16 @@ + # Мирослав Николић , 2012—2017. + # Марко М. Костић , 2020. + # ++# #-#-#-#-# sr.po #-#-#-#-# ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# sr.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -22,6 +31,20 @@ msgstr "" + "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n" + "X-Project-Style: gnome\n" + "X-Generator: Gtranslator 3.36.0\n" ++"#-#-#-#-# sr.po #-#-#-#-#\n" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-09-16 13:45+0200\n" ++"PO-Revision-Date: 2017-09-20 18:59+0200\n" ++"Last-Translator: Слободан Терзић \n" ++"Language-Team: \n" ++"Language: sr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.0.3\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -155,9 +178,14 @@ msgstr "Затвори" + msgid "Unminimize" + msgstr "Поништи умањење" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:53 ++#, fuzzy + msgid "Minimize" +-msgstr "Умањи" ++msgstr "" ++"#-#-#-#-# sr.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Умањи\n" ++"#-#-#-#-# sr.po #-#-#-#-#\n" ++"минимизуј" + + #: extensions/window-list/extension.js:125 + msgid "Unmaximize" +@@ -264,6 +292,435 @@ msgstr "%d. радни простор" + msgid "Add Workspace" + msgstr "Додај радни простор" + ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "примарном монитору" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "секундарном монитору" ++ ++#: prefs.js:154 Settings.ui.h:31 ++msgid "Right" ++msgstr "десно" ++ ++#: prefs.js:155 Settings.ui.h:28 ++msgid "Left" ++msgstr "лево" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Поставке интелигентног аутоматског сакривања" ++ ++#: prefs.js:212 prefs.js:397 prefs.js:454 ++msgid "Reset to defaults" ++msgstr "Поврати основно" ++ ++#: prefs.js:390 ++msgid "Show dock and application numbers" ++msgstr "Прикажи док и бројеве програма" ++ ++#: prefs.js:447 ++msgid "Customize middle-click behavior" ++msgstr "Прилагоћавање понашања средњег клика" ++ ++#: prefs.js:518 ++msgid "Customize running indicators" ++msgstr "Прилагођавање индикатора покренутих" ++ ++#: appIcons.js:1144 ++msgid "All Windows" ++msgstr "Сви прозори" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1450 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s плоче/панела" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Прилагоћавање стила индикатора" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Боја" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Боја ивице" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Ширина ивице" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Бројне налепнице" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Привремено прикажи бројеве програма изнад иконица, према припадајућој " ++"пречици." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Прикажи док уколико је сакривен" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Уколико се користи аутоматско сакривање, док ће се приказати на тренутак при " ++"окидању пречице." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Пречица за горе наведене опције" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Синтакса: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Застој скривања" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Кад је постављено на минимизовање, дупли клик минимизује све прозоре " ++"програма." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Радња шифт+клика" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "издигни прозор" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "минимизуј прозор" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "покрени нови примерак" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "кружење кроз прозоре" ++ ++#: Settings.ui.h:18 ++msgid "Minimize or overview" ++msgstr "минимиуј или преглед" ++ ++#: Settings.ui.h:19 ++msgid "Show window previews" ++msgstr "прикажи сличице прозора" ++ ++#: Settings.ui.h:20 ++msgid "Quit" ++msgstr "напусти" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Middle-Click." ++msgstr "Понашање средњег клика." ++ ++#: Settings.ui.h:22 ++msgid "Middle-Click action" ++msgstr "Радња средњег клика" ++ ++#: Settings.ui.h:23 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Пoнашање шифт+средњег клика." ++ ++#: Settings.ui.h:24 ++msgid "Shift+Middle-Click action" ++msgstr "Радња шифт+средњегклика" ++ ++#: Settings.ui.h:25 ++msgid "Show the dock on" ++msgstr "Прикажи док на" ++ ++#: Settings.ui.h:26 ++msgid "Show on all monitors." ++msgstr "Прикажи на свим мониторима." ++ ++#: Settings.ui.h:27 ++msgid "Position on screen" ++msgstr "Позиција на екрану" ++ ++#: Settings.ui.h:29 ++msgid "Bottom" ++msgstr "дно" ++ ++#: Settings.ui.h:30 ++msgid "Top" ++msgstr "врх" ++ ++#: Settings.ui.h:32 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Сакриј док када је на путу прозора тренутног програма. Доступне су финије " ++"поставке." ++ ++#: Settings.ui.h:33 ++msgid "Intelligent autohide" ++msgstr "Интелигентно аутоматско сакривање" ++ ++#: Settings.ui.h:34 ++msgid "Dock size limit" ++msgstr "Ограничење величине дока" ++ ++#: Settings.ui.h:35 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Режим панела: проширен до ивица екрана" ++ ++#: Settings.ui.h:36 ++msgid "Icon size limit" ++msgstr "Ограничење величине иконица" ++ ++#: Settings.ui.h:37 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Устаљена величина иконица: клизајте за друге иконе" ++ ++#: Settings.ui.h:38 ++msgid "Position and size" ++msgstr "Позиција и величина" ++ ++#: Settings.ui.h:39 ++msgid "Show favorite applications" ++msgstr "Приказ омиљених програма" ++ ++#: Settings.ui.h:40 ++msgid "Show running applications" ++msgstr "Приказ покренутих програма" ++ ++#: Settings.ui.h:41 ++msgid "Isolate workspaces." ++msgstr "Изолуј радне просторе." ++ ++#: Settings.ui.h:42 ++msgid "Isolate monitors." ++msgstr "Изолуј мониторе." ++ ++#: Settings.ui.h:43 ++msgid "Show open windows previews." ++msgstr "Прикажи сличице отворених прозора." ++ ++#: Settings.ui.h:44 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Уколико је онемогућено, ове поставке су доступне кроз алатку за лицкање или " ++"веб сајт проширења." ++ ++#: Settings.ui.h:45 ++msgid "Show Applications icon" ++msgstr "Приказ иконице Прикажи програме" ++ ++#: Settings.ui.h:46 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Помери дугме програма на почетак дока." ++ ++#: Settings.ui.h:47 ++msgid "Animate Show Applications." ++msgstr "Анимирај приказ програма." ++ ++#: Settings.ui.h:48 ++msgid "Launchers" ++msgstr "Покретачи" ++ ++#: Settings.ui.h:49 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Укључује Супер+(0-9) као пречице за активацију програма. Такође је могуће " ++"користити уз shift и ctrl." ++ ++#: Settings.ui.h:50 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Активирај програме пречицама тастатуре" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Понашање при клику на покренути програм." ++ ++#: Settings.ui.h:52 ++msgid "Click action" ++msgstr "Радња клика" ++ ++#: Settings.ui.h:54 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Понашање при клизању на иконицу покренутог програма." ++ ++#: Settings.ui.h:55 ++msgid "Scroll action" ++msgstr "Радња клизања на иконицу" ++ ++#: Settings.ui.h:56 ++msgid "Do nothing" ++msgstr "ништа" ++ ++#: Settings.ui.h:57 ++msgid "Switch workspace" ++msgstr "пребаци радни простор" ++ ++#: Settings.ui.h:58 ++msgid "Behavior" ++msgstr "Понашање" ++ ++#: Settings.ui.h:59 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Неколико поставки намењених уграђивању дока у основну тему Гнома. " ++"Алтернативно, посебне поставке се могу уредити испод." ++ ++#: Settings.ui.h:60 ++msgid "Use built-in theme" ++msgstr "Користи уграђену тему" ++ ++#: Settings.ui.h:61 ++msgid "Save space reducing padding and border radius." ++msgstr "Чува простор сужавањем попуне и опсега ивица." ++ ++#: Settings.ui.h:62 ++msgid "Shrink the dash" ++msgstr "Скупи плочу" ++ ++#: Settings.ui.h:63 ++msgid "Show a dot for each windows of the application." ++msgstr "Приказује тачку за сваки прозор програма." ++ ++#: Settings.ui.h:64 ++msgid "Show windows counter indicators" ++msgstr "Приказ индикаторa бројача прозора." ++ ++#: Settings.ui.h:65 ++msgid "Set the background color for the dash." ++msgstr "Постави позадинску боју плоче." ++ ++#: Settings.ui.h:66 ++msgid "Customize the dash color" ++msgstr "Прилагоди боју плоче" ++ ++#: Settings.ui.h:67 ++msgid "Tune the dash background opacity." ++msgstr "Прилагоди прозирност позадине плоче." ++ ++#: Settings.ui.h:68 ++msgid "Customize opacity" ++msgstr "Прилагоћавање прозирности" ++ ++#: Settings.ui.h:69 ++msgid "Opacity" ++msgstr "Прозирност" ++ ++#: Settings.ui.h:70 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Укључи позадинске ефекте попут Unity7" ++ ++#: Settings.ui.h:71 ++msgid "Force straight corner\n" ++msgstr "Наметни равне углове\n" ++ ++#: Settings.ui.h:73 ++msgid "Appearance" ++msgstr "Изглед" ++ ++#: Settings.ui.h:74 ++msgid "version: " ++msgstr "верзија: " ++ ++#: Settings.ui.h:75 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Помера плочу из глобалног приказа, претварајући је у док" ++ ++#: Settings.ui.h:76 ++msgid "Created by" ++msgstr "Направи" ++ ++#: Settings.ui.h:77 ++msgid "Webpage" ++msgstr "Веб страница" ++ ++#: Settings.ui.h:78 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Овај програм се доставља БЕЗ ИКАКВИХ ГАРАНЦИЈА.\n" ++"Погледајте ГНУову Општу Јавну лиценцу, верзија 2 или каснија, за детаље." ++ ++#: Settings.ui.h:80 ++msgid "About" ++msgstr "О програму" ++ ++#: Settings.ui.h:81 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Прикажи док прелазом миша пеко ивице екрана." ++ ++#: Settings.ui.h:82 ++msgid "Autohide" ++msgstr "Аутоматско сакривање" ++ ++#: Settings.ui.h:83 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Приказ притиском: захтева притисак за приказ дока" ++ ++#: Settings.ui.h:84 ++msgid "Enable in fullscreen mode" ++msgstr "Омогући у целоекранском режиму" ++ ++#: Settings.ui.h:85 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Приказује док када није на путу прозорима програма." ++ ++#: Settings.ui.h:86 ++msgid "Dodge windows" ++msgstr "Избегавање розора" ++ ++#: Settings.ui.h:87 ++msgid "All windows" ++msgstr "Сви прозори" ++ ++#: Settings.ui.h:88 ++msgid "Only focused application's windows" ++msgstr "Само прозор фокусираног програма" ++ ++#: Settings.ui.h:89 ++msgid "Only maximized windows" ++msgstr "Само максимизовани прозори" ++ ++#: Settings.ui.h:90 ++msgid "Animation duration (s)" ++msgstr "Трајање(а) анимације" ++ ++#: Settings.ui.h:91 ++msgid "Show timeout (s)" ++msgstr "Застој приказивања" ++ ++#: Settings.ui.h:92 ++msgid "Pressure threshold" ++msgstr "Праг притиска" ++ + #~ msgid "Application" + #~ msgstr "Програм" + +@@ -356,3 +813,20 @@ msgstr "Додај радни простор" + + #~ msgid "Window management and application launching" + #~ msgstr "Управљање прозорима и покретање програма" ++ ++#~ msgid "0.000" ++#~ msgstr "0,000" ++ ++#, fuzzy ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "Ако се иконе преклапају на доку, приказује се само икона Прикажи " ++#~ "програме." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Промена радног простора клизањем по доку" ++ ++#~ msgid "Only consider windows of the focused application" ++#~ msgstr "Разматрај само прозор фокусираног програма" +diff --git a/po/sr@latin.po b/po/sr@latin.po +index 92dae13d..1a7e0f10 100644 +--- a/po/sr@latin.po ++++ b/po/sr@latin.po +@@ -1,10 +1,19 @@ ++# #-#-#-#-# sr@latin.po (gnome-shell-extensions master) #-#-#-#-# + # Serbian translation for gnome-shell-extensions. + # Courtesy of Prevod.org team (http://prevod.org/) -- 2012—2017. + # This file is distributed under the same license as the gnome-shell-extensions package. + # Miloš Popović , 2012. + # Miroslav Nikolić , 2012—2017. ++# #-#-#-#-# sr@latin.po #-#-#-#-# ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# sr@latin.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" + "shell&keywords=I18N+L10N&component=extensions\n" +@@ -16,9 +25,23 @@ msgstr "" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : " +-"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" ++"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" ++"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + "X-Project-Style: gnome\n" ++"#-#-#-#-# sr@latin.po #-#-#-#-#\n" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2017-09-16 13:45+0200\n" ++"PO-Revision-Date: 2017-09-20 18:56+0200\n" ++"Last-Translator: Slobodan Terzić \n" ++"Language-Team: \n" ++"Language: sr@latin\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.0.3\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -39,7 +62,8 @@ msgstr "Prikačinje prozorče roditeljskom prozoru" + msgid "" + "This key overrides the key in org.gnome.mutter when running GNOME Shell." + msgstr "" +-"Ovaj ključ prevazilazi ključ u „org.gnome.mutter“ kada pokreće Gnomovu školjku." ++"Ovaj ključ prevazilazi ključ u „org.gnome.mutter“ kada pokreće Gnomovu " ++"školjku." + + #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16 + msgid "Arrangement of buttons on the titlebar" +@@ -50,8 +74,8 @@ msgid "" + "This key overrides the key in org.gnome.desktop.wm.preferences when running " + "GNOME Shell." + msgstr "" +-"Ovaj ključ prevazilazi ključ u „org.gnome.desktop.wm.preferences“ kada pokreće " +-"Gnomovu školjku." ++"Ovaj ključ prevazilazi ključ u „org.gnome.desktop.wm.preferences“ kada " ++"pokreće Gnomovu školjku." + + #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24 + msgid "Enable edge tiling when dropping windows on screen edges" +@@ -259,9 +283,14 @@ msgstr "Zatvori" + msgid "Unminimize" + msgstr "Poništi umanjenje" + +-#: extensions/window-list/extension.js:130 ++#: extensions/window-list/extension.js:130 Settings.ui.h:53 ++#, fuzzy + msgid "Minimize" +-msgstr "Umanji" ++msgstr "" ++"#-#-#-#-# sr@latin.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Umanji\n" ++"#-#-#-#-# sr@latin.po #-#-#-#-#\n" ++"minimizuj" + + #: extensions/window-list/extension.js:136 + msgid "Unmaximize" +@@ -358,6 +387,435 @@ msgstr "Naziv" + msgid "Workspace %d" + msgstr "%d. radni prostor" + ++#: prefs.js:113 ++msgid "Primary monitor" ++msgstr "primarnom monitoru" ++ ++#: prefs.js:122 prefs.js:129 ++msgid "Secondary monitor " ++msgstr "sekundarnom monitoru" ++ ++#: prefs.js:154 Settings.ui.h:31 ++msgid "Right" ++msgstr "desno" ++ ++#: prefs.js:155 Settings.ui.h:28 ++msgid "Left" ++msgstr "levo" ++ ++#: prefs.js:205 ++msgid "Intelligent autohide customization" ++msgstr "Postavke inteligentnog automatskog sakrivanja" ++ ++#: prefs.js:212 prefs.js:397 prefs.js:454 ++msgid "Reset to defaults" ++msgstr "Povrati osnovno" ++ ++#: prefs.js:390 ++msgid "Show dock and application numbers" ++msgstr "Prikaži dok i brojeve programa" ++ ++#: prefs.js:447 ++msgid "Customize middle-click behavior" ++msgstr "Prilagoćavanje ponašanja srednjeg klika" ++ ++#: prefs.js:518 ++msgid "Customize running indicators" ++msgstr "Prilagođavanje indikatora pokrenutih" ++ ++#: appIcons.js:1144 ++msgid "All Windows" ++msgstr "Svi prozori" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1450 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s ploče/panela" ++ ++#: Settings.ui.h:1 ++msgid "Customize indicator style" ++msgstr "Prilagoćavanje stila indikatora" ++ ++#: Settings.ui.h:2 ++msgid "Color" ++msgstr "Boja" ++ ++#: Settings.ui.h:3 ++msgid "Border color" ++msgstr "Boja ivice" ++ ++#: Settings.ui.h:4 ++msgid "Border width" ++msgstr "Širina ivice" ++ ++#: Settings.ui.h:5 ++msgid "Number overlay" ++msgstr "Brojne nalepnice" ++ ++#: Settings.ui.h:6 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Privremeno prikaži brojeve programa iznad ikonica, prema pripadajućoj " ++"prečici." ++ ++#: Settings.ui.h:7 ++msgid "Show the dock if it is hidden" ++msgstr "Prikaži dok ukoliko je sakriven" ++ ++#: Settings.ui.h:8 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Ukoliko se koristi automatsko sakrivanje, dok će se prikazati na trenutak " ++"pri okidanju prečice." ++ ++#: Settings.ui.h:9 ++msgid "Shortcut for the options above" ++msgstr "Prečica za gore navedene opcije" ++ ++#: Settings.ui.h:10 ++msgid "Syntax: , , , " ++msgstr "Sintaksa: , , , " ++ ++#: Settings.ui.h:11 ++msgid "Hide timeout (s)" ++msgstr "Zastoj skrivanja" ++ ++#: Settings.ui.h:12 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Kad je postavljeno na minimizovanje, dupli klik minimizuje sve prozore " ++"programa." ++ ++#: Settings.ui.h:13 ++msgid "Shift+Click action" ++msgstr "Radnja šift+klika" ++ ++#: Settings.ui.h:14 ++msgid "Raise window" ++msgstr "izdigni prozor" ++ ++#: Settings.ui.h:15 ++msgid "Minimize window" ++msgstr "minimizuj prozor" ++ ++#: Settings.ui.h:16 ++msgid "Launch new instance" ++msgstr "pokreni novi primerak" ++ ++#: Settings.ui.h:17 ++msgid "Cycle through windows" ++msgstr "kruženje kroz prozore" ++ ++#: Settings.ui.h:18 ++msgid "Minimize or overview" ++msgstr "minimiuj ili pregled" ++ ++#: Settings.ui.h:19 ++msgid "Show window previews" ++msgstr "prikaži sličice prozora" ++ ++#: Settings.ui.h:20 ++msgid "Quit" ++msgstr "napusti" ++ ++#: Settings.ui.h:21 ++msgid "Behavior for Middle-Click." ++msgstr "Ponašanje srednjeg klika." ++ ++#: Settings.ui.h:22 ++msgid "Middle-Click action" ++msgstr "Radnja srednjeg klika" ++ ++#: Settings.ui.h:23 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Ponašanje šift+srednjeg klika." ++ ++#: Settings.ui.h:24 ++msgid "Shift+Middle-Click action" ++msgstr "Radnja šift+srednjegklika" ++ ++#: Settings.ui.h:25 ++msgid "Show the dock on" ++msgstr "Prikaži dok na" ++ ++#: Settings.ui.h:26 ++msgid "Show on all monitors." ++msgstr "Prikaži na svim monitorima." ++ ++#: Settings.ui.h:27 ++msgid "Position on screen" ++msgstr "Pozicija na ekranu" ++ ++#: Settings.ui.h:29 ++msgid "Bottom" ++msgstr "dno" ++ ++#: Settings.ui.h:30 ++msgid "Top" ++msgstr "vrh" ++ ++#: Settings.ui.h:32 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Sakrij dok kada je na putu prozora trenutnog programa. Dostupne su finije " ++"postavke." ++ ++#: Settings.ui.h:33 ++msgid "Intelligent autohide" ++msgstr "Inteligentno automatsko sakrivanje" ++ ++#: Settings.ui.h:34 ++msgid "Dock size limit" ++msgstr "Ograničenje veličine doka" ++ ++#: Settings.ui.h:35 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Režim panela: proširen do ivica ekrana" ++ ++#: Settings.ui.h:36 ++msgid "Icon size limit" ++msgstr "Ograničenje veličine ikonica" ++ ++#: Settings.ui.h:37 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Ustaljena veličina ikonica: klizajte za druge ikone" ++ ++#: Settings.ui.h:38 ++msgid "Position and size" ++msgstr "Pozicija i veličina" ++ ++#: Settings.ui.h:39 ++msgid "Show favorite applications" ++msgstr "Prikaz omiljenih programa" ++ ++#: Settings.ui.h:40 ++msgid "Show running applications" ++msgstr "Prikaz pokrenutih programa" ++ ++#: Settings.ui.h:41 ++msgid "Isolate workspaces." ++msgstr "Izoluj radne prostore." ++ ++#: Settings.ui.h:42 ++msgid "Isolate monitors." ++msgstr "Izoluj monitore." ++ ++#: Settings.ui.h:43 ++msgid "Show open windows previews." ++msgstr "Prikaži sličice otvorenih prozora." ++ ++#: Settings.ui.h:44 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Ukoliko je onemogućeno, ove postavke su dostupne kroz alatku za lickanje ili " ++"veb sajt proširenja." ++ ++#: Settings.ui.h:45 ++msgid "Show Applications icon" ++msgstr "Prikaz ikonice Prikaži programe" ++ ++#: Settings.ui.h:46 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Pomeri dugme programa na početak doka." ++ ++#: Settings.ui.h:47 ++msgid "Animate Show Applications." ++msgstr "Animiraj prikaz programa." ++ ++#: Settings.ui.h:48 ++msgid "Launchers" ++msgstr "Pokretači" ++ ++#: Settings.ui.h:49 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Uključuje Super+(0-9) kao prečice za aktivaciju programa. Takođe je moguće " ++"koristiti uz shift i ctrl." ++ ++#: Settings.ui.h:50 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Aktiviraj programe prečicama tastature" ++ ++#: Settings.ui.h:51 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Ponašanje pri kliku na pokrenuti program." ++ ++#: Settings.ui.h:52 ++msgid "Click action" ++msgstr "Radnja klika" ++ ++#: Settings.ui.h:54 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Ponašanje pri klizanju na ikonicu pokrenutog programa." ++ ++#: Settings.ui.h:55 ++msgid "Scroll action" ++msgstr "Radnja klizanja na ikonicu" ++ ++#: Settings.ui.h:56 ++msgid "Do nothing" ++msgstr "ništa" ++ ++#: Settings.ui.h:57 ++msgid "Switch workspace" ++msgstr "prebaci radni prostor" ++ ++#: Settings.ui.h:58 ++msgid "Behavior" ++msgstr "Ponašanje" ++ ++#: Settings.ui.h:59 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Nekoliko postavki namenjenih ugrađivanju doka u osnovnu temu Gnoma. " ++"Alternativno, posebne postavke se mogu urediti ispod." ++ ++#: Settings.ui.h:60 ++msgid "Use built-in theme" ++msgstr "Koristi ugrađenu temu" ++ ++#: Settings.ui.h:61 ++msgid "Save space reducing padding and border radius." ++msgstr "Čuva prostor sužavanjem popune i opsega ivica." ++ ++#: Settings.ui.h:62 ++msgid "Shrink the dash" ++msgstr "Skupi ploču" ++ ++#: Settings.ui.h:63 ++msgid "Show a dot for each windows of the application." ++msgstr "Prikazuje tačku za svaki prozor programa." ++ ++#: Settings.ui.h:64 ++msgid "Show windows counter indicators" ++msgstr "Prikaz indikatora brojača prozora." ++ ++#: Settings.ui.h:65 ++msgid "Set the background color for the dash." ++msgstr "Postavi pozadinsku boju ploče." ++ ++#: Settings.ui.h:66 ++msgid "Customize the dash color" ++msgstr "Prilagodi boju ploče" ++ ++#: Settings.ui.h:67 ++msgid "Tune the dash background opacity." ++msgstr "Prilagodi prozirnost pozadine ploče." ++ ++#: Settings.ui.h:68 ++msgid "Customize opacity" ++msgstr "Prilagoćavanje prozirnosti" ++ ++#: Settings.ui.h:69 ++msgid "Opacity" ++msgstr "Prozirnost" ++ ++#: Settings.ui.h:70 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Uključi pozadinske efekte poput Unity7" ++ ++#: Settings.ui.h:71 ++msgid "Force straight corner\n" ++msgstr "Nametni ravne uglove\n" ++ ++#: Settings.ui.h:73 ++msgid "Appearance" ++msgstr "Izgled" ++ ++#: Settings.ui.h:74 ++msgid "version: " ++msgstr "verzija: " ++ ++#: Settings.ui.h:75 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Pomera ploču iz globalnog prikaza, pretvarajući je u dok" ++ ++#: Settings.ui.h:76 ++msgid "Created by" ++msgstr "Napravi" ++ ++#: Settings.ui.h:77 ++msgid "Webpage" ++msgstr "Veb stranica" ++ ++#: Settings.ui.h:78 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Ovaj program se dostavlja BEZ IKAKVIH GARANCIJA.\n" ++"Pogledajte GNUovu Opštu Javnu licencu, verzija 2 ili kasnija, za detalje." ++ ++#: Settings.ui.h:80 ++msgid "About" ++msgstr "O programu" ++ ++#: Settings.ui.h:81 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Prikaži dok prelazom miša peko ivice ekrana." ++ ++#: Settings.ui.h:82 ++msgid "Autohide" ++msgstr "Automatsko sakrivanje" ++ ++#: Settings.ui.h:83 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Prikaz pritiskom: zahteva pritisak za prikaz doka" ++ ++#: Settings.ui.h:84 ++msgid "Enable in fullscreen mode" ++msgstr "Omogući u celoekranskom režimu" ++ ++#: Settings.ui.h:85 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Prikazuje dok kada nije na putu prozorima programa." ++ ++#: Settings.ui.h:86 ++msgid "Dodge windows" ++msgstr "Izbegavanje rozora" ++ ++#: Settings.ui.h:87 ++msgid "All windows" ++msgstr "Svi prozori" ++ ++#: Settings.ui.h:88 ++msgid "Only focused application's windows" ++msgstr "Samo prozor fokusiranog programa" ++ ++#: Settings.ui.h:89 ++msgid "Only maximized windows" ++msgstr "Samo maksimizovani prozori" ++ ++#: Settings.ui.h:90 ++msgid "Animation duration (s)" ++msgstr "Trajanje(a) animacije" ++ ++#: Settings.ui.h:91 ++msgid "Show timeout (s)" ++msgstr "Zastoj prikazivanja" ++ ++#: Settings.ui.h:92 ++msgid "Pressure threshold" ++msgstr "Prag pritiska" ++ + #~ msgid "CPU" + #~ msgstr "Procesor" + +@@ -369,3 +827,20 @@ msgstr "%d. radni prostor" + + #~ msgid "Window management and application launching" + #~ msgstr "Upravljanje prozorima i pokretanje programa" ++ ++#~ msgid "0.000" ++#~ msgstr "0,000" ++ ++#, fuzzy ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "Ako se ikone preklapaju na doku, prikazuje se samo ikona Prikaži " ++#~ "programe." ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "Promena radnog prostora klizanjem po doku" ++ ++#~ msgid "Only consider windows of the focused application" ++#~ msgstr "Razmatraj samo prozor fokusiranog programa" +diff --git a/po/sv.po b/po/sv.po +index 989074aa..2ca88c58 100644 +--- a/po/sv.po ++++ b/po/sv.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# sv.po (gnome-shell-extensions) #-#-#-#-# + # Swedish translation for gnome-shell-extensions. + # Copyright © 2011-2021 Free Software Foundation, Inc. + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -5,8 +6,17 @@ + # Mattias Eriksson , 2014. + # Anders Jonsson , 2015, 2017, 2019, 2020, 2021. + # ++# #-#-#-#-# sv.po #-#-#-#-# ++# Swedish translation for dash-to-dock. ++# Copyright © 2020 dash-to-dock's COPYRIGHT HOLDER ++# This file is distributed under the same license as the dash-to-dock package. ++# Anders Jonsson , 2016. ++# Morgan Antonsson , 2020. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# sv.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -19,6 +29,18 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.4.2\n" ++"#-#-#-#-# sv.po #-#-#-#-#\n" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-08-03 19:27+0200\n" ++"PO-Revision-Date: 2020-08-03 19:41+0200\n" ++"Last-Translator: Morgan Antonsson \n" ++"Language-Team: \n" ++"Language: sv\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3\n" + + #: data/gnome-classic.desktop.in:3 + msgid "GNOME Classic" +@@ -152,7 +174,7 @@ msgstr "Stäng" + msgid "Unminimize" + msgstr "Avminimera" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:52 + msgid "Minimize" + msgstr "Minimera" + +@@ -259,3 +281,525 @@ msgstr "Arbetsyta %d" + #: extensions/workspace-indicator/prefs.js:218 + msgid "Add Workspace" + msgstr "Lägg till arbetsyta" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "Primär skärm" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "Sekundär skärm " ++ ++#: prefs.js:309 Settings.ui.h:28 ++msgid "Right" ++msgstr "Höger" ++ ++#: prefs.js:310 Settings.ui.h:25 ++msgid "Left" ++msgstr "Vänster" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "Anpassning av intelligent automatiskt döljande" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "Återställ till standardvärden" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "Visa docka och programnummer" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "Anpassa mellanklicksbeteende" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "Anpassa körningsindikatorer" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Anpassa opacitet" ++ ++#: appIcons.js:797 ++msgid "All Windows" ++msgstr "Alla fönster" ++ ++#: appIcons.js:916 ++#, javascript-format ++msgid "Quit %d Windows" ++msgstr "Stäng %d fönster" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1134 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "%s för Dash to Dock" ++ ++#: locations.js:80 ++msgid "Trash" ++msgstr "Papperskorg" ++ ++#: locations.js:89 ++msgid "Empty Trash" ++msgstr "Töm papperskorgen" ++ ++#: locations.js:207 ++msgid "Mount" ++msgstr "Montera" ++ ++#: locations.js:250 ++msgid "Eject" ++msgstr "Mata ut" ++ ++#: locations.js:255 ++msgid "Unmount" ++msgstr "Avmontera" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Då inställd till minimera så minimerar dubbelklick alla fönster för " ++"programmet." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Skift+klick-åtgärd" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Höj fönster" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Minimera fönster" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Starta ny instans" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Växla mellan fönster" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Minimera eller visa översikt" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Visa förhandsgranskningar av fönster" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Minimera eller visa förhandsgranskningar" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Fokusera eller visa förhandsgranskningar" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Avsluta" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Beteende för mellanklick." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Åtgärd för mellanklick" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Beteende för skift+mellanklick." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Åtgärd för skift+mellanklick" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Aktivera bakgrundsbelysta blanka knappar" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Använd dominerande färg" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Anpassa indikatorstil" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Färg" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Kantfärg" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Kantbredd" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Visa dockan på" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Visa på alla skärmar." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Position på skärmen" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Nederkant" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Överkant" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Dölj dockan då den är i vägen för ett fönster för det aktuella programmet. " ++"Mer förfinade inställningar finns tillgängliga." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Intelligent automatiskt döljande" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Storleksgräns för docka" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Panelläge: sträck ut till skärmkanten" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Storleksgräns för ikoner" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Fast ikonstorlek: rulla för att visa dolda ikoner" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Position och storlek" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Visa favoritprogram" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Visa körande program" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Visa endast arbetsytans fönster." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Visa endast skärmens fönster." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Visa förhandsgranskningar av öppna fönster." ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Om inaktiverad är dessa inställningar tillgängliga från justeringsverktyg " ++"eller webbplatsen för utökningar." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Visa Program-ikon" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Flytta programknappen till början av dockan." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Animera Visa program." ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Visa papperskorgen" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Visa monterade volymer och enheter" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Programstartare" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Använd Super+(0-9) som tangentbordsgenvägar för att aktivera program. De kan " ++"även användas tillsammans med skift- och ctrl-tangenterna." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Använd tangentbordsgenvägar för att aktivera program" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Beteende då ikonen för ett körande program klickas." ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Klickåtgärd" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Beteende vid rullning över programikon." ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Rullåtgärd" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Gör ingenting" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Byt arbetsyta" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Beteende" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Några anpassningar för att integrera dockan med GNOME:s standardtema. " ++"Alternativt kan specifika alternativ aktiveras nedan." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Använd inbyggt tema" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "Spara utrymme genom att minska utfyllnad och kantradie." ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Krymp snabbstartspanelen" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "Anpassa räknare för öppna fönster" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "Standard" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Prickar" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Kvadrater" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Streck" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Segment" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Solid" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Ställ in bakgrundsfärg för snabbstartspanelen." ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Anpassa färgen för snabbstartspanelen" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Justera opacitet för bakgrunden till snabbstartspanelen." ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Fast" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Dynamisk" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Opacitet" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner" ++msgstr "Tvinga räta hörn" ++ ++#: Settings.ui.h:79 ++msgid "Appearance" ++msgstr "Utseende" ++ ++#: Settings.ui.h:80 ++msgid "version: " ++msgstr "version: " ++ ++#: Settings.ui.h:81 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "" ++"Flyttar snabbstartspanelen från översiktsvyn och förvandlar den till en docka" ++ ++#: Settings.ui.h:82 ++msgid "Created by" ++msgstr "Skapat av" ++ ++#: Settings.ui.h:83 ++msgid "Webpage" ++msgstr "Webbsida" ++ ++#: Settings.ui.h:84 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Detta program kommer HELT UTAN GARANTI.\n" ++"Se GNU " ++"General Public License, version 2 eller senare för detaljer." ++ ++#: Settings.ui.h:86 ++msgid "About" ++msgstr "Om" ++ ++#: Settings.ui.h:87 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Anpassa minsta och högsta värden för opacitet" ++ ++#: Settings.ui.h:88 ++msgid "Minimum opacity" ++msgstr "Minsta opacitet" ++ ++#: Settings.ui.h:89 ++msgid "Maximum opacity" ++msgstr "Högsta opacitet" ++ ++#: Settings.ui.h:90 ++msgid "Number overlay" ++msgstr "Nummermarkeringar" ++ ++#: Settings.ui.h:91 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Visa tillfälligt programmens tangentbordsgenvägsnummer ovanpå dess ikoner." ++ ++#: Settings.ui.h:92 ++msgid "Show the dock if it is hidden" ++msgstr "Visa dockan om den är dold" ++ ++#: Settings.ui.h:93 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Om automatiskt döljande är aktiverat kommer dockan att synas tillfälligt när " ++"tangentbordsgenvägen triggas." ++ ++#: Settings.ui.h:94 ++msgid "Shortcut for the options above" ++msgstr "Tangentbordsgenväg för alternativen ovan" ++ ++#: Settings.ui.h:95 ++msgid "Syntax: , , , " ++msgstr "Syntax: , , , " ++ ++#: Settings.ui.h:96 ++msgid "Hide timeout (s)" ++msgstr "Tidsgräns för att dölja (s)" ++ ++#: Settings.ui.h:97 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Visa dockan genom att flytta muspekaren till skärmkanten." ++ ++#: Settings.ui.h:98 ++msgid "Autohide" ++msgstr "Dölj automatiskt" ++ ++#: Settings.ui.h:99 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Tryck för att visa: kräv tryck för att visa dockan" ++ ++#: Settings.ui.h:100 ++msgid "Enable in fullscreen mode" ++msgstr "Aktivera i helskärmsläge" ++ ++#: Settings.ui.h:101 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Visa dockan då den inte är i vägen för programfönster." ++ ++#: Settings.ui.h:102 ++msgid "Dodge windows" ++msgstr "Undvik fönster" ++ ++#: Settings.ui.h:103 ++msgid "All windows" ++msgstr "Alla fönster" ++ ++#: Settings.ui.h:104 ++msgid "Only focused application's windows" ++msgstr "Endast fokuserade programs fönster" ++ ++#: Settings.ui.h:105 ++msgid "Only maximized windows" ++msgstr "Endast maximerade fönster" ++ ++#: Settings.ui.h:106 ++msgid "Animation duration (s)" ++msgstr "Animationens varaktighet (s)" ++ ++#: Settings.ui.h:107 ++msgid "Show timeout (s)" ++msgstr "Tidsgräns för att visa (s)" ++ ++#: Settings.ui.h:108 ++msgid "Pressure threshold" ++msgstr "Tröskelvärde för tryck" +diff --git a/po/tr.po b/po/tr.po +index 0a5f7459..38bbc7b6 100644 +--- a/po/tr.po ++++ b/po/tr.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# tr.po (gnome-shell-extensions master) #-#-#-#-# + # Turkish translation for gnome-shell-extensions. + # Copyright (C) 2012-2019 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -9,8 +10,23 @@ + # Sabri Ünal , 2014, 2019. + # Emin Tufan Çetin , 2019, 2020. + # ++# #-#-#-#-# tr.po (dash-to-dock master) #-#-#-#-# ++# Turkish translation for dash-to-dock GNOME shell extension. ++# Copyright (C) 2015-2019, dash-to-dock'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the dash-to-dock package. ++# ++# Mustafa Akgün , 2015. ++# Çağatay Yiğit Şahin , 2016. ++# Serdar Sağlam , 2018, 2019. ++# Sabri Ünal , 2019. ++# ++# Note for all turkish translators: ++# Lütfen GNOME Shell çevirileri ile uyumlu çevirmeye gayret edelim. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# tr.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -24,6 +40,19 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Generator: Poedit 2.2.3\n" ++"#-#-#-#-# tr.po (dash-to-dock master) #-#-#-#-#\n" ++"Project-Id-Version: dash-to-dock master\n" ++"Report-Msgid-Bugs-To: https://github.com/micheleg/dash-to-dock\n" ++"POT-Creation-Date: 2019-10-13 08:54+0300\n" ++"PO-Revision-Date: 2019-11-11 17:21+0300\n" ++"Last-Translator: Sabri Ünal \n" ++"Language-Team: \n" ++"Language: tr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++"X-Generator: Poedit 2.0.6\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -158,9 +187,14 @@ msgstr "Kapat" + msgid "Unminimize" + msgstr "Önceki duruma getir" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:52 ++#, fuzzy + msgid "Minimize" +-msgstr "Simge durumuna küçült" ++msgstr "" ++"#-#-#-#-# tr.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Simge durumuna küçült\n" ++"#-#-#-#-# tr.po (dash-to-dock master) #-#-#-#-#\n" ++"Küçült" + + #: extensions/window-list/extension.js:125 + msgid "Unmaximize" +@@ -268,6 +302,519 @@ msgstr "Çalışma Alanı %d" + msgid "Add Workspace" + msgstr "Çalışma Alanı Ekle" + ++#: prefs.js:264 ++msgid "Primary monitor" ++msgstr "Ana ekran" ++ ++#: prefs.js:273 prefs.js:280 ++msgid "Secondary monitor " ++msgstr "İkincil ekran " ++ ++#: prefs.js:305 Settings.ui.h:28 ++msgid "Right" ++msgstr "Sağ" ++ ++#: prefs.js:306 Settings.ui.h:25 ++msgid "Left" ++msgstr "Sol" ++ ++#: prefs.js:356 ++msgid "Intelligent autohide customization" ++msgstr "Akıllı otomatik gizleme özelleştirmeleri" ++ ++#: prefs.js:363 prefs.js:556 prefs.js:612 ++msgid "Reset to defaults" ++msgstr "Varsayılan ayarlara dön" ++ ++#: prefs.js:549 ++msgid "Show dock and application numbers" ++msgstr "Rıhtımı ve uygulama sayılarını göster" ++ ++#: prefs.js:605 ++msgid "Customize middle-click behavior" ++msgstr "Orta tık davranışını özelleştir" ++ ++#: prefs.js:688 ++msgid "Customize running indicators" ++msgstr "Çalışan göstergeleri özelleştir" ++ ++#: prefs.js:800 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "Matlığı özelleştir" ++ ++#: appIcons.js:809 ++msgid "All Windows" ++msgstr "Tüm Pencereler" ++ ++# %s değişkeni Ayarlar olarak çevrildiği için, bir ı harfi ekleyerek Türkçeye uyumlu hale getiriyoruz. ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1126 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %sı" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "" ++"Küçültmeye ayarlandığında, çift tıklamak uygulamanın tüm pencerelerini " ++"küçültür." ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Shift + Tıklama eylemi" ++ ++# Tweak ayarlarında raise için öne çıkar kullanılmış ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "Pencereyi büyüt" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "Pencereyi küçült" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "Yeni uygulama örneği başlat" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "Pencere döngüsü" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "Küçült yada genel bakış" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "Pencere önizlemelerini göster" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "Küçült yada önizlemeleri göster" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "Odaklan veya önizlemeleri göster" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "Çık" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "Orta Tıklama davranışı." ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "Orta Tıklama eylemi" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Shift + Orta Tıklama davranışı." ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Shift + Orta Tıklama eylemi" ++ ++# glossy backlit için serbest çeviri yapıldı ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "Unity7 tipi parlak öğeleri etkinleştir" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "Baskın rengi kullan" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "Gösterge biçemini özelleştir" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "Renk" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "Kenarlık rengi" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "Kenarlık genişliği" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Rıhtım'ı göster" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "Tüm ekranlarda göster." ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "Ekrandaki konumu" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "Alt" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "Üst" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"Geçerli uygulamanın penceresini engellediğinde rıhtımı gizle. Daha detaylı " ++"ayarlar mevcuttur." ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "Akıllı gizleme" ++ ++# son limit cümlesi kasten çevrilmedi ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Rıhtım boyutu" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "Panel kipi: Ekran köşelerine genişlet" ++ ++# son limit cümlesi kasten çevrilmedi ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "Simge boyutu" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "Sabit simge boyutu: Diğer simgeleri görmek için kaydır" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "Konum ve boyut" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "Sık kullanılan uygulamaları göster" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "Çalışan uygulamaları göster" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "Çalışma alanlarını ayır." ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "Ekranları ayır." ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "Açık pencere önizlemelerini göster." ++ ++# Anlamlı ve açıklayıcı olması için ilave değerler eklendi ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "" ++"Eğer kapatılmışsa, bu ayarlara GNOME İnce Ayarlar (gnome-tweak-tool) " ++"uygulamasından veya GNOME eklentileri (https://extensions.gnome.org) " ++"sitesinden ulaşılabilir." ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "Uygulamalar simgesini göster" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "Uygulamalar simgesini rıhtım'ın başlangıcına taşı." ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "Uygulamalar açılırken canlandırma göster." ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "Çöp kutusunu göster" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "Bağlı birimleri ve aygıtları göster" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "Başlatıcılar" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"Uygulamaları etkinleştirmek için Super+(0-9) seçeneğini kısayol olarak " ++"etkinleştir. Ayrıca Shift ve Ctrl ile birlikte de kullanılabilir." ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "Uygulamaları etkinleştirmek için klavye kısayollarını kullan" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "Çalışan bir uygulamanın simgesine tıklandığındaki davranışı." ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "Tıklama eylemi" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "Bir uygulamanın simgesini kaydırdığınızdaki davranışı." ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "Kaydırma eylemi" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "Hiçbir şey yapma" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "Çalışma alanını değiştir" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "Davranış" ++ ++# Çeviri yapmak yerine, Türkçe'de anlamlı, konuma uyumlu özgün metin oluşturuldu. ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"Sistemde bulunan etkin GNOME teması kullanılır ve rıhtım ona göre " ++"şekillenir. Özelleştirmek isterseniz bu menüyü kapatın." ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "Yerleşik temayı kullan" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "Dolgu ve kenarlığı azaltarak yer kazan." ++ ++# Shrink için genelde küçült çevirisini kullanıyoruz ama, ++# anlamlı ve eylemle uyumlu olduğu için daralt çevirisi kullanıldı ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "Paneli daralt" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "Pencere sayı göstergelerini özelleştir" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "Varsayılan" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "Noktalar" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "Kareler" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "Tireler" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "Segmentler" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "Kalın çizgi" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "Nokta ve çizgi" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "Metro" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "Panel arkaplan rengini ayarla." ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "Panel rengini özelleştir" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "Panel arkaplan matlığını ayarla." ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "Sabit" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "Dinamik" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "Matlık" ++ ++# Daha anlaşılır olması için serbest çeviri yapıldı ++#: Settings.ui.h:78 ++msgid "Force straight corner\n" ++msgstr "Köşeleri düzleştir\n" ++ ++#: Settings.ui.h:80 ++msgid "Appearance" ++msgstr "Görünüm" ++ ++#: Settings.ui.h:81 ++msgid "version: " ++msgstr "sürüm: " ++ ++#: Settings.ui.h:82 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "Paneli genel görünümden taşır ve rıhtıma dönüştürür" ++ ++# Çeviri anlamlı olması için : eklendi ++#: Settings.ui.h:83 ++msgid "Created by" ++msgstr "Oluşturan:" ++ ++#: Settings.ui.h:84 ++msgid "Webpage" ++msgstr "Web sitesi" ++ ++#: Settings.ui.h:85 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"Bu program kesinlikle hiçbir garanti vermiyor..\n" ++"Ayrıntılar için GNU Genel Kamu Lisansı, sürüm 2 veya üstü bağlantısına bakın" ++ ++#: Settings.ui.h:87 ++msgid "About" ++msgstr "Hakkında" ++ ++# minimum and maximum değerleri çevrilmedi ++#: Settings.ui.h:88 ++msgid "Customize minimum and maximum opacity values" ++msgstr "Matlık değerlerini özelleştir" ++ ++#: Settings.ui.h:89 ++msgid "Minimum opacity" ++msgstr "Asgari matlık" ++ ++#: Settings.ui.h:90 ++msgid "Maximum opacity" ++msgstr "Azami matlık" ++ ++#: Settings.ui.h:91 ++msgid "Number overlay" ++msgstr "Sayı yerleşimi" ++ ++#: Settings.ui.h:92 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "" ++"Uygulama numaralarını, karşılık gelen simgelere göre geçici olarak göster " ++"kısayol." ++ ++#: Settings.ui.h:93 ++msgid "Show the dock if it is hidden" ++msgstr "Gizlenmişse rıhtım'ı göster" ++ ++#: Settings.ui.h:94 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "" ++"Otomatik gizleme kullanıyorsanız, kısayol tetiklendiğinde rıhtım kısa bir " ++"süre için görünür." ++ ++#: Settings.ui.h:95 ++msgid "Shortcut for the options above" ++msgstr "Yukarıdaki seçenekler için kısayol" ++ ++#: Settings.ui.h:96 ++msgid "Syntax: , , , " ++msgstr "Sözdizimi: , , , " ++ ++#: Settings.ui.h:97 ++msgid "Hide timeout (s)" ++msgstr "Gizleme zaman aşımı (s)" ++ ++#: Settings.ui.h:98 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "Fare ekran köşeleri üzerindeyken rıhtım'ı göster." ++ ++#: Settings.ui.h:99 ++msgid "Autohide" ++msgstr "Otomatik gizle" ++ ++# Anlaşılması kolay olsun diye, pressure burada etki olarak çevrilmiştir ++#: Settings.ui.h:100 ++msgid "Push to show: require pressure to show the dock" ++msgstr "Göstermek için it: Rıhtım'ın gösterilmesi için etki gerekir" ++ ++#: Settings.ui.h:101 ++msgid "Enable in fullscreen mode" ++msgstr "Tam ekran kipinde etkinleştir" ++ ++#: Settings.ui.h:102 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "Uygulama penceresine engel olmadığında rıhtımı göster." ++ ++#: Settings.ui.h:103 ++msgid "Dodge windows" ++msgstr "Pencelereleri atlat" ++ ++#: Settings.ui.h:104 ++msgid "All windows" ++msgstr "Tüm pencereler" ++ ++#: Settings.ui.h:105 ++msgid "Only focused application's windows" ++msgstr "Sadece odaklanılan uygulamanın pencereleri" ++ ++#: Settings.ui.h:106 ++msgid "Only maximized windows" ++msgstr "Sadece büyütülen pencereler" ++ ++#: Settings.ui.h:107 ++msgid "Animation duration (s)" ++msgstr "Canlandırma süresi (s)" ++ ++#: Settings.ui.h:108 ++msgid "Show timeout (s)" ++msgstr "Gösterim zaman aşımı (s)" ++ ++# Anlaşılması kolay olsun diye, pressure burada etki olarak çevrilmiştir ++#: Settings.ui.h:109 ++msgid "Pressure threshold" ++msgstr "Etki eşiği" ++ + #~ msgid "Application" + #~ msgstr "Uygulama" + +@@ -353,3 +900,6 @@ msgstr "Çalışma Alanı Ekle" + + #~ msgid "Memory" + #~ msgstr "Bellek" ++ ++#~ msgid "Adaptive" ++#~ msgstr "Uyarlanır" +diff --git a/po/zh_CN.po b/po/zh_CN.po +index feb1bff9..338e86ed 100644 +--- a/po/zh_CN.po ++++ b/po/zh_CN.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# zh_CN.po (gnome-shell-extensions master) #-#-#-#-# + # Chinese (China) translation for gnome-shell-extensions. + # Copyright (C) 2011-2019 gnome-shell-extensions's authors and contributors + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -8,8 +9,18 @@ + # Mingcong Bai , 2017. + # Dingzhong Chen , 2019. + # ++# #-#-#-#-# zh_CN.po (Dash to Dock) #-#-#-#-# ++# Simplified Chinese translation of dash-to-dock ++# Copyright (C) 2013 tuhaihe ++# This file is distributed under the same license as the dash-to-dock package. ++# tuhaihe <1132321739qq@gmail.com>, 2013. ++# 绿色圣光 , 2015, 2016, 2017. ++# zhmars <1403122061@qq.com>, 2019, 2020. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# zh_CN.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -23,6 +34,19 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.3.1\n" + "Plural-Forms: nplurals=1; plural=0;\n" ++"#-#-#-#-# zh_CN.po (Dash to Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-03-23 15:33+0800\n" ++"PO-Revision-Date: 2017-08-03 22:49+0800\n" ++"Last-Translator: zhmars <1403122061@qq.com>\n" ++"Language-Team: Chinese (Simplified) <>\n" ++"Language: zh_CN\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Gtranslator 2.91.7\n" ++"Plural-Forms: nplurals=1; plural=0;\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -152,7 +176,7 @@ msgstr "关闭" + msgid "Unminimize" + msgstr "取消最小化" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:52 + msgid "Minimize" + msgstr "最小化" + +@@ -257,6 +281,523 @@ msgstr "工作区 %d" + msgid "Add Workspace" + msgstr "添加工作区" + ++#: prefs.js:310 Settings.ui.h:25 ++#, fuzzy ++msgid "Left" ++msgstr "" ++"#-#-#-#-# zh_CN.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"左\n" ++"#-#-#-#-# zh_CN.po (Dash to Dock) #-#-#-#-#\n" ++"左侧" ++ ++#: prefs.js:309 Settings.ui.h:28 ++#, fuzzy ++msgid "Right" ++msgstr "" ++"#-#-#-#-# zh_CN.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"右\n" ++"#-#-#-#-# zh_CN.po (Dash to Dock) #-#-#-#-#\n" ++"右侧" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "主显示器" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "副显示器" ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "智能自动隐藏自定义" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "重置为默认值" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "显示 Dock 和应用程序编号" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "自定义中键点击行为" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "自定义“运行中”指示器" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "自定义不透明度" ++ ++#: appIcons.js:810 ++msgid "All Windows" ++msgstr "所有窗口" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1125 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %s" ++ ++#: locations.js:65 ++msgid "Trash" ++msgstr "回收站" ++ ++#: locations.js:74 ++msgid "Empty Trash" ++msgstr "清空回收站" ++ ++#: locations.js:189 ++msgid "Mount" ++msgstr "挂载" ++ ++#: locations.js:232 ++msgid "Eject" ++msgstr "弹出" ++ ++#: locations.js:237 ++msgid "Unmount" ++msgstr "卸载" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "当设置为最小化时,双击会最小化应用程序的所有窗口。" ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Shift+点击动作" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "提升窗口" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "最小化窗口" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "启动新实例" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "在窗口间循环" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "最小化或概览" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "显示打开窗口预览" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "最小化或显示预览" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "聚焦或显示预览" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "退出" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "中键点击的行为。" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "中键点击动作" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Shift+中键点击的行为。" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Shift+中键点击动作" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "启用类似 Unity 7 的高亮阴影" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "使用主色调" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "自定义指示器样式" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "颜色" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "边框颜色" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "边框宽度" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "显示 Dock 于" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "所有显示器上都显示" ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "屏幕中的位置" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "底部" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "顶部" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "" ++"当 Dock 会挡住当前应用程序的某个窗口时,将其隐藏。点击右侧设置按钮可以设置更" ++"多细节。" ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "智能隐藏" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Dock 大小限制" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "面板模式:延伸到屏幕边缘" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "图标大小限制" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "固定图标大小:滚动显示其它图标" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "位置和大小" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "显示收藏的应用程序" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "显示正在运行的应用程序" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "隔离工作区" ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "隔离显示器" ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "显示打开窗口预览" ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "禁用之后,可以通过 gnome-tweak-tool 或者扩展网站来访问这些设置。" ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "显示 应用程序 图标" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "将应用程序图标移至 Dock 的起始位置" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "动画方式 显示应用程序" ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "显示回收站" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "显示挂载卷和设备" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "启动器" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "启用 Super+(0-9) 作为快捷键来激活应用。也可与 Shift 和 Ctrl 一起使用。" ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "使用键盘快捷键激活应用" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "点击一个正在运行的应用程序图标时的行为。" ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "点击动作" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "在一个应用程序图标上滚动时的行为。" ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "滚动动作" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "无动作" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "切换工作区" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "行为" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"几个自定义项可以将 Dock 整合到默认 GNOME 主题中。或者,也可以启动下面的几个特" ++"殊选项。" ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "使用内置主题" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "减小填充和边框半径以节省空间。" ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "收缩 Dash" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "显示窗口个数指示器" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "默认" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "圆点" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "正方形" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "破折号" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "分段" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "设置 Dash 的背景颜色。" ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "自定义 Dash 颜色" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "调整 Dash 的背景不透明度。" ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "固定" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "动态" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "不透明度" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner" ++msgstr "强制边框直角" ++ ++#: Settings.ui.h:79 ++msgid "Appearance" ++msgstr "外观" ++ ++#: Settings.ui.h:80 ++msgid "version: " ++msgstr "版本:" ++ ++#: Settings.ui.h:81 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "让 Dash 跳出概览之外,转化为一个 Dock" ++ ++#: Settings.ui.h:82 ++msgid "Created by" ++msgstr "作者:" ++ ++#: Settings.ui.h:83 ++msgid "Webpage" ++msgstr "网站主页" ++ ++#: Settings.ui.h:84 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"本程序不提供任何担保。\n" ++"参见 GNU " ++"通用公共许可证,第二版或更高版本以了解更多细节。" ++ ++#: Settings.ui.h:86 ++msgid "About" ++msgstr "关于" ++ ++#: Settings.ui.h:87 ++msgid "Customize minimum and maximum opacity values" ++msgstr "自定义窗口最小化和最大化时 Dock 的不透明度" ++ ++#: Settings.ui.h:88 ++msgid "Minimum opacity" ++msgstr "最小化不透明度" ++ ++#: Settings.ui.h:89 ++msgid "Maximum opacity" ++msgstr "最大化不透明度" ++ ++#: Settings.ui.h:90 ++msgid "Number overlay" ++msgstr "编号覆盖" ++ ++#: Settings.ui.h:91 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "临时显示与快捷键对应的图标上的应用程序编号。" ++ ++#: Settings.ui.h:92 ++msgid "Show the dock if it is hidden" ++msgstr "若 Dock 已隐藏,将其显示" ++ ++#: Settings.ui.h:93 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "如果使用了自动隐藏,Dock 将在触发快捷键时短暂显示。" ++ ++#: Settings.ui.h:94 ++msgid "Shortcut for the options above" ++msgstr "以上选项的快捷键" ++ ++#: Settings.ui.h:95 ++msgid "Syntax: , , , " ++msgstr "语法:" ++ ++#: Settings.ui.h:96 ++msgid "Hide timeout (s)" ++msgstr "隐藏超时时间(秒)" ++ ++#: Settings.ui.h:97 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "鼠标移至屏幕边缘时显示 Dock。" ++ ++#: Settings.ui.h:98 ++msgid "Autohide" ++msgstr "自动隐藏" ++ ++#: Settings.ui.h:99 ++msgid "Push to show: require pressure to show the dock" ++msgstr "推压以显示:需要一定压力来显示 Dock" ++ ++#: Settings.ui.h:100 ++msgid "Enable in fullscreen mode" ++msgstr "在全屏模式下启用" ++ ++#: Settings.ui.h:101 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "在不妨碍应用程序窗口时,显示 Dock。" ++ ++#: Settings.ui.h:102 ++msgid "Dodge windows" ++msgstr "避开窗口" ++ ++#: Settings.ui.h:103 ++msgid "All windows" ++msgstr "所有窗口" ++ ++#: Settings.ui.h:104 ++msgid "Only focused application's windows" ++msgstr "仅焦点程序窗口" ++ ++#: Settings.ui.h:105 ++msgid "Only maximized windows" ++msgstr "仅最大化窗口" ++ ++#: Settings.ui.h:106 ++msgid "Animation duration (s)" ++msgstr "动画持续时间(秒)" ++ ++#: Settings.ui.h:107 ++msgid "Show timeout (s)" ++msgstr "显示超时时间(秒)" ++ ++#: Settings.ui.h:108 ++msgid "Pressure threshold" ++msgstr "压力阈值" ++ + #~ msgid "Application" + #~ msgstr "应用程序" + +@@ -367,12 +908,6 @@ msgstr "添加工作区" + #~ msgid "Normal" + #~ msgstr "正常" + +-#~ msgid "Left" +-#~ msgstr "左" +- +-#~ msgid "Right" +-#~ msgstr "右" +- + #~ msgid "Upside-down" + #~ msgstr "上下翻转" + +@@ -551,3 +1086,97 @@ msgstr "添加工作区" + + #~ msgid "Busy" + #~ msgstr "忙碌" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "为应用程序的每个窗口显示一个点。" ++ ++#~ msgid "0.000" ++#~ msgstr "0.000" ++ ++#~ msgid "" ++#~ "With fixed icon size, only the edge of the dock and the Show " ++#~ "Applications icon are active." ++#~ msgstr "" ++#~ "如果固定了图标大小,只有 dock 边缘和“显示应用程序”图标会激活该功" ++#~ "能。" ++ ++#~ msgid "Switch workspace by scrolling on the dock" ++#~ msgstr "通过滚动 dock 来切换工作区" ++ ++#~ msgid "Main Settings" ++#~ msgstr "主设置" ++ ++#~ msgid "Dock is fixed and always visible" ++#~ msgstr "Dock 固定且总是可见" ++ ++#~ msgid "Show delay [ms]" ++#~ msgstr "显示延迟(毫秒)" ++ ++#~ msgid "Hide delay [ms]" ++#~ msgstr "隐藏延迟(毫秒)" ++ ++#~ msgid "Application based intellihide" ++#~ msgstr "应用程序基于智能隐藏" ++ ++#~ msgid "Show the dock on following monitor (if attached)" ++#~ msgstr "Dock 将在如下显示器显示(如果已连接)" ++ ++#~ msgid "Primary (default)" ++#~ msgstr "主显示器(默认)" ++ ++#~ msgid "1" ++#~ msgstr "1" ++ ++#~ msgid "2" ++#~ msgstr "2" ++ ++#~ msgid "3" ++#~ msgstr "3" ++ ++#~ msgid "4" ++#~ msgstr "4" ++ ++#~ msgid "Max height" ++#~ msgstr "最大高度" ++ ++#~ msgid "Expand (experimental and buggy)" ++#~ msgstr "全部展开(实验阶段且存在问题)" ++ ++#~ msgid "Maximum icon size" ++#~ msgstr "最大图标尺寸" ++ ++#~ msgid "16" ++#~ msgstr "16" ++ ++#~ msgid "24" ++#~ msgstr "24" ++ ++#~ msgid "32" ++#~ msgstr "32" ++ ++#~ msgid "48" ++#~ msgstr "48" ++ ++#~ msgid "64" ++#~ msgstr "64" ++ ++#~ msgid "Optional features" ++#~ msgstr "可选功能" ++ ++#~ msgid "Only a 1px wide area close to the screen edge is active" ++#~ msgstr "仅当靠近屏幕边缘1像素宽区域时启用" ++ ++#~ msgid "All the area of the dock is active" ++#~ msgstr "Dock 全部区域时启用" ++ ++#~ msgid "Customize actions on mouse click" ++#~ msgstr "自定义鼠标点击动作" ++ ++#~ msgid "Action on clicking on running app" ++#~ msgstr "点击正在运行程序的动作" ++ ++#~ msgid "Minimize window on shift+click (double click for all app windows)" ++#~ msgstr "当按下“Shift+单击”(双击适用于全部程序窗口)时最小化窗口" ++ ++#~ msgid "Only when in autohide" ++#~ msgstr "仅当自动隐藏时" +diff --git a/po/zh_TW.po b/po/zh_TW.po +index 6a40e212..14e60ccb 100644 +--- a/po/zh_TW.po ++++ b/po/zh_TW.po +@@ -1,11 +1,20 @@ ++# #-#-#-#-# zh_TW.po (gnome-shell-extensions gnome-3-0) #-#-#-#-# + # Chinese (Taiwan) translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. + # + # Cheng-Chia Tseng , 2011. + # pan93412 , 2019. ++# #-#-#-#-# zh_TW.po (Dash to Dock) #-#-#-#-# ++# Traditional Chinese translation of dash-to-dock ++# Copyright (C) 2013 micheleg ++# This file is distributed under the same license as the dash-to-dock package. ++# Cheng-Chia Tseng , 2017 ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# zh_TW.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions gnome-3-0\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -19,6 +28,19 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.4.1\n" + "Plural-Forms: nplurals=1; plural=0;\n" ++"#-#-#-#-# zh_TW.po (Dash to Dock) #-#-#-#-#\n" ++"Project-Id-Version: Dash to Dock\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-05-23 23:49+0800\n" ++"PO-Revision-Date: 2020-05-24 00:08+0800\n" ++"Last-Translator: Yi-Jyun Pan \n" ++"Language-Team: Chinese (Traditional) <>\n" ++"Language: zh_TW\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3.1\n" ++"Plural-Forms: nplurals=1; plural=0;\n" + + #: data/gnome-classic.desktop.in:3 + msgid "GNOME Classic" +@@ -149,7 +171,7 @@ msgstr "關閉" + msgid "Unminimize" + msgstr "取消最小化" + +-#: extensions/window-list/extension.js:118 ++#: extensions/window-list/extension.js:118 Settings.ui.h:52 + msgid "Minimize" + msgstr "最小化" + +@@ -253,6 +275,526 @@ msgstr "工作區 %d" + msgid "Add Workspace" + msgstr "新增工作區" + ++#: prefs.js:310 Settings.ui.h:25 ++#, fuzzy ++msgid "Left" ++msgstr "" ++"#-#-#-#-# zh_TW.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" ++"左\n" ++"#-#-#-#-# zh_TW.po (Dash to Dock) #-#-#-#-#\n" ++"左側" ++ ++#: prefs.js:309 Settings.ui.h:28 ++#, fuzzy ++msgid "Right" ++msgstr "" ++"#-#-#-#-# zh_TW.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" ++"右\n" ++"#-#-#-#-# zh_TW.po (Dash to Dock) #-#-#-#-#\n" ++"右側" ++ ++#: prefs.js:268 ++msgid "Primary monitor" ++msgstr "主螢幕" ++ ++#: prefs.js:277 prefs.js:284 ++msgid "Secondary monitor " ++msgstr "次螢幕 " ++ ++#: prefs.js:360 ++msgid "Intelligent autohide customization" ++msgstr "自訂智慧型自動隱藏" ++ ++#: prefs.js:367 prefs.js:560 prefs.js:616 ++msgid "Reset to defaults" ++msgstr "重設回預設值" ++ ++#: prefs.js:553 ++msgid "Show dock and application numbers" ++msgstr "顯示 Dock 和應用程式數量" ++ ++#: prefs.js:609 ++msgid "Customize middle-click behavior" ++msgstr "自訂滑鼠中鍵行為" ++ ++#: prefs.js:692 ++msgid "Customize running indicators" ++msgstr "自訂執行中指示器" ++ ++#: prefs.js:804 Settings.ui.h:74 ++msgid "Customize opacity" ++msgstr "自訂不透明度" ++ ++#: appIcons.js:797 ++msgid "All Windows" ++msgstr "所有視窗" ++ ++#: appIcons.js:916 ++#, javascript-format ++msgid "Quit %d Windows" ++msgstr "結束 %d 個視窗" ++ ++#. Translators: %s is "Settings", which is automatically translated. You ++#. can also translate the full message if this fits better your language. ++#: appIcons.js:1134 ++#, javascript-format ++msgid "Dash to Dock %s" ++msgstr "Dash to Dock %s" ++ ++#: locations.js:65 ++msgid "Trash" ++msgstr "垃圾桶" ++ ++#: locations.js:74 ++msgid "Empty Trash" ++msgstr "清空垃圾桶" ++ ++#: locations.js:192 ++msgid "Mount" ++msgstr "掛載" ++ ++#: locations.js:235 ++msgid "Eject" ++msgstr "退出" ++ ++#: locations.js:240 ++msgid "Unmount" ++msgstr "卸載" ++ ++#: Settings.ui.h:1 ++msgid "" ++"When set to minimize, double clicking minimizes all the windows of the " ++"application." ++msgstr "當設定為最小化時,雙點滑鼠可將應用程式的所有視窗最小化。" ++ ++#: Settings.ui.h:2 ++msgid "Shift+Click action" ++msgstr "Shift+滑鼠點按 動作" ++ ++#: Settings.ui.h:3 ++msgid "Raise window" ++msgstr "擡升視窗" ++ ++#: Settings.ui.h:4 ++msgid "Minimize window" ++msgstr "最小化視窗" ++ ++#: Settings.ui.h:5 ++msgid "Launch new instance" ++msgstr "啟動新實體" ++ ++#: Settings.ui.h:6 ++msgid "Cycle through windows" ++msgstr "在視窗之間循環" ++ ++#: Settings.ui.h:7 ++msgid "Minimize or overview" ++msgstr "最小化或概覽" ++ ++#: Settings.ui.h:8 ++msgid "Show window previews" ++msgstr "顯示視窗預覽" ++ ++#: Settings.ui.h:9 ++msgid "Minimize or show previews" ++msgstr "最小化或顯示預覽" ++ ++#: Settings.ui.h:10 ++msgid "Focus or show previews" ++msgstr "聚焦或顯示預覽" ++ ++#: Settings.ui.h:11 ++msgid "Quit" ++msgstr "結束" ++ ++#: Settings.ui.h:12 ++msgid "Behavior for Middle-Click." ++msgstr "滑鼠中鍵的行為。" ++ ++#: Settings.ui.h:13 ++msgid "Middle-Click action" ++msgstr "滑鼠中鍵動作" ++ ++#: Settings.ui.h:14 ++msgid "Behavior for Shift+Middle-Click." ++msgstr "Shift+滑鼠中鍵的行為。" ++ ++#: Settings.ui.h:15 ++msgid "Shift+Middle-Click action" ++msgstr "Shift+滑鼠中鍵動作" ++ ++#: Settings.ui.h:16 ++msgid "Enable Unity7 like glossy backlit items" ++msgstr "啟用 Unity7 類平滑背光項目" ++ ++#: Settings.ui.h:17 ++msgid "Use dominant color" ++msgstr "使用主色調" ++ ++#: Settings.ui.h:18 ++msgid "Customize indicator style" ++msgstr "自訂指示器樣式" ++ ++#: Settings.ui.h:19 ++msgid "Color" ++msgstr "色彩" ++ ++#: Settings.ui.h:20 ++msgid "Border color" ++msgstr "邊框色彩" ++ ++#: Settings.ui.h:21 ++msgid "Border width" ++msgstr "邊框寬度" ++ ++#: Settings.ui.h:22 ++msgid "Show the dock on" ++msgstr "Dock 顯示於" ++ ++#: Settings.ui.h:23 ++msgid "Show on all monitors." ++msgstr "在所有顯示器顯示。" ++ ++#: Settings.ui.h:24 ++msgid "Position on screen" ++msgstr "螢幕上的位置" ++ ++#: Settings.ui.h:26 ++msgid "Bottom" ++msgstr "下面" ++ ++#: Settings.ui.h:27 ++msgid "Top" ++msgstr "上面" ++ ++#: Settings.ui.h:29 ++msgid "" ++"Hide the dock when it obstructs a window of the current application. More " ++"refined settings are available." ++msgstr "當 Dock 遮到目前應用程式的視窗時隱藏。可調整更多細部設定。" ++ ++#: Settings.ui.h:30 ++msgid "Intelligent autohide" ++msgstr "智慧型自動隱藏" ++ ++#: Settings.ui.h:31 ++msgid "Dock size limit" ++msgstr "Dock 大小限制" ++ ++#: Settings.ui.h:32 ++msgid "Panel mode: extend to the screen edge" ++msgstr "面板模式:延伸到螢幕邊緣" ++ ++#: Settings.ui.h:33 ++msgid "Icon size limit" ++msgstr "圖示大小限制" ++ ++#: Settings.ui.h:34 ++msgid "Fixed icon size: scroll to reveal other icons" ++msgstr "固定圖示大小:捲動滑鼠以揭開其他圖示" ++ ++#: Settings.ui.h:35 ++msgid "Position and size" ++msgstr "位置與大小" ++ ++#: Settings.ui.h:36 ++msgid "Show favorite applications" ++msgstr "顯示喜愛的應用程式" ++ ++#: Settings.ui.h:37 ++msgid "Show running applications" ++msgstr "顯示執行中應用程式" ++ ++#: Settings.ui.h:38 ++msgid "Isolate workspaces." ++msgstr "獨立工作區。" ++ ++#: Settings.ui.h:39 ++msgid "Isolate monitors." ++msgstr "獨立顯示器。" ++ ++#: Settings.ui.h:40 ++msgid "Show open windows previews." ++msgstr "顯示開啟視窗的預覽。" ++ ++#: Settings.ui.h:41 ++msgid "" ++"If disabled, these settings are accessible from gnome-tweak-tool or the " ++"extension website." ++msgstr "若停用,這些設定值可從 gnome-tweak-tool 或擴充套件網站存取。" ++ ++#: Settings.ui.h:42 ++msgid "Show Applications icon" ++msgstr "顯示 應用程式 圖示" ++ ++#: Settings.ui.h:43 ++msgid "Move the applications button at the beginning of the dock." ++msgstr "將應用程式按鈕移動到 Dock 開頭。" ++ ++#: Settings.ui.h:44 ++msgid "Animate Show Applications." ++msgstr "讓 顯示應用程式 有動畫。" ++ ++#: Settings.ui.h:45 ++msgid "Show trash can" ++msgstr "顯示垃圾桶" ++ ++#: Settings.ui.h:46 ++msgid "Show mounted volumes and devices" ++msgstr "顯示掛載儲存區和裝置" ++ ++#: Settings.ui.h:47 ++msgid "Launchers" ++msgstr "啟動器" ++ ++#: Settings.ui.h:48 ++msgid "" ++"Enable Super+(0-9) as shortcuts to activate apps. It can also be used " ++"together with Shift and Ctrl." ++msgstr "" ++"啟用 Super+(0-9) 作為啟用 App 的快捷鍵。這也可以搭配 Shift 和 Ctrl 使用。" ++ ++#: Settings.ui.h:49 ++msgid "Use keyboard shortcuts to activate apps" ++msgstr "使用鍵盤快捷鍵啟用 App" ++ ++#: Settings.ui.h:50 ++msgid "Behaviour when clicking on the icon of a running application." ++msgstr "點按執行中應用程式圖示時的行為。" ++ ++#: Settings.ui.h:51 ++msgid "Click action" ++msgstr "點按動作" ++ ++#: Settings.ui.h:53 ++msgid "Behaviour when scrolling on the icon of an application." ++msgstr "捲動應用程式圖示時的行為。" ++ ++#: Settings.ui.h:54 ++msgid "Scroll action" ++msgstr "捲動動作" ++ ++#: Settings.ui.h:55 ++msgid "Do nothing" ++msgstr "什麼都不做" ++ ++#: Settings.ui.h:56 ++msgid "Switch workspace" ++msgstr "切換工作區" ++ ++#: Settings.ui.h:57 ++msgid "Behavior" ++msgstr "行為" ++ ++#: Settings.ui.h:58 ++msgid "" ++"Few customizations meant to integrate the dock with the default GNOME theme. " ++"Alternatively, specific options can be enabled below." ++msgstr "" ++"不自訂即代表將 Dock 與預設 GNOME 主題整合。或者可以啟用下方的特定選項。" ++ ++#: Settings.ui.h:59 ++msgid "Use built-in theme" ++msgstr "使用內建主題" ++ ++#: Settings.ui.h:60 ++msgid "Save space reducing padding and border radius." ++msgstr "透過縮小邊框間距及邊框半徑來節省空間。" ++ ++#: Settings.ui.h:61 ++msgid "Shrink the dash" ++msgstr "縮小 Dash" ++ ++#: Settings.ui.h:62 ++msgid "Customize windows counter indicators" ++msgstr "自訂視窗計數器的指示器" ++ ++#: Settings.ui.h:63 ++msgid "Default" ++msgstr "預設" ++ ++#: Settings.ui.h:64 ++msgid "Dots" ++msgstr "圓點" ++ ++#: Settings.ui.h:65 ++msgid "Squares" ++msgstr "方框" ++ ++#: Settings.ui.h:66 ++msgid "Dashes" ++msgstr "小槓線" ++ ++#: Settings.ui.h:67 ++msgid "Segmented" ++msgstr "長段線" ++ ++#: Settings.ui.h:68 ++msgid "Solid" ++msgstr "實心" ++ ++#: Settings.ui.h:69 ++msgid "Ciliora" ++msgstr "Ciliora" ++ ++#: Settings.ui.h:70 ++msgid "Metro" ++msgstr "現代" ++ ++#: Settings.ui.h:71 ++msgid "Set the background color for the dash." ++msgstr "設定 Dash 的背景色彩。" ++ ++#: Settings.ui.h:72 ++msgid "Customize the dash color" ++msgstr "自訂 Dash 色彩" ++ ++#: Settings.ui.h:73 ++msgid "Tune the dash background opacity." ++msgstr "調整 Dash 的背景不透明度。" ++ ++#: Settings.ui.h:75 ++msgid "Fixed" ++msgstr "固定" ++ ++#: Settings.ui.h:76 ++msgid "Dynamic" ++msgstr "動態" ++ ++#: Settings.ui.h:77 ++msgid "Opacity" ++msgstr "不透明" ++ ++#: Settings.ui.h:78 ++msgid "Force straight corner" ++msgstr "強制邊緣直角" ++ ++#: Settings.ui.h:79 ++msgid "Appearance" ++msgstr "外觀" ++ ++#: Settings.ui.h:80 ++msgid "version: " ++msgstr "版本:" ++ ++#: Settings.ui.h:81 ++msgid "Moves the dash out of the overview transforming it in a dock" ++msgstr "將 Dash 移出概覽轉變成 Dock" ++ ++#: Settings.ui.h:82 ++msgid "Created by" ++msgstr "作者" ++ ++#: Settings.ui.h:83 ++msgid "Webpage" ++msgstr "網頁" ++ ++#: Settings.ui.h:84 ++msgid "" ++"This program comes with ABSOLUTELY NO WARRANTY.\n" ++"See the GNU General Public License, version 2 or later for details." ++msgstr "" ++"本程式「絕無任何擔保」。\n" ++"請見 GNU " ++"通用公眾授權第 2 版,或後續版本 深入瞭解更多細節。" ++ ++#: Settings.ui.h:86 ++msgid "About" ++msgstr "關於" ++ ++#: Settings.ui.h:87 ++msgid "Customize minimum and maximum opacity values" ++msgstr "自訂最低與最高不透明值" ++ ++#: Settings.ui.h:88 ++msgid "Minimum opacity" ++msgstr "最小化不透明度" ++ ++#: Settings.ui.h:89 ++msgid "Maximum opacity" ++msgstr "最大化不透明度" ++ ++#: Settings.ui.h:90 ++msgid "Number overlay" ++msgstr "數字覆層" ++ ++#: Settings.ui.h:91 ++msgid "" ++"Temporarily show the application numbers over the icons, corresponding to " ++"the shortcut." ++msgstr "暫時在圖示上顯示應用程式數量,對應到快捷鍵。" ++ ++#: Settings.ui.h:92 ++msgid "Show the dock if it is hidden" ++msgstr "若隱藏時顯示 Dock" ++ ++#: Settings.ui.h:93 ++msgid "" ++"If using autohide, the dock will appear for a short time when triggering the " ++"shortcut." ++msgstr "若使用自動隱藏,則觸發快捷鍵時 Dock 會出現一段時間。" ++ ++#: Settings.ui.h:94 ++msgid "Shortcut for the options above" ++msgstr "上述選項的快捷鍵" ++ ++#: Settings.ui.h:95 ++msgid "Syntax: , , , " ++msgstr "語法:, , , " ++ ++#: Settings.ui.h:96 ++msgid "Hide timeout (s)" ++msgstr "隱藏等候時間" ++ ++#: Settings.ui.h:97 ++msgid "Show the dock by mouse hover on the screen edge." ++msgstr "滑鼠停駐在螢幕邊緣時顯示 Dock。" ++ ++#: Settings.ui.h:98 ++msgid "Autohide" ++msgstr "自動隱藏" ++ ++#: Settings.ui.h:99 ++msgid "Push to show: require pressure to show the dock" ++msgstr "推擠才顯示:需要一些壓力才會顯示 Dock" ++ ++#: Settings.ui.h:100 ++msgid "Enable in fullscreen mode" ++msgstr "在全螢幕模式啟用" ++ ++#: Settings.ui.h:101 ++msgid "Show the dock when it doesn't obstruct application windows." ++msgstr "在 Dock 不會遮到應用程式視窗時顯示。" ++ ++#: Settings.ui.h:102 ++msgid "Dodge windows" ++msgstr "躲避視窗" ++ ++#: Settings.ui.h:103 ++msgid "All windows" ++msgstr "所有視窗" ++ ++#: Settings.ui.h:104 ++msgid "Only focused application's windows" ++msgstr "僅聚焦中的應用程式視窗" ++ ++#: Settings.ui.h:105 ++msgid "Only maximized windows" ++msgstr "僅最大化的視窗" ++ ++#: Settings.ui.h:106 ++msgid "Animation duration (s)" ++msgstr "動畫時間長度" ++ ++#: Settings.ui.h:107 ++msgid "Show timeout (s)" ++msgstr "顯示等候秒數" ++ ++#: Settings.ui.h:108 ++msgid "Pressure threshold" ++msgstr "壓力閾值" ++ + #~ msgid "Application" + #~ msgstr "應用程式" + +@@ -348,12 +890,6 @@ msgstr "新增工作區" + #~ msgid "Normal" + #~ msgstr "一般" + +-#~ msgid "Left" +-#~ msgstr "左" +- +-#~ msgid "Right" +-#~ msgstr "右" +- + #~ msgid "Upside-down" + #~ msgstr "上下顛倒" + +@@ -594,3 +1130,12 @@ msgstr "新增工作區" + + #~ msgid "Busy" + #~ msgstr "忙碌" ++ ++#~ msgid "Adaptive" ++#~ msgstr "自適應" ++ ++#~ msgid "Show a dot for each windows of the application." ++#~ msgstr "為應用程式的每個視窗顯示圓點。" ++ ++#~ msgid "0.000" ++#~ msgstr "0.000" +-- +2.38.1 + + +From 6cad2aac52022030bcbbf03066fc08937f6d177f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 20 May 2015 18:55:47 +0200 +Subject: [PATCH 3/7] Add panel-favorites extension + +--- + extensions/panel-favorites/extension.js | 257 ++++++++++++++++++++ + extensions/panel-favorites/meson.build | 5 + + extensions/panel-favorites/metadata.json.in | 10 + + extensions/panel-favorites/stylesheet.css | 14 ++ + meson.build | 1 + + 5 files changed, 287 insertions(+) + create mode 100644 extensions/panel-favorites/extension.js + create mode 100644 extensions/panel-favorites/meson.build + create mode 100644 extensions/panel-favorites/metadata.json.in + create mode 100644 extensions/panel-favorites/stylesheet.css + +diff --git a/extensions/panel-favorites/extension.js b/extensions/panel-favorites/extension.js +new file mode 100644 +index 00000000..15da32da +--- /dev/null ++++ b/extensions/panel-favorites/extension.js +@@ -0,0 +1,257 @@ ++// Copyright (C) 2011-2013 R M Yorston ++// Licence: GPLv2+ ++ ++const Clutter = imports.gi.Clutter; ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const Lang = imports.lang; ++const Shell = imports.gi.Shell; ++const Signals = imports.signals; ++const St = imports.gi.St; ++ ++const AppFavorites = imports.ui.appFavorites; ++const Main = imports.ui.main; ++const Panel = imports.ui.panel; ++ ++const PANEL_LAUNCHER_LABEL_SHOW_TIME = 150; ++const PANEL_LAUNCHER_LABEL_HIDE_TIME = 100; ++const PANEL_LAUNCHER_HOVER_TIMEOUT = 300; ++ ++const PanelLauncher = ++class PanelLauncher { ++ constructor(app) { ++ this.actor = new St.Button({ style_class: 'panel-button', ++ reactive: true }); ++ this.iconSize = 24; ++ let icon = app.create_icon_texture(this.iconSize); ++ this.actor.set_child(icon); ++ this.actor._delegate = this; ++ let text = app.get_name(); ++ if ( app.get_description() ) { ++ text += '\n' + app.get_description(); ++ } ++ ++ this.label = new St.Label({ style_class: 'panel-launcher-label'}); ++ this.label.set_text(text); ++ Main.layoutManager.addChrome(this.label); ++ this.label.hide(); ++ this.actor.label_actor = this.label; ++ ++ this._app = app; ++ this.actor.connect('clicked', () => this._app.open_new_window(-1)); ++ this.actor.connect('notify::hover', this._onHoverChanged.bind(this)); ++ this.actor.opacity = 207; ++ ++ this.actor.connect('notify::allocation', () => this._alloc()); ++ } ++ ++ _onHoverChanged(actor) { ++ actor.opacity = actor.hover ? 255 : 207; ++ } ++ ++ _alloc() { ++ let size = this.actor.allocation.y2 - this.actor.allocation.y1 - 3; ++ if ( size >= 24 && size != this.iconSize ) { ++ this.actor.get_child().destroy(); ++ this.iconSize = size; ++ let icon = this._app.create_icon_texture(this.iconSize); ++ this.actor.set_child(icon); ++ } ++ } ++ ++ showLabel() { ++ this.label.opacity = 0; ++ this.label.show(); ++ ++ let [stageX, stageY] = this.actor.get_transformed_position(); ++ ++ let itemHeight = this.actor.allocation.y2 - this.actor.allocation.y1; ++ let itemWidth = this.actor.allocation.x2 - this.actor.allocation.x1; ++ let labelWidth = this.label.get_width(); ++ ++ let node = this.label.get_theme_node(); ++ let yOffset = node.get_length('-y-offset'); ++ ++ let y = stageY + itemHeight + yOffset; ++ let x = Math.floor(stageX + itemWidth/2 - labelWidth/2); ++ ++ let parent = this.label.get_parent(); ++ let parentWidth = parent.allocation.x2 - parent.allocation.x1; ++ ++ if ( Clutter.get_default_text_direction() == Clutter.TextDirection.LTR ) { ++ // stop long tooltips falling off the right of the screen ++ x = Math.min(x, parentWidth-labelWidth-6); ++ // but whatever happens don't let them fall of the left ++ x = Math.max(x, 6); ++ } ++ else { ++ x = Math.max(x, 6); ++ x = Math.min(x, parentWidth-labelWidth-6); ++ } ++ ++ this.label.set_position(x, y); ++ this.label.ease({ ++ opacity: 255, ++ duration: PANEL_LAUNCHER_LABEL_SHOW_TIME, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ }); ++ } ++ ++ hideLabel() { ++ this.label.opacity = 255; ++ this.label.ease({ ++ opacity: 0, ++ duration: PANEL_LAUNCHER_LABEL_HIDE_TIME, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ onComplete: () => this.label.hide(), ++ }); ++ } ++ ++ destroy() { ++ this.label.destroy(); ++ this.actor.destroy(); ++ } ++}; ++ ++const PanelFavorites = ++class PanelFavorites { ++ constructor() { ++ this._showLabelTimeoutId = 0; ++ this._resetHoverTimeoutId = 0; ++ this._labelShowing = false; ++ ++ this.actor = new St.BoxLayout({ name: 'panelFavorites', ++ x_expand: true, y_expand: true, ++ style_class: 'panel-favorites' }); ++ this._display(); ++ ++ this.container = new St.Bin({ child: this.actor }); ++ ++ this.actor.connect('destroy', this._onDestroy.bind(this)); ++ this._installChangedId = Shell.AppSystem.get_default().connect('installed-changed', this._redisplay.bind(this)); ++ this._changedId = AppFavorites.getAppFavorites().connect('changed', this._redisplay.bind(this)); ++ } ++ ++ _redisplay() { ++ for ( let i=0; i this._onHover(launcher)); ++ this._buttons[j] = launcher; ++ ++j; ++ } ++ } ++ ++ // this routine stolen from dash.js ++ _onHover(launcher) { ++ if ( launcher.actor.hover ) { ++ if (this._showLabelTimeoutId == 0) { ++ let timeout = this._labelShowing ? ++ 0 : PANEL_LAUNCHER_HOVER_TIMEOUT; ++ this._showLabelTimeoutId = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, ++ timeout, ++ () => { ++ this._labelShowing = true; ++ launcher.showLabel(); ++ this._showLabelTimeoutId = 0; ++ return GLib.SOURCE_REMOVE; ++ }); ++ if (this._resetHoverTimeoutId > 0) { ++ GLib.source_remove(this._resetHoverTimeoutId); ++ this._resetHoverTimeoutId = 0; ++ } ++ } ++ } else { ++ if (this._showLabelTimeoutId > 0) { ++ GLib.source_remove(this._showLabelTimeoutId); ++ this._showLabelTimeoutId = 0; ++ } ++ launcher.hideLabel(); ++ if (this._labelShowing) { ++ this._resetHoverTimeoutId = GLib.timeout_add( ++ GLib.PRIORITY_DEFAULT, ++ PANEL_LAUNCHER_HOVER_TIMEOUT, ++ () => { ++ this._labelShowing = false; ++ this._resetHoverTimeoutId = 0; ++ return GLib.SOURCE_REMOVE; ++ }); ++ } ++ } ++ } ++ ++ _onDestroy() { ++ if ( this._installChangedId != 0 ) { ++ Shell.AppSystem.get_default().disconnect(this._installChangedId); ++ this._installChangedId = 0; ++ } ++ ++ if ( this._changedId != 0 ) { ++ AppFavorites.getAppFavorites().disconnect(this._changedId); ++ this._changedId = 0; ++ } ++ } ++}; ++Signals.addSignalMethods(PanelFavorites.prototype); ++ ++let myAddToStatusArea; ++let panelFavorites; ++ ++function enable() { ++ Panel.Panel.prototype.myAddToStatusArea = myAddToStatusArea; ++ ++ // place panel to left of app menu, or failing that at right end of box ++ let siblings = Main.panel._leftBox.get_children(); ++ let appMenu = Main.panel.statusArea['appMenu']; ++ let pos = appMenu ? siblings.indexOf(appMenu.container) : siblings.length; ++ ++ panelFavorites = new PanelFavorites(); ++ Main.panel.myAddToStatusArea('panel-favorites', panelFavorites, ++ pos, 'left'); ++} ++ ++function disable() { ++ delete Panel.Panel.prototype.myAddToStatusArea; ++ ++ panelFavorites.actor.destroy(); ++ panelFavorites.emit('destroy'); ++ panelFavorites = null; ++} ++ ++function init() { ++ myAddToStatusArea = function(role, indicator, position, box) { ++ if (this.statusArea[role]) ++ throw new Error('Extension point conflict: there is already a status indicator for role ' + role); ++ ++ position = position || 0; ++ let boxes = { ++ left: this._leftBox, ++ center: this._centerBox, ++ right: this._rightBox ++ }; ++ let boxContainer = boxes[box] || this._rightBox; ++ this.statusArea[role] = indicator; ++ this._addToPanelBox(role, indicator, position, boxContainer); ++ return indicator; ++ }; ++} +diff --git a/extensions/panel-favorites/meson.build b/extensions/panel-favorites/meson.build +new file mode 100644 +index 00000000..48504f63 +--- /dev/null ++++ b/extensions/panel-favorites/meson.build +@@ -0,0 +1,5 @@ ++extension_data += configure_file( ++ input: metadata_name + '.in', ++ output: metadata_name, ++ configuration: metadata_conf ++) +diff --git a/extensions/panel-favorites/metadata.json.in b/extensions/panel-favorites/metadata.json.in +new file mode 100644 +index 00000000..037f2813 +--- /dev/null ++++ b/extensions/panel-favorites/metadata.json.in +@@ -0,0 +1,10 @@ ++{ ++"extension-id": "@extension_id@", ++"uuid": "@uuid@", ++"settings-schema": "@gschemaname@", ++"gettext-domain": "@gettext_domain@", ++"name": "Frippery Panel Favorites", ++"description": "Add launchers for Favorites to the panel", ++"shell-version": [ "@shell_current@" ], ++"url": "http://intgat.tigress.co.uk/rmy/extensions/index.html" ++} +diff --git a/extensions/panel-favorites/stylesheet.css b/extensions/panel-favorites/stylesheet.css +new file mode 100644 +index 00000000..120adacb +--- /dev/null ++++ b/extensions/panel-favorites/stylesheet.css +@@ -0,0 +1,14 @@ ++.panel-favorites { ++ spacing: 6px; ++} ++ ++.panel-launcher-label { ++ border-radius: 7px; ++ padding: 4px 12px; ++ background-color: rgba(0,0,0,0.9); ++ color: white; ++ text-align: center; ++ font-size: 9pt; ++ font-weight: bold; ++ -y-offset: 6px; ++} +diff --git a/meson.build b/meson.build +index e3d94918..12706001 100644 +--- a/meson.build ++++ b/meson.build +@@ -46,6 +46,7 @@ all_extensions += [ + 'auto-move-windows', + 'dash-to-dock', + 'native-window-placement', ++ 'panel-favorites', + 'top-icons', + 'user-theme' + ] +-- +2.38.1 + + +From dbd3ebbb2d3cf380f2c0a13f13618fedfd8bbad4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 4 Mar 2016 17:07:21 +0100 +Subject: [PATCH 4/7] Add updates-dialog extension + +--- + extensions/updates-dialog/extension.js | 504 ++++++++++++++++++ + extensions/updates-dialog/meson.build | 7 + + extensions/updates-dialog/metadata.json.in | 10 + + ...hell.extensions.updates-dialog.gschema.xml | 30 ++ + extensions/updates-dialog/stylesheet.css | 1 + + meson.build | 1 + + po/POTFILES.in | 2 + + 7 files changed, 555 insertions(+) + create mode 100644 extensions/updates-dialog/extension.js + create mode 100644 extensions/updates-dialog/meson.build + create mode 100644 extensions/updates-dialog/metadata.json.in + create mode 100644 extensions/updates-dialog/org.gnome.shell.extensions.updates-dialog.gschema.xml + create mode 100644 extensions/updates-dialog/stylesheet.css + +diff --git a/extensions/updates-dialog/extension.js b/extensions/updates-dialog/extension.js +new file mode 100644 +index 00000000..9fd9b33d +--- /dev/null ++++ b/extensions/updates-dialog/extension.js +@@ -0,0 +1,504 @@ ++/* ++ * Copyright (c) 2015 Red Hat, Inc. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License as ++ * published by the Free Software Foundation; either version 2 of the ++ * License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, see . ++ */ ++ ++/* exported enable disable */ ++ ++const { Clutter, Gio, GLib, GObject, PackageKitGlib: PkgKit, Pango, Polkit, St } = imports.gi; ++const Signals = imports.signals; ++ ++const EndSessionDialog = imports.ui.endSessionDialog; ++const ModalDialog = imports.ui.modalDialog; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++ ++const PkIface = ' \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++'; ++ ++const PkOfflineIface = ' \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++'; ++ ++const PkTransactionIface = ' \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++'; ++ ++const LoginManagerIface = ' \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++ \ ++'; ++ ++const PkProxy = Gio.DBusProxy.makeProxyWrapper(PkIface); ++const PkOfflineProxy = Gio.DBusProxy.makeProxyWrapper(PkOfflineIface); ++const PkTransactionProxy = Gio.DBusProxy.makeProxyWrapper(PkTransactionIface); ++const LoginManagerProxy = Gio.DBusProxy.makeProxyWrapper(LoginManagerIface); ++ ++let pkProxy = null; ++let pkOfflineProxy = null; ++let loginManagerProxy = null; ++let updatesDialog = null; ++let extensionSettings = null; ++let cancellable = null; ++ ++let updatesCheckInProgress = false; ++let updatesCheckRequested = false; ++let securityUpdates = []; ++ ++function getDetailText(period) { ++ let text = _('Important security updates need to be installed.\n'); ++ if (period < 60) { ++ text += ngettext( ++ 'You can close this dialog and get %d minute to finish your work.', ++ 'You can close this dialog and get %d minutes to finish your work.', ++ period) ++ .format(period); ++ } else { ++ text += ngettext( ++ 'You can close this dialog and get %d hour to finish your work.', ++ 'You can close this dialog and get %d hours to finish your work.', ++ Math.floor(period / 60)) ++ .format(Math.floor(period / 60)); ++ } ++ return text; ++} ++ ++const UpdatesDialog = GObject.registerClass({ ++ Signals: { 'done': {} }, ++}, class extends ModalDialog.ModalDialog { ++ _init(settings) { ++ super._init({ ++ styleClass: 'end-session-dialog', ++ destroyOnClose: false ++ }); ++ ++ this._gracePeriod = settings.get_uint('grace-period'); ++ this._gracePeriod = Math.min(Math.max(10, this._gracePeriod), 24 * 60); ++ this._lastWarningPeriod = settings.get_uint('last-warning-period'); ++ this._lastWarningPeriod = Math.min( ++ Math.max(1, this._lastWarningPeriod), ++ this._gracePeriod - 1); ++ this._lastWarnings = settings.get_uint('last-warnings'); ++ this._lastWarnings = Math.min( ++ Math.max(1, this._lastWarnings), ++ Math.floor((this._gracePeriod - 1) / this._lastWarningPeriod)); ++ ++ let messageLayout = new St.BoxLayout({ ++ vertical: true, ++ style_class: 'end-session-dialog-layout' ++ }); ++ this.contentLayout.add(messageLayout, { ++ x_fill: true, ++ y_fill: true, ++ y_expand: true ++ }); ++ ++ let subjectLabel = new St.Label({ ++ style_class: 'end-session-dialog-subject', ++ style: 'padding-bottom: 1em;', ++ text: _('Important security updates') ++ }); ++ messageLayout.add(subjectLabel, { ++ x_fill: false, ++ y_fill: false, ++ x_align: St.Align.START, ++ y_align: St.Align.START ++ }); ++ ++ this._detailLabel = new St.Label({ ++ style_class: 'end-session-dialog-description', ++ style: 'padding-bottom: 0em;', ++ text: getDetailText(this._gracePeriod) ++ }); ++ this._detailLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; ++ this._detailLabel.clutter_text.line_wrap = true; ++ ++ messageLayout.add(this._detailLabel, { ++ y_fill: true, ++ y_align: St.Align.START ++ }); ++ ++ let buttons = [{ ++ action: this.close.bind(this), ++ label: _('Close'), ++ key: Clutter.Escape ++ }, { ++ action: this._done.bind(this), ++ label: _('Restart & Install') ++ }]; ++ ++ this.setButtons(buttons); ++ ++ this._openTimeoutId = 0; ++ this.connect('destroy', this._clearOpenTimeout.bind(this)); ++ ++ this._startTimer(); ++ } ++ ++ _clearOpenTimeout() { ++ if (this._openTimeoutId > 0) { ++ GLib.source_remove(this._openTimeoutId); ++ this._openTimeoutId = 0; ++ } ++ } ++ ++ tryOpen() { ++ if (this._openTimeoutId > 0 || this.open()) ++ return; ++ ++ this._openTimeoutId = GLib.timeout_add_seconds( ++ GLib.PRIORITY_DEFAULT, 1, () => { ++ if (!this.open()) ++ return GLib.SOURCE_CONTINUE; ++ ++ this._clearOpenTimeout(); ++ return GLib.SOURCE_REMOVE; ++ }); ++ } ++ ++ _startTimer() { ++ this._secondsLeft = this._gracePeriod * 60; ++ ++ this._timerId = GLib.timeout_add_seconds( ++ GLib.PRIORITY_DEFAULT, 1, () => { ++ this._secondsLeft -= 1; ++ let minutesLeft = this._secondsLeft / 60; ++ let periodLeft = Math.floor(minutesLeft); ++ ++ if (this._secondsLeft == 60 || ++ (periodLeft > 0 && periodLeft <= this._lastWarningPeriod * this._lastWarnings && ++ minutesLeft % this._lastWarningPeriod == 0)) { ++ this.tryOpen(); ++ this._detailLabel.text = getDetailText(periodLeft); ++ } ++ ++ if (this._secondsLeft > 0) { ++ if (this._secondsLeft < 60) { ++ let seconds = EndSessionDialog._roundSecondsToInterval( ++ this._gracePeriod * 60, this._secondsLeft, 10); ++ this._detailLabel.text = ++ _('Important security updates need to be installed now.\n') + ++ ngettext( ++ 'This computer will restart in %d second.', ++ 'This computer will restart in %d seconds.', ++ seconds).format(seconds); ++ } ++ return GLib.SOURCE_CONTINUE; ++ } ++ ++ this._done(); ++ return GLib.SOURCE_REMOVE; ++ }); ++ this.connect('destroy', () => { ++ if (this._timerId > 0) { ++ GLib.source_remove(this._timerId); ++ this._timerId = 0; ++ } ++ }); ++ } ++ ++ _done() { ++ this.emit('done'); ++ this.destroy(); ++ } ++ ++ getState() { ++ return [this._gracePeriod, this._lastWarningPeriod, this._lastWarnings, this._secondsLeft]; ++ } ++ ++ setState(state) { ++ [this._gracePeriod, this._lastWarningPeriod, this._lastWarnings, this._secondsLeft] = state; ++ } ++}); ++ ++function showDialog() { ++ if (updatesDialog) ++ return; ++ ++ updatesDialog = new UpdatesDialog(extensionSettings); ++ updatesDialog.tryOpen(); ++ updatesDialog.connect('destroy', () => updatesDialog = null); ++ updatesDialog.connect('done', () => { ++ if (pkOfflineProxy.TriggerAction == 'power-off' || ++ pkOfflineProxy.TriggerAction == 'reboot') { ++ loginManagerProxy.RebootRemote(false); ++ } else { ++ pkOfflineProxy.TriggerRemote('reboot', (result, error) => { ++ if (!error) ++ loginManagerProxy.RebootRemote(false); ++ else ++ log('Failed to trigger offline update: %s'.format(error.message)); ++ }); ++ } ++ }); ++} ++ ++function cancelDialog(save) { ++ if (!updatesDialog) ++ return; ++ ++ if (save) { ++ let state = GLib.Variant.new('(uuuu)', updatesDialog.getState()); ++ global.set_runtime_state(Me.uuid, state); ++ } ++ updatesDialog.destroy(); ++} ++ ++function restoreExistingState() { ++ let state = global.get_runtime_state('(uuuu)', Me.uuid); ++ if (state === null) ++ return false; ++ ++ global.set_runtime_state(Me.uuid, null); ++ showDialog(); ++ updatesDialog.setState(state.deep_unpack()); ++ return true; ++} ++ ++function syncState() { ++ if (!pkOfflineProxy || !loginManagerProxy) ++ return; ++ ++ if (restoreExistingState()) ++ return; ++ ++ if (!updatesCheckInProgress && ++ securityUpdates.length > 0 && ++ pkOfflineProxy.UpdatePrepared) ++ showDialog(); ++ else ++ cancelDialog(); ++} ++ ++function doPkTransaction(callback) { ++ if (!pkProxy) ++ return; ++ ++ pkProxy.CreateTransactionRemote((result, error) => { ++ if (error) { ++ log('Error creating PackageKit transaction: %s'.format(error.message)); ++ checkUpdatesDone(); ++ return; ++ } ++ ++ new PkTransactionProxy(Gio.DBus.system, ++ 'org.freedesktop.PackageKit', ++ String(result), ++ (proxy, error) => { ++ if (!error) { ++ proxy.SetHintsRemote( ++ ['background=true', 'interactive=false'], ++ (result, error) => { ++ if (error) { ++ log('Error connecting to PackageKit: %s'.format(error.message)); ++ checkUpdatesDone(); ++ return; ++ } ++ callback(proxy); ++ }); ++ } else { ++ log('Error connecting to PackageKit: %s'.format(error.message)); ++ } ++ }); ++ }); ++} ++ ++function pkUpdatePackages(proxy) { ++ proxy.connectSignal('Finished', (p, e, params) => { ++ let [exit, runtime_] = params; ++ ++ if (exit == PkgKit.ExitEnum.CANCELLED_PRIORITY) { ++ // try again ++ checkUpdates(); ++ } else if (exit != PkgKit.ExitEnum.SUCCESS) { ++ log('UpdatePackages failed: %s'.format(PkgKit.ExitEnum.to_string(exit))); ++ } ++ ++ checkUpdatesDone(); ++ }); ++ proxy.UpdatePackagesRemote(1 << PkgKit.TransactionFlagEnum.ONLY_DOWNLOAD, securityUpdates); ++} ++ ++function pkGetUpdates(proxy) { ++ proxy.connectSignal('Package', (p, e, params) => { ++ let [info, packageId, summary_] = params; ++ ++ if (info == PkgKit.InfoEnum.SECURITY) ++ securityUpdates.push(packageId); ++ }); ++ proxy.connectSignal('Finished', (p, e, params) => { ++ let [exit, runtime_] = params; ++ ++ if (exit == PkgKit.ExitEnum.SUCCESS) { ++ if (securityUpdates.length > 0) { ++ doPkTransaction(pkUpdatePackages); ++ return; ++ } ++ } else if (exit == PkgKit.ExitEnum.CANCELLED_PRIORITY) { ++ // try again ++ checkUpdates(); ++ } else { ++ log('GetUpdates failed: %s'.format(PkgKit.ExitEnum.to_string(exit))); ++ } ++ ++ checkUpdatesDone(); ++ }); ++ proxy.GetUpdatesRemote(0); ++} ++ ++function checkUpdatesDone() { ++ updatesCheckInProgress = false; ++ if (updatesCheckRequested) { ++ updatesCheckRequested = false; ++ checkUpdates(); ++ } else { ++ syncState(); ++ } ++} ++ ++function checkUpdates() { ++ if (updatesCheckInProgress) { ++ updatesCheckRequested = true; ++ return; ++ } ++ updatesCheckInProgress = true; ++ securityUpdates = []; ++ doPkTransaction(pkGetUpdates); ++} ++ ++function initSystemProxies() { ++ new PkProxy(Gio.DBus.system, ++ 'org.freedesktop.PackageKit', ++ '/org/freedesktop/PackageKit', ++ (proxy, error) => { ++ if (!error) { ++ pkProxy = proxy; ++ let id = pkProxy.connectSignal('UpdatesChanged', checkUpdates); ++ pkProxy._signalId = id; ++ checkUpdates(); ++ } else { ++ log('Error connecting to PackageKit: %s'.format(error.message)); ++ } ++ }, ++ cancellable); ++ new PkOfflineProxy(Gio.DBus.system, ++ 'org.freedesktop.PackageKit', ++ '/org/freedesktop/PackageKit', ++ (proxy, error) => { ++ if (!error) { ++ pkOfflineProxy = proxy; ++ let id = pkOfflineProxy.connect('g-properties-changed', syncState); ++ pkOfflineProxy._signalId = id; ++ syncState(); ++ } else { ++ log('Error connecting to PackageKit: %s'.format(error.message)); ++ } ++ }, ++ cancellable); ++ new LoginManagerProxy(Gio.DBus.system, ++ 'org.freedesktop.login1', ++ '/org/freedesktop/login1', ++ (proxy, error) => { ++ if (!error) { ++ proxy.CanRebootRemote(cancellable, (result, error) => { ++ if (!error && result == 'yes') { ++ loginManagerProxy = proxy; ++ syncState(); ++ } else { ++ log('Reboot is not available'); ++ } ++ }); ++ } else { ++ log('Error connecting to Login manager: %s'.format(error.message)); ++ } ++ }, ++ cancellable); ++} ++ ++function enable() { ++ cancellable = new Gio.Cancellable(); ++ extensionSettings = ExtensionUtils.getSettings(); ++ Polkit.Permission.new('org.freedesktop.packagekit.trigger-offline-update', ++ null, ++ cancellable, ++ (p, result) => { ++ try { ++ let permission = Polkit.Permission.new_finish(result); ++ if (permission && permission.allowed) ++ initSystemProxies(); ++ else ++ throw (new Error('not allowed')); ++ } catch (e) { ++ log('No permission to trigger offline updates: %s'.format(e.toString())); ++ } ++ }); ++} ++ ++function disable() { ++ cancelDialog(true); ++ cancellable.cancel(); ++ cancellable = null; ++ extensionSettings = null; ++ updatesDialog = null; ++ loginManagerProxy = null; ++ if (pkOfflineProxy) { ++ pkOfflineProxy.disconnect(pkOfflineProxy._signalId); ++ pkOfflineProxy = null; ++ } ++ if (pkProxy) { ++ pkProxy.disconnectSignal(pkProxy._signalId); ++ pkProxy = null; ++ } ++} +diff --git a/extensions/updates-dialog/meson.build b/extensions/updates-dialog/meson.build +new file mode 100644 +index 00000000..585c02da +--- /dev/null ++++ b/extensions/updates-dialog/meson.build +@@ -0,0 +1,7 @@ ++extension_data += configure_file( ++ input: metadata_name + '.in', ++ output: metadata_name, ++ configuration: metadata_conf ++) ++ ++extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml') +diff --git a/extensions/updates-dialog/metadata.json.in b/extensions/updates-dialog/metadata.json.in +new file mode 100644 +index 00000000..9946abb5 +--- /dev/null ++++ b/extensions/updates-dialog/metadata.json.in +@@ -0,0 +1,10 @@ ++{ ++"extension-id": "@extension_id@", ++"uuid": "@uuid@", ++"settings-schema": "@gschemaname@", ++"gettext-domain": "@gettext_domain@", ++"name": "Updates Dialog", ++"description": "Shows a modal dialog when there are software updates.", ++"shell-version": [ "@shell_current@" ], ++"url": "http://rtcm.fedorapeople.org/updates-dialog" ++} +diff --git a/extensions/updates-dialog/org.gnome.shell.extensions.updates-dialog.gschema.xml b/extensions/updates-dialog/org.gnome.shell.extensions.updates-dialog.gschema.xml +new file mode 100644 +index 00000000..c08d33c4 +--- /dev/null ++++ b/extensions/updates-dialog/org.gnome.shell.extensions.updates-dialog.gschema.xml +@@ -0,0 +1,30 @@ ++ ++ ++ ++ ++ 300 ++ Grace period in minutes ++ ++ When the grace period is over, the computer will automatically ++ reboot and install security updates. ++ ++ ++ ++ 10 ++ Last warning dialog period ++ ++ A last warning dialog is displayed this many minutes before ++ the automatic reboot. ++ ++ ++ ++ 1 ++ Number of last warning dialogs ++ ++ How many warning dialogs are displayed. Each is displayed at ++ 'last-warning-period' minute intervals. ++ ++ ++ ++ +diff --git a/extensions/updates-dialog/stylesheet.css b/extensions/updates-dialog/stylesheet.css +new file mode 100644 +index 00000000..25134b65 +--- /dev/null ++++ b/extensions/updates-dialog/stylesheet.css +@@ -0,0 +1 @@ ++/* This extensions requires no special styling */ +diff --git a/meson.build b/meson.build +index 12706001..c609ae52 100644 +--- a/meson.build ++++ b/meson.build +@@ -48,6 +48,7 @@ all_extensions += [ + 'native-window-placement', + 'panel-favorites', + 'top-icons', ++ 'updates-dialog', + 'user-theme' + ] + +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 0ed12762..10b1d517 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -9,6 +9,8 @@ extensions/native-window-placement/org.gnome.shell.extensions.native-window-plac + extensions/places-menu/extension.js + extensions/places-menu/placeDisplay.js + extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml ++extensions/updates-dialog/extension.js ++extensions/updates-dialog/org.gnome.shell.extensions.updates-dialog.gschema.xml + extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml + extensions/window-list/extension.js + extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml +-- +2.38.1 + + +From 5de33c69acd297659ac3182e85f0fe32771dd75e Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Mon, 13 Aug 2018 17:28:41 +0200 +Subject: [PATCH 5/7] Add desktop icons extension + +--- + .../desktop-icons/createFolderDialog.js | 165 +++ + extensions/desktop-icons/createThumbnail.js | 35 + + extensions/desktop-icons/dbusUtils.js | 127 +++ + extensions/desktop-icons/desktopGrid.js | 782 ++++++++++++++ + extensions/desktop-icons/desktopIconsUtil.js | 164 +++ + extensions/desktop-icons/desktopManager.js | 856 ++++++++++++++++ + extensions/desktop-icons/extension.js | 75 ++ + extensions/desktop-icons/fileItem.js | 961 ++++++++++++++++++ + extensions/desktop-icons/meson.build | 20 + + extensions/desktop-icons/metadata.json.in | 11 + + extensions/desktop-icons/po/LINGUAS | 33 + + extensions/desktop-icons/po/POTFILES.in | 6 + + extensions/desktop-icons/po/ca.po | 218 ++++ + extensions/desktop-icons/po/cs.po | 235 +++++ + extensions/desktop-icons/po/da.po | 226 ++++ + extensions/desktop-icons/po/de.po | 232 +++++ + extensions/desktop-icons/po/el.po | 190 ++++ + extensions/desktop-icons/po/en_GB.po | 194 ++++ + extensions/desktop-icons/po/es.po | 257 +++++ + extensions/desktop-icons/po/eu.po | 192 ++++ + extensions/desktop-icons/po/fa.po | 187 ++++ + extensions/desktop-icons/po/fi.po | 231 +++++ + extensions/desktop-icons/po/fr.po | 225 ++++ + extensions/desktop-icons/po/fur.po | 227 +++++ + extensions/desktop-icons/po/hr.po | 228 +++++ + extensions/desktop-icons/po/hu.po | 228 +++++ + extensions/desktop-icons/po/id.po | 222 ++++ + extensions/desktop-icons/po/it.po | 189 ++++ + extensions/desktop-icons/po/ja.po | 221 ++++ + extensions/desktop-icons/po/kab.po | 222 ++++ + extensions/desktop-icons/po/ko.po | 223 ++++ + extensions/desktop-icons/po/meson.build | 1 + + extensions/desktop-icons/po/nl.po | 228 +++++ + extensions/desktop-icons/po/oc.po | 221 ++++ + extensions/desktop-icons/po/pl.po | 223 ++++ + extensions/desktop-icons/po/pt.po | 222 ++++ + extensions/desktop-icons/po/pt_BR.po | 235 +++++ + extensions/desktop-icons/po/ro.po | 223 ++++ + extensions/desktop-icons/po/ru.po | 197 ++++ + extensions/desktop-icons/po/sk.po | 222 ++++ + extensions/desktop-icons/po/sl.po | 227 +++++ + extensions/desktop-icons/po/sr.po | 220 ++++ + extensions/desktop-icons/po/sv.po | 239 +++++ + extensions/desktop-icons/po/tr.po | 231 +++++ + extensions/desktop-icons/po/uk.po | 223 ++++ + extensions/desktop-icons/po/zh_CN.po | 228 +++++ + extensions/desktop-icons/po/zh_TW.po | 220 ++++ + extensions/desktop-icons/prefs.js | 161 +++ + extensions/desktop-icons/schemas/meson.build | 6 + + ...shell.extensions.desktop-icons.gschema.xml | 30 + + extensions/desktop-icons/stylesheet.css | 42 + + extensions/desktop-icons/templateManager.js | 104 ++ + meson.build | 1 + + po/ca.po | 223 +++- + po/cs.po | 235 ++++- + po/da.po | 225 +++- + po/de.po | 243 ++++- + po/el.po | 206 +++- + po/en_GB.po | 206 +++- + po/es.po | 280 ++++- + po/eu.po | 192 +++- + po/fa.po | 266 ++++- + po/fi.po | 247 ++++- + po/fr.po | 229 ++++- + po/fur.po | 238 ++++- + po/hr.po | 233 ++++- + po/hu.po | 224 +++- + po/id.po | 226 +++- + po/it.po | 191 ++++ + po/ja.po | 233 ++++- + po/kab.po | 227 ++++- + po/ko.po | 228 ++++- + po/nl.po | 224 +++- + po/oc.po | 233 ++++- + po/pl.po | 222 +++- + po/pt.po | 237 ++++- + po/pt_BR.po | 260 ++++- + po/ro.po | 220 +++- + po/ru.po | 199 ++++ + po/sk.po | 220 +++- + po/sl.po | 234 ++++- + po/sr.po | 232 ++++- + po/sv.po | 239 ++++- + po/tr.po | 234 ++++- + po/uk.po | 247 ++++- + po/zh_CN.po | 229 ++++- + po/zh_TW.po | 241 ++++- + 87 files changed, 18670 insertions(+), 239 deletions(-) + create mode 100644 extensions/desktop-icons/createFolderDialog.js + create mode 100755 extensions/desktop-icons/createThumbnail.js + create mode 100644 extensions/desktop-icons/dbusUtils.js + create mode 100644 extensions/desktop-icons/desktopGrid.js + create mode 100644 extensions/desktop-icons/desktopIconsUtil.js + create mode 100644 extensions/desktop-icons/desktopManager.js + create mode 100644 extensions/desktop-icons/extension.js + create mode 100644 extensions/desktop-icons/fileItem.js + create mode 100644 extensions/desktop-icons/meson.build + create mode 100644 extensions/desktop-icons/metadata.json.in + create mode 100644 extensions/desktop-icons/po/LINGUAS + create mode 100644 extensions/desktop-icons/po/POTFILES.in + create mode 100644 extensions/desktop-icons/po/ca.po + create mode 100644 extensions/desktop-icons/po/cs.po + create mode 100644 extensions/desktop-icons/po/da.po + create mode 100644 extensions/desktop-icons/po/de.po + create mode 100644 extensions/desktop-icons/po/el.po + create mode 100644 extensions/desktop-icons/po/en_GB.po + create mode 100644 extensions/desktop-icons/po/es.po + create mode 100644 extensions/desktop-icons/po/eu.po + create mode 100644 extensions/desktop-icons/po/fa.po + create mode 100644 extensions/desktop-icons/po/fi.po + create mode 100644 extensions/desktop-icons/po/fr.po + create mode 100644 extensions/desktop-icons/po/fur.po + create mode 100644 extensions/desktop-icons/po/hr.po + create mode 100644 extensions/desktop-icons/po/hu.po + create mode 100644 extensions/desktop-icons/po/id.po + create mode 100644 extensions/desktop-icons/po/it.po + create mode 100644 extensions/desktop-icons/po/ja.po + create mode 100644 extensions/desktop-icons/po/kab.po + create mode 100644 extensions/desktop-icons/po/ko.po + create mode 100644 extensions/desktop-icons/po/meson.build + create mode 100644 extensions/desktop-icons/po/nl.po + create mode 100644 extensions/desktop-icons/po/oc.po + create mode 100644 extensions/desktop-icons/po/pl.po + create mode 100644 extensions/desktop-icons/po/pt.po + create mode 100644 extensions/desktop-icons/po/pt_BR.po + create mode 100644 extensions/desktop-icons/po/ro.po + create mode 100644 extensions/desktop-icons/po/ru.po + create mode 100644 extensions/desktop-icons/po/sk.po + create mode 100644 extensions/desktop-icons/po/sl.po + create mode 100644 extensions/desktop-icons/po/sr.po + create mode 100644 extensions/desktop-icons/po/sv.po + create mode 100644 extensions/desktop-icons/po/tr.po + create mode 100644 extensions/desktop-icons/po/uk.po + create mode 100644 extensions/desktop-icons/po/zh_CN.po + create mode 100644 extensions/desktop-icons/po/zh_TW.po + create mode 100644 extensions/desktop-icons/prefs.js + create mode 100644 extensions/desktop-icons/schemas/meson.build + create mode 100644 extensions/desktop-icons/schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml + create mode 100644 extensions/desktop-icons/stylesheet.css + create mode 100644 extensions/desktop-icons/templateManager.js + +diff --git a/extensions/desktop-icons/createFolderDialog.js b/extensions/desktop-icons/createFolderDialog.js +new file mode 100644 +index 00000000..027e4c6a +--- /dev/null ++++ b/extensions/desktop-icons/createFolderDialog.js +@@ -0,0 +1,165 @@ ++/* Desktop Icons GNOME Shell extension ++ * ++ * Copyright (C) 2019 Andrea Azzaronea ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++const { Clutter, GObject, GLib, Gio, Pango, St } = imports.gi; ++ ++const Signals = imports.signals; ++ ++const Dialog = imports.ui.dialog; ++const Gettext = imports.gettext.domain('gnome-shell-extensions'); ++const ModalDialog = imports.ui.modalDialog; ++const ShellEntry = imports.ui.shellEntry; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const DesktopIconsUtil = Me.imports.desktopIconsUtil; ++const Extension = Me.imports.extension; ++const Config = imports.misc.config; ++ ++const _ = Gettext.gettext; ++ ++const DIALOG_GROW_TIME = 100; ++ ++var CreateFolderDialog = GObject.registerClass({ ++ GTypeName: 'DesktopIcons_CreateFolderDialog', ++ Signals: { 'response': { param_types: [GObject.TYPE_STRING] } } ++}, class CreateFolderDialog extends ModalDialog.ModalDialog { ++ _init() { ++ super._init({ styleClass: 'create-folder-dialog' }); ++ ++ let dialogContent = new Dialog.MessageDialogContent({ ++ title: _('New folder name'), ++ }); ++ this.contentLayout.add_child(dialogContent); ++ ++ this._entry = new St.Entry({ style_class: 'create-folder-dialog-entry', ++ can_focus: true }); ++ ShellEntry.addContextMenu(this._entry); ++ this._entry.clutter_text.connect('activate', this._onEntryActivate.bind(this)); ++ this._entry.clutter_text.connect('text-changed', this._onTextChanged.bind(this)); ++ ++ this.setInitialKeyFocus(this._entry.clutter_text); ++ ++ dialogContent.add(this._entry); ++ ++ this._errorBox = new St.BoxLayout({ vertical: true }); ++ dialogContent.add_child(this._errorBox); ++ ++ this._errorMessage = new St.Label({ ++ style_class: 'create-folder-dialog-error-label', ++ y_expand: false, ++ x_expand: false, ++ }); ++ this._errorMessage.clutter_text.line_wrap = true; ++ this._errorBox.add_child(this._errorMessage); ++ ++ this._createButton = this.addButton({ action: this._onCreateButton.bind(this), ++ label: _('Create') }); ++ this.addButton({ action: this.close.bind(this), ++ label: _('Cancel'), ++ key: Clutter.KEY_Escape }); ++ this._onTextChanged(); ++ } ++ ++ _showError(message) { ++ this._errorMessage.set_text(message); ++ ++ if (!this._errorBox.visible) { ++ let [errorBoxMinHeight, errorBoxNaturalHeight] = this._errorBox.get_preferred_height(-1); ++ let parentActor = this._errorBox.get_parent(); ++ ++ parentActor.remove_all_transitions(); ++ parentActor.ease_property( ++ 'height', parentActor.height + errorBoxNaturalHeight, { ++ duration: DIALOG_GROW_TIME, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ onComplete: () => { ++ parentActor.set_height(-1); ++ this._errorBox.show(); ++ } ++ }); ++ } ++ } ++ ++ _hideError() { ++ if (this._errorBox.visible) { ++ let [errorBoxMinHeight, errorBoxNaturalHeight] = this._errorBox.get_preferred_height(-1); ++ let parentActor = this._errorBox.get_parent(); ++ ++ parentActor.remove_all_transitions(); ++ parentActor.ease_property( ++ 'height', parentActor.height - errorBoxNaturalHeight, { ++ duration: DIALOG_GROW_TIME, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ onComplete: () => { ++ parentActor.set_height(-1); ++ this._errorBox.hide(); ++ this._errorMessage.set_text(''); ++ } ++ }); ++ } ++ } ++ ++ _onCreateButton() { ++ this._onEntryActivate(); ++ } ++ ++ _onEntryActivate() { ++ if (!this._createButton.reactive) ++ return; ++ ++ this.emit('response', this._entry.get_text()); ++ this.close(); ++ } ++ ++ _onTextChanged() { ++ let text = this._entry.get_text(); ++ let is_valid = true; ++ ++ let found_name = false; ++ for(let name of Extension.desktopManager.getDesktopFileNames()) { ++ if (name === text) { ++ found_name = true; ++ break; ++ } ++ } ++ ++ if (text.trim().length == 0) { ++ is_valid = false; ++ this._hideError(); ++ } else if (text.includes('/')) { ++ is_valid = false; ++ this._showError(_('Folder names cannot contain “/”.')); ++ } else if (text === '.') { ++ is_valid = false; ++ this._showError(_('A folder cannot be called “.”.')); ++ } else if (text === '..') { ++ is_valid = false; ++ this._showError(_('A folder cannot be called “..”.')); ++ } else if (text.startsWith('.')) { ++ this._showError(_('Folders with “.” at the beginning of their name are hidden.')); ++ } else if (found_name) { ++ this._showError(_('There is already a file or folder with that name.')); ++ is_valid = false; ++ } else { ++ this._hideError(); ++ } ++ ++ this._createButton.reactive = is_valid; ++ } ++}); +diff --git a/extensions/desktop-icons/createThumbnail.js b/extensions/desktop-icons/createThumbnail.js +new file mode 100755 +index 00000000..212f6b79 +--- /dev/null ++++ b/extensions/desktop-icons/createThumbnail.js +@@ -0,0 +1,35 @@ ++#!/usr/bin/gjs ++ ++/* Desktop Icons GNOME Shell extension ++ * ++ * Copyright (C) 2018 Sergio Costas ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++const GnomeDesktop = imports.gi.GnomeDesktop; ++const Gio = imports.gi.Gio; ++ ++let thumbnailFactory = GnomeDesktop.DesktopThumbnailFactory.new(GnomeDesktop.DesktopThumbnailSize.LARGE); ++ ++let file = Gio.File.new_for_path(ARGV[0]); ++let fileUri = file.get_uri(); ++ ++let fileInfo = file.query_info('standard::content-type,time::modified', Gio.FileQueryInfoFlags.NONE, null); ++let modifiedTime = fileInfo.get_attribute_uint64('time::modified'); ++let thumbnailPixbuf = thumbnailFactory.generate_thumbnail(fileUri, fileInfo.get_content_type()); ++if (thumbnailPixbuf == null) ++ thumbnailFactory.create_failed_thumbnail(fileUri, modifiedTime); ++else ++ thumbnailFactory.save_thumbnail(thumbnailPixbuf, fileUri, modifiedTime); +diff --git a/extensions/desktop-icons/dbusUtils.js b/extensions/desktop-icons/dbusUtils.js +new file mode 100644 +index 00000000..b2bca421 +--- /dev/null ++++ b/extensions/desktop-icons/dbusUtils.js +@@ -0,0 +1,127 @@ ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++var NautilusFileOperationsProxy; ++var FreeDesktopFileManagerProxy; ++var GnomeNautilusPreviewerProxy; ++ ++const NautilusFileOperationsInterface = ` ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++`; ++ ++const NautilusFileOperationsProxyInterface = Gio.DBusProxy.makeProxyWrapper(NautilusFileOperationsInterface); ++ ++const FreeDesktopFileManagerInterface = ` ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++`; ++ ++const FreeDesktopFileManagerProxyInterface = Gio.DBusProxy.makeProxyWrapper(FreeDesktopFileManagerInterface); ++ ++const GnomeNautilusPreviewerInterface = ` ++ ++ ++ ++ ++ ++ ++ ++`; ++ ++const GnomeNautilusPreviewerProxyInterface = Gio.DBusProxy.makeProxyWrapper(GnomeNautilusPreviewerInterface); ++ ++function init() { ++ NautilusFileOperationsProxy = new NautilusFileOperationsProxyInterface( ++ Gio.DBus.session, ++ 'org.gnome.Nautilus', ++ '/org/gnome/Nautilus', ++ (proxy, error) => { ++ if (error) { ++ log('Error connecting to Nautilus'); ++ } ++ } ++ ); ++ ++ FreeDesktopFileManagerProxy = new FreeDesktopFileManagerProxyInterface( ++ Gio.DBus.session, ++ 'org.freedesktop.FileManager1', ++ '/org/freedesktop/FileManager1', ++ (proxy, error) => { ++ if (error) { ++ log('Error connecting to Nautilus'); ++ } ++ } ++ ); ++ ++ GnomeNautilusPreviewerProxy = new GnomeNautilusPreviewerProxyInterface( ++ Gio.DBus.session, ++ 'org.gnome.NautilusPreviewer', ++ '/org/gnome/NautilusPreviewer', ++ (proxy, error) => { ++ if (error) { ++ log('Error connecting to Nautilus Previewer'); ++ } ++ } ++ ); ++} ++ ++function openFileWithOtherApplication(filePath) { ++ let fdList = new Gio.UnixFDList(); ++ let channel = GLib.IOChannel.new_file(filePath, "r"); ++ fdList.append(channel.unix_get_fd()); ++ channel.set_close_on_unref(true); ++ let builder = GLib.VariantBuilder.new(GLib.VariantType.new("a{sv}")); ++ let options = builder.end(); ++ let parameters = GLib.Variant.new_tuple([GLib.Variant.new_string("0"), ++ GLib.Variant.new_handle(0), ++ options]); ++ Gio.bus_get(Gio.BusType.SESSION, null, ++ (source, result) => { ++ let dbus_connection = Gio.bus_get_finish(result); ++ dbus_connection.call_with_unix_fd_list("org.freedesktop.portal.Desktop", ++ "/org/freedesktop/portal/desktop", ++ "org.freedesktop.portal.OpenURI", ++ "OpenFile", ++ parameters, ++ GLib.VariantType.new("o"), ++ Gio.DBusCallFlags.NONE, ++ -1, ++ fdList, ++ null, ++ null); ++ } ++ ); ++} +diff --git a/extensions/desktop-icons/desktopGrid.js b/extensions/desktop-icons/desktopGrid.js +new file mode 100644 +index 00000000..002803c7 +--- /dev/null ++++ b/extensions/desktop-icons/desktopGrid.js +@@ -0,0 +1,782 @@ ++/* Desktop Icons GNOME Shell extension ++ * ++ * Copyright (C) 2017 Carlos Soriano ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++const Gtk = imports.gi.Gtk; ++const Clutter = imports.gi.Clutter; ++const St = imports.gi.St; ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const GObject = imports.gi.GObject; ++const Shell = imports.gi.Shell; ++ ++const Layout = imports.ui.layout; ++const Main = imports.ui.main; ++const BoxPointer = imports.ui.boxpointer; ++const PopupMenu = imports.ui.popupMenu; ++const GrabHelper = imports.ui.grabHelper; ++const Config = imports.misc.config; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const CreateFolderDialog = Me.imports.createFolderDialog; ++const Extension = Me.imports.extension; ++const FileItem = Me.imports.fileItem; ++const Prefs = Me.imports.prefs; ++const DBusUtils = Me.imports.dbusUtils; ++const DesktopIconsUtil = Me.imports.desktopIconsUtil; ++const Util = imports.misc.util; ++ ++const Clipboard = St.Clipboard.get_default(); ++const CLIPBOARD_TYPE = St.ClipboardType.CLIPBOARD; ++const Gettext = imports.gettext.domain('gnome-shell-extensions'); ++ ++const _ = Gettext.gettext; ++ ++ ++/* From NautilusFileUndoManagerState */ ++var UndoStatus = { ++ NONE: 0, ++ UNDO: 1, ++ REDO: 2, ++}; ++ ++var StoredCoordinates = { ++ PRESERVE: 0, ++ OVERWRITE:1, ++ ASSIGN:2, ++}; ++ ++var Placeholder = GObject.registerClass({ ++ GTypeName: 'DesktopIcons_Placeholder', ++}, class Placeholder extends St.Bin { ++}); ++ ++var DesktopGrid = GObject.registerClass({ ++ GTypeName: 'DesktopIcons_DesktopGrid', ++}, class DesktopGrid extends St.Widget { ++ _init(bgManager) { ++ this._bgManager = bgManager; ++ ++ this._fileItemHandlers = new Map(); ++ this._fileItems = []; ++ ++ this.layout = new Clutter.GridLayout({ ++ orientation: Clutter.Orientation.VERTICAL, ++ column_homogeneous: true, ++ row_homogeneous: true ++ }); ++ ++ this._actorLayout = new Clutter.BinLayout({ ++ x_align: Clutter.BinAlignment.FIXED, ++ y_align: Clutter.BinAlignment.FIXED ++ }); ++ ++ super._init({ ++ layout_manager: this._actorLayout ++ }); ++ this._delegate = this; ++ ++ this.connect('style-changed', () => { ++ if (this.isFirst) ++ Extension.desktopManager.scheduleReLayoutChildren(); ++ }); ++ ++ this._grid = new St.Widget({ ++ name: 'DesktopGrid', ++ layout_manager: this.layout, ++ reactive: true, ++ x_expand: true, ++ y_expand: true, ++ can_focus: true, ++ opacity: 255 ++ }); ++ this.add_child(this._grid); ++ ++ this._menuManager = new PopupMenu.PopupMenuManager(this); ++ ++ this._bgManager._container.add_child(this); ++ ++ let monitorIndex = bgManager._monitorIndex; ++ this._monitorConstraint = new Layout.MonitorConstraint({ ++ index: monitorIndex, ++ work_area: true ++ }); ++ this.add_constraint(this._monitorConstraint); ++ ++ this._addDesktopBackgroundMenu(); ++ ++ this._bgDestroyedId = bgManager.backgroundActor.connect('destroy', ++ () => this._backgroundDestroyed()); ++ ++ this._grid.connect('button-press-event', (actor, event) => this._onPressButton(actor, event)); ++ ++ this._grid.connect('key-press-event', this._onKeyPress.bind(this)); ++ ++ this._grid.connect('notify::allocation', () => Extension.desktopManager.scheduleReLayoutChildren()); ++ ++ let themeNodeBase = this.get_theme_node(); ++ let themeContext = St.ThemeContext.get_for_stage(global.stage); ++ let themeNode = St.ThemeNode.new(themeContext, null, ++ themeNodeBase.get_theme(), themeNodeBase.get_element_type(), ++ null, "file-item", null, "fake-id {}"); ++ this._extra_width = themeNode.get_margin(St.Side.LEFT) + ++ themeNode.get_margin(St.Side.RIGHT) + ++ themeNode.get_border_width(St.Side.LEFT) + ++ themeNode.get_border_width(St.Side.RIGHT) + ++ themeNode.get_horizontal_padding(); ++ this._extra_height = themeNode.get_margin(St.Side.TOP) + ++ themeNode.get_margin(St.Side.BOTTOM) + ++ themeNode.get_border_width(St.Side.TOP) + ++ themeNode.get_border_width(St.Side.BOTTOM) + ++ themeNode.get_vertical_padding(); ++ ++ this.connect('destroy', () => this._onDestroy()); ++ } ++ ++ _onKeyPress(actor, event) { ++ if (global.stage.get_key_focus() != actor) ++ return Clutter.EVENT_PROPAGATE; ++ ++ let symbol = event.get_key_symbol(); ++ let isCtrl = (event.get_state() & Clutter.ModifierType.CONTROL_MASK) != 0; ++ let isShift = (event.get_state() & Clutter.ModifierType.SHIFT_MASK) != 0; ++ ++ if (isCtrl && isShift && [Clutter.KEY_Z, Clutter.KEY_z].indexOf(symbol) > -1) { ++ this._doRedo(); ++ return Clutter.EVENT_STOP; ++ } ++ else if (isCtrl && [Clutter.KEY_Z, Clutter.KEY_z].indexOf(symbol) > -1) { ++ this._doUndo(); ++ return Clutter.EVENT_STOP; ++ } ++ else if (isCtrl && [Clutter.KEY_C, Clutter.KEY_c].indexOf(symbol) > -1) { ++ Extension.desktopManager.doCopy(); ++ return Clutter.EVENT_STOP; ++ } ++ else if (isCtrl && [Clutter.KEY_X, Clutter.KEY_x].indexOf(symbol) > -1) { ++ Extension.desktopManager.doCut(); ++ return Clutter.EVENT_STOP; ++ } ++ else if (isCtrl && [Clutter.KEY_V, Clutter.KEY_v].indexOf(symbol) > -1) { ++ this._doPaste(); ++ return Clutter.EVENT_STOP; ++ } ++ else if (symbol == Clutter.KEY_Return) { ++ Extension.desktopManager.doOpen(); ++ return Clutter.EVENT_STOP; ++ } ++ else if (symbol == Clutter.KEY_Delete) { ++ Extension.desktopManager.doTrash(); ++ return Clutter.EVENT_STOP; ++ } else if (symbol == Clutter.KEY_F2) { ++ // Support renaming other grids file items. ++ Extension.desktopManager.doRename(); ++ return Clutter.EVENT_STOP; ++ } else if (symbol == Clutter.KEY_space) { ++ Extension.desktopManager.doPreview(); ++ return Clutter.EVENT_STOP; ++ } ++ return Clutter.EVENT_PROPAGATE; ++ } ++ ++ _backgroundDestroyed() { ++ this._bgDestroyedId = 0; ++ if (this._bgManager == null) ++ return; ++ ++ if (this._bgManager._backgroundSource) { ++ this._bgDestroyedId = this._bgManager.backgroundActor.connect('destroy', ++ () => this._backgroundDestroyed()); ++ } else { ++ this.destroy(); ++ } ++ } ++ ++ _onDestroy() { ++ if (this._bgDestroyedId && this._bgManager.backgroundActor) ++ this._bgManager.backgroundActor.disconnect(this._bgDestroyedId); ++ this._bgDestroyedId = 0; ++ this._bgManager = null; ++ this._menuManager = null; ++ } ++ ++ _onNewFolderClicked() { ++ ++ let dialog = new CreateFolderDialog.CreateFolderDialog(); ++ ++ dialog.connect('response', (dialog, name) => { ++ let dir = DesktopIconsUtil.getDesktopDir().get_child(name); ++ DBusUtils.NautilusFileOperationsProxy.CreateFolderRemote(dir.get_uri(), ++ (result, error) => { ++ if (error) ++ throw new Error('Error creating new folder: ' + error.message); ++ } ++ ); ++ }); ++ ++ dialog.open(); ++ } ++ ++ _parseClipboardText(text) { ++ if (text === null) ++ return [false, false, null]; ++ ++ let lines = text.split('\n'); ++ let [mime, action, ...files] = lines; ++ ++ if (mime != 'x-special/nautilus-clipboard') ++ return [false, false, null]; ++ ++ if (!(['copy', 'cut'].includes(action))) ++ return [false, false, null]; ++ let isCut = action == 'cut'; ++ ++ /* Last line is empty due to the split */ ++ if (files.length <= 1) ++ return [false, false, null]; ++ /* Remove last line */ ++ files.pop(); ++ ++ return [true, isCut, files]; ++ } ++ ++ _doPaste() { ++ Clipboard.get_text(CLIPBOARD_TYPE, ++ (clipboard, text) => { ++ let [valid, is_cut, files] = this._parseClipboardText(text); ++ if (!valid) ++ return; ++ ++ let desktopDir = `${DesktopIconsUtil.getDesktopDir().get_uri()}`; ++ if (is_cut) { ++ DBusUtils.NautilusFileOperationsProxy.MoveURIsRemote(files, desktopDir, ++ (result, error) => { ++ if (error) ++ throw new Error('Error moving files: ' + error.message); ++ } ++ ); ++ } else { ++ DBusUtils.NautilusFileOperationsProxy.CopyURIsRemote(files, desktopDir, ++ (result, error) => { ++ if (error) ++ throw new Error('Error copying files: ' + error.message); ++ } ++ ); ++ } ++ } ++ ); ++ } ++ ++ _onPasteClicked() { ++ this._doPaste(); ++ } ++ ++ _doUndo() { ++ DBusUtils.NautilusFileOperationsProxy.UndoRemote( ++ (result, error) => { ++ if (error) ++ throw new Error('Error performing undo: ' + error.message); ++ } ++ ); ++ } ++ ++ _onUndoClicked() { ++ this._doUndo(); ++ } ++ ++ _doRedo() { ++ DBusUtils.NautilusFileOperationsProxy.RedoRemote( ++ (result, error) => { ++ if (error) ++ throw new Error('Error performing redo: ' + error.message); ++ } ++ ); ++ } ++ ++ _onRedoClicked() { ++ this._doRedo(); ++ } ++ ++ _onOpenDesktopInFilesClicked() { ++ Gio.AppInfo.launch_default_for_uri_async(DesktopIconsUtil.getDesktopDir().get_uri(), ++ null, null, ++ (source, result) => { ++ try { ++ Gio.AppInfo.launch_default_for_uri_finish(result); ++ } catch (e) { ++ log('Error opening Desktop in Files: ' + e.message); ++ } ++ } ++ ); ++ } ++ ++ _onOpenTerminalClicked() { ++ let desktopPath = DesktopIconsUtil.getDesktopDir().get_path(); ++ DesktopIconsUtil.launchTerminal(desktopPath); ++ } ++ ++ _syncUndoRedo() { ++ this._undoMenuItem.visible = DBusUtils.NautilusFileOperationsProxy.UndoStatus == UndoStatus.UNDO; ++ this._redoMenuItem.visible = DBusUtils.NautilusFileOperationsProxy.UndoStatus == UndoStatus.REDO; ++ } ++ ++ _undoStatusChanged(proxy, properties, test) { ++ if ('UndoStatus' in properties.deep_unpack()) ++ this._syncUndoRedo(); ++ } ++ ++ _createDesktopBackgroundMenu() { ++ let menu = new PopupMenu.PopupMenu(Main.layoutManager.dummyCursor, ++ 0, St.Side.TOP); ++ menu.addAction(_("New Folder"), () => this._onNewFolderClicked()); ++ this._submenu = new PopupMenu.PopupSubMenuMenuItem(_("New Document"), false); ++ menu.addMenuItem(this._submenu); ++ menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); ++ this._pasteMenuItem = menu.addAction(_("Paste"), () => this._onPasteClicked()); ++ this._undoMenuItem = menu.addAction(_("Undo"), () => this._onUndoClicked()); ++ this._redoMenuItem = menu.addAction(_("Redo"), () => this._onRedoClicked()); ++ menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); ++ menu.addAction(_("Show Desktop in Files"), () => this._onOpenDesktopInFilesClicked()); ++ menu.addAction(_("Open in Terminal"), () => this._onOpenTerminalClicked()); ++ menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); ++ menu.addSettingsAction(_("Change Background…"), 'gnome-background-panel.desktop'); ++ menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); ++ menu.addSettingsAction(_("Display Settings"), 'gnome-display-panel.desktop'); ++ menu.addSettingsAction(_("Settings"), 'gnome-control-center.desktop'); ++ ++ menu.actor.add_style_class_name('background-menu'); ++ ++ Main.layoutManager.uiGroup.add_child(menu.actor); ++ menu.actor.hide(); ++ ++ menu._propertiesChangedId = DBusUtils.NautilusFileOperationsProxy.connect('g-properties-changed', ++ this._undoStatusChanged.bind(this)); ++ this._syncUndoRedo(); ++ ++ menu.connect('destroy', ++ () => DBusUtils.NautilusFileOperationsProxy.disconnect(menu._propertiesChangedId)); ++ menu.connect('open-state-changed', ++ (popupm, isOpen) => { ++ if (isOpen) { ++ Clipboard.get_text(CLIPBOARD_TYPE, ++ (clipBoard, text) => { ++ let [valid, is_cut, files] = this._parseClipboardText(text); ++ this._pasteMenuItem.setSensitive(valid); ++ } ++ ); ++ } ++ } ++ ); ++ this._pasteMenuItem.setSensitive(false); ++ ++ return menu; ++ } ++ ++ _openMenu(x, y) { ++ Main.layoutManager.setDummyCursorGeometry(x, y, 0, 0); ++ this._submenu.menu.removeAll(); ++ let templates = Extension.templateManager.getTemplates(); ++ if (templates.length == 0) { ++ this._submenu.hide(); ++ } else { ++ for(let template of templates) { ++ this._submenu.menu.addAction(template["name"], () => {this._newDocument(template)}, template["icon"]); ++ } ++ this._submenu.show(); ++ } ++ this._desktopBackgroundMenu.open(BoxPointer.PopupAnimation.NONE); ++ /* Since the handler is in the press event it needs to ignore the release event ++ * to not immediately close the menu on release ++ */ ++ this._menuManager.ignoreRelease(); ++ } ++ ++ _newDocument(template) { ++ let file = Extension.templateManager.getTemplateFile(template["file"]); ++ if (file == null) ++ return; ++ let counter = 0; ++ let finalName = `${template["name"]}${template["extension"]}`; ++ let destination; ++ do { ++ if (counter != 0) { ++ finalName = `${template["name"]} ${counter}${template["extension"]}` ++ } ++ destination = Gio.File.new_for_path( ++ GLib.build_filenamev([GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DESKTOP), ++ finalName]) ++ ); ++ counter++; ++ } while(destination.query_exists(null)); ++ file.copy_async(destination, Gio.FileCopyFlags.NONE, GLib.PRIORITY_DEFAULT, null, null, (source, result) => { ++ try { ++ source.copy_finish(result); ++ } catch(e) { ++ log(`Failed to create template ${e.message}`); ++ } ++ }); ++ } ++ ++ _addFileItemTo(fileItem, column, row, coordinatesAction) { ++ let placeholder = this.layout.get_child_at(column, row); ++ placeholder.child = fileItem; ++ this._fileItems.push(fileItem); ++ let fileItemHandler = {}; ++ fileItemHandler.selectedId = fileItem.connect('selected', ++ this._onFileItemSelected.bind(this)); ++ fileItemHandler.renameId = fileItem.connect('rename-clicked', ++ this._onRenameClicked.bind(this)); ++ fileItemHandler.destroyId = fileItem.connect('destroy', () => { ++ this._fileItemHandlers.delete(fileItem); ++ }); ++ this._fileItemHandlers.set(fileItem, fileItemHandler); ++ ++ /* If this file is new in the Desktop and hasn't yet ++ * fixed coordinates, store the new possition to ensure ++ * that the next time it will be shown in the same possition. ++ * Also store the new possition if it has been moved by the user, ++ * and not triggered by a screen change. ++ */ ++ if ((fileItem.savedCoordinates == null) || (coordinatesAction == StoredCoordinates.OVERWRITE)) { ++ let [fileX, fileY] = placeholder.get_transformed_position(); ++ fileItem.savedCoordinates = [Math.round(fileX), Math.round(fileY)]; ++ } ++ } ++ ++ addFileItemCloseTo(fileItem, x, y, coordinatesAction) { ++ let [column, row] = this._getEmptyPlaceClosestTo(x, y, coordinatesAction); ++ fileItem.set_margins(this._extra_width, this._extra_height); ++ this._addFileItemTo(fileItem, column, row, coordinatesAction); ++ } ++ ++ _getEmptyPlaceClosestTo(x, y, coordinatesAction) { ++ ++ let [actorX, actorY] = this._grid.get_transformed_position(); ++ let actorWidth = this._grid.allocation.x2 - this._grid.allocation.x1; ++ let actorHeight = this._grid.allocation.y2 - this._grid.allocation.y1; ++ let placeX = Math.round((x - actorX) * this._columns / actorWidth); ++ let placeY = Math.round((y - actorY) * this._rows / actorHeight); ++ ++ placeX = DesktopIconsUtil.clamp(placeX, 0, this._columns - 1); ++ placeY = DesktopIconsUtil.clamp(placeY, 0, this._rows - 1); ++ if (this.layout.get_child_at(placeX, placeY).child == null) ++ return [placeX, placeY]; ++ let found = false; ++ let resColumn = null; ++ let resRow = null; ++ let minDistance = Infinity; ++ for (let column = 0; column < this._columns; column++) { ++ for (let row = 0; row < this._rows; row++) { ++ let placeholder = this.layout.get_child_at(column, row); ++ if (placeholder.child != null) ++ continue; ++ ++ let [proposedX, proposedY] = placeholder.get_transformed_position(); ++ if (coordinatesAction == StoredCoordinates.ASSIGN) ++ return [column, row]; ++ let distance = DesktopIconsUtil.distanceBetweenPoints(proposedX, proposedY, x, y); ++ if (distance < minDistance) { ++ found = true; ++ minDistance = distance; ++ resColumn = column; ++ resRow = row; ++ } ++ } ++ } ++ ++ if (!found) ++ throw new Error(`Not enough place at monitor ${this._bgManager._monitorIndex}`); ++ ++ return [resColumn, resRow]; ++ } ++ ++ removeFileItem(fileItem) { ++ let index = this._fileItems.indexOf(fileItem); ++ if (index > -1) ++ this._fileItems.splice(index, 1); ++ else ++ throw new Error('Error removing children from container'); ++ ++ let [column, row] = this._getPosOfFileItem(fileItem); ++ let placeholder = this.layout.get_child_at(column, row); ++ placeholder.child = null; ++ let fileItemHandler = this._fileItemHandlers.get(fileItem); ++ Object.values(fileItemHandler).forEach(id => fileItem.disconnect(id)); ++ this._fileItemHandlers.delete(fileItem); ++ } ++ ++ _fillPlaceholders() { ++ this._rows = this._getMaxRows(); ++ this._columns = this._getMaxColumns(); ++ for (let column = 0; column < this._columns; column++) { ++ for (let row = 0; row < this._rows; row++) { ++ this.layout.attach(new Placeholder(), column, row, 1, 1); ++ } ++ } ++ } ++ ++ usingNewAllocationAPI() { ++ return (this.get_fixed_position !== undefined); ++ } ++ ++ reset() { ++ let tmpFileItemsCopy = this._fileItems.slice(); ++ for (let fileItem of tmpFileItemsCopy) ++ this.removeFileItem(fileItem); ++ this._grid.remove_all_children(); ++ ++ this._fillPlaceholders(); ++ ++ if (this.usingNewAllocationAPI()) ++ this.allocate_preferred_size(0, 0); ++ } ++ ++ _onStageMotion(actor, event) { ++ if (this._drawingRubberBand) { ++ let [x, y] = event.get_coords(); ++ this._updateRubberBand(x, y); ++ this._selectFromRubberband(x, y); ++ } ++ return Clutter.EVENT_PROPAGATE; ++ } ++ ++ _onPressButton(actor, event) { ++ let button = event.get_button(); ++ let [x, y] = event.get_coords(); ++ ++ this._grid.grab_key_focus(); ++ ++ if (button == 1) { ++ let shiftPressed = !!(event.get_state() & Clutter.ModifierType.SHIFT_MASK); ++ let controlPressed = !!(event.get_state() & Clutter.ModifierType.CONTROL_MASK); ++ if (!shiftPressed && !controlPressed) ++ Extension.desktopManager.clearSelection(); ++ let [gridX, gridY] = this._grid.get_transformed_position(); ++ Extension.desktopManager.startRubberBand(x, y, gridX, gridY); ++ return Clutter.EVENT_STOP; ++ } ++ ++ if (button == 3) { ++ this._openMenu(x, y); ++ ++ return Clutter.EVENT_STOP; ++ } ++ ++ return Clutter.EVENT_PROPAGATE; ++ } ++ ++ _addDesktopBackgroundMenu() { ++ this._desktopBackgroundMenu = this._createDesktopBackgroundMenu(); ++ this._menuManager.addMenu(this._desktopBackgroundMenu); ++ ++ this.connect('destroy', () => { ++ this._desktopBackgroundMenu.destroy(); ++ this._desktopBackgroundMenu = null; ++ }); ++ } ++ ++ _getMaxColumns() { ++ let gridWidth = this._grid.allocation.x2 - this._grid.allocation.x1; ++ let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; ++ let desiredWidth = Prefs.getDesiredWidth(scaleFactor, this._extra_width); ++ return Math.floor(gridWidth / desiredWidth); ++ } ++ ++ _getMaxRows() { ++ let gridHeight = this._grid.allocation.y2 - this._grid.allocation.y1; ++ let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; ++ let desiredHeight = Prefs.getDesiredHeight(scaleFactor, this._extra_height); ++ return Math.floor(gridHeight / desiredHeight); ++ } ++ ++ acceptDrop(source, actor, x, y, time) { ++ /* Coordinates are relative to the grid, we want to transform them to ++ * absolute coordinates to work across monitors */ ++ let [gridX, gridY] = this.get_transformed_position(); ++ let [absoluteX, absoluteY] = [x + gridX, y + gridY]; ++ return Extension.desktopManager.acceptDrop(absoluteX, absoluteY); ++ } ++ ++ _getPosOfFileItem(itemToFind) { ++ if (itemToFind == null) ++ throw new Error('Error at _getPosOfFileItem: child cannot be null'); ++ ++ let found = false; ++ let column = 0; ++ let row = 0; ++ for (column = 0; column < this._columns; column++) { ++ for (row = 0; row < this._rows; row++) { ++ let item = this.layout.get_child_at(column, row); ++ if (item.child && item.child.file.equal(itemToFind.file)) { ++ found = true; ++ break; ++ } ++ } ++ ++ if (found) ++ break; ++ } ++ ++ if (!found) ++ throw new Error('Position of file item was not found'); ++ ++ return [column, row]; ++ } ++ ++ _onFileItemSelected(fileItem, keepCurrentSelection, rubberBandSelection, addToSelection) { ++ this._grid.grab_key_focus(); ++ } ++ ++ _onRenameClicked(fileItem) { ++ if (fileItem.menu && fileItem.menu.isOpen) { ++ let id = fileItem.menu.connect('menu-closed', () => { ++ fileItem.menu.disconnect(id); ++ this.doRename(fileItem); ++ }); ++ } else { ++ this.doRename(fileItem); ++ } ++ } ++ ++ doRename(fileItem) { ++ let renamePopup = new RenamePopup(fileItem); ++ this._menuManager.addMenu(renamePopup); ++ this._menuManager.ignoreRelease(); ++ ++ renamePopup.connect('menu-closed', () => renamePopup.destroy()); ++ renamePopup.open(); ++ } ++}); ++ ++var RenamePopupMenuItem = GObject.registerClass( ++class RenamePopupMenuItem extends PopupMenu.PopupBaseMenuItem { ++ _init(fileItem) { ++ super._init({ ++ style_class: 'rename-popup-item', ++ reactive: false, ++ }); ++ ++ if (PopupMenu.Ornament.HIDDEN !== undefined) ++ this.setOrnament(PopupMenu.Ornament.HIDDEN); ++ else /* Support version prior 3.34.1 */ ++ this._ornamentLabel.visible = false; ++ ++ this._fileItem = fileItem; ++ ++ // Entry ++ this._entry = new St.Entry({ ++ x_expand: true, ++ width: 200, ++ }); ++ this.add_child(this._entry); ++ ++ this._entry.clutter_text.connect( ++ 'notify::text', this._validate.bind(this)); ++ this._entry.clutter_text.connect( ++ 'activate', this._onRenameAccepted.bind(this)); ++ ++ // Rename button ++ this._button = new St.Button({ ++ style_class: 'button', ++ reactive: true, ++ button_mask: St.ButtonMask.ONE | St.ButtonMask.TWO, ++ can_focus: true, ++ label: _('Rename'), ++ }); ++ this.add_child(this._button); ++ this._button.connect('clicked', this._onRenameAccepted.bind(this)); ++ } ++ ++ vfunc_map() { ++ this._entry.text = this._fileItem.displayName; ++ this._entry.clutter_text.set_selection(0, -1); ++ super.vfunc_map(); ++ } ++ ++ vfunc_key_focus_in() { ++ super.vfunc_key_focus_in(); ++ this._entry.clutter_text.grab_key_focus(); ++ } ++ ++ _isValidFolderName() { ++ let newName = this._entry.text.trim(); ++ ++ return newName.length > 0 && newName.indexOf('/') === -1 && ++ newName != this._fileItem.displayName; ++ } ++ ++ _validate() { ++ this._button.reactive = this._isValidFolderName(); ++ } ++ ++ _onRenameAccepted() { ++ if (!this._isValidFolderName()) ++ return; ++ ++ DBusUtils.NautilusFileOperationsProxy.RenameFileRemote( ++ this._fileItem.file.get_uri(), ++ this._entry.text.trim(), ++ (result, error) => { ++ if (error) ++ throw new Error('Error renaming file: ' + error.message); ++ } ++ ); ++ ++ this.activate(Clutter.get_current_event()); ++ } ++}); ++ ++var RenamePopup = class RenameFolderMenu extends PopupMenu.PopupMenu { ++ constructor(fileItem) { ++ super(fileItem, 0.5, St.Side.TOP); ++ this.actor.add_style_class_name('rename-popup'); ++ ++ // We want to keep the item hovered while the menu is up ++ this.blockSourceEvents = true; ++ ++ let menuItem = new RenamePopupMenuItem(fileItem); ++ this.addMenuItem(menuItem); ++ ++ if (this.focusActor !== undefined) { ++ // Focus the text entry on menu pop-up, works starting 3.34.1 ++ this.focusActor = menuItem; ++ } else { ++ this.connect('open-state-changed', (_menu, state) => { ++ if (state) ++ this._openId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => { ++ delete this._openId; ++ menuItem.grab_key_focus() ++ }); ++ else if (this._openId) ++ GLib.source_remove(this._openId); ++ }); ++ } ++ ++ // Chain our visibility and lifecycle to that of the fileItem source ++ this._fileItemMappedId = fileItem.connect('notify::mapped', () => { ++ if (!fileItem.mapped) ++ this.close(); ++ }); ++ fileItem.connect('destroy', () => { ++ fileItem.disconnect(this._fileItemMappedId); ++ this.destroy(); ++ }); ++ ++ Main.uiGroup.add_actor(this.actor); ++ } ++}; +diff --git a/extensions/desktop-icons/desktopIconsUtil.js b/extensions/desktop-icons/desktopIconsUtil.js +new file mode 100644 +index 00000000..696c945e +--- /dev/null ++++ b/extensions/desktop-icons/desktopIconsUtil.js +@@ -0,0 +1,164 @@ ++/* Desktop Icons GNOME Shell extension ++ * ++ * Copyright (C) 2017 Carlos Soriano ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++const Gtk = imports.gi.Gtk; ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const Prefs = Me.imports.prefs; ++const Main = imports.ui.main; ++const ShellMountOperation = imports.ui.shellMountOperation; ++ ++const TERMINAL_SCHEMA = 'org.gnome.desktop.default-applications.terminal'; ++const EXEC_KEY = 'exec'; ++ ++var DEFAULT_ATTRIBUTES = 'metadata::*,standard::*,access::*,time::modified,unix::mode'; ++ ++function getDesktopDir() { ++ let desktopPath = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DESKTOP); ++ return Gio.File.new_for_commandline_arg(desktopPath); ++} ++ ++function clamp(value, min, max) { ++ return Math.max(Math.min(value, max), min); ++}; ++ ++function launchTerminal(workdir) { ++ let terminalSettings = new Gio.Settings({ schema_id: TERMINAL_SCHEMA }); ++ let exec = terminalSettings.get_string(EXEC_KEY); ++ let argv = [exec, `--working-directory=${workdir}`]; ++ ++ /* The following code has been extracted from GNOME Shell's ++ * source code in Misc.Util.trySpawn function and modified to ++ * set the working directory. ++ * ++ * https://gitlab.gnome.org/GNOME/gnome-shell/blob/gnome-3-30/js/misc/util.js ++ */ ++ ++ var success, pid; ++ try { ++ [success, pid] = GLib.spawn_async(workdir, argv, null, ++ GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD, ++ null); ++ } catch (err) { ++ /* Rewrite the error in case of ENOENT */ ++ if (err.matches(GLib.SpawnError, GLib.SpawnError.NOENT)) { ++ throw new GLib.SpawnError({ code: GLib.SpawnError.NOENT, ++ message: _("Command not found") }); ++ } else if (err instanceof GLib.Error) { ++ // The exception from gjs contains an error string like: ++ // Error invoking GLib.spawn_command_line_async: Failed to ++ // execute child process "foo" (No such file or directory) ++ // We are only interested in the part in the parentheses. (And ++ // we can't pattern match the text, since it gets localized.) ++ let message = err.message.replace(/.*\((.+)\)/, '$1'); ++ throw new (err.constructor)({ code: err.code, ++ message: message }); ++ } else { ++ throw err; ++ } ++ } ++ // Dummy child watch; we don't want to double-fork internally ++ // because then we lose the parent-child relationship, which ++ // can break polkit. See https://bugzilla.redhat.com//show_bug.cgi?id=819275 ++ GLib.child_watch_add(GLib.PRIORITY_DEFAULT, pid, () => {}); ++} ++ ++function distanceBetweenPoints(x, y, x2, y2) { ++ return (Math.pow(x - x2, 2) + Math.pow(y - y2, 2)); ++} ++ ++function getExtraFolders() { ++ let extraFolders = new Array(); ++ if (Prefs.settings.get_boolean('show-home')) { ++ extraFolders.push([Gio.File.new_for_commandline_arg(GLib.get_home_dir()), Prefs.FileType.USER_DIRECTORY_HOME]); ++ } ++ if (Prefs.settings.get_boolean('show-trash')) { ++ extraFolders.push([Gio.File.new_for_uri('trash:///'), Prefs.FileType.USER_DIRECTORY_TRASH]); ++ } ++ return extraFolders; ++} ++ ++function getFileExtensionOffset(filename, isDirectory) { ++ let offset = filename.length; ++ ++ if (!isDirectory) { ++ let doubleExtensions = ['.gz', '.bz2', '.sit', '.Z', '.bz', '.xz']; ++ for (let extension of doubleExtensions) { ++ if (filename.endsWith(extension)) { ++ offset -= extension.length; ++ filename = filename.substring(0, offset); ++ break; ++ } ++ } ++ let lastDot = filename.lastIndexOf('.'); ++ if (lastDot > 0) ++ offset = lastDot; ++ } ++ return offset; ++} ++ ++function getGtkClassBackgroundColor(classname, state) { ++ let widget = new Gtk.WidgetPath(); ++ widget.append_type(Gtk.Widget); ++ ++ let context = new Gtk.StyleContext(); ++ context.set_path(widget); ++ context.add_class(classname); ++ return context.get_background_color(state); ++} ++ ++// Reference the extension org.gnome.shell.extensions.drive-menu ++function eject(mount) { ++ let unmountArgs = [ ++ Gio.MountUnmountFlags.NONE, ++ (new ShellMountOperation.ShellMountOperation(mount)).mountOp, ++ null, // Gio.Cancellable ++ ]; ++ ++ if (mount.can_eject()) { ++ mount.eject_with_operation(...unmountArgs, ++ _ejectFinish.bind(mount)); ++ } else { ++ mount.unmount_with_operation(...unmountArgs, ++ _unmountFinish.bind(mount)); ++ } ++} ++ ++function _unmountFinish(mount, result) { ++ try { ++ mount.unmount_with_operation_finish(result); ++ } catch (e) { ++ this._reportFailure(e); ++ } ++} ++ ++function _ejectFinish(mount, result) { ++ try { ++ mount.eject_with_operation_finish(result); ++ } catch (e) { ++ this._reportFailure(e); ++ } ++} ++ ++function _reportFailure(exception) { ++ // TRANSLATORS: %s is the filesystem name ++ let msg = _('Ejecting drive “%s” failed:').format(this.mount.get_name()); ++ Main.notifyError(msg, exception.message); ++} +diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js +new file mode 100644 +index 00000000..1aad8c67 +--- /dev/null ++++ b/extensions/desktop-icons/desktopManager.js +@@ -0,0 +1,856 @@ ++/* Desktop Icons GNOME Shell extension ++ * ++ * Copyright (C) 2017 Carlos Soriano ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++const Gtk = imports.gi.Gtk; ++const Clutter = imports.gi.Clutter; ++const GObject = imports.gi.GObject; ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const St = imports.gi.St; ++const Mainloop = imports.mainloop; ++const Meta = imports.gi.Meta; ++ ++const Animation = imports.ui.animation; ++const Background = imports.ui.background; ++const DND = imports.ui.dnd; ++const Main = imports.ui.main; ++const GrabHelper = imports.ui.grabHelper; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const Extension = Me.imports.extension; ++const DesktopGrid = Me.imports.desktopGrid; ++const FileItem = Me.imports.fileItem; ++const Prefs = Me.imports.prefs; ++const DBusUtils = Me.imports.dbusUtils; ++const DesktopIconsUtil = Me.imports.desktopIconsUtil; ++ ++const { loadInterfaceXML } = imports.misc.fileUtils; ++ ++const Clipboard = St.Clipboard.get_default(); ++const CLIPBOARD_TYPE = St.ClipboardType.CLIPBOARD; ++ ++var S_IWOTH = 0x00002; ++ ++function getDpy() { ++ return global.screen || global.display; ++} ++ ++function findMonitorIndexForPos(x, y) { ++ return getDpy().get_monitor_index_for_rect(new Meta.Rectangle({x, y})); ++} ++ ++ ++var DesktopManager = GObject.registerClass({ ++ Properties: { ++ 'writable-by-others': GObject.ParamSpec.boolean( ++ 'writable-by-others', ++ 'WritableByOthers', ++ 'Whether the desktop\'s directory can be written by others (o+w unix permission)', ++ GObject.ParamFlags.READABLE, ++ false ++ ) ++ } ++}, class DesktopManager extends GObject.Object { ++ _init(params) { ++ super._init(params); ++ ++ this._layoutChildrenId = 0; ++ this._deleteChildrenId = 0; ++ this._monitorDesktopDir = null; ++ this._desktopMonitorCancellable = null; ++ this._desktopGrids = {}; ++ this._fileItemHandlers = new Map(); ++ this._fileItems = new Map(); ++ this._dragCancelled = false; ++ this._queryFileInfoCancellable = null; ++ this._unixMode = null; ++ this._writableByOthers = null; ++ this._discreteGpuAvailable = false; ++ ++ this._monitorsChangedId = Main.layoutManager.connect('monitors-changed', () => this._recreateDesktopIcons()); ++ this._rubberBand = new St.Widget({ style_class: 'rubber-band' }); ++ this._rubberBand.hide(); ++ Main.layoutManager._backgroundGroup.add_child(this._rubberBand); ++ this._grabHelper = new GrabHelper.GrabHelper(global.stage); ++ ++ this._mountMonitor = Gio.VolumeMonitor.get(); ++ this._mountAddedId = this._mountMonitor.connect('mount-added', (monitor, mount) => { ++ this._recreateDesktopIcons(); }); ++ this._mountRemovedId = this._mountMonitor.connect('mount-removed', (monitor, mount) => { ++ this._recreateDesktopIcons(); }); ++ ++ this._addDesktopIcons(); ++ this._monitorDesktopFolder(); ++ ++ this.settingsId = Prefs.settings.connect('changed', () => this._recreateDesktopIcons()); ++ this.gtkSettingsId = Prefs.gtkSettings.connect('changed', (obj, key) => { ++ if (key == 'show-hidden') ++ this._recreateDesktopIcons(); ++ }); ++ this.nautilusSettingsId = Prefs.nautilusSettings.connect('changed', (obj, key) => { ++ if (key == 'show-image-thumbnails') ++ this._recreateDesktopIcons(); ++ }); ++ ++ this._selection = new Set(); ++ this._currentSelection = new Set(); ++ this._inDrag = false; ++ this._dragXStart = Number.POSITIVE_INFINITY; ++ this._dragYStart = Number.POSITIVE_INFINITY; ++ ++ this._switcherooNotifyId = global.connect('notify::switcheroo-control', ++ () => this._updateDiscreteGpuAvailable()); ++ this._updateDiscreteGpuAvailable(); ++ } ++ ++ _updateDiscreteGpuAvailable() { ++ this._switcherooProxy = global.get_switcheroo_control(); ++ if (this._switcherooProxy) { ++ let prop = this._switcherooProxy.get_cached_property('HasDualGpu'); ++ this._discreteGpuAvailable = prop ? prop.unpack() : false; ++ } else { ++ this._discreteGpuAvailable = false; ++ } ++ } ++ ++ startRubberBand(x, y) { ++ this._rubberBandInitialX = x; ++ this._rubberBandInitialY = y; ++ this._initRubberBandColor(); ++ this._updateRubberBand(x, y); ++ this._rubberBand.show(); ++ this._grabHelper.grab({ actor: global.stage }); ++ Extension.lockActivitiesButton = true; ++ this._stageReleaseEventId = global.stage.connect('button-release-event', (actor, event) => { ++ this.endRubberBand(); ++ }); ++ this._rubberBandId = global.stage.connect('motion-event', (actor, event) => { ++ /* In some cases, when the user starts a rubberband selection and ends it ++ * (by releasing the left button) over a window instead of doing it over ++ * the desktop, the stage doesn't receive the "button-release" event. ++ * This happens currently with, at least, Dash to Dock extension, but ++ * it probably also happens with other applications or extensions. ++ * To fix this, we also end the rubberband selection if we detect mouse ++ * motion in the stage without the left button pressed during a ++ * rubberband selection. ++ * */ ++ let button = event.get_state(); ++ if (!(button & Clutter.ModifierType.BUTTON1_MASK)) { ++ this.endRubberBand(); ++ return; ++ } ++ [x, y] = event.get_coords(); ++ this._updateRubberBand(x, y); ++ let x0, y0, x1, y1; ++ if (x >= this._rubberBandInitialX) { ++ x0 = this._rubberBandInitialX; ++ x1 = x; ++ } else { ++ x1 = this._rubberBandInitialX; ++ x0 = x; ++ } ++ if (y >= this._rubberBandInitialY) { ++ y0 = this._rubberBandInitialY; ++ y1 = y; ++ } else { ++ y1 = this._rubberBandInitialY; ++ y0 = y; ++ } ++ for (let [fileUri, fileItem] of this._fileItems) { ++ fileItem.emit('selected', true, true, ++ fileItem.intersectsWith(x0, y0, x1 - x0, y1 - y0)); ++ } ++ }); ++ } ++ ++ endRubberBand() { ++ this._rubberBand.hide(); ++ Extension.lockActivitiesButton = false; ++ this._grabHelper.ungrab(); ++ global.stage.disconnect(this._rubberBandId); ++ global.stage.disconnect(this._stageReleaseEventId); ++ this._rubberBandId = 0; ++ this._stageReleaseEventId = 0; ++ ++ this._selection = new Set([...this._selection, ...this._currentSelection]); ++ this._currentSelection.clear(); ++ } ++ ++ _updateRubberBand(currentX, currentY) { ++ let x = this._rubberBandInitialX < currentX ? this._rubberBandInitialX ++ : currentX; ++ let y = this._rubberBandInitialY < currentY ? this._rubberBandInitialY ++ : currentY; ++ let width = Math.abs(this._rubberBandInitialX - currentX); ++ let height = Math.abs(this._rubberBandInitialY - currentY); ++ /* TODO: Convert to gobject.set for 3.30 */ ++ this._rubberBand.set_position(x, y); ++ this._rubberBand.set_size(width, height); ++ } ++ ++ _recreateDesktopIcons() { ++ this.clearSelection(); ++ this._destroyDesktopIcons(); ++ this._addDesktopIcons(); ++ } ++ ++ _addDesktopIcons() { ++ let first_element = true; ++ forEachBackgroundManager(bgManager => { ++ let newGrid = new DesktopGrid.DesktopGrid(bgManager); ++ newGrid.connect('destroy', (actor) => { ++ // if a grid loses its actor, remove it from the grid list ++ for (let grid in this._desktopGrids) ++ if (this._desktopGrids[grid] == actor) { ++ delete this._desktopGrids[grid]; ++ break; ++ } ++ }); ++ newGrid.isFirst = first_element; ++ first_element = false; ++ this._desktopGrids[bgManager._monitorIndex] = newGrid; ++ }); ++ ++ this._scanFiles(); ++ } ++ ++ _destroyDesktopIcons() { ++ Object.values(this._desktopGrids).forEach(grid => grid.destroy()); ++ this._desktopGrids = {}; ++ } ++ ++ /** ++ * Initialize rubberband color from the GTK rubberband class ++ * */ ++ _initRubberBandColor() { ++ let rgba = DesktopIconsUtil.getGtkClassBackgroundColor('rubberband', Gtk.StateFlags.NORMAL); ++ let background_color = ++ 'rgba(' + rgba.red * 255 + ', ' + rgba.green * 255 + ', ' + rgba.blue * 255 + ', 0.4)'; ++ this._rubberBand.set_style('background-color: ' + background_color); ++ } ++ ++ async _scanFiles() { ++ for (let [fileItem, fileItemHandler] of this._fileItemHandlers) ++ Object.values(fileItemHandler).forEach(id => fileItem.disconnect(id)); ++ ++ this._fileItemHandlers = new Map(); ++ ++ if (!this._unixMode) { ++ let desktopDir = DesktopIconsUtil.getDesktopDir(); ++ let fileInfo = desktopDir.query_info(Gio.FILE_ATTRIBUTE_UNIX_MODE, ++ Gio.FileQueryInfoFlags.NONE, ++ null); ++ this._unixMode = fileInfo.get_attribute_uint32(Gio.FILE_ATTRIBUTE_UNIX_MODE); ++ this._setWritableByOthers((this._unixMode & S_IWOTH) != 0); ++ } ++ ++ try { ++ let items = []; ++ for (let item of await this._enumerateDesktop()) ++ items.push(item); ++ for (let item of this._getMounts()) ++ items.push(item); ++ ++ let tmpFileItems = new Map(); ++ for (let [file, info, extra] of items) { ++ let fileItem = new FileItem.FileItem(file, info, extra); ++ tmpFileItems.set(fileItem.file.get_uri(), fileItem); ++ let fileItemHandler = {} ++ fileItemHandler.selectedId = fileItem.connect('selected', ++ this._onFileItemSelected.bind(this)); ++ fileItemHandler.destroyId = fileItem.connect('destroy', () => { ++ this._fileItemHandlers.delete(fileItem); ++ }); ++ this._fileItemHandlers.set(fileItem, fileItemHandler); ++ } ++ this._fileItems = tmpFileItems; ++ } catch (e) { ++ if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) ++ log(`Error loading desktop files ${e.message}`, logError(e)); ++ return; ++ } ++ ++ this.scheduleReLayoutChildren(); ++ } ++ ++ getDesktopFileNames () { ++ let fileList = []; ++ for (let [uri, item] of this._fileItems) { ++ fileList.push(item.fileName); ++ } ++ return fileList; ++ } ++ ++ _enumerateDesktop() { ++ return new Promise((resolve, reject) => { ++ if (this._desktopEnumerateCancellable) ++ this._desktopEnumerateCancellable.cancel(); ++ ++ this._desktopEnumerateCancellable = new Gio.Cancellable(); ++ ++ let desktopDir = DesktopIconsUtil.getDesktopDir(); ++ desktopDir.enumerate_children_async(DesktopIconsUtil.DEFAULT_ATTRIBUTES, ++ Gio.FileQueryInfoFlags.NONE, ++ GLib.PRIORITY_DEFAULT, ++ this._desktopEnumerateCancellable, ++ (source, result) => { ++ try { ++ let fileEnum = source.enumerate_children_finish(result); ++ let resultGenerator = function *() { ++ let info; ++ for (let [newFolder, extras] of DesktopIconsUtil.getExtraFolders()) { ++ yield [newFolder, newFolder.query_info(DesktopIconsUtil.DEFAULT_ATTRIBUTES, Gio.FileQueryInfoFlags.NONE, this._desktopEnumerateCancellable), extras]; ++ } ++ while ((info = fileEnum.next_file(null))) ++ yield [fileEnum.get_child(info), info, Prefs.FileType.NONE]; ++ }.bind(this); ++ resolve(resultGenerator()); ++ } catch (e) { ++ reject(e); ++ } ++ }); ++ }); ++ } ++ ++ _monitorDesktopFolder() { ++ if (this._monitorDesktopDir) { ++ this._monitorDesktopDir.cancel(); ++ this._monitorDesktopDir = null; ++ } ++ ++ let desktopDir = DesktopIconsUtil.getDesktopDir(); ++ this._monitorDesktopDir = desktopDir.monitor_directory(Gio.FileMonitorFlags.WATCH_MOVES, null); ++ this._monitorDesktopDir.set_rate_limit(1000); ++ this._monitorDesktopDir.connect('changed', (obj, file, otherFile, eventType) => this._updateDesktopIfChanged(file, otherFile, eventType)); ++ } ++ ++ _getMounts() { ++ let files = []; ++ if (!Prefs.settings.get_boolean('show-mount')) ++ return files; ++ ++ this._mountMonitor.get_mounts().forEach( mount => { ++ if (this._isNetworkMount(mount)) ++ return; ++ ++ let file = mount.get_root(); ++ let info = file.query_info(DesktopIconsUtil.DEFAULT_ATTRIBUTES, ++ Gio.FileQueryInfoFlags.NONE, ++ null); ++ files.push([file, info, Prefs.FileType.MOUNT_DISK]); ++ }); ++ ++ return files; ++ } ++ ++ _isNetworkMount(mount) { ++ let volume = mount.get_volume(); ++ if (!volume) ++ return true; ++ ++ return volume.get_identifier('class') == 'network'; ++ } ++ ++ checkIfSpecialFilesAreSelected() { ++ for (let fileItem of this._selection) { ++ if (fileItem.isSpecial) ++ return true; ++ } ++ return false; ++ } ++ ++ getNumberOfSelectedItems() { ++ return this._selection.size; ++ } ++ ++ get writableByOthers() { ++ return this._writableByOthers; ++ } ++ ++ _setWritableByOthers(value) { ++ if (value == this._writableByOthers) ++ return; ++ ++ this._writableByOthers = value ++ this.notify('writable-by-others'); ++ } ++ ++ get discreteGpuAvailable() { ++ return this._discreteGpuAvailable; ++ } ++ ++ get switcherooProxyGPUs() { ++ if (!this._switcherooProxy) { ++ log('Could not apply discrete GPU environment, switcheroo-control not available'); ++ return null; ++ } ++ let prop = this._switcherooProxy.get_cached_property("GPUs"); ++ return prop ? prop.unpack() : null; ++ } ++ ++ _updateDesktopIfChanged (file, otherFile, eventType) { ++ let { ++ DELETED, MOVED_IN, MOVED_OUT, CREATED, RENAMED, CHANGES_DONE_HINT, ATTRIBUTE_CHANGED ++ } = Gio.FileMonitorEvent; ++ ++ let fileUri = file.get_uri(); ++ let fileItem = this._fileItems.get(fileUri); ++ switch(eventType) { ++ case RENAMED: ++ this._fileItems.delete(fileUri); ++ this._fileItems.set(otherFile.get_uri(), fileItem); ++ fileItem.onFileRenamed(otherFile); ++ return; ++ case CHANGES_DONE_HINT: ++ case ATTRIBUTE_CHANGED: ++ /* a file changed, rather than the desktop itself */ ++ let desktopDir = DesktopIconsUtil.getDesktopDir(); ++ if (fileItem && file.get_uri() != desktopDir.get_uri()) { ++ fileItem.onAttributeChanged(); ++ return; ++ } ++ ++ if (this._queryFileInfoCancellable) ++ this._queryFileInfoCancellable.cancel(); ++ ++ file.query_info_async(Gio.FILE_ATTRIBUTE_UNIX_MODE, ++ Gio.FileQueryInfoFlags.NONE, ++ GLib.PRIORITY_DEFAULT, ++ this._queryFileInfoCancellable, ++ (source, result) => { ++ try { ++ let info = source.query_info_finish(result); ++ this._queryFileInfoCancellable = null; ++ ++ this._unixMode = info.get_attribute_uint32(Gio.FILE_ATTRIBUTE_UNIX_MODE); ++ this._setWritableByOthers((this._unixMode & S_IWOTH) != 0); ++ ++ if (this._writableByOthers) ++ log(`desktop-icons: Desktop is writable by others - will not allow launching any desktop files`); ++ } catch(error) { ++ if (!error.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) ++ global.log('Error getting desktop unix mode: ' + error); ++ } ++ }); ++ ++ return; ++ } ++ ++ // Only get a subset of events we are interested in. ++ // Note that CREATED will emit a CHANGES_DONE_HINT ++ if (![DELETED, MOVED_IN, MOVED_OUT, CREATED].includes(eventType)) ++ return; ++ ++ this._recreateDesktopIcons(); ++ } ++ ++ _setupDnD() { ++ this._draggableContainer = new St.Widget({ ++ visible: true, ++ width: 1, ++ height: 1, ++ x: 0, ++ y: 0, ++ style_class: 'draggable' ++ }); ++ this._draggableContainer._delegate = this; ++ this._draggable = DND.makeDraggable(this._draggableContainer, ++ { ++ manualMode: true, ++ dragActorOpacity: 100 ++ }); ++ ++ this._draggable.connect('drag-cancelled', () => this._onDragCancelled()); ++ this._draggable.connect('drag-end', () => this._onDragEnd()); ++ ++ this._draggable._dragActorDropped = event => this._dragActorDropped(event); ++ } ++ ++ dragStart() { ++ if (this._inDrag) { ++ return; ++ } ++ ++ this._setupDnD(); ++ let event = Clutter.get_current_event(); ++ let [x, y] = event.get_coords(); ++ [this._dragXStart, this._dragYStart] = event.get_coords(); ++ this._inDrag = true; ++ ++ for (let fileItem of this._selection) { ++ let clone = new Clutter.Clone({ ++ source: fileItem, ++ reactive: false ++ }); ++ clone.x = fileItem.get_transformed_position()[0]; ++ clone.y = fileItem.get_transformed_position()[1]; ++ this._draggableContainer.add_child(clone); ++ } ++ ++ Main.layoutManager.uiGroup.add_child(this._draggableContainer); ++ ++ if (this._draggableContainer.get_fixed_position !== undefined) ++ this._draggableContainer.allocate_preferred_size(0, 0); ++ ++ this._draggable.startDrag(x, y, global.get_current_time(), event.get_event_sequence()); ++ } ++ ++ _onDragCancelled() { ++ let event = Clutter.get_current_event(); ++ let [x, y] = event.get_coords(); ++ this._dragCancelled = true; ++ } ++ ++ _onDragEnd() { ++ this._inDrag = false; ++ Main.layoutManager.uiGroup.remove_child(this._draggableContainer); ++ } ++ ++ _dragActorDropped(event) { ++ let [dropX, dropY] = event.get_coords(); ++ let target = this._draggable._dragActor.get_stage().get_actor_at_pos(Clutter.PickMode.ALL, ++ dropX, dropY); ++ ++ // We call observers only once per motion with the innermost ++ // target actor. If necessary, the observer can walk the ++ // parent itself. ++ let dropEvent = { ++ dropActor: this._draggable._dragActor, ++ targetActor: target, ++ clutterEvent: event ++ }; ++ for (let dragMonitor of DND.dragMonitors) { ++ let dropFunc = dragMonitor.dragDrop; ++ if (dropFunc) ++ switch (dropFunc(dropEvent)) { ++ case DragDropResult.FAILURE: ++ case DragDropResult.SUCCESS: ++ return true; ++ case DragDropResult.CONTINUE: ++ continue; ++ } ++ } ++ ++ // At this point it is too late to cancel a drag by destroying ++ // the actor, the fate of which is decided by acceptDrop and its ++ // side-effects ++ this._draggable._dragCancellable = false; ++ ++ let destroyActor = false; ++ while (target) { ++ if (target._delegate && target._delegate.acceptDrop) { ++ let [r, targX, targY] = target.transform_stage_point(dropX, dropY); ++ if (target._delegate.acceptDrop(this._draggable.actor._delegate, ++ this._draggable._dragActor, ++ targX, ++ targY, ++ event.get_time())) { ++ // If it accepted the drop without taking the actor, ++ // handle it ourselves. ++ if (this._draggable._dragActor.get_parent() == Main.uiGroup) { ++ if (this._draggable._restoreOnSuccess) { ++ this._draggable._restoreDragActor(event.get_time()); ++ return true; ++ } ++ else { ++ // We need this in order to make sure drag-end is fired ++ destroyActor = true; ++ } ++ } ++ ++ this._draggable._dragInProgress = false; ++ getDpy().set_cursor(Meta.Cursor.DEFAULT); ++ this._draggable.emit('drag-end', event.get_time(), true); ++ if (destroyActor) { ++ this._draggable._dragActor.destroy(); ++ } ++ this._draggable._dragComplete(); ++ ++ return true; ++ } ++ } ++ target = target.get_parent(); ++ } ++ ++ this._draggable._cancelDrag(event.get_time()); ++ ++ return true; ++ } ++ ++ acceptDrop(xEnd, yEnd) { ++ let savedCoordinates = new Map(); ++ let [xDiff, yDiff] = [xEnd - this._dragXStart, yEnd - this._dragYStart]; ++ /* Remove all items before dropping new ones, so we can freely reposition ++ * them. ++ */ ++ for (let item of this._selection) { ++ let [itemX, itemY] = item.get_transformed_position(); ++ let monitorIndex = findMonitorIndexForPos(itemX, itemY); ++ savedCoordinates.set(item, [itemX, itemY]); ++ this._desktopGrids[monitorIndex].removeFileItem(item); ++ } ++ ++ for (let item of this._selection) { ++ let [itemX, itemY] = savedCoordinates.get(item); ++ /* Set the new ideal position where the item drop should happen */ ++ let newFileX = Math.round(xDiff + itemX); ++ let newFileY = Math.round(yDiff + itemY); ++ let monitorIndex = findMonitorIndexForPos(newFileX, newFileY); ++ this._desktopGrids[monitorIndex].addFileItemCloseTo(item, newFileX, newFileY, DesktopGrid.StoredCoordinates.OVERWRITE); ++ } ++ ++ return true; ++ } ++ ++ selectionDropOnFileItem (fileItemDestination) { ++ if (!fileItemDestination.isDirectory) ++ return false; ++ ++ let droppedUris = []; ++ for (let fileItem of this._selection) { ++ if (fileItem.isSpecial) ++ return false; ++ if (fileItemDestination.file.get_uri() == fileItem.file.get_uri()) ++ return false; ++ droppedUris.push(fileItem.file.get_uri()); ++ } ++ ++ if (droppedUris.length == 0) ++ return true; ++ ++ DBusUtils.NautilusFileOperationsProxy.MoveURIsRemote(droppedUris, ++ fileItemDestination.file.get_uri(), ++ (result, error) => { ++ if (error) ++ throw new Error('Error moving files: ' + error.message); ++ } ++ ); ++ for (let fileItem of this._selection) { ++ fileItem.state = FileItem.State.GONE; ++ } ++ ++ this._recreateDesktopIcons(); ++ ++ return true; ++ } ++ ++ _resetGridsAndScheduleLayout() { ++ this._deleteChildrenId = 0; ++ ++ Object.values(this._desktopGrids).forEach((grid) => grid.reset()); ++ ++ if (!this._layoutChildrenId) ++ this._layoutChildrenId = GLib.idle_add(GLib.PRIORITY_LOW, () => this._layoutChildren()); ++ ++ return GLib.SOURCE_REMOVE; ++ } ++ ++ scheduleReLayoutChildren() { ++ if (this._deleteChildrenId != 0) ++ return; ++ ++ if (this._layoutChildrenId != 0) { ++ GLib.source_remove(this._layoutChildrenId); ++ this._layoutChildrenId = 0; ++ } ++ ++ ++ this._deleteChildrenId = GLib.idle_add(GLib.PRIORITY_LOW, () => this._resetGridsAndScheduleLayout()); ++ } ++ ++ _addFileItemCloseTo(item) { ++ let coordinates; ++ let x = 0; ++ let y = 0; ++ let coordinatesAction = DesktopGrid.StoredCoordinates.ASSIGN; ++ if (item.savedCoordinates != null) { ++ [x, y] = item.savedCoordinates; ++ coordinatesAction = DesktopGrid.StoredCoordinates.PRESERVE; ++ } ++ let monitorIndex = findMonitorIndexForPos(x, y); ++ let desktopGrid = this._desktopGrids[monitorIndex]; ++ try { ++ desktopGrid.addFileItemCloseTo(item, x, y, coordinatesAction); ++ } catch (e) { ++ log(`Error adding children to desktop: ${e.message}`); ++ } ++ } ++ ++ _layoutChildren() { ++ let showHidden = Prefs.gtkSettings.get_boolean('show-hidden'); ++ /* ++ * Paint the icons in two passes: ++ * * first pass paints those that have their coordinates defined in the metadata ++ * * second pass paints those new files that still don't have their definitive coordinates ++ */ ++ for (let [fileUri, fileItem] of this._fileItems) { ++ if (fileItem.savedCoordinates == null) ++ continue; ++ if (fileItem.state != FileItem.State.NORMAL) ++ continue; ++ if (!showHidden && fileItem.isHidden) ++ continue; ++ this._addFileItemCloseTo(fileItem); ++ } ++ ++ for (let [fileUri, fileItem] of this._fileItems) { ++ if (fileItem.savedCoordinates !== null) ++ continue; ++ if (fileItem.state != FileItem.State.NORMAL) ++ continue; ++ if (!showHidden && fileItem.isHidden) ++ continue; ++ this._addFileItemCloseTo(fileItem); ++ } ++ ++ this._layoutChildrenId = 0; ++ return GLib.SOURCE_REMOVE; ++ } ++ ++ doRename() { ++ if (this._selection.size != 1) ++ return; ++ ++ let item = [...this._selection][0]; ++ if (item.canRename()) ++ item.doRename(); ++ } ++ ++ doPreview() { ++ if (this._selection.size == 0) ++ return; ++ ++ let item = [...this._selection][0]; ++ DBusUtils.GnomeNautilusPreviewProxy.ShowFileRemote(item.file.get_uri(), 0, false); ++ } ++ ++ doOpen() { ++ for (let fileItem of this._selection) ++ fileItem.doOpen(); ++ } ++ ++ doTrash() { ++ DBusUtils.NautilusFileOperationsProxy.TrashFilesRemote([...this._selection].map((x) => { return x.file.get_uri(); }), ++ (source, error) => { ++ if (error) ++ throw new Error('Error trashing files on the desktop: ' + error.message); ++ } ++ ); ++ } ++ ++ doEmptyTrash() { ++ DBusUtils.NautilusFileOperationsProxy.EmptyTrashRemote( (source, error) => { ++ if (error) ++ throw new Error('Error trashing files on the desktop: ' + error.message); ++ }); ++ } ++ ++ _onFileItemSelected(fileItem, keepCurrentSelection, rubberBandSelection, addToSelection) { ++ ++ if (!keepCurrentSelection && !this._inDrag) ++ this.clearSelection(); ++ ++ let selection = keepCurrentSelection && rubberBandSelection ? this._currentSelection : this._selection; ++ if (addToSelection) ++ selection.add(fileItem); ++ else ++ selection.delete(fileItem); ++ ++ for (let [fileUri, fileItem] of this._fileItems) ++ fileItem.isSelected = this._currentSelection.has(fileItem) || this._selection.has(fileItem); ++ } ++ ++ clearSelection() { ++ for (let [fileUri, fileItem] of this._fileItems) ++ fileItem.isSelected = false; ++ this._selection = new Set(); ++ this._currentSelection = new Set(); ++ } ++ ++ _getClipboardText(isCopy) { ++ let action = isCopy ? 'copy' : 'cut'; ++ let text = `x-special/nautilus-clipboard\n${action}\n${ ++ [...this._selection].map(s => s.file.get_uri()).join('\n') ++ }\n`; ++ ++ return text; ++ } ++ ++ doCopy() { ++ Clipboard.set_text(CLIPBOARD_TYPE, this._getClipboardText(true)); ++ } ++ ++ doCut() { ++ Clipboard.set_text(CLIPBOARD_TYPE, this._getClipboardText(false)); ++ } ++ ++ destroy() { ++ if (this._monitorDesktopDir) ++ this._monitorDesktopDir.cancel(); ++ this._monitorDesktopDir = null; ++ ++ if (this._mountAddedId) ++ this._mountMonitor.disconnect(this._mountAddedId); ++ this._mountAddedId = 0; ++ if (this._mountRemovedId) ++ this._mountMonitor.disconnect(this._mountRemovedId); ++ this._mountRemovedId = 0; ++ ++ if (this.settingsId) ++ Prefs.settings.disconnect(this.settingsId); ++ this.settingsId = 0; ++ if (this.gtkSettingsId) ++ Prefs.gtkSettings.disconnect(this.gtkSettingsId); ++ this.gtkSettingsId = 0; ++ if (this.nautilusSettingsId) ++ Prefs.nautilusSettings.disconnect(this.nautilusSettingsId); ++ this.nautilusSettingsId = 0; ++ ++ if (this._layoutChildrenId) ++ GLib.source_remove(this._layoutChildrenId); ++ this._layoutChildrenId = 0; ++ ++ if (this._deleteChildrenId) ++ GLib.source_remove(this._deleteChildrenId); ++ this._deleteChildrenId = 0; ++ ++ if (this._monitorsChangedId) ++ Main.layoutManager.disconnect(this._monitorsChangedId); ++ this._monitorsChangedId = 0; ++ if (this._stageReleaseEventId) ++ global.stage.disconnect(this._stageReleaseEventId); ++ this._stageReleaseEventId = 0; ++ ++ if (this._rubberBandId) ++ global.stage.disconnect(this._rubberBandId); ++ this._rubberBandId = 0; ++ ++ this._rubberBand.destroy(); ++ ++ if (this._queryFileInfoCancellable) ++ this._queryFileInfoCancellable.cancel(); ++ ++ Object.values(this._desktopGrids).forEach(grid => grid.destroy()); ++ this._desktopGrids = {} ++ } ++}); ++ ++function forEachBackgroundManager(func) { ++ Main.layoutManager._bgManagers.forEach(func); ++} +diff --git a/extensions/desktop-icons/extension.js b/extensions/desktop-icons/extension.js +new file mode 100644 +index 00000000..be3e59d1 +--- /dev/null ++++ b/extensions/desktop-icons/extension.js +@@ -0,0 +1,75 @@ ++/* Desktop Icons GNOME Shell extension ++ * ++ * Copyright (C) 2017 Carlos Soriano ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++const Main = imports.ui.main; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const Prefs = Me.imports.prefs; ++const { DesktopManager } = Me.imports.desktopManager; ++const { TemplateManager } = Me.imports.templateManager; ++const DBusUtils = Me.imports.dbusUtils; ++ ++var desktopManager = null; ++var templateManager = null; ++var addBackgroundMenuOrig = null; ++var _startupPreparedId; ++var lockActivitiesButton = false; ++ ++var oldShouldToggleByCornerOrButtonFunction = null; ++ ++function init() { ++ addBackgroundMenuOrig = Main.layoutManager._addBackgroundMenu; ++ ++ Prefs.initTranslations(); ++} ++ ++function newShouldToggleByCornerOrButton() { ++ if (lockActivitiesButton) ++ return false; ++ else ++ return oldShouldToggleByCornerOrButtonFunction.bind(Main.overview); ++} ++ ++function enable() { ++ // register a new function to allow to lock the Activities button when doing a rubberband selection ++ oldShouldToggleByCornerOrButtonFunction = Main.overview.shouldToggleByCornerOrButton; ++ Main.overview.shouldToggleByCornerOrButton = newShouldToggleByCornerOrButton; ++ // wait until the startup process has ended ++ if (Main.layoutManager._startingUp) ++ _startupPreparedId = Main.layoutManager.connect('startup-complete', () => innerEnable(true)); ++ else ++ innerEnable(false); ++} ++ ++function innerEnable(disconnectSignal) { ++ if (disconnectSignal) ++ Main.layoutManager.disconnect(_startupPreparedId); ++ DBusUtils.init(); ++ Prefs.init(); ++ Main.layoutManager._addBackgroundMenu = function() {}; ++ desktopManager = new DesktopManager(); ++ templateManager = new TemplateManager(); ++} ++ ++function disable() { ++ desktopManager.destroy(); ++ templateManager.destroy(); ++ Main.layoutManager._addBackgroundMenu = addBackgroundMenuOrig; ++ Main.overview.shouldToggleByCornerOrButton = oldShouldToggleByCornerOrButtonFunction; ++} +diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js +new file mode 100644 +index 00000000..9987e7fe +--- /dev/null ++++ b/extensions/desktop-icons/fileItem.js +@@ -0,0 +1,961 @@ ++/* Desktop Icons GNOME Shell extension ++ * ++ * Copyright (C) 2017 Carlos Soriano ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++const Gtk = imports.gi.Gtk; ++const Clutter = imports.gi.Clutter; ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const GObject = imports.gi.GObject; ++const St = imports.gi.St; ++const Pango = imports.gi.Pango; ++const Meta = imports.gi.Meta; ++const GdkPixbuf = imports.gi.GdkPixbuf; ++const Cogl = imports.gi.Cogl; ++const GnomeDesktop = imports.gi.GnomeDesktop; ++ ++const Mainloop = imports.mainloop; ++ ++const Config = imports.misc.config; ++const Background = imports.ui.background; ++const Main = imports.ui.main; ++const PopupMenu = imports.ui.popupMenu; ++const Util = imports.misc.util; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const Extension = Me.imports.extension; ++const Prefs = Me.imports.prefs; ++const DBusUtils = Me.imports.dbusUtils; ++const DesktopIconsUtil = Me.imports.desktopIconsUtil; ++ ++const Gettext = imports.gettext.domain('gnome-shell-extensions'); ++ ++const _ = Gettext.gettext; ++ ++const DRAG_TRESHOLD = 8; ++ ++var S_IXUSR = 0o00100; ++var S_IWOTH = 0o00002; ++ ++var State = { ++ NORMAL: 0, ++ GONE: 1, ++}; ++ ++var FileItem = GObject.registerClass({ ++ GTypeName: 'DesktopIcons_FileItem', ++ Signals: { ++ 'rename-clicked': {}, ++ 'selected': { ++ param_types: [GObject.TYPE_BOOLEAN, GObject.TYPE_BOOLEAN, GObject.TYPE_BOOLEAN] ++ } ++ } ++}, class FileItem extends St.Bin { ++ _init(file, fileInfo, fileExtra) { ++ super._init({ visible: true }); ++ ++ this._fileExtra = fileExtra; ++ this._loadThumbnailDataCancellable = null; ++ this._thumbnailScriptWatch = 0; ++ this._setMetadataCancellable = null; ++ this._queryFileInfoCancellable = null; ++ this._isSpecial = this._fileExtra != Prefs.FileType.NONE; ++ this._lastClickTime = 0; ++ this._lastClickButton = 0; ++ this._clickCount = 0; ++ ++ this._file = file; ++ this._mount = null; ++ if (this._fileExtra == Prefs.FileType.MOUNT_DISK) ++ this._mount = this._file.find_enclosing_mount(null); ++ ++ this._savedCoordinates = null; ++ let savedCoordinates = fileInfo.get_attribute_as_string('metadata::nautilus-icon-position'); ++ if (savedCoordinates != null) ++ this._savedCoordinates = savedCoordinates.split(',').map(x => Number(x)); ++ ++ this._state = State.NORMAL; ++ ++ try { ++ this.set_fill(true, true); ++ } catch(error) {} ++ let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; ++ this._delegate = this; ++ this.connect('destroy', () => this._onDestroy()); ++ ++ this._container = new St.BoxLayout({ reactive: true, ++ track_hover: true, ++ can_focus: true, ++ style_class: 'file-item', ++ x_expand: true, ++ y_expand: true, ++ x_align: Clutter.ActorAlign.FILL, ++ vertical: true }); ++ this.set_child(this._container); ++ this._icon = new St.Bin(); ++ this._icon.set_height(Prefs.get_icon_size() * scaleFactor); ++ this._iconAllocationIdleId = 0; ++ this._iconAllocationId = this._icon.connect("notify::allocation", () => { ++ if (this._iconAllocationIdleId) ++ GLib.source_remove(this._iconAllocationIdleId); ++ this._iconAllocationIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => { ++ GLib.source_remove(this._iconAllocationIdleId); ++ this._iconAllocationIdleId = 0; ++ this._updateIcon(); ++ return GLib.SOURCE_REMOVE; ++ }); ++ }); ++ ++ this._iconContainer = new St.Bin({ visible: true }); ++ this._iconContainer.child = this._icon; ++ this._container.add_child(this._iconContainer); ++ ++ this._label = new St.Label({ ++ style_class: 'name-label' ++ }); ++ ++ this._container.add_child(this._label); ++ let clutterText = this._label.get_clutter_text(); ++ /* TODO: Convert to gobject.set for 3.30 */ ++ clutterText.set_line_wrap(true); ++ clutterText.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR); ++ clutterText.set_ellipsize(Pango.EllipsizeMode.END); ++ ++ this._container.connect('button-press-event', (actor, event) => this._onPressButton(actor, event)); ++ this._container.connect('motion-event', (actor, event) => this._onMotion(actor, event)); ++ this._container.connect('leave-event', (actor, event) => this._onLeave(actor, event)); ++ this._container.connect('enter-event', (actor, event) => this._onEnter(actor, event)); ++ this._container.connect('button-release-event', (actor, event) => this._onReleaseButton(actor, event)); ++ ++ /* Set the metadata and update relevant UI */ ++ this._updateMetadataFromFileInfo(fileInfo); ++ ++ this._menuManager = null; ++ this._menu = null; ++ this._updateIcon(); ++ ++ this._isSelected = false; ++ this._primaryButtonPressed = false; ++ if (this._attributeCanExecute && !this._isValidDesktopFile) ++ this._execLine = this.file.get_path(); ++ if (fileExtra == Prefs.FileType.USER_DIRECTORY_TRASH) { ++ // if this icon is the trash, monitor the state of the directory to update the icon ++ this._trashChanged = false; ++ this._queryTrashInfoCancellable = null; ++ this._scheduleTrashRefreshId = 0; ++ this._monitorTrashDir = this._file.monitor_directory(Gio.FileMonitorFlags.WATCH_MOVES, null); ++ this._monitorTrashId = this._monitorTrashDir.connect('changed', (obj, file, otherFile, eventType) => { ++ switch(eventType) { ++ case Gio.FileMonitorEvent.DELETED: ++ case Gio.FileMonitorEvent.MOVED_OUT: ++ case Gio.FileMonitorEvent.CREATED: ++ case Gio.FileMonitorEvent.MOVED_IN: ++ if (this._queryTrashInfoCancellable || this._scheduleTrashRefreshId) { ++ if (this._scheduleTrashRefreshId) ++ GLib.source_remove(this._scheduleTrashRefreshId); ++ this._scheduleTrashRefreshId = Mainloop.timeout_add(200, () => this._refreshTrashIcon()); ++ } else { ++ this._refreshTrashIcon(); ++ } ++ break; ++ } ++ }); ++ } ++ ++ this._writebleByOthersId = Extension.desktopManager.connect('notify::writable-by-others', () => { ++ if (!this._isValidDesktopFile) ++ return; ++ this._refreshMetadataAsync(true); ++ }); ++ } ++ ++ set_margins(width, height) { ++ let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; ++ this.set_width(Prefs.getDesiredWidth(scaleFactor, width)); ++ this.set_height(Prefs.getDesiredHeight(scaleFactor, height)); ++ } ++ ++ onAttributeChanged() { ++ this._refreshMetadataAsync(this._isDesktopFile); ++ } ++ ++ _onDestroy() { ++ /* Regular file data */ ++ if (this._setMetadataCancellable) ++ this._setMetadataCancellable.cancel(); ++ if (this._queryFileInfoCancellable) ++ this._queryFileInfoCancellable.cancel(); ++ ++ Extension.desktopManager.disconnect(this._writebleByOthersId); ++ ++ /* Thumbnailing */ ++ if (this._thumbnailScriptWatch) ++ GLib.source_remove(this._thumbnailScriptWatch); ++ if (this._loadThumbnailDataCancellable) ++ this._loadThumbnailDataCancellable.cancel(); ++ ++ /* Desktop file */ ++ if (this._monitorDesktopFileId) { ++ this._monitorDesktopFile.disconnect(this._monitorDesktopFileId); ++ this._monitorDesktopFile.cancel(); ++ } ++ ++ /* Trash */ ++ if (this._monitorTrashDir) { ++ this._monitorTrashDir.disconnect(this._monitorTrashId); ++ this._monitorTrashDir.cancel(); ++ } ++ if (this._queryTrashInfoCancellable) ++ this._queryTrashInfoCancellable.cancel(); ++ if (this._scheduleTrashRefreshId) ++ GLib.source_remove(this._scheduleTrashRefreshId); ++ ++ /* Icon */ ++ this._icon.disconnect(this._iconAllocationId); ++ if (this._iconAllocationIdleId) ++ GLib.source_remove(this._iconAllocationIdleId); ++ ++ /* Menu */ ++ this._removeMenu(); ++ } ++ ++ _refreshMetadataAsync(rebuild) { ++ if (this._queryFileInfoCancellable) ++ this._queryFileInfoCancellable.cancel(); ++ this._queryFileInfoCancellable = new Gio.Cancellable(); ++ this._file.query_info_async(DesktopIconsUtil.DEFAULT_ATTRIBUTES, ++ Gio.FileQueryInfoFlags.NONE, ++ GLib.PRIORITY_DEFAULT, ++ this._queryFileInfoCancellable, ++ (source, result) => { ++ try { ++ let newFileInfo = source.query_info_finish(result); ++ this._queryFileInfoCancellable = null; ++ this._updateMetadataFromFileInfo(newFileInfo); ++ if (rebuild) ++ this._recreateMenu(); ++ this._updateIcon(); ++ } catch(error) { ++ if (!error.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) ++ global.log("Error getting the file info: " + error); ++ } ++ }); ++ } ++ ++ _updateMetadataFromFileInfo(fileInfo) { ++ this._fileInfo = fileInfo; ++ ++ let oldLabelText = this._label.text; ++ ++ this._displayName = fileInfo.get_attribute_as_string('standard::display-name'); ++ this._attributeCanExecute = fileInfo.get_attribute_boolean('access::can-execute'); ++ this._unixmode = fileInfo.get_attribute_uint32('unix::mode'); ++ this._writableByOthers = (this._unixmode & S_IWOTH) != 0; ++ this._trusted = fileInfo.get_attribute_as_string('metadata::trusted') == 'true'; ++ this._attributeContentType = fileInfo.get_content_type(); ++ this._isDesktopFile = this._attributeContentType == 'application/x-desktop'; ++ ++ if (this._isDesktopFile && this._writableByOthers) ++ log(`desktop-icons: File ${this._displayName} is writable by others - will not allow launching`); ++ ++ if (this._isDesktopFile) { ++ this._desktopFile = Gio.DesktopAppInfo.new_from_filename(this._file.get_path()); ++ if (!this._desktopFile) { ++ log(`Couldn’t parse ${this._displayName} as a desktop file, will treat it as a regular file.`); ++ this._isValidDesktopFile = false; ++ } else { ++ this._isValidDesktopFile = true; ++ } ++ } else { ++ this._isValidDesktopFile = false; ++ } ++ ++ if (this.displayName != oldLabelText) { ++ this._label.text = this.displayName; ++ } ++ ++ this._fileType = fileInfo.get_file_type(); ++ this._isDirectory = this._fileType == Gio.FileType.DIRECTORY; ++ this._isSpecial = this._fileExtra != Prefs.FileType.NONE; ++ this._isHidden = fileInfo.get_is_hidden() | fileInfo.get_is_backup(); ++ this._isSymlink = fileInfo.get_is_symlink(); ++ this._modifiedTime = this._fileInfo.get_attribute_uint64("time::modified"); ++ /* ++ * This is a glib trick to detect broken symlinks. If a file is a symlink, the filetype ++ * points to the final file, unless it is broken; thus if the file type is SYMBOLIC_LINK, ++ * it must be a broken link. ++ * https://developer.gnome.org/gio/stable/GFile.html#g-file-query-info ++ */ ++ this._isBrokenSymlink = this._isSymlink && this._fileType == Gio.FileType.SYMBOLIC_LINK; ++ } ++ ++ onFileRenamed(file) { ++ this._file = file; ++ this._refreshMetadataAsync(false); ++ } ++ ++ _updateIcon() { ++ if (this._fileExtra == Prefs.FileType.USER_DIRECTORY_TRASH) { ++ this._icon.child = this._createEmblemedStIcon(this._fileInfo.get_icon(), null); ++ return; ++ } ++ if (this._fileExtra == Prefs.FileType.MOUNT_DISK) { ++ this._icon.child = this._createEmblemedStIcon(this._mount.get_icon(), null); ++ return; ++ } ++ ++ let thumbnailFactory = GnomeDesktop.DesktopThumbnailFactory.new(GnomeDesktop.DesktopThumbnailSize.LARGE); ++ if ((Prefs.nautilusSettings.get_string('show-image-thumbnails') != 'never') && ++ (thumbnailFactory.can_thumbnail(this._file.get_uri(), ++ this._attributeContentType, ++ this._modifiedTime))) { ++ let thumbnail = thumbnailFactory.lookup(this._file.get_uri(), this._modifiedTime); ++ if (thumbnail == null) { ++ if (!thumbnailFactory.has_valid_failed_thumbnail(this._file.get_uri(), ++ this._modifiedTime)) { ++ let argv = []; ++ argv.push(GLib.build_filenamev([ExtensionUtils.getCurrentExtension().path, ++ 'createThumbnail.js'])); ++ argv.push(this._file.get_path()); ++ let [success, pid] = GLib.spawn_async(null, argv, null, ++ GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD, null); ++ if (this._thumbnailScriptWatch) ++ GLib.source_remove(this._thumbnailScriptWatch); ++ this._thumbnailScriptWatch = GLib.child_watch_add(GLib.PRIORITY_DEFAULT, ++ pid, ++ (pid, exitCode) => { ++ this._thumbnailScriptWatch = 0; ++ if (exitCode == 0) ++ this._updateIcon(); ++ else ++ global.log('Failed to generate thumbnail for ' + this._filePath); ++ GLib.spawn_close_pid(pid); ++ return false; ++ } ++ ); ++ } ++ } else { ++ if (this._loadThumbnailDataCancellable) ++ this._loadThumbnailDataCancellable.cancel(); ++ this._loadThumbnailDataCancellable = new Gio.Cancellable(); ++ let thumbnailFile = Gio.File.new_for_path(thumbnail); ++ thumbnailFile.load_bytes_async(this._loadThumbnailDataCancellable, ++ (source, result) => { ++ try { ++ this._loadThumbnailDataCancellable = null; ++ let [thumbnailData, etag_out] = source.load_bytes_finish(result); ++ let thumbnailStream = Gio.MemoryInputStream.new_from_bytes(thumbnailData); ++ let thumbnailPixbuf = GdkPixbuf.Pixbuf.new_from_stream(thumbnailStream, null); ++ ++ if (thumbnailPixbuf != null) { ++ let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; ++ let thumbnailImage = new Clutter.Image(); ++ thumbnailImage.set_data(thumbnailPixbuf.get_pixels(), ++ thumbnailPixbuf.has_alpha ? Cogl.PixelFormat.RGBA_8888 : Cogl.PixelFormat.RGB_888, ++ thumbnailPixbuf.width, ++ thumbnailPixbuf.height, ++ thumbnailPixbuf.rowstride ++ ); ++ let icon = new Clutter.Actor(); ++ icon.set_content(thumbnailImage); ++ let containerWidth = (this._icon.allocation.x2 - this._icon.allocation.x1) * scaleFactor; ++ let containerHeight = Prefs.get_icon_size() * scaleFactor; ++ let containerAspectRatio = containerWidth / containerHeight; ++ let iconAspectRatio = thumbnailPixbuf.width / thumbnailPixbuf.height; ++ if (containerAspectRatio > iconAspectRatio) { ++ let iconWidth = containerHeight * iconAspectRatio; ++ icon.set_size(iconWidth, containerHeight); ++ let margin = (containerWidth - iconWidth) / 2; ++ icon.margin_left = Math.ceil(margin); ++ icon.margin_right = Math.floor(margin); ++ } else { ++ let iconHeight = containerWidth / iconAspectRatio; ++ icon.set_size(containerWidth, iconHeight); ++ let margin = (containerHeight - iconHeight) / 2; ++ icon.margin_top = Math.ceil(margin); ++ icon.margin_bottom = Math.floor(margin); ++ } ++ this._icon.child = icon; ++ } ++ } catch (error) { ++ if (!error.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) { ++ global.log('Error while loading thumbnail: ' + error); ++ this._icon.child = this._createEmblemedStIcon(this._fileInfo.get_icon(), null); ++ } ++ } ++ } ++ ); ++ } ++ } ++ ++ if (this._isBrokenSymlink) { ++ this._icon.child = this._createEmblemedStIcon(null, 'text-x-generic'); ++ } else { ++ if (this.trustedDesktopFile && this._desktopFile.has_key('Icon')) ++ this._icon.child = this._createEmblemedStIcon(null, this._desktopFile.get_string('Icon')); ++ else ++ this._icon.child = this._createEmblemedStIcon(this._fileInfo.get_icon(), null); ++ } ++ } ++ ++ _refreshTrashIcon() { ++ if (this._queryTrashInfoCancellable) ++ this._queryTrashInfoCancellable.cancel(); ++ this._queryTrashInfoCancellable = new Gio.Cancellable(); ++ ++ this._file.query_info_async(DesktopIconsUtil.DEFAULT_ATTRIBUTES, ++ Gio.FileQueryInfoFlags.NONE, ++ GLib.PRIORITY_DEFAULT, ++ this._queryTrashInfoCancellable, ++ (source, result) => { ++ try { ++ this._fileInfo = source.query_info_finish(result); ++ this._queryTrashInfoCancellable = null; ++ this._updateIcon(); ++ } catch(error) { ++ if (!error.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) ++ global.log('Error getting the number of files in the trash: ' + error); ++ } ++ }); ++ ++ this._scheduleTrashRefreshId = 0; ++ return false; ++ } ++ ++ get file() { ++ return this._file; ++ } ++ ++ get isHidden() { ++ return this._isHidden; ++ } ++ ++ _createEmblemedStIcon(icon, iconName) { ++ if (icon == null) { ++ if (GLib.path_is_absolute(iconName)) { ++ let iconFile = Gio.File.new_for_commandline_arg(iconName); ++ icon = new Gio.FileIcon({ file: iconFile }); ++ } else { ++ icon = Gio.ThemedIcon.new_with_default_fallbacks(iconName); ++ } ++ } ++ let itemIcon = Gio.EmblemedIcon.new(icon, null); ++ ++ if (this._isSymlink) { ++ if (this._isBrokenSymlink) ++ itemIcon.add_emblem(Gio.Emblem.new(Gio.ThemedIcon.new('emblem-unreadable'))); ++ else ++ itemIcon.add_emblem(Gio.Emblem.new(Gio.ThemedIcon.new('emblem-symbolic-link'))); ++ } else if (this.trustedDesktopFile) { ++ itemIcon.add_emblem(Gio.Emblem.new(Gio.ThemedIcon.new('emblem-symbolic-link'))); ++ } ++ ++ return new St.Icon({ gicon: itemIcon, ++ icon_size: Prefs.get_icon_size() ++ }); ++ } ++ ++ doRename() { ++ if (!this.canRename()) { ++ log (`Error: ${this.file.get_uri()} cannot be renamed`); ++ return; ++ } ++ ++ this.emit('rename-clicked'); ++ } ++ ++ _doOpenContext(context) { ++ if (this._isBrokenSymlink) { ++ log(`Error: Can’t open ${this.file.get_uri()} because it is a broken symlink.`); ++ return; ++ } ++ ++ if (this.trustedDesktopFile) { ++ this._desktopFile.launch_uris_as_manager([], context, GLib.SpawnFlags.SEARCH_PATH, null, null); ++ return; ++ } ++ ++ if (this._attributeCanExecute && ++ !this._isDirectory && ++ !this._isValidDesktopFile && ++ Gio.content_type_can_be_executable(this._attributeContentType)) { ++ if (this._execLine) ++ Util.spawnCommandLine(this._execLine); ++ return; ++ } ++ ++ Gio.AppInfo.launch_default_for_uri_async(this.file.get_uri(), ++ null, null, ++ (source, result) => { ++ try { ++ Gio.AppInfo.launch_default_for_uri_finish(result); ++ } catch (e) { ++ log('Error opening file ' + this.file.get_uri() + ': ' + e.message); ++ } ++ } ++ ); ++ } ++ ++ doOpen() { ++ this._doOpenContext(null); ++ } ++ ++ _doDiscreteGpu() { ++ let gpus = Extension.desktopManager.switcherooProxyGPUs; ++ if (!gpus) { ++ log('Could not apply discrete GPU environment, no GPUs in list'); ++ } ++ ++ for (let gpu in gpus) { ++ if (!gpus[gpu]) ++ continue; ++ ++ let default_variant = gpus[gpu].lookup_value('Default', null); ++ if (!default_variant || default_variant.get_boolean()) ++ continue; ++ ++ let env = gpus[gpu].lookup_value('Environment', null); ++ if (!env) ++ continue; ++ ++ let env_s = env.get_strv(); ++ let context = new Gio.AppLaunchContext; ++ for (let i = 0; i < env_s.length; i=i+2) { ++ context.setenv(env_s[i], env_s[i+1]); ++ } ++ this._doOpenContext(context); ++ return; ++ } ++ log('Could not find discrete GPU data in switcheroo-control'); ++ } ++ ++ _onCopyClicked() { ++ Extension.desktopManager.doCopy(); ++ } ++ ++ _onCutClicked() { ++ Extension.desktopManager.doCut(); ++ } ++ ++ _onShowInFilesClicked() { ++ ++ DBusUtils.FreeDesktopFileManagerProxy.ShowItemsRemote([this.file.get_uri()], '', ++ (result, error) => { ++ if (error) ++ log('Error showing file on desktop: ' + error.message); ++ } ++ ); ++ } ++ ++ _onPropertiesClicked() { ++ ++ DBusUtils.FreeDesktopFileManagerProxy.ShowItemPropertiesRemote([this.file.get_uri()], '', ++ (result, error) => { ++ if (error) ++ log('Error showing properties: ' + error.message); ++ } ++ ); ++ } ++ ++ _onMoveToTrashClicked() { ++ Extension.desktopManager.doTrash(); ++ } ++ ++ _onEmptyTrashClicked() { ++ Extension.desktopManager.doEmptyTrash(); ++ } ++ ++ _onEjectClicked() { ++ DesktopIconsUtil.eject(this._mount); ++ } ++ ++ get _allowLaunchingText() { ++ if (this.trustedDesktopFile) ++ return _("Don’t Allow Launching"); ++ ++ return _("Allow Launching"); ++ } ++ ++ get metadataTrusted() { ++ return this._trusted; ++ } ++ ++ set metadataTrusted(value) { ++ this._trusted = value; ++ ++ let info = new Gio.FileInfo(); ++ info.set_attribute_string('metadata::trusted', ++ value ? 'true' : 'false'); ++ this._file.set_attributes_async(info, ++ Gio.FileQueryInfoFlags.NONE, ++ GLib.PRIORITY_LOW, ++ null, ++ (source, result) => { ++ try { ++ source.set_attributes_finish(result); ++ this._refreshMetadataAsync(true); ++ } catch(e) { ++ log(`Failed to set metadata::trusted: ${e.message}`); ++ } ++ }); ++ } ++ ++ _onAllowDisallowLaunchingClicked() { ++ this.metadataTrusted = !this.trustedDesktopFile; ++ ++ /* ++ * we're marking as trusted, make the file executable too. note that we ++ * do not ever remove the executable bit, since we don't know who set ++ * it. ++ */ ++ if (this.metadataTrusted && !this._attributeCanExecute) { ++ let info = new Gio.FileInfo(); ++ let newUnixMode = this._unixmode | S_IXUSR; ++ info.set_attribute_uint32(Gio.FILE_ATTRIBUTE_UNIX_MODE, newUnixMode); ++ this._file.set_attributes_async(info, ++ Gio.FileQueryInfoFlags.NONE, ++ GLib.PRIORITY_LOW, ++ null, ++ (source, result) => { ++ try { ++ source.set_attributes_finish (result); ++ } catch(e) { ++ log(`Failed to set unix mode: ${e.message}`); ++ } ++ }); ++ } ++ } ++ ++ canRename() { ++ return !this.trustedDesktopFile && this._fileExtra == Prefs.FileType.NONE; ++ } ++ ++ _doOpenWith() { ++ DBusUtils.openFileWithOtherApplication(this.file.get_path()); ++ } ++ ++ _getSelectionStyle() { ++ let rgba = DesktopIconsUtil.getGtkClassBackgroundColor('view', Gtk.StateFlags.SELECTED); ++ let background_color = ++ 'rgba(' + rgba.red * 255 + ', ' + rgba.green * 255 + ', ' + rgba.blue * 255 + ', 0.6)'; ++ let border_color = ++ 'rgba(' + rgba.red * 255 + ', ' + rgba.green * 255 + ', ' + rgba.blue * 255 + ', 0.8)'; ++ ++ return 'background-color: ' + background_color + ';' + ++ 'border-color: ' + border_color + ';'; ++ } ++ ++ get menu() { ++ return this._menu; ++ } ++ ++ _removeMenu() { ++ if (this._menu != null) { ++ if (this._menuManager != null) ++ this._menuManager.removeMenu(this._menu); ++ ++ Main.layoutManager.uiGroup.remove_child(this._menu.actor); ++ this._menu.destroy(); ++ this._menu = null; ++ } ++ ++ this._menuManager = null; ++ } ++ ++ _recreateMenu() { ++ this._removeMenu(); ++ this._menuManager = new PopupMenu.PopupMenuManager(this); ++ let side = St.Side.LEFT; ++ if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) ++ side = St.Side.RIGHT; ++ this._menu = new PopupMenu.PopupMenu(this, 0.5, side); ++ this._menu.addAction(_('Open'), () => this.doOpen()); ++ switch (this._fileExtra) { ++ case Prefs.FileType.NONE: ++ if (!this._isDirectory) { ++ this._actionOpenWith = this._menu.addAction(_('Open With Other Application'), () => this._doOpenWith()); ++ if (Extension.desktopManager.discreteGpuAvailable && this.trustedDesktopFile) ++ this._menu.addAction(_('Launch using Dedicated Graphics Card'), () => this._doDiscreteGpu()); ++ } else { ++ this._actionOpenWith = null; ++ } ++ this._menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); ++ this._actionCut = this._menu.addAction(_('Cut'), () => this._onCutClicked()); ++ this._actionCopy = this._menu.addAction(_('Copy'), () => this._onCopyClicked()); ++ if (this.canRename()) ++ this._menu.addAction(_('Rename…'), () => this.doRename()); ++ this._actionTrash = this._menu.addAction(_('Move to Trash'), () => this._onMoveToTrashClicked()); ++ if (this._isValidDesktopFile && !Extension.desktopManager.writableByOthers && !this._writableByOthers) { ++ this._menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); ++ this._allowLaunchingMenuItem = this._menu.addAction(this._allowLaunchingText, ++ () => this._onAllowDisallowLaunchingClicked()); ++ ++ } ++ break; ++ case Prefs.FileType.USER_DIRECTORY_TRASH: ++ this._menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); ++ this._menu.addAction(_('Empty Trash'), () => this._onEmptyTrashClicked()); ++ break; ++ case Prefs.FileType.MOUNT_DISK: ++ this._menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); ++ this._menu.addAction(_('Eject'), () => this._onEjectClicked()); ++ break; ++ default: ++ break; ++ } ++ this._menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); ++ this._menu.addAction(_('Properties'), () => this._onPropertiesClicked()); ++ this._menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); ++ this._menu.addAction(_('Show in Files'), () => this._onShowInFilesClicked()); ++ if (this._isDirectory && this.file.get_path() != null) ++ this._actionOpenInTerminal = this._menu.addAction(_('Open in Terminal'), () => this._onOpenTerminalClicked()); ++ ++ this._menuManager.addMenu(this._menu); ++ ++ Main.layoutManager.uiGroup.add_child(this._menu.actor); ++ this._menu.actor.hide(); ++ } ++ ++ _ensureMenu() { ++ if (this._menu == null) ++ this._recreateMenu(); ++ ++ return this._menu; ++ } ++ ++ _onOpenTerminalClicked () { ++ DesktopIconsUtil.launchTerminal(this.file.get_path()); ++ } ++ ++ _updateClickState(event) { ++ let settings = Clutter.Settings.get_default(); ++ if ((event.get_button() == this._lastClickButton) && ++ ((event.get_time() - this._lastClickTime) < settings.double_click_time)) ++ this._clickCount++; ++ else ++ this._clickCount = 1; ++ ++ this._lastClickTime = event.get_time(); ++ this._lastClickButton = event.get_button(); ++ } ++ ++ _getClickCount() { ++ return this._clickCount; ++ } ++ ++ _onPressButton(actor, event) { ++ this._updateClickState(event); ++ let button = event.get_button(); ++ if (button == 3) { ++ if (!this.isSelected) ++ this.emit('selected', false, false, true); ++ this._ensureMenu().toggle(); ++ if (this._actionOpenWith) { ++ let allowOpenWith = (Extension.desktopManager.getNumberOfSelectedItems() == 1); ++ this._actionOpenWith.setSensitive(allowOpenWith); ++ } ++ let specialFilesSelected = Extension.desktopManager.checkIfSpecialFilesAreSelected(); ++ if (this._actionCut) ++ this._actionCut.setSensitive(!specialFilesSelected); ++ if (this._actionCopy) ++ this._actionCopy.setSensitive(!specialFilesSelected); ++ if (this._actionTrash) ++ this._actionTrash.setSensitive(!specialFilesSelected); ++ return Clutter.EVENT_STOP; ++ } else if (button == 1) { ++ if (this._getClickCount() == 1) { ++ let [x, y] = event.get_coords(); ++ this._primaryButtonPressed = true; ++ this._buttonPressInitialX = x; ++ this._buttonPressInitialY = y; ++ let shiftPressed = !!(event.get_state() & Clutter.ModifierType.SHIFT_MASK); ++ let controlPressed = !!(event.get_state() & Clutter.ModifierType.CONTROL_MASK); ++ if (controlPressed || shiftPressed) { ++ this.emit('selected', true, false, !this._isSelected); ++ } else { ++ if (!this._isSelected) ++ this.emit('selected', false, false, true); ++ } ++ } ++ return Clutter.EVENT_STOP; ++ } ++ ++ return Clutter.EVENT_PROPAGATE; ++ } ++ ++ _onEnter(actor, event) { ++ if (Prefs.CLICK_POLICY_SINGLE) ++ global.display.set_cursor(Meta.Cursor.POINTING_HAND); ++ else ++ global.display.set_cursor(Meta.Cursor.DEFAULT); ++ } ++ ++ _onLeave(actor, event) { ++ this._primaryButtonPressed = false; ++ if (Prefs.CLICK_POLICY_SINGLE) ++ global.display.set_cursor(Meta.Cursor.DEFAULT); ++ } ++ ++ _onMotion(actor, event) { ++ let [x, y] = event.get_coords(); ++ if (this._primaryButtonPressed) { ++ let xDiff = x - this._buttonPressInitialX; ++ let yDiff = y - this._buttonPressInitialY; ++ let distance = Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2)); ++ if (distance > DRAG_TRESHOLD) { ++ // Don't need to track anymore this if we start drag, and also ++ // avoids reentrance here ++ this._primaryButtonPressed = false; ++ let event = Clutter.get_current_event(); ++ let [x, y] = event.get_coords(); ++ Extension.desktopManager.dragStart(); ++ } ++ } ++ ++ return Clutter.EVENT_PROPAGATE; ++ } ++ ++ _onReleaseButton(actor, event) { ++ let button = event.get_button(); ++ if (button == 1) { ++ // primaryButtonPressed is TRUE only if the user has pressed the button ++ // over an icon, and if (s)he has not started a drag&drop operation ++ if (this._primaryButtonPressed) { ++ this._primaryButtonPressed = false; ++ let shiftPressed = !!(event.get_state() & Clutter.ModifierType.SHIFT_MASK); ++ let controlPressed = !!(event.get_state() & Clutter.ModifierType.CONTROL_MASK); ++ if (!controlPressed && !shiftPressed) ++ this.emit('selected', false, false, true); ++ if ((this._getClickCount() == 1) && Prefs.CLICK_POLICY_SINGLE && !shiftPressed && !controlPressed) ++ this.doOpen(); ++ return Clutter.EVENT_STOP; ++ } ++ if ((this._getClickCount() == 2) && (!Prefs.CLICK_POLICY_SINGLE)) ++ this.doOpen(); ++ } ++ return Clutter.EVENT_PROPAGATE; ++ } ++ ++ get savedCoordinates() { ++ return this._savedCoordinates; ++ } ++ ++ _onSetMetadataFileFinished(source, result) { ++ try { ++ let [success, info] = source.set_attributes_finish(result); ++ } catch (error) { ++ if (!error.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) ++ log(`Error setting metadata to desktop files ${error}`); ++ } ++ } ++ ++ set savedCoordinates(pos) { ++ if (this._setMetadataCancellable) ++ this._setMetadataCancellable.cancel(); ++ ++ this._setMetadataCancellable = new Gio.Cancellable(); ++ this._savedCoordinates = [pos[0], pos[1]]; ++ let info = new Gio.FileInfo(); ++ info.set_attribute_string('metadata::nautilus-icon-position', ++ `${pos[0]},${pos[1]}`); ++ this.file.set_attributes_async(info, ++ Gio.FileQueryInfoFlags.NONE, ++ GLib.PRIORITY_DEFAULT, ++ this._setMetadataCancellable, ++ (source, result) => { ++ this._setMetadataCancellable = null; ++ this._onSetMetadataFileFinished(source, result); ++ } ++ ); ++ } ++ ++ intersectsWith(argX, argY, argWidth, argHeight) { ++ let rect = new Meta.Rectangle({ x: argX, y: argY, width: argWidth, height: argHeight }); ++ let [containerX, containerY] = this._container.get_transformed_position(); ++ let boundingBox = new Meta.Rectangle({ x: containerX, ++ y: containerY, ++ width: this._container.allocation.x2 - this._container.allocation.x1, ++ height: this._container.allocation.y2 - this._container.allocation.y1 }); ++ let [intersects, _] = rect.intersect(boundingBox); ++ ++ return intersects; ++ } ++ ++ set isSelected(isSelected) { ++ isSelected = !!isSelected; ++ if (isSelected == this._isSelected) ++ return; ++ ++ if (isSelected) { ++ this._container.set_style(this._getSelectionStyle()); ++ } else { ++ this._container.set_style('background-color: transparent'); ++ this._container.set_style('border-color: transparent'); ++ } ++ ++ this._isSelected = isSelected; ++ } ++ ++ get isSelected() { ++ return this._isSelected; ++ } ++ ++ get isSpecial() { ++ return this._isSpecial; ++ } ++ ++ get state() { ++ return this._state; ++ } ++ ++ set state(state) { ++ if (state == this._state) ++ return; ++ ++ this._state = state; ++ } ++ ++ get isDirectory() { ++ return this._isDirectory; ++ } ++ ++ get trustedDesktopFile() { ++ return this._isValidDesktopFile && ++ this._attributeCanExecute && ++ this.metadataTrusted && ++ !Extension.desktopManager.writableByOthers && ++ !this._writableByOthers; ++ } ++ ++ get fileName() { ++ return this._fileInfo.get_name(); ++ } ++ ++ get displayName() { ++ if (this._fileExtra == Prefs.FileType.USER_DIRECTORY_HOME) ++ return _("Home"); ++ if (this.trustedDesktopFile) ++ return this._desktopFile.get_name(); ++ ++ return this._displayName || null; ++ } ++ ++ acceptDrop() { ++ return Extension.desktopManager.selectionDropOnFileItem(this); ++ } ++}); +diff --git a/extensions/desktop-icons/meson.build b/extensions/desktop-icons/meson.build +new file mode 100644 +index 00000000..8e691426 +--- /dev/null ++++ b/extensions/desktop-icons/meson.build +@@ -0,0 +1,20 @@ ++extension_data += configure_file( ++ input: metadata_name + '.in', ++ output: metadata_name, ++ configuration: metadata_conf ++) ++ ++extension_schemas += files(join_paths('schemas', metadata_conf.get('gschemaname') + '.gschema.xml')) ++ ++extension_sources += files( ++ 'createFolderDialog.js', ++ 'createThumbnail.js', ++ 'dbusUtils.js', ++ 'desktopGrid.js', ++ 'desktopIconsUtil.js', ++ 'desktopManager.js', ++ 'extension.js', ++ 'fileItem.js', ++ 'prefs.js', ++ 'templateManager.js' ++) +diff --git a/extensions/desktop-icons/metadata.json.in b/extensions/desktop-icons/metadata.json.in +new file mode 100644 +index 00000000..78cabf08 +--- /dev/null ++++ b/extensions/desktop-icons/metadata.json.in +@@ -0,0 +1,11 @@ ++{ ++"extension-id": "@extension_id@", ++"uuid": "@uuid@", ++"settings-schema": "@gschemaname@", ++"gettext-domain": "@gettext_domain@", ++"name": "Desktop Icons", ++"description": "Provide desktop icons support for classic mode", ++"original-authors": [ "csoriano@redhat.com" ], ++"shell-version": [ "@shell_current@" ], ++"url": "@url@" ++} +diff --git a/extensions/desktop-icons/po/LINGUAS b/extensions/desktop-icons/po/LINGUAS +new file mode 100644 +index 00000000..3ca08422 +--- /dev/null ++++ b/extensions/desktop-icons/po/LINGUAS +@@ -0,0 +1,33 @@ ++ca ++cs ++da ++de ++el ++en_GB ++es ++eu ++fa ++fi ++fr ++fur ++hr ++hu ++id ++it ++ja ++kab ++nl ++oc ++pl ++pt ++pt_BR ++ro ++ru ++sk ++sl ++sr ++sv ++tr ++uk ++zh_CN ++zh_TW +diff --git a/extensions/desktop-icons/po/POTFILES.in b/extensions/desktop-icons/po/POTFILES.in +new file mode 100644 +index 00000000..d9adb218 +--- /dev/null ++++ b/extensions/desktop-icons/po/POTFILES.in +@@ -0,0 +1,6 @@ ++createFolderDialog.js ++prefs.js ++desktopGrid.js ++desktopIconsUtil.js ++fileItem.js ++schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml +\ No newline at end of file +diff --git a/extensions/desktop-icons/po/ca.po b/extensions/desktop-icons/po/ca.po +new file mode 100644 +index 00000000..28152696 +--- /dev/null ++++ b/extensions/desktop-icons/po/ca.po +@@ -0,0 +1,218 @@ ++# This file is distributed under the same license as the PACKAGE package. ++# Jordi Mas i Hernandez , 2019-2020 ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: 1.0\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2019-07-22 10:24+0200\n" ++"Last-Translator: Jordi Mas \n" ++"Language-Team: Catalan \n" ++"Language: ca\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.2.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nom de la carpeta nova" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Crea" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Cancel·la" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Els noms de carpetes no poden contenir «/»." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Una carpeta no es pot anomenar «.»." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Una carpeta no es pot anomenar «..»." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Les carpetes amb un «.» a l'inici del seu nom s'amaguen." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Ja existeix un fitxer o carpeta amb aquest nom." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Mida de les icones d'escriptori" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Petita" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Estàndard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Gran" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostra la carpeta personal a l'escriptori" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostra la icona de la paperera a l'escriptori" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Mostra les unitats muntades a l'escriptori" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Carpeta nova" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Document nou" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Enganxa" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Desfés" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Refés" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Mostra l'escriptori al Fitxers" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Obre al Terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Canvia el fons de l'escriptori…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Paràmetres de la pantalla" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Paràmetres" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Canvia el nom" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "No s'ha trobat l'ordre" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Ha fallat l'expulsió de la unitat «%s»:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "No permetis que s'iniciï" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Permet que s'iniciï" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Obre" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Obre amb una altra aplicació" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Llança usant la targeta gràfica dedicada" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Retalla" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Copia" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Canvia el nom…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Mou a la paperera" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Buida la paperera" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Expulsa" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Propietats" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Mostra al Fitxers" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Inici" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Mida d'icona" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Estableix la mida per les icones de l'escriptori." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostra la carpeta personal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostra la carpeta personal a l'escriptori." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostra la icona de la paperera" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostra la icona de la paperera a l'escriptori." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Mostra les unitats muntades" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Mostra la icona de la paperera a l'escriptori." +diff --git a/extensions/desktop-icons/po/cs.po b/extensions/desktop-icons/po/cs.po +new file mode 100644 +index 00000000..5acfe16a +--- /dev/null ++++ b/extensions/desktop-icons/po/cs.po +@@ -0,0 +1,235 @@ ++# Czech translation for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Marek Černocký , 2018. ++# Milan Zink , 2018. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-06-16 14:22+0200\n" ++"Last-Translator: Daniel Rusek \n" ++"Language-Team: Czech \n" ++"Language: cs\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" ++"X-Generator: Poedit 2.3.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Název nové složky" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Vytvořit" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Zrušit" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Názvy složek nesmí obsahovat „/“." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Složka se nemůže jmenovat „.“." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Složka se nemůže jmenovat „..“." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Složky s „.“ na začátku jejich názvu jsou skryty." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Soubor nebo složka s tímto názvem již existuje." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Velikost ikon na pracovní ploše" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "malé" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "standardní" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "velké" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Zobrazovat osobní složku na pracovní ploše" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Zobrazovat ikonu koše na pracovní ploše" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Zobrazovat připojené svazky na pracovní ploše" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nová složka" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nový dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Vložit" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Zpět" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Znovu" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Zobrazit plochu v Souborech" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Otevřít v terminálu" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Změnit pozadí…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Nastavení zobrazení" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Nastavení" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Přejmenovat" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Příkaz nebyl nalezen" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Vysunutí svazku „%s“ selhalo:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Nepovolit spouštění" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Povolit spouštění" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Otevřít" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Otevřít pomocí jiné aplikace" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Spustit pomocí vyhrazené grafické karty" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Vyjmout" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopírovat" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Přejmenovat…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Přesunout do koše" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Vyprázdnit koš" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Vysunout" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Vlastnosti" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Zobrazit v Souborech" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Domů" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Velikost ikon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Nastavit velikost pro ikony na pracovní ploše." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Zobrazovat osobní složku" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Zobrazovat osobní složku na pracovní ploše." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Zobrazovat koš" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Zobrazovat ikonu koše na pracovní ploše." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Zobrazovat připojené svazky" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Zobrazovat připojené svazky na pracovní ploše." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Zadejte název souboru…" ++ ++#~ msgid "OK" ++#~ msgstr "Budiž" ++ ++#~ msgid "Huge" ++#~ msgstr "obrovské" ++ ++#~ msgid "Ok" ++#~ msgstr "Ok" +diff --git a/extensions/desktop-icons/po/da.po b/extensions/desktop-icons/po/da.po +new file mode 100644 +index 00000000..ff533680 +--- /dev/null ++++ b/extensions/desktop-icons/po/da.po +@@ -0,0 +1,226 @@ ++# Danish translation for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Alan Mortensen , 2018. ++# scootergrisen, 2020. ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions" ++"/desktop-icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-10-10 00:00+0200\n" ++"Last-Translator: scootergrisen\n" ++"Language-Team: Danish \n" ++"Language: da\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++ ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nyt mappenavn" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Opret" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Annullér" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Mappenavne må ikke indeholde “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "En mappe må ikke kaldes “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "En mappe må ikke kaldes “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Mapper med “.” i begyndelsen af deres navn er skjulte." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Der findes allerede en fil eller mappe med det navn." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Størrelsen på skrivebordsikoner" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Små" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Store" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Vis den personlige mappe på skrivebordet" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Vis papirkurvsikonet på skrivebordet" ++ ++#: prefs.js:106 ++#| msgid "Show the trash icon in the desktop" ++msgid "Show mounted drives in the desktop" ++msgstr "Vis monterede drev på skrivebordet" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Ny mappe" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nyt dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Indsæt" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Fortryd" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Omgør" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Vis skrivebordet i Filer" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Åbn i terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Skift baggrund …" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Skærmindstillinger" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Indstillinger" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Omdøb" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Kommando ikke fundet" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Udskubning af drevet “%s” mislykkedes:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Tillad ikke opstart" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Tillad opstart" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Åbn" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Åbn med et andet program" ++ ++# scootergrisen: tjek oversættelsen af "Dedicated" ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Start med dedikeret grafikkort" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Klip" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopiér" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Omdøb …" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Flyt til papirkurven" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Tøm papirkurven" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Skub ud" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Egenskaber" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Vis i Filer" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Hjem" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Ikonstørrelse" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Angiv størrelsen på skrivebordsikoner." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Vis personlig mappe" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Vis den personlige mappe på skrivebordet." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Vis papirkurvsikon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Vis papirkurvsikonet på skrivebordet." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++#| msgid "Show in Files" ++msgid "Show mounted drives" ++msgstr "Vis monterede drev" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++#| msgid "Show the trash icon in the desktop." ++msgid "Show mounted drives in the desktop." ++msgstr "Vis monterede drev på skrivebordet." +diff --git a/extensions/desktop-icons/po/de.po b/extensions/desktop-icons/po/de.po +new file mode 100644 +index 00000000..8f2f4cbc +--- /dev/null ++++ b/extensions/desktop-icons/po/de.po +@@ -0,0 +1,232 @@ ++# German translation for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Mario Blättermann , 2018. ++# rugk , 2019. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-08-16 14:44+0000\n" ++"PO-Revision-Date: 2020-08-26 22:46+0200\n" ++"Last-Translator: Christian Kirbach \n" ++"Language-Team: German \n" ++"Language: de\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Poedit 2.3.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Neuer Ordner" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Erstellen" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Abbrechen" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Ordnernamen dürfen kein »/« enthalten." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Ein Ordner darf nicht ».« genannt werden." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Ein Ordner darf nicht »..« genannt werden." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Ordner mit ».« am Anfang sind verborgen." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Es gibt bereits eine Datei oder einen Ordner mit diesem Namen." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Größe der Arbeitsflächensymbole" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Klein" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Groß" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Den persönlichen Ordner auf der Arbeitsfläche anzeigen" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Papierkorb-Symbol auf der Arbeitsfläche anzeigen" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Eingebundene Laufwerke auf der Arbeitsfläche anzeigen" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Neuer Ordner" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Neues Dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Einfügen" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Rückgängig" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Wiederholen" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Schreibtisch in Dateien anzeigen" ++ ++#: desktopGrid.js:355 fileItem.js:723 ++msgid "Open in Terminal" ++msgstr "Im Terminal öffnen" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Hintergrund ändern …" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Anzeigeeinstellungen" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Einstellungen" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Umbenennen" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Befehl nicht gefunden" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Auswerfen des Laufwerks »%s« fehlgeschlagen:" ++ ++#: fileItem.js:586 ++msgid "Don’t Allow Launching" ++msgstr "Start nicht erlauben" ++ ++#: fileItem.js:588 ++msgid "Allow Launching" ++msgstr "Start erlauben" ++ ++#: fileItem.js:684 ++msgid "Open" ++msgstr "Öffnen" ++ ++#: fileItem.js:688 ++msgid "Open With Other Application" ++msgstr "Mit anderer Anwendung öffnen" ++ ++#: fileItem.js:690 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Start mit dedizierter Grafikkarte" ++ ++#: fileItem.js:695 ++msgid "Cut" ++msgstr "Ausschneiden" ++ ++#: fileItem.js:696 ++msgid "Copy" ++msgstr "Kopieren" ++ ++#: fileItem.js:698 ++msgid "Rename…" ++msgstr "Umbenennen …" ++ ++#: fileItem.js:699 ++msgid "Move to Trash" ++msgstr "In den Papierkorb verschieben" ++ ++#: fileItem.js:709 ++msgid "Empty Trash" ++msgstr "Papierkorb leeren" ++ ++#: fileItem.js:713 ++msgid "Eject" ++msgstr "Auswerfen" ++ ++#: fileItem.js:719 ++msgid "Properties" ++msgstr "Eigenschaften" ++ ++#: fileItem.js:721 ++msgid "Show in Files" ++msgstr "In Dateiverwaltung anzeigen" ++ ++#: fileItem.js:927 ++msgid "Home" ++msgstr "Startseite" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Symbolgröße" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Die Größe der Arbeitsflächensymbole festlegen." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Persönlichen Ordner anzeigen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Den persönlichen Ordner auf der Arbeitsfläche anzeigen." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Papierkorb-Symbol anzeigen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Das Papierkorb-Symbol auf der Arbeitsfläche anzeigen." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Eingebundene Laufwerke anzeigen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Eingebundene Laufwerke auf der Arbeitsfläche anzeigen." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Dateinamen eingeben …" ++ ++#~ msgid "OK" ++#~ msgstr "OK" ++ ++#~ msgid "Huge" ++#~ msgstr "Riesig" +diff --git a/extensions/desktop-icons/po/el.po b/extensions/desktop-icons/po/el.po +new file mode 100644 +index 00000000..302aea80 +--- /dev/null ++++ b/extensions/desktop-icons/po/el.po +@@ -0,0 +1,190 @@ ++# Greek translation for desktop-icons. ++# Copyright (C) 2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Emmanouil I. Kapernaros , 2019. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-04-05 21:12+0200\n" ++"PO-Revision-Date: 2019-10-30 23:18+0200\n" ++"Last-Translator: Emmanouil I. Kapernaros \n" ++"Language-Team: Greek, Modern (1453-) \n" ++"Language: el\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1)\n" ++"X-Generator: Gtranslator 3.34.0\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Όνομα νέου φακέλου" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Δημιουργία" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Ακύρωση" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Τα ονόματα φακέλων δεν μπορούν να περιέχουν “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Ο φάκελος δεν μπορεί να ονομάζεται “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Ο φάκελος δεν μπορεί να ονομάζεται “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Οι φάκελοι με “.” στην αρχή του ονόματος τους είναι κρυφοί" ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Υπάρχει ήδη ένας φάκελος ή αρχείο με αυτό το όνομα" ++ ++#: prefs.js:102 ++msgid "Size for the desktop icons" ++msgstr "Μέγεθος για τα εικονίδια επιφάνειας εργασίας" ++ ++#: prefs.js:102 ++msgid "Small" ++msgstr "Μικρό" ++ ++#: prefs.js:102 ++msgid "Standard" ++msgstr "Κανονικό" ++ ++#: prefs.js:102 ++msgid "Large" ++msgstr "Μεγάλο" ++ ++#: prefs.js:103 ++msgid "Show the personal folder in the desktop" ++msgstr "Εμφάνιση του προσωπικού φακέλου στην επιφάνεια εργασίας" ++ ++#: prefs.js:104 ++msgid "Show the trash icon in the desktop" ++msgstr "Εμφάνιση του εικονίδιου απορριμάτων στην επιφάνεια εργασίας" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "Νέος Φάκελος" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "Επικόλληση" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "Αναίρεση" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "Επανάληψη" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "Εμφάνιση Επιφάνειας εργασίας στα Αρχεία" ++ ++#: desktopGrid.js:350 fileItem.js:651 ++msgid "Open in Terminal" ++msgstr "Άνοιγμα στο Τερματικό" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "Αλλαγή Φόντου" ++ ++#: desktopGrid.js:354 ++msgid "Display Settings" ++msgstr "Ρυθμίσεις Οθόνης" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "Ρυθμίσεις" ++ ++#: desktopGrid.js:653 ++msgid "Rename" ++msgstr "Μετονομασία" ++ ++#: desktopIconsUtil.js:61 ++msgid "Command not found" ++msgstr "Η εντολή δεν βρέθηκε" ++ ++#: fileItem.js:521 ++msgid "Don’t Allow Launching" ++msgstr "Μην Επιτρέψεις Εκτέλεση" ++ ++#: fileItem.js:523 ++msgid "Allow Launching" ++msgstr "Επέτρεψε Εκτέλεση" ++ ++#: fileItem.js:619 ++msgid "Open" ++msgstr "Άνοιγμα" ++ ++#: fileItem.js:623 ++msgid "Open With Other Application" ++msgstr "Άνοιγμα Με Άλλη Εφαρμογή" ++ ++#: fileItem.js:627 ++msgid "Cut" ++msgstr "Αποκοπή" ++ ++#: fileItem.js:628 ++msgid "Copy" ++msgstr "Αντιγραφή" ++ ++#: fileItem.js:630 ++msgid "Rename…" ++msgstr "Μετονομασία" ++ ++#: fileItem.js:631 ++msgid "Move to Trash" ++msgstr "Μετακίνηση στα Απορρίματα" ++ ++#: fileItem.js:641 ++msgid "Empty Trash" ++msgstr "Άδειασμα Απορριμάτων" ++ ++#: fileItem.js:647 ++msgid "Properties" ++msgstr "Ιδιότητες" ++ ++#: fileItem.js:649 ++msgid "Show in Files" ++msgstr "Εμφάνιση στα Αρχεία" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Μέγεθος εικονιδίου" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Ορισμός μεγέθους για τα εικονίδια της επιφάνειας εργασίας" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Εμφάνιση προσωπικού φακέλου" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Εμφάνιση του προσωπικού φακέλου στην επιφάνεια εργασίας" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Εμφάνιση του εικονιδίου απορριμμάτων" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Εμφάνιση του εικονιδίου απορριμμάτων στην επιφάνεια εργασίας" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Εισάγετε όνομα αρχείου..." +diff --git a/extensions/desktop-icons/po/en_GB.po b/extensions/desktop-icons/po/en_GB.po +new file mode 100644 +index 00000000..d30b74db +--- /dev/null ++++ b/extensions/desktop-icons/po/en_GB.po +@@ -0,0 +1,194 @@ ++# British English translation for desktop-icons. ++# Copyright (C) 2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Zander Brown , 2019. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-04-05 21:12+0200\n" ++"PO-Revision-Date: 2019-08-23 21:48+0100\n" ++"Last-Translator: Zander Brown \n" ++"Language-Team: English - United Kingdom \n" ++"Language: en_GB\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Gtranslator 3.32.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "New folder name" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Create" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Cancel" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Folder names cannot contain “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "A folder cannot be called “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "A folder cannot be called “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Folders with “.” at the beginning of their name are hidden." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "There is already a file or folder with that name." ++ ++#: prefs.js:102 ++msgid "Size for the desktop icons" ++msgstr "Size for the desktop icons" ++ ++#: prefs.js:102 ++msgid "Small" ++msgstr "Small" ++ ++#: prefs.js:102 ++msgid "Standard" ++msgstr "Standard" ++ ++#: prefs.js:102 ++msgid "Large" ++msgstr "Large" ++ ++#: prefs.js:103 ++msgid "Show the personal folder in the desktop" ++msgstr "Show the personal folder on the desktop" ++ ++#: prefs.js:104 ++msgid "Show the trash icon in the desktop" ++msgstr "Show the wastebasket icon on the desktop" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "New Folder" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "Paste" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "Undo" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "Redo" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "Show Desktop in Files" ++ ++#: desktopGrid.js:350 fileItem.js:651 ++msgid "Open in Terminal" ++msgstr "Open in Terminal" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "Change Background…" ++ ++#: desktopGrid.js:354 ++msgid "Display Settings" ++msgstr "Display Settings" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "Settings" ++ ++#: desktopGrid.js:653 ++#, fuzzy ++msgid "Rename" ++msgstr "Rename…" ++ ++#: desktopIconsUtil.js:61 ++msgid "Command not found" ++msgstr "Command not found" ++ ++#: fileItem.js:521 ++msgid "Don’t Allow Launching" ++msgstr "Don’t Allow Launching" ++ ++#: fileItem.js:523 ++msgid "Allow Launching" ++msgstr "Allow Launching" ++ ++#: fileItem.js:619 ++msgid "Open" ++msgstr "Open" ++ ++#: fileItem.js:623 ++msgid "Open With Other Application" ++msgstr "Open With Other Application" ++ ++#: fileItem.js:627 ++msgid "Cut" ++msgstr "Cut" ++ ++#: fileItem.js:628 ++msgid "Copy" ++msgstr "Copy" ++ ++#: fileItem.js:630 ++msgid "Rename…" ++msgstr "Rename…" ++ ++#: fileItem.js:631 ++msgid "Move to Trash" ++msgstr "Move to Wastebasket" ++ ++#: fileItem.js:641 ++msgid "Empty Trash" ++msgstr "Empty Wastebasket" ++ ++#: fileItem.js:647 ++msgid "Properties" ++msgstr "Properties" ++ ++#: fileItem.js:649 ++msgid "Show in Files" ++msgstr "Show in Files" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Icon size" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Set the size for the desktop icons." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Show personal folder" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Show the personal folder on the desktop." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Show wastebasket icon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Show the trash icon on the desktop." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Enter file name…" ++ ++#~ msgid "OK" ++#~ msgstr "OK" +diff --git a/extensions/desktop-icons/po/es.po b/extensions/desktop-icons/po/es.po +new file mode 100644 +index 00000000..86ea1522 +--- /dev/null ++++ b/extensions/desktop-icons/po/es.po +@@ -0,0 +1,257 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# Sergio Costas , 2018. ++# Daniel Mustieles , 2018-2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: 1.0\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-09-23 09:43+0200\n" ++"Last-Translator: Daniel Mustieles \n" ++"Language-Team: Spanish - Spain \n" ++"Language: es_ES\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Gtranslator 3.38.0\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nombre de la nueva carpeta" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Crear" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Cancelar" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Los nombres de carpetas no pueden contener «/»." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Una carpeta no se puede llamar «.»." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Una carpeta no se puede llamar «..»." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Las carpetas cuyo nombre empieza por «.» están ocultas." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Ya hay un archivo o carpeta con ese nombre." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Tamaño de los iconos del escritorio" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Pequeño" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Estándar" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Grande" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostrar la carpeta personal en el escritorio" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostrar la papelera en el escritorio" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Mostrar unidades montadas en el escritorio" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nueva carpeta" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nuevo documento" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Pegar" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Deshacer" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Rehacer" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Mostrar el escritorio en Archivos" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Abrir en una terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Cambiar el fondo..." ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Configuración de pantalla" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Configuración" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Renombrar" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Comando no encontrado" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Falló al expulsar la unidad «%s»:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "No permitir lanzar" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Permitir lanzar" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Abrir" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Abrir con otra aplicación" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Lanza usando la tarjeta gráfica dedicada" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Cortar" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Copiar" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Renombrar…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Mover a la papelera" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Vaciar la papelera" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Expulsar" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Propiedades" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Mostrar en Files" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Carpeta personal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Tamaño de los iconos" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Establece el tamaño de los iconos del escritorio." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostrar la carpeta personal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostrar la carpeta personal en el escritorio." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostrar la papelera" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostrar la papelera en el escritorio." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Mostrar unidades montadas" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Mostrar unidades montadas en el escritorio." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Introduzca el nombre del archivo…" ++ ++#~ msgid "OK" ++#~ msgstr "Aceptar" ++ ++#~ msgid "Huge" ++#~ msgstr "Inmenso" ++ ++#~ msgid "Ok" ++#~ msgstr "Aceptar" ++ ++#~ msgid "huge" ++#~ msgstr "inmenso" ++ ++#~ msgid "Maximum width for the icons and filename." ++#~ msgstr "Ancho máximo de los iconos y el nombre de fichero." ++ ++#~ msgid "Shows the Documents folder in the desktop." ++#~ msgstr "Muestra la carpeta Documentos en el escritorio." ++ ++#~ msgid "Shows the Downloads folder in the desktop." ++#~ msgstr "Muestra la carpeta Descargas en el escritorio." ++ ++#~ msgid "Shows the Music folder in the desktop." ++#~ msgstr "Muestra la carpeta Música en el escritorio." ++ ++#~ msgid "Shows the Pictures folder in the desktop." ++#~ msgstr "Muestra la carpeta Imágenes en el escritorio." ++ ++#~ msgid "Shows the Videos folder in the desktop." ++#~ msgstr "Muestra la carpeta Vídeos en el escritorio." +diff --git a/extensions/desktop-icons/po/eu.po b/extensions/desktop-icons/po/eu.po +new file mode 100644 +index 00000000..d662e0d3 +--- /dev/null ++++ b/extensions/desktop-icons/po/eu.po +@@ -0,0 +1,192 @@ ++# Basque translation for desktop-icons. ++# Copyright (C) 2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Asier Sarasua Garmendia , 2019. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-04-05 21:12+0200\n" ++"PO-Revision-Date: 2019-09-15 10:00+0100\n" ++"Last-Translator: Asier Sarasua Garmendia \n" ++"Language-Team: Basque \n" ++"Language: eu\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Karpetaren izen berria" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Sorrera" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Utzi" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Karpeta-izenak ezin du '/' karaktererik eduki." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Karpeta ezin da '.' gisa deitu." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Karpeta ezin da '..' gisa deitu." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Izenaren hasieran \".\" duten karpetak ezkutuan daude." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Badago izen hori duen fitxategi edo karpeta bat." ++ ++#: prefs.js:102 ++msgid "Size for the desktop icons" ++msgstr "Mahaigaineko ikonoen tamaina" ++ ++#: prefs.js:102 ++msgid "Small" ++msgstr "Txikia" ++ ++#: prefs.js:102 ++msgid "Standard" ++msgstr "Arrunta" ++ ++#: prefs.js:102 ++msgid "Large" ++msgstr "Handia" ++ ++#: prefs.js:103 ++msgid "Show the personal folder in the desktop" ++msgstr "Erakutsi karpeta pertsonala mahaigainean" ++ ++#: prefs.js:104 ++msgid "Show the trash icon in the desktop" ++msgstr "Erakutsi zakarrontziaren ikonoa mahaigainean" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "Karpeta berria" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "Itsatsi" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "Desegin" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "Berregin" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "Erakutsi mahaigaina Fitxategiak aplikazioan" ++ ++#: desktopGrid.js:350 fileItem.js:651 ++msgid "Open in Terminal" ++msgstr "Ireki terminalean" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "Aldatu atzeko planoa…" ++ ++#: desktopGrid.js:354 ++msgid "Display Settings" ++msgstr "Pantailaren ezarpenak" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "Ezarpenak" ++ ++#: desktopGrid.js:653 ++#, fuzzy ++msgid "Rename" ++msgstr "Aldatu izena…" ++ ++#: desktopIconsUtil.js:61 ++msgid "Command not found" ++msgstr "Ez da komandoa aurkitu" ++ ++#: fileItem.js:521 ++msgid "Don’t Allow Launching" ++msgstr "Ez baimendu abiaraztea" ++ ++#: fileItem.js:523 ++msgid "Allow Launching" ++msgstr "Baimendu abiaraztea" ++ ++#: fileItem.js:619 ++msgid "Open" ++msgstr "Ireki" ++ ++#: fileItem.js:623 ++msgid "Open With Other Application" ++msgstr "Ireki beste aplikazio batekin" ++ ++#: fileItem.js:627 ++msgid "Cut" ++msgstr "Ebaki" ++ ++#: fileItem.js:628 ++msgid "Copy" ++msgstr "Kopiatu" ++ ++#: fileItem.js:630 ++msgid "Rename…" ++msgstr "Aldatu izena…" ++ ++#: fileItem.js:631 ++msgid "Move to Trash" ++msgstr "Bota zakarrontzira" ++ ++#: fileItem.js:641 ++msgid "Empty Trash" ++msgstr "Hustu zakarrontzia" ++ ++#: fileItem.js:647 ++msgid "Properties" ++msgstr "Propietateak" ++ ++#: fileItem.js:649 ++msgid "Show in Files" ++msgstr "Erakutsi Fitxategiak aplikazioan" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Ikonoaren tamaina" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Ezarri mahaigaineko ikonoen tamaina." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Erakutsi karpeta pertsonala" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Erakutsi karpeta pertsonala mahaigainean." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Erakutsi zakarrontziaren ikonoa" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Erakutsi zakarrontziaren ikonoa mahaigainean." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Sartu fitxategi-izena…" ++ ++#~ msgid "OK" ++#~ msgstr "Ados" +diff --git a/extensions/desktop-icons/po/fa.po b/extensions/desktop-icons/po/fa.po +new file mode 100644 +index 00000000..4538923e +--- /dev/null ++++ b/extensions/desktop-icons/po/fa.po +@@ -0,0 +1,187 @@ ++# Persian translation for desktop-icons. ++# Copyright (C) 2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Danial Behzadi , 2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-04-06 14:18+0000\n" ++"PO-Revision-Date: 2020-04-06 18:21+0000\n" ++"Language-Team: Persian \n" ++"Language: fa\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Last-Translator: \n" ++"X-Generator: Poedit 2.3\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "نام شاخهٔ جدید" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "ایجاد" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "لغو" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "نام شاخه‌ها نمی‌تواند شامل \"/\" شود." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "یک شاخه را نمی‌توان «.» نامگذاری کرد." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "یک شاخه را نمی‌توان «..» نامگذاری کرد." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "شاخه‌هایی با «.» در ابتدای نامشان، مخفیند." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "پرونده یا شاخه‌ای با همان نام موجود است." ++ ++#: prefs.js:102 ++msgid "Size for the desktop icons" ++msgstr "اندازه برای نقشک‌های میزکار" ++ ++#: prefs.js:102 ++msgid "Small" ++msgstr "کوچک" ++ ++#: prefs.js:102 ++msgid "Standard" ++msgstr "استاندارد" ++ ++#: prefs.js:102 ++msgid "Large" ++msgstr "بزرگ" ++ ++#: prefs.js:103 ++msgid "Show the personal folder in the desktop" ++msgstr "نمایش شاخهٔ شخصی در میزکار" ++ ++#: prefs.js:104 ++msgid "Show the trash icon in the desktop" ++msgstr "نمایش نقشک زباله‌دان در میزکار" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "شاخه جدید" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "چسباندن" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "برگردان" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "انجام دوباره" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "نمایش میزکار در پرونده‌ها" ++ ++#: desktopGrid.js:350 fileItem.js:651 ++msgid "Open in Terminal" ++msgstr "گشودن در پایانه" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "تغییر پس‌زمینه…" ++ ++#: desktopGrid.js:354 ++msgid "Display Settings" ++msgstr "تنظیمات نمایشگر" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "تنظیمات" ++ ++#: desktopGrid.js:653 ++msgid "Rename" ++msgstr "تغییر نام" ++ ++#: desktopIconsUtil.js:61 ++msgid "Command not found" ++msgstr "فرمان پیدا نشد" ++ ++#: fileItem.js:521 ++msgid "Don’t Allow Launching" ++msgstr "اجازه ندادن به اجرا" ++ ++#: fileItem.js:523 ++msgid "Allow Launching" ++msgstr "اجازهٔ اجرا" ++ ++#: fileItem.js:619 ++msgid "Open" ++msgstr "گشودن" ++ ++#: fileItem.js:623 ++msgid "Open With Other Application" ++msgstr "گشودن با برنامه‌ای دیگر" ++ ++#: fileItem.js:627 ++msgid "Cut" ++msgstr "برش" ++ ++#: fileItem.js:628 ++msgid "Copy" ++msgstr "رونوشت" ++ ++#: fileItem.js:630 ++msgid "Rename…" ++msgstr "تغییر نام…" ++ ++#: fileItem.js:631 ++msgid "Move to Trash" ++msgstr "انداختن در زباله‌دان" ++ ++#: fileItem.js:641 ++msgid "Empty Trash" ++msgstr "خالی کردن زباله‌دان" ++ ++#: fileItem.js:647 ++msgid "Properties" ++msgstr "ویژگی‌ها" ++ ++#: fileItem.js:649 ++msgid "Show in Files" ++msgstr "نمایش در پرونده‌ها" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "اندازهٔ نقشک" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "تنظیم اندازه برای نقشک‌های میزکار." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "نمایش شاخهٔ شخصی" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "نمایش شاخهٔ شخصی در میزکار." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "نمایش نقشک زباله‌دان" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "نمایش نقشک زباله‌دان در میزکار." +diff --git a/extensions/desktop-icons/po/fi.po b/extensions/desktop-icons/po/fi.po +new file mode 100644 +index 00000000..f2b451db +--- /dev/null ++++ b/extensions/desktop-icons/po/fi.po +@@ -0,0 +1,231 @@ ++# Finnish translation for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Jiri Grönroos , 2018. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-08-16 17:43+0300\n" ++"Last-Translator: Jiri Grönroos \n" ++"Language-Team: Finnish \n" ++"Language: fi\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Poedit 2.4.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Uusi kansion nimi" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Luo" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Peru" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Kansion nimi ei voi sisältää merkkiä “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Kansion nimi ei voi olla “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Kansion nimi ei voi olla “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Kansiot, joiden nimi alkaa merkillä “.”, ovat piilotettuja." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Nimi on jo toisen tiedoston tai kansion käytössä." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Työpöydän kuvakkeiden koko" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Pieni" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Normaali" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Suuri" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Näytä kotikansio työpöydällä" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Näytä roskakorin kuvake työpöydällä" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Näytä liitetyt asemat työpöydällä" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Uusi kansio" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Uusi asiakirja" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Liitä" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Kumoa" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Tee uudeleen" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Näytä työpöytä tiedostonhallinnassa" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Avaa päätteessä" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Vaihda taustakuva…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Näytön asetukset" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Asetukset" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Nimeä uudelleen" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Komentoa ei löydy" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Aseman “%s” avaaminen epäonnistui:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Älä salli käynnistämistä" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Salli käynnistäminen" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Avaa" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Avaa toisella sovelluksella" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Käynnistä käyttäen erillistä näytönohjainta" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Leikkaa" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopioi" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Nimeä uudelleen…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Siirrä roskakoriin" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Tyhjennä roskakori" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Poista asemasta" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Ominaisuudet" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Näytä tiedostonhallinnassa" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Koti" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Kuvakekoko" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Aseta työpöytäkuvakkeiden koko." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Näytä kotikansio" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Näytä kotikansio työpöydällä." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Näytä roskakorin kuvake" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Näytä roskakorin kuvake työpöydällä." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Näytä liitetyt asemat" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Näytä liitetyt asemat työpöydällä." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Anna tiedostonimi…" ++ ++#~ msgid "OK" ++#~ msgstr "OK" ++ ++#~ msgid "Huge" ++#~ msgstr "Valtava" +diff --git a/extensions/desktop-icons/po/fr.po b/extensions/desktop-icons/po/fr.po +new file mode 100644 +index 00000000..3c5958d5 +--- /dev/null ++++ b/extensions/desktop-icons/po/fr.po +@@ -0,0 +1,225 @@ ++# French translation for desktop-icons. ++# Copyright (C) 2018-2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# ghentdebian , 2018. ++# Charles Monzat , 2018. ++# Claude Paroz , 2020. ++# Sylvestris , 2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-08-25 19:35+0000\n" ++"PO-Revision-Date: 2020-09-20 10:54+0200\n" ++"Last-Translator: Sylvestris \n" ++"Language-Team: GNOME French Team \n" ++"Language: fr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n > 1);\n" ++"X-Generator: Gtranslator 3.36.0\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nouveau nom de dossier" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Créer" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Annuler" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Les noms de dossiers ne peuvent pas contenir « / »." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Un dossier ne peut pas être nommé « . »." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Un dossier ne peut pas être nommé « .. »." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Les dossiers dont le nom commence par « . » sont masqués." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Il existe déjà un fichier ou dossier ayant ce nom." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Taille des icônes du bureau" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Petite" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Normale" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Grande" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Montrer le dossier personnel sur le bureau" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Montrer la corbeille sur le bureau" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Montrer les disques montés sur le bureau" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nouveau dossier" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nouveau document" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Coller" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Annuler" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Rétablir" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Afficher le bureau dans Fichiers" ++ ++#: desktopGrid.js:355 fileItem.js:723 ++msgid "Open in Terminal" ++msgstr "Ouvrir dans un terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Changer l’arrière-plan…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Configuration d’affichage" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Paramètres" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Renommer" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Commande introuvable" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Échec de l’éjection du disque « %s » :" ++ ++#: fileItem.js:586 ++msgid "Don’t Allow Launching" ++msgstr "Ne pas autoriser le lancement" ++ ++#: fileItem.js:588 ++msgid "Allow Launching" ++msgstr "Autoriser le lancement" ++ ++#: fileItem.js:684 ++msgid "Open" ++msgstr "Ouvrir" ++ ++#: fileItem.js:688 ++msgid "Open With Other Application" ++msgstr "Ouvrir avec une autre application" ++ ++#: fileItem.js:690 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Lancer en utilisant une carte graphique dédiée" ++ ++#: fileItem.js:695 ++msgid "Cut" ++msgstr "Couper" ++ ++#: fileItem.js:696 ++msgid "Copy" ++msgstr "Copier" ++ ++#: fileItem.js:698 ++msgid "Rename…" ++msgstr "Renommer…" ++ ++#: fileItem.js:699 ++msgid "Move to Trash" ++msgstr "Mettre à la corbeille" ++ ++#: fileItem.js:709 ++msgid "Empty Trash" ++msgstr "Vider la corbeille" ++ ++#: fileItem.js:713 ++msgid "Eject" ++msgstr "Éjecter" ++ ++#: fileItem.js:719 ++msgid "Properties" ++msgstr "Propriétés" ++ ++#: fileItem.js:721 ++msgid "Show in Files" ++msgstr "Montrer dans Fichiers" ++ ++#: fileItem.js:927 ++msgid "Home" ++msgstr "Dossier personnel" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Taille d’icônes" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Définir la taille des icônes du bureau." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Montrer le dossier personnel" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Montrer le dossier personnel sur le bureau." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Montrer l’icône de la corbeille" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Montrer la corbeille sur le bureau." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Montrer les disques montés" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Montrer les disques montés sur le bureau." +diff --git a/extensions/desktop-icons/po/fur.po b/extensions/desktop-icons/po/fur.po +new file mode 100644 +index 00000000..58bcb4e4 +--- /dev/null ++++ b/extensions/desktop-icons/po/fur.po +@@ -0,0 +1,227 @@ ++# Friulian translation for desktop-icons. ++# Copyright (C) 2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Fabio Tomat , 2019. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-09-08 10:04+0200\n" ++"Last-Translator: Fabio Tomat \n" ++"Language-Team: Friulian \n" ++"Language: fur\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.4.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Gnûf non de cartele" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Cree" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Anule" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "I nons des cartelis no puedin contignî il caratar “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Une cartele no pues jessi clamade “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Une cartele no pues jessi clamade “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Lis cartelis cul “.” al inizi dal lôr non a son platadis." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Un file o une cartele cul stes non e esist za." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Dimension pes iconis dal scritori" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Piçule" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Largje" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostre la cartele personâl intal scritori" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostre la icone de scovacere intal scritori" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Mostre lis unitâts montadis tal scritori" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Gnove cartele" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Gnûf document" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Tache" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Anule" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Torne fâ" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Mostre Scritori in File" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Vierç in Terminâl" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Cambie sfont…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Impostazions visôr" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Impostazions" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Cambie non" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Comant no cjatât" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "No si è rivâts a parâ fûr la unitât “%s”:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "No sta permeti inviament" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Permet inviament" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Vierç" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Vierç cuntune altre aplicazion" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Invie doprant une schede grafiche dedicade" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Taie" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Copie" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Cambie non…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Sposte te scovacere" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Disvuede scovacere" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Pare fûr" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Propietâts" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Mostre in File" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Home" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Dimension icone" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Stabilìs la dimension pes iconis dal scritori." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostre cartele personâl" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostre la cartele personâl intal scritori." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostre la icone de scovacere" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostre la icone de scovacere intal scritori." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Mostre unitâts montadis" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Mostre lis unitâts montadis intal scritori." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Inserìs il non dal file…" ++ ++#~ msgid "OK" ++#~ msgstr "Va ben" +diff --git a/extensions/desktop-icons/po/hr.po b/extensions/desktop-icons/po/hr.po +new file mode 100644 +index 00000000..11cd25f7 +--- /dev/null ++++ b/extensions/desktop-icons/po/hr.po +@@ -0,0 +1,228 @@ ++# Croatian translation for gnome-shell-extension-desktop-icons ++# Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 ++# This file is distributed under the same license as the gnome-shell-extension-desktop-icons package. ++# FIRST AUTHOR , 2019. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: gnome-shell-extension-desktop-icons\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-09-10 17:48+0200\n" ++"Last-Translator: gogo \n" ++"Language-Team: Croatian \n" ++"Language: hr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Launchpad-Export-Date: 2019-03-27 09:36+0000\n" ++"X-Generator: Poedit 2.3\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Naziv nove mape" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Stvori" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Odustani" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Naziv mape ne može sadržavati “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Mapa se ne može nazvati “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Mapa se ne može nazvati “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Mape koje sadrže “.” na početku njihovih naziva su skrivene." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Već postoji datoteka ili mapa s tim nazivom." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Veličina ikona radne površine" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Male" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standardne" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Velike" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Prikaži osobnu mapu na radnoj površini" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Prikaži mapu smeća na radnoj površini" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Prikaži montirane uređaje na radnoj površini" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nova mapa" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Novi dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Zalijepi" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Poništi" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Ponovi" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Prikaži radnu površinu u Datotekama" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Otvori u Terminalu" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Promijeni pozadinu…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Postavke zaslona" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Postavke" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Preimenuj" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Naredba nije pronađena" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Neuspjelo izbacivanje “%s” uređaja:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Ne dopuštaj pokretanje" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Dopusti pokretanje" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Otvori" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Otvori s drugom aplikacijom" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Pokreni pomoću namjenske grafičke kartice" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Izreži" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopiraj" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Preimenuj…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Premjesti u smeće" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Isprazni smeće" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Izbaci" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Svojstva" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Prikaži u Datotekama" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Osobna mapa" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Veličina ikona" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Postavi veličinu ikona radne površine." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Prikaži osobnu mapu" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Prikaži osobnu mapu na radnoj površini." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Prikaži ikonu smeća" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Prikaži ikonu smeća na radnoj površini." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Prikaži montirane uređaje" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Prikaži montirane uređaje na radnoj površini." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Upiši naziv datoteke…" ++ ++#~ msgid "OK" ++#~ msgstr "U redu" +diff --git a/extensions/desktop-icons/po/hu.po b/extensions/desktop-icons/po/hu.po +new file mode 100644 +index 00000000..dead2ac5 +--- /dev/null ++++ b/extensions/desktop-icons/po/hu.po +@@ -0,0 +1,228 @@ ++# Hungarian translation for desktop-icons. ++# Copyright (C) 2019, 2020 The Free Software Foundation, inc. ++# This file is distributed under the same license as the desktop-icons package. ++# ++# Balázs Úr , 2019, 2020. ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-i" ++"cons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-09-12 14:46+0200\n" ++"Last-Translator: Balázs Úr \n" ++"Language-Team: Hungarian \n" ++"Language: hu\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Lokalize 19.12.3\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Új mappa neve" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Létrehozás" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Mégse" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "A mappanevek nem tartalmazhatnak „/” karaktert." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Egy mappának nem lehet „.” a neve." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Egy mappának nem lehet „..” a neve." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "A „.” karakterrel kezdődő nevű mappák rejtettek." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Már van egy fájl vagy mappa azzal a névvel." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Az asztali ikonok mérete" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Kicsi" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Szabványos" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Nagy" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "A személyes mappa megjelenítése az asztalon" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "A kuka ikon megjelenítése az asztalon" ++ ++#: prefs.js:106 ++#| msgid "Show the trash icon in the desktop" ++msgid "Show mounted drives in the desktop" ++msgstr "Csatolt meghajtók megjelenítése az asztalon" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Új mappa" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Új dokumentum" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Beillesztés" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Visszavonás" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Újra" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Asztal megjelenítése a Fájlokban" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Megnyitás terminálban" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Háttér megváltoztatása…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Megjelenítés beállításai" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Beállítások" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Átnevezés" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "A parancs nem található" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "A(z) „%s” meghajtó kiadása nem sikerült:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Ne engedélyezzen indítást" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Indítás engedélyezése" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Megnyitás" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Megnyitás egyéb alkalmazással" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Futtatás dedikált videokártya használatával" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Kivágás" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Másolás" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Átnevezés…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Áthelyezés a Kukába" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Kuka ürítése" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Kiadás" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Tulajdonságok" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Megjelenítés a Fájlokban" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Saját mappa" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Ikonméret" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Az asztali ikonok méretének beállítása." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Személyes mappa megjelenítése" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "A személyes mappa megjelenítése az asztalon." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Kuka ikon megjelenítése" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "A kuka ikon megjelenítése az asztalon." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++#| msgid "Show in Files" ++msgid "Show mounted drives" ++msgstr "Csatolt meghajtók megjelenítése" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++#| msgid "Show the trash icon in the desktop." ++msgid "Show mounted drives in the desktop." ++msgstr "Csatolt meghajtók megjelenítése az asztalon." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Adjon meg egy fájlnevet…" +diff --git a/extensions/desktop-icons/po/id.po b/extensions/desktop-icons/po/id.po +new file mode 100644 +index 00000000..04eb8551 +--- /dev/null ++++ b/extensions/desktop-icons/po/id.po +@@ -0,0 +1,222 @@ ++# Indonesian translation for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Kukuh Syafaat , 2018-2020. ++# Andika Triwidada , 2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-06-06 16:30+0700\n" ++"Last-Translator: Andika Triwidada \n" ++"Language-Team: Indonesian \n" ++"Language: id\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nama folder baru" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Buat" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Batal" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Nama folder tak boleh memuat \"/\"." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Sebuah folder tak bisa dinamai \".\"." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Sebuah folder tak bisa dinamai \"..\"." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Folder dengan \".\" di awal nama mereka disembunyikan." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Folder dengan nama itu sudah ada." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Ukuran untuk ikon destop" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Kecil" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standar" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Besar" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Tampilkan folder pribadi di destop" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Tampilkan ikon tong sampah di destop" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Tampilkan kandar yang dikaitkan di destop" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Folder Baru" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Dokumen Baru" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Tempel" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Tak Jadi" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Jadi Lagi" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Tampilkan Destop pada Berkas" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Buka dalam Terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Ubah Latar Belakang…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Pengaturan Tampilan" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Pengaturan" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Ganti Nama" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Perintah tidak ditemukan" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Mengeluarkan kandar \"%s\" gagal:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Jangan Izinkan Peluncuran" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Izinkan Peluncuran" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Buka" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Buka Dengan Aplikasi Lain" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Luncurkan menggunakan Kartu Grafis Terdedikasi" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Potong" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Salin" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Ganti Nama…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Pindahkan ke Tong Sampah" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Kosongkan Tong Sampah" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Keluarkan" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Properti" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Tampilkan pada Berkas" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Rumah" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Ukuran ikon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Set ukuran untuk ikon destop." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Tampilkan folder pribadi" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Tampilkan folder pribadi di destop." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Tampilkan ikon tong sampah" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Tampilkan ikon tong sampah di destop." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Tampilkan kandar yang dikaitkan" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Tampilkan kandar yang dikaitkan di destop." +diff --git a/extensions/desktop-icons/po/it.po b/extensions/desktop-icons/po/it.po +new file mode 100644 +index 00000000..bd3eb249 +--- /dev/null ++++ b/extensions/desktop-icons/po/it.po +@@ -0,0 +1,189 @@ ++# Italian translation for desktop-icons. ++# Copyright (C) 2019, 2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Massimo Branchini , 2019. ++# Milo Casagrande , 2019, 2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-04-05 19:13+0000\n" ++"PO-Revision-Date: 2020-04-07 09:36+0200\n" ++"Last-Translator: Milo Casagrande \n" ++"Language-Team: Italian \n" ++"Language: it\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Poedit 2.2.4\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nuova cartella" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Crea" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Annulla" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "I nomi di cartelle non possono contenere il carattere «/»" ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Una cartella non può essere chiamata «.»." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Una cartella non può essere chiamata «..»." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Cartelle il cui nome inizia con «.» sono nascoste." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Esiste già un file o una cartella con quel nome." ++ ++#: prefs.js:102 ++msgid "Size for the desktop icons" ++msgstr "Dimensione delle icone della scrivania" ++ ++#: prefs.js:102 ++msgid "Small" ++msgstr "Piccola" ++ ++#: prefs.js:102 ++msgid "Standard" ++msgstr "Normale" ++ ++#: prefs.js:102 ++msgid "Large" ++msgstr "Grande" ++ ++#: prefs.js:103 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostra la cartella personale sulla scrivania" ++ ++#: prefs.js:104 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostra il cestino sulla scrivania" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "Nuova cartella" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "Incolla" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "Annulla" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "Ripeti" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "Mostra la scrivania in File" ++ ++#: desktopGrid.js:350 fileItem.js:651 ++msgid "Open in Terminal" ++msgstr "Apri in Terminale" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "Cambia lo sfondo…" ++ ++#: desktopGrid.js:354 ++msgid "Display Settings" ++msgstr "Impostazioni dello schermo" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "Impostazioni" ++ ++#: desktopGrid.js:653 ++msgid "Rename" ++msgstr "Rinomina" ++ ++#: desktopIconsUtil.js:61 ++msgid "Command not found" ++msgstr "Comando non trovato" ++ ++#: fileItem.js:521 ++msgid "Don’t Allow Launching" ++msgstr "Non permettere l'esecuzione" ++ ++#: fileItem.js:523 ++msgid "Allow Launching" ++msgstr "Permetti l'esecuzione" ++ ++#: fileItem.js:619 ++msgid "Open" ++msgstr "Apri" ++ ++#: fileItem.js:623 ++msgid "Open With Other Application" ++msgstr "Apri con altra applicazione" ++ ++#: fileItem.js:627 ++msgid "Cut" ++msgstr "Taglia" ++ ++#: fileItem.js:628 ++msgid "Copy" ++msgstr "Copia" ++ ++#: fileItem.js:630 ++msgid "Rename…" ++msgstr "Rinomina…" ++ ++#: fileItem.js:631 ++msgid "Move to Trash" ++msgstr "Sposta nel cestino" ++ ++#: fileItem.js:641 ++msgid "Empty Trash" ++msgstr "Svuota il cestino" ++ ++#: fileItem.js:647 ++msgid "Properties" ++msgstr "Proprietà" ++ ++#: fileItem.js:649 ++msgid "Show in Files" ++msgstr "Mostra in File" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Dimensione dell'icona" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Imposta la grandezza delle icone della scrivania." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostra la cartella personale" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostra la cartella personale sulla scrivania." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostra il cestino" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostra il cestino sulla scrivania." +diff --git a/extensions/desktop-icons/po/ja.po b/extensions/desktop-icons/po/ja.po +new file mode 100644 +index 00000000..71d9f539 +--- /dev/null ++++ b/extensions/desktop-icons/po/ja.po +@@ -0,0 +1,221 @@ ++# Japanese translation for desktop-icons. ++# Copyright (C) 2019-2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# sicklylife , 2019-2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-05-30 00:00+0900\n" ++"Last-Translator: sicklylife \n" ++"Language-Team: Japanese \n" ++"Language: ja\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "新しいフォルダー名" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "作成" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "キャンセル" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "“/”はフォルダー名に含められません。" ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "“.”という名前はフォルダーに付けられません。" ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "“..”という名前はフォルダーに付けられません。" ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "“.”で始まるフォルダーは隠しフォルダーになります。" ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "その名前のファイルかフォルダーがすでに存在します。" ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "デスクトップアイコンのサイズ" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "小さい" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "標準" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "大きい" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "ホームフォルダーをデスクトップに表示する" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "ゴミ箱をデスクトップに表示する" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "マウントしたドライブをデスクトップに表示する" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "新しいフォルダー" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "新しいドキュメント" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "貼り付け" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "元に戻す" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "やり直す" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "“ファイル”でデスクトップを表示" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "端末で開く" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "背景を変更…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "ディスプレイの設定" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "設定" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "名前を変更" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "コマンドが見つかりませんでした" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "“%s”の取り出しに失敗しました:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "起動を許可しない" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "起動を許可する" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "開く" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "別のアプリケーションで開く" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "専用のグラフィックカードを使用して起動" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "切り取り" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "コピー" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "名前を変更…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "ゴミ箱へ移動する" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "ゴミ箱を空にする" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "取り出す" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "プロパティ" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "“ファイル”で表示" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "ホーム" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "アイコンサイズ" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "デスクトップのアイコンサイズを設定します。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "ホームフォルダーを表示する" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "デスクトップにホームフォルダーを表示します。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "ゴミ箱アイコンを表示する" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "デスクトップにゴミ箱のアイコンを表示します。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "マウントしたドライブを表示する" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "デスクトップにマウントしたドライブを表示します。" +diff --git a/extensions/desktop-icons/po/kab.po b/extensions/desktop-icons/po/kab.po +new file mode 100644 +index 00000000..232728ae +--- /dev/null ++++ b/extensions/desktop-icons/po/kab.po +@@ -0,0 +1,222 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2021-03-28 17:45+0000\n" ++"PO-Revision-Date: 2021-04-03 21:21+0100\n" ++"Language-Team: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.4.2\n" ++"Last-Translator: Slimane Selyan Amiri \n" ++"Plural-Forms: nplurals=2; plural=(n > 1);\n" ++"Language: kab\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Isem n ukaram amaynut" ++ ++#: createFolderDialog.js:72 ++msgid "Create" ++msgstr "Rnu" ++ ++#: createFolderDialog.js:74 ++msgid "Cancel" ++msgstr "Sefsex" ++ ++#: createFolderDialog.js:147 ++msgid "Folder names cannot contain “/”." ++msgstr "Isem n ukaram ur izmir ara ad igber “/”." ++ ++#: createFolderDialog.js:150 ++msgid "A folder cannot be called “.”." ++msgstr "Isem n ukaram ur izmir ara ad yili “.”." ++ ++#: createFolderDialog.js:153 ++msgid "A folder cannot be called “..”." ++msgstr "Isem n ukaram ur izmir ara ad yili “..”." ++ ++#: createFolderDialog.js:155 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Ikaramen s “.” di tazwara n yisem-nsen ttwafren." ++ ++#: createFolderDialog.js:157 ++msgid "There is already a file or folder with that name." ++msgstr "Akaram s yisem-agi yella yakan." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Tuɣzi n tegnitin n tnarit" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Meẓẓi" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Anaway" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Meqqer" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Sken akaram udmawan deg tnarit" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Sken tignit n tqecwalt deg tnarit" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Sken iḍebsiyen irekben deg tnarit" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Akaram amaynut" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Isemli amaynut" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Senṭeḍ" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Err-d" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Uɣal" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Sken-d tanarit deg ifuyla" ++ ++#: desktopGrid.js:355 fileItem.js:726 ++msgid "Open in Terminal" ++msgstr "Ldi deg unneftaɣ" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Beddel agilal…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Iɣewwaren n uskan" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Iɣewwaṛen" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Beddel isem" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Ulac taladna" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Aḍegger n uḍebsi “%s” ur yeddi ara:" ++ ++#: fileItem.js:589 ++msgid "Don’t Allow Launching" ++msgstr "Ur sirig ara asenker" ++ ++#: fileItem.js:591 ++msgid "Allow Launching" ++msgstr "Sireg asenker" ++ ++#: fileItem.js:687 ++msgid "Open" ++msgstr "Ldi" ++ ++#: fileItem.js:691 ++msgid "Open With Other Application" ++msgstr "Ldi s usnas-nniḍen" ++ ++#: fileItem.js:693 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Sker s useqdec n tkarḍa tudlift ittwaHerzen" ++ ++#: fileItem.js:698 ++msgid "Cut" ++msgstr "Gzem" ++ ++#: fileItem.js:699 ++msgid "Copy" ++msgstr "Nɣel" ++ ++#: fileItem.js:701 ++msgid "Rename…" ++msgstr "Snifel isem…" ++ ++#: fileItem.js:702 ++msgid "Move to Trash" ++msgstr "Smutti ɣer tqecwalt" ++ ++#: fileItem.js:712 ++msgid "Empty Trash" ++msgstr "Ḍeggeṛ iḍumman" ++ ++#: fileItem.js:716 ++msgid "Eject" ++msgstr "Ḍeqqer-d" ++ ++#: fileItem.js:722 ++msgid "Properties" ++msgstr "Tulmisin" ++ ++#: fileItem.js:724 ++msgid "Show in Files" ++msgstr "Sken deg ifulay" ++ ++#: fileItem.js:951 ++msgid "Home" ++msgstr "Asnubeg" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Tuɣzi n tignit" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Sbadu tuɣzi n tegnitin n tnarit." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Sken akaram udmawan" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Sken akaram udmawan deg tnarit." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Sken tignit n tqecwalt" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Sken tignit n tqecwalt deg tnarit." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Sken iḍebsiyen irekben" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Sken iḍebsiyen irekben deg tnarit." +diff --git a/extensions/desktop-icons/po/ko.po b/extensions/desktop-icons/po/ko.po +new file mode 100644 +index 00000000..da87e2b1 +--- /dev/null ++++ b/extensions/desktop-icons/po/ko.po +@@ -0,0 +1,223 @@ ++# Korean translation for desktop-icons. ++# Copyright (C) 2021 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# FIRST AUTHOR , YEAR. ++# Kuroe Hanako , 2021. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2021-03-17 02:05+0000\n" ++"PO-Revision-Date: 2021-03-28 13:11+0900\n" ++"Last-Translator: Kuroe Hanako \n" ++"Language-Team: Korean \n" ++"Language: ko\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0\n" ++"X-Generator: Gtranslator 3.36.0\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "새 폴더 이름" ++ ++#: createFolderDialog.js:72 ++msgid "Create" ++msgstr "만들기" ++ ++#: createFolderDialog.js:74 ++msgid "Cancel" ++msgstr "취소" ++ ++#: createFolderDialog.js:147 ++msgid "Folder names cannot contain “/”." ++msgstr "폴더 이름에는 \"/\"가 들어갈 수 없습니다." ++ ++#: createFolderDialog.js:150 ++msgid "A folder cannot be called “.”." ++msgstr "폴더 이름은 \".\"이 될 수 없습니다." ++ ++#: createFolderDialog.js:153 ++msgid "A folder cannot be called “..”." ++msgstr "폴더 이름은 \"..\"이 될 수 없습니다." ++ ++#: createFolderDialog.js:155 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "폴더 이름이 \".\"으로 시작하면 폴더가 숨겨집니다." ++ ++#: createFolderDialog.js:157 ++msgid "There is already a file or folder with that name." ++msgstr "같은 이름의 폴더가 이미 있습니다." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "바탕 화면 아이콘 크기" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "작게" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "보통" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "크게" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "사용자 폴더를 바탕 화면에 표시" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "휴지통 아이콘을 바탕 화면에 표시" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "마운트된 드라이브를 바탕 화면에 표시" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "새 폴더" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "새 문서" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "붙여넣기" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "실행 취소" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "다시 실행" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "파일에서 바탕 화면 보기" ++ ++#: desktopGrid.js:355 fileItem.js:726 ++msgid "Open in Terminal" ++msgstr "터미널에서 열기" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "배경 바꾸기…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "디스플레이 설정" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "설정" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "이름 바꾸기" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "명령을 찾을 수 없음" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "\"%s\" 드라이브를 꺼내는 데 실패했습니다:" ++ ++#: fileItem.js:589 ++msgid "Don’t Allow Launching" ++msgstr "실행 허용하지 않음" ++ ++#: fileItem.js:591 ++msgid "Allow Launching" ++msgstr "실행 허용" ++ ++#: fileItem.js:687 ++msgid "Open" ++msgstr "열기" ++ ++#: fileItem.js:691 ++msgid "Open With Other Application" ++msgstr "다른 프로그램으로 열기" ++ ++#: fileItem.js:693 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "전용 그래픽 카드로 실행" ++ ++#: fileItem.js:698 ++msgid "Cut" ++msgstr "잘라내기" ++ ++#: fileItem.js:699 ++msgid "Copy" ++msgstr "복사" ++ ++#: fileItem.js:701 ++msgid "Rename…" ++msgstr "이름 바꾸기…" ++ ++#: fileItem.js:702 ++msgid "Move to Trash" ++msgstr "휴지통에 버리기" ++ ++#: fileItem.js:712 ++msgid "Empty Trash" ++msgstr "휴지통 비우기" ++ ++#: fileItem.js:716 ++msgid "Eject" ++msgstr "꺼내기" ++ ++#: fileItem.js:722 ++msgid "Properties" ++msgstr "속성" ++ ++#: fileItem.js:724 ++msgid "Show in Files" ++msgstr "파일에서 보기" ++ ++#: fileItem.js:951 ++msgid "Home" ++msgstr "홈" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "아이콘 크기" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "바탕 화면의 아이콘 크기를 설정합니다." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "사용자 폴더 표시" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "바탕 화면에 사용자 폴더를 표시합니다." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "휴지통 아이콘 표시" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "바탕 화면에 휴지통 아이콘을 표시합니다." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "마운트된 드라이브 표시" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "바탕 화면에 마운트된 드라이브를 표시합니다." +diff --git a/extensions/desktop-icons/po/meson.build b/extensions/desktop-icons/po/meson.build +new file mode 100644 +index 00000000..b2e9e422 +--- /dev/null ++++ b/extensions/desktop-icons/po/meson.build +@@ -0,0 +1 @@ ++i18n.gettext (meson.project_name (), preset: 'glib') +diff --git a/extensions/desktop-icons/po/nl.po b/extensions/desktop-icons/po/nl.po +new file mode 100644 +index 00000000..86deae6f +--- /dev/null ++++ b/extensions/desktop-icons/po/nl.po +@@ -0,0 +1,228 @@ ++# Dutch translation for desktop-icons. ++# Copyright (C) 2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Nathan Follens , 2019-2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-08-25 21:34+0200\n" ++"Last-Translator: Nathan Follens \n" ++"Language-Team: Dutch \n" ++"Language: nl\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Poedit 2.4.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nieuwe mapnaam" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Aanmaken" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Annuleren" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Mapnamen kunnen geen ‘/’ bevatten." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Een map kan niet ‘.’ worden genoemd." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Een map kan niet ‘..’ worden genoemd." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Mappen waarvan de naam begint met ‘.’ zijn verborgen." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Er bestaat al een bestand of map met die naam." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Grootte van bureaubladpictogrammen" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Klein" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standaard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Groot" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Toon de persoonlijke map op het bureaublad" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Toon het prullenbakpictogram op het bureaublad" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Gekoppelde volumes tonen op het bureaublad" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nieuwe map" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nieuw document" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Plakken" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Ongedaan maken" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Opnieuw" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Bureaublad tonen in Bestanden" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Openen in terminalvenster" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Achtergrond aanpassen…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Scherminstellingen" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Instellingen" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Hernoemen" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Opdracht niet gevonden" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Uitwerpen van station ‘%s’ mislukt:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Toepassingen starten niet toestaan" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Toepassingen starten toestaan" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Openen" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Met andere toepassing openen" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Met grafische kaart opstarten" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Knippen" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopiëren" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Hernoemen…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Verplaatsen naar prullenbak" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Prullenbak legen" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Uitwerpen" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Eigenschappen" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Tonen in Bestanden" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Persoonlijke map" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Pictogramgrootte" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Stel de grootte van de bureaubladpictogrammen in." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Persoonlijke map tonen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Toon de persoonlijke map op het bureaublad." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Prullenbakpictogram tonen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Toon het prullenbakpictogram op het bureaublad." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Gekoppelde volumes tonen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Gekoppelde volumes tonen op het bureaublad." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Voer bestandsnaam in…" ++ ++#~ msgid "OK" ++#~ msgstr "Oké" +diff --git a/extensions/desktop-icons/po/oc.po b/extensions/desktop-icons/po/oc.po +new file mode 100644 +index 00000000..9be20f48 +--- /dev/null ++++ b/extensions/desktop-icons/po/oc.po +@@ -0,0 +1,221 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2021-03-28 17:45+0000\n" ++"PO-Revision-Date: 2021-04-02 20:01+0200\n" ++"Language-Team: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.4.2\n" ++"Last-Translator: Quentin PAGÈS\n" ++"Language: oc\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nom de dossièr novèl" ++ ++#: createFolderDialog.js:72 ++msgid "Create" ++msgstr "Crear" ++ ++#: createFolderDialog.js:74 ++msgid "Cancel" ++msgstr "Anullar" ++ ++#: createFolderDialog.js:147 ++msgid "Folder names cannot contain “/”." ++msgstr "Los noms de dossièrs pòdon pas conténer « / »." ++ ++#: createFolderDialog.js:150 ++msgid "A folder cannot be called “.”." ++msgstr "Impossible d'apelar un dossièr « . »." ++ ++#: createFolderDialog.js:153 ++msgid "A folder cannot be called “..”." ++msgstr "Impossible d'apelar un dossièr « .. »." ++ ++#: createFolderDialog.js:155 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Los dossièrs amb un « . » a la debuta de lor nom son amagats" ++ ++#: createFolderDialog.js:157 ++msgid "There is already a file or folder with that name." ++msgstr "Un fichièr o un dossièr amb aqueste nom existís ja." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Talha de las icònas burèu" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Pichon" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Estandard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Grand" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostrar lo dorsièr personal pel burèu" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostrar l'icòna de l'escobilhièr pel burèu" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Mostrar los volums montats pel burèu" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Dossièr novèl" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Document novèl" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Pegar" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Restablir" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Restablir" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Mostrar lo burèu dins Fichièrs" ++ ++#: desktopGrid.js:355 fileItem.js:726 ++msgid "Open in Terminal" ++msgstr "Dobrir dins un terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Modificar lo rèireplan…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Paramètres d'afichatge" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Paramètres" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Renomenar" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Comanda pas trobada" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "L'ejeccion del disc « %s » a fracassat :" ++ ++#: fileItem.js:589 ++msgid "Don’t Allow Launching" ++msgstr "Permetre pas l'aviada" ++ ++#: fileItem.js:591 ++msgid "Allow Launching" ++msgstr "Permetre l'aviada" ++ ++#: fileItem.js:687 ++msgid "Open" ++msgstr "Dobrir" ++ ++#: fileItem.js:691 ++msgid "Open With Other Application" ++msgstr "Dobrir amb una autra aplicacion" ++ ++#: fileItem.js:693 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Aviar en utilizant la carta grafica dedicada" ++ ++#: fileItem.js:698 ++msgid "Cut" ++msgstr "Talhar" ++ ++#: fileItem.js:699 ++msgid "Copy" ++msgstr "Copiar" ++ ++#: fileItem.js:701 ++msgid "Rename…" ++msgstr "Renomenar…" ++ ++#: fileItem.js:702 ++msgid "Move to Trash" ++msgstr "Desplaçar a l’_escobilhièr" ++ ++#: fileItem.js:712 ++msgid "Empty Trash" ++msgstr "Voidar l’escobilhièr" ++ ++#: fileItem.js:716 ++msgid "Eject" ++msgstr "Ejectar" ++ ++#: fileItem.js:722 ++msgid "Properties" ++msgstr "Proprietats" ++ ++#: fileItem.js:724 ++msgid "Show in Files" ++msgstr "Mostrar dins Fichièrs" ++ ++#: fileItem.js:951 ++msgid "Home" ++msgstr "Repertòri personal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Talha de l'icòna" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Definir la talha de las icònas burèu." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostrar lo dorsièr personal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostrar lo dorsièr personal pel burèu." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostrar l'icòna de l'escobilhièr" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostrar l'icòna de l'escobilhièr pel burèu." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Mostrar los lectors montats" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Mostrar los lector montats pel burèu." +diff --git a/extensions/desktop-icons/po/pl.po b/extensions/desktop-icons/po/pl.po +new file mode 100644 +index 00000000..feffa267 +--- /dev/null ++++ b/extensions/desktop-icons/po/pl.po +@@ -0,0 +1,223 @@ ++# Polish translation for desktop-icons. ++# Copyright © 2018-2020 the desktop-icons authors. ++# This file is distributed under the same license as the desktop-icons package. ++# Piotr Drąg , 2018-2020. ++# Aviary.pl , 2018-2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-05-31 14:15+0200\n" ++"Last-Translator: Piotr Drąg \n" ++"Language-Team: Polish \n" ++"Language: pl\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " ++"|| n%100>=20) ? 1 : 2);\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nazwa nowego katalogu" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Utwórz" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Anuluj" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Nazwy katalogów nie mogą zawierać znaku „/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Katalog nie może mieć nazwy „.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Katalog nie może mieć nazwy „..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Katalogi z „.” na początku nazwy są ukryte." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Plik lub katalog o tej nazwie już istnieje." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Rozmiar ikon na pulpicie" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Mały" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standardowy" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Duży" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Katalog domowy na pulpicie" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Kosz na pulpicie" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Zamontowane napędy na pulpicie" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nowy katalog" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nowy dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Wklej" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Cofnij" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Ponów" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Wyświetl pulpit w menedżerze plików" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Otwórz w terminalu" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Zmień tło…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Ustawienia ekranu" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Ustawienia" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Zmień nazwę" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Nie odnaleziono polecenia" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Wysunięcie napędu „%s” się nie powiodło:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Nie zezwalaj na uruchamianie" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Zezwól na uruchamianie" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Otwórz" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Otwórz za pomocą innego programu" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Uruchom za pomocą dedykowanej karty graficznej" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Wytnij" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Skopiuj" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Zmień nazwę…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Przenieś do kosza" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Opróżnij kosz" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Wysuń" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Właściwości" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Wyświetl w menedżerze plików" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Katalog domowy" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Rozmiar ikon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Ustawia rozmiar ikon na pulpicie." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Katalog domowy" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Wyświetla katalog domowy na pulpicie." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Kosz" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Wyświetla kosz na pulpicie." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Zamontowane napędy" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Wyświetla zamontowane napędy na pulpicie." +diff --git a/extensions/desktop-icons/po/pt.po b/extensions/desktop-icons/po/pt.po +new file mode 100644 +index 00000000..3faf722f +--- /dev/null ++++ b/extensions/desktop-icons/po/pt.po +@@ -0,0 +1,222 @@ ++# Portuguese translation for desktop-icons. ++# Copyright (C) 2021 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Hugo Carvalho , 2021. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2021-02-03 06:55+0000\n" ++"PO-Revision-Date: 2021-02-24 20:34+0000\n" ++"Language-Team: Portuguese \n" ++"Language: pt\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"Last-Translator: Hugo Carvalho \n" ++"X-Generator: Poedit 2.4.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Novo nome de pasta" ++ ++#: createFolderDialog.js:72 ++msgid "Create" ++msgstr "Criar" ++ ++#: createFolderDialog.js:74 ++msgid "Cancel" ++msgstr "Cancelar" ++ ++#: createFolderDialog.js:147 ++msgid "Folder names cannot contain “/”." ++msgstr "Nomes de pastas não podem conter “/”." ++ ++#: createFolderDialog.js:150 ++msgid "A folder cannot be called “.”." ++msgstr "Uma pasta não pode ser chamada de “.”." ++ ++#: createFolderDialog.js:153 ++msgid "A folder cannot be called “..”." ++msgstr "Uma pasta não pode ser chamada de “..”." ++ ++#: createFolderDialog.js:155 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Pastas com “.” no começo de seus nomes são ocultas." ++ ++#: createFolderDialog.js:157 ++msgid "There is already a file or folder with that name." ++msgstr "Já existe um ficheiro ou uma pasta com esse nome." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Tamanho para os ícones do ambiente de trabalho" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Pequeno" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Padrão" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Grande" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostrar a pasta pessoal no ambiente de trabalho" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostrar o ícone do lixo no ambiente de trabalho" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Mostrar as unidades montadas na área de trabalho" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nova pasta" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Novo documento" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Colar" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Anular" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Refazer" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Mostrar o ambiente de trabalho em Ficheiros" ++ ++#: desktopGrid.js:355 fileItem.js:726 ++msgid "Open in Terminal" ++msgstr "Abrir no Terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Alterar o fundo…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Definições de ecrã" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Definições" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Renomear" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Comando não encontrado" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "A ejeção da unidade “%s” falhou:" ++ ++#: fileItem.js:589 ++msgid "Don’t Allow Launching" ++msgstr "Não permitir iniciar" ++ ++#: fileItem.js:591 ++msgid "Allow Launching" ++msgstr "Permitir iniciar" ++ ++#: fileItem.js:687 ++msgid "Open" ++msgstr "Abrir" ++ ++#: fileItem.js:691 ++msgid "Open With Other Application" ++msgstr "Abrir com outra aplicação" ++ ++#: fileItem.js:693 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Iniciar utilizando a placa gráfica dedicada" ++ ++#: fileItem.js:698 ++msgid "Cut" ++msgstr "Cortar" ++ ++#: fileItem.js:699 ++msgid "Copy" ++msgstr "Copiar" ++ ++#: fileItem.js:701 ++msgid "Rename…" ++msgstr "Renomear…" ++ ++#: fileItem.js:702 ++msgid "Move to Trash" ++msgstr "Mover para o lixo" ++ ++#: fileItem.js:712 ++msgid "Empty Trash" ++msgstr "Esvaziar lixo" ++ ++#: fileItem.js:716 ++msgid "Eject" ++msgstr "Ejetar" ++ ++#: fileItem.js:722 ++msgid "Properties" ++msgstr "Propriedades" ++ ++#: fileItem.js:724 ++msgid "Show in Files" ++msgstr "Mostrar no Ficheiros" ++ ++#: fileItem.js:951 ++msgid "Home" ++msgstr "Início" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Tamanho do ícone" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Define o tamanho para os ícones do ambiente de trabalho." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostrar pasta pessoal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostra a pasta pessoal no ambiente de trabalho." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostrar ícone do lixo" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostra o ícone do lixo no ambiente de trabalho." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Mostrar unidades montadas" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Mostra as unidades montadas no ambiente de trabalho." +diff --git a/extensions/desktop-icons/po/pt_BR.po b/extensions/desktop-icons/po/pt_BR.po +new file mode 100644 +index 00000000..e8bf0940 +--- /dev/null ++++ b/extensions/desktop-icons/po/pt_BR.po +@@ -0,0 +1,235 @@ ++# Brazilian Portuguese translation for desktop-icons. ++# Copyright (C) 2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Enrico Nicoletto , 2018. ++# Rafael Fontenelle , 2018-2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-05-28 18:35-0300\n" ++"Last-Translator: Rafael Fontenelle \n" ++"Language-Team: Brazilian Portuguese \n" ++"Language: pt_BR\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n > 1)\n" ++"X-Generator: Gtranslator 3.36.0\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nome da nova pasta" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Criar" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Cancelar" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Nomes de pastas não podem conter “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Uma pasta não pode ser chamada “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Uma pasta não pode ser chamada “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Pastas com “.” no começo de seus nomes são ocultas." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Já existe um arquivo ou uma pasta com esse nome." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Tamanho para os ícones da área de trabalho" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Pequeno" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Padrão" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Grande" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostrar a pasta pessoal na área de trabalho" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostrar o ícone da lixeira na área de trabalho" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Mostrar as unidades montadas na área de trabalho" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nova pasta" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Novo documento" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Colar" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Desfazer" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Refazer" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Mostrar a área de trabalho no Arquivos" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Abrir no terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Alterar plano de fundo…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Configurações de exibição" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Configurações" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Renomear" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Comando não encontrado" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "A ejeção a unidade “%s” falhou:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Não permitir iniciar" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Permitir iniciar" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Abrir" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Abrir com outro aplicativo" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Iniciar usando placa gráfica dedicada" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Recortar" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Copiar" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Renomear…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Mover para a lixeira" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Esvaziar lixeira" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Ejetar" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Propriedades" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Mostrar no Arquivos" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Home" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Tamanho do ícone" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Define o tamanho para os ícones da área de trabalho." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostrar pasta pessoal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostra a pasta pessoal na área de trabalho." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostrar ícone da lixeira" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostra o ícone da lixeira na área de trabalho." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Mostrar unidades montadas" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Mostra as unidades montadas na área de trabalho." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Insira um nome de arquivo…" ++ ++#~ msgid "OK" ++#~ msgstr "OK" ++ ++#~ msgid "Huge" ++#~ msgstr "Enorme" ++ ++#~ msgid "Ok" ++#~ msgstr "Ok" +diff --git a/extensions/desktop-icons/po/ro.po b/extensions/desktop-icons/po/ro.po +new file mode 100644 +index 00000000..b290b89d +--- /dev/null ++++ b/extensions/desktop-icons/po/ro.po +@@ -0,0 +1,223 @@ ++# Romanian translation for desktop-icons. ++# Copyright (C) 2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Florentina Mușat , 2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-06-06 12:24+0300\n" ++"Last-Translator: Florentina Mușat \n" ++"Language-Team: Romanian \n" ++"Language: ro\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " ++"20)) ? 1 : 2);;\n" ++"X-Generator: Poedit 2.3.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nume nou de fișier" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Creează" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Anulează" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Numele dosarelor nu pot conține „/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Un dosar nu poate fi numit „.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Un dosar nu poate fi numit „..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Dosarele cu „.” la începutul numelui sunt ascunse." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Există deja un fișier sau doar cu acel nume." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Dimensiunea pentru iconițele desktopului" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Mic" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Mare" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Arată dosarul personal pe desktop" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Arată iconița gunoiului pe desktop" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Arată dispozitivele montate pe desktop" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Dosar nou" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Document nou" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Lipește" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Refă" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Repetă" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Aratată Desktopul în Fișiere" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Deschide în Terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Schimbă fundalul…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Configurări afișaj" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Configurări" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Redenumește" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Comanda nu a fost găsită" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Scoaterea unității „%s” a eșuat:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Nu permite lansarea" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Permite lansarea" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Deschide" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Deschide cu altă aplicație" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Lansează folosind placa grafică dedicată" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Taie" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Copiază" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Redenumește…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Mută la gunoi" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Golește gunoiul" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Ejectează" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Proprietăți" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Arată în Fișiere" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Acasă" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Dimensiune iconiță" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Stabilește dimensiunea pentru iconițele desktopului." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Arată dosarul personal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Arată dosarul personal pe desktop." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Arată iconița gunoiului" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Arată iconița gunoiului pe deskop." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Arată dispozitivele montate" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Arată dispozitivele montate pe desktop." +diff --git a/extensions/desktop-icons/po/ru.po b/extensions/desktop-icons/po/ru.po +new file mode 100644 +index 00000000..a373301c +--- /dev/null ++++ b/extensions/desktop-icons/po/ru.po +@@ -0,0 +1,197 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# Eaglers , 2018. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-04-05 21:12+0200\n" ++"PO-Revision-Date: 2020-04-06 22:29+0300\n" ++"Last-Translator: Stas Solovey \n" ++"Language-Team: Russian \n" ++"Language: ru\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ++"X-Generator: Poedit 2.3\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Имя новой папки" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Создать" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Отмена" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Имена папок не могут содержать «/»." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Папка не может быть названа как «.»." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Папка не может быть названа как «..»." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Папки с точкой «.» в начале их имени скрываются." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Файл или папка с таким именем уже существует." ++ ++#: prefs.js:102 ++msgid "Size for the desktop icons" ++msgstr "Размер значков" ++ ++#: prefs.js:102 ++msgid "Small" ++msgstr "Маленький" ++ ++#: prefs.js:102 ++msgid "Standard" ++msgstr "Стандартный" ++ ++#: prefs.js:102 ++msgid "Large" ++msgstr "Большой" ++ ++#: prefs.js:103 ++msgid "Show the personal folder in the desktop" ++msgstr "Показывать домашнюю папку на рабочем столе" ++ ++#: prefs.js:104 ++msgid "Show the trash icon in the desktop" ++msgstr "Показывать «Корзину» на рабочем столе" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "Создать папку" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "Вставить" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "Отменить" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "Повторить" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "Показывать папку «Рабочий стол» в приложении «Файлы»" ++ ++#: desktopGrid.js:350 fileItem.js:651 ++msgid "Open in Terminal" ++msgstr "Открыть в терминале" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "Изменить фон…" ++ ++#: desktopGrid.js:354 ++msgid "Display Settings" ++msgstr "Настройки дисплея" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "Параметры" ++ ++#: desktopGrid.js:653 ++msgid "Rename" ++msgstr "Переименовать" ++ ++#: desktopIconsUtil.js:61 ++msgid "Command not found" ++msgstr "Команда не найдена" ++ ++#: fileItem.js:521 ++msgid "Don’t Allow Launching" ++msgstr "Запретить запуск" ++ ++#: fileItem.js:523 ++msgid "Allow Launching" ++msgstr "Разрешить запуск" ++ ++#: fileItem.js:619 ++msgid "Open" ++msgstr "Открыть" ++ ++#: fileItem.js:623 ++msgid "Open With Other Application" ++msgstr "Открыть в другом приложении" ++ ++#: fileItem.js:627 ++msgid "Cut" ++msgstr "Вырезать" ++ ++#: fileItem.js:628 ++msgid "Copy" ++msgstr "Вставить" ++ ++#: fileItem.js:630 ++msgid "Rename…" ++msgstr "Переименовать…" ++ ++#: fileItem.js:631 ++msgid "Move to Trash" ++msgstr "Переместить в корзину" ++ ++#: fileItem.js:641 ++msgid "Empty Trash" ++msgstr "Очистить корзину" ++ ++#: fileItem.js:647 ++msgid "Properties" ++msgstr "Свойства" ++ ++#: fileItem.js:649 ++msgid "Show in Files" ++msgstr "Показать в «Файлах»" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Размер значков" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Установить размер значков рабочего стола." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Показывать домашнюю папку" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Показывать значок домашней папки на рабочем столе." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Показывать значок корзины" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Показывать значок корзины на рабочем столе." ++ ++#~ msgid "Huge" ++#~ msgstr "Огромный" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Ввести имя файла…" ++ ++#~ msgid "Ok" ++#~ msgstr "ОК" +diff --git a/extensions/desktop-icons/po/sk.po b/extensions/desktop-icons/po/sk.po +new file mode 100644 +index 00000000..a67f40cb +--- /dev/null ++++ b/extensions/desktop-icons/po/sk.po +@@ -0,0 +1,222 @@ ++# Slovak translation for desktop-icons. ++# Copyright (C) 2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Dušan Kazik , 2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-09-05 22:22+0000\n" ++"PO-Revision-Date: 2020-09-06 18:40+0200\n" ++"Language-Team: Slovak \n" ++"Language: sk\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" ++"Last-Translator: Dušan Kazik \n" ++"X-Generator: Poedit 2.4.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nový názov priečinka" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Vytvoriť" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Zrušiť" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Názvy priečinkov nemôžu obsahovať znak „/“." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Priečinok nemôže byť nazvaný „.“." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Priečinok nemôže byť nazvaný „..“." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Priečinky s názvami začínajúcimi znakom „.“ sú skryté." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Súbor alebo priečinok s týmto názvom už existuje." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Veľkosť ikon pracovnej plochy" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Malé" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Štandardné" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Veľké" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Zobraziť osobný priečinok na pracovnej ploche" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Zobraziť ikonu Koša na pracovnej ploche" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Zobraziť pripojené jednotky na pracovnej ploche" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nový priečinok" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nový dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Vložiť" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Vráti späť" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Opakovať vrátené" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Zobraziť Plochu v aplikácii Súbory" ++ ++#: desktopGrid.js:355 fileItem.js:723 ++msgid "Open in Terminal" ++msgstr "Otvoriť v termináli" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Zmeniť pozadie…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Nastavenia displejov" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Nastavenia" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Premenovanie" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Príkaz sa nenašiel" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Zlyhalo vysúvanie jednotky „%s“:" ++ ++#: fileItem.js:586 ++msgid "Don’t Allow Launching" ++msgstr "Neumožniť spúšťanie" ++ ++#: fileItem.js:588 ++msgid "Allow Launching" ++msgstr "Umožniť spúšťanie" ++ ++#: fileItem.js:684 ++msgid "Open" ++msgstr "Otvorené" ++ ++#: fileItem.js:688 ++msgid "Open With Other Application" ++msgstr "Otvoriť inou aplikáciou" ++ ++#: fileItem.js:690 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Spustiť pomocou vyhradenej grafickej karty" ++ ++#: fileItem.js:695 ++msgid "Cut" ++msgstr "Vystrihnúť" ++ ++#: fileItem.js:696 ++msgid "Copy" ++msgstr "Skopíruje" ++ ++#: fileItem.js:698 ++msgid "Rename…" ++msgstr "Premenovať…" ++ ++#: fileItem.js:699 ++msgid "Move to Trash" ++msgstr "Presunúť do Koša" ++ ++#: fileItem.js:709 ++msgid "Empty Trash" ++msgstr "Vyprázdniť Kôš" ++ ++#: fileItem.js:713 ++msgid "Eject" ++msgstr "Vysunúť" ++ ++#: fileItem.js:719 ++msgid "Properties" ++msgstr "Vlastnosti" ++ ++#: fileItem.js:721 ++msgid "Show in Files" ++msgstr "Zobraziť v aplikácii Súbory" ++ ++#: fileItem.js:927 ++msgid "Home" ++msgstr "Domov" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Veľkosť ikon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Nastaví veľkosť ikon na pracovnej ploche." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Zobraziť osobný priečinok" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Zobrazí osobný priečinok na pracovnej ploche." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Zobraziť ikonu Koša" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Zobrazí ikonu Koša na pracovnej ploche." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Zobraziť pripojené jednotky" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Zobrazí pripojené jednotky na pracovnej ploche." +diff --git a/extensions/desktop-icons/po/sl.po b/extensions/desktop-icons/po/sl.po +new file mode 100644 +index 00000000..d8584147 +--- /dev/null ++++ b/extensions/desktop-icons/po/sl.po +@@ -0,0 +1,227 @@ ++# Slovenian translations for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the atomix package. ++# ++# Matej Urbančič , + 2018–. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-08-28 03:11+0000\n" ++"PO-Revision-Date: 2020-09-03 21:58+0200\n" ++"Last-Translator: \n" ++"Language-Team: Slovenian \n" ++"Language: sl\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" ++"%100==4 ? 3 : 0);\n" ++"X-Generator: Poedit 2.3\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Ime nove mape" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Ustvari" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Prekliči" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Ime mape ne sme vsebovati poševnice » / «." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Mapa ne sme biti poimenovana » . «." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Mapa ne sme biti poimenovana » .. «." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Mape, katerih ime se začne s piko » . «, so skrite mape." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Mapa oziroma datoteka z enakim imenom že obstaja." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Velikost ikon namizja" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Majhne" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Običajne" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Velike" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Pokaži osebno mapo na namizju" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Pokaži smeti na namizju" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Pokaži priklopljene nosilce na namizju" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nova mapa" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nov dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Prilepi" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Razveljavi" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Ponovno uveljavi" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Odpri Namizje v upravljalniku datotek" ++ ++#: desktopGrid.js:355 fileItem.js:723 ++msgid "Open in Terminal" ++msgstr "Odpri v terminalu" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Spremeni ozadje …" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Nastavitve zaslona" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Nastavitve" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Preimenuj" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Ukaza ni mogoče najti" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Izmetavanje pogona »%s« je spodletelo:" ++ ++#: fileItem.js:586 ++msgid "Don’t Allow Launching" ++msgstr "Ne dovoli zaganjanja" ++ ++#: fileItem.js:588 ++msgid "Allow Launching" ++msgstr "Dovoli zaganjanje" ++ ++#: fileItem.js:684 ++msgid "Open" ++msgstr "Odpri" ++ ++#: fileItem.js:688 ++msgid "Open With Other Application" ++msgstr "Odpri z drugim programom …" ++ ++#: fileItem.js:690 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Zaženi z uporabo določene grafične kartice" ++ ++#: fileItem.js:695 ++msgid "Cut" ++msgstr "Izreži" ++ ++#: fileItem.js:696 ++msgid "Copy" ++msgstr "Kopiraj" ++ ++#: fileItem.js:698 ++msgid "Rename…" ++msgstr "Preimenuj …" ++ ++#: fileItem.js:699 ++msgid "Move to Trash" ++msgstr "Premakni v smeti" ++ ++#: fileItem.js:709 ++msgid "Empty Trash" ++msgstr "Izprazni smeti" ++ ++#: fileItem.js:713 ++msgid "Eject" ++msgstr "Izvrzi" ++ ++#: fileItem.js:719 ++msgid "Properties" ++msgstr "Lastnosti" ++ ++#: fileItem.js:721 ++msgid "Show in Files" ++msgstr "Pokaži v upravljalniku datotek" ++ ++#: fileItem.js:927 ++msgid "Home" ++msgstr "Na začetek" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Velikost ikon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Nastavitev velikosti ikon na namizju." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Pokaži osebno mapo" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Pokaže ikono osebne mape na namizju." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Pokaži ikono smeti" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Pokaže ikono smeti na namizju." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Pokaži priklopljene nosilce" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Pokaži priklopljene nosilce na namizju." ++ ++#~ msgid "Huge" ++#~ msgstr "Velikanske" +diff --git a/extensions/desktop-icons/po/sr.po b/extensions/desktop-icons/po/sr.po +new file mode 100644 +index 00000000..82aeafc2 +--- /dev/null ++++ b/extensions/desktop-icons/po/sr.po +@@ -0,0 +1,220 @@ ++# Serbian translation for desktop-icons. ++# Copyright © 2021 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Мирослав Николић , 2021. ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/" ++"desktop-icons/issues\n" ++"POT-Creation-Date: 2021-01-27 22:42+0000\n" ++"PO-Revision-Date: 2021-02-02 07:23+0200\n" ++"Last-Translator: Мирослав Николић \n" ++"Language-Team: српски \n" ++"Language: sr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Назив нове фасцикле" ++ ++#: createFolderDialog.js:72 ++msgid "Create" ++msgstr "Направи" ++ ++#: createFolderDialog.js:74 ++msgid "Cancel" ++msgstr "Откажи" ++ ++#: createFolderDialog.js:147 ++msgid "Folder names cannot contain “/”." ++msgstr "Називи фасцикли не могу да садрже /." ++ ++#: createFolderDialog.js:150 ++msgid "A folder cannot be called “.”." ++msgstr "Фасцикла се не може звати „.“." ++ ++#: createFolderDialog.js:153 ++msgid "A folder cannot be called “..”." ++msgstr "Фасцикла се не може звати „..“." ++ ++#: createFolderDialog.js:155 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Фасцикле са . на почетку назива су скривене." ++ ++#: createFolderDialog.js:157 ++msgid "There is already a file or folder with that name." ++msgstr "Већ постоји датотека или фасцикла са тим називом." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Величина за иконице радне површи" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Мала" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Обична" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Велика" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Прикажи личну фасциклу на радној површи" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Прикажи иконицу смећа на радној површи" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Прикажи прикачене уређаје на радној површи" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Нова фасцикла" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Нови документ" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Убаци" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Поништи" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Врати" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Прикажи радну површ у датотекама" ++ ++#: desktopGrid.js:355 fileItem.js:726 ++msgid "Open in Terminal" ++msgstr "Отвори у терминалу" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Измени позадину…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Прикажи поставке" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Поставке" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Преименуј" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Нема такве наредбе" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Избацивање уређаја „%s“ није успело:" ++ ++#: fileItem.js:589 ++msgid "Don’t Allow Launching" ++msgstr "Не дозволи покретање" ++ ++#: fileItem.js:591 ++msgid "Allow Launching" ++msgstr "Дозволи покретање" ++ ++#: fileItem.js:687 ++msgid "Open" ++msgstr "Отвори" ++ ++#: fileItem.js:691 ++msgid "Open With Other Application" ++msgstr "Отвори другим програмом" ++ ++#: fileItem.js:693 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Покрени користећи намењену графичку картицу" ++ ++#: fileItem.js:698 ++msgid "Cut" ++msgstr "Исеци" ++ ++#: fileItem.js:699 ++msgid "Copy" ++msgstr "Умножи" ++ ++#: fileItem.js:701 ++msgid "Rename…" ++msgstr "Преименуј…" ++ ++#: fileItem.js:702 ++msgid "Move to Trash" ++msgstr "Премести у смеће" ++ ++#: fileItem.js:712 ++msgid "Empty Trash" ++msgstr "Испразни смеће" ++ ++#: fileItem.js:716 ++msgid "Eject" ++msgstr "Избаци" ++ ++#: fileItem.js:722 ++msgid "Properties" ++msgstr "Својства" ++ ++#: fileItem.js:724 ++msgid "Show in Files" ++msgstr "Прикажи у Датотекама" ++ ++#: fileItem.js:951 ++msgid "Home" ++msgstr "Полазна" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Величина иконице" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Поставља величину за иконице радне површи." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Приказ личне фасцикле" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Приказује личну фасциклу на радној површи." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Приказ иконице смећа" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Приказује иконицу смећа на радној површи." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Приказ прикачених уређаја" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Приказује прикачене уређаје на радној површи." +diff --git a/extensions/desktop-icons/po/sv.po b/extensions/desktop-icons/po/sv.po +new file mode 100644 +index 00000000..52461365 +--- /dev/null ++++ b/extensions/desktop-icons/po/sv.po +@@ -0,0 +1,239 @@ ++# Swedish translation for desktop-icons. ++# Copyright © 2018-2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Anders Jonsson , 2018, 2019, 2020. ++# Josef Andersson , 2019. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-05-27 01:14+0200\n" ++"Last-Translator: Anders Jonsson \n" ++"Language-Team: Swedish \n" ++"Language: sv\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Poedit 2.3.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nytt mappnamn" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Skapa" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Avbryt" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Mappnamn kan inte innehålla ”/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "En mapp kan inte kallas ”.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "En mapp kan inte kallas ”..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Mappar med ”.” i början på sitt namn är dolda." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Det finns redan en fil eller mapp med det namnet." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Storlek för skrivbordsikonerna" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Liten" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Stor" ++ ++# TODO: *ON* the desktop? ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Visa den personliga mappen på skrivbordet" ++ ++# TODO: *ON* the desktop? ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Visa papperskorgsikonen på skrivbordet" ++ ++# TODO: *ON* the desktop? ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Visa monterade enheter på skrivbordet" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Ny mapp" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nytt dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Klistra in" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Ångra" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Gör om" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Visa skrivbord i Filer" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Öppna i terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Ändra bakgrund…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Visningsinställningar" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Inställningar" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Byt namn" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Kommandot hittades inte" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Utmatning av enhet ”%s” misslyckades:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Tillåt ej programstart" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Tillåt programstart" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Öppna" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Öppna med annat program" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Kör med diskret grafikkort" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Klipp ut" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopiera" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Byt namn…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Flytta till papperskorgen" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Töm papperskorgen" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Mata ut" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Egenskaper" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Visa i Filer" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Hem" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Ikonstorlek" ++ ++# TODO: *ON* the desktop? ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Ställ in storleken för skrivbordsikonerna." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Visa personlig mapp" ++ ++# TODO: *ON* the desktop? ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Visa den personliga mappen på skrivbordet." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Visa papperskorgsikon" ++ ++# TODO: *ON* the desktop? ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Visa papperskorgsikonen på skrivbordet." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Visa monterade enheter" ++ ++# TODO: *ON* the desktop? ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Visa monterade enheter på skrivbordet." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Ange filnamn…" ++ ++#~ msgid "OK" ++#~ msgstr "OK" ++ ++#~ msgid "Huge" ++#~ msgstr "Enorm" +diff --git a/extensions/desktop-icons/po/tr.po b/extensions/desktop-icons/po/tr.po +new file mode 100644 +index 00000000..cd2a4f13 +--- /dev/null ++++ b/extensions/desktop-icons/po/tr.po +@@ -0,0 +1,231 @@ ++# Turkish translation for desktop-icons. ++# Copyright (C) 2000-2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# ++# Sabri Ünal , 2019. ++# Serdar Sağlam , 2019 ++# Emin Tufan Çetin , 2019, 2020. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-09-06 01:02+0300\n" ++"Last-Translator: Emin Tufan Çetin \n" ++"Language-Team: Türkçe \n" ++"Language: tr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.0.6\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Yeni klasör adı" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Oluştur" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "İptal" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Klasör adları “/” içeremez." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Klasör “.” olarak adlandırılamaz." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Klasör “..” olarak adlandırılamaz." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Adının başında “.” bulunan klasörler gizlenir." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Bu adda dosya veya klasör var." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Masaüstü simgeleri boyutu" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Küçük" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standart" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Büyük" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Kişisel klasörü masaüstünde göster" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Çöp kutusunu masaüstünde göster" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Bağlı sürücüleri masaüstünde göster" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Yeni Klasör" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Yeni Belge" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Yapıştır" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Geri Al" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Yinele" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Masaüstünü Dosyalarʼda Göster" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Uçbirimde Aç" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Arka Planı Değiştir…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Görüntü Ayarları" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Ayarlar" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Yeniden Adlandır" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Komut bulunamadı" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "“%s” sürücüsü çıkarılamadı:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Başlatmaya İzin Verme" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Başlatmaya İzin Ver" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Aç" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Başka Uygulamayla Aç" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Ayrık Ekran Kartıyla Başlat" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Kes" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopyala" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Yeniden Adlandır…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Çöpe Taşı" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Çöpü Boşalt" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Çıkar" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Özellikler" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Dosyalarʼda Göster" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Ev" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Simge boyutu" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Masaüstü simgelerinin boyutunu ayarla." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Kişisel klasörü göster" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Kişisel klasörü masaüstünde göster." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Çöp kutusunu göster" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Çöp kutusu simgesini masaüstünde göster." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Bağlı sürücüleri göster" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Bağlı sürücüleri masaüstünde göster." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Dosya adını gir…" ++ ++#~ msgid "OK" ++#~ msgstr "Tamam" +diff --git a/extensions/desktop-icons/po/uk.po b/extensions/desktop-icons/po/uk.po +new file mode 100644 +index 00000000..df37099a +--- /dev/null ++++ b/extensions/desktop-icons/po/uk.po +@@ -0,0 +1,223 @@ ++# Ukrainian translation for desktop-icons. ++# Copyright (C) 2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# ++# Yuri Chornoivan , 2020. ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-i" ++"cons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-05-27 11:46+0300\n" ++"Last-Translator: Yuri Chornoivan \n" ++"Language-Team: Ukrainian \n" ++"Language: uk\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" ++"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" ++"X-Generator: Lokalize 20.07.70\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Назва нової теки" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Створити" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Скасувати" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Назви теки не можуть містити «/»." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Теку не можна називати як «.»." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Теку не можна називати як «..»." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Теки, назви яких починаються із символу «.», є прихованими." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Файл або тека із такою назвою вже існують." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Розмір піктограм на стільниці" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Малий" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Стандартний" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Великий" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Показувати особисту теку на стільниці" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Показувати піктограму смітника на стільниці" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Показувати змонтовані диски на стільниці" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Нова тека" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Новий документ" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Вставити" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Скасувати" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Повторити" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Показувати «Стільницю» у «Файлах»" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Відкрити у терміналі" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Змінити тло…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Параметри екрана" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Параметри" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Перейменувати" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Команди не знайдено" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "Не вдалося виштовхнути пристрій «%s»:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Не дозволяти запуск" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Дозволяти запуск" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Відкрити" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Відкрити за допомогою іншої програми" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Запустити через відповідну графічну плату" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Вирізати" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Копіювати" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Перейменувати…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Пересунути до смітника" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Спорожнити смітник" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Виштовхнути" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Властивості" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Показувати у «Файлах»" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "Домівка" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Розмір піктограм" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Встановити розмір піктограм на стільниці." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Показувати особисту теку" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Показувати особисту теку на стільниці." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Показувати піктограму смітника" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Показувати піктограму смітника на стільниці." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Показувати змонтовані диски" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Показувати змонтовані диски на стільниці." +diff --git a/extensions/desktop-icons/po/zh_CN.po b/extensions/desktop-icons/po/zh_CN.po +new file mode 100644 +index 00000000..8f2bea44 +--- /dev/null ++++ b/extensions/desktop-icons/po/zh_CN.po +@@ -0,0 +1,228 @@ ++# Chinese (China) translation for desktop-icons. ++# Copyright (C) 2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Dingzhong Chen , 2019. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-06-23 21:51-0400\n" ++"Last-Translator: Boyuan Yang <073plan@gmail.com>\n" ++"Language-Team: Chinese (China) \n" ++"Language: zh_CN\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3.1\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "新文件夹名称" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "创建" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "取消" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "文件夹名称不能包含“/”。" ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "文件夹不能命名为“.”。" ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "文件夹不能命名为“..”。" ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "名称以“.”开头的文件夹将被隐藏。" ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "相同名称的文件夹已存在。" ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "桌面图标大小" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "小" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "标准" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "大" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "在桌面上显示个人文件夹" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "在桌面上显示回收站图标" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "在桌面上显示已挂载的驱动器" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "新建文件夹" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "新建文档" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "粘贴" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "撤消" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "恢复" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "在文件管理器中显示桌面" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "在终端中打开" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "更换壁纸…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "显示设置" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "设置" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "重命名" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "命令未找到" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "弹出驱动器“%s”失败:" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "不允许启动" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "允许启动" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "打开" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "用其他应用程序打开" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "使用独立显卡启动" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "剪除" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "复制" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "重命名…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "移到回收站" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "清空回收站" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "弹出" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "属性" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "在文件管理器中显示" ++ ++#: fileItem.js:925 ++msgid "Home" ++msgstr "主文件夹" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "图标大小" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "设定桌面图标的大小。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "显示个人文件夹" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "在桌面上显示个人文件夹。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "显示回收站图标" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "在桌面上显示回收站图标。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "显示已挂载的驱动器" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "在桌面上显示已挂载的驱动器。" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "输入文件名…" ++ ++#~ msgid "OK" ++#~ msgstr "确定" +diff --git a/extensions/desktop-icons/po/zh_TW.po b/extensions/desktop-icons/po/zh_TW.po +new file mode 100644 +index 00000000..16fadc48 +--- /dev/null ++++ b/extensions/desktop-icons/po/zh_TW.po +@@ -0,0 +1,220 @@ ++# Chinese (Taiwan) translation for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Yi-Jyun Pan , 2018. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-14 18:46+0000\n" ++"PO-Revision-Date: 2020-05-25 01:21+0800\n" ++"Last-Translator: Yi-Jyun Pan \n" ++"Language-Team: Chinese (Taiwan) \n" ++"Language: zh_TW\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3.1\n" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "新資料夾名稱" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "建立" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "取消" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "資料夾名稱不能有「/」。" ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "資料夾的名稱不能是「.」。" ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "資料夾的名稱不能是「..」。" ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "會隱藏名稱開頭是「.」的資料夾。" ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "已經有同名的檔案或資料夾。" ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "桌面圖示的大小" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "小圖示" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "標準大小圖示" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "大圖示" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "在桌面顯示個人資料夾" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "在桌面顯示垃圾桶圖示" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "在桌面顯示掛載裝置" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "新增資料夾" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "貼上" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "復原" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "重做" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "在《檔案》中顯示桌面" ++ ++#: desktopGrid.js:350 fileItem.js:702 ++msgid "Open in Terminal" ++msgstr "在終端器開啟" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "變更背景圖片…" ++ ++#: desktopGrid.js:354 ++msgid "Display Settings" ++msgstr "顯示設定" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "設定" ++ ++#: desktopGrid.js:653 ++msgid "Rename" ++msgstr "重新命名" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "找不到命令" ++ ++#. TRANSLATORS: %s is the filesystem name ++#: desktopIconsUtil.js:162 ++#, javascript-format ++msgid "Ejecting drive “%s” failed:" ++msgstr "退出「%s」裝置失敗:" ++ ++#: fileItem.js:565 ++msgid "Don’t Allow Launching" ++msgstr "不允許啟動" ++ ++#: fileItem.js:567 ++msgid "Allow Launching" ++msgstr "允許啟動" ++ ++#: fileItem.js:663 ++msgid "Open" ++msgstr "開啟" ++ ++#: fileItem.js:667 ++msgid "Open With Other Application" ++msgstr "以其他應用程式開啟" ++ ++#: fileItem.js:669 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "使用獨立圖形卡啟動" ++ ++#: fileItem.js:674 ++msgid "Cut" ++msgstr "剪下" ++ ++#: fileItem.js:675 ++msgid "Copy" ++msgstr "複製" ++ ++#: fileItem.js:677 ++msgid "Rename…" ++msgstr "重新命名…" ++ ++#: fileItem.js:678 ++msgid "Move to Trash" ++msgstr "移動到垃圾桶" ++ ++#: fileItem.js:688 ++msgid "Empty Trash" ++msgstr "清空垃圾桶" ++ ++#: fileItem.js:692 ++msgid "Eject" ++msgstr "退出" ++ ++#: fileItem.js:698 ++msgid "Properties" ++msgstr "屬性" ++ ++#: fileItem.js:700 ++msgid "Show in Files" ++msgstr "在《檔案》中顯示" ++ ++#: fileItem.js:906 ++msgid "Home" ++msgstr "首頁" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "圖示大小" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "設定桌面圖示的大小。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "顯示個人資料夾" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "在桌面顯示個人資料夾。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "顯示垃圾桶圖示" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "在桌面顯示垃圾桶圖示。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "顯示掛載裝置" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "在桌面顯示掛載裝置。" ++ ++#~ msgid "Huge" ++#~ msgstr "巨大圖示" +diff --git a/extensions/desktop-icons/prefs.js b/extensions/desktop-icons/prefs.js +new file mode 100644 +index 00000000..890bcdb4 +--- /dev/null ++++ b/extensions/desktop-icons/prefs.js +@@ -0,0 +1,161 @@ ++ ++/* Desktop Icons GNOME Shell extension ++ * ++ * Copyright (C) 2017 Carlos Soriano ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++const Gtk = imports.gi.Gtk; ++const GObject = imports.gi.GObject; ++const Gio = imports.gi.Gio; ++const GioSSS = Gio.SettingsSchemaSource; ++const ExtensionUtils = imports.misc.extensionUtils; ++const Gettext = imports.gettext; ++ ++const Config = imports.misc.config; ++ ++var _ = Gettext.domain('gnome-shell-extensions').gettext; ++ ++const SCHEMA_NAUTILUS = 'org.gnome.nautilus.preferences'; ++const SCHEMA_GTK = 'org.gtk.Settings.FileChooser'; ++const SCHEMA = 'org.gnome.shell.extensions.desktop-icons'; ++ ++const ICON_SIZE = { 'small': 48, 'standard': 64, 'large': 96 }; ++const ICON_WIDTH = { 'small': 108, 'standard': 116, 'large': 116 }; ++const ICON_HEIGHT = { 'small': 86, 'standard': 102, 'large': 134 }; ++ ++var FileType = { ++ NONE: null, ++ USER_DIRECTORY_HOME: 'show-home', ++ USER_DIRECTORY_TRASH: 'show-trash', ++ MOUNT_DISK: 'mount-disk', ++} ++ ++var nautilusSettings; ++var gtkSettings; ++var settings; ++// This is already in Nautilus settings, so it should not be made tweakable here ++var CLICK_POLICY_SINGLE = false; ++ ++function initTranslations() { ++ let extension = ExtensionUtils.getCurrentExtension(); ++ ++ let localedir = extension.dir.get_child('locale'); ++ if (localedir.query_exists(null)) ++ Gettext.bindtextdomain('gnome-shell-extensions', localedir.get_path()); ++ else ++ Gettext.bindtextdomain('gnome-shell-extensions', Config.LOCALEDIR); ++} ++ ++function init() { ++ let schemaSource = GioSSS.get_default(); ++ let schemaGtk = schemaSource.lookup(SCHEMA_GTK, true); ++ gtkSettings = new Gio.Settings({ settings_schema: schemaGtk }); ++ let schemaObj = schemaSource.lookup(SCHEMA_NAUTILUS, true); ++ if (!schemaObj) { ++ nautilusSettings = null; ++ } else { ++ nautilusSettings = new Gio.Settings({ settings_schema: schemaObj });; ++ nautilusSettings.connect('changed', _onNautilusSettingsChanged); ++ _onNautilusSettingsChanged(); ++ } ++ settings = get_schema(SCHEMA); ++} ++ ++function get_schema(schema) { ++ let extension = ExtensionUtils.getCurrentExtension(); ++ ++ // check if this extension was built with "make zip-file", and thus ++ // has the schema files in a subfolder ++ // otherwise assume that extension has been installed in the ++ // same prefix as gnome-shell (and therefore schemas are available ++ // in the standard folders) ++ let schemaDir = extension.dir.get_child('schemas'); ++ let schemaSource; ++ if (schemaDir.query_exists(null)) ++ schemaSource = GioSSS.new_from_directory(schemaDir.get_path(), GioSSS.get_default(), false); ++ else ++ schemaSource = GioSSS.get_default(); ++ ++ let schemaObj = schemaSource.lookup(schema, true); ++ if (!schemaObj) ++ throw new Error('Schema ' + schema + ' could not be found for extension ' + extension.metadata.uuid + '. Please check your installation.'); ++ ++ return new Gio.Settings({ settings_schema: schemaObj }); ++} ++ ++function buildPrefsWidget() { ++ initTranslations(); ++ let frame = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL, border_width: 10, spacing: 10 }); ++ ++ frame.add(buildSelector('icon-size', _("Size for the desktop icons"), { 'small': _("Small"), 'standard': _("Standard"), 'large': _("Large") })); ++ frame.add(buildSwitcher('show-home', _("Show the personal folder in the desktop"))); ++ frame.add(buildSwitcher('show-trash', _("Show the trash icon in the desktop"))); ++ frame.add(buildSwitcher('show-mount', _("Show mounted drives in the desktop"))); ++ frame.show_all(); ++ return frame; ++} ++ ++function buildSwitcher(key, labelText) { ++ let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL, spacing: 10 }); ++ let label = new Gtk.Label({ label: labelText, xalign: 0 }); ++ let switcher = new Gtk.Switch({ active: settings.get_boolean(key) }); ++ settings.bind(key, switcher, 'active', 3); ++ hbox.pack_start(label, true, true, 0); ++ hbox.add(switcher); ++ return hbox; ++} ++ ++function buildSelector(key, labelText, elements) { ++ let listStore = new Gtk.ListStore(); ++ listStore.set_column_types ([GObject.TYPE_STRING, GObject.TYPE_STRING]); ++ let schemaKey = settings.settings_schema.get_key(key); ++ let values = schemaKey.get_range().get_child_value(1).get_child_value(0).get_strv(); ++ for (let val of values) { ++ let iter = listStore.append(); ++ let visibleText = val; ++ if (visibleText in elements) ++ visibleText = elements[visibleText]; ++ listStore.set (iter, [0, 1], [visibleText, val]); ++ } ++ let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL, spacing: 10 }); ++ let label = new Gtk.Label({ label: labelText, xalign: 0 }); ++ let combo = new Gtk.ComboBox({model: listStore}); ++ let rendererText = new Gtk.CellRendererText(); ++ combo.pack_start (rendererText, false); ++ combo.add_attribute (rendererText, 'text', 0); ++ combo.set_id_column(1); ++ settings.bind(key, combo, 'active-id', 3); ++ hbox.pack_start(label, true, true, 0); ++ hbox.add(combo); ++ return hbox; ++} ++ ++function _onNautilusSettingsChanged() { ++ CLICK_POLICY_SINGLE = nautilusSettings.get_string('click-policy') == 'single'; ++} ++ ++function get_icon_size() { ++ // this one doesn't need scaling because Gnome Shell automagically scales the icons ++ return ICON_SIZE[settings.get_string('icon-size')]; ++} ++ ++function getDesiredWidth(scale_factor, margin) { ++ return (ICON_WIDTH[settings.get_string('icon-size')] + margin) * scale_factor; ++} ++ ++function getDesiredHeight(scale_factor, margin) { ++ return (ICON_HEIGHT[settings.get_string('icon-size')] + margin) * scale_factor; ++} +diff --git a/extensions/desktop-icons/schemas/meson.build b/extensions/desktop-icons/schemas/meson.build +new file mode 100644 +index 00000000..2b179165 +--- /dev/null ++++ b/extensions/desktop-icons/schemas/meson.build +@@ -0,0 +1,6 @@ ++gnome.compile_schemas() ++ ++install_data( ++ 'org.gnome.shell.extensions.desktop-icons.gschema.xml', ++ install_dir : schema_dir ++) +diff --git a/extensions/desktop-icons/schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml b/extensions/desktop-icons/schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml +new file mode 100644 +index 00000000..de126b5b +--- /dev/null ++++ b/extensions/desktop-icons/schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml +@@ -0,0 +1,30 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 'standard' ++ Icon size ++ Set the size for the desktop icons. ++ ++ ++ true ++ Show personal folder ++ Show the personal folder in the desktop. ++ ++ ++ true ++ Show trash icon ++ Show the trash icon in the desktop. ++ ++ ++ true ++ Show mounted drives ++ Show mounted drives in the desktop. ++ ++ ++ +diff --git a/extensions/desktop-icons/stylesheet.css b/extensions/desktop-icons/stylesheet.css +new file mode 100644 +index 00000000..61b4ce86 +--- /dev/null ++++ b/extensions/desktop-icons/stylesheet.css +@@ -0,0 +1,42 @@ ++.file-item { ++ padding: 4px; ++ border: 1px; ++ margin: 1px; ++} ++ ++.file-item:hover { ++ background-color: rgba(238, 238, 238, 0.2); ++} ++ ++.name-label { ++ text-shadow: 1px 1px black; ++ color: white; ++ text-align: center; ++} ++ ++.draggable { ++ background-color: red; ++} ++ ++.rename-popup { ++ min-width: 300px; ++ margin: 6px; ++} ++ ++.rename-popup .rename-popup-item { ++ spacing: 6px; ++} ++.rename-popup .rename-popup-item:ltr, ++.rename-popup .rename-popup-item:rtl { ++ padding: 0, 12px; ++} ++ ++.create-folder-dialog-entry { ++ width: 20em; ++ margin-bottom: 6px; ++} ++ ++.create-folder-dialog-error-box { ++ padding-top: 16px; ++ spacing: 6px; ++} +diff --git a/extensions/desktop-icons/templateManager.js b/extensions/desktop-icons/templateManager.js +new file mode 100644 +index 00000000..a468f4ab +--- /dev/null ++++ b/extensions/desktop-icons/templateManager.js +@@ -0,0 +1,104 @@ ++/* DING: Desktop Icons New Generation for GNOME Shell ++ * ++ * Copyright (C) 2020 Sergio Costas (rastersoft@gmail.com) ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, version 3 of the License. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const DesktopIconsUtil = Me.imports.desktopIconsUtil; ++ ++var TemplateManager = class { ++ ++ constructor() { ++ this._templates = []; ++ this._templatesEnumerateCancellable = null; ++ this._templateDir = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_TEMPLATES); ++ if (this._templateDir == GLib.get_home_dir()) ++ this._templateDir = null; ++ this.updated = true; ++ if (this._templateDir != null) { ++ this._templateGFile = Gio.File.new_for_path(this._templateDir); ++ this._monitor = this._templateGFile.monitor_directory(Gio.FileMonitorFlags.NONE, null); ++ this._monitorId = this._monitor.connect("changed", () => { ++ this._refreshTemplates(); ++ }); ++ this._refreshTemplates(); ++ } else { ++ this._templateGFile = null; ++ this._monitorId = null; ++ } ++ } ++ ++ destroy() { ++ if (this._monitorId) ++ this._monitor.disconnect(this._monitorId); ++ this._monitorId = null; ++ } ++ ++ getTemplates() { ++ let templates = []; ++ for(let template of this._templates) { ++ let data = {}; ++ data["icon"] = template.get_icon(); ++ let name = template.get_name(); ++ let offset = DesktopIconsUtil.getFileExtensionOffset(name, false); ++ data["name"] = name.substring(0, offset); ++ data["extension"] = name.substring(offset); ++ data["file"] = name; ++ templates.push(data); ++ } ++ this.updated = false; ++ return templates; ++ } ++ ++ _refreshTemplates() { ++ if (this._templatesEnumerateCancellable) ++ this._templatesEnumerateCancellable.cancel(); ++ this._templatesEnumerateCancellable = new Gio.Cancellable(); ++ this._templateGFile.enumerate_children_async( ++ DesktopIconsUtil.DEFAULT_ATTRIBUTES, ++ Gio.FileQueryInfoFlags.NONE, ++ GLib.PRIORITY_DEFAULT, ++ this._templatesEnumerateCancellable, ++ (source, result) => { ++ try { ++ let fileEnum = source.enumerate_children_finish(result); ++ this._templates = []; ++ let info; ++ while ((info = fileEnum.next_file(null))) { ++ if (info.get_file_type() != Gio.FileType.DIRECTORY) ++ this._templates.push(info); ++ } ++ this.updated = true; ++ } catch(e) { ++ global.log(`Exception while reading templates ${e}`); ++ } ++ } ++ ); ++ } ++ ++ getTemplateFile(name) { ++ if (this._templateGFile == null) ++ return null; ++ let template = Gio.File.new_for_path(GLib.build_filenamev([this._templateDir, name])); ++ if (template.query_exists(null)) ++ return template; ++ else ++ return null; ++ } ++} +diff --git a/meson.build b/meson.build +index c609ae52..b83f0795 100644 +--- a/meson.build ++++ b/meson.build +@@ -28,6 +28,7 @@ uuid_suffix = '@gnome-shell-extensions.gcampax.github.com' + + classic_extensions = [ + 'apps-menu', ++ 'desktop-icons', + 'places-menu', + 'launch-new-instance', + 'window-list' +diff --git a/po/ca.po b/po/ca.po +index d17003f9..8e21b717 100644 +--- a/po/ca.po ++++ b/po/ca.po +@@ -1,11 +1,18 @@ ++# #-#-#-#-# ca.po (gnome-shell-extensions) #-#-#-#-# + # Catalan translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. + # Jordi Mas i Hernandez , 2011. + # Gil Forcada , 2012, 2013, 2014. + # ++# #-#-#-#-# ca.po (1.0) #-#-#-#-# ++# This file is distributed under the same license as the PACKAGE package. ++# Jordi Mas i Hernandez , 2019-2020 ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# ca.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -18,6 +25,19 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=n != 1;\n" ++"#-#-#-#-# ca.po (1.0) #-#-#-#-#\n" ++"Project-Id-Version: 1.0\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2019-07-22 10:24+0200\n" ++"Last-Translator: Jordi Mas \n" ++"Language-Team: Catalan \n" ++"Language: ca\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.2.1\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -58,7 +78,7 @@ msgstr "Afegeix una regla" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 + #, javascript-format + msgid "Ejecting drive “%s” failed:" + msgstr "Ha fallat l'expulsió de la unitat «%s»:" +@@ -81,10 +101,10 @@ msgid "" + "aspect ratio, and consolidating them further to reduce the bounding box. " + "This setting applies only with the natural placement strategy." + msgstr "" +-"Intenta utilitzar més espai de la pantalla per a posicionar les miniatures de " +-"les finestres adaptant-les a la ràtio d'aspecte de la pantalla, consolidant-" +-"les més per a reduir la caixa que les envolta. Aquest paràmetre de " +-"configuració només s'aplica a l'estratègia de posicionament de finestres " ++"Intenta utilitzar més espai de la pantalla per a posicionar les miniatures " ++"de les finestres adaptant-les a la ràtio d'aspecte de la pantalla, " ++"consolidant-les més per a reduir la caixa que les envolta. Aquest paràmetre " ++"de configuració només s'aplica a l'estratègia de posicionament de finestres " + "natural." + + #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 +@@ -122,7 +142,7 @@ msgstr "No s'ha pogut muntar el volum «%s»" + msgid "Computer" + msgstr "Ordinador" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Inici" + +@@ -264,3 +284,194 @@ msgstr "Espai de treball %d" + msgid "Add Workspace" + msgstr "Afegeix un espai de treball" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nom de la carpeta nova" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Crea" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Cancel·la" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Els noms de carpetes no poden contenir «/»." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Una carpeta no es pot anomenar «.»." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Una carpeta no es pot anomenar «..»." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Les carpetes amb un «.» a l'inici del seu nom s'amaguen." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Ja existeix un fitxer o carpeta amb aquest nom." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Mida de les icones d'escriptori" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Petita" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Estàndard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Gran" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostra la carpeta personal a l'escriptori" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostra la icona de la paperera a l'escriptori" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Mostra les unitats muntades a l'escriptori" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Carpeta nova" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Document nou" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Enganxa" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Desfés" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Refés" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Mostra l'escriptori al Fitxers" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Obre al Terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Canvia el fons de l'escriptori…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Paràmetres de la pantalla" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Paràmetres" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Canvia el nom" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "No s'ha trobat l'ordre" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "No permetis que s'iniciï" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Permet que s'iniciï" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Obre" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Obre amb una altra aplicació" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Llança usant la targeta gràfica dedicada" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Retalla" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Copia" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Canvia el nom…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Mou a la paperera" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Buida la paperera" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Expulsa" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Propietats" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Mostra al Fitxers" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Mida d'icona" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Estableix la mida per les icones de l'escriptori." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostra la carpeta personal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostra la carpeta personal a l'escriptori." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostra la icona de la paperera" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostra la icona de la paperera a l'escriptori." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Mostra les unitats muntades" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Mostra la icona de la paperera a l'escriptori." +diff --git a/po/cs.po b/po/cs.po +index 572b3787..f0d57b72 100644 +--- a/po/cs.po ++++ b/po/cs.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# cs.po (gnome-shell-extensions) #-#-#-#-# ++# #-#-#-#-# cs.po (gnome-shell-extensions) #-#-#-#-# + # Czech translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -11,10 +12,18 @@ + # This file is distributed under the same license as the dash-to-dock package. + # Jiří Doubravský , 2015. + # ++# #-#-#-#-# cs.po (desktop-icons master) #-#-#-#-# ++# Czech translation for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Marek Černocký , 2018. ++# Milan Zink , 2018. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# cs.po (gnome-shell-extensions) #-#-#-#-#\n" ++"#-#-#-#-# cs.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -41,6 +50,20 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.3\n" + "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" ++"#-#-#-#-# cs.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-06-16 14:22+0200\n" ++"Last-Translator: Daniel Rusek \n" ++"Language-Team: Czech \n" ++"Language: cs\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" ++"X-Generator: Poedit 2.3.1\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -80,10 +103,14 @@ msgstr "Přidat pravidlo" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "Vysunutí disku „%s“ selhalo:" ++msgstr "" ++"#-#-#-#-# cs.po (gnome-shell-extensions) #-#-#-#-#\n" ++"Vysunutí disku „%s“ selhalo:\n" ++"#-#-#-#-# cs.po (desktop-icons master) #-#-#-#-#\n" ++"Vysunutí svazku „%s“ selhalo:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -141,7 +168,7 @@ msgstr "Selhalo připojení svazku pro „%s“" + msgid "Computer" + msgstr "Počítač" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Domů" + +@@ -340,7 +367,7 @@ msgstr "%s Dash to Docku" + msgid "Trash" + msgstr "Koš" + +-#: locations.js:74 ++#: locations.js:74 fileItem.js:707 + msgid "Empty Trash" + msgstr "Vyprázdnit koš" + +@@ -348,7 +375,7 @@ msgstr "Vyprázdnit koš" + msgid "Mount" + msgstr "Připojit" + +-#: locations.js:235 ++#: locations.js:235 fileItem.js:711 + msgid "Eject" + msgstr "Vysunout" + +@@ -800,6 +827,190 @@ msgstr "Prodleva při zobrazení (s)" + msgid "Pressure threshold" + msgstr "Míra tlaku (px)" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Název nové složky" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Vytvořit" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Zrušit" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Názvy složek nesmí obsahovat „/“." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Složka se nemůže jmenovat „.“." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Složka se nemůže jmenovat „..“." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Složky s „.“ na začátku jejich názvu jsou skryty." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Soubor nebo složka s tímto názvem již existuje." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Velikost ikon na pracovní ploše" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "malé" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "standardní" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "velké" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Zobrazovat osobní složku na pracovní ploše" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Zobrazovat ikonu koše na pracovní ploše" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Zobrazovat připojené svazky na pracovní ploše" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nová složka" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nový dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Vložit" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Zpět" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Znovu" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Zobrazit plochu v Souborech" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Otevřít v terminálu" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Změnit pozadí…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Nastavení zobrazení" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Nastavení" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Přejmenovat" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Příkaz nebyl nalezen" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Nepovolit spouštění" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Povolit spouštění" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Otevřít" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Otevřít pomocí jiné aplikace" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Spustit pomocí vyhrazené grafické karty" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Vyjmout" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopírovat" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Přejmenovat…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Přesunout do koše" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Vlastnosti" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Zobrazit v Souborech" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Velikost ikon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Nastavit velikost pro ikony na pracovní ploše." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Zobrazovat osobní složku" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Zobrazovat osobní složku na pracovní ploše." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Zobrazovat koš" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Zobrazovat ikonu koše na pracovní ploše." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Zobrazovat připojené svazky" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Zobrazovat připojené svazky na pracovní ploše." ++ + #~ msgid "Show a dot for each windows of the application." + #~ msgstr "Zobrazit u ikon tečku indikující každé otevřené okno aplikace" + +@@ -808,3 +1019,15 @@ msgstr "Míra tlaku (px)" + + #~ msgid "Adaptive" + #~ msgstr "Adaptivní" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Zadejte název souboru…" ++ ++#~ msgid "OK" ++#~ msgstr "Budiž" ++ ++#~ msgid "Huge" ++#~ msgstr "obrovské" ++ ++#~ msgid "Ok" ++#~ msgstr "Ok" +diff --git a/po/da.po b/po/da.po +index bc592f02..4bd6d2fe 100644 +--- a/po/da.po ++++ b/po/da.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# da.po (gnome-shell-extensions master) #-#-#-#-# + # Danish translation for gnome-shell-extensions. + # Copyright (C) 2011-2017 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -6,8 +7,16 @@ + # Ask Hjorth Larsen , 2015, 2017. + # Joe Hansen , 2017. + # ++# #-#-#-#-# da.po (desktop-icons master) #-#-#-#-# ++# Danish translation for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Alan Mortensen , 2018. ++# scootergrisen, 2020. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# da.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -21,6 +30,19 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Poedit 2.3\n" ++"#-#-#-#-# da.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-10-10 00:00+0200\n" ++"Last-Translator: scootergrisen\n" ++"Language-Team: Danish \n" ++"Language: da\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -58,9 +80,12 @@ msgstr "Regler for arbejdsområde" + msgid "Add Rule" + msgstr "Tilføj regel" + ++#. #-#-#-#-# da.po (gnome-shell-extensions master) #-#-#-#-# + #. TRANSLATORS: %s is the filesystem name ++#. #-#-#-#-# da.po (desktop-icons master) #-#-#-#-# ++#. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 + #, javascript-format + msgid "Ejecting drive “%s” failed:" + msgstr "Udskubning af drevet “%s” mislykkedes:" +@@ -123,7 +148,7 @@ msgstr "Kunne ikke montere diskenhed for “%s”" + msgid "Computer" + msgstr "Computer" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Hjem" + +@@ -263,6 +288,202 @@ msgstr "Arbejdsområde %d" + msgid "Add Workspace" + msgstr "Tilføj arbejdsområde" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nyt mappenavn" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Opret" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Annullér" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Mappenavne må ikke indeholde “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "En mappe må ikke kaldes “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "En mappe må ikke kaldes “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Mapper med “.” i begyndelsen af deres navn er skjulte." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Der findes allerede en fil eller mappe med det navn." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Størrelsen på skrivebordsikoner" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Små" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Store" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Vis den personlige mappe på skrivebordet" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Vis papirkurvsikonet på skrivebordet" ++ ++#: prefs.js:106 ++#| msgid "Show the trash icon in the desktop" ++msgid "Show mounted drives in the desktop" ++msgstr "Vis monterede drev på skrivebordet" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Ny mappe" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nyt dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Indsæt" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Fortryd" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Omgør" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Vis skrivebordet i Filer" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Åbn i terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Skift baggrund …" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Skærmindstillinger" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Indstillinger" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Omdøb" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Kommando ikke fundet" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Tillad ikke opstart" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Tillad opstart" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Åbn" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Åbn med et andet program" ++ ++# scootergrisen: tjek oversættelsen af "Dedicated" ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Start med dedikeret grafikkort" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Klip" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopiér" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Omdøb …" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Flyt til papirkurven" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Tøm papirkurven" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Skub ud" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Egenskaber" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Vis i Filer" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Ikonstørrelse" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Angiv størrelsen på skrivebordsikoner." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Vis personlig mappe" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Vis den personlige mappe på skrivebordet." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Vis papirkurvsikon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Vis papirkurvsikonet på skrivebordet." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++#| msgid "Show in Files" ++msgid "Show mounted drives" ++msgstr "Vis monterede drev" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++#| msgid "Show the trash icon in the desktop." ++msgid "Show mounted drives in the desktop." ++msgstr "Vis monterede drev på skrivebordet." ++ + #~ msgid "Application" + #~ msgstr "Program" + +diff --git a/po/de.po b/po/de.po +index 30119a76..e8246586 100644 +--- a/po/de.po ++++ b/po/de.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# de.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# de.po (gnome-shell-extensions master) #-#-#-#-# + # German translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -17,10 +18,18 @@ + # Jonatan Zeidler , 2012 + # jonius , 2012 + # ++# #-#-#-#-# de.po (desktop-icons master) #-#-#-#-# ++# German translation for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Mario Blättermann , 2018. ++# rugk , 2019. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# de.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# de.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -46,6 +55,20 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.0.4\n" ++"#-#-#-#-# de.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-08-16 14:44+0000\n" ++"PO-Revision-Date: 2020-08-26 22:46+0200\n" ++"Last-Translator: Christian Kirbach \n" ++"Language-Team: German \n" ++"Language: de\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Poedit 2.3.1\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -86,10 +109,14 @@ msgstr "Regel hinzufügen" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "Auswerfen von Laufwerk »%s« schlug fehl:" ++msgstr "" ++"#-#-#-#-# de.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Auswerfen von Laufwerk »%s« schlug fehl:\n" ++"#-#-#-#-# de.po (desktop-icons master) #-#-#-#-#\n" ++"Auswerfen des Laufwerks »%s« fehlgeschlagen:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -149,9 +176,14 @@ msgstr "Datenträger für »%s« konnte nicht eingebunden werden" + msgid "Computer" + msgstr "Rechner" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:927 ++#, fuzzy + msgid "Home" +-msgstr "Persönlicher Ordner" ++msgstr "" ++"#-#-#-#-# de.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Persönlicher Ordner\n" ++"#-#-#-#-# de.po (desktop-icons master) #-#-#-#-#\n" ++"Startseite" + + #: extensions/places-menu/placeDisplay.js:404 + msgid "Browse Network" +@@ -729,6 +761,198 @@ msgstr "Stoßschwellwert" + msgid "Isolate monitors." + msgstr "Isoliere Monitore." + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Neuer Ordner" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Erstellen" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Abbrechen" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Ordnernamen dürfen kein »/« enthalten." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Ein Ordner darf nicht ».« genannt werden." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Ein Ordner darf nicht »..« genannt werden." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Ordner mit ».« am Anfang sind verborgen." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Es gibt bereits eine Datei oder einen Ordner mit diesem Namen." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Größe der Arbeitsflächensymbole" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Klein" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Groß" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Den persönlichen Ordner auf der Arbeitsfläche anzeigen" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Papierkorb-Symbol auf der Arbeitsfläche anzeigen" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Eingebundene Laufwerke auf der Arbeitsfläche anzeigen" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Neuer Ordner" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Neues Dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Einfügen" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Rückgängig" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Wiederholen" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Schreibtisch in Dateien anzeigen" ++ ++#: desktopGrid.js:355 fileItem.js:723 ++msgid "Open in Terminal" ++msgstr "Im Terminal öffnen" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Hintergrund ändern …" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Anzeigeeinstellungen" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Einstellungen" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Umbenennen" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Befehl nicht gefunden" ++ ++#: fileItem.js:586 ++msgid "Don’t Allow Launching" ++msgstr "Start nicht erlauben" ++ ++#: fileItem.js:588 ++msgid "Allow Launching" ++msgstr "Start erlauben" ++ ++#: fileItem.js:684 ++msgid "Open" ++msgstr "Öffnen" ++ ++#: fileItem.js:688 ++msgid "Open With Other Application" ++msgstr "Mit anderer Anwendung öffnen" ++ ++#: fileItem.js:690 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Start mit dedizierter Grafikkarte" ++ ++#: fileItem.js:695 ++msgid "Cut" ++msgstr "Ausschneiden" ++ ++#: fileItem.js:696 ++msgid "Copy" ++msgstr "Kopieren" ++ ++#: fileItem.js:698 ++msgid "Rename…" ++msgstr "Umbenennen …" ++ ++#: fileItem.js:699 ++msgid "Move to Trash" ++msgstr "In den Papierkorb verschieben" ++ ++#: fileItem.js:709 ++msgid "Empty Trash" ++msgstr "Papierkorb leeren" ++ ++#: fileItem.js:713 ++msgid "Eject" ++msgstr "Auswerfen" ++ ++#: fileItem.js:719 ++msgid "Properties" ++msgstr "Eigenschaften" ++ ++#: fileItem.js:721 ++msgid "Show in Files" ++msgstr "In Dateiverwaltung anzeigen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Symbolgröße" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Die Größe der Arbeitsflächensymbole festlegen." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Persönlichen Ordner anzeigen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Den persönlichen Ordner auf der Arbeitsfläche anzeigen." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Papierkorb-Symbol anzeigen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Das Papierkorb-Symbol auf der Arbeitsfläche anzeigen." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Eingebundene Laufwerke anzeigen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Eingebundene Laufwerke auf der Arbeitsfläche anzeigen." ++ + #~ msgid "Application" + #~ msgstr "Anwendung" + +@@ -939,3 +1163,12 @@ msgstr "Isoliere Monitore." + #~ msgstr "" + #~ "Benutzerdefiniertes Theme verwenden (funktioniert nur mit dem Standard-" + #~ "Adwaita-Theme)" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Dateinamen eingeben …" ++ ++#~ msgid "OK" ++#~ msgstr "OK" ++ ++#~ msgid "Huge" ++#~ msgstr "Riesig" +diff --git a/po/el.po b/po/el.po +index bd0a7a5f..fde56dd9 100644 +--- a/po/el.po ++++ b/po/el.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# el.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# el.po (gnome-shell-extensions master) #-#-#-#-# + # Greek translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -16,10 +17,17 @@ + # Δημήτριος-Ρωμανός Ησαΐας , 2017. + # Vangelis Skarmoutsos , 2017. + # ++# #-#-#-#-# el.po (desktop-icons master) #-#-#-#-# ++# Greek translation for desktop-icons. ++# Copyright (C) 2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Emmanouil I. Kapernaros , 2019. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# el.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# el.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -47,6 +55,19 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.0.3\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"#-#-#-#-# el.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-04-05 21:12+0200\n" ++"PO-Revision-Date: 2019-10-30 23:18+0200\n" ++"Last-Translator: Emmanouil I. Kapernaros \n" ++"Language-Team: Greek, Modern (1453-) \n" ++"Language: el\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1)\n" ++"X-Generator: Gtranslator 3.34.0\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -711,6 +732,179 @@ msgstr "Χρονικό όριο εμφάνισης" + msgid "Pressure threshold" + msgstr "Ελάχιστη πίεση" + ++#: desktopGrid.js:354 ++#, fuzzy ++msgid "Display Settings" ++msgstr "" ++"#-#-#-#-# el.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Ρυθμίσεις οθόνης\n" ++"#-#-#-#-# el.po (desktop-icons master) #-#-#-#-#\n" ++"Ρυθμίσεις Οθόνης" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Μέγεθος εικονιδίου" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Ακύρωση" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Όνομα νέου φακέλου" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Δημιουργία" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Τα ονόματα φακέλων δεν μπορούν να περιέχουν “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Ο φάκελος δεν μπορεί να ονομάζεται “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Ο φάκελος δεν μπορεί να ονομάζεται “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Οι φάκελοι με “.” στην αρχή του ονόματος τους είναι κρυφοί" ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Υπάρχει ήδη ένας φάκελος ή αρχείο με αυτό το όνομα" ++ ++#: prefs.js:102 ++msgid "Size for the desktop icons" ++msgstr "Μέγεθος για τα εικονίδια επιφάνειας εργασίας" ++ ++#: prefs.js:102 ++msgid "Small" ++msgstr "Μικρό" ++ ++#: prefs.js:102 ++msgid "Standard" ++msgstr "Κανονικό" ++ ++#: prefs.js:102 ++msgid "Large" ++msgstr "Μεγάλο" ++ ++#: prefs.js:103 ++msgid "Show the personal folder in the desktop" ++msgstr "Εμφάνιση του προσωπικού φακέλου στην επιφάνεια εργασίας" ++ ++#: prefs.js:104 ++msgid "Show the trash icon in the desktop" ++msgstr "Εμφάνιση του εικονίδιου απορριμάτων στην επιφάνεια εργασίας" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "Νέος Φάκελος" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "Επικόλληση" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "Αναίρεση" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "Επανάληψη" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "Εμφάνιση Επιφάνειας εργασίας στα Αρχεία" ++ ++#: desktopGrid.js:350 fileItem.js:651 ++msgid "Open in Terminal" ++msgstr "Άνοιγμα στο Τερματικό" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "Αλλαγή Φόντου" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "Ρυθμίσεις" ++ ++#: desktopGrid.js:653 ++msgid "Rename" ++msgstr "Μετονομασία" ++ ++#: desktopIconsUtil.js:61 ++msgid "Command not found" ++msgstr "Η εντολή δεν βρέθηκε" ++ ++#: fileItem.js:521 ++msgid "Don’t Allow Launching" ++msgstr "Μην Επιτρέψεις Εκτέλεση" ++ ++#: fileItem.js:523 ++msgid "Allow Launching" ++msgstr "Επέτρεψε Εκτέλεση" ++ ++#: fileItem.js:619 ++msgid "Open" ++msgstr "Άνοιγμα" ++ ++#: fileItem.js:623 ++msgid "Open With Other Application" ++msgstr "Άνοιγμα Με Άλλη Εφαρμογή" ++ ++#: fileItem.js:627 ++msgid "Cut" ++msgstr "Αποκοπή" ++ ++#: fileItem.js:628 ++msgid "Copy" ++msgstr "Αντιγραφή" ++ ++#: fileItem.js:630 ++msgid "Rename…" ++msgstr "Μετονομασία" ++ ++#: fileItem.js:631 ++msgid "Move to Trash" ++msgstr "Μετακίνηση στα Απορρίματα" ++ ++#: fileItem.js:641 ++msgid "Empty Trash" ++msgstr "Άδειασμα Απορριμάτων" ++ ++#: fileItem.js:647 ++msgid "Properties" ++msgstr "Ιδιότητες" ++ ++#: fileItem.js:649 ++msgid "Show in Files" ++msgstr "Εμφάνιση στα Αρχεία" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Ορισμός μεγέθους για τα εικονίδια της επιφάνειας εργασίας" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Εμφάνιση προσωπικού φακέλου" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Εμφάνιση του προσωπικού φακέλου στην επιφάνεια εργασίας" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Εμφάνιση του εικονιδίου απορριμμάτων" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Εμφάνιση του εικονιδίου απορριμμάτων στην επιφάνεια εργασίας" ++ + #~ msgid "Application" + #~ msgstr "Εφαρμογή" + +@@ -838,9 +1032,6 @@ msgstr "Ελάχιστη πίεση" + #~ msgid "Display" + #~ msgstr "Οθόνη" + +-#~ msgid "Display Settings" +-#~ msgstr "Ρυθμίσεις οθόνης" +- + #~ msgid "The application icon mode." + #~ msgstr "Η λειτουργία εικονιδίου της εφαρμογής" + +@@ -876,9 +1067,6 @@ msgstr "Ελάχιστη πίεση" + #~ "Ρυθμίζει τη θέση του υποδοχέα στην οθόνη. Επιτρεπόμενες τιμές είναι right " + #~ "(«δεξιά») ή right («αριστερά»)" + +-#~ msgid "Icon size" +-#~ msgstr "Μέγεθος εικονιδίου" +- + #~ msgid "Sets icon size of the dock." + #~ msgstr "Ρυθμίζει το μέγεθος εικόνας του υποδοχέα." + +@@ -1066,9 +1254,6 @@ msgstr "Ελάχιστη πίεση" + #~ msgid "Alt Tab Behaviour" + #~ msgstr "Συμπεριφορά Alt Tab" + +-#~ msgid "Cancel" +-#~ msgstr "Ακύρωση" +- + #~ msgid "Ask the user for a default behaviour if true." + #~ msgstr "Ρωτήστε τον χρήστη για μια προεπιλεγμένη συμπεριφορα εαν αληθεύει." + +@@ -1087,3 +1272,6 @@ msgstr "Ελάχιστη πίεση" + + #~ msgid "Window placement strategy" + #~ msgstr "Στρατηγική τοποθέτησης παραθύρου" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Εισάγετε όνομα αρχείου..." +diff --git a/po/en_GB.po b/po/en_GB.po +index 81ca1146..e98f70dd 100644 +--- a/po/en_GB.po ++++ b/po/en_GB.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# en_GB.po (gnome-shell-extensions) #-#-#-#-# + # British English translation of gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions'S COPYRIGHT HOLDER. + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -6,8 +7,16 @@ + # Philip Withnall , 2014. + # Zander Brown , 2019-2020. + # ++# #-#-#-#-# en_GB.po (desktop-icons master) #-#-#-#-# ++# British English translation for desktop-icons. ++# Copyright (C) 2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Zander Brown , 2019. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# en_GB.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -22,6 +31,19 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Gtranslator 3.36.0\n" + "X-Project-Style: gnome\n" ++"#-#-#-#-# en_GB.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-04-05 21:12+0200\n" ++"PO-Revision-Date: 2019-08-23 21:48+0100\n" ++"Last-Translator: Zander Brown \n" ++"Language-Team: English - United Kingdom \n" ++"Language: en_GB\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Gtranslator 3.32.1\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -263,6 +285,175 @@ msgstr "Workspace %d" + msgid "Add Workspace" + msgstr "Add Workspace" + ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Icon size" ++ ++#: desktopGrid.js:354 ++msgid "Display Settings" ++msgstr "Display Settings" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Cancel" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "New folder name" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Create" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Folder names cannot contain “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "A folder cannot be called “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "A folder cannot be called “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Folders with “.” at the beginning of their name are hidden." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "There is already a file or folder with that name." ++ ++#: prefs.js:102 ++msgid "Size for the desktop icons" ++msgstr "Size for the desktop icons" ++ ++#: prefs.js:102 ++msgid "Small" ++msgstr "Small" ++ ++#: prefs.js:102 ++msgid "Standard" ++msgstr "Standard" ++ ++#: prefs.js:102 ++msgid "Large" ++msgstr "Large" ++ ++#: prefs.js:103 ++msgid "Show the personal folder in the desktop" ++msgstr "Show the personal folder on the desktop" ++ ++#: prefs.js:104 ++msgid "Show the trash icon in the desktop" ++msgstr "Show the wastebasket icon on the desktop" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "New Folder" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "Paste" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "Undo" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "Redo" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "Show Desktop in Files" ++ ++#: desktopGrid.js:350 fileItem.js:651 ++msgid "Open in Terminal" ++msgstr "Open in Terminal" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "Change Background…" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "Settings" ++ ++#: desktopGrid.js:653 ++#, fuzzy ++msgid "Rename" ++msgstr "Rename…" ++ ++#: desktopIconsUtil.js:61 ++msgid "Command not found" ++msgstr "Command not found" ++ ++#: fileItem.js:521 ++msgid "Don’t Allow Launching" ++msgstr "Don’t Allow Launching" ++ ++#: fileItem.js:523 ++msgid "Allow Launching" ++msgstr "Allow Launching" ++ ++#: fileItem.js:619 ++msgid "Open" ++msgstr "Open" ++ ++#: fileItem.js:623 ++msgid "Open With Other Application" ++msgstr "Open With Other Application" ++ ++#: fileItem.js:627 ++msgid "Cut" ++msgstr "Cut" ++ ++#: fileItem.js:628 ++msgid "Copy" ++msgstr "Copy" ++ ++#: fileItem.js:630 ++msgid "Rename…" ++msgstr "Rename…" ++ ++#: fileItem.js:631 ++msgid "Move to Trash" ++msgstr "Move to Wastebasket" ++ ++#: fileItem.js:641 ++msgid "Empty Trash" ++msgstr "Empty Wastebasket" ++ ++#: fileItem.js:647 ++msgid "Properties" ++msgstr "Properties" ++ ++#: fileItem.js:649 ++msgid "Show in Files" ++msgstr "Show in Files" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Set the size for the desktop icons." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Show personal folder" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Show the personal folder on the desktop." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Show wastebasket icon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Show the trash icon on the desktop." ++ + #~ msgid "Application" + #~ msgstr "Application" + +@@ -413,9 +604,6 @@ msgstr "Add Workspace" + #~ "Sets the position of the dock in the screen. Allowed values are 'right' " + #~ "or 'left'" + +-#~ msgid "Icon size" +-#~ msgstr "Icon size" +- + #~ msgid "Sets icon size of the dock." + #~ msgstr "Sets icon size of the dock." + +@@ -487,9 +675,6 @@ msgstr "Add Workspace" + #~ msgid "Display" + #~ msgstr "Display" + +-#~ msgid "Display Settings" +-#~ msgstr "Display Settings" +- + #~ msgid "Do Not Disturb" + #~ msgstr "Do Not Disturb" + +@@ -561,9 +746,6 @@ msgstr "Add Workspace" + #~ msgid "Native" + #~ msgstr "Native" + +-#~ msgid "Cancel" +-#~ msgstr "Cancel" +- + #~ msgid "Ask the user for a default behaviour if true." + #~ msgstr "Ask the user for a default behaviour if true." + +@@ -594,3 +776,9 @@ msgstr "Add Workspace" + + #~ msgid "Configure display settings..." + #~ msgstr "Configure display settings…" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Enter file name…" ++ ++#~ msgid "OK" ++#~ msgstr "OK" +diff --git a/po/es.po b/po/es.po +index eaafe99e..8d638f09 100644 +--- a/po/es.po ++++ b/po/es.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# es.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# es.po (gnome-shell-extensions master) #-#-#-#-# + # Spanish translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -12,10 +13,19 @@ + # This file is distributed under the same license as the Dash to Dock package. + # Hugo Olabera , 2015. + # ++# #-#-#-#-# es.po (1.0) #-#-#-#-# ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# Sergio Costas , 2018. ++# Daniel Mustieles , 2018-2020. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# es.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# es.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -42,6 +52,20 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.3\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"#-#-#-#-# es.po (1.0) #-#-#-#-#\n" ++"Project-Id-Version: 1.0\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-09-23 09:43+0200\n" ++"Last-Translator: Daniel Mustieles \n" ++"Language-Team: Spanish - Spain \n" ++"Language: es_ES\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Gtranslator 3.38.0\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -82,10 +106,14 @@ msgstr "Añadir regla" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "Falló al expulsar el dispositivo «%s»:" ++msgstr "" ++"#-#-#-#-# es.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Falló al expulsar el dispositivo «%s»:\n" ++"#-#-#-#-# es.po (1.0) #-#-#-#-#\n" ++"Falló al expulsar la unidad «%s»:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -144,7 +172,7 @@ msgstr "Falló al montar el volumen para «%s»" + msgid "Computer" + msgstr "Equipo" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Carpeta personal" + +@@ -784,6 +812,208 @@ msgstr "Mostrar el icono Papelera" + msgid "Show mounted volumes and devices" + msgstr "Mostrar los dispositivos montados" + ++#: desktopGrid.js:359 ++#, fuzzy ++msgid "Display Settings" ++msgstr "" ++"#-#-#-#-# es.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Configuración de pantalla\n" ++"#-#-#-#-# es.po (1.0) #-#-#-#-#\n" ++"Configuración de pantalla" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++#, fuzzy ++msgid "Icon size" ++msgstr "" ++"#-#-#-#-# es.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Tamaño del icono\n" ++"#-#-#-#-# es.po (1.0) #-#-#-#-#\n" ++"Tamaño de los iconos" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Cancelar" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nombre de la nueva carpeta" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Crear" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Los nombres de carpetas no pueden contener «/»." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Una carpeta no se puede llamar «.»." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Una carpeta no se puede llamar «..»." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Las carpetas cuyo nombre empieza por «.» están ocultas." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Ya hay un archivo o carpeta con ese nombre." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Tamaño de los iconos del escritorio" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Pequeño" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Estándar" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Grande" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostrar la carpeta personal en el escritorio" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostrar la papelera en el escritorio" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Mostrar unidades montadas en el escritorio" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nueva carpeta" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nuevo documento" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Pegar" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Deshacer" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Rehacer" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Mostrar el escritorio en Archivos" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Abrir en una terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Cambiar el fondo..." ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Configuración" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Renombrar" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Comando no encontrado" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "No permitir lanzar" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Permitir lanzar" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Abrir" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Abrir con otra aplicación" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Lanza usando la tarjeta gráfica dedicada" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Cortar" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Copiar" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Renombrar…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Mover a la papelera" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Vaciar la papelera" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Expulsar" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Propiedades" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Mostrar en Files" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Establece el tamaño de los iconos del escritorio." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostrar la carpeta personal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostrar la carpeta personal en el escritorio." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostrar la papelera" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostrar la papelera en el escritorio." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Mostrar unidades montadas" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Mostrar unidades montadas en el escritorio." ++ + #~ msgid "Application" + #~ msgstr "Aplicación" + +@@ -913,9 +1143,6 @@ msgstr "Mostrar los dispositivos montados" + #~ msgid "Display" + #~ msgstr "Pantalla" + +-#~ msgid "Display Settings" +-#~ msgstr "Configuración de pantalla" +- + #~ msgid "File System" + #~ msgstr "Sistema de archivos" + +@@ -963,9 +1190,6 @@ msgstr "Mostrar los dispositivos montados" + #~ "Configura la posición del tablero en la pantalla. Los valores permitidos " + #~ "son «right» (derecha) o «left» (izquierda)" + +-#~ msgid "Icon size" +-#~ msgstr "Tamaño del icono" +- + #~ msgid "Sets icon size of the dock." + #~ msgstr "Configura el tamaño de los íconos del tablero." + +@@ -1136,9 +1360,6 @@ msgstr "Mostrar los dispositivos montados" + #~ msgid "Alt Tab Behaviour" + #~ msgstr "Comportamiento de Alt+Tab" + +-#~ msgid "Cancel" +-#~ msgstr "Cancelar" +- + #~ msgid "Notifications" + #~ msgstr "Notificaciones" + +@@ -1172,3 +1393,36 @@ msgstr "Mostrar los dispositivos montados" + + #~ msgid "Busy" + #~ msgstr "Ocupado" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Introduzca el nombre del archivo…" ++ ++#~ msgid "OK" ++#~ msgstr "Aceptar" ++ ++#~ msgid "Huge" ++#~ msgstr "Inmenso" ++ ++#~ msgid "Ok" ++#~ msgstr "Aceptar" ++ ++#~ msgid "huge" ++#~ msgstr "inmenso" ++ ++#~ msgid "Maximum width for the icons and filename." ++#~ msgstr "Ancho máximo de los iconos y el nombre de fichero." ++ ++#~ msgid "Shows the Documents folder in the desktop." ++#~ msgstr "Muestra la carpeta Documentos en el escritorio." ++ ++#~ msgid "Shows the Downloads folder in the desktop." ++#~ msgstr "Muestra la carpeta Descargas en el escritorio." ++ ++#~ msgid "Shows the Music folder in the desktop." ++#~ msgstr "Muestra la carpeta Música en el escritorio." ++ ++#~ msgid "Shows the Pictures folder in the desktop." ++#~ msgstr "Muestra la carpeta Imágenes en el escritorio." ++ ++#~ msgid "Shows the Videos folder in the desktop." ++#~ msgstr "Muestra la carpeta Vídeos en el escritorio." +diff --git a/po/eu.po b/po/eu.po +index f3e26694..a006a082 100644 +--- a/po/eu.po ++++ b/po/eu.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# eu.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# eu.po (gnome-shell-extensions master) #-#-#-#-# + # Basque translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -13,10 +14,17 @@ + # This file is distributed under the same license as the Dash to Dock package. + # Ibai Oihanguren Sala , 2020. + # ++# #-#-#-#-# eu.po (desktop-icons master) #-#-#-#-# ++# Basque translation for desktop-icons. ++# Copyright (C) 2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Asier Sarasua Garmendia , 2019. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# eu.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# eu.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -42,6 +50,17 @@ msgstr "" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"#-#-#-#-# eu.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-04-05 21:12+0200\n" ++"PO-Revision-Date: 2019-09-15 10:00+0100\n" ++"Last-Translator: Asier Sarasua Garmendia \n" ++"Language-Team: Basque \n" ++"Language: eu\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -339,7 +358,7 @@ msgstr "Dash to Dock %s" + msgid "Trash" + msgstr "Zakarrontzia" + +-#: locations.js:74 ++#: locations.js:74 fileItem.js:641 + msgid "Empty Trash" + msgstr "Hustu zakarrontzia" + +@@ -806,6 +825,171 @@ msgstr "Erakusteko denbora-muga (s)" + msgid "Pressure threshold" + msgstr "Presio-atalasea" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Karpetaren izen berria" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Sorrera" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Utzi" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Karpeta-izenak ezin du '/' karaktererik eduki." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Karpeta ezin da '.' gisa deitu." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Karpeta ezin da '..' gisa deitu." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Izenaren hasieran \".\" duten karpetak ezkutuan daude." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Badago izen hori duen fitxategi edo karpeta bat." ++ ++#: prefs.js:102 ++msgid "Size for the desktop icons" ++msgstr "Mahaigaineko ikonoen tamaina" ++ ++#: prefs.js:102 ++msgid "Small" ++msgstr "Txikia" ++ ++#: prefs.js:102 ++msgid "Standard" ++msgstr "Arrunta" ++ ++#: prefs.js:102 ++msgid "Large" ++msgstr "Handia" ++ ++#: prefs.js:103 ++msgid "Show the personal folder in the desktop" ++msgstr "Erakutsi karpeta pertsonala mahaigainean" ++ ++#: prefs.js:104 ++msgid "Show the trash icon in the desktop" ++msgstr "Erakutsi zakarrontziaren ikonoa mahaigainean" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "Karpeta berria" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "Itsatsi" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "Desegin" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "Berregin" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "Erakutsi mahaigaina Fitxategiak aplikazioan" ++ ++#: desktopGrid.js:350 fileItem.js:651 ++msgid "Open in Terminal" ++msgstr "Ireki terminalean" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "Aldatu atzeko planoa…" ++ ++#: desktopGrid.js:354 ++msgid "Display Settings" ++msgstr "Pantailaren ezarpenak" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "Ezarpenak" ++ ++#: desktopGrid.js:653 ++#, fuzzy ++msgid "Rename" ++msgstr "Aldatu izena…" ++ ++#: desktopIconsUtil.js:61 ++msgid "Command not found" ++msgstr "Ez da komandoa aurkitu" ++ ++#: fileItem.js:521 ++msgid "Don’t Allow Launching" ++msgstr "Ez baimendu abiaraztea" ++ ++#: fileItem.js:523 ++msgid "Allow Launching" ++msgstr "Baimendu abiaraztea" ++ ++#: fileItem.js:619 ++msgid "Open" ++msgstr "Ireki" ++ ++#: fileItem.js:623 ++msgid "Open With Other Application" ++msgstr "Ireki beste aplikazio batekin" ++ ++#: fileItem.js:627 ++msgid "Cut" ++msgstr "Ebaki" ++ ++#: fileItem.js:628 ++msgid "Copy" ++msgstr "Kopiatu" ++ ++#: fileItem.js:630 ++msgid "Rename…" ++msgstr "Aldatu izena…" ++ ++#: fileItem.js:631 ++msgid "Move to Trash" ++msgstr "Bota zakarrontzira" ++ ++#: fileItem.js:647 ++msgid "Properties" ++msgstr "Propietateak" ++ ++#: fileItem.js:649 ++msgid "Show in Files" ++msgstr "Erakutsi Fitxategiak aplikazioan" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Ikonoaren tamaina" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Ezarri mahaigaineko ikonoen tamaina." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Erakutsi karpeta pertsonala" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Erakutsi karpeta pertsonala mahaigainean." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Erakutsi zakarrontziaren ikonoa" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Erakutsi zakarrontziaren ikonoa mahaigainean." ++ + #~ msgid "Application" + #~ msgstr "Aplikazioa" + +@@ -960,3 +1144,9 @@ msgstr "Presio-atalasea" + + #~ msgid "Busy" + #~ msgstr "Lanpetuta" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Sartu fitxategi-izena…" ++ ++#~ msgid "OK" ++#~ msgstr "Ados" +diff --git a/po/fa.po b/po/fa.po +index a896e085..f36354ef 100644 +--- a/po/fa.po ++++ b/po/fa.po +@@ -1,11 +1,20 @@ ++# #-#-#-#-# fa.po (gnome-shell-extensions gnome-3-0) #-#-#-#-# + # Persian translation for gnome-shell-extensions. + # Copyright (C) 2011 Iranian Free Software Users Group (IFSUG.org) translation team. + # This file is distributed under the same license as the gnome-shell-extensions package. + # Arash Mousavi , 2011-2017. + # Danial Behzadi , 2018-2020. + # ++# #-#-#-#-# fa.po (desktop-icons master) #-#-#-#-# ++# Persian translation for desktop-icons. ++# Copyright (C) 2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Danial Behzadi , 2020. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# fa.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions gnome-3-0\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -20,6 +29,19 @@ msgstr "" + "X-Poedit-SourceCharset: utf-8\n" + "X-Generator: Poedit 2.3\n" + "Plural-Forms: nplurals=1; plural=0;\n" ++"#-#-#-#-# fa.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-04-06 14:18+0000\n" ++"PO-Revision-Date: 2020-04-06 18:21+0000\n" ++"Language-Team: Persian \n" ++"Language: fa\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Last-Translator: \n" ++"X-Generator: Poedit 2.3\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -46,8 +68,8 @@ msgid "" + "A list of strings, each containing an application id (desktop file name), " + "followed by a colon and the workspace number" + msgstr "" +-"فهرستی از رشته‌ها، هرکدام حاوی شناسه‌ی یک برنامه (نام پرونده رومیزی)، در ادامه‌ی یک " +-"ویرگول و شماره‌ی فضای کاری" ++"فهرستی از رشته‌ها، هرکدام حاوی شناسه‌ی یک برنامه (نام پرونده رومیزی)، در " ++"ادامه‌ی یک ویرگول و شماره‌ی فضای کاری" + + #: extensions/auto-move-windows/prefs.js:35 + msgid "Workspace Rules" +@@ -79,12 +101,12 @@ msgstr "استفاده از صفحه بیشتر برای پنجره" + #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6 + msgid "" + "Try to use more screen for placing window thumbnails by adapting to screen " +-"aspect ratio, and consolidating them further to reduce the bounding box. This " +-"setting applies only with the natural placement strategy." ++"aspect ratio, and consolidating them further to reduce the bounding box. " ++"This setting applies only with the natural placement strategy." + msgstr "" + "Try to use more screen for placing window thumbnails by adapting to screen " +-"aspect ratio, and consolidating them further to reduce the bounding box. This " +-"setting applies only with the natural placement strategy." ++"aspect ratio, and consolidating them further to reduce the bounding box. " ++"This setting applies only with the natural placement strategy." + + #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 + msgid "Place window captions on top" +@@ -92,15 +114,16 @@ msgstr "قراردادن عنوان پنجره در بالا" + + #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 + msgid "" +-"If true, place window captions on top the respective thumbnail, overriding shell " +-"default of placing it at the bottom. Changing this setting requires restarting " +-"the shell to have any effect." ++"If true, place window captions on top the respective thumbnail, overriding " ++"shell default of placing it at the bottom. Changing this setting requires " ++"restarting the shell to have any effect." + msgstr "" +-"اگر بر روی درست باشد، عنوان پنجره را بالای تصویر آن قرار می‌دهد، که حالت پیش‌فرض " +-"شل در پایین را تغییر می‌دهد. تغییر این گزینه، نیاز به راه‌اندازی مجدد شل دارد تا " +-"تاثیر بگذارد." ++"اگر بر روی درست باشد، عنوان پنجره را بالای تصویر آن قرار می‌دهد، که حالت " ++"پیش‌فرض شل در پایین را تغییر می‌دهد. تغییر این گزینه، نیاز به راه‌اندازی مجدد " ++"شل دارد تا تاثیر بگذارد." + +-#: extensions/places-menu/extension.js:89 extensions/places-menu/extension.js:93 ++#: extensions/places-menu/extension.js:89 ++#: extensions/places-menu/extension.js:93 + msgid "Places" + msgstr "مکان‌ها" + +@@ -196,8 +219,8 @@ msgid "" + "Decides when to group windows from the same application on the window list. " + "Possible values are “never”, “auto” and “always”." + msgstr "" +-"تصمیم می‌گیرد چه زمانی پنجره‌های یک برنامه در فهرست پنجره‌ها گروه شوند. مقدارهای " +-"ممکن عبارتند از «never»، «auto» و «always»." ++"تصمیم می‌گیرد چه زمانی پنجره‌های یک برنامه در فهرست پنجره‌ها گروه شوند. " ++"مقدارهای ممکن عبارتند از «never»، «auto» و «always»." + + #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 + #: extensions/window-list/prefs.js:100 +@@ -206,7 +229,8 @@ msgstr "نمایش پنجره‌ها از تمام فضاهای کاری" + + #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 + msgid "Whether to show windows from all workspaces or only the current one." +-msgstr "این که پنجره‌ها از تمام فضاهای کاری نمایش داده شود یا فقط فضای کاری فعلی." ++msgstr "" ++"این که پنجره‌ها از تمام فضاهای کاری نمایش داده شود یا فقط فضای کاری فعلی." + + #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 + msgid "Show the window list on all monitors" +@@ -214,11 +238,11 @@ msgstr "نمایش فهرست پنجره‌ها در تمام نمایشگرها + + #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28 + msgid "" +-"Whether to show the window list on all connected monitors or only on the primary " +-"one." ++"Whether to show the window list on all connected monitors or only on the " ++"primary one." + msgstr "" +-"اینکه آیا فهرست پنجره‌ها در تمام نمایشگرهای متصل نمایش داده شود یا فقط در نمایشگر " +-"اصلی." ++"اینکه آیا فهرست پنجره‌ها در تمام نمایشگرهای متصل نمایش داده شود یا فقط در " ++"نمایشگر اصلی." + + #: extensions/window-list/prefs.js:29 + msgid "Window Grouping" +@@ -258,6 +282,179 @@ msgstr "فضای کاری %Id" + msgid "Add Workspace" + msgstr "افزودن فضای‌کاری" + ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++#, fuzzy ++msgid "Icon size" ++msgstr "" ++"#-#-#-#-# fa.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" ++"اندازه شمایل\n" ++"#-#-#-#-# fa.po (desktop-icons master) #-#-#-#-#\n" ++"اندازهٔ نقشک" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "نام شاخهٔ جدید" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "ایجاد" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "لغو" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "نام شاخه‌ها نمی‌تواند شامل \"/\" شود." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "یک شاخه را نمی‌توان «.» نامگذاری کرد." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "یک شاخه را نمی‌توان «..» نامگذاری کرد." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "شاخه‌هایی با «.» در ابتدای نامشان، مخفیند." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "پرونده یا شاخه‌ای با همان نام موجود است." ++ ++#: prefs.js:102 ++msgid "Size for the desktop icons" ++msgstr "اندازه برای نقشک‌های میزکار" ++ ++#: prefs.js:102 ++msgid "Small" ++msgstr "کوچک" ++ ++#: prefs.js:102 ++msgid "Standard" ++msgstr "استاندارد" ++ ++#: prefs.js:102 ++msgid "Large" ++msgstr "بزرگ" ++ ++#: prefs.js:103 ++msgid "Show the personal folder in the desktop" ++msgstr "نمایش شاخهٔ شخصی در میزکار" ++ ++#: prefs.js:104 ++msgid "Show the trash icon in the desktop" ++msgstr "نمایش نقشک زباله‌دان در میزکار" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "شاخه جدید" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "چسباندن" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "برگردان" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "انجام دوباره" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "نمایش میزکار در پرونده‌ها" ++ ++#: desktopGrid.js:350 fileItem.js:651 ++msgid "Open in Terminal" ++msgstr "گشودن در پایانه" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "تغییر پس‌زمینه…" ++ ++#: desktopGrid.js:354 ++msgid "Display Settings" ++msgstr "تنظیمات نمایشگر" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "تنظیمات" ++ ++#: desktopGrid.js:653 ++msgid "Rename" ++msgstr "تغییر نام" ++ ++#: desktopIconsUtil.js:61 ++msgid "Command not found" ++msgstr "فرمان پیدا نشد" ++ ++#: fileItem.js:521 ++msgid "Don’t Allow Launching" ++msgstr "اجازه ندادن به اجرا" ++ ++#: fileItem.js:523 ++msgid "Allow Launching" ++msgstr "اجازهٔ اجرا" ++ ++#: fileItem.js:619 ++msgid "Open" ++msgstr "گشودن" ++ ++#: fileItem.js:623 ++msgid "Open With Other Application" ++msgstr "گشودن با برنامه‌ای دیگر" ++ ++#: fileItem.js:627 ++msgid "Cut" ++msgstr "برش" ++ ++#: fileItem.js:628 ++msgid "Copy" ++msgstr "رونوشت" ++ ++#: fileItem.js:630 ++msgid "Rename…" ++msgstr "تغییر نام…" ++ ++#: fileItem.js:631 ++msgid "Move to Trash" ++msgstr "انداختن در زباله‌دان" ++ ++#: fileItem.js:641 ++msgid "Empty Trash" ++msgstr "خالی کردن زباله‌دان" ++ ++#: fileItem.js:647 ++msgid "Properties" ++msgstr "ویژگی‌ها" ++ ++#: fileItem.js:649 ++msgid "Show in Files" ++msgstr "نمایش در پرونده‌ها" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "تنظیم اندازه برای نقشک‌های میزکار." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "نمایش شاخهٔ شخصی" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "نمایش شاخهٔ شخصی در میزکار." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "نمایش نقشک زباله‌دان" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "نمایش نقشک زباله‌دان در میزکار." ++ + #~ msgid "Application" + #~ msgstr "برنامه" + +@@ -276,7 +473,8 @@ msgstr "افزودن فضای‌کاری" + #~ msgid "Attach modal dialog to the parent window" + #~ msgstr "اتصال محاوره modal به پنجره والد" + +-#~ msgid "This key overrides the key in org.gnome.mutter when running GNOME Shell." ++#~ msgid "" ++#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell." + #~ msgstr "" + #~ "این کلید، کلید org.gnome.mutter را در هنگام اجرای گنوم‌شل بازنویسی می‌کند." + +@@ -284,8 +482,8 @@ msgstr "افزودن فضای‌کاری" + #~ msgstr "چینش دکمه‌ها در نوار عنوان" + + #~ msgid "" +-#~ "This key overrides the key in org.gnome.desktop.wm.preferences when running " +-#~ "GNOME Shell." ++#~ "This key overrides the key in org.gnome.desktop.wm.preferences when " ++#~ "running GNOME Shell." + #~ msgstr "" + #~ "این کلید، کلید org.gnome.desktop.wm.preferences را در هنگام اجرای گنوم‌شل " + #~ "بازنویسی می‌کند." +@@ -299,7 +497,8 @@ msgstr "افزودن فضای‌کاری" + + #~ msgid "Delay focus changes in mouse mode until the pointer stops moving" + #~ msgstr "" +-#~ "به تاخیر انداختن تغییر تمرکز در حالت موشی تا زمانی که نشانگر از حرکت باز ایستد" ++#~ "به تاخیر انداختن تغییر تمرکز در حالت موشی تا زمانی که نشانگر از حرکت باز " ++#~ "ایستد" + + #~ msgid "Thumbnail only" + #~ msgstr "تنها تصویر بندانگشتی" +@@ -323,18 +522,18 @@ msgstr "افزودن فضای‌کاری" + #~ msgstr "متن خوش‌آمدِ جایگزین." + + #~ msgid "" +-#~ "If not empty, it contains the text that will be shown when clicking on the " +-#~ "panel." ++#~ "If not empty, it contains the text that will be shown when clicking on " ++#~ "the panel." + #~ msgstr "" +-#~ "اگر خالی نباشد، حاوی متنی خواهد بود که که هنگام کلیک بر روی پنل نمایش داده " +-#~ "می‌شود است." ++#~ "اگر خالی نباشد، حاوی متنی خواهد بود که که هنگام کلیک بر روی پنل نمایش " ++#~ "داده می‌شود است." + + #~ msgid "Message" + #~ msgstr "پیام" + + #~ msgid "" +-#~ "Example aims to show how to build well behaved extensions for the Shell and " +-#~ "as such it has little functionality on its own.\n" ++#~ "Example aims to show how to build well behaved extensions for the Shell " ++#~ "and as such it has little functionality on its own.\n" + #~ "Nevertheless it’s possible to customize the greeting message." + #~ msgstr "" + #~ "هدف مثال نمایش چگونگی ساخت افزونه‌های خوش‌رفتار برای پوسته است، پس خودش " +@@ -370,8 +569,8 @@ msgstr "افزودن فضای‌کاری" + #~ msgstr "انتقالِ انتخاب فعلی به بالا قبل از بستن پنجره واشو" + + #~ msgid "" +-#~ "The Alternate Tab can be used in different modes, that affect the way windows " +-#~ "are chosen and presented." ++#~ "The Alternate Tab can be used in different modes, that affect the way " ++#~ "windows are chosen and presented." + #~ msgstr "" + #~ "«جای‌گزین Tab» می‌تواند در حالت‌های مختلفی استفاده شود، که در نحوه باز شدن و " + #~ "انتخاب پنجره‌ها تاثیر می‌گذارد." +@@ -397,9 +596,6 @@ msgstr "افزودن فضای‌کاری" + #~ msgid "Remove from Favorites" + #~ msgstr "حذف از علاقه‌مندی‌ها" + +-#~ msgid "Icon size" +-#~ msgstr "اندازه شمایل" +- + #~ msgid "Enable/disable autohide" + #~ msgstr "فعال/غیرفعال کردن مخفی‌سازی خودکار" + +diff --git a/po/fi.po b/po/fi.po +index e5ab20ef..aec2626b 100644 +--- a/po/fi.po ++++ b/po/fi.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# fi.po (gnome-shell-extensions) #-#-#-#-# + # Finnish translation of gnome-shell-extensions. + # Copyright (C) 2011 Ville-Pekka Vainio + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -7,8 +8,16 @@ + # Ville-Pekka Vainio , 2011. + # Jiri Grönroos , 2012, 2013, 2014, 2015, 2017. + # ++# #-#-#-#-# fi.po (desktop-icons master) #-#-#-#-# ++# Finnish translation for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Jiri Grönroos , 2018. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# fi.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -24,6 +33,20 @@ msgstr "" + "X-Generator: Poedit 2.0.6\n" + "X-Project-Style: gnome\n" + "X-POT-Import-Date: 2012-03-05 15:06:12+0000\n" ++"#-#-#-#-# fi.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-08-16 17:43+0300\n" ++"Last-Translator: Jiri Grönroos \n" ++"Language-Team: Finnish \n" ++"Language: fi\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Poedit 2.4.1\n" + + #: data/gnome-classic.desktop.in:3 + msgid "GNOME Classic" +@@ -63,10 +86,14 @@ msgstr "Lisää sääntö" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "Aseman “%s” irrottaminen epäonnistui:" ++msgstr "" ++"#-#-#-#-# fi.po (gnome-shell-extensions) #-#-#-#-#\n" ++"Aseman “%s” irrottaminen epäonnistui:\n" ++"#-#-#-#-# fi.po (desktop-icons master) #-#-#-#-#\n" ++"Aseman “%s” avaaminen epäonnistui:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -124,7 +151,7 @@ msgstr "Taltion “%s” liittäminen epäonnistui" + msgid "Computer" + msgstr "Tietokone" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Koti" + +@@ -266,6 +293,203 @@ msgstr "Työtila %d" + msgid "Add Workspace" + msgstr "Lisää työtila" + ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Näytön asetukset" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++#, fuzzy ++msgid "Icon size" ++msgstr "" ++"#-#-#-#-# fi.po (gnome-shell-extensions) #-#-#-#-#\n" ++"Kuvakkeiden koko\n" ++"#-#-#-#-# fi.po (desktop-icons master) #-#-#-#-#\n" ++"Kuvakekoko" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Uusi kansion nimi" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Luo" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Peru" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Kansion nimi ei voi sisältää merkkiä “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Kansion nimi ei voi olla “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Kansion nimi ei voi olla “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Kansiot, joiden nimi alkaa merkillä “.”, ovat piilotettuja." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Nimi on jo toisen tiedoston tai kansion käytössä." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Työpöydän kuvakkeiden koko" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Pieni" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Normaali" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Suuri" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Näytä kotikansio työpöydällä" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Näytä roskakorin kuvake työpöydällä" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Näytä liitetyt asemat työpöydällä" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Uusi kansio" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Uusi asiakirja" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Liitä" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Kumoa" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Tee uudeleen" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Näytä työpöytä tiedostonhallinnassa" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Avaa päätteessä" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Vaihda taustakuva…" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Asetukset" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Nimeä uudelleen" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Komentoa ei löydy" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Älä salli käynnistämistä" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Salli käynnistäminen" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Avaa" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Avaa toisella sovelluksella" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Käynnistä käyttäen erillistä näytönohjainta" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Leikkaa" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopioi" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Nimeä uudelleen…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Siirrä roskakoriin" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Tyhjennä roskakori" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Poista asemasta" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Ominaisuudet" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Näytä tiedostonhallinnassa" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Aseta työpöytäkuvakkeiden koko." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Näytä kotikansio" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Näytä kotikansio työpöydällä." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Näytä roskakorin kuvake" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Näytä roskakorin kuvake työpöydällä." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Näytä liitetyt asemat" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Näytä liitetyt asemat työpöydällä." ++ + #~ msgid "Application" + #~ msgstr "Sovellus" + +@@ -357,9 +581,6 @@ msgstr "Lisää työtila" + #~ msgid "Display" + #~ msgstr "Näyttö" + +-#~ msgid "Display Settings" +-#~ msgstr "Näytön asetukset" +- + #~ msgid "Drag here to add favorites" + #~ msgstr "Raahaa tähän lisätäksesi suosikkeihin" + +@@ -381,9 +602,6 @@ msgstr "Lisää työtila" + #~ msgstr "" + #~ "Asettaa telakan sijainnin näytöllä. Sallitut arvot ovat 'right' tai 'left'" + +-#~ msgid "Icon size" +-#~ msgstr "Kuvakkeiden koko" +- + #~ msgid "Sets icon size of the dock." + #~ msgstr "Asettaa telakan kuvakkeiden koon." + +@@ -428,3 +646,12 @@ msgstr "Lisää työtila" + + #~ msgid "Workspace & Icons" + #~ msgstr "Työtila ja kuvakkeet" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Anna tiedostonimi…" ++ ++#~ msgid "OK" ++#~ msgstr "OK" ++ ++#~ msgid "Huge" ++#~ msgstr "Valtava" +diff --git a/po/fr.po b/po/fr.po +index b1849159..d525a5a8 100644 +--- a/po/fr.po ++++ b/po/fr.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# fr.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# fr.po (gnome-shell-extensions master) #-#-#-#-# + # French translation for gnome-shell-extensions. + # Copyright (C) 2011-12 Listed translators + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -12,10 +13,20 @@ + # This file is distributed under the same license as the PACKAGE package. + # FIRST AUTHOR , YEAR. + # ++# #-#-#-#-# fr.po (desktop-icons master) #-#-#-#-# ++# French translation for desktop-icons. ++# Copyright (C) 2018-2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# ghentdebian , 2018. ++# Charles Monzat , 2018. ++# Claude Paroz , 2020. ++# Sylvestris , 2020. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# fr.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# fr.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -40,6 +51,20 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.2.4\n" ++"#-#-#-#-# fr.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-08-25 19:35+0000\n" ++"PO-Revision-Date: 2020-09-20 10:54+0200\n" ++"Last-Translator: Sylvestris \n" ++"Language-Team: GNOME French Team \n" ++"Language: fr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n > 1);\n" ++"X-Generator: Gtranslator 3.36.0\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -80,10 +105,14 @@ msgstr "Ajouter une règle" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "L’éjection du disque « %s » a échoué :" ++msgstr "" ++"#-#-#-#-# fr.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"L’éjection du disque « %s » a échoué :\n" ++"#-#-#-#-# fr.po (desktop-icons master) #-#-#-#-#\n" ++"Échec de l’éjection du disque « %s » :" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -143,7 +172,7 @@ msgstr "Impossible de monter le volume « %s »" + msgid "Computer" + msgstr "Ordinateur" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:927 + msgid "Home" + msgstr "Dossier personnel" + +@@ -788,6 +817,198 @@ msgstr "Délai d’apparition (s)" + msgid "Pressure threshold" + msgstr "Seuil de pression" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nouveau nom de dossier" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Créer" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Annuler" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Les noms de dossiers ne peuvent pas contenir « / »." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Un dossier ne peut pas être nommé « . »." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Un dossier ne peut pas être nommé « .. »." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Les dossiers dont le nom commence par « . » sont masqués." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Il existe déjà un fichier ou dossier ayant ce nom." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Taille des icônes du bureau" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Petite" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Normale" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Grande" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Montrer le dossier personnel sur le bureau" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Montrer la corbeille sur le bureau" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Montrer les disques montés sur le bureau" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nouveau dossier" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nouveau document" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Coller" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Annuler" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Rétablir" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Afficher le bureau dans Fichiers" ++ ++#: desktopGrid.js:355 fileItem.js:723 ++msgid "Open in Terminal" ++msgstr "Ouvrir dans un terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Changer l’arrière-plan…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Configuration d’affichage" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Paramètres" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Renommer" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Commande introuvable" ++ ++#: fileItem.js:586 ++msgid "Don’t Allow Launching" ++msgstr "Ne pas autoriser le lancement" ++ ++#: fileItem.js:588 ++msgid "Allow Launching" ++msgstr "Autoriser le lancement" ++ ++#: fileItem.js:684 ++msgid "Open" ++msgstr "Ouvrir" ++ ++#: fileItem.js:688 ++msgid "Open With Other Application" ++msgstr "Ouvrir avec une autre application" ++ ++#: fileItem.js:690 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Lancer en utilisant une carte graphique dédiée" ++ ++#: fileItem.js:695 ++msgid "Cut" ++msgstr "Couper" ++ ++#: fileItem.js:696 ++msgid "Copy" ++msgstr "Copier" ++ ++#: fileItem.js:698 ++msgid "Rename…" ++msgstr "Renommer…" ++ ++#: fileItem.js:699 ++msgid "Move to Trash" ++msgstr "Mettre à la corbeille" ++ ++#: fileItem.js:709 ++msgid "Empty Trash" ++msgstr "Vider la corbeille" ++ ++#: fileItem.js:713 ++msgid "Eject" ++msgstr "Éjecter" ++ ++#: fileItem.js:719 ++msgid "Properties" ++msgstr "Propriétés" ++ ++#: fileItem.js:721 ++msgid "Show in Files" ++msgstr "Montrer dans Fichiers" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Taille d’icônes" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Définir la taille des icônes du bureau." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Montrer le dossier personnel" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Montrer le dossier personnel sur le bureau." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Montrer l’icône de la corbeille" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Montrer la corbeille sur le bureau." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Montrer les disques montés" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Montrer les disques montés sur le bureau." ++ + #~ msgid "Create new matching rule" + #~ msgstr "Créer une nouvelle règle de concordance" + +diff --git a/po/fur.po b/po/fur.po +index c3a071c3..d1fdf148 100644 +--- a/po/fur.po ++++ b/po/fur.po +@@ -1,10 +1,19 @@ ++# #-#-#-#-# fur.po (gnome-shell-extensions master) #-#-#-#-# + # Friulian translation for gnome-shell-extensions. + # Copyright (C) 2013 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. + # Fabio Tomat , 2013. + # ++# #-#-#-#-# fur.po (desktop-icons master) #-#-#-#-# ++# Friulian translation for desktop-icons. ++# Copyright (C) 2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Fabio Tomat , 2019. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# fur.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -17,6 +26,19 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.4.1\n" ++"#-#-#-#-# fur.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-09-08 10:04+0200\n" ++"Last-Translator: Fabio Tomat \n" ++"Language-Team: Friulian \n" ++"Language: fur\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.4.1\n" + + #: data/gnome-classic.desktop.in:3 + msgid "GNOME Classic" +@@ -56,10 +78,14 @@ msgstr "Zonte regule" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "No si è rivâts a parâ fûr la unitât “%s”»:" ++msgstr "" ++"#-#-#-#-# fur.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"No si è rivâts a parâ fûr la unitât “%s”»:\n" ++"#-#-#-#-# fur.po (desktop-icons master) #-#-#-#-#\n" ++"No si è rivâts a parâ fûr la unitât “%s”:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -118,7 +144,7 @@ msgstr "No si è rivâts a montâ il volum par “%s”" + msgid "Computer" + msgstr "Computer" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Home" + +@@ -258,6 +284,203 @@ msgstr "Spazi di lavôr %d" + msgid "Add Workspace" + msgstr "Zonte spazi di lavôr" + ++#: desktopGrid.js:359 ++#, fuzzy ++msgid "Display Settings" ++msgstr "" ++"#-#-#-#-# fur.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Impostazions Visôr\n" ++"#-#-#-#-# fur.po (desktop-icons master) #-#-#-#-#\n" ++"Impostazions visôr" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Gnûf non de cartele" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Cree" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Anule" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "I nons des cartelis no puedin contignî il caratar “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Une cartele no pues jessi clamade “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Une cartele no pues jessi clamade “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Lis cartelis cul “.” al inizi dal lôr non a son platadis." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Un file o une cartele cul stes non e esist za." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Dimension pes iconis dal scritori" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Piçule" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Largje" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostre la cartele personâl intal scritori" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostre la icone de scovacere intal scritori" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Mostre lis unitâts montadis tal scritori" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Gnove cartele" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Gnûf document" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Tache" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Anule" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Torne fâ" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Mostre Scritori in File" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Vierç in Terminâl" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Cambie sfont…" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Impostazions" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Cambie non" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Comant no cjatât" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "No sta permeti inviament" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Permet inviament" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Vierç" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Vierç cuntune altre aplicazion" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Invie doprant une schede grafiche dedicade" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Taie" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Copie" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Cambie non…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Sposte te scovacere" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Disvuede scovacere" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Pare fûr" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Propietâts" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Mostre in File" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Dimension icone" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Stabilìs la dimension pes iconis dal scritori." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostre cartele personâl" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostre la cartele personâl intal scritori." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostre la icone de scovacere" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostre la icone de scovacere intal scritori." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Mostre unitâts montadis" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Mostre lis unitâts montadis intal scritori." ++ + #~ msgid "Application" + #~ msgstr "Aplicazion" + +@@ -368,5 +591,8 @@ msgstr "Zonte spazi di lavôr" + #~ msgid "Display" + #~ msgstr "Visôr" + +-#~ msgid "Display Settings" +-#~ msgstr "Impostazions Visôr" ++#~ msgid "Enter file name…" ++#~ msgstr "Inserìs il non dal file…" ++ ++#~ msgid "OK" ++#~ msgstr "Va ben" +diff --git a/po/hr.po b/po/hr.po +index 6accc6e0..c35afb01 100644 +--- a/po/hr.po ++++ b/po/hr.po +@@ -1,10 +1,19 @@ ++# #-#-#-#-# hr.po (gnome-shell-extensions master) #-#-#-#-# + # Croatian translation for gnome-shell-extensions. + # Copyright (C) 2017 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. + # FIRST AUTHOR , YEAR. + # ++# #-#-#-#-# hr.po (gnome-shell-extension-desktop-icons) #-#-#-#-# ++# Croatian translation for gnome-shell-extension-desktop-icons ++# Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 ++# This file is distributed under the same license as the gnome-shell-extension-desktop-icons package. ++# FIRST AUTHOR , 2019. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# hr.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -19,6 +28,20 @@ msgstr "" + "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" + "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + "X-Generator: Poedit 2.4.1\n" ++"#-#-#-#-# hr.po (gnome-shell-extension-desktop-icons) #-#-#-#-#\n" ++"Project-Id-Version: gnome-shell-extension-desktop-icons\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-09-10 17:48+0200\n" ++"Last-Translator: gogo \n" ++"Language-Team: Croatian \n" ++"Language: hr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Launchpad-Export-Date: 2019-03-27 09:36+0000\n" ++"X-Generator: Poedit 2.3\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -58,10 +81,14 @@ msgstr "Dodaj pravilo" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "Izbacivanje uređaja “%s” neuspjelo:" ++msgstr "" ++"#-#-#-#-# hr.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Izbacivanje uređaja “%s” neuspjelo:\n" ++"#-#-#-#-# hr.po (gnome-shell-extension-desktop-icons) #-#-#-#-#\n" ++"Neuspjelo izbacivanje “%s” uređaja:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -120,7 +147,7 @@ msgstr "Neuspješno montiranje uređaja “%s”" + msgid "Computer" + msgstr "Računalo" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Osobna mapa" + +@@ -260,6 +287,198 @@ msgstr "Radni prostor %d" + msgid "Add Workspace" + msgstr "Dodaj radni prostor" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Naziv nove mape" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Stvori" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Odustani" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Naziv mape ne može sadržavati “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Mapa se ne može nazvati “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Mapa se ne može nazvati “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Mape koje sadrže “.” na početku njihovih naziva su skrivene." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Već postoji datoteka ili mapa s tim nazivom." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Veličina ikona radne površine" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Male" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standardne" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Velike" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Prikaži osobnu mapu na radnoj površini" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Prikaži mapu smeća na radnoj površini" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Prikaži montirane uređaje na radnoj površini" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nova mapa" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Novi dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Zalijepi" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Poništi" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Ponovi" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Prikaži radnu površinu u Datotekama" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Otvori u Terminalu" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Promijeni pozadinu…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Postavke zaslona" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Postavke" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Preimenuj" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Naredba nije pronađena" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Ne dopuštaj pokretanje" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Dopusti pokretanje" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Otvori" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Otvori s drugom aplikacijom" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Pokreni pomoću namjenske grafičke kartice" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Izreži" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopiraj" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Preimenuj…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Premjesti u smeće" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Isprazni smeće" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Izbaci" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Svojstva" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Prikaži u Datotekama" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Veličina ikona" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Postavi veličinu ikona radne površine." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Prikaži osobnu mapu" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Prikaži osobnu mapu na radnoj površini." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Prikaži ikonu smeća" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Prikaži ikonu smeća na radnoj površini." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Prikaži montirane uređaje" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Prikaži montirane uređaje na radnoj površini." ++ + #~ msgid "Application" + #~ msgstr "Aplikacija" + +@@ -340,3 +559,9 @@ msgstr "Dodaj radni prostor" + #~ "Cilj primjera je prikazati kako izgraditi proširenje koje se dobro ponaša " + #~ "u ljusci i kao takvo ima ograničenu funkcionalnost.\n" + #~ "Unatoč tome još uvijek je moguće promijeniti poruku pozdrava." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Upiši naziv datoteke…" ++ ++#~ msgid "OK" ++#~ msgstr "U redu" +diff --git a/po/hu.po b/po/hu.po +index 8be4d93d..60305081 100644 +--- a/po/hu.po ++++ b/po/hu.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# hu.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# hu.po (gnome-shell-extensions master) #-#-#-#-# + # Hungarian translation for gnome-shell-extensions. + # Copyright (C) 2011, 2012, 2013, 2014, 2017, 2019 Free Software Foundation, Inc. + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -12,10 +13,17 @@ + # This file is distributed under the same license as the dash-to-dock package. + # + # Balázs Úr , 2017. ++# #-#-#-#-# hu.po (desktop-icons master) #-#-#-#-# ++# Hungarian translation for desktop-icons. ++# Copyright (C) 2019, 2020 The Free Software Foundation, inc. ++# This file is distributed under the same license as the desktop-icons package. ++# ++# Balázs Úr , 2019, 2020. + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# hu.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# hu.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -42,6 +50,20 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Lokalize 2.0\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"#-#-#-#-# hu.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-09-12 14:46+0200\n" ++"Last-Translator: Balázs Úr \n" ++"Language-Team: Hungarian \n" ++"Language: hu\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Lokalize 19.12.3\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -81,7 +103,7 @@ msgstr "Szabály hozzáadása" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 + #, javascript-format + msgid "Ejecting drive “%s” failed:" + msgstr "A(z) „%s” meghajtó kiadása nem sikerült:" +@@ -143,7 +165,7 @@ msgstr "Nem sikerült a kötet csatolása ennél: „%s”" + msgid "Computer" + msgstr "Számítógép" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Saját mappa" + +@@ -702,6 +724,201 @@ msgstr "Megjelenítési időkorlát (mp)" + msgid "Pressure threshold" + msgstr "Nyomás küszöbszintje" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Új mappa neve" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Létrehozás" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Mégse" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "A mappanevek nem tartalmazhatnak „/” karaktert." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Egy mappának nem lehet „.” a neve." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Egy mappának nem lehet „..” a neve." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "A „.” karakterrel kezdődő nevű mappák rejtettek." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Már van egy fájl vagy mappa azzal a névvel." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Az asztali ikonok mérete" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Kicsi" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Szabványos" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Nagy" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "A személyes mappa megjelenítése az asztalon" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "A kuka ikon megjelenítése az asztalon" ++ ++#: prefs.js:106 ++#| msgid "Show the trash icon in the desktop" ++msgid "Show mounted drives in the desktop" ++msgstr "Csatolt meghajtók megjelenítése az asztalon" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Új mappa" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Új dokumentum" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Beillesztés" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Visszavonás" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Újra" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Asztal megjelenítése a Fájlokban" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Megnyitás terminálban" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Háttér megváltoztatása…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Megjelenítés beállításai" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Beállítások" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Átnevezés" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "A parancs nem található" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Ne engedélyezzen indítást" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Indítás engedélyezése" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Megnyitás" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Megnyitás egyéb alkalmazással" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Futtatás dedikált videokártya használatával" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Kivágás" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Másolás" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Átnevezés…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Áthelyezés a Kukába" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Kuka ürítése" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Kiadás" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Tulajdonságok" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Megjelenítés a Fájlokban" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Ikonméret" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Az asztali ikonok méretének beállítása." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Személyes mappa megjelenítése" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "A személyes mappa megjelenítése az asztalon." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Kuka ikon megjelenítése" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "A kuka ikon megjelenítése az asztalon." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++#| msgid "Show in Files" ++msgid "Show mounted drives" ++msgstr "Csatolt meghajtók megjelenítése" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++#| msgid "Show the trash icon in the desktop." ++msgid "Show mounted drives in the desktop." ++msgstr "Csatolt meghajtók megjelenítése az asztalon." ++ + #~ msgid "Application" + #~ msgstr "Alkalmazás" + +@@ -713,3 +930,6 @@ msgstr "Nyomás küszöbszintje" + + #~ msgid "Name" + #~ msgstr "Név" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Adjon meg egy fájlnevet…" +diff --git a/po/id.po b/po/id.po +index af7463f3..22268582 100644 +--- a/po/id.po ++++ b/po/id.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# id.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# id.po (gnome-shell-extensions master) #-#-#-#-# + # Indonesian translation for gnome-shell-extensions. + # Copyright (C) 2012 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -12,10 +13,18 @@ + # This file is distributed under the same license as the PACKAGE package. + # FIRST AUTHOR , YEAR. + # ++# #-#-#-#-# id.po (desktop-icons master) #-#-#-#-# ++# Indonesian translation for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Kukuh Syafaat , 2018-2020. ++# Andika Triwidada , 2020. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# id.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# id.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -43,6 +52,19 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Generator: Poedit 1.8.11\n" ++"#-#-#-#-# id.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-06-06 16:30+0700\n" ++"Last-Translator: Andika Triwidada \n" ++"Language-Team: Indonesian \n" ++"Language: id\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3.1\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -82,10 +104,14 @@ msgstr "Tambah Aturan" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "Saat mengeluarkan drive \"%s\" gagal:" ++msgstr "" ++"#-#-#-#-# id.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Saat mengeluarkan drive \"%s\" gagal:\n" ++"#-#-#-#-# id.po (desktop-icons master) #-#-#-#-#\n" ++"Mengeluarkan kandar \"%s\" gagal:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -144,7 +170,7 @@ msgstr "Gagal mengaitkan volume untuk \"%s\"" + msgid "Computer" + msgstr "Komputer" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Rumah" + +@@ -702,6 +728,198 @@ msgstr "Tampilkan batas waktu (s)" + msgid "Pressure threshold" + msgstr "Ambang tekanan" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nama folder baru" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Buat" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Batal" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Nama folder tak boleh memuat \"/\"." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Sebuah folder tak bisa dinamai \".\"." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Sebuah folder tak bisa dinamai \"..\"." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Folder dengan \".\" di awal nama mereka disembunyikan." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Folder dengan nama itu sudah ada." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Ukuran untuk ikon destop" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Kecil" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standar" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Besar" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Tampilkan folder pribadi di destop" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Tampilkan ikon tong sampah di destop" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Tampilkan kandar yang dikaitkan di destop" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Folder Baru" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Dokumen Baru" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Tempel" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Tak Jadi" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Jadi Lagi" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Tampilkan Destop pada Berkas" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Buka dalam Terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Ubah Latar Belakang…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Pengaturan Tampilan" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Pengaturan" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Ganti Nama" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Perintah tidak ditemukan" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Jangan Izinkan Peluncuran" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Izinkan Peluncuran" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Buka" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Buka Dengan Aplikasi Lain" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Luncurkan menggunakan Kartu Grafis Terdedikasi" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Potong" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Salin" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Ganti Nama…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Pindahkan ke Tong Sampah" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Kosongkan Tong Sampah" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Keluarkan" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Properti" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Tampilkan pada Berkas" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Ukuran ikon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Set ukuran untuk ikon destop." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Tampilkan folder pribadi" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Tampilkan folder pribadi di destop." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Tampilkan ikon tong sampah" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Tampilkan ikon tong sampah di destop." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Tampilkan kandar yang dikaitkan" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Tampilkan kandar yang dikaitkan di destop." ++ + #~ msgid "Application" + #~ msgstr "Aplikasi" + +diff --git a/po/it.po b/po/it.po +index 4b425925..2b24e1b1 100644 +--- a/po/it.po ++++ b/po/it.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# it.po (gnome-shell-extensions) #-#-#-#-# ++# #-#-#-#-# it.po (gnome-shell-extensions) #-#-#-#-# + # Italian translations for GNOME Shell extensions + # Copyright (C) 2011 Giovanni Campagna et al. + # Copyright (C) 2012, 2013, 2014, 2015, 2017, 2019, 2020 The Free Software Foundation, Inc. +@@ -13,10 +14,18 @@ + # This file is distributed under the same license as the Dash-to-Dock package. + # Milo Casagrande , 2018 + # ++# #-#-#-#-# it.po (desktop-icons master) #-#-#-#-# ++# Italian translation for desktop-icons. ++# Copyright (C) 2019, 2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Massimo Branchini , 2019. ++# Milo Casagrande , 2019, 2020. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# it.po (gnome-shell-extensions) #-#-#-#-#\n" ++"#-#-#-#-# it.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -41,6 +50,20 @@ msgstr "" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"#-#-#-#-# it.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-04-05 19:13+0000\n" ++"PO-Revision-Date: 2020-04-07 09:36+0200\n" ++"Last-Translator: Milo Casagrande \n" ++"Language-Team: Italian \n" ++"Language: it\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Poedit 2.2.4\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -776,3 +799,171 @@ msgstr "Timeout rivelazione (s)" + #: Settings.ui.h:107 + msgid "Pressure threshold" + msgstr "Soglia pressione" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nuova cartella" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Crea" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Annulla" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "I nomi di cartelle non possono contenere il carattere «/»" ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Una cartella non può essere chiamata «.»." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Una cartella non può essere chiamata «..»." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Cartelle il cui nome inizia con «.» sono nascoste." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Esiste già un file o una cartella con quel nome." ++ ++#: prefs.js:102 ++msgid "Size for the desktop icons" ++msgstr "Dimensione delle icone della scrivania" ++ ++#: prefs.js:102 ++msgid "Small" ++msgstr "Piccola" ++ ++#: prefs.js:102 ++msgid "Standard" ++msgstr "Normale" ++ ++#: prefs.js:102 ++msgid "Large" ++msgstr "Grande" ++ ++#: prefs.js:103 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostra la cartella personale sulla scrivania" ++ ++#: prefs.js:104 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostra il cestino sulla scrivania" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "Nuova cartella" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "Incolla" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "Annulla" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "Ripeti" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "Mostra la scrivania in File" ++ ++#: desktopGrid.js:350 fileItem.js:651 ++msgid "Open in Terminal" ++msgstr "Apri in Terminale" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "Cambia lo sfondo…" ++ ++#: desktopGrid.js:354 ++msgid "Display Settings" ++msgstr "Impostazioni dello schermo" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "Impostazioni" ++ ++#: desktopGrid.js:653 ++msgid "Rename" ++msgstr "Rinomina" ++ ++#: desktopIconsUtil.js:61 ++msgid "Command not found" ++msgstr "Comando non trovato" ++ ++#: fileItem.js:521 ++msgid "Don’t Allow Launching" ++msgstr "Non permettere l'esecuzione" ++ ++#: fileItem.js:523 ++msgid "Allow Launching" ++msgstr "Permetti l'esecuzione" ++ ++#: fileItem.js:619 ++msgid "Open" ++msgstr "Apri" ++ ++#: fileItem.js:623 ++msgid "Open With Other Application" ++msgstr "Apri con altra applicazione" ++ ++#: fileItem.js:627 ++msgid "Cut" ++msgstr "Taglia" ++ ++#: fileItem.js:628 ++msgid "Copy" ++msgstr "Copia" ++ ++#: fileItem.js:630 ++msgid "Rename…" ++msgstr "Rinomina…" ++ ++#: fileItem.js:631 ++msgid "Move to Trash" ++msgstr "Sposta nel cestino" ++ ++#: fileItem.js:641 ++msgid "Empty Trash" ++msgstr "Svuota il cestino" ++ ++#: fileItem.js:647 ++msgid "Properties" ++msgstr "Proprietà" ++ ++#: fileItem.js:649 ++msgid "Show in Files" ++msgstr "Mostra in File" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Dimensione dell'icona" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Imposta la grandezza delle icone della scrivania." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostra la cartella personale" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostra la cartella personale sulla scrivania." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostra il cestino" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostra il cestino sulla scrivania." +diff --git a/po/ja.po b/po/ja.po +index 30b84200..8eb77253 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-# + # gnome-shell-extensions ja.po + # Copyright (C) 2011-2015, 2019-2020 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -18,10 +19,17 @@ + # sicklylife , 2019-2020. + # Ryo Nakano , 2019. + # ++# #-#-#-#-# ja.po (desktop-icons master) #-#-#-#-# ++# Japanese translation for desktop-icons. ++# Copyright (C) 2019-2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# sicklylife , 2019-2020. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -46,6 +54,19 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" ++"#-#-#-#-# ja.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-05-30 00:00+0900\n" ++"Last-Translator: sicklylife \n" ++"Language-Team: Japanese \n" ++"Language: ja\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -85,10 +106,14 @@ msgstr "ルールを追加" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "ドライブ“%s”の取り出しに失敗しました:" ++msgstr "" ++"#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"ドライブ“%s”の取り出しに失敗しました:\n" ++"#-#-#-#-# ja.po (desktop-icons master) #-#-#-#-#\n" ++"“%s”の取り出しに失敗しました:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -148,7 +173,7 @@ msgstr "“%s”のマウントに失敗しました" + msgid "Computer" + msgstr "コンピューター" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "ホーム" + +@@ -329,7 +354,7 @@ msgstr "お気に入りから削除" + msgid "All Windows" + msgstr "ウィンドウプレビューの表示" + +-#: appIcons.js:823 ++#: appIcons.js:823 fileItem.js:688 + msgid "Launch using Dedicated Graphics Card" + msgstr "専用のグラフィックカードを使用して起動" + +@@ -359,7 +384,7 @@ msgstr "%d 個のウィンドウを終了" + msgid "Dash to Dock %s" + msgstr "Dash to Dock の%s" + +-#: appIcons.js:1134 ++#: appIcons.js:1134 desktopGrid.js:360 + msgid "Settings" + msgstr "設定" + +@@ -371,7 +396,7 @@ msgstr "Dash" + msgid "Trash" + msgstr "ゴミ箱" + +-#: locations.js:74 ++#: locations.js:74 fileItem.js:707 + msgid "Empty Trash" + msgstr "ゴミ箱を空にする" + +@@ -379,7 +404,7 @@ msgstr "ゴミ箱を空にする" + msgid "Mount" + msgstr "マウント" + +-#: locations.js:235 ++#: locations.js:235 fileItem.js:711 + msgid "Eject" + msgstr "取り出す" + +@@ -869,6 +894,192 @@ msgstr "表示までのタイムアウト (秒)" + msgid "Pressure threshold" + msgstr "押し込み量 (ピクセル)" + ++#: desktopGrid.js:359 ++#, fuzzy ++msgid "Display Settings" ++msgstr "" ++"#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"ディスプレイ設定\n" ++"#-#-#-#-# ja.po (desktop-icons master) #-#-#-#-#\n" ++"ディスプレイの設定" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++#, fuzzy ++msgid "Icon size" ++msgstr "" ++"#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"アイコンのサイズ\n" ++"#-#-#-#-# ja.po (desktop-icons master) #-#-#-#-#\n" ++"アイコンサイズ" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "新しいフォルダー名" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "作成" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "キャンセル" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "“/”はフォルダー名に含められません。" ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "“.”という名前はフォルダーに付けられません。" ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "“..”という名前はフォルダーに付けられません。" ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "“.”で始まるフォルダーは隠しフォルダーになります。" ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "その名前のファイルかフォルダーがすでに存在します。" ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "デスクトップアイコンのサイズ" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "小さい" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "標準" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "大きい" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "ホームフォルダーをデスクトップに表示する" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "ゴミ箱をデスクトップに表示する" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "マウントしたドライブをデスクトップに表示する" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "新しいフォルダー" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "新しいドキュメント" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "貼り付け" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "元に戻す" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "やり直す" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "“ファイル”でデスクトップを表示" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "端末で開く" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "背景を変更…" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "名前を変更" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "コマンドが見つかりませんでした" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "起動を許可しない" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "起動を許可する" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "開く" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "別のアプリケーションで開く" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "切り取り" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "コピー" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "名前を変更…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "ゴミ箱へ移動する" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "プロパティ" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "“ファイル”で表示" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "デスクトップのアイコンサイズを設定します。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "ホームフォルダーを表示する" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "デスクトップにホームフォルダーを表示します。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "ゴミ箱アイコンを表示する" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "デスクトップにゴミ箱のアイコンを表示します。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "マウントしたドライブを表示する" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "デスクトップにマウントしたドライブを表示します。" ++ + #~ msgid "Application" + #~ msgstr "アプリケーション" + +@@ -970,9 +1181,6 @@ msgstr "押し込み量 (ピクセル)" + #~ msgid "Display" + #~ msgstr "ディスプレイ" + +-#~ msgid "Display Settings" +-#~ msgstr "ディスプレイ設定" +- + #~ msgid "Suspend" + #~ msgstr "サスペンド" + +@@ -1012,9 +1220,6 @@ msgstr "押し込み量 (ピクセル)" + #~ msgid "Drag here to add favorites" + #~ msgstr "ドラッグでお気に入りに追加" + +-#~ msgid "Icon size" +-#~ msgstr "アイコンのサイズ" +- + #~ msgid "Position of the dock" + #~ msgstr "ドックの位置" + +diff --git a/po/kab.po b/po/kab.po +index bc98151d..5184aac5 100644 +--- a/po/kab.po ++++ b/po/kab.po +@@ -3,8 +3,10 @@ + # This file is distributed under the same license as the PACKAGE package. + # FIRST AUTHOR , YEAR. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# kab.po #-#-#-#-#\n" + "Project-Id-Version: \n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -18,6 +20,20 @@ msgstr "" + "Last-Translator: Yacine Bouklif \n" + "Language-Team: \n" + "X-Generator: Poedit 2.4.1\n" ++"#-#-#-#-# kab.po #-#-#-#-#\n" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2021-03-28 17:45+0000\n" ++"PO-Revision-Date: 2021-04-03 21:21+0100\n" ++"Language-Team: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.4.2\n" ++"Last-Translator: Slimane Selyan Amiri \n" ++"Plural-Forms: nplurals=2; plural=(n > 1);\n" ++"Language: kab\n" + + #: data/gnome-classic.desktop.in:3 + msgid "GNOME Classic" +@@ -57,10 +73,14 @@ msgstr "Rnu alugen" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "Aḍeqqer n uḍebsi “%s” ur yeddi ara:" ++msgstr "" ++"#-#-#-#-# kab.po #-#-#-#-#\n" ++"Aḍeqqer n uḍebsi “%s” ur yeddi ara:\n" ++"#-#-#-#-# kab.po #-#-#-#-#\n" ++"Aḍegger n uḍebsi “%s” ur yeddi ara:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -112,9 +132,14 @@ msgstr "Aserkeb n ubleɣ “%s” ur yeddi ara" + msgid "Computer" + msgstr "Aselkim" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:951 ++#, fuzzy + msgid "Home" +-msgstr "Asebter agejdan" ++msgstr "" ++"#-#-#-#-# kab.po #-#-#-#-#\n" ++"Asebter agejdan\n" ++"#-#-#-#-# kab.po #-#-#-#-#\n" ++"Asnubeg" + + #: extensions/places-menu/placeDisplay.js:404 + msgid "Browse Network" +@@ -252,3 +277,195 @@ msgstr "Tallunt n umahil %d" + #: extensions/workspace-indicator/prefs.js:218 + msgid "Add Workspace" + msgstr "Rnu tallunt n umahil" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Isem n ukaram amaynut" ++ ++#: createFolderDialog.js:72 ++msgid "Create" ++msgstr "Rnu" ++ ++#: createFolderDialog.js:74 ++msgid "Cancel" ++msgstr "Sefsex" ++ ++#: createFolderDialog.js:147 ++msgid "Folder names cannot contain “/”." ++msgstr "Isem n ukaram ur izmir ara ad igber “/”." ++ ++#: createFolderDialog.js:150 ++msgid "A folder cannot be called “.”." ++msgstr "Isem n ukaram ur izmir ara ad yili “.”." ++ ++#: createFolderDialog.js:153 ++msgid "A folder cannot be called “..”." ++msgstr "Isem n ukaram ur izmir ara ad yili “..”." ++ ++#: createFolderDialog.js:155 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Ikaramen s “.” di tazwara n yisem-nsen ttwafren." ++ ++#: createFolderDialog.js:157 ++msgid "There is already a file or folder with that name." ++msgstr "Akaram s yisem-agi yella yakan." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Tuɣzi n tegnitin n tnarit" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Meẓẓi" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Anaway" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Meqqer" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Sken akaram udmawan deg tnarit" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Sken tignit n tqecwalt deg tnarit" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Sken iḍebsiyen irekben deg tnarit" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Akaram amaynut" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Isemli amaynut" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Senṭeḍ" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Err-d" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Uɣal" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Sken-d tanarit deg ifuyla" ++ ++#: desktopGrid.js:355 fileItem.js:726 ++msgid "Open in Terminal" ++msgstr "Ldi deg unneftaɣ" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Beddel agilal…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Iɣewwaren n uskan" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Iɣewwaṛen" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Beddel isem" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Ulac taladna" ++ ++#: fileItem.js:589 ++msgid "Don’t Allow Launching" ++msgstr "Ur sirig ara asenker" ++ ++#: fileItem.js:591 ++msgid "Allow Launching" ++msgstr "Sireg asenker" ++ ++#: fileItem.js:687 ++msgid "Open" ++msgstr "Ldi" ++ ++#: fileItem.js:691 ++msgid "Open With Other Application" ++msgstr "Ldi s usnas-nniḍen" ++ ++#: fileItem.js:693 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Sker s useqdec n tkarḍa tudlift ittwaHerzen" ++ ++#: fileItem.js:698 ++msgid "Cut" ++msgstr "Gzem" ++ ++#: fileItem.js:699 ++msgid "Copy" ++msgstr "Nɣel" ++ ++#: fileItem.js:701 ++msgid "Rename…" ++msgstr "Snifel isem…" ++ ++#: fileItem.js:702 ++msgid "Move to Trash" ++msgstr "Smutti ɣer tqecwalt" ++ ++#: fileItem.js:712 ++msgid "Empty Trash" ++msgstr "Ḍeggeṛ iḍumman" ++ ++#: fileItem.js:716 ++msgid "Eject" ++msgstr "Ḍeqqer-d" ++ ++#: fileItem.js:722 ++msgid "Properties" ++msgstr "Tulmisin" ++ ++#: fileItem.js:724 ++msgid "Show in Files" ++msgstr "Sken deg ifulay" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Tuɣzi n tignit" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Sbadu tuɣzi n tegnitin n tnarit." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Sken akaram udmawan" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Sken akaram udmawan deg tnarit." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Sken tignit n tqecwalt" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Sken tignit n tqecwalt deg tnarit." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Sken iḍebsiyen irekben" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Sken iḍebsiyen irekben deg tnarit." +diff --git a/po/ko.po b/po/ko.po +index aeb5010c..e7926e95 100644 +--- a/po/ko.po ++++ b/po/ko.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# ko.po (gnome-shell-extensions) #-#-#-#-# + # Korean translation for gnome-shell-extensions. + # Copyright (C) 2012 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -5,8 +6,17 @@ + # Seong-ho Cho , 2012. + # Changwoo Ryu , 2013-2015, 2017, 2019-2020. + # ++# #-#-#-#-# ko.po (desktop-icons master) #-#-#-#-# ++# Korean translation for desktop-icons. ++# Copyright (C) 2021 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# FIRST AUTHOR , YEAR. ++# Kuroe Hanako , 2021. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# ko.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -19,6 +29,20 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" ++"#-#-#-#-# ko.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2021-03-17 02:05+0000\n" ++"PO-Revision-Date: 2021-03-28 13:11+0900\n" ++"Last-Translator: Kuroe Hanako \n" ++"Language-Team: Korean \n" ++"Language: ko\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0\n" ++"X-Generator: Gtranslator 3.36.0\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -58,10 +82,14 @@ msgstr "규칙 추가" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "“%s” 드라이브를 빼는데 실패했습니다:" ++msgstr "" ++"#-#-#-#-# ko.po (gnome-shell-extensions) #-#-#-#-#\n" ++"“%s” 드라이브를 빼는데 실패했습니다:\n" ++"#-#-#-#-# ko.po (desktop-icons master) #-#-#-#-#\n" ++"\"%s\" 드라이브를 꺼내는 데 실패했습니다:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -119,7 +147,7 @@ msgstr "“%s” 볼륨 마운트에 실패했습니다" + msgid "Computer" + msgstr "컴퓨터" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:951 + msgid "Home" + msgstr "홈" + +@@ -258,6 +286,198 @@ msgstr "작업 공간 %d" + msgid "Add Workspace" + msgstr "작업 공간 추가" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "새 폴더 이름" ++ ++#: createFolderDialog.js:72 ++msgid "Create" ++msgstr "만들기" ++ ++#: createFolderDialog.js:74 ++msgid "Cancel" ++msgstr "취소" ++ ++#: createFolderDialog.js:147 ++msgid "Folder names cannot contain “/”." ++msgstr "폴더 이름에는 \"/\"가 들어갈 수 없습니다." ++ ++#: createFolderDialog.js:150 ++msgid "A folder cannot be called “.”." ++msgstr "폴더 이름은 \".\"이 될 수 없습니다." ++ ++#: createFolderDialog.js:153 ++msgid "A folder cannot be called “..”." ++msgstr "폴더 이름은 \"..\"이 될 수 없습니다." ++ ++#: createFolderDialog.js:155 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "폴더 이름이 \".\"으로 시작하면 폴더가 숨겨집니다." ++ ++#: createFolderDialog.js:157 ++msgid "There is already a file or folder with that name." ++msgstr "같은 이름의 폴더가 이미 있습니다." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "바탕 화면 아이콘 크기" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "작게" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "보통" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "크게" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "사용자 폴더를 바탕 화면에 표시" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "휴지통 아이콘을 바탕 화면에 표시" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "마운트된 드라이브를 바탕 화면에 표시" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "새 폴더" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "새 문서" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "붙여넣기" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "실행 취소" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "다시 실행" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "파일에서 바탕 화면 보기" ++ ++#: desktopGrid.js:355 fileItem.js:726 ++msgid "Open in Terminal" ++msgstr "터미널에서 열기" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "배경 바꾸기…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "디스플레이 설정" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "설정" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "이름 바꾸기" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "명령을 찾을 수 없음" ++ ++#: fileItem.js:589 ++msgid "Don’t Allow Launching" ++msgstr "실행 허용하지 않음" ++ ++#: fileItem.js:591 ++msgid "Allow Launching" ++msgstr "실행 허용" ++ ++#: fileItem.js:687 ++msgid "Open" ++msgstr "열기" ++ ++#: fileItem.js:691 ++msgid "Open With Other Application" ++msgstr "다른 프로그램으로 열기" ++ ++#: fileItem.js:693 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "전용 그래픽 카드로 실행" ++ ++#: fileItem.js:698 ++msgid "Cut" ++msgstr "잘라내기" ++ ++#: fileItem.js:699 ++msgid "Copy" ++msgstr "복사" ++ ++#: fileItem.js:701 ++msgid "Rename…" ++msgstr "이름 바꾸기…" ++ ++#: fileItem.js:702 ++msgid "Move to Trash" ++msgstr "휴지통에 버리기" ++ ++#: fileItem.js:712 ++msgid "Empty Trash" ++msgstr "휴지통 비우기" ++ ++#: fileItem.js:716 ++msgid "Eject" ++msgstr "꺼내기" ++ ++#: fileItem.js:722 ++msgid "Properties" ++msgstr "속성" ++ ++#: fileItem.js:724 ++msgid "Show in Files" ++msgstr "파일에서 보기" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "아이콘 크기" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "바탕 화면의 아이콘 크기를 설정합니다." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "사용자 폴더 표시" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "바탕 화면에 사용자 폴더를 표시합니다." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "휴지통 아이콘 표시" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "바탕 화면에 휴지통 아이콘을 표시합니다." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "마운트된 드라이브 표시" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "바탕 화면에 마운트된 드라이브를 표시합니다." ++ + #~ msgid "Application" + #~ msgstr "프로그램" + +diff --git a/po/nl.po b/po/nl.po +index 6a1ee07c..b1d2aed2 100644 +--- a/po/nl.po ++++ b/po/nl.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# nl.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# nl.po (gnome-shell-extensions master) #-#-#-#-# + # Dutch translation for gnome-shell-extensions. + # Copyright (C) 2013 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -14,10 +15,17 @@ + # Jonatan Zeidler , 2012. + # jonius , 2012. + # Heimen Stoffels , 2015, 2019. ++# #-#-#-#-# nl.po (desktop-icons master) #-#-#-#-# ++# Dutch translation for desktop-icons. ++# Copyright (C) 2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Nathan Follens , 2019-2020. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# nl.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# nl.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -45,6 +53,20 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Lokalize 19.11.70\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"#-#-#-#-# nl.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-08-25 21:34+0200\n" ++"Last-Translator: Nathan Follens \n" ++"Language-Team: Dutch \n" ++"Language: nl\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Poedit 2.4.1\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -84,7 +106,7 @@ msgstr "Regel toevoegen" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 + #, javascript-format + msgid "Ejecting drive “%s” failed:" + msgstr "Uitwerpen van station ‘%s’ mislukt:" +@@ -147,7 +169,7 @@ msgstr "Koppelen van volume mislukt voor ‘%s’" + msgid "Computer" + msgstr "Computer" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Persoonlijke map" + +@@ -793,6 +815,198 @@ msgstr "Weergave-interval (s)" + msgid "Pressure threshold" + msgstr "Drukwaarde" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nieuwe mapnaam" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Aanmaken" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Annuleren" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Mapnamen kunnen geen ‘/’ bevatten." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Een map kan niet ‘.’ worden genoemd." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Een map kan niet ‘..’ worden genoemd." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Mappen waarvan de naam begint met ‘.’ zijn verborgen." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Er bestaat al een bestand of map met die naam." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Grootte van bureaubladpictogrammen" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Klein" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standaard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Groot" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Toon de persoonlijke map op het bureaublad" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Toon het prullenbakpictogram op het bureaublad" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Gekoppelde volumes tonen op het bureaublad" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nieuwe map" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nieuw document" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Plakken" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Ongedaan maken" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Opnieuw" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Bureaublad tonen in Bestanden" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Openen in terminalvenster" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Achtergrond aanpassen…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Scherminstellingen" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Instellingen" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Hernoemen" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Opdracht niet gevonden" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Toepassingen starten niet toestaan" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Toepassingen starten toestaan" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Openen" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Met andere toepassing openen" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Met grafische kaart opstarten" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Knippen" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopiëren" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Hernoemen…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Verplaatsen naar prullenbak" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Prullenbak legen" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Uitwerpen" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Eigenschappen" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Tonen in Bestanden" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Pictogramgrootte" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Stel de grootte van de bureaubladpictogrammen in." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Persoonlijke map tonen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Toon de persoonlijke map op het bureaublad." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Prullenbakpictogram tonen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Toon het prullenbakpictogram op het bureaublad." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Gekoppelde volumes tonen" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Gekoppelde volumes tonen op het bureaublad." ++ + #~ msgid "Application" + #~ msgstr "Toepassing" + +@@ -1018,3 +1232,9 @@ msgstr "Drukwaarde" + #~ msgstr "" + #~ "Benutzerdefiniertes Theme verwenden (funktioniert nur mit dem Standard-" + #~ "Adwaita-Theme)" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Voer bestandsnaam in…" ++ ++#~ msgid "OK" ++#~ msgstr "Oké" +diff --git a/po/oc.po b/po/oc.po +index 1798ace8..4e1bd637 100644 +--- a/po/oc.po ++++ b/po/oc.po +@@ -1,10 +1,19 @@ ++# #-#-#-#-# oc.po (gnome-shell-extensions master) #-#-#-#-# + # Occitan translation for gnome-shell-extensions. + # Copyright (C) 2011-12 Listed translators + # This file is distributed under the same license as the gnome-shell-extensions package. + # Cédric Valmary (Tot en òc) , 2015. + # Cédric Valmary (totenoc.eu) , 2016. ++# #-#-#-#-# oc.po #-#-#-#-# ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# oc.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -19,6 +28,19 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n > 1);\n" + "X-Generator: Poedit 2.4.3\n" + "X-Project-Style: gnome\n" ++"#-#-#-#-# oc.po #-#-#-#-#\n" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2021-03-28 17:45+0000\n" ++"PO-Revision-Date: 2021-04-02 20:01+0200\n" ++"Language-Team: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.4.2\n" ++"Last-Translator: Quentin PAGÈS\n" ++"Language: oc\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -59,7 +81,7 @@ msgstr "Apondre una règla" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 + #, javascript-format + msgid "Ejecting drive “%s” failed:" + msgstr "L'ejeccion del disc « %s » a fracassat :" +@@ -121,9 +143,14 @@ msgstr "Fracàs del montatge del volum per « %s »" + msgid "Computer" + msgstr "Ordenador" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:951 ++#, fuzzy + msgid "Home" +-msgstr "Dorsièr personal" ++msgstr "" ++"#-#-#-#-# oc.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Dorsièr personal\n" ++"#-#-#-#-# oc.po #-#-#-#-#\n" ++"Repertòri personal" + + #: extensions/places-menu/placeDisplay.js:404 + msgid "Browse Network" +@@ -263,6 +290,203 @@ msgstr "Espaci de trabalh %d" + msgid "Add Workspace" + msgstr "Apondre un espaci de trabalh" + ++#: desktopGrid.js:359 ++#, fuzzy ++msgid "Display Settings" ++msgstr "" ++"#-#-#-#-# oc.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Afichar los paramètres\n" ++"#-#-#-#-# oc.po #-#-#-#-#\n" ++"Paramètres d'afichatge" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nom de dossièr novèl" ++ ++#: createFolderDialog.js:72 ++msgid "Create" ++msgstr "Crear" ++ ++#: createFolderDialog.js:74 ++msgid "Cancel" ++msgstr "Anullar" ++ ++#: createFolderDialog.js:147 ++msgid "Folder names cannot contain “/”." ++msgstr "Los noms de dossièrs pòdon pas conténer « / »." ++ ++#: createFolderDialog.js:150 ++msgid "A folder cannot be called “.”." ++msgstr "Impossible d'apelar un dossièr « . »." ++ ++#: createFolderDialog.js:153 ++msgid "A folder cannot be called “..”." ++msgstr "Impossible d'apelar un dossièr « .. »." ++ ++#: createFolderDialog.js:155 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Los dossièrs amb un « . » a la debuta de lor nom son amagats" ++ ++#: createFolderDialog.js:157 ++msgid "There is already a file or folder with that name." ++msgstr "Un fichièr o un dossièr amb aqueste nom existís ja." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Talha de las icònas burèu" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Pichon" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Estandard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Grand" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostrar lo dorsièr personal pel burèu" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostrar l'icòna de l'escobilhièr pel burèu" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Mostrar los volums montats pel burèu" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Dossièr novèl" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Document novèl" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Pegar" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Restablir" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Restablir" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Mostrar lo burèu dins Fichièrs" ++ ++#: desktopGrid.js:355 fileItem.js:726 ++msgid "Open in Terminal" ++msgstr "Dobrir dins un terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Modificar lo rèireplan…" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Paramètres" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Renomenar" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Comanda pas trobada" ++ ++#: fileItem.js:589 ++msgid "Don’t Allow Launching" ++msgstr "Permetre pas l'aviada" ++ ++#: fileItem.js:591 ++msgid "Allow Launching" ++msgstr "Permetre l'aviada" ++ ++#: fileItem.js:687 ++msgid "Open" ++msgstr "Dobrir" ++ ++#: fileItem.js:691 ++msgid "Open With Other Application" ++msgstr "Dobrir amb una autra aplicacion" ++ ++#: fileItem.js:693 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Aviar en utilizant la carta grafica dedicada" ++ ++#: fileItem.js:698 ++msgid "Cut" ++msgstr "Talhar" ++ ++#: fileItem.js:699 ++msgid "Copy" ++msgstr "Copiar" ++ ++#: fileItem.js:701 ++msgid "Rename…" ++msgstr "Renomenar…" ++ ++#: fileItem.js:702 ++msgid "Move to Trash" ++msgstr "Desplaçar a l’_escobilhièr" ++ ++#: fileItem.js:712 ++msgid "Empty Trash" ++msgstr "Voidar l’escobilhièr" ++ ++#: fileItem.js:716 ++msgid "Eject" ++msgstr "Ejectar" ++ ++#: fileItem.js:722 ++msgid "Properties" ++msgstr "Proprietats" ++ ++#: fileItem.js:724 ++msgid "Show in Files" ++msgstr "Mostrar dins Fichièrs" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Talha de l'icòna" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Definir la talha de las icònas burèu." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostrar lo dorsièr personal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostrar lo dorsièr personal pel burèu." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostrar l'icòna de l'escobilhièr" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostrar l'icòna de l'escobilhièr pel burèu." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Mostrar los lectors montats" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Mostrar los lector montats pel burèu." ++ + #~ msgid "Attach modal dialog to the parent window" + #~ msgstr "Estacar las bóstias de dialòg modalas a lor fenèstra parenta" + +@@ -403,6 +627,3 @@ msgstr "Apondre un espaci de trabalh" + + #~ msgid "Display" + #~ msgstr "Afichar" +- +-#~ msgid "Display Settings" +-#~ msgstr "Afichar los paramètres" +diff --git a/po/pl.po b/po/pl.po +index a97366b6..7b26d43f 100644 +--- a/po/pl.po ++++ b/po/pl.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# pl.po (gnome-shell-extensions) #-#-#-#-# ++# #-#-#-#-# pl.po (gnome-shell-extensions) #-#-#-#-# + # Polish translation for gnome-shell-extensions. + # Copyright © 2011-2020 the gnome-shell-extensions authors. + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -13,10 +14,18 @@ + # + # Piotr Sokół , 2012, 2013, 2015, 2016, 2017. + # ++# #-#-#-#-# pl.po (desktop-icons) #-#-#-#-# ++# Polish translation for desktop-icons. ++# Copyright © 2018-2020 the desktop-icons authors. ++# This file is distributed under the same license as the desktop-icons package. ++# Piotr Drąg , 2018-2020. ++# Aviary.pl , 2018-2020. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# pl.po (gnome-shell-extensions) #-#-#-#-#\n" ++"#-#-#-#-# pl.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -44,6 +53,20 @@ msgstr "" + "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " + "|| n%100>=20) ? 1 : 2;\n" + "X-Generator: Poedit 2.2.3\n" ++"#-#-#-#-# pl.po (desktop-icons) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-05-31 14:15+0200\n" ++"Last-Translator: Piotr Drąg \n" ++"Language-Team: Polish \n" ++"Language: pl\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " ++"|| n%100>=20) ? 1 : 2);\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -83,7 +106,7 @@ msgstr "Dodaj regułę" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 + #, javascript-format + msgid "Ejecting drive “%s” failed:" + msgstr "Wysunięcie napędu „%s” się nie powiodło:" +@@ -145,7 +168,7 @@ msgstr "Zamontowanie woluminu dla „%s” się nie powiodło" + msgid "Computer" + msgstr "Komputer" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Katalog domowy" + +@@ -345,15 +368,20 @@ msgstr "%s Dash to Dock" + msgid "Trash" + msgstr "Kosz" + +-#: locations.js:74 ++#: locations.js:74 fileItem.js:707 ++#, fuzzy + msgid "Empty Trash" +-msgstr "Pusty kosz" ++msgstr "" ++"#-#-#-#-# pl.po (gnome-shell-extensions) #-#-#-#-#\n" ++"Pusty kosz\n" ++"#-#-#-#-# pl.po (desktop-icons) #-#-#-#-#\n" ++"Opróżnij kosz" + + #: locations.js:182 + msgid "Mount" + msgstr "Zamontuj" + +-#: locations.js:225 ++#: locations.js:225 fileItem.js:711 + msgid "Eject" + msgstr "Wysuń" + +@@ -815,6 +843,190 @@ msgstr "Czas wyświetlania (s)" + msgid "Pressure threshold" + msgstr "Próg nacisku" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nazwa nowego katalogu" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Utwórz" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Anuluj" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Nazwy katalogów nie mogą zawierać znaku „/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Katalog nie może mieć nazwy „.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Katalog nie może mieć nazwy „..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Katalogi z „.” na początku nazwy są ukryte." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Plik lub katalog o tej nazwie już istnieje." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Rozmiar ikon na pulpicie" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Mały" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standardowy" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Duży" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Katalog domowy na pulpicie" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Kosz na pulpicie" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Zamontowane napędy na pulpicie" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nowy katalog" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nowy dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Wklej" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Cofnij" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Ponów" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Wyświetl pulpit w menedżerze plików" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Otwórz w terminalu" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Zmień tło…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Ustawienia ekranu" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Ustawienia" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Zmień nazwę" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Nie odnaleziono polecenia" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Nie zezwalaj na uruchamianie" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Zezwól na uruchamianie" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Otwórz" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Otwórz za pomocą innego programu" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Uruchom za pomocą dedykowanej karty graficznej" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Wytnij" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Skopiuj" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Zmień nazwę…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Przenieś do kosza" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Właściwości" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Wyświetl w menedżerze plików" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Rozmiar ikon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Ustawia rozmiar ikon na pulpicie." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Katalog domowy" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Wyświetla katalog domowy na pulpicie." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Kosz" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Wyświetla kosz na pulpicie." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Zamontowane napędy" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Wyświetla zamontowane napędy na pulpicie." ++ + #~ msgid "Show a dot for each windows of the application." + #~ msgstr "Wyświetla kropkę dla każdego okna programu" + +diff --git a/po/pt.po b/po/pt.po +index 99d446f9..0ae7be05 100644 +--- a/po/pt.po ++++ b/po/pt.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# pt.po (3.14) #-#-#-#-# ++# #-#-#-#-# pt.po (3.14) #-#-#-#-# + # gnome-shell-extensions' Portuguese translation. + # Copyright © 2011 gnome-shell-extensions + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -17,10 +18,17 @@ + # This file is distributed under the same license as the PACKAGE package. + # Carlos Alberto Junior Spohr Poletto , 2012. + # ++# #-#-#-#-# pt.po (desktop-icons master) #-#-#-#-# ++# Portuguese translation for desktop-icons. ++# Copyright (C) 2021 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Hugo Carvalho , 2021. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# pt.po (3.14) #-#-#-#-#\n" ++"#-#-#-#-# pt.po (3.14) #-#-#-#-#\n" + "Project-Id-Version: 3.14\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -47,6 +55,20 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.2.1\n" ++"#-#-#-#-# pt.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2021-02-03 06:55+0000\n" ++"PO-Revision-Date: 2021-02-24 20:34+0000\n" ++"Language-Team: Portuguese \n" ++"Language: pt\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"Last-Translator: Hugo Carvalho \n" ++"X-Generator: Poedit 2.4.1\n" + + #: data/gnome-classic.desktop.in:3 + msgid "GNOME Classic" +@@ -89,7 +111,11 @@ msgstr "Adicionar regra" + #: extensions/places-menu/placeDisplay.js:233 + #, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "Falha ao ejetar a unidade '%s':" ++msgstr "" ++"#-#-#-#-# pt.po (3.14) #-#-#-#-#\n" ++"Falha ao ejetar a unidade '%s':\n" ++"#-#-#-#-# pt.po (desktop-icons master) #-#-#-#-#\n" ++"A ejeção da unidade “%s” falhou:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -148,9 +174,14 @@ msgstr "Falha ao montar unidade para “%s”" + msgid "Computer" + msgstr "Computador" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:951 ++#, fuzzy + msgid "Home" +-msgstr "Pasta pessoal" ++msgstr "" ++"#-#-#-#-# pt.po (3.14) #-#-#-#-#\n" ++"Pasta pessoal\n" ++"#-#-#-#-# pt.po (desktop-icons master) #-#-#-#-#\n" ++"Início" + + #: extensions/places-menu/placeDisplay.js:404 + msgid "Browse Network" +@@ -774,6 +805,203 @@ msgstr "Mostrar tempo limite (s)" + msgid "Pressure threshold" + msgstr "Limite de pressão" + ++#: desktopGrid.js:359 ++#, fuzzy ++msgid "Display Settings" ++msgstr "" ++"#-#-#-#-# pt.po (3.14) #-#-#-#-#\n" ++"Definições de Visualização\n" ++"#-#-#-#-# pt.po (desktop-icons master) #-#-#-#-#\n" ++"Definições de ecrã" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Novo nome de pasta" ++ ++#: createFolderDialog.js:72 ++msgid "Create" ++msgstr "Criar" ++ ++#: createFolderDialog.js:74 ++msgid "Cancel" ++msgstr "Cancelar" ++ ++#: createFolderDialog.js:147 ++msgid "Folder names cannot contain “/”." ++msgstr "Nomes de pastas não podem conter “/”." ++ ++#: createFolderDialog.js:150 ++msgid "A folder cannot be called “.”." ++msgstr "Uma pasta não pode ser chamada de “.”." ++ ++#: createFolderDialog.js:153 ++msgid "A folder cannot be called “..”." ++msgstr "Uma pasta não pode ser chamada de “..”." ++ ++#: createFolderDialog.js:155 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Pastas com “.” no começo de seus nomes são ocultas." ++ ++#: createFolderDialog.js:157 ++msgid "There is already a file or folder with that name." ++msgstr "Já existe um ficheiro ou uma pasta com esse nome." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Tamanho para os ícones do ambiente de trabalho" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Pequeno" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Padrão" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Grande" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostrar a pasta pessoal no ambiente de trabalho" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostrar o ícone do lixo no ambiente de trabalho" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Mostrar as unidades montadas na área de trabalho" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nova pasta" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Novo documento" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Colar" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Anular" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Refazer" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Mostrar o ambiente de trabalho em Ficheiros" ++ ++#: desktopGrid.js:355 fileItem.js:726 ++msgid "Open in Terminal" ++msgstr "Abrir no Terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Alterar o fundo…" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Definições" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Renomear" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Comando não encontrado" ++ ++#: fileItem.js:589 ++msgid "Don’t Allow Launching" ++msgstr "Não permitir iniciar" ++ ++#: fileItem.js:591 ++msgid "Allow Launching" ++msgstr "Permitir iniciar" ++ ++#: fileItem.js:687 ++msgid "Open" ++msgstr "Abrir" ++ ++#: fileItem.js:691 ++msgid "Open With Other Application" ++msgstr "Abrir com outra aplicação" ++ ++#: fileItem.js:693 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Iniciar utilizando a placa gráfica dedicada" ++ ++#: fileItem.js:698 ++msgid "Cut" ++msgstr "Cortar" ++ ++#: fileItem.js:699 ++msgid "Copy" ++msgstr "Copiar" ++ ++#: fileItem.js:701 ++msgid "Rename…" ++msgstr "Renomear…" ++ ++#: fileItem.js:702 ++msgid "Move to Trash" ++msgstr "Mover para o lixo" ++ ++#: fileItem.js:712 ++msgid "Empty Trash" ++msgstr "Esvaziar lixo" ++ ++#: fileItem.js:716 ++msgid "Eject" ++msgstr "Ejetar" ++ ++#: fileItem.js:722 ++msgid "Properties" ++msgstr "Propriedades" ++ ++#: fileItem.js:724 ++msgid "Show in Files" ++msgstr "Mostrar no Ficheiros" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Tamanho do ícone" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Define o tamanho para os ícones do ambiente de trabalho." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostrar pasta pessoal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostra a pasta pessoal no ambiente de trabalho." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostrar ícone do lixo" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostra o ícone do lixo no ambiente de trabalho." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Mostrar unidades montadas" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Mostra as unidades montadas no ambiente de trabalho." ++ + #~ msgid "Attach modal dialog to the parent window" + #~ msgstr "Anexar diálogo modal à janela mãe" + +@@ -898,6 +1126,3 @@ msgstr "Limite de pressão" + + #~ msgid "Display" + #~ msgstr "Apresentar" +- +-#~ msgid "Display Settings" +-#~ msgstr "Definições de Visualização" +diff --git a/po/pt_BR.po b/po/pt_BR.po +index 9dc0db84..16117cec 100644 +--- a/po/pt_BR.po ++++ b/po/pt_BR.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# pt_BR.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# pt_BR.po (gnome-shell-extensions master) #-#-#-#-# + # Brazilian Portuguese translation for gnome-shell-extensions. + # Copyright (C) 2020 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -18,10 +19,18 @@ + # Carlos Alberto Junior Spohr Poletto , 2012. + # Fábio Nogueira , 2016. + # ++# #-#-#-#-# pt_BR.po (desktop-icons master) #-#-#-#-# ++# Brazilian Portuguese translation for desktop-icons. ++# Copyright (C) 2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Enrico Nicoletto , 2018. ++# Rafael Fontenelle , 2018-2020. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# pt_BR.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# pt_BR.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -48,6 +57,20 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.2.1\n" ++"#-#-#-#-# pt_BR.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-05-28 18:35-0300\n" ++"Last-Translator: Rafael Fontenelle \n" ++"Language-Team: Brazilian Portuguese \n" ++"Language: pt_BR\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n > 1)\n" ++"X-Generator: Gtranslator 3.36.0\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -88,10 +111,14 @@ msgstr "Adicionar regra" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "Falha ao ejetar a unidade “%s”:" ++msgstr "" ++"#-#-#-#-# pt_BR.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Falha ao ejetar a unidade “%s”:\n" ++"#-#-#-#-# pt_BR.po (desktop-icons master) #-#-#-#-#\n" ++"A ejeção a unidade “%s” falhou:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -150,9 +177,14 @@ msgstr "Falha ao montar volume para “%s”" + msgid "Computer" + msgstr "Computador" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 ++#, fuzzy + msgid "Home" +-msgstr "Pasta pessoal" ++msgstr "" ++"#-#-#-#-# pt_BR.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Pasta pessoal\n" ++"#-#-#-#-# pt_BR.po (desktop-icons master) #-#-#-#-#\n" ++"Home" + + #: extensions/places-menu/placeDisplay.js:404 + msgid "Browse Network" +@@ -781,6 +813,203 @@ msgstr "Mostrar tempo limite [s]" + msgid "Pressure threshold" + msgstr "Limite de pressão" + ++#: desktopGrid.js:359 ++#, fuzzy ++msgid "Display Settings" ++msgstr "" ++"#-#-#-#-# pt_BR.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Configurações de tela\n" ++"#-#-#-#-# pt_BR.po (desktop-icons master) #-#-#-#-#\n" ++"Configurações de exibição" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Tamanho do ícone" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Cancelar" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nome da nova pasta" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Criar" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Nomes de pastas não podem conter “/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Uma pasta não pode ser chamada “.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Uma pasta não pode ser chamada “..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Pastas com “.” no começo de seus nomes são ocultas." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Já existe um arquivo ou uma pasta com esse nome." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Tamanho para os ícones da área de trabalho" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Pequeno" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Padrão" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Grande" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Mostrar a pasta pessoal na área de trabalho" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Mostrar o ícone da lixeira na área de trabalho" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Mostrar as unidades montadas na área de trabalho" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nova pasta" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Novo documento" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Colar" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Desfazer" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Refazer" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Mostrar a área de trabalho no Arquivos" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Abrir no terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Alterar plano de fundo…" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Configurações" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Renomear" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Comando não encontrado" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Não permitir iniciar" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Permitir iniciar" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Abrir" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Abrir com outro aplicativo" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Iniciar usando placa gráfica dedicada" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Recortar" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Copiar" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Renomear…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Mover para a lixeira" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Esvaziar lixeira" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Ejetar" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Propriedades" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Mostrar no Arquivos" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Define o tamanho para os ícones da área de trabalho." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Mostrar pasta pessoal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Mostra a pasta pessoal na área de trabalho." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Mostrar ícone da lixeira" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Mostra o ícone da lixeira na área de trabalho." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Mostrar unidades montadas" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Mostra as unidades montadas na área de trabalho." ++ + #~ msgid "Application" + #~ msgstr "Aplicativo" + +@@ -906,9 +1135,6 @@ msgstr "Limite de pressão" + #~ msgid "Display" + #~ msgstr "Tela" + +-#~ msgid "Display Settings" +-#~ msgstr "Configurações de tela" +- + #~ msgid "The application icon mode." + #~ msgstr "O modo de ícone do aplicativo." + +@@ -943,9 +1169,6 @@ msgstr "Limite de pressão" + #~ "Define a posição do dock na tela. Os valores permitidos são \"right\" ou " + #~ "\"left\"" + +-#~ msgid "Icon size" +-#~ msgstr "Tamanho do ícone" +- + #~ msgid "Sets icon size of the dock." + #~ msgstr "Define o tamanho do ícone do dock." + +@@ -1105,9 +1328,6 @@ msgstr "Limite de pressão" + #~ msgid "Alt Tab Behaviour" + #~ msgstr "Comportamento do Alt Tab" + +-#~ msgid "Cancel" +-#~ msgstr "Cancelar" +- + #~ msgid "Ask the user for a default behaviour if true." + #~ msgstr "Pergunte ao usuário por um comportamento padrão se marcado." + +@@ -1131,3 +1351,15 @@ msgstr "Limite de pressão" + + #~ msgid "Log Out..." + #~ msgstr "Encerrar sessão..." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Insira um nome de arquivo…" ++ ++#~ msgid "OK" ++#~ msgstr "OK" ++ ++#~ msgid "Huge" ++#~ msgstr "Enorme" ++ ++#~ msgid "Ok" ++#~ msgstr "Ok" +diff --git a/po/ro.po b/po/ro.po +index 26edf85e..6378ac71 100644 +--- a/po/ro.po ++++ b/po/ro.po +@@ -1,10 +1,19 @@ ++# #-#-#-#-# ro.po (gnome-shell-extensions master) #-#-#-#-# + # Romanian translation for gnome-shell-extensions. + # Copyright (C) 2014 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. + # Bogdan Mințoi , 2014. + # Daniel Șerbănescu , 2014, 2015, 2018. ++# #-#-#-#-# ro.po (desktop-icons master) #-#-#-#-# ++# Romanian translation for desktop-icons. ++# Copyright (C) 2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Florentina Mușat , 2020. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# ro.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -21,6 +30,21 @@ msgstr "" + "20)) ? 1 : 2);;\n" + "X-Generator: Poedit 2.3\n" + "X-Project-Style: gnome\n" ++"#-#-#-#-# ro.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-06-06 12:24+0300\n" ++"Last-Translator: Florentina Mușat \n" ++"Language-Team: Romanian \n" ++"Language: ro\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " ++"20)) ? 1 : 2);;\n" ++"X-Generator: Poedit 2.3.1\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -61,7 +85,7 @@ msgstr "Adaugă o regulă" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 + #, javascript-format + msgid "Ejecting drive “%s” failed:" + msgstr "Scoaterea unității „%s” a eșuat:" +@@ -124,7 +148,7 @@ msgstr "Eșec la montarea volumului pentru „%s”" + msgid "Computer" + msgstr "Calculator" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Acasă" + +@@ -265,6 +289,198 @@ msgstr "Spațiu de lucru %d" + msgid "Add Workspace" + msgstr "Adaugă un spațiu de lucru" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nume nou de fișier" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Creează" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Anulează" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Numele dosarelor nu pot conține „/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Un dosar nu poate fi numit „.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Un dosar nu poate fi numit „..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Dosarele cu „.” la începutul numelui sunt ascunse." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Există deja un fișier sau doar cu acel nume." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Dimensiunea pentru iconițele desktopului" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Mic" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Mare" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Arată dosarul personal pe desktop" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Arată iconița gunoiului pe desktop" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Arată dispozitivele montate pe desktop" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Dosar nou" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Document nou" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Lipește" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Refă" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Repetă" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Aratată Desktopul în Fișiere" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Deschide în Terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Schimbă fundalul…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Configurări afișaj" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Configurări" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Redenumește" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Comanda nu a fost găsită" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Nu permite lansarea" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Permite lansarea" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Deschide" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Deschide cu altă aplicație" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Lansează folosind placa grafică dedicată" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Taie" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Copiază" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Redenumește…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Mută la gunoi" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Golește gunoiul" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Ejectează" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Proprietăți" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Arată în Fișiere" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Dimensiune iconiță" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Stabilește dimensiunea pentru iconițele desktopului." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Arată dosarul personal" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Arată dosarul personal pe desktop." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Arată iconița gunoiului" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Arată iconița gunoiului pe deskop." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Arată dispozitivele montate" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Arată dispozitivele montate pe desktop." ++ + #~ msgid "Application" + #~ msgstr "Aplicație" + +diff --git a/po/ru.po b/po/ru.po +index de5dbbb5..360d636f 100644 +--- a/po/ru.po ++++ b/po/ru.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# ru.po (gnome-shell-extensions gnome-3-0) #-#-#-#-# ++# #-#-#-#-# ru.po (gnome-shell-extensions gnome-3-0) #-#-#-#-# + # Russian translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -9,10 +10,17 @@ + # Russian translation for dash-to-dock GNOME Shell extension + # Ivan Komaritsyn , 2015-2020. + # ++# #-#-#-#-# ru.po #-#-#-#-# ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# Eaglers , 2018. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# ru.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" ++"#-#-#-#-# ru.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions gnome-3-0\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -41,6 +49,20 @@ msgstr "" + "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" + "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + "X-Generator: Gtranslator 2.91.7\n" ++"#-#-#-#-# ru.po #-#-#-#-#\n" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2020-04-05 21:12+0200\n" ++"PO-Revision-Date: 2020-04-06 22:29+0300\n" ++"Last-Translator: Stas Solovey \n" ++"Language-Team: Russian \n" ++"Language: ru\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ++"X-Generator: Poedit 2.3\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -793,6 +815,174 @@ msgstr "Задержка открытия (сек.)" + msgid "Pressure threshold" + msgstr "Порог давления" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Имя новой папки" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Создать" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Отмена" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Имена папок не могут содержать «/»." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Папка не может быть названа как «.»." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Папка не может быть названа как «..»." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Папки с точкой «.» в начале их имени скрываются." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Файл или папка с таким именем уже существует." ++ ++#: prefs.js:102 ++msgid "Size for the desktop icons" ++msgstr "Размер значков" ++ ++#: prefs.js:102 ++msgid "Small" ++msgstr "Маленький" ++ ++#: prefs.js:102 ++msgid "Standard" ++msgstr "Стандартный" ++ ++#: prefs.js:102 ++msgid "Large" ++msgstr "Большой" ++ ++#: prefs.js:103 ++msgid "Show the personal folder in the desktop" ++msgstr "Показывать домашнюю папку на рабочем столе" ++ ++#: prefs.js:104 ++msgid "Show the trash icon in the desktop" ++msgstr "Показывать «Корзину» на рабочем столе" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "Создать папку" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "Вставить" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "Отменить" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "Повторить" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "Показывать папку «Рабочий стол» в приложении «Файлы»" ++ ++#: desktopGrid.js:350 fileItem.js:651 ++msgid "Open in Terminal" ++msgstr "Открыть в терминале" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "Изменить фон…" ++ ++#: desktopGrid.js:354 ++msgid "Display Settings" ++msgstr "Настройки дисплея" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "Параметры" ++ ++#: desktopGrid.js:653 ++msgid "Rename" ++msgstr "Переименовать" ++ ++#: desktopIconsUtil.js:61 ++msgid "Command not found" ++msgstr "Команда не найдена" ++ ++#: fileItem.js:521 ++msgid "Don’t Allow Launching" ++msgstr "Запретить запуск" ++ ++#: fileItem.js:523 ++msgid "Allow Launching" ++msgstr "Разрешить запуск" ++ ++#: fileItem.js:619 ++msgid "Open" ++msgstr "Открыть" ++ ++#: fileItem.js:623 ++msgid "Open With Other Application" ++msgstr "Открыть в другом приложении" ++ ++#: fileItem.js:627 ++msgid "Cut" ++msgstr "Вырезать" ++ ++#: fileItem.js:628 ++msgid "Copy" ++msgstr "Вставить" ++ ++#: fileItem.js:630 ++msgid "Rename…" ++msgstr "Переименовать…" ++ ++#: fileItem.js:631 ++msgid "Move to Trash" ++msgstr "Переместить в корзину" ++ ++#: fileItem.js:641 ++msgid "Empty Trash" ++msgstr "Очистить корзину" ++ ++#: fileItem.js:647 ++msgid "Properties" ++msgstr "Свойства" ++ ++#: fileItem.js:649 ++msgid "Show in Files" ++msgstr "Показать в «Файлах»" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Размер значков" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Установить размер значков рабочего стола." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Показывать домашнюю папку" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Показывать значок домашней папки на рабочем столе." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Показывать значок корзины" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Показывать значок корзины на рабочем столе." ++ + #~ msgid "Attach modal dialog to the parent window" + #~ msgstr "Прикреплять модальное диалоговое окно к родительскому окну" + +@@ -985,3 +1175,12 @@ msgstr "Порог давления" + + #~ msgid "Shrink the dash size by reducing padding" + #~ msgstr "Уменьшить Док за счёт промежутков" ++ ++#~ msgid "Huge" ++#~ msgstr "Огромный" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Ввести имя файла…" ++ ++#~ msgid "Ok" ++#~ msgstr "ОК" +diff --git a/po/sk.po b/po/sk.po +index e8330d08..4c6c91b4 100644 +--- a/po/sk.po ++++ b/po/sk.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# sk.po (gnome-shell-extensions) #-#-#-#-# ++# #-#-#-#-# sk.po (gnome-shell-extensions) #-#-#-#-# + # Slovak translation for gnome-shell-extensions. + # Copyright (C) 2012-2013 Free Software Foundation, Inc. + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -11,10 +12,17 @@ + # This file is distributed under the same license as the PACKAGE package. + # Dušan Kazik , 2015, 2016. + # ++# #-#-#-#-# sk.po (desktop-icons master) #-#-#-#-# ++# Slovak translation for desktop-icons. ++# Copyright (C) 2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Dušan Kazik , 2020. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# sk.po (gnome-shell-extensions) #-#-#-#-#\n" ++"#-#-#-#-# sk.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -41,6 +49,20 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 1.8.7.1\n" + "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" ++"#-#-#-#-# sk.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-09-05 22:22+0000\n" ++"PO-Revision-Date: 2020-09-06 18:40+0200\n" ++"Language-Team: Slovak \n" ++"Language: sk\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" ++"Last-Translator: Dušan Kazik \n" ++"X-Generator: Poedit 2.4.1\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -83,10 +105,11 @@ msgstr "Pravidlá pracovného priestoru" + msgid "Add Rule" + msgstr "Pridať pravidlo" + ++# #-#-#-#-# sk.po (gnome-shell-extensions) #-#-#-#-# + # https://bugzilla.gnome.org/show_bug.cgi?id=687590 + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 + #, javascript-format + msgid "Ejecting drive “%s” failed:" + msgstr "Zlyhalo vysúvanie jednotky „%s“:" +@@ -154,8 +177,9 @@ msgstr "Zlyhalo pripojenie zväzku pre „%s“" + msgid "Computer" + msgstr "Počítač" + ++# #-#-#-#-# sk.po (gnome-shell-extensions) #-#-#-#-# + # Places +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:927 + msgid "Home" + msgstr "Domov" + +@@ -735,6 +759,198 @@ msgstr "Zobraziť časový limit (s)" + msgid "Pressure threshold" + msgstr "Medza tlaku" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nový názov priečinka" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Vytvoriť" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Zrušiť" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Názvy priečinkov nemôžu obsahovať znak „/“." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Priečinok nemôže byť nazvaný „.“." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Priečinok nemôže byť nazvaný „..“." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Priečinky s názvami začínajúcimi znakom „.“ sú skryté." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Súbor alebo priečinok s týmto názvom už existuje." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Veľkosť ikon pracovnej plochy" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Malé" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Štandardné" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Veľké" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Zobraziť osobný priečinok na pracovnej ploche" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Zobraziť ikonu Koša na pracovnej ploche" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Zobraziť pripojené jednotky na pracovnej ploche" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nový priečinok" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nový dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Vložiť" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Vráti späť" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Opakovať vrátené" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Zobraziť Plochu v aplikácii Súbory" ++ ++#: desktopGrid.js:355 fileItem.js:723 ++msgid "Open in Terminal" ++msgstr "Otvoriť v termináli" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Zmeniť pozadie…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Nastavenia displejov" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Nastavenia" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Premenovanie" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Príkaz sa nenašiel" ++ ++#: fileItem.js:586 ++msgid "Don’t Allow Launching" ++msgstr "Neumožniť spúšťanie" ++ ++#: fileItem.js:588 ++msgid "Allow Launching" ++msgstr "Umožniť spúšťanie" ++ ++#: fileItem.js:684 ++msgid "Open" ++msgstr "Otvorené" ++ ++#: fileItem.js:688 ++msgid "Open With Other Application" ++msgstr "Otvoriť inou aplikáciou" ++ ++#: fileItem.js:690 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Spustiť pomocou vyhradenej grafickej karty" ++ ++#: fileItem.js:695 ++msgid "Cut" ++msgstr "Vystrihnúť" ++ ++#: fileItem.js:696 ++msgid "Copy" ++msgstr "Skopíruje" ++ ++#: fileItem.js:698 ++msgid "Rename…" ++msgstr "Premenovať…" ++ ++#: fileItem.js:699 ++msgid "Move to Trash" ++msgstr "Presunúť do Koša" ++ ++#: fileItem.js:709 ++msgid "Empty Trash" ++msgstr "Vyprázdniť Kôš" ++ ++#: fileItem.js:713 ++msgid "Eject" ++msgstr "Vysunúť" ++ ++#: fileItem.js:719 ++msgid "Properties" ++msgstr "Vlastnosti" ++ ++#: fileItem.js:721 ++msgid "Show in Files" ++msgstr "Zobraziť v aplikácii Súbory" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Veľkosť ikon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Nastaví veľkosť ikon na pracovnej ploche." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Zobraziť osobný priečinok" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Zobrazí osobný priečinok na pracovnej ploche." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Zobraziť ikonu Koša" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Zobrazí ikonu Koša na pracovnej ploche." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Zobraziť pripojené jednotky" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Zobrazí pripojené jednotky na pracovnej ploche." ++ + # TreeViewColumn + #~ msgid "Application" + #~ msgstr "Aplikácia" +diff --git a/po/sl.po b/po/sl.po +index 273c1606..0a3ee8e6 100644 +--- a/po/sl.po ++++ b/po/sl.po +@@ -1,11 +1,21 @@ ++# #-#-#-#-# sl.po (gnome-shell-extension-openweather 1.1) #-#-#-#-# + # Slovenian translation for gnome-shell-extension-openweather. + # Copyright (C) YEAR Jens Lody + # This file is distributed under the same license as the gnome-shell-extension-openweather package. + # + # Matej Urbančič , 2018–2020. + # ++# #-#-#-#-# sl.po (desktop-icons master) #-#-#-#-# ++# Slovenian translations for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the atomix package. ++# ++# Matej Urbančič , + 2018–. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# sl.po (gnome-shell-extension-openweather 1.1) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extension-openweather 1.1\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -20,6 +30,21 @@ msgstr "" + "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100>=3 && n" + "%100<=4 ? 2 : 3);\n" + "X-Generator: Poedit 2.3\n" ++"#-#-#-#-# sl.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-08-28 03:11+0000\n" ++"PO-Revision-Date: 2020-09-03 21:58+0200\n" ++"Last-Translator: \n" ++"Language-Team: Slovenian \n" ++"Language: sl\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" ++"%100==4 ? 3 : 0);\n" ++"X-Generator: Poedit 2.3\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -59,7 +84,7 @@ msgstr "Dodaj pravilo" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 + #, javascript-format + msgid "Ejecting drive “%s” failed:" + msgstr "Izmetavanje pogona »%s« je spodletelo:" +@@ -120,9 +145,14 @@ msgstr "Priklapljanje nosilca za »%s« je spodletelo" + msgid "Computer" + msgstr "Računalnik" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:927 ++#, fuzzy + msgid "Home" +-msgstr "Home" ++msgstr "" ++"#-#-#-#-# sl.po (gnome-shell-extension-openweather 1.1) #-#-#-#-#\n" ++"Home\n" ++"#-#-#-#-# sl.po (desktop-icons master) #-#-#-#-#\n" ++"Na začetek" + + #: extensions/places-menu/placeDisplay.js:404 + msgid "Browse Network" +@@ -259,6 +289,198 @@ msgstr "Delovna površina %d" + msgid "Add Workspace" + msgstr "Dodaj delovno površino" + ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Prekliči" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Ime nove mape" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Ustvari" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Ime mape ne sme vsebovati poševnice » / «." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Mapa ne sme biti poimenovana » . «." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Mapa ne sme biti poimenovana » .. «." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Mape, katerih ime se začne s piko » . «, so skrite mape." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Mapa oziroma datoteka z enakim imenom že obstaja." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Velikost ikon namizja" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Majhne" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Običajne" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Velike" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Pokaži osebno mapo na namizju" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Pokaži smeti na namizju" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Pokaži priklopljene nosilce na namizju" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Nova mapa" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nov dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Prilepi" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Razveljavi" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Ponovno uveljavi" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Odpri Namizje v upravljalniku datotek" ++ ++#: desktopGrid.js:355 fileItem.js:723 ++msgid "Open in Terminal" ++msgstr "Odpri v terminalu" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Spremeni ozadje …" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Nastavitve zaslona" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Nastavitve" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Preimenuj" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Ukaza ni mogoče najti" ++ ++#: fileItem.js:586 ++msgid "Don’t Allow Launching" ++msgstr "Ne dovoli zaganjanja" ++ ++#: fileItem.js:588 ++msgid "Allow Launching" ++msgstr "Dovoli zaganjanje" ++ ++#: fileItem.js:684 ++msgid "Open" ++msgstr "Odpri" ++ ++#: fileItem.js:688 ++msgid "Open With Other Application" ++msgstr "Odpri z drugim programom …" ++ ++#: fileItem.js:690 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Zaženi z uporabo določene grafične kartice" ++ ++#: fileItem.js:695 ++msgid "Cut" ++msgstr "Izreži" ++ ++#: fileItem.js:696 ++msgid "Copy" ++msgstr "Kopiraj" ++ ++#: fileItem.js:698 ++msgid "Rename…" ++msgstr "Preimenuj …" ++ ++#: fileItem.js:699 ++msgid "Move to Trash" ++msgstr "Premakni v smeti" ++ ++#: fileItem.js:709 ++msgid "Empty Trash" ++msgstr "Izprazni smeti" ++ ++#: fileItem.js:713 ++msgid "Eject" ++msgstr "Izvrzi" ++ ++#: fileItem.js:719 ++msgid "Properties" ++msgstr "Lastnosti" ++ ++#: fileItem.js:721 ++msgid "Show in Files" ++msgstr "Pokaži v upravljalniku datotek" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Velikost ikon" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Nastavitev velikosti ikon na namizju." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Pokaži osebno mapo" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Pokaže ikono osebne mape na namizju." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Pokaži ikono smeti" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Pokaže ikono smeti na namizju." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Pokaži priklopljene nosilce" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Pokaži priklopljene nosilce na namizju." ++ + #~ msgid "Application" + #~ msgstr "Program " + +@@ -707,9 +929,6 @@ msgstr "Dodaj delovno površino" + #~ msgid "Extensions default weather provider" + #~ msgstr "Privzeti ponudnik vremenskih podatkov" + +-#~ msgid "Cancel" +-#~ msgstr "Prekliči" +- + #~ msgid "Save" + #~ msgstr "Shrani" + +@@ -915,3 +1134,6 @@ msgstr "Dodaj delovno površino" + + #~ msgid "Your personal AppKey from developer.mapquest.com" + #~ msgstr "Osebni programski ključ developer.mapquest.com" ++ ++#~ msgid "Huge" ++#~ msgstr "Velikanske" +diff --git a/po/sr.po b/po/sr.po +index 92ab6945..d18451a4 100644 +--- a/po/sr.po ++++ b/po/sr.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# sr.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# sr.po (gnome-shell-extensions master) #-#-#-#-# + # Serbian translation for gnome-shell-extensions. + # Courtesy of Prevod.org team (http://prevod.org/) -- 2012—2017. + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -12,10 +13,16 @@ + # This file is distributed under the same license as the PACKAGE package. + # FIRST AUTHOR , YEAR. + # ++# #-#-#-#-# sr.po (desktop-icons master) #-#-#-#-# ++# Serbian translation for desktop-icons. ++# Copyright © 2021 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Мирослав Николић , 2021. + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# sr.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# sr.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -45,6 +52,20 @@ msgstr "" + "X-Generator: Poedit 2.0.3\n" + "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" + "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ++"#-#-#-#-# sr.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2021-01-27 22:42+0000\n" ++"PO-Revision-Date: 2021-02-02 07:23+0200\n" ++"Last-Translator: Мирослав Николић \n" ++"Language-Team: српски \n" ++"Language: sr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" ++"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -85,10 +106,14 @@ msgstr "Додај правило" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "Нисам успео да избацим уређај „%s“:" ++msgstr "" ++"#-#-#-#-# sr.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Нисам успео да избацим уређај „%s“:\n" ++"#-#-#-#-# sr.po (desktop-icons master) #-#-#-#-#\n" ++"Избацивање уређаја „%s“ није успело:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -146,9 +171,14 @@ msgstr "Нисам успео да прикачим волумен за „%s“ + msgid "Computer" + msgstr "Рачунар" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:951 ++#, fuzzy + msgid "Home" +-msgstr "Личнo" ++msgstr "" ++"#-#-#-#-# sr.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Личнo\n" ++"#-#-#-#-# sr.po (desktop-icons master) #-#-#-#-#\n" ++"Полазна" + + #: extensions/places-menu/placeDisplay.js:404 + msgid "Browse Network" +@@ -721,6 +751,198 @@ msgstr "Застој приказивања" + msgid "Pressure threshold" + msgstr "Праг притиска" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Назив нове фасцикле" ++ ++#: createFolderDialog.js:72 ++msgid "Create" ++msgstr "Направи" ++ ++#: createFolderDialog.js:74 ++msgid "Cancel" ++msgstr "Откажи" ++ ++#: createFolderDialog.js:147 ++msgid "Folder names cannot contain “/”." ++msgstr "Називи фасцикли не могу да садрже /." ++ ++#: createFolderDialog.js:150 ++msgid "A folder cannot be called “.”." ++msgstr "Фасцикла се не може звати „.“." ++ ++#: createFolderDialog.js:153 ++msgid "A folder cannot be called “..”." ++msgstr "Фасцикла се не може звати „..“." ++ ++#: createFolderDialog.js:155 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Фасцикле са . на почетку назива су скривене." ++ ++#: createFolderDialog.js:157 ++msgid "There is already a file or folder with that name." ++msgstr "Већ постоји датотека или фасцикла са тим називом." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Величина за иконице радне површи" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Мала" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Обична" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Велика" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Прикажи личну фасциклу на радној површи" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Прикажи иконицу смећа на радној површи" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Прикажи прикачене уређаје на радној површи" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Нова фасцикла" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Нови документ" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Убаци" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Поништи" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Врати" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Прикажи радну површ у датотекама" ++ ++#: desktopGrid.js:355 fileItem.js:726 ++msgid "Open in Terminal" ++msgstr "Отвори у терминалу" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Измени позадину…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Прикажи поставке" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Поставке" ++ ++#: desktopGrid.js:699 ++msgid "Rename" ++msgstr "Преименуј" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Нема такве наредбе" ++ ++#: fileItem.js:589 ++msgid "Don’t Allow Launching" ++msgstr "Не дозволи покретање" ++ ++#: fileItem.js:591 ++msgid "Allow Launching" ++msgstr "Дозволи покретање" ++ ++#: fileItem.js:687 ++msgid "Open" ++msgstr "Отвори" ++ ++#: fileItem.js:691 ++msgid "Open With Other Application" ++msgstr "Отвори другим програмом" ++ ++#: fileItem.js:693 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Покрени користећи намењену графичку картицу" ++ ++#: fileItem.js:698 ++msgid "Cut" ++msgstr "Исеци" ++ ++#: fileItem.js:699 ++msgid "Copy" ++msgstr "Умножи" ++ ++#: fileItem.js:701 ++msgid "Rename…" ++msgstr "Преименуј…" ++ ++#: fileItem.js:702 ++msgid "Move to Trash" ++msgstr "Премести у смеће" ++ ++#: fileItem.js:712 ++msgid "Empty Trash" ++msgstr "Испразни смеће" ++ ++#: fileItem.js:716 ++msgid "Eject" ++msgstr "Избаци" ++ ++#: fileItem.js:722 ++msgid "Properties" ++msgstr "Својства" ++ ++#: fileItem.js:724 ++msgid "Show in Files" ++msgstr "Прикажи у Датотекама" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Величина иконице" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Поставља величину за иконице радне површи." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Приказ личне фасцикле" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Приказује личну фасциклу на радној површи." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Приказ иконице смећа" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Приказује иконицу смећа на радној површи." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Приказ прикачених уређаја" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Приказује прикачене уређаје на радној површи." ++ + #~ msgid "Application" + #~ msgstr "Програм" + +diff --git a/po/sv.po b/po/sv.po +index 2ca88c58..dedabe1b 100644 +--- a/po/sv.po ++++ b/po/sv.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# sv.po (gnome-shell-extensions) #-#-#-#-# ++# #-#-#-#-# sv.po (gnome-shell-extensions) #-#-#-#-# + # Swedish translation for gnome-shell-extensions. + # Copyright © 2011-2021 Free Software Foundation, Inc. + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -13,10 +14,18 @@ + # Anders Jonsson , 2016. + # Morgan Antonsson , 2020. + # ++# #-#-#-#-# sv.po (desktop-icons master) #-#-#-#-# ++# Swedish translation for desktop-icons. ++# Copyright © 2018-2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Anders Jonsson , 2018, 2019, 2020. ++# Josef Andersson , 2019. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# sv.po (gnome-shell-extensions) #-#-#-#-#\n" ++"#-#-#-#-# sv.po (gnome-shell-extensions) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -41,6 +50,20 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.3\n" ++"#-#-#-#-# sv.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-05-27 01:14+0200\n" ++"Last-Translator: Anders Jonsson \n" ++"Language-Team: Swedish \n" ++"Language: sv\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Poedit 2.3.1\n" + + #: data/gnome-classic.desktop.in:3 + msgid "GNOME Classic" +@@ -80,10 +103,14 @@ msgstr "Lägg till regel" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "Utmatning av disk ”%s” misslyckades:" ++msgstr "" ++"#-#-#-#-# sv.po (gnome-shell-extensions) #-#-#-#-#\n" ++"Utmatning av disk ”%s” misslyckades:\n" ++"#-#-#-#-# sv.po (desktop-icons master) #-#-#-#-#\n" ++"Utmatning av enhet ”%s” misslyckades:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -142,7 +169,7 @@ msgstr "Misslyckades med att montera volym för ”%s”" + msgid "Computer" + msgstr "Dator" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Hem" + +@@ -342,7 +369,7 @@ msgstr "%s för Dash to Dock" + msgid "Trash" + msgstr "Papperskorg" + +-#: locations.js:89 ++#: locations.js:89 fileItem.js:707 + msgid "Empty Trash" + msgstr "Töm papperskorgen" + +@@ -350,7 +377,7 @@ msgstr "Töm papperskorgen" + msgid "Mount" + msgstr "Montera" + +-#: locations.js:250 ++#: locations.js:250 fileItem.js:711 + msgid "Eject" + msgstr "Mata ut" + +@@ -803,3 +830,203 @@ msgstr "Tidsgräns för att visa (s)" + #: Settings.ui.h:108 + msgid "Pressure threshold" + msgstr "Tröskelvärde för tryck" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Nytt mappnamn" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Skapa" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Avbryt" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Mappnamn kan inte innehålla ”/”." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "En mapp kan inte kallas ”.”." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "En mapp kan inte kallas ”..”." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Mappar med ”.” i början på sitt namn är dolda." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Det finns redan en fil eller mapp med det namnet." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Storlek för skrivbordsikonerna" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Liten" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standard" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Stor" ++ ++# TODO: *ON* the desktop? ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Visa den personliga mappen på skrivbordet" ++ ++# TODO: *ON* the desktop? ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Visa papperskorgsikonen på skrivbordet" ++ ++# TODO: *ON* the desktop? ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Visa monterade enheter på skrivbordet" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Ny mapp" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Nytt dokument" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Klistra in" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Ångra" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Gör om" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Visa skrivbord i Filer" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Öppna i terminal" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Ändra bakgrund…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Visningsinställningar" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Inställningar" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Byt namn" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Kommandot hittades inte" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Tillåt ej programstart" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Tillåt programstart" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Öppna" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Öppna med annat program" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Kör med diskret grafikkort" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Klipp ut" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopiera" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Byt namn…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Flytta till papperskorgen" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Egenskaper" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Visa i Filer" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Ikonstorlek" ++ ++# TODO: *ON* the desktop? ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Ställ in storleken för skrivbordsikonerna." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Visa personlig mapp" ++ ++# TODO: *ON* the desktop? ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Visa den personliga mappen på skrivbordet." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Visa papperskorgsikon" ++ ++# TODO: *ON* the desktop? ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Visa papperskorgsikonen på skrivbordet." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Visa monterade enheter" ++ ++# TODO: *ON* the desktop? ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Visa monterade enheter på skrivbordet." ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Ange filnamn…" ++ ++#~ msgid "OK" ++#~ msgstr "OK" ++ ++#~ msgid "Huge" ++#~ msgstr "Enorm" +diff --git a/po/tr.po b/po/tr.po +index 38bbc7b6..3870d35e 100644 +--- a/po/tr.po ++++ b/po/tr.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# tr.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# tr.po (gnome-shell-extensions master) #-#-#-#-# + # Turkish translation for gnome-shell-extensions. + # Copyright (C) 2012-2019 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -23,10 +24,20 @@ + # Note for all turkish translators: + # Lütfen GNOME Shell çevirileri ile uyumlu çevirmeye gayret edelim. + # ++# #-#-#-#-# tr.po #-#-#-#-# ++# Turkish translation for desktop-icons. ++# Copyright (C) 2000-2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# ++# Sabri Ünal , 2019. ++# Serdar Sağlam , 2019 ++# Emin Tufan Çetin , 2019, 2020. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# tr.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# tr.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -53,6 +64,20 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Generator: Poedit 2.0.6\n" ++"#-#-#-#-# tr.po #-#-#-#-#\n" ++"Project-Id-Version: \n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-09-06 01:02+0300\n" ++"Last-Translator: Emin Tufan Çetin \n" ++"Language-Team: Türkçe \n" ++"Language: tr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.0.6\n" ++"Plural-Forms: nplurals=1; plural=0;\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -92,7 +117,7 @@ msgstr "Kural Ekle" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 + #, javascript-format + msgid "Ejecting drive “%s” failed:" + msgstr "“%s” sürücüsü çıkarılamadı:" +@@ -155,9 +180,14 @@ msgstr "“%s” için birim bağlanamadı" + msgid "Computer" + msgstr "Bilgisayar" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 ++#, fuzzy + msgid "Home" +-msgstr "Başlangıç" ++msgstr "" ++"#-#-#-#-# tr.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Başlangıç\n" ++"#-#-#-#-# tr.po #-#-#-#-#\n" ++"Ev" + + #: extensions/places-menu/placeDisplay.js:404 + msgid "Browse Network" +@@ -815,6 +845,198 @@ msgstr "Gösterim zaman aşımı (s)" + msgid "Pressure threshold" + msgstr "Etki eşiği" + ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Yeni klasör adı" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Oluştur" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "İptal" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Klasör adları “/” içeremez." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Klasör “.” olarak adlandırılamaz." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Klasör “..” olarak adlandırılamaz." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Adının başında “.” bulunan klasörler gizlenir." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Bu adda dosya veya klasör var." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Masaüstü simgeleri boyutu" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Küçük" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Standart" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Büyük" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Kişisel klasörü masaüstünde göster" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Çöp kutusunu masaüstünde göster" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Bağlı sürücüleri masaüstünde göster" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Yeni Klasör" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Yeni Belge" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Yapıştır" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Geri Al" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Yinele" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Masaüstünü Dosyalarʼda Göster" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Uçbirimde Aç" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Arka Planı Değiştir…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Görüntü Ayarları" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Ayarlar" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Yeniden Adlandır" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Komut bulunamadı" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Başlatmaya İzin Verme" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Başlatmaya İzin Ver" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Aç" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Başka Uygulamayla Aç" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Ayrık Ekran Kartıyla Başlat" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Kes" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Kopyala" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Yeniden Adlandır…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Çöpe Taşı" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Çöpü Boşalt" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Çıkar" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Özellikler" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Dosyalarʼda Göster" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "Simge boyutu" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Masaüstü simgelerinin boyutunu ayarla." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Kişisel klasörü göster" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Kişisel klasörü masaüstünde göster." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Çöp kutusunu göster" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Çöp kutusu simgesini masaüstünde göster." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Bağlı sürücüleri göster" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Bağlı sürücüleri masaüstünde göster." ++ + #~ msgid "Application" + #~ msgstr "Uygulama" + +@@ -903,3 +1125,9 @@ msgstr "Etki eşiği" + + #~ msgid "Adaptive" + #~ msgstr "Uyarlanır" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "Dosya adını gir…" ++ ++#~ msgid "OK" ++#~ msgstr "Tamam" +diff --git a/po/uk.po b/po/uk.po +index f0b08466..a73dceec 100644 +--- a/po/uk.po ++++ b/po/uk.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# uk.po (gnome-shell-extensions master) #-#-#-#-# + # Ukrainian translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -5,11 +6,19 @@ + # Daniel Korostil , 2013, 2014, 2015, 2017. + # vikaig , 2019. + # Yuri Chornoivan , 2020. ++# #-#-#-#-# uk.po (desktop-icons master) #-#-#-#-# ++# Ukrainian translation for desktop-icons. ++# Copyright (C) 2020 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# ++# Yuri Chornoivan , 2020. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# uk.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" +-"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/is" +-"sues\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" ++"issues\n" + "POT-Creation-Date: 2020-05-03 17:53+0000\n" + "PO-Revision-Date: 2020-05-03 22:19+0300\n" + "Last-Translator: Yuri Chornoivan \n" +@@ -18,10 +27,25 @@ msgstr "" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<" +-"=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + "X-Generator: Lokalize 20.07.70\n" + "X-Project-Style: gnome\n" ++"#-#-#-#-# uk.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-05-27 11:46+0300\n" ++"Last-Translator: Yuri Chornoivan \n" ++"Language-Team: Ukrainian \n" ++"Language: uk\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" ++"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" ++"X-Generator: Lokalize 20.07.70\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -62,10 +86,14 @@ msgstr "Додати правило" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "Не вдалося витягнути пристрій «%s»:" ++msgstr "" ++"#-#-#-#-# uk.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Не вдалося витягнути пристрій «%s»:\n" ++"#-#-#-#-# uk.po (desktop-icons master) #-#-#-#-#\n" ++"Не вдалося виштовхнути пристрій «%s»:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -124,7 +152,7 @@ msgstr "Не вдалося змонтувати том до «%s»" + msgid "Computer" + msgstr "Комп'ютер" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "Домівка" + +@@ -263,6 +291,203 @@ msgstr "Робочий простір %d" + msgid "Add Workspace" + msgstr "Додати робочий простір" + ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "Скасувати" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++#, fuzzy ++msgid "Icon size" ++msgstr "" ++"#-#-#-#-# uk.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"Розмір піктограми\n" ++"#-#-#-#-# uk.po (desktop-icons master) #-#-#-#-#\n" ++"Розмір піктограм" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "Назва нової теки" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "Створити" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "Назви теки не можуть містити «/»." ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "Теку не можна називати як «.»." ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "Теку не можна називати як «..»." ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "Теки, назви яких починаються із символу «.», є прихованими." ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "Файл або тека із такою назвою вже існують." ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "Розмір піктограм на стільниці" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "Малий" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "Стандартний" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "Великий" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "Показувати особисту теку на стільниці" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "Показувати піктограму смітника на стільниці" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "Показувати змонтовані диски на стільниці" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "Нова тека" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "Новий документ" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "Вставити" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "Скасувати" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "Повторити" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "Показувати «Стільницю» у «Файлах»" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "Відкрити у терміналі" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "Змінити тло…" ++ ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "Параметри екрана" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "Параметри" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "Перейменувати" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "Команди не знайдено" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "Не дозволяти запуск" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "Дозволяти запуск" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "Відкрити" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "Відкрити за допомогою іншої програми" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "Запустити через відповідну графічну плату" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "Вирізати" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "Копіювати" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "Перейменувати…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "Пересунути до смітника" ++ ++#: fileItem.js:707 ++msgid "Empty Trash" ++msgstr "Спорожнити смітник" ++ ++#: fileItem.js:711 ++msgid "Eject" ++msgstr "Виштовхнути" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "Властивості" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "Показувати у «Файлах»" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "Встановити розмір піктограм на стільниці." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "Показувати особисту теку" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "Показувати особисту теку на стільниці." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "Показувати піктограму смітника" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "Показувати піктограму смітника на стільниці." ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "Показувати змонтовані диски" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "Показувати змонтовані диски на стільниці." ++ + #~ msgid "Application" + #~ msgstr "Програма" + +@@ -436,9 +661,6 @@ msgstr "Додати робочий простір" + #~ msgid "Alt Tab Behaviour" + #~ msgstr "Режим Alt Tab" + +-#~ msgid "Cancel" +-#~ msgstr "Скасувати" +- + #~ msgid "Ask the user for a default behaviour if true." + #~ msgstr "Якщо вибрано, запитувати користувача про типову поведінку." + +@@ -473,9 +695,6 @@ msgstr "Додати робочий простір" + #~ msgid "Enable/disable autohide" + #~ msgstr "Увімкнути/вимкнути автоматичне приховування" + +-#~ msgid "Icon size" +-#~ msgstr "Розмір піктограми" +- + #~ msgid "Position of the dock" + #~ msgstr "Розташування панелі" + +diff --git a/po/zh_CN.po b/po/zh_CN.po +index 338e86ed..69e6fcbf 100644 +--- a/po/zh_CN.po ++++ b/po/zh_CN.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# zh_CN.po (gnome-shell-extensions master) #-#-#-#-# ++# #-#-#-#-# zh_CN.po (gnome-shell-extensions master) #-#-#-#-# + # Chinese (China) translation for gnome-shell-extensions. + # Copyright (C) 2011-2019 gnome-shell-extensions's authors and contributors + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -17,10 +18,17 @@ + # 绿色圣光 , 2015, 2016, 2017. + # zhmars <1403122061@qq.com>, 2019, 2020. + # ++# #-#-#-#-# zh_CN.po (desktop-icons master) #-#-#-#-# ++# Chinese (China) translation for desktop-icons. ++# Copyright (C) 2019 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Dingzhong Chen , 2019. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# zh_CN.po (gnome-shell-extensions master) #-#-#-#-#\n" ++"#-#-#-#-# zh_CN.po (gnome-shell-extensions master) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -47,6 +55,20 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Gtranslator 2.91.7\n" + "Plural-Forms: nplurals=1; plural=0;\n" ++"#-#-#-#-# zh_CN.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-26 20:08+0000\n" ++"PO-Revision-Date: 2020-06-23 21:51-0400\n" ++"Last-Translator: Boyuan Yang <073plan@gmail.com>\n" ++"Language-Team: Chinese (China) \n" ++"Language: zh_CN\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3.1\n" ++"Plural-Forms: nplurals=1; plural=0;\n" + + #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 + msgid "GNOME Classic" +@@ -85,7 +107,7 @@ msgstr "添加规则" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 + #, javascript-format + msgid "Ejecting drive “%s” failed:" + msgstr "弹出驱动器“%s”失败:" +@@ -144,7 +166,7 @@ msgstr "无法为“%s”挂载卷" + msgid "Computer" + msgstr "计算机" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:925 + msgid "Home" + msgstr "主文件夹" + +@@ -346,7 +368,7 @@ msgstr "Dash to Dock %s" + msgid "Trash" + msgstr "回收站" + +-#: locations.js:74 ++#: locations.js:74 fileItem.js:707 + msgid "Empty Trash" + msgstr "清空回收站" + +@@ -354,7 +376,7 @@ msgstr "清空回收站" + msgid "Mount" + msgstr "挂载" + +-#: locations.js:232 ++#: locations.js:232 fileItem.js:711 + msgid "Eject" + msgstr "弹出" + +@@ -798,6 +820,190 @@ msgstr "显示超时时间(秒)" + msgid "Pressure threshold" + msgstr "压力阈值" + ++#: desktopGrid.js:359 ++msgid "Display Settings" ++msgstr "显示设置" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "图标大小" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "取消" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "新文件夹名称" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "创建" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "文件夹名称不能包含“/”。" ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "文件夹不能命名为“.”。" ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "文件夹不能命名为“..”。" ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "名称以“.”开头的文件夹将被隐藏。" ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "相同名称的文件夹已存在。" ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "桌面图标大小" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "小" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "标准" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "大" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "在桌面上显示个人文件夹" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "在桌面上显示回收站图标" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "在桌面上显示已挂载的驱动器" ++ ++#: desktopGrid.js:346 ++msgid "New Folder" ++msgstr "新建文件夹" ++ ++#: desktopGrid.js:347 ++msgid "New Document" ++msgstr "新建文档" ++ ++#: desktopGrid.js:350 ++msgid "Paste" ++msgstr "粘贴" ++ ++#: desktopGrid.js:351 ++msgid "Undo" ++msgstr "撤消" ++ ++#: desktopGrid.js:352 ++msgid "Redo" ++msgstr "恢复" ++ ++#: desktopGrid.js:354 ++msgid "Show Desktop in Files" ++msgstr "在文件管理器中显示桌面" ++ ++#: desktopGrid.js:355 fileItem.js:721 ++msgid "Open in Terminal" ++msgstr "在终端中打开" ++ ++#: desktopGrid.js:357 ++msgid "Change Background…" ++msgstr "更换壁纸…" ++ ++#: desktopGrid.js:360 ++msgid "Settings" ++msgstr "设置" ++ ++#: desktopGrid.js:692 ++msgid "Rename" ++msgstr "重命名" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "命令未找到" ++ ++#: fileItem.js:584 ++msgid "Don’t Allow Launching" ++msgstr "不允许启动" ++ ++#: fileItem.js:586 ++msgid "Allow Launching" ++msgstr "允许启动" ++ ++#: fileItem.js:682 ++msgid "Open" ++msgstr "打开" ++ ++#: fileItem.js:686 ++msgid "Open With Other Application" ++msgstr "用其他应用程序打开" ++ ++#: fileItem.js:688 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "使用独立显卡启动" ++ ++#: fileItem.js:693 ++msgid "Cut" ++msgstr "剪除" ++ ++#: fileItem.js:694 ++msgid "Copy" ++msgstr "复制" ++ ++#: fileItem.js:696 ++msgid "Rename…" ++msgstr "重命名…" ++ ++#: fileItem.js:697 ++msgid "Move to Trash" ++msgstr "移到回收站" ++ ++#: fileItem.js:717 ++msgid "Properties" ++msgstr "属性" ++ ++#: fileItem.js:719 ++msgid "Show in Files" ++msgstr "在文件管理器中显示" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "设定桌面图标的大小。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "显示个人文件夹" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "在桌面上显示个人文件夹。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "显示回收站图标" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "在桌面上显示回收站图标。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "显示已挂载的驱动器" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "在桌面上显示已挂载的驱动器。" ++ + #~ msgid "Application" + #~ msgstr "应用程序" + +@@ -914,9 +1120,6 @@ msgstr "压力阈值" + #~ msgid "Display" + #~ msgstr "显示" + +-#~ msgid "Display Settings" +-#~ msgstr "显示设置" +- + #~ msgid "The application icon mode." + #~ msgstr "应用程序图标模式。" + +@@ -948,9 +1151,6 @@ msgstr "压力阈值" + #~ "or 'left'" + #~ msgstr "设置 Dock 在屏幕上的位置。允许的值有“右”或“左”。" + +-#~ msgid "Icon size" +-#~ msgstr "图标大小" +- + #~ msgid "Sets icon size of the dock." + #~ msgstr "设置 Dock 上的图标大小。" + +@@ -1069,9 +1269,6 @@ msgstr "压力阈值" + #~ msgid "Alt Tab Behaviour" + #~ msgstr "Alt Tab 行为" + +-#~ msgid "Cancel" +-#~ msgstr "取消" +- + #~ msgid "Ask the user for a default behaviour if true." + #~ msgstr "如果设置为 true,询问用户设置一个默认行为。" + +@@ -1180,3 +1377,9 @@ msgstr "压力阈值" + + #~ msgid "Only when in autohide" + #~ msgstr "仅当自动隐藏时" ++ ++#~ msgid "Enter file name…" ++#~ msgstr "输入文件名…" ++ ++#~ msgid "OK" ++#~ msgstr "确定" +diff --git a/po/zh_TW.po b/po/zh_TW.po +index 14e60ccb..4bdf7154 100644 +--- a/po/zh_TW.po ++++ b/po/zh_TW.po +@@ -1,4 +1,5 @@ + # #-#-#-#-# zh_TW.po (gnome-shell-extensions gnome-3-0) #-#-#-#-# ++# #-#-#-#-# zh_TW.po (gnome-shell-extensions gnome-3-0) #-#-#-#-# + # Chinese (Taiwan) translation for gnome-shell-extensions. + # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-shell-extensions package. +@@ -11,10 +12,17 @@ + # This file is distributed under the same license as the dash-to-dock package. + # Cheng-Chia Tseng , 2017 + # ++# #-#-#-#-# zh_TW.po (desktop-icons master) #-#-#-#-# ++# Chinese (Taiwan) translation for desktop-icons. ++# Copyright (C) 2018 desktop-icons's COPYRIGHT HOLDER ++# This file is distributed under the same license as the desktop-icons package. ++# Yi-Jyun Pan , 2018. ++# + #, fuzzy + msgid "" + msgstr "" + "#-#-#-#-# zh_TW.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" ++"#-#-#-#-# zh_TW.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" + "Project-Id-Version: gnome-shell-extensions gnome-3-0\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" + "issues\n" +@@ -41,6 +49,19 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: Poedit 2.3.1\n" + "Plural-Forms: nplurals=1; plural=0;\n" ++"#-#-#-#-# zh_TW.po (desktop-icons master) #-#-#-#-#\n" ++"Project-Id-Version: desktop-icons master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/ShellExtensions/desktop-" ++"icons/issues\n" ++"POT-Creation-Date: 2020-05-14 18:46+0000\n" ++"PO-Revision-Date: 2020-05-25 01:21+0800\n" ++"Last-Translator: Yi-Jyun Pan \n" ++"Language-Team: Chinese (Taiwan) \n" ++"Language: zh_TW\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 2.3.1\n" + + #: data/gnome-classic.desktop.in:3 + msgid "GNOME Classic" +@@ -80,10 +101,14 @@ msgstr "加入規則" + + #. TRANSLATORS: %s is the filesystem name + #: extensions/drive-menu/extension.js:112 +-#: extensions/places-menu/placeDisplay.js:233 +-#, javascript-format ++#: extensions/places-menu/placeDisplay.js:233 desktopIconsUtil.js:162 ++#, fuzzy, javascript-format + msgid "Ejecting drive “%s” failed:" +-msgstr "裝置「%s」退出失敗:" ++msgstr "" ++"#-#-#-#-# zh_TW.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" ++"裝置「%s」退出失敗:\n" ++"#-#-#-#-# zh_TW.po (desktop-icons master) #-#-#-#-#\n" ++"退出「%s」裝置失敗:" + + #: extensions/drive-menu/extension.js:128 + msgid "Removable devices" +@@ -139,9 +164,14 @@ msgstr "無法掛載儲存區「%s」" + msgid "Computer" + msgstr "電腦" + +-#: extensions/places-menu/placeDisplay.js:359 ++#: extensions/places-menu/placeDisplay.js:359 fileItem.js:906 ++#, fuzzy + msgid "Home" +-msgstr "家目錄" ++msgstr "" ++"#-#-#-#-# zh_TW.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" ++"家目錄\n" ++"#-#-#-#-# zh_TW.po (desktop-icons master) #-#-#-#-#\n" ++"首頁" + + #: extensions/places-menu/placeDisplay.js:404 + msgid "Browse Network" +@@ -345,7 +375,7 @@ msgstr "Dash to Dock %s" + msgid "Trash" + msgstr "垃圾桶" + +-#: locations.js:74 ++#: locations.js:74 fileItem.js:688 + msgid "Empty Trash" + msgstr "清空垃圾桶" + +@@ -353,7 +383,7 @@ msgstr "清空垃圾桶" + msgid "Mount" + msgstr "掛載" + +-#: locations.js:235 ++#: locations.js:235 fileItem.js:692 + msgid "Eject" + msgstr "退出" + +@@ -795,6 +825,191 @@ msgstr "顯示等候秒數" + msgid "Pressure threshold" + msgstr "壓力閾值" + ++#: desktopGrid.js:354 ++#, fuzzy ++msgid "Display Settings" ++msgstr "" ++"#-#-#-#-# zh_TW.po (gnome-shell-extensions gnome-3-0) #-#-#-#-#\n" ++"顯示設定值\n" ++"#-#-#-#-# zh_TW.po (desktop-icons master) #-#-#-#-#\n" ++"顯示設定" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 ++msgid "Icon size" ++msgstr "圖示大小" ++ ++#: createFolderDialog.js:72 ++msgid "Cancel" ++msgstr "取消" ++ ++#: createFolderDialog.js:46 ++msgid "New folder name" ++msgstr "新資料夾名稱" ++ ++#: createFolderDialog.js:70 ++msgid "Create" ++msgstr "建立" ++ ++#: createFolderDialog.js:145 ++msgid "Folder names cannot contain “/”." ++msgstr "資料夾名稱不能有「/」。" ++ ++#: createFolderDialog.js:148 ++msgid "A folder cannot be called “.”." ++msgstr "資料夾的名稱不能是「.」。" ++ ++#: createFolderDialog.js:151 ++msgid "A folder cannot be called “..”." ++msgstr "資料夾的名稱不能是「..」。" ++ ++#: createFolderDialog.js:153 ++msgid "Folders with “.” at the beginning of their name are hidden." ++msgstr "會隱藏名稱開頭是「.」的資料夾。" ++ ++#: createFolderDialog.js:155 ++msgid "There is already a file or folder with that name." ++msgstr "已經有同名的檔案或資料夾。" ++ ++#: prefs.js:103 ++msgid "Size for the desktop icons" ++msgstr "桌面圖示的大小" ++ ++#: prefs.js:103 ++msgid "Small" ++msgstr "小圖示" ++ ++#: prefs.js:103 ++msgid "Standard" ++msgstr "標準大小圖示" ++ ++#: prefs.js:103 ++msgid "Large" ++msgstr "大圖示" ++ ++#: prefs.js:104 ++msgid "Show the personal folder in the desktop" ++msgstr "在桌面顯示個人資料夾" ++ ++#: prefs.js:105 ++msgid "Show the trash icon in the desktop" ++msgstr "在桌面顯示垃圾桶圖示" ++ ++#: prefs.js:106 ++msgid "Show mounted drives in the desktop" ++msgstr "在桌面顯示掛載裝置" ++ ++#: desktopGrid.js:343 ++msgid "New Folder" ++msgstr "新增資料夾" ++ ++#: desktopGrid.js:345 ++msgid "Paste" ++msgstr "貼上" ++ ++#: desktopGrid.js:346 ++msgid "Undo" ++msgstr "復原" ++ ++#: desktopGrid.js:347 ++msgid "Redo" ++msgstr "重做" ++ ++#: desktopGrid.js:349 ++msgid "Show Desktop in Files" ++msgstr "在《檔案》中顯示桌面" ++ ++#: desktopGrid.js:350 fileItem.js:702 ++msgid "Open in Terminal" ++msgstr "在終端器開啟" ++ ++#: desktopGrid.js:352 ++msgid "Change Background…" ++msgstr "變更背景圖片…" ++ ++#: desktopGrid.js:355 ++msgid "Settings" ++msgstr "設定" ++ ++#: desktopGrid.js:653 ++msgid "Rename" ++msgstr "重新命名" ++ ++#: desktopIconsUtil.js:63 ++msgid "Command not found" ++msgstr "找不到命令" ++ ++#: fileItem.js:565 ++msgid "Don’t Allow Launching" ++msgstr "不允許啟動" ++ ++#: fileItem.js:567 ++msgid "Allow Launching" ++msgstr "允許啟動" ++ ++#: fileItem.js:663 ++msgid "Open" ++msgstr "開啟" ++ ++#: fileItem.js:667 ++msgid "Open With Other Application" ++msgstr "以其他應用程式開啟" ++ ++#: fileItem.js:669 ++msgid "Launch using Dedicated Graphics Card" ++msgstr "使用獨立圖形卡啟動" ++ ++#: fileItem.js:674 ++msgid "Cut" ++msgstr "剪下" ++ ++#: fileItem.js:675 ++msgid "Copy" ++msgstr "複製" ++ ++#: fileItem.js:677 ++msgid "Rename…" ++msgstr "重新命名…" ++ ++#: fileItem.js:678 ++msgid "Move to Trash" ++msgstr "移動到垃圾桶" ++ ++#: fileItem.js:698 ++msgid "Properties" ++msgstr "屬性" ++ ++#: fileItem.js:700 ++msgid "Show in Files" ++msgstr "在《檔案》中顯示" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:12 ++msgid "Set the size for the desktop icons." ++msgstr "設定桌面圖示的大小。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:16 ++msgid "Show personal folder" ++msgstr "顯示個人資料夾" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:17 ++msgid "Show the personal folder in the desktop." ++msgstr "在桌面顯示個人資料夾。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:21 ++msgid "Show trash icon" ++msgstr "顯示垃圾桶圖示" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:22 ++msgid "Show the trash icon in the desktop." ++msgstr "在桌面顯示垃圾桶圖示。" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:26 ++msgid "Show mounted drives" ++msgstr "顯示掛載裝置" ++ ++#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:27 ++msgid "Show mounted drives in the desktop." ++msgstr "在桌面顯示掛載裝置。" ++ + #~ msgid "Application" + #~ msgstr "應用程式" + +@@ -896,9 +1111,6 @@ msgstr "壓力閾值" + #~ msgid "Display" + #~ msgstr "顯示" + +-#~ msgid "Display Settings" +-#~ msgstr "顯示設定值" +- + #~ msgid "Suspend" + #~ msgstr "暫停" + +@@ -1006,9 +1218,6 @@ msgstr "壓力閾值" + #~ msgid "Enable/disable autohide" + #~ msgstr "啟用/停用自動隱藏" + +-#~ msgid "Icon size" +-#~ msgstr "圖示大小" +- + #~ msgid "Position of the dock" + #~ msgstr "Dock 的位置" + +@@ -1105,9 +1314,6 @@ msgstr "壓力閾值" + #~ msgid "Alt Tab Behaviour" + #~ msgstr "Alt Tab 行為" + +-#~ msgid "Cancel" +-#~ msgstr "取消" +- + #~ msgid "Ask the user for a default behaviour if true." + #~ msgstr "若為真,詢問使用者預設行為。" + +@@ -1139,3 +1345,6 @@ msgstr "壓力閾值" + + #~ msgid "0.000" + #~ msgstr "0.000" ++ ++#~ msgid "Huge" ++#~ msgstr "巨大圖示" +-- +2.38.1 + + +From 794dd76a7b7caf3324736de6c26bb992fe403daf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 2 Dec 2021 19:39:50 +0100 +Subject: [PATCH 6/7] Add classification-banner + +--- + extensions/classification-banner/adwShim.js | 202 ++++++++++++++++++ + extensions/classification-banner/extension.js | 169 +++++++++++++++ + extensions/classification-banner/meson.build | 8 + + .../classification-banner/metadata.json.in | 11 + + ...tensions.classification-banner.gschema.xml | 29 +++ + extensions/classification-banner/prefs.js | 197 +++++++++++++++++ + .../classification-banner/stylesheet.css | 3 + + meson.build | 1 + + 8 files changed, 620 insertions(+) + create mode 100644 extensions/classification-banner/adwShim.js + create mode 100644 extensions/classification-banner/extension.js + create mode 100644 extensions/classification-banner/meson.build + create mode 100644 extensions/classification-banner/metadata.json.in + create mode 100644 extensions/classification-banner/org.gnome.shell.extensions.classification-banner.gschema.xml + create mode 100644 extensions/classification-banner/prefs.js + create mode 100644 extensions/classification-banner/stylesheet.css + +diff --git a/extensions/classification-banner/adwShim.js b/extensions/classification-banner/adwShim.js +new file mode 100644 +index 00000000..46a8afca +--- /dev/null ++++ b/extensions/classification-banner/adwShim.js +@@ -0,0 +1,202 @@ ++/* exported init PreferencesPage PreferencesGroup ActionRow ComboRow */ ++const { Gio, GObject, Gtk } = imports.gi; ++ ++function init() { ++} ++ ++var PreferencesGroup = GObject.registerClass( ++class PreferencesGroup extends Gtk.Widget { ++ _init(params) { ++ super._init({ ++ ...params, ++ layout_manager: new Gtk.BinLayout(), ++ }); ++ ++ this._listBox = new Gtk.ListBox({ ++ css_classes: ['rich-list'], ++ show_separators: true, ++ selection_mode: Gtk.SelectionMode.NONE, ++ }); ++ ++ const frame = new Gtk.Frame({ child: this._listBox }); ++ frame.set_parent(this); ++ } ++ ++ add(child) { ++ this._listBox.append(child); ++ } ++}); ++ ++var PreferencesPage = GObject.registerClass( ++class PreferencesPage extends Gtk.Widget { ++ _init(params) { ++ super._init({ ++ ...params, ++ layout_manager: new Gtk.BinLayout(), ++ }); ++ ++ const scrolledWindow = new Gtk.ScrolledWindow({ ++ hscrollbar_policy: Gtk.PolicyType.NEVER, ++ }); ++ scrolledWindow.set_parent(this); ++ ++ this._box = new Gtk.Box({ ++ orientation: Gtk.Orientation.VERTICAL, ++ halign: Gtk.Align.CENTER, ++ spacing: 24, ++ margin_top: 24, ++ margin_bottom: 24, ++ margin_start: 12, ++ margin_end: 12, ++ }); ++ scrolledWindow.set_child(this._box); ++ ++ const provider = new Gtk.CssProvider(); ++ provider.load_from_data('* { min-width: 500px; }'); ++ this._box.get_style_context().add_provider(provider, ++ Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); ++ } ++ ++ add(child) { ++ this._box.append(child); ++ } ++}); ++ ++var ActionRow = GObject.registerClass({ ++ Properties: { ++ 'activatable-widget': GObject.ParamSpec.object( ++ 'activatable-widget', 'activatable-widget', 'activatable-widget', ++ GObject.ParamFlags.READWRITE, ++ Gtk.Widget), ++ 'title': GObject.ParamSpec.string( ++ 'title', 'title', 'title', ++ GObject.ParamFlags.READWRITE, ++ null), ++ }, ++}, class ActionRow extends Gtk.ListBoxRow { ++ _init(params) { ++ super._init(params); ++ ++ const box = new Gtk.Box({ ++ spacing: 12, ++ }); ++ this.set_child(box); ++ ++ this._prefixes = new Gtk.Box({ ++ spacing: 12, ++ visible: false, ++ }); ++ box.append(this._prefixes); ++ ++ this._title = new Gtk.Label({ ++ css_classes: ['title'], ++ hexpand: true, ++ xalign: 0, ++ }); ++ box.append(this._title); ++ ++ this._suffixes = new Gtk.Box({ ++ spacing: 12, ++ visible: false, ++ }); ++ box.append(this._suffixes); ++ ++ this.bind_property('title', ++ this._title, 'label', ++ GObject.BindingFlags.SYNC_CREATE); ++ ++ this.connect('notify::parent', () => { ++ const parent = this.get_parent(); ++ parent?.connect('row-activated', (list, row) => { ++ if (row === this) ++ this.activate(); ++ }); ++ }); ++ } ++ ++ vfunc_activate() { ++ this.activatable_widget?.mnemonic_activate(false); ++ } ++ ++ activate() { ++ this.vfunc_activate(); ++ } ++ ++ add_prefix(child) { ++ this._prefixes.append(child); ++ this._prefixes.show(); ++ } ++ ++ add_suffix(child) { ++ this._suffixes.append(child); ++ this._suffixes.show(); ++ } ++}); ++ ++var ComboRow = GObject.registerClass({ ++ Properties: { ++ 'selected-item': GObject.ParamSpec.object( ++ 'selected-item', 'selected-item', 'selected-item', ++ GObject.ParamFlags.READABLE, ++ GObject.Object), ++ 'model': GObject.ParamSpec.object( ++ 'model', 'model', 'model', ++ GObject.ParamFlags.READWRITE, ++ Gio.ListModel), ++ 'list-factory': GObject.ParamSpec.object( ++ 'list-factory', 'list-factory', 'list-factory', ++ GObject.ParamFlags.READWRITE, ++ Gtk.ListItemFactory), ++ 'expression': Gtk.param_spec_expression( ++ 'expression', 'expression', 'expression', ++ GObject.ParamFlags.READWRITE), ++ }, ++}, class ComboRow extends ActionRow { ++ _init(params) { ++ super._init({ ++ ...params, ++ activatable: true, ++ }); ++ ++ const box = new Gtk.Box({ ++ valign: Gtk.Align.CENTER, ++ }); ++ box.append(new Gtk.Image({ ++ icon_name: 'pan-down-symbolic', ++ })); ++ this.add_suffix(box); ++ ++ this._popover = new Gtk.Popover(); ++ this._popover.set_parent(box); ++ ++ this._selection = new Gtk.SingleSelection(); ++ this._selected = -1; ++ ++ this._listView = new Gtk.ListView({ ++ model: this._selection, ++ single_click_activate: true, ++ }); ++ this._popover.set_child(this._listView); ++ ++ this._listView.connect('activate', (view, pos) => { ++ this._selected = pos; ++ this.notify('selected-item'); ++ this._popover.popdown(); ++ }); ++ ++ this.bind_property('model', ++ this._selection, 'model', ++ GObject.BindingFlags.SYNC_CREATE); ++ this.bind_property('list-factory', ++ this._listView, 'factory', ++ GObject.BindingFlags.SYNC_CREATE); ++ } ++ ++ get selected_item() { ++ return this._selection.selected_item; ++ } ++ ++ vfunc_activate() { ++ this._popover.popup(); ++ } ++}); +diff --git a/extensions/classification-banner/extension.js b/extensions/classification-banner/extension.js +new file mode 100644 +index 00000000..cc046e01 +--- /dev/null ++++ b/extensions/classification-banner/extension.js +@@ -0,0 +1,169 @@ ++/* extension.js ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ * ++ * SPDX-License-Identifier: GPL-2.0-or-later ++ */ ++ ++/* exported init */ ++ ++const { Clutter, Gio, GLib, GObject, St } = imports.gi; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Layout = imports.ui.layout; ++const Main = imports.ui.main; ++ ++const ClassificationBanner = GObject.registerClass( ++class ClassificationBanner extends Clutter.Actor { ++ _init(index) { ++ super._init({ ++ layout_manager: new Clutter.BinLayout(), ++ constraints: new Layout.MonitorConstraint({ ++ work_area: true, ++ index, ++ }), ++ }); ++ ++ this._settings = ExtensionUtils.getSettings(); ++ this.connect('destroy', () => { ++ this._settings?.run_dispose(); ++ this._settings = null; ++ }); ++ ++ this._topBanner = new St.BoxLayout({ ++ style_class: 'classification-banner', ++ x_expand: true, ++ y_expand: true, ++ y_align: Clutter.ActorAlign.START, ++ }); ++ this.add_child(this._topBanner); ++ this._settings.bind('top-banner', ++ this._topBanner, 'visible', ++ Gio.SettingsBindFlags.GET); ++ ++ this._bottomBanner = new St.BoxLayout({ ++ style_class: 'classification-banner', ++ x_expand: true, ++ y_expand: true, ++ y_align: Clutter.ActorAlign.END, ++ }); ++ this.add_child(this._bottomBanner); ++ this._settings.bind('bottom-banner', ++ this._bottomBanner, 'visible', ++ Gio.SettingsBindFlags.GET); ++ ++ for (const banner of [this._topBanner, this._bottomBanner]) { ++ const label = new St.Label({ ++ style_class: 'classification-message', ++ x_align: Clutter.ActorAlign.CENTER, ++ x_expand: true, ++ }); ++ banner.add_child(label); ++ ++ this._settings.bind('message', ++ label, 'text', ++ Gio.SettingsBindFlags.GET); ++ } ++ ++ const hostLabel = new St.Label({ ++ style_class: 'classification-system-info', ++ text: GLib.get_host_name(), ++ }); ++ this._topBanner.insert_child_at_index(hostLabel, 0); ++ this._settings.bind('system-info', ++ hostLabel, 'visible', ++ Gio.SettingsBindFlags.GET); ++ ++ const userLabel = new St.Label({ ++ style_class: 'classification-system-info', ++ text: GLib.get_user_name(), ++ }); ++ this._topBanner.add_child(userLabel); ++ this._settings.bind('system-info', ++ userLabel, 'visible', ++ Gio.SettingsBindFlags.GET); ++ ++ this._settings.connect('changed::color', ++ () => this._updateStyles()); ++ this._settings.connect('changed::background-color', ++ () => this._updateStyles()); ++ this._updateStyles(); ++ } ++ ++ _getColorSetting(key) { ++ const str = this._settings.get_string(key); ++ const [valid, color] = Clutter.Color.from_string(str); ++ if (!valid) ++ return ''; ++ const { red, green, blue, alpha } = color; ++ return `${key}: rgba(${red},${green},${blue},${alpha / 255});`; ++ } ++ ++ _updateStyles() { ++ const bgStyle = this._getColorSetting('background-color'); ++ const fgStyle = this._getColorSetting('color'); ++ const style = `${bgStyle}${fgStyle}`; ++ this._topBanner.set({ style }); ++ this._bottomBanner.set({ style }); ++ } ++}); ++ ++class Extension { ++ constructor() { ++ this._banners = []; ++ } ++ ++ _updateMonitors() { ++ const { monitors, panelBox, primaryIndex } = Main.layoutManager; ++ if (monitors.length !== this._banners.length) { ++ this._clearBanners(); ++ ++ for (let i = 0; i < monitors.length; i++) { ++ const banner = new ClassificationBanner(i); ++ Main.uiGroup.add_child(banner); ++ this._banners.push(banner); ++ } ++ } ++ ++ const primaryBanner = this._banners[primaryIndex]; ++ if (primaryBanner) ++ Main.uiGroup.set_child_below_sibling(primaryBanner, panelBox); ++ } ++ ++ _clearBanners() { ++ this._banners.forEach(b => b.destroy()); ++ this._banners = []; ++ } ++ ++ enable() { ++ this._monitorsChangedId = Main.layoutManager.connect('monitors-changed', ++ () => this._updateMonitors()); ++ this._updateMonitors(); ++ } ++ ++ disable() { ++ if (this._monitorsChangedId) { ++ Main.layoutManager.disconnect(this._monitorsChangedId); ++ delete this._monitorsChangedId; ++ } ++ this._clearBanners(); ++ } ++} ++ ++/** ++ * @returns {Extension} - the extension's state object ++ */ ++function init() { ++ return new Extension(); ++} +diff --git a/extensions/classification-banner/meson.build b/extensions/classification-banner/meson.build +new file mode 100644 +index 00000000..b027381d +--- /dev/null ++++ b/extensions/classification-banner/meson.build +@@ -0,0 +1,8 @@ ++extension_data += configure_file( ++ input: metadata_name + '.in', ++ output: metadata_name, ++ configuration: metadata_conf ++) ++ ++extension_sources += files('adwShim.js', 'prefs.js') ++extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml') +diff --git a/extensions/classification-banner/metadata.json.in b/extensions/classification-banner/metadata.json.in +new file mode 100644 +index 00000000..f93b1a2d +--- /dev/null ++++ b/extensions/classification-banner/metadata.json.in +@@ -0,0 +1,11 @@ ++{ ++"extension-id": "@extension_id@", ++"uuid": "@uuid@", ++"settings-schema": "@gschemaname@", ++"gettext-domain": "@gettext_domain@", ++"name": "Classification Banner", ++"description": "Display classification level banner", ++"shell-version": [ "@shell_current@" ], ++"session-modes": [ "gdm", "unlock-dialog", "user" ], ++"url": "@url@" ++} +diff --git a/extensions/classification-banner/org.gnome.shell.extensions.classification-banner.gschema.xml b/extensions/classification-banner/org.gnome.shell.extensions.classification-banner.gschema.xml +new file mode 100644 +index 00000000..0314ef60 +--- /dev/null ++++ b/extensions/classification-banner/org.gnome.shell.extensions.classification-banner.gschema.xml +@@ -0,0 +1,29 @@ ++ ++ ++ ++ true ++ Show a banner at the top ++ ++ ++ true ++ Show a banner at the bottom ++ ++ ++ "UNCLASSIFIED" ++ classification message ++ ++ ++ "#fff" ++ text color ++ ++ ++ "rgba(0,122,51,0.75)" ++ background color ++ ++ ++ false ++ Include system info in top banner ++ ++ ++ +diff --git a/extensions/classification-banner/prefs.js b/extensions/classification-banner/prefs.js +new file mode 100644 +index 00000000..a5dd8af1 +--- /dev/null ++++ b/extensions/classification-banner/prefs.js +@@ -0,0 +1,197 @@ ++/* exported init buildPrefsWidget */ ++const { Gdk, Gio, GObject, Gtk } = imports.gi; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Gettext = imports.gettext.domain('gnome-shell-extensions'); ++const _ = Gettext.gettext; ++ ++const Me = ExtensionUtils.getCurrentExtension(); ++const Adw = Me.imports.adwShim; ++ ++let settings = null; ++ ++const GenericPrefs = GObject.registerClass( ++class GenericPrefs extends Adw.PreferencesGroup { ++ _init() { ++ super._init(); ++ ++ this._actionGroup = new Gio.SimpleActionGroup(); ++ this.insert_action_group('options', this._actionGroup); ++ ++ this._actionGroup.add_action(settings.create_action('top-banner')); ++ this._actionGroup.add_action(settings.create_action('bottom-banner')); ++ this._actionGroup.add_action(settings.create_action('system-info')); ++ ++ this.add(this._createSettingsRow('Top banner', 'top-banner')); ++ this.add(this._createSettingsRow('Bottom banner', 'bottom-banner')); ++ this.add(this._createSettingsRow('System info', 'system-info')); ++ } ++ ++ _createSettingsRow(title, key) { ++ const activatableWidget = new Gtk.Switch({ ++ valign: Gtk.Align.CENTER, ++ action_name: `options.${key}`, ++ }); ++ const row = new Adw.ActionRow({ ++ activatableWidget, ++ title, ++ }); ++ row.add_prefix(activatableWidget); ++ ++ return row; ++ } ++}); ++ ++const BannerPreset = GObject.registerClass({ ++ Properties: { ++ 'message': GObject.ParamSpec.string( ++ 'message', 'message', 'message', ++ GObject.ParamFlags.READWRITE, ++ null), ++ 'color': GObject.ParamSpec.string( ++ 'color', 'color', 'color', ++ GObject.ParamFlags.READWRITE, ++ null), ++ 'background-color': GObject.ParamSpec.string( ++ 'background-color', 'background-color', 'background-color', ++ GObject.ParamFlags.READWRITE, ++ null), ++ }, ++}, class BannerPreset extends GObject.Object {}); ++ ++const AppearancePrefs = GObject.registerClass( ++class AppearancePrefs extends Adw.PreferencesGroup { ++ _init() { ++ super._init(); ++ ++ const model = new Gio.ListStore({ item_type: BannerPreset.$gtype }); ++ model.append(new BannerPreset({ ++ message: 'UNCLASSIFIED', ++ color: '#fff', ++ background_color: 'rgba(0, 122, 51, 0.75)', ++ })); ++ model.append(new BannerPreset({ ++ message: 'CONFIDENTIAL', ++ color: '#fff', ++ background_color: 'rgba(0, 51, 160, 0.75)', ++ })); ++ model.append(new BannerPreset({ ++ message: 'SECRET', ++ color: '#fff', ++ background_color: 'rgba(200, 16, 46, 0.75)', ++ })); ++ model.append(new BannerPreset({ ++ message: 'TOP SECRET', ++ color: '#fff', ++ background_color: 'rgba(255, 103, 31, 0.75)', ++ })); ++ model.append(new BannerPreset({ ++ message: 'TOP SECRET//SCI', ++ color: '#000', ++ background_color: 'rgba(247, 234, 72, 0.75)', ++ })); ++ ++ let row, activatableWidget; ++ row = this._createPresetsRow(model); ++ row.connect('notify::selected-item', comboRow => { ++ const { message, color, backgroundColor } = comboRow.selected_item; ++ settings.set_string('message', message); ++ settings.set_string('color', color); ++ settings.set_string('background-color', backgroundColor); ++ }); ++ this.add(row); ++ ++ activatableWidget = new Gtk.Entry({ ++ valign: Gtk.Align.CENTER, ++ }); ++ settings.bind('message', ++ activatableWidget, 'text', ++ Gio.SettingsBindFlags.DEFAULT); ++ row = new Adw.ActionRow({ title: _('Message'), activatableWidget }); ++ row.add_suffix(activatableWidget); ++ this.add(row); ++ ++ activatableWidget = this._createColorButton('background-color', { ++ use_alpha: true, ++ }); ++ row = new Adw.ActionRow({ title: _('Background color'), activatableWidget }); ++ row.add_suffix(activatableWidget); ++ this.add(row); ++ ++ activatableWidget = this._createColorButton('color'); ++ row = new Adw.ActionRow({ title: _('Text color'), activatableWidget }); ++ row.add_suffix(activatableWidget); ++ this.add(row); ++ } ++ ++ _createPresetsRow(model) { ++ const listFactory = new Gtk.SignalListItemFactory(); ++ listFactory.connect('setup', ++ (f, item) => item.set_child(new Gtk.Label())); ++ listFactory.connect('bind', (f, listItem) => { ++ const { child, item } = listItem; ++ ++ const provider = new Gtk.CssProvider(); ++ provider.load_from_data(`* { ++ border-radius: 99px; ++ padding: 6px; ++ color: ${item.color}; ++ background-color: ${item.background_color}; ++ }`); ++ child.get_style_context().add_provider(provider, ++ Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); ++ child.label = item.message; ++ }); ++ ++ return new Adw.ComboRow({ ++ title: _('Presets'), ++ model, ++ listFactory, ++ expression: Gtk.ConstantExpression.new_for_value(''), ++ }); ++ } ++ ++ _createColorButton(key, params = {}) { ++ const rgba = new Gdk.RGBA(); ++ rgba.parse(settings.get_string(key)); ++ ++ const button = new Gtk.ColorButton({ ++ ...params, ++ rgba, ++ valign: Gtk.Align.CENTER, ++ }); ++ settings.connect(`changed::${key}`, () => { ++ const newRgba = new Gdk.RGBA(); ++ newRgba.parse(settings.get_string(key)); ++ if (!newRgba.equal(button.rgba)) ++ button.set({ rgba: newRgba }); ++ }); ++ button.connect('notify::rgba', ++ () => settings.set_string(key, button.rgba.to_string())); ++ return button; ++ } ++}); ++ ++const ClassificationPrefs = GObject.registerClass( ++class ClassificationPrefs extends Adw.PreferencesPage { ++ _init() { ++ super._init(); ++ ++ this.add(new AppearancePrefs()); ++ this.add(new GenericPrefs()); ++ } ++}); ++ ++/** */ ++function init() { ++ Adw.init(); ++ ExtensionUtils.initTranslations(); ++ settings = ExtensionUtils.getSettings(); ++} ++ ++/** ++ * @returns {Gtk.Widget} - the prefs widget ++ */ ++function buildPrefsWidget() { ++ return new ClassificationPrefs(); ++} +diff --git a/extensions/classification-banner/stylesheet.css b/extensions/classification-banner/stylesheet.css +new file mode 100644 +index 00000000..fb6a697e +--- /dev/null ++++ b/extensions/classification-banner/stylesheet.css +@@ -0,0 +1,3 @@ ++.classification-system-info { padding: 0 24px; } ++.classification-message { font-weight: bold; } ++.classification-banner { font-size: 0.9em; } +diff --git a/meson.build b/meson.build +index b83f0795..c71636cb 100644 +--- a/meson.build ++++ b/meson.build +@@ -45,6 +45,7 @@ default_extensions += [ + all_extensions = default_extensions + all_extensions += [ + 'auto-move-windows', ++ 'classification-banner', + 'dash-to-dock', + 'native-window-placement', + 'panel-favorites', +-- +2.38.1 + + +From 4cde1aa62f4605cde761c9f0f2f95af64515720d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 12 Jan 2023 19:43:52 +0100 +Subject: [PATCH 7/7] Add custom-menu extension + +--- + extensions/custom-menu/config.js | 484 ++++++++++++++++++++++++ + extensions/custom-menu/extension.js | 217 +++++++++++ + extensions/custom-menu/meson.build | 7 + + extensions/custom-menu/metadata.json.in | 10 + + extensions/custom-menu/stylesheet.css | 1 + + meson.build | 1 + + 6 files changed, 720 insertions(+) + create mode 100644 extensions/custom-menu/config.js + create mode 100644 extensions/custom-menu/extension.js + create mode 100644 extensions/custom-menu/meson.build + create mode 100644 extensions/custom-menu/metadata.json.in + create mode 100644 extensions/custom-menu/stylesheet.css + +diff --git a/extensions/custom-menu/config.js b/extensions/custom-menu/config.js +new file mode 100644 +index 00000000..652c0223 +--- /dev/null ++++ b/extensions/custom-menu/config.js +@@ -0,0 +1,484 @@ ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const Json = imports.gi.Json; ++const Lang = imports.lang; ++const Main = imports.ui.main; ++const PopupMenu = imports.ui.popupMenu; ++const ByteArray = imports.byteArray; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const getLogger = Me.imports.extension.getLogger; ++ ++const Entry = new Lang.Class({ ++ Name: 'Entry', ++ Abstract: true, ++ ++ _init: function(prop) { ++ this.type = prop.type; ++ this.title = prop.title || ""; ++ ++ this.__vars = prop.__vars || []; ++ this.updateEnv(prop); ++ }, ++ ++ setTitle: function(text) { ++ this.item.label.get_clutter_text().set_text(text); ++ }, ++ ++ updateEnv: function(prop) { ++ this.__env = {} ++ if(!this.__vars) return; ++ ++ for(let i in this.__vars) { ++ let v = this.__vars[i]; ++ this.__env[v] = prop[v] ? String(prop[v]) : ""; ++ } ++ }, ++ ++ // the pulse function should be read as "a pulse arrives" ++ pulse: function() { }, ++ ++ _try_destroy: function() { ++ try { ++ if(this.item && this.item.destroy) ++ this.item.destroy(); ++ } catch(e) { /* Ignore all errors during destory*/ } ++ }, ++}); ++ ++const DerivedEntry = new Lang.Class({ ++ Name: 'DerivedEntry', ++ ++ _init: function(prop) { ++ if(!prop.base) ++ throw new Error("Base entry not specified in type definition."); ++ ++ this.base = prop.base; ++ this.vars = prop.vars || []; ++ ++ delete prop.base; ++ delete prop.vars; ++ ++ this.prop = prop; ++ }, ++ ++ createInstance: function(addit_prop) { ++ let cls = type_map[this.base]; ++ if(!cls) throw new Error("Bad base class."); ++ if(cls.createInstance) throw new Error("Not allowed to derive from dervied types"); ++ ++ for(let rp in this.prop) ++ addit_prop[rp] = this.prop[rp]; ++ addit_prop.__vars = this.vars; ++ ++ let instance = new cls(addit_prop); ++ ++ return instance; ++ }, ++}); ++ ++/* ++ * callback: function (stdout, stderr, exit_status) { } ++ */ ++let __pipeOpenQueue = []; ++let __pipeExecTimer = null; ++ ++function pipeOpen(cmdline, env, callback) { ++ let param = [cmdline, env, callback] ++ __pipeOpenQueue.push(param); ++ if(__pipeExecTimer === null) { ++ __pipeExecTimer = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 50, ++ function() { ++ let param = __pipeOpenQueue.shift(); ++ if(param === undefined) { ++ __pipeExecTimer = null; ++ return false; ++ } ++ if(realPipeOpen) realPipeOpen(param[0], param[1], param[2]); ++ return true; ++ }); ++ ++ } ++} ++ ++function realPipeOpen(cmdline, env, callback) { ++ let user_cb = callback; ++ let proc; ++ ++ function wait_cb(_, _res) { ++ let stdout_pipe = proc.get_stdout_pipe(); ++ let stderr_pipe = proc.get_stderr_pipe(); ++ ++ let stdout_content; ++ let stderr_content; ++ ++ // Only the first GLib.MAXINT16 characters are fetched for optimization. ++ stdout_pipe.read_bytes_async(GLib.MAXINT16, 0, null, function(osrc, ores) { ++ stdout_content = ByteArray.toString(stdout_pipe.read_bytes_finish(ores).get_data()); ++ stdout_pipe.close(null); ++ ++ stderr_pipe.read_bytes_async(GLib.MAXINT16, 0, null, function(esrc, eres) { ++ stderr_content = ByteArray.toString(stderr_pipe.read_bytes_finish(eres).get_data()); ++ stderr_pipe.close(null); ++ ++ user_cb(stdout_content, stderr_content, proc.get_exit_status()); ++ }); ++ }); ++ } ++ ++ if(user_cb) { ++ let _pipedLauncher = new Gio.SubprocessLauncher({ ++ flags: ++ Gio.SubprocessFlags.STDERR_PIPE | ++ Gio.SubprocessFlags.STDOUT_PIPE ++ }); ++ for(let key in env) { ++ _pipedLauncher.setenv(key, env[key], true); ++ } ++ proc = _pipedLauncher.spawnv(['bash', '-c', cmdline]); ++ proc.wait_async(null, wait_cb); ++ } else { ++ // Detached launcher is used to spawn commands that we are not concerned ++ // about its result. ++ let _detacLauncher = new Gio.SubprocessLauncher(); ++ for(let key in env) { ++ _detacLauncher.setenv(key, env[key], true); ++ } ++ proc = _detacLauncher.spawnv(['bash', '-c', cmdline]); ++ } ++ ++ getLogger().info("Spawned " + cmdline); ++ ++ // log(`Spawning ${cmdline}`); TODO: BEN ++ return proc.get_identifier(); ++} ++ ++function _generalSpawn(command, env, title) { ++ title = title || "Process"; ++ pipeOpen(command, env, function(stdout, stderr, exit_status) { ++ if(exit_status != 0) { ++ log ++ getLogger().warning(stderr); ++ getLogger().notify("proc", title + ++ " exited with status " + exit_status, stderr); ++ } ++ }); ++} ++ ++function quoteShellArg(arg) { ++ arg = arg.replace(/'/g, "'\"'\"'"); ++ return "'" + arg + "'"; ++} ++ ++// This cache is used to reduce detector cost. Each time creating an item, it ++// check if the result of this detector is cached, which prevent the togglers ++// from running detector on each creation. This is useful especially in search ++// mode. ++let _toggler_state_cache = { }; ++ ++const TogglerEntry = new Lang.Class({ ++ Name: 'TogglerEntry', ++ Extends: Entry, ++ ++ _init: function(prop) { ++ this.parent(prop); ++ ++ this.command_on = prop.command_on || ""; ++ this.command_off = prop.command_off || ""; ++ this.detector = prop.detector || ""; ++ this.auto_on = prop.auto_on || false; ++ this.notify_when = prop.notify_when || []; ++ // if the switch is manually turned off, auto_on is disabled. ++ this._manually_switched_off = false; ++ this.pulse(); // load initial state ++ }, ++ ++ createItem: function() { ++ this._try_destroy(); ++ this.item = new PopupMenu.PopupSwitchMenuItem(this.title, false); ++ this.item.label.get_clutter_text().set_use_markup(true); ++ this.item.connect('toggled', Lang.bind(this, this._onManuallyToggled)); ++ this._loadState(); ++ return this.item; ++ }, ++ ++ _onManuallyToggled: function(_, state) { ++ // when switched on again, this flag will get cleared. ++ this._manually_switched_off = !state; ++ this._storeState(state); ++ this._onToggled(state); ++ }, ++ ++ _onToggled: function(state) { ++ if(state) ++ _generalSpawn(this.command_on, this.__env, this.title); ++ else ++ _generalSpawn(this.command_off, this.__env, this.title); ++ }, ++ ++ _detect: function(callback) { ++ // abort detecting if detector is an empty string ++ if(!this.detector) ++ return; ++ ++ pipeOpen(this.detector, this.__env, function(out) { ++ out = String(out); ++ callback(!Boolean(out.match(/^\s*$/))); ++ }); ++ }, ++ ++ compareState: function(new_state) { ++ // compare the new state with cached state ++ // notify when state is different ++ let old_state = _toggler_state_cache[this.detector]; ++ if(old_state === undefined) return; ++ if(old_state == new_state) return; ++ ++ if(this.notify_when.indexOf(new_state ? "on" : "off") >= 0) { ++ let not_str = this.title + (new_state ? " started." : " stopped."); ++ if(!new_state && this.auto_on) ++ not_str += " Attempt to restart it now."; ++ getLogger().notify("state", not_str); ++ } ++ }, ++ ++ _storeState: function(state) { ++ let hash = JSON.stringify({ env: this.__env, detector: this.detector }); ++ _toggler_state_cache[hash] = state; ++ }, ++ ++ _loadState: function() { ++ let hash = JSON.stringify({ env: this.__env, detector: this.detector }); ++ let state = _toggler_state_cache[hash]; ++ if(state !== undefined) ++ this.item.setToggleState(state); // doesn't emit 'toggled' ++ }, ++ ++ pulse: function() { ++ this._detect(Lang.bind(this, function(state) { ++ this.compareState(state); ++ ++ this._storeState(state); ++ this._loadState(); ++ //global.log(this.title + ': ' + this._manually_switched_off); ++ ++ if(!state && !this._manually_switched_off && this.auto_on) ++ // do not call setToggleState here, because command_on may fail ++ this._onToggled(this.item, true); ++ })); ++ }, ++ ++ perform: function() { ++ this.item.toggle(); ++ }, ++}); ++ ++const LauncherEntry = new Lang.Class({ ++ Name: 'LauncherEntry', ++ Extends: Entry, ++ ++ _init: function(prop) { ++ this.parent(prop); ++ ++ this.command = prop.command || ""; ++ }, ++ ++ createItem: function() { ++ this._try_destroy(); ++ ++ this.item = new PopupMenu.PopupMenuItem(this.title); ++ this.item.label.get_clutter_text().set_use_markup(true); ++ this.item.connect('activate', Lang.bind(this, this._onClicked)); ++ ++ return this.item; ++ }, ++ ++ _onClicked: function(_) { ++ _generalSpawn(this.command, this.__env, this.title); ++ }, ++ ++ perform: function() { ++ this.item.emit('activate'); ++ }, ++}); ++ ++const SubMenuEntry = new Lang.Class({ ++ Name: 'SubMenuEntry', ++ Extends: Entry, ++ ++ _init: function(prop) { ++ this.parent(prop) ++ ++ if(prop.entries == undefined) ++ throw new Error("Expected entries provided in submenu entry."); ++ ++ this.entries = []; ++ ++ for(let i in prop.entries) { ++ let entry_prop = prop.entries[i]; ++ let entry = createEntry(entry_prop); ++ this.entries.push(entry); ++ } ++ }, ++ ++ createItem: function() { ++ this._try_destroy(); ++ ++ this.item = new PopupMenu.PopupSubMenuMenuItem(this.title); ++ this.item.label.get_clutter_text().set_use_markup(true); ++ for(let i in this.entries) { ++ let entry = this.entries[i]; ++ this.item.menu.addMenuItem(entry.createItem()); ++ } ++ ++ return this.item; ++ }, ++ ++ pulse: function() { ++ for(let i in this.entries) { ++ let entry = this.entries[i]; ++ entry.pulse(); ++ } ++ } ++}); ++ ++const SeparatorEntry = new Lang.Class({ ++ Name: 'SeparatorEntry', ++ Extends: Entry, ++ ++ _init: function(prop) { }, ++ ++ createItem: function() { ++ this._try_destroy(); ++ ++ this.item = new PopupMenu.PopupSeparatorMenuItem(this.title); ++ this.item.label.get_clutter_text().set_use_markup(true); ++ ++ return this.item; ++ }, ++}); ++ ++let type_map = {}; ++ ++//////////////////////////////////////////////////////////////////////////////// ++// Config Loader loads config from JSON file. ++ ++// convert Json Nodes (GLib based) to native javascript value. ++function convertJson(node) { ++ if(node.get_node_type() == Json.NodeType.VALUE) ++ return node.get_value(); ++ if(node.get_node_type() == Json.NodeType.OBJECT) { ++ let obj = {} ++ node.get_object().foreach_member(function(_, k, v_n) { ++ obj[k] = convertJson(v_n); ++ }); ++ return obj; ++ } ++ if(node.get_node_type() == Json.NodeType.ARRAY) { ++ let arr = [] ++ node.get_array().foreach_element(function(_, i, elem) { ++ arr.push(convertJson(elem)); ++ }); ++ return arr; ++ } ++ return null; ++} ++ ++// ++function createEntry(entry_prop) { ++ if(!entry_prop.type) ++ throw new Error("No type specified in entry."); ++ ++ let cls = type_map[entry_prop.type]; ++ if(!cls) ++ throw new Error("Incorrect type '" + entry_prop.type + "'"); ++ else if(cls.createInstance) ++ return cls.createInstance(entry_prop); ++ ++ return new cls(entry_prop); ++} ++ ++var Loader = new Lang.Class({ ++ Name: 'ConfigLoader', ++ ++ _init: function(filename) { ++ if(filename) ++ this.loadConfig(filename); ++ }, ++ ++ loadConfig: function(filename) { ++ // reset type_map everytime load the config ++ type_map = { ++ launcher: LauncherEntry, ++ toggler: TogglerEntry, ++ submenu: SubMenuEntry, ++ separator: SeparatorEntry ++ }; ++ ++ type_map.systemd = new DerivedEntry({ ++ base: 'toggler', ++ vars: ['unit'], ++ command_on: "pkexec systemctl start ${unit}", ++ command_off: "pkexec systemctl stop ${unit}", ++ detector: "systemctl status ${unit} | grep Active:\\\\s\\*activ[ei]", ++ }); ++ ++ type_map.tmux = new DerivedEntry({ ++ base: 'toggler', ++ vars: ['command', 'session'], ++ command_on: 'tmux new -d -s ${session} bash -c "${command}"', ++ command_off: 'tmux kill-session -t ${session}', ++ detector: 'tmux has -t "${session}" 2>/dev/null && echo yes', ++ }); ++ ++ /* ++ * Refer to README file for detailed config file format. ++ */ ++ this.entries = []; // CAUTION: remove all entries. ++ ++ let config_parser = new Json.Parser(); ++ config_parser.load_from_file(filename); ++ ++ let conf = convertJson(config_parser.get_root()); ++ if (conf.entries == undefined) ++ throw new Error("Key 'entries' not found."); ++ if (conf.deftype) { ++ for (let tname in conf.deftype) { ++ if (type_map[tname]) ++ throw new Error("Type \""+tname+"\" duplicated."); ++ type_map[tname] = new DerivedEntry(conf.deftype[tname]); ++ } ++ } ++ ++ for (let conf_i in conf.entries) { ++ let entry_prop = conf.entries[conf_i]; ++ this.entries.push(createEntry(entry_prop)); ++ } ++ }, ++ ++ ++ saveDefaultConfig: function(filename) { ++ // Write default config ++ const PERMISSIONS_MODE = 0o640; ++ const jsonString = JSON.stringify({ ++ "_homepage_": "https://github.com/andreabenini/gnome-plugin.custom-menu-panel", ++ "_examples_": "https://github.com/andreabenini/gnome-plugin.custom-menu-panel/tree/main/examples", ++ "entries": [ { ++ "type": "launcher", ++ "title": "Edit menu", ++ "command": "gedit $HOME/.entries.json" ++ } ] ++ }, null, 4); ++ let fileConfig = Gio.File.new_for_path(filename); ++ if (GLib.mkdir_with_parents(fileConfig.get_parent().get_path(), PERMISSIONS_MODE) === 0) { ++ fileConfig.replace_contents(jsonString, null, false, Gio.FileCreateFlags.REPLACE_DESTINATION, null); ++ } ++ // Try to load newly saved file ++ try { ++ this.loadConfig(filename); ++ } catch(e) { ++ Main.notify(_('Cannot create and load file: '+filename)); ++ } ++ }, /**/ ++ ++}); +diff --git a/extensions/custom-menu/extension.js b/extensions/custom-menu/extension.js +new file mode 100644 +index 00000000..9f3e3ce8 +--- /dev/null ++++ b/extensions/custom-menu/extension.js +@@ -0,0 +1,217 @@ ++/* extension.js ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++/** ++ * @author Ben ++ * @see https://github.com/andreabenini/gnome-plugin.custom-menu-panel ++ */ ++ ++/* exported init */ ++ ++const GETTEXT_DOMAIN = 'custom-menu-panel'; ++const CONFIGURATION_FILE = '/.entries.json'; ++ ++const { GObject, St } = imports.gi; ++ ++const Gettext = imports.gettext.domain(GETTEXT_DOMAIN); ++const _ = Gettext.gettext; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Lang = imports.lang; ++const GLib = imports.gi.GLib; ++const Gio = imports.gi.Gio; ++const BackgroundMenu = imports.ui.backgroundMenu; ++const Main = imports.ui.main; ++const PanelMenu = imports.ui.panelMenu; ++const PopupMenu = imports.ui.popupMenu; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Config = Me.imports.config ++ ++const LOGGER_INFO = 0; ++const LOGGER_WARNING = 1; ++const LOGGER_ERROR = 2; ++ ++const { BackgroundMenu: OriginalBackgroundMenu } = BackgroundMenu; ++ ++ ++class CustomMenu extends PopupMenu.PopupMenu { ++ constructor(sourceActor) { ++ super(sourceActor, 0.0, St.Side.TOP, 0); ++ ++ this._loadSetup(); ++ } ++ ++ /** ++ * LOAD Program settings from .entries.json file ++ */ ++ _loadSetup() { ++ this.removeAll(); ++ // Loading configuration from file ++ this.configLoader = new Config.Loader(); ++ try { ++ this.configLoader.loadConfig(GLib.get_home_dir() + CONFIGURATION_FILE); // $HOME/.entries.json ++ } catch(e) { ++ this.configLoader.saveDefaultConfig(GLib.get_home_dir() + CONFIGURATION_FILE); // create default entries ++ } ++ // Build the menu ++ let i = 0; ++ for (let i in this.configLoader.entries) { ++ let item = this.configLoader.entries[i].createItem(); ++ this.addMenuItem(item); ++ } ++ } /**/ ++} ++ ++class CustomBackgroundMenu extends CustomMenu { ++ constructor(layoutManager) { ++ super(layoutManager.dummyCursor); ++ ++ this.actor.add_style_class_name('background-menu'); ++ ++ layoutManager.uiGroup.add_actor(this.actor); ++ this.actor.hide(); ++ ++ this.connect('open-state-changed', (menu, open) => { ++ if (open) ++ this._updateMaxHeight(); ++ }); ++ } ++ ++ _updateMaxHeight() { ++ const monitor = Main.layoutManager.findMonitorForActor(this.actor); ++ const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor.index); ++ const {scaleFactor} = St.ThemeContext.get_for_stage(global.stage); ++ const vMargins = this.actor.margin_top + this.actor.margin_bottom; ++ const {y: offsetY} = this.sourceActor; ++ ++ const maxHeight = Math.round((monitor.height - offsetY - vMargins) / scaleFactor); ++ this.actor.style = `max-height: ${maxHeight}px;`; ++ } ++} ++ ++const Indicator = GObject.registerClass( ++ class Indicator extends PanelMenu.Button { ++ _init() { ++ super._init(0.0, _('Custom Menu Panel Indicator'), true); ++ this.add_child(new St.Icon({ ++ icon_name: 'view-list-bullet-symbolic', ++ style_class: 'system-status-icon', ++ })); ++ ++ this.setMenu(new CustomMenu(this)); ++ } ++ } ++); ++ ++ ++const Logger = new Lang.Class({ ++ Name: 'Logger', ++ ++ _init: function(log_file) { ++ this._log_file = log_file; ++ // initailize log_backend ++ if(!log_file) ++ this._initEmptyLog(); ++ else if(log_file == "gnome-shell") ++ this._initGnomeLog(); ++ else ++ this._initFileLog(); ++ ++ this.level = LOGGER_WARNING; ++ ++ this.info = function(t) { ++ if(this.level <= LOGGER_INFO) this.log(t) ++ }; ++ this.warning = function(t) { ++ if(this.level <= LOGGER_WARNING) this.log(t) ++ }; ++ this.error = function(t) { ++ if(this.level <= LOGGER_ERROR) this.log(t); ++ }; ++ }, ++ ++ _initEmptyLog: function() { ++ this.log = function(_) { }; ++ }, ++ ++ _initGnomeLog: function() { ++ this.log = function(s) { ++ global.log("custom-menu-panel> " + s); ++ }; ++ }, ++ ++ _initFileLog: function() { ++ this.log = function(s) { ++ // all operations are synchronous: any needs to optimize? ++ if(!this._output_file || !this._output_file.query_exists(null) || ++ !this._fstream || this._fstream.is_closed()) { ++ ++ this._output_file = Gio.File.new_for_path(this._log_file); ++ this._fstream = this._output_file.append_to( ++ Gio.FileCreateFlags.NONE, null); ++ ++ if(!this._fstream instanceof Gio.FileIOStream) { ++ this._initGnomeLog(); ++ this.log("IOError: Failed to append to " + this._log_file + ++ " [Gio.IOErrorEnum:" + this._fstream + "]"); ++ return; ++ } ++ } ++ ++ this._fstream.write(String(new Date())+" "+s+"\n", null); ++ this._fstream.flush(null); ++ } ++ }, ++ ++ notify: function(t, str, details) { ++ this.ncond = this.ncond || ['proc', 'ext', 'state']; ++ if(this.ncond.indexOf(t) < 0) return; ++ Main.notify(str, details || ""); ++ }, ++}); ++ ++// lazy-evaluation ++let logger = null; ++function getLogger() { ++ if(logger === null) ++ logger = new Logger("gnome-shell"); ++ return logger; ++} ++ ++class Extension { ++ constructor(uuid) { ++ this._uuid = uuid; ++ ++ ExtensionUtils.initTranslations(GETTEXT_DOMAIN); ++ } ++ ++ enable() { ++ BackgroundMenu.BackgroundMenu = CustomBackgroundMenu; ++ Main.layoutManager._updateBackgrounds(); ++ } ++ ++ disable() { ++ BackgroundMenu.BackgroundMenu = OriginalBackgroundMenu; ++ Main.layoutManager._updateBackgrounds(); ++ } ++} ++ ++function init(meta) { ++ return new Extension(meta.uuid); ++} +diff --git a/extensions/custom-menu/meson.build b/extensions/custom-menu/meson.build +new file mode 100644 +index 00000000..92450963 +--- /dev/null ++++ b/extensions/custom-menu/meson.build +@@ -0,0 +1,7 @@ ++extension_data += configure_file( ++ input: metadata_name + '.in', ++ output: metadata_name, ++ configuration: metadata_conf ++) ++ ++extension_sources += files('config.js') +diff --git a/extensions/custom-menu/metadata.json.in b/extensions/custom-menu/metadata.json.in +new file mode 100644 +index 00000000..054f639b +--- /dev/null ++++ b/extensions/custom-menu/metadata.json.in +@@ -0,0 +1,10 @@ ++{ ++"extension-id": "@extension_id@", ++"uuid": "@uuid@", ++"settings-schema": "@gschemaname@", ++"gettext-domain": "@gettext_domain@", ++"name": "Custom menu", ++"description": "Quick custom menu for launching your favorite applications", ++"shell-version": [ "@shell_current@" ], ++"url": "@url@" ++} +diff --git a/extensions/custom-menu/stylesheet.css b/extensions/custom-menu/stylesheet.css +new file mode 100644 +index 00000000..25134b65 +--- /dev/null ++++ b/extensions/custom-menu/stylesheet.css +@@ -0,0 +1 @@ ++/* This extensions requires no special styling */ +diff --git a/meson.build b/meson.build +index c71636cb..23fb2c89 100644 +--- a/meson.build ++++ b/meson.build +@@ -46,6 +46,7 @@ all_extensions = default_extensions + all_extensions += [ + 'auto-move-windows', + 'classification-banner', ++ 'custom-menu', + 'dash-to-dock', + 'native-window-placement', + 'panel-favorites', +-- +2.38.1 + diff --git a/SOURCES/desktop-icons-40-fixes.patch b/SOURCES/desktop-icons-40-fixes.patch new file mode 100644 index 0000000..8b8bd38 --- /dev/null +++ b/SOURCES/desktop-icons-40-fixes.patch @@ -0,0 +1,231 @@ +From afa394114c57197e96f18e7942729634ece5d3c4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 19 May 2021 16:46:59 +0200 +Subject: [PATCH 1/2] desktop-icons: Revert "Use GTK-Theme CSS for selected + file-item and rubberband" + +GtkStyleContext requires a (X11) display connection, which may not +be available with xwayland-on-demand. Better use some hardcoded +colors than crashing the session. + +This reverts commit 8dc524aa4efd6a3fbad67480bd6c904b0c0c99d6. +--- + extensions/desktop-icons/desktopIconsUtil.js | 11 ---------- + extensions/desktop-icons/desktopManager.js | 12 ----------- + extensions/desktop-icons/fileItem.js | 22 ++++---------------- + extensions/desktop-icons/stylesheet.css | 9 ++++++++ + 4 files changed, 13 insertions(+), 41 deletions(-) + +diff --git a/extensions/desktop-icons/desktopIconsUtil.js b/extensions/desktop-icons/desktopIconsUtil.js +index 696c945..57bedc1 100644 +--- a/extensions/desktop-icons/desktopIconsUtil.js ++++ b/extensions/desktop-icons/desktopIconsUtil.js +@@ -16,7 +16,6 @@ + * along with this program. If not, see . + */ + +-const Gtk = imports.gi.Gtk; + const Gio = imports.gi.Gio; + const GLib = imports.gi.GLib; + const ExtensionUtils = imports.misc.extensionUtils; +@@ -114,16 +113,6 @@ function getFileExtensionOffset(filename, isDirectory) { + return offset; + } + +-function getGtkClassBackgroundColor(classname, state) { +- let widget = new Gtk.WidgetPath(); +- widget.append_type(Gtk.Widget); +- +- let context = new Gtk.StyleContext(); +- context.set_path(widget); +- context.add_class(classname); +- return context.get_background_color(state); +-} +- + // Reference the extension org.gnome.shell.extensions.drive-menu + function eject(mount) { + let unmountArgs = [ +diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js +index 1aad8c6..10e3ce0 100644 +--- a/extensions/desktop-icons/desktopManager.js ++++ b/extensions/desktop-icons/desktopManager.js +@@ -16,7 +16,6 @@ + * along with this program. If not, see . + */ + +-const Gtk = imports.gi.Gtk; + const Clutter = imports.gi.Clutter; + const GObject = imports.gi.GObject; + const Gio = imports.gi.Gio; +@@ -132,7 +131,6 @@ var DesktopManager = GObject.registerClass({ + startRubberBand(x, y) { + this._rubberBandInitialX = x; + this._rubberBandInitialY = y; +- this._initRubberBandColor(); + this._updateRubberBand(x, y); + this._rubberBand.show(); + this._grabHelper.grab({ actor: global.stage }); +@@ -235,16 +233,6 @@ var DesktopManager = GObject.registerClass({ + this._desktopGrids = {}; + } + +- /** +- * Initialize rubberband color from the GTK rubberband class +- * */ +- _initRubberBandColor() { +- let rgba = DesktopIconsUtil.getGtkClassBackgroundColor('rubberband', Gtk.StateFlags.NORMAL); +- let background_color = +- 'rgba(' + rgba.red * 255 + ', ' + rgba.green * 255 + ', ' + rgba.blue * 255 + ', 0.4)'; +- this._rubberBand.set_style('background-color: ' + background_color); +- } +- + async _scanFiles() { + for (let [fileItem, fileItemHandler] of this._fileItemHandlers) + Object.values(fileItemHandler).forEach(id => fileItem.disconnect(id)); +diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js +index 9987e7f..1e8ea89 100644 +--- a/extensions/desktop-icons/fileItem.js ++++ b/extensions/desktop-icons/fileItem.js +@@ -16,7 +16,6 @@ + * along with this program. If not, see . + */ + +-const Gtk = imports.gi.Gtk; + const Clutter = imports.gi.Clutter; + const Gio = imports.gi.Gio; + const GLib = imports.gi.GLib; +@@ -649,17 +648,6 @@ var FileItem = GObject.registerClass({ + DBusUtils.openFileWithOtherApplication(this.file.get_path()); + } + +- _getSelectionStyle() { +- let rgba = DesktopIconsUtil.getGtkClassBackgroundColor('view', Gtk.StateFlags.SELECTED); +- let background_color = +- 'rgba(' + rgba.red * 255 + ', ' + rgba.green * 255 + ', ' + rgba.blue * 255 + ', 0.6)'; +- let border_color = +- 'rgba(' + rgba.red * 255 + ', ' + rgba.green * 255 + ', ' + rgba.blue * 255 + ', 0.8)'; +- +- return 'background-color: ' + background_color + ';' + +- 'border-color: ' + border_color + ';'; +- } +- + get menu() { + return this._menu; + } +@@ -901,12 +889,10 @@ var FileItem = GObject.registerClass({ + if (isSelected == this._isSelected) + return; + +- if (isSelected) { +- this._container.set_style(this._getSelectionStyle()); +- } else { +- this._container.set_style('background-color: transparent'); +- this._container.set_style('border-color: transparent'); +- } ++ if (isSelected) ++ this._container.add_style_pseudo_class('selected'); ++ else ++ this._container.remove_style_pseudo_class('selected'); + + this._isSelected = isSelected; + } +diff --git a/extensions/desktop-icons/stylesheet.css b/extensions/desktop-icons/stylesheet.css +index 61b4ce8..4fd31c3 100644 +--- a/extensions/desktop-icons/stylesheet.css ++++ b/extensions/desktop-icons/stylesheet.css +@@ -8,6 +8,15 @@ + background-color: rgba(238, 238, 238, 0.2); + } + ++.file-item:selected { ++ background-color: rgba(74, 144, 217, 0.6); ++ border-color: rgba(74, 144, 217, 0.8); ++} ++ ++.rubber-band { ++ background-color: rgba(74, 144, 238, 0.4); ++} ++ + .name-label { + text-shadow: 1px 1px black; + color: white; +-- +2.32.0 + + +From ca050d098240b3e757f172d2012f7d1b91db3ff6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 21 May 2021 00:50:52 +0200 +Subject: [PATCH 2/2] desktop-icons: Port prefs to GTK4 + +... for compatibility with GNOME 40. +--- + extensions/desktop-icons/prefs.js | 32 ++++++++++++++++++------------- + 1 file changed, 19 insertions(+), 13 deletions(-) + +diff --git a/extensions/desktop-icons/prefs.js b/extensions/desktop-icons/prefs.js +index 890bcdb..c390aa8 100644 +--- a/extensions/desktop-icons/prefs.js ++++ b/extensions/desktop-icons/prefs.js +@@ -98,23 +98,29 @@ function get_schema(schema) { + + function buildPrefsWidget() { + initTranslations(); +- let frame = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL, border_width: 10, spacing: 10 }); +- +- frame.add(buildSelector('icon-size', _("Size for the desktop icons"), { 'small': _("Small"), 'standard': _("Standard"), 'large': _("Large") })); +- frame.add(buildSwitcher('show-home', _("Show the personal folder in the desktop"))); +- frame.add(buildSwitcher('show-trash', _("Show the trash icon in the desktop"))); +- frame.add(buildSwitcher('show-mount', _("Show mounted drives in the desktop"))); +- frame.show_all(); ++ let frame = new Gtk.Box({ ++ orientation: Gtk.Orientation.VERTICAL, ++ margin_top: 10, ++ margin_bottom: 10, ++ margin_start: 10, ++ margin_end: 10, ++ spacing: 10, ++ }); ++ ++ frame.append(buildSelector('icon-size', _("Size for the desktop icons"), { 'small': _("Small"), 'standard': _("Standard"), 'large': _("Large") })); ++ frame.append(buildSwitcher('show-home', _("Show the personal folder in the desktop"))); ++ frame.append(buildSwitcher('show-trash', _("Show the trash icon in the desktop"))); ++ frame.append(buildSwitcher('show-mount', _("Show mounted drives in the desktop"))); + return frame; + } + + function buildSwitcher(key, labelText) { + let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL, spacing: 10 }); +- let label = new Gtk.Label({ label: labelText, xalign: 0 }); ++ let label = new Gtk.Label({ label: labelText, xalign: 0, hexpand: true }); + let switcher = new Gtk.Switch({ active: settings.get_boolean(key) }); + settings.bind(key, switcher, 'active', 3); +- hbox.pack_start(label, true, true, 0); +- hbox.add(switcher); ++ hbox.append(label); ++ hbox.append(switcher); + return hbox; + } + +@@ -131,15 +137,15 @@ function buildSelector(key, labelText, elements) { + listStore.set (iter, [0, 1], [visibleText, val]); + } + let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL, spacing: 10 }); +- let label = new Gtk.Label({ label: labelText, xalign: 0 }); ++ let label = new Gtk.Label({ label: labelText, xalign: 0, hexpand: true }); + let combo = new Gtk.ComboBox({model: listStore}); + let rendererText = new Gtk.CellRendererText(); + combo.pack_start (rendererText, false); + combo.add_attribute (rendererText, 'text', 0); + combo.set_id_column(1); + settings.bind(key, combo, 'active-id', 3); +- hbox.pack_start(label, true, true, 0); +- hbox.add(combo); ++ hbox.append(label); ++ hbox.append(combo); + return hbox; + } + +-- +2.32.0 + diff --git a/SOURCES/gnome-classic-wayland.patch b/SOURCES/gnome-classic-wayland.patch new file mode 100644 index 0000000..38af9ca --- /dev/null +++ b/SOURCES/gnome-classic-wayland.patch @@ -0,0 +1,158 @@ +From 1692d4a91d95fecd5642b0c92bc2c5b0dbcb4184 Mon Sep 17 00:00:00 2001 +From: Neal Gompa +Date: Fri, 29 Oct 2021 09:37:33 -0400 +Subject: [PATCH] classic: Install the session for Wayland and ship override + sessions + +The regular GNOME session ships with three options: + +* GNOME +* GNOME on Wayland (available when GDM starts in X11) +* GNOME on Xorg (available when GDM starts in Wayland) + +The main GNOME session is set up so it works to match how GDM starts, +so GNOME is on Wayland if GDM is (or GNOME is on X11 if GDM is). + +For GNOME Classic, we are missing this setup, so port this behavior +over from the GNOME session setup. + +Part-of: +--- + data/gnome-classic-wayland.desktop.in | 8 ++++++ + data/gnome-classic-xorg.desktop.in | 8 ++++++ + data/meson.build | 40 +++++++++++++++++++++------ + meson.build | 5 ++++ + meson/session-post-install.py | 20 ++++++++++++++ + 5 files changed, 72 insertions(+), 9 deletions(-) + create mode 100644 data/gnome-classic-wayland.desktop.in + create mode 100644 data/gnome-classic-xorg.desktop.in + create mode 100755 meson/session-post-install.py + +diff --git a/data/gnome-classic-wayland.desktop.in b/data/gnome-classic-wayland.desktop.in +new file mode 100644 +index 00000000..7287c689 +--- /dev/null ++++ b/data/gnome-classic-wayland.desktop.in +@@ -0,0 +1,8 @@ ++[Desktop Entry] ++Name=GNOME Classic on Wayland ++Comment=This session logs you into GNOME Classic ++Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session ++TryExec=gnome-session ++Type=Application ++DesktopNames=GNOME-Classic;GNOME; ++X-GDM-SessionRegisters=true +diff --git a/data/gnome-classic-xorg.desktop.in b/data/gnome-classic-xorg.desktop.in +new file mode 100644 +index 00000000..5fb338a1 +--- /dev/null ++++ b/data/gnome-classic-xorg.desktop.in +@@ -0,0 +1,8 @@ ++[Desktop Entry] ++Name=GNOME Classic on Xorg ++Comment=This session logs you into GNOME Classic ++Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session ++TryExec=gnome-session ++Type=Application ++DesktopNames=GNOME-Classic;GNOME; ++X-GDM-SessionRegisters=true +diff --git a/data/meson.build b/data/meson.build +index 27f42872..47fe798e 100644 +--- a/data/meson.build ++++ b/data/meson.build +@@ -1,12 +1,34 @@ +-session_desktop = 'gnome-classic.desktop' +-i18n.merge_file('', +- input: session_desktop + '.in', +- output: session_desktop, +- po_dir: '../po', +- install: true, +- install_dir: xsessiondir, +- type: 'desktop' +-) ++session_desktop_base = 'gnome-classic' ++ ++session_desktops = [ ++ session_desktop_base, ++ session_desktop_base + '-xorg', ++ session_desktop_base + '-wayland', ++] ++ ++foreach name: session_desktops ++ session_desktop = name + '.desktop' ++ if name.endswith('-xorg') ++ session_instdir = xsessiondir ++ elif name.endswith('-wayland') ++ session_instdir = wlsessiondir ++ else ++ # FIXME: The same target can not be copied into two directories. ++ # There is a workaround in meson/session-post-install.py until proper ++ # solution arises: ++ # https://github.com/mesonbuild/meson/issues/2416 ++ session_instdir = xsessiondir ++ #session_instdir = [ xesssiondir, wlsessiondir ] ++ endif ++ i18n.merge_file('', ++ input: session_desktop + '.in', ++ output: session_desktop, ++ po_dir: '../po', ++ install: true, ++ install_dir: session_instdir, ++ type: 'desktop' ++ ) ++endforeach + + classic_uuids = [] + foreach e : classic_extensions +diff --git a/meson.build b/meson.build +index dda3ddac..ea8a859d 100644 +--- a/meson.build ++++ b/meson.build +@@ -20,6 +20,7 @@ themedir = join_paths(shelldir, 'theme') + schemadir = join_paths(datadir, 'glib-2.0', 'schemas') + sessiondir = join_paths(datadir, 'gnome-session', 'sessions') + xsessiondir = join_paths(datadir, 'xsessions') ++wlsessiondir = join_paths(datadir, 'wayland-sessions') + + ver_arr = meson.project_version().split('.') + shell_version = ver_arr[0] +@@ -90,6 +91,10 @@ endforeach + + if classic_mode_enabled + subdir('data') ++ meson.add_install_script( ++ 'meson/session-post-install.py', ++ join_paths(get_option('prefix'), datadir) ++ ) + endif + + subdir('extensions') +diff --git a/meson/session-post-install.py b/meson/session-post-install.py +new file mode 100755 +index 00000000..36abe5e4 +--- /dev/null ++++ b/meson/session-post-install.py +@@ -0,0 +1,20 @@ ++#!/usr/bin/env python3 ++ ++import os ++import shutil ++import sys ++ ++if os.environ.get('DESTDIR'): ++ install_root = os.environ.get('DESTDIR') + os.path.abspath(sys.argv[1]) ++else: ++ install_root = sys.argv[1] ++ ++# FIXME: Meson is unable to copy a generated target file: ++# https://groups.google.com/forum/#!topic/mesonbuild/3iIoYPrN4P0 ++dst_dir = os.path.join(install_root, 'wayland-sessions') ++if not os.path.exists(dst_dir): ++ os.makedirs(dst_dir) ++ ++src = os.path.join(install_root, 'xsessions', 'gnome-classic.desktop') ++dst = os.path.join(dst_dir, 'gnome-classic.desktop') ++shutil.copyfile(src, dst) +-- +2.33.1 + diff --git a/SOURCES/resurrect-system-monitor.patch b/SOURCES/resurrect-system-monitor.patch new file mode 100644 index 0000000..34cd0ca --- /dev/null +++ b/SOURCES/resurrect-system-monitor.patch @@ -0,0 +1,1551 @@ +From 2e00e631c7def6d58bdb1eb0fa3254ae82a37574 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 17 May 2017 19:13:50 +0200 +Subject: [PATCH 1/6] extensions: Resurrect systemMonitor extension + +The extension was removed upstream because: + - it hooks into the message tray that was removed + - it was known to have performance issues + - there are plenty of alternatives + +Those aren't good enough reasons for dropping it downstream +as well though, so we need to bring it back ... + +This reverts commit c9a6421f362cd156cf731289eadc11f44f6970ac. +--- + extensions/systemMonitor/extension.js | 376 ++++++++++++++++++++++ + extensions/systemMonitor/meson.build | 5 + + extensions/systemMonitor/metadata.json.in | 11 + + extensions/systemMonitor/stylesheet.css | 35 ++ + meson.build | 1 + + 5 files changed, 428 insertions(+) + create mode 100644 extensions/systemMonitor/extension.js + create mode 100644 extensions/systemMonitor/meson.build + create mode 100644 extensions/systemMonitor/metadata.json.in + create mode 100644 extensions/systemMonitor/stylesheet.css + +diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js +new file mode 100644 +index 0000000..7b09df0 +--- /dev/null ++++ b/extensions/systemMonitor/extension.js +@@ -0,0 +1,376 @@ ++/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ ++ ++const Clutter = imports.gi.Clutter; ++const GTop = imports.gi.GTop; ++const Lang = imports.lang; ++const Mainloop = imports.mainloop; ++const St = imports.gi.St; ++const Shell = imports.gi.Shell; ++ ++const Main = imports.ui.main; ++const Tweener = imports.ui.tweener; ++ ++const Gettext = imports.gettext.domain('gnome-shell-extensions'); ++const _ = Gettext.gettext; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const Convenience = Me.imports.convenience; ++ ++const INDICATOR_UPDATE_INTERVAL = 500; ++const INDICATOR_NUM_GRID_LINES = 3; ++ ++const ITEM_LABEL_SHOW_TIME = 0.15; ++const ITEM_LABEL_HIDE_TIME = 0.1; ++const ITEM_HOVER_TIMEOUT = 300; ++ ++const Indicator = new Lang.Class({ ++ Name: 'SystemMonitor.Indicator', ++ ++ _init: function() { ++ this._initValues(); ++ this.drawing_area = new St.DrawingArea({ reactive: true }); ++ this.drawing_area.connect('repaint', Lang.bind(this, this._draw)); ++ this.drawing_area.connect('button-press-event', function() { ++ let app = Shell.AppSystem.get_default().lookup_app('gnome-system-monitor.desktop'); ++ app.open_new_window(-1); ++ return true; ++ }); ++ ++ this.actor = new St.Bin({ style_class: "extension-systemMonitor-indicator-area", ++ reactive: true, track_hover: true, ++ x_fill: true, y_fill: true }); ++ this.actor.add_actor(this.drawing_area); ++ ++ this._timeout = Mainloop.timeout_add(INDICATOR_UPDATE_INTERVAL, Lang.bind(this, function () { ++ this._updateValues(); ++ this.drawing_area.queue_repaint(); ++ return true; ++ })); ++ }, ++ ++ showLabel: function() { ++ if (this.label == null) ++ return; ++ ++ this.label.opacity = 0; ++ this.label.show(); ++ ++ let [stageX, stageY] = this.actor.get_transformed_position(); ++ ++ let itemWidth = this.actor.allocation.x2 - this.actor.allocation.x1; ++ let itemHeight = this.actor.allocation.y2 - this.actor.allocation.y1; ++ ++ let labelWidth = this.label.width; ++ let labelHeight = this.label.height; ++ let xOffset = Math.floor((itemWidth - labelWidth) / 2) ++ ++ let x = stageX + xOffset; ++ ++ let node = this.label.get_theme_node(); ++ let yOffset = node.get_length('-y-offset'); ++ ++ let y = stageY - this.label.get_height() - yOffset; ++ ++ this.label.set_position(x, y); ++ Tweener.addTween(this.label, ++ { opacity: 255, ++ time: ITEM_LABEL_SHOW_TIME, ++ transition: 'easeOutQuad', ++ }); ++ }, ++ ++ setLabelText: function(text) { ++ if (this.label == null) ++ this.label = new St.Label({ style_class: 'extension-systemMonitor-indicator-label'}); ++ ++ this.label.set_text(text); ++ Main.layoutManager.addChrome(this.label); ++ this.label.hide(); ++ }, ++ ++ hideLabel: function () { ++ Tweener.addTween(this.label, ++ { opacity: 0, ++ time: ITEM_LABEL_HIDE_TIME, ++ transition: 'easeOutQuad', ++ onComplete: Lang.bind(this, function() { ++ this.label.hide(); ++ }) ++ }); ++ }, ++ ++ destroy: function() { ++ Mainloop.source_remove(this._timeout); ++ ++ this.actor.destroy(); ++ if (this.label) ++ this.label.destroy(); ++ }, ++ ++ _initValues: function() { ++ }, ++ ++ _updateValues: function() { ++ }, ++ ++ _draw: function(area) { ++ let [width, height] = area.get_surface_size(); ++ let themeNode = this.actor.get_theme_node(); ++ let cr = area.get_context(); ++ ++ //draw the background grid ++ let color = themeNode.get_color(this.gridColor); ++ let gridOffset = Math.floor(height / (INDICATOR_NUM_GRID_LINES + 1)); ++ for (let i = 1; i <= INDICATOR_NUM_GRID_LINES; ++i) { ++ cr.moveTo(0, i * gridOffset + .5); ++ cr.lineTo(width, i * gridOffset + .5); ++ } ++ Clutter.cairo_set_source_color(cr, color); ++ cr.setLineWidth(1); ++ cr.setDash([4,1], 0); ++ cr.stroke(); ++ ++ //draw the foreground ++ ++ function makePath(values, reverse, nudge) { ++ if (nudge == null) { ++ nudge = 0; ++ } ++ //if we are going in reverse, we are completing the bottom of a chart, so use lineTo ++ if (reverse) { ++ cr.lineTo(values.length - 1, (1 - values[values.length - 1]) * height + nudge); ++ for (let k = values.length - 2; k >= 0; --k) { ++ cr.lineTo(k, (1 - values[k]) * height + nudge); ++ } ++ } else { ++ cr.moveTo(0, (1 - values[0]) * height + nudge); ++ for (let k = 1; k < values.length; ++k) { ++ cr.lineTo(k, (1 - values[k]) * height + nudge); ++ } ++ ++ } ++ } ++ ++ let renderStats = this.renderStats; ++ ++ // Make sure we don't have more sample points than pixels ++ renderStats.map(Lang.bind(this, function(k){ ++ let stat = this.stats[k]; ++ if (stat.values.length > width) { ++ stat.values = stat.values.slice(stat.values.length - width, stat.values.length); ++ } ++ })); ++ ++ for (let i = 0; i < renderStats.length; ++i) { ++ let stat = this.stats[renderStats[i]]; ++ // We outline at full opacity and fill with 40% opacity ++ let outlineColor = themeNode.get_color(stat.color); ++ let color = new Clutter.Color(outlineColor); ++ color.alpha = color.alpha * .4; ++ ++ // Render the background between us and the next level ++ makePath(stat.values, false); ++ // If there is a process below us, render the cpu between us and it, otherwise, ++ // render to the bottom of the chart ++ if (i == renderStats.length - 1) { ++ cr.lineTo(stat.values.length - 1, height); ++ cr.lineTo(0, height); ++ cr.closePath(); ++ } else { ++ let nextStat = this.stats[renderStats[i+1]]; ++ makePath(nextStat.values, true); ++ } ++ cr.closePath() ++ Clutter.cairo_set_source_color(cr, color); ++ cr.fill(); ++ ++ // Render the outline of this level ++ makePath(stat.values, false, .5); ++ Clutter.cairo_set_source_color(cr, outlineColor); ++ cr.setLineWidth(1.0); ++ cr.setDash([], 0); ++ cr.stroke(); ++ } ++ } ++}); ++ ++const CpuIndicator = new Lang.Class({ ++ Name: 'SystemMonitor.CpuIndicator', ++ Extends: Indicator, ++ ++ _init: function() { ++ this.parent(); ++ ++ this.gridColor = '-grid-color'; ++ this.renderStats = [ 'cpu-user', 'cpu-sys', 'cpu-iowait' ]; ++ ++ // Make sure renderStats is sorted as necessary for rendering ++ let renderStatOrder = {'cpu-total': 0, 'cpu-user': 1, 'cpu-sys': 2, 'cpu-iowait': 3}; ++ this.renderStats = this.renderStats.sort(function(a,b) { ++ return renderStatOrder[a] - renderStatOrder[b]; ++ }); ++ ++ this.setLabelText(_("CPU")); ++ }, ++ ++ _initValues: function() { ++ this._prev = new GTop.glibtop_cpu; ++ GTop.glibtop_get_cpu(this._prev); ++ ++ this.stats = { ++ 'cpu-user': {color: '-cpu-user-color', values: []}, ++ 'cpu-sys': {color: '-cpu-sys-color', values: []}, ++ 'cpu-iowait': {color: '-cpu-iowait-color', values: []}, ++ 'cpu-total': {color: '-cpu-total-color', values: []} ++ }; ++ }, ++ ++ _updateValues: function() { ++ let cpu = new GTop.glibtop_cpu; ++ let t = 0.0; ++ GTop.glibtop_get_cpu(cpu); ++ let total = cpu.total - this._prev.total; ++ let user = cpu.user - this._prev.user; ++ let sys = cpu.sys - this._prev.sys; ++ let iowait = cpu.iowait - this._prev.iowait; ++ let idle = cpu.idle - this._prev.idle; ++ ++ t += iowait / total; ++ this.stats['cpu-iowait'].values.push(t); ++ t += sys / total; ++ this.stats['cpu-sys'].values.push(t); ++ t += user / total; ++ this.stats['cpu-user'].values.push(t); ++ this.stats['cpu-total'].values.push(1 - idle / total); ++ ++ this._prev = cpu; ++ } ++}); ++ ++const MemoryIndicator = new Lang.Class({ ++ Name: 'SystemMonitor.MemoryIndicator', ++ Extends: Indicator, ++ ++ _init: function() { ++ this.parent(); ++ ++ this.gridColor = '-grid-color'; ++ this.renderStats = [ 'mem-user', 'mem-other', 'mem-cached' ]; ++ ++ // Make sure renderStats is sorted as necessary for rendering ++ let renderStatOrder = { 'mem-cached': 0, 'mem-other': 1, 'mem-user': 2 }; ++ this.renderStats = this.renderStats.sort(function(a,b) { ++ return renderStatOrder[a] - renderStatOrder[b]; ++ }); ++ ++ this.setLabelText(_("Memory")); ++ }, ++ ++ _initValues: function() { ++ this.mem = new GTop.glibtop_mem; ++ this.stats = { ++ 'mem-user': { color: "-mem-user-color", values: [] }, ++ 'mem-other': { color: "-mem-other-color", values: [] }, ++ 'mem-cached': { color: "-mem-cached-color", values: [] } ++ }; ++ }, ++ ++ _updateValues: function() { ++ GTop.glibtop_get_mem(this.mem); ++ ++ let t = this.mem.user / this.mem.total; ++ this.stats['mem-user'].values.push(t); ++ t += (this.mem.used - this.mem.user - this.mem.cached) / this.mem.total; ++ this.stats['mem-other'].values.push(t); ++ t += this.mem.cached / this.mem.total; ++ this.stats['mem-cached'].values.push(t); ++ } ++}); ++ ++const INDICATORS = [CpuIndicator, MemoryIndicator]; ++ ++const Extension = new Lang.Class({ ++ Name: 'SystemMonitor.Extension', ++ ++ _init: function() { ++ Convenience.initTranslations(); ++ ++ this._showLabelTimeoutId = 0; ++ this._resetHoverTimeoutId = 0; ++ this._labelShowing = false; ++ }, ++ ++ enable: function() { ++ this._box = new St.BoxLayout({ style_class: 'extension-systemMonitor-container', ++ x_align: Clutter.ActorAlign.START, ++ x_expand: true }); ++ this._indicators = [ ]; ++ ++ for (let i = 0; i < INDICATORS.length; i++) { ++ let indicator = new (INDICATORS[i])(); ++ ++ indicator.actor.connect('notify::hover', Lang.bind(this, function() { ++ this._onHover(indicator); ++ })); ++ this._box.add_actor(indicator.actor); ++ this._indicators.push(indicator); ++ } ++ ++ this._boxHolder = new St.BoxLayout({ x_expand: true, ++ y_expand: true, ++ x_align: Clutter.ActorAlign.START, ++ }); ++ let menuButton = Main.messageTray._messageTrayMenuButton.actor; ++ Main.messageTray.actor.remove_child(menuButton); ++ Main.messageTray.actor.add_child(this._boxHolder); ++ ++ this._boxHolder.add_child(this._box); ++ this._boxHolder.add_child(menuButton); ++ }, ++ ++ disable: function() { ++ this._indicators.forEach(function(i) { i.destroy(); }); ++ ++ let menuButton = Main.messageTray._messageTrayMenuButton.actor; ++ this._boxHolder.remove_child(menuButton); ++ Main.messageTray.actor.add_child(menuButton); ++ ++ this._box.destroy(); ++ this._boxHolder.destroy(); ++ }, ++ ++ _onHover: function (item) { ++ if (item.actor.get_hover()) { ++ if (this._showLabelTimeoutId == 0) { ++ let timeout = this._labelShowing ? 0 : ITEM_HOVER_TIMEOUT; ++ this._showLabelTimeoutId = Mainloop.timeout_add(timeout, ++ Lang.bind(this, function() { ++ this._labelShowing = true; ++ item.showLabel(); ++ return false; ++ })); ++ if (this._resetHoverTimeoutId > 0) { ++ Mainloop.source_remove(this._resetHoverTimeoutId); ++ this._resetHoverTimeoutId = 0; ++ } ++ } ++ } else { ++ if (this._showLabelTimeoutId > 0) ++ Mainloop.source_remove(this._showLabelTimeoutId); ++ this._showLabelTimeoutId = 0; ++ item.hideLabel(); ++ if (this._labelShowing) { ++ this._resetHoverTimeoutId = Mainloop.timeout_add(ITEM_HOVER_TIMEOUT, ++ Lang.bind(this, function() { ++ this._labelShowing = false; ++ return false; ++ })); ++ } ++ } ++ }, ++}); ++ ++function init() { ++ return new Extension(); ++} +diff --git a/extensions/systemMonitor/meson.build b/extensions/systemMonitor/meson.build +new file mode 100644 +index 0000000..48504f6 +--- /dev/null ++++ b/extensions/systemMonitor/meson.build +@@ -0,0 +1,5 @@ ++extension_data += configure_file( ++ input: metadata_name + '.in', ++ output: metadata_name, ++ configuration: metadata_conf ++) +diff --git a/extensions/systemMonitor/metadata.json.in b/extensions/systemMonitor/metadata.json.in +new file mode 100644 +index 0000000..fa75007 +--- /dev/null ++++ b/extensions/systemMonitor/metadata.json.in +@@ -0,0 +1,11 @@ ++{ ++ "shell-version": ["@shell_current@" ], ++ "uuid": "@uuid@", ++ "extension-id": "@extension_id@", ++ "settings-schema": "@gschemaname@", ++ "gettext-domain": "@gettext_domain@", ++ "original-author": "zaspire@rambler.ru", ++ "name": "SystemMonitor", ++ "description": "System monitor showing CPU and memory usage in the message tray.", ++ "url": "@url@" ++} +diff --git a/extensions/systemMonitor/stylesheet.css b/extensions/systemMonitor/stylesheet.css +new file mode 100644 +index 0000000..13f95ec +--- /dev/null ++++ b/extensions/systemMonitor/stylesheet.css +@@ -0,0 +1,35 @@ ++.extension-systemMonitor-container { ++ spacing: 5px; ++ padding-left: 5px; ++ padding-right: 5px; ++ padding-bottom: 10px; ++ padding-top: 10px; ++} ++ ++.extension-systemMonitor-indicator-area { ++ border: 1px solid #8d8d8d; ++ border-radius: 3px; ++ width: 100px; ++ /* message tray is 72px, so 20px padding of the container, ++ 2px of border, makes it 50px */ ++ height: 50px; ++ -grid-color: #575757; ++ -cpu-total-color: rgb(0,154,62); ++ -cpu-user-color: rgb(69,154,0); ++ -cpu-sys-color: rgb(255,253,81); ++ -cpu-iowait-color: rgb(210,148,0); ++ -mem-user-color: rgb(210,148,0); ++ -mem-cached-color: rgb(90,90,90); ++ -mem-other-color: rgb(205,203,41); ++ background-color: #1e1e1e; ++} ++ ++.extension-systemMonitor-indicator-label { ++ border-radius: 7px; ++ padding: 4px 12px; ++ background-color: rgba(0,0,0,0.9); ++ text-align: center; ++ -y-offset: 8px; ++ font-size: 9pt; ++ font-weight: bold; ++} +diff --git a/meson.build b/meson.build +index 6a2fdf0..afc0133 100644 +--- a/meson.build ++++ b/meson.build +@@ -48,6 +48,7 @@ all_extensions += [ + 'dash-to-dock', + 'native-window-placement', + 'panel-favorites', ++ 'systemMonitor', + 'top-icons', + 'updates-dialog', + 'user-theme' +-- +2.32.0 + + +From 59927edac1f40239d7926f0285249c933ea42caf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 17 May 2019 22:55:48 +0000 +Subject: [PATCH 2/6] systemMonitor: Modernise code + + - port to ES6 classes + - replace Lang.bind() + - replace Tweener + - use standard align/expand properties + - destructure imports + - fix style issues (stray/missing spaces/semi-colons, indent, ...) +--- + extensions/systemMonitor/extension.js | 422 +++++++++++++------------- + 1 file changed, 212 insertions(+), 210 deletions(-) + +diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js +index 7b09df0..f7c6a4a 100644 +--- a/extensions/systemMonitor/extension.js ++++ b/extensions/systemMonitor/extension.js +@@ -1,56 +1,57 @@ + /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ + +-const Clutter = imports.gi.Clutter; +-const GTop = imports.gi.GTop; +-const Lang = imports.lang; +-const Mainloop = imports.mainloop; +-const St = imports.gi.St; +-const Shell = imports.gi.Shell; ++/* exported init */ + ++const { Clutter, GLib, GTop, Shell, St } = imports.gi; ++ ++const ExtensionUtils = imports.misc.extensionUtils; + const Main = imports.ui.main; +-const Tweener = imports.ui.tweener; + + const Gettext = imports.gettext.domain('gnome-shell-extensions'); + const _ = Gettext.gettext; + +-const ExtensionUtils = imports.misc.extensionUtils; +-const Me = ExtensionUtils.getCurrentExtension(); +-const Convenience = Me.imports.convenience; +- + const INDICATOR_UPDATE_INTERVAL = 500; + const INDICATOR_NUM_GRID_LINES = 3; + +-const ITEM_LABEL_SHOW_TIME = 0.15; +-const ITEM_LABEL_HIDE_TIME = 0.1; ++const ITEM_LABEL_SHOW_TIME = 150; ++const ITEM_LABEL_HIDE_TIME = 100; + const ITEM_HOVER_TIMEOUT = 300; + +-const Indicator = new Lang.Class({ +- Name: 'SystemMonitor.Indicator', +- +- _init: function() { ++const Indicator = class { ++ constructor() { + this._initValues(); +- this.drawing_area = new St.DrawingArea({ reactive: true }); +- this.drawing_area.connect('repaint', Lang.bind(this, this._draw)); +- this.drawing_area.connect('button-press-event', function() { ++ this._drawingArea = new St.DrawingArea({ ++ reactive: true, ++ x_expand: true, ++ y_expand: true, ++ }); ++ this._drawingArea.connect('repaint', this._draw.bind(this)); ++ this._drawingArea.connect('button-press-event', () => { + let app = Shell.AppSystem.get_default().lookup_app('gnome-system-monitor.desktop'); + app.open_new_window(-1); + return true; + }); + +- this.actor = new St.Bin({ style_class: "extension-systemMonitor-indicator-area", +- reactive: true, track_hover: true, +- x_fill: true, y_fill: true }); +- this.actor.add_actor(this.drawing_area); ++ this.actor = new St.Bin({ ++ style_class: 'extension-systemMonitor-indicator-area', ++ reactive: true, ++ track_hover: true, ++ }); ++ this.actor.add_actor(this._drawingArea); ++ ++ this.actor.connect('destroy', this._onDestroy.bind(this)); + +- this._timeout = Mainloop.timeout_add(INDICATOR_UPDATE_INTERVAL, Lang.bind(this, function () { +- this._updateValues(); +- this.drawing_area.queue_repaint(); +- return true; +- })); +- }, ++ this._timeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, ++ INDICATOR_UPDATE_INTERVAL, ++ () => { ++ this._updateValues(); ++ this._drawingArea.queue_repaint(); ++ return GLib.SOURCE_CONTINUE; ++ }); ++ } + +- showLabel: function() { +- if (this.label == null) ++ showLabel() { ++ if (this.label === null) + return; + + this.label.opacity = 0; +@@ -58,12 +59,10 @@ const Indicator = new Lang.Class({ + + let [stageX, stageY] = this.actor.get_transformed_position(); + +- let itemWidth = this.actor.allocation.x2 - this.actor.allocation.x1; +- let itemHeight = this.actor.allocation.y2 - this.actor.allocation.y1; ++ let itemWidth = this.actor.allocation.x2 - this.actor.allocation.x1; + +- let labelWidth = this.label.width; +- let labelHeight = this.label.height; +- let xOffset = Math.floor((itemWidth - labelWidth) / 2) ++ let labelWidth = this.label.width; ++ let xOffset = Math.floor((itemWidth - labelWidth) / 2); + + let x = stageX + xOffset; + +@@ -73,116 +72,113 @@ const Indicator = new Lang.Class({ + let y = stageY - this.label.get_height() - yOffset; + + this.label.set_position(x, y); +- Tweener.addTween(this.label, +- { opacity: 255, +- time: ITEM_LABEL_SHOW_TIME, +- transition: 'easeOutQuad', +- }); +- }, ++ this.label.ease({ ++ opacity: 255, ++ duration: ITEM_LABEL_SHOW_TIME, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ }); ++ } + +- setLabelText: function(text) { +- if (this.label == null) +- this.label = new St.Label({ style_class: 'extension-systemMonitor-indicator-label'}); ++ setLabelText(text) { ++ if (this.label === null) { ++ this.label = new St.Label({ ++ style_class: 'extension-systemMonitor-indicator-label', ++ }); ++ } + + this.label.set_text(text); + Main.layoutManager.addChrome(this.label); + this.label.hide(); +- }, +- +- hideLabel: function () { +- Tweener.addTween(this.label, +- { opacity: 0, +- time: ITEM_LABEL_HIDE_TIME, +- transition: 'easeOutQuad', +- onComplete: Lang.bind(this, function() { +- this.label.hide(); +- }) +- }); +- }, +- +- destroy: function() { +- Mainloop.source_remove(this._timeout); ++ } + ++ hideLabel() { ++ this.label.ease({ ++ opacity: 0, ++ duration: ITEM_LABEL_HIDE_TIME, ++ mode: Clutter.AnimationMode.EASE_OUT_QUAD, ++ onComplete: () => this.label.hide(), ++ }); ++ } ++ ++ destroy() { + this.actor.destroy(); +- if (this.label) +- this.label.destroy(); +- }, ++ } + +- _initValues: function() { +- }, ++ _onDestroy() { ++ GLib.source_remove(this._timeout); + +- _updateValues: function() { +- }, ++ if (this.label) ++ this.label.destroy(); ++ } ++ ++ _initValues() { ++ } + +- _draw: function(area) { ++ _updateValues() { ++ } ++ ++ _draw(area) { + let [width, height] = area.get_surface_size(); + let themeNode = this.actor.get_theme_node(); + let cr = area.get_context(); + +- //draw the background grid ++ // draw the background grid + let color = themeNode.get_color(this.gridColor); + let gridOffset = Math.floor(height / (INDICATOR_NUM_GRID_LINES + 1)); + for (let i = 1; i <= INDICATOR_NUM_GRID_LINES; ++i) { +- cr.moveTo(0, i * gridOffset + .5); +- cr.lineTo(width, i * gridOffset + .5); ++ cr.moveTo(0, i * gridOffset + .5); ++ cr.lineTo(width, i * gridOffset + .5); + } + Clutter.cairo_set_source_color(cr, color); + cr.setLineWidth(1); +- cr.setDash([4,1], 0); ++ cr.setDash([4, 1], 0); + cr.stroke(); + +- //draw the foreground ++ // draw the foreground + +- function makePath(values, reverse, nudge) { +- if (nudge == null) { +- nudge = 0; +- } +- //if we are going in reverse, we are completing the bottom of a chart, so use lineTo ++ function makePath(values, reverse, nudge = 0) { ++ // if we are going in reverse, we are completing the bottom of a chart, so use lineTo + if (reverse) { + cr.lineTo(values.length - 1, (1 - values[values.length - 1]) * height + nudge); +- for (let k = values.length - 2; k >= 0; --k) { ++ for (let k = values.length - 2; k >= 0; --k) + cr.lineTo(k, (1 - values[k]) * height + nudge); +- } + } else { + cr.moveTo(0, (1 - values[0]) * height + nudge); +- for (let k = 1; k < values.length; ++k) { ++ for (let k = 1; k < values.length; ++k) + cr.lineTo(k, (1 - values[k]) * height + nudge); +- } +- + } + } + + let renderStats = this.renderStats; + + // Make sure we don't have more sample points than pixels +- renderStats.map(Lang.bind(this, function(k){ ++ renderStats.forEach(k => { + let stat = this.stats[k]; +- if (stat.values.length > width) { ++ if (stat.values.length > width) + stat.values = stat.values.slice(stat.values.length - width, stat.values.length); +- } +- })); ++ }); + + for (let i = 0; i < renderStats.length; ++i) { + let stat = this.stats[renderStats[i]]; + // We outline at full opacity and fill with 40% opacity + let outlineColor = themeNode.get_color(stat.color); +- let color = new Clutter.Color(outlineColor); +- color.alpha = color.alpha * .4; ++ let fillColor = new Clutter.Color(outlineColor); ++ fillColor.alpha *= .4; + + // Render the background between us and the next level + makePath(stat.values, false); + // If there is a process below us, render the cpu between us and it, otherwise, + // render to the bottom of the chart +- if (i == renderStats.length - 1) { ++ if (i === renderStats.length - 1) { + cr.lineTo(stat.values.length - 1, height); + cr.lineTo(0, height); + cr.closePath(); + } else { +- let nextStat = this.stats[renderStats[i+1]]; ++ let nextStat = this.stats[renderStats[i + 1]]; + makePath(nextStat.values, true); + } +- cr.closePath() +- Clutter.cairo_set_source_color(cr, color); ++ cr.closePath(); ++ Clutter.cairo_set_source_color(cr, fillColor); + cr.fill(); + + // Render the outline of this level +@@ -193,41 +189,43 @@ const Indicator = new Lang.Class({ + cr.stroke(); + } + } +-}); ++}; + +-const CpuIndicator = new Lang.Class({ +- Name: 'SystemMonitor.CpuIndicator', +- Extends: Indicator, +- +- _init: function() { +- this.parent(); ++const CpuIndicator = class extends Indicator { ++ constructor() { ++ super(); + + this.gridColor = '-grid-color'; +- this.renderStats = [ 'cpu-user', 'cpu-sys', 'cpu-iowait' ]; ++ this.renderStats = ['cpu-user', 'cpu-sys', 'cpu-iowait']; + + // Make sure renderStats is sorted as necessary for rendering +- let renderStatOrder = {'cpu-total': 0, 'cpu-user': 1, 'cpu-sys': 2, 'cpu-iowait': 3}; +- this.renderStats = this.renderStats.sort(function(a,b) { ++ let renderStatOrder = { ++ 'cpu-total': 0, ++ 'cpu-user': 1, ++ 'cpu-sys': 2, ++ 'cpu-iowait': 3, ++ }; ++ this.renderStats = this.renderStats.sort((a, b) => { + return renderStatOrder[a] - renderStatOrder[b]; + }); + +- this.setLabelText(_("CPU")); +- }, ++ this.setLabelText(_('CPU')); ++ } + +- _initValues: function() { +- this._prev = new GTop.glibtop_cpu; ++ _initValues() { ++ this._prev = new GTop.glibtop_cpu(); + GTop.glibtop_get_cpu(this._prev); + + this.stats = { +- 'cpu-user': {color: '-cpu-user-color', values: []}, +- 'cpu-sys': {color: '-cpu-sys-color', values: []}, +- 'cpu-iowait': {color: '-cpu-iowait-color', values: []}, +- 'cpu-total': {color: '-cpu-total-color', values: []} +- }; +- }, +- +- _updateValues: function() { +- let cpu = new GTop.glibtop_cpu; ++ 'cpu-user': { color: '-cpu-user-color', values: [] }, ++ 'cpu-sys': { color: '-cpu-sys-color', values: [] }, ++ 'cpu-iowait': { color: '-cpu-iowait-color', values: [] }, ++ 'cpu-total': { color: '-cpu-total-color', values: [] }, ++ }; ++ } ++ ++ _updateValues() { ++ let cpu = new GTop.glibtop_cpu(); + let t = 0.0; + GTop.glibtop_get_cpu(cpu); + let total = cpu.total - this._prev.total; +@@ -246,37 +244,34 @@ const CpuIndicator = new Lang.Class({ + + this._prev = cpu; + } +-}); ++}; + +-const MemoryIndicator = new Lang.Class({ +- Name: 'SystemMonitor.MemoryIndicator', +- Extends: Indicator, +- +- _init: function() { +- this.parent(); ++const MemoryIndicator = class extends Indicator { ++ constructor() { ++ super(); + + this.gridColor = '-grid-color'; +- this.renderStats = [ 'mem-user', 'mem-other', 'mem-cached' ]; ++ this.renderStats = ['mem-user', 'mem-other', 'mem-cached']; + + // Make sure renderStats is sorted as necessary for rendering + let renderStatOrder = { 'mem-cached': 0, 'mem-other': 1, 'mem-user': 2 }; +- this.renderStats = this.renderStats.sort(function(a,b) { ++ this.renderStats = this.renderStats.sort((a, b) => { + return renderStatOrder[a] - renderStatOrder[b]; + }); + +- this.setLabelText(_("Memory")); +- }, ++ this.setLabelText(_('Memory')); ++ } + +- _initValues: function() { +- this.mem = new GTop.glibtop_mem; ++ _initValues() { ++ this.mem = new GTop.glibtop_mem(); + this.stats = { +- 'mem-user': { color: "-mem-user-color", values: [] }, +- 'mem-other': { color: "-mem-other-color", values: [] }, +- 'mem-cached': { color: "-mem-cached-color", values: [] } +- }; +- }, ++ 'mem-user': { color: '-mem-user-color', values: [] }, ++ 'mem-other': { color: '-mem-other-color', values: [] }, ++ 'mem-cached': { color: '-mem-cached-color', values: [] }, ++ }; ++ } + +- _updateValues: function() { ++ _updateValues() { + GTop.glibtop_get_mem(this.mem); + + let t = this.mem.user / this.mem.total; +@@ -286,90 +281,97 @@ const MemoryIndicator = new Lang.Class({ + t += this.mem.cached / this.mem.total; + this.stats['mem-cached'].values.push(t); + } +-}); ++}; + + const INDICATORS = [CpuIndicator, MemoryIndicator]; + +-const Extension = new Lang.Class({ +- Name: 'SystemMonitor.Extension', +- +- _init: function() { +- Convenience.initTranslations(); +- +- this._showLabelTimeoutId = 0; +- this._resetHoverTimeoutId = 0; +- this._labelShowing = false; +- }, +- +- enable: function() { +- this._box = new St.BoxLayout({ style_class: 'extension-systemMonitor-container', +- x_align: Clutter.ActorAlign.START, +- x_expand: true }); +- this._indicators = [ ]; +- +- for (let i = 0; i < INDICATORS.length; i++) { +- let indicator = new (INDICATORS[i])(); +- +- indicator.actor.connect('notify::hover', Lang.bind(this, function() { +- this._onHover(indicator); +- })); +- this._box.add_actor(indicator.actor); +- this._indicators.push(indicator); +- } +- +- this._boxHolder = new St.BoxLayout({ x_expand: true, +- y_expand: true, +- x_align: Clutter.ActorAlign.START, +- }); +- let menuButton = Main.messageTray._messageTrayMenuButton.actor; +- Main.messageTray.actor.remove_child(menuButton); +- Main.messageTray.actor.add_child(this._boxHolder); +- +- this._boxHolder.add_child(this._box); +- this._boxHolder.add_child(menuButton); +- }, +- +- disable: function() { +- this._indicators.forEach(function(i) { i.destroy(); }); +- +- let menuButton = Main.messageTray._messageTrayMenuButton.actor; +- this._boxHolder.remove_child(menuButton); +- Main.messageTray.actor.add_child(menuButton); +- +- this._box.destroy(); +- this._boxHolder.destroy(); +- }, +- +- _onHover: function (item) { ++class Extension { ++ constructor() { ++ ExtensionUtils.initTranslations(); ++ ++ this._showLabelTimeoutId = 0; ++ this._resetHoverTimeoutId = 0; ++ this._labelShowing = false; ++ } ++ ++ enable() { ++ this._box = new St.BoxLayout({ ++ style_class: 'extension-systemMonitor-container', ++ x_align: Clutter.ActorAlign.START, ++ x_expand: true, ++ }); ++ this._indicators = []; ++ ++ for (let i = 0; i < INDICATORS.length; i++) { ++ let indicator = new INDICATORS[i](); ++ ++ indicator.actor.connect('notify::hover', () => { ++ this._onHover(indicator); ++ }); ++ this._box.add_actor(indicator.actor); ++ this._indicators.push(indicator); ++ } ++ ++ this._boxHolder = new St.BoxLayout({ ++ x_expand: true, ++ y_expand: true, ++ x_align: Clutter.ActorAlign.START, ++ }); ++ let menuButton = Main.messageTray._messageTrayMenuButton.actor; ++ Main.messageTray.actor.remove_child(menuButton); ++ Main.messageTray.actor.add_child(this._boxHolder); ++ ++ this._boxHolder.add_child(this._box); ++ this._boxHolder.add_child(menuButton); ++ } ++ ++ disable() { ++ this._indicators.forEach(i => i.destroy()); ++ ++ let menuButton = Main.messageTray._messageTrayMenuButton.actor; ++ this._boxHolder.remove_child(menuButton); ++ Main.messageTray.actor.add_child(menuButton); ++ ++ this._box.destroy(); ++ this._boxHolder.destroy(); ++ } ++ ++ _onHover(item) { + if (item.actor.get_hover()) { +- if (this._showLabelTimeoutId == 0) { +- let timeout = this._labelShowing ? 0 : ITEM_HOVER_TIMEOUT; +- this._showLabelTimeoutId = Mainloop.timeout_add(timeout, +- Lang.bind(this, function() { +- this._labelShowing = true; +- item.showLabel(); +- return false; +- })); +- if (this._resetHoverTimeoutId > 0) { +- Mainloop.source_remove(this._resetHoverTimeoutId); +- this._resetHoverTimeoutId = 0; +- } ++ if (this._showLabelTimeoutId) ++ return; ++ ++ let timeout = this._labelShowing ? 0 : ITEM_HOVER_TIMEOUT; ++ this._showLabelTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, ++ timeout, ++ () => { ++ this._labelShowing = true; ++ item.showLabel(); ++ this._showLabelTimeoutId = 0; ++ return GLib.SOURCE_REMOVE; ++ }); ++ ++ if (this._resetHoverTimeoutId > 0) { ++ GLib.source_remove(this._resetHoverTimeoutId); ++ this._resetHoverTimeoutId = 0; + } + } else { + if (this._showLabelTimeoutId > 0) +- Mainloop.source_remove(this._showLabelTimeoutId); ++ GLib.source_remove(this._showLabelTimeoutId); + this._showLabelTimeoutId = 0; + item.hideLabel(); +- if (this._labelShowing) { +- this._resetHoverTimeoutId = Mainloop.timeout_add(ITEM_HOVER_TIMEOUT, +- Lang.bind(this, function() { +- this._labelShowing = false; +- return false; +- })); +- } ++ if (!this._labelShowing) ++ return; ++ ++ this._resetHoverTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, ++ ITEM_HOVER_TIMEOUT, ++ () => { ++ this._labelShowing = false; ++ return GLib.SOURCE_REMOVE; ++ }); + } +- }, +-}); ++ } ++} + + function init() { + return new Extension(); +-- +2.32.0 + + +From 71e275ba45b09c5f8c6ca5445a459196dc65474b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 26 May 2021 19:50:37 +0200 +Subject: [PATCH 3/6] systemMonitor: Make label property private + +There is no good reason to use a public property, and the name will +clash when we subclass St.Button. +--- + extensions/systemMonitor/extension.js | 35 ++++++++++++++------------- + 1 file changed, 18 insertions(+), 17 deletions(-) + +diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js +index f7c6a4a..bde25a1 100644 +--- a/extensions/systemMonitor/extension.js ++++ b/extensions/systemMonitor/extension.js +@@ -19,6 +19,7 @@ const ITEM_HOVER_TIMEOUT = 300; + + const Indicator = class { + constructor() { ++ this._label = null; + this._initValues(); + this._drawingArea = new St.DrawingArea({ + reactive: true, +@@ -51,28 +52,28 @@ const Indicator = class { + } + + showLabel() { +- if (this.label === null) ++ if (this._label === null) + return; + +- this.label.opacity = 0; +- this.label.show(); ++ this._label.opacity = 0; ++ this._label.show(); + + let [stageX, stageY] = this.actor.get_transformed_position(); + + let itemWidth = this.actor.allocation.x2 - this.actor.allocation.x1; + +- let labelWidth = this.label.width; ++ let labelWidth = this._label.width; + let xOffset = Math.floor((itemWidth - labelWidth) / 2); + + let x = stageX + xOffset; + +- let node = this.label.get_theme_node(); ++ let node = this._label.get_theme_node(); + let yOffset = node.get_length('-y-offset'); + +- let y = stageY - this.label.get_height() - yOffset; ++ let y = stageY - this._label.get_height() - yOffset; + +- this.label.set_position(x, y); +- this.label.ease({ ++ this._label.set_position(x, y); ++ this._label.ease({ + opacity: 255, + duration: ITEM_LABEL_SHOW_TIME, + mode: Clutter.AnimationMode.EASE_OUT_QUAD, +@@ -80,23 +81,23 @@ const Indicator = class { + } + + setLabelText(text) { +- if (this.label === null) { +- this.label = new St.Label({ ++ if (this._label === null) { ++ this._label = new St.Label({ + style_class: 'extension-systemMonitor-indicator-label', + }); + } + +- this.label.set_text(text); +- Main.layoutManager.addChrome(this.label); +- this.label.hide(); ++ this._label.set_text(text); ++ Main.layoutManager.addChrome(this._label); ++ this._label.hide(); + } + + hideLabel() { +- this.label.ease({ ++ this._label.ease({ + opacity: 0, + duration: ITEM_LABEL_HIDE_TIME, + mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- onComplete: () => this.label.hide(), ++ onComplete: () => this._label.hide(), + }); + } + +@@ -107,8 +108,8 @@ const Indicator = class { + _onDestroy() { + GLib.source_remove(this._timeout); + +- if (this.label) +- this.label.destroy(); ++ if (this._label) ++ this._label.destroy(); + } + + _initValues() { +-- +2.32.0 + + +From b310c3a5b532a18af38390021daa332961e404ef Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 17 May 2017 19:31:58 +0200 +Subject: [PATCH 4/6] systemMonitor: Move indicators to calendar + +The message tray joined the invisible choir, so we have to find +a new home for the extension UI. The message list in the calendar +drop-down looks like the best option, given that it replaced the +old tray (and also took over the old keyboard shortcut to bring +it up quickly). +--- + extensions/systemMonitor/extension.js | 106 +++++++++++------------- + extensions/systemMonitor/stylesheet.css | 14 ---- + 2 files changed, 50 insertions(+), 70 deletions(-) + +diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js +index bde25a1..1fd01ab 100644 +--- a/extensions/systemMonitor/extension.js ++++ b/extensions/systemMonitor/extension.js +@@ -2,10 +2,11 @@ + + /* exported init */ + +-const { Clutter, GLib, GTop, Shell, St } = imports.gi; ++const { Clutter, GLib, GObject, GTop, Shell, St } = imports.gi; + + const ExtensionUtils = imports.misc.extensionUtils; + const Main = imports.ui.main; ++const MessageList = imports.ui.messageList; + + const Gettext = imports.gettext.domain('gnome-shell-extensions'); + const _ = Gettext.gettext; +@@ -17,30 +18,38 @@ const ITEM_LABEL_SHOW_TIME = 150; + const ITEM_LABEL_HIDE_TIME = 100; + const ITEM_HOVER_TIMEOUT = 300; + +-const Indicator = class { +- constructor() { ++const Indicator = GObject.registerClass({ ++ Signals: { ++ 'close': {}, ++ 'expanded': {}, ++ 'unexpanded': {}, ++ }, ++}, class Indicator extends St.Button { ++ _init() { + this._label = null; + this._initValues(); + this._drawingArea = new St.DrawingArea({ +- reactive: true, + x_expand: true, + y_expand: true, + }); + this._drawingArea.connect('repaint', this._draw.bind(this)); +- this._drawingArea.connect('button-press-event', () => { ++ ++ super._init({ ++ style_class: 'message message-content extension-systemMonitor-indicator-area', ++ child: this._drawingArea, ++ x_expand: true, ++ can_focus: true, ++ }); ++ ++ this.connect('clicked', () => { + let app = Shell.AppSystem.get_default().lookup_app('gnome-system-monitor.desktop'); + app.open_new_window(-1); +- return true; +- }); + +- this.actor = new St.Bin({ +- style_class: 'extension-systemMonitor-indicator-area', +- reactive: true, +- track_hover: true, ++ Main.overview.hide(); ++ Main.panel.closeCalendar(); + }); +- this.actor.add_actor(this._drawingArea); + +- this.actor.connect('destroy', this._onDestroy.bind(this)); ++ this.connect('destroy', this._onDestroy.bind(this)); + + this._timeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, + INDICATOR_UPDATE_INTERVAL, +@@ -58,9 +67,9 @@ const Indicator = class { + this._label.opacity = 0; + this._label.show(); + +- let [stageX, stageY] = this.actor.get_transformed_position(); ++ let [stageX, stageY] = this.get_transformed_position(); + +- let itemWidth = this.actor.allocation.x2 - this.actor.allocation.x1; ++ let itemWidth = this.allocation.x2 - this.allocation.x1; + + let labelWidth = this._label.width; + let xOffset = Math.floor((itemWidth - labelWidth) / 2); +@@ -73,6 +82,7 @@ const Indicator = class { + let y = stageY - this._label.get_height() - yOffset; + + this._label.set_position(x, y); ++ this._label.get_parent().set_child_above_sibling(this._label, null); + this._label.ease({ + opacity: 255, + duration: ITEM_LABEL_SHOW_TIME, +@@ -101,8 +111,12 @@ const Indicator = class { + }); + } + +- destroy() { +- this.actor.destroy(); ++ /* MessageList.Message boilerplate */ ++ canClose() { ++ return false; ++ } ++ ++ clear() { + } + + _onDestroy() { +@@ -120,7 +134,7 @@ const Indicator = class { + + _draw(area) { + let [width, height] = area.get_surface_size(); +- let themeNode = this.actor.get_theme_node(); ++ let themeNode = this.get_theme_node(); + let cr = area.get_context(); + + // draw the background grid +@@ -190,11 +204,12 @@ const Indicator = class { + cr.stroke(); + } + } +-}; ++}); + +-const CpuIndicator = class extends Indicator { +- constructor() { +- super(); ++const CpuIndicator = GObject.registerClass( ++class CpuIndicator extends Indicator { ++ _init() { ++ super._init(); + + this.gridColor = '-grid-color'; + this.renderStats = ['cpu-user', 'cpu-sys', 'cpu-iowait']; +@@ -245,11 +260,12 @@ const CpuIndicator = class extends Indicator { + + this._prev = cpu; + } +-}; ++}); + +-const MemoryIndicator = class extends Indicator { +- constructor() { +- super(); ++const MemoryIndicator = GObject.registerClass( ++class MemoryIndicator extends Indicator { ++ _init() { ++ super._init(); + + this.gridColor = '-grid-color'; + this.renderStats = ['mem-user', 'mem-other', 'mem-cached']; +@@ -282,7 +298,7 @@ const MemoryIndicator = class extends Indicator { + t += this.mem.cached / this.mem.total; + this.stats['mem-cached'].values.push(t); + } +-}; ++}); + + const INDICATORS = [CpuIndicator, MemoryIndicator]; + +@@ -296,49 +312,27 @@ class Extension { + } + + enable() { +- this._box = new St.BoxLayout({ +- style_class: 'extension-systemMonitor-container', +- x_align: Clutter.ActorAlign.START, +- x_expand: true, +- }); +- this._indicators = []; ++ this._section = new MessageList.MessageListSection(_('System Monitor')); + + for (let i = 0; i < INDICATORS.length; i++) { + let indicator = new INDICATORS[i](); + +- indicator.actor.connect('notify::hover', () => { ++ indicator.connect('notify::hover', () => { + this._onHover(indicator); + }); +- this._box.add_actor(indicator.actor); +- this._indicators.push(indicator); ++ this._section.addMessage(indicator, false); + } + +- this._boxHolder = new St.BoxLayout({ +- x_expand: true, +- y_expand: true, +- x_align: Clutter.ActorAlign.START, +- }); +- let menuButton = Main.messageTray._messageTrayMenuButton.actor; +- Main.messageTray.actor.remove_child(menuButton); +- Main.messageTray.actor.add_child(this._boxHolder); +- +- this._boxHolder.add_child(this._box); +- this._boxHolder.add_child(menuButton); ++ Main.panel.statusArea.dateMenu._messageList._addSection(this._section); ++ this._section.get_parent().set_child_at_index(this._section, 0); + } + + disable() { +- this._indicators.forEach(i => i.destroy()); +- +- let menuButton = Main.messageTray._messageTrayMenuButton.actor; +- this._boxHolder.remove_child(menuButton); +- Main.messageTray.actor.add_child(menuButton); +- +- this._box.destroy(); +- this._boxHolder.destroy(); ++ this._section.destroy(); + } + + _onHover(item) { +- if (item.actor.get_hover()) { ++ if (item.get_hover()) { + if (this._showLabelTimeoutId) + return; + +diff --git a/extensions/systemMonitor/stylesheet.css b/extensions/systemMonitor/stylesheet.css +index 13f95ec..978ac12 100644 +--- a/extensions/systemMonitor/stylesheet.css ++++ b/extensions/systemMonitor/stylesheet.css +@@ -1,17 +1,4 @@ +-.extension-systemMonitor-container { +- spacing: 5px; +- padding-left: 5px; +- padding-right: 5px; +- padding-bottom: 10px; +- padding-top: 10px; +-} +- + .extension-systemMonitor-indicator-area { +- border: 1px solid #8d8d8d; +- border-radius: 3px; +- width: 100px; +- /* message tray is 72px, so 20px padding of the container, +- 2px of border, makes it 50px */ + height: 50px; + -grid-color: #575757; + -cpu-total-color: rgb(0,154,62); +@@ -21,7 +8,6 @@ + -mem-user-color: rgb(210,148,0); + -mem-cached-color: rgb(90,90,90); + -mem-other-color: rgb(205,203,41); +- background-color: #1e1e1e; + } + + .extension-systemMonitor-indicator-label { +-- +2.32.0 + + +From 432f525336a5da1a545546ab40f882f44ac42bb7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 18 May 2017 16:20:07 +0200 +Subject: [PATCH 5/6] systemMonitor: Handle clicks on section title + +While on 3.24.x only the event section still has a clickable title, +it's a generic message list feature in previous versions. It's easy +enough to support with a small subclass, so use that instead of +the generic baseclass. + +Fixes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions3 +--- + extensions/systemMonitor/extension.js | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js +index 1fd01ab..57bdb51 100644 +--- a/extensions/systemMonitor/extension.js ++++ b/extensions/systemMonitor/extension.js +@@ -300,6 +300,22 @@ class MemoryIndicator extends Indicator { + } + }); + ++const SystemMonitorSection = GObject.registerClass( ++class SystemMonitorSection extends MessageList.MessageListSection { ++ _init() { ++ super._init(_('System Monitor')); ++ } ++ ++ _onTitleClicked() { ++ super._onTitleClicked(); ++ ++ let appSys = Shell.AppSystem.get_default(); ++ let app = appSys.lookup_app('gnome-system-monitor.desktop'); ++ if (app) ++ app.open_new_window(-1); ++ } ++}); ++ + const INDICATORS = [CpuIndicator, MemoryIndicator]; + + class Extension { +@@ -312,7 +328,7 @@ class Extension { + } + + enable() { +- this._section = new MessageList.MessageListSection(_('System Monitor')); ++ this._section = new SystemMonitorSection(); + + for (let i = 0; i < INDICATORS.length; i++) { + let indicator = new INDICATORS[i](); +-- +2.32.0 + + +From 657155f8f37a8d0ddf7c39dbff954d87202c681e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 18 May 2017 18:00:17 +0200 +Subject: [PATCH 6/6] systemMonitor: Provide classic styling + +The indicator tooltips currently don't work out in classic mode +(dark text on dark background), so provide some mode-specific +style. + +Fixes: #4 +--- + extensions/systemMonitor/classic.css | 6 ++++++ + extensions/systemMonitor/meson.build | 4 ++++ + 2 files changed, 10 insertions(+) + create mode 100644 extensions/systemMonitor/classic.css + +diff --git a/extensions/systemMonitor/classic.css b/extensions/systemMonitor/classic.css +new file mode 100644 +index 0000000..946863d +--- /dev/null ++++ b/extensions/systemMonitor/classic.css +@@ -0,0 +1,6 @@ ++@import url("stylesheet.css"); ++ ++.extension-systemMonitor-indicator-label { ++ background-color: rgba(237,237,237,0.9); ++ border: 1px solid #a1a1a1; ++} +diff --git a/extensions/systemMonitor/meson.build b/extensions/systemMonitor/meson.build +index 48504f6..b6548b1 100644 +--- a/extensions/systemMonitor/meson.build ++++ b/extensions/systemMonitor/meson.build +@@ -3,3 +3,7 @@ extension_data += configure_file( + output: metadata_name, + configuration: metadata_conf + ) ++ ++if classic_mode_enabled ++ extension_data += files('classic.css') ++endif +-- +2.32.0 + diff --git a/SOURCES/window-list-touch.patch b/SOURCES/window-list-touch.patch new file mode 100644 index 0000000..c537d4a --- /dev/null +++ b/SOURCES/window-list-touch.patch @@ -0,0 +1,116 @@ +From 0d9210e9c19c1bd9535ffb75b4834c2ccd8db6c2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 21 Apr 2022 16:34:50 +0200 +Subject: [PATCH 1/2] window-list: Fix primary button action on touch + +If a click event was triggered via touch rather than a pointer +device, the button parameter is 0 rather than a mouse button +number. + +Account for that to make sure that touch events are not misinterpreted +as right clicks. + +https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/146 + +Part-of: +--- + extensions/window-list/extension.js | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js +index e122cf5f..43885378 100644 +--- a/extensions/window-list/extension.js ++++ b/extensions/window-list/extension.js +@@ -381,7 +381,7 @@ class WindowButton extends BaseButton { + return; + } + +- if (button === 1) ++ if (!button || button === 1) + _minimizeOrActivateWindow(this.metaWindow); + else + _openMenu(this._contextMenu); +@@ -623,7 +623,7 @@ class AppButton extends BaseButton { + if (contextMenuWasOpen) + this._contextMenu.close(); + +- if (button === 1) { ++ if (!button || button === 1) { + if (menuWasOpen) + return; + +-- +2.36.1 + + +From b080bb7ee88d0e5b35dc4a967d2e44eab7921b6f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 5 May 2022 20:55:20 +0200 +Subject: [PATCH 2/2] window-list: Open menu on long press + +Right-click isn't available on touch, so implement long-press as +an alternative. + +https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/146 + +Part-of: +--- + extensions/window-list/extension.js | 42 +++++++++++++++++++++++++++++ + 1 file changed, 42 insertions(+) + +diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js +index 43885378..3d1cd053 100644 +--- a/extensions/window-list/extension.js ++++ b/extensions/window-list/extension.js +@@ -266,6 +266,48 @@ const BaseButton = GObject.registerClass({ + this._updateVisibility(); + } + ++ _setLongPressTimeout() { ++ if (this._longPressTimeoutId) ++ return; ++ ++ const { longPressDuration } = Clutter.Settings.get_default(); ++ this._longPressTimeoutId = ++ GLib.timeout_add(GLib.PRIORITY_DEFAULT, longPressDuration, () => { ++ delete this._longPressTimeoutId; ++ ++ if (this._canOpenPopupMenu() && !this._contextMenu.isOpen) ++ _openMenu(this._contextMenu); ++ return GLib.SOURCE_REMOVE; ++ }); ++ } ++ ++ _removeLongPressTimeout() { ++ if (!this._longPressTimeoutId) ++ return; ++ GLib.source_remove(this._longPressTimeoutId); ++ delete this._longPressTimeoutId; ++ } ++ ++ vfunc_button_press_event(buttonEvent) { ++ if (buttonEvent.button === 1) ++ this._setLongPressTimeout(); ++ return super.vfunc_button_press_event(buttonEvent); ++ } ++ ++ vfunc_button_release_event(buttonEvent) { ++ this._removeLongPressTimeout(); ++ ++ return super.vfunc_button_release_event(buttonEvent); ++ } ++ ++ vfunc_touch_event(touchEvent) { ++ if (touchEvent.type === Clutter.EventType.TOUCH_BEGIN) ++ this._setLongPressTimeout(); ++ else if (touchEvent.type === Clutter.EventType.TOUCH_END) ++ this._removeLongPressTimeout(); ++ return super.vfunc_touch_event(touchEvent); ++ } ++ + activate() { + if (this.active) + return; +-- +2.36.1 + diff --git a/SPECS/gnome-shell-extensions.spec b/SPECS/gnome-shell-extensions.spec new file mode 100644 index 0000000..c418984 --- /dev/null +++ b/SPECS/gnome-shell-extensions.spec @@ -0,0 +1,1169 @@ +%global major_version %%(cut -d "." -f 1 <<<%{version}) +# Minimum GNOME Shell version supported +%global min_gs_version %%(cut -d "." -f 1-3 <<<%{version}) + +%global pkg_prefix gnome-shell-extension +%global tarball_version %%(echo %{version} | tr '~' '.') + +Name: gnome-shell-extensions +Version: 40.7 +Release: 7%{?dist} +Summary: Modify and extend GNOME Shell functionality and behavior + +License: GPLv2+ +URL: http://wiki.gnome.org/Projects/GnomeShell/Extensions +Source0: http://ftp.gnome.org/pub/GNOME/sources/%{name}/%{major_version}/%{name}-%{tarball_version}.tar.xz + +BuildRequires: meson +BuildRequires: git +BuildRequires: gettext >= 0.19.6 +Requires: gnome-shell >= %{min_gs_version} +BuildArch: noarch + +Patch001: 0001-Update-style.patch +Patch002: 0001-apps-menu-add-logo-icon-to-Applications-menu.patch +Patch003: add-extra-extensions.patch +Patch004: 0001-apps-menu-Explicitly-set-label_actor.patch +Patch005: resurrect-system-monitor.patch +Patch006: 0001-Include-top-icons-in-classic-session.patch +Patch007: 0001-desktop-icons-Update-Japanese-translation.patch +Patch008: desktop-icons-40-fixes.patch +Patch009: 0001-top-icons-Don-t-use-wm_class-as-role.patch +Patch010: 0001-heads-up-display-Add-extension-for-showing-persisten.patch +Patch011: 0001-Add-gesture-inhibitor-extension.patch +Patch012: gnome-classic-wayland.patch +Patch013: 0001-desktop-icons-Fix-stuck-grab-issue-with-rubber-bandi.patch +Patch014: window-list-touch.patch +Patch015: 0001-classification-banner-Handle-fullscreen-monitors.patch +Patch016: 0001-desktop-icons-Don-t-grab-focus-on-click.patch +Patch017: 0001-desktopManager-Hook-into-LayoutManager-to-create-gri.patch +Patch018: 0001-gesture-inhibitor-Allow-inhibiting-workspace-switch-.patch +Patch019: 0001-desktop-icons-Don-t-use-blocking-IO.patch +Patch020: 0001-window-list-Explicitly-dispose-settings-on-destroy.patch + +%description +GNOME Shell Extensions is a collection of extensions providing additional and +optional functionality to GNOME Shell. + +Enabled extensions: + * apps-menu + * auto-move-windows + * classification-banner + * custom-menu + * dash-to-dock + * desktop-icons + * drive-menu + * gesture-inhibitor + * launch-new-instance + * heads-up-display + * native-window-placement + * panel-favorites + * places-menu + * screenshot-window-sizer + * top-icons + * updates-dialog + * user-theme + * window-list + * windowsNavigator + * workspace-indicator + + +%package -n %{pkg_prefix}-common +Summary: Files common to GNOME Shell Extensions +License: GPLv2+ +Requires: gnome-shell >= %{min_gs_version} +Obsoletes: %{pkg_prefix}-horizontal-workspaces < 40.0~alpha.1-3 + +%description -n %{pkg_prefix}-common +GNOME Shell Extensions is a collection of extensions providing additional and +optional functionality to GNOME Shell. + +This package provides common data files shared by various extensions. + + +%package -n gnome-classic-session +Summary: GNOME "classic" mode session +License: GPLv2+ +Requires: %{pkg_prefix}-apps-menu = %{version}-%{release} +Requires: %{pkg_prefix}-desktop-icons = %{version}-%{release} +Requires: %{pkg_prefix}-launch-new-instance = %{version}-%{release} +Requires: %{pkg_prefix}-places-menu = %{version}-%{release} +Requires: %{pkg_prefix}-window-list = %{version}-%{release} +Requires: nautilus + +%description -n gnome-classic-session +This package contains the required components for the GNOME Shell "classic" +mode, which aims to provide a GNOME 2-like user interface. + + +%package -n %{pkg_prefix}-apps-menu +Summary: Application menu for GNOME Shell +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} +Requires: gnome-menus + +%description -n %{pkg_prefix}-apps-menu +This GNOME Shell extension adds a GNOME 2.x style menu for applications. + + +%package -n %{pkg_prefix}-auto-move-windows +Summary: Assign specific workspaces to applications in GNOME Shell +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-auto-move-windows +This GNOME Shell extension enables easy workspace management. A specific +workspace can be assigned to each application as soon as it creates a window, in +a manner configurable with a GSettings key. + + +%package -n %{pkg_prefix}-classification-banner +Summary: Display classification level banner in GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-classification-banner +This GNOME Shell extension adds a banner that displays the classification level. + + +%package -n %{pkg_prefix}-custom-menu +Summary: Add a custom menu to the desktop +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-custom-menu +This GNOME Shell extension adds a custom menu to the desktop background. + + +%package -n %{pkg_prefix}-dash-to-dock +Summary: Show the dash outside the activities overview +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-dash-to-dock +This GNOME Shell extension makes the dash available outside the activities overview. + + +%package -n %{pkg_prefix}-desktop-icons +Summary: Desktop icons support for the classic experience +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-desktop-icons +This GNOME Shell extension adds desktop icons support as seen in GNOME 2 + + +%package -n %{pkg_prefix}-drive-menu +Summary: Drive status menu for GNOME Shell +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-drive-menu +This GNOME Shell extension provides a panel status menu for accessing and +unmounting removable devices. + + +%package -n %{pkg_prefix}-gesture-inhibitor +Summary: Gesture inhibitor +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-gesture-inhibitor +This GNOME Shell extension allows disabling the default desktop gestures. + + +%package -n %{pkg_prefix}-launch-new-instance +Summary: Always launch a new application instance for GNOME Shell +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-launch-new-instance +This GNOME Shell extension modifies the behavior of clicking in the dash and app +launcher to always launch a new application instance. + + +%package -n %{pkg_prefix}-heads-up-display +Summary: Display persistent on-screen message +Group: User Interface/Desktops +License: GPLv3+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-heads-up-display +This GNOME Shell extension displays a persistent message in the top middle of the screen. +This message can appear on the login screen, lock screen, or regular user session. + + +%package -n %{pkg_prefix}-native-window-placement +Summary: Native window placement for GNOME Shell +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-native-window-placement +This GNOME Shell extension provides additional configurability for the window +layout in the overview, including a mechanism similar to KDE4. + + +%package -n %{pkg_prefix}-panel-favorites +Summary: Favorite launchers in GNOME Shell's top bar +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-panel-favorites +This GNOME Shell extension adds favorite launchers to the top bar. + + +%package -n %{pkg_prefix}-places-menu +Summary: Places status menu for GNOME Shell +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-places-menu +This GNOME Shell extension add a system status menu for quickly navigating +places in the system. + + +%package -n %{pkg_prefix}-screenshot-window-sizer +Summary: Screenshot window sizer for GNOME Shell +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-screenshot-window-sizer +This GNOME Shell extension allows to easily resize windows for GNOME Software +screenshots. + + +%package -n %{pkg_prefix}-systemMonitor +Summary: System Monitor for GNOME Shell +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-systemMonitor +This GNOME Shell extension is a message tray indicator for CPU and memory usage + + +%package -n %{pkg_prefix}-top-icons +Summary: Show legacy icons on top +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-top-icons +This GNOME Shell extension moves legacy tray icons into the top bar + + +%package -n %{pkg_prefix}-updates-dialog +Summary: Show a modal dialog when there are software updates +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-updates-dialog +This GNOME Shell extension shows a modal dialog when there are software updates + + +%package -n %{pkg_prefix}-user-theme +Summary: Support for custom themes in GNOME Shell +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-user-theme +This GNOME Shell extension enables loading a GNOME Shell theme from +~/.themes//gnome-shell/. + + +%package -n %{pkg_prefix}-window-list +Summary: Display a window list at the bottom of the screen in GNOME Shell +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-window-list +This GNOME Shell extension displays a window list at the bottom of the screen. + + +%package -n %{pkg_prefix}-windowsNavigator +Summary: Support for keyboard selection of windows and workspaces in GNOME Shell +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-windowsNavigator +This GNOME Shell extension enables keyboard selection of windows and workspaces +in overlay mode, by pressing the Alt and Ctrl key respectively. + + +%package -n %{pkg_prefix}-workspace-indicator +Summary: Workspace indicator for GNOME Shell +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-workspace-indicator +This GNOME Shell extension add a system status menu for quickly changing +workspaces. + + +%prep +%autosetup -S git -n %{name}-%{tarball_version} + + +%build +%meson -Dextension_set="all" -Dclassic_mode=true +%meson_build + + +%install +%meson_install + +%find_lang %{name} + + +%files -n %{pkg_prefix}-common -f %{name}.lang +%doc NEWS README.md +%license COPYING + + +%files -n gnome-classic-session +%{_datadir}/gnome-shell/modes/classic.json +%{_datadir}/gnome-shell/theme/*.svg +%{_datadir}/gnome-shell/theme/gnome-classic-high-contrast.css +%{_datadir}/gnome-shell/theme/gnome-classic.css +%{_datadir}/xsessions/gnome-classic.desktop +%{_datadir}/xsessions/gnome-classic-xorg.desktop +%{_datadir}/wayland-sessions/gnome-classic.desktop +%{_datadir}/wayland-sessions/gnome-classic-wayland.desktop +%{_datadir}/glib-2.0/schemas/00_org.gnome.shell.extensions.classic.gschema.override + +%files -n %{pkg_prefix}-apps-menu +%{_datadir}/gnome-shell/extensions/apps-menu*/ + + +%files -n %{pkg_prefix}-auto-move-windows +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.auto-move-windows.gschema.xml +%{_datadir}/gnome-shell/extensions/auto-move-windows*/ + + +%files -n %{pkg_prefix}-classification-banner +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.classification-banner.gschema.xml +%{_datadir}/gnome-shell/extensions/classification-banner*/ + + +%files -n %{pkg_prefix}-custom-menu +%{_datadir}/gnome-shell/extensions/custom-menu*/ + + +%files -n %{pkg_prefix}-dash-to-dock +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.dash-to-dock.gschema.xml +%{_datadir}/gnome-shell/extensions/dash-to-dock*/ + + +%files -n %{pkg_prefix}-desktop-icons +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml +%{_datadir}/gnome-shell/extensions/desktop-icons*/ + + +%files -n %{pkg_prefix}-drive-menu +%{_datadir}/gnome-shell/extensions/drive-menu*/ + + +%files -n %{pkg_prefix}-gesture-inhibitor +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml +%{_datadir}/gnome-shell/extensions/gesture-inhibitor*/ + + +%files -n %{pkg_prefix}-launch-new-instance +%{_datadir}/gnome-shell/extensions/launch-new-instance*/ + + +%files -n %{pkg_prefix}-heads-up-display +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.heads-up-display.gschema.xml +%{_datadir}/gnome-shell/extensions/heads-up-display*/ + + +%files -n %{pkg_prefix}-native-window-placement +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.native-window-placement.gschema.xml +%{_datadir}/gnome-shell/extensions/native-window-placement*/ + + +%files -n %{pkg_prefix}-panel-favorites +%{_datadir}/gnome-shell/extensions/panel-favorites*/ + + +%files -n %{pkg_prefix}-places-menu +%{_datadir}/gnome-shell/extensions/places-menu*/ + + +%files -n %{pkg_prefix}-screenshot-window-sizer +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml +%{_datadir}/gnome-shell/extensions/screenshot-window-sizer*/ + + +%files -n %{pkg_prefix}-systemMonitor +%{_datadir}/gnome-shell/extensions/systemMonitor*/ + + +%files -n %{pkg_prefix}-top-icons +%{_datadir}/gnome-shell/extensions/top-icons*/ + + +%files -n %{pkg_prefix}-updates-dialog +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.updates-dialog.gschema.xml +%{_datadir}/gnome-shell/extensions/updates-dialog*/ + + +%files -n %{pkg_prefix}-user-theme +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.user-theme.gschema.xml +%{_datadir}/gnome-shell/extensions/user-theme*/ + + +%files -n %{pkg_prefix}-window-list +%{_datadir}/gnome-shell/extensions/window-list*/ +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.window-list.gschema.xml + + +%files -n %{pkg_prefix}-windowsNavigator +%{_datadir}/gnome-shell/extensions/windowsNavigator*/ + + +%files -n %{pkg_prefix}-workspace-indicator +%{_datadir}/gnome-shell/extensions/workspace-indicator*/ + + +%changelog +* Fri Apr 14 2023 MSVSphere Packaging Team - 40.7-7 +- Rebuilt for MSVSphere 9.2 beta + +* Wed Feb 15 2023 Florian Müllner - 40.7-7 +- Fix crash on `dconf update` + Resolves: #2170067 + +* Wed Jan 18 2023 Florian Müllner - 40.7-6 +- Avoid blocking IO in desktop-icons + Resolves: #2162019 + +* Thu Jan 12 2023 Florian Müllner - 40.7-5 +- Add custom-menu extension + Resolves: #2160553 + +* Wed Dec 14 2022 Florian Müllner - 40.7-4 +- Adjust classification banner position in fullscreen + Resolves: #2153524 +- Don't grab focus when clicking desktop grid + Resolves: #2150001 +- Make desktop icons resilient to background reloads + Resolves: #2139895 +- Allow disabling workspace switch gesture + Resolves: #2154358 + +* Wed Jun 22 2022 Florian Müllner - 40.7-3 +- Improve window-list on touch + Resolves: #2099286 + +* Fri May 13 2022 Florian Müllner - 40.7-2 +- Require desktop-icons for classic session + Resolves: #2047697 + +* Wed Apr 13 2022 Florian Müllner - 40.7-1 +- Update to 40.7 + Resolves: #2066168 + +* Tue Feb 22 2022 Florian Müllner - 40.6-1 +- Update to 40.6 + Resolves: #2056410 + +* Tue Dec 14 2021 Florian Müllner - 40.5-4 +- Allow classification banners on lock/login screen + Resolves: #2031186 + +* Tue Dec 14 2021 Florian Müllner - 40.5-3 +- Fix classification-banner preferences + Resolves: #2031186 + +* Tue Dec 14 2021 Florian Müllner - 40.5-2 +- Add classification-banner + Resolves: #2031186 + +* Mon Dec 13 2021 Florian Müllner - 40.5-1 +- Update to 40.5 + Resolves: #2031654 + +* Tue Nov 30 2021 Florian Müllner - 40.4-8 +- Fix on-screen keyboard when showing window-list + Resolves: #2019866 + +* Thu Nov 18 2021 Florian Müllner - 40.4-7 +- Prevent gnome-shell from re-enabling inhibited gestures + Resolves: #2013196 + +* Mon Nov 08 2021 Jonas Ådahl - 40.4-6 +- Fix stuck grab on desktop-icons + Resolves: #2019715 + +* Fri Oct 29 2021 Neal Gompa - 40.4-5 +- Backport GNOME Classic session for Wayland + Resolves: #2015914 + +* Wed Oct 20 2021 Florian Müllner - 40.4-4 +- Adjust gesture-inhibitor extension to GNOME 40 changes + Resolves: #2013196 + +* Wed Oct 20 2021 Florian Müllner - 40.4-3 +- Add gesture-inhibitor extension + Resolves: #2013196 + +* Mon Sep 27 2021 Ray Strode - 40.4-2 +- Add extension for displaying heads up message + Related: #2006985 + +* Mon Aug 23 2021 Florian Müllner - 40.4-1 +- Update to 40.4 + Resolves: #1995095 + +* Mon Aug 09 2021 Mohan Boddu - 40.3-2 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Mon Jul 19 2021 Florian Müllner - 40.3-1 +- Update to 40.3 + Resolves: #1983551 + +* Tue Jun 15 2021 Florian Müllner - 40.2-1 +- Update to 40.2 + Resolves: #1971431 + +* Thu Jun 03 2021 Florian Müllner - 40.1-4 +- Don't use status icon wm_class as top bar role + Resolves: #1967259 + +* Wed May 26 2021 Florian Müllner - 40.1-3 +- Fix various issues in downstream patches + Resolves: #1932261 + +* Mon May 24 2021 Florian Müllner - 40.1-2 +- Rebase downstream patches + Resolves: #1932261 + +* Mon May 17 2021 Florian Müllner - 40.1-1 +- Update to 40.1 + Resolves: #1951132 + +* Thu Apr 15 2021 Mohan Boddu - 40.0-2 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Sat Mar 20 2021 Florian Müllner - 40.0-1 +- Update to 40.0 + +* Mon Mar 15 2021 Florian Müllner - 40.rc-1 +- Update to 40.rc + +* Wed Feb 24 2021 Florian Müllner - 40.beta-1 +- Update to 40.beta + +* Thu Feb 18 2021 Kalev Lember - 40.0~alpha.1-6.20210212git9fa522c +- Fix typo in horizontal-workspaces obsoletes package name + +* Thu Feb 18 2021 Kalev Lember - 40.0~alpha.1-5.20210212git9fa522c +- Fix obsoletes version + +* Mon Feb 15 2021 Mohamed El Morabity - 40.0~alpha.1-4.20210212git9fa522c +- Add Obsoletes for horizontal-workspaces extension to fix upgrades to Fedora 34 + (RHBZ #1928415) + +* Fri Feb 12 2021 Florian Müllner - 40.0~alpha.1-3.20210212git9fa522c +- Build snapshot of current upstream +- Drop horizontal-workspaces subpackage + (removed upstream, because horizontal workspaces are the default now) + +* Tue Jan 26 2021 Fedora Release Engineering - 40.0~alpha.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Fri Jan 15 2021 Florian Müllner - 40.0~alpha.1-1 +- Update to 40.alpha.1 + +* Wed Dec 02 2020 Florian Müllner - 40.0~alpha-1 +- Update to 40.alpha + +* Mon Oct 05 2020 Florian Müllner - 3.38.1-1 +- Update to 3.38.1 + +* Mon Sep 14 2020 Florian Müllner - 3.38.0-1 +- Update to 3.38.0 + +* Sun Sep 06 2020 Florian Müllner - 3.37.92-1 +- Update to 3.37.92 + +* Mon Aug 24 2020 Florian Müllner - 3.37.91-1 +- Update to 3.37.91 + +* Wed Aug 19 2020 Kalev Lember - 3.37.90-2 +- Rebuild + +* Tue Aug 11 2020 Florian Müllner - 3.37.90-1 +- Update to 3.37.90 + +* Mon Jul 27 2020 Fedora Release Engineering - 3.37.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jul 07 2020 Florian Müllner - 3.37.3-1 +- Update to 3.37.3 + +* Wed Jun 03 2020 Florian Müllner - 3.37.2-1 +- Update to 3.37.2 + +* Thu Apr 30 2020 Florian Müllner - 3.37.1-1 +- Update to 3.37.1 + +* Tue Mar 31 2020 Florian Müllner - 3.36.1-1 +- Update to 3.36.1 + +* Sat Mar 07 2020 Florian Müllner - 3.36.0-1 +- Update to 3.36.0 + +* Sun Mar 01 2020 Florian Müllner - 3.35.92-1 +- Update to 3.35.92 + +* Tue Feb 18 2020 Florian Müllner - 3.35.91-1 +- Update to 3.35.91 + +* Thu Feb 06 2020 Florian Müllner - 3.35.90-1 +- Update to 3.35.90 + +* Tue Jan 28 2020 Fedora Release Engineering - 3.35.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Sun Jan 05 2020 Florian Müllner - 3.35.3-1 +- Update to 3.35.3 + +* Wed Dec 11 2019 Florian Müllner - 3.35.2-1 +- Update to 3.35.2 + +* Wed Oct 09 2019 Florian Müllner - 3.34.1-1 +- Update to 3.34.1 + +* Wed Sep 25 2019 Debarshi Ray - 3.34.0-2 +- Unbreak the 'classic' GNOME session + +* Mon Sep 09 2019 Florian Müllner - 3.34.0-1 +- Update to 3.34.0 + +* Wed Sep 04 2019 Florian Müllner - 3.33.92-1 +- Update to 3.33.92 + +* Wed Aug 21 2019 Florian Müllner - 3.33.91-1 +- Update to 3.33.91 + +* Sat Aug 10 2019 Florian Müllner - 3.33.90-1 +- Update to 3.33.90 + +* Thu Jul 25 2019 Fedora Release Engineering - 3.33.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sat Jul 20 2019 Florian Müllner - 3.33.4-1 +- Update to 3.33.4 + +* Mon Jun 24 2019 Florian Müllner - 3.33.3-1 +- Update to 3.33.3 + +* Wed May 22 2019 Florian Müllner - 3.33.2-1 +- Update to 3.33.2 + +* Tue May 14 2019 Florian Müllner - 3.33.1-1 +- Update to 3.33.1 + +* Wed Apr 17 2019 Florian Müllner - 3.32.1-1 +- Update to 3.32.1 + +* Tue Mar 12 2019 Florian Müllner - 3.32.0-1 +- Update to 3.32.0 + +* Tue Mar 05 2019 Florian Müllner - 3.31.92-1 +- Update to 3.31.92 + +* Thu Feb 21 2019 Florian Müllner - 3.31.91-1 +- Update to 3.31.91 + +* Thu Feb 07 2019 Florian Müllner - 3.31.90-1 +- Update to 3.31.90 + +* Thu Jan 31 2019 Fedora Release Engineering - 3.31.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Nov 21 2018 Mohamed El Morabity - 3.31.2-2 +- Fix alternate-tab extension Obsoletes tag (RHBZ #1650519) + +* Wed Nov 14 2018 Florian Müllner - 3.31.2-1 +- Update to 3.31.2 + +* Mon Oct 08 2018 Florian Müllner - 3.30.1-1 +- Update to 3.30.1 + +* Tue Sep 04 2018 Florian Müllner - 3.30.0-1 +- Update to 3.30.0 + +* Mon Aug 20 2018 Florian Müllner - 3.29.91-1 +- Update to 3.29.91 + +* Wed Aug 01 2018 Florian Müllner - 3.29.90-1 +- Update to 3.29.90 + +* Fri Jul 13 2018 Fedora Release Engineering - 3.29.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu May 24 2018 Florian Müllner - 3.29.2-1 +- Update to 3.29.2 + +* Fri Apr 13 2018 Florian Müllner - 3.28.1-1 +- Update to 3.28.1 + +* Mon Mar 12 2018 Florian Müllner - 3.28.0-1 +- Update to 3.28.0 + +* Mon Mar 05 2018 Florian Müllner - 3.27.92-1 +- Update to 3.27.92 + +* Thu Feb 22 2018 Florian Müllner - 3.27.91-1 +- Update to 3.27.91 + +* Wed Feb 07 2018 Fedora Release Engineering - 3.27.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Jan 06 2018 Igor Gnatenko - 3.27.1-2 +- Remove obsolete scriptlets + +* Tue Oct 17 2017 Florian Müllner - 3.27.1-1 +- Update to 3.27.1 + +* Wed Oct 04 2017 Florian Müllner - 3.26.1-1 +- Update to 3.26.1 + +* Tue Sep 12 2017 Florian Müllner - 3.26.0-1 +- Update to 3.26.0 + +* Tue Aug 22 2017 Florian Müllner - 3.25.91-1 +- Update to 3.25.91 + +* Fri Aug 11 2017 Kevin Fenzi - 3.25.90-2 +- Rebuild with older working rpm + +* Thu Aug 10 2017 Florian Müllner - 3.25.90-1 +- Update to 3.25.90 + +* Wed Jul 26 2017 Fedora Release Engineering - 3.25.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Thu Jul 20 2017 Florian Müllner - 3.25.4-1 +- Update to 3.25.4 + +* Wed Jun 21 2017 Florian Müllner - 3.25.3-1 +- Update to 3.25.3 + +* Thu May 25 2017 Florian Müllner - 3.25.2-1 +- Update to 3.25.2 + +* Thu Apr 27 2017 Florian Müllner - 3.25.1-1 +- Update to 3.25.1 + +* Tue Apr 11 2017 Florian Müllner - 3.24.1-1 +- Update to 3.24.1 + +* Mon Mar 20 2017 Florian Müllner - 3.24.0-1 +- Update to 3.24.0 + +* Tue Mar 14 2017 Florian Müllner - 3.23.92-1 +- Update to 3.23.92 + +* Wed Mar 01 2017 Florian Müllner - 3.23.91-1 +- Update to 3.23.91 + +* Thu Feb 16 2017 Florian Müllner - 3.23.90-1 +- Update to 3.23.90 + +* Fri Feb 10 2017 Fedora Release Engineering - 3.23.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Nov 23 2016 Florian Müllner - 3.23.2-1 +- Update to 3.23.2 + +* Tue Oct 11 2016 Florian Müllner - 3.22.1-1 +- Update to 3.22.1 + +* Mon Sep 19 2016 Florian Müllner - 3.22.0-1 +- Update to 3.22.0 + +* Tue Sep 13 2016 Florian Müllner - 3.21.92-1 +- Update to 3.21.92 + +* Tue Aug 30 2016 Florian Müllner - 3.21.91-1 +- Update to 3.21.91 + +* Fri Aug 19 2016 Florian Müllner - 3.21.90-1 +- Update to 3.21.90 + +* Wed Jul 20 2016 Florian Müllner - 3.21.4-1 +- Update to 3.21.4 + +* Tue Jun 21 2016 Florian Müllner - 3.21.3-1 +- Update to 3.21.3 + +* Fri May 27 2016 Florian Müllner - 3.21.2-1 +- Update to 3.21.2 + +* Tue May 10 2016 Florian Müllner - 3.20.1-1 +- Update to 3.20.1 + +* Tue Mar 22 2016 Florian Müllner - 3.20.0-1 +- Update to 3.20.0 + +* Wed Mar 16 2016 Florian Müllner - 3.19.92-1 +- Update to 3.19.92 + +* Thu Mar 03 2016 Florian Müllner - 3.19.91-1 +- Update to 3.19.91 + +* Fri Feb 19 2016 Florian Müllner - 3.19.90-1 +- Update to 3.19.90 + +* Wed Feb 03 2016 Fedora Release Engineering - 3.19.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jan 21 2016 Florian Müllner - 3.19.4-1 +- Update to 3.19.4 + +* Thu Dec 17 2015 Florian Müllner - 3.19.3-1 +- Update to 3.19.3 + +* Wed Nov 25 2015 Florian Müllner - 3.19.2-1 +- Update to 3.19.2 + +* Thu Oct 29 2015 Florian Müllner - 3.19.1-1 +- Update to 3.19.1 + +* Thu Oct 15 2015 Florian Müllner - 3.18.1-1 +- Update to 3.18.1 + +* Mon Sep 21 2015 Florian Müllner - 3.18.0-1 +- Update to 3.18.0 + +* Wed Sep 16 2015 Florian Müllner - 3.17.92-1 +- Update to 3.17.92 + +* Thu Sep 03 2015 Florian Müllner - 3.17.91-1 +- Update to 3.17.91 + +* Thu Aug 20 2015 Florian Müllner - 3.17.90-1 +- Update to 3.17.90 + +* Wed Aug 19 2015 Kalev Lember - 3.17.4-2 +- Don't own /usr/share/gnome-shell/extensions directory: now part of + gnome-shell package + +* Thu Jul 23 2015 Florian Müllner - 3.17.4-1 +- Update to 3.17.4 + +* Thu Jul 02 2015 Florian Müllner - 3.17.3-1 +- Update to 3.17.3 + +* Wed Jun 17 2015 Fedora Release Engineering - 3.17.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed May 27 2015 Florian Müllner - 3.17.2-1 +- Update to 3.17.2 + +* Fri May 01 2015 Kalev Lember - 3.17.1-2 +- Add glib-compile-schemas rpm scripts for screenshot-window-sizer + +* Thu Apr 30 2015 Florian Müllner - 3.17.1-1 +- Update to 3.17.1 + +* Tue Apr 14 2015 Florian Müllner - 3.16.1-1 +- Update to 3.16.1 + +* Mon Mar 23 2015 Florian Müllner - 3.16.0-1 +- Update to 3.16.0 + +* Tue Mar 17 2015 Florian Müllner - 3.15.92-1 +- Update to 3.15.92 + +* Thu Mar 05 2015 Kalev Lember - 3.15.91-2 +- Obsolete the systemMonitor extension that was dropped in 3.15.91 + +* Thu Mar 05 2015 Florian Müllner - 3.15.91-1 +- Update to 3.15.91 + +* Fri Feb 20 2015 Florian Müllner - 3.15.90-1 +- Update to 3.15.90 + +* Wed Jan 21 2015 Florian Müllner - 3.15.4-1 +- Update to 3.15.4 + +* Fri Dec 19 2014 Florian Müllner - 3.15.3.1-1 +- Update to 3.15.3.1 + +* Fri Dec 19 2014 Florian Müllner - 3.15.3-1 +- Update to 3.15.3 + +* Thu Nov 27 2014 Florian Müllner - 3.15.2-1 +- Update to 3.15.2 + +* Thu Oct 30 2014 Florian Müllner - 3.15.1-1 +- Update to 3.15.1 + +* Tue Oct 14 2014 Florian Müllner - 3.14.1-1 +- Update to 3.14.1 + +* Mon Sep 22 2014 Florian Müllner - 3.14.0-1 +- Update to 3.14.0 + +* Wed Sep 17 2014 Florian Müllner - 3.13.92-1 +- Update to 3.13.92 + +* Wed Sep 03 2014 Florian Müllner - 3.13.91-1 +- Update to 3.13.91 + +* Wed Aug 20 2014 Mohamed El Morabity - 3.13.90-1 +- Update to 3.13.90 + +* Thu Jul 24 2014 Kalev Lember - 3.13.4-1 +- Update to 3.13.4 + +* Thu Jun 26 2014 Richard Hughes - 3.13.3-1 +- Update to 3.13.3 + +* Sat Jun 07 2014 Fedora Release Engineering - 3.13.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Wed May 28 2014 Mohamed El Morabity - 3.13.2-1 +- Update to 3.13.2 + +* Fri May 02 2014 Kalev Lember - 3.13.1-1 +- Update to 3.13.1 + +* Tue Mar 25 2014 Richard Hughes - 3.12.0-1 +- Update to 3.12.0 + +* Thu Mar 20 2014 Mohamed El Morabity - 3.11.92-1 +- Update to 3.11.92 + +* Thu Mar 06 2014 Mohamed El Morabity - 3.11.91-1 +- Update to 3.11.91 + +* Thu Feb 20 2014 Mohamed El Morabity - 3.11.90-1 +- Update to 3.11.90 + +* Wed Feb 05 2014 Mohamed El Morabity - 3.11.5-1 +- Update to 3.11.5 + +* Mon Feb 03 2014 Mohamed El Morabity - 3.11.4-1 +- Update to 3.11.4 + +* Sun Dec 22 2013 Mohamed El Morabity - 3.11.3-1 +- Update to 3.11.3 + +* Wed Nov 13 2013 Mohamed El Morabity - 3.11.2-1 +- Update to 3.11.2 + +* Wed Oct 16 2013 Mohamed El Morabity - 3.10.1-1 +- Update to 3.10.1 + +* Tue Sep 24 2013 Mohamed El Morabity - 3.10.0-1 +- Update to 3.10.0 + +* Tue Sep 17 2013 Mohamed El Morabity - 3.9.92-1 +- Update to 3.9.92 + +* Tue Sep 03 2013 Mohamed El Morabity - 3.9.91-1 +- Update to 3.9.91 + +* Thu Aug 22 2013 Mohamed El Morabity - 3.9.90-1 +- Update to 3.9.90 +- Drop xrand-indicator subpackage, no longer provided upstream + +* Mon Aug 12 2013 Mohamed El Morabity - 3.9.5-3 +- Fix alternative-status-menu subpackage obsoleting + +* Mon Aug 12 2013 Nils Philippsen - 3.9.5-2 +- obsolete alternative-status-menu subpackage to allow smooth upgrades + +* Sun Aug 04 2013 Mohamed El Morabity - 3.9.5-1 +- Update to 3.9.5 +- Drop alternative-status-menu subpackage, no longer provided upstream + +* Sat Aug 03 2013 Fedora Release Engineering - 3.9.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Thu Jun 20 2013 Rahul Sundaram - 3.9.3-1 +- Update to 3.9.3 +- Obsolete default-min-max and static workspaces extensions +- Use make_install macro +- Fix bogus dates in spec changelog + +* Tue May 28 2013 Mohamed El Morabity - 3.9.2-1 +- Update to 3.9.2 + +* Fri May 10 2013 Mohamed El Morabity - 3.9.1-1 +- Update to 3.9.1 + +* Fri May 10 2013 Kalev Lember - 3.8.1-3 +- Obsolete gnome-applet-sensors + +* Wed May 01 2013 Kalev Lember - 3.8.1-2 +- Obsolete a few more fallback mode packages +- Remove gnome-panel provides + +* Tue Apr 16 2013 Matthias Clasen - 3.8.1-1 +- Update to 3.8.1 + +* Tue Mar 26 2013 Mohamed El Morabity - 3.8.0-1 +- Update to 3.8.0 + +* Tue Mar 19 2013 Ray Strode 3.7.92-1 +- Update to 3.7.92 + +* Tue Mar 05 2013 Mohamed El Morabity - 3.7.91-1 +- Update to 3.7.91 + +* Sat Mar 02 2013 Adel Gadllah - 3.7.90-2 +- Obsolete gnome-panel + +* Fri Feb 22 2013 Kalev Lember - 3.7.90-1 +- Update to 3.7.90 + +* Thu Feb 07 2013 Kalev Lember - 3.7.5.1-2 +- Depend on gnome-shell 3.7.5, there's no 3.7.5.1 + +* Thu Feb 07 2013 Mohamed El Morabity - 3.7.5.1-1 +- Update to 3.7.5 +- Enable new launch-new-instance and window-list extensions, and add them in the + classic-mode extension set +- Re-add places-menu in the classic-mode extension set + +* Wed Jan 16 2013 Mohamed El Morabity - 3.7.4-1 +- Update to 3.7.4 +- places-menu extension no longer part of the classic-mode extension set + +* Tue Jan 01 2013 Mohamed El Morabity - 3.7.3-1 +- Update to 3.7.3 +- Enable new default-min-max and static-workspaces extensions +- Provide new subpackage gnome-classic-session +- Revamp summaries and descriptions + +* Tue Oct 30 2012 Mohamed El Morabity - 3.7.1-1 +- Update to 3.7.1 +- Drop dock and gajim extensions, no longer provided + +* Tue Oct 30 2012 Mohamed El Morabity - 3.6.1-1 +- Update to 3.6.1 + +* Tue Oct 02 2012 Mohamed El Morabity - 3.6.0-1 +- Update to 3.6.0 + +* Thu Sep 06 2012 Mohamed El Morabity - 3.5.91-1 +- Update to 3.5.91 + +* Wed Aug 29 2012 Mohamed El Morabity - 3.5.90-1 +- Update to 3.5.90 + +* Sat Aug 11 2012 Mohamed El Morabity - 3.5.5-1 +- Update to 3.5.5 + +* Sun Jul 22 2012 Mohamed El Morabity - 3.5.4-1 +- Update to 3.5.4 + +* Wed Jul 18 2012 Mohamed El Morabity - 3.5.2-1 +- Update to 3.5.2 +- Drop useless Provides/Obsoletes + +* Sat Mar 24 2012 Mohamed El Morabity - 3.4.0-1 +- Update to 3.4.0 +- Minor spec fixes + +* Sat Mar 24 2012 Mohamed El Morabity - 3.3.92-1 +- Update to 3.3.92 + +* Tue Feb 28 2012 Mohamed El Morabity - 3.3.90-1 +- Update to 3.3.90 + +* Thu Feb 16 2012 Mohamed El Morabity - 3.3.5-1 +- Update to 3.3.5 +- Spec cleanup + +* Fri Jan 13 2012 Fedora Release Engineering - 3.3.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Wed Nov 30 2011 Mohamed El Morabity - 3.3.2-1 +- Update to 3.3.2 + +* Wed Nov 30 2011 Mohamed El Morabity - 3.2.1-1 +- Update to 3.2.1 +- Fix alternative-status-menu extension crash when login + +* Wed Nov 09 2011 Mohamed El Morabity - 3.2.0-2 +- Fix dock and alternate-tab extensions +- Fix GNOME Shell version to work with GS 3.2.1 + +* Mon Oct 03 2011 Mohamed El Morabity - 3.2.0-1 +- Update to 3.2.0 + +* Mon Sep 26 2011 Mohamed El Morabity - 3.1.91-3.20111001gite102c0c6 +- Update to a newer git snapshot +- Fix GNOME Shell version to work with GS 3.2.0 +- Add Requires on GS 3.2.0 or above to gnome-shell-common + +* Wed Sep 14 2011 Mohamed El Morabity - 3.1.91-2 +- Enable xrandr-indicator and workspace-indicator extensions + +* Mon Sep 12 2011 Michel Salim - 3.1.91-1 +- Update to 3.1.91 +- add more documentation + +* Thu Sep 1 2011 Michel Salim - 3.1.4-3.20110830git6b5e3a3e +- Update to git snapshot, for gnome-shell 3.1.90 + +* Sun Aug 21 2011 Michel Salim - 3.1.4-2 +- Enable apps-menu extension +- Spec cleanup + +* Sun Aug 21 2011 Michel Salim - 3.1.4-1 +- Update to 3.1.4 +- Enable systemMonitor extension +- Prepare xrandr-indicator, commenting out since it does not seem to work yet +- Rename subpackages in line with new guidelines (# 715367) +- Sort subpackages in alphabetical order + +* Sat May 28 2011 Timur Kristóf - 3.0.2-1.g63dd27cgit +- Update to a newer git snapshot +- Fix RHBZ bug #708230 +- Enabled systemMonitor extension, but commented out since the requirements are not available + +* Fri May 13 2011 Mohamed El Morabity - 3.0.1-3.03660fgit +- Update to a newer git snapshot +- Enable native-window-placement extension + +* Fri May 06 2011 Rahul Sundaram - 3.0.1-2b20cbagit +- Fix description + +* Thu May 5 2011 Elad Alfassa - 3.0.1-1.b20cbagit +- Update to a newer git snapshot +- Enabled the places-menu extension + +* Tue Apr 26 2011 Mohamed El Morabity - 3.0.1-1.f016b9git +- Update to a newer git snapshot (post-3.0.1 release) +- Enable drive-menu extension + +* Mon Apr 11 2011 Mohamed El Morabity - 3.0.0-5.6d56cfgit +- Enable auto-move-windows extension + +* Mon Apr 11 2011 Rahul Sundaram - 3.0.0-4.6d56cfgit +- Add glib2-devel as build requires + +* Mon Apr 11 2011 Rahul Sundaram - 3.0.0-3.6d56cfgit +- Tweak description +- Fix typo in configure + +* Mon Apr 11 2011 Rahul Sundaram - 3.0.0-2.6d56cfgit +- Added the user-theme extension +- Patch from Timur Kristóf + +* Fri Apr 08 2011 Rahul Sundaram - 3.0.0-1.6d56cfgit +- Make sure configure doesn't get called twice + +* Fri Apr 08 2011 Rahul Sundaram - 3.0.0-0.6d56cfgit +- Initial build