From 576b35a13447d9df2425e6214ac17ad8ea82fe7e Mon Sep 17 00:00:00 2001 From: Tan Nguyen Date: Fri, 2 Feb 2024 16:05:26 +0700 Subject: [PATCH 1/2] :+1: update extension and configs --- .config/ulauncher/extensions.json | 4 +- zorin/.config/dconf/user | Bin 34355 -> 41376 bytes zorin/.config/mimeapps.list | 4 +- .../share/gnome-shell/application_state | 48 +- .../caffeine@patapon.info/extension.js | 1156 ++++++++++++--- .../caffeine-infinite-timer-symbolic.svg | 37 + .../icons/caffeine-long-timer-symbolic.svg | 50 + .../icons/caffeine-medium-timer-symbolic.svg | 50 + .../icons/caffeine-short-timer-symbolic.svg | 3 + .../actions/applications-symbolic.svg | 56 + .../scalable/actions/general-symbolic.svg | 64 + .../icons/my-caffeine-off-symbolic.svg | 50 +- .../icons/my-caffeine-on-symbolic.svg | 50 +- .../icons/stopwatch-symbolic.svg | 2 + .../gnome-shell-extension-caffeine.mo | Bin 0 -> 5649 bytes .../gnome-shell-extension-caffeine.mo | Bin 2236 -> 5131 bytes .../gnome-shell-extension-caffeine.mo | Bin 1977 -> 1969 bytes .../gnome-shell-extension-caffeine.mo | Bin 1331 -> 4925 bytes .../gnome-shell-extension-caffeine.mo | Bin 2157 -> 2196 bytes .../gnome-shell-extension-caffeine.mo | Bin 2207 -> 6433 bytes .../gnome-shell-extension-caffeine.mo | Bin 1699 -> 1199 bytes .../gnome-shell-extension-caffeine.mo | Bin 0 -> 2994 bytes .../gnome-shell-extension-caffeine.mo | Bin 0 -> 5964 bytes .../gnome-shell-extension-caffeine.mo | Bin 1351 -> 868 bytes .../gnome-shell-extension-caffeine.mo | Bin 0 -> 4299 bytes .../gnome-shell-extension-caffeine.mo | Bin 1369 -> 887 bytes .../gnome-shell-extension-caffeine.mo | Bin 2699 -> 3909 bytes .../gnome-shell-extension-caffeine.mo | Bin 1383 -> 6139 bytes .../gnome-shell-extension-caffeine.mo | Bin 1919 -> 1297 bytes .../gnome-shell-extension-caffeine.mo | Bin 2085 -> 1534 bytes .../gnome-shell-extension-caffeine.mo | Bin 2075 -> 5817 bytes .../caffeine@patapon.info/metadata.json | 6 +- .../preferences/appsPage.js | 226 +++ .../preferences/displayPage.js | 137 ++ .../preferences/generalPage.js | 390 +++++ .../extensions/caffeine@patapon.info/prefs.js | 359 +---- .../schemas/gschemas.compiled | Bin 708 -> 1612 bytes ...nome.shell.extensions.caffeine.gschema.xml | 91 +- .../LICENSE} | 1 + .../README.md | 54 + .../confirmDialog.js | 48 +- .../dataStructures.js | 417 ++++++ .../extension.js | 1314 +++++++++++++++++ .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 1058 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 976 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 2548 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 2705 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 1053 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 2702 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 1296 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 1493 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 899 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 2641 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 1345 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 1345 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 1395 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 3002 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 1886 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 1311 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 1000 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 2789 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 3336 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 1174 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 1329 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 3191 bytes .../clipboard-history@alexsaveau.dev.mo | Bin 0 -> 2567 bytes .../metadata.json | 15 + .../clipboard-history@alexsaveau.dev/prefs.js | 446 ++++++ .../schemas/gschemas.compiled | Bin 0 -> 1520 bytes ...extensions.clipboard-indicator.gschema.xml | 136 ++ .../settingsFields.js | 18 + .../clipboard-history@alexsaveau.dev/store.js | 511 +++++++ .../stylesheet.css | 34 + .../README.rst | 22 - .../extension.js | 883 ----------- .../ar/LC_MESSAGES/clipboard-indicator.mo | Bin 1937 -> 0 bytes .../ar/LC_MESSAGES/clipboard-indicator.po | 143 -- .../ca/LC_MESSAGES/clipboard-indicator.mo | Bin 1787 -> 0 bytes .../ca/LC_MESSAGES/clipboard-indicator.po | 143 -- .../cs/LC_MESSAGES/clipboard-indicator.mo | Bin 1980 -> 0 bytes .../cs/LC_MESSAGES/clipboard-indicator.po | 144 -- .../de/LC_MESSAGES/clipboard-indicator.mo | Bin 2468 -> 0 bytes .../de/LC_MESSAGES/clipboard-indicator.po | 142 -- .../el/LC_MESSAGES/clipboard-indicator.mo | Bin 1581 -> 0 bytes .../el/LC_MESSAGES/clipboard-indicator.po | 139 -- .../es/LC_MESSAGES/clipboard-indicator.mo | Bin 1767 -> 0 bytes .../es/LC_MESSAGES/clipboard-indicator.po | 143 -- .../es_ES/LC_MESSAGES/clipboard-indicator.mo | Bin 1074 -> 0 bytes .../es_ES/LC_MESSAGES/clipboard-indicator.po | 63 - .../eu/LC_MESSAGES/clipboard-indicator.mo | Bin 2307 -> 0 bytes .../eu/LC_MESSAGES/clipboard-indicator.po | 139 -- .../fi/LC_MESSAGES/clipboard-indicator.mo | Bin 1298 -> 0 bytes .../fi/LC_MESSAGES/clipboard-indicator.po | 140 -- .../fr_FR/LC_MESSAGES/clipboard-indicator.mo | Bin 1961 -> 0 bytes .../fr_FR/LC_MESSAGES/clipboard-indicator.po | 143 -- .../hu/LC_MESSAGES/clipboard-indicator.mo | Bin 1997 -> 0 bytes .../hu/LC_MESSAGES/clipboard-indicator.po | 143 -- .../it/LC_MESSAGES/clipboard-indicator.mo | Bin 2018 -> 0 bytes .../it/LC_MESSAGES/clipboard-indicator.po | 146 -- .../locale/ja/LC_MESSAGES/ja.mo | Bin 1729 -> 0 bytes .../locale/ja/LC_MESSAGES/ja.po | 150 -- .../pl/LC_MESSAGES/clipboard-indicator.mo | Bin 1684 -> 0 bytes .../pl/LC_MESSAGES/clipboard-indicator.po | 149 -- .../pt_BR/LC_MESSAGES/clipboard-indicator.mo | Bin 1717 -> 0 bytes .../pt_BR/LC_MESSAGES/clipboard-indicator.po | 146 -- .../ru/LC_MESSAGES/clipboard-indicator.mo | Bin 1513 -> 0 bytes .../ru/LC_MESSAGES/clipboard-indicator.po | 143 -- .../sk/LC_MESSAGES/clipboard-indicator.mo | Bin 2157 -> 0 bytes .../sk/LC_MESSAGES/clipboard-indicator.po | 149 -- .../tr/LC_MESSAGES/clipboard-indicator.mo | Bin 1282 -> 0 bytes .../tr/LC_MESSAGES/clipboard-indicator.po | 139 -- .../zh_CN/LC_MESSAGES/clipboard-indicator.mo | Bin 1650 -> 0 bytes .../zh_CN/LC_MESSAGES/clipboard-indicator.po | 146 -- .../metadata.json | 11 - .../clipboard-indicator@tudmotu.com/prefs.js | 343 ----- .../schemas/gschemas.compiled | Bin 1363 -> 0 bytes ...extensions.clipboard-indicator.gschema.xml | 133 -- .../stylesheet.css | 21 - .../clipboard-indicator@tudmotu.com/utils.js | 134 -- zorin/.local/share/gnome-shell/notifications | Bin 775 -> 4033 bytes 120 files changed, 5178 insertions(+), 4796 deletions(-) create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-infinite-timer-symbolic.svg create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-long-timer-symbolic.svg create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-medium-timer-symbolic.svg create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-short-timer-symbolic.svg create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/hicolor/scalable/actions/applications-symbolic.svg create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/hicolor/scalable/actions/general-symbolic.svg create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/stopwatch-symbolic.svg create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/cs/LC_MESSAGES/gnome-shell-extension-caffeine.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/ka/LC_MESSAGES/gnome-shell-extension-caffeine.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/nl/LC_MESSAGES/gnome-shell-extension-caffeine.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/pr_BR/LC_MESSAGES/gnome-shell-extension-caffeine.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/preferences/appsPage.js create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/preferences/displayPage.js create mode 100644 zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/preferences/generalPage.js rename zorin/.local/share/gnome-shell/extensions/{clipboard-indicator@tudmotu.com/LICENSE.rst => clipboard-history@alexsaveau.dev/LICENSE} (97%) create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/README.md rename zorin/.local/share/gnome-shell/extensions/{clipboard-indicator@tudmotu.com => clipboard-history@alexsaveau.dev}/confirmDialog.js (64%) create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/dataStructures.js create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/extension.js create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/ar/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/ca/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/cs/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/de/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/el/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/es/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/eu/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/fa/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/fi/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/fr/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/fr_FR/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/hu/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/it/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/ja/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/nl/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/oc/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/pl/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/pt_BR/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/ru/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/sk/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/tr/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/uk/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/zh_CN/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/metadata.json create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/prefs.js create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/schemas/gschemas.compiled create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/schemas/org.gnome.shell.extensions.clipboard-indicator.gschema.xml create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/settingsFields.js create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/store.js create mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/stylesheet.css delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/README.rst delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/extension.js delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ar/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ar/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ca/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ca/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/cs/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/cs/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/de/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/de/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/el/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/el/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es_ES/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es_ES/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/eu/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/eu/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/fi/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/fi/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/fr_FR/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/fr_FR/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/hu/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/hu/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/it/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/it/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ja/LC_MESSAGES/ja.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ja/LC_MESSAGES/ja.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pl/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pl/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pt_BR/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pt_BR/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ru/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ru/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/sk/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/sk/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/tr/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/tr/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/zh_CN/LC_MESSAGES/clipboard-indicator.mo delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/zh_CN/LC_MESSAGES/clipboard-indicator.po delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/metadata.json delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/prefs.js delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/schemas/gschemas.compiled delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/schemas/org.gnome.shell.extensions.clipboard-indicator.gschema.xml delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/stylesheet.css delete mode 100644 zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/utils.js diff --git a/.config/ulauncher/extensions.json b/.config/ulauncher/extensions.json index a12832c..7238e2c 100644 --- a/.config/ulauncher/extensions.json +++ b/.config/ulauncher/extensions.json @@ -16,14 +16,14 @@ "com.github.brpaz.ulauncher-timestamp": { "id": "com.github.brpaz.ulauncher-timestamp", "url": "https://github.com/brpaz/ulauncher-timestamp", - "updated_at": "2023-12-08T02:10:39.017559", + "updated_at": "2024-02-01T21:50:59.845185", "last_commit": "e366a81f92b8130dddc0b1bddecad253124c49b9", "last_commit_time": "2021-12-12T15:49:08" }, "com.github.ulauncher.ulauncher-hash": { "id": "com.github.ulauncher.ulauncher-hash", "url": "https://github.com/Ulauncher/ulauncher-hash", - "updated_at": "2023-12-08T10:18:42.039069", + "updated_at": "2024-02-01T21:55:50.370690", "last_commit": "237dbb3610ff04df993c3223b12df42cb7df221f", "last_commit_time": "2022-09-04T14:29:55" } diff --git a/zorin/.config/dconf/user b/zorin/.config/dconf/user index 4cd3a5ff334cc87c7d64732edc10e2e797cda93d..6c0a2f00105b0891914b8b76078d4cb82b264e44 100644 GIT binary patch literal 41376 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 aZtM$4%b}6}f7p7@qDPay*Mp8XU;wM+*6+O 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 GeE%P0GwHkl diff --git a/zorin/.config/mimeapps.list b/zorin/.config/mimeapps.list index f83cf0e..2c0420f 100644 --- a/zorin/.config/mimeapps.list +++ b/zorin/.config/mimeapps.list @@ -1,6 +1,6 @@ [Added Associations] application/vnd.debian.binary-package=gnome-software-local-file.desktop;snap-store_ubuntu-software-local-file.desktop; -inode/directory=webstorm_webstorm.desktop;code_code.desktop;phpstorm_phpstorm.desktop;code.desktop; +inode/directory=phpstorm_phpstorm.desktop;code_code.desktop;webstorm_webstorm.desktop;code.desktop; x-content/audio-player=rhythmbox-device.desktop; x-content/image-dcf=org.gnome.eog.desktop; video/mp4=org.gnome.Totem.desktop;vlc.desktop; @@ -84,7 +84,7 @@ application/xhtml+xml=google-chrome.desktop;sidekick-browser.desktop; x-scheme-handler/https=google-chrome.desktop;sidekick-browser.desktop; x-scheme-handler/sms=org.gnome.Shell.Extensions.ZorinConnect.desktop; x-scheme-handler/tel=org.gnome.Shell.Extensions.ZorinConnect.desktop; -application/x-shellscript=org.gnome.gedit.desktop; +application/x-shellscript=com.zorin.exec-guard.linux.desktop;org.gnome.gedit.desktop; application/x-rpm=gnome-software-local-file.desktop; image/x-canon-cr2=org.gnome.eog.desktop; diff --git a/zorin/.local/share/gnome-shell/application_state b/zorin/.local/share/gnome-shell/application_state index d6ddc16..f7809a4 100644 --- a/zorin/.local/share/gnome-shell/application_state +++ b/zorin/.local/share/gnome-shell/application_state @@ -1,30 +1,32 @@ - - - - - - + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/extension.js b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/extension.js index 72d3736..3917ce2 100644 --- a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/extension.js +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/extension.js @@ -1,51 +1,56 @@ /* -*- mode: js2 - indent-tabs-mode: nil - js2-basic-offset: 4 -*- */ -/*jshint multistr:true */ -/*jshint esnext:true */ -/*global imports: true */ -/*global global: true */ -/*global log: true */ +/* jshint multistr:true */ +/* jshint esnext:true */ +/* exported enable disable init */ /** - 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 . -**/ + * 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 . + **/ 'use strict'; -const St = imports.gi.St; -const Gio = imports.gi.Gio; -const GObject = imports.gi.GObject; -const Main = imports.ui.main; -const Mainloop = imports.mainloop; -const PanelMenu = imports.ui.panelMenu; -const Shell = imports.gi.Shell; -const MessageTray = imports.ui.messageTray; -const Atk = imports.gi.Atk; +const { Atk, Gtk, Gio, GObject, Shell, St, Meta, Clutter, GLib } = imports.gi; const Config = imports.misc.config; +const Main = imports.ui.main; +const PopupMenu = imports.ui.popupMenu; +const QuickSettings = imports.ui.quickSettings; +const QuickSettingsMenu = imports.ui.main.panel.statusArea.quickSettings; + +const ShellVersion = Number(Config.PACKAGE_VERSION.split('.')[0]); const INHIBIT_APPS_KEY = 'inhibit-apps'; const SHOW_INDICATOR_KEY = 'show-indicator'; const SHOW_NOTIFICATIONS_KEY = 'show-notifications'; +const SHOW_TIMER_KEY= 'show-timer'; +const DURATION_TIMER_INDEX= 'duration-timer'; +const TOGGLE_STATE_KEY= 'toggle-state'; const USER_ENABLED_KEY = 'user-enabled'; const RESTORE_KEY = 'restore-state'; const FULLSCREEN_KEY = 'enable-fullscreen'; -const NIGHT_LIGHT_KEY = 'control-nightlight'; -const NIGHT_LIGHT_APP_ONLY_KEY = 'control-nightlight-for-app'; +const NIGHT_LIGHT_KEY = 'nightlight-control'; +const TOGGLE_SHORTCUT = 'toggle-shortcut'; +const TIMER_KEY = 'countdown-timer'; +const SCREEN_BLANK = 'screen-blank'; +const TRIGGER_APPS_MODE = 'trigger-apps-mode'; +const INDICATOR_POSITION = 'indicator-position'; +const INDICATOR_INDEX = 'indicator-position-index'; +const INDICATOR_POS_MAX = 'indicator-position-max'; const Gettext = imports.gettext.domain('gnome-shell-extension-caffeine'); const _ = Gettext.gettext; -const Me = imports.misc.extensionUtils.getCurrentExtension(); -const Convenience = Me.imports.convenience; +const ExtensionUtils = imports.misc.extensionUtils; +const Me = ExtensionUtils.getCurrentExtension(); const ColorInterface = ' \ \ @@ -92,101 +97,329 @@ const DBusSessionManagerInhibitorIface = '\ const DBusSessionManagerInhibitorProxy = Gio.DBusProxy.makeProxyWrapper(DBusSessionManagerInhibitorIface); -const IndicatorName = "Caffeine"; +const IndicatorName = 'Caffeine'; +const TimerMenuName = _('Caffeine timer'); const DisabledIcon = 'my-caffeine-off-symbolic'; const EnabledIcon = 'my-caffeine-on-symbolic'; +const TimerMenuIcon = 'stopwatch-symbolic'; + +const ControlContext = { + NEVER: 0, + ALWAYS: 1, + FOR_APPS: 2, +}; + +const ShowIndicator = { + ONLY_ACTIVE: 0, + ALWAYS: 1, + NEVER: 2, +}; + +const AppsTrigger = { + ON_RUNNING: 0, + ON_FOCUS: 1, + ON_ACTIVE_WORKSPACE: 2, +}; + +const TIMERS = [ + [5,10,15,20,30,'caffeine-short-timer-symbolic'], + [10,20,30,40,50,'caffeine-medium-timer-symbolic'], + [30,45,60,75,80,'caffeine-long-timer-symbolic'], + [0,0,0,0,0,'caffeine-infinite-timer-symbolic'], +]; let CaffeineIndicator; -let ShellVersion = parseInt(Config.PACKAGE_VERSION.split(".")[1]); +/* +* ------- Load custom icon ------- +* hack (for Wayland?) via https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/1997 +* +* For some reasons, I cannot use this instead: +* 'let iconTheme = Gtk.IconTheme.get_for_display(Gdk.Display.get_default())' +* see https://gjs.guide/extensions/upgrading/gnome-shell-40.html#custom-icon-theme +* I get this error: "TypeError: Gtk.IconTheme.get_for_display is not a function" +* This same line of code works on prefs.js... (Gnome 43) +*/ +Gtk.IconTheme.get_default = function() { + let theme = new Gtk.IconTheme(); + // gnome-shell switched away from GTK3 during the `44.rc` release. The Gtk.IconTheme method `set_custom_name` + // has been renamed to `set_theme_name`. The below line allows support for all versions of GNOME 43 and 44+. + if (theme.set_theme_name) { + theme.set_theme_name(St.Settings.get().gtk_icon_theme); + } else { + theme.set_custom_theme(St.Settings.get().gtk_icon_theme); + } + return theme; +}; -const Caffeine = GObject.registerClass( -class Caffeine extends PanelMenu.Button { +const CaffeineToggle = GObject.registerClass( +class CaffeineToggle extends QuickSettings.QuickMenuToggle { _init() { - super._init(null, IndicatorName); + super._init({ + // The 'label' property was renamed to 'title' in GNOME 44 but quick settings have otherwise + // not been changed. The below line allows support for both GNOME 43 and 44+ by using the + // appropriate property name based on the GNOME version. + [ShellVersion >= 44 ? 'title' : 'label']: IndicatorName, + toggleMode: true, + }); + + this._settings = ExtensionUtils.getSettings(); + + // Icons + this.finalTimerMenuIcon = TimerMenuIcon; + if (!Gtk.IconTheme.get_default().has_icon(TimerMenuIcon)) { + this.finalTimerMenuIcon = + Gio.icon_new_for_string(`${Me.path}/icons/${TimerMenuIcon}.svg`); + } + this._iconActivated = Gio.icon_new_for_string(`${Me.path}/icons/${EnabledIcon}.svg`);; + this._iconDeactivated = Gio.icon_new_for_string(`${Me.path}/icons/${DisabledIcon}.svg`); + this._iconName(); + + // Menu + this.menu.setHeader(this.finalTimerMenuIcon, TimerMenuName, null); - this.accessible_role = Atk.Role.TOGGLE_BUTTON; + // Add elements + this._itemsSection = new PopupMenu.PopupMenuSection(); + this.menu.addMenuItem(this._itemsSection); - this._settings = Convenience.getSettings(); - this._settings.connect(`changed::${SHOW_INDICATOR_KEY}`, () => { - if (this._settings.get_boolean(SHOW_INDICATOR_KEY)) - this.show(); - else - this.hide(); + // Init Timers + this._timerItems = new Map(); + this._syncTimers(false); + + // Bind signals + this._settings.bind(`${TOGGLE_STATE_KEY}`, + this, 'checked', + Gio.SettingsBindFlags.DEFAULT); + this._settings.connect(`changed::${TOGGLE_STATE_KEY}`, () => { + this._iconName(); + }); + this._settings.connect(`changed::${TIMER_KEY}`, () => { + this._sync(); + }); + this._settings.connect(`changed::${DURATION_TIMER_INDEX}`, () => { + this._syncTimers(true); + }); + this.connect('destroy', () => { + this._iconActivated = null; + this._iconDeactivated = null; + this.gicon = null; }); - if (!this._settings.get_boolean(SHOW_INDICATOR_KEY)) - this.hide(); + } + + _syncTimers(resetDefault) { + this._itemsSection.removeAll(); + this._timerItems.clear(); + const durationIndex = this._settings.get_int(DURATION_TIMER_INDEX); - this._proxy = new ColorProxy(Gio.DBus.session, 'org.gnome.SettingsDaemon.Color', '/org/gnome/SettingsDaemon/Color', (proxy, error) => { - if (error) { - log(error.message); - return; + for (const timer of TIMERS) { + let label = null; + if(timer[0] === 0) { + label = _('Infinite'); + } else { + label = parseInt(timer[durationIndex]) + _(' minutes'); } - }); + if (!label) + continue; + const icon = Gio.icon_new_for_string(`${Me.path}/icons/${timer[5]}.svg`); + const item = new PopupMenu.PopupImageMenuItem(label, icon); + item.connect('activate',() => (this._checkTimer(timer[durationIndex]))); + this._timerItems.set(timer[durationIndex], item); + this._itemsSection.addMenuItem(item); + } + this.menuEnabled = TIMERS.length > 2; + + // Select active duration + if (resetDefault && this._settings.get_int(TIMER_KEY) !== 0) { + // Set default duration to 0 + this._settings.set_int(TIMER_KEY, 0); + } else { + this._sync(); + } + } - this._night_light = false; + _sync() { + const activeTimerId = this._settings.get_int(TIMER_KEY); + for (const [timerId, item] of this._timerItems) { + item.setOrnament(timerId === activeTimerId + ? PopupMenu.Ornament.CHECK + : PopupMenu.Ornament.NONE); + } + } + _checkTimer(timerId) { + this._settings.set_int(TIMER_KEY, timerId); + this._settings.set_boolean(TOGGLE_STATE_KEY, true); + } + + _iconName() { + if (this._settings.get_boolean(TOGGLE_STATE_KEY)) { + this.gicon = this._iconActivated; + } else { + this.gicon = this._iconDeactivated; + } + } +}); + +const Caffeine = GObject.registerClass( +class Caffeine extends QuickSettings.SystemIndicator { + _init() { + super._init(); + + this._indicator = this._addIndicator(); + + this._settings = ExtensionUtils.getSettings(); + + // D-bus + this._proxy = new ColorProxy( + Gio.DBus.session, + 'org.gnome.SettingsDaemon.Color', + '/org/gnome/SettingsDaemon/Color', + (proxy, error) => { + if (error) + log(error.message); + }); this._sessionManager = new DBusSessionManagerProxy(Gio.DBus.session, - 'org.gnome.SessionManager', - '/org/gnome/SessionManager'); - this._inhibitorAddedId = this._sessionManager.connectSignal('InhibitorAdded', this._inhibitorAdded.bind(this)); - this._inhibitorRemovedId = this._sessionManager.connectSignal('InhibitorRemoved', this._inhibitorRemoved.bind(this)); + 'org.gnome.SessionManager', + '/org/gnome/SessionManager'); // From auto-move-windows@gnome-shell-extensions.gcampax.github.com this._appSystem = Shell.AppSystem.get_default(); + this._activeWorkspace = null; - this._appsChangedId = - this._appSystem.connect('installed-changed', - this._updateAppData.bind(this)); + // Init Apps Signals Id + this._appStateChangedSignalId = 0; + this._appDisplayChangedSignalId = 0; + this._appWorkspaceChangedSignalId = 0; + this._appAddWindowSignalId = 0; + this._appRemoveWindowSignalId = 0; // ("screen" in global) is false on 3.28, although global.screen exists - if (typeof global.screen !== "undefined") { + if (typeof global.screen !== 'undefined') { this._screen = global.screen; this._display = this._screen.get_display(); - } - else { + } else { this._screen = global.display; this._display = this._screen; } - this._icon = new St.Icon({ - style_class: 'system-status-icon' + // Add indicator label for the timer + this._timerLabel = new St.Label({ + y_expand: true, + y_align: Clutter.ActorAlign.CENTER, }); - this._icon.gicon = Gio.icon_new_for_string(`${Me.path}/icons/${DisabledIcon}.svg`); + this._timerLabel.visible = false; + this.add_child(this._timerLabel); + + // Icons + this._iconActivated = Gio.icon_new_for_string(`${Me.path}/icons/${EnabledIcon}.svg`);; + this._iconDeactivated = Gio.icon_new_for_string(`${Me.path}/icons/${DisabledIcon}.svg`); + this._indicator.gicon = this._iconDeactivated; + // Manage night light + this._nightLight = false; + + /* Inhibited flag value + * - 4: Inhibit suspending the session or computer + * - 12: Inhibit the session being marked as idle + */ + this.inhibitFlags= 12; + + // Caffeine state this._state = false; - // who has requested the inhibition - this._last_app = ""; - this._last_cookie = ""; - this._apps = []; - this._cookies = []; - this._objects = []; - - this.add_actor(this._icon); - this.add_style_class_name('panel-status-button'); - this.connect('button-press-event', this.toggleState.bind(this)); - this.connect('touch-event', this.toggleState.bind(this)); - - // Restore user state - if (this._settings.get_boolean(USER_ENABLED_KEY) && this._settings.get_boolean(RESTORE_KEY)) { - this.toggleState(); - } + this._userState = false; + + // Store the inhibition requests until processed + this._inhibitionAddedFifo=[]; + this._inhibitionRemovedFifo=[]; + + // Init Timers + this._timeOut = null; + this._timePrint = null; + this._timerEnable = false; + this._timeFullscreen = null; + this._timeWorkspaceAdd = null; + this._timeWorkspaceRemove = null; + this._timeAppUnblock = null; + + // Show icon + this._manageShowIndicator(); + + // Init app list + this._appConfigs = []; + this._appInhibitedData = new Map(); + this._updateAppConfigs(); + // Enable caffeine when fullscreen app is running if (this._settings.get_boolean(FULLSCREEN_KEY)) { this._inFullscreenId = this._screen.connect('in-fullscreen-changed', this.toggleFullscreen.bind(this)); this.toggleFullscreen(); } - this._appConfigs = []; - this._appData = new Map(); + // QuickSettings + this._caffeineToggle = new CaffeineToggle(); + this.quickSettingsItems.push(this._caffeineToggle); + this._updateTimerSubtitle(); - this._settings.connect(`changed::${INHIBIT_APPS_KEY}`, this._updateAppConfigs.bind(this)); - this._updateAppConfigs(); + // Init settings keys and restore user state + this._settings.reset(TOGGLE_STATE_KEY); + if (this._settings.get_boolean(USER_ENABLED_KEY) && this._settings.get_boolean(RESTORE_KEY)) { + this.toggleState(); + } else { + // reset user state + this._settings.reset(USER_ENABLED_KEY); + } + + // Bind signals + this._inhibitorAddedId = this._sessionManager.connectSignal( + 'InhibitorAdded', this._inhibitorAdded.bind(this)); + this._inhibitorRemovedId = this._sessionManager.connectSignal( + 'InhibitorRemoved', this._inhibitorRemoved.bind(this)); + this.inhibitId = this._settings.connect(`changed::${INHIBIT_APPS_KEY}`, + this._updateAppConfigs.bind(this)); + this.stateId = this._settings.connect(`changed::${TOGGLE_STATE_KEY}`, + this._updateMainState.bind(this)); + this.timerId = this._settings.connect(`changed::${TIMER_KEY}`, + this._startTimer.bind(this)); + this.showTimerId = this._settings.connect(`changed::${SHOW_TIMER_KEY}`, + this._showIndicatorLabel.bind(this)); + this.indicatorId = this._settings.connect(`changed::${INDICATOR_POSITION}`, + this._updateIndicatorPosition.bind(this)); + this.showIndicatorId = this._settings.connect(`changed::${SHOW_INDICATOR_KEY}`, () => { + this._manageShowIndicator(); + this._showIndicatorLabel(); + }); + this.triggerId = this._settings.connect(`changed::${TRIGGER_APPS_MODE}`, () => { + this._resetAppSignalId(); + this._updateAppEventMode(); + }); + + // Change user state on icon scroll event + this._indicator.reactive = true; + this._indicator.connect('scroll-event', + (actor, event) => this._handleScrollEvent(event)); + + // Init position and index of indicator icon + this.indicatorPosition = this._settings.get_int(INDICATOR_POSITION); + this.indicatorIndex = this._settings.get_int(INDICATOR_INDEX); + this.lastIndicatorPosition = this.indicatorPosition; + + QuickSettingsMenu._indicators.insert_child_at_index(this,this.indicatorIndex); + QuickSettingsMenu._addItems(this.quickSettingsItems); + + // Place the toggle above the background apps entry + if (ShellVersion >= 44) { + this.quickSettingsItems.forEach((item) => { + QuickSettingsMenu.menu._grid.set_child_below_sibling(item, + QuickSettingsMenu._backgroundApps.quickSettingsItems[0]); + }); + } + + this._updateLastIndicatorPosition(); } get inFullscreen() { - let nb_monitors = this._screen.get_n_monitors(); + let nbMonitors = this._screen.get_n_monitors(); let inFullscreen = false; - for (let i=0; i { - if (this.inFullscreen && !this._apps.includes('fullscreen')) { + this._manageScreenBlankState(false); + this._timeFullscreen = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 2, () => { + if (this.inFullscreen && !this._appInhibitedData.has('fullscreen')) { this.addInhibit('fullscreen'); - this._manageNightLight('disabled'); + this._manageNightLight(false, false); } + + this._timeFullscreen = null; + return GLib.SOURCE_REMOVE; }); - if (!this.inFullscreen && this._apps.includes('fullscreen')) { + if (!this.inFullscreen && this._appInhibitedData.has('fullscreen')) { this.removeInhibit('fullscreen'); - this._manageNightLight('enabled'); + this._manageNightLight(true, false); } } toggleState() { + this._manageScreenBlankState(false); if (this._state) { - this._apps.forEach(app_id => this.removeInhibit(app_id)); - this._manageNightLight('enabled'); - } - else { + this._removeTimer(); + this._appInhibitedData.forEach((data, appId) => + this.removeInhibit(appId) + ); + this._manageNightLight(true, false); + } else { this.addInhibit('user'); - this._manageNightLight('disabled'); + this._manageNightLight(false, false); + + // Enable timer when duration isn't null + if (this._settings.get_int(TIMER_KEY) !== 0 && !this._timerEnable) { + this._startTimer(); + } } } - addInhibit(app_id) { - this._sessionManager.InhibitRemote(app_id, - 0, "Inhibit by %s".format(IndicatorName), 12, + addInhibit(appId) { + this._sessionManager.InhibitRemote(appId, + 0, 'Inhibit by %s'.format(IndicatorName), this.inhibitFlags, cookie => { - this._last_cookie = cookie; - this._last_app = app_id; + this._inhibitionAddedFifo.push(appId); + // Init app data + let data = { + cookie: cookie, + isToggled: true, + isInhibited: false, + object: '', + }; + this._appInhibitedData.set(appId, data); } ); } - removeInhibit(app_id) { - let index = this._apps.indexOf(app_id); - this._sessionManager.UninhibitRemote(this._cookies[index]); + removeInhibit(appId) { + let appData = this._appInhibitedData.get(appId); + if(appData && appData.isInhibited){ + this._inhibitionRemovedFifo.push(appId); + this._sessionManager.UninhibitRemote(appData.cookie); + appData.isToggled = false; + this._appInhibitedData.set(appId, appData); + } + } + + _updateLastIndicatorPosition() { + let pos = -1; + let nbItems = QuickSettingsMenu._indicators.get_n_children(); + let targetIndicator = null; + + // Count only the visible item in indicator bar + for (let i = 0; i < nbItems; i++) { + targetIndicator = QuickSettingsMenu._indicators.get_child_at_index(i); + if (targetIndicator.is_visible()) { + pos += 1; + } + } + this._settings.set_int(INDICATOR_POS_MAX, pos); + } + + _incrementIndicatorPosIndex() { + if (this.lastIndicatorPosition < this.indicatorPosition) { + this.indicatorIndex += 1; + } else { + this.indicatorIndex -= 1; + } + } + + _updateIndicatorPosition() { + this._updateLastIndicatorPosition(); + const newPosition = this._settings.get_int(INDICATOR_POSITION); + + if (this.indicatorPosition != newPosition) { + this.indicatorPosition = newPosition; + this._incrementIndicatorPosIndex(); + + // Skip invisible indicator + let targetIndicator = + QuickSettingsMenu._indicators.get_child_at_index(this.indicatorIndex); + let maxIndex = QuickSettingsMenu._indicators.get_n_children(); + while (this.indicatorIndex < maxIndex && !targetIndicator.is_visible() && this.indicatorIndex > -1 ) { + this._incrementIndicatorPosIndex(); + targetIndicator = + QuickSettingsMenu._indicators.get_child_at_index(this.indicatorIndex); + } + + // Always reset index to 0 on position 0 + if (this.indicatorPosition == 0) { + this.indicatorIndex = 0; + } + + // Update last position + this.lastIndicatorPosition = newPosition; + + // Update indicator index + QuickSettingsMenu._indicators.remove_actor(this); + QuickSettingsMenu._indicators.insert_child_at_index(this,this.indicatorIndex); + this._settings.set_int(INDICATOR_INDEX, this.indicatorIndex); + } + } + + _showIndicatorLabel() { + if(this._settings.get_boolean(SHOW_TIMER_KEY) + && (this._settings.get_enum(SHOW_INDICATOR_KEY) !== ShowIndicator.NEVER) + && this._timerEnable) { + this._timerLabel.visible=true; + } else { + this._timerLabel.visible=false; + } + } + + _startTimer() { + // Reset timer + this._removeTimer(); + this._timerEnable = true; + + // Get duration + let timerDelay = (this._settings.get_int(TIMER_KEY) * 60); + + // Execute Timer only if duration isn't set on infinite time + if (timerDelay !== 0) { + let secondLeft = timerDelay; + this._showIndicatorLabel(); + this._printTimer(secondLeft); + this._timePrint = GLib.timeout_add(GLib.PRIORITY_DEFAULT, (1000), () => { + secondLeft -= 1; + this._printTimer(secondLeft); + return GLib.SOURCE_CONTINUE; + }); + + this._timeOut = GLib.timeout_add(GLib.PRIORITY_DEFAULT, (timerDelay * 1000), () => { + // Disable Caffeine when timer ended + this._removeTimer(); + this._settings.set_boolean(TOGGLE_STATE_KEY, false); + return GLib.SOURCE_REMOVE; + }); + } + } + + _printTimer(second) { + const min = Math.floor(second / 60); + const minS = Math.floor(second % 60).toLocaleString('en-US', { + minimumIntegerDigits: 2, + useGrouping: false + }); + // Print Timer in system Indicator and Toggle menu subLabel + this._updateLabelTimer(min + ':' + minS); + } + + _removeTimer() { + // End timer + this._timerEnable = false; + + // Flush and hide timer label + this._updateLabelTimer(null); + this._timerLabel.visible = false; + + // Remove timer + if((this._timeOut !== null) || (this._timePrint !== null)) { + GLib.Source.remove(this._timeOut); + GLib.Source.remove(this._timePrint); + this._timeOut=null; + this._timePrint=null; + } + } + + _updateLabelTimer(text) { + this._timerLabel.text = text; + this._caffeineToggle.menu.setHeader(this._caffeineToggle.finalTimerMenuIcon, TimerMenuName, text); + if (ShellVersion >= 44) { + this._caffeineToggle.subtitle = text; + } + } + + _handleScrollEvent(event) { + switch(event.get_scroll_direction()) { + case Clutter.ScrollDirection.UP: + if(!this._state) { + // User state on - UP + this._settings.set_boolean(TOGGLE_STATE_KEY, true); + } + break; + case Clutter.ScrollDirection.DOWN: + if(this._state) { + // Stop timer + this._removeTimer(); + // User state off - DOWN + this._settings.set_boolean(TOGGLE_STATE_KEY, false); + } + break; + } } _inhibitorAdded(proxy, sender, [object]) { this._sessionManager.GetInhibitorsRemote(([inhibitors]) => { - for(var i in inhibitors) { + // Get the first added request + let requestedId = this._inhibitionAddedFifo.shift(); + + for (let i of inhibitors) { let inhibitor = new DBusSessionManagerInhibitorProxy(Gio.DBus.session, - 'org.gnome.SessionManager', - inhibitors[i]); - inhibitor.GetAppIdRemote(app_id => { - if (app_id != '' && app_id == this._last_app) { - if (this._last_app == 'user') - this._settings.set_boolean(USER_ENABLED_KEY, true); - this._apps.push(this._last_app); - this._cookies.push(this._last_cookie); - this._objects.push(object); - this._last_app = ""; - this._last_cookie = ""; + 'org.gnome.SessionManager', + i); + inhibitor.GetAppIdRemote(appId => { + appId = String(appId); + let appData = this._appInhibitedData.get(appId); + if (appId !== '' && requestedId === appId && appData) { + appData.isInhibited = true; + appData.object = object; + this._appInhibitedData.set(appId, appData); + + if (appId === 'user') { + this._saveUserState(true); + } else { + this._updateAppSubtitle(appId); + } + + // Update state if (this._state === false) { - this._state = true; - this._icon.gicon = Gio.icon_new_for_string(`${Me.path}/icons/${EnabledIcon}.svg`); + this._saveMainState(true); + // Indicator icon + this._manageShowIndicator(); + this._indicator.gicon = this._iconActivated; + + // Shell OSD notifications if (this._settings.get_boolean(SHOW_NOTIFICATIONS_KEY) && !this.inFullscreen) { - this._sendNotification('enabled'); + this._sendOSDNotification(true); } } } @@ -264,120 +682,369 @@ class Caffeine extends PanelMenu.Button { } _inhibitorRemoved(proxy, sender, [object]) { - let index = this._objects.indexOf(object); - if (index != -1) { - if (this._apps[index] == 'user') - this._settings.set_boolean(USER_ENABLED_KEY, false); - // Remove app from list - this._apps.splice(index, 1); - this._cookies.splice(index, 1); - this._objects.splice(index, 1); - if (this._apps.length === 0) { - this._state = false; - this._icon.gicon = Gio.icon_new_for_string(`${Me.path}/icons/${DisabledIcon}.svg`); - if(this._settings.get_boolean(SHOW_NOTIFICATIONS_KEY)) { - this._sendNotification('disabled'); + // Get the first removed request + let appId = this._inhibitionRemovedFifo.shift(); + + if(appId){ + let appData = this._appInhibitedData.get(appId); + if (appData){ + // Remove app from list + this._appInhibitedData.delete(appId); + + if (appId === 'user') { + this._saveUserState(false); + } else { + this._updateAppSubtitle(null); + } + + // Update state + if (this._appInhibitedData.size === 0) { + this._saveMainState(false); + + // Indicator icon + this._manageShowIndicator(); + this._indicator.gicon = this._iconDeactivated; + + // Shell OSD notifications + if (this._settings.get_boolean(SHOW_NOTIFICATIONS_KEY)) { + this._sendOSDNotification(false); + } } } } } - _manageNightLight(state){ - if (state == 'enabled') { - if (this._settings.get_boolean(NIGHT_LIGHT_KEY) && this._proxy.NightLightActive && !this._settings.get_boolean(NIGHT_LIGHT_APP_ONLY_KEY)) { - this._proxy.DisabledUntilTomorrow = false; - this._night_light = true; - } else { - this._night_light = false; - } + _isToggleInhibited(appId) { + let appData = this._appInhibitedData.get(appId); + if (appData && appData.isToggled) { + return true; + } else { + return false; } - if (state == 'disabled') { - if (this._settings.get_boolean(NIGHT_LIGHT_KEY) && this._proxy.NightLightActive && !this._settings.get_boolean(NIGHT_LIGHT_APP_ONLY_KEY)) { - this._proxy.DisabledUntilTomorrow = true; - this._night_light = true; - } else { - this._night_light = false; - } + } + + _manageShowIndicator() { + if (this._state) { + this._indicator.visible = this._settings.get_enum(SHOW_INDICATOR_KEY) !== ShowIndicator.NEVER; + } else { + this._indicator.visible = this._settings.get_enum(SHOW_INDICATOR_KEY) === ShowIndicator.ALWAYS; } } - _sendNotification(state){ - if (state == 'enabled') { - if (this._settings.get_boolean(NIGHT_LIGHT_KEY) && this._night_light && this._proxy.DisabledUntilTomorrow) { - Main.notify(_('Auto suspend and screensaver disabled. Night Light paused.')); - } else { - Main.notify(_('Auto suspend and screensaver disabled')); - } + _manageScreenBlankState(isApp) { + let blankState = this._settings.get_enum(SCREEN_BLANK) === ControlContext.ALWAYS; + if (isApp) { + blankState = this._settings.get_enum(SCREEN_BLANK) > ControlContext.NEVER; } - if (state == 'disabled') { - if (this._settings.get_boolean(NIGHT_LIGHT_KEY) && this._night_light && !this._proxy.DisabledUntilTomorrow) { - Main.notify(_('Auto suspend and screensaver enabled. Night Light resumed.')); - } else { - Main.notify(_('Auto suspend and screensaver enabled')); + + if (blankState) { + this.inhibitFlags = 4; + } else { + this.inhibitFlags = 12; + } + } + + _manageNightLight(isEnable, isApp) { + let nightLightPref = this._settings.get_enum(NIGHT_LIGHT_KEY) === ControlContext.ALWAYS; + if (isApp) { + nightLightPref = this._settings.get_enum(NIGHT_LIGHT_KEY) > ControlContext.NEVER; + } + if (isEnable && (nightLightPref || this._nightLight && this._proxy.DisabledUntilTomorrow)) { + this._proxy.DisabledUntilTomorrow = false; + this._nightLight = false; + } else if (!isEnable && nightLightPref) { + this._proxy.DisabledUntilTomorrow = true; + this._nightLight = true; + } + } + + _sendOSDNotification(state) { + const nightLightPref = + this._settings.get_enum(NIGHT_LIGHT_KEY) !== ControlContext.NEVER; + if (state) { + let message = _('Caffeine enabled'); + if (nightLightPref && this._nightLight && this._proxy.NightLightActive) { + message = message + '. ' + _('Night Light paused'); } + Main.osdWindowManager.show(-1, this._iconActivated, + message, null, null); + } else { + let message = _('Caffeine disabled'); + if (nightLightPref && !this._nightLight && this._proxy.NightLightActive) { + message = message + '. ' + _('Night Light resumed'); + } + Main.osdWindowManager.show(-1, this._iconDeactivated, + message, null, null); + } + } + + // Add the name of App as subtitle (>= Gnome 44) + _updateAppSubtitle(id) { + if (ShellVersion >= 44) { + const listAppId = this._appInhibitedData.keys(); + let appId = id !== null ? id : listAppId.next().value; + if (appId !== undefined) { + let appInfo = Gio.DesktopAppInfo.new(appId); + this._caffeineToggle.subtitle = appInfo !== null + ? appInfo.get_display_name() + : null; + } + } + } + + // Add the timer duration selected as subtitle (>= Gnome 44) + _updateTimerSubtitle() { + if (ShellVersion >= 44 && !this._settings.get_boolean(TOGGLE_STATE_KEY)) { + const timerDuration = this._settings.get_int(TIMER_KEY); + this._caffeineToggle.subtitle = timerDuration !== 0 + ? parseInt(timerDuration) + _(' minutes') + : null; } } _updateAppConfigs() { this._appConfigs.length = 0; this._settings.get_strv(INHIBIT_APPS_KEY).forEach(appId => { - this._appConfigs.push(appId); + // Check if app still exist + const appInfo = Gio.DesktopAppInfo.new(appId); + if (appInfo) { + this._appConfigs.push(appId); + } + }); + + // Remove inhibited app that are not in the list anymore + let inhibitedAppsToRemove = [...this._appInhibitedData.keys()] + .filter(id => !this._appConfigs.includes(id)); + inhibitedAppsToRemove.forEach(id => { + this._manageScreenBlankState(true); // Allow blank screen + this._manageNightLight(true, true); + this.removeInhibit(id); // Uninhibit app + }); + + this._updateAppEventMode(); + } + + _updateMainState() { + if (this._settings.get_boolean(TOGGLE_STATE_KEY) !== this._state) { + this.toggleState(); + } + // Add timer duration as Subtitle when disable + this._updateTimerSubtitle(); + } + + _saveUserState(state) { + this._userState = state; + this._settings.set_boolean(USER_ENABLED_KEY, state); + } + + _saveMainState(state) { + this._state = state; + this._settings.set_boolean(TOGGLE_STATE_KEY, state); + } + + _resetAppSignalId(){ + if (this._appStateChangedSignalId > 0) { + this._appSystem.disconnect(this._appStateChangedSignalId); + this._appStateChangedSignalId = 0; + } + if (this._appDisplayChangedSignalId > 0) { + global.display.disconnect(this._appDisplayChangedSignalId); + this._appDisplayChangedSignalId = 0; + } + if (this._appWorkspaceChangedSignalId > 0) { + global.workspace_manager.disconnect(this._appWorkspaceChangedSignalId); + this._appWorkspaceChangedSignalId = 0; + } + if (this._appAddWindowSignalId > 0) { + this._activeWorkspace.disconnect(this._appAddWindowSignalId); + this._appAddWindowSignalId = 0; + } + if (this._appRemoveWindowSignalId > 0) { + this._activeWorkspace.disconnect(this._appRemoveWindowSignalId); + this._appRemoveWindowSignalId = 0; + } + } + + _updateAppEventMode() { + let appsTriggeredMode = this._settings.get_enum(TRIGGER_APPS_MODE); + + if (this._appConfigs.length === 0) { + this._resetAppSignalId(); + } else { + switch (appsTriggeredMode) { + // TRIGGER APPS MODE: ON RUNNING + case AppsTrigger.ON_RUNNING: + if(this._appStateChangedSignalId === 0){ + this._appStateChangedSignalId = + this._appSystem.connect('app-state-changed', + this._appStateChanged.bind(this)); + } + // Check if currently running App + this._appConfigs.forEach( id => { + let app = this._appSystem.lookup_app(id); + if(app && app.get_state() !== Shell.AppState.STOPPED) { + this._appStateChanged(this._appSystem, app); + } + }); + break; + // TRIGGER APPS MODE: ON FOCUS + case AppsTrigger.ON_FOCUS: + if(this._appDisplayChangedSignalId === 0){ + this._appDisplayChangedSignalId = + global.display.connect('notify::focus-window', + this._appWindowFocusChanged.bind(this)); + } + // Check if currently focused App + this._appWindowFocusChanged(); + break; + // TRIGGER APPS MODE: ON ACTIVE WORKSPACE + case AppsTrigger.ON_ACTIVE_WORKSPACE: + if(this._appWorkspaceChangedSignalId === 0){ + this._appWorkspaceChangedSignalId = + global.workspace_manager.connect('workspace-switched', + this._appWorkspaceChanged.bind(this)); + } + // Check if App is currently on active workspace + this._appWorkspaceChanged(); + break; + } + } + } + + _toggleWorkspace() { + // Search for triggered apps on active workspace + this._appConfigs.forEach( appId => { + let app = this._appSystem.lookup_app(appId); + let isOnWorkspace = app.is_on_workspace(this._activeWorkspace); + if(isOnWorkspace && !this._isToggleInhibited(appId)){ + this._manageScreenBlankState(true); // Allow blank screen + this._manageNightLight(false, true); + this.addInhibit(appId); // Inhibit app + } else if(!isOnWorkspace && this._isToggleInhibited(appId)){ + this._manageScreenBlankState(true); // Allow blank screen + this._manageNightLight(true, true); + this.removeInhibit(appId); // Uninhibit app + } }); - this._updateAppData(); } - _updateAppData() { - let ids = this._appConfigs.slice() - let removedApps = [...this._appData.keys()] - .filter(a => !ids.includes(a.id)); - removedApps.forEach(app => { - app.disconnect(this._appData.get(app).windowsChangedId); - let id = app.get_id(); - this._appData.delete(app); + _appWorkspaceChanged() { + // Reset signal for Add/remove windows on workspace + if (this._appAddWindowSignalId > 0) { + this._activeWorkspace.disconnect(this._appAddWindowSignalId); + this._appAddWindowSignalId = 0; + } + if (this._appRemoveWindowSignalId > 0) { + this._activeWorkspace.disconnect(this._appRemoveWindowSignalId); + this._appRemoveWindowSignalId = 0; + } + + // Get active workspace + this._activeWorkspace = global.workspace_manager.get_active_workspace(); + + // Add signal listener on add/remove windows for the active workspace + this._appAddWindowSignalId = + this._activeWorkspace.connect('window-added', (wkspace, window) => { + const type = window.get_window_type(); + // Accept only normal window, ignore all other type (dialog, menu,...) + if(type === 0) { + // Add 100 ms delay to handle window detection + this._timeWorkspaceAdd = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, () => { + this._toggleWorkspace(); + this._timeWorkspaceAdd = null; + return GLib.SOURCE_REMOVE; + }); + } }); - let addedApps = ids - .map(id => this._appSystem.lookup_app(id)) - .filter(app => app && !this._appData.has(app)); - addedApps.forEach(app => { - let data = { - windowsChangedId: app.connect('windows-changed', - this._appWindowsChanged.bind(this)), - }; - let id = app.get_id(); - this._appData.set(app, data); + this._appRemoveWindowSignalId = + this._activeWorkspace.connect('window-removed', (wkspace, window) => { + const type = window.get_window_type(); + // Accept only normal window, ignore all other type (dialog, menu,...) + if(type === 0) { + // Add 100 ms delay to handle window detection + this._timeWorkspaceRemove = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, () => { + this._toggleWorkspace(); + this._timeWorkspaceRemove = null; + return GLib.SOURCE_REMOVE; + }); + } }); + + // Check and toggle Caffeine + this._toggleWorkspace(); } - _appWindowsChanged(app) { - let app_id = app.get_id(); + _appWindowFocusChanged() { + let winTrack = Shell.WindowTracker.get_default(); + let appId = null; + let app = winTrack.focus_app; + + if(app) { + appId = app.get_id(); + } + if(this._appConfigs.includes(appId) && !this._isToggleInhibited(appId)){ + this._manageScreenBlankState(true); // Allow blank screen + this._manageNightLight(false, true); + this.addInhibit(appId); // Inhibit app + + // Uninhibit previous focused apps + this._appInhibitedData.forEach((data, id) => { + if (id !== appId && id !== 'user') { + this.removeInhibit(id); + } + }); + } else if (!this._appConfigs.includes(appId) && this._appInhibitedData.size !== 0){ + this._manageScreenBlankState(true); // Allow blank screen + this._manageNightLight(true, true); + // Uninhibit all apps + this._appInhibitedData.forEach((data, id) => { + if (id !== 'user') { + this.removeInhibit(id); + } + }); + } + } + + _appStateChanged(appSys, app) { + let appId = app.get_id(); let appState = app.get_state(); - // app is STARTING (1) or RUNNING (2) - if ((appState == 1) || (appState == 2)) { - this.addInhibit(app_id); - if (this._settings.get_boolean(NIGHT_LIGHT_KEY) && this._proxy.NightLightActive) { - this._proxy.DisabledUntilTomorrow = true; - this._night_light = true; - } else { - this._night_light = false; - } - // app is STOPPED (0) - } else { - this.removeInhibit(app_id); - if (this._settings.get_boolean(NIGHT_LIGHT_KEY) && this._proxy.NightLightActive) { - this._proxy.DisabledUntilTomorrow = false; - this._night_light = true; - } else { - this._night_light = false; + + if(this._appConfigs.includes(appId)){ + // Block App state signal + appSys.block_signal_handler(this._appStateChangedSignalId); + + // Allow blank screen + this._manageScreenBlankState(true); + + if (appState === Shell.AppState.STOPPED && this._isToggleInhibited(appId)){ + this._manageNightLight(true, true); + this.removeInhibit(appId); // Uninhibit app + } else if (appState !== Shell.AppState.STOPPED && !this._isToggleInhibited(appId)) { + this._manageNightLight(false, true); + this.addInhibit(appId); // Inhibit app } + + // Add 200 ms delay before unblock state signal + this._timeAppUnblock = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 200, () => { + appSys.unblock_signal_handler(this._appStateChangedSignalId); + this._timeAppUnblock = null; + return GLib.SOURCE_REMOVE; + }); } } destroy() { - // remove all inhibitors - this._apps.forEach(app_id => this.removeInhibit(app_id)); - // disconnect from signals - if (this._settings.get_boolean(FULLSCREEN_KEY)) + // Remove all inhibitors + this._appInhibitedData.forEach((data, appId) => this.removeInhibit(appId)); + this._appInhibitedData.clear(); + + // Remove ToggleMenu + this.quickSettingsItems.forEach(item => item.destroy()); + + // Disconnect from signals + if (this._settings.get_boolean(FULLSCREEN_KEY)) { this._screen.disconnect(this._inFullscreenId); + } if (this._inhibitorAddedId) { this._sessionManager.disconnectSignal(this._inhibitorAddedId); this._inhibitorAddedId = 0; @@ -394,26 +1061,97 @@ class Caffeine extends PanelMenu.Button { global.window_manager.disconnect(this._windowDestroyedId); this._windowDestroyedId = 0; } - if (this._appsChangedId) { - this._appSystem.disconnect(this._appsChangedId); - this._appsChangedId = 0; + if (this._timeOut) { + GLib.Source.remove(this._timeOut); + this._timeOut = null; + } + if (this._timePrint) { + GLib.Source.remove(this._timePrint); + this._timePrint = null; + } + if (this._timeFullscreen) { + GLib.Source.remove(this._timeFullscreen); + this._timeFullscreen = null; + } + if (this._timeWorkspaceAdd) { + GLib.Source.remove(this._timeWorkspaceAdd); + this._timeWorkspaceAdd = null; + } + if (this._timeWorkspaceRemove) { + GLib.Source.remove(this._timeWorkspaceRemove); + this._timeWorkspaceRemove = null; + } + if (this._timeAppUnblock) { + GLib.Source.remove(this._timeAppUnblock); + this._timeAppUnblock = null; + } + this._resetAppSignalId(); + + // Disconnect settings signals + if (this.inhibitId) { + this._settings.disconnect(this.inhibitId); + this.inhibitId = undefined; + } + if (this.stateId) { + this._settings.disconnect(this.stateId); + this.stateId = undefined; + } + if (this.timerId) { + this._settings.disconnect(this.timerId); + this.timerId = undefined; + } + if (this.showTimerId) { + this._settings.disconnect(this.showTimerId); + this.showTimerId = undefined; } + if (this.indicatorId) { + this._settings.disconnect(this.indicatorId); + this.indicatorId = undefined; + } + if (this.showIndicatorId) { + this._settings.disconnect(this.showIndicatorId); + this.showIndicatorId = undefined; + } + if (this.triggerId) { + this._settings.disconnect(this.triggerId); + this.triggerId = undefined; + } + this._appConfigs.length = 0; - this._updateAppData(); + this._settings = null; super.destroy(); } }); -function init(extensionMeta) { - Convenience.initTranslations(); +/** + * Steps to run on initialization of the extension + */ +function init() { + ExtensionUtils.initTranslations(); } +/** + * Steps to run when the extension is enabled + */ function enable() { + + const _settings = ExtensionUtils.getSettings(); + CaffeineIndicator = new Caffeine(); - Main.panel.addToStatusArea(IndicatorName, CaffeineIndicator); + + // Register shortcut + Main.wm.addKeybinding(TOGGLE_SHORTCUT, _settings, Meta.KeyBindingFlags.IGNORE_AUTOREPEAT, Shell.ActionMode.ALL, () => { + CaffeineIndicator.toggleState(); + }); } +/** + * Steps to run when the extension is disabled + */ function disable() { CaffeineIndicator.destroy(); CaffeineIndicator = null; + + // Unregister shortcut + Main.wm.removeKeybinding(TOGGLE_SHORTCUT); } diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-infinite-timer-symbolic.svg b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-infinite-timer-symbolic.svg new file mode 100644 index 0000000..be4fdb2 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-infinite-timer-symbolic.svg @@ -0,0 +1,37 @@ + + + + + + diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-long-timer-symbolic.svg b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-long-timer-symbolic.svg new file mode 100644 index 0000000..d354294 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-long-timer-symbolic.svg @@ -0,0 +1,50 @@ + + + + + + + + + diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-medium-timer-symbolic.svg b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-medium-timer-symbolic.svg new file mode 100644 index 0000000..26e802b --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-medium-timer-symbolic.svg @@ -0,0 +1,50 @@ + + + + + + + + + diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-short-timer-symbolic.svg b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-short-timer-symbolic.svg new file mode 100644 index 0000000..c3091d7 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/caffeine-short-timer-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/hicolor/scalable/actions/applications-symbolic.svg b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/hicolor/scalable/actions/applications-symbolic.svg new file mode 100644 index 0000000..87f307f --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/hicolor/scalable/actions/applications-symbolic.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/hicolor/scalable/actions/general-symbolic.svg b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/hicolor/scalable/actions/general-symbolic.svg new file mode 100644 index 0000000..e11da07 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/hicolor/scalable/actions/general-symbolic.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/my-caffeine-off-symbolic.svg b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/my-caffeine-off-symbolic.svg index d531087..e6d7f40 100644 --- a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/my-caffeine-off-symbolic.svg +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/my-caffeine-off-symbolic.svg @@ -2,20 +2,20 @@ + width="16" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> @@ -33,8 +33,8 @@ bordercolor="#666666" borderopacity="1" inkscape:current-layer="layer11" - inkscape:cx="6.0760965" - inkscape:cy="6.333427" + inkscape:cx="3.4863718" + inkscape:cy="8.404234" gridtolerance="10" inkscape:guide-bbox="true" guidetolerance="10" @@ -55,27 +55,31 @@ inkscape:snap-nodes="false" inkscape:snap-others="false" inkscape:snap-to-guides="true" - inkscape:window-height="741" + inkscape:window-height="1011" inkscape:window-maximized="1" - inkscape:window-width="1366" - inkscape:window-x="0" - inkscape:window-y="-3" - inkscape:zoom="32"> + inkscape:window-width="1920" + inkscape:window-x="1920" + inkscape:window-y="32" + inkscape:zoom="21.655751" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#555753"> + id="guide4029" + inkscape:locked="false" /> Gnome Symbolic Icon Theme diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/my-caffeine-on-symbolic.svg b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/my-caffeine-on-symbolic.svg index 5836586..3a730d2 100644 --- a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/my-caffeine-on-symbolic.svg +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/my-caffeine-on-symbolic.svg @@ -2,20 +2,20 @@ + width="16" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> @@ -33,8 +33,8 @@ bordercolor="#666666" borderopacity="1" inkscape:current-layer="layer11" - inkscape:cx="6.0760965" - inkscape:cy="6.333427" + inkscape:cx="6.109375" + inkscape:cy="6.34375" gridtolerance="10" inkscape:guide-bbox="true" guidetolerance="10" @@ -55,27 +55,31 @@ inkscape:snap-nodes="false" inkscape:snap-others="false" inkscape:snap-to-guides="true" - inkscape:window-height="741" + inkscape:window-height="1011" inkscape:window-maximized="1" - inkscape:window-width="1366" - inkscape:window-x="0" - inkscape:window-y="-3" - inkscape:zoom="32"> + inkscape:window-width="1920" + inkscape:window-x="1920" + inkscape:window-y="32" + inkscape:zoom="32" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#555753"> + id="guide4029" + inkscape:locked="false" /> Gnome Symbolic Icon Theme diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/stopwatch-symbolic.svg b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/stopwatch-symbolic.svg new file mode 100644 index 0000000..57a69d6 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/icons/stopwatch-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/cs/LC_MESSAGES/gnome-shell-extension-caffeine.mo b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/cs/LC_MESSAGES/gnome-shell-extension-caffeine.mo new file mode 100644 index 0000000000000000000000000000000000000000..9f7c48d5ecb654a4851233fd10dfa890181c2276 GIT binary patch literal 5649 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 literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/de/LC_MESSAGES/gnome-shell-extension-caffeine.mo b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/de/LC_MESSAGES/gnome-shell-extension-caffeine.mo index cfaa741e71594aa600520091d82f06b5a0ccb74a..e559599c57f79cb35a6b4a7e9097d786ed46cb06 100644 GIT binary patch literal 5131 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 Q*s17p&6~%rxH}mA1r9L8egFUf delta 946 zcma)(&1zFY6vwAY+SIQ^ty&dnN3mLvU=ly7T_~YeilETy%9WFQPm;mO%w=Yhm{oiP z;o?RF@dZTb%9UWjzJUt`LC_cQ1@u2jZMzX1IP*I*ch32rbMCw1`{Ll+;oNhEbr5z6 z_7XN7{4s1;Prwzh4`#uSU=jQTmch^99GK5Ab`~sw$H6u52>2Mh2tEamfp5W}vk9JL zY`}iNDd6HaI1d(}aspfcCvmq5#yCG5hY0uqoB}t&D)t&}67>Sa_Jq0oYzxSo=oU z-gEHwY@MLZCSgd;SdA;0{v5kAh+{62M9D~aX*8?t_>T8lGHP+sqOOQ9iAIB@CN4VO zwDCF;O7&R{C+<2fA&pEh7g-|hM3*d&r3QliQ9W zwmd398!sDMmAdpzrjpKPrx(`9d1Hw?AA&_>jdR>m-5BrK{g&zNlrA;*CgF+Dq|zJN zSLYs-hMMTSbPLgoyjrf7OO;BgdWlyqFJ8HNpf1 MCS;|t>2hBE0V&nzkpKVy diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/fr/LC_MESSAGES/gnome-shell-extension-caffeine.mo b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/fr/LC_MESSAGES/gnome-shell-extension-caffeine.mo index 09cea9540f179f662f77c4ab575c0cacbf43d6e8..fd8342c4cffa527d628c181c43fd0a734575db9d 100644 GIT binary patch literal 4925 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 Zts0+Y+wF36D%5xtj!tr7@&8(g>Ob8?;2Qt{ literal 1331 zcma)*O^+Kj7{^WDppg&~LISEDo&yL_adsw@rJC(lWS3o3*g(_<)B_T7XP#tSIrgmW zN!SAiJ_Hv&0XcC-;+BuV9lin_xby=5nc3ZJIUub3^&8udpBKl^Z!cf@USRZ~n~;HC zgnogV@dtDn`V)Ey`U^^+tIrAXCb$j00e%I(27U*=0{#GQfj@yaz~8~Yp{LOEm_LQn zSHVkHgcyJ~z{Y+A-U7b`n|Lemb?|4fvHKN#7rb^=2)GiMw*FoKn{ge&R-5y+W&z_8 z)YR9GVNnQ(R8<+BtEin7!_9Y~WvTO$*s8~dXYDQDv8{HorZ0b$>NpIg-6pDB!6%vmqd#f@^ z+a1bF3k86bch*!z1i4P zfst^TQNK4fwO2+SIzJB?*{Yp}-N6oZpSy3{d+9qno5K%X?Q`DmQp%{y>5=@HE&J}0 zy6}|txBF>w;UFuYmt(}02_pBm+Fwr$pSU`*KO@!6E8jH2vrTbaYf^dC3*1!mp4O|2 zO>tcF92;V!1EX_j!P=mCIMRBR}FRj3z4Bt(!SXMQfy;`rl=Gu#Y E0P^0Fx&QzG diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/hu/LC_MESSAGES/gnome-shell-extension-caffeine.mo b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/hu/LC_MESSAGES/gnome-shell-extension-caffeine.mo index 7c078ee0539c7643aa9c40d0b91c7b13d20c4d0f..0492c513f55461d14e2df7c2d709b589427669a8 100644 GIT binary patch delta 1246 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 diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/ja/LC_MESSAGES/gnome-shell-extension-caffeine.mo b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/ja/LC_MESSAGES/gnome-shell-extension-caffeine.mo index f4a5759e36dcff9bea661a7d3de7631feb5dad27..cf5f3ced14bb2a214dd332c42983470af4e16b56 100644 GIT binary patch delta 471 zcmX}nze@sP7zgmjpJ`F46g4Y zHY5~Cv@}RljkUVGW%Xb5J(V8#^10`I@1A?#a(~U6YX+Prgz7_rh>G};H^eHRjmQE0 z&<%&74+gu=z*+Q*&;^z5x(Wx-7hnJ$!*O^6Kaf`h^Kx{7>0WG9;26AzL+~B0!CyEC z=bc2Oa2ZFfaiAZF(xTYV2T))S=1b{&rNKwG)vN^B4>rnE>i?CqDpB-TP)7v zVU`q9s;DwEXEz?E9VMGbGq`reb=_<_C;g3Tds<5EeATF$FRt~4&&PwWr)#{!wOg(k p#Pv(A*Lc3j^)k<&w$8C}$F*nrKCHJ2M_e!cRL)w(y1CDVlbVL=aJ)<|(G5H^gHm zV>(yvFq6hrE^9IPe_6c&aWZ2v#bQ)v8H)a~q^cjjNzJsz$fceI-LTYz>zz9nJfZVf z7`F_QQEtgfC1x6&Qm__w84F|)) zKqwRlpP`|t>9glf1w+ALeSDzeaq3?Gko~mtb-h`9?R@r5PV}Ba;OxVRUT*F4>UI@G7YCS!MptI?nJKB8sxU;eftIdtFu)>=az5w4`M7A8UO$Q diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/ka/LC_MESSAGES/gnome-shell-extension-caffeine.mo b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/ka/LC_MESSAGES/gnome-shell-extension-caffeine.mo new file mode 100644 index 0000000000000000000000000000000000000000..06831017deb27b617b5c22b18b6b93834e2c0d75 GIT binary patch literal 2994 zcma)+TWl0n7{`xVMe7Ac@s2qW4IoatEhF7Q|ILGX954!j9I3H}AH1()0r?stLf zu@~S=;AdbX_%lfMbueB8E(Pxdmw}Ii%fb7>jUe6I1yWw`f)9WP!8PDV;G^Jma3lCr z>HT6jTY~*F;7YIwd=`8MTn@euJ^`KsUjeU!CsFH7kn;QxNl~5G!H2=`!TZ2pK(hY> zd=Ff7H)Ah=36SES1UG{}g0F&$?_rFCdqMJ-0%6K}!Kc6vO6O-m%I9-%H8=}W+&{r~ z@NbaxZL1IcCP1ot3M8Gr14-8(z!l&>B|d*IW6xpV22wsANG+we zyYx+8RJT-~ZDIiQIX9!8DRicHhd@)|1>LU^ih5>7 zeaLS43H?6I#@1y?;rmdcfpsL@UI-eaF1cQ~o!7SiI0}mn2PM{6X`OaORitIrqi$BE zQThtyT8T(4po3~NJLcC2Nz0mby79OzXpAxPx{RLxeC z!ilHNxG*|}nM9=W9;R-6+s?M_)#REQBK2D_clhp%&O<3A;fsTQW6H*V2OD@aVR~ra zrZ+ox80)I{D3@;G8QYzx8$)Yb__{93uWz^07;FO*pOh`!N$IWJ)U<(zKQ~1-)W2geJ5w&hnf{+Rk^rufOI8Y_?&HIY-NW{TMfUK^9CiHy2D!;7bf zgXtLrm9u z>3(%>cwEl-m5u=QMO9c^W44^~lxA z{EQWX;bAq~hn^NQ`BEE88dY}X_}creC#P~>PX#XyP6Zi!W{7-?DF63fIX+kV>%do0 jBbS=!Q{xw^N~p2X(pw50OpdE-c|LC-NaXSdTM_wRuqvMF literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/nl/LC_MESSAGES/gnome-shell-extension-caffeine.mo b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/nl/LC_MESSAGES/gnome-shell-extension-caffeine.mo new file mode 100644 index 0000000000000000000000000000000000000000..63a335e3ca637a09ddd5f0432bd9c7fe69ab802f GIT binary patch literal 5964 zcmbuCU5q3}9l%RCMHfUpKkx&j6p>xIp4;6!;h5v#c5e^v^zK;imd}uwnx2}OzUk?n zban5rJQyD|A<;-kB+(b6L`{6c7hi~9F<^`lqlqE$L4xu^eDDQd{7Cfoul|^sT|hlM z)AO6EuB!fjSIvw2_dTh&*150cK5&^*55n8`@x}GcH!F1teha=6{uy2l{{i>If58>F z|1Co!uY@x1I(Ri~!6kUCVjnKj zegg7Q&+sMd{tVs*{{RoeYgqIEJOdBH9f+vvdr;PY8p`~iLO$vje0>D|7RtC+q3HKF z_J#4?|w1 zz7A!br=ZOL2^2Yg4Hw}b;YZ=Zl}g(D3^mMQ3qA=y1fPW;fG@#Y;NRgp z;L25Hdku=7k3c@^3BE+$Z@?q)2k?bADfJil5bfs>PUdUAP)#jEu}d4u`sbkd_lpo0 zs~sA2ex{+JzLVX?O zhxq4E)gdt_m-tTnDVNwwZ2d85a8W{iOo~4w2jserTjJ~%X;hck`!KiU^Yz@HVvj$E$Oo_2W_C4F~5TN4g+m?pW25_+^rv>A`%C^UJLCOYcs#jbV3JRR#^ z6kDB`kzG=2VIFN;JxQ~n8=KIowQg6f#c?{(F3hY=bSE~+ulxo%CMtBWF|-S?Whgnn%4VI(X0PxKSfhqj|OHw9AXzs2>r1I!b(}gxT06Hm+Z{ zYmztB>kcj*H0u;3pN6v2S&>K}s=Ly#aC~Q_nR&ktn7eIaGZU-RNsna6tvX}K7JiI) zW!F9;FXo46&(x7k3U$tIgunCU$F)91gd&UxRQ@!yhOSsIt2HTz&}3P;S( zc4gKTBk7y9v$`iC3`_NV=BZ7YNwRizIYG~?q0Uv8HLpTcCFvsKcYyl}cU_`E9E zpCpNrFfO`eWU?K(h>X-}Vp(uxM;&s<G#pEUd)f0O#LfkCwea2U!$vZN|n+Fn~?W&MME)n6EPCxO@R9$ zBJuP&ap-NZYm6@s<#74QggwjnejguuMH$;L>g{Mr9lbb;k|MWmsVN3!MulmS9Z%N zdaSgT7fw*M*ye(*oiP&SsB@4#B1(?xa9}cW>)5?pcLhhL<3uoapx|T@rd{%`t&en~ zd|@*#D5?R~cI0@~*f-s=)uX!nd2BJcV`b^+!UMr(YP(S$eA@1Cu;{uoDAU%TojzDM z&W=q!XzSLr^Fmr=p*>NG)Yhd;4+Lc`_f{&G)rVTEt<{-%I6oY0vRtstf~|x8v!G65 z&^WqCQKJT-_RuCAXoimNi80wW2LKxnwVZMC6mh6^9HclWb?i0;bTKhzq>Cumt?Jwq zbSQmP>hjcNdwOECA;+UG;cvH7+qYz0NOb#Y4&x5lNPM6CVwh~OY7-nIm6Wt07L~Rd*&)8V zZ#eXRYqP%Dwwz2F`|3_~aknjIWyDqNCnFn6DiW-(88?B{=z072Y4mcgVaM-#;TzM8 zqmWvh5#j7n7{8OEO~=H;@@>1OF`%~Pp7FDqT#BE|BiuSRm{q!ZO&Pdrai4PwnRHLm zv15`hSNElC6>PceK5;64ab)}DQ=RF`BVC$CIcG9kOb9m4qP!q?{!GVzrJVERAn#D9 ztUpSgYx?A0OiDy%oh+qjsQD+vEagF+t^FZ?jU=|^-QpdNb+$Jzt5C1lBgUqKO zs|{niQbH_R4mp37df+ZXqlmWgb`x|{ccG<3;hd%iXmZ+fyx2cXBAW+nw8Ra6fe24I zy|4)kQci@4I>j4u>JeVeY{!3|rYEK;ov0THvGR18EU8mP)Rjc5 zU0M0OV<(0R*gW3Vz0pLo5287hu|8@)D#=$y1jUnoyVXH*O+w~gcAu$7t8H-Vc?9kI zobf@?I63k@R`m)^W;?&J;P7(ca=Ef^BP)j9Ma^llj5wbHiF(La2o(K4a#Q^qlR?XX literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/pl/LC_MESSAGES/gnome-shell-extension-caffeine.mo b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/pl/LC_MESSAGES/gnome-shell-extension-caffeine.mo index d638ed6e3d35df65352d1ecbfd0fdae48f8618c1..340d1b183355c8ceaed3fe433abbdd0df246befe 100644 GIT binary patch delta 309 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 literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/pt_PT/LC_MESSAGES/gnome-shell-extension-caffeine.mo b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/pt_PT/LC_MESSAGES/gnome-shell-extension-caffeine.mo index 9e59bc1361d309b53ea30fd4e3ca460a9f38be4e..6566450e010d687dade497aaab02c812731323eb 100644 GIT binary patch delta 303 zcmcb~^_{K$o)F7a1|VPuVi_O~0b*_-?g3&D*a5`MK)e%(*?@R25DNhD5g^tF;;TT+ z3c`#Kac&@eABbgum=h@ehY6yO4QL2RA1{!00n&0n8mKRnAsNWv1qx&WX`mjkB|wS+ zs1FQ)!VD}x46+0SKn?{1$CMNX$DH!S%3=oR#I&^3%)C^E)V#!`oYa)b>lh8i{8GzO zix~X#aw-+dGg9*u5|c|Z%Tg!*Wc1yf&oqxwJUBJCpePlgHxVeEn36yFJ&T)&Uuj-) SB13R~ZfaghssczRp8)`Zu{Biy delta 785 zcmb7>ziSjh6vy9r`DGvoq99S>L86Tu?q0kg>6VLjsUlW3>mKI`XclaOJXrcc?EJU#KJ9`?f1P8u+=FPlc^XB`~$JOcQiwiFZYZbZ%70?>= z4vOm(YC~V43(z+xffidtH^6Oh6MO_-0T01T;7jl}_!?XXzkn;}h<cH0T${u4{VGq z&k15xmW7#WRT*a~i^hB(crrA4$YRywLb$I612I-u)s-8;TdSgYN*OE;btuIm6%@1= zu|bW+b8bS6MV)_n#R6&c>U&X@u$2j;fF2rqz`ibo?#)}Ut}=t)-97)1uI~@sa|tkMD@Kv)AdNPbz{X|4!oi)w&ig$9~g?_0Y}%{_c!-ks64LDzSBBP O4F6i-7fbQRdHM+f4&M?0 diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/ru/LC_MESSAGES/gnome-shell-extension-caffeine.mo b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/ru/LC_MESSAGES/gnome-shell-extension-caffeine.mo index e1a7e3c99e2bf84f32a2967ee6f800dd7f8a8253..d41718de671869e7188cabd6d2104bb20a0ac5b2 100644 GIT binary patch literal 3909 zcma)--;Wzt6~`|SD7b}|K=@H8x}=~cYG!wnAi6j|)NPvnB1u=-rK$)BP3*h&(D95l zGtOooklK_eR7snHKrM(;LjM6Ljk~{{cOKB42noak67NVzeSt?l=Z@{QcQ;W-w!d@F zz4x5+{ho8L|G9I=Zxqi%e80|j$H$b~3;r9F=gp5R^$hq+@KfMFzz4v8fjhtt!3V+r zf{%eaKT(XI1HZ@EfZqY%1;@d^g0g=Ho9_X4fu95)0>1)241N|o49dFaK*{S2_&M-A zco4heEVn6Fdce5p04dz>DB7z}w){;F-@TRR`Y#Yv6q)rG5-%pa-x4;y90el<$HuxWK9^6GTkAts+3*cYCN5E$g=~1u=o&kT~!~cO#GM+`Oqu_7B z5d1qRCH)#-c_@Q>L@UulIDVe5)Dmj$5&h+n-oUNnAvu46FLYhqc7ekWZQ%MuY*0{N zmKPqWEz+v{WxxXsS5M03>MJ()OzAL4Gab+AG)sc0mhRKWuhexVjxs-puxLNhezO?{ z6+a8&NC#EDr)tudvbd?|g3##5ZnSyP?W{Y(?2Rx^n{=FiQU zATnyImBkG_SNt$s&?fTF;&Q%j2neZu`p6_PkC7@r#Eqn?kDtB6_2f^$Yq z`>oUe1hH0Ed_cZe}voREUp-%%iyY?$doTfT8X-cWnp0~4coTcnZ zvp6xj(yLt0)r_I2c%k}3LP^d1N`~w~R(JD7Hld@Hnk++!F*Q?<=Ml6jRf>~hI8wH4 zOaYJw(7k=A0um7*P^&#ytHn@&@<;V6N%aD3tKvEnsJhO zC(~L`^`2(cb|-f43#aBH8Wie-IZ;=loKg3qMhf3Q69*rO8%CnicKsHZoZ z_)!{)s%1SDnwL@K*x*rd#`gDsv z@S}mbOb?e%K6~=`29^C|6QyHxDW}w%U1*Y22BYz2$mMZJSL%L3v5)*<_9<_2W1ZwS zXADAH9f%vQr17&n0UfZP1DcnWj$7!4qF@= zkJHph%Q|YhVS41iAzi#4*%KYzzxU9_=9##aRLrp=rLrz^deJLRpA)JGuMfg$kjsqm zlS+M>pxy*w$Hv{Kr0g|&%P!@w*sfjC`78N_{AGFF$2)k_b{KzP+xcrOx~T2CZQDhA zgWq+#WINj4a_iscw{6$#T7FsYVS2@`=5OSe*mqUuKWAzg!(~0zyKwg^`z!o+?E6G$ zkLKV!F4qSGP6p)1=qN$E)~XA^sbZxg-h|yDS7r&l!GayQJ1( z04ZhPv^SXRLZS^Wk$lIwSkfbWF638;vBE-^dm+F`W=<8STPMHhG+fFr;Dn`&R*BZl zU$-kxv30wiU$)DdK?k}^b`50)>aj1sBAKruEKN`uJVSo z;ZI(Sm|e}U$f{n&HNID*S=k^C zX`bSobX}i|bX}%M7z(0om&4Ju*L(I}QliLRlS2Bp(YwJc=t74VRu1N*CEO_lm`N1OpTg9Pr2b>EBc^Bd48beZ%qur-`ryP62 zk4wH-3v+%Qfiq8?JSG_ZaoU zJ@v7RTm#&y#etU_>89%{xr(~^%iFKp{y=~9wYD>QlS!u(*S4JW?l>3Xl_?x@2@aB>a3F1k|mJJks<2S<9}X-r=+rmyH8IfcUWdS7Sx!|ROD bcK;T4KOsU)N-sSqExttnT&``p@znnTmA^UV literal 2699 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 ID;28$0l?^1Q~&?~ literal 1383 zcmb7^&u<$=6vr26DOf^CrH2ANJRzuxV4PhiO`}a+NRt#*O@!5$szONBWcS58@pxu6 zGi#IF_yZ6pB*e{!9&+N25Es{X{sQ<1IKY7mC%#@MaZi;P`K!;&^PBf$JmcRlU-&-4 zXh7E>4ZQ*V0?o!>&@0g2(3{XdPz+ssDT+P-SHbteufVI|H{ccUM{o)J3490q1AP1C zDEb$?g!PpRQFIx+2G0DJz%}p*cnkaid>8x;d<*;&+ytYGQS=_L1tL@ga~-`O24U5DD^`V>Vt6*-@_iY%kKh$ZMV;k2W34z+`wth@Tb8^vG43qwRSG#s+n8 zTBtuWjtVv;>7dejp85H9NO?ps29ct@!j2YAC_}-PR7%4->NtDISrGSg@ra$rIi%Dx zcEG|HthL~;13H3PWT%JFc*v!7LG1dT%EjHP=SA11)aZQP6?Gdk=Ph)TQY&u7B1uGR znUaTs_9r7dLWNg zpKh0qeP%;gUH!B-kV-c*JGj%>k)~J49*Zu^K}vht4rTw`nv(A~cJJ?QFPcr7abwdO zbctj~C8`eSd8yP=nRUtv={$$_7u|beZQ(a7>VTctHkr+F!YQrotI&8XI+k-4!~;GW zS(p1AuAJ23o^=DCk}2z@Z!fRYeA>QY+U?{+`h;Ri>4v$} zZqfDYWNx=tX2t}@*7_p!o~>NQoAZKGnpgZ-e8z^|{QTy{QPRBCTz+mJOP3WL6eVJm z)m*AS4crWs%jwfI;%;fxpNunA;ia5T`D5ziryfDcNH)84uvJu%R7(_8lEE`Lgo36O-|xZ%IRPJpEM-5LHsf8pWQKUPWKl WQ-#3ie-}e4tTTK_T204+qyGTnm8+8g diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/sv/LC_MESSAGES/gnome-shell-extension-caffeine.mo b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/sv/LC_MESSAGES/gnome-shell-extension-caffeine.mo index 7c74c08773aadb6efb9dddedc55c5fd57a106064..c1a7e14e9429e3639e8c52769ec45cacb6115516 100644 GIT binary patch delta 477 zcmYk%F-yZh7zW@kZB4aml`6&3iU)$YSP{g{!AV`JRf|4A=vL78lMa6H^5ibzy~|JfA=Mpb55)-E%Rb49vq#ScL0DU8>+Ahm9M4fscD|AL|dCmV#rL zgvkU--~!x*1;`gUgIs(G^U#HS;O%6;4~tm8z!f-vYw#OdbVxLf#Vo>Q^9cVX7yKXG z>F@9v$d}^bzvV#>C8Kw%ob}qW6VO4k={Z#yIz|i63BqU)+u16qmh$ODdmYiPD=lO- zbXtnaDhQ3QL{-*m%F#*$p$t`2iGRLbBsQ$&lG3WK4W0Vt%9jnUlTppy%at70cn+P* Vh7qn2*Gfp28+G(#uSO&L?iUipV9@&-d<^^!d=tC_ zZh&{e>tOUy71!Hfh+`jI2UGAx@D3Q_{{_4Z{t1S-{sDvirH7+v1-uM~{BDA;f}et+ zWJoW11p86!dWG8Jb-99#P`?l(QfSuF*?*y?2(?@n@C&!4|EDTZ^f(yuZC0N$#Zc5=#=66Jy}{Qlpm z%0UusS(YBr@-e}FJPN7VNygE36@fNh4bPHvweWbv$exCiEUP@v=SRxHf(}KB4%m5P znc_MR=i#jpmro>PYaDd=$QbXU!;v{YPh4pVB`u`pta_z%65=todRz>!R9+CFpa}LX z-F8!)@}M6vHRcFkF$m_|Eyg}^sBV?OzBQk7?8QzZZnJf0fF7mV951Hl>&PYOitk$1buFd^?y zJd)P2-~4!RQ*4}{3xN&UiftX61TE5|jU(k-=&W+&B*|%*x!I{srKOw`Dy&JZ%*D=) zo~C6twrYB0Y{K4!LBp8oE79)kG)>8?ESvkc){OAAf`u?^vVI_E@@A?qwj{@1VSM1U z9=dXX!qA1+Q$*xBgC8b?0d?cqsm&b(@mQk6m97mWd{2sVYKLQ4NYW?OBx0@^Ly@BI z`)9FH)!7`bBx&cwh=thuI%C`kA>IW2igr8?HDw>ozVYZ-KReB`W-LYM>WN!;7mA5v zKjL=bAymlZIAwiw8~007BU069vaaM|n#SdDmd6(3{jZ3oxHr!#fSlS*6~pCG9&ZfJ Sc{(hll}+%j&KCVvrSUJozc|7G diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/tr/LC_MESSAGES/gnome-shell-extension-caffeine.mo b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/locale/tr/LC_MESSAGES/gnome-shell-extension-caffeine.mo index 8cdafb203e93ba12ed1c19f834ef4dbf7e338f21..95f5eaae730dd307ce306dbbe70bd959c2921c52 100644 GIT binary patch delta 552 zcmYMw&r2IY6u|Kpjm96*h(9Xz2aW_;o@CribjWrRvKuA2cS1wrvBco7dJ_Ae=ZH~xC;o6pSb?!34ArSE_DPNP5hL5K`FM!qM9 z$#jB&*u)%KY{j40j(gaLe{MX*8P=EBhMAV@`$PDE^&{-Xr`V74I3=cTOyk?Wm&FmRDJzgH%~W#y)U4Pp)Ev>_UBVMd-QePR#ctmoV?P$JN{Ak av@&7QI#u%X)#Fc9m)FrmYCL+I`gjG1zG3PB delta 1104 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 X{#!Htp`(7jtNh0BrK+U1KG^>NT*y%M delta 1140 zcmZ|L%TE(Q90%}09s-4yckqQ{@P$~|t*A)i0Wrn|O-%6M4VQMIHMJ$(R-%^zLBLub z$$$!I@B!Lr3~E56B%;Q|lUEZjiV3rA{|V!F+66i2WM@CK^Z5OKJ4@E7g5Zy$jB$ci zjJ^|n9(@=3xiq}cKESi^BTR?6TL`g0Gc14=P=d8^AG{3r!hTo|U%(Rh8P>w@unguP z81e-P#b7%oPC_%h1dCt?JP2>VO85kBgJ0lb1o;J9@oml`1P}4xl?MY*obQFZ;W#`5 z7YtXSD9p4~><^+^4EA6`hN7|-xC35+6|f(QKc0mm!2%RF^~qTOX?*{N;?htX$woJ! zuQzeKSWY%koQNl4r8gy~Qm+hSEUq=v80SC~oV=MrV=f=&8e;*g%4!Ze9Hi0Vph{<_ z+hte$F0Y3){vA`dOY?7@&}f&_Wp`55qqMnI+N89%t1gd9m4M%S702z0+kKrh;)`kl ztyA?NG`eQ@sj5d)uBkriaB1Q!@?zJC|87fVaF8aSs`ypvQM)J-*qts<2lWNqD)VNS zGEfJpgF))O!d~{gU67J!{)B62esWtY#q%3FSUszwsg#&tcAT|@_6G;5> R9`B883O5$f2N#W?e*jg7TLJ(8 diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/metadata.json b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/metadata.json index 8944d72..25646a7 100644 --- a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/metadata.json +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/metadata.json @@ -5,10 +5,10 @@ "name": "Caffeine", "settings-schema": "org.gnome.shell.extensions.caffeine", "shell-version": [ - "3.36", - "3.38" + "43", + "44" ], "url": "https://github.com/eonpatapon/gnome-shell-extension-caffeine", "uuid": "caffeine@patapon.info", - "version": 37 + "version": 51 } \ No newline at end of file diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/preferences/appsPage.js b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/preferences/appsPage.js new file mode 100644 index 0000000..aa26ca7 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/preferences/appsPage.js @@ -0,0 +1,226 @@ +/* + This file is part of Caffeine (gnome-shell-extension-caffeine). + + Caffeine 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. + + Caffeine 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 Caffeine. + If not, see . + + Copyright 2022 Pakaoraki + + // From https://gitlab.com/skrewball/openweather/-/blob/master/src/prefs.js +*/ +'use strict'; + +const { Adw, Gtk, GObject, Gio } = imports.gi; + +const ExtensionUtils = imports.misc.extensionUtils; +const Me = ExtensionUtils.getCurrentExtension(); +const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']); +const _ = Gettext.gettext; + +const AppsModeChoices = { + RUNNING: _("Running"), + FOCUS: _("Focus"), + WORKSPACE: _("Active workspace"), +}; + +var AppsPage = GObject.registerClass( +class Caffeine_AppsPage extends Adw.PreferencesPage { + _init(settings, settingsKey) { + super._init({ + title: _('Apps'), + icon_name: 'applications-symbolic', + name: 'AppsPage' + }); + this._settingsKey = settingsKey; + this._settings = settings; + this._listApps = []; + + // Apps behavior group + // -------------- + let appsBehaviorGroup = new Adw.PreferencesGroup({ + title: _("Trigger mode") + }); + + // Apps behavior select mode + let appsTriggerMode = new Gtk.StringList(); + appsTriggerMode.append(AppsModeChoices.RUNNING); + appsTriggerMode.append(AppsModeChoices.FOCUS); + appsTriggerMode.append(AppsModeChoices.WORKSPACE); + let appsTriggerModeRow = new Adw.ComboRow({ + title: _("Apps trigger Caffeine mode"), + subtitle: _("Choose the way apps will trigger Caffeine"), + model: appsTriggerMode, + selected: this._settings.get_enum(this._settingsKey.TRIGGER_APPS_MODE) + }); + + // Add elements + appsBehaviorGroup.add(appsTriggerModeRow); + this.add(appsBehaviorGroup); + + // Apps list group + // -------------- + let addAppsButton = new Gtk.Button({ + child: new Adw.ButtonContent({ + icon_name: 'list-add-symbolic', + label: _("Add") + }) + }); + this.appsGroup = new Adw.PreferencesGroup({ + title: _('Apps that trigger Caffeine'), + header_suffix: addAppsButton + }); + + this._refreshApps(); + + // Add elements + this.add(this.appsGroup); + + // Bind signals + addAppsButton.connect('clicked', this._onAddApp.bind(this)); + appsTriggerModeRow.connect('notify::selected', (widget) => { + this._settings.set_enum(this._settingsKey.TRIGGER_APPS_MODE, widget.selected); + }); + } + + _refreshApps() { + const _apps = this._settings.get_strv(this._settingsKey.INHIBIT_APPS); + + // Clear the Apps list + this._listApps.length = 0; + + // Update the list & Check if app still exist + _apps.forEach(id => { + const appInfo = Gio.DesktopAppInfo.new(id); + + if (appInfo) + this._listApps.push(id); + }); + + // Check if the apps list UI needs updating + if (this._appsListUi != this._listApps) { + + // Remove the old list + if (this._count) { + for (var i = 0; i < this._count; i++) { + this.appsGroup.remove(this.apps[i].Row); + } + this._count = null; + } + + if (this._listApps.length > 0) { + this.apps = {}; + + // Build new apps UI list + for (let i in this._listApps) { + this.apps[i] = {}; + this.apps[i].ButtonBox = new Gtk.Box({ + orientation: Gtk.Orientation.HORIZONTAL, + halign: Gtk.Align.CENTER, + spacing: 5, + hexpand: false, + vexpand: false + }); + this.apps[i].DeleteButton = new Gtk.Button({ + icon_name: 'edit-delete-symbolic', + valign: Gtk.Align.CENTER, + css_classes: ['error'], + hexpand: false, + vexpand: false + }); + + // App info + let appInfo = Gio.DesktopAppInfo.new(this._listApps[i]); + const appIcon = new Gtk.Image({ + gicon: appInfo.get_icon(), + pixel_size: 32, + }); + appIcon.get_style_context().add_class('icon-dropshadow'); + this.apps[i].Row = new Adw.ActionRow({ + title: appInfo.get_display_name(), + subtitle: this._listApps[i].replace('.desktop',''), + activatable: true + }); + + // Add elements + this.apps[i].Row.add_prefix(appIcon); + this.apps[i].ButtonBox.append(this.apps[i].DeleteButton); + this.apps[i].Row.add_suffix(this.apps[i].ButtonBox); + this.appsGroup.add(this.apps[i].Row); + } + // Bind signals + for (let i in this.apps) { + this.apps[i].DeleteButton.connect('clicked', () => { + this._onRemoveApp(this._listApps[i]); + }); + + } + this._count = this._listApps.length; + } + this._appsListUi = [...this._listApps]; + } + return 0; + } + + _onAddApp() { + const dialog = new NewAppDialog(this.get_root(), this._settingsKey); + dialog.connect('response', (dlg, id) => { + const appInfo = id === Gtk.ResponseType.OK + ? dialog.get_widget().get_app_info() : null; + const apps = this._settings.get_strv(this._settingsKey.INHIBIT_APPS); + if (appInfo && !apps.some(a => a === appInfo.get_id())) { + this._settings.set_strv(this._settingsKey.INHIBIT_APPS, [ + ...apps, appInfo.get_id(), + ]); + this._refreshApps(); + } + dialog.destroy(); + }); + dialog.show(); + } + + _onRemoveApp(appId) { + this._settings.set_strv(this._settingsKey.INHIBIT_APPS, + this._settings.get_strv(this._settingsKey.INHIBIT_APPS).filter(id => { + return id !== appId; + })); + this._refreshApps(); + } + +}); + +const NewAppDialog = GObject.registerClass( + class NewAppDialog extends Gtk.AppChooserDialog { + _init(parent, settingsKey) { + super._init({ + transient_for: parent, + modal: true, + }); + + this._settings = ExtensionUtils.getSettings(); + this._settingsKey = settingsKey; + + this.get_widget().set({ + show_all: true, + show_other: true, // hide more button + }); + + this.get_widget().connect('application-selected', + this._updateSensitivity.bind(this)); + this._updateSensitivity(); + } + + _updateSensitivity() { + const apps = this._settings.get_strv(this._settingsKey.INHIBIT_APPS); + const appInfo = this.get_widget().get_app_info(); + this.set_response_sensitive(Gtk.ResponseType.OK, + appInfo && !apps.some(i => i.startsWith(appInfo.get_id()))); + } + }); diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/preferences/displayPage.js b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/preferences/displayPage.js new file mode 100644 index 0000000..e669a08 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/preferences/displayPage.js @@ -0,0 +1,137 @@ +/* + This file is part of Caffeine (gnome-shell-extension-caffeine). + + Caffeine 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. + + Caffeine 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 Caffeine. + If not, see . + + Copyright 2022 Pakaoraki + + // From https://gitlab.com/skrewball/openweather/-/blob/master/src/prefs.js +*/ +'use strict'; + +const { Adw, Gtk, GObject, Gio } = imports.gi; + +const ExtensionUtils = imports.misc.extensionUtils; +const Me = ExtensionUtils.getCurrentExtension(); +const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']); +const _ = Gettext.gettext; + +var DisplayPage = GObject.registerClass( +class Caffeine_DisplayPage extends Adw.PreferencesPage { + _init(settings, settingsKey) { + super._init({ + title: _("Display"), + icon_name: 'video-display-symbolic', + name: 'DisplayPage' + }); + this._settings = settings; + this._settingsKey = settingsKey; + + // Display group + // -------------- + let displayGroup = new Adw.PreferencesGroup({ + title: _("Display") + }); + + // Show indicator + let showStatusIndicator = new Gtk.StringList(); + showStatusIndicator.append(_("Only when active")); + showStatusIndicator.append(_("Always")); + showStatusIndicator.append(_("Never")); + let showStatusIndicatorRow = new Adw.ComboRow({ + title: _("Show status indicator in top panel"), + subtitle: _("Enable or disable the Caffeine icon in the top panel"), + model: showStatusIndicator, + selected: this._settings.get_enum(this._settingsKey.SHOW_INDICATOR) + }); + + // Show timer + let showTimerSwitch = new Gtk.Switch({ + valign: Gtk.Align.CENTER, + active: this._settings.get_boolean(this._settingsKey.SHOW_TIMER) + }); + let showTimerRow = new Adw.ActionRow({ + title: _("Show timer in top panel"), + subtitle: _("Enable or disable the timer in the top panel"), + activatable_widget: showTimerSwitch + }); + showTimerRow.add_suffix(showTimerSwitch); + + // Notifications + let notificationSwitch = new Gtk.Switch({ + valign: Gtk.Align.CENTER, + active: this._settings.get_boolean(this._settingsKey.SHOW_NOTIFICATIONS) + }); + let notificationRow = new Adw.ActionRow({ + title: _("Notifications"), + subtitle: _("Enable notifications when Caffeine is enabled or disabled"), + activatable_widget: notificationSwitch + }); + notificationRow.add_suffix(notificationSwitch); + + // Indicator position offset + this.lastIndicatorPos = this._settings.get_int(this._settingsKey.INDICATOR_POS_MAX); + this.posIndicatorOffsetButton = new Gtk.SpinButton({ + adjustment: new Gtk.Adjustment({ + lower: -1, + upper: this.lastIndicatorPos, + step_increment: 1, + page_increment: 1, + page_size: 0, + value: this._settings.get_int(this._settingsKey.INDICATOR_POSITION) + }), + climb_rate: 1, + digits: 0, + numeric: true, + valign: Gtk.Align.CENTER + }); + let posIndicatorOffsetRow = new Adw.ActionRow({ + title: _("Status indicator position"), + subtitle: _("The position relative of indicator icon to other items"), + activatable_widget: this.posIndicatorOffsetButton + }); + posIndicatorOffsetRow.add_suffix(this.posIndicatorOffsetButton); + + // Add elements + displayGroup.add(showStatusIndicatorRow); + displayGroup.add(showTimerRow); + displayGroup.add(notificationRow); + displayGroup.add(posIndicatorOffsetRow); + this.add(displayGroup); + + // Bind signals + // -------------- + showStatusIndicatorRow.connect('notify::selected', (widget) => { + if (widget.selected === 2) { + showTimerSwitch.set_sensitive(false); + } else { + showTimerSwitch.set_sensitive(true); + } + this._settings.set_enum(this._settingsKey.SHOW_INDICATOR, widget.selected); + }); + showTimerSwitch.connect('notify::active', (widget) => { + this._settings.set_boolean(this._settingsKey.SHOW_TIMER, widget.get_active()); + }); + notificationSwitch.connect('notify::active', (widget) => { + this._settings.set_boolean(this._settingsKey.SHOW_NOTIFICATIONS, widget.get_active()); + }); + this._settings.bind(this._settingsKey.INDICATOR_POSITION, + this.posIndicatorOffsetButton, 'value', + Gio.SettingsBindFlags.DEFAULT); + this._settings.connect(`changed::${this._settingsKey.INDICATOR_POS_MAX}`, this._updatePosMax.bind(this)); + } + + _updatePosMax() { + this.lastIndicatorPos = this._settings.get_int(this._settingsKey.INDICATOR_POS_MAX); + this.posIndicatorOffsetButton.adjustment.set_upper(this.lastIndicatorPos); + } +}); diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/preferences/generalPage.js b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/preferences/generalPage.js new file mode 100644 index 0000000..cb693eb --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/preferences/generalPage.js @@ -0,0 +1,390 @@ +/* + This file is part of Caffeine (gnome-shell-extension-caffeine). + + Caffeine 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. + + Caffeine 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 Caffeine. + If not, see . + + Copyright 2022 Pakaoraki + + // From https://gitlab.com/skrewball/openweather/-/blob/master/src/prefs.js +*/ +'use strict'; + +const { Adw, Gtk, GObject, Gdk } = imports.gi; + +const ExtensionUtils = imports.misc.extensionUtils; +const Me = ExtensionUtils.getCurrentExtension(); +const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']); +const _ = Gettext.gettext; +const genParam = (type, name, ...dflt) => GObject.ParamSpec[type](name, name, name, GObject.ParamFlags.READWRITE, ...dflt); + +const ComboBoxChoices = { + NEVER: _("Never"), + ALWAYS: _("Always"), + FOR_APPS: _("For apps on list"), +}; + +const TIMERS_DURATION = [ + "05, 10, 30", + "10, 20, 45", + "15, 30, 60", + "20, 40, 75", + "30, 50, 80" +]; + +var GeneralPage = GObject.registerClass( +class Caffeine_GeneralPage extends Adw.PreferencesPage { + _init(settings, settingsKey) { + super._init({ + title: _("General"), + icon_name: 'general-symbolic', + name: 'GeneralPage' + }); + this._settings = settings; + this._settingsKey = settingsKey; + + // Behavior group + // -------------- + let behaviorGroup = new Adw.PreferencesGroup({ + title: _("Behavior") + }); + + // Enable / Disable fullscreen apps + let disableFullscreenSwitch = new Gtk.Switch({ + valign: Gtk.Align.CENTER, + active: this._settings.get_boolean(this._settingsKey.FULLSCREEN) + }); + let disableFullscreenRow = new Adw.ActionRow({ + title: _("Enable for fullscreen apps"), + subtitle: _("Automatically enable when an app enters fullscreen mode"), + activatable_widget: disableFullscreenSwitch + }); + disableFullscreenRow.add_suffix(disableFullscreenSwitch); + + // Remember state + let rememberStateSwitch = new Gtk.Switch({ + valign: Gtk.Align.CENTER, + active: this._settings.get_boolean(this._settingsKey.RESTORE) + }); + let rememberStateRow = new Adw.ActionRow({ + title: _("Remember state"), + subtitle: _("Remember the last state across sessions and reboots"), + activatable_widget: rememberStateSwitch + }); + rememberStateRow.add_suffix(rememberStateSwitch); + + // Pause and resume Night Light + let pauseNightLight = new Gtk.StringList(); + pauseNightLight.append(ComboBoxChoices.NEVER); + pauseNightLight.append(ComboBoxChoices.ALWAYS); + pauseNightLight.append(ComboBoxChoices.FOR_APPS); + let pauseNightLightRow = new Adw.ComboRow({ + title: _("Pause and resume Night Light"), + subtitle: _("Toggles the night light together with Caffeine\'s state"), + model: pauseNightLight, + selected: this._settings.get_enum(this._settingsKey.NIGHT_LIGHT) + }); + + // Allow blank screen + let allowBlankScreen = new Gtk.StringList(); + allowBlankScreen.append(ComboBoxChoices.NEVER); + allowBlankScreen.append(ComboBoxChoices.ALWAYS); + allowBlankScreen.append(ComboBoxChoices.FOR_APPS); + let allowBlankScreenRow = new Adw.ComboRow({ + title: _("Allow screen blank"), + subtitle: _("Allow turning off screen when Caffeine is enabled"), + model: allowBlankScreen, + selected: this._settings.get_enum(this._settingsKey.SCREEN_BLANK) + }); + + // Add elements + behaviorGroup.add(disableFullscreenRow); + behaviorGroup.add(rememberStateRow); + behaviorGroup.add(pauseNightLightRow); + behaviorGroup.add(allowBlankScreenRow); + this.add(behaviorGroup); + + // Timer group + // -------------- + let timerGroup = new Adw.PreferencesGroup({ + title: _("Timer") + }); + + const durationIndex = this._settings.get_int(this._settingsKey.DURATION_TIMER_INDEX); + this.timerOptionRow = new Adw.ActionRow({ + title: _("Durations"), + activatable: true + }); + + let adjustSliderTimer = new Gtk.Adjustment({ + lower: 0, + upper: 4, + step_increment: 0.1, + page_increment: 1, + value: durationIndex + }); + this._updateTimerDuration(durationIndex); + + let sliderTimer = new Gtk.Scale({ + valign: 'center', + hexpand: true, + width_request: '200px', + round_digits: false, + draw_value: false, + orientation: 'horizontal', + digits: 0, + adjustment: adjustSliderTimer + }); + sliderTimer.add_mark(0, Gtk.PositionType.BOTTOM, null); + sliderTimer.add_mark(1, Gtk.PositionType.BOTTOM, null); + sliderTimer.add_mark(2, Gtk.PositionType.BOTTOM, null); + sliderTimer.add_mark(3, Gtk.PositionType.BOTTOM, null); + sliderTimer.add_mark(4, Gtk.PositionType.BOTTOM, null); + this.timerOptionRow.add_suffix(sliderTimer); + + // Add elements + timerGroup.add(this.timerOptionRow); + this.add(timerGroup); + + // Shortcut group + // -------------- + let deleteShortcutButton = new Gtk.Button({ + icon_name: 'edit-delete-symbolic', + valign: Gtk.Align.CENTER, + css_classes: ['error'], + hexpand: false, + vexpand: false + }); + let shortcutGroup = new Adw.PreferencesGroup({ + title: _("Shortcut"), + header_suffix: deleteShortcutButton + }); + + // Keyboard shortcut + this.shortcutKeyBoard = new ShortcutSettingWidget( + this._settings, + this._settingsKey.TOGGLE_SHORTCUT, + _("Toggle shortcut"), + _("Use Backspace to clear") + ); + + // Hide/Show delete button + if( ! this.shortcutKeyBoard.isAcceleratorSet() ) { + deleteShortcutButton.visible = false; + } + + // Add elements + shortcutGroup.add(this.shortcutKeyBoard); + this.add(shortcutGroup); + + + // Bind signals + // -------------- + disableFullscreenSwitch.connect('notify::active', (widget) => { + this._settings.set_boolean(this._settingsKey.FULLSCREEN, widget.get_active()); + }); + rememberStateSwitch.connect('notify::active', (widget) => { + this._settings.set_boolean(this._settingsKey.RESTORE, widget.get_active()); + }); + pauseNightLightRow.connect('notify::selected', (widget) => { + this._settings.set_enum(this._settingsKey.NIGHT_LIGHT, widget.selected); + }); + allowBlankScreenRow.connect('notify::selected', (widget) => { + this._settings.set_enum(this._settingsKey.SCREEN_BLANK, widget.selected); + }); + sliderTimer.connect('change-value', + (widget) => this._updateTimerDuration(widget.get_value())); + deleteShortcutButton.connect('clicked', this._resetShortcut.bind(this)); + this._settings.connect(`changed::${this._settingsKey.TOGGLE_SHORTCUT}`, () => { + if( this.shortcutKeyBoard.isAcceleratorSet() ) { + deleteShortcutButton.visible = true; + } else { + deleteShortcutButton.visible = false; + } + }); + } + + _updateTimerDuration(value) { + const durationIndex = this._settings.get_int(this._settingsKey.DURATION_TIMER_INDEX); + this.timerOptionRow.set_subtitle(_("Set to ") + TIMERS_DURATION[value] + _(" minutes")); + if (durationIndex !== value) { + this._settings.set_int(this._settingsKey.DURATION_TIMER_INDEX, value); + } + } + + _resetShortcut() { + this.shortcutKeyBoard.resetAccelerator(); + } +}); + +/* +* Shortcut Widget +*/ +const ShortcutSettingWidget = class extends Adw.ActionRow { + static { + GObject.registerClass({ + Properties: { + shortcut: genParam('string', 'shortcut', ''), + }, + Signals: { + changed: { param_types: [GObject.TYPE_STRING] }, + }, + }, this); + } + + constructor(settings, key, label, sublabel) { + super({ + title: label, + subtitle: sublabel, + activatable: true + }); + + this.shortcutBox = new Gtk.Box({ + orientation: Gtk.Orientation.HORIZONTAL, + halign: Gtk.Align.CENTER, + spacing: 5, + hexpand: false, + vexpand: false + }); + + this._key = key; + this._settings = settings; + this._description = sublabel; + + this.add_suffix(this.shortcutBox); + this.shortLabel = new Gtk.ShortcutLabel({ + disabled_text: _('New accelerator…'), + valign: Gtk.Align.CENTER, + hexpand: false, + vexpand: false + }); + + this.shortcutBox.append(this.shortLabel); + + // Bind signals + this.connect('activated', this._onActivated.bind(this)); + this.bind_property('shortcut', this.shortLabel, 'accelerator', GObject.BindingFlags.DEFAULT); + [this.shortcut] = this._settings.get_strv(this._key); + + this.add_suffix(this.shortcutBox); + } + + isAcceleratorSet() { + if(this.shortLabel.get_accelerator()) { + return true; + } else { + return false; + } + } + + resetAccelerator() { + this.saveShortcut(); // Clear shortcut + } + + _onActivated(widget) { + let ctl = new Gtk.EventControllerKey(); + + let content = new Adw.StatusPage({ + title: _('New accelerator…'), + description: this._description, + icon_name: 'preferences-desktop-keyboard-shortcuts-symbolic', + }); + + this._editor = new Adw.Window({ + modal: true, + hide_on_close: true, + transient_for: widget.get_root(), + width_request: 480, + height_request: 320, + content, + }); + + this._editor.add_controller(ctl); + ctl.connect('key-pressed', this._onKeyPressed.bind(this)); + this._editor.present(); + } + + _onKeyPressed(_widget, keyval, keycode, state) { + let mask = state & Gtk.accelerator_get_default_mod_mask(); + mask &= ~Gdk.ModifierType.LOCK_MASK; + + if (!mask && keyval === Gdk.KEY_Escape) { + this._editor.close(); + return Gdk.EVENT_STOP; + } + + if (keyval === Gdk.KEY_BackSpace) { + this.saveShortcut(); // Clear shortcut + return Gdk.EVENT_STOP; + } + + if (!this.isValidBinding(mask, keycode, keyval) || !this.isValidAccel(mask, keyval)) + return Gdk.EVENT_STOP; + + this.saveShortcut(keyval, keycode, mask); + return Gdk.EVENT_STOP; + } + + saveShortcut(keyval, keycode, mask) { + if (!keyval && !keycode) { + this.shortcut = ""; + } else { + this.shortcut = Gtk.accelerator_name_with_keycode(null, keyval, keycode, mask); + } + + this.emit('changed', this.shortcut); + this._settings.set_strv(this._key, [this.shortcut]); + this._editor.destroy(); + } + + // Functions from https://gitlab.gnome.org/GNOME/gnome-control-center/-/blob/main/panels/keyboard/keyboard-shortcuts.c + + keyvalIsForbidden(keyval) { + return [ + // Navigation keys + Gdk.KEY_Home, + Gdk.KEY_Left, + Gdk.KEY_Up, + Gdk.KEY_Right, + Gdk.KEY_Down, + Gdk.KEY_Page_Up, + Gdk.KEY_Page_Down, + Gdk.KEY_End, + Gdk.KEY_Tab, + + // Return + Gdk.KEY_KP_Enter, + Gdk.KEY_Return, + + Gdk.KEY_Mode_switch, + ].includes(keyval); + } + + isValidBinding(mask, keycode, keyval) { + return !(mask === 0 || mask === Gdk.SHIFT_MASK && keycode !== 0 && + ((keyval >= Gdk.KEY_a && keyval <= Gdk.KEY_z) || + (keyval >= Gdk.KEY_A && keyval <= Gdk.KEY_Z) || + (keyval >= Gdk.KEY_0 && keyval <= Gdk.KEY_9) || + (keyval >= Gdk.KEY_kana_fullstop && keyval <= Gdk.KEY_semivoicedsound) || + (keyval >= Gdk.KEY_Arabic_comma && keyval <= Gdk.KEY_Arabic_sukun) || + (keyval >= Gdk.KEY_Serbian_dje && keyval <= Gdk.KEY_Cyrillic_HARDSIGN) || + (keyval >= Gdk.KEY_Greek_ALPHAaccent && keyval <= Gdk.KEY_Greek_omega) || + (keyval >= Gdk.KEY_hebrew_doublelowline && keyval <= Gdk.KEY_hebrew_taf) || + (keyval >= Gdk.KEY_Thai_kokai && keyval <= Gdk.KEY_Thai_lekkao) || + (keyval >= Gdk.KEY_Hangul_Kiyeog && keyval <= Gdk.KEY_Hangul_J_YeorinHieuh) || + (keyval === Gdk.KEY_space && mask === 0) || this.keyvalIsForbidden(keyval)) + ); + } + + isValidAccel(mask, keyval) { + return Gtk.accelerator_valid(keyval, mask) || (keyval === Gdk.KEY_Tab && mask !== 0); + } +}; diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/prefs.js b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/prefs.js index d2b595a..0fc991d 100644 --- a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/prefs.js +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/prefs.js @@ -1,300 +1,85 @@ -// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- -// Adapted from auto-move-windows@gnome-shell-extensions.gcampax.github.com +/* + This file is part of Caffeine (gnome-shell-extension-caffeine). -const Gio = imports.gi.Gio; -const Gtk = imports.gi.Gtk; -const GObject = imports.gi.GObject; -const Config = imports.misc.config; + Caffeine 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. -const Gettext = imports.gettext.domain('gnome-shell-extension-caffeine'); -const _ = Gettext.gettext; + Caffeine 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. -const ExtensionUtils = imports.misc.extensionUtils; -const Me = ExtensionUtils.getCurrentExtension(); -const Convenience = Me.imports.convenience; - -const INHIBIT_APPS_KEY = 'inhibit-apps'; -const SHOW_INDICATOR_KEY = 'show-indicator'; -const SHOW_NOTIFICATIONS_KEY = 'show-notifications'; -const FULLSCREEN_KEY = 'enable-fullscreen'; -const RESTORE_KEY = 'restore-state'; -const NIGHT_LIGHT_KEY = 'control-nightlight'; -const NIGHT_LIGHT_APP_ONLY_KEY = 'control-nightlight-for-app'; - -const Columns = { - APPINFO: 0, - DISPLAY_NAME: 1, - ICON: 2 -}; - -let ShellVersion = parseInt(Config.PACKAGE_VERSION.split(".")[1]); - -class CaffeineWidget { - constructor(params) { - this.w = new Gtk.Grid(params); - this.w.set_orientation(Gtk.Orientation.VERTICAL); - - this._settings = Convenience.getSettings(); - this._settings.connect('changed', this._refresh.bind(this)); - this._changedPermitted = false; - - - let showCaffeineBox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL, - margin: 7}); - - let showCaffeineLabel = new Gtk.Label({label: _("Show Caffeine in top panel"), - xalign: 0}); - - let showCaffeineSwitch = new Gtk.Switch({active: this._settings.get_boolean(SHOW_INDICATOR_KEY)}); - showCaffeineSwitch.connect('notify::active', button => { - this._settings.set_boolean(SHOW_INDICATOR_KEY, button.active); - }); - - showCaffeineBox.pack_start(showCaffeineLabel, true, true, 0); - showCaffeineBox.add(showCaffeineSwitch); - - this.w.add(showCaffeineBox); - - if (ShellVersion > 6) { - const gtkhbox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL, - margin: 7}); - - const enableFullscreenLabel = new Gtk.Label({label: _("Enable when a fullscreen application is running"), - xalign: 0}); - - const enableFullscreenSwitch = new Gtk.Switch({active: this._settings.get_boolean(FULLSCREEN_KEY)}); - enableFullscreenSwitch.connect('notify::active', button => { - this._settings.set_boolean(FULLSCREEN_KEY, button.active); - }); - - gtkhbox.pack_start(enableFullscreenLabel, true, true, 0); - gtkhbox.add(enableFullscreenSwitch); - - this.w.add(gtkhbox); - } - - const stateBox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL, - margin: 7}); - - const stateLabel = new Gtk.Label({label: _("Restore state across reboots"), - xalign: 0}); - - const stateSwitch = new Gtk.Switch({active: this._settings.get_boolean(RESTORE_KEY)}); - stateSwitch.connect('notify::active', button => { - this._settings.set_boolean(RESTORE_KEY, button.active); - }); - - stateBox.pack_start(stateLabel, true, true, 0); - stateBox.add(stateSwitch); - - this.w.add(stateBox); - - const notificationsBox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL, - margin: 7}); - - const notificationsLabel = new Gtk.Label({label: _("Enable notifications"), - xalign: 0}); - - const notificationsSwitch = new Gtk.Switch({active: this._settings.get_boolean(SHOW_NOTIFICATIONS_KEY)}); - notificationsSwitch.connect('notify::active', button => { - this._settings.set_boolean(SHOW_NOTIFICATIONS_KEY, button.active); - }); - - notificationsBox.pack_start(notificationsLabel, true, true, 0); - notificationsBox.add(notificationsSwitch); - - this.w.add(notificationsBox); - - const nightlightBox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL, - margin: 7}); - - const nightlightLabel = new Gtk.Label({label: _("Pause/resume Night Light if enabled"), - xalign: 0}); - - const nightlightSwitch = new Gtk.Switch({active: this._settings.get_boolean(NIGHT_LIGHT_KEY)}); - nightlightSwitch.connect('notify::active', button => { - this._settings.set_boolean(NIGHT_LIGHT_KEY, button.active); - }); - - nightlightBox.pack_start(nightlightLabel, true, true, 0); - nightlightBox.add(nightlightSwitch); - - this.w.add(nightlightBox); - - const nightlightAppBox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL, - margin: 7}); - - const nightlightAppLabel = new Gtk.Label({label: _("Pause/resume Night Light for defined applications only"), - xalign: 0}); - - const nightlightAppSwitch = new Gtk.Switch({active: this._settings.get_boolean(NIGHT_LIGHT_APP_ONLY_KEY)}); - nightlightAppSwitch.connect('notify::active', button => { - this._settings.set_boolean(NIGHT_LIGHT_APP_ONLY_KEY, button.active); - }); - nightlightSwitch.connect('notify::active', button => { - if (button.active) { - nightlightAppSwitch.set_sensitive(true); - } else { - nightlightAppSwitch.set_active(false); - nightlightAppSwitch.set_sensitive(false); - } - }); - - nightlightAppBox.pack_start(nightlightAppLabel, true, true, 0); - nightlightAppBox.add(nightlightAppSwitch); - - this.w.add(nightlightAppBox); + You should have received a copy of the GNU General Public License along with Caffeine. + If not, see . - this._store = new Gtk.ListStore(); - this._store.set_column_types([Gio.AppInfo, GObject.TYPE_STRING, Gio.Icon]); + Copyright 2022 Pakaoraki - this._treeView = new Gtk.TreeView({ model: this._store, - hexpand: true, vexpand: true }); - this._treeView.get_selection().set_mode(Gtk.SelectionMode.SINGLE); + // From https://gitlab.com/skrewball/openweather/-/blob/master/src/prefs.js +*/ +'use strict'; - const appColumn = new Gtk.TreeViewColumn({ expand: true, sort_column_id: Columns.DISPLAY_NAME, - title: _("Applications which enable Caffeine automatically") }); - const iconRenderer = new Gtk.CellRendererPixbuf; - appColumn.pack_start(iconRenderer, false); - appColumn.add_attribute(iconRenderer, "gicon", Columns.ICON); - const nameRenderer = new Gtk.CellRendererText; - appColumn.pack_start(nameRenderer, true); - appColumn.add_attribute(nameRenderer, "text", Columns.DISPLAY_NAME); - this._treeView.append_column(appColumn); +const { Adw, Gtk, Gdk } = imports.gi; - this.w.add(this._treeView); - - const toolbar = new Gtk.Toolbar(); - toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR); - this.w.add(toolbar); - - const newButton = new Gtk.ToolButton({ stock_id: Gtk.STOCK_NEW, - label: _("Add application"), - is_important: true }); - newButton.connect('clicked', this._createNew.bind(this)); - toolbar.add(newButton); - - const delButton = new Gtk.ToolButton({ stock_id: Gtk.STOCK_DELETE }); - delButton.connect('clicked', this._deleteSelected.bind(this)); - toolbar.add(delButton); - - this._changedPermitted = true; - this._refresh(); - } - - _createNew() { - const dialog = new Gtk.Dialog({ title: _("Create new matching rule"), - transient_for: this.w.get_toplevel(), - modal: true }); - dialog.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL); - dialog.add_button(_("Add"), Gtk.ResponseType.OK); - dialog.set_default_response(Gtk.ResponseType.OK); - - const grid = new Gtk.Grid({ column_spacing: 10, - row_spacing: 15, - margin: 10 }); - dialog._appChooser = new Gtk.AppChooserWidget({ show_all: true }); - grid.attach(dialog._appChooser, 0, 0, 2, 1); - dialog.get_content_area().add(grid); - - dialog.connect('response', (dialog, id) => { - if (id != Gtk.ResponseType.OK) { - dialog.destroy(); - return; - } - - const appInfo = dialog._appChooser.get_app_info(); - if (!appInfo) - return; - - this._changedPermitted = false; - if (!this._appendItem(appInfo.get_id())) { - this._changedPermitted = true; - return; - } - let iter = this._store.append(); - - this._store.set(iter, - [Columns.APPINFO, Columns.ICON, Columns.DISPLAY_NAME], - [appInfo, appInfo.get_icon(), appInfo.get_display_name()]); - this._changedPermitted = true; - - dialog.destroy(); - }); - dialog.show_all(); - } - - _deleteSelected() { - const [any, , iter] = this._treeView.get_selection().get_selected(); - - if (any) { - const appInfo = this._store.get_value(iter, Columns.APPINFO); - - this._changedPermitted = false; - this._removeItem(appInfo.get_id()); - this._store.remove(iter); - this._changedPermitted = true; - } - } - - _refresh() { - if (!this._changedPermitted) - // Ignore this notification, model is being modified outside - return; - - this._store.clear(); - - const currentItems = this._settings.get_strv(INHIBIT_APPS_KEY); - const validItems = [ ]; - for (let i = 0; i < currentItems.length; i++) { - const id = currentItems[i]; - const appInfo = Gio.DesktopAppInfo.new(id); - if (!appInfo) - continue; - validItems.push(currentItems[i]); - - const iter = this._store.append(); - this._store.set(iter, - [Columns.APPINFO, Columns.ICON, Columns.DISPLAY_NAME], - [appInfo, appInfo.get_icon(), appInfo.get_display_name()]); - } - - if (validItems.length != currentItems.length) // some items were filtered out - this._settings.set_strv(INHIBIT_APPS_KEY, validItems); - } - - _appendItem(id) { - const currentItems = this._settings.get_strv(INHIBIT_APPS_KEY); - - if (currentItems.includes(id)) { - printerr("Already have an item for this id"); - return false; - } - - currentItems.push(id); - this._settings.set_strv(INHIBIT_APPS_KEY, currentItems); - return true; - } - - _removeItem(id) { - const currentItems = this._settings.get_strv(INHIBIT_APPS_KEY); - const index = currentItems.indexOf(id); - - if (index < 0) - return; - - currentItems.splice(index, 1); - this._settings.set_strv(INHIBIT_APPS_KEY, currentItems); - } -} +const ExtensionUtils = imports.misc.extensionUtils; +const Me = ExtensionUtils.getCurrentExtension(); +// Import preferences pages +const GeneralPrefs = Me.imports.preferences.generalPage; +const DisplayPrefs = Me.imports.preferences.displayPage; +const AppsPrefs = Me.imports.preferences.appsPage; + +const SettingsKey = { + INHIBIT_APPS: 'inhibit-apps', + SHOW_INDICATOR: 'show-indicator', + SHOW_NOTIFICATIONS: 'show-notifications', + SHOW_TIMER: 'show-timer', + DURATION_TIMER_INDEX: 'duration-timer', + FULLSCREEN: 'enable-fullscreen', + RESTORE: 'restore-state', + NIGHT_LIGHT: 'nightlight-control', + TOGGLE_SHORTCUT: 'toggle-shortcut', + DEFAULT_WIDTH: 'prefs-default-width', + DEFAULT_HEIGHT: 'prefs-default-height', + SCREEN_BLANK: 'screen-blank', + TRIGGER_APPS_MODE: 'trigger-apps-mode', + INDICATOR_POSITION: 'indicator-position', + INDICATOR_INDEX: 'indicator-position-index', + INDICATOR_POS_MAX: 'indicator-position-max', +}; function init() { - Convenience.initTranslations(); + ExtensionUtils.initTranslations(Me.metadata['gettext-domain']); } -function buildPrefsWidget() { - const widget = new CaffeineWidget(); - widget.w.show_all(); +function fillPreferencesWindow(window) { + let iconTheme = Gtk.IconTheme.get_for_display(Gdk.Display.get_default()); + if (!iconTheme.get_search_path().includes(Me.path + "/icons")) { + iconTheme.add_search_path(Me.path + "/icons"); + } - return widget.w; + //const settings = ExtensionUtils.getSettings(Me.metadata['settings-schema']); + const settings = ExtensionUtils.getSettings(); + const generalPage = new GeneralPrefs.GeneralPage(settings, SettingsKey); + const displayPage = new DisplayPrefs.DisplayPage(settings, SettingsKey); + const appsPage = new AppsPrefs.AppsPage(settings, SettingsKey); + + let prefsWidth = settings.get_int(SettingsKey.DEFAULT_WIDTH); + let prefsHeight = settings.get_int(SettingsKey.DEFAULT_HEIGHT); + + window.set_default_size(prefsWidth, prefsHeight); + window.set_search_enabled(true); + + window.add(generalPage); + window.add(displayPage); + window.add(appsPage); + + window.connect('close-request', () => { + let currentWidth = window.default_width; + let currentHeight = window.default_height; + // Remember user window size adjustments. + if (currentWidth != prefsWidth || currentHeight != prefsHeight) { + settings.set_int(SettingsKey.DEFAULT_WIDTH, currentWidth); + settings.set_int(SettingsKey.DEFAULT_HEIGHT, currentHeight); + } + window.destroy(); + }); } diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/schemas/gschemas.compiled b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/schemas/gschemas.compiled index 3e888dd5bc101a0efc4ca0c6f4004e13d2a989e5..4875085ffbc57693ddca7b250b457e5d688aba30 100644 GIT binary patch literal 1612 zcmbtUPiPcZ9DdOx{>dLxlSt?(kP5rv>|SzETWbzNLTf!q2tvWPvu|b|nY_21d6P|` zwNj`A+JhGly?K%1$x9CwDu{THMQZCNwqa;&6h!-v{8JZg2(g0wciH!C-wt_zz}d47y(90jDwE=6Ts0D zli-`bEMDSz%yCq#i{HV20^NM6neTJ(JT|y7Hg}it)JG7%1pW;8;OFmN(WgEN{|Yz) zhJHN#FMVqI*T4^f2VY$sVLhma;BSLp56j*G>A=Q}9>7SAemvzxa?oHS5^|XTY0J?|n|6n&;XA-vB;3F+NP6n(?>5 zw}BVa;Q)PV*6kknKJe`N$N9e0jDO5|^wB@t?_Xv-^%(qF@NwYR`Cyqo^)dJhVD_G~ zVHhhfbCkFt$g1nEW!0aEC3~O^=)`EEnfu&IQqSx|Pfj$VZ&$@d= zHgSGdUY&|etJ*ZRFP%-imQA%ow<8*(qN_%Sk&F4``PR6^#>JFT>nedPlNFu9=_g43s>)6xVjK&8rinj z%ML*GSXCGkwU82KK6}fwBwu!@9 z<0Y9f+Jt>)?>D>q!V9dQ@yvM*@V`jcYujWsZAqV{>x}gB@NH&X)3%N0^jcn97BC-p z551%JUJCWEMNGt(z`7!(_1D|ED6wH_Wvzmh;*~x}jb9 z+V~9mq?sj>-O-mJ!?|9TqE1CAo3vmys(DhzIvudR_z}gol73!iuMtbLS_F%C@25ni W=-}NegnjlX+L|m%#@=Awr2ha73}2f7 literal 708 zcmZWnzfTlF7@b27`FTN;OUSh}hh}&G04QjP78F*7(9IpQx09?h=ggoKfQbzj`X5-> zm{^(!i4-JfVnInmyw*Q}gbq4*Z{tTnu6ygSP5|h`(0Q?)Uu9xa?{eQMtO1^gAb9DdB`Q#auM1hb#Y$WEz}e7h`t*C}O?QxomZ zQrDW`Y?&C{D?-U7$*oIdzmE*;V|@^Fu^`w>_LY5{1lZ^QOTdhQ^V?pzq`G};WV5bQ zK3Jy`A7qH*<0kyHFGEo!W*B@H2cN~kXa5GDjRv0y;k7ArM+d&Mk0;yGFZsg0O^gjX Y*IgO-vsB+3eQmbrS{Kt}AF3i_@% diff --git a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/schemas/org.gnome.shell.extensions.caffeine.gschema.xml b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/schemas/org.gnome.shell.extensions.caffeine.gschema.xml index f56461f..6baaccb 100644 --- a/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/schemas/org.gnome.shell.extensions.caffeine.gschema.xml +++ b/zorin/.local/share/gnome-shell/extensions/caffeine@patapon.info/schemas/org.gnome.shell.extensions.caffeine.gschema.xml @@ -1,23 +1,54 @@ + + + + + + + + + + + + + + + + [ ] Application list A list of strings, each containing an application id (desktop file name) + + false + Store caffeine toggle state + + false Store caffeine user state + + 0 + Specify time (minutes) for the timer countdown + Specify time (minutes) for the timer countdown + + + 2 + Specify index of duration range for the timer + Specify index of duration range for the timer + false Restore caffeine state - - true + + "only-active" Show indicator Show the indicator on the top panel @@ -26,20 +57,60 @@ Show notifications Show notifications when enabled/disabled + + true + Show timer + Show timer when enabled/disabled + true Enable when a fullscreen application is running Enable when a fullscreen application is running - - false - Pause/resume Night Light - Pause/resume Night Light when enabled/disabled + + "never" + Night Light control mode + Set the way Caffeine interacts with the Night light setting. - - false - Pause/resume Night Light for defined applications only - Pause/resume Night Light for defined applicationa when enabled/disabled + + "never" + Allow screen blank + Allow turning off screen when Caffeine is enabled. + + + "on-running" + Trigger App control mode + Set the trigger method for apps. + + + [] + Toggle shortcut + Shortcut to toggle Caffeine. + + + 570 + Default width for the preferences window + + + 590 + Default height for the preferences window + + + 0 + Visible position offset of status icon in indicator menu + + + 0 + Real position offset of status icon in indicator menu that include invisible one + + + 1 + Last item index in indicator menu + + + + + diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/LICENSE.rst b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/LICENSE similarity index 97% rename from zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/LICENSE.rst rename to zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/LICENSE index 45cad82..a2d684f 100644 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/LICENSE.rst +++ b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/LICENSE @@ -2,6 +2,7 @@ The MIT License (MIT) ====================== +Copyright (c) 2022, Alex Saveau Copyright (c) 2014, Yotam Bar-On ----------------------------------------- diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/README.md b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/README.md new file mode 100644 index 0000000..74d7fb3 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/README.md @@ -0,0 +1,54 @@ +# Gnome Clipboard History + +[Gnome Clipboard History](https://extensions.gnome.org/extension/4839/clipboard-history/) is a Gnome +extension that saves what you've copied into an easily +accessible, searchable history panel. + +The extension is a rewrite of +[Clipboard Indicator](https://github.com/Tudmotu/gnome-shell-extension-clipboard-indicator) with +[vastly improved performance](https://alexsaveau.dev/blog/projects/performance/gnome/gch/gnome-clipboard-history), new features, and +[bug fixes](https://github.com/Tudmotu/gnome-shell-extension-clipboard-indicator/pull/338). + +## Download + +[Get it on GNOME Extensions](https://extensions.gnome.org/extension/4839/clipboard-history/) + +## Tips + +![Tutorial screenshot](tutorial-screenshot.png) + +- Open the panel from anywhere with Super + Shift + V. +- Modify shortcuts in settings or delete them by hitting backspace while editing a shortcut. +- Use the `Only save favorites to disk` feature to wipe your non-favorited items on shutdown. +- Use `Private mode` to temporarily stop processing copied items. +- Use keyboard shortcuts while the panel is open: + - Ctrl + N where `N` is a number from 1 to 9 to select the Nth + non-favorited entry. + - Super + Ctrl + N where `N` is a number from 1 to 9 to select + the Nth favorited entry. + - Ctrl + p/n to navigate to the previous/next page. + - Ctrl + Alt + S to open settings. + - / to search. + - F to (un)favorite a highlighted item. +- Search uses case-insensitive [regex](https://regex101.com/?flavor=javascript). + +## Install from source + +### Build + +```shell +cd ~/.local/share/gnome-shell/extensions/ && \ + git clone https://github.com/SUPERCILEX/gnome-clipboard-history.git clipboard-history@alexsaveau.dev && \ + cd clipboard-history@alexsaveau.dev && \ + make +``` + +### Restart GNOME + +Alt + F2 then type `r`. + +### Install + +```shell +gnome-extensions enable clipboard-history@alexsaveau.dev +``` diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/confirmDialog.js b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/confirmDialog.js similarity index 64% rename from zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/confirmDialog.js rename to zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/confirmDialog.js index c39808a..e0d0b6f 100644 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/confirmDialog.js +++ b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/confirmDialog.js @@ -1,43 +1,55 @@ -const St = imports.gi.St; -const GObject = imports.gi.GObject; -const ModalDialog = imports.ui.modalDialog; -const CheckBox = imports.ui.checkBox; -const Clutter = imports.gi.Clutter; - +'use strict'; +const { St, GObject, Clutter } = imports.gi; +const ModalDialog = imports.ui.modalDialog; +let _openDialog; -function openConfirmDialog(title, message, sub_message, ok_label, cancel_label, callback) { - new ConfirmDialog(title, message + "\n" + sub_message, ok_label, cancel_label, callback).open(); +function openConfirmDialog( + title, + message, + sub_message, + ok_label, + cancel_label, + callback, +) { + if (!_openDialog) { + _openDialog = new ConfirmDialog( + title, + message + '\n' + sub_message, + ok_label, + cancel_label, + callback, + ).open(); + } } const ConfirmDialog = GObject.registerClass( class ConfirmDialog extends ModalDialog.ModalDialog { - _init(title, desc, ok_label, cancel_label, callback) { super._init(); let main_box = new St.BoxLayout({ - vertical: false + vertical: false, }); this.contentLayout.add_child(main_box); let message_box = new St.BoxLayout({ - vertical: true + vertical: true, }); main_box.add_child(message_box); let subject_label = new St.Label({ style: 'font-weight: bold', x_align: Clutter.ActorAlign.CENTER, - text: title + text: title, }); message_box.add_child(subject_label); let desc_label = new St.Label({ style: 'padding-top: 12px', x_align: Clutter.ActorAlign.CENTER, - text: desc + text: desc, }); message_box.add_child(desc_label); @@ -46,17 +58,19 @@ const ConfirmDialog = GObject.registerClass( label: cancel_label, action: () => { this.close(); + _openDialog = null; }, - key: Clutter.Escape + key: Clutter.Escape, }, { label: ok_label, action: () => { this.close(); callback(); - } - } + _openDialog = null; + }, + }, ]); } - } + }, ); diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/dataStructures.js b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/dataStructures.js new file mode 100644 index 0000000..ba9acb2 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/dataStructures.js @@ -0,0 +1,417 @@ +// Derived from +// https://github.com/wooorm/linked-list/blob/d2390fe1cab9f780cfd34fa31c8fa8ede4ad674d/index.js + +var TYPE_TEXT = 'text'; + +// Creates a new `Iterator` for looping over the `List`. +class Iterator { + constructor(item) { + this.item = item; + } + + // Move the `Iterator` to the next item. + next() { + this.value = this.item; + this.done = !this.item; + this.item = this.item ? this.item.next : undefined; + return this; + } +} + +// Creates a new `Item`: +// An item is a bit like DOM node: It knows only about its "parent" (`list`), +// the item before it (`prev`), and the item after it (`next`). +var LLNode = class Item { + // Prepends the given item *before* the item operated on. + prepend(item) { + const list = this.list; + + if (!item || !item.append || !item.prepend || !item.detach) { + throw new Error( + 'An argument without append, prepend, or detach methods was given to `Item#prepend`.', + ); + } + + // If self is detached, return false. + if (!list) { + return false; + } + if (this === item) { + return false; + } + + // Detach the prependee. + const transient = this.list === item.list; + item.detach(transient); + + // If self has a previous item... + if (this.prev) { + item.prev = this.prev; + this.prev.next = item; + } + + // Connect the prependee. + item.next = this; + item.list = list; + + // Set the previous item of self to the prependee. + this.prev = item; + + // If self is the first item in the parent list, link the lists first item to + // the prependee. + if (this === list.head) { + list.head = item; + } + + // If the the parent list has no last item, link the lists last item to self. + if (!list.tail) { + list.tail = this; + } + + list.length++; + if (!transient) { + item._addToIndex(); + } + + return item; + } + + // Appends the given item *after* the item operated on. + append(item) { + const list = this.list; + + if (!item || !item.append || !item.prepend || !item.detach) { + throw new Error( + 'An argument without append, prepend, or detach methods was given to `Item#append`.', + ); + } + + if (!list) { + return false; + } + if (this === item) { + return false; + } + + // Detach the appendee. + const transient = this.list === item.list; + item.detach(transient); + + // If self has a next item... + if (this.next) { + item.next = this.next; + this.next.prev = item; + } + + // Connect the appendee. + item.prev = this; + item.list = list; + + // Set the next item of self to the appendee. + this.next = item; + + // If the the parent list has no last item or if self is the parent lists last + // item, link the lists last item to the appendee. + if (this === list.tail || !list.tail) { + list.tail = item; + } + + list.length++; + if (!transient) { + item._addToIndex(); + } + + return item; + } + + // Detaches the item operated on from its parent list. + detach(transient) { + const list = this.list; + + if (!list) { + return this; + } + if (!transient) { + this._removeFromIndex(); + } + + // If self is the last item in the parent list, link the lists last item to + // the previous item. + if (list.tail === this) { + list.tail = this.prev; + } + + // If self is the first item in the parent list, link the lists first item to + // the next item. + if (list.head === this) { + list.head = this.next; + } + + // If both the last and first items in the parent list are the same, remove + // the link to the last item. + if (list.tail === list.head) { + list.tail = null; + } + + // If a previous item exists, link its next item to selfs next item. + if (this.prev) { + this.prev.next = this.next; + } + + // If a next item exists, link its previous item to selfs previous item. + if (this.next) { + this.next.prev = this.prev; + } + + // Remove links from self to both the next and previous items, and to the + // parent list. + this.prev = this.next = this.list = null; + + list.length--; + + return this; + } + + nextCyclic() { + return this.next || this.list.head; + } + + prevCyclic() { + return this.prev || this.list.last(); + } + + _addToIndex() { + const hash = this._hash(); + if (hash === undefined || hash === null) { + return; + } + + if (this.type === TYPE_TEXT) { + this.list.bytes += this.text.length; + } + + let entries = this.list.invertedIndex[hash]; + if (!entries) { + entries = []; + this.list.invertedIndex[hash] = entries; + } + entries.push(this.id); + this.list.idsToItems[this.id] = this; + } + + _removeFromIndex() { + const hash = this._hash(); + if (hash === undefined || hash === null) { + return; + } + + if (this.type === TYPE_TEXT) { + this.list.bytes -= this.text.length; + } + + const entries = this.list.invertedIndex[hash]; + if (entries.length === 1) { + delete this.list.invertedIndex[hash]; + } else { + entries.splice(entries.indexOf(this.id), 1); + } + delete this.list.idsToItems[this.id]; + } + + _hash() { + if (this.type === TYPE_TEXT) { + return _hashText(this.text); + } else { + return null; + } + } +}; + +LLNode.prototype.next = LLNode.prototype.prev = LLNode.prototype.list = null; + +// Creates a new List: A linked list is a bit like an Array, but knows nothing +// about how many items are in it, and knows only about its first (`head`) and +// last (`tail`) items. +// Each item (e.g. `head`, `tail`, &c.) knows which item comes before or after +// it (its more like the implementation of the DOM in JavaScript). +var LinkedList = class List { + // Creates a new list from the arguments (each a list item) passed in. + static of(...items) { + return appendAll(new this(), items); + } + + // Creates a new list from the given array-like object (each a list item) passed + // in. + static from(items) { + return appendAll(new this(), items); + } + + constructor(...items) { + appendAll(this, items); + this.idsToItems = {}; + this.invertedIndex = {}; + /** Note: this isn't an accurate count because of UTF encoding and other JS mumbo jumbo. */ + this.bytes = 0; + } + + // Returns the list's items as an array. + // This does *not* detach the items. + toArray() { + let item = this.head; + const result = []; + + while (item) { + result.push(item); + item = item.next; + } + + return result; + } + + // Prepends the given item to the list. + // `item` will be the new first item (`head`). + prepend(item) { + if (!item) { + return false; + } + + if (!item.append || !item.prepend || !item.detach) { + throw new Error( + 'An argument without append, prepend, or detach methods was given to `List#prepend`.', + ); + } + + if (this.head) { + return this.head.prepend(item); + } + + item.detach(); + item.list = this; + this.head = item; + this.length++; + + item._addToIndex(); + + return item; + } + + // Appends the given item to the list. + // `item` will be the new last item (`tail`) if the list had a first item, and + // its first item (`head`) otherwise. + append(item) { + if (!item) { + return false; + } + + if (!item.append || !item.prepend || !item.detach) { + throw new Error( + 'An argument without append, prepend, or detach methods was given to `List#append`.', + ); + } + + // If self has a last item, defer appending to the last items append method, + // and return the result. + if (this.tail) { + return this.tail.append(item); + } + + // If self has a first item, defer appending to the first items append method, + // and return the result. + if (this.head) { + return this.head.append(item); + } + + // ...otherwise, there is no `tail` or `head` item yet. + item.detach(); + item.list = this; + this.head = item; + this.length++; + + item._addToIndex(); + + return item; + } + + last() { + return this.tail || this.head; + } + + findById(id) { + return this.idsToItems[id]; + } + + findTextItem(text) { + const entries = this.invertedIndex[_hashText(text)]; + if (!entries) { + return null; + } + + for (let i = entries.length - 1; i >= 0; i--) { + const item = this.idsToItems[entries[i]]; + if (item.type === TYPE_TEXT && item.text === text) { + return item; + } + } + return null; + } + + // Creates an iterator from the list. + [Symbol.iterator]() { + return new Iterator(this.head); + } +}; + +LinkedList.prototype.length = 0; +LinkedList.prototype.tail = LinkedList.prototype.head = null; + +// Creates a new list from the items passed in. +function appendAll(list, items) { + let index; + let item; + let iterator; + + if (!items) { + return list; + } + + if (items[Symbol.iterator]) { + iterator = items[Symbol.iterator](); + item = {}; + + while (!item.done) { + item = iterator.next(); + list.append(item && item.value); + } + } else { + index = -1; + + while (++index < items.length) { + list.append(items[index]); + } + } + + return list; +} + +function _hashText(text) { + // The goal of this hash function is to be extremely fast while minimizing collisions. To do + // this, we make an assumption about our data. If users copy text, the guess is that there is + // a very low likelihood of collisions when the text is very long. For example, why would + // someone copy two different pieces of text that are exactly 29047 characters long? However, for + // smaller pieces of text, it's very easy to get length collisions. For example, I can copy "the" + // and "123" to cause a collision. Thus, our hash function returns the string length for longer + // strings while using an ok-ish hash for short strings. + + if (text.length > 500) { + return text.length; + } + + // Copied from https://stackoverflow.com/a/7616484/4548500 + let hash = 0; + for (let i = 0; i < text.length; i++) { + let chr = text.charCodeAt(i); + hash = (hash << 5) - hash + chr; + hash |= 0; // Convert to integer + } + return hash; +} diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/extension.js b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/extension.js new file mode 100644 index 0000000..64898b5 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/extension.js @@ -0,0 +1,1314 @@ +'use strict'; + +const { Clutter, Meta, Shell, St, GObject } = imports.gi; +const Mainloop = imports.mainloop; +const MessageTray = imports.ui.messageTray; + +const Main = imports.ui.main; +const PanelMenu = imports.ui.panelMenu; +const PopupMenu = imports.ui.popupMenu; + +const Gettext = imports.gettext; + +const Clipboard = St.Clipboard.get_default(); +const VirtualKeyboard = (() => { + let VirtualKeyboard; + return () => { + if (!VirtualKeyboard) { + VirtualKeyboard = Clutter.get_default_backend() + .get_default_seat() + .create_virtual_device(Clutter.InputDeviceType.KEYBOARD_DEVICE); + } + return VirtualKeyboard; + }; +})(); + +const SETTING_KEY_CLEAR_HISTORY = 'clear-history'; +const SETTING_KEY_PREV_ENTRY = 'prev-entry'; +const SETTING_KEY_NEXT_ENTRY = 'next-entry'; +const SETTING_KEY_TOGGLE_MENU = 'toggle-menu'; +const SETTING_KEY_PRIVATE_MODE = 'toggle-private-mode'; +const INDICATOR_ICON = 'edit-paste-symbolic'; + +const PAGE_SIZE = 50; +const MAX_VISIBLE_CHARS = 200; + +const Util = imports.misc.util; +const ExtensionUtils = imports.misc.extensionUtils; +const Me = ExtensionUtils.getCurrentExtension(); +const Store = Me.imports.store; +const DS = Me.imports.dataStructures; +const ConfirmDialog = Me.imports.confirmDialog; +const Prefs = Me.imports.prefs; + +const IndicatorName = `${Me.metadata.name} Indicator`; +const _ = Gettext.domain(Me.uuid).gettext; + +let MAX_REGISTRY_LENGTH; +let MAX_BYTES; +let WINDOW_WIDTH_PERCENTAGE; +let CACHE_ONLY_FAVORITES; +let MOVE_ITEM_FIRST; +let ENABLE_KEYBINDING; +let PRIVATE_MODE; +let NOTIFY_ON_COPY; +let CONFIRM_ON_CLEAR; +let MAX_TOPBAR_LENGTH; +let TOPBAR_DISPLAY_MODE; // 0 - only icon, 1 - only clipboard content, 2 - both, 3 - none +let DISABLE_DOWN_ARROW; +let STRIP_TEXT; +let PASTE_ON_SELECTION; +let PROCESS_PRIMARY_SELECTION; + +class ClipboardIndicator extends PanelMenu.Button { + _init() { + super._init(0, IndicatorName, false); + + this._shortcutsBindingIds = []; + + const hbox = new St.BoxLayout({ + style_class: 'panel-status-menu-box clipboard-indicator-hbox', + }); + this.icon = new St.Icon({ + icon_name: INDICATOR_ICON, + style_class: 'system-status-icon clipboard-indicator-icon', + }); + hbox.add_child(this.icon); + this._buttonText = new St.Label({ + text: '', + y_align: Clutter.ActorAlign.CENTER, + }); + hbox.add_child(this._buttonText); + this._downArrow = PopupMenu.arrowIcon(St.Side.BOTTOM); + hbox.add(this._downArrow); + this.add_child(hbox); + + this._fetchSettings(); + this._buildMenu(); + this._updateTopbarLayout(); + } + + destroy() { + this._disconnectSettings(); + this._unbindShortcuts(); + this._disconnectSelectionListener(); + + if (this._searchFocusHackCallbackId) { + Mainloop.source_remove(this._searchFocusHackCallbackId); + this._searchFocusHackCallbackId = undefined; + } + if (this._pasteHackCallbackId) { + Mainloop.source_remove(this._pasteHackCallbackId); + this._pasteHackCallbackId = undefined; + } + + super.destroy(); + } + + _buildMenu() { + this.searchEntry = new St.Entry({ + name: 'searchEntry', + style_class: 'search-entry ci-history-search-entry', + can_focus: true, + hint_text: _('Search clipboard history…'), + track_hover: true, + x_expand: true, + y_expand: true, + }); + + const entryItem = new PopupMenu.PopupBaseMenuItem({ + style_class: 'ci-history-search-section', + reactive: false, + can_focus: false, + }); + entryItem.add(this.searchEntry); + this.menu.addMenuItem(entryItem); + + this.menu.connect('open-state-changed', (self, open) => { + if (open) { + this._setMenuWidth(); + this.searchEntry.set_text(''); + this._searchFocusHackCallbackId = Mainloop.timeout_add(1, () => { + global.stage.set_key_focus(this.searchEntry); + this._searchFocusHackCallbackId = undefined; + return false; + }); + } + }); + + // Create menu sections for items + // Favorites + this.favoritesSection = new PopupMenu.PopupMenuSection(); + + this.scrollViewFavoritesMenuSection = new PopupMenu.PopupMenuSection(); + const favoritesScrollView = new St.ScrollView({ + style_class: 'ci-history-menu-section', + overlay_scrollbars: true, + }); + favoritesScrollView.add_actor(this.favoritesSection.actor); + + this.scrollViewFavoritesMenuSection.actor.add_actor(favoritesScrollView); + this.menu.addMenuItem(this.scrollViewFavoritesMenuSection); + this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); + + // History + this.historySection = new PopupMenu.PopupMenuSection(); + + this.scrollViewMenuSection = new PopupMenu.PopupMenuSection(); + this.historyScrollView = new St.ScrollView({ + style_class: 'ci-history-menu-section', + overlay_scrollbars: true, + }); + this.historyScrollView.add_actor(this.historySection.actor); + + this.scrollViewMenuSection.actor.add_actor(this.historyScrollView); + + this.menu.addMenuItem(this.scrollViewMenuSection); + + this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); + + const actionsSection = new PopupMenu.PopupMenuSection(); + const actionsBox = new St.BoxLayout({ + style_class: 'ci-history-actions-section', + vertical: false, + }); + + actionsSection.actor.add(actionsBox); + this.menu.addMenuItem(actionsSection); + + const prevPage = new PopupMenu.PopupBaseMenuItem(); + prevPage.add_child( + new St.Icon({ + icon_name: 'go-previous-symbolic', + style_class: 'popup-menu-icon', + }), + ); + prevPage.connect('activate', this._navigatePrevPage.bind(this)); + actionsBox.add(prevPage); + + const nextPage = new PopupMenu.PopupBaseMenuItem(); + nextPage.add_child( + new St.Icon({ + icon_name: 'go-next-symbolic', + style_class: 'popup-menu-icon', + }), + ); + nextPage.connect('activate', this._navigateNextPage.bind(this)); + actionsBox.add(nextPage); + + actionsBox.add(new St.BoxLayout({ x_expand: true })); + + this.privateModeMenuItem = new PopupMenu.PopupSwitchMenuItem( + _('Private mode'), + PRIVATE_MODE, + { reactive: true }, + ); + this.privateModeMenuItem.connect('toggled', () => { + Prefs.Settings.set_boolean( + Prefs.Fields.PRIVATE_MODE, + this.privateModeMenuItem.state, + ); + }); + actionsBox.add(this.privateModeMenuItem); + this._updatePrivateModeState(); + + const clearMenuItem = new PopupMenu.PopupBaseMenuItem(); + clearMenuItem.add_child( + new St.Icon({ + icon_name: 'edit-delete-symbolic', + style_class: 'popup-menu-icon', + }), + ); + actionsBox.add(clearMenuItem); + + const settingsMenuItem = new PopupMenu.PopupBaseMenuItem(); + settingsMenuItem.add_child( + new St.Icon({ + icon_name: 'emblem-system-symbolic', + style_class: 'popup-menu-icon', + }), + ); + settingsMenuItem.connect('activate', this._openSettings.bind(this)); + actionsBox.add(settingsMenuItem); + + if (ENABLE_KEYBINDING) { + this._bindShortcuts(); + } + this.menu.actor.connect('key-press-event', (_, event) => + this._handleGlobalKeyEvent(event), + ); + + Store.buildClipboardStateFromLog( + (entries, favoriteEntries, nextId, nextDiskId) => { + /** + * This field stores the number of items in the historySection to avoid calling _getMenuItems + * since that method is slow. + */ + this.activeHistoryMenuItems = 0; + /** + * These two IDs are extremely important: making a mistake with either one breaks the + * extension. Both IDs are globally unique within compaction intervals. The normal ID is + * *always* present and valid -- it allows us to build an inverted index so we can find + * previously copied items in O(1) time. The Disk ID is only present when we cache all + * entries. This additional complexity is needed to know what the ID of an item is on disk as + * compared to in memory when we're only caching favorites. + */ + this.nextId = nextId; + this.nextDiskId = nextDiskId || nextId; + /** + * DS.LinkedList is the actual clipboard history and source of truth. Never use historySection + * or favoritesSection as the source of truth as these may get outdated during pagination. + * + * Entries *may* have a menuItem attached, meaning they are currently visible. On the other + * hand, menu items must always have an entry attached. + */ + this.entries = entries; + this.favoriteEntries = favoriteEntries; + + this.currentlySelectedEntry = entries.last(); + this._restoreFavoritedEntries(); + this._maybeRestoreMenuPages(); + + this._settingsChangedId = Prefs.Settings.connect( + 'changed', + this._onSettingsChange.bind(this), + ); + + this.searchEntry + .get_clutter_text() + .connect('text-changed', this._onSearchTextChanged.bind(this)); + clearMenuItem.connect('activate', this._removeAll.bind(this)); + + this._setupSelectionChangeListener(); + }, + ); + } + + _setMenuWidth() { + const display = global.display; + const screen_width = display.get_monitor_geometry( + display.get_primary_monitor(), + ).width; + + this.menu.actor.width = screen_width * (WINDOW_WIDTH_PERCENTAGE / 100); + } + + _handleGlobalKeyEvent(event) { + this._handleCtrlSelectKeyEvent(event); + this._handleSettingsKeyEvent(event); + this._handleNavigationKeyEvent(event); + this._handleFocusSearchKeyEvent(event); + } + + _handleCtrlSelectKeyEvent(event) { + if (!event.has_control_modifier()) { + return; + } + + const index = parseInt(event.get_key_unicode()); // Starts at 1 + if (isNaN(index) || index <= 0) { + return; + } + + const items = + event.get_state() === 68 // Ctrl + Super + ? this.favoritesSection._getMenuItems() + : this.historySection._getMenuItems(); + if (index > items.length) { + return; + } + + this._onMenuItemSelectedAndMenuClose(items[index - 1]); + } + + _handleSettingsKeyEvent(event) { + if (event.get_state() !== 12 || event.get_key_unicode() !== 's') { + return; + } + + this._openSettings(); + } + + _handleNavigationKeyEvent(event) { + if (!event.has_control_modifier()) { + return; + } + + if (event.get_key_unicode() === 'n') { + this._navigateNextPage(); + } else if (event.get_key_unicode() === 'p') { + this._navigatePrevPage(); + } + } + + _handleFocusSearchKeyEvent(event) { + if (event.get_key_unicode() !== '/') { + return; + } + + global.stage.set_key_focus(this.searchEntry); + } + + _addEntry(entry, selectEntry, updateClipboard, insertIndex) { + if (!entry.favorite && this.activeHistoryMenuItems >= PAGE_SIZE) { + const items = this.historySection._getMenuItems(); + const item = items[items.length - 1]; + this._rewriteMenuItem(item, entry); + this.historySection.moveMenuItem(item, 0); + + if (selectEntry) { + this._selectEntry(entry, updateClipboard); + } + return; + } + + const menuItem = new PopupMenu.PopupMenuItem('', { hover: false }); + + menuItem.entry = entry; + entry.menuItem = menuItem; + + menuItem.connect( + 'activate', + this._onMenuItemSelectedAndMenuClose.bind(this), + ); + menuItem.connect('key-press-event', (_, event) => + this._handleMenuItemKeyEvent(event, menuItem), + ); + + this._setEntryLabel(menuItem); + + // Favorite button + const icon_name = entry.favorite + ? 'starred-symbolic' + : 'non-starred-symbolic'; + const iconfav = new St.Icon({ + icon_name: icon_name, + style_class: 'system-status-icon', + }); + + const icofavBtn = new St.Button({ + style_class: 'ci-action-btn', + can_focus: true, + child: iconfav, + x_align: Clutter.ActorAlign.END, + x_expand: true, + y_expand: true, + }); + + menuItem.actor.add_child(icofavBtn); + icofavBtn.connect('clicked', () => { + this._favoriteToggle(menuItem); + }); + + // Delete button + const icon = new St.Icon({ + icon_name: 'edit-delete-symbolic', + style_class: 'system-status-icon', + }); + + const icoBtn = new St.Button({ + style_class: 'ci-action-btn', + can_focus: true, + child: icon, + x_align: Clutter.ActorAlign.END, + x_expand: false, + y_expand: true, + }); + + menuItem.actor.add_child(icoBtn); + icoBtn.connect('clicked', () => { + this._deleteEntryAndRestoreLatest(menuItem.entry); + }); + + menuItem.connect('destroy', () => { + delete menuItem.entry.menuItem; + if (!menuItem.entry.favorite) { + this.activeHistoryMenuItems--; + } + }); + menuItem.connect('key-focus-in', () => { + if (!menuItem.entry.favorite) { + Util.ensureActorVisibleInScrollView(this.historyScrollView, menuItem); + } + }); + + if (entry.favorite) { + this.favoritesSection.addMenuItem(menuItem, insertIndex); + } else { + this.historySection.addMenuItem(menuItem, insertIndex); + + this.activeHistoryMenuItems++; + } + + if (selectEntry) { + this._selectEntry(entry, updateClipboard); + } + } + + _handleMenuItemKeyEvent(event, menuItem) { + if (event.get_key_unicode() === 'f') { + this._favoriteToggle(menuItem); + } + if (event.get_key_code() === 119) { + const next = menuItem.entry.prev || menuItem.entry.next; + if (next?.menuItem) { + global.stage.set_key_focus(next.menuItem); + } + this._deleteEntryAndRestoreLatest(menuItem.entry); + } + } + + _updateButtonText(entry) { + if ( + !(TOPBAR_DISPLAY_MODE === 1 || TOPBAR_DISPLAY_MODE === 2) || + (entry && entry.type !== DS.TYPE_TEXT) + ) { + return; + } + + if (PRIVATE_MODE) { + this._buttonText.set_text('…'); + } else if (entry) { + this._buttonText.set_text(this._truncated(entry.text, MAX_TOPBAR_LENGTH)); + } else { + this._buttonText.set_text(''); + } + } + + _setEntryLabel(menuItem) { + const entry = menuItem.entry; + if (entry.type === DS.TYPE_TEXT) { + menuItem.label.set_text(this._truncated(entry.text, MAX_VISIBLE_CHARS)); + } else { + throw new TypeError('Unknown type: ' + entry.type); + } + } + + _favoriteToggle(menuItem) { + const entry = menuItem.entry; + const wasSelected = this.currentlySelectedEntry?.id === entry.id; + + // Move to front (end of list) + (entry.favorite ? this.entries : this.favoriteEntries).append(entry); + this._removeEntry(entry); + entry.favorite = !entry.favorite; + this._addEntry(entry, wasSelected, false, 0); + this._maybeRestoreMenuPages(); + global.stage.set_key_focus(entry.menuItem); + + if (CACHE_ONLY_FAVORITES && !entry.favorite) { + if (entry.diskId) { + Store.deleteTextEntry(entry.diskId, true); + delete entry.diskId; + } + return; + } + + if (entry.diskId) { + Store.updateFavoriteStatus(entry.diskId, entry.favorite); + } else { + entry.diskId = this.nextDiskId++; + + Store.storeTextEntry(entry.text); + Store.updateFavoriteStatus(entry.diskId, true); + } + } + + _removeAll() { + if (CONFIRM_ON_CLEAR) { + this._confirmRemoveAll(); + } else { + this._clearHistory(); + } + } + + _confirmRemoveAll() { + const title = _('Clear all?'); + const message = _('Are you sure you want to delete all clipboard items?'); + const sub_message = _('This operation cannot be undone.'); + + ConfirmDialog.openConfirmDialog( + title, + message, + sub_message, + _('Clear'), + _('Cancel'), + () => { + this._clearHistory(); + }, + ); + } + + _clearHistory() { + if (this.currentlySelectedEntry && !this.currentlySelectedEntry.favorite) { + this._resetSelectedMenuItem(true); + } + + // Favorites aren't touched when clearing history + this.entries = new DS.LinkedList(); + this.historySection.removeAll(); + + Store.resetDatabase(this._currentStateBuilder.bind(this)); + } + + _removeEntry(entry, fullyDelete, humanGenerated) { + if (fullyDelete) { + entry.detach(); + + if (entry.diskId) { + Store.deleteTextEntry(entry.diskId, entry.favorite); + } + } + + if (entry.id === this.currentlySelectedEntry?.id) { + this._resetSelectedMenuItem(humanGenerated); + } + entry.menuItem?.destroy(); + if (fullyDelete) { + this._maybeRestoreMenuPages(); + } + } + + _pruneOldestEntries() { + let entry = this.entries.head; + while ( + entry && + (this.entries.length > MAX_REGISTRY_LENGTH || + this.entries.bytes > MAX_BYTES) + ) { + const next = entry.next; + this._removeEntry(entry, true); + entry = next; + } + + Store.maybePerformLogCompaction(this._currentStateBuilder.bind(this)); + } + + _selectEntry(entry, updateClipboard, triggerPaste) { + this.currentlySelectedEntry?.menuItem?.setOrnament(PopupMenu.Ornament.NONE); + this.currentlySelectedEntry = entry; + + entry.menuItem?.setOrnament(PopupMenu.Ornament.DOT); + this._updateButtonText(entry); + if (updateClipboard !== false) { + if (entry.type === DS.TYPE_TEXT) { + this._setClipboardText(entry.text); + } else { + throw new TypeError('Unknown type: ' + entry.type); + } + + if (PASTE_ON_SELECTION && triggerPaste) { + this._triggerPasteHack(); + } + } + } + + _setClipboardText(text) { + if (this._debouncing !== undefined) { + this._debouncing++; + } + + Clipboard.set_text(St.ClipboardType.CLIPBOARD, text); + Clipboard.set_text(St.ClipboardType.PRIMARY, text); + } + + _triggerPasteHack() { + this._pasteHackCallbackId = Mainloop.timeout_add( + 1, // Just post to the end of the event loop + () => { + const eventTime = Clutter.get_current_event_time() * 1000; + VirtualKeyboard().notify_keyval( + eventTime, + Clutter.KEY_Shift_L, + Clutter.KeyState.PRESSED, + ); + VirtualKeyboard().notify_keyval( + eventTime, + Clutter.KEY_Insert, + Clutter.KeyState.PRESSED, + ); + VirtualKeyboard().notify_keyval( + eventTime, + Clutter.KEY_Insert, + Clutter.KeyState.RELEASED, + ); + VirtualKeyboard().notify_keyval( + eventTime, + Clutter.KEY_Shift_L, + Clutter.KeyState.RELEASED, + ); + + this._pasteHackCallbackId = undefined; + return false; + }, + ); + } + + _onMenuItemSelectedAndMenuClose(menuItem) { + this._moveEntryFirst(menuItem.entry); + this._selectEntry(menuItem.entry, true, true); + this.menu.close(); + } + + _resetSelectedMenuItem(resetClipboard) { + this.currentlySelectedEntry = undefined; + this._updateButtonText(); + if (resetClipboard) { + this._setClipboardText(''); + } + } + + _restoreFavoritedEntries() { + for (let entry = this.favoriteEntries.last(); entry; entry = entry.prev) { + this._addEntry(entry); + } + } + + _maybeRestoreMenuPages() { + if (this.activeHistoryMenuItems > 0) { + return; + } + + for ( + let entry = this.entries.last(); + entry && this.activeHistoryMenuItems < PAGE_SIZE; + entry = entry.prev + ) { + this._addEntry(entry, this.currentlySelectedEntry === entry); + } + } + + /** + * Our pagination implementation is purposefully "broken." The idea is simply to do no unnecessary + * work. As a consequence, if a user navigates to some page and then starts copying/moving items, + * those items will appear on the currently visible page even though they don't belong there. This + * could kind of be considered a feature since it means you can go back to some cluster of copied + * items and start copying stuff from the same cluster and have it all show up together. + * + * Note that over time (as the user copies items), the page reclamation process will morph the + * current page into the first page. This is the only way to make the user-visible state match our + * backing store after changing pages. + * + * Also note that the use of `last` and `next` is correct. Menu items are ordered from latest to + * oldest whereas `entries` is ordered from oldest to latest. + */ + _navigatePrevPage() { + if (this.searchEntryFront) { + this.populateSearchResults(this.searchEntry.get_text(), false); + return; + } + + const items = this.historySection._getMenuItems(); + if (items.length === 0) { + return; + } + + const start = items[0].entry; + for ( + let entry = start.nextCyclic(), i = items.length - 1; + entry !== start && i >= 0; + entry = entry.nextCyclic() + ) { + this._rewriteMenuItem(items[i--], entry); + } + } + + _navigateNextPage() { + if (this.searchEntryFront) { + this.populateSearchResults(this.searchEntry.get_text(), true); + return; + } + + const items = this.historySection._getMenuItems(); + if (items.length === 0) { + return; + } + + const start = items[items.length - 1].entry; + for ( + let entry = start.prevCyclic(), i = 0; + entry !== start && i < items.length; + entry = entry.prevCyclic() + ) { + this._rewriteMenuItem(items[i++], entry); + } + } + + _rewriteMenuItem(item, entry) { + if (item.entry.id === this.currentlySelectedEntry?.id) { + item.setOrnament(PopupMenu.Ornament.NONE); + } + + item.entry = entry; + entry.menuItem = item; + + this._setEntryLabel(item); + if (entry.id === this.currentlySelectedEntry?.id) { + item.setOrnament(PopupMenu.Ornament.DOT); + } + } + + _onSearchTextChanged() { + const query = this.searchEntry.get_text(); + + if (!query) { + this.historySection.removeAll(); + this.favoritesSection.removeAll(); + + this.searchEntryFront = this.searchEntryBack = undefined; + this._restoreFavoritedEntries(); + this._maybeRestoreMenuPages(); + return; + } + + this.searchEntryFront = this.searchEntryBack = this.entries.last(); + this.populateSearchResults(query); + } + + populateSearchResults(query, forward) { + if (!this.searchEntryFront) { + return; + } + + this.historySection.removeAll(); + this.favoritesSection.removeAll(); + + if (typeof forward !== 'boolean') { + forward = true; + } + + query = query.toLowerCase(); + let searchExp; + try { + searchExp = new RegExp(query, 'i'); + } catch {} + const start = forward ? this.searchEntryFront : this.searchEntryBack; + let entry = start; + + while (this.activeHistoryMenuItems < PAGE_SIZE) { + if (entry.type === DS.TYPE_TEXT) { + let match = entry.text.toLowerCase().indexOf(query); + if (searchExp && match < 0) { + match = entry.text.search(searchExp); + } + if (match >= 0) { + this._addEntry( + entry, + entry === this.currentlySelectedEntry, + false, + forward ? undefined : 0, + ); + entry.menuItem.label.set_text( + this._truncated( + entry.text, + match - 40, + match + MAX_VISIBLE_CHARS - 40, + ), + ); + } + } else { + throw new TypeError('Unknown type: ' + entry.type); + } + + entry = forward ? entry.prevCyclic() : entry.nextCyclic(); + if (entry === start) { + break; + } + } + + if (forward) { + this.searchEntryBack = this.searchEntryFront.nextCyclic(); + this.searchEntryFront = entry; + } else { + this.searchEntryFront = this.searchEntryBack.prevCyclic(); + this.searchEntryBack = entry; + } + } + + _queryClipboard() { + if (PRIVATE_MODE) { + return; + } + + Clipboard.get_text(St.ClipboardType.CLIPBOARD, (_, text) => { + this._processClipboardContent(text, true); + }); + } + + _queryPrimaryClipboard() { + if (PRIVATE_MODE) { + return; + } + + Clipboard.get_text(St.ClipboardType.PRIMARY, (_, text) => { + const last = this.entries.last(); + text = this._processClipboardContent(text, false); + if ( + last && + text && + text.length !== last.text.length && + (text.endsWith(last.text) || + text.startsWith(last.text) || + last.text.endsWith(text) || + last.text.startsWith(text)) + ) { + this._removeEntry(last, true); + } + }); + } + + _processClipboardContent(text, selectEntry) { + if (this._debouncing > 0) { + this._debouncing--; + return; + } + + if (STRIP_TEXT && text) { + text = text.trim(); + } + if (!text) { + return; + } + + let entry = + this.entries.findTextItem(text) || + this.favoriteEntries.findTextItem(text); + if (entry) { + const isFirst = + entry === this.entries.last() || entry === this.favoriteEntries.last(); + if (!isFirst) { + this._moveEntryFirst(entry); + } + if (selectEntry && (!isFirst || entry !== this.currentlySelectedEntry)) { + this._selectEntry(entry, false); + } + } else { + entry = new DS.LLNode(); + entry.id = this.nextId++; + entry.diskId = CACHE_ONLY_FAVORITES ? undefined : this.nextDiskId++; + entry.type = DS.TYPE_TEXT; + entry.text = text; + entry.favorite = false; + this.entries.append(entry); + this._addEntry(entry, selectEntry, false, 0); + + if (!CACHE_ONLY_FAVORITES) { + Store.storeTextEntry(text); + } + this._pruneOldestEntries(); + } + + if (NOTIFY_ON_COPY) { + this._showNotification(_('Copied to clipboard'), null, (notif) => { + notif.addAction(_('Cancel'), () => + this._deleteEntryAndRestoreLatest(this.currentlySelectedEntry), + ); + }); + } + + return text; + } + + _moveEntryFirst(entry) { + if (!MOVE_ITEM_FIRST) { + return; + } + + let menu; + let entries; + if (entry.favorite) { + menu = this.favoritesSection; + entries = this.favoriteEntries; + } else { + menu = this.historySection; + entries = this.entries; + } + + if (entry.menuItem) { + menu.moveMenuItem(entry.menuItem, 0); + } else { + this._addEntry(entry, false, false, 0); + } + + entries.append(entry); + if (entry.diskId) { + Store.moveEntryToEnd(entry.diskId); + } + } + + _currentStateBuilder() { + const state = []; + + this.nextDiskId = 1; + for (const entry of this.favoriteEntries) { + entry.diskId = this.nextDiskId++; + state.push(entry); + } + for (const entry of this.entries) { + if (CACHE_ONLY_FAVORITES) { + delete entry.diskId; + } else { + entry.diskId = this.nextDiskId++; + state.push(entry); + } + } + + return state; + } + + _setupSelectionChangeListener() { + this._debouncing = 0; + + this.selection = Shell.Global.get().get_display().get_selection(); + this._selectionOwnerChangedId = this.selection.connect( + 'owner-changed', + (_, selectionType) => { + if (selectionType === Meta.SelectionType.SELECTION_CLIPBOARD) { + this._queryClipboard(); + } else if ( + PROCESS_PRIMARY_SELECTION && + selectionType === Meta.SelectionType.SELECTION_PRIMARY + ) { + this._queryPrimaryClipboard(); + } + }, + ); + } + + _disconnectSelectionListener() { + if (!this._selectionOwnerChangedId) { + return; + } + + this.selection.disconnect(this._selectionOwnerChangedId); + this.selection = undefined; + this._selectionOwnerChangedId = undefined; + } + + _deleteEntryAndRestoreLatest(entry) { + this._removeEntry(entry, true, true); + + if (!this.currentlySelectedEntry) { + const nextEntry = this.entries.last(); + if (nextEntry) { + this._selectEntry(nextEntry, true); + } + } + } + + _initNotifSource() { + if (this._notifSource) { + return; + } + + this._notifSource = new MessageTray.Source(Me.uuid, INDICATOR_ICON); + this._notifSource.connect('destroy', () => { + this._notifSource = undefined; + }); + Main.messageTray.add(this._notifSource); + } + + _showNotification(title, message, transformFn) { + const dndOn = () => + !Main.panel.statusArea.dateMenu._indicator._settings.get_boolean( + 'show-banners', + ); + if (PRIVATE_MODE || dndOn()) { + return; + } + + this._initNotifSource(); + + let notification; + if (this._notifSource.count === 0) { + notification = new MessageTray.Notification( + this._notifSource, + title, + message, + ); + } else { + notification = this._notifSource.notifications[0]; + notification.update(title, message, { clear: true }); + } + + if (typeof transformFn === 'function') { + transformFn(notification); + } + + notification.setTransient(true); + this._notifSource.showNotification(notification); + } + + _updatePrivateModeState() { + // We hide the history in private mode because it will be out of sync + // (selected item will not reflect clipboard) + this.scrollViewMenuSection.actor.visible = !PRIVATE_MODE; + this.scrollViewFavoritesMenuSection.actor.visible = !PRIVATE_MODE; + + if (PRIVATE_MODE) { + this.icon.add_style_class_name('private-mode'); + this._updateButtonText(); + } else { + this.icon.remove_style_class_name('private-mode'); + if (this.currentlySelectedEntry) { + this._selectEntry(this.currentlySelectedEntry, true); + } else { + this._resetSelectedMenuItem(true); + } + } + } + + _fetchSettings() { + MAX_REGISTRY_LENGTH = Prefs.Settings.get_int(Prefs.Fields.HISTORY_SIZE); + MAX_BYTES = + (1 << 20) * Prefs.Settings.get_int(Prefs.Fields.CACHE_FILE_SIZE); + WINDOW_WIDTH_PERCENTAGE = Prefs.Settings.get_int( + Prefs.Fields.WINDOW_WIDTH_PERCENTAGE, + ); + CACHE_ONLY_FAVORITES = Prefs.Settings.get_boolean( + Prefs.Fields.CACHE_ONLY_FAVORITES, + ); + MOVE_ITEM_FIRST = Prefs.Settings.get_boolean(Prefs.Fields.MOVE_ITEM_FIRST); + NOTIFY_ON_COPY = Prefs.Settings.get_boolean(Prefs.Fields.NOTIFY_ON_COPY); + CONFIRM_ON_CLEAR = Prefs.Settings.get_boolean( + Prefs.Fields.CONFIRM_ON_CLEAR, + ); + ENABLE_KEYBINDING = Prefs.Settings.get_boolean( + Prefs.Fields.ENABLE_KEYBINDING, + ); + MAX_TOPBAR_LENGTH = Prefs.Settings.get_int( + Prefs.Fields.TOPBAR_PREVIEW_SIZE, + ); + TOPBAR_DISPLAY_MODE = Prefs.Settings.get_int( + Prefs.Fields.TOPBAR_DISPLAY_MODE_ID, + ); + DISABLE_DOWN_ARROW = Prefs.Settings.get_boolean( + Prefs.Fields.DISABLE_DOWN_ARROW, + ); + STRIP_TEXT = Prefs.Settings.get_boolean(Prefs.Fields.STRIP_TEXT); + PRIVATE_MODE = Prefs.Settings.get_boolean(Prefs.Fields.PRIVATE_MODE); + PASTE_ON_SELECTION = Prefs.Settings.get_boolean( + Prefs.Fields.PASTE_ON_SELECTION, + ); + PROCESS_PRIMARY_SELECTION = Prefs.Settings.get_boolean( + Prefs.Fields.PROCESS_PRIMARY_SELECTION, + ); + } + + _onSettingsChange() { + const prevCacheOnlyFavorites = CACHE_ONLY_FAVORITES; + const prevPrivateMode = PRIVATE_MODE; + + this._fetchSettings(); + + if ( + prevCacheOnlyFavorites !== undefined && + CACHE_ONLY_FAVORITES !== prevCacheOnlyFavorites + ) { + if (CACHE_ONLY_FAVORITES) { + Store.resetDatabase(this._currentStateBuilder.bind(this)); + } else { + for (const entry of this.entries) { + entry.diskId = this.nextDiskId++; + Store.storeTextEntry(entry.text); + } + } + } + + if (prevPrivateMode !== undefined && PRIVATE_MODE !== prevPrivateMode) { + this._updatePrivateModeState(); + } + + // Remove old entries in case the registry size changed + this._pruneOldestEntries(); + + // Re-set menu-items labels in case preview size changed + const resetLabel = (item) => this._setEntryLabel(item); + this.favoritesSection._getMenuItems().forEach(resetLabel); + this.historySection._getMenuItems().forEach(resetLabel); + + this._updateTopbarLayout(); + if (this.currentlySelectedEntry) { + this._updateButtonText(this.currentlySelectedEntry); + } + this._setMenuWidth(); + + if (ENABLE_KEYBINDING) { + this._bindShortcuts(); + } else { + this._unbindShortcuts(); + } + } + + _bindShortcuts() { + this._unbindShortcuts(); + this._bindShortcut(SETTING_KEY_CLEAR_HISTORY, () => { + if (this.entries) { + this._removeAll(); + } + }); + this._bindShortcut(SETTING_KEY_PREV_ENTRY, () => { + if (this.entries) { + this._previousEntry(); + } + }); + this._bindShortcut(SETTING_KEY_NEXT_ENTRY, () => { + if (this.entries) { + this._nextEntry(); + } + }); + this._bindShortcut(SETTING_KEY_TOGGLE_MENU, () => this.menu.toggle()); + this._bindShortcut(SETTING_KEY_PRIVATE_MODE, () => + this.privateModeMenuItem.toggle(), + ); + } + + _unbindShortcuts() { + this._shortcutsBindingIds.forEach((id) => Main.wm.removeKeybinding(id)); + + this._shortcutsBindingIds = []; + } + + _bindShortcut(name, cb) { + const ModeType = Shell.hasOwnProperty('ActionMode') + ? Shell.ActionMode + : Shell.KeyBindingMode; + + Main.wm.addKeybinding( + name, + Prefs.Settings, + Meta.KeyBindingFlags.NONE, + ModeType.ALL, + cb.bind(this), + ); + + this._shortcutsBindingIds.push(name); + } + + _updateTopbarLayout() { + if (TOPBAR_DISPLAY_MODE === 3) { + this.icon.visible = false; + this._buttonText.visible = false; + + this._style_class = this.style_class; + this.style_class = ''; + } else if (this._style_class) { + this.style_class = this._style_class; + } + + if (TOPBAR_DISPLAY_MODE === 0) { + this.icon.visible = true; + this._buttonText.visible = false; + } + if (TOPBAR_DISPLAY_MODE === 1) { + this.icon.visible = false; + this._buttonText.visible = true; + } + if (TOPBAR_DISPLAY_MODE === 2) { + this.icon.visible = true; + this._buttonText.visible = true; + } + this._downArrow.visible = !DISABLE_DOWN_ARROW; + } + + _disconnectSettings() { + if (!this._settingsChangedId) { + return; + } + + Prefs.Settings.disconnect(this._settingsChangedId); + this._settingsChangedId = undefined; + } + + _openSettings() { + ExtensionUtils.openPrefs(); + this.menu.close(); + } + + _previousEntry() { + this._selectNextPrevEntry( + this.currentlySelectedEntry.nextCyclic() || this.entries.head, + ); + } + + _nextEntry() { + this._selectNextPrevEntry( + this.currentlySelectedEntry.prevCyclic() || this.entries.last(), + ); + } + + _selectNextPrevEntry(entry) { + if (!entry) { + return; + } + + this._selectEntry(entry, true); + if (entry.type === DS.TYPE_TEXT) { + this._showNotification(_('Copied'), entry.text); + } + } + + _truncated(s, start, end) { + if (start < 0) { + start = 0; + } + if (!end) { + end = start; + start = 0; + } + if (end > s.length) { + end = s.length; + } + + const includesStart = start === 0; + const includesEnd = end === s.length; + const isMiddle = !includesStart && !includesEnd; + const length = end - start; + const overflow = s.length > length; + + // Reduce regex search space. If the string is mostly whitespace, + // we might end up removing too many characters, but oh well. + s = s.substring(start, end + 100); + + // Remove new lines and extra spaces so the text fits nicely on one line + s = s.replace(/\s+/g, ' ').trim(); + + if (includesStart && overflow) { + s = s.substring(0, length - 1) + '…'; + } + if (includesEnd && overflow) { + s = '…' + s.substring(1, length); + } + if (isMiddle) { + s = '…' + s.substring(1, length - 1) + '…'; + } + + return s; + } +} + +const ClipboardIndicatorObj = GObject.registerClass(ClipboardIndicator); + +function init() { + ExtensionUtils.initTranslations(Me.uuid); +} + +let clipboardIndicator; + +function enable() { + if (clipboardIndicator) { + return; + } + + Store.init(); + + clipboardIndicator = new ClipboardIndicatorObj(); + Main.panel.addToStatusArea(IndicatorName, clipboardIndicator, 1); +} + +function disable() { + clipboardIndicator.destroy(); + clipboardIndicator = undefined; + + Store.destroy(); +} diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/ar/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/ar/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo new file mode 100644 index 0000000000000000000000000000000000000000..75db88b8a0614489c2a688dd6d0ddead94e7a651 GIT binary patch literal 1058 zcmZvYO-~a+7{^D!xAhf>CML!V(SsfawipO0)(8lODB55(Mo-Ij*e==5)ZHoABTxjn zdGG@m5_yTx5Y)iIZ{W?#%*D^*f4aO}ob=h>Jn#SM-}cte1m`^L228=)V83DZTsc8V zE7%5J1h0V|;O&EWKiCdG2RdLLyac`lFM!kFb#NBE41NON!M?z3zN3YZs~`n$fqkHj zzX3bJ0JQxd54Z~2`d?r-_y@cRwm>9C61dHC_JHTW)37tJQwK2%tJS{CzWeZ;w3i{N zN@O_VUQA12qGVhn!?F_cB2|+5QCOLjUR)$&z7*sMuQffIlw_>@s!GT+{$5co6x#AJ zp9y6(Ida1pPjOn7MNVFn>!jTPA| z9w#Wx(m=>EXGw`i5yL(%Y?vL1W1%S8u`+fhcm>MXcoKv~HdGA~R*+fhx&A8c&%iKQKb)I^OVujcfNo2=m>0qghe`2s!_5{7}S;whfjz0s2Hx^#aZc+$&?>p`WF`=Zueyj~u@x)8#tDQs5ETRI5OW!jrlykr#>q z>X*DY;VSpCFv|Lm>#U+F9kEbX5Rm6MOEu@|vX8JCkR6_uu&@gQSPG6OmycjCl)8%&cIm9fOx?VF&W>K#Ze74LogoLNb0woo~z_w)wQt7gT_n`M;1S<~BkQ~v;W?1Z#=!K~8Qa^J!*T|J3_w$FANnwqEaKY`c5eefQ52;KsZ!2{?I=w;Yz}GjY0}b zedWBdL$+ZCN@nB@rG*-Fjj$QpNsVT&<#23~>l^FS$~*Q}e(@x=$F;VV2g+1#W~u|> zC6y+V?0w%Hk~UuTR4TkOn((D&Fk~H*=Y=HSN2JshvY36DdcKqKJ!u_66UwzIC3k&U z6dd)W4sJecjw_vow8loea)8cw%jGKL%_?`iV-kwm@Axj78(-T*QwgoawK|WV@LEi@ zIH|=vUXA1Ejc}fKtkA9q=@MGcOwlv+N(@U$O<}FVtj5u^p7LhD`=aVr+E>e|DWBuA z&MT2i-jSk2(NjC2R791=)w{|^?V_@x;M>NQE+IV_o3634Mw4UXp{At<)gG-yANfnErJan{ zHZoJ5R+i)C)rhT^-E4H?ShG@@pyJ=rx5+jrQLy*H65+X&2#-y&pzxaox6+HEaO3R| zY}3kATIndmd&(5QkZoZz1QI%#kA7j=nL}WBtBhqWtOpHj*cF@|!l}|?wkxR`orIF( S;ufn}mX#Nw18mFaC;Ja#Lj;%r literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/cs/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/cs/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo new file mode 100644 index 0000000000000000000000000000000000000000..0849a18e5b023352a6cac21ce0ec9dad4bafda22 GIT binary patch literal 2548 zcmZvcOKjX!6oxNQUg2FRP#*0qP}+((O{SGvg-4o(Qlc=)sF|jy5{o>!N0+AaL)sb?En|RhrkB-Ab1WO13v+u09|k= zn1QtKbMRU4OOT%buDX8>%it17@jdWK@FMs) zxB>13uYj+D*DL-G(sTcUyTP3h&B1Yybk)J9Kmoo4ehNMfUIIBh`39`v{3eRAz}q0z zwHG3ZZ-S447D#c9fu!$rb$%WsU)Dg1e*r{D_7zC^FN3dxJ&<(%2A%-_0V(dpBaFQO z9tZb;jfw_*9_L?x&w<~Ar29I!AN&=hxVOQ5;4TEC=Z}F0z!i}4T?9$j6_9lQ1d>m` zfX{%pK-f?&x=)(PU&;kb%NW!rS`?ppL3;35IalP-aG|8qd&)

Ut4Bj2MH=G9P(G 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 yEOHc19v6-`r5-YBn literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/el/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/el/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo new file mode 100644 index 0000000000000000000000000000000000000000..9ef3647e1cc19728a478cd399b4beea6d44af391 GIT binary patch literal 1053 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 OZcVF2R-AC*&Hn(AsAz=% literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/hu/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/hu/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo new file mode 100644 index 0000000000000000000000000000000000000000..8aaedc78ac8dcaa952f74f0db70f4ac1be339f84 GIT binary patch literal 1345 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 literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/nl/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/nl/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo new file mode 100644 index 0000000000000000000000000000000000000000..f80e11bccee14bf8c352b607cc452792f9795e95 GIT binary patch literal 1886 zcmYk6%Wqpn6vn4e9yNtRdB3D#QAmZZW4lxohtTHL5WuaKn1m(c>*MQ*=gwF&bDgH_ zvO;V?LTuP|M+Jy~012TikXW!nELpKYVoP@{_>O&@WTd&j`#5vXch1bYf1W@6mB4r& z^Cir`FfU+!cM2DbYxfE92Dk*C2FKuo;3wb%-~m_xKLsBJzbwDs0iVS4Hz2S35j+q6 z3`+3#^7}pTH9ViWUx`Rs0$&7IL0vGWa>j+P?=S_zTE!{|3*2 z|AFrzm$MMj!1E47v+mDuIRkzHaz0;!tp5(k>wf@Q$05jd`3+?If51n;dtd^d!r~{u zd61u%KztGoWSs^0DtG`s4c-OW?@u86`4!|m{s3P9{{=6A=THpRaT$CH+yHq?*!MG- zoEv|i4J@0~nSIX&*AwZBhcTauH4U@sOo(<0TSxl}w53Uan&X;qW zj3rNU-xV?x<;|Y5QAQ_wWGIqU#>mv@QP(NolR8o!u8L(B2VzCpl#Ez0r2O>C##hVR zfez96eX-(3ntCPJ?~yaHkvc2hr~RqxFmOJmMGT^)ZXH|6(vb}MHp#h`UcNXnutnY_ zFI|7CNwnOU8j9OxkaBg~>#>4O?s_CPDQ6vf19mb}DeC84VS6$noY)$;J!xIk zeVr=y#f~9#Uv!YAbR+W9*Qv5FlUnv48$7Pw}1WyDj-*IL+*#g4cE;J?^y=0qw zfd8hfY|;pIO8_tU`WMHfoJVQfnlQ%d*~RUV8KOTD?}Q ze1QCuj#oAqh5c;GcS$3d+={N>Clln`a1vD!Lb%q4ZLYMbrY?U6D{WS&jFJwi91&;F zO=(S~wb5ET7Fn;>Dl5)LY)8`BA3+S4Ykp*uwhJ;HC?6;;e%QI5TsgL5O?~ponoV6# z+pHP2rVEt~;Lxgc?mA!(wAWPHz|ItbAor)-NtpK1$Zfa>+Tbwxgbo@=~={ ztyjbjQIv(eO+%cqp5l9)ZIVMndDnSZq7USrHW8N)$f74m;{YsKTNv_W#m?ltSi&;4 zoEoiDNC)T#ve@tGOR-KvKC9$=CvK%x%F6*%%tDH`PNU1b%Egu?6CFjwtmyc0x ziOZ3Bb~4hOwsO`vRjJV7%9MSxhPcQvI}$-<&vbE+A;Ldm6C7#D3Genr+o<6XZ>%a?X;P$Zv|Bdy!+msk7hO~Y)Gqo$ z=jbZ$&;U8k!w?$Eg0;x-hEFB2L$2T9w_Nm9Y~c`^Ep(!}GU{;#d)P6A&L~%E7^`TM YqflIo`9eq0LI+Jf&X39C*8=(Ce^eRtHvj+t literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/oc/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/oc/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo new file mode 100644 index 0000000000000000000000000000000000000000..29f84762d748bdaef6976edfb1388c0e69f53553 GIT binary patch literal 1311 zcmY+DKa3ki6vijHK#0SiBqWLufAl0u*gN}@A~HlL=QyGhF&uZB2+_^WzOx6dXErml zKAb9LQlv})HAqK=bR`ANc1TF{NEGQP5hX(6duzuhMjrom$8X;I=FR6nE}eO*FfL-g zh4~%kRm}HK;S1vtcpZEUo&kRbUj!TQ1@ITJ1O5iS0{#xZ4*m&B{J-EO@bu|<+!gRu zyc75`xCXureh9t+ehCtoz}LX1;0khl4{qcAhZUvHf`2dg&w?u`Ch_M%ssAP@dDlSE zI|MI-Id}oIpy+x4ijF7XI`}R4F8C|>4)_-+dN1IxkfF|FN*&25d87yDFkiwHUD8KL zS`NuALwY3rk%6PMIg$Eg3LlNv(dt-k{&L?|djZW4(!pHb(rgCT^ zUvZc(8|@HA`%KvD9j~g~k47a^8lw=q8Y28xY*MyeWcN5k{dOB zS?;mC^I5hF$r6-(1gU*m@2>Zm zZH|IQZxZ}c1v{|;H;Y@K(&MU1mYwXH7wyupImQ;82Od*<&kxofN&JP3`z6dCNw=b~#|PJ*GBroA+yGWXx8Wnb ube<9CaqB#bf0P>BubX44n&U*3j?^5*$bod*i?pf+W#ZtF108IBQvU%?!evwd literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/pl/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/pl/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo new file mode 100644 index 0000000000000000000000000000000000000000..d0efc79a4d16873a5cb5d2f00d7508d8df74efc2 GIT binary patch literal 1000 zcmYL{OK%e~5XToNukdUUNJt1Q@lY$|ut_UX(x#x67Das!wc#OgK<=))akKHPyiS*m z$^j(A86gf8CoX&eIC3Ms@c}sTS@=6`+R=`Fp7D5QyqBw?BifkMH13@F(c<{socJ1Nw4mpQphS(34P?cOb4;cQ1GEfgE*< zS+Y%UE|$Wurb;cD+?%6B$&guML9CK>5+?L&0cmeh=6#E$O)@s<*wkB*Z!DAA;#l3t zEk&L5z*JkpO4g=OdTUL}m?o<>R3NM(&F}@3DjikW(xC#C(BFJFPIC^v$$7K82p#PIXjQt0nf3`3&2)Oa4r? z%x{QhBc)`~@@(k^AvTftlOb`n%csGA3y z!mCqax-!)2(A6;cI!jER39B(!)DpYD5T7X#Qd>!_BrKK=Dl0cOUAgEpm6vqczzC!tGDbVuu3I$RrPPb_fWlLI;&{kEm$tqn47gWvKlif+|8E3{$ zvN<45NEKA#f8r4A-02O!MnjGco#Si4uNlh4}e{8 zC%6K#-34$L_yNfCFIVGVf`s>PtMQ+~m+*cAya(I^V_tV3_#8L_J_*i(y#5mSAow=8 z1H1@63w{DV4PLAG6Ug)a0QZ195j24#Ajj1J9|9$~7hDD(2HyvNhbEtb(|Estpk4%j z1o27y3Em5C!w=`V1LQb%fscR$?gz&}&SxIv`R75le;4FDE`ra4pMf0T_aK4SL4+*+ z0y&=T_m%qW2HAcbd;*jpkFSI5|2=RR{21hVepkKU0LSpY7oxJB4UpqWL7w*!h(B=| zKdj?7;BN2-5Hb`O$IF_rzC}zRYs>TadImSI^(bz*EA|!VI=EN|!p%DK^*CljCI*J}DS0>9pxkSNqJmo|v>*S4>G0 zs#r|%VEM}{pQs)Orc)b^uyUqM=EamvwTdcmTpPiNGcXcoRj&-qcdg6998(%{ZPRKH z26?@%Xt<##4-^I_Puj|nT_|%B4ZET!b!tW1+{Znn#(v8|cAIq-kct_l@#w&{j1VCb zoY`0^>`EuYOgT^5kk4e6duk)&S%W3Lgo_2aVjX1kg~r-1iKg_>83KAJ9?9n<`g+4yAz^wgbVdHEL9}Y^M{mx?9qy zzOk%{GP#)V$|4k$@#c)?HP%_BRUKtr8h+sbEojz>eA9LGe{$z?|cEhUpWO**-*V=WCe z5l-I8l~?~`cAe7f{N&tF<4oh^W{!tOYeQ4z!3bKt6v1-=52mry<{0tj^C}yEy>%)$ zx@pHbEGQS8G@*@fF6(r(t+SywgVV}z$vC;w*+!;xqy{g|ICnA*PFa`uI+?V1_2Xm5 zsC*nBHgud09l$b8t0J8RlhUhHX5BiCjvg%jHpj|s)x>B}LuO7b_|ZlGuj7a6gp`!w z0*B;Wtagj${u zC}Jl!nRJ9Eha-puW1XaUFV8^#s?(tr6G_{m^As%$hj+R#sX$pCS#-cub})?(PBp10 zO#fPh&UxDiiZ&)AJ0QWeq}!YKFQUaMF_Fo*iv+QDroxyPXvsvHuBD`ZX-y~axix{R z&CT?$CCY8FQPlsMH7c83`CK$Qtmw;F;K8O=%*aUMnDwt>aVU*8#~%g@LbkAKbP&-< zZgI%N=QtJGIy9Mhg*8rTcNQ65rUfUbCAaAhNRSR)#37CvJoNEBug98yh{eBrQ1=;Xha*=~`w7F|)#W z-5L?cyrs@f<(G5q5&S>C|5w!;) v_lN{hDjZ>*Nfd62787lU?O$}y+2UX%13$M^WLje5LoRI1MQKzli$3}{gEkdp literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/ru/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/ru/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo new file mode 100644 index 0000000000000000000000000000000000000000..8c4c35008c8be3af5d4581e6e3141b0762e03073 GIT binary patch literal 3336 zcma)-U2GiH6~`}yw$%Lq(ogz9Z}_x}$Lu-*Sx%fZarlUWiIo^qA@yOrd+i;vJG0Ep z+A%`NAx%>hlh9TO2>}tJg7yKi32|afvU%X8k9S_GzO)bROX)*YUU=^B+?n-Pg2a_( z|8wu0d(Qv-&$)O1x#^}?6=O5cPkHXXL8%A8{;%-E_z$=h{1og5@3>K^o4|eG*T8Y` ztKcE92mCeoZLkJz0%t(6dkOq5_zEcd|5SYc3#gf2D!%^%ypQ>3;Mc+1F&4j@!8^fz z@F(DYQ2ZYTzXQGiehYjV{5kkK_%m?1z`ujC?{n~Wa1*38*bfS?G4K}92Y(Dc3*HJY zfXC6~P4F4!cR}iD@DwO{eF}=*{|da}W~F|_d=n@g5vML;G^Kp-&D#2$H6_| z3*axnPe7^bRq!G3E`kh$PlKY*tKbgsgJOOaLrwaP<=nx`P&SL-J9( zVx#AxmQGs5%d8)!I*oMI)J8H|k|2jR4?1xXskb82^#*3_sUR!m)u%E$ayJnt-CyQZTnf$*G~Fiq5G)C^3u z0O7SlM(xE&?K5*ZwWJosX{E)MG5^S_RhNcNg6E9x9Se5%IfJm(m^87Drt+NBSTtjF zGd43p)Jp1eq$Y9mj}kVm8K9}2FafVIcqG*@B*7{n6~CprjqlKN>Y(UWAn zKg4C?6JpAriDG0-oW?|oG(BAxb=Ra(tck1*6SmZ$n(wGk#*G;r z3h*BO6eSRUW+9iXUU zHgA|QmN;0s^Cq;ewfsK+ICp)s++@!A68>MX6g+; z)Z1A((s1uXL%*DE_(6T35;b#J!5;v9$sZx9w_yU=B@2b z%r#*nC3v7&_k(bomi9?ZI`ZViBi_)eosgO`vG;ITiK?8eVLdb%q&?&HR_xckN20iq z4C}Dzrpd^bZ90D)=?zCl%6g|RX+GamF6|f@)c4-&Ubl~ImDgTbE^RND^z+ZVb+IY+ zv8T+Q!M<%hzw#b6p;T5R8IMdgNcEP1(m=UK**|0_b#~02vy0ihU9^|8ll?k7k-ca; zIy-JVye#o7ip_c3wjawhThR7gc2rhhW@XV{aywtdl|7ps%YNgWwYBZov-vmM-l^={ z_6jlD+3)NU@!GkcD;S+8LQdcUK_Eep)7oAsIGx8)c7nB|*ezrKkuD}3{4LofW#1xD z8^FME$yv%mcb}tu%|ej}orea5|nm0fnTZ2Ia-D=ZI?C8VLwv#Oi@CK{ZdhKN9Qu% zX`iFlkx59C+^Q#7qCwsv*>Ppx%!Aqwb48^A&(n3MTm<@NWoNda?CaNIS!e`d5}-O# z07=2sYB}fCaXEFe(|I>a={ni*oI4e8X8=~3rl2uNgKRi7PIi<*XLy_~a;5fmQO=s^ zlvm6-kn>PvcR|!)Q$F30#2M@)$&)To5prXiVo{u`)v7OA*Q?6DlQVIwi$oVmeK|Wu z>XM+n_@y*>XZ;-@^yP@-OO8Gwa#KhP3a(QOjfz`?6vUqAa+m1JCUGHZvVG-bpCN)1 z*nM2RUFeWCw~PF@ktLT1?mM)49>ATFLgZ`Dqq{lYhZrizS(O{Go&A<@r=;T~s|9;e zq?T)N&Al?P+SnXH8jmC3RD_g^1`(;Il$|D(16Y(oE-A@q*`3JZ3Ur?3j(JZKmwT@; Zpx!I@H)g&6#iL+Xr6u~D+LR4C_- zorw)oE6&Lq%1Tx58EJE|nHep%c((M&6~_9k@lIUhPdu^q_-tT#s!Zelan)3Mrpn|j zcDXWBro%#ccD2lyq&1C36MQd*g*hZ`yxLcp^vY<$FEjN_jLdjkGWh~^SU2cl4mk7C zW*%K<>yVmKXP0ZpiMHKX<SNzMqnt z+#GIowl}x0oT^K@ac9G5k2{J+vl=SG$Zyo8RCrcRyY7Me-*}P| zMr0jsKIDj$6JErB=Lra_tXRu^3KF-QKolDs}rE<%V2V*!D>C&)LqxcsWU$%jKVCDsjW?SviMxYHBk#R&!8aTSfnp QeLHlnb>lY}T7{`aUKr!z{1tC%CL0mwvu495!ISFZF+7K0kl`bvfg2uZ~)`MqfRx`5+ zn=b%-fO6ns4j``NQZ5k}I~Pt!91(ElLm=^=I>aN7fAh>dFaKvW``4ul_XWoDn6F@d zkNFbjTaVxm<126#{2IIf{sKM*&cH{(U%?jm8~8N%2lxW`4;cOb1uuc;&Mo{dgU`Sw z@G0;rcm-SsUj{z~2@K$~;C*m}96x|P*cXvB#`VFdV+cMD-UBa#pMkNL8jN+n1f$Mx z!56{rz^L=*Q=WiN!2TUX8Sy9h8u&LD^_)j=?B@y?&!5DMx?=6;Fk|i*e-Sh4h_%mS z{y(DDIN}|}x^bYDhj)My%W=aoHMS;SpDqrh2^1{ltT`}Attr#08d>RbQh`gqDYk4F zi@r1&Yth#%-QqtwZ=Np4$_MKj(YKZ2JSIHLB6c!s#BFXCIsMqWkk!G95BZBgYy!fD zj`x+V{h6uuCDfEQXR*tr-Df%&LyfOw29eIz21O7r?u_jL85`7|%4AU15Pq4h8j(U1 z*^1p_JCg=(G-5)mHQW}dEeg#P#wf(5h6wvPXCc|ile_FZa`mXS%N6t{17D~-*{Tbl zq!!!5kCI(Tj!wyYklLeer`t(ZI!SjG%icSkH#={4I;{_+4@v5z@mk`7dNioVl5S|_ zJ*}5m%ecH=lv3$-X3KXGVTxK7oTMzv9;LOLC_kok!;RrR_SfrCZ9<&{*ESrM{yhq= zHP{*4T#8?5cUpaG0`53Tn+hW1m0hj0RA!B`v2>op#>eTcgDU_Ql@bIK_4N|!t#JR$hbr`S5o*$|h?P>DN+y(!*jM+#S=@KnY8rz%J- zQn(yy##x1ZJl1F#1R!ivZ1e2LQk_iCPQ(zE8%Yy952>Ze=SRpiiLY~hq~(6YG?^cH z*;uWm!{HrkoSY~sl*^TveS%L%lW9;+{0H}zZGiv) literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/uk/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/uk/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo new file mode 100644 index 0000000000000000000000000000000000000000..25a2c41182ef881a592c93c454d19bb1f570c168 GIT binary patch literal 3191 zcmai#TWl3u8ON83w|YTARJ`Eg1h5r$*}KJ13+2`WgkYh89?=*Rr+cq67t6O?>kAt=Xj)L?_w(&8%5# zegE(OeQWxs4eQ=kTwD2lh2ORhD772z`XGO}{sQ;FzrtN`%ZHR&2T#I}z<&5)cn-F} zAHYw+GTZ=1q0GAuH^N^)S^w+i`v*|-{Ji=8kMQd}{~dl5Zf3IVyA{3xcfl{i(@^#w zfuDvK;3whF;n(0D_*FRH%{sy2)@53(mZ+IMb zemslwQz-ddgR=fUlzD%E-+-GiN#Y%XGVh158(x4t@F_e5{{_DVyFQ`RQ5ZqVXAa7` ze?akRBgyTAyP-UPA7X>MBwz7N=1b04>gKSuySDIGypjBn=lV)|VCljV=e_tW*BAJS zXSA3iZS`4x(nDCTkn{4A{KUhhOX@DyrVOrrTbuU+TF6~eZ*@2_dLpdrxZb=O^MXVt zp)Q$h*%6sioU?ruM!J#LkHcl34YIHQ$t)5M3|Ds1r<5C(T4A zEiQ*qQmnJ2&l_K!wIoBw{!ffiUxdBwy;vGxNUCtgyI^&lCa4%jmG2r=Z1h7mT# z&SO6wQT<+w&lnivcu}lW{Y@Rs0R53a>M^GpmW(=Msv@-%js@C_qHt_YsOI~zvIMDl zMM@Zj^`N8^6sxnMAqzxyG9)^d{69-|ise_$`}4*7>TH=%L74bMelaUJl5uH54X|8? zH4|mSMK53)?VyPo2BuvNgu}xXad$-;%`vgHYJ$2tSN5C~%D6V8b3Xfw=`p{Qly&R& zHtY$1gj2Z_rQCP$8ppbI%NbLn0djruuwTj@sSn4wfso<;)44MgRVL-$#Kdmhk?-it z<@e?~I(4DYT`26#cjogg-=+$=fyfKuibvaa>+hM-vI%s5SPMt={&BC8>>Y29O*HBk z&7t9{=U3W`Vf6qDgWj6!bxz*Sy|d$RFtG&^vax+xqbBgUa6HZkCBN@|q1Fr<2@IXG<5-tL%PV_G0=iolX(s zvRz=Ksr0t8@3NJsV1cr~vh%FFw7j18ZoMpV8ebW3qHO~iYi6#FbW^fLvIJj|jGbPU zOr~JLE|SqxvP2ZJ7hW^0k-hN0HWOp!C0Y9jW2T8esq7uhoyO@YaR^f{V#}0HFOfQ? z@VmO?m9ke>cy;sjk;q|%%gB9)2=iQ|?=pH-@)q;%x|)(JkzSzb>58!U@rtOX z@EO)W6InV_zlhWqc*B^ow`m(`#wkKHJI$pyE4h#$O)6dOl+mr3RNJ5noTU_ieQsqf zO0`+TBfW&YhmwR;>K+0Xn}*CvmDVV~$F6hIBW#o9#X!S87TdGK^^E#T`^({Sj*H-D znYW?f)8 zgyR450#aUmP&kt0onE6_^RK>qeGkh27v~r!*gjc4!P41_q85{vzXC2J@{kO~{+nVW z;xJj+`zgJ?Wc_q{Mc#`|@=032UJA?fh3w3%`dqXl;r|w8-fbWs8u!i1K688@9>`%9 ZscSR%FBSR?MU~>a+R0g-cenDN?LSJEM_&K{ literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/zh_CN/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/locale/zh_CN/LC_MESSAGES/clipboard-history@alexsaveau.dev.mo new file mode 100644 index 0000000000000000000000000000000000000000..ee405d98ee2f5991e18be7d2bc33a55f635b4d28 GIT binary patch literal 2567 zcmZvcTWl0n7{`waUMh;>6)$)&5J5X-w?RS{5NNrCU||DQNQ^Pl-P7HH-I;Y}wxv9n zEn3o!VhX^T);p&(r=G^MRA=##$rqKOacgZ9ksJ`rQ^RsY}4v<2j()8EWF-}V2U z_V)#IIvLhtJTKr`at~uG!18jM9)AJJ?;mg>xBx|SupFeiYQXuR3O)zE4?YHd4E_vFPJ*xE+d@$k=W~$y z8u$2}#~;9FvHv4T^%OvgdlP&JockbSPl5A6@?Q$lemS@VTm@2J?|_Rz9VELBknFm^ zMPNTjb$km_zF)obn;_-=7bO3Aa3WTKWFG{{J_b@9E#7x8NO^}r^8X&BJU@Y?&)*q8_Ffq+lEm=}hYxJX8~1Ih4&F$3u4rlCy{L zOfQ=2)6*Xy&7BtYL5p;zUZ)qXP-)S;*+x_FCL_tMr1#RO>Nd9x9u_fS3$DguJQULs zb%tt&xn_&FwVrLX_Vaqfg=%Vgghw^YHq0hgW!OX}4{Yzy7CShbPRMA!q>HB$`R1|zmzG`Xc&QNy%DNx0Og2WG9N z%ixxFQ1E3nTGjHBfu4-l36mT3ZcnVnXb?PMiU!R{TCpayMtR*sN^3_2kYGE6hF23j zU~^Q626xPa3Pn{@4cWr9xTbT(KE|9U(0hDeBb*!-R}hNn_30&w{E2ogttF z#X}?|3wm{U34*59pu#3@gaz9r;#6wbXw}h z8r($aj<%?dY5jL&I-%(Q#rq?5j_r;jm2TKty%ur@j*_8L6RU+gHxj~hw?nE9Gh7Fb ztcETsSgjF>#7Ny++VJ*B*0|7tKLyo zv#nb#D641fsPuYaDx39?5k~C+ zzPe7c%Yw0_sm7Eoh8ed4Tu+oft#$r2+)*+TLoBvd;Z;1#o*?ga{BTk!?x&#B(3*k|4K+#lfRLg+LKvSIoDoXqtU&Na)n)5Q~6 zC!KQo(lULqFg)y>yzZRr&-dnJN7s#sQ_LA{$zK?kpB$E%%QD>#ALr{s@Gs=DOtuUZ zKOA5(bKDteBTK~c;D#*ZhU8@DT_UlWWb$x}%#AU5^|H*i%eIl(H`z8cW5s0eHRp6I zlh?m=+OHOmx>hWIWW-4|JEt>F_qBX>Jm2$?9PG+pIyW6L zb8+hWNjcc<92+TgWe^UP=g&6hd%IcwayK-UeFMc*+Btf`Z5H_v-K&8Wdph#xo1KAv zIgw!~1RBmHoEjZOHdNvqP3LoiGCS;9ILBL^zDrZ1*}}CkSYSf=6O(RL%qu3HqMRi= zQnI8Hb2|F+!)In>b$97sjw^-JHRASIO!eeXeZic;tn*p>)MOt7k(sZYPqP^GpQ%Gk xwzWF#XKpK9PNZbZl|rUZws$ggd`A;*T<7>$sm+UBGILhuCgu1!Olv94>ObgVg^mCK literal 0 HcmV?d00001 diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/metadata.json b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/metadata.json new file mode 100644 index 0000000..6b286fd --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/metadata.json @@ -0,0 +1,15 @@ +{ + "_generated": "Generated by SweetTooth, do not edit", + "description": "Gnome Clipboard History is a Gnome extension that saves items you've copied into an easily accessible, searchable history panel.", + "name": "Clipboard History", + "shell-version": [ + "40", + "41", + "42", + "43", + "44" + ], + "url": "https://github.com/SUPERCILEX/gnome-clipboard-history", + "uuid": "clipboard-history@alexsaveau.dev", + "version": 32 +} \ No newline at end of file diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/prefs.js b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/prefs.js new file mode 100644 index 0000000..a611a60 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/prefs.js @@ -0,0 +1,446 @@ +'use strict'; + +const { GObject, Gtk, Gio } = imports.gi; + +const ExtensionUtils = imports.misc.extensionUtils; +const Me = ExtensionUtils.getCurrentExtension(); + +const Gettext = imports.gettext; +const _ = Gettext.domain(Me.uuid).gettext; + +var Fields = { + HISTORY_SIZE: 'history-size', + WINDOW_WIDTH_PERCENTAGE: 'window-width-percentage', + CACHE_FILE_SIZE: 'cache-size', + CACHE_ONLY_FAVORITES: 'cache-only-favorites', + NOTIFY_ON_COPY: 'notify-on-copy', + CONFIRM_ON_CLEAR: 'confirm-clear', + MOVE_ITEM_FIRST: 'move-item-first', + ENABLE_KEYBINDING: 'enable-keybindings', + TOPBAR_PREVIEW_SIZE: 'topbar-preview-size', + TOPBAR_DISPLAY_MODE_ID: 'display-mode', + DISABLE_DOWN_ARROW: 'disable-down-arrow', + STRIP_TEXT: 'strip-text', + PRIVATE_MODE: 'private-mode', + PASTE_ON_SELECTION: 'paste-on-selection', + PROCESS_PRIMARY_SELECTION: 'process-primary-selection', +}; + +const SCHEMA_NAME = 'org.gnome.shell.extensions.clipboard-history'; +var Settings = ExtensionUtils.getSettings(SCHEMA_NAME); + +function init() { + ExtensionUtils.initTranslations(Me.uuid); +} + +class Prefs extends GObject.Object { + _init() { + this.main = new Gtk.Grid({ + margin_top: 10, + margin_bottom: 10, + margin_start: 10, + margin_end: 10, + row_spacing: 12, + column_spacing: 18, + column_homogeneous: false, + row_homogeneous: false, + }); + this.field_size = new Gtk.SpinButton({ + adjustment: new Gtk.Adjustment({ + lower: 1, + upper: 100_000, + step_increment: 100, + }), + }); + this.window_width_percentage = new Gtk.SpinButton({ + adjustment: new Gtk.Adjustment({ + lower: 0, + upper: 100, + step_increment: 5, + }), + }); + this.field_cache_size = new Gtk.SpinButton({ + adjustment: new Gtk.Adjustment({ + lower: 1, + upper: 1024, + step_increment: 5, + }), + }); + this.field_topbar_preview_size = new Gtk.SpinButton({ + adjustment: new Gtk.Adjustment({ + lower: 1, + upper: 100, + step_increment: 10, + }), + }); + this.field_display_mode = new Gtk.ComboBox({ + model: this._create_display_mode_options(), + }); + + let rendererText = new Gtk.CellRendererText(); + this.field_display_mode.pack_start(rendererText, false); + this.field_display_mode.add_attribute(rendererText, 'text', 0); + this.field_disable_down_arrow = new Gtk.Switch(); + this.field_cache_disable = new Gtk.Switch(); + this.field_notification_toggle = new Gtk.Switch(); + this.field_confirm_clear_toggle = new Gtk.Switch(); + this.field_strip_text = new Gtk.Switch(); + this.field_paste_on_selection = new Gtk.Switch(); + this.field_process_primary_selection = new Gtk.Switch(); + this.field_move_item_first = new Gtk.Switch(); + this.field_keybinding = createKeybindingWidget(Settings); + addKeybinding( + this.field_keybinding.model, + Settings, + 'toggle-menu', + _('Toggle the menu'), + ); + addKeybinding( + this.field_keybinding.model, + Settings, + 'clear-history', + _('Clear history'), + ); + addKeybinding( + this.field_keybinding.model, + Settings, + 'prev-entry', + _('Previous entry'), + ); + addKeybinding( + this.field_keybinding.model, + Settings, + 'next-entry', + _('Next entry'), + ); + addKeybinding( + this.field_keybinding.model, + Settings, + 'toggle-private-mode', + _('Toggle private mode'), + ); + + this.field_keybinding_activation = new Gtk.Switch(); + this.field_keybinding_activation.connect('notify::active', (widget) => { + this.field_keybinding.set_sensitive(widget.active); + }); + + let sizeLabel = new Gtk.Label({ + label: _('Max number of items'), + hexpand: true, + halign: Gtk.Align.START, + }); + let windowWidthPercentageLabel = new Gtk.Label({ + label: _('Window width (%)'), + hexpand: true, + halign: Gtk.Align.START, + }); + let cacheSizeLabel = new Gtk.Label({ + label: _('Max clipboard history size (MiB)'), + hexpand: true, + halign: Gtk.Align.START, + }); + let cacheDisableLabel = new Gtk.Label({ + label: _('Only save favorites to disk'), + hexpand: true, + halign: Gtk.Align.START, + }); + let notificationLabel = new Gtk.Label({ + label: _('Show notification on copy'), + hexpand: true, + halign: Gtk.Align.START, + }); + let confirmClearLabel = new Gtk.Label({ + label: _('Ask for confirmation before clearing history'), + hexpand: true, + halign: Gtk.Align.START, + }); + let moveFirstLabel = new Gtk.Label({ + label: _('Move previously copied items to the top'), + hexpand: true, + halign: Gtk.Align.START, + }); + let keybindingLabel = new Gtk.Label({ + label: _('Keyboard shortcuts'), + hexpand: true, + halign: Gtk.Align.START, + }); + let topbarPreviewLabel = new Gtk.Label({ + label: _('Number of characters in status bar'), + hexpand: true, + halign: Gtk.Align.START, + }); + let displayModeLabel = new Gtk.Label({ + label: _('What to show in status bar'), + hexpand: true, + halign: Gtk.Align.START, + }); + let disableDownArrowLabel = new Gtk.Label({ + label: _('Remove down arrow in status bar'), + hexpand: true, + halign: Gtk.Align.START, + }); + let stripTextLabel = new Gtk.Label({ + label: _('Remove whitespace around text'), + hexpand: true, + halign: Gtk.Align.START, + }); + let pasteOnSelectionLabel = new Gtk.Label({ + label: _('Paste on selection'), + hexpand: true, + halign: Gtk.Align.START, + }); + let processPrimarySelection = new Gtk.Label({ + label: _('Save selected text to history'), + hexpand: true, + halign: Gtk.Align.START, + }); + + const addRow = ((main) => { + let row = 0; + return (label, input) => { + let inputWidget = input; + + if (input instanceof Gtk.Switch) { + inputWidget = new Gtk.Box({ + orientation: Gtk.Orientation.HORIZONTAL, + }); + inputWidget.append(input); + } + + if (label) { + main.attach(label, 0, row, 1, 1); + main.attach(inputWidget, 1, row, 1, 1); + } else { + main.attach(inputWidget, 0, row, 2, 1); + } + + row++; + }; + })(this.main); + + addRow(windowWidthPercentageLabel, this.window_width_percentage); + addRow(sizeLabel, this.field_size); + addRow(cacheSizeLabel, this.field_cache_size); + addRow(cacheDisableLabel, this.field_cache_disable); + addRow(moveFirstLabel, this.field_move_item_first); + addRow(stripTextLabel, this.field_strip_text); + addRow(pasteOnSelectionLabel, this.field_paste_on_selection); + addRow(processPrimarySelection, this.field_process_primary_selection); + addRow(displayModeLabel, this.field_display_mode); + addRow(disableDownArrowLabel, this.field_disable_down_arrow); + addRow(topbarPreviewLabel, this.field_topbar_preview_size); + addRow(notificationLabel, this.field_notification_toggle); + addRow(confirmClearLabel, this.field_confirm_clear_toggle); + addRow(keybindingLabel, this.field_keybinding_activation); + addRow(null, this.field_keybinding); + + Settings.bind( + Fields.HISTORY_SIZE, + this.field_size, + 'value', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.WINDOW_WIDTH_PERCENTAGE, + this.window_width_percentage, + 'value', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.CACHE_FILE_SIZE, + this.field_cache_size, + 'value', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.CACHE_ONLY_FAVORITES, + this.field_cache_disable, + 'active', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.NOTIFY_ON_COPY, + this.field_notification_toggle, + 'active', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.CONFIRM_ON_CLEAR, + this.field_confirm_clear_toggle, + 'active', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.MOVE_ITEM_FIRST, + this.field_move_item_first, + 'active', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.TOPBAR_DISPLAY_MODE_ID, + this.field_display_mode, + 'active', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.DISABLE_DOWN_ARROW, + this.field_disable_down_arrow, + 'active', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.TOPBAR_PREVIEW_SIZE, + this.field_topbar_preview_size, + 'value', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.STRIP_TEXT, + this.field_strip_text, + 'active', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.PASTE_ON_SELECTION, + this.field_paste_on_selection, + 'active', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.PROCESS_PRIMARY_SELECTION, + this.field_process_primary_selection, + 'active', + Gio.SettingsBindFlags.DEFAULT, + ); + Settings.bind( + Fields.ENABLE_KEYBINDING, + this.field_keybinding_activation, + 'active', + Gio.SettingsBindFlags.DEFAULT, + ); + } + + _create_display_mode_options() { + let options = [ + { name: _('Icon') }, + { name: _('Clipboard contents') }, + { name: _('Both') }, + { name: _('Neither') }, + ]; + let liststore = new Gtk.ListStore(); + liststore.set_column_types([GObject.TYPE_STRING]); + for (let i = 0; i < options.length; i++) { + let option = options[i]; + let iter = liststore.append(); + liststore.set(iter, [0], [option.name]); + } + return liststore; + } +} + +const PrefsObj = new GObject.registerClass(Prefs); + +function buildPrefsWidget() { + let widget = new PrefsObj(); + return widget.main; +} + +//binding widgets +////////////////////////////////// +const COLUMN_ID = 0; +const COLUMN_DESCRIPTION = 1; +const COLUMN_KEY = 2; +const COLUMN_MODS = 3; + +function addKeybinding(model, settings, id, description) { + // Get the current accelerator. + let accelerator = settings.get_strv(id)[0]; + let key, mods; + if (accelerator == null) { + [key, mods] = [0, 0]; + } else { + [, key, mods] = Gtk.accelerator_parse(settings.get_strv(id)[0]); + } + + // Add a row for the keybinding. + let row = model.insert(100); // Erm... + model.set( + row, + [COLUMN_ID, COLUMN_DESCRIPTION, COLUMN_KEY, COLUMN_MODS], + [id, description, key, mods], + ); +} + +function createKeybindingWidget(Settings) { + let model = new Gtk.ListStore(); + + model.set_column_types([ + GObject.TYPE_STRING, // COLUMN_ID + GObject.TYPE_STRING, // COLUMN_DESCRIPTION + GObject.TYPE_INT, // COLUMN_KEY + GObject.TYPE_INT, + ]); // COLUMN_MODS + + let treeView = new Gtk.TreeView(); + treeView.model = model; + treeView.headers_visible = false; + + let column, renderer; + + // Description column. + renderer = new Gtk.CellRendererText(); + + column = new Gtk.TreeViewColumn(); + column.expand = true; + column.pack_start(renderer, true); + column.add_attribute(renderer, 'text', COLUMN_DESCRIPTION); + + treeView.append_column(column); + + // Key binding column. + renderer = new Gtk.CellRendererAccel(); + renderer.accel_mode = Gtk.CellRendererAccelMode.GTK; + renderer.editable = true; + + renderer.connect( + 'accel-edited', + function (renderer, path, key, mods, hwCode) { + let [ok, iter] = model.get_iter_from_string(path); + if (!ok) { + return; + } + + // Update the UI. + model.set(iter, [COLUMN_KEY, COLUMN_MODS], [key, mods]); + + // Update the stored setting. + let id = model.get_value(iter, COLUMN_ID); + let accelString = Gtk.accelerator_name(key, mods); + Settings.set_strv(id, [accelString]); + }, + ); + + renderer.connect('accel-cleared', function (renderer, path) { + let [ok, iter] = model.get_iter_from_string(path); + if (!ok) { + return; + } + + // Update the UI. + model.set(iter, [COLUMN_KEY, COLUMN_MODS], [0, 0]); + + // Update the stored setting. + let id = model.get_value(iter, COLUMN_ID); + Settings.set_strv(id, []); + }); + + column = new Gtk.TreeViewColumn(); + column.pack_end(renderer, false); + column.add_attribute(renderer, 'accel-key', COLUMN_KEY); + column.add_attribute(renderer, 'accel-mods', COLUMN_MODS); + + treeView.append_column(column); + + return treeView; +} diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/schemas/gschemas.compiled b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/schemas/gschemas.compiled new file mode 100644 index 0000000000000000000000000000000000000000..b65ab2fbf292e6e3a180976063bf16fed7803683 GIT binary patch literal 1520 zcmZWp&ui2`7@exCwYC0g)p`&V6tdv#f}WJ36%{>*2!)~tk=g8YGjx*)NxJJQt@r~$ z@K8jdH$4a*ya*oDgWyH5)I(AH2UJA-0SbzONPREKYSqBo_x9zR$;>z3dlqZS4_YdJiB_??Bo;vAjer9js_bVDx(Rsbu3Rlw?b z=!NbBusk6PauMUW-W8%DIx%?6fM{1dn|I(D5tHRtJEgmnQ=o{yfTPu&OK0ZU-dptFxYbuauu@Gvm9^UhZK z)T`lpU?14K``tJC)SUk$cpPY)czK9EHRC72*MN2{P_q`Mz;A&&y+f}UPtACN`X~T1 z=RRMhPtAPxgEs(=#wWU2Q`80c4)_=_?QgM+r|yRDfhU01m$y6gskyHy@Lk~R;b)KO zQ?G+R3uc}AwxOj-v@b_Y6lbO1A)HDvu!$LINgGJlhAc}y@WaTuI*w%+8DB*$8SA=s z6BKj)-n9W{@}*nXDoO{5bUs(Po|dsWr9~AsU$M3Y@*o`Jv>aoK#bSO7vbeW6%XZw2 zi-`Uc7e=}vb&#YNMmQ=iR!tn%RZIG|syT1|^g$G$c2R}#)pu{-cHW6V&pJW#`0mo7asnF5N~cREftwLX^?a%4tI@rwy(Ar=gYq zYiMO5(Ad&k`8pWm_`mZsoaZUAVFh32$r|0vDuB`1{@ZoH+L?EbO>Dq6Wz$p>Pa^p) TYC_fW0@#Gm_WA!aj + + + + 1000 +

The maximum number of items to remember + + + + + 0 + What to display in top bar + + + + + true + Remove down arrow in top bar + + + + 33 + Window width (%) + + The width of the clipboard panel as a percentage of screen width. + + + + + + 10 + Number of visible characters in top bar + + The number of characters to display for the current clipboard item in the top bar. + + + + + + 100 + The maximum clipboard history size (MiB) + + Note that this is the maximum number of clipboard item bytes to store, not the maximum file + size on disk. The clipboard history on disk may be larger than this limit due to storage + inefficiencies. + + + + + + false + Only save favorites to disk + + Non-favorite items will still be saved, but only in-memory. Restarting the Gnome Shell will + result in the loss of those items. + + + + + false + Show a notification on copy + + If true, a notification is shown when content is copied to clipboard with an undo button. + + + + + true + Show confirmation dialog on Clear History + + If true, a confirmation dialog is shown when attempting to Clear History. + + + + + false + Remove whitespace around copied plaintext items + + + + true + Paste selected items into the previously active window + + + + false + Save the currently selected text to the clipboard history + + If true, both the contents from the "CLIPBOARD" clipboard and the "PRIMARY" clipboard are added to the history. + For more info, see https://wiki.archlinux.org/title/clipboard#Selections. + + + + + true + Move previously copied items to the top of the list + + + + false + Enable private mode + + If true, copied items are not saved in the clipboard history (be that in memory or on disk). + + + + + true + Enable keyboard shortcuts + + + + Shortcut to clear history + + + + Shortcut to cycle to the previous clipboard entry + + + + + + Shortcut to cycle to the next clipboard entry + + + V']]]> + Shortcut to open the clipboard history + + + P']]]> + Toggle private mode + + + diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/settingsFields.js b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/settingsFields.js new file mode 100644 index 0000000..3ea6fb4 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/settingsFields.js @@ -0,0 +1,18 @@ +const SettingsFields = { + HISTORY_SIZE: 'history-size', + WINDOW_WIDTH_PERCENTAGE: 'window-width-percentage', + CACHE_FILE_SIZE: 'cache-size', + CACHE_ONLY_FAVORITES: 'cache-only-favorites', + NOTIFY_ON_COPY: 'notify-on-copy', + CONFIRM_ON_CLEAR: 'confirm-clear', + MOVE_ITEM_FIRST: 'move-item-first', + ENABLE_KEYBINDING: 'enable-keybindings', + TOPBAR_PREVIEW_SIZE: 'topbar-preview-size', + TOPBAR_DISPLAY_MODE_ID: 'display-mode', + DISABLE_DOWN_ARROW: 'disable-down-arrow', + STRIP_TEXT: 'strip-text', + PRIVATE_MODE: 'private-mode', + PASTE_ON_SELECTION: 'paste-on-selection', + PROCESS_PRIMARY_SELECTION: 'process-primary-selection', +}; +export default SettingsFields; diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/store.js b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/store.js new file mode 100644 index 0000000..5fdb550 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/store.js @@ -0,0 +1,511 @@ +'use strict'; + +const { GLib, Gio } = imports.gi; + +const ExtensionUtils = imports.misc.extensionUtils; +const Me = ExtensionUtils.getCurrentExtension(); +const DS = Me.imports.dataStructures; + +const CACHE_DIR = GLib.build_filenamev([GLib.get_user_cache_dir(), Me.uuid]); +const OLD_REGISTRY_FILE = GLib.build_filenamev([ + GLib.get_user_cache_dir(), + 'clipboard-indicator@tudmotu.com', + 'registry.txt', +]); + +/** + * Stores our compacting log implementation. Here are its key ideas: + * - We only ever append to the log. + * - This means there will be operations that cancel each other out. These are wasted/useless ops + * that must be occasionally pruned. MAX_WASTED_OPS limits the number of useless ops. + * - The available operations are listed in the OP_TYPE_* constants. + * - An add op never moves (until compaction), allowing us to derive globally unique entry IDs based + * on the order in which these add ops are discovered. + */ +const DATABASE_FILE = GLib.build_filenamev([CACHE_DIR, 'database.log']); +const BYTE_ORDER = Gio.DataStreamByteOrder.LITTLE_ENDIAN; + +// Don't use zero b/c DataInputStream uses 0 as its error value +const OP_TYPE_SAVE_TEXT = 1; +const OP_TYPE_DELETE_TEXT = 2; +const OP_TYPE_FAVORITE_ITEM = 3; +const OP_TYPE_UNFAVORITE_ITEM = 4; +const OP_TYPE_MOVE_ITEM_TO_END = 5; + +const MAX_WASTED_OPS = 500; +let uselessOpCount; + +let opQueue = new DS.LinkedList(); +let opInProgress = false; +let writeStream; + +function init() { + if (GLib.mkdir_with_parents(CACHE_DIR, 0o775) !== 0) { + log( + Me.uuid, + "Failed to create cache dir, extension likely won't work", + CACHE_DIR, + ); + } +} + +function destroy() { + _pushToOpQueue((resolve) => { + if (writeStream) { + writeStream.close_async(0, null, (src, res) => { + src.close_finish(res); + resolve(); + }); + writeStream = undefined; + } else { + resolve(); + } + }); +} + +function buildClipboardStateFromLog(callback) { + if (typeof callback !== 'function') { + throw TypeError('`callback` must be a function'); + } + uselessOpCount = 0; + + Gio.File.new_for_path(DATABASE_FILE).read_async(0, null, (src, res) => { + try { + _parseLog(src.read_finish(res), callback); + } catch (e) { + if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) { + _readAndConsumeOldFormat(callback); + } else { + throw e; + } + } + }); +} + +function _parseLog(stream, callback) { + stream = Gio.DataInputStream.new(stream); + stream.set_byte_order(BYTE_ORDER); + + const state = { + entries: new DS.LinkedList(), + favorites: new DS.LinkedList(), + nextId: 1, + }; + _consumeStream(stream, state, callback); +} + +function _consumeStream(stream, state, callback) { + const finish = () => { + callback(state.entries, state.favorites, state.nextId); + }; + const forceFill = (minBytes, fillCallback) => { + stream.fill_async(/*count=*/ -1, 0, null, (src, res) => { + if (src.fill_finish(res) < minBytes) { + finish(); + } else { + fillCallback(); + } + }); + }; + + let parseAvailableAware; + + function loop() { + if (stream.get_available() === 0) { + forceFill(1, loop); + return; + } + + const opType = stream.read_byte(null); + if (opType === OP_TYPE_SAVE_TEXT) { + stream.read_upto_async( + /*stop_chars=*/ '\0', + /*stop_chars_len=*/ 1, + 0, + null, + (src, res) => { + const [text] = src.read_upto_finish(res); + src.read_byte(null); + + const node = new DS.LLNode(); + node.diskId = node.id = state.nextId++; + node.type = DS.TYPE_TEXT; + node.text = text || ''; + node.favorite = false; + state.entries.append(node); + + loop(); + }, + ); + } else if (opType === OP_TYPE_DELETE_TEXT) { + uselessOpCount += 2; + parseAvailableAware(4, () => { + const id = stream.read_uint32(null); + (state.entries.findById(id) || state.favorites.findById(id)).detach(); + }); + } else if (opType === OP_TYPE_FAVORITE_ITEM) { + parseAvailableAware(4, () => { + const id = stream.read_uint32(null); + const entry = state.entries.findById(id); + + entry.favorite = true; + state.favorites.append(entry); + }); + } else if (opType === OP_TYPE_UNFAVORITE_ITEM) { + uselessOpCount += 2; + parseAvailableAware(4, () => { + const id = stream.read_uint32(null); + const entry = state.favorites.findById(id); + + entry.favorite = false; + state.entries.append(entry); + }); + } else if (opType === OP_TYPE_MOVE_ITEM_TO_END) { + uselessOpCount++; + parseAvailableAware(4, () => { + const id = stream.read_uint32(null); + const entry = + state.entries.findById(id) || state.favorites.findById(id); + + if (entry.favorite) { + state.favorites.append(entry); + } else { + state.entries.append(entry); + } + }); + } else { + log(Me.uuid, 'Unknown op type, aborting load.', opType); + finish(); + } + } + + parseAvailableAware = (minBytes, parse) => { + const safeParse = (cont) => { + try { + parse(); + cont(); + } catch (e) { + log(Me.uuid, 'Parsing error'); + logError(e); + + const entries = new DS.LinkedList(); + let nextId = 1; + const addEntry = (text) => { + const node = new DS.LLNode(); + node.id = nextId++; + node.type = DS.TYPE_TEXT; + node.text = text; + node.favorite = false; + entries.prepend(node); + }; + + addEntry('Your clipboard data has been corrupted and was moved to:'); + addEntry('~/.cache/clipboard-history@alexsaveau.dev/corrupted.log'); + addEntry('Please file a bug report at:'); + addEntry( + 'https://github.com/SUPERCILEX/gnome-clipboard-history/issues/new?assignees=&labels=bug&template=1-bug.md', + ); + + try { + if ( + !Gio.File.new_for_path(DATABASE_FILE).move( + Gio.File.new_for_path( + GLib.build_filenamev([CACHE_DIR, 'corrupted.log']), + ), + Gio.FileCopyFlags.OVERWRITE, + null, + null, + ) + ) { + log(Me.uuid, 'Failed to move database file'); + } + } catch (e) { + log(Me.uuid, 'Crash moving database file'); + logError(e); + } + callback(entries, new DS.LinkedList(), nextId, 1); + } + }; + + if (stream.get_available() < minBytes) { + forceFill(minBytes, () => { + safeParse(loop); + }); + } else { + safeParse(loop); + } + }; + + loop(); +} + +function _readAndConsumeOldFormat(callback) { + Gio.File.new_for_path(OLD_REGISTRY_FILE).load_contents_async( + null, + (src, res) => { + const entries = new DS.LinkedList(); + const favorites = new DS.LinkedList(); + let id = 1; + + let contents; + try { + [, contents] = src.load_contents_finish(res); + } catch (e) { + if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) { + callback(entries, favorites, id); + return; + } else { + throw e; + } + } + + let registry = []; + try { + registry = JSON.parse(imports.byteArray.toString(contents)); + } catch (e) { + logError(e); + } + + for (const entry of registry) { + const node = new DS.LLNode(); + + node.diskId = node.id = id; + node.type = DS.TYPE_TEXT; + if (typeof entry === 'string') { + node.text = entry; + node.favorite = false; + + entries.append(node); + } else { + node.text = entry.contents; + node.favorite = entry.favorite; + + favorites.append(node); + } + + id++; + } + + resetDatabase(() => entries.toArray().concat(favorites.toArray())); + Gio.File.new_for_path(OLD_REGISTRY_FILE).trash_async( + 0, + null, + (src, res) => { + src.trash_finish(res); + }, + ); + + callback(entries, favorites, id); + }, + ); +} + +function maybePerformLogCompaction(currentStateBuilder) { + if (uselessOpCount >= MAX_WASTED_OPS) { + resetDatabase(currentStateBuilder); + } +} + +function resetDatabase(currentStateBuilder) { + uselessOpCount = 0; + + const state = currentStateBuilder(); + _pushToOpQueue((resolve) => { + // Sigh, can't use truncate because it doesn't have an async variant. Instead, nuke the stream + // and let the next append re-create it. Note that we can't use this stream because it tries to + // apply our operations atomically and therefore writes to a temporary file instead of the one + // we asked for. + writeStream = undefined; + + const priority = -10; + Gio.File.new_for_path(DATABASE_FILE).replace_async( + /*etag=*/ null, + /*make_backup=*/ false, + Gio.FileCreateFlags.PRIVATE, + priority, + null, + (src, res) => { + const stream = _intoDataStream(src.replace_finish(res)); + const finish = () => { + stream.close_async(priority, null, (src, res) => { + src.close_finish(res); + resolve(); + }); + }; + + if (state.length === 0) { + finish(); + return; + } + + let i = 0; + _writeToStream(stream, priority, finish, (dataStream) => { + do { + const entry = state[i]; + + if (entry.type === DS.TYPE_TEXT) { + _storeTextOp(entry.text)(dataStream); + } else { + throw new TypeError('Unknown type: ' + entry.type); + } + if (entry.favorite) { + _updateFavoriteStatusOp(entry.diskId, true)(dataStream); + } + + i++; + } while (i % 1000 !== 0 && i < state.length); + + // Flush the buffer every 1000 entries + return i >= state.length; + }); + }, + ); + }); +} + +function storeTextEntry(text) { + _appendBytesToLog(_storeTextOp(text), -5); +} + +function _storeTextOp(text) { + return (dataStream) => { + dataStream.put_byte(OP_TYPE_SAVE_TEXT, null); + dataStream.put_string(text, null); + dataStream.put_byte(0, null); // NUL terminator + return true; + }; +} + +function deleteTextEntry(id, isFavorite) { + _appendBytesToLog(_deleteTextOp(id), 5); + uselessOpCount += 2; + if (isFavorite) { + uselessOpCount++; + } +} + +function _deleteTextOp(id) { + return (dataStream) => { + dataStream.put_byte(OP_TYPE_DELETE_TEXT, null); + dataStream.put_uint32(id, null); + return true; + }; +} + +function updateFavoriteStatus(id, favorite) { + _appendBytesToLog(_updateFavoriteStatusOp(id, favorite)); + + if (!favorite) { + uselessOpCount += 2; + } +} + +function _updateFavoriteStatusOp(id, favorite) { + return (dataStream) => { + dataStream.put_byte( + favorite ? OP_TYPE_FAVORITE_ITEM : OP_TYPE_UNFAVORITE_ITEM, + null, + ); + dataStream.put_uint32(id, null); + return true; + }; +} + +function moveEntryToEnd(id) { + _appendBytesToLog(_moveToEndOp(id)); + uselessOpCount++; +} + +function _moveToEndOp(id) { + return (dataStream) => { + dataStream.put_byte(OP_TYPE_MOVE_ITEM_TO_END, null); + dataStream.put_uint32(id, null); + return true; + }; +} + +function _appendBytesToLog(callback, priority) { + priority = priority || 0; + _pushToOpQueue((resolve) => { + const runUnsafe = () => { + _writeToStream(writeStream, priority, resolve, callback); + }; + + if (writeStream === undefined) { + Gio.File.new_for_path(DATABASE_FILE).append_to_async( + Gio.FileCreateFlags.PRIVATE, + priority, + null, + (src, res) => { + writeStream = _intoDataStream(src.append_to_finish(res)); + runUnsafe(); + }, + ); + } else { + runUnsafe(); + } + }); +} + +function _writeToStream(stream, priority, resolve, callback) { + _writeCallbackBytesAsyncHack(callback, stream, priority, () => { + stream.flush_async(priority, null, (src, res) => { + src.flush_finish(res); + resolve(); + }); + }); +} + +/** + * This garbage code is here to keep disk writes off the main thread. DataOutputStream doesn't have + * async method variants, so we write to a memory buffer and then flush it asynchronously. We're + * basically trying to balance memory allocations with disk writes. + */ +function _writeCallbackBytesAsyncHack( + dataCallback, + stream, + priority, + callback, +) { + if (dataCallback(stream)) { + callback(); + } else { + stream.flush_async(priority, null, (src, res) => { + src.flush_finish(res); + _writeCallbackBytesAsyncHack(dataCallback, stream, priority, callback); + }); + } +} + +function _intoDataStream(stream) { + const bufStream = Gio.BufferedOutputStream.new(stream); + bufStream.set_auto_grow(true); // Blocks flushing, needed for hack + const ioStream = Gio.DataOutputStream.new(bufStream); + ioStream.set_byte_order(BYTE_ORDER); + return ioStream; +} + +function _pushToOpQueue(op) { + const consumeOp = () => { + const resolve = () => { + opInProgress = false; + + const next = opQueue.head; + if (next) { + next.detach(); + next.op(); + } + }; + + opInProgress = true; + op(resolve); + }; + + if (opInProgress) { + const node = new DS.LLNode(); + node.op = consumeOp; + opQueue.append(node); + } else { + consumeOp(); + } +} diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/stylesheet.css b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/stylesheet.css new file mode 100644 index 0000000..824aee7 --- /dev/null +++ b/zorin/.local/share/gnome-shell/extensions/clipboard-history@alexsaveau.dev/stylesheet.css @@ -0,0 +1,34 @@ +.clipboard-indicator-icon.private-mode { + color: rgba(255, 255, 255, 0.3); +} + +.ci-notification-label { + font-weight: bold; + color: #ffffff; + background-color: rgba(10, 10, 10, 0.7); + border-radius: 6px; + font-size: 2em; + padding: 0.5em; + width: 400px; +} + +.popup-menu-item .ci-action-btn StIcon { + icon-size: 16px; +} + +.ci-history-menu-section { + max-height: 450px; +} + +.ci-history-search-section { + padding-top: 0; +} + +.ci-history-search-section .popup-menu-ornament, +.ci-history-actions-section .popup-menu-ornament { + width: auto; +} + +.ci-history-search-entry { + width: 5em; +} diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/README.rst b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/README.rst deleted file mode 100644 index 9f1a6d6..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/README.rst +++ /dev/null @@ -1,22 +0,0 @@ -============================ -Clipboard Indicator -============================ - -Clipboard Manager extension for Gnome-Shell - Adds a clipboard indicator to the top panel, and caches clipboard history. - -Extension page on e.g.o: -https://extensions.gnome.org/extension/779/clipboard-indicator/ - -Installation ----------------- - -Installation via git is performed by cloning the repo into your local gnome-shell extensions directory (usually ~/.local/share/gnome-shell/extensions/):: - - $ git clone https://github.com/Tudmotu/gnome-shell-extension-clipboard-indicator.git /clipboard-indicator@tudmotu.com - -After cloning the repo, the extension is practically installed yet disabled. In -order to enable it, you need to use gnome-tweak-tool - find the extension, -titled 'Clipboard Indicator', in the 'Extensions' screen and turn it 'On'. -You may need to restart the shell (Alt+F2 and insert 'r' in the prompt) for the -extension to be listed there. - diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/extension.js b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/extension.js deleted file mode 100644 index b6d05c9..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/extension.js +++ /dev/null @@ -1,883 +0,0 @@ -const Clutter = imports.gi.Clutter; -const Config = imports.misc.config; -const Gio = imports.gi.Gio; -const Lang = imports.lang; -const Mainloop = imports.mainloop; -const Meta = imports.gi.Meta; -const Shell = imports.gi.Shell; -const St = imports.gi.St; -const PolicyType = imports.gi.Gtk.PolicyType; -const Util = imports.misc.util; -const MessageTray = imports.ui.messageTray; - -const Main = imports.ui.main; -const PanelMenu = imports.ui.panelMenu; -const PopupMenu = imports.ui.popupMenu; -const CheckBox = imports.ui.checkBox.CheckBox; - -const Gettext = imports.gettext; -const _ = Gettext.domain('clipboard-indicator').gettext; - -const Clipboard = St.Clipboard.get_default(); -const CLIPBOARD_TYPE = St.ClipboardType.CLIPBOARD; - -const SETTING_KEY_CLEAR_HISTORY = "clear-history"; -const SETTING_KEY_PREV_ENTRY = "prev-entry"; -const SETTING_KEY_NEXT_ENTRY = "next-entry"; -const SETTING_KEY_TOGGLE_MENU = "toggle-menu"; -const INDICATOR_ICON = 'edit-paste-symbolic'; - -const ExtensionUtils = imports.misc.extensionUtils; -const Me = ExtensionUtils.getCurrentExtension(); -const Utils = Me.imports.utils; -const ConfirmDialog = Me.imports.confirmDialog; -const Prefs = Me.imports.prefs; -const prettyPrint = Utils.prettyPrint; -const writeRegistry = Utils.writeRegistry; -const readRegistry = Utils.readRegistry; - -let TIMEOUT_MS = 1000; -let MAX_REGISTRY_LENGTH = 15; -let MAX_ENTRY_LENGTH = 50; -let CACHE_ONLY_FAVORITE = false; -let DELETE_ENABLED = true; -let MOVE_ITEM_FIRST = false; -let ENABLE_KEYBINDING = true; -let PRIVATEMODE = false; -let NOTIFY_ON_COPY = true; -let MAX_TOPBAR_LENGTH = 15; -let TOPBAR_DISPLAY_MODE = 1; //0 - only icon, 1 - only clipbord content, 2 - both -let DISABLE_DOWN_ARROW = false; -let STRIP_TEXT = false; - -const ClipboardIndicator = Lang.Class({ - Name: 'ClipboardIndicator', - Extends: PanelMenu.Button, - - _settingsChangedId: null, - _clipboardTimeoutId: null, - _selectionOwnerChangedId: null, - _historyLabelTimeoutId: null, - _historyLabel: null, - _buttonText: null, - _disableDownArrow: null, - - destroy: function () { - this._disconnectSettings(); - this._unbindShortcuts(); - this._clearClipboardTimeout(); - this._disconnectSelectionListener(); - this._clearLabelTimeout(); - this._clearDelayedSelectionTimeout(); - - // Call parent - this.parent(); - }, - - _init: function() { - this.parent(0.0, "ClipboardIndicator"); - this._shortcutsBindingIds = []; - this.clipItemsRadioGroup = []; - - let hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box clipboard-indicator-hbox' }); - this.icon = new St.Icon({ icon_name: INDICATOR_ICON, - style_class: 'system-status-icon clipboard-indicator-icon' }); - hbox.add_child(this.icon); - this._buttonText = new St.Label({ - text: _('Text will be here'), - y_align: Clutter.ActorAlign.CENTER - }); - hbox.add_child(this._buttonText); - this._downArrow = PopupMenu.arrowIcon(St.Side.BOTTOM); - hbox.add(this._downArrow); - this.actor.add_child(hbox); - - this._createHistoryLabel(); - this._loadSettings(); - this._buildMenu(); - - this._updateTopbarLayout(); - - this._setupListener(); - }, - _updateButtonText: function(content){ - if (!content || PRIVATEMODE){ - this._buttonText.set_text("...") - } else { - this._buttonText.set_text(this._truncate(content, MAX_TOPBAR_LENGTH)); - } - }, - - _buildMenu: function () { - let that = this; - this._getCache(function (clipHistory) { - let lastIdx = clipHistory.length - 1; - let clipItemsArr = that.clipItemsRadioGroup; - - /* This create the search entry, which is add to a menuItem. - The searchEntry is connected to the function for research. - The menu itself is connected to some shitty hack in order to - grab the focus of the keyboard. */ - that._entryItem = new PopupMenu.PopupBaseMenuItem({ - reactive: false, - can_focus: false - }); - that.searchEntry = new St.Entry({ - name: 'searchEntry', - style_class: 'search-entry', - can_focus: true, - hint_text: _('Type here to search...'), - track_hover: true, - x_expand: true, - y_expand: true - }); - - that.searchEntry.get_clutter_text().connect( - 'text-changed', - Lang.bind(that, that._onSearchTextChanged) - ); - - that._entryItem.add(that.searchEntry); - - that.menu.addMenuItem(that._entryItem); - - that.menu.connect('open-state-changed', Lang.bind(this, function(self, open){ - let a = Mainloop.timeout_add(50, Lang.bind(this, function() { - if (open) { - that.searchEntry.set_text(''); - global.stage.set_key_focus(that.searchEntry); - } - Mainloop.source_remove(a); - })); - })); - - // Create menu sections for items - // Favorites - that.favoritesSection = new PopupMenu.PopupMenuSection(); - - that.scrollViewFavoritesMenuSection = new PopupMenu.PopupMenuSection(); - let favoritesScrollView = new St.ScrollView({ - style_class: 'ci-history-menu-section', - overlay_scrollbars: true - }); - favoritesScrollView.add_actor(that.favoritesSection.actor); - - that.scrollViewFavoritesMenuSection.actor.add_actor(favoritesScrollView); - that.menu.addMenuItem(that.scrollViewFavoritesMenuSection); - that.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); - - // History - that.historySection = new PopupMenu.PopupMenuSection(); - - that.scrollViewMenuSection = new PopupMenu.PopupMenuSection(); - let historyScrollView = new St.ScrollView({ - style_class: 'ci-history-menu-section', - overlay_scrollbars: true - }); - historyScrollView.add_actor(that.historySection.actor); - - that.scrollViewMenuSection.actor.add_actor(historyScrollView); - - that.menu.addMenuItem(that.scrollViewMenuSection); - - // Add cached items - clipHistory.forEach(function (buffer) { - if (typeof buffer === 'string') { - // Old cache format - that._addEntry(buffer); - } else { - that._addEntry(buffer["contents"], buffer["favorite"]); - } - }); - - // Add separator - that.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); - - // Private mode switch - that.privateModeMenuItem = new PopupMenu.PopupSwitchMenuItem( - _("Private mode"), PRIVATEMODE, { reactive: true }); - that.privateModeMenuItem.connect('toggled', - Lang.bind(that, that._onPrivateModeSwitch)); - that.menu.addMenuItem(that.privateModeMenuItem); - that._onPrivateModeSwitch(); - - // Add 'Clear' button which removes all items from cache - let clearMenuItem = new PopupMenu.PopupMenuItem(_('Clear history')); - that.menu.addMenuItem(clearMenuItem); - clearMenuItem.connect('activate', Lang.bind(that, that._removeAll)); - - // Add 'Settings' menu item to open settings - let settingsMenuItem = new PopupMenu.PopupMenuItem(_('Settings')); - that.menu.addMenuItem(settingsMenuItem); - settingsMenuItem.connect('activate', Lang.bind(that, that._openSettings)); - - if (lastIdx >= 0) { - that._selectMenuItem(clipItemsArr[lastIdx]); - } - }); - }, - - /* When text change, this function will check, for each item of the - historySection and favoritesSestion, if it should be visible or not (based on words contained - in the clipContents attribute of the item). It doesn't destroy or create - items. It the entry is empty, the section is restored with all items - set as visible. */ - _onSearchTextChanged: function() { - let searchedText = this.searchEntry.get_text().toLowerCase(); - - if(searchedText === '') { - this._getAllIMenuItems().forEach(function(mItem){ - mItem.actor.visible = true; - }); - } - else { - this._getAllIMenuItems().forEach(function(mItem){ - let text = mItem.clipContents.toLowerCase(); - let isMatching = text.indexOf(searchedText) >= 0; - mItem.actor.visible = isMatching - }); - } - }, - - _truncate: function(string, length) { - let shortened = string.replace(/\s+/g, ' '); - - if (shortened.length > length) - shortened = shortened.substring(0,length-1) + '...'; - - return shortened; - }, - - _setEntryLabel: function (menuItem) { - let buffer = menuItem.clipContents; - menuItem.label.set_text(this._truncate(buffer, MAX_ENTRY_LENGTH)); - }, - - _addEntry: function (buffer, favorite, autoSelect, autoSetClip) { - let menuItem = new PopupMenu.PopupMenuItem(''); - - menuItem.menu = this.menu; - menuItem.clipContents = buffer; - menuItem.clipFavorite = favorite; - menuItem.radioGroup = this.clipItemsRadioGroup; - menuItem.buttonPressId = menuItem.connect('activate', - Lang.bind(menuItem, this._onMenuItemSelectedAndMenuClose)); - - this._setEntryLabel(menuItem); - this.clipItemsRadioGroup.push(menuItem); - - // Favorite button - let icon_name = favorite ? 'starred-symbolic' : 'non-starred-symbolic'; - let iconfav = new St.Icon({ - icon_name: icon_name, - style_class: 'system-status-icon' - }); - - let icofavBtn = new St.Button({ - style_class: 'ci-action-btn', - can_focus: true, - child: iconfav, - x_align: Clutter.ActorAlign.END, - x_expand: true, - y_expand: true - }); - - menuItem.actor.add_child(icofavBtn); - menuItem.icofavBtn = icofavBtn; - menuItem.favoritePressId = icofavBtn.connect('button-press-event', - Lang.bind(this, function () { - this._favoriteToggle(menuItem); - }) - ); - - // Delete button - let icon = new St.Icon({ - icon_name: 'edit-delete-symbolic', //'mail-attachment-symbolic', - style_class: 'system-status-icon' - }); - - let icoBtn = new St.Button({ - style_class: 'ci-action-btn', - can_focus: true, - child: icon, - x_align: Clutter.ActorAlign.END, - x_expand: false, - y_expand: true - }); - - menuItem.actor.add_child(icoBtn); - menuItem.icoBtn = icoBtn; - menuItem.deletePressId = icoBtn.connect('button-press-event', - Lang.bind(this, function () { - this._removeEntry(menuItem, 'delete'); - }) - ); - - if (favorite) { - this.favoritesSection.addMenuItem(menuItem, 0); - } else { - this.historySection.addMenuItem(menuItem, 0); - } - - if (autoSelect === true) - this._selectMenuItem(menuItem, autoSetClip); - - if (TOPBAR_DISPLAY_MODE === 1 || TOPBAR_DISPLAY_MODE === 2) { - this._updateButtonText(buffer); - } - - this._updateCache(); - }, - - _favoriteToggle: function (menuItem) { - menuItem.clipFavorite = menuItem.clipFavorite ? false : true; - this._moveItemFirst(menuItem); - - this._updateCache(); - }, - _removeAll: function () { - const title = _("Clear all?"); - const message = _("Are you sure you want to delete all clipboard items?"); - const sub_message = _("This operation cannot be undone."); - - ConfirmDialog.openConfirmDialog(title, message, sub_message, _("Clear"), _("Cancel"), () => {; - let that = this; - // We can't actually remove all items, because the clipboard still - // has data that will be re-captured on next refresh, so we remove - // all except the currently selected item - // Don't remove favorites here - that.historySection._getMenuItems().forEach(function (mItem) { - if (!mItem.currentlySelected) { - let idx = that.clipItemsRadioGroup.indexOf(mItem); - mItem.destroy(); - that.clipItemsRadioGroup.splice(idx,1); - } - }); - that._updateCache(); - that._showNotification(_("Clipboard history cleared")); - }); - }, - - _removeEntry: function (menuItem, event) { - let itemIdx = this.clipItemsRadioGroup.indexOf(menuItem); - - if(event === 'delete' && menuItem.currentlySelected) { - Clipboard.set_text(CLIPBOARD_TYPE, ""); - } - - menuItem.destroy(); - this.clipItemsRadioGroup.splice(itemIdx,1); - - this._updateCache(); - }, - - _removeOldestEntries: function () { - let that = this; - - let clipItemsRadioGroupNoFavorite = that.clipItemsRadioGroup.filter( - item => item.clipFavorite === false); - - while (clipItemsRadioGroupNoFavorite.length > MAX_REGISTRY_LENGTH) { - let oldestNoFavorite = clipItemsRadioGroupNoFavorite.shift(); - that._removeEntry(oldestNoFavorite); - - clipItemsRadioGroupNoFavorite = that.clipItemsRadioGroup.filter( - item => item.clipFavorite === false); - } - - that._updateCache(); - }, - - _onMenuItemSelected: function (autoSet) { - var that = this; - that.radioGroup.forEach(function (menuItem) { - let clipContents = that.clipContents; - - if (menuItem === that && clipContents) { - that.setOrnament(PopupMenu.Ornament.DOT); - that.currentlySelected = true; - if (autoSet !== false) - Clipboard.set_text(CLIPBOARD_TYPE, clipContents); - } - else { - menuItem.setOrnament(PopupMenu.Ornament.NONE); - menuItem.currentlySelected = false; - } - }); - }, - - _selectMenuItem: function (menuItem, autoSet) { - let fn = Lang.bind(menuItem, this._onMenuItemSelected); - fn(autoSet); - }, - - _onMenuItemSelectedAndMenuClose: function (autoSet) { - var that = this; - that.radioGroup.forEach(function (menuItem) { - let clipContents = that.clipContents; - - if (menuItem === that && clipContents) { - that.setOrnament(PopupMenu.Ornament.DOT); - that.currentlySelected = true; - if (autoSet !== false) - Clipboard.set_text(CLIPBOARD_TYPE, clipContents); - } - else { - menuItem.setOrnament(PopupMenu.Ornament.NONE); - menuItem.currentlySelected = false; - } - }); - - that.menu.close(); - }, - - _getCache: function (cb) { - return readRegistry(cb); - }, - - _updateCache: function () { - let registry = this.clipItemsRadioGroup.map(function (menuItem) { - return { - "contents" : menuItem.clipContents, - "favorite" : menuItem.clipFavorite - }; - }); - - writeRegistry(registry.filter(function (menuItem) { - if (CACHE_ONLY_FAVORITE) { - if (menuItem["favorite"]) { - return menuItem; - } - } else { - return menuItem; - } - })); - }, - - _onSelectionChange (selection, selectionType, selectionSource) { - if (selectionType === Meta.SelectionType.SELECTION_CLIPBOARD) { - this._refreshIndicator(); - } - }, - - _refreshIndicator: function () { - if (PRIVATEMODE) return; // Private mode, do not. - - let that = this; - - Clipboard.get_text(CLIPBOARD_TYPE, function (clipBoard, text) { - that._processClipboardContent(text); - }); - }, - - _processClipboardContent (text) { - const that = this; - - if (STRIP_TEXT) { - text = text.trim(); - } - - if (text !== "" && text) { - let registry = that.clipItemsRadioGroup.map(function (menuItem) { - return menuItem.clipContents; - }); - - const itemIndex = registry.indexOf(text); - - if (itemIndex < 0) { - that._addEntry(text, false, true, false); - that._removeOldestEntries(); - if (NOTIFY_ON_COPY) { - that._showNotification(_("Copied to clipboard"), notif => { - notif.addAction(_('Cancel'), Lang.bind(that, that._cancelNotification)); - }); - } - } - else if (itemIndex >= 0 && itemIndex < registry.length - 1) { - const item = that._findItem(text); - that._selectMenuItem(item, false); - - if (!item.clipFavorite && MOVE_ITEM_FIRST) { - that._moveItemFirst(item); - } - } - } - }, - - _moveItemFirst: function (item) { - this._removeEntry(item); - this._addEntry(item.clipContents, item.clipFavorite, item.currentlySelected, false); - }, - - _findItem: function (text) { - return this.clipItemsRadioGroup.filter( - item => item.clipContents === text)[0]; - }, - - _getCurrentlySelectedItem () { - return this.clipItemsRadioGroup.find(item => item.currentlySelected); - }, - - _getAllIMenuItems: function (text) { - return this.historySection._getMenuItems().concat(this.favoritesSection._getMenuItems()); - }, - - _setupListener () { - const metaDisplay = Shell.Global.get().get_display(); - - if (typeof metaDisplay.get_selection === 'function') { - const selection = metaDisplay.get_selection(); - this._setupSelectionTracking(selection); - } - else { - this._setupTimeout(); - } - }, - - _setupSelectionTracking (selection) { - this.selection = selection; - this._selectionOwnerChangedId = selection.connect('owner-changed', (selection, selectionType, selectionSource) => { - this._onSelectionChange(selection, selectionType, selectionSource); - }); - }, - - _setupTimeout: function (reiterate) { - let that = this; - reiterate = typeof reiterate === 'boolean' ? reiterate : true; - - this._clipboardTimeoutId = Mainloop.timeout_add(TIMEOUT_MS, function () { - that._refreshIndicator(); - - // If the timeout handler returns `false`, the source is - // automatically removed, so we reset the timeout-id so it won't - // be removed on `.destroy()` - if (reiterate === false) - that._clipboardTimeoutId = null; - - // As long as the timeout handler returns `true`, the handler - // will be invoked again and again as an interval - return reiterate; - }); - }, - - _openSettings: function () { - if (typeof ExtensionUtils.openPrefs === 'function') { - ExtensionUtils.openPrefs(); - } else { - Util.spawn([ - "gnome-shell-extension-prefs", - Me.uuid - ]); - } - }, - - _initNotifSource: function () { - if (!this._notifSource) { - this._notifSource = new MessageTray.Source('ClipboardIndicator', - INDICATOR_ICON); - this._notifSource.connect('destroy', Lang.bind(this, function() { - this._notifSource = null; - })); - Main.messageTray.add(this._notifSource); - } - }, - - _cancelNotification: function() { - if (this.clipItemsRadioGroup.length >= 2) { - let clipSecond = this.clipItemsRadioGroup.length - 2; - let previousClip = this.clipItemsRadioGroup[clipSecond]; - Clipboard.set_text(CLIPBOARD_TYPE, previousClip.clipContents); - previousClip.setOrnament(PopupMenu.Ornament.DOT); - previousClip.icoBtn.visible = false; - previousClip.currentlySelected = true; - } else { - Clipboard.set_text(CLIPBOARD_TYPE, ""); - } - let clipFirst = this.clipItemsRadioGroup.length - 1; - this._removeEntry(this.clipItemsRadioGroup[clipFirst]); - }, - - _showNotification: function (message, transformFn) { - let notification = null; - - this._initNotifSource(); - - if (this._notifSource.count === 0) { - notification = new MessageTray.Notification(this._notifSource, message); - } - else { - notification = this._notifSource.notifications[0]; - notification.update(message, '', { clear: true }); - } - - if (typeof transformFn === 'function') { - transformFn(notification); - } - - notification.setTransient(true); - if (Config.PACKAGE_VERSION < '3.38') - this._notifSource.notify(notification); - else - this._notifSource.showNotification(notification); - }, - - _createHistoryLabel: function () { - this._historyLabel = new St.Label({ - style_class: 'ci-notification-label', - text: '' - }); - - global.stage.add_actor(this._historyLabel); - - this._historyLabel.hide(); - }, - - _onPrivateModeSwitch: function() { - let that = this; - PRIVATEMODE = this.privateModeMenuItem.state; - // We hide the history in private ModeTypee because it will be out of sync (selected item will not reflect clipboard) - this.scrollViewMenuSection.actor.visible = !PRIVATEMODE; - this.scrollViewFavoritesMenuSection.actor.visible = !PRIVATEMODE; - // If we get out of private mode then we restore the clipboard to old state - if (!PRIVATEMODE) { - let selectList = this.clipItemsRadioGroup.filter((item) => !!item.currentlySelected); - Clipboard.get_text(CLIPBOARD_TYPE, function (clipBoard, text) { - that._updateButtonText(text); - }); - if (selectList.length) { - this._selectMenuItem(selectList[0]); - } else { - // Nothing to return to, let's empty it instead - Clipboard.set_text(CLIPBOARD_TYPE, ""); - } - - this.icon.remove_style_class_name('private-mode'); - } else { - this._buttonText.set_text('...'); - this.icon.add_style_class_name('private-mode'); - } - }, - - _loadSettings: function () { - this._settings = Prefs.SettingsSchema; - this._settingsChangedId = this._settings.connect('changed', - Lang.bind(this, this._onSettingsChange)); - - this._fetchSettings(); - - if (ENABLE_KEYBINDING) - this._bindShortcuts(); - }, - - _fetchSettings: function () { - TIMEOUT_MS = this._settings.get_int(Prefs.Fields.INTERVAL); - MAX_REGISTRY_LENGTH = this._settings.get_int(Prefs.Fields.HISTORY_SIZE); - MAX_ENTRY_LENGTH = this._settings.get_int(Prefs.Fields.PREVIEW_SIZE); - CACHE_ONLY_FAVORITE = this._settings.get_boolean(Prefs.Fields.CACHE_ONLY_FAVORITE); - DELETE_ENABLED = this._settings.get_boolean(Prefs.Fields.DELETE); - MOVE_ITEM_FIRST = this._settings.get_boolean(Prefs.Fields.MOVE_ITEM_FIRST); - NOTIFY_ON_COPY = this._settings.get_boolean(Prefs.Fields.NOTIFY_ON_COPY); - ENABLE_KEYBINDING = this._settings.get_boolean(Prefs.Fields.ENABLE_KEYBINDING); - MAX_TOPBAR_LENGTH = this._settings.get_int(Prefs.Fields.TOPBAR_PREVIEW_SIZE); - TOPBAR_DISPLAY_MODE = this._settings.get_int(Prefs.Fields.TOPBAR_DISPLAY_MODE_ID); - DISABLE_DOWN_ARROW = this._settings.get_boolean(Prefs.Fields.DISABLE_DOWN_ARROW); - STRIP_TEXT = this._settings.get_boolean(Prefs.Fields.STRIP_TEXT); - }, - - _onSettingsChange: function () { - var that = this; - - // Load the settings into variables - that._fetchSettings(); - - // Remove old entries in case the registry size changed - that._removeOldestEntries(); - - // Re-set menu-items lables in case preview size changed - this._getAllIMenuItems().forEach(function (mItem) { - that._setEntryLabel(mItem); - }); - - //update topbar - this._updateTopbarLayout(); - if(TOPBAR_DISPLAY_MODE === 1 || TOPBAR_DISPLAY_MODE === 2) { - Clipboard.get_text(CLIPBOARD_TYPE, function (clipBoard, text) { - that._updateButtonText(text); - }); - } - - // Bind or unbind shortcuts - if (ENABLE_KEYBINDING) - that._bindShortcuts(); - else - that._unbindShortcuts(); - }, - - _bindShortcuts: function () { - this._unbindShortcuts(); - this._bindShortcut(SETTING_KEY_CLEAR_HISTORY, this._removeAll); - this._bindShortcut(SETTING_KEY_PREV_ENTRY, this._previousEntry); - this._bindShortcut(SETTING_KEY_NEXT_ENTRY, this._nextEntry); - this._bindShortcut(SETTING_KEY_TOGGLE_MENU, this._toggleMenu); - }, - - _unbindShortcuts: function () { - this._shortcutsBindingIds.forEach( - (id) => Main.wm.removeKeybinding(id) - ); - - this._shortcutsBindingIds = []; - }, - - _bindShortcut: function(name, cb) { - var ModeType = Shell.hasOwnProperty('ActionMode') ? - Shell.ActionMode : Shell.KeyBindingMode; - - Main.wm.addKeybinding( - name, - this._settings, - Meta.KeyBindingFlags.NONE, - ModeType.ALL, - Lang.bind(this, cb) - ); - - this._shortcutsBindingIds.push(name); - }, - - _updateTopbarLayout: function(){ - if(TOPBAR_DISPLAY_MODE === 0){ - this.icon.visible = true; - this._buttonText.visible = false; - } - if(TOPBAR_DISPLAY_MODE === 1){ - this.icon.visible = false; - this._buttonText.visible = true; - } - if(TOPBAR_DISPLAY_MODE === 2){ - this.icon.visible = true; - this._buttonText.visible = true; - } - if(!DISABLE_DOWN_ARROW) { - this._downArrow.visible = true; - } else { - this._downArrow.visible = false; - } - }, - - _disconnectSettings: function () { - if (!this._settingsChangedId) - return; - - this._settings.disconnect(this._settingsChangedId); - this._settingsChangedId = null; - }, - - _clearClipboardTimeout: function () { - if (!this._clipboardTimeoutId) - return; - - Mainloop.source_remove(this._clipboardTimeoutId); - this._clipboardTimeoutId = null; - }, - - _disconnectSelectionListener () { - if (!this._selectionOwnerChangedId) - return; - - this.selection.disconnect(this._selectionOwnerChangedId); - }, - - _clearLabelTimeout: function () { - if (!this._historyLabelTimeoutId) - return; - - Mainloop.source_remove(this._historyLabelTimeoutId); - this._historyLabelTimeoutId = null; - }, - - _clearDelayedSelectionTimeout: function () { - if (this._delayedSelectionTimeoutId) { - Mainloop.source_remove(this._delayedSelectionTimeoutId); - } - }, - - _selectEntryWithDelay: function (entry) { - let that = this; - - that._selectMenuItem(entry, false); - that._delayedSelectionTimeoutId = Mainloop.timeout_add( - TIMEOUT_MS * 0.75, function () { - - that._selectMenuItem(entry); //select the item - - that._delayedSelectionTimeoutId = null; - return false; - }); - }, - - _previousEntry: function() { - let that = this; - - that._clearDelayedSelectionTimeout(); - - this._getAllIMenuItems().some(function (mItem, i, menuItems){ - if (mItem.currentlySelected) { - i--; //get the previous index - if (i < 0) i = menuItems.length - 1; //cycle if out of bound - let index = i + 1; //index to be displayed - that._showNotification(index + ' / ' + menuItems.length + ': ' + menuItems[i].label.text); - if (MOVE_ITEM_FIRST) { - that._selectEntryWithDelay(menuItems[i]); - } - else { - that._selectMenuItem(menuItems[i]); - } - return true; - } - return false; - }); - }, - - _nextEntry: function() { - let that = this; - - that._clearDelayedSelectionTimeout(); - - this._getAllIMenuItems().some(function (mItem, i, menuItems){ - if (mItem.currentlySelected) { - i++; //get the next index - if (i === menuItems.length) i = 0; //cycle if out of bound - let index = i + 1; //index to be displayed - that._showNotification(index + ' / ' + menuItems.length + ': ' + menuItems[i].label.text); - if (MOVE_ITEM_FIRST) { - that._selectEntryWithDelay(menuItems[i]); - } - else { - that._selectMenuItem(menuItems[i]); - } - return true; - } - return false; - }); - }, - - _toggleMenu: function(){ - this.menu.toggle(); - } -}); - - -function init () { - let localeDir = Me.dir.get_child('locale'); - Gettext.bindtextdomain('clipboard-indicator', localeDir.get_path()); -} - -let clipboardIndicator; -function enable () { - clipboardIndicator = new ClipboardIndicator(); - Main.panel.addToStatusArea('clipboardIndicator', clipboardIndicator, 1); -} - -function disable () { - clipboardIndicator.destroy(); -} diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ar/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ar/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 033cb8e5c7b0c98e1ec743499fe529b987f613b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1937 zcmaiyOKclO7{`YaUWW20v^*4GDkPK~)?KG+6*;7$O`A4?l#sZE>v}!$ZrR;2yW^xm zT$0#HWWj+0R}LWI)NK-lByDr!#)We=a{vxpIlu)8apC{%x=oORSb6s6`R056XMaA@ z^CiP`467IGN32(|K79x;JimiI;2+>&@K5kLu;&nCFN4Rx=Rq5M3Oo;z|NGz(@GAHc z=z}?M0el_&9HjU)@M-V|kmB!wN5Nmg$HBiq@;mf!R<{>?2KzinJ)Z$z1h0S}qqh*G zJinj`%JUnT#y`SXKlZ)g8{jDTCU^}b|1ZGf;8$P~{2rvZzrg|U=%ZQuC6MefNclel zPl8{A__2F+=kXg7Um9?C@zX+b(ai$ywlRKb(OGj=Q?*C*Asl& z4+Kx(%lkem_p{65y5cB`MlRRGvWU5y=C0?&j;lnRa6dw|8ZSFBn~24XFJ{w1yl>B^ zKRc22q?>3W_GcU=cql7^O^WGQBpx5bZ1Ic}@V+qVXH!BcKdL5d%9FD^lFFaVNew zuL)OKV-@QvMnkP4uSPNyR^o{uuuxA#WVRlNYxz-y`jT;OQq&-(HJ()cigm7DO{|hE z^4!FG)+A&}!_H&qA|J2|gO+{LD%iYW7Ynv!pSJDXyH294QtU)YKqh>NOqrz)(Ha6;6(zc1oCbK_&<7xrc;f0> z^p?IwC%Thbb;qojR(7(6^Lc$&-(avdVbkBG5jXf=(0_QEhFOBsIydtNWZTsndLxV6 zg$WB)DZM~c2-l9SbV{{M>`Kd)%V4w!J@6Xjl3k_1> zCOnpK0^M$7$~#D?@0w-2H?v@, 2018. -# -msgid "" -msgstr "" -"Project-Id-Version: gnome-shell-extension-clipboard-indicator\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2018-03-10 10:10-0600\n" -"Last-Translator: Ahmed Ayman \n" -"Language-Team: \n" -"Language: ca\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.0.6\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "النص سيكون هنا" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "اكتب هنا للبحث" - -#: extension.js:198 -msgid "Private mode" -msgstr "الوضع السري" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "محو السجلات" - -#: extension.js:210 -msgid "Settings" -msgstr "ضبط" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "تم ازالة سجلات الحافظة" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "تم النسخ في الحافظة" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "بدل حالة القائمة" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "المدخل السابق" - -#: prefs.js:111 -msgid "Next entry" -msgstr "المدخل التالي" - -#: prefs.js:120 -msgid "History Size" -msgstr "عدد العناصر في السجل " - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "فترة الريفريش بالمللي ثانية" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "عدد الاحرف في المراجعه" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "اقصي حجم للكاش فايل بالكيلوبايت" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "اظهار الاشعارات عند النسخ" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "اختصارات الكيبورد" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "عدد الاحرف في الشريط العلوي" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "ما سيظهر في الشريط العلوي" - -#: prefs.js:170 -#, fuzzy -msgid "Remove down arrow in top bar" -msgstr "عدد الاحرف في الشريط العلوي" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "" - -#: prefs.js:232 -msgid "Icon" -msgstr "أيقونة" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "محتوي الحافظة" - -#: prefs.js:234 -msgid "Both" -msgstr "كلاهما" - -#~ msgid "Disable cache file" -#~ msgstr "الغاء الكاش في فايل" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ca/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ca/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index e98423e918f0177deaf6d043168e0818085d7aff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1787 zcmZ{kJ&YSg6vrpw_%h!C0*C-FQi^l2#y&)J@^KOO6}W(p%bgQwXLq0N3A;OHX7)ZJ ziYOHg5)B2SNrezn8qxs;k_#Fd8VU-EKuG}&5>))(uDRnBG4lB5*`4?GpLzcI#LUME z<0R%O%uv}@xJOyX1gZKC}tY5 zW7W6AA(9WMBIlx1{rz$MMg;LtC>ga{E%o+Dhw6#AK9aw^!bynM)95lvL#!?h3!8J~ zN1SC5;&CC5qXTgxQ>2oYb&V|^L(Hh>hbE1d%b}0@wo8r8x1ue`Qkkuy=q}B*JM&Td zrKr=UPP^M_NA0uicH>R$L)3S=@R_*l(o$-(fu#$2KWAFj&KaD7_4LZX1bZcZwT#Om zl&!?(=U`k6OFiVM&pJoYf7e}{X`{E^TRSYM(`q-S_b3v5x)e~?i{nh2Vxc-%&tdUW z|9mumxKGj=u#47;#HKiwF3ra#G&Zx+=`1>LUGBS7jH{(zoLiv!=i+QZrx&TyTxh%# zy~YK*y0lHpsR=aKYPZfd)KVU&lUrUbmnPMe-M;ooeXEVmaGwjg24$d>GZKMyZZ7B!e?1AG@=;G!!)UeYIKd6`@;-2aBU07&d~##Yr@hFj0W$v4uv8#a#}i)P&Mkn5o2RHW@oIc-Agu_ z#?n{5)R_rabz&yB&|C+`hcUD?P-Tj?f|2x?I_RntYN2J1c#%fi6i+z^6sLODBV8&B zeb8}LIH*&Cq$yaL4CrH7R^?O2D1Yy`A W_1o7zQy0t0=lBDVfb!x_0sa9TpYn|W diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ca/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ca/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index ae577ac..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ca/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,143 +0,0 @@ -# Catalan translation for gnome-shell-extension-clipboard-indicator. -# Copyright (C) 2018 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the gnome-shell-extension-clipboard-indicator package. -# Adolfo Jayme Barrientos , 2018. -# -msgid "" -msgstr "" -"Project-Id-Version: gnome-shell-extension-clipboard-indicator\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2018-03-10 10:10-0600\n" -"Last-Translator: Adolfo Jayme Barrientos \n" -"Language-Team: \n" -"Language: ca\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.0.6\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "El text apareixerà aquí" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "Escriviu aquí per a cercar…" - -#: extension.js:198 -msgid "Private mode" -msgstr "Mode privat" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Buida l’historial" - -#: extension.js:210 -msgid "Settings" -msgstr "Paràmetres" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "S’ha buidat l’historial del porta-retalls" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "S’ha copiat en el porta-retalls" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Commuta el menú" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Entrada anterior" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Entrada següent" - -#: prefs.js:120 -msgid "History Size" -msgstr "Mida de l’historial" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Interval d’actualització (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Mida de la previsualització (caràcters)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Mida màxima de la memòria cau (kB)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Mostra una notificació en copiar" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Dreceres de teclat" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "Nombre de caràcters a la barra superior" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "Què mostrar a la barra superior" - -#: prefs.js:170 -#, fuzzy -msgid "Remove down arrow in top bar" -msgstr "Nombre de caràcters a la barra superior" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "" - -#: prefs.js:232 -msgid "Icon" -msgstr "Icona" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "Contingut del porta-retalls" - -#: prefs.js:234 -msgid "Both" -msgstr "Ambdós" - -#~ msgid "Disable cache file" -#~ msgstr "Inhabilita el fitxer de memòria cau" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/cs/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/cs/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 99bf1b87be5d74e42075e3c6c9b04b2175387235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1980 zcmZXU&2QX97{&)E6vB5Yp9146*S1qmdmIP3+ff~Xu30t9lF8y7Ad5FC)Wl>>hOi0AcgnpBL|{;kLFyz{)z%=q_X zM?Ms2kKuY8*EL+v;QHn!+|br<7UBr_Hh3J|0&fFj@NO^%?*}h}kAfe74}f2QcY)u7 zJpL!}82B^z2>2)XH25z#1wM6)5GTL}$az-5d%y_fJUifn;CtW`;3wei;8!5W{{XU% zU%`99zrcsUf53;q;}CHKHO+#ozj><=)8GQg&k|&P5y<1;1zFGgAbayUcpvy9h@bcc zH?H$H&;$PlUjt7d8P9hfd=lINS>Hz>`}ZaIEI0x=?=_HpIC^yK!z}n5o=<}8?|G1Q zr68}*MUeA;3i1;1JFb)G)Y@C1o{M$E?z%qiJKT`2*2inZzO(0t8`r>o zbAzRIy90OjfZLt8Sg%;LE)q*Jh!k0q^r<6zHrGxS=rn;!#8RSUPLVF0&HH%LnQvtt z(vme!8F#2>5<>xxP@!0|nN}e=i=N3SaeADGHuXS><-i(oM)k)Di^%3KC|w~|G^<4F|+Nssh^g+zb_>C=#Nuu>!_oP#l+E9rN)yY*6(J~CkdorQvw3tC} z%IbC^HZPNbBAMILpnm8Po60$Dx`o(`><$_0bVmo0^}==vY}OZT*1e;XgnUJj%9Uu_ zZWr})p{X*ZX!o=68!o?q$wAa;G{ifRbafA>zM(q14Ntt~(Az@cn5#uo8!Cg%-b&Hc zp|@Ce3$Ja_y}ssczzYuY-aw@-nxAW)^qNg??nRn!w&v%bpKH#|O}!-x=e2WbibP^V zv}j%SR6>h3S3#`l<%}O2{`m3rZYp)s2yFT)2AXauyUJ@TnPS5I=N1LU)XMV8sRND8 z#@y6ocX?cLtG4ikERov0RIg;A+$(3>Z+Z&{aV)8$a_^K0YzU`YwBTzuCDweqUG0jq zaZ(LK_!L@rInbF*_bxk4nJuxote;f7zB1Jnv5BgT6_q(XaqeerwciBjBF1A^Bn+EH%>xqvA$=Zv8M`* zxI%+CmkzV6v06uPRmZk)H;6ZqjN0y1-;RbjAZHe_ZLO=W%wj*0-%lj;_$*e=qRyf; zwsiQD*wJ@!Nf&XO><};f<_;!Fo^8na5i|H(R7yM6j1fG(NGg;muOTHMCb|S_UP)2 zxPHE@Z)~sj5n1ZPwiYTM{!oVU1|ims(rOo9D2i>O@O8jZLNVB@*p3j&GBhkbSP&!{ zSfpTY?EtcIzz}yXROFYq)rXeFXSHia`qge2m)I9vA1~83J_lJLF)D?9=^qzA!v}AY L)Z%0Df0zCPY4bZe diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/cs/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/cs/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index 23c0819..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/cs/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,144 +0,0 @@ -# Czech translation for gnome-shell-extension-clipboard-indicator. -# Copyright (C) 2014-2017, Yotam Bar-On -# This file is distributed under the same license as the gnome-shell-extension-clipboard-indicator package. -# Daniel Rusek , 2017. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2017-11-03 21:22+0100\n" -"Last-Translator: Pavel Borecki \n" -"Language-Team: \n" -"Language: cs\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "Zde bude text" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "Vyhledávejte psaním sem…" - -#: extension.js:198 -msgid "Private mode" -msgstr "Stop (proti úniku citlivých údajů)" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Vyčistit historii" - -#: extension.js:210 -msgid "Settings" -msgstr "Nastavení" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "Storno" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "Historie schránky vyčištěna" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Zkopírováno do schránky" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Přepnout nabídku" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Předchozí položka" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Následující položka" - -#: prefs.js:120 -msgid "History Size" -msgstr "Hloubka historie" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Interval obnovování (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Velikost náhledu (znaky)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Omezit velikost mezipaměti na nejvýše (KB)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "Ukládat do mezipaměti pouze oblíbené" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Při zkopírování zobrazit oznámení" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "Poté, co byla vybrána, posunout položku na začátek seznamu" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Klávesové zkratky" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "Počet znaků v horní liště" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "Co zobrazovat v horní liště" - -#: prefs.js:170 -#, fuzzy -msgid "Remove down arrow in top bar" -msgstr "Počet znaků v horní liště" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "Odebrat prázdné místo kolem textu" - -#: prefs.js:232 -msgid "Icon" -msgstr "Ikonu" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "Obsah schránky" - -#: prefs.js:234 -msgid "Both" -msgstr "Obojí" - -#~ msgid "Enable Deletion" -#~ msgstr "Zapnout mazání" - -#~ msgid "Disable cache file" -#~ msgstr "Nepoužívat mezipaměť (soubor)" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/de/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/de/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 8084947dd2132cceeb0606318ddfb8b97333f48b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2468 zcmZXVJ!~9B6vqb$1db$x5FmU69wLC9uov42B3xn;$Bq*#wqw~xK#?LbxBG5);@z3k z?5@ve3Mgn0Ews=?NK}L-RSKl5Xb?zLDUbk(209R;)-+KWAG4o9Tb1xf}-t5Q2hJ_?g96}So|CW9|sSEqW=td z5WEUL2)+l3-G`v)`3xlR2KWg01Na2^Gx#L<4;Ui{dlA$ap4Sni#Q7zDM8^&AA@F-p z{NDz}&#&NK@J~?I+p%*H$8(@OPlJ-Tt01N*4~kt6dl%0j`~;Nze*?Y(eg{fie}huTJrFN>ng*W(-vtkW?}G@tvXwf? zki5to(Yt+!zNc|Xy&$iOLuw&IG@?Y6Hnd2k9jJ!XNwhqJ3u&(U2B`80d7C{b@ky>^ zJd8{7Dnt4~O?jrCD=9CBH(hNDDjY?ea>1n2l)}_>T2A|jOu<=xTAg)8qNa72Fgcs{ zsIAwW$G03WZOEybPFefGuXs2;yiH7AIN!t59f#A-7Ho@cZ-#TQC|q!)rd`KyB#Jg= zs0#x>v|=_`&4tdYi`*M1%oFE}uq<-5pw}s^G`3C3lw&T9thPqgf?MM%5^-7}hQf77 zw+r@^Bj~U&aJb0p1wk3qE|ysf-&~u*M0*`#Vot_ZW-Wxd?V@xjt)^B?@Ej0 zK&)EfqA)hj)k*?0>k890p_X7!Bnn-prgp7 zx@x*OM)o948QW4dd!2!)Briva!lYiWtG5$fbq&)0AIVGJT|-8LxhS}dv_VXRYRlX~ zk%EOhHc@c4jPs!B@OtS|u#8N~q+kYlYS6^k#8@!)MlkU@jUQ`Fj32@CSZ!YCMbPxx z=BY+IHRuvV(|N;r2KjW#mc<79W8-75oryDT(t7B!H(_PtQpX%LS!WHJVf09t&?y9O zyQ~qQKXZ-Y(?z{{#9IapY=zpw+`_r72*&GUwPEK5l8{DKfuo&N8+)?qlAMdlx0dC^V(EoR8XrAbdnY*0 zR!Sv7FFB4(K@;`k_3@foaVTnJn67jU!eXmiDS}0@{c36uXN=BfkLt6J*kTK_iLhT6 zOHZ@I-D_!MXq{(Ek*B4yjS58QEi*U@&Kc}*9h1d5K~rVk)k!*da4oj9hL#Nz!?;(A{p(?p%ONo| zQd4$ArdPpK`LeQEVdybwo^eL8y6nV*F5{u}kt>6lqw)nAHt{xx!}Gz@f{V&rO|2HC zPO%@@m)O^kS{)R_lVYjOCY1$c{c2G=T$C(|SCFz z0p}d@Vlfx7L3WyAK|GyBABBk*cP7Rw91JF-i&Z(`Y;%PRkVsXo7%D48;#bXJPck76 zIfPbaa}K2W{;hB|?q9dDiBb6si`?nVx|-2BEwJt1qW;Zx8={UPgQ;Ou-VRPMED}pi eUZpal4f*eq*nauo3pMLf=$8JtyAqpX8|q(f3afJf diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/de/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/de/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index a4f8e30..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/de/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,142 +0,0 @@ -# German translation for gnome-shell-extension-clipboard-indicator. -# Copyright (C) 2014-2015, Yotam Bar-On -# This file is distributed under the same license as the gnome-shell-extension-clipboard-indicator package. -# Jens Lody , 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2020-09-27 13:21+0200\n" -"Last-Translator: Onno Giesmann \n" -"Language-Team: Deutsch \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.4.1\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "Hier erscheint der Text" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "Text eingeben, um zu suchen…" - -#: extension.js:198 -msgid "Private mode" -msgstr "Privater Modus" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Verlauf löschen" - -#: extension.js:210 -msgid "Settings" -msgstr "Einstellungen" - -#: extension.js:339 -msgid "Clear all?" -msgstr "Alles löschen?" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "Soll die Zwischenablage wirklich geleert werden?" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "Diese Aktion kann nicht rückgängig gemacht werden." - -#: extension.js:343 -msgid "Clear" -msgstr "Löschen" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "Abbrechen" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "Verlauf der Zwischenablage gelöscht" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "In Zwischenablage kopiert" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Das Menü öffnen/schließen" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Vorheriger Eintrag" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Nächster Eintrag" - -#: prefs.js:120 -msgid "History Size" -msgstr "Größe des Verlaufs" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Aktualisierungsintervall (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Vorschaugröße (Zeichen)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Maximale Größe der Pufferdatei (kb)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "Nur Favoriten zwischenspeichern" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Benachrichtigung beim Kopieren anzeigen" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "Eintrag nach Auswahl nach oben verschieben" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Tastaturkürzel" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "Anzahl der Zeichen in oberer Leiste" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "Folgendes in oberer Leiste anzeigen:" - -#: prefs.js:170 -msgid "Remove down arrow in top bar" -msgstr "Pfeil in der oberen Leiste nicht anzeigen" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "Leerzeichen vor und nach dem Text entfernen" - -#: prefs.js:232 -msgid "Icon" -msgstr "Symbol" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "Inhalt der Zwischenablage" - -#: prefs.js:234 -msgid "Both" -msgstr "Beides" - -#~ msgid "Enable Deletion" -#~ msgstr "Löschen ermöglichen" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/el/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/el/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 14ec2dbd7d87e16b477ccc63b8c94ce639269388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1581 zcmaiz&2Jk;7{&)$zD%J~P{oIkcu|FvsBCJdRH>XMsu~)IN@(P`sMpPU>|I#zSi9q- z;e^wqC6bF2sX2f+fDlMXA(3e#Cn1qfTxb4+ifjK1o_DuSQ8{#-@o#76{dnHTn}-9( zHw3PeSnp!p!+I0z#B=z<<%6$*0r)n!2)+TXgD1dW!2$43@GbCfFb6&aIsOs&I(Y2) zEPenyh5dWr%iwvC<0e4Xa09%A93T7u``?dc=N8Ok{|I~^eCN0j=fI2LRj>h`1`oi? z;6LCQ@bn8=oogWHH$m3>8#o2-fggh6MIq2O)x>&V#d-;gFP;i z7m#*zy@EUT;pmzSr5lqUBwEEwVloUG^U94Y{U_w{xvYpu)d*yTw8E3eG2+uKi{^r_ zrMN1WvdqL+vG$re5i{;h@?6iCR1HE&3BqXbtN9`ExxA@KMj9PwW4RE>#k2+udcGUG zo|bVkl%1$%augUWxLQ(ORir4%YAh3;i6K8BPcjpPfXPX4@;|A-2s#gWl7`E&Vv?lU*hPC0g?By{0wkxFjEcV$Q=1uryR zjI;fvI1YxZ@dOg0TGOpbr!3t%8uj-@l3{LUdgjU#ZH3`{Zc<_D2rZTx(4gVv*+%FF z(HOCPiPYoQ%TvyUCvhyLDr4tL8YA7G@pKS8#eC;T>~;&mZQ{^eC%A_8U}f+dGKZLqt!Q9}#dL+g(&% zeyU*B>=(P57VV+fj=c*}oV<)$<}cGV`*wvZ;l77L+sIk%SADFUQWgJc!lSW-ZM$X; z2^Cs))!sH+EZ_igxA5J?CVjij21K{HH%?&3KAc&>x?{gX-!6O9@7JG#r-YgvD1-#m zZ{seF7Mf6dijTl3Flsjpef_{)aO^!|7dwZudRr_u&A}Y$Ay#!T9Kd<~fzw diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/el/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/el/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index 222c738..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/el/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,139 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2017-05-04 17:27+0300\n" -"Last-Translator: Raphael Rochet \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.1\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "" - -#: extension.js:198 -msgid "Private mode" -msgstr "Ιδιωτική λειτουργία" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Εκκάθαρση ιστορικού" - -#: extension.js:210 -msgid "Settings" -msgstr "Ρυθμίσεις" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "Κενό ιστορικό" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Αντεγραμμένο στο πρόχειρο" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Εμφάνιση/Απόκρυψη μενού" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Προηγούμενη καταχώρηση" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Επόμενη καταχώρηση" - -#: prefs.js:120 -msgid "History Size" -msgstr "Μέγεθος ιστορικού" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Διάστημα επαναφόρτωσης (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Μέγεθος προεπισκόπησης (χαρακτήρες)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Μέγιστο μέγεθος αρχείων κρυφής μνήμης (kb)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Εμφάνιση ειδοποίησης με την αντιγραφή" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Συντομεύσεις πληκτρολογίου" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "" - -#: prefs.js:170 -msgid "Remove down arrow in top bar" -msgstr "" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "" - -#: prefs.js:232 -msgid "Icon" -msgstr "" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "" - -#: prefs.js:234 -msgid "Both" -msgstr "" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index e9e68a8529dc633d49006c4556540d1440a8a6c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1767 zcmZvbJ!~9B6vu~Pz7E1i0P~>$FVOfvdz>8a$ zu_GiooCY5U+u%dsc~I;xfhWLi@M+M14e%QH z0{9sy{x`vg!S6xw{}Fr=ybazD{t1fRvAgTMC&5Q>Zh@lt9QYJ?8Qg`o47>;DUm)U9 z@K^9z@GtO1a2hY=d=`{EJy7g-@FR5<;7j1O$@vEOGS1(EP4G4-agX0y>wO+1oL>Q@ zj*Fo9e*lW^PbSa50HwcQf~UamK*+6@)FWDCNet<;dJtQB@&LB(D*A5SJW6pIHZ zYQ+|Y6ABhjCSK~TIu31_tE|>yo2z$tzYgd})`hqXUUl^z#X24_4NS`9VM{X~_M2** z_W~g)gshiYpB>o&#Ut%>9N2j>IkFYh*G_FX-ZgxsN<=e9HqH8tE&U|WhBLc5Fl9Dj zwaEj=ene}i&F$)xW-{MYTO5MPhhA-s>=nvwFas0oU~EqKi*2#5dZO%#NmJ@Gjo7j3 z+2Ii41FFb4FI8{9sNYCKJUSGQTCJ9PZ=^%@L_*)8-|lc6qO~O2Mrp{^p z+otx}&TFTm_L+9OaZ&pa^_21BAF)eH748DT(^!mUAyVHN8?3Z~c zTd~c~!8sq6ddN|ab%vw|=MJ%Nbl1A8M+MEc+KtIQiljds3aIPVBGo2es6MRcuz0z5 zA(}t36Ilax(P|#s1fQit^L-N<8)@lu8eOn1^Bu~I>gX5e7O4JraVDozi!|F@XuKc2 z$vL~av<=IN2{hMgx6U-wQr5R#ZR^+^UV5WbTxGfJCb5)oO43_h=z>%BlN$}A|Gc7I z36t1r5I|fw`nPvaXL|f~9k!kyNhgD0)l$$q=y8He#BnNt4y?2B^*xh`7ikE~IJ3@Z z%*b+6tztZMqA@kYQoa(a_3^EYU1c3lMup|}Q>tZD9Bj*iow4pP0Rk5?K)%$exr#Ez z-{hF0L+_(BlD~58T2xrbFhS_S{L~WTa7P#!DKvBdff!r~t-97jwWBiEhx1h@MPD&s z_!??8t!{@UwBB*dZhW2eN9FjYT1ufIhdTysd`qqR*qOerUlNQ_X6YgR=TC2_OXc`0 L%zB;fe|zvZ1(@eH diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index ab2ad6f..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,143 +0,0 @@ -# Spanish translation for gnome-shell-extension-clipboard-indicator. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the gnome-shell-extension-clipboard-indicator package. -# Javier Junquera , 2016. -# -msgid "" -msgstr "" -"Project-Id-Version: gnome-shell-extension-clipboard-indicator\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2018-03-10 09:43-0600\n" -"Last-Translator: Adolfo Jayme Barrientos \n" -"Language-Team: \n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.0.6\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "El texto aparecerá aquí" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "Escriba aquí para buscar…" - -#: extension.js:198 -msgid "Private mode" -msgstr "Modo privado" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Vaciar historial" - -#: extension.js:210 -msgid "Settings" -msgstr "Configuración" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "Historial del portapapeles vaciado" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Copiado en el portapapeles" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Alternar menú" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Entrada anterior" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Entrada siguiente" - -#: prefs.js:120 -msgid "History Size" -msgstr "Tamaño del historial" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Intervalo de actualización (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Tamaño de previsualización (caracteres)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Tamaño máximo de antememoria (kB)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Mostrar una notificación al copiar" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Atajos de teclado" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "Número de caracteres en la barra superior" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "Qué mostrar en la barra superior" - -#: prefs.js:170 -#, fuzzy -msgid "Remove down arrow in top bar" -msgstr "Número de caracteres en la barra superior" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "" - -#: prefs.js:232 -msgid "Icon" -msgstr "Icono" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "Contenido del portapapeles" - -#: prefs.js:234 -msgid "Both" -msgstr "Ambos" - -#~ msgid "Disable cache file" -#~ msgstr "Desactivar archivo de antememoria" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es_ES/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es_ES/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 8bbca1c3d8919e818c93b4a4225a98be6b018f08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1074 zcmZvaO>0y!6ow-z$oO3l67CTvduvW*S?t($2s@?K6c=(z;^_34)G!-_`VJ?;8Bdf zAgf=j-$AC!j$_~bGecQg zS6y*usGv2ytHeFEGgO71^D(Pp5X-zx3!L>7Eo!3%G8%u@nGg@ub|hsZPG9kAQ>(4f zV%B5NSyVnu3|CwgM#5FK?p5f~lEv~S8yYVlT2nD ze2n9?vrVe4suFLL%OTfYd9%ucY&%S^JZ#GauQ);_Z*f#jnyNRZWuq<|Q`DGl)@QEN z8}&Mbauv@_r~Oygn7&e(HtX0D6wHfg4#V{OG$o{d~| zz6edSX5p|WJ^iR0tQW+Jf zleAqY+FYb^2ZEs!)5aT-H(bCZ%E-*Wx}yJXTNg=BhAD&V`tOHkThn=^QNJ1(iM#yI z*-4B48JWuDL#FX;WIzRTwct?biIe5D^Wu;92G_u+6&t$nacPIKZ$ M$7`Sb*#9hk13L&hwg3PC diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es_ES/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es_ES/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index 6f495f1..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/es_ES/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,63 +0,0 @@ -# Spanish translation for gnome-shell-extension-clipboard-indicator. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the gnome-shell-extension-clipboard-indicator package. -# Javier Junquera , 2016. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-12 16:08+0100\n" -"PO-Revision-Date: 2016-10-12 16:16+0200\n" -"Last-Translator: Javier Junquera \n" -"Language-Team: Español; Castellano <>\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: \n" - -#: prefs.js:81 -msgid "Toggle the menu" -msgstr "Abrir menú" - -#: prefs.js:83 extension.js:106 -msgid "Clear history" -msgstr "Borrar historial" - -#: prefs.js:85 -msgid "Previous entry" -msgstr "Entrada anterior" - -#: prefs.js:87 -msgid "Next entry" -msgstr "Siguiente entrada" - -#: prefs.js:100 -msgid "History Size" -msgstr "Tamaño del historial" - -#: prefs.js:105 -msgid "Refresh Interval (ms)" -msgstr "Intervalo de actualización (ms)" - -#: prefs.js:110 -msgid "Preview Size (characters)" -msgstr "Tamaño de la vista previa (caracteres)" - -#: prefs.js:115 -msgid "Max Cache File Size (kb)" -msgstr "Tamaño máximo de la caché (kb)" - -#: prefs.js:120 -msgid "Keyboard shortcuts" -msgstr "Atajos de teclado" - -#: extension.js:111 -msgid "Settings" -msgstr "Configuración" - -#: extension.js:187 -msgid "Clipboard history cleared" -msgstr "Historial del portapapeles borrado" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/eu/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/eu/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 913ddc8586f74c9c4a0ca9eef9af7109c79ec182..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2307 zcmY+E%WvF79LEP*C@g6yrO@(d86JX!;_WsmQnWnMHiR@P+eXP2P^BJb?cdr{duLYT zaUSLX2X35@K!OVr5`RE*;?9i|LckS?14xJq5*#@4{n_3;M)H2vA!fj-d+~#D7rY4WfQP|9z?0x#;QgRDB*cBd5wHaw1&@NK!AHOs!6(3Z z@KJCLoC1d++snZd;1+lq`~-Xf{03xu--E2}XOQju3myZHVKdt~13m`646^=9;2H2X z_yG6;$ooD9S$o?O~Cj1qrK#tQ{@ErIG_!9U&$aX#g+3!!m=fNG2&-n%9 zeZPYouYa2FQ*ib3^P3*Smh$AJ&p1OamD&XEUGXeX-&2*hibz* ze9JLuLdwKqM#|N{Y+<4Ko9NtIw~e=n!9{C48NY9)S%X7if+DeK$C@Hmv@1hgt?kHl zU6NP{tr6E~yH=Pd*7>mTx#+1a8CDvHIwP55t(;B=GooiVsPcr3didb&SgN5XCv!L* zdJTiuY0FC}gWBuGXn=2aD8ocK6=Gp7wW+oZ;O45M4NaSs8achUW~TmPi@Y(k>hy*} zOh+~%u|`8jc_LR30JotsIX%i}Fgs#(k=-;>IcGQbAJlx@OgPkI6(T#%76!qASg}st zYZK>UJ;63(y&mdNu`@`L4DEPZ^x3IRjg$^ZCge!;5pHS6b9Yi!(iGp_#Hi+rU*w_&Tc|uth zKoA+84tBE}XcMt;>so6xMmB?99_uK$Qp9=Cw_VvUM~Q`)>%)l5$Qjhp?qgZaI6tZGOu zSTdoFkhZRzA86kaw{+o<)&UAJwGzLGx-Vp0lwPY;revZ*8kJ}nXl>P)BNrZ2TvhD~e`%atJ+*RKncd0DreR=5ywHagEpii-5W#AMB6w{KRX zdSr?=#o?H$n^RXNyc!`0O01;TSS2_i@Yz$EO%%(a_FKqdTyKae(PXHE@6F!2XO|o- zK~fVB1t%RWTbU@F38yVAD09Q+|^1`UPm#L)k MjR<44o&zrZ52NyHp#T5? diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/eu/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/eu/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index be579df..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/eu/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,139 +0,0 @@ -# Basque translation for gnome-shell-extension-clipboard-indicator. -# This file is distributed under the same license as the Dash to Dock package. -# Ibai Oihanguren Sala , 2020. -# -msgid "" -msgstr "" -"Project-Id-Version: gnome-shell-extension-clipboard-indicator\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2020-10-05 23:34+0200\n" -"Last-Translator: Ibai Oihanguren Sala \n" -"Language-Team: \n" -"Language: eu\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "Testua hemen azalduko da" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "Idatzi hemen bilatzeko..." - -#: extension.js:198 -msgid "Private mode" -msgstr "Modu pribatua" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Garbitu historia" - -#: extension.js:210 -msgid "Settings" -msgstr "Ezarpenak" - -#: extension.js:339 -msgid "Clear all?" -msgstr "Guztia garbitu?" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "Ziur arbeleko elementu guztiak kendu nahi dituzula?" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "Ezin da eragiketa hau desegin." - -#: extension.js:343 -msgid "Clear" -msgstr "Garbitu" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "Utzi" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "Arbelaren historia garbituta" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Arbelera kopiatuta" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Erakutsi/ezkutatu menua" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Aurreko sarrera" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Hurrengo sarrera" - -#: prefs.js:120 -msgid "History Size" -msgstr "Historiaren tamaina" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Berritze-maiztasuna (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Aurrebistaren tamaina (karaktereak)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Cache fitxategiaren gehienezko tamaina (kb)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "Cacheratu gogokoak soilik" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Erakutsi jakinarazpena kopiatzean" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "Eraman elementua goraino hautatu ostean" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Laster-teklak" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "Goiko barrako karaktere kopurua" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "Zer erakutsi goiko barran" - -#: prefs.js:170 -msgid "Remove down arrow in top bar" -msgstr "Kendu beheranzko gezia goiko barran" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "Kendu testuaren inguruko hutsuneak" - -#: prefs.js:232 -msgid "Icon" -msgstr "Ikonoa" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "Arbelaren edukia" - -#: prefs.js:234 -msgid "Both" -msgstr "Biak" - -#~ msgid "Enable Deletion" -#~ msgstr "Gaitu ezabaketa" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/fi/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/fi/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index eaeec15ac9ed0c3ccbfbac75f1c92ce8760bc411..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1298 zcmYk4&u<$=6vqczD46m?K?o3_4&suiT6djN+Bi*BFlh*Fij}xkIZoEk>zAFKS1?h-vqx0FM~gWE8wr-JK*nN3w#Df{omkg;DzTK{R;RN)>pun zz#CxH-2tPAC*Zd@GX`Vazb**z5%>=nE2{Vp(9@_$z7PSBtBi{eQ^8G~+7SBe!Bi7+; z^fW0a$Lxc3Q_<609a`mvr(a|i_h~44wqhE}VDV+C5nnW?3*;J(k7>9&x4uTO;wyY&8`Fo9D0+;He~2;}UyB zSx9z=$z$9KX;-%PsX_|Lp3ixhd{*Z^8CZPof0gXRY!oG*!%A1Kr=6Qgx{;)x$aJH7 z{#x&`H6AXdU^W@>vrz!VtG|}QgfFJZjbm5&YHYd zIVA&9Wmo#zmMm{;TPV%mvI(5vC8)c(wMYa(>dLn>Tb>_<)4koj?ely(?X=aisFZ=N zX$9W_^}kkW#b#5+l6wkUj|TUWTj#oHe?%_XHklows9kyMkVC7lYo~N_&$`lgrKuK6 zzqP(8o7b&XBR|}dowd!@lVpbsxuyg=;jA8Vy}i+C-)xD&bbLg{%xBAHVi>zgre!;_GP1CR6@4xgf>+gi#w7*u7_qpl zQ9U;3DK1NF_$WnFhS)twO-+;xOra*R?GYe&(sdIMJw~o5=x9D$6Wc@5nhlv#_1A^x zFpa^r5`9FTVCg6E&Zap(MUm?Q5Akq5n+9afx{P^v*j;3#$a{6Vd#z&DHYkbi<^t*b E2RLGFN&o-= diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/fi/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/fi/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index aa6165c..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/fi/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,140 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# Jiri Grönroos , 2017. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2017-09-06 09:53+0300\n" -"Last-Translator: Jiri Grönroos \n" -"Language-Team: suomi \n" -"Language: \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 2.91.7\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "" - -#: extension.js:198 -msgid "Private mode" -msgstr "Yksityistila" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Tyhjennä historia" - -#: extension.js:210 -msgid "Settings" -msgstr "Asetukset" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "Leikepöydän sisältö tyhjennetty" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Kopioitu leikepöydälle" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Näytä/piilota valikko" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Edellinen tietue" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Seuraava tietue" - -#: prefs.js:120 -msgid "History Size" -msgstr "Historian koko" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Päivitysväli (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Esikatselun koko (merkkejä)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Välimuistin enimmäiskoko (kt)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Näytä ilmoitus kopioitaessa" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Pikanäppäimet" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "" - -#: prefs.js:170 -msgid "Remove down arrow in top bar" -msgstr "" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "" - -#: prefs.js:232 -msgid "Icon" -msgstr "" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "" - -#: prefs.js:234 -msgid "Both" -msgstr "" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/fr_FR/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/fr_FR/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 0f401526b7df8fd2113cbf14f0d987c6d8629424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1961 zcmY+E&2Jnv7{(2RujRWG%BO0nRNYmWZ4#(dZAe9$CJ?m=OR^0dK*&4u?vCkgv1R_@CR@x;(2GbNn>gDH}=@CpZB$&{o~lw z4T1Ioo|o|ajpsC;AMe2rTK8TdroeZ>>p9OD&C&1$nv51^r1$mvhzmBs5K8XGekoA2%>3J4cz=PM|80=x zPocy6p8%)9S&-L#2%ZKFcnbUyDJN6ygLQl8>7s9yOXQL@ zflRn-WHLv_yn+(3WD8A+3>G7kRpRYBj@;DONvy`!h|9EB2lT0RAufX#Yid` zi&vvdV59vh12&aa-6o?ZSh{JLN&snk7Q>*MopsCB-%pa*sCKO8&sgo(V8FXB)V7* zebloU?!FUkpcXtSx`a$Sa&BgBCYm`H&AcvWXFId!rqQ2iTv0wmJ*SM%6fQ(ZZm1$v zl*tW?D-`4#uI|6-oNf=?1uQVbQVl8Uk;<{roqk6S+(#=LjkVRafrBB2(JTSBK~+EL`oaMCT9Zv6=z7XxYRzL6JN1d|!vg`_Wru$kj5tmJ%K0T>G^~ zH!GdWq800M-;t)Mx_)79Ue>P*O(QSJ+17kRTp=$LDtB?GWIi6{aE8Zy`lKY8;ZyAu zFBXj{Gjd`}C-|D3sg0m94IW^Zl#_eULvmXu<56Xf@kl1nj##q5jq(%~3YKxAr*I7j zTOSR!8jpW4xPK~+ZRuj|VJw9Ue6S#gaguW4o#th2TjJ7qgzCkWuJI^C60nB!c&+VX zAcBlcRT;!GOfw$Aa3yX#bc=PH_g$qUuIw|u37LnQl`*7BamC_@sdTkoRgfEhTf$C< zOIin^3v3XNM+rm_?2HTxSPS*IV, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2020-05-04 11:15+0200\n" -"Last-Translator: Raphael Rochet \n" -"Language-Team: \n" -"Language: fr_FR\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" - -#: extension.js:87 -msgid "Text will be here" -msgstr "(Vide)" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "Tapez ici pour chercher ..." - -#: extension.js:198 -msgid "Private mode" -msgstr "Mode privé" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Vider l'historique" - -#: extension.js:210 -msgid "Settings" -msgstr "Paramètres" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "Annuler" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "Historique vidé" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Copié dans le presse-papier" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Afficher/cacher le menu" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Entrée précédente" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Entrée suivante" - -#: prefs.js:120 -msgid "History Size" -msgstr "Taille de l'historique" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Intervalle d'actualisation (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Longueur de l'aperçu (caractères)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Taille max du cache (Kio)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "Ne mémoriser que les favoris" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Afficher une notification à chaque copie" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "Déplacer l'élément sélectionné en haut" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Raccourcis clavier" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "Nombre de caractères dans le panneau" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "Afficher dans le panneau" - -#: prefs.js:170 -#, fuzzy -msgid "Remove down arrow in top bar" -msgstr "Nombre de caractères dans le panneau" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "Supprimer les espaces autour du texte" - -#: prefs.js:232 -msgid "Icon" -msgstr "Icône" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "Contenu" - -#: prefs.js:234 -msgid "Both" -msgstr "Les deux" - -#~ msgid "Enable Deletion" -#~ msgstr "Activer la suppression" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/hu/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/hu/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 5a837f22145ea52e1076a552b17aa004ee389758..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1997 zcmZXUPiz}S6vhWAP|W{Q{;H@`pdta*jYEYhmmo-JOH|y3#sse8_4Dpz*E42j?9}GM z0U>b!DM(zn`BqDCK#?L2l?qx#oDfp4Aa2~?#DNot@2x|V!brP6@9dlRzW42ne>rsE zbAj;$t|Pd9!*v|j)mw1GSh-b*1K?ZWVQ>w+1I)mCK?gnvegHlWeg-}SehJ%0a^@H)tS{{eDe2NBHu904By zkAdvlJop@V5xg55flq-Sfvk4|-U)sWaz8(U?D@~&v*4c~_j?pU$H6Mdd7Ha@59B^S z1=+VNAb%p(%DTBn?jLDNUF;R>fR=KuZvL=uT z`(}1yWXvn5EtYIgQ(Fd$ncY?5jcFdasz)T2V{62D8cq}X)VdJ&gBJ~TS;nQLj?PJX z#LAhhH7go+Koa7*oHRgkusx|dft>V|QyerBUZBfCLK)Ov=yzLqXFD=Zl~XYSz0{^$ z)>2NaI2vf$DAmZBy_nhQ8{7B0iB_B*s6eu7+axYg$B|FvG7NA7mCKo~pT%sK)or9~ zUQfj&m9u?={-H;#QV7~4UaY2eLmC@&N5_iw!gd+k-cU4I_lC}M*&>;eBhj=;g8sSD zE}6b)4tvu#+`fm&aayfb#XG4A{|>JkM3$R6ayar;N`PHbhGCUj3JY&H&qk;A;#f|HTy)07whfo-@>ENQ%Dd4yGUTQ@S1h%4kn`0S zD=T>)BBQg`b$wl$Uis)3=1*0oXK}KN8Ms#h6oJBw#$nNrq_ybQf%d_Cxdc9ufr4LnSgy9APKVoY#x9 zNaJ@lvDxyWf?@cT5Jy}WHf>m=W&=aY<~1Mtqor~ROa%< zc+gU&6ljXch{9gUYS{)Tz{8Vi3 za}z~T9jX$Ecdodai$#L&oV$fjnJ7MXIE?%_@e+lm-rw*ML78>pwHs-42(n`noVH{g z|0l+1(I8V?A@5$tySQxu=LbtuJA$F{(K0?MQ`;xpOMGN)unM&{@b2ejDw HzeoQ7&^<@y diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/hu/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/hu/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index 3b4e337..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/hu/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,143 +0,0 @@ -# Hungarian translation for gnome-shell-extension-clipboard-indicator. -# Copyright (C) 2014-2015, Yotam Bar-On -# This file is distributed under the same license as the gnome-shell-extension-clipboard-indicator package. -# uno20001 , 2020. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2020-06-01 14:14+0200\n" -"Last-Translator: uno20001 \n" -"Language-Team: \n" -"Language: hu\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" - -#: extension.js:87 -msgid "Text will be here" -msgstr "A szöveg itt fog megjelenni" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "Írj ide a kereséshez..." - -#: extension.js:198 -msgid "Private mode" -msgstr "Privát mód" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Előzmények törlése" - -#: extension.js:210 -msgid "Settings" -msgstr "Beállítások" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "Mégse" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "Vágólap előzmények törölve" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Vágólapra másolva" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Menü megnyitása/bezárása" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Előző" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Következő" - -#: prefs.js:120 -msgid "History Size" -msgstr "Előzmények száma" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Frissítési időköz (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Előnézet mérete (karakter)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Gyorsítótár mérete (KiB)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "Csak a kedvencek gyorsítótárazása" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Értesítés vágólapra másoláskor" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "Első helyre mozgatás kiválasztás után" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Gyorsbillentyűk" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "Karakterek száma a felső sávban" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "Mi legyen látható a felső sávban" - -#: prefs.js:170 -#, fuzzy -msgid "Remove down arrow in top bar" -msgstr "Karakterek száma a felső sávban" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "Szóközök törlése a szöveg körül" - -#: prefs.js:232 -msgid "Icon" -msgstr "Ikon" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "Vágólap tartalma" - -#: prefs.js:234 -msgid "Both" -msgstr "Mindkettő" - -#~ msgid "Enable Deletion" -#~ msgstr "Törlés engedélyezése" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/it/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/it/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 512e3751c465185245a5640455fd7cadec8721be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2018 zcmY+EJ!~9B6vqb$5RUHcM7c}Y%h?jxIb#HN95}(5!@d~Wx!t+FiFaoENRw0gnZ-K|bE$|L-8@v~E;Dg{E_&E3>_z?Ixcn|mu$m@Ru zkAXjdkAc5~C&B-~8hGM1A)W!7Ap2Pd?*m65``G~>2Hyjp20sFif?t7b|1HQmeg^Lc z{{kNY{{viRaHiw*L}j{Xc*l@0Th62A{<9Q6!IBaS~*| zXTTHS3U~$_f*k(?kibvCQ{Z>g`9DC``Ooxy4Z$0DJ_~Z5mq4z=0OWeT3v!(6Am{l7 z$b0oY$XmoVteb7vFWia;aIto-JJ*&6uVLLNccl-wX~12zzq~hGch)jHI5yXf2TEFv zyYSDo;&C@FJ`ZBWhLKp6@ko(1*)9#`*g74Q$E1l>CRQ^g9gVaP*6rd+7XvF@LaWvU zWx~wN)P`bSp%Srb3#}3g7BkaT;3bA89yOay@%BiDYKC3kl%2hdnnax>+Ct)p)u!5pDp2OA>rkD0??kUEqufMw&#FWR zns2t6FVuQj>0}mNv@Z8;GDY?1m*@#W6=TXQlhZEBB;gl3YhagZOjq4gVjmAWN~|8dhEwi6l$b3G4bfy&nrV_n zQKEd}g2sv9-O`k>;jC|ND=9W(>tbH16(y1aHclh`*_FBU9)9*cR2^5}Ucu?d5rN{< z=qZFjaL!Zbk`h~3&V;+|8lo$)WpUDd8OI8~#*$l3IZKH~4k$J{MB{Zvg)|02?QDEj zep;f73dhdt2P+yAx2R^U5(rS}{6uCt-1rzJ=2nzqzxz;k1e0m1tut~WchZnLFYQ

1B08R=1Zh|$@kUoYrXqmD440-vE+Ib^7Q+xrxo>LorV9LaI{X6o}lm?a*) diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/it/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/it/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index c9f4d4a..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/it/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,146 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2018-05-17 09:27+0200\n" -"Last-Translator: Robin \n" -"Language-Team: jimmy.scionti@gmail.com\n" -"Language: it\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=2; plural=(n != 1);\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "Il testo sarà qui" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "Digita qui per cercare…" - -#: extension.js:198 -msgid "Private mode" -msgstr "Modalità privata" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Cancella la cronologia" - -#: extension.js:210 -msgid "Settings" -msgstr "Impostazioni" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "Annulla" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "Cronologia cancellata" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Copiato negli appunti" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Mostra/nascondi il menu" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Voce precedente" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Voce successiva" - -#: prefs.js:120 -msgid "History Size" -msgstr "Dimensioni della cronologia" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Intervallo di aggiornamento (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Dimensioni dell'anteprima (caratteri)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Dimensioni massime della cache (kB)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "Metti in cache solo i preferiti" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Mostra una notifica quando copi" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "Porta l'elemento in cima dopo la selezione" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Scorciatoie da tastiera" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "Numero di caratteri sul pannello" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "Cosa mostrare sul pannello" - -#: prefs.js:170 -#, fuzzy -msgid "Remove down arrow in top bar" -msgstr "Numero di caratteri sul pannello" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "Rimuovi lo spazio bianco intorno al testo" - -#: prefs.js:232 -msgid "Icon" -msgstr "Icona" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "Contenuto Clipboard" - -#: prefs.js:234 -msgid "Both" -msgstr "Entrambi" - -#~ msgid "Enable Deletion" -#~ msgstr "Abilita cancellazione" - -#~ msgid "Disable cache file" -#~ msgstr "Disabilità la cache dei file" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ja/LC_MESSAGES/ja.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ja/LC_MESSAGES/ja.mo deleted file mode 100644 index 1b5474294443c8107becee29df97e8d9250bf83b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1729 zcmZvbO>7%Q6vw9}h1Pr*T0j(-LxmEdHFlLi;*hFM+J-2kn8YnyIIP!W?*@C<+Fd6N z;!u0lk`M(|Nt>?*qLf4_Z5@glO4CMg;DCfUbL29ylbi|{Brb^mTRTdT813wD-^`o$ z{_lf~5H{_#Ai& zyZ~((@L|~hKm_^i+Qrz*;69M_)Poei9i)68R@n<4gxwFm3eJEO=O>W*@e4?GY*g2G zVDm-TyQ@41lK&CBC{8;_dD9@}83xIJvT84bkn0c9Nt$R-FR0H?VN#!|w=~cO_9!Ox zWDh3wnCd|of1qr?A63)GBY0EKpT#5%kj_}Es04I$%XYP#>##2M4A)dm z7d&aC1$W@fYd?zDv6JGA%aIg9PUbRkVRI|VHC?q;%@wx84HMb2Jg(X-YKuNY^!tf; z?Y2){Wyi`n)j(0(=u=(6Ggd;dZjrQwqw@~bX7{OSUYl|1SdVaB!%R7>N4NU9X}Lzy z&{Ws3OpZshvI8te%KD9Tn#Tp#g)LajN~Iv)MHLxg=2&bXTiKz8IOve32ZKTOzOK6d z3WffUeydk#uF{cEPNOvBits?U$f8F|myv^~#Qvc>_p{7tM@Q&)ZO3YSGC#~W(Bm8J*NB2?wmaaM?sD_)G8jhqgs*w(A zR^~9g%~VcJ2_+`f46SnH7kMkMtEb~a04GG?ZOmxMPSqt3B%=wf}!9W*r}LGEA(bnSC8;u zAezqEYFasA*%>Fo&8%-aE#YQf`D_U_Zy)UO+aASHB^2RVTO^%euk*kA;Rr_w!lb5> z4_mu4R~}zsrEeF?#bsF-E#Dq2eSVM0!Z*^pCOuDj6VjWJ-m3J5WPYi1{#HFNZpAKqFTF*7Wl$Eb z`dFE_se$jXRik8S}K^DIA!`!{UI@sBIe|3nJZ_LU39VWfOEyWjnAxou^$&G7Y zB6na9c2UU<>5WkcZ?!!BX{k6tvPwfEmDAY&nj(8sRUO_H{{smwFPFz}ZjO&_PG3Y; z>CK`$>x-k5eB)}dv^2e4e|f4P^Vc`ePOr~G>gdMY)%E$iGCw5?!%XJK{0H@&r>Y7o pq`5F!I=4{z>@p, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2018-05-14 15:47+0900\n" -"Last-Translator: AKIRA \n" -"Language-Team: \n" -"Language: ja\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" -"X-Poedit-Basepath: .\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Poedit-SearchPath-0: prefs.js\n" -"X-Poedit-SearchPath-1: extension.js\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "ここにテキストを入力" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "検索ワードを入力..." - -#: extension.js:198 -msgid "Private mode" -msgstr "プライベートモード" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "履歴を消去" - -#: extension.js:210 -msgid "Settings" -msgstr "設定" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "消去しました" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "コピーしました" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "メニュー" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "前へ" - -#: prefs.js:111 -msgid "Next entry" -msgstr "次へ" - -#: prefs.js:120 -msgid "History Size" -msgstr "保存件数" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "更新間隔(ミリ秒)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "プレビュー文字数" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "最大キャッシュサイズ(KB)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "コピー時に通知を表示する" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "キーボードショートカット" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "" -"トップバーの単語数\n" -"\t" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "表示内容" - -#: prefs.js:170 -#, fuzzy -msgid "Remove down arrow in top bar" -msgstr "" -"トップバーの単語数\n" -"\t" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "" - -#: prefs.js:232 -msgid "Icon" -msgstr "アイコン" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "クリップボードの内容" - -#: prefs.js:234 -msgid "Both" -msgstr "両方" - -#~ msgid "Disable cache file" -#~ msgstr "キャッシュを無効化" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pl/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pl/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index b866d471d12836a2a60ac9a4b3ce0f02cd2037d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 zcmZ{j&u<$=6vqcB1xzWW{FVYd38-wLb=OWLS|=`$G=V5dv0|437c}0T*yH^%tJ&E& zyJ{~%6@LMTs^YJx1ee}wBRF$M^n&1uxWR$%tevI^G4lAc^XAQa-#5GO=d&liW*9GG zE?`bDU&9O^!5_vi;0f?P_zd_f_#F5r_$qkvQO2GJ2|NWZf!6;6@GQ6iz5;#*RzMBD z0p0-Z`ES6};CG-s|2=56`~*G;{tjBdKfq_fQ;#wB61V`q3@(BDH4q#9_BM4Yi+o(LKW4U?i2 z_u&oe^*XyYt#!M#3}Brtf@$LJ+w{m0gkGMx32=Abn>w8>CK8!QA=S*+p&E z$+-;WEo!=rcb!Jlahv2`Y&93(aT~5%+2*NndYZ>+$nox4)RD?)+EP)bX(b6P-ycL= zhILOxm*5`{GCmMaPw)tNj@B(o!Y?}8m7UF<^<#C7x?7ol0*)=VMFubDd=hdQFPHBm z6{dZ)x8Ynk_OoL4gm%_rPx-jf7G3B|Q~A{SP{cydRVv|2L(RHdU#fJ%O!Ls$P&!Im z6er~}Z7(iElig`o<9542?~zN`e!JmbYB%ZJx$<$Py<{J&*6gk{T)KX}v|AsyhBFPE zY1Wo2Y%@?XC#88o1s`*5)b#e`D@r}QrGT?*xmV<+W%h;3$u0Kz|M{hbSEyLc8wRcq z!gK@lgBo*e`uHa1!FN>=$p;N4B~?S|6@5-36!?3N_eltD%bkC5Awlqg^0p@_u@J+z7*!e=qLm7w566}dO!Y_QF?S)GDE`_VtP2a=@qly>K0kRN4A~p=^`6F GB>5l7B*`5B diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pl/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pl/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index 0bdde2f..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pl/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,149 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2017-12-02 09:23+0100\n" -"Last-Translator: Piotr Komur \n" -"Language-Team: \n" -"Language: pl_PL\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" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "Szukaj..." - -#: extension.js:198 -msgid "Private mode" -msgstr "Tryb prywatny" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Wyczyść historię" - -#: extension.js:210 -msgid "Settings" -msgstr "Ustawienia" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "Wyczyszczono historię schowka" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Skopiowano do schowka" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Przełącz menu" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Poprzednia pozycja" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Następna pozycja" - -#: prefs.js:120 -msgid "History Size" -msgstr "Rozmiar historii (liczba elementów)" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Interwał odświeżania (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Rozmiar podglądu (znaki)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Maksymalny rozmiar pliku pamięci podręcznej (kB)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Pokaż powiadomienie po skopiowaniu" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Skróty klawiszowe" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "Liczba znaków na panelu" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "Pokazuj na panelu" - -#: prefs.js:170 -#, fuzzy -msgid "Remove down arrow in top bar" -msgstr "Liczba znaków na panelu" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "" - -#: prefs.js:232 -msgid "Icon" -msgstr "Ikona" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "Zawartość schowka" - -#: prefs.js:234 -msgid "Both" -msgstr "Ikona oraz zawartość schowka" - -#~ msgid "Disable cache file" -#~ msgstr "Nie zapisuj do pliku pamięci podręcznej " - -#, fuzzy -#~| msgid "Clipboard Content" -#~ msgid "Icon + Clipboard Content" -#~ msgstr "Zawartość schowka" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pt_BR/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pt_BR/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 7a229c08a002442728f98adc9811800204220b36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1717 zcmZ{k$!{D*6o(5iO9sLcc8Q1wLSP?yGGj*&#yG-Tz~E(M4}=RsHQjHfD|B~ts%pH1 zI|uGj&K3tG5GMl%E`a8Y$X@^w2PCdsI3e+S-Q!qMpwu;Ach%dg-u!xI>bk;s9P>HM zZ!phduHS_pj32?%;7{PQ;4h%a{s}$={sW!?8+R-940sl7fUknjgNvZ(Y4Bn26HxR% z1D^zMfDeFQgCh4G_!xK-d<6U*dTA;k5XU3=L?|7{XC^q1pWrT44%HXwtF6w zxZVM$!4JVl!B4?gz#E{*|1eqq1C+S_1|{yP`)dC$fiL3wJop578I=4oQ0lY?iu`pD zVO2xyh;JDWVv4-fQ1X}B9S_M{22`uqBwwUa4WxU=KxpcIOv(EcCQ6{xa>m+GYJ9Nn z0AHr;TkVqL6^dn_6SZth!wCh8m5GdcyVjx|bB)!zd{Arp)VdIlf>#@QpJE-SOaqfK zd5F>U$Nd?#$@_u02=KT$%KPld4k%8w({W(u$rNx@QeQjOb-ZhMuku0DCo(hjjve`l zp{_H#IxyunVYSTz$3CUC0`_)wM$@^UQ9B%hDTZF{q;`)A8_dAOIv86Jp4gTLswa`{ znJl9|Q_7B2&klzOJ|K∋?Obl=Y6(!lO8G+H5w}TG15sFrjONVA#?bo7qJ8Hd7t+`GMFLSL{V_o|Y z^_(tzrg3Z?S}{Ddv`yH41`RcelhlTfgm!booy zzzlK9u>39KZ^3$)bGI6>cIa*2A*u0EX|&p^u9_wGLA&uGX=JSy`_8z!30KU}px0%& Yu6D^D?_N9U#Vxuzl0Slpn>(`p7aXqP7ytkO diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pt_BR/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pt_BR/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index af07b71..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/pt_BR/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,146 +0,0 @@ -# Brazilian Portuguese translation for gnome-shell-extension-clipboard-indicator. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# Diego R Lima , 2017. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2017-11-09 03:01-0300\n" -"Last-Translator: Diego R Lima \n" -"Language-Team: \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.0.3\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Poedit-Basepath: ../../..\n" -"X-Poedit-SearchPath-0: prefs.js\n" -"X-Poedit-SearchPath-1: extension.js\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "O texto estará aqui" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "Digite aqui para pesquisar..." - -#: extension.js:198 -msgid "Private mode" -msgstr "Modo privado" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Apagar histórico" - -#: extension.js:210 -msgid "Settings" -msgstr "Configurações" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "Histórico da área de transferência apagado" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Copiado para a área de transferência" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Abrir menu" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Entrada anterior" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Próxima entrada" - -#: prefs.js:120 -msgid "History Size" -msgstr "Tamanho do histórico" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Intervalo de atualização (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Tamanho da visualização (caracteres)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Tamanho máximo do arquivo de cache (kb)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Mostrar notificação sobre cópia" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Atalhos do teclado" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "Número de caracteres na barra superior" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "O que mostrar na barra superior" - -#: prefs.js:170 -#, fuzzy -msgid "Remove down arrow in top bar" -msgstr "Número de caracteres na barra superior" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "" - -#: prefs.js:232 -msgid "Icon" -msgstr "" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "" - -#: prefs.js:234 -msgid "Both" -msgstr "" - -#~ msgid "Disable cache file" -#~ msgstr "Desabilitar arquivo de cache" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ru/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/ru/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 74113e1978222ca51319a3ff63b391318c36d5f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1513 zcmZvZ+ix316vhWqZl-_~gt)5*2`U>{vo>iPIdMRQ79vQA5`!wJNC*L?LcBW`X9}v&X{sVpK6aNL@S?22>*Wgj`S8y2YfX{$`fEn;E$ojv)$HAfd2l`>~ zDeRAd4}&K_)=hxy;T(7YF*WcQ_Vfo>dp9s5r~_In8&0lx>i{+}Sqrk>dEqnHn2^5AzOoq(mZ7eG4LFT&FCAil7A zFdo5*`*1KO1L;Im^JA@|mY59u#=LT(>i!A2d@rkFQZ;;8C9QC>rxEWDqG-;)AjJo= zHHeIBD$;IK$70$!Pp;$EBrW)Xq!=>Fem(-peakY%% z+~7tv;{&0;=x9lGRh42^E<`e}(NqZSq7zWIj)*y_wI6!1n5(HJ3YGR3eAm&w3JE_~ zHCm#gJP%ehJk@2`L=p9wbhR~AwLU>rNK2HNl?^<>nvOlcYQ59+VymKXJoAw?3$rY; z-i4JC745<)t6*EjlT;Wfjf}o#pR(=Dhfb`mO5}ub;GnA|s@8pv#_`pW-^zPZ2Jzco z-SLCGtLhWbhhEe1q*akl9d-8iC5oDv>8a_{ht>*tJ2R>9=nxfJ4Oq}<CjbG^ru9l^S;i^1kK0^tTQUA$0Z6I={7FEIYxtJIUAPC z1$v8Y!u2Z!d!k&VUXm7KdEMv7U%y;SCV7ozPGx;L<(rn?jO=dTZy==D3 zj%f>X!}QFqxr4Z6uw&Xd-X+udN0cx>Rmj_vMfhfpP4(gLH`rcJE}M3OH{61rU9Kc+ z!d%0Bm;DnzG, 2017. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2017-10-26 14:48+0700\n" -"Last-Translator: dmig \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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 2.0.1\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "" - -#: extension.js:198 -msgid "Private mode" -msgstr "Приватный режим" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Очистить историю" - -#: extension.js:210 -msgid "Settings" -msgstr "Настройки" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "История буфера очищена" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Скопировано в буфер" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Показать меню" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Предыдущая запись" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Следующая запись" - -#: prefs.js:120 -msgid "History Size" -msgstr "Размер истории" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Интервал обновления (мс)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Длина строки в меню (символов)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Максимальный размер кэша (кб)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Уведомление при копировании" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Горячие клавиши" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "" - -#: prefs.js:170 -msgid "Remove down arrow in top bar" -msgstr "" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "" - -#: prefs.js:232 -msgid "Icon" -msgstr "" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "" - -#: prefs.js:234 -msgid "Both" -msgstr "" - -#~ msgid "Disable cache file" -#~ msgstr "Отключить кэш" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/sk/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/sk/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 257621bfc01ab7f70680ebe9df2abe63a0e4baa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2157 zcmZ{k&2Jk;7{&)EUjYh~@>vkCpj3(I8aqL>xJ^M#TN*+VlbC>dLF3)AcjMie)y(du z_6Z~oAkhm_FZ2|N9+0Rwph_sB5y;7r3s(>aBvc{6p8(={*KX5Ru+sYH`Fh{yeP(uk z-Lvbw!1EN|r}6%Y_XWJ)-G(1LjoXFT1-=dL1y{hkz%KXzXu*fU55OnE&%j5(ufY4k z??GPwBe)0r348+l9o!H81CD{u-yy`aUy zS;x=dgWzA_W8mN5JLkUfVeLp+ zKCrZW?!_;A#?O6t`8{pg(Fv;#+FnHo4tA0 zi30C<-f>>jpu4f?Ex`+(pv%eGHiOsrBkWQ!a7yP8gXuA?42?;adpyZ*>uxWM`-wWdR$LW*XT8> z5{8dWPtt({q>oO&jIJ8GCMS;U1YR!prh(92wN9y3ZC6=!|2bZ(6ZTzccAn>m#a0v) zN}MoM^sFiLV7yDI>R`i{*QQF*Fk9zTMwrqy1r>x# zMw^6CdC<+pPBrj3+}e~uPUFRJwjY+)K;Vai^`I|riMu@5=vtHL!4, 2019 -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2019-10-16 23:03+0200\n" -"Last-Translator: Jose Riha \n" -"Language-Team: \n" -"Language: sk_SK\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" -"X-Poedit-Basepath: .\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n>=2 && n<=4 ? 1 : 2);\n" -"X-Poedit-SearchPath-0: prefs.js\n" -"X-Poedit-SearchPath-1: extension.js\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "Tu bude text" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "Kliknite sem pre vyhľadávanie..." - -#: extension.js:198 -msgid "Private mode" -msgstr "Súkromný režim" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Vymazanie histórie" - -#: extension.js:210 -msgid "Settings" -msgstr "Nastavenia" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "Zrušiť" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "História schránky vymazaná" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Skopírované do schránky" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Prepnutie ponuky" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Predchádzajúca položka" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Nasledujúca položka" - -#: prefs.js:120 -msgid "History Size" -msgstr "Veľkosť histórie" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Interval obnovovania (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Veľkosť náhľadu (v znakoch)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "Maximálna veľkosť súboru vyrovnávacej pamäte (kb)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "Do vyrovnávacej pamäte ukladať len obľúbené" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Zobraziť upozornenie pri kopírovaní" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "Po výbere presunúť položku na začiatok zoznamu" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Klávesové skratky" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "Počet znakov v hornom riadku" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "Čo zobraziť v hornom riadku" - -#: prefs.js:170 -#, fuzzy -msgid "Remove down arrow in top bar" -msgstr "Počet znakov v hornom riadku" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "Odstraňovať medzery pred a za textom" - -#: prefs.js:232 -msgid "Icon" -msgstr "Ikona" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "Obsah schránky" - -#: prefs.js:234 -msgid "Both" -msgstr "Obidve" - -#~ msgid "Enable Deletion" -#~ msgstr "Povoliť mazanie" - -#~ msgid "Disable cache file" -#~ msgstr "Zakázať súbor vyrovnávacej pamäte" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/tr/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/tr/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index e9b5a75288583cc9540ed83422c5c44b9e514d95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1282 zcmaiyPj4GV7{&)${+R%3Q28T}@**yYs!i>rK;@8%HY90e3{h;V_Bh^sy&iUV#+sQ; zy8RR&0Y`E|a5V=`Ibrw0hp4!6;lL;08E@)HTsrdjw=?fE`#$fx^JMw*4+7&2%=atzQPOV!Z;s z41NR#-7PS9xDSRLBk&5=e_g8M|AHaU(&bvW0=|Xyb#MjT1B1^Y_#Wub*WZG#VEq#q z^85uC%dj0{CcJ3+oeHAn4!U%ODEMRG#1DKEC_l5K47eQEDjF2<*VKH`c zmX=1!d1EWFldJK-NSi#}p*X}j5j$qAI3aJabFLA0>r>QIk63iLs!zI+u|6)n6J7a` zVi}K^hAL-rkkM*3SQB6JLr<(dG9Fq!R(vvl2d%~4s*L|5CSxzapjM-knfo;j|RrcNkS4!ELEpN2mx2c`C9~V`Yek!^-G&6)cj0+o4jpw54yV-CAHR@jU9t#X*jFKufg4UAXN{L9O-H$M7QddHPGC9-k^0Db%B!#i7)O(*JMkM9m|WqzvCr=29oK$>KQO zF;(eH(V0zhd0a7Nvx$?H$#ZET+tu`7dX_oPX!@fbaE^!iM12o?Mq8OFN|i+(NP?4s zFEsc_8E)8Gh{e26?n9@jqsHO^Yg}y{>CGltKAX%=XOsFe-mavD3(>i-9fCTMG*Ee> ctSTs-{_gO4(Pce7tEOj^@az;_@yd$-0Ku_mO8@`> diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/tr/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/tr/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index 6c226df..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/tr/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,139 +0,0 @@ -# Turkish translation for gnome-shell-extension-clipboard-indicator. -# Copyright (C) 2017-2018, neynefes -# This file is distributed under the same license as the gnome-shell-extension-clipboard-indicator package. -# Hüseyin Karacabey , 2017. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2017-04-30 00:23+0300\n" -"Last-Translator: neynefes - Hüseyin Karacabey \n" -"Language-Team: Turkish \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=2; plural=(n != 1);\n" -"X-Generator: Atom 1.16.0\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "" - -#: extension.js:198 -msgid "Private mode" -msgstr "Gizli Kip" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "Geçmişi temizle" - -#: extension.js:210 -msgid "Settings" -msgstr "Ayarlar" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "Pano geçmişi temizlendi" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "Panoya kopyalandı" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "Menüyü değiştir" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "Önceki girdi" - -#: prefs.js:111 -msgid "Next entry" -msgstr "Sonraki girdi" - -#: prefs.js:120 -msgid "History Size" -msgstr "Geçmiş Boyutu" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "Yenileme Sıklığı (ms)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "Önizleme Boyutu (karakter)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "En Yüksek Önbelek Boyutu (kb)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "Kopyalandığında bildirim göster" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "Kılavye kısayolları" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "" - -#: prefs.js:170 -msgid "Remove down arrow in top bar" -msgstr "" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "" - -#: prefs.js:232 -msgid "Icon" -msgstr "" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "" - -#: prefs.js:234 -msgid "Both" -msgstr "" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/zh_CN/LC_MESSAGES/clipboard-indicator.mo b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/zh_CN/LC_MESSAGES/clipboard-indicator.mo deleted file mode 100644 index 635d70ee333b98eae7223ad469aa683a875c5205..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1650 zcmZvaT}&KR6vwX>zgBIvTGUwMO`jk->ny1T7pVqHl~{0vZEMuT%+B83nRa*XW@Z)& zF%glkYH%AZg-{xSAYfaN5CXKN^i5xU_E8h%&ah9_mnOdXzdPGf6L0p;Z_d5vwKK0L7g0xQ73!N^E11F&^ z3qA;Y_X9z`eW3I|07^YIpv>P?zW)f6{st)hI7q?Iz(>GI@OkhODEs)SeEvHq^%l$L zw?Ua_4<0gqB`E8?3`)N@L7D$(`Tk=Na!X5|%NV)jEaaS@z?O5Cvy}^DAdh0pnMhr7 z#xg(Blor}9&7*9V@DQGI=1*fw4UkAk19uJ5m|>bt4bySC-380cCAelMX(P8>X1VvA zlzpf!BUq9&@|?+%)a5uSN0E1eJha{HW~5o?7I~L-1qmI4+peB>9nzwmrn;sZjHb*C zqYiv&)u}`^X=SHfilPwGn$ISfO?isyhGuKJ%WQ|57OLfFLbFNCW*sK$EES?vJ3iIH z4bMB}L^0d!&|F5dJjqBKOWDjZXft}VJG2a~$~x7gow=@Qr5)04@J?!R*G!qZ=9=81 z_~|^?MdDIfrX=$fq48&T$-jPiaH9(n&dtUZS){jnpdY>x%js zjl3E?So4xvtE!=+n&T>QTeF;uhOZf=9~zpKrYD%yXlR_i(JjqRW?@=fRU>buvznO+ z>pXi1p;kJtrI`|ES{5bm*iqVTeA3t&YH4n1+7TKFtD*A$Ly>()sf+o%lFMkORag38 z4s+{|#g8bpJAP7EirGq&rSl}l9i_Di(+z!~yv;0T2ZCdqB~6#sgw^mt+yti5pgAn3 zxki+RL$OTW)-uWwZfBh+wQ?oXsgKmr;I&?@+X-wheTEo96*Wq8HcL6-lg|I%N1_xh zFiQ?u`Vi4SU;JX8cwQ+`Qt$($(-h(8hIJN3c7QC@df99G$-X|7D{VTIbT^uZs;&k8k+|b?7 z;4TRN@=o~pS%2>2mJ`<_6cH*rNQ4Ty<(Z(&Bv^dZrpH$1&vm=MDw#P7W-2CsW(C;XM^KYC_~nC;!V LF#_j%rIUXFiliJW diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/zh_CN/LC_MESSAGES/clipboard-indicator.po b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/zh_CN/LC_MESSAGES/clipboard-indicator.po deleted file mode 100644 index 3919571..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/locale/zh_CN/LC_MESSAGES/clipboard-indicator.po +++ /dev/null @@ -1,146 +0,0 @@ -# Chinese translations for PACKAGE package. -# Copyright (C) 2015 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# 绿色圣光 , 2015, 2017. -# Zhang WenChao , 2018 -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 20:10+0300\n" -"PO-Revision-Date: 2018-09-06 15:42+0800\n" -"Last-Translator: Zhang WenChao \n" -"Language-Team: \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.0.4\n" -"X-Poedit-Basepath: .\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Poedit-SearchPath-0: prefs.js\n" -"X-Poedit-SearchPath-1: extension.js\n" - -#: extension.js:87 -msgid "Text will be here" -msgstr "文本将在此处" - -#: extension.js:129 -msgid "Type here to search..." -msgstr "点击搜索…" - -#: extension.js:198 -msgid "Private mode" -msgstr "隐私模式" - -#: extension.js:205 prefs.js:107 -msgid "Clear history" -msgstr "清空历史" - -#: extension.js:210 -msgid "Settings" -msgstr "设置" - -#: extension.js:339 -msgid "Clear all?" -msgstr "" - -#: extension.js:340 -msgid "Are you sure you want to delete all clipboard items?" -msgstr "" - -#: extension.js:341 -msgid "This operation cannot be undone." -msgstr "" - -#: extension.js:343 -msgid "Clear" -msgstr "" - -#: extension.js:343 extension.js:492 -msgid "Cancel" -msgstr "" - -#: extension.js:357 -msgid "Clipboard history cleared" -msgstr "剪贴板已清空" - -#: extension.js:491 -msgid "Copied to clipboard" -msgstr "已复制到剪贴板" - -#: prefs.js:105 -msgid "Toggle the menu" -msgstr "切换菜单" - -#: prefs.js:109 -msgid "Previous entry" -msgstr "上一条" - -#: prefs.js:111 -msgid "Next entry" -msgstr "下一条" - -#: prefs.js:120 -msgid "History Size" -msgstr "历史条数" - -#: prefs.js:125 -msgid "Refresh Interval (ms)" -msgstr "刷新间隔(毫秒)" - -#: prefs.js:130 -msgid "Preview Size (characters)" -msgstr "预览大小(字符)" - -#: prefs.js:135 -msgid "Max cache file size (kb)" -msgstr "最大缓存文件大小(kb)" - -#: prefs.js:140 -msgid "Cache only favorites" -msgstr "" - -#: prefs.js:145 -msgid "Show notification on copy" -msgstr "复制时显示通知" - -#: prefs.js:150 -msgid "Move item to the top after selection" -msgstr "" - -#: prefs.js:155 -msgid "Keyboard shortcuts" -msgstr "键盘快捷键" - -#: prefs.js:160 -msgid "Number of characters in top bar" -msgstr "顶栏显示的字符数量" - -#: prefs.js:165 -msgid "What to show in top bar" -msgstr "如何在顶栏显示" - -#: prefs.js:170 -#, fuzzy -msgid "Remove down arrow in top bar" -msgstr "顶栏显示的字符数量" - -#: prefs.js:175 -msgid "Remove whitespace around text" -msgstr "" - -#: prefs.js:232 -msgid "Icon" -msgstr "图标" - -#: prefs.js:233 -msgid "Clipboard Content" -msgstr "剪贴板内容" - -#: prefs.js:234 -msgid "Both" -msgstr "全部" - -#~ msgid "Disable cache file" -#~ msgstr "关闭文件缓存" diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/metadata.json b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/metadata.json deleted file mode 100644 index 410d4b2..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/metadata.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "_generated": "Generated by SweetTooth, do not edit", - "description": "Clipboard Manager extension for Gnome-Shell - Adds a clipboard indicator to the top panel, and caches clipboard history.", - "name": "Clipboard Indicator", - "shell-version": [ - "3.38" - ], - "url": "https://github.com/Tudmotu/gnome-shell-extension-clipboard-indicator", - "uuid": "clipboard-indicator@tudmotu.com", - "version": 37 -} \ No newline at end of file diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/prefs.js b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/prefs.js deleted file mode 100644 index ec7fd0d..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/prefs.js +++ /dev/null @@ -1,343 +0,0 @@ -const GObject = imports.gi.GObject; -const Gtk = imports.gi.Gtk; -const Gio = imports.gi.Gio; -const Lang = imports.lang; -const Extension = imports.misc.extensionUtils.getCurrentExtension(); -const Utils = Extension.imports.utils; -const prettyPrint = Utils.prettyPrint; - -const Gettext = imports.gettext; -const _ = Gettext.domain('clipboard-indicator').gettext; - -var Fields = { - INTERVAL : 'refresh-interval', - HISTORY_SIZE : 'history-size', - PREVIEW_SIZE : 'preview-size', - CACHE_FILE_SIZE : 'cache-size', - CACHE_ONLY_FAVORITE : 'cache-only-favorites', - DELETE : 'enable-deletion', - NOTIFY_ON_COPY : 'notify-on-copy', - MOVE_ITEM_FIRST : 'move-item-first', - ENABLE_KEYBINDING : 'enable-keybindings', - TOPBAR_PREVIEW_SIZE : 'topbar-preview-size', - TOPBAR_DISPLAY_MODE_ID : 'display-mode', - DISABLE_DOWN_ARROW : 'disable-down-arrow', - STRIP_TEXT : 'strip-text' -}; - -const SCHEMA_NAME = 'org.gnome.shell.extensions.clipboard-indicator'; - -const getSchema = function () { - let schemaDir = Extension.dir.get_child('schemas').get_path(); - let schemaSource = Gio.SettingsSchemaSource.new_from_directory(schemaDir, Gio.SettingsSchemaSource.get_default(), false); - let schema = schemaSource.lookup(SCHEMA_NAME, false); - - return new Gio.Settings({ settings_schema: schema }); -}; - -var SettingsSchema = getSchema(); - - -function init() { - let localeDir = Extension.dir.get_child('locale'); - if (localeDir.query_exists(null)) - Gettext.bindtextdomain('clipboard-indicator', localeDir.get_path()); -} - -const App = new Lang.Class({ - Name: 'ClipboardIndicator.App', - _init: function() { - this.main = new Gtk.Grid({ - margin: 10, - row_spacing: 12, - column_spacing: 18, - column_homogeneous: false, - row_homogeneous: false - }); - this.field_interval = new Gtk.SpinButton({ - adjustment: new Gtk.Adjustment({ - lower: 500, - upper: 5000, - step_increment: 100 - }) - }); - this.field_size = new Gtk.SpinButton({ - adjustment: new Gtk.Adjustment({ - lower: 1, - upper: 200, - step_increment: 1 - }) - }); - this.field_preview_size = new Gtk.SpinButton({ - adjustment: new Gtk.Adjustment({ - lower: 10, - upper: 100, - step_increment: 1 - }) - }); - this.field_cache_size = new Gtk.SpinButton({ - adjustment: new Gtk.Adjustment({ - lower: 512, - upper: Math.pow(2, 14), - step_increment: 1 - }) - }); - this.field_topbar_preview_size = new Gtk.SpinButton({ - adjustment: new Gtk.Adjustment({ - lower: 1, - upper: 100, - step_increment: 1 - }) - }); - this.field_display_mode = new Gtk.ComboBox({ - model: this._create_display_mode_options()}); - - let rendererText = new Gtk.CellRendererText(); - this.field_display_mode.pack_start (rendererText, false); - this.field_display_mode.add_attribute (rendererText, "text", 0); - this.field_disable_down_arrow = new Gtk.Switch(); - this.field_cache_disable = new Gtk.Switch(); - this.field_notification_toggle = new Gtk.Switch(); - this.field_strip_text = new Gtk.Switch(); - this.field_move_item_first = new Gtk.Switch(); - this.field_keybinding = createKeybindingWidget(SettingsSchema); - addKeybinding(this.field_keybinding.model, SettingsSchema, "toggle-menu", - _("Toggle the menu")); - addKeybinding(this.field_keybinding.model, SettingsSchema, "clear-history", - _("Clear history")); - addKeybinding(this.field_keybinding.model, SettingsSchema, "prev-entry", - _("Previous entry")); - addKeybinding(this.field_keybinding.model, SettingsSchema, "next-entry", - _("Next entry")); - - var that = this; - this.field_keybinding_activation = new Gtk.Switch(); - this.field_keybinding_activation.connect("notify::active", function(widget){ - that.field_keybinding.set_sensitive(widget.active); - }); - - let sizeLabel = new Gtk.Label({ - label: _("History Size"), - hexpand: true, - halign: Gtk.Align.START - }); - let intervalLabel = new Gtk.Label({ - label: _("Refresh Interval (ms)"), - hexpand: true, - halign: Gtk.Align.START - }); - let previewLabel = new Gtk.Label({ - label: _("Preview Size (characters)"), - hexpand: true, - halign: Gtk.Align.START - }); - let cacheSizeLabel = new Gtk.Label({ - label: _("Max cache file size (kb)"), - hexpand: true, - halign: Gtk.Align.START - }); - let cacheDisableLabel = new Gtk.Label({ - label: _("Cache only favorites"), - hexpand: true, - halign: Gtk.Align.START - }); - let notificationLabel = new Gtk.Label({ - label: _("Show notification on copy"), - hexpand: true, - halign: Gtk.Align.START - }); - let moveFirstLabel = new Gtk.Label({ - label: _("Move item to the top after selection"), - hexpand: true, - halign: Gtk.Align.START - }); - let keybindingLabel = new Gtk.Label({ - label: _("Keyboard shortcuts"), - hexpand: true, - halign: Gtk.Align.START - }); - let topbarPreviewLabel = new Gtk.Label({ - label: _("Number of characters in top bar"), - hexpand: true, - halign: Gtk.Align.START - }); - let displayModeLabel = new Gtk.Label({ - label: _("What to show in top bar"), - hexpand: true, - halign: Gtk.Align.START - }); - let disableDownArrowLabel = new Gtk.Label({ - label: _("Remove down arrow in top bar"), - hexpand: true, - halign: Gtk.Align.START - }); - let stripTextLabel = new Gtk.Label({ - label: _("Remove whitespace around text"), - hexpand: true, - halign: Gtk.Align.START - }); - - const addRow = ((main) => { - let row = 0; - return (label, input) => { - let inputWidget = input; - - if (input instanceof Gtk.Switch) { - inputWidget = new Gtk.HBox(); - inputWidget.pack_end(input, false, false, 0); - } - - if (label) { - main.attach(label, 0, row, 1, 1); - main.attach(inputWidget, 1, row, 1, 1); - } - else { - main.attach(inputWidget, 0, row, 2, 1); - } - - row++; - }; - })(this.main); - - addRow(sizeLabel, this.field_size); - addRow(previewLabel, this.field_preview_size); - addRow(intervalLabel, this.field_interval); - addRow(cacheSizeLabel, this.field_cache_size); - addRow(cacheDisableLabel, this.field_cache_disable); - addRow(notificationLabel, this.field_notification_toggle); - addRow(displayModeLabel, this.field_display_mode); - addRow(disableDownArrowLabel, this.field_disable_down_arrow); - addRow(topbarPreviewLabel, this.field_topbar_preview_size); - addRow(stripTextLabel, this.field_strip_text); - addRow(moveFirstLabel, this.field_move_item_first); - addRow(keybindingLabel, this.field_keybinding_activation); - addRow(null, this.field_keybinding); - - SettingsSchema.bind(Fields.INTERVAL, this.field_interval, 'value', Gio.SettingsBindFlags.DEFAULT); - SettingsSchema.bind(Fields.HISTORY_SIZE, this.field_size, 'value', Gio.SettingsBindFlags.DEFAULT); - SettingsSchema.bind(Fields.PREVIEW_SIZE, this.field_preview_size, 'value', Gio.SettingsBindFlags.DEFAULT); - SettingsSchema.bind(Fields.CACHE_FILE_SIZE, this.field_cache_size, 'value', Gio.SettingsBindFlags.DEFAULT); - SettingsSchema.bind(Fields.CACHE_ONLY_FAVORITE, this.field_cache_disable, 'active', Gio.SettingsBindFlags.DEFAULT); - SettingsSchema.bind(Fields.NOTIFY_ON_COPY, this.field_notification_toggle, 'active', Gio.SettingsBindFlags.DEFAULT); - SettingsSchema.bind(Fields.MOVE_ITEM_FIRST, this.field_move_item_first, 'active', Gio.SettingsBindFlags.DEFAULT); - SettingsSchema.bind(Fields.TOPBAR_DISPLAY_MODE_ID, this.field_display_mode, 'active', Gio.SettingsBindFlags.DEFAULT); - SettingsSchema.bind(Fields.DISABLE_DOWN_ARROW, this.field_disable_down_arrow, 'active', Gio.SettingsBindFlags.DEFAULT); - SettingsSchema.bind(Fields.TOPBAR_PREVIEW_SIZE, this.field_topbar_preview_size, 'value', Gio.SettingsBindFlags.DEFAULT); - SettingsSchema.bind(Fields.STRIP_TEXT, this.field_strip_text, 'active', Gio.SettingsBindFlags.DEFAULT); - SettingsSchema.bind(Fields.ENABLE_KEYBINDING, this.field_keybinding_activation, 'active', Gio.SettingsBindFlags.DEFAULT); - - this.main.show_all(); - }, - _create_display_mode_options : function(){ - let options = [{ name: _("Icon") }, - { name: _("Clipboard Content"),}, - { name: _("Both")}]; - let liststore = new Gtk.ListStore(); - liststore.set_column_types([GObject.TYPE_STRING]) - for (let i = 0; i < options.length; i++ ) { - let option = options[i]; - let iter = liststore.append(); - liststore.set (iter, [0], [option.name]); - } - return liststore; - } -}); - -function buildPrefsWidget(){ - let widget = new App(); - return widget.main; -} - - -//binding widgets -////////////////////////////////// -const COLUMN_ID = 0; -const COLUMN_DESCRIPTION = 1; -const COLUMN_KEY = 2; -const COLUMN_MODS = 3; - - -function addKeybinding(model, settings, id, description) { - // Get the current accelerator. - let accelerator = settings.get_strv(id)[0]; - let key, mods; - if (accelerator == null) - [key, mods] = [0, 0]; - else - [key, mods] = Gtk.accelerator_parse(settings.get_strv(id)[0]); - - // Add a row for the keybinding. - let row = model.insert(100); // Erm... - model.set(row, - [COLUMN_ID, COLUMN_DESCRIPTION, COLUMN_KEY, COLUMN_MODS], - [id, description, key, mods]); -} - -function createKeybindingWidget(SettingsSchema) { - let model = new Gtk.ListStore(); - - model.set_column_types( - [GObject.TYPE_STRING, // COLUMN_ID - GObject.TYPE_STRING, // COLUMN_DESCRIPTION - GObject.TYPE_INT, // COLUMN_KEY - GObject.TYPE_INT]); // COLUMN_MODS - - let treeView = new Gtk.TreeView(); - treeView.model = model; - treeView.headers_visible = false; - - let column, renderer; - - // Description column. - renderer = new Gtk.CellRendererText(); - - column = new Gtk.TreeViewColumn(); - column.expand = true; - column.pack_start(renderer, true); - column.add_attribute(renderer, "text", COLUMN_DESCRIPTION); - - treeView.append_column(column); - - // Key binding column. - renderer = new Gtk.CellRendererAccel(); - renderer.accel_mode = Gtk.CellRendererAccelMode.GTK; - renderer.editable = true; - - renderer.connect("accel-edited", - function (renderer, path, key, mods, hwCode) { - let [ok, iter] = model.get_iter_from_string(path); - if(!ok) - return; - - // Update the UI. - model.set(iter, [COLUMN_KEY, COLUMN_MODS], [key, mods]); - - // Update the stored setting. - let id = model.get_value(iter, COLUMN_ID); - let accelString = Gtk.accelerator_name(key, mods); - SettingsSchema.set_strv(id, [accelString]); - }); - - renderer.connect("accel-cleared", - function (renderer, path) { - let [ok, iter] = model.get_iter_from_string(path); - if(!ok) - return; - - // Update the UI. - model.set(iter, [COLUMN_KEY, COLUMN_MODS], [0, 0]); - - // Update the stored setting. - let id = model.get_value(iter, COLUMN_ID); - SettingsSchema.set_strv(id, []); - }); - - column = new Gtk.TreeViewColumn(); - column.pack_end(renderer, false); - column.add_attribute(renderer, "accel-key", COLUMN_KEY); - column.add_attribute(renderer, "accel-mods", COLUMN_MODS); - - treeView.append_column(column); - - return treeView; -} diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/schemas/gschemas.compiled b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/schemas/gschemas.compiled deleted file mode 100644 index 5da7ba97d60c743a1f4901783ee5833ee1889aee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1363 zcmZuxO=uHA7@gXt)&6K}6$*lQQ8tH3T199@R4Axm4?gk|M<88sa# zKh(w#GkH%3Ipf-b)P6zd-N;xh5W*RZsky!#nn(d#fo+@6jo-aMUxMx6{saSH;=tf~BQtr4^Qjr{H26MHySzL> zpL!?!S@2Wf`QYRS`qcF2z^?$ebKoj{YM#3Y{tCRV?l<(Qd*H8uyYQgn$G@!7r{?@2 zume2neDa1qHSaSDo&>BaS{0U2E|Ib|*IPlnESaAuwA(BiM>`Ei>vTF@H8mx5q^h#0 zZMa_9PA*;0Vc@w9Sv3WPC9SVndP3mIH}2z`NEaK@_%d&TxX9xL*eCDi%L)TtLl)hd zu{bPjZ6-MGDc8!f4pG+0!lUDn^^Tn!8Ah~@8>W#4ymPa*S-(8H3t$birrAHNUxbMj z%ysi)AF#&R3(9wMo{|OSsR&&aPiW)$VPth6BlH_Q{EkeJ!-WE?YFgE0sIMsQ$+&q= z0oaf~PLs-y;;XmrJ(Aoz6Sz?s)3a#qY~0-0xVf``n>+iT=FSQcCi#euk7IA0KmYIf zc%^1srtVAET2tpZ<46Los78)|8-6Lo{h9ChJs6e{NNoI`Oy~(NTd#}AluAffRrymw jByo))k$esx*I$nrt6JkD2a~ur=8ofg0iMG=Zpz;urJEAa diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/schemas/org.gnome.shell.extensions.clipboard-indicator.gschema.xml b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/schemas/org.gnome.shell.extensions.clipboard-indicator.gschema.xml deleted file mode 100644 index c09c940..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/schemas/org.gnome.shell.extensions.clipboard-indicator.gschema.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - - - true -

Enable the deletion of clipboard items from your history - - If true, displays 'delete' buttons on each item, and a 'Clear History' option - - - - - 1000 - The interval between updates in miliseconds - The interval between updates in miliseconds - - - - - 15 - The number of items to save in history - - - - - - 0 - What to display in top bar - - - - - false - Remove down arrow in top bar - - - - 30 - Amount of visible characters for clipboard items - - The number of characters to display for every clipboard item in - the history menu - - - - - - 10 - Amount of visible characters in topbar - - The number of characters to display for current clipboard item in the topbar - - - - - - 1024 - The allowed size for the registry cache file - - If the cache overflows this limit, the file will be overriden. - High limit might cause slowness of shell startup. - - - - - - false - Disable the registry cache file for favorites and use memory only - - Contents which are not favorites are not stored and retrieved from a cache (registry.txt) file. - This can avoid writing passwords to a plaintext file, but at the cost of persistant history. - Your clipboard history, except favorite items, is lost after a gnome-shell session ends or the extension is reloaded. - - - - - false - Show notification on copy to clipboard - - If true, a notification is shown when content is copied to clipboard. - - - - false - Remove whitespace around text - - If true, white spaces around text will be removed. - - - - false - Move items to the top of the list when selected. - - If true, move items to the top of the list when it is selected. - - - - - true - Enable the keyboard shortcuts - - If true, user can delete and cycle through the history with keyboard shortcuts - - - - F10']]]> - Key to clear the history - - - - - F11']]]> - Key to cycle to the previous entry in the clipboard - - - - - F12']]]> - Next entry - - Key to cycle to the next entry in the clipboard - - - - F9']]]> - Toggle the menu - - Key to toggle the clipboard menu - - - - diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/stylesheet.css b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/stylesheet.css deleted file mode 100644 index 580b42b..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/stylesheet.css +++ /dev/null @@ -1,21 +0,0 @@ -.clipboard-indicator-icon.private-mode { - color: rgba(255,255,255,0.3); -} - -.ci-notification-label { - font-weight: bold; - color: #ffffff; - background-color: rgba(10,10,10,0.7); - border-radius: 6px; - font-size:2em; - padding:.5em; - width:400px; -} - -.popup-menu-item .ci-action-btn StIcon { - icon-size:16px; -} - -.ci-history-menu-section { - max-height:450px; -} diff --git a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/utils.js b/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/utils.js deleted file mode 100644 index 3a95b73..0000000 --- a/zorin/.local/share/gnome-shell/extensions/clipboard-indicator@tudmotu.com/utils.js +++ /dev/null @@ -1,134 +0,0 @@ -const GLib = imports.gi.GLib; -const Gio = imports.gi.Gio; -const FileQueryInfoFlags = imports.gi.Gio.FileQueryInfoFlags; -const FileCopyFlags = imports.gi.Gio.FileCopyFlags; -const FileTest = GLib.FileTest; - -const ExtensionUtils = imports.misc.extensionUtils; -const Me = ExtensionUtils.getCurrentExtension(); -const Prefs = Me.imports.prefs; -const SettingsSchema = Prefs.SettingsSchema; - -const REGISTRY_DIR = GLib.get_user_cache_dir() + '/' + Me.uuid; -const REGISTRY_FILE = 'registry.txt'; -const REGISTRY_PATH = REGISTRY_DIR + '/' + REGISTRY_FILE; -const BACKUP_REGISTRY_PATH = REGISTRY_PATH + '~'; - -// Print objects... why no dev tools -function prettyPrint (name, obj, recurse, _indent) { - let prefix = ''; - let indent = typeof _indent === 'number' ? _indent : 0; - for (let i = 0; i < indent; i++) { - prefix += ' '; - } - - recurse = typeof recurse === 'boolean' ? recurse : true; - if (typeof name !== 'string') { - obj = arguments[0]; - recurse = arguments[1]; - _indent = arguments[2]; - name = obj.toString(); - } - - log(prefix + '--------------'); - log(prefix + name); - log(prefix + '--------------'); - for (let k in obj) { - if (typeof obj[k] === 'object' && recurse) { - prettyPrint(name + '::' + k, obj[k], true, indent + 1); - } - else { - log(prefix + k, typeof obj[k] === 'function' ? '[Func]' : obj[k]); - } - } -} - -// I/O Files -function writeRegistry (registry) { - let json = JSON.stringify(registry); - let contents = new GLib.Bytes(json); - - // Make sure dir exists - GLib.mkdir_with_parents(REGISTRY_DIR, parseInt('0775', 8)); - - // Write contents to file asynchronously - let file = Gio.file_new_for_path(REGISTRY_PATH); - file.replace_async(null, false, Gio.FileCreateFlags.NONE, - GLib.PRIORITY_DEFAULT, null, function (obj, res) { - - let stream = obj.replace_finish(res); - - stream.write_bytes_async(contents, GLib.PRIORITY_DEFAULT, - null, function (w_obj, w_res) { - - w_obj.write_bytes_finish(w_res); - stream.close(null); - }); - }); -} - -function readRegistry (callback) { - if (typeof callback !== 'function') - throw TypeError('`callback` must be a function'); - - if (GLib.file_test(REGISTRY_PATH, FileTest.EXISTS)) { - let file = Gio.file_new_for_path(REGISTRY_PATH); - let CACHE_FILE_SIZE = SettingsSchema.get_int(Prefs.Fields.CACHE_FILE_SIZE); - - file.query_info_async('*', FileQueryInfoFlags.NONE, - GLib.PRIORITY_DEFAULT, null, function (src, res) { - // Check if file size is larger than CACHE_FILE_SIZE - // If so, make a backup of file, and invoke callback with empty array - let file_info = src.query_info_finish(res); - - if (file_info.get_size() >= CACHE_FILE_SIZE * 1024) { - let destination = Gio.file_new_for_path(BACKUP_REGISTRY_PATH); - - file.move(destination, FileCopyFlags.OVERWRITE, null, null); - callback([]); - return; - } - - file.load_contents_async(null, function (obj, res) { - let registry; - let [success, contents] = obj.load_contents_finish(res); - - if (success) { - try { - let max_size = SettingsSchema.get_int(Prefs.Fields.HISTORY_SIZE); - - // are we running gnome 3.30 or higher? - if (contents instanceof Uint8Array) { - contents = imports.byteArray.toString(contents); - } - - registry = JSON.parse(contents); - - let registryNoFavorite = registry.filter( - item => item['favorite'] === false); - - while (registryNoFavorite.length > max_size) { - let oldestNoFavorite = registryNoFavorite.shift(); - let itemIdx = registry.indexOf(oldestNoFavorite); - registry.splice(itemIdx,1); - - registryNoFavorite = registry.filter( - item => item["favorite"] === false); - } - } - catch (e) { - registry = []; - } - } - else { - registry = []; - } - - callback(registry); - }); - }); - } - else { - callback([]); - } -} diff --git a/zorin/.local/share/gnome-shell/notifications b/zorin/.local/share/gnome-shell/notifications index a43b62ec33ed82c07bdf396546cb0d31425f38b5..7d8dc654e1d8dfe3ec764915c2fb6884374ad7f9 100644 GIT binary patch literal 4033 zcmeHK&5Inz6|a$4N!}1_#n^_NUJ|5egSJ1Xd#3kbNF?DHtPiBM;y3|QU0pNXYCK*EFgXNroE&U0J_P&^J76f!yD9dxoC_WKOg=%|I?GDkE_j>JsZkk=aEONaFY0mX5I-Ag} zXvVZm^lK{ziot@imE}>IN3!-+*%N7=&={xOr@qvA6JAJ~WX&g8n!BNnPsrK%Z<2H5 zZSp?(Qj5^%iox@{RCg9;g+v?bT|KjS&HCXCEvDxTnn*SCX7M`7X)sjriD@ZVxOwDz z^)tKW=hqJV=Nk|2+t=D?eYM^&&HGwkqzTtfg*=Y6BWEQSD(QvxGzLT*N`>G|67Kjt zyW8spmg#jY-y0btmL?jDWaLw^q9v)18PEn|WOf{tvK8^ zv;`+8@-#^mHVW7eC-P{3R{OkIg2UwyL|9$=+c^n_rQ@GvSnY%G*yEG6OGiQU=@2Z# z&}E{Z1Ij;8@{#N!RrdQ=?0CD;51n>Kdag==X}BJum%vhVw_rgRLL6e%%^RasHSB z(8u5+ruj-yMv`mw?`RQIW4Ue9v)z#><5U!L3 z_j*>(H<}HmgmJHN?EY>ujt?CF)89XA3h~j8iysw1o<@O|B*ndim(_V@JNf1Xdg5<{TKocQA%5g+W>(kaCE*V&MpEV_#hY$es{H zsxwS!R96uTBdm%<{lvI9pe0&VGjhaaT{C?RPL~nH>boc*D6y>zQlg1a%B(;ruO!+) zCaK^3gu=w(9?rS2pYU zVe$@fTPIuD&Y$gU%G$m&?^C_(QO5l=UD48Mqhs3j zw~4T}P1|x@6Bk&vRR?g!n@91A#zmj!b@Xo4{}a_^gzf3-CM;K%k|jX&Tq=S6^$M2e zV6t{~2pl$6BTW<44Ol;qoPc_%-WhW36|CaP_=3bDt}fy&1Z8plXhaqM6G*TWP>R>j zC&&N?2TJA`^s7Hijib)Kj7o}XOf?oNCP*SkuyAC!aeXp=6+6~1FtB6}gLwWVIx{{8 zD-dj4ulrSHy{PD;x`=n5QvCbX-(F_87VY=442s`*)_WzqX{Rs(6*-m;8vKCU6P-biZj2! z+JDE|9C?r|kngqjlYK<-HZo1|{K7ZL-ueq!{9(+`c0F1StE()W7CVlABrg7E{rP{; z)99`sH9beRO}D;b9>(U9NUk(S9|w;@=v@^PgO?UhqvlX u^~R>oJVbtg|F-?BwQI+_JO45F;asCNKO_(BcxtD<`{gemARn~ey#GI3Nf`o-_Ew-H)DN%T1k0gQ7Qu%loq5UmZTQzX66-_BXPzPDnU%|l+?VO%(7I4jKpGvq}0?r1&GNhdO*dj3=9QD znfXPTB|x>4tGKmzic?E;bMsSxHWc$u-oPzk4|NBSF9tTbBr`V^=%U;Ls6CUvZGyPC bf=kgaYr^Ks42jjnWwk;-gc;s2GBX1JpYuN{ From fae65d4fec7442da50bb047a2adb93671e56e212 Mon Sep 17 00:00:00 2001 From: Tan Nguyen Date: Fri, 2 Feb 2024 17:40:29 +0700 Subject: [PATCH 2/2] :+1: update configs --- zorin/.config/dconf/user | Bin 41376 -> 42791 bytes .../share/gnome-shell/application_state | 27 +++++++++--------- zorin/.local/share/gnome-shell/notifications | Bin 4033 -> 350 bytes 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/zorin/.config/dconf/user b/zorin/.config/dconf/user index 6c0a2f00105b0891914b8b76078d4cb82b264e44..0f088268eceec8b1026bcadd4df919937931f715 100644 GIT binary patch literal 42791 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 Ee-KvW$N&HU literal 41376 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 aZtM$4%b}6}f7p7@qDPay - + + - - + - - - + + + + - - - + + + + - - + - + - + diff --git a/zorin/.local/share/gnome-shell/notifications b/zorin/.local/share/gnome-shell/notifications index 7d8dc654e1d8dfe3ec764915c2fb6884374ad7f9..382b475effe3a200216159182f80babaac352904 100644 GIT binary patch delta 52 zcmX>oe~)SM2S)qJ?kou`4|lIloV=T5uAKbVJ*f;JP{Ac&zwFRshQ#XPvRXR^14a#o G7)AgTU=hLq literal 4033 zcmeHK&5Inz6|a$4N!}1_#n^_NUJ|5egSJ1Xd#3kbNF?DHtPiBM;y3|QU0pNXYCK*EFgXNroE&U0J_P&^J76f!yD9dxoC_WKOg=%|I?GDkE_j>JsZkk=aEONaFY0mX5I-Ag} zXvVZm^lK{ziot@imE}>IN3!-+*%N7=&={xOr@qvA6JAJ~WX&g8n!BNnPsrK%Z<2H5 zZSp?(Qj5^%iox@{RCg9;g+v?bT|KjS&HCXCEvDxTnn*SCX7M`7X)sjriD@ZVxOwDz z^)tKW=hqJV=Nk|2+t=D?eYM^&&HGwkqzTtfg*=Y6BWEQSD(QvxGzLT*N`>G|67Kjt zyW8spmg#jY-y0btmL?jDWaLw^q9v)18PEn|WOf{tvK8^ zv;`+8@-#^mHVW7eC-P{3R{OkIg2UwyL|9$=+c^n_rQ@GvSnY%G*yEG6OGiQU=@2Z# z&}E{Z1Ij;8@{#N!RrdQ=?0CD;51n>Kdag==X}BJum%vhVw_rgRLL6e%%^RasHSB z(8u5+ruj-yMv`mw?`RQIW4Ue9v)z#><5U!L3 z_j*>(H<}HmgmJHN?EY>ujt?CF)89XA3h~j8iysw1o<@O|B*ndim(_V@JNf1Xdg5<{TKocQA%5g+W>(kaCE*V&MpEV_#hY$es{H zsxwS!R96uTBdm%<{lvI9pe0&VGjhaaT{C?RPL~nH>boc*D6y>zQlg1a%B(;ruO!+) zCaK^3gu=w(9?rS2pYU zVe$@fTPIuD&Y$gU%G$m&?^C_(QO5l=UD48Mqhs3j zw~4T}P1|x@6Bk&vRR?g!n@91A#zmj!b@Xo4{}a_^gzf3-CM;K%k|jX&Tq=S6^$M2e zV6t{~2pl$6BTW<44Ol;qoPc_%-WhW36|CaP_=3bDt}fy&1Z8plXhaqM6G*TWP>R>j zC&&N?2TJA`^s7Hijib)Kj7o}XOf?oNCP*SkuyAC!aeXp=6+6~1FtB6}gLwWVIx{{8 zD-dj4ulrSHy{PD;x`=n5QvCbX-(F_87VY=442s`*)_WzqX{Rs(6*-m;8vKCU6P-biZj2! z+JDE|9C?r|kngqjlYK<-HZo1|{K7ZL-ueq!{9(+`c0F1StE()W7CVlABrg7E{rP{; z)99`sH9beRO}D;b9>(U9NUk(S9|w;@=v@^PgO?UhqvlX u^~R>oJVbtg|F-?BwQI+_JO45F;asCNKO_(BcxtD<`{gemARn~ey#GI3Nf`