You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gnome-shell-extensions/SOURCES/add-extra-extensions.patch

68218 lines
2.1 MiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

From 6623a374036e0f2458d4b36e268f6e4dcc19a2d7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
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?= <fmuellner@gnome.org>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk" version="4.0"/>
+ <object class="GtkAdjustment" id="animation_time_adjustment">
+ <property name="upper">1</property>
+ <property name="step-increment">0.050000000000000003</property>
+ <property name="page-increment">0.25</property>
+ </object>
+ <object class="GtkBox" id="box_middle_click_options">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkFrame" id="frame_middle_click_options">
+ <property name="can_focus">0</property>
+ <property name="child">
+ <object class="GtkListBox" id="listbox_middle_click_options">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow11">
+ <property name="width_request">100</property>
+ <property name="height_request">80</property>
+ <property name="child">
+ <object class="GtkGrid" id="buitin_theme7">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_description4">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">When set to minimize, double clicking minimizes all the windows of the application.</property>
+ <property name="wrap">1</property>
+ <property name="max_width_chars">40</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_label4">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Shift+Click action</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="shift_click_action_combo">
+ <property name="can_focus">0</property>
+ <property name="valign">center</property>
+ <items>
+ <item translatable="yes">Raise window</item>
+ <item translatable="yes">Minimize window</item>
+ <item translatable="yes">Launch new instance</item>
+ <item translatable="yes">Cycle through windows</item>
+ <item translatable="yes">Minimize or overview</item>
+ <item translatable="yes">Show window previews</item>
+ <item translatable="yes">Minimize or show previews</item>
+ <item translatable="yes">Focus or show previews</item>
+ <item translatable="yes">Focus, minimize or show previews</item>
+ <item translatable="yes">Quit</item>
+ </items>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow_middle_click">
+ <property name="width_request">100</property>
+ <property name="height_request">80</property>
+ <property name="child">
+ <object class="GtkGrid" id="grid_middle_click">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="description_middle_click">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Behavior for Middle-Click.</property>
+ <property name="wrap">1</property>
+ <property name="max_width_chars">40</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_middle_click">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Middle-Click action</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="middle_click_action_combo">
+ <property name="can_focus">0</property>
+ <property name="valign">center</property>
+ <items>
+ <item translatable="yes">Raise window</item>
+ <item translatable="yes">Minimize window</item>
+ <item translatable="yes">Launch new instance</item>
+ <item translatable="yes">Cycle through windows</item>
+ <item translatable="yes">Minimize or overview</item>
+ <item translatable="yes">Show window previews</item>
+ <item translatable="yes">Minimize or show previews</item>
+ <item translatable="yes">Focus or show previews</item>
+ <item translatable="yes">Focus, minimize or show previews</item>
+ <item translatable="yes">Quit</item>
+ </items>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow_shift_middle_click">
+ <property name="width_request">100</property>
+ <property name="height_request">80</property>
+ <property name="child">
+ <object class="GtkGrid" id="grid_shift_middle_click">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="description_shift_middle_click">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Behavior for Shift+Middle-Click.</property>
+ <property name="wrap">1</property>
+ <property name="max_width_chars">40</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_shift_middle_click">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Shift+Middle-Click action</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="shift_middle_click_action_combo">
+ <property name="can_focus">0</property>
+ <property name="valign">center</property>
+ <items>
+ <item translatable="yes">Raise window</item>
+ <item translatable="yes">Minimize window</item>
+ <item translatable="yes">Launch new instance</item>
+ <item translatable="yes">Cycle through windows</item>
+ <item translatable="yes">Minimize or overview</item>
+ <item translatable="yes">Show window previews</item>
+ <item translatable="yes">Minimize or show previews</item>
+ <item translatable="yes">Focus or show previews</item>
+ <item translatable="yes">Focus, minimize or show previews</item>
+ <item translatable="yes">Quit</item>
+ </items>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="custom_opacity_adjustement">
+ <property name="upper">1</property>
+ <property name="step-increment">0.01</property>
+ <property name="page-increment">0.10</property>
+ </object>
+ <object class="GtkAdjustment" id="dock_size_adjustment">
+ <property name="lower">0.33</property>
+ <property name="upper">1</property>
+ <property name="step-increment">0.01</property>
+ <property name="page-increment">0.10</property>
+ </object>
+ <object class="GtkAdjustment" id="dot_border_width_adjustment">
+ <property name="upper">10</property>
+ <property name="step-increment">1</property>
+ <property name="page-increment">5</property>
+ </object>
+ <object class="GtkBox" id="running_dots_advance_settings_box">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="listbox7">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow10">
+ <property name="width_request">100</property>
+ <property name="height_request">80</property>
+ <property name="child">
+ <object class="GtkBox" id="dot_style_box">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkBox">
+ <property name="can_focus">0</property>
+ <property name="spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="unity_backlit_items_label">
+ <property name="hexpand">1</property>
+ <property name="can_focus">0</property>
+ <property name="valign">center</property>
+ <property name="label" translatable="yes">Enable Unity7 like glossy backlit items</property>
+
+ </object>
+ </child>
+ <child>
+ <object class="GtkSwitch" id="unity_backlit_items_switch">
+ <property name="valign">center</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="can_focus">0</property>
+ <child>
+ <object class="GtkLabel" id="dominant_color_label">
+ <property name="hexpand">1</property>
+ <property name="can_focus">0</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Use dominant color</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSwitch" id="dominant_color_switch"/>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid1">
+ <property name="can_focus">0</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkSwitch" id="dot_style_switch">
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Customize indicator style</property>
+ <property name="justify">fill</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="dot_style_settings_box">
+ <property name="can_focus">0</property>
+ <property name="margin_bottom">1</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkBox" id="dot_color_box">
+ <property name="can_focus">0</property>
+ <property name="spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="dot_color_label">
+ <property name="hexpand">1</property>
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Color</property>
+
+ </object>
+ </child>
+ <child>
+ <object class="GtkColorButton" id="dot_color_colorbutton">
+ <property name="receives_default">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="border_color_box">
+ <property name="can_focus">0</property>
+ <property name="spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="dot_border_color_label">
+ <property name="hexpand">1</property>
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Border color</property>
+
+ </object>
+ </child>
+ <child>
+ <object class="GtkColorButton" id="dot_border_color_colorbutton">
+ <property name="receives_default">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_boder_width_box">
+ <property name="can_focus">0</property>
+ <property name="spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="dot_border_width_label">
+ <property name="hexpand">1</property>
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Border width</property>
+
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="dot_border_width_spin_button">
+ <property name="adjustment">dot_border_width_adjustment</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="hide_timeout_adjustment">
+ <property name="upper">1</property>
+ <property name="step-increment">0.050000000000000003</property>
+ <property name="page-increment">0.25</property>
+ </object>
+ <object class="GtkAdjustment" id="icon_size_adjustment">
+ <property name="lower">16</property>
+ <property name="upper">128</property>
+ <property name="step-increment">1</property>
+ <property name="page-increment">10</property>
+ </object>
+ <object class="GtkNotebook" id="settings_notebook">
+ <property name="margin-start">6</property>
+ <property name="margin-end">6</property>
+ <property name="margin_top">6</property>
+ <property name="margin_bottom">6</property>
+ <child>
+ <object class="GtkNotebookPage">
+ <property name="child">
+ <object class="GtkBox" id="position_and_size">
+ <property name="can_focus">0</property>
+ <property name="margin-start">24</property>
+ <property name="margin-end">24</property>
+ <property name="margin_top">24</property>
+ <property name="margin_bottom">24</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">24</property>
+ <child>
+ <object class="GtkFrame" id="dock_display">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="dock_display_listbox">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="dock_monitor_listboxrow">
+ <property name="child">
+ <object class="GtkGrid" id="dock_monitor_grid">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="dock_monitor_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Show the dock on</property>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="dock_monitor_combo">
+ <property name="can_focus">0</property>
+ <property name="valign">center</property>
+ <signal name="changed" handler="dock_display_combo_changed_cb" />
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="multi_monitor_button">
+ <property name="label" translatable="yes">Show on all monitors.</property>
+ <property name="margin_top">12</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">2</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="dock_position_listboxrow">
+ <property name="width_request">100</property>
+ <property name="child">
+ <object class="GtkBox" id="dock_position_box">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="dock_position_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Position on screen</property>
+
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="dock_position_butttons_box">
+ <property name="can_focus">0</property>
+ <property name="spacing">32</property>
+ <child>
+ <object class="GtkCheckButton" id="position_left_button">
+ <property name="label" translatable="yes">Left</property>
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+
+ <signal name="toggled" handler="position_left_button_toggled_cb" />
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="position_bottom_button">
+ <property name="label" translatable="yes">Bottom</property>
+ <property name="halign">center</property>
+
+ <property name="group">position_left_button</property>
+ <signal name="toggled" handler="position_bottom_button_toggled_cb" />
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="position_top_button">
+ <property name="label" translatable="yes">Top</property>
+ <property name="halign">center</property>
+
+
+ <property name="group">position_left_button</property>
+ <signal name="toggled" handler="position_top_button_toggled_cb" />
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="position_right_button">
+ <property name="label" translatable="yes">Right</property>
+ <property name="valign">center</property>
+
+ <property name="group">position_left_button</property>
+ <signal name="toggled" handler="position_right_button_toggled_cb" />
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="intelligent_autohide_frame">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="listbox3">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow14">
+ <property name="width_request">100</property>
+ <property name="height_request">80</property>
+ <property name="child">
+ <object class="GtkGrid" id="intelligent_autohide_grid">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_description7">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Hide the dock when it obstructs a window of the current application. More refined settings are available.</property>
+ <property name="wrap">1</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_label8">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Intelligent autohide</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box3">
+ <property name="can_focus">0</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkButton" id="intelligent_autohide_button">
+ <property name="receives_default">1</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+
+ <child>
+ <object class="GtkImage" id="image">
+ <property name="can_focus">0</property>
+ <property name="icon_name">emblem-system-symbolic</property>
+ </object>
+ </child>
+ <style>
+ <class name="circular"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSwitch" id="intelligent_autohide_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="size_frame">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="size_listbox">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="dock_size_listboxrow">
+ <property name="width_request">100</property>
+ <property name="height_request">80</property>
+ <property name="child">
+ <object class="GtkGrid" id="dock_size_grid">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="dock_size_label">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Dock size limit</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScale" id="dock_size_scale">
+ <property name="draw-value">1</property>
+ <property name="valign">baseline</property>
+ <property name="hexpand">1</property>
+ <property name="adjustment">dock_size_adjustment</property>
+ <property name="round_digits">0</property>
+ <property name="digits">2</property>
+ <property name="value_pos">right</property>
+ <signal name="value-changed" handler="dock_size_scale_value_changed_cb" />
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="dock_size_extend_checkbutton">
+ <property name="label" translatable="yes">Panel mode: extend to the screen edge</property>
+ <property name="margin_top">12</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="icon_size_listboxrow">
+ <property name="child">
+ <object class="GtkGrid" id="icon_size_grid">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_label6">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Icon size limit</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScale" id="icon_size_scale">
+ <property name="draw-value">1</property>
+ <property name="valign">baseline</property>
+ <property name="hexpand">1</property>
+ <property name="adjustment">icon_size_adjustment</property>
+ <property name="round_digits">1</property>
+ <property name="digits">0</property>
+ <property name="value_pos">right</property>
+ <signal name="value-changed" handler="icon_size_scale_value_changed_cb" />
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="icon_size_fixed_checkbutton">
+ <property name="label" translatable="yes">Fixed icon size: scroll to reveal other icons</property>
+ <property name="margin_top">12</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ <property name="tab">
+ <object class="GtkLabel" id="general_label">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Position and size</property>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkNotebookPage">
+ <property name="position">1</property>
+ <property name="child">
+ <object class="GtkBox" id="apps">
+ <property name="can_focus">0</property>
+ <property name="margin-start">24</property>
+ <property name="margin-end">24</property>
+ <property name="margin_top">24</property>
+ <property name="margin_bottom">24</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">24</property>
+ <child>
+ <object class="GtkFrame" id="customize_theme1">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="listbox9">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow6">
+ <property name="child">
+ <object class="GtkGrid" id="shrink_dash1">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkSwitch" id="show_favorite_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="shrink_dash_label1">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Show favorite applications</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow16">
+ <property name="child">
+ <object class="GtkGrid" id="shrink_dash2">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkSwitch" id="show_running_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="shrink_dash_label2">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Show running applications</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="application_button_isolation_button">
+ <property name="label" translatable="yes">Isolate workspaces.</property>
+ <property name="halign">start</property>
+ <property name="margin_top">12</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">2</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="application_button_monitor_isolation_button">
+ <property name="label" translatable="yes">Isolate monitors.</property>
+ <property name="halign">start</property>
+ <property name="margin_top">12</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">3</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="windows_preview_button">
+ <property name="margin_top">3</property>
+
+ <child>
+ <object class="GtkLabel" id="windows_previews_label">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Show open windows previews.</property>
+ <property name="use_markup">1</property>
+ </object>
+ </child>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow17">
+ <property name="child">
+ <object class="GtkGrid" id="shrink_dash3">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkSwitch" id="show_applications_button_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="shrink_dash_description1">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">If disabled, these settings are accessible from gnome-tweak-tool or the extension website.</property>
+ <property name="wrap">1</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="shrink_dash_label3">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Show &lt;i&gt;Applications&lt;/i&gt; icon</property>
+ <property name="use_markup">1</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="application_button_first_button">
+ <property name="label" translatable="yes">Move the applications button at the beginning of the dock.</property>
+ <property name="halign">start</property>
+ <property name="margin_top">12</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">2</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="application_button_animation_button">
+ <property name="margin_top">3</property>
+
+
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="can_focus">0</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Animate &lt;i&gt;Show Applications&lt;/i&gt;.</property>
+ <property name="use_markup">1</property>
+ </object>
+ </child>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">3</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow18">
+ <property name="child">
+ <object class="GtkGrid" id="shrink_dash4">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkSwitch" id="show_trash_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="shrink_dash_label4">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Show trash can</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow19">
+ <property name="child">
+ <object class="GtkGrid" id="shrink_dash5">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkSwitch" id="show_mounts_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="shrink_dash_label5">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Show mounted volumes and devices</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ <property name="tab">
+ <object class="GtkLabel" id="launchers_label">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Launchers</property>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkNotebookPage">
+ <property name="position">2</property>
+ <property name="child">
+ <object class="GtkBox" id="behaviour">
+ <property name="can_focus">0</property>
+ <property name="margin-start">24</property>
+ <property name="margin-end">24</property>
+ <property name="margin_top">24</property>
+ <property name="margin_bottom">24</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">24</property>
+ <child>
+ <object class="GtkFrame" id="hot_keys_frame">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="hot_keys_listbox">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="hot_keys_listboxrow">
+ <property name="child">
+ <object class="GtkGrid" id="hot_keys_grid">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="hot_keys_description">
+ <property name="can_focus">0</property>
+ <property name="halign">start</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Enable Super+(0-9) as shortcuts to activate apps. It can also be used together with Shift and Ctrl.</property>
+ <property name="use_markup">1</property>
+ <property name="wrap">1</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="hot_keys_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Use keyboard shortcuts to activate apps</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="overlay_box">
+ <property name="can_focus">0</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkButton" id="overlay_button">
+ <property name="receives_default">1</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+
+ <child>
+ <object class="GtkImage" id="image_overlay">
+ <property name="can_focus">0</property>
+ <property name="icon_name">emblem-system-symbolic</property>
+ </object>
+ </child>
+ <style>
+ <class name="circular"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSwitch" id="hot_keys_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="built_in_theme_frame3">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="listbox6">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow9">
+ <property name="child">
+ <object class="GtkGrid" id="buitin_theme5">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_description5">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Behaviour when clicking on the icon of a running application.</property>
+ <property name="wrap">1</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_label5">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Click action</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="click_box">
+ <property name="can_focus">0</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkButton" id="middle_click_options_button">
+ <property name="receives_default">1</property>
+ <property name="valign">center</property>
+ <child>
+ <object class="GtkImage" id="middle_click_image">
+ <property name="can_focus">0</property>
+ <property name="icon_name">emblem-system-symbolic</property>
+ </object>
+ </child>
+ <style>
+ <class name="circular"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="click_action_combo">
+ <property name="can_focus">0</property>
+ <property name="valign">center</property>
+ <items>
+ <item translatable="yes">Raise window</item>
+ <item translatable="yes">Minimize</item>
+ <item translatable="yes">Launch new instance</item>
+ <item translatable="yes">Cycle through windows</item>
+ <item translatable="yes">Minimize or overview</item>
+ <item translatable="yes">Show window previews</item>
+ <item translatable="yes">Minimize or show previews</item>
+ <item translatable="yes">Focus or show previews</item>
+ <item translatable="yes">Focus, minimize or show previews</item>
+ </items>
+ </object>
+ </child>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="built_in_theme_frame_scroll">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="listbox5">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow_scroll">
+ <property name="child">
+ <object class="GtkGrid" id="buitin_theme_scroll">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_description_scroll">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Behaviour when scrolling on the icon of an application.</property>
+ <property name="wrap">1</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_label_scroll">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Scroll action</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="click_box_scroll">
+ <property name="can_focus">0</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBoxText" id="scroll_action_combo">
+ <property name="can_focus">0</property>
+ <property name="valign">center</property>
+ <items>
+ <item translatable="yes">Do nothing</item>
+ <item translatable="yes">Cycle through windows</item>
+ <item translatable="yes">Switch workspace</item>
+ </items>
+ </object>
+ </child>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ <property name="tab">
+ <object class="GtkLabel" id="behaviour_label">
+ <property name="can_focus">0</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Behavior</property>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkNotebookPage">
+ <property name="position">3</property>
+ <property name="child">
+ <object class="GtkBox" id="appearance">
+ <property name="can_focus">0</property>
+ <property name="margin-start">24</property>
+ <property name="margin-end">24</property>
+ <property name="margin_top">24</property>
+ <property name="margin_bottom">24</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">24</property>
+ <child>
+ <object class="GtkFrame" id="built_in_theme_frame">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="listbox1">
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow1">
+ <property name="child">
+ <object class="GtkGrid" id="buitin_theme">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_description">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Few customizations meant to integrate the dock with the default GNOME theme. Alternatively, specific options can be enabled below.</property>
+ <property name="wrap">1</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Use built-in theme</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSwitch" id="builtin_theme_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="customize_theme">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="listbox2">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow2">
+ <property name="child">
+ <object class="GtkGrid" id="shrink_dash">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkSwitch" id="shrink_dash_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="shrink_dash_description">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Save space reducing padding and border radius.</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="shrink_dash_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Shrink the dash</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow3">
+ <property name="child">
+ <object class="GtkGrid" id="running_dots">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="running_dots_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Customize windows counter indicators</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box4">
+ <property name="can_focus">0</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkButton" id="running_indicators_advance_settings_button">
+ <property name="receives_default">1</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="can_focus">0</property>
+ <property name="icon_name">emblem-system-symbolic</property>
+ </object>
+ </child>
+ <style>
+ <class name="circular"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="running_indicators_combo">
+ <property name="can_focus">0</property>
+ <items>
+ <item translatable="yes">Default</item>
+ <item translatable="yes">Dots</item>
+ <item translatable="yes">Squares</item>
+ <item translatable="yes">Dashes</item>
+ <item translatable="yes">Segmented</item>
+ <item translatable="yes">Solid</item>
+ <item translatable="yes">Ciliora</item>
+ <item translatable="yes">Metro</item>
+ </items>
+ </object>
+ </child>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="custom_background_color_listboxrow">
+ <property name="child">
+ <object class="GtkGrid" id="custom_background_color_grid">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="custom_background_color_description">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Set the background color for the dash.</property>
+ <property name="wrap">1</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="custom_background_color_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Customize the dash color</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="custom_background_color_box">
+ <property name="can_focus">0</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkColorButton" id="custom_background_color">
+ <property name="receives_default">1</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+
+ </object>
+ </child>
+ <child>
+ <object class="GtkSwitch" id="custom_background_color_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow4">
+ <property name="child">
+ <object class="GtkBox" id="box2">
+ <property name="can_focus">0</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkGrid" id="customize_opacity">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="customize_opacity_description">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Tune the dash background opacity.</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="customize_opacity_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Customize opacity</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="customize_opacity_box">
+ <property name="can_focus">0</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkButton" id="dynamic_opacity_button">
+ <property name="receives_default">1</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <child>
+ <object class="GtkImage" id="dynamic_opacity_image">
+ <property name="can_focus">0</property>
+ <property name="icon_name">emblem-system-symbolic</property>
+ </object>
+ </child>
+ <style>
+ <class name="circular"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="customize_opacity_combo">
+ <property name="can_focus">0</property>
+ <property name="valign">center</property>
+ <items>
+ <item id="0" translatable="yes">Default</item>
+ <item id="1" translatable="yes">Fixed</item>
+ <item id="3" translatable="yes">Dynamic</item>
+ </items>
+ </object>
+ </child>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="custom_opacity">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="custom_opacity_label">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Opacity</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScale" id="custom_opacity_scale">
+ <property name="hexpand">1</property>
+ <property name="draw-value">1</property>
+ <property name="adjustment">custom_opacity_adjustement</property>
+
+ <property name="restrict_to_fill_level">0</property>
+ <property name="fill_level">0</property>
+ <property name="round_digits">0</property>
+ <property name="digits">2</property>
+ <property name="value_pos">right</property>
+ <signal name="value-changed" handler="custom_opacity_scale_value_changed_cb" />
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow_rnd_border">
+ <property name="width_request">100</property>
+ <property name="height_request">80</property>
+ <property name="child">
+ <object class="GtkBox">
+ <property name="can_focus">0</property>
+ <property name="spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="force_straight_corner_label">
+ <property name="hexpand">1</property>
+ <property name="can_focus">0</property>
+ <property name="valign">center</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Force straight corner</property>
+
+ </object>
+ </child>
+ <child>
+ <object class="GtkSwitch" id="force_straight_corner_switch">
+ <property name="valign">center</property>
+ <property name="margin-start">3</property>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ <property name="tab">
+ <object class="GtkLabel" id="appearance_label">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Appearance</property>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkNotebookPage">
+ <property name="position">4</property>
+ <property name="child">
+ <object class="GtkBox" id="about">
+ <property name="visible">0</property>
+ <property name="can_focus">0</property>
+ <property name="margin_top">24</property>
+ <property name="margin_bottom">24</property>
+ <property name="hexpand">1</property>
+ <property name="vexpand">1</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkImage" id="logo">
+ <property name="can_focus">0</property>
+ <property name="file">./media/logo.svg</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="extension_name">
+ <property name="can_focus">0</property>
+ <property name="label">&lt;b&gt;Dash to Dock&lt;/b&gt;</property>
+ <property name="use_markup">1</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="can_focus">0</property>
+ <property name="halign">center</property>
+ <child>
+ <object class="GtkLabel" id="extension_version_label">
+ <property name="can_focus">0</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">version: </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="extension_version">
+ <property name="can_focus">0</property>
+ <property name="halign">start</property>
+ <property name="label">...</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="extension_description">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Moves the dash out of the overview transforming it in a dock</property>
+ <property name="justify">center</property>
+ <property name="wrap">1</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box10">
+ <property name="can_focus">0</property>
+ <property name="halign">center</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkLabel" id="label15">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Created by</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label16">
+ <property name="label">Michele (&lt;a href=&quot;mailto:micxgx@gmail.com&quot;&gt;micxgx@gmail.com&lt;/a&gt;)</property>
+ <property name="use_markup">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLinkButton" id="homepage_link">
+ <property name="label" translatable="yes">Webpage</property>
+ <property name="receives_default">1</property>
+ <property name="halign">center</property>
+
+ <property name="uri">https://micheleg.github.io/dash-to-dock/</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="vexpand">1</property>
+ <property name="valign">end</property>
+ <property name="label" translatable="yes">&lt;span size=&quot;small&quot;&gt;This program comes with ABSOLUTELY NO WARRANTY.
+See the &lt;a href=&quot;https://www.gnu.org/licenses/old-licenses/gpl-2.0.html&quot;&gt;GNU General Public License, version 2 or later&lt;/a&gt; for details.&lt;/span&gt;</property>
+ <property name="use_markup">1</property>
+ <property name="justify">center</property>
+ <property name="wrap">1</property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <property name="tab">
+ <object class="GtkLabel" id="about_label">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">About</property>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="max_opacity_adjustement">
+ <property name="upper">1</property>
+ <property name="step-increment">0.01</property>
+ <property name="page-increment">0.10000000000000001</property>
+ </object>
+ <object class="GtkAdjustment" id="min_opacity_adjustement">
+ <property name="upper">1</property>
+ <property name="step-increment">0.01</property>
+ <property name="page-increment">0.10000000000000001</property>
+ </object>
+ <object class="GtkBox" id="advanced_transparency_dialog">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkFrame" id="advanced_transparency_frame">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="advanced_transparency_listbox">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="advanced_transparency_listboxrow">
+ <property name="width_request">100</property>
+ <property name="height_request">80</property>
+ <property name="child">
+ <object class="GtkBox" id="advanced_transparency_box">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkGrid" id="advanced_transparency_grid">
+ <property name="can_focus">0</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkSwitch" id="customize_alphas_switch">
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="customize_alphas_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Customize minimum and maximum opacity values</property>
+ <property name="justify">fill</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="min_alpha_box">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="min_alpha_label">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Minimum opacity</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScale" id="min_alpha_scale">
+ <property name="hexpand">1</property>
+ <property name="draw-value">1</property>
+ <property name="adjustment">min_opacity_adjustement</property>
+
+ <property name="restrict_to_fill_level">0</property>
+ <property name="fill_level">0</property>
+ <property name="round_digits">0</property>
+ <property name="digits">2</property>
+ <property name="value_pos">right</property>
+ <signal name="value-changed" handler="min_opacity_scale_value_changed_cb" />
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="max_alpha_box">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="max_alpha_label">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Maximum opacity</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScale" id="max_alpha_scale">
+ <property name="hexpand">1</property>
+ <property name="draw-value">1</property>
+ <property name="adjustment">max_opacity_adjustement</property>
+
+ <property name="restrict_to_fill_level">0</property>
+ <property name="fill_level">0</property>
+ <property name="round_digits">0</property>
+ <property name="digits">2</property>
+ <property name="value_pos">right</property>
+ <signal name="value-changed" handler="max_opacity_scale_value_changed_cb" />
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="pressure_threshold_adjustment">
+ <property name="upper">1000</property>
+ <property name="step-increment">50</property>
+ <property name="page-increment">250</property>
+ </object>
+ <object class="GtkAdjustment" id="shortcut_time_adjustment">
+ <property name="upper">10</property>
+ <property name="step-increment">0.25</property>
+ <property name="page-increment">1</property>
+ </object>
+ <object class="GtkBox" id="box_overlay_shortcut">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkFrame" id="frame_overlay_show_dock">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="listbox_overlay_shortcut">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow_overlay_shortcut">
+ <property name="width_request">100</property>
+ <property name="height_request">80</property>
+ <property name="child">
+ <object class="GtkGrid" id="grid_overlay">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkSwitch" id="overlay_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="overlay_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Number overlay</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="overlay_description">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Temporarily show the application numbers over the icons, corresponding to the shortcut.</property>
+ <property name="wrap">1</property>
+ <property name="max_width_chars">40</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow_show_dock">
+ <property name="width_request">100</property>
+ <property name="height_request">80</property>
+ <property name="child">
+ <object class="GtkGrid" id="grid_show_dock">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkSwitch" id="show_dock_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="show_dock_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Show the dock if it is hidden</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="show_dock_description">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">If using autohide, the dock will appear for a short time when triggering the shortcut.</property>
+ <property name="wrap">1</property>
+ <property name="max_width_chars">40</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow_extra_shortcut">
+ <property name="width_request">100</property>
+ <property name="height_request">80</property>
+ <property name="child">
+ <object class="GtkGrid" id="grid_shortcut">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkEntry" id="shortcut_entry">
+ <property name="visible">0</property>
+ <property name="valign">center</property>
+ <property name="width_chars">12</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="shortcut_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Shortcut for the options above</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="shortcut_description">
+ <property name="can_focus">0</property>
+ <property name="label" translatable="yes">Syntax: &lt;Shift&gt;, &lt;Ctrl&gt;, &lt;Alt&gt;, &lt;Super&gt;</property>
+ <property name="wrap">1</property>
+ <property name="max_width_chars">40</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow_timeout">
+ <property name="child">
+ <object class="GtkGrid" id="grid_timeout">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="hexpand">1</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkSpinButton" id="timeout_spinbutton">
+ <property name="halign">end</property>
+ <property name="adjustment">shortcut_time_adjustment</property>
+ <property name="digits">3</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="shortcut_timeout_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Hide timeout (s)</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="show_timeout_adjustment">
+ <property name="upper">1</property>
+ <property name="step-increment">0.050000000000000003</property>
+ <property name="page-increment">0.25</property>
+ </object>
+ <object class="GtkBox" id="intelligent_autohide_advanced_settings_box">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkFrame" id="intelligent_autohide_advanced_settings_frame">
+ <property name="can_focus">0</property>
+
+ <property name="child">
+ <object class="GtkListBox" id="listbox4">
+ <property name="can_focus">0</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow8">
+ <property name="child">
+ <object class="GtkGrid" id="buitin_theme2">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_description2">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Show the dock by mouse hover on the screen edge.</property>
+ <property name="wrap">1</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_label2">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Autohide</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSwitch" id="autohide_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="require_pressure_checkbutton">
+ <property name="label" translatable="yes">Push to show: require pressure to show the dock</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">3</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="autohide_enable_in_fullscreen_checkbutton">
+ <property name="label" translatable="yes">Enable in fullscreen mode</property>
+ <property name="margin_top">12</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">2</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow15">
+ <property name="child">
+ <object class="GtkGrid" id="intellihide_grid">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_description3">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Show the dock when it doesn&apos;t obstruct application windows.</property>
+ <property name="wrap">1</property>
+
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="builtin_theme_label3">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Dodge windows</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSwitch" id="intellihide_switch">
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ <property name="row-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="intellihide_mode_box">
+ <property name="can_focus">0</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkCheckButton" id="all_windows_radio_button">
+ <property name="label" translatable="yes">All windows</property>
+ <property name="margin_top">12</property>
+
+ <property name="active">1</property>
+ <signal name="toggled" handler="all_windows_radio_button_toggled_cb" />
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="focus_application_windows_radio_button">
+ <property name="label" translatable="yes">Only focused application&apos;s windows</property>
+
+ <property name="active">1</property>
+ <property name="group">all_windows_radio_button</property>
+ <signal name="toggled" handler="focus_application_windows_radio_button_toggled_cb" />
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="maximized_windows_radio_button">
+ <property name="label" translatable="yes">Only maximized windows</property>
+
+ <property name="active">1</property>
+ <property name="group">all_windows_radio_button</property>
+ <signal name="toggled" handler="maximized_windows_radio_button_toggled_cb" />
+ </object>
+ </child>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">2</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBoxRow" id="listboxrow5">
+ <property name="child">
+ <object class="GtkGrid" id="grid2">
+ <property name="can_focus">0</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="hexpand">1</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">32</property>
+ <child>
+ <object class="GtkSpinButton" id="animation_duration_spinbutton">
+ <property name="halign">end</property>
+ <property name="adjustment">animation_time_adjustment</property>
+ <property name="digits">3</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Animation duration (s)</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="hide_timeout_spinbutton">
+ <property name="halign">end</property>
+ <property name="adjustment">hide_timeout_adjustment</property>
+ <property name="digits">3</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="show_timeout_spinbutton">
+ <property name="halign">end</property>
+ <property name="adjustment">show_timeout_adjustment</property>
+ <property name="digits">3</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="pressure_threshold_spinbutton">
+ <property name="text">0.000</property>
+ <property name="adjustment">pressure_threshold_adjustment</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">3</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label9">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Hide timeout (s)</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="show_timeout_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Show timeout (s)</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="pressure_threshold_label">
+ <property name="can_focus">0</property>
+ <property name="hexpand">1</property>
+ <property name="label" translatable="yes">Pressure threshold</property>
+
+ <layout>
+ <property name="column">0</property>
+ <property name="row">3</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
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._indicators.length; i++){
+ let indicator = this._indicators[i];
+ indicator.update();
+ }
+ }
+
+ destroy() {
+ for (let i=0; i<this._indicators.length; i++){
+ let indicator = this._indicators[i];
+ indicator.destroy();
+ }
+ }
+}
+
+/*
+ * Base class to be inherited by all indicators of any kind
+*/
+var IndicatorBase = class DashToDock_IndicatorBase {
+
+ constructor(source) {
+ this._source = source;
+ this._signalsHandler = new Utils.GlobalSignalsHandler();
+
+ this._sourceDestroyId = this._source.connect('destroy', () => {
+ 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<max_size);
+ });
+ this._availableIconSizes.push(max_size);
+ }
+ }
+
+ setIconSize(max_size, doNotAnimate) {
+ this._initializeIconSize(max_size);
+
+ if (doNotAnimate)
+ this._shownInitially = false;
+
+ this._queueRedisplay();
+ }
+
+ /**
+ * Reset the displayed apps icon to maintain the correct order when changing
+ * show favorites/show running settings
+ */
+ resetAppIcons() {
+ let children = this._box.get_children().filter(function(actor) {
+ return actor.child &&
+ !!actor.child.icon;
+ });
+ for (let i = 0; i < children.length; i++) {
+ let item = children[i];
+ item.destroy();
+ }
+
+ // to avoid ugly animations, just suppress them like when dash is first loaded.
+ this._shownInitially = false;
+ this._redisplay();
+ }
+
+ get showAppsButton() {
+ return this._showAppsIcon.toggleButton;
+ }
+
+ showShowAppsButton() {
+ this.showAppsButton.visible = true
+ this.showAppsButton.set_width(-1)
+ this.showAppsButton.set_height(-1)
+ }
+
+ hideShowAppsButton() {
+ //this.showAppsButton.hide()
+
+ // The height and width of the button is bound to the background.
+ if (this._isHorizontal) {
+ this.showAppsButton.set_width(0)
+ } else {
+ this.showAppsButton.set_height(0)
+ }
+ }
+
+ setMaxSize(maxWidth, maxHeight) {
+ if (this._maxWidth === maxWidth &&
+ this._maxHeight === maxHeight)
+ return;
+
+ this._maxWidth = maxWidth;
+ this._maxHeight = maxHeight;
+ this._queueRedisplay();
+ }
+
+ updateShowAppsButton() {
+ if (Docking.DockManager.settings.get_boolean('show-apps-at-top')) {
+ this._dashContainer.pack_start = true;
+ } else {
+ this._dashContainer.pack_start = false;
+ }
+ }
+});
+
+
+/**
+ * This is a copy of the same function in utils.js, but also adjust horizontal scrolling
+ * and perform few further cheks on the current value to avoid changing the values when
+ * it would be clamp to the current one in any case.
+ * Return the amount of shift applied
+ */
+function ensureActorVisibleInScrollView(scrollView, actor) {
+ let adjust_v = true;
+ let adjust_h = true;
+
+ let vadjustment = scrollView.get_vscroll_bar().get_adjustment();
+ let hadjustment = scrollView.get_hscroll_bar().get_adjustment();
+ let [vvalue, vlower, vupper, vstepIncrement, vpageIncrement, vpageSize] = vadjustment.get_values();
+ let [hvalue, hlower, hupper, hstepIncrement, hpageIncrement, hpageSize] = hadjustment.get_values();
+
+ let [hvalue0, vvalue0] = [hvalue, vvalue];
+
+ let voffset = 0;
+ let hoffset = 0;
+ let fade = scrollView.get_effect('fade');
+ if (fade) {
+ voffset = fade.vfade_offset;
+ hoffset = fade.hfade_offset;
+ }
+
+ let box = actor.get_allocation_box();
+ let y1 = box.y1, y2 = box.y2, x1 = box.x1, x2 = box.x2;
+
+ let parent = actor.get_parent();
+ while (parent != scrollView) {
+ if (!parent)
+ throw new Error('Actor not in scroll view');
+
+ let box = parent.get_allocation_box();
+ y1 += box.y1;
+ y2 += box.y1;
+ x1 += box.x1;
+ x2 += box.x1;
+ parent = parent.get_parent();
+ }
+
+ if (y1 < vvalue + voffset)
+ vvalue = Math.max(0, y1 - voffset);
+ else if (vvalue < vupper - vpageSize && y2 > 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 = '<node><interface name="org.freedesktop.FileManager1">\
+ <property name="XUbuntuOpenLocationsXids" type="a{uas}" access="read"/>\
+ <property name="OpenWindowsWithLocations" type="a{sas}" access="read"/>\
+ </interface></node>';
+
+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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="18.343554mm"
+ height="18.343554mm"
+ viewBox="0 0 14.674843 14.674842"
+ version="1.1"
+ id="svg4941"
+ sodipodi:docname="glossy.svg"
+ inkscape:version="0.92.1 r15371">
+ <defs
+ id="defs4935">
+ <linearGradient
+ id="linearGradient6812"
+ inkscape:collect="always">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="0"
+ id="stop6810" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop6808" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient18962"
+ id="linearGradient35463"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.29132751,0,0,0.15428114,-54.210829,160.22776)"
+ x1="214.71877"
+ y1="404.36081"
+ x2="214.71877"
+ y2="443.54596" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient18962">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop18964" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop18966" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient18806">
+ <stop
+ style="stop-color:#ff0101;stop-opacity:1;"
+ offset="0"
+ id="stop18808" />
+ <stop
+ style="stop-color:#800000;stop-opacity:1;"
+ offset="1"
+ id="stop18810" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6812"
+ id="radialGradient6798"
+ cx="7.3538475"
+ cy="230.28426"
+ fx="7.3538475"
+ fy="230.28426"
+ r="7.2099228"
+ gradientTransform="matrix(5.9484829,-0.0346444,0.01679088,3.0681664,-40.338609,-476.01412)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="10.68"
+ inkscape:cx="65.485107"
+ inkscape:cy="29.432163"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="2560"
+ inkscape:window-height="1406"
+ inkscape:window-x="1920"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ scale-x="0.8"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0" />
+ <metadata
+ id="metadata4938">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-222.92515)">
+ <rect
+ inkscape:export-ydpi="180"
+ inkscape:export-xdpi="180"
+ inkscape:export-filename="C:\Arbeit\Blog\Tutorials\glossybutton\Glossy_Button_Tutorial.png"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.35100002;fill:url(#linearGradient35463);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39747861;marker:none;enable-background:accumulate"
+ id="rect19155"
+ width="14.634871"
+ height="3.7392156"
+ x="0.039808333"
+ y="222.98268"
+ rx="1.5496143"
+ ry="0.82064426" />
+ <rect
+ style="opacity:0.427;fill:url(#radialGradient6798);fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect6706"
+ width="14.363673"
+ height="14.404656"
+ x="0.090466507"
+ y="223.07919" />
+ </g>
+</svg>
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ viewBox="-0.7 0 48 48"
+ version="1.1"
+ id="svg10"
+ sodipodi:docname="highlight_stacked_bg.svg"
+ width="48"
+ height="48"
+ inkscape:version="0.92.1 r15371">
+ <metadata
+ id="metadata16">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs14" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="951"
+ id="namedview12"
+ showgrid="false"
+ viewbox-x="-0.7"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="3.8125"
+ inkscape:cx="-63.872219"
+ inkscape:cy="15.195756"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg10" />
+ <g
+ id="g8"
+ transform="matrix(1,0,0,48,-0.7,0)"
+ style="opacity:0.25;fill:#eeeeee;stroke-width:0.14433756">
+ <rect
+ width="45"
+ height="1"
+ id="rect2"
+ x="0"
+ y="0"
+ style="stroke-width:0.14433756" />
+ <rect
+ x="45"
+ width="1"
+ height="1"
+ id="rect4"
+ y="0"
+ style="opacity:0.2;stroke-width:0.02083333" />
+ <rect
+ x="46"
+ width="2"
+ height="1"
+ id="rect6"
+ y="0"
+ style="opacity:0.6;stroke-width:0.02083333" />
+ </g>
+</svg>
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ viewBox="-0.7 0 48 48"
+ version="1.1"
+ id="svg10"
+ sodipodi:docname="highlight_stacked_bg_h.svg"
+ width="48"
+ height="48"
+ inkscape:version="0.92.1 r15371">
+ <metadata
+ id="metadata16">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs14" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1853"
+ inkscape:window-height="1016"
+ id="namedview12"
+ showgrid="false"
+ viewbox-x="-0.7"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="3.8125"
+ inkscape:cx="-63.872219"
+ inkscape:cy="15.195756"
+ inkscape:window-x="67"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg10" />
+ <g
+ id="g8"
+ transform="matrix(0,-1,-48,0,47.3,48)"
+ style="opacity:0.25;fill:#eeeeee;stroke-width:0.14433756">
+ <rect
+ width="45"
+ height="1"
+ id="rect2"
+ x="0"
+ y="0"
+ style="stroke-width:0.14433756" />
+ <rect
+ x="45"
+ width="1"
+ height="1"
+ id="rect4"
+ y="0"
+ style="opacity:0.2;stroke-width:0.02083333" />
+ <rect
+ x="46"
+ width="2"
+ height="1"
+ id="rect6"
+ y="0"
+ style="opacity:0.6;stroke-width:0.02083333" />
+ </g>
+</svg>
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="33.866665mm"
+ height="33.866684mm"
+ viewBox="0 0 33.866665 33.866683"
+ id="svg5179"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="logo.svg">
+ <defs
+ id="defs5181">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4379-92-4-9-6-8-0">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.83189655;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;enable-background:accumulate"
+ id="rect4381-17-7-5-2-0-6"
+ width="19.934219"
+ height="33.52573"
+ x="356.02826"
+ y="457.71631" />
+ </clipPath>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always"
+ id="filter4435-8-5-3-2-13-8"
+ x="-0.22881356"
+ width="1.4576271"
+ y="-0.22881356"
+ height="1.4576271">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.0352993"
+ id="feGaussianBlur4437-6-7-9-8-8-1" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always"
+ id="filter4365-71-5-7-0-6-2"
+ x="-0.21864407"
+ width="1.437288"
+ y="-0.21864407"
+ height="1.437288">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.98928601"
+ id="feGaussianBlur4367-74-5-92-0-6-5" />
+ </filter>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4379-6-7-5-8-6-01-2">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.83189655;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;enable-background:accumulate"
+ id="rect4381-1-8-5-2-0-2-7"
+ width="19.934219"
+ height="33.52573"
+ x="356.02826"
+ y="457.71631" />
+ </clipPath>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always"
+ id="filter4435-6-1-2-8-2-2-7"
+ x="-0.22881356"
+ width="1.4576271"
+ y="-0.22881356"
+ height="1.4576271">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.0352993"
+ id="feGaussianBlur4437-1-1-3-60-1-4-4" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always"
+ id="filter4365-4-5-2-24-7-3-3"
+ x="-0.21864407"
+ width="1.437288"
+ y="-0.21864407"
+ height="1.437288">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.98928601"
+ id="feGaussianBlur4367-7-0-7-7-9-0-3" />
+ </filter>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4379-5-6-0-9-8-7-9">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.83189655;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;enable-background:accumulate"
+ id="rect4381-6-8-5-9-9-2-4"
+ width="19.934219"
+ height="33.52573"
+ x="356.02826"
+ y="457.71631" />
+ </clipPath>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always"
+ id="filter4435-63-9-2-4-1-2-6"
+ x="-0.22881356"
+ width="1.4576271"
+ y="-0.22881356"
+ height="1.4576271">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.0352993"
+ id="feGaussianBlur4437-0-5-6-8-8-9-9" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always"
+ id="filter4365-2-4-3-6-3-1-7"
+ x="-0.21864407"
+ width="1.437288"
+ y="-0.21864407"
+ height="1.437288">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.98928601"
+ id="feGaussianBlur4367-1-2-5-3-5-8-3" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter4255"
+ x="-0.20374454"
+ width="1.4074891"
+ y="-0.13779147"
+ height="1.2755829">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.25863247"
+ id="feGaussianBlur4257" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8"
+ inkscape:cx="60.090739"
+ inkscape:cy="60.108985"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1861"
+ inkscape:window-height="1023"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata5184">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(136.97858,-11.552354)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#0055d4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;enable-background:accumulate"
+ id="rect4006-4-6-9-2-0-6"
+ width="33.83363"
+ height="33.859909"
+ x="-136.9473"
+ y="11.552354"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.15440008;marker:none;filter:url(#filter4365-3);enable-background:accumulate"
+ d="m -130.12265,11.559157 c -4.30029,5.691881 -6.67207,12.608761 -6.82289,19.674442 -0.0115,0.54232 -0.0147,1.0766 0,1.62024 0.11433,4.23572 1.04846,8.50668 2.82497,12.565201 l 31.00865,0 0,-33.859883 -27.01073,0 z"
+ id="path6097-2-6-0-89-4"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m -136.9473,18.430158 0,0.7896 0,20.641361 0,0.7896 1.23782,0 2.26288,0 1.60528,0 c 0.68577,0 1.23783,-0.3548 1.23783,-0.7896 l 0,-20.641361 c 0,-0.4398 -0.55206,-0.7896 -1.23783,-0.7896 l -1.60528,0 -2.26288,0 z"
+ id="rect4008-7-9-2-0-3-4"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccssssccc"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.15440008;marker:none;filter:url(#filter4365-3);enable-background:accumulate"
+ d="m -119.36792,11.559157 c -10.47023,5.721881 -17.57762,16.847401 -17.57762,29.627402 0,1.43804 0.0897,2.841801 0.26432,4.232481 l 33.5693,0 0,-33.859883 -16.256,0 z"
+ id="path6097-4-5-23-9"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;enable-background:accumulate"
+ id="rect4247-4-4-5-3-8-1"
+ width="33.83363"
+ height="2.1162443"
+ x="-136.9473"
+ y="11.552354"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;enable-background:accumulate"
+ d="m -103.11365,13.668597 0,1.05812 c 0,-0.58196 -0.47338,-1.05812 -1.05731,-1.05812 l 1.05731,0 z"
+ id="rect4272-0-7-8-1-1-3-3-1"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;enable-background:accumulate"
+ id="rect4031-9-9-2-4-2-5"
+ width="4.2292037"
+ height="4.2324886"
+ x="-135.89"
+ y="19.488146"
+ rx="1.0583334"
+ ry="1.0583334"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;enable-background:accumulate"
+ d="m -136.94728,13.668597 0,1.05812 c 0,-0.58196 0.47337,-1.05812 1.0573,-1.05812 l -1.0573,0 z"
+ id="rect4272-0-2-1-74-41-1-6"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <g
+ id="g4353-9-2-1-5-5-4"
+ transform="matrix(0.10331261,0,0,0.10339285,-173.76079,-27.453246)"
+ clip-path="url(#clipPath4379-92-4-9-6-8-0)"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099">
+ <circle
+ r="5.4295697"
+ cy="477.71164"
+ cx="274.13016"
+ transform="matrix(0.94749688,0,0,0.94749688,96.290796,21.848877)"
+ id="path3153-1-7-3-5-60-3-6"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.42241378;fill:#d7eef4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;filter:url(#filter4435-8-5-3-2-13-8);enable-background:accumulate" />
+ <circle
+ r="5.4295697"
+ cy="477.71164"
+ cx="274.13016"
+ transform="matrix(0.24231546,0,0,0.24231546,289.60229,358.72226)"
+ id="path3153-2-4-1-6-6-9-4-1"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#d7eef4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;filter:url(#filter4365-71-5-7-0-6-2);enable-background:accumulate" />
+ </g>
+ <g
+ id="g4589-4-1-1-3-6-2"
+ transform="matrix(0.49926208,0,0,0.49964988,-318.21072,-206.05794)"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099">
+ <g
+ clip-path="url(#clipPath4379-6-7-5-8-6-01-2)"
+ transform="matrix(0.20693061,0,0,0.20693061,289.32686,368.5622)"
+ id="g4353-66-1-4-2-6-94-5">
+ <circle
+ r="5.4295697"
+ cy="477.71164"
+ cx="274.13016"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.42241378;fill:#d7eef4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;filter:url(#filter4435-6-1-2-8-2-2-7);enable-background:accumulate"
+ id="path3153-1-6-4-5-63-7-1-0"
+ transform="matrix(0.94749688,0,0,0.94749688,96.290796,21.848877)" />
+ <circle
+ r="5.4295697"
+ cy="477.71164"
+ cx="274.13016"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#d7eef4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;filter:url(#filter4365-4-5-2-24-7-3-3);enable-background:accumulate"
+ id="path3153-2-4-7-6-5-8-5-9-5"
+ transform="matrix(0.24231546,0,0,0.24231546,289.60229,358.72226)" />
+ </g>
+ <g
+ clip-path="url(#clipPath4379-5-6-0-9-8-7-9)"
+ transform="matrix(0.20693061,0,0,0.20693061,289.32686,367.53449)"
+ id="g4353-7-2-2-6-4-5-1">
+ <circle
+ r="5.4295697"
+ cy="477.71164"
+ cx="274.13016"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.42241378;fill:#d7eef4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;filter:url(#filter4435-63-9-2-4-1-2-6);enable-background:accumulate"
+ id="path3153-1-19-3-1-5-5-7-8"
+ transform="matrix(0.94749688,0,0,0.94749688,96.290796,21.848877)" />
+ <circle
+ r="5.4295697"
+ cy="477.71164"
+ cx="274.13016"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#d7eef4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;filter:url(#filter4365-2-4-3-6-3-1-7);enable-background:accumulate"
+ id="path3153-2-4-5-7-9-9-9-7-6"
+ transform="matrix(0.24231546,0,0,0.24231546,289.60229,358.72226)" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:1.28805089px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none"
+ x="-124.44726"
+ y="13.10139"
+ id="text4824-5-2-0-4-8"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099"
+ transform="scale(0.99961185,1.0003883)"><tspan
+ sodipodi:role="line"
+ id="tspan4826-16-3-8-8-1"
+ x="-124.44726"
+ y="13.10139">Dash to Dock</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:1.28805089px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none"
+ x="-136.50272"
+ y="13.10139"
+ id="text4824-8-8-6-8-7-4"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099"
+ transform="scale(0.99961185,1.0003883)"><tspan
+ sodipodi:role="line"
+ id="tspan4826-1-7-7-5-07-5"
+ x="-136.50272"
+ y="13.10139">Michele</tspan></text>
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;enable-background:accumulate"
+ id="rect4031-9-0-8-5-4-0-7-6"
+ width="4.2292037"
+ height="4.2324886"
+ x="-135.89"
+ y="24.778917"
+ rx="1.0583334"
+ ry="1.0583334"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;enable-background:accumulate"
+ id="rect4031-9-0-7-3-3-6-0-1"
+ width="4.2292037"
+ height="4.2324886"
+ x="-135.89"
+ y="30.069445"
+ rx="1.0583334"
+ ry="1.0583334"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04922473;marker:none;enable-background:accumulate"
+ id="rect4031-9-0-6-5-1-3-9-0"
+ width="4.2292037"
+ height="4.2324886"
+ x="-135.89"
+ y="35.359974"
+ rx="1.0583334"
+ ry="1.0583334"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m -136.9473,17.901078 0,0.52908 2.42849,0 2.21372,0 c 0.94338,0 1.7016,0.3372 1.7016,0.77704 l 0,20.649921 c 0,0.43476 -0.75822,0.7936 -1.7016,0.7936 l -2.21372,0 -2.42849,0 0,0.52904 0.90862,0 2.64325,0 1.88332,0 c 0.80005,0 1.43727,-0.3712 1.43727,-0.82664 l 0,-21.625361 c 0,-0.46072 -0.63722,-0.82668 -1.43727,-0.82668 l -1.88332,0 -2.64325,0 z"
+ id="rect4008-7-0-0-3-3-3-7-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccsssscccccssssccc"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m -136.9473,17.901078 0,0.52908 2.42849,0 2.21372,0 c 0.94338,0 1.7016,0.3372 1.7016,0.77704 l 0,20.649921 c 0,0.43476 -0.75822,0.7936 -1.7016,0.7936 l -2.21372,0 -2.42849,0 0,0.52904 0.90862,0 2.64325,0 1.88332,0 c 0.80005,0 1.43727,-0.3712 1.43727,-0.82664 l 0,-21.625361 c 0,-0.46072 -0.63722,-0.82668 -1.43727,-0.82668 l -1.88332,0 -2.64325,0 z"
+ id="rect4008-7-0-0-3-1-5-0-5-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccsssscccccssssccc"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="44.99099"
+ inkscape:export-ydpi="44.99099" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;filter:url(#filter4365-3);enable-background:accumulate"
+ id="rect6777-7-9-6-9-8"
+ width="20.108335"
+ height="18.256252"
+ x="-125.24149"
+ y="19.139757"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.13229166;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="rect4923-8-7-8-2"
+ width="3.7041669"
+ height="3.7041669"
+ x="-116.71888"
+ y="30.163927"
+ rx="1.0583334"
+ ry="1.0583334" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;filter:url(#filter4365-3);enable-background:accumulate"
+ d="m -111.94623,19.146638 c -5.49508,1.3884 -10.21465,5.00036 -13.29531,9.92188 l 0,8.334361 20.10833,0 0,-18.256241 -6.81302,0 z"
+ id="path6862-84-2-2-6-7"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;filter:url(#filter4365-3);enable-background:accumulate"
+ d="m -125.02657,18.882038 c -0.11728,0 -0.21496,0.0812 -0.21496,0.1984 l 0,0.44648 0,1.2568 0,0.2148 0.21496,0 19.67838,0 0.215,0 0,-0.2148 0,-1.2568 0,-0.44648 c 0,-0.1172 -0.0977,-0.1984 -0.215,-0.1984 l -19.67838,0 z"
+ id="rect6779-5-8-6-4-6"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;filter:url(#filter4365-3);enable-background:accumulate"
+ id="rect6779-2-3-9-9-0-8"
+ width="20.108335"
+ height="0.5291667"
+ x="-125.24149"
+ y="20.991808"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;filter:url(#filter4365-3);enable-background:accumulate"
+ id="rect6779-2-4-8-0-7-1-1"
+ width="15.875001"
+ height="0.5291667"
+ x="21.521105"
+ y="105.13315"
+ transform="rotate(90)"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45" />
+ <g
+ id="g6839-1-5-1-33-0"
+ transform="matrix(0.02002288,0.02002284,-0.02002288,0.02002284,-106.62848,-6.0229242)"
+ style="fill:#1a1a1a"
+ inkscape:export-filename="/home/michele/Dropbox/lavori/gnome-shell-extension/icon/g5218.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45">
+ <rect
+ y="616.07727"
+ x="653.01312"
+ height="41.542522"
+ width="11.313708"
+ id="rect6819-8-9-2-56-9"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;filter:url(#filter4365-3);enable-background:accumulate" />
+ <rect
+ transform="rotate(90)"
+ y="-679.44122"
+ x="631.19165"
+ height="41.542522"
+ width="11.313708"
+ id="rect6819-3-9-4-3-1-5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;filter:url(#filter4365-3);enable-background:accumulate" />
+ </g>
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.13229166;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="rect4923-6-8-9-1"
+ width="3.7041669"
+ height="3.7041669"
+ x="-123.59805"
+ y="30.163927"
+ rx="1.0583334"
+ ry="1.0583334" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.26458335;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate;opacity:0.866;filter:url(#filter4255)"
+ d="m -121.46776,32.043964 -5e-4,1.742839 -4.9e-4,1.742839 0.71518,-0.708051 0.99716,1.727136 1.33421,-0.770304 -0.99542,-1.724104 0.96903,-0.268366 -1.50959,-0.870995 z"
+ id="path6155-6-0-01-4-5-6-0-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.13229167;stroke-miterlimit:4;stroke-dasharray:none;marker:none;filter:url(#filter4365-3);enable-background:accumulate"
+ d="m -121.86464,32.043964 -5e-4,1.742839 -4.9e-4,1.742839 0.71518,-0.708051 1.05563,1.8284 1.3342,-0.770304 -1.05388,-1.825368 0.96903,-0.268366 -1.50959,-0.870995 z"
+ id="path6155-6-0-8-0-7-97-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.13229166;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="rect4923-4-8-4"
+ width="3.7041669"
+ height="3.7041669"
+ x="-123.59805"
+ y="23.020128"
+ rx="1.0583334"
+ ry="1.0583334" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.13229166;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="rect4923-2-6-7-8"
+ width="3.7041669"
+ height="3.7041669"
+ x="-116.71888"
+ y="23.020128"
+ rx="1.0583334"
+ ry="1.0583334" />
+ </g>
+</svg>
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
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
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 <EMAIL@ADDRESS>, 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 <jb.lecoz@gmail.com>\n"
+"Language-Team: Faissal Chamekh <chamfay@gmail.com>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "البنية: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> 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 <i>Show Applications</i>."
+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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">هذا البرنامج يأتي بدون أي ضمانات.\n"
+"لمزيد من المعلومات أنظر <a href=\"https://www.gnu.org/licenses/old-licenses/"
+"gpl-2.0.html\">رخصة غنو العمومية، الإصدارة 2 فما فوق.</span>"
+
+#: 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ý <jiri.doubravsky@gmail.com>, 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 <mail@asciiwolf.com>\n"
+"Language-Team: CZECH <jiri.doubravsky@gmail.com>\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 <i>Applications</i> 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 <i>Show Applications</i>."
+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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Na tento program NEJSOU POSKYTOVÁNY ZÁRUKY.\n"
+"Podrobněji viz <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0."
+"html\">GNU General Public License, verze 2 nebo pozdější</a>.</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Syntaxe: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <hey@morrisjobke.de>, 2014.
+# Jonatan Zeidler <jonatan_zeidler@hotmail.de>, 2012
+# jonius <jonatan_zeidler@gmx.de>, 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 <staedtler-przyborski@web.de>\n"
+"Language-Team: jonius <jonatan_zeidler@gmx.de>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Syntax: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Symbol <i>Anwendungen anzeigen</i> 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 <i>Show Applications</i>."
+msgstr "Symbol <i>Anwendungen anzeigen</i> 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Für dieses Programm besteht KEINERLEI GARANTIE.\n"
+" Details finden Sie in der <a href=\"https://www.gnu.org/licenses/old-"
+"licenses/gpl-2.0.html\">GNU General Public License, Version 2 oder später</"
+"a>.</span>"
+
+# 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "Falls es zu viele Symbole auf dem Dock werden, dann bleibt nur "
+#~ "<i>Anwendungen anzeigen</i> 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 <EMAIL@ADDRESS>, YEAR.
+# Δημήτριος-Ρωμανός Ησαΐας <dirosissaias@cosmotemail.gr>, 2017.
+# Vangelis Skarmoutsos <skarmoutsosv@gmail.com>, 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 <skarmoutsosv@gmail.com>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Σύνταξη: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Εμφάνιση εικονιδίου <i>Εφαρμογές</i>"
+
+#: Settings.ui.h:43
+msgid "Move the applications button at the beginning of the dock."
+msgstr "Μετακίνηση του πλήκτρου εφαρμογών στην αρχή της μπάρας."
+
+#: Settings.ui.h:44
+msgid "Animate <i>Show Applications</i>."
+msgstr "Ενεργοποίηση γραφικών κατά την <i>Εμφάνιση Εφαρμογών</i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Αυτό πρόγραμμα παρέχεται χωρίς ΑΠΟΛΥΤΩΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ.\n"
+"Για λεπτομέρειες δείτε την <a href=\"https://www.gnu.org/licenses/old-"
+"licenses/gpl-2.0.html\">Γενική δημόσια άδεια GNU, έκδοση 2 ή νεότερη.</a> </"
+"span>"
+
+#: 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 <hugolabe@gmail.com>, 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 <fitojb@ubuntu.com>\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 <i>Applications</i> icon"
+msgstr "Mostrar el icono <i>Aplicaciones</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animar <i>Mostrar aplicaciones</i>"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Este programa viene SIN NINGUNA GARANTÍA.\n"
+"Consulte la <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">Licencia Pública General de GNU, versión 2 o posterior</a> para obtener "
+"más detalles.</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sintaxis: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <ibai@oihanguren.com>, 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 <ibai@oihanguren.com>\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 <i>Applications</i> icon"
+msgstr "Erakutsi <i>Aplikazioak</i> 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 <i>Show Applications</i>."
+msgstr "Animatu <i>Erakutsi aplikazioak</i> 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Programa honek ez du inolako bermerik.\n"
+"Xehetasun gehiagorako, ikusi <a href=\"https://www.gnu.org/licenses/old-"
+"licenses/gpl-2.0.html\">GNUren Lizentzia Publiko Orokorra, 2. bertsioa edo "
+"berriagoa</a></span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sintaxia: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <EMAIL@ADDRESS>, 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 <julroy67@gmail.com>\n"
+"Language-Team: Jean-Baptiste Le Cz <jb.lecoz@gmail.com>\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 dapplication"
+
+#: 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 lopacité 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 "
+"lapplication."
+
+#: 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 lexposé"
+
+#: 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 laperçu des fenêtres"
+
+#: Settings.ui.h:10
+msgid "Focus or show previews"
+msgstr "Activer ou afficher laperç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 lapplication principale. Dautres 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 dextension GNOME."
+
+#: Settings.ui.h:42
+msgid "Show <i>Applications</i> icon"
+msgstr "Afficher le raccourci <i>Afficher les Applications</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animer le raccourci <i>Afficher les Applications</i>."
+
+#: 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 "
+"lutiliser 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 licône dune 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 licône dune 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 despace 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 lindicateur 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 lopacité 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 laperç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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Ce programme est distribué SANS AUCUNE GARANTIE.\n"
+"Consultez la <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">Licence Générale Publique GNU version 2 ou plus récente</a> pour plus "
+"dinformations.</span>"
+
+#: 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 lopacité"
+
+#: 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 dapplication"
+
+#: Settings.ui.h:92
+msgid ""
+"Temporarily show the application numbers over the icons, corresponding to "
+"the shortcut."
+msgstr ""
+"Afficher temporairement les numéros dapplication sur les icônes, "
+"correspondant au raccourci clavier."
+
+#: Settings.ui.h:93
+msgid "Show the dock if it is hidden"
+msgstr "Afficher le dock sil 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 lutilisation du raccourci."
+
+#: Settings.ui.h:95
+msgid "Shortcut for the options above"
+msgstr "Raccourci pour les options dessus"
+
+#: Settings.ui.h:96
+msgid "Syntax: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Syntaxe : <Maj>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 lapplication 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 lanimation (s)"
+
+#: Settings.ui.h:108
+msgid "Show timeout (s)"
+msgstr "Délai dapparition (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 lapplication."
+
+#~ 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 <correo@xmgz.eu>, 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 <correo@xmgz.eu>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sintaxe: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Mostrar a icona <i>Aplicativos</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animar <i>Mostrar aplicativos</i>"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Este programa ven SIN GARANTÍA ALGUNHA.\n"
+"Consulte a <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">Licenza Pública Xeral de GNU, versión 2 ou posterior</a> para obter "
+"máis detalles.</span>"
+
+#: 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 <urbalazs@gmail.com>, 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 <urbalazs@gmail.com>\n"
+"Language-Team: Hungarian <openscope@googlegroups.com>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Szintaxis: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "<i>Alkalmazások</i> 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 <i>Show Applications</i>."
+msgstr "<i>Alkalmazások megjelenítése</i> 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Ehhez a programhoz SEMMILYEN GARANCIA NEM JÁR.\n"
+"Nézze meg a <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html "
+"\">GNU General Public License 2. vagy későbbi verzióját</a> a részletekért.</"
+"span>"
+
+#: 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 <EMAIL@ADDRESS>, 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 <yudi.al@gmail.com>\n"
+"Language-Team: Mahyuddin <yudi.al@gmail.com>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sintaks: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Tampilkan ikon <i>Aplikasi</ i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animasi <i>Tampilkan Aplikasi</ i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size = \"small\">Program ini hadir dengan TIDAK ADA JAMINAN TIDAK "
+"BENAR.\n"
+"Lihat <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\"> "
+"GNU General Public License, versi 2 atau yang lebih baru </a> untuk "
+"detailnya. </ Span>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "Con la dimensione fissa delle icone, solo il bordo della dock e l'icona "
+#~ "<i> Mostra Applicazioni</i> 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 <milo@milo.name>, 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 <milo@milo.name>\n"
+"Language-Team: Italian <micxgx@gmail.com>\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 <i>Applications</i> icon"
+msgstr "Mostra icona <i>Applicazioni</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Anima <i>Mostra applicazioni</i>"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Questo programma viene fornito senza ALCUNA GARANZIA.\n"
+"Per maggiori informazioni, consultare la <a href=\"https://www.gnu.org/"
+"licenses/old-licenses/gpl-2.0.html\">GNU General Public License, versione 2 "
+"o successiva</a>.<span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Formato: <Maiusc>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <jmatsuzawa@gnome.org>, 2013.
+# Debonne Hooties <debonne.hooties@gmail.com>, 2014-2017.
+# sicklylife <translation@sicklylife.jp>, 2019-2020.
+# Ryo Nakano <ryonakaknock3@gmail.com>, 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 <translation@sicklylife.jp>\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 <i>Applications</i> icon"
+msgstr "[アプリケーションを表示する] アイコンの表示"
+
+#: Settings.ui.h:43
+msgid "Move the applications button at the beginning of the dock."
+msgstr "ドックの先頭 (最上段または左端) に表示"
+
+#: Settings.ui.h:44
+msgid "Animate <i>Show Applications</i>."
+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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">このプログラムに<b>保証は一切ありません</b>。\n"
+"詳しくは <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">GNU 一般公衆ライセンス (GPL) バージョン 2</a> またはそれ以降のバージョン"
+"をご覧ください。</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "表記法: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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. <harald@fsfe.org>, 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. <harald@fsfe.org>\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 <i>Applications</i> icon"
+msgstr "Vis <i>programmer</i> 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 <i>Show Applications</i>."
+msgstr "Animere <i>Vis programmer</i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Dette programmet leveres med ABSOLUTT INGEN GARANTI.\n"
+"Se <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GNU "
+"General Public License, versjon 2 eller senere</a> for detaljer.</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Syntaks: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <hey@morrisjobke.de>, 2014.
+# Jonatan Zeidler <jonatan_zeidler@hotmail.de>, 2012.
+# jonius <jonatan_zeidler@gmx.de>, 2012.
+# Heimen Stoffels <vistausss@outlook.com>, 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 <vistausss@outlook.com>\n"
+"Language-Team: Dutch <kde-i18n-doc@kde.org>\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 <i>Applications</i> icon"
+msgstr "Pictogram voor <i>Alle programma's</i> 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 <i>Show Applications</i>."
+msgstr "Animatie na klikken op <i>Alle programma's tonen</i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Dit programma wordt geleverd ZONDER ENIGE GARANTIE.\n"
+"Lees de <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">GNU General Public License, versie 2 of nieuwer</a>, voor meer informatie."
+"</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Syntax: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "Het gebied nabij de schermrand en de <i>Applicaties weergeven</i>-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ół <psokol.l10n@gmail.com>, 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ół <psokol.l10n@gmail.com>\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 <i>Applications</i> icon"
+msgstr "Przycisk <i>Wyświetl programy</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animowanie przycisku <i>Wyświetl programy</i>"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Niniejszy program rozpowszechniany jest bez "
+"jakiejkolwiek gwarancji.\n"
+"Więcej informacji: <a href=\"https://www.gnu.org/licenses/old-licenses/"
+"gpl-2.0.html\">Powszechna licencja publiczna GNU, wersja 2 lub późniejsza</"
+"a>.</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Składnia: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <carlos.spohr@gmail.com>, 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 <fitojb@ubuntu.com>\n"
+"Language-Team: Carlos Alberto Junior Spohr Poletto <carlos.spohr@gmail>\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 <i>Applications</i> icon"
+msgstr "Mostrar ícone das <i>Aplicações</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animar <i>Mostrar aplicações</i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Síntaxe: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <carlos.spohr@gmail.com>, 2012.
+# Fábio Nogueira <fnogueira@gnome.org>, 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 <fitojb@ubuntu.com>\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 <i>Applications</i> icon"
+msgstr "Exibir ícone dos <i>Aplicativos</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "<i>Mostrar aplicativos</i> 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Este programa é distribuido SEM QUALQUER GARANTIA.\n"
+"Veja em <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">GNU General Public License, versão 2 ou posterior</a> para maiores "
+"detalhes.</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sintaxe: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <vantu5z@mail.ru>, 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 <vantu5z@mail.ru>\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 <i>Applications</i> icon"
+msgstr "Показывать иконку <i>«Приложения»</i>"
+
+#: Settings.ui.h:43
+msgid "Move the applications button at the beginning of the dock."
+msgstr "Расположить кнопку «Приложения» с другой стороны Дока."
+
+#: Settings.ui.h:44
+msgid "Animate <i>Show Applications</i>."
+msgstr "Анимация при показе <i>«Приложений»</i>"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Эта программа распространяется БЕЗ КАКИХ ЛИБО "
+"ГАРАНТИЙ.\n"
+"Смотри <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">GNU General Public License, версия 2 или позднее</a> для информации.</"
+"span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Синтаксис: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "При фиксированном размере иконок приложений активна только область иконки "
+#~ "<i>«Приложения»</i> и край дока."
+
+#~ 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 <prescott66@gmail.com>, 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 <prescott66@gmail.com>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+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 <i>Applications</i> icon"
+msgstr "Zobraziť ikonu <i>Aplikácie</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animovať položku <i>Zobraziť aplikácie</i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Tento program je ABSOLÚTNE BEZ ZÁRUKY.\n"
+"Pre viac podrobností si pozrite <a href=\"https://www.gnu.org/licenses/old-"
+"licenses/gpl-2.0.html\">Licenciu GNU General Public, verzie 2 alebo novšiu</"
+"a>.</span>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "S pevnou veľkosťou ikon je aktívna iba hrana doku a ikona <i>Zobraziť "
+#~ "aplikácie</i>."
+
+#~ 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 <EMAIL@ADDRESS>, 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: Слободан Терзић <Xabre@archlinux.info>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Синтакса: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Приказ иконице <i>Прикажи програме</i>"
+
+#: Settings.ui.h:46
+msgid "Move the applications button at the beginning of the dock."
+msgstr "Помери дугме програма на почетак дока."
+
+#: Settings.ui.h:47
+msgid "Animate <i>Show Applications</i>."
+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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Овај програм се доставља БЕЗ ИКАКВИХ ГАРАНЦИЈА.\n"
+"Погледајте <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">ГНУову Општу Јавну лиценцу, верзија 2 или каснија</a>, за детаље.</span>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "Ако се иконе преклапају на доку, приказује се само икона <i>Прикажи "
+#~ "програме</i>."
+
+#~ 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 <EMAIL@ADDRESS>, 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ć <Xabre@archlinux.info>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sintaksa: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Prikaz ikonice <i>Prikaži programe</i>"
+
+#: 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 <i>Show Applications</i>."
+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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Ovaj program se dostavlja BEZ IKAKVIH GARANCIJA.\n"
+"Pogledajte <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">GNUovu Opštu Javnu licencu, verzija 2 ili kasnija</a>, za detalje.</span>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "Ako se ikone preklapaju na doku, prikazuje se samo ikona <i>Prikaži "
+#~ "programe</i>."
+
+#~ 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 <anders.jonsson@norsjovallen.se>, 2016.
+# Morgan Antonsson <morgan.antonsson@gmail.com>, 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 <morgan.antonsson@gmail.com>\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 <i>Applications</i> icon"
+msgstr "Visa <i>Program</i>-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 <i>Show Applications</i>."
+msgstr "Animera <i>Visa program</i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Detta program kommer HELT UTAN GARANTI.\n"
+"Se <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GNU "
+"General Public License, version 2 eller senare</a> för detaljer.</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Syntax: <Skift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <mustafa.akgun@gmail.com>, 2015.
+# Çağatay Yiğit Şahin <cyigitsahin@outlook.com>, 2016.
+# Serdar Sağlam <teknomobil@yandex.com>, 2018, 2019.
+# Sabri Ünal <libreajans@gmail.com>, 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 <libreajans@gmail.com>\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 <i>Applications</i> icon"
+msgstr "<i>Uygulamalar</i> 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 <i>Show Applications</i>."
+msgstr "<i>Uygulamalar</i> 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Bu program kesinlikle hiçbir garanti vermiyor..\n"
+"Ayrıntılar için <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GNU Genel Kamu Lisansı, "
+"sürüm 2 veya üstü</a> bağlantısına bakın</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sözdizimi: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Синтаксис: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Показувати піктограму <i>Програми</i>"
+
+#: Settings.ui.h:46
+msgid "Move the applications button at the beginning of the dock."
+msgstr "Кнопка \"Програми\" з іншої сторони Дока."
+
+#: Settings.ui.h:47
+msgid "Animate <i>Show Applications</i>."
+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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Цей додаток розповсюджується БЕЗ БУДЬ ЯКИХ ГАРАНТИЙ.\n"
+"Дивись <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">GNU General Public License, версія 2 або пізніше</a> для детальної "
+"інформації.</span>"
+
+#: 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 <i>Show "
+"Applications</i> icon are active."
+msgstr ""
+"При фіксованому розмірі піктограм програм активна тільки область піктограми "
+"<i>«Програми»</i> та край Дока."
+
+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.
+# 绿色圣光 <lishaohui.qd@163.com>, 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 <i>Applications</i> icon"
+msgstr "显示 <i>应用程序</i> 图标"
+
+#: Settings.ui.h:43
+msgid "Move the applications button at the beginning of the dock."
+msgstr "将应用程序图标移至 Dock 的起始位置"
+
+#: Settings.ui.h:44
+msgid "Animate <i>Show Applications</i>."
+msgstr "动画方式 <i>显示应用程序</i>"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">本程序不提供任何担保。\n"
+"参见 <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GNU "
+"通用公共许可证,第二版或更高版本</a>以了解更多细节。</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "语法:<Shift><Ctrl><Alt><Super>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "如果固定了图标大小,只有 dock 边缘和“<i>显示应用程序</i>”图标会激活该功"
+#~ "能。"
+
+#~ 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 <pswo10680@gmail.com>, 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 <pan93412@gmail.com>\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 <i>Applications</i> icon"
+msgstr "顯示 <i>應用程式</i> 圖示"
+
+#: Settings.ui.h:43
+msgid "Move the applications button at the beginning of the dock."
+msgstr "將應用程式按鈕移動到 Dock 開頭。"
+
+#: Settings.ui.h:44
+msgid "Animate <i>Show Applications</i>."
+msgstr "讓 <i>顯示應用程式</i> 有動畫。"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">本程式「絕無任何擔保」。\n"
+"請見 <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GNU "
+"通用公眾授權第 2 版,或後續版本</a> 深入瞭解更多細節。</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "語法:<Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist gettext-domain="gnome-shell-extensions">
+ <enum id='org.gnome.shell.extensions.dash-to-dock.clickAction'>
+ <value value='0' nick='skip'/>
+ <value value='1' nick='minimize'/>
+ <value value='2' nick='launch'/>
+ <value value='3' nick='cycle-windows'/>
+ <value value='4' nick='minimize-or-overview'/>
+ <value value='5' nick='previews'/>
+ <value value='6' nick='minimize-or-previews'/>
+ <value value='7' nick='focus-or-previews'/>
+ <value value='8' nick='focus-minimize-or-previews'/>
+ <value value='9' nick='quit'/>
+ </enum>
+ <enum id='org.gnome.shell.extensions.dash-to-dock.scrollAction'>
+ <value value='0' nick='do-nothing'/>
+ <value value='1' nick='cycle-windows'/>
+ <value value='2' nick='switch-workspace'/>
+ </enum>
+ <!-- this is mean to Match StSide. LEFT and RIGHT actual position in reversed in
+ rtl languages -->
+ <enum id='org.gnome.shell.extensions.dash-to-dock.position'>
+ <value value='0' nick='TOP'/>
+ <value value='1' nick='RIGHT'/>
+ <value value='2' nick='BOTTOM'/>
+ <value value='3' nick='LEFT'/>
+ </enum>
+ <enum id='org.gnome.shell.extensions.dash-to-dock.intellihide-mode'>
+ <value value='0' nick='ALL_WINDOWS'/>
+ <value value='1' nick='FOCUS_APPLICATION_WINDOWS'/>
+ <value value='2' nick='MAXIMIZED_WINDOWS'/>
+ </enum>
+ <enum id='org.gnome.shell.extensions.dash-to-dock.transparency-mode'>
+ <value value='0' nick='DEFAULT'/>
+ <value value='1' nick='FIXED'/>
+ <value value='3' nick='DYNAMIC'/>
+ </enum>
+ <enum id='org.gnome.shell.extensions.dash-to-dock.running-indicator-style'>
+ <value value='0' nick='DEFAULT'/>
+ <value value='1' nick='DOTS'/>
+ <value value='2' nick='SQUARES'/>
+ <value value='3' nick='DASHES'/>
+ <value value='4' nick='SEGMENTED'/>
+ <value value='5' nick='SOLID'/>
+ <value value='6' nick='CILIORA'/>
+ <value value='7' nick='METRO'/>
+ </enum>
+ <schema path="/org/gnome/shell/extensions/dash-to-dock/" id="org.gnome.shell.extensions.dash-to-dock">
+ <key name="dock-position" enum="org.gnome.shell.extensions.dash-to-dock.position">
+ <default>'BOTTOM'</default>
+ <summary>Dock position</summary>
+ <description>Dock is shown on the Left, Right, Top or Bottom side of the screen.</description>
+ </key>
+ <key type="d" name="animation-time">
+ <default>0.2</default>
+ <summary>Animation time</summary>
+ <description>Sets the time duration of the autohide effect.</description>
+ </key>
+ <key type="d" name="show-delay">
+ <default>0.25</default>
+ <summary>Show delay</summary>
+ <description>Sets the delay after the mouse reaches the screen border before showing the dock.</description>
+ </key>
+ <key type="d" name="hide-delay">
+ <default>0.20</default>
+ <summary>Show delay</summary>
+ <description>Sets the delay after the mouse left the dock before hiding it.</description>
+ </key>
+ <key type="b" name="custom-background-color">
+ <default>false</default>
+ <summary>Set a custom dash background background color</summary>
+ <description>Sets the color for the dash background.</description>
+ </key>
+ <key type="s" name="background-color">
+ <default>"#ffffff"</default>
+ <summary>Dash background color.</summary>
+ <description>Customize the background color of the dash.</description>
+ </key>
+ <key name="transparency-mode" enum="org.gnome.shell.extensions.dash-to-dock.transparency-mode">
+ <default>'DEFAULT'</default>
+ <summary>Transparency mode for the dock</summary>
+ <description>FIXED: constant transparency. DYNAMIC: dock takes the opaque style only when windows are close to it.</description>
+ </key>
+ <key name="running-indicator-style" enum="org.gnome.shell.extensions.dash-to-dock.running-indicator-style">
+ <default>'DEFAULT'</default>
+ <summary>...</summary>
+ <description>DEFAULT: .... DOTS: ....</description>
+ </key>
+ <key type="b" name="running-indicator-dominant-color">
+ <default>false</default>
+ <summary>Use application icon dominant color for the indicator color</summary>
+ <description></description>
+ </key>
+ <key type="b" name="customize-alphas">
+ <default>false</default>
+ <summary>Manually set the min and max opacity</summary>
+ <description>For the dynamic mode, the min/max opacity values will be given by 'min-alpha' and 'max-alpha'.</description>
+ </key>
+ <key type="d" name="min-alpha">
+ <default>0.2</default>
+ <summary>Opacity of the dash background when free-floating</summary>
+ <description>Sets the opacity of the dash background when no windows are close.</description>
+ </key>
+ <key type="d" name="max-alpha">
+ <default>0.8</default>
+ <summary>Opacity of the dash background when windows are close.</summary>
+ <description>Sets the opacity of the dash background when windows are close.</description>
+ </key>
+ <key type="d" name="background-opacity">
+ <default>0.8</default>
+ <summary>Opacity of the dash background</summary>
+ <description>Sets the opacity of the dash background when in autohide mode.</description>
+ </key>
+ <key type="b" name="intellihide">
+ <default>true</default>
+ <summary>Dock dodges windows</summary>
+ <description>Enable or disable intellihide mode</description>
+ </key>
+ <key name="intellihide-mode" enum="org.gnome.shell.extensions.dash-to-dock.intellihide-mode">
+ <default>'FOCUS_APPLICATION_WINDOWS'</default>
+ <summary>Define which windows are considered for intellihide.</summary>
+ <description></description>
+ </key>
+ <key type="b" name="autohide">
+ <default>true</default>
+ <summary>Dock shown on mouse over</summary>
+ <description>Enable or disable autohide mode</description>
+ </key>
+ <key type="b" name="require-pressure-to-show">
+ <default>true</default>
+ <summary>Require pressure to show dash</summary>
+ <description>Enable or disable requiring pressure to show the dash</description>
+ </key>
+ <key type="d" name="pressure-threshold">
+ <default>100</default>
+ <summary>Pressure threshold</summary>
+ <description>Sets how much pressure is needed to show the dash.</description>
+ </key>
+ <key type="b" name="autohide-in-fullscreen">
+ <default>false</default>
+ <summary>Enable autohide in fullscreen mode.</summary>
+ <description>Enable autohide in fullscreen mode.</description>
+ </key>
+ <key type="b" name="dock-fixed">
+ <default>false</default>
+ <summary>Dock always visible</summary>
+ <description>Dock is always visible</description>
+ </key>
+ <key type="b" name="scroll-switch-workspace">
+ <default>true</default>
+ <summary>Switch workspace by scrolling over the dock</summary>
+ <description>Add the possibility to switch workspace by mouse scrolling over the dock.</description>
+ </key>
+ <key type="i" name="dash-max-icon-size">
+ <default>48</default>
+ <summary>Maximum dash icon size</summary>
+ <description>Set the allowed maximum dash icon size. Allowed range: 16..64.</description>
+ </key>
+ <key type="b" name="icon-size-fixed">
+ <default>false</default>
+ <summary>Fixed icon size</summary>
+ <description>Keep the icon size fived by scrolling the dock.</description>
+ </key>
+ <key type="b" name="apply-custom-theme">
+ <default>false</default>
+ <summary>Apply custom theme</summary>
+ <description>Apply customization to the dash appearance</description>
+ </key>
+ <key type="b" name="custom-theme-shrink">
+ <default>false</default>
+ <summary>TODO</summary>
+ <description>TODO</description>
+ </key>
+ <key type="b" name="custom-theme-customize-running-dots">
+ <default>false</default>
+ <summary>Customize the style of the running application indicators.</summary>
+ <description>Customize the style of the running application indicators.</description>
+ </key>
+ <key type="s" name="custom-theme-running-dots-color">
+ <default>"#ffffff"</default>
+ <summary>Running application indicators color</summary>
+ <description>Customize the color of the running application indicators.</description>
+ </key>
+ <key type="s" name="custom-theme-running-dots-border-color">
+ <default>"#ffffff"</default>
+ <summary>Running application indicators border color.</summary>
+ <description>Customize the border color of the running application indicators.</description>
+ </key>
+ <key type="i" name="custom-theme-running-dots-border-width">
+ <default>0</default>
+ <summary>Running application indicators border width.</summary>
+ <description>Customize the border width of the running application indicators.</description>
+ </key>
+ <key type="b" name="show-running">
+ <default>true</default>
+ <summary>Show running apps</summary>
+ <description>Show or hide running applications icons in the dash</description>
+ </key>
+ <key type="b" name="isolate-workspaces">
+ <default>false</default>
+ <summary>Provide workspace isolation</summary>
+ <description>Dash shows only windows from the currentworkspace</description>
+ </key>
+ <key type="b" name="isolate-monitors">
+ <default>false</default>
+ <summary>Provide monitor isolation</summary>
+ <description>Dash shows only windows from the monitor</description>
+ </key>
+ <key type="b" name="show-windows-preview">
+ <default>true</default>
+ <summary>Show preview of the open windows</summary>
+ <description>Replace open windows list with windows previews</description>
+ </key>
+ <key type="b" name="show-favorites">
+ <default>true</default>
+ <summary>Show favorites apps</summary>
+ <description>Show or hide favorite applications icons in the dash</description>
+ </key>
+ <key type="b" name="show-trash">
+ <default>true</default>
+ <summary>Show trash can</summary>
+ <description>Show or hide the trash can icon in the dash</description>
+ </key>
+ <key type="b" name="show-mounts">
+ <default>true</default>
+ <summary>Show mounted volumes and devices</summary>
+ <description>Show or hide mounted volume and device icons in the dash</description>
+ </key>
+ <key type="b" name="show-show-apps-button">
+ <default>true</default>
+ <summary>Show applications button</summary>
+ <description>Show applications button in the dash</description>
+ </key>
+ <key type="b" name="show-apps-at-top">
+ <default>false</default>
+ <summary>Show application button on the left</summary>
+ <description>Show application button on the left of the dash</description>
+ </key>
+ <key type="b" name="animate-show-apps">
+ <default>true</default>
+ <summary>Animate Show Applications from the desktop</summary>
+ <description>Animate Show Applications from the desktop</description>
+ </key>
+ <key type="b" name="bolt-support">
+ <default>true</default>
+ <summary>Basic compatibility with bolt extensions</summary>
+ <description>Make the extension work properly when bolt extensions is enabled</description>
+ </key>
+ <key type="d" name="height-fraction">
+ <default>0.90</default>
+ <summary>Dock max height (fraction of available space)</summary>
+ </key>
+ <key type="b" name="extend-height">
+ <default>false</default>
+ <summary>Extend the dock container to all the available height</summary>
+ </key>
+ <key type="i" name="preferred-monitor">
+ <default>-1</default>
+ <summary>Monitor on which putting the dock</summary>
+ <description>Set on which monitor to put the dock, use -1 for the primary one</description>
+ </key>
+ <key type="b" name="multi-monitor">
+ <default>false</default>
+ <summary>Enable multi-monitor docks</summary>
+ <description>Show a dock on every monitor</description>
+ </key>
+ <key type="b" name="minimize-shift">
+ <default>true</default>
+ <summary>Minimize on shift+click</summary>
+ </key>
+ <key type="b" name="activate-single-window">
+ <default>true</default>
+ <summary>Activate only one window</summary>
+ </key>
+ <key name="click-action" enum="org.gnome.shell.extensions.dash-to-dock.clickAction">
+ <default>'cycle-windows'</default>
+ <summary>Action when clicking on a running app</summary>
+ <description>Set the action that is executed when clicking on the icon of a running application</description>
+ </key>
+ <key name="scroll-action" enum="org.gnome.shell.extensions.dash-to-dock.scrollAction">
+ <default>'do-nothing'</default>
+ <summary>Action when scrolling app</summary>
+ <description>Set the action that is executed when scrolling on the application icon</description>
+ </key>
+ <key name="shift-click-action" enum="org.gnome.shell.extensions.dash-to-dock.clickAction">
+ <default>'minimize'</default>
+ <summary>Action when shift+clicking on a running app</summary>
+ <description>Set the action that is executed when shift+clicking on the icon of a running application</description>
+ </key>
+ <key name="middle-click-action" enum="org.gnome.shell.extensions.dash-to-dock.clickAction">
+ <default>'launch'</default>
+ <summary>Action when clicking on a running app</summary>
+ <description>Set the action that is executed when middle-clicking on the icon of a running application</description>
+ </key>
+ <key name="shift-middle-click-action" enum="org.gnome.shell.extensions.dash-to-dock.clickAction">
+ <default>'launch'</default>
+ <summary>Action when clicking on a running app</summary>
+ <description>Set the action that is executed when shift+middle-clicking on the icon of a running application</description>
+ </key>
+ <key type="b" name="hot-keys">
+ <default>true</default>
+ <summary>Super Hot-Keys</summary>
+ <description>Launch and switch between dash items using Super+(0-9)</description>
+ </key>
+ <key type="b" name="hotkeys-show-dock">
+ <default>true</default>
+ <summary>Show the dock when using the hotkeys</summary>
+ <description>The dock will be quickly shown so that the number-overlay is visible and app activation is easier</description>
+ </key>
+ <key type="s" name="shortcut-text">
+ <default>"&lt;Super&gt;q"</default>
+ <summary>Keybinding to show the dock and the number overlay.</summary>
+ <description>Behavior depends on hotkeys-show-dock and hotkeys-overlay.</description>
+ </key>
+ <key type="as" name="shortcut">
+ <default><![CDATA[['<Super>q']]]></default>
+ <summary>Keybinding to show the dock and the number overlay.</summary>
+ <description>Behavior depends on hotkeys-show-dock and hotkeys-overlay.</description>
+ </key>
+ <key type="d" name="shortcut-timeout">
+ <default>2</default>
+ <summary>Timeout to hide the dock</summary>
+ <description>Sets the time duration before the dock is hidden again.</description>
+ </key>
+ <key type="b" name="hotkeys-overlay">
+ <default>true</default>
+ <summary>Show the dock when using the hotkeys</summary>
+ <description>The dock will be quickly shown so that the number-overlay is visible and app activation is easier</description>
+ </key>
+ <key name="app-ctrl-hotkey-1" type="as">
+ <default><![CDATA[['<Ctrl><Super>1']]]></default>
+ <summary>Keybinding to launch 1st dash app</summary>
+ <description>
+ Keybinding to launch 1st app.
+ </description>
+ </key>
+ <key name="app-ctrl-hotkey-2" type="as">
+ <default><![CDATA[['<Ctrl><Super>2']]]></default>
+ <summary>Keybinding to launch 2nd dash app</summary>
+ <description>
+ Keybinding to launch 2nd app.
+ </description>
+ </key>
+ <key name="app-ctrl-hotkey-3" type="as">
+ <default><![CDATA[['<Ctrl><Super>3']]]></default>
+ <summary>Keybinding to launch 3rd dash app</summary>
+ <description>
+ Keybinding to launch 3rd app.
+ </description>
+ </key>
+ <key name="app-ctrl-hotkey-4" type="as">
+ <default><![CDATA[['<Ctrl><Super>4']]]></default>
+ <summary>Keybinding to launch 4th dash app</summary>
+ <description>
+ Keybinding to launch 4th app.
+ </description>
+ </key>
+ <key name="app-ctrl-hotkey-5" type="as">
+ <default><![CDATA[['<Ctrl><Super>5']]]></default>
+ <summary>Keybinding to launch 5th dash app</summary>
+ <description>
+ Keybinding to launch 5th app.
+ </description>
+ </key>
+ <key name="app-ctrl-hotkey-6" type="as">
+ <default><![CDATA[['<Ctrl><Super>6']]]></default>
+ <summary>Keybinding to launch 6th dash app</summary>
+ <description>
+ Keybinding to launch 6th app.
+ </description>
+ </key>
+ <key name="app-ctrl-hotkey-7" type="as">
+ <default><![CDATA[['<Ctrl><Super>7']]]></default>
+ <summary>Keybinding to launch 7th dash app</summary>
+ <description>
+ Keybinding to launch 7th app.
+ </description>
+ </key>
+ <key name="app-ctrl-hotkey-8" type="as">
+ <default><![CDATA[['<Ctrl><Super>8']]]></default>
+ <summary>Keybinding to launch 8th dash app</summary>
+ <description>
+ Keybinding to launch 8th app.
+ </description>
+ </key>
+ <key name="app-ctrl-hotkey-9" type="as">
+ <default><![CDATA[['<Ctrl><Super>9']]]></default>
+ <summary>Keybinding to launch 9th dash app</summary>
+ <description>
+ Keybinding to launch 9th app.
+ </description>
+ </key>
+ <key name="app-ctrl-hotkey-10" type="as">
+ <default><![CDATA[['<Ctrl><Super>0']]]></default>
+ <summary>Keybinding to launch 10th dash app</summary>
+ <description>
+ Keybinding to launch 10th app.
+ </description>
+ </key>
+ <key name="app-shift-hotkey-1" type="as">
+ <default><![CDATA[['<Shift><Super>1']]]></default>
+ <summary>Keybinding to trigger 1st dash app with shift behavior</summary>
+ <description>
+ Keybinding to trigger 1st app with shift behavior.
+ </description>
+ </key>
+ <key name="app-shift-hotkey-2" type="as">
+ <default><![CDATA[['<Shift><Super>2']]]></default>
+ <summary>Keybinding to trigger 2nd dash app with shift behavior</summary>
+ <description>
+ Keybinding to trigger 2nd app with shift behavior.
+ </description>
+ </key>
+ <key name="app-shift-hotkey-3" type="as">
+ <default><![CDATA[['<Shift><Super>3']]]></default>
+ <summary>Keybinding to trigger 3rd dash app with shift behavior</summary>
+ <description>
+ Keybinding to trigger 3rd app with shift behavior.
+ </description>
+ </key>
+ <key name="app-shift-hotkey-4" type="as">
+ <default><![CDATA[['<Shift><Super>4']]]></default>
+ <summary>Keybinding to trigger 4th dash app with shift behavior</summary>
+ <description>
+ Keybinding to trigger 4th app with shift behavior.
+ </description>
+ </key>
+ <key name="app-shift-hotkey-5" type="as">
+ <default><![CDATA[['<Shift><Super>5']]]></default>
+ <summary>Keybinding to trigger 5th dash app with shift behavior</summary>
+ <description>
+ Keybinding to trigger 5th app with shift behavior.
+ </description>
+ </key>
+ <key name="app-shift-hotkey-6" type="as">
+ <default><![CDATA[['<Shift><Super>6']]]></default>
+ <summary>Keybinding to trigger 6th dash app with shift behavior</summary>
+ <description>
+ Keybinding to trigger 6th app with shift behavior.
+ </description>
+ </key>
+ <key name="app-shift-hotkey-7" type="as">
+ <default><![CDATA[['<Shift><Super>7']]]></default>
+ <summary>Keybinding to trigger 7th dash app with shift behavior</summary>
+ <description>
+ Keybinding to trigger 7th app with shift behavior.
+ </description>
+ </key>
+ <key name="app-shift-hotkey-8" type="as">
+ <default><![CDATA[['<Shift><Super>8']]]></default>
+ <summary>Keybinding to trigger 8th dash app with shift behavior</summary>
+ <description>
+ Keybinding to trigger 8th app with shift behavior.
+ </description>
+ </key>
+ <key name="app-shift-hotkey-9" type="as">
+ <default><![CDATA[['<Shift><Super>9']]]></default>
+ <summary>Keybinding to trigger 9th dash app with shift behavior</summary>
+ <description>
+ Keybinding to trigger 9th app with shift behavior.
+ </description>
+ </key>
+ <key name="app-shift-hotkey-10" type="as">
+ <default><![CDATA[['<Shift><Super>0']]]></default>
+ <summary>Keybinding to trigger 10th dash app with shift behavior</summary>
+ <description>
+ Keybinding to trigger 10th app with shift behavior.
+ </description>
+ </key>
+ <key name="app-hotkey-1" type="as">
+ <default><![CDATA[['<Super>1']]]></default>
+ <summary>Keybinding to trigger 1st dash app</summary>
+ <description>
+ Keybinding to either show or launch the 1st application in the dash.
+ </description>
+ </key>
+ <key name="app-hotkey-2" type="as">
+ <default><![CDATA[['<Super>2']]]></default>
+ <summary>Keybinding to trigger 2nd dash app</summary>
+ <description>
+ Keybinding to either show or launch the 2nd application in the dash.
+ </description>
+ </key>
+ <key name="app-hotkey-3" type="as">
+ <default><![CDATA[['<Super>3']]]></default>
+ <summary>Keybinding to trigger 3rd dash app</summary>
+ <description>
+ Keybinding to either show or launch the 3rd application in the dash.
+ </description>
+ </key>
+ <key name="app-hotkey-4" type="as">
+ <default><![CDATA[['<Super>4']]]></default>
+ <summary>Keybinding to trigger 4th dash app</summary>
+ <description>
+ Keybinding to either show or launch the 4th application in the dash.
+ </description>
+ </key>
+ <key name="app-hotkey-5" type="as">
+ <default><![CDATA[['<Super>5']]]></default>
+ <summary>Keybinding to trigger 5th dash app</summary>
+ <description>
+ Keybinding to either show or launch the 5th application in the dash.
+ </description>
+ </key>
+ <key name="app-hotkey-6" type="as">
+ <default><![CDATA[['<Super>6']]]></default>
+ <summary>Keybinding to trigger 6th dash app</summary>
+ <description>
+ Keybinding to either show or launch the 6th application in the dash.
+ </description>
+ </key>
+ <key name="app-hotkey-7" type="as">
+ <default><![CDATA[['<Super>7']]]></default>
+ <summary>Keybinding to trigger 7th dash app</summary>
+ <description>
+ Keybinding to either show or launch the 7th application in the dash.
+ </description>
+ </key>
+ <key name="app-hotkey-8" type="as">
+ <default><![CDATA[['<Super>8']]]></default>
+ <summary>Keybinding to trigger 8th dash app</summary>
+ <description>
+ Keybinding to either show or launch the 8th application in the dash.
+ </description>
+ </key>
+ <key name="app-hotkey-9" type="as">
+ <default><![CDATA[['<Super>9']]]></default>
+ <summary>Keybinding to trigger 9th dash app</summary>
+ <description>
+ Keybinding to either show or launch the 9th application in the dash.
+ </description>
+ </key>
+ <key name="app-hotkey-10" type="as">
+ <default><![CDATA[['<Super>0']]]></default>
+ <summary>Keybinding to trigger 10th dash app</summary>
+ <description>
+ Keybinding to either show or launch the 10th application in the dash.
+ </description>
+ </key>
+ <key name="force-straight-corner" type="b">
+ <default>false</default>
+ <summary>Force straight corners in dash</summary>
+ <description>Make the borders in the dash non rounded</description>
+ </key>
+ <key name="unity-backlit-items" type="b">
+ <default>false</default>
+ <summary>Enable unity7 like glossy backlit items</summary>
+ <description>Emulate the unity7 backlit glossy items behaviour</description>
+ </key>
+ </schema>
+</schemalist>
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 <khaledhosny@eglug.org>, 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 <EMAIL@ADDRESS>, 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 <jb.lecoz@gmail.com>\n"
+"Language-Team: Faissal Chamekh <chamfay@gmail.com>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "البنية: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> 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 <i>Show Applications</i>."
+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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">هذا البرنامج يأتي بدون أي ضمانات.\n"
+"لمزيد من المعلومات أنظر <a href=\"https://www.gnu.org/licenses/old-licenses/"
+"gpl-2.0.html\">رخصة غنو العمومية، الإصدارة 2 فما فوق.</span>"
+
+#: 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 <pknbe@volny.cz>, 2013.
# Marek Černocký <marek@manet.cz>, 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ý <jiri.doubravsky@gmail.com>, 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 <mail@asciiwolf.com>\n"
+"Language-Team: CZECH <jiri.doubravsky@gmail.com>\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 <i>Applications</i> 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 <i>Show Applications</i>."
+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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Na tento program NEJSOU POSKYTOVÁNY ZÁRUKY.\n"
+"Podrobněji viz <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0."
+"html\">GNU General Public License, verze 2 nebo pozdější</a>.</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Syntaxe: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <pseyfert@mathphys.fsk.uni-heidelberg.de>, 2017.
# Tim Sabsch <tim@sabsch.com>, 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 <hey@morrisjobke.de>, 2014.
+# Jonatan Zeidler <jonatan_zeidler@hotmail.de>, 2012
+# jonius <jonatan_zeidler@gmx.de>, 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 <staedtler-przyborski@web.de>\n"
+"Language-Team: jonius <jonatan_zeidler@gmx.de>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Syntax: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Symbol <i>Anwendungen anzeigen</i> 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 <i>Show Applications</i>."
+msgstr "Symbol <i>Anwendungen anzeigen</i> 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Für dieses Programm besteht KEINERLEI GARANTIE.\n"
+" Details finden Sie in der <a href=\"https://www.gnu.org/licenses/old-"
+"licenses/gpl-2.0.html\">GNU General Public License, Version 2 oder später</"
+"a>.</span>"
+
+# 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "Falls es zu viele Symbole auf dem Dock werden, dann bleibt nur "
+#~ "<i>Anwendungen anzeigen</i> 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 <skarmoutsosv@gmail.com>, 2013.
# Efstathios Iosifidis <iosifidis@opensuse.org>, 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 <EMAIL@ADDRESS>, YEAR.
+# Δημήτριος-Ρωμανός Ησαΐας <dirosissaias@cosmotemail.gr>, 2017.
+# Vangelis Skarmoutsos <skarmoutsosv@gmail.com>, 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 <skarmoutsosv@gmail.com>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Σύνταξη: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Εμφάνιση εικονιδίου <i>Εφαρμογές</i>"
+
+#: Settings.ui.h:43
+msgid "Move the applications button at the beginning of the dock."
+msgstr "Μετακίνηση του πλήκτρου εφαρμογών στην αρχή της μπάρας."
+
+#: Settings.ui.h:44
+msgid "Animate <i>Show Applications</i>."
+msgstr "Ενεργοποίηση γραφικών κατά την <i>Εμφάνιση Εφαρμογών</i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Αυτό πρόγραμμα παρέχεται χωρίς ΑΠΟΛΥΤΩΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ.\n"
+"Για λεπτομέρειες δείτε την <a href=\"https://www.gnu.org/licenses/old-"
+"licenses/gpl-2.0.html\">Γενική δημόσια άδεια GNU, έκδοση 2 ή νεότερη.</a> </"
+"span>"
+
+#: 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 <daniel.mustieles@gmail.com>, 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 <hugolabe@gmail.com>, 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 <fitojb@ubuntu.com>\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 <i>Applications</i> icon"
+msgstr "Mostrar el icono <i>Aplicaciones</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animar <i>Mostrar aplicaciones</i>"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Este programa viene SIN NINGUNA GARANTÍA.\n"
+"Consulte la <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">Licencia Pública General de GNU, versión 2 o posterior</a> para obtener "
+"más detalles.</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sintaxis: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <elabaka@uzei.com>, 2015.
# Asier Sarasua Garmendia <asiersarasua@ni.eus>, 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 <ibai@oihanguren.com>, 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 <asiersarasua@ni.eus>\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 <ibai@oihanguren.com>\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 <i>Applications</i> icon"
+msgstr "Erakutsi <i>Aplikazioak</i> 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 <i>Show Applications</i>."
+msgstr "Animatu <i>Erakutsi aplikazioak</i> 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Programa honek ez du inolako bermerik.\n"
+"Xehetasun gehiagorako, ikusi <a href=\"https://www.gnu.org/licenses/old-"
+"licenses/gpl-2.0.html\">GNUren Lizentzia Publiko Orokorra, 2. bertsioa edo "
+"berriagoa</a></span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sintaxia: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <allomervan@gmail.com>, 2012-2013.
# Charles Monzat <charles.monzat@numericable.fr>, 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 <EMAIL@ADDRESS>, 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 <julroy67@gmail.com>\n"
+"Language-Team: Jean-Baptiste Le Cz <jb.lecoz@gmail.com>\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 dapplication"
+
+#: 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 lopacité 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 "
+"lapplication."
+
+#: 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 lexposé"
+
+#: 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 laperçu des fenêtres"
+
+#: Settings.ui.h:10
+msgid "Focus or show previews"
+msgstr "Activer ou afficher laperç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 lapplication principale. Dautres 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 dextension GNOME."
+
+#: Settings.ui.h:42
+msgid "Show <i>Applications</i> icon"
+msgstr "Afficher le raccourci <i>Afficher les Applications</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animer le raccourci <i>Afficher les Applications</i>."
+
+#: 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 "
+"lutiliser 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 licône dune 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 licône dune 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 despace 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 lindicateur 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 lopacité 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 laperç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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Ce programme est distribué SANS AUCUNE GARANTIE.\n"
+"Consultez la <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">Licence Générale Publique GNU version 2 ou plus récente</a> pour plus "
+"dinformations.</span>"
+
+#: 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 lopacité"
+
+#: 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 dapplication"
+
+#: Settings.ui.h:92
+msgid ""
+"Temporarily show the application numbers over the icons, corresponding to "
+"the shortcut."
+msgstr ""
+"Afficher temporairement les numéros dapplication sur les icônes, "
+"correspondant au raccourci clavier."
+
+#: Settings.ui.h:93
+msgid "Show the dock if it is hidden"
+msgstr "Afficher le dock sil 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 lutilisation du raccourci."
+
+#: Settings.ui.h:95
+msgid "Shortcut for the options above"
+msgstr "Raccourci pour les options dessus"
+
+#: Settings.ui.h:96
+msgid "Syntax: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Syntaxe : <Maj>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 lapplication 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 lanimation (s)"
+
+#: Settings.ui.h:108
+msgid "Show timeout (s)"
+msgstr "Délai dapparition (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 lapplication."
+
+#~ 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 <frandieguez@gnome.org>, 2011.
# Fran Dieguez <frandieguez@gnome.org>, 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 <correo@xmgz.eu>, 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 <frandieguez@gnome.org>\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 <correo@xmgz.eu>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sintaxe: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Mostrar a icona <i>Aplicativos</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animar <i>Mostrar aplicativos</i>"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Este programa ven SIN GARANTÍA ALGUNHA.\n"
+"Consulte a <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">Licenza Pública Xeral de GNU, versión 2 ou posterior</a> para obter máis "
+"detalles.</span>"
+
+#: 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 <arch.scar at gmail dot com>, 2011.
# Gabor Kelemen <kelemeng at gnome dot hu>, 2011, 2012, 2013.
# Balázs Úr <ur.balazs at fsf dot hu>, 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 <urbalazs@gmail.com>, 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 <urbalazs@gmail.com>\n"
+"Language-Team: Hungarian <openscope@googlegroups.com>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Szintaxis: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "<i>Alkalmazások</i> 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 <i>Show Applications</i>."
+msgstr "<i>Alkalmazások megjelenítése</i> 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Ehhez a programhoz SEMMILYEN GARANCIA NEM JÁR.\n"
+"Nézze meg a <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html "
+"\">GNU General Public License 2. vagy későbbi verzióját</a> a részletekért.</"
+"span>"
+
+#: 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 <andika@gmail.com>, 2012, 2013.
# Dirgita <dirgitadevina@yahoo.co.id>, 2012.
# Kukuh Syafaat <kukuhsyafaat@gnome.org>, 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 <EMAIL@ADDRESS>, 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 <yudi.al@gmail.com>\n"
+"Language-Team: Mahyuddin <yudi.al@gmail.com>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sintaks: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Tampilkan ikon <i>Aplikasi</ i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animasi <i>Tampilkan Aplikasi</ i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size = \"small\">Program ini hadir dengan TIDAK ADA JAMINAN TIDAK "
+"BENAR.\n"
+"Lihat <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\"> "
+"GNU General Public License, versi 2 atau yang lebih baru </a> untuk "
+"detailnya. </ Span>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "Con la dimensione fissa delle icone, solo il bordo della dock e l'icona "
+#~ "<i> Mostra Applicazioni</i> 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 <milo@milo.name>, 2013, 2014, 2015, 2017, 2019, 2020.
# Gianvito Cavasoli <gianvito@gmx.it>, 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 <milo@milo.name>, 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 <milo@milo.name>\n"
+"Language-Team: Italian <micxgx@gmail.com>\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 <i>Applications</i> icon"
+msgstr "Mostra icona <i>Applicazioni</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Anima <i>Mostra applicazioni</i>"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Questo programma viene fornito senza ALCUNA GARANZIA.\n"
+"Per maggiori informazioni, consultare la <a href=\"https://www.gnu.org/"
+"licenses/old-licenses/gpl-2.0.html\">GNU General Public License, versione 2 "
+"o successiva</a>.<span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Formato: <Maiusc>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <htaira@redhat.com>, 2014, 2015.
# sicklylife <translation@sicklylife.jp>, 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 <jmatsuzawa@gnome.org>, 2013.
+# Debonne Hooties <debonne.hooties@gmail.com>, 2014-2017.
+# sicklylife <translation@sicklylife.jp>, 2019-2020.
+# Ryo Nakano <ryonakaknock3@gmail.com>, 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 <translation@sicklylife.jp>\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 <i>Applications</i> icon"
+msgstr "[アプリケーションを表示する] アイコンの表示"
+
+#: Settings.ui.h:43
+msgid "Move the applications button at the beginning of the dock."
+msgstr "ドックの先頭 (最上段または左端) に表示"
+
+#: Settings.ui.h:44
+msgid "Animate <i>Show Applications</i>."
+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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">このプログラムに<b>保証は一切ありません</b>。\n"
+"詳しくは <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">GNU 一般公衆ライセンス (GPL) バージョン 2</a> またはそれ以降のバージョンを"
+"ご覧ください。</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "表記法: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <kmaraas@gnome.org>, 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. <harald@fsfe.org>, 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 <kmaraas@gnome.org>\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. <harald@fsfe.org>\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 <i>Applications</i> icon"
+msgstr "Vis <i>programmer</i> 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 <i>Show Applications</i>."
+msgstr "Animere <i>Vis programmer</i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Dette programmet leveres med ABSOLUTT INGEN GARANTI.\n"
+"Se <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GNU "
+"General Public License, versjon 2 eller senere</a> for detaljer.</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Syntaks: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <reinouts@gnome.org>, 2013, 2014.
# Nathan Follens <nthn@unseen.is>, 2015-2017, 2019-2020.
# Hannie Dumoleyn <hannie@ubuntu-nl.org>, 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 <hey@morrisjobke.de>, 2014.
+# Jonatan Zeidler <jonatan_zeidler@hotmail.de>, 2012.
+# jonius <jonatan_zeidler@gmx.de>, 2012.
+# Heimen Stoffels <vistausss@outlook.com>, 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 <vistausss@outlook.com>\n"
+"Language-Team: Dutch <kde-i18n-doc@kde.org>\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 <i>Applications</i> icon"
+msgstr "Pictogram voor <i>Alle programma's</i> 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 <i>Show Applications</i>."
+msgstr "Animatie na klikken op <i>Alle programma's tonen</i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Dit programma wordt geleverd ZONDER ENIGE GARANTIE.\n"
+"Lees de <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">GNU General Public License, versie 2 of nieuwer</a>, voor meer informatie."
+"</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Syntax: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "Het gebied nabij de schermrand en de <i>Applicaties weergeven</i>-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 <piotrdrag@gmail.com>, 2011-2020.
# Aviary.pl <community-poland@mozilla.org>, 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ół <psokol.l10n@gmail.com>, 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ół <psokol.l10n@gmail.com>\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 <i>Applications</i> icon"
+msgstr "Przycisk <i>Wyświetl programy</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animowanie przycisku <i>Wyświetl programy</i>"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Niniejszy program rozpowszechniany jest bez "
+"jakiejkolwiek gwarancji.\n"
+"Więcej informacji: <a href=\"https://www.gnu.org/licenses/old-licenses/"
+"gpl-2.0.html\">Powszechna licencja publiczna GNU, wersja 2 lub późniejsza</"
+"a>.</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Składnia: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <hugokarvalho@hotmail.com>, 2021.
# Juliano de Souza Camargo <julianosc@protonmail.com>, 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 <carlos.spohr@gmail.com>, 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 <fitojb@ubuntu.com>\n"
+"Language-Team: Carlos Alberto Junior Spohr Poletto <carlos.spohr@gmail>\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 <i>Applications</i> icon"
+msgstr "Mostrar ícone das <i>Aplicações</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animar <i>Mostrar aplicações</i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Síntaxe: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <liverig@gmail.com>, 2013, 2014.
# Rafael Fontenelle <rafaelff@gnome.org>, 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 <carlos.spohr@gmail.com>, 2012.
+# Fábio Nogueira <fnogueira@gnome.org>, 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 <fitojb@ubuntu.com>\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 <i>Applications</i> icon"
+msgstr "Exibir ícone dos <i>Aplicativos</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "<i>Mostrar aplicativos</i> 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Este programa é distribuido SEM QUALQUER GARANTIA.\n"
+"Veja em <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">GNU General Public License, versão 2 ou posterior</a> para maiores "
+"detalhes.</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sintaxe: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <omerta13@yandex.ru>, 2011, 2012, 2013.
# Stas Solovey <whats_up@tut.by>, 2011, 2012, 2013, 2015, 2017.
#
+# #-#-#-#-# ru.po (dash-to-dock) #-#-#-#-#
+# Russian translation for dash-to-dock GNOME Shell extension
+# Ivan Komaritsyn <vantu5z@mail.ru>, 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 <vantu5z@mail.ru>\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 <i>Applications</i> icon"
+msgstr "Показывать иконку <i>«Приложения»</i>"
+
+#: Settings.ui.h:43
+msgid "Move the applications button at the beginning of the dock."
+msgstr "Расположить кнопку «Приложения» с другой стороны Дока."
+
+#: Settings.ui.h:44
+msgid "Animate <i>Show Applications</i>."
+msgstr "Анимация при показе <i>«Приложений»</i>"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Эта программа распространяется БЕЗ КАКИХ ЛИБО "
+"ГАРАНТИЙ.\n"
+"Смотри <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">GNU General Public License, версия 2 или позднее</a> для информации.</"
+"span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Синтаксис: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "При фиксированном размере иконок приложений активна только область иконки "
+#~ "<i>«Приложения»</i> и край дока."
+
+#~ 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ý <pavol@klacansky.com>, 2012.
# Dušan Kazik <prescott66@gmail.com>, 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 <prescott66@gmail.com>, 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 <prescott66@gmail.com>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+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 <i>Applications</i> icon"
+msgstr "Zobraziť ikonu <i>Aplikácie</i>"
+
+#: 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 <i>Show Applications</i>."
+msgstr "Animovať položku <i>Zobraziť aplikácie</i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Tento program je ABSOLÚTNE BEZ ZÁRUKY.\n"
+"Pre viac podrobností si pozrite <a href=\"https://www.gnu.org/licenses/old-"
+"licenses/gpl-2.0.html\">Licenciu GNU General Public, verzie 2 alebo novšiu</"
+"a>.</span>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "S pevnou veľkosťou ikon je aktívna iba hrana doku a ikona <i>Zobraziť "
+#~ "aplikácie</i>."
+
+#~ 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 @@
# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2012—2017.
# Марко М. Костић <marko.m.kostic@gmail.com>, 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 <EMAIL@ADDRESS>, 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: Слободан Терзић <Xabre@archlinux.info>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Синтакса: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Приказ иконице <i>Прикажи програме</i>"
+
+#: Settings.ui.h:46
+msgid "Move the applications button at the beginning of the dock."
+msgstr "Помери дугме програма на почетак дока."
+
+#: Settings.ui.h:47
+msgid "Animate <i>Show Applications</i>."
+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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Овај програм се доставља БЕЗ ИКАКВИХ ГАРАНЦИЈА.\n"
+"Погледајте <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">ГНУову Општу Јавну лиценцу, верзија 2 или каснија</a>, за детаље.</span>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "Ако се иконе преклапају на доку, приказује се само икона <i>Прикажи "
+#~ "програме</i>."
+
+#~ 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ć <gpopac@gmail.com>, 2012.
# Miroslav Nikolić <miroslavnikolic@rocketmail.com>, 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 <EMAIL@ADDRESS>, 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ć <Xabre@archlinux.info>\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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sintaksa: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <i>Applications</i> icon"
+msgstr "Prikaz ikonice <i>Prikaži programe</i>"
+
+#: 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 <i>Show Applications</i>."
+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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Ovaj program se dostavlja BEZ IKAKVIH GARANCIJA.\n"
+"Pogledajte <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+"\">GNUovu Opštu Javnu licencu, verzija 2 ili kasnija</a>, za detalje.</span>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "Ako se ikone preklapaju na doku, prikazuje se samo ikona <i>Prikaži "
+#~ "programe</i>."
+
+#~ 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 <snaggen@gmail.com>, 2014.
# Anders Jonsson <anders.jonsson@norsjovallen.se>, 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 <anders.jonsson@norsjovallen.se>, 2016.
+# Morgan Antonsson <morgan.antonsson@gmail.com>, 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 <morgan.antonsson@gmail.com>\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 <i>Applications</i> icon"
+msgstr "Visa <i>Program</i>-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 <i>Show Applications</i>."
+msgstr "Animera <i>Visa program</i>."
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Detta program kommer HELT UTAN GARANTI.\n"
+"Se <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GNU "
+"General Public License, version 2 eller senare</a> för detaljer.</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Syntax: <Skift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <libreajans@gmail.com>, 2014, 2019.
# Emin Tufan Çetin <etcetin@gmail.com>, 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 <mustafa.akgun@gmail.com>, 2015.
+# Çağatay Yiğit Şahin <cyigitsahin@outlook.com>, 2016.
+# Serdar Sağlam <teknomobil@yandex.com>, 2018, 2019.
+# Sabri Ünal <libreajans@gmail.com>, 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 <libreajans@gmail.com>\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 <i>Applications</i> icon"
+msgstr "<i>Uygulamalar</i> 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 <i>Show Applications</i>."
+msgstr "<i>Uygulamalar</i> 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">Bu program kesinlikle hiçbir garanti vermiyor..\n"
+"Ayrıntılar için <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0."
+"html\">GNU Genel Kamu Lisansı, sürüm 2 veya üstü</a> bağlantısına bakın</"
+"span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "Sözdizimi: <Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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 <jeffbai@aosc.xyz>, 2017.
# Dingzhong Chen <wsxy162@gmail.com>, 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.
+# 绿色圣光 <lishaohui.qd@163.com>, 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 <i>Applications</i> icon"
+msgstr "显示 <i>应用程序</i> 图标"
+
+#: Settings.ui.h:43
+msgid "Move the applications button at the beginning of the dock."
+msgstr "将应用程序图标移至 Dock 的起始位置"
+
+#: Settings.ui.h:44
+msgid "Animate <i>Show Applications</i>."
+msgstr "动画方式 <i>显示应用程序</i>"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">本程序不提供任何担保。\n"
+"参见 <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GNU "
+"通用公共许可证,第二版或更高版本</a>以了解更多细节。</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "语法:<Shift><Ctrl><Alt><Super>"
+
+#: 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 <i>Show "
+#~ "Applications</i> icon are active."
+#~ msgstr ""
+#~ "如果固定了图标大小,只有 dock 边缘和“<i>显示应用程序</i>”图标会激活该功"
+#~ "能。"
+
+#~ 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 <pswo10680@gmail.com>, 2011.
# pan93412 <pan93412@gmail.com>, 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 <pswo10680@gmail.com>, 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 <pan93412@gmail.com>\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 <i>Applications</i> icon"
+msgstr "顯示 <i>應用程式</i> 圖示"
+
+#: Settings.ui.h:43
+msgid "Move the applications button at the beginning of the dock."
+msgstr "將應用程式按鈕移動到 Dock 開頭。"
+
+#: Settings.ui.h:44
+msgid "Animate <i>Show Applications</i>."
+msgstr "讓 <i>顯示應用程式</i> 有動畫。"
+
+#: 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 ""
+"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
+"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>"
+msgstr ""
+"<span size=\"small\">本程式「絕無任何擔保」。\n"
+"請見 <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GNU "
+"通用公眾授權第 2 版,或後續版本</a> 深入瞭解更多細節。</span>"
+
+#: 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: <Shift>, <Ctrl>, <Alt>, <Super>"
+msgstr "語法:<Shift>, <Ctrl>, <Alt>, <Super>"
+
+#: 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?= <fmuellner@gnome.org>
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._buttons.length; ++i ) {
+ this._buttons[i].destroy();
+ }
+
+ this._display();
+ }
+
+ _display() {
+ let launchers = global.settings.get_strv(AppFavorites.getAppFavorites().FAVORITE_APPS_KEY);
+
+ this._buttons = [];
+ let j = 0;
+ for ( let i=0; i<launchers.length; ++i ) {
+ let app = Shell.AppSystem.get_default().lookup_app(launchers[i]);
+
+ if ( app == null ) {
+ continue;
+ }
+
+ let launcher = new PanelLauncher(app);
+ this.actor.add(launcher.actor);
+ launcher.actor.connect('notify::hover',
+ () => 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?= <fmuellner@gnome.org>
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 <http://www.gnu.org/licenses/>.
+ */
+
+/* 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 = '<node> \
+<interface name="org.freedesktop.PackageKit"> \
+ <method name="CreateTransaction"> \
+ <arg type="o" name="object_path" direction="out"/> \
+ </method> \
+ <signal name="UpdatesChanged"/> \
+</interface> \
+</node>';
+
+const PkOfflineIface = '<node> \
+<interface name="org.freedesktop.PackageKit.Offline"> \
+ <property name="UpdatePrepared" type="b" access="read"/> \
+ <property name="TriggerAction" type="s" access="read"/> \
+ <method name="Trigger"> \
+ <arg type="s" name="action" direction="in"/> \
+ </method> \
+ <method name="Cancel"/> \
+</interface> \
+</node>';
+
+const PkTransactionIface = '<node> \
+<interface name="org.freedesktop.PackageKit.Transaction"> \
+ <method name="SetHints"> \
+ <arg type="as" name="hints" direction="in"/> \
+ </method> \
+ <method name="GetUpdates"> \
+ <arg type="t" name="filter" direction="in"/> \
+ </method> \
+ <method name="UpdatePackages"> \
+ <arg type="t" name="transaction_flags" direction="in"/> \
+ <arg type="as" name="package_ids" direction="in"/> \
+ </method> \
+ <signal name="Package"> \
+ <arg type="u" name="info" direction="out"/> \
+ <arg type="s" name="package_id" direction="out"/> \
+ <arg type="s" name="summary" direction="out"/> \
+ </signal> \
+ <signal name="Finished"> \
+ <arg type="u" name="exit" direction="out"/> \
+ <arg type="u" name="runtime" direction="out"/> \
+ </signal> \
+</interface> \
+</node>';
+
+const LoginManagerIface = '<node> \
+<interface name="org.freedesktop.login1.Manager"> \
+<method name="Reboot"> \
+ <arg type="b" direction="in"/> \
+</method> \
+<method name="CanReboot"> \
+ <arg type="s" direction="out"/> \
+</method> \
+</interface> \
+</node>';
+
+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 &amp; 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist>
+ <schema path="/org/gnome/shell/extensions/updates-dialog/"
+ id="org.gnome.shell.extensions.updates-dialog">
+ <key name="grace-period" type="u">
+ <default>300</default>
+ <summary>Grace period in minutes</summary>
+ <description>
+ When the grace period is over, the computer will automatically
+ reboot and install security updates.
+ </description>
+ </key>
+ <key name="last-warning-period" type="u">
+ <default>10</default>
+ <summary>Last warning dialog period</summary>
+ <description>
+ A last warning dialog is displayed this many minutes before
+ the automatic reboot.
+ </description>
+ </key>
+ <key name="last-warnings" type="u">
+ <default>1</default>
+ <summary>Number of last warning dialogs</summary>
+ <description>
+ How many warning dialogs are displayed. Each is displayed at
+ 'last-warning-period' minute intervals.
+ </description>
+ </key>
+ </schema>
+</schemalist>
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 <csoriano@gnome.org>
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 <andrea.azzarone@canonical.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, 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 <http://www.gnu.org/licenses/>.
+ */
+
+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 <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, 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 <http://www.gnu.org/licenses/>.
+ */
+
+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 = `<node>
+<interface name='org.gnome.Nautilus.FileOperations'>
+ <method name='CopyURIs'>
+ <arg name='URIs' type='as' direction='in'/>
+ <arg name='Destination' type='s' direction='in'/>
+ </method>
+ <method name='MoveURIs'>
+ <arg name='URIs' type='as' direction='in'/>
+ <arg name='Destination' type='s' direction='in'/>
+ </method>
+ <method name='EmptyTrash'>
+ </method>
+ <method name='TrashFiles'>
+ <arg name='URIs' type='as' direction='in'/>
+ </method>
+ <method name='CreateFolder'>
+ <arg name='URI' type='s' direction='in'/>
+ </method>
+ <method name='RenameFile'>
+ <arg name='URI' type='s' direction='in'/>
+ <arg name='NewName' type='s' direction='in'/>
+ </method>
+ <method name='Undo'>
+ </method>
+ <method name='Redo'>
+ </method>
+ <property name='UndoStatus' type='i' access='read'/>
+</interface>
+</node>`;
+
+const NautilusFileOperationsProxyInterface = Gio.DBusProxy.makeProxyWrapper(NautilusFileOperationsInterface);
+
+const FreeDesktopFileManagerInterface = `<node>
+<interface name='org.freedesktop.FileManager1'>
+ <method name='ShowItems'>
+ <arg name='URIs' type='as' direction='in'/>
+ <arg name='StartupId' type='s' direction='in'/>
+ </method>
+ <method name='ShowItemProperties'>
+ <arg name='URIs' type='as' direction='in'/>
+ <arg name='StartupId' type='s' direction='in'/>
+ </method>
+</interface>
+</node>`;
+
+const FreeDesktopFileManagerProxyInterface = Gio.DBusProxy.makeProxyWrapper(FreeDesktopFileManagerInterface);
+
+const GnomeNautilusPreviewerInterface = `<node>
+<interface name='org.gnome.NautilusPreviewer'>
+ <method name='ShowFile'>
+ <arg name='FileUri' type='s' direction='in'/>
+ <arg name='ParentXid' type='i' direction='in'/>
+ <arg name='CloseIfShown' type='b' direction='in'/>
+ </method>
+</interface>
+</node>`;
+
+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 <csoriano@redhat.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, 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 <http://www.gnu.org/licenses/>.
+ */
+
+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 <csoriano@redhat.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, 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 <http://www.gnu.org/licenses/>.
+ */
+
+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 <csoriano@redhat.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, 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 <http://www.gnu.org/licenses/>.
+ */
+
+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 <csoriano@redhat.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, 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 <http://www.gnu.org/licenses/>.
+ */
+
+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 <csoriano@redhat.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, 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 <http://www.gnu.org/licenses/>.
+ */
+
+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(`Couldnt 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: Cant 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 _("Dont 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 <jmas@softcatala.org>, 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 <jmas@softcatala.org>\n"
+"Language-Team: Catalan <info@softcatala.org>\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 "Dont 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ý <marek@manet.cz>, 2018.
+# Milan Zink <zeten30@gmail.com>, 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 <mail@asciiwolf.com>\n"
+"Language-Team: Czech <zeten30@gmail.com>\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 "Dont 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 <alanmortensen.am@gmail.com>, 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 <dansk@dansk-gruppen.dk>\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 "Dont 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 <mario.blaettermann@gmail.com>, 2018.
+# rugk <rugk+i18n@posteo.de>, 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 <christian.kirbach@gmail.com>\n"
+"Language-Team: German <gnome-de@gnome.org>\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 "Dont 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 <manolis@kapcom.gr>, 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 <manolis@kapcom.gr>\n"
+"Language-Team: Greek, Modern (1453-) <gnome-el-list@gnome.org>\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 "Dont 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 <zbrown@gnome.org>, 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 <zbrown@gnome.org>\n"
+"Language-Team: English - United Kingdom <en_GB@li.org>\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 "Dont Allow Launching"
+msgstr "Dont 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 <EMAIL@ADDRESS>, YEAR.
+# Sergio Costas <rastersoft@gmail.com>, 2018.
+# Daniel Mustieles <daniel.mustieles@gmail.com>, 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 <daniel.mustieles@gmail.com>\n"
+"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\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 "Dont 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 <asier.sarasua@gmail.com>, 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 <asier.sarasua@gmail.com>\n"
+"Language-Team: Basque <librezale@librezale.eus>\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 "Dont 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 <dani.behzi@ubuntu.com>, 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 <fa@li.org>\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 "Dont 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 <jiri.gronroos@iki.fi>, 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 <jiri.gronroos+l10n@iki.fi>\n"
+"Language-Team: Finnish <lokalisointi-lista@googlegroups.com>\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 "Dont 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 <ghent.debian@gmail.com>, 2018.
+# Charles Monzat <charles.monzat@numericable.fr>, 2018.
+# Claude Paroz <claude@2xlibre.net>, 2020.
+# Sylvestris <sylvestris@tutanota.com>, 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 <sylvestris@tutanota.com>\n"
+"Language-Team: GNOME French Team <gnomefr@traduc.org>\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 larrière-plan…"
+
+#: desktopGrid.js:359
+msgid "Display Settings"
+msgstr "Configuration daffichage"
+
+#: 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 "Dont 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 dicô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 licô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 <f.t.public@gmail.com>, 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 <f.t.public@gmail.com>\n"
+"Language-Team: Friulian <fur@li.org>\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 "Dont 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 <EMAIL@ADDRESS>, 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 <trebelnik2@gmail.com>\n"
+"Language-Team: Croatian <hr@li.org>\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 "Dont 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 <ur.balazs at fsf dot hu>, 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 <ur.balazs at fsf dot hu>\n"
+"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\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 "Dont 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 <kukuhsyafaat@gnome.org>, 2018-2020.
+# Andika Triwidada <andika@gmail.com>, 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 <andika@gmail.com>\n"
+"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\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 "Dont 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 <max.bra.gtalk@gmail.com>, 2019.
+# Milo Casagrande <milo@milo.name>, 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 <milo@milo.name>\n"
+"Language-Team: Italian <tp@lists.linux.it>\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 "Dont 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 <translation@sicklylife.jp>, 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 <translation@sicklylife.jp>\n"
+"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\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 "Dont 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 <EMAIL@ADDRESS>, 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 <selyan.kab@protonmail.com>\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 "Dont 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 <EMAIL@ADDRESS>, YEAR.
+# Kuroe Hanako <kmj10727@gmail.com>, 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 <kmj10727@gmail.com>\n"
+"Language-Team: Korean <kmj10727@gmail.com>\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 "Dont 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 <nthn@unseen.is>, 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 <nthn@unseen.is>\n"
+"Language-Team: Dutch <gnome-nl-list@gnome.org>\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 "Dont 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 <EMAIL@ADDRESS>, 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 "Dont 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 lescobilhiè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 <piotrdrag@gmail.com>, 2018-2020.
+# Aviary.pl <community-poland@mozilla.org>, 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 <piotrdrag@gmail.com>\n"
+"Language-Team: Polish <community-poland@mozilla.org>\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 "Dont 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 <hugokarvalho@hotmail.com>, 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 <pt@li.org>\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 <hugokarvalho@hotmail.com>\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 "Dont 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 <liverig@gmail.com>, 2018.
+# Rafael Fontenelle <rafaelff@gnome.org>, 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 <rafaelff@gnome.org>\n"
+"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\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 "Dont 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 <emryslokadottir@gmail.com>, 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 <emryslokadottir [at] gmail [dot] com>\n"
+"Language-Team: Romanian <gnomero-list@lists.sourceforge.net>\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 "Dont 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 <eaglersdeveloper@gmail.com>, 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 <whats_up@tut.by>\n"
+"Language-Team: Russian <gnome-cyr@gnome.org>\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 "Dont 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 <prescott66@gmail.com>, 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 <gnome-sk-list@gnome.org>\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 <prescott66@gmail.com>\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 "Dont 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č <mateju@svn.gnome.org>, + 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 <gnome-si@googlegroups.com>\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 "Dont 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.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 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: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: српски <gnome-sr@googlegroups.org>\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 "Dont 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 <anders.jonsson@norsjovallen.se>, 2018, 2019, 2020.
+# Josef Andersson <l10nl18nsweja@gmail.com>, 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 <anders.jonsson@norsjovallen.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\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 "Dont 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 <libreajans@gmail.com>, 2019.
+# Serdar Sağlam <teknomobil@yandex.com>, 2019
+# Emin Tufan Çetin <etcetin@gmail.com>, 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 <etcetin@gmail.com>\n"
+"Language-Team: Türkçe <gnome-turk@gnome.org>\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 "Dont 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 <yurchor@ukr.net>, 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 <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\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 "Dont 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 <wsxy162@gmail.com>, 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) <i18n-zh@googlegroups.com>\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 "Dont 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 <pan93412@gmail.com>, 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 <pan93412@gmail.com>\n"
+"Language-Team: Chinese (Taiwan) <chinese-l10n@googlegroups.com>\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 "Dont 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 <csoriano@redhat.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, 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 <http://www.gnu.org/licenses/>.
+ */
+
+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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist gettext-domain="desktop-icons">
+ <enum id="org.gnome.shell.extension.desktop-icons.ZoomLevel">
+ <value value="0" nick="small"/>
+ <value value="1" nick="standard"/>
+ <value value="2" nick="large"/>
+ </enum>
+ <schema path="/org/gnome/shell/extensions/desktop-icons/" id="org.gnome.shell.extensions.desktop-icons">
+ <key name="icon-size" enum="org.gnome.shell.extension.desktop-icons.ZoomLevel">
+ <default>'standard'</default>
+ <summary>Icon size</summary>
+ <description>Set the size for the desktop icons.</description>
+ </key>
+ <key type="b" name="show-home">
+ <default>true</default>
+ <summary>Show personal folder</summary>
+ <description>Show the personal folder in the desktop.</description>
+ </key>
+ <key type="b" name="show-trash">
+ <default>true</default>
+ <summary>Show trash icon</summary>
+ <description>Show the trash icon in the desktop.</description>
+ </key>
+ <key type="b" name="show-mount">
+ <default>true</default>
+ <summary>Show mounted drives</summary>
+ <description>Show mounted drives in the desktop.</description>
+ </key>
+ </schema>
+</schemalist>
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 <http://www.gnu.org/licenses/>.
+ */
+
+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 <jmas@softcatala.org>, 2011.
# Gil Forcada <gilforcada@guifi.net>, 2012, 2013, 2014.
#
+# #-#-#-#-# ca.po (1.0) #-#-#-#-#
+# This file is distributed under the same license as the PACKAGE package.
+# Jordi Mas i Hernandez <jmas@softcatala.org>, 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 <jmas@softcatala.org>\n"
+"Language-Team: Catalan <info@softcatala.org>\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 "Dont 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ý <jiri.doubravsky@gmail.com>, 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ý <marek@manet.cz>, 2018.
+# Milan Zink <zeten30@gmail.com>, 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 <mail@asciiwolf.com>\n"
+"Language-Team: Czech <zeten30@gmail.com>\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 "Dont 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 <asklarsen@gmail.com>, 2015, 2017.
# Joe Hansen <joedalton2@yahoo.dk>, 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 <alanmortensen.am@gmail.com>, 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 <dansk@dansk-gruppen.dk>\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 "Dont 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 <jonatan_zeidler@hotmail.de>, 2012
# jonius <jonatan_zeidler@gmx.de>, 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 <mario.blaettermann@gmail.com>, 2018.
+# rugk <rugk+i18n@posteo.de>, 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 <christian.kirbach@gmail.com>\n"
+"Language-Team: German <gnome-de@gnome.org>\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 "Dont 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 @@
# Δημήτριος-Ρωμανός Ησαΐας <dirosissaias@cosmotemail.gr>, 2017.
# Vangelis Skarmoutsos <skarmoutsosv@gmail.com>, 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 <manolis@kapcom.gr>, 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 <manolis@kapcom.gr>\n"
+"Language-Team: Greek, Modern (1453-) <gnome-el-list@gnome.org>\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 "Dont 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 <philip@tecnocode.co.uk>, 2014.
# Zander Brown <zbrown@gnome.org>, 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 <zbrown@gnome.org>, 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 <zbrown@gnome.org>\n"
+"Language-Team: English - United Kingdom <en_GB@li.org>\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 "Dont Allow Launching"
+msgstr "Dont 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 <hugolabe@gmail.com>, 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 <EMAIL@ADDRESS>, YEAR.
+# Sergio Costas <rastersoft@gmail.com>, 2018.
+# Daniel Mustieles <daniel.mustieles@gmail.com>, 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 <daniel.mustieles@gmail.com>\n"
+"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\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 "Dont 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 <ibai@oihanguren.com>, 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 <asier.sarasua@gmail.com>, 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 <asier.sarasua@gmail.com>\n"
+"Language-Team: Basque <librezale@librezale.eus>\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 "Dont 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 <mousavi.arash@gmail.com>, 2011-2017.
# Danial Behzadi <dani.behzi@ubuntu.com>, 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 <dani.behzi@ubuntu.com>, 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 <fa@li.org>\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 "Dont 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 its 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 <vpvainio@iki.fi>, 2011.
# Jiri Grönroos <jiri.gronroos+l10n@iki.fi>, 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 <jiri.gronroos@iki.fi>, 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 <jiri.gronroos+l10n@iki.fi>\n"
+"Language-Team: Finnish <lokalisointi-lista@googlegroups.com>\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 "Dont 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 <EMAIL@ADDRESS>, 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 <ghent.debian@gmail.com>, 2018.
+# Charles Monzat <charles.monzat@numericable.fr>, 2018.
+# Claude Paroz <claude@2xlibre.net>, 2020.
+# Sylvestris <sylvestris@tutanota.com>, 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 <sylvestris@tutanota.com>\n"
+"Language-Team: GNOME French Team <gnomefr@traduc.org>\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 dapparition (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 larrière-plan…"
+
+#: desktopGrid.js:359
+msgid "Display Settings"
+msgstr "Configuration daffichage"
+
+#: 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 "Dont 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 dicô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 licô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 <f.t.public@gmail.com>, 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 <f.t.public@gmail.com>, 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 <f.t.public@gmail.com>\n"
+"Language-Team: Friulian <fur@li.org>\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 "Dont 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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>, 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 <trebelnik2@gmail.com>\n"
+"Language-Team: Croatian <hr@li.org>\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 "Dont 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 <urbalazs@gmail.com>, 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 <ur.balazs at fsf dot hu>, 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 <ur.balazs at fsf dot hu>\n"
+"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\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 "Dont 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 <EMAIL@ADDRESS>, 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 <kukuhsyafaat@gnome.org>, 2018-2020.
+# Andika Triwidada <andika@gmail.com>, 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 <andika@gmail.com>\n"
+"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\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 "Dont 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 <milo@milo.name>, 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 <max.bra.gtalk@gmail.com>, 2019.
+# Milo Casagrande <milo@milo.name>, 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 <milo@milo.name>\n"
+"Language-Team: Italian <tp@lists.linux.it>\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 "Dont 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 <translation@sicklylife.jp>, 2019-2020.
# Ryo Nakano <ryonakaknock3@gmail.com>, 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 <translation@sicklylife.jp>, 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 <translation@sicklylife.jp>\n"
+"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\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 "Dont 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 <EMAIL@ADDRESS>, 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 <yacinebouklif@gmail.com>\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 <selyan.kab@protonmail.com>\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 "Dont 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 <darkcircle.0426@gmail.com>, 2012.
# Changwoo Ryu <cwryu@debian.org>, 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 <EMAIL@ADDRESS>, YEAR.
+# Kuroe Hanako <kmj10727@gmail.com>, 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 <kmj10727@gmail.com>\n"
+"Language-Team: Korean <kmj10727@gmail.com>\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 "Dont 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 <jonatan_zeidler@hotmail.de>, 2012.
# jonius <jonatan_zeidler@gmx.de>, 2012.
# Heimen Stoffels <vistausss@outlook.com>, 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 <nthn@unseen.is>, 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 <nthn@unseen.is>\n"
+"Language-Team: Dutch <gnome-nl-list@gnome.org>\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 "Dont 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) <cvalmary@yahoo.fr>, 2015.
# Cédric Valmary (totenoc.eu) <cvalmary@yahoo.fr>, 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 <EMAIL@ADDRESS>, 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 "Dont 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 lescobilhiè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ół <psokol.l10n@gmail.com>, 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 <piotrdrag@gmail.com>, 2018-2020.
+# Aviary.pl <community-poland@mozilla.org>, 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 <piotrdrag@gmail.com>\n"
+"Language-Team: Polish <community-poland@mozilla.org>\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 "Dont 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 <carlos.spohr@gmail.com>, 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 <hugokarvalho@hotmail.com>, 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 <pt@li.org>\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 <hugokarvalho@hotmail.com>\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 "Dont 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 <carlos.spohr@gmail.com>, 2012.
# Fábio Nogueira <fnogueira@gnome.org>, 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 <liverig@gmail.com>, 2018.
+# Rafael Fontenelle <rafaelff@gnome.org>, 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 <rafaelff@gnome.org>\n"
+"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\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 "Dont 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 <mintoi.bogdan@gmail.com>, 2014.
# Daniel Șerbănescu <daniel [at] serbanescu [dot] dk>, 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 <emryslokadottir@gmail.com>, 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 <emryslokadottir [at] gmail [dot] com>\n"
+"Language-Team: Romanian <gnomero-list@lists.sourceforge.net>\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 "Dont 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 <vantu5z@mail.ru>, 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 <eaglersdeveloper@gmail.com>, 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 <whats_up@tut.by>\n"
+"Language-Team: Russian <gnome-cyr@gnome.org>\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 "Dont 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 <prescott66@gmail.com>, 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 <prescott66@gmail.com>, 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 <gnome-sk-list@gnome.org>\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 <prescott66@gmail.com>\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 "Dont 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č <mateju@svn.gnome.org>, 20182020.
#
+# #-#-#-#-# 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č <mateju@svn.gnome.org>, + 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 <gnome-si@googlegroups.com>\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 "Dont 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 <EMAIL@ADDRESS>, 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.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 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: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: српски <gnome-sr@googlegroups.org>\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 "Dont 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 <anders.jonsson@norsjovallen.se>, 2016.
# Morgan Antonsson <morgan.antonsson@gmail.com>, 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 <anders.jonsson@norsjovallen.se>, 2018, 2019, 2020.
+# Josef Andersson <l10nl18nsweja@gmail.com>, 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 <anders.jonsson@norsjovallen.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\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 "Dont 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 <libreajans@gmail.com>, 2019.
+# Serdar Sağlam <teknomobil@yandex.com>, 2019
+# Emin Tufan Çetin <etcetin@gmail.com>, 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 <etcetin@gmail.com>\n"
+"Language-Team: Türkçe <gnome-turk@gnome.org>\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 "Dont 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 <ted.korostiled@gmail.com>, 2013, 2014, 2015, 2017.
# vikaig <vikaig99@gmail.com>, 2019.
# Yuri Chornoivan <yurchor@ukr.net>, 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 <yurchor@ukr.net>, 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 <yurchor@ukr.net>\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 <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\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 "Dont 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 @@
# 绿色圣光 <lishaohui.qd@163.com>, 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 <wsxy162@gmail.com>, 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) <i18n-zh@googlegroups.com>\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 "Dont 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 <pswo10680@gmail.com>, 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 <pan93412@gmail.com>, 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 <pan93412@gmail.com>\n"
+"Language-Team: Chinese (Taiwan) <chinese-l10n@googlegroups.com>\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 "Dont 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?= <fmuellner@gnome.org>
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 <http://www.gnu.org/licenses/>.
+ *
+ * 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 @@
+<schemalist gettext-domain="gnome-shell-extensions">
+ <schema id="org.gnome.shell.extensions.classification-banner"
+ path="/org/gnome/shell/extensions/classification-banner/">
+ <key name="top-banner" type="b">
+ <default>true</default>
+ <summary>Show a banner at the top</summary>
+ </key>
+ <key name="bottom-banner" type="b">
+ <default>true</default>
+ <summary>Show a banner at the bottom</summary>
+ </key>
+ <key name="message" type="s">
+ <default>"UNCLASSIFIED"</default>
+ <summary>classification message</summary>
+ </key>
+ <key name="color" type="s">
+ <default>"#fff"</default>
+ <summary>text color</summary>
+ </key>
+ <key name="background-color" type="s">
+ <default>"rgba(0,122,51,0.75)"</default>
+ <summary>background color</summary>
+ </key>
+ <key name="system-info" type="b">
+ <default>false</default>
+ <summary>Include system info in top banner</summary>
+ </key>
+ </schema>
+</schemalist>
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?= <fmuellner@gnome.org>
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 <http://www.gnu.org/licenses/>.
+ *
+ * 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