From 21fd01aa8200147a75db7cddc9be3f6435903123 Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Tue, 13 Jan 2026 17:20:07 -0500 Subject: [PATCH] [gnome] Update gnome extensions --- .../metadata.json | 5 +- .../Options_UI.glade | 1493 ----------------- .../convenience.js | 84 - .../display_module.js | 38 - .../extension.js | 1037 ------------ .../images/Icon_Info.png | Bin 4260 -> 0 bytes .../images/Icon_Performance.svg | 45 - .../images/Icon_Quality.svg | 45 - .../images/icon_default.svg | 99 -- .../images/icon_defaultSel.svg | 99 -- .../images/icon_recording.svg | 99 -- .../images/icon_recordingSel.svg | 99 -- ...EasyScreenCast@iacopodeenosee.gmail.com.mo | Bin 8718 -> 0 bytes ...EasyScreenCast@iacopodeenosee.gmail.com.mo | Bin 9663 -> 0 bytes ...EasyScreenCast@iacopodeenosee.gmail.com.mo | Bin 7022 -> 0 bytes ...EasyScreenCast@iacopodeenosee.gmail.com.mo | Bin 5999 -> 0 bytes ...EasyScreenCast@iacopodeenosee.gmail.com.mo | Bin 8742 -> 0 bytes ...EasyScreenCast@iacopodeenosee.gmail.com.mo | Bin 7775 -> 0 bytes ...EasyScreenCast@iacopodeenosee.gmail.com.mo | Bin 8787 -> 0 bytes ...EasyScreenCast@iacopodeenosee.gmail.com.mo | Bin 9806 -> 0 bytes ...EasyScreenCast@iacopodeenosee.gmail.com.mo | Bin 6537 -> 0 bytes ...EasyScreenCast@iacopodeenosee.gmail.com.mo | Bin 8481 -> 0 bytes ...EasyScreenCast@iacopodeenosee.gmail.com.mo | Bin 8909 -> 0 bytes ...EasyScreenCast@iacopodeenosee.gmail.com.mo | Bin 9068 -> 0 bytes .../metadata.json | 15 - .../prefs.css | 7 - .../prefs.js | 1184 ------------- .../schemas/gschemas.compiled | Bin 2580 -> 0 bytes ...hell.extensions.easyscreencast.gschema.xml | 200 --- .../selection.js | 508 ------ .../settings.js | 146 -- .../stylesheet.css | 36 - .../timer.js | 257 --- .../utilaudio.js | 319 ---- .../utilexecmd.js | 264 --- .../utilgsp.js | 735 -------- .../utilnotify.js | 145 -- .../utilrecorder.js | 214 --- .../utilwebcam.js | 326 ---- .../locale/fr/LC_MESSAGES/vitals.mo | Bin 7288 -> 12096 bytes .../Vitals@CoreCoding.com/metadata.json | 5 +- .../Vitals@CoreCoding.com/sensors.js | 18 +- .../actions/custom-icons-symbolic.svg | 46 + .../actions/general-preferences-symbolic.svg | 1 + .../ar/LC_MESSAGES/AppIndicatorExtension.mo | Bin 0 -> 2722 bytes .../cs/LC_MESSAGES/AppIndicatorExtension.mo | Bin 2416 -> 2221 bytes .../ka/LC_MESSAGES/AppIndicatorExtension.mo | Bin 0 -> 3640 bytes .../ru/LC_MESSAGES/AppIndicatorExtension.mo | Bin 3067 -> 2727 bytes .../metadata.json | 5 +- .../preferences/customIconPage.js | 240 +++ .../preferences/generalPage.js | 141 ++ .../metadata.json | 6 +- .../blur-my-shell@aunetx/components/panel.js | 50 +- .../af/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 7995 -> 7989 bytes .../ar/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 9330 -> 9972 bytes .../az/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 1202 -> 1203 bytes .../be/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 3494 -> 3499 bytes .../bg/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 15955 -> 16153 bytes .../ca/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 3710 -> 3708 bytes .../cs/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 16628 -> 16877 bytes .../da/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 916 -> 927 bytes .../de/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 17574 -> 17569 bytes .../el/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 10265 -> 15541 bytes .../es/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 17159 -> 17367 bytes .../et/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 2830 -> 2815 bytes .../fi/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 7609 -> 10156 bytes .../fr/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 17284 -> 17531 bytes .../he/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 587 -> 616 bytes .../hi/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 25807 -> 25812 bytes .../hr/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 8687 -> 8690 bytes .../hu/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 8562 -> 8673 bytes .../id/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 8938 -> 10446 bytes .../it/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 17135 -> 17382 bytes .../ja/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 18467 -> 18455 bytes .../ka/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 2635 -> 6964 bytes .../ko/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 14981 -> 14985 bytes .../ml/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 0 -> 547 bytes .../mrh/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 0 -> 400 bytes .../my/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 0 -> 394 bytes .../nb_NO/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 7968 -> 7966 bytes .../nl/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 17057 -> 17331 bytes .../nn/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 1184 -> 1185 bytes .../pl/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 15188 -> 15181 bytes .../pt/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 11824 -> 16592 bytes .../pt_BR/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 14652 -> 14643 bytes .../ro/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 3643 -> 3643 bytes .../ru/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 22123 -> 22437 bytes .../sk/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 0 -> 1083 bytes .../sl/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 11683 -> 11678 bytes .../sv/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 16683 -> 16943 bytes .../ta/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 28316 -> 28773 bytes .../tr/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 17030 -> 17288 bytes .../uk/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 21285 -> 21663 bytes .../vi/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 7239 -> 18415 bytes .../zh_CN/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 15296 -> 15517 bytes .../zh_TW/LC_MESSAGES/blur-my-shell@aunetx.mo | Bin 15245 -> 15248 bytes .../blur-my-shell@aunetx/metadata.json | 5 +- .../forge@jmmaranan.com/config/windows.json | 4 +- .../forge@jmmaranan.com/lib/extension/tree.js | 17 +- .../lib/extension/window.js | 132 +- .../lib/prefs/appearance.js | 5 +- .../forge@jmmaranan.com/lib/prefs/floating.js | 82 + .../forge@jmmaranan.com/lib/prefs/settings.js | 3 +- .../forge@jmmaranan.com/lib/prefs/widgets.js | 71 +- .../lib/shared/settings.js | 17 +- .../locale/es/LC_MESSAGES/forge.mo | Bin 1981 -> 2085 bytes .../locale/fr/LC_MESSAGES/forge.mo | Bin 1600 -> 1501 bytes .../locale/it/LC_MESSAGES/forge.mo | Bin 2092 -> 2070 bytes .../locale/nl/LC_MESSAGES/forge.mo | Bin 997 -> 903 bytes .../locale/pt_BR/LC_MESSAGES/forge.mo | Bin 1392 -> 2615 bytes .../locale/tr/LC_MESSAGES/forge.mo | Bin 0 -> 6557 bytes .../forge@jmmaranan.com/metadata.json | 7 +- .../extensions/forge@jmmaranan.com/prefs.js | 2 + .../schemas/gschemas.compiled | Bin 5280 -> 5360 bytes ...g.gnome.shell.extensions.forge.gschema.xml | 7 +- .../gsconnect@andyholmes.github.io/config.js | 2 +- .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 20573 -> 20573 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 20907 -> 20907 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 23302 -> 25266 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 14189 -> 14189 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 18388 -> 18388 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 12381 -> 12381 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 18198 -> 19703 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 18404 -> 18404 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 15709 -> 15709 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 21329 -> 22518 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 17130 -> 18121 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 18503 -> 18503 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 13880 -> 13880 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 14267 -> 14267 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 19433 -> 19433 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 18745 -> 20310 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 11283 -> 11283 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 17721 -> 19325 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 17085 -> 17085 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 18476 -> 18476 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 19079 -> 19079 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 18331 -> 19880 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 18071 -> 18071 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 22460 -> 24659 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 8802 -> 8802 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 10720 -> 10720 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 16488 -> 16488 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 15512 -> 15548 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 23087 -> 24939 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 16514 -> 16514 bytes .../org.gnome.Shell.Extensions.GSConnect.mo | Bin 16694 -> 16694 bytes .../metadata.json | 5 +- ...gnome.Shell.Extensions.GSConnect.gresource | Bin 60204 -> 60692 bytes .../preferences/device.js | 2 + .../preferences/service.js | 26 +- .../schemas/gschemas.compiled | Bin 5316 -> 5420 bytes ...ome.Shell.Extensions.GSConnect.gschema.xml | 6 + .../service/backends/lan.js | 43 +- .../service/components/contacts.js | 2 +- .../service/components/pulseaudio.js | 13 +- .../service/daemon.js | 42 +- .../service/device.js | 8 + .../service/init.js | 24 +- .../service/manager.js | 25 +- .../service/plugins/mpris.js | 106 +- .../service/plugins/share.js | 35 +- .../service/plugins/systemvolume.js | 17 +- .../utils/exceptions.js | 10 + .../wl_clipboard.js | 4 +- .../impatience@gfxmonk.net/metadata.json | 5 +- .../extension.js | 6 +- .../metadata.json | 5 +- .../screen-rotate@shyzus.github.io/prefs.js | 20 + .../schemas/gschemas.compiled | Bin 1445 -> 1517 bytes ...shell.extensions.screen-rotate.gschema.xml | 4 + .../sensorProxy.js | 6 +- .../CHANGELOG.md | 28 +- .../libs/indicator.js | 105 +- ...ad-battery-threshold@marcosdalvarez.org.mo | Bin 6142 -> 5961 bytes ...ad-battery-threshold@marcosdalvarez.org.mo | Bin 6018 -> 6426 bytes ...ad-battery-threshold@marcosdalvarez.org.mo | Bin 5999 -> 5850 bytes ...ad-battery-threshold@marcosdalvarez.org.mo | Bin 4816 -> 5848 bytes ...ad-battery-threshold@marcosdalvarez.org.mo | Bin 5876 -> 5731 bytes ...ad-battery-threshold@marcosdalvarez.org.mo | Bin 0 -> 344 bytes .../metadata.json | 6 +- 181 files changed, 1145 insertions(+), 7773 deletions(-) delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/Options_UI.glade delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/convenience.js delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/display_module.js delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/extension.js delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/Icon_Info.png delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/Icon_Performance.svg delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/Icon_Quality.svg delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_default.svg delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_defaultSel.svg delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_recording.svg delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_recordingSel.svg delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/ca/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/cs/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/de/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/es/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/fr/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/it/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/ja/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/pt_BR/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/ru/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/uk/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/vi/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/zh/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/metadata.json delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/prefs.css delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/prefs.js delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/schemas/gschemas.compiled delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/schemas/org.gnome.shell.extensions.easyscreencast.gschema.xml delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/selection.js delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/settings.js delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/stylesheet.css delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/timer.js delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilaudio.js delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilexecmd.js delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilgsp.js delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilnotify.js delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilrecorder.js delete mode 100644 gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilwebcam.js create mode 100644 gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/icons/hicolor/scalable/actions/custom-icons-symbolic.svg create mode 100644 gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/icons/hicolor/scalable/actions/general-preferences-symbolic.svg create mode 100644 gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/locale/ar/LC_MESSAGES/AppIndicatorExtension.mo create mode 100644 gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/locale/ka/LC_MESSAGES/AppIndicatorExtension.mo create mode 100644 gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/preferences/customIconPage.js create mode 100644 gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/preferences/generalPage.js create mode 100644 gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/ml/LC_MESSAGES/blur-my-shell@aunetx.mo create mode 100644 gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/mrh/LC_MESSAGES/blur-my-shell@aunetx.mo create mode 100644 gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/my/LC_MESSAGES/blur-my-shell@aunetx.mo create mode 100644 gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/sk/LC_MESSAGES/blur-my-shell@aunetx.mo create mode 100644 gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/floating.js create mode 100644 gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/tr/LC_MESSAGES/forge.mo create mode 100644 gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/utils/exceptions.js create mode 100644 gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/ta/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo diff --git a/gnome/.local/share/gnome-shell/extensions/BingWallpaper@ineffable-gmail.com/metadata.json b/gnome/.local/share/gnome-shell/extensions/BingWallpaper@ineffable-gmail.com/metadata.json index 0350386..fcaf57e 100644 --- a/gnome/.local/share/gnome-shell/extensions/BingWallpaper@ineffable-gmail.com/metadata.json +++ b/gnome/.local/share/gnome-shell/extensions/BingWallpaper@ineffable-gmail.com/metadata.json @@ -8,9 +8,10 @@ "45", "46", "47", - "48" + "48", + "49" ], "url": "https://github.com/neffo/bing-wallpaper-gnome-extension", "uuid": "BingWallpaper@ineffable-gmail.com", - "version": 51 + "version": 52 } \ No newline at end of file diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/Options_UI.glade b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/Options_UI.glade deleted file mode 100644 index 6ee3bb3..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/Options_UI.glade +++ /dev/null @@ -1,1493 +0,0 @@ - - - - - 5 - - - center - stk_Main - - - - - 800 - slide-left-right - - - page0 - Options - - - borderless - - - options-grid - 18 - 15 - - - end - 4 - 1 - Recording status indicators - right - - 0 - 0 - - - - - - end - 1 - Show alerts and notifications - - 0 - 1 - - - - - - 1 - start - 1 - - 1 - 1 - - - - - - end - 1 - Show a border around the area being recorded - - 0 - 2 - - - - - - 1 - start - 1 - - 1 - 2 - - - - - - end - 1 - Enable keyboard shortcut - - 0 - 3 - - - - - - - - 1 - liststore_KeyShortcut - 0 - 0 - - - - - - - 1 - 4 - - - - - - - Both [ESC + Default] - ESC only - Default only - Not any - - - 1 - 0 - - - - - - These words will be replaced - _fpath = the absolute path of the screencast video file. -_dirpath = the absolute path of destination folder for the screencast video file. -_fname = the name of the screencast video file. - end - 1 - Command post-recording - - 0 - 9 - - - - - - 1 - These words will be replaced - _fpath = the absolute path of the screencast video file. -_dirpath = the absolute path of destination folder for the screencast video file. -_fname = the name of the screencast video file. - 1 - - 1 - 9 - - - - - - end - 1 - Execute command after recording - - 0 - 8 - - - - - - 1 - start - 0 - - 1 - 8 - - - - - - 1 - start - 1 - - 1 - 5 - - - - - - end - 1 - Draw cursor on screencast - - 0 - 5 - - - - - - 1 - end - 1 - Active shortcut - - 0 - 4 - - - - - - 1 - start - 1 - - 1 - 3 - - - - - - end - 1 - Execute command before recording - - 0 - 6 - - - - - - 1 - start - 0 - - 1 - 6 - - - - - - These words will be replaced -_dirpath = the absolute path of destination folder for the screencast video file. - end - 1 - Command pre-recording - - 0 - 7 - - - - - - 1 - These words will be replaced -_dirpath = the absolute path of destination folder for the screencast video file. - 1 - - 1 - 7 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - page1 - Quality - - - borderless - - - vertical - - - 18 - 15 - - - end - 1 - Custom GStreamer Pipeline - - 0 - 0 - - - - - - 1 - start - 1 - - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 800 - slide-up-down - - - pg_Preset - PagePreset - - - start - vertical - - - center - border-box - - - start - true - 100 - - - - - end - true - 100 - - - - - - - center - 1 - 1 - 18 - 5 - 0 - 0 - bottom - - - - - center - 1 - No GSP description - - 1 - word-char - end - - - - - - - - - pg_Custom - PageCustom - - - vertical - - - center - 18 - 15 - - - end - 1 - Frames Per Second - - 0 - 0 - - - - - - 1 - start - 1 - 0 - 1 - - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 10 - 0.10000000149011612 - - - 1 - - - 1 - 5 - 5 - 1 - 1 - word-char - 0 - - - - - - - GStreamer Pipeline - - - - - - - center - vertical - - - start - The extension does NOT handle the webcam and audio when you use a custom gstreamer pipeline. - - 1 - - - - - - - - - - - 1 - Official doc - 1 - 1 - http://gstreamer.freedesktop.org/documentation/plugins.html - 1 - - - - - 1 - Wiki #1 - 1 - 1 - http://processors.wiki.ti.com/index.php/Example_GStreamer_Pipelines - - - - - 1 - Wiki #2 - 1 - 1 - http://wiki.oz9aec.net/index.php/Gstreamer_Cheat_Sheet - - - - - - - - - - - - - - - - - - - - - - - - page2 - WebCam - - - borderless - - - vertical - - - center - No webcam device selected - center - - - - - - - - - center - center - 0 - - - center - end - 1 - - - - - - - - center - 1 - stk_Webcam - - - - - 1 - 1 - 800 - slide-up-down - - - pg_quality_webcam - Quality - - - 1 - True - - - 1 - 1 - 1 - liststore_QualityWebCam - 1 - horizontal - - - - - - - - - - - - pg_size_webcam - Size - - - 18 - 15 - - - end - 1 - Type of unit of measure - - 0 - 0 - - - - - - end - 1 - Width - - 0 - 1 - - - - - - end - 1 - Height - - 0 - 2 - - - - - - 1 - start - 1 - 1 - - 1 - 1 - - - - - - 1 - start - 1 - 1 - - 1 - 2 - - - - - - start - 1 - - Percentage - Pixel - - - 1 - 0 - - - - - - - - - - - - - - - - - - - pg_position_webcam - Position - - - 18 - 15 - - - end - 1 - Put the webcam in the corner - - 0 - 0 - - - - - - start - 1 - - Right-Bottom - Left-Bottom - Right-Top - Left-Top - - - 1 - 0 - - - - - - end - 1 - Margin X - - 0 - 1 - - - - - - 1 - start - 1 - 1 - - 1 - 1 - - - - - - end - 1 - Margin Y - - 0 - 2 - - - - - - 1 - start - 0 - 1 - - 1 - 2 - - - - - - end - 1 - Alpha channel - - 0 - 3 - - - - - - 1 - start - 1 - 0,00 - 0.05 - 2 - 1 - - 1 - 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - page3 - File - - - borderless - - - 18 - 15 - - - Select the folder where the file is saved, if not specific a folder the file will be saved in the $XDG_VIDEOS_DIR if it exists, or the home directory otherwise. - end - 1 - Destination folder - - 0 - 3 - - - - - - The filename which may contain some escape sequences - %d and %t will be replaced by the start date and time of the recording. - end - 1 - File name template - - 0 - 2 - - - - - - 1 - 1 - The filename which may contain some escape sequences - %d and %t will be replaced by the start date and time of the recording. - 1 - - 1 - 2 - - - - - - True - False - Select the folder where the file is saved, if not specific a folder the file will be saved in the $XDG_VIDEOS_DIR if it exists, or the home directory otherwise. - - 1 - 3 - - - - - - end - 1 - File container - - 0 - 0 - - - - - - end - 1 - File resolution - - 0 - 1 - - - - - - - WebM [VP8 encoder + vorbis] - WebM [VP9 encoder + vorbis] - MP4 [x264 encoder + mp3] - Mkv [x264 encoder + flac] - Ogg [Theora encoder + opus] - MP4_AAC [x264 encoder + aac] - - - 1 - 0 - - - - - - vertical - - - 1 - center - 1 - stk_FileResolution - - - - - 10 - 0 - 800 - slide-up-down - 1 - - - native - Native - - - Native area resolution - - - - - - - - - - preset - Preset - - - 5 - 18 - 15 - - - end - 1 - Preset helper - - 0 - 0 - - - - - - start - 1 - - VGA [480p] [4:3] - FWVGA [480p] [16:9] - SVGA [600p] [4:3] - SMPTE [720p] [4:3] - HD [720p] [16:9] - XGA [768p] [4:3] - HD ready [768p] [16:9] - SXGA [1024p] [5:4] - Full HD [1080p] [16:9] - UXGA [1200p] [4:3] - QHD [1440p] [16:9] - QSXGA [2048p] [5:4] - 4K [2160p] [16:9] - - - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - custom - Custom - - - vertical - - - 5 - 18 - 15 - - - end - 1 - Width - - 0 - 0 - - - - - - 1 - start - 1 - - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - 1 - 1 - - - - - 5 - 18 - 15 - - - end - 1 - Height - - 0 - 0 - - - - - - 1 - start - 1 - - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - 1 - 1 - - - - - 1 - keep original aspect ratio - 1 - center - 5 - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - page5 - Support - - - borderless - - - vertical - - - 5 - 18 - 15 - - - This option enable more debug message, to view these run this command into a terminal: -$ journalctl --since=today --no-pager | grep js -$ dbus-monitor "interface=org.gnome.Shell.Screencast" - end - 1 - Enable verbose debug - - 0 - 0 - - - - - - 1 - This option enable more debug message, to view these run this command into a terminal: -$ journalctl /usr/bin/gnome-session --since=today | grep js -$ dbus-monitor "interface=org.gnome.Shell.Screencast" - start - 1 - - 1 - 0 - - - - - - start - 5 - 0 - - extension - last Gstreamer pipeline - gnome shell - - - 1 - 1 - - - - - - This option enable more debug message, to view these run this command into a terminal: -$ journalctl --since=today --no-pager | grep js -$ dbus-monitor "interface=org.gnome.Shell.Screencast" - end - 1 - Display the log of - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - True - - - 1 - 0 - 1 - - - - - - - 5 - 5 - - - - - center - Restore default options - 1 - 1 - - - - - - - - - - - - - - page4 - Info - - - borderless - - - vertical - - - 100 - - - - - EasyScreenCast - - - - - - - - - - center - 10 - 1 - N/A - 1 - - - - - - - - center - 15 - 15 - This extension simplifies the use of the -screen recorder included in gnome shell - center - middle - - - - - - - - This software is licensed under GPL v3 - 1 - 1 - https://github.com/EasyScreenCast/EasyScreenCast/blob/master/COPYING - - - - - Credits - 1 - 1 - https://github.com/EasyScreenCast/EasyScreenCast/graphs/contributors - - - - - How to contribute? - - - - - With a translation - 1 - 1 - https://github.com/EasyScreenCast/EasyScreenCast#translation - - - - - Reporting bugs - 1 - 1 - https://github.com/EasyScreenCast/EasyScreenCast/issues - - - - - Add code - 1 - 1 - https://github.com/EasyScreenCast/EasyScreenCast/pulls - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/convenience.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/convenience.js deleted file mode 100644 index fca4c1e..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/convenience.js +++ /dev/null @@ -1,84 +0,0 @@ -/* - Copyright (c) 2011-2012, Giovanni Campagna - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the GNOME nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -'use strict'; - -import Gio from 'gi://Gio'; - -var debugEnabled = false; - -/** - * @param {boolean} d Enable/Disable debug logging - */ -export function setDebugEnabled(d) { - debugEnabled = d; -} - -/** - * @param {string} msg the message to log - * @class - */ -export function TalkativeLog(msg) { - if (debugEnabled) - console.log(`[ESC]${msg}`); -} - -/** - * Gets the full (semantic) version of this extension. - * - *

Note: The actual value is added during build time. - * - * @returns {string} the version - */ -export function getFullVersion() { - return '1.11.1'; // FULL_VERSION -} - -/** - * Loads an icon from the extension's subdirectory "images". - * - * @param {Gio.File} extensionDir dir of the extension - * @param {string} name filename of the image - * @returns {Gio.FileIcon} the icon - */ -export function loadIcon(extensionDir, name) { - return new Gio.FileIcon({ - file: Gio.File.new_for_path( - getImagePath(extensionDir, name) - ), - }); -} - -/** - * Gets the path to the image from the extension's subdirectory "images". - * - * @param {Gio.File} extensionDir dir of the extension - * @param {string} name filename of the image - * @returns {string} the path - */ -export function getImagePath(extensionDir, name) { - return extensionDir.get_child(`images/${name}`).get_path(); -} diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/display_module.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/display_module.js deleted file mode 100644 index ceff7cc..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/display_module.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -/** - * @type {{_display(): Meta_Display, number_of_displays(): int}} - */ -export const DisplayApi = { - /** - * Returns the Wayland display or screen - * - * @returns {Meta.Display} - */ - _display() { - return global.display || global.screen; - }, - - /** - * @returns {int} - * @public - */ - number_displays() { - return this._display().get_n_monitors(); - }, - - /** - * @param {number} displayIndex the monitor number - * @returns {Meta.Rectangle} - */ - display_geometry_for_index(displayIndex) { - return this._display().get_monitor_geometry(displayIndex); - }, - - /** - * @param {Meta.Cursor} cursor the new cursor to set - */ - set_cursor(cursor) { - this._display().set_cursor(cursor); - }, -}; diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/extension.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/extension.js deleted file mode 100644 index 32a7c7c..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/extension.js +++ /dev/null @@ -1,1037 +0,0 @@ -/* - Copyright (C) 2013 Borsato Ivano - - The JavaScript code in this page is free software: you can - redistribute it and/or modify it under the terms of the GNU - General Public License (GNU GPL) as published by the Free Software - Foundation, either version 3 of the License, or (at your option) - any later version. The code is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. -*/ - - -'use strict'; - -import GObject from 'gi://GObject'; -import St from 'gi://St'; -import Meta from 'gi://Meta'; -import Shell from 'gi://Shell'; -// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/panelMenu.js -import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js'; -import Clutter from 'gi://Clutter'; -import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js'; -import * as Slider from 'resource:///org/gnome/shell/ui/slider.js'; -import * as Main from 'resource:///org/gnome/shell/ui/main.js'; - -import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js'; - -import * as Lib from './convenience.js'; -import * as Settings from './settings.js'; -import * as Time from './timer.js'; -import * as UtilRecorder from './utilrecorder.js'; -import * as UtilAudio from './utilaudio.js'; -import * as UtilWebcam from './utilwebcam.js'; -import * as UtilNotify from './utilnotify.js'; -import * as Selection from './selection.js'; -import * as UtilExeCmd from './utilexecmd.js'; - -var Indicator; -let timerD = null; -let timerC = null; - -let isActive = false; -let pathFile = ''; - -let keybindingConfigured = false; - -/** - * @type {EasyScreenCastIndicator} - */ -const EasyScreenCastIndicator = GObject.registerClass({ - GTypeName: 'EasyScreenCast_Indicator', -}, class EasyScreenCastIndicator extends PanelMenu.Button { - constructor(extension) { - super(null, 'EasyScreenCast_Indicator'); - - this._extension = extension; - this._settings = new Settings.Settings(this._extension.getSettings()); - Lib.setDebugEnabled(this._settings.getOption('b', Settings.VERBOSE_DEBUG_SETTING_KEY)); - this._settings._settings.connect( - `changed::${Settings.VERBOSE_DEBUG_SETTING_KEY}`, - () => { - Lib.setDebugEnabled(this._settings.getOption('b', Settings.VERBOSE_DEBUG_SETTING_KEY)); - } - ); - - this.CtrlAudio = new UtilAudio.MixerAudio(); - // CtrlWebcam is initialized lazy to avoid problems like #368 - this.CtrlWebcam = null; - - this.CtrlNotify = new UtilNotify.NotifyManager(); - this.CtrlExe = new UtilExeCmd.ExecuteStuff(this); - - // load indicator icons - this._icons = { - on: Lib.loadIcon(this._extension.dir, 'icon_recording.svg'), - onSel: Lib.loadIcon(this._extension.dir, 'icon_recordingSel.svg'), - off: Lib.loadIcon(this._extension.dir, 'icon_default.svg'), - offSel: Lib.loadIcon(this._extension.dir, 'icon_defaultSel.svg'), - }; - - // check audio - if (!this.CtrlAudio.checkAudio()) { - Lib.TalkativeLog('-*-disable audio recording'); - this._settings.setOption(Settings.INPUT_AUDIO_SOURCE_SETTING_KEY, 0); - this._settings.setOption( - Settings.ACTIVE_CUSTOM_GSP_SETTING_KEY, - Settings.getGSPstd(false) - ); - } - - // add enter/leave/click event - this.connect('enter_event', () => this.refreshIndicator(true)); - this.connect('leave_event', () => this.refreshIndicator(false)); - this.connect('button_press_event', (actor, event) => - this._onButtonPress(actor, event) - ); - - // prepare setting var - if (this._settings.getOption('i', Settings.TIME_DELAY_SETTING_KEY) > 0) - this.isDelayActive = true; - else - this.isDelayActive = false; - - - // Add the title bar icon and label for time display - this.indicatorBox = new St.BoxLayout(); - this.indicatorIcon = new St.Icon({ - gicon: this._icons.off, - icon_size: 16, - }); - this.timeLabel = new St.Label({ - text: '', - style_class: 'time-label', - y_expand: true, - y_align: Clutter.ActorAlign.CENTER, - }); - - this.indicatorBox.add_child(this.timeLabel); - this.indicatorBox.add_child(this.indicatorIcon); - - // init var - this.recorder = new UtilRecorder.CaptureVideo(); - this.AreaSelected = null; - this.TimeSlider = null; - - this._initMainMenu(); - } - - /** - * @private - */ - _initMainMenu() { - this._addStartStopMenuEntry(); - this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); - this.sub_menu_audio_recording = new PopupMenu.PopupSubMenuMenuItem(_('No audio source'), true); - this.sub_menu_audio_recording.icon.icon_name = 'audio-input-microphone-symbolic'; - this.menu.addMenuItem(this.sub_menu_audio_recording); - this._addAudioRecordingSubMenu(); - - // add sub menu webcam recording - this._addSubMenuWebCam(); - - this._addAreaRecordingSubMenu(); - this._addRecordingDelaySubMenu(); - this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); - this.menu_item_options = new PopupMenu.PopupMenuItem(_('Options')); - this.menu_item_options.actor.insert_child_at_index( - new St.Icon({ - style_class: 'popup-menu-icon', - icon_name: 'preferences-other-symbolic', - }), - 1 - ); - this.menu.addMenuItem(this.menu_item_options); - this.menu_item_options.connect('activate', () => this._openExtensionPreferences()); - } - - /** - * Set a new value for the time label. Integers are - * converted to seconds, minutes, hours. All other - * values are converted to strings. - * - * @param {string|number} newValue new value of the label. if a number, then it's the seconds passed. - * @returns {string} - */ - updateTimeLabel(newValue) { - /** - * @param {number} number a number - */ - function padZeros(number) { - if (number < 10) - number = `0${number}`; - - return number.toString(); - } - - if (typeof newValue === 'number') { - let hours = Math.floor(newValue / 3600); - newValue -= hours * 3600; - - let minutes = Math.floor(newValue / 60); - newValue -= minutes * 60; - - newValue = `${padZeros(hours)}:${padZeros(minutes)}:${padZeros(newValue)}`; - } - - this.timeLabel.set_text(newValue.toString()); - } - - /** - * Left clicking on the icon toggles the recording - * options menu. Any other mouse button will start - * the recording. - * Some submenus are refreshed to account for new - * sources. - * - * @param {Clutter.Actor} actor the actor - * @param {Clutter.Event} event a Clutter.Event - */ - _onButtonPress(actor, event) { - let button = event.get_button(); - - if (button === 1) { - Lib.TalkativeLog('-*-left click indicator'); - - this._setupExtensionMenu(); - } else { - Lib.TalkativeLog('-*-right click indicator'); - - if (this.menu.isOpen) - this.menu.close(); - - this.isShowNotify = this._settings.getOption('b', Settings.SHOW_NOTIFY_ALERT_SETTING_KEY); - this._doRecording(); - } - } - - /** - * Sets up the menu when the user opens it. - */ - _setupExtensionMenu() { - this._addAudioRecordingSubMenu(); - this._addWebcamSubMenu(); - } - - /** - * Sets up all the options for web-cams. Should only run the - * first time the icon is clicked an the CtrlWebcam is still - * null. - */ - _addWebcamSubMenu() { - if (this.CtrlWebcam === null) - this.CtrlWebcam = new UtilWebcam.HelperWebcam(_('Unspecified webcam')); - - // add sub menu webcam recording - this._populateSubMenuWebcam(); - - // start monitoring inputvideo - this.CtrlWebcam.startMonitor(); - } - - /** - * Adds individual webcam items to the webcam menu. - */ - _populateSubMenuWebcam() { - let arrMI = this._createMIWebCam(); - - this.smWebCam.menu.removeAll(); - for (let element in arrMI) - this.smWebCam.menu.addMenuItem(arrMI[element]); - - let i = this._settings.getOption('i', Settings.DEVICE_INDEX_WEBCAM_SETTING_KEY); - Lib.TalkativeLog(`-*-populated submenuwebcam. Settings i=${i}`); - - this.smWebCam.label.text = this.WebCamDevice[i]; - } - - /** - * @private - */ - _addStartStopMenuEntry() { - this.imRecordAction = new PopupMenu.PopupBaseMenuItem(); - this.RecordingLabel = new St.Label({ - text: _('Start recording'), - style_class: 'RecordAction-label', - content_gravity: Clutter.ContentGravity.CENTER, - x_expand: true, - x_align: Clutter.ActorAlign.CENTER, - }); - this.imRecordAction.actor.add_child(this.RecordingLabel); - this.imRecordAction.x_expand = true; - this.imRecordAction.x_fill = true; - this.imRecordAction.x_align = Clutter.ActorAlign.CENTER; - this.imRecordAction.connect('activate', () => { - this.isShowNotify = this._settings.getOption('b', Settings.SHOW_NOTIFY_ALERT_SETTING_KEY); - this._doRecording(); - }); - - this.menu.addMenuItem(this.imRecordAction); - } - - /** - * Refreshes the submenu for audio recording sources. - */ - _addAudioRecordingSubMenu() { - Lib.TalkativeLog('-*-reset the sub menu audio'); - // remove old menu items - this.sub_menu_audio_recording.menu.removeAll(); - - Lib.TalkativeLog('-*-add new items to sub menu audio'); - var arrMI = this._createMIAudioRec(); - for (var ele in arrMI) - this.sub_menu_audio_recording.menu.addMenuItem(arrMI[ele]); - } - - /** - * @private - */ - _addSubMenuWebCam() { - this.smWebCam = new PopupMenu.PopupSubMenuMenuItem('', true); - this.smWebCam.icon.icon_name = 'camera-web-symbolic'; - - this.menu.addMenuItem(this.smWebCam); - } - - /** - * @private - */ - _addAreaRecordingSubMenu() { - this.sub_menu_area_recording = new PopupMenu.PopupSubMenuMenuItem('', true); - this.sub_menu_area_recording.icon.icon_name = 'view-fullscreen-symbolic'; - - var arrMI = this._createMIAreaRec(); - for (var ele in arrMI) - this.sub_menu_area_recording.menu.addMenuItem(arrMI[ele]); - - this.sub_menu_area_recording.label.text = this.AreaType[this._settings.getOption('i', Settings.AREA_SCREEN_SETTING_KEY)]; - this.menu.addMenuItem(this.sub_menu_area_recording); - } - - /** - * @private - */ - _addRecordingDelaySubMenu() { - this.smDelayRec = new PopupMenu.PopupSubMenuMenuItem('', true); - this.smDelayRec.icon.icon_name = 'alarm-symbolic'; - - var arrMI = this._createMIInfoDelayRec(); - for (var ele in arrMI) - this.smDelayRec.menu.addMenuItem(arrMI[ele]); - - var secDelay = this._settings.getOption('i', Settings.TIME_DELAY_SETTING_KEY); - if (secDelay > 0) { - this.smDelayRec.label.text = - secDelay + _(' sec. delay before recording'); - } else { - this.smDelayRec.label.text = _('Start recording immediately'); - } - - this.menu.addMenuItem(this.smDelayRec); - } - - /** - * @returns {Array} - * @private - */ - _createMIAreaRec() { - this.AreaType = [ - _('Record all desktop'), - _('Record a selected monitor'), - _('Record a selected window'), - _('Record a selected area'), - ]; - - this.AreaMenuItem = new Array(this.AreaType.length); - - for (var i = 0; i < this.AreaMenuItem.length; i++) { - this.AreaMenuItem[i] = new PopupMenu.PopupMenuItem( - this.AreaType[i], - { - reactive: true, - activate: true, - hover: true, - can_focus: true, - } - ); - - (function (areaSetting, arr, item, settings) { - this.connectMI = function () { - this.connect('activate', () => { - Lib.TalkativeLog(`-*-set area recording to ${areaSetting} ${arr[areaSetting]}`); - settings.setOption(Settings.AREA_SCREEN_SETTING_KEY, areaSetting); - - item.label.text = arr[areaSetting]; - }); - }; - this.connectMI(); - }.call( - this.AreaMenuItem[i], - i, - this.AreaType, - this.sub_menu_area_recording, - this._settings - )); - } - - return this.AreaMenuItem; - } - - /** - * @returns {Array} - * @private - */ - _createMIWebCam() { - this.WebCamDevice = [_('No WebCam recording')]; - // add menu item webcam device from GST - const devices = this.CtrlWebcam.getDevicesIV(); - this.WebCamDevice.push(...this.CtrlWebcam.getNameDevices()); - Lib.TalkativeLog(`-*-webcam list: ${this.WebCamDevice}`); - this.AreaMenuItem = new Array(this.WebCamDevice.length); - - for (var i = 0; i < this.AreaMenuItem.length; i++) { - let devicePath = ''; - - // i === 0 is "No Webcam selected" - if (i > 0) { - const device = devices[i - 1]; - devicePath = device.get_properties().get_string('device.path'); - Lib.TalkativeLog(`-*-webcam i=${i} devicePath: ${devicePath}`); - } - - Lib.TalkativeLog(`-*-webcam i=${i} menu-item-text: ${this.WebCamDevice[i]}`); - this.AreaMenuItem[i] = new PopupMenu.PopupMenuItem( - this.WebCamDevice[i], - { - reactive: true, - activate: true, - hover: true, - can_focus: true, - } - ); - - (function (index, devPath, arr, item, settings) { - this.connectMI = function () { - this.connect('activate', () => { - Lib.TalkativeLog(`-*-set webcam device to ${index} ${arr[index]} devicePath=${devPath}`); - settings.setOption(Settings.DEVICE_INDEX_WEBCAM_SETTING_KEY, index); - settings.setOption(Settings.DEVICE_WEBCAM_SETTING_KEY, devPath); - item.label.text = arr[index]; - }); - }; - this.connectMI(); - }.call( - this.AreaMenuItem[i], - i, - devicePath, - this.WebCamDevice, - this.smWebCam, - this._settings - )); - } - - return this.AreaMenuItem; - } - - /** - * @returns {Array} - * @private - */ - _createMIAudioRec() { - // add std menu item - this.AudioChoice = [ - { - desc: _('No audio source'), - name: 'N/A', - port: 'N/A', - sortable: true, - resizeable: true, - }, - { - desc: _('Default audio source'), - name: 'N/A', - port: 'N/A', - sortable: true, - resizeable: true, - }, - ]; - // add menu item audio source from PA - var audioList = this.CtrlAudio.getListInputAudio(); - for (var index in audioList) - this.AudioChoice.push(audioList[index]); - - this.AudioMenuItem = new Array(this.AudioChoice.length); - - for (var i = 0; i < this.AudioChoice.length; i++) { - // create label menu - let labelMenu = this.AudioChoice[i].desc; - if (i >= 2) { - labelMenu += - _('\n - Port: ') + - this.AudioChoice[i].port + - _('\n - Name: ') + - this.AudioChoice[i].name; - } - // create submenu - this.AudioMenuItem[i] = new PopupMenu.PopupMenuItem(labelMenu, { - reactive: true, - activate: true, - hover: true, - can_focus: true, - }); - // add icon on submenu - this.AudioMenuItem[i].actor.insert_child_at_index( - new St.Icon({ - style_class: 'popup-menu-icon', - icon_name: 'audio-card-symbolic', - }), - 1 - ); - - // update choice audio from pref - if (i === this._settings.getOption('i', Settings.INPUT_AUDIO_SOURCE_SETTING_KEY)) { - Lib.TalkativeLog(`-*-get audio choice from pref ${i}`); - this.sub_menu_audio_recording.label.text = this.AudioChoice[i].desc; - } - - // add action on menu item - (function (audioIndex, arr, item, settings) { - this.connectMI = function () { - this.connect('activate', () => { - Lib.TalkativeLog(`-*-set audio choice to ${audioIndex}`); - settings.setOption(Settings.INPUT_AUDIO_SOURCE_SETTING_KEY, audioIndex); - item.label.text = arr[audioIndex].desc; - }); - }; - this.connectMI(); - }.call( - this.AudioMenuItem[i], - i, - this.AudioChoice, - this.sub_menu_audio_recording, - this._settings - )); - } - return this.AudioMenuItem; - } - - /** - * @returns {Array} - * @private - */ - _createMIInfoDelayRec() { - this.DelayTimeTitle = new PopupMenu.PopupMenuItem(_('Delay Time'), { - reactive: false, - }); - - this.DelayTimeLabel = new St.Label({ - text: - Math.floor( - this._settings.getOption('i', Settings.TIME_DELAY_SETTING_KEY) - ).toString() + _(' Sec'), - }); - this.DelayTimeTitle.actor.add_child(this.DelayTimeLabel); - // TODO this.DelayTimeTitle.align = St.Align.END; - - this.imSliderDelay = new PopupMenu.PopupBaseMenuItem({ - activate: false, - }); - this.TimeSlider = new Slider.Slider(this._settings.getOption('i', Settings.TIME_DELAY_SETTING_KEY) / 100); - this.TimeSlider.x_expand = true; - this.TimeSlider.y_expand = true; - - this.TimeSlider.connect('notify::value', item => { - this.DelayTimeLabel.set_text( - Math.floor(item.value * 100).toString() + _(' Sec') - ); - }); - - this.TimeSlider.connect('drag-end', () => this._onDelayTimeChanged()); - this.TimeSlider.connect('scroll-event', () => - this._onDelayTimeChanged() - ); - - this.imSliderDelay.actor.add_child(this.TimeSlider); - - return [this.DelayTimeTitle, this.imSliderDelay]; - } - - /** - * @private - */ - _enable() { - // enable key binding - this._enableKeybindings(); - // immediately activate/deactive shortcut on settings change - this._settings._settings.connect( - `changed::${Settings.ACTIVE_SHORTCUT_SETTING_KEY}`, - () => { - if (this._settings.getOption('b', Settings.ACTIVE_SHORTCUT_SETTING_KEY)) { - Lib.TalkativeLog('-^-shortcut changed - enabling'); - this._enableKeybindings(); - } else { - Lib.TalkativeLog('-^-shortcut changed - disabling'); - this._removeKeybindings(); - } - } - ); - - // start monitoring inputvideo - if (this.CtrlWebcam !== null) - this.CtrlWebcam.startMonitor(); - - // add indicator - this.add_child(this.indicatorBox); - } - - /** - * @private - */ - _disable() { - // remove key binding - this._removeKeybindings(); - // stop monitoring inputvideo - if (this.CtrlWebcam !== null) - this.CtrlWebcam.stopMonitor(); - // unregister mixer control - this.CtrlAudio.destroy(); - - // remove indicator - this.remove_child(this.indicatorBox); - } - - /** - * @private - */ - _doDelayAction() { - if (this.isDelayActive) { - Lib.TalkativeLog(`-*-delay recording called | delay= ${this.TimeSlider.value}`); - timerD = new Time.TimerDelay( - Math.floor(this.TimeSlider.value * 100), - this._doPreCommand, - this - ); - timerD.begin(); - } else { - Lib.TalkativeLog('-*-instant recording called'); - // start recording - this._doPreCommand(); - } - } - - /** - * @private - */ - _doPreCommand() { - if (this._settings.getOption('b', Settings.ACTIVE_PRE_CMD_SETTING_KEY)) { - Lib.TalkativeLog('-*-execute pre command'); - - const PreCmd = this._settings.getOption('s', Settings.PRE_CMD_SETTING_KEY); - - this.CtrlExe.Execute( - PreCmd, - false, - res => { - Lib.TalkativeLog(`-*-pre command final: ${res}`); - if (res === true) { - Lib.TalkativeLog('-*-pre command OK'); - this.recorder.start(); - } else { - Lib.TalkativeLog('-*-pre command ERROR'); - this.CtrlNotify.createNotify( - _('ERROR PRE COMMAND - See logs for more info'), - this._icons.off - ); - } - }, - line => { - Lib.TalkativeLog(`-*-pre command output: ${line}`); - } - ); - } else { - this.recorder.start(); - } - } - - /** - * @private - */ - _doRecording() { - // start/stop record screen - if (isActive === false) { - Lib.TalkativeLog('-*-start recording'); - - pathFile = ''; - - // get selected area - const optArea = this._settings.getOption('i', Settings.AREA_SCREEN_SETTING_KEY); - if (optArea > 0) { - Lib.TalkativeLog(`-*-type of selection of the area to record: ${optArea}`); - switch (optArea) { - case 3: - new Selection.SelectionArea(); - break; - case 2: - new Selection.SelectionWindow(); - break; - case 1: - new Selection.SelectionDesktop(); - break; - } - } else { - Lib.TalkativeLog('-*-recording full area'); - this._doDelayAction(); - } - } else { - Lib.TalkativeLog('-*-stop recording'); - isActive = false; - - this.recorder.stop(); - - if (timerC !== null) { - // stop counting rec - timerC.halt(); - timerC = null; - } - - // execute post-command - this._doPostCommand(); - } - - this.refreshIndicator(false); - } - - /** - * @private - */ - _doPostCommand() { - if (this._settings.getOption('b', Settings.ACTIVE_POST_CMD_SETTING_KEY)) { - Lib.TalkativeLog('-*-execute post command'); - - // launch cmd after registration - const tmpCmd = `/usr/bin/sh -c "${this._settings.getOption('s', Settings.POST_CMD_SETTING_KEY)}"`; - - const mapObj = { - _fpath: pathFile, - _dirpath: pathFile.substr(0, pathFile.lastIndexOf('/')), - _fname: pathFile.substr( - pathFile.lastIndexOf('/') + 1, - pathFile.length - ), - }; - - const Cmd = tmpCmd.replace(/_fpath|_dirpath|_fname/gi, match => { - return mapObj[match]; - }); - - Lib.TalkativeLog(`-*-post command:${Cmd}`); - - // execute post command - this.CtrlExe.Spawn(Cmd); - } - } - - /** - * @param {boolean} result whether the recording was successful - * @param {string} file file path of the recorded file - */ - doRecResult(result, file) { - if (result) { - isActive = true; - - Lib.TalkativeLog('-*-record OK'); - // update indicator - const indicators = this._settings.getOption('i', Settings.STATUS_INDICATORS_SETTING_KEY); - this._replaceStdIndicator(indicators === 1 || indicators === 3); - - if (this.isShowNotify) { - Lib.TalkativeLog('-*-show notify'); - // create counting notify - this.notifyCounting = this.CtrlNotify.createNotify( - _('Start Recording'), - this._icons.on - ); - this.notifyCounting.connect('destroy', () => { - Lib.TalkativeLog('-*-notification destroyed'); - this.notifyCounting = null; - }); - - // start counting rec - timerC = new Time.TimerCounting((secpassed, alertEnd) => { - this._refreshNotify(secpassed, alertEnd); - }, this); - timerC.begin(); - } - - // update path file video - pathFile = file; - Lib.TalkativeLog(`-*-update abs file path -> ${pathFile}`); - } else { - Lib.TalkativeLog('-*-record ERROR'); - - pathFile = ''; - - if (this.isShowNotify) { - Lib.TalkativeLog('-*-show error notify'); - this.CtrlNotify.createNotify( - _('ERROR RECORDER - See logs for more info'), - this._icons.off - ); - } - } - this.refreshIndicator(false); - } - - /** - * @param {number} sec the seconds passed - * @param {boolean} alertEnd whether the timer is ending - */ - _refreshNotify(sec, alertEnd) { - if (this.notifyCounting !== null && this.notifyCounting !== undefined && this.isShowNotify) { - if (alertEnd) { - this.CtrlNotify.updateNotify( - this.notifyCounting, - _(`Finish Recording / Seconds : ${sec}`), - this._icons.off, - true - ); - } else { - this.CtrlNotify.updateNotify( - this.notifyCounting, - _('Recording ... / Seconds passed : ') + sec, - this._icons.on, - false - ); - } - } - } - - /** - * @private - */ - _openExtensionPreferences() { - try { - this._extension.openPreferences(); - } catch (e) { - Lib.TalkativeLog(`Failed to open preferences: ${e}`); - } - } - - /** - * @private - */ - _onDelayTimeChanged() { - const secDelay = Math.floor(this.TimeSlider.value * 100); - this._settings.setOption(Settings.TIME_DELAY_SETTING_KEY, secDelay); - if (secDelay > 0) - this.smDelayRec.label.text = secDelay + _(' sec. delay before recording'); - else - this.smDelayRec.label.text = _('Start recording immediately'); - } - - /** - * @param {boolean} focus selects the correct icon depending on the focus state - */ - refreshIndicator(focus) { - Lib.TalkativeLog(`-*-refresh indicator -A ${isActive} -F ${focus}`); - - const indicators = this._settings.getOption('i', Settings.STATUS_INDICATORS_SETTING_KEY); - - if (isActive === true) { - if (indicators === 0 || indicators === 1) { - if (focus === true) - this.indicatorIcon.set_gicon(this._icons.onSel); - else - this.indicatorIcon.set_gicon(this._icons.on); - } else if (this._settings.getOption('b', Settings.ACTIVE_SHORTCUT_SETTING_KEY)) { - this.indicatorIcon.set_gicon(null); - } else if (focus === true) { - this.indicatorIcon.set_gicon(this._icons.onSel); - } else { - this.indicatorIcon.set_gicon(this._icons.on); - } - - this.RecordingLabel.set_text(_('Stop recording')); - } else { - if (focus === true) - this.indicatorIcon.set_gicon(this._icons.offSel); - else - this.indicatorIcon.set_gicon(this._icons.off); - - this.RecordingLabel.set_text(_('Start recording')); - } - } - - /** - * @param {boolean} OPTtemp whether to replace the standard indicator or use it - * @private - */ - _replaceStdIndicator(OPTtemp) { - if (Main.panel.statusArea === undefined) { - Lib.TalkativeLog('-*-no Main.panel.statusArea found'); - return; - } - - var stdMenu = Main.panel.statusArea.quickSettings; - if (stdMenu === undefined) { - Lib.TalkativeLog('-*-no quickSettings or aggregateMenu in Main.panel.statusArea'); - return; - } - if (stdMenu._remoteAccess === undefined) { - Lib.TalkativeLog('-*-no _remoteAccess indicator applet found'); - return; - } - var indicator = stdMenu._remoteAccess._indicator; - if (indicator === undefined) { - Lib.TalkativeLog('-*-no _indicator or _recordingIndicator found'); - return; - } - - if (OPTtemp) { - Lib.TalkativeLog('-*-replace STD indicator'); - indicator.visible = false; - } else { - Lib.TalkativeLog('-*-use STD indicator'); - indicator.visible = isActive; - } - } - - /** - * @private - */ - _enableKeybindings() { - if (this._settings.getOption('b', Settings.ACTIVE_SHORTCUT_SETTING_KEY)) { - Lib.TalkativeLog('-*-enable keybinding'); - - Main.wm.addKeybinding( - Settings.SHORTCUT_KEY_SETTING_KEY, - this._settings._settings, - Meta.KeyBindingFlags.NONE, - // available modes: https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/src/shell-action-modes.h - Shell.ActionMode.NORMAL | - Shell.ActionMode.OVERVIEW | - Shell.ActionMode.POPUP | - Shell.ActionMode.SYSTEM_MODAL, - () => { - Lib.TalkativeLog('-*-intercept key combination'); - this._doRecording(); - } - ); - keybindingConfigured = true; - } - } - - /** - * @private - */ - _removeKeybindings() { - if (keybindingConfigured) { - Lib.TalkativeLog('-*-remove keybinding'); - Main.wm.removeKeybinding(Settings.SHORTCUT_KEY_SETTING_KEY); - keybindingConfigured = false; - } - } - - getSelectedRect() { - var recX = this._settings.getOption('i', Settings.X_POS_SETTING_KEY); - var recY = this._settings.getOption('i', Settings.Y_POS_SETTING_KEY); - var recW = this._settings.getOption('i', Settings.WIDTH_SETTING_KEY); - var recH = this._settings.getOption('i', Settings.HEIGHT_SETTING_KEY); - return [recX, recY, recW, recH]; - } - - saveSelectedRect(x, y, h, w) { - this._settings.setOption(Settings.X_POS_SETTING_KEY, x); - this._settings.setOption(Settings.Y_POS_SETTING_KEY, y); - this._settings.setOption(Settings.HEIGHT_SETTING_KEY, h); - this._settings.setOption(Settings.WIDTH_SETTING_KEY, w); - } - - getSettings() { - return this._settings; - } - - getAudioSource() { - return this.CtrlAudio.getAudioSource(); - } - - /** - * Destroy indicator - */ - destroy() { - Lib.TalkativeLog('-*-destroy indicator called'); - - if (isActive) - isActive = false; - - if (this._settings) { - this._settings.destroy(); - this._settings = null; - } - - super.destroy(); - } -}); - -export default class EasyScreenCast extends Extension { - /** - * - */ - enable() { - Lib.TalkativeLog('-*-enableExtension called'); - Lib.TalkativeLog(`-*-version: ${this.metadata.version}`); - Lib.TalkativeLog(`-*-install path: ${this.path}`); - Lib.TalkativeLog(`-*-version (package.json): ${Lib.getFullVersion()}`); - - if (Indicator === null || Indicator === undefined) { - Lib.TalkativeLog('-*-create indicator'); - - Indicator = new EasyScreenCastIndicator(this); - Main.panel.addToStatusArea('EasyScreenCast-indicator', Indicator); - } - - Indicator._enable(); - } - - /** - * - */ - disable() { - Lib.TalkativeLog('-*-disableExtension called'); - - if (timerD !== null) { - Lib.TalkativeLog('-*-timerD stopped'); - timerD.stop(); - timerD = null; - } - - // this might happen, if the extension is disabled during recording - if (timerC !== null) { - // stop counting rec - timerC.halt(); - timerC = null; - } - - - if (Indicator !== null) { - Lib.TalkativeLog('-*-indicator call destroy'); - - Indicator._disable(); - Indicator.destroy(); - Indicator = null; - } - } -} - -export {Indicator}; diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/Icon_Info.png b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/Icon_Info.png deleted file mode 100644 index 7f15ae806e77a6add82d7d8f3428317f16165110..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4260 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 -image/svg+xml diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/Icon_Quality.svg b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/Icon_Quality.svg deleted file mode 100644 index b7e8d3d..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/Icon_Quality.svg +++ /dev/null @@ -1,45 +0,0 @@ - -image/svg+xml diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_default.svg b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_default.svg deleted file mode 100644 index ff59a8c..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_default.svg +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_defaultSel.svg b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_defaultSel.svg deleted file mode 100644 index 7a57f9a..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_defaultSel.svg +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_recording.svg b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_recording.svg deleted file mode 100644 index 0608982..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_recording.svg +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_recordingSel.svg b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_recordingSel.svg deleted file mode 100644 index 453444c..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/images/icon_recordingSel.svg +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/ca/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/ca/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo deleted file mode 100644 index 1e565d3c0a46be900b73fe9d2fd6432a7051500e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8718 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 diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/es/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/es/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo deleted file mode 100644 index d40762abb9187decd39891185502cdc8be62a581..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5999 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 WHYh}WNaC}SFU5|;)#`%=)cg-hK#-mQ diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/it/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/it/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo deleted file mode 100644 index 35411ef119dc0f966b6fffe94acfeeea2a2c1130..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7775 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

1^7j9ZQNf6-a~&Y$SdkB`0L<%;1|F@0e=(x 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 diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/uk/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/locale/uk/LC_MESSAGES/EasyScreenCast@iacopodeenosee.gmail.com.mo deleted file mode 100644 index 21ae02fcc7276108d2eef0a06420d24a61c5b46f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8481 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 diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/metadata.json b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/metadata.json deleted file mode 100644 index c40875d..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/metadata.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "_generated": "Generated by SweetTooth, do not edit", - "description": "This extension simplifies the use of the video recording function integrated in gnome shell, allows quickly to change the various settings of the desktop recording.\n\nSOURCE CODE -> https://github.com/EasyScreenCast/EasyScreenCast\n\nVIDEO -> https://youtu.be/81E9AruraKU\n\n**NOTICE**\nif an error occurs during the update is recommended to reload GNOME Shell (Alt + F2, 'r') and reload the extension's installation page.", - "gettext-domain": "EasyScreenCast@iacopodeenosee.gmail.com", - "name": "EasyScreenCast", - "settings-schema": "org.gnome.shell.extensions.EasyScreenCast", - "shell-version": [ - "46", - "47", - "48" - ], - "url": "https://github.com/EasyScreenCast/EasyScreenCast", - "uuid": "EasyScreenCast@iacopodeenosee.gmail.com", - "version": 53 -} \ No newline at end of file diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/prefs.css b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/prefs.css deleted file mode 100644 index 4dc0f17..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/prefs.css +++ /dev/null @@ -1,7 +0,0 @@ -.options-grid { - margin: 18px; -} - -.borderless { - border: none; -} diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/prefs.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/prefs.js deleted file mode 100644 index e0dd1a2..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/prefs.js +++ /dev/null @@ -1,1184 +0,0 @@ -/* - Copyright (C) 2013 Borsato Ivano - - The JavaScript code in this page is free software: you can - redistribute it and/or modify it under the terms of the GNU - General Public License (GNU GPL) as published by the Free Software - Foundation, either version 3 of the License, or (at your option) - any later version. The code is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. -*/ - -'use strict'; - -import GIRepository from 'gi://GIRepository'; -GIRepository.Repository.prepend_search_path('/usr/lib64/gnome-shell'); -GIRepository.Repository.prepend_library_path('/usr/lib64/gnome-shell'); - -import Adw from 'gi://Adw'; -import GObject from 'gi://GObject'; -import Gio from 'gi://Gio'; -import Gtk from 'gi://Gtk'; -import Gdk from 'gi://Gdk'; -import Pango from 'gi://Pango'; - -import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; - -import * as Lib from './convenience.js'; -import * as UtilWebcam from './utilwebcam.js'; -import * as UtilGSP from './utilgsp.js'; -import * as Settings from './settings.js'; -import * as UtilExeCmd from './utilexecmd.js'; - -const EasyScreenCastSettingsWidget = GObject.registerClass({ - GTypeName: 'EasyScreenCast_SettingsWidget', -}, class EasyScreenCastSettingsWidget extends Gtk.Box { - /** - * @param {ExtensionPreferences} prefs the prefs instance - */ - constructor(prefs) { - super(); - - this._prefs = prefs; - this._settings = new Settings.Settings(this._prefs.getSettings()); - Lib.setDebugEnabled(this._settings.getOption('b', Settings.VERBOSE_DEBUG_SETTING_KEY)); - this.CtrlExe = new UtilExeCmd.ExecuteStuff(this); - this.CtrlWebcam = new UtilWebcam.HelperWebcam(_('Unspecified webcam')); - - let cssProvider = new Gtk.CssProvider(); - cssProvider.load_from_path(`${prefs.path}/prefs.css`); - Gtk.StyleContext.add_provider_for_display( - Gdk.Display.get_default(), - cssProvider, - Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); - - // creates the ui builder and add the main resource file - let uiFilePath = `${this._prefs.path}/Options_UI.glade`; - let builder = new Gtk.Builder(); - builder.set_translation_domain(this._prefs.metadata['gettext-domain']); - - if (builder.add_from_file(uiFilePath) === 0) { - Lib.TalkativeLog(`-^-could not load the ui file: ${uiFilePath}`); - let label = new Gtk.Label({ - label: _('Could not load the preferences UI file'), - vexpand: true, - }); - - this.append(label); - } else { - Lib.TalkativeLog(`-^-UI file receive and load: ${uiFilePath}`); - - // gets the interesting builder objects - let refBoxMainContainer = builder.get_object('Main_Container'); - this.append(refBoxMainContainer); - - // setup tab options - this._initTabOptions(this, builder, this._settings._settings); - - // setup tab quality - this._initTabQuality(this, builder, this._settings._settings); - - // setup tab webcam - this._initTabWebcam(this, builder, this._settings._settings); - - // setup tab file - this._initTabFile(this, builder, this._settings._settings); - - // setup tab support - this._initTabSupport(this, builder, this._settings._settings); - - // setup tab info - this._initTabInfo(this, builder); - - // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - - // update GSP area - this._setStateGSP( - !this._settings.getOption('b', Settings.ACTIVE_CUSTOM_GSP_SETTING_KEY) - ); - - // update list view - this._updateRowShortcut( - this._settings.getOption('as', Settings.SHORTCUT_KEY_SETTING_KEY)[0] - ); - - // update webcam widget state - this._updateStateWebcamOptions(); - - // connect keywebcam signal - this._settings._settings.connect( - `changed::${Settings.DEVICE_INDEX_WEBCAM_SETTING_KEY}`, - () => { - Lib.TalkativeLog('-^-webcam device changed'); - - this._updateStateWebcamOptions(); - } - ); - } - } - - /** - * @param {EasyScreenCastSettingsWidget} ctx the prefs/settings widget - * @param {Gtk.Builder} gtkDB the builder that loaded the UI glade file - * @param {Gio.Settings} tmpS the current settings - * @private - */ - _initTabOptions(ctx, gtkDB, tmpS) { - // implements show timer option - let refSwitchShowNotifyAlert = gtkDB.get_object('swt_ShowNotifyAlert'); - tmpS.bind( - Settings.SHOW_NOTIFY_ALERT_SETTING_KEY, - refSwitchShowNotifyAlert, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements show area option - let refSwitchShowAreaRec = gtkDB.get_object('swt_ShowAreaRec'); - tmpS.bind( - Settings.SHOW_AREA_REC_SETTING_KEY, - refSwitchShowAreaRec, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements show indicator option - let refComboboxIndicatorsRec = gtkDB.get_object('cbt_StatusIndicatorsRec'); - tmpS.bind( - Settings.STATUS_INDICATORS_SETTING_KEY, - refComboboxIndicatorsRec, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements draw cursor option - let refSwitchDrawCursorRec = gtkDB.get_object('swt_DrawCursorRec'); - tmpS.bind( - Settings.DRAW_CURSOR_SETTING_KEY, - refSwitchDrawCursorRec, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements enable keybinding option - let refSwitchEnableShortcut = gtkDB.get_object('swt_KeyShortcut'); - tmpS.bind( - Settings.ACTIVE_SHORTCUT_SETTING_KEY, - refSwitchEnableShortcut, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements selecting alternative key combo - let refTreeviewShortcut = gtkDB.get_object('treeview_KeyShortcut'); - refTreeviewShortcut.set_sensitive(true); - ctx.Ref_liststore_Shortcut = gtkDB.get_object('liststore_KeyShortcut'); - ctx.Iter_ShortcutRow = ctx.Ref_liststore_Shortcut.append(); - - let renderer = new Gtk.CellRendererAccel({ - editable: true, - }); - renderer.connect( - 'accel-edited', - (_0, _1, key, mods, _2) => { - Lib.TalkativeLog(`-^-edited key accel: key=${key} mods=${mods}`); - - let accel = Gtk.accelerator_name(key, mods); - - ctx._updateRowShortcut(accel); - this._settings.setOption(Settings.SHORTCUT_KEY_SETTING_KEY, [accel]); - } - ); - - renderer.connect('accel-cleared', () => { - Lib.TalkativeLog('-^-cleared key accel'); - - ctx._updateRowShortcut(null); - this._settings.setOption(Settings.SHORTCUT_KEY_SETTING_KEY, []); - }); - - let column = new Gtk.TreeViewColumn(); - column.pack_start(renderer, true); - column.add_attribute( - renderer, - 'accel-key', - Settings.SHORTCUT_COLUMN_KEY - ); - column.add_attribute( - renderer, - 'accel-mods', - Settings.SHORTCUT_COLUMN_MODS - ); - - refTreeviewShortcut.append_column(column); - - // implements post execute command - let refSwitchExecutePostCmd = gtkDB.get_object('swt_executepostcmd'); - tmpS.bind( - Settings.ACTIVE_POST_CMD_SETTING_KEY, - refSwitchExecutePostCmd, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - - let refTexteditPostCmd = gtkDB.get_object('txe_postcmd'); - tmpS.bind( - Settings.POST_CMD_SETTING_KEY, - refTexteditPostCmd, - 'text', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements pre execute command - let refSwitchExecutePreCmd = gtkDB.get_object('swt_executeprecmd'); - tmpS.bind( - Settings.ACTIVE_PRE_CMD_SETTING_KEY, - refSwitchExecutePreCmd, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - - let refTexteditPreCmd = gtkDB.get_object('txe_precmd'); - tmpS.bind( - Settings.PRE_CMD_SETTING_KEY, - refTexteditPreCmd, - 'text', - Gio.SettingsBindFlags.DEFAULT - ); - } - - /** - * @param {EasyScreenCastSettingsWidget} ctx the prefs/settings widget - * @param {Gtk.Builder} gtkDB the builder that loaded the UI glade file - * @param {Gio.Settings} tmpS the current settings - * @private - */ - _initTabQuality(ctx, gtkDB, tmpS) { - // implements FPS option - let refSpinnerFrameRateRec = gtkDB.get_object('spb_FrameRateRec'); - // Create an adjustment to use for the second spinbutton - let adjustment1 = new Gtk.Adjustment({ - value: 30, - lower: 1, - upper: 666, - step_increment: 1, - page_increment: 10, - }); - refSpinnerFrameRateRec.configure(adjustment1, 10, 0); - tmpS.bind( - Settings.FPS_SETTING_KEY, - refSpinnerFrameRateRec, - 'value', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements command string rec option - let refTexteditPipeline = gtkDB.get_object('txe_CommandStringRec'); - let refBufferPipeline = refTexteditPipeline.get_buffer(); - tmpS.bind( - Settings.PIPELINE_REC_SETTING_KEY, - refBufferPipeline, - 'text', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements label description GSP - let refLabelDescGSP = gtkDB.get_object('lbl_GSP_Description'); - refLabelDescGSP.set_text( - UtilGSP.getDescr( - this._settings.getOption('i', Settings.QUALITY_SETTING_KEY), - this._settings.getOption('i', Settings.FILE_CONTAINER_SETTING_KEY) - ) - ); - // update label description when container selection changed - this._settings._settings.connect(`changed::${Settings.FILE_CONTAINER_SETTING_KEY}`, () => { - Lib.TalkativeLog('-^- new setting for file container, update gps description'); - refLabelDescGSP.set_text( - UtilGSP.getDescr( - this._settings.getOption('i', Settings.QUALITY_SETTING_KEY), - this._settings.getOption('i', Settings.FILE_CONTAINER_SETTING_KEY) - ) - ); - }); - - - // implements quality scale option - let refScaleQuality = gtkDB.get_object('scl_Quality'); - refScaleQuality.set_valign(Gtk.Align.START); - let adjustment2 = new Gtk.Adjustment({ - value: 1, - lower: 0, - upper: 3, - step_increment: 1, - page_increment: 1, - }); - refScaleQuality.set_adjustment(adjustment2); - refScaleQuality.set_digits(1); - let ind = 0; - for (; ind < 4; ind++) - refScaleQuality.add_mark(ind, Gtk.PositionType.BOTTOM, ''); - - - refScaleQuality.set_value( - this._settings.getOption('i', Settings.QUALITY_SETTING_KEY) - ); - - let oldQualityValue = refScaleQuality.get_value(); - refScaleQuality.connect('value-changed', self => { - // not logging by default - it's too much - // Lib.TalkativeLog(`-^-value quality changed : ${self.get_value()}`); - - // round the value - let roundTmp = parseInt(self.get_value().toFixed(0)); - // not logging by default - it's too much - // Lib.TalkativeLog(`-^-value quality fixed : ${roundTmp}`); - - self.set_value(roundTmp); - - // only update labels for real changes - if (oldQualityValue !== roundTmp) { - oldQualityValue = roundTmp; - this._settings.setOption(Settings.QUALITY_SETTING_KEY, roundTmp); - - // update label descr GSP - refLabelDescGSP.set_text( - UtilGSP.getDescr( - roundTmp, - this._settings.getOption('i', Settings.FILE_CONTAINER_SETTING_KEY) - ) - ); - - // update fps - this._settings.setOption( - Settings.FPS_SETTING_KEY, - UtilGSP.getFps( - roundTmp, - this._settings.getOption('i', Settings.FILE_CONTAINER_SETTING_KEY) - ) - ); - } - }); - - // implements image for scale widget - let refImagePerformance = gtkDB.get_object('img_Performance'); - refImagePerformance.set_from_file(Lib.getImagePath(this._prefs.dir, 'Icon_Performance.svg')); - - let refImageQuality = gtkDB.get_object('img_Quality'); - refImageQuality.set_from_file(Lib.getImagePath(this._prefs.dir, 'Icon_Quality.svg')); - - // implements custom GSPipeline option - let refSwitchCustomGSP = gtkDB.get_object('swt_EnableCustomGSP'); - tmpS.bind( - Settings.ACTIVE_CUSTOM_GSP_SETTING_KEY, - refSwitchCustomGSP, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - refSwitchCustomGSP.connect('state-set', () => { - // update GSP text area - ctx._setStateGSP(this._settings.getOption('b', Settings.ACTIVE_CUSTOM_GSP_SETTING_KEY)); - }); - - ctx.Ref_stack_Quality = gtkDB.get_object('stk_Quality'); - } - - /** - * @param {EasyScreenCastSettingsWidget} ctx the prefs/settings widget - * @param {Gtk.Builder} gtkDB the builder that loaded the UI glade file - * @param {Gio.Settings} tmpS the current settings - * @private - */ - _initTabWebcam(ctx, gtkDB, tmpS) { - // implements webcam quality option: Type: GtkListStore - ctx.Ref_ListStore_QualityWebCam = gtkDB.get_object( - 'liststore_QualityWebCam' - ); - let refTreeViewQualityWebCam = gtkDB.get_object( - 'treeview_QualityWebam' - ); - // create column data - let capsColumn = new Gtk.TreeViewColumn({ - title: _('WebCam Caps'), - }); - let normalColumn = new Gtk.CellRendererText(); - capsColumn.pack_start(normalColumn, true); - capsColumn.add_attribute(normalColumn, 'text', 0); - - // insert caps column into treeview - refTreeViewQualityWebCam.insert_column(capsColumn, 0); - - // setup selection liststore - let capsSelection = refTreeViewQualityWebCam.get_selection(); - - // connect selection signal - capsSelection.connect('changed', self => { - let [isSelected,, iter] = self.get_selected(); - if (isSelected) { - let Caps = ctx.Ref_ListStore_QualityWebCam.get_value(iter, 0); - Lib.TalkativeLog(`-^-treeview row selected : ${Caps}`); - - this._settings.setOption(Settings.QUALITY_WEBCAM_SETTING_KEY, Caps); - - // update label webcam caps - ctx.Ref_Label_WebCamCaps.set_ellipsize(Pango.EllipsizeMode.END); - ctx.Ref_Label_WebCamCaps.set_text(Caps); - } - }); - - // fill combobox with quality option webcam - ctx._updateWebCamCaps(this._settings.getOption('i', Settings.DEVICE_INDEX_WEBCAM_SETTING_KEY)); - - // implements webcam corner position option - let refComboboxCornerWebCam = gtkDB.get_object('cbt_WebCamCorner'); - tmpS.bind( - Settings.CORNER_POSITION_WEBCAM_SETTING_KEY, - refComboboxCornerWebCam, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements webcam margin x position option - let refSpinnerMarginXWebCam = gtkDB.get_object('spb_WebCamMarginX'); - let adjustmentMarginX = new Gtk.Adjustment({ - value: 0, - lower: 0, - upper: 10000, - step_increment: 1, - page_increment: 10, - }); - refSpinnerMarginXWebCam.configure(adjustmentMarginX, 10, 0); - tmpS.bind( - Settings.MARGIN_X_WEBCAM_SETTING_KEY, - refSpinnerMarginXWebCam, - 'value', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements webcam margin y position option - let refSpinnerMarginYWebCam = gtkDB.get_object('spb_WebCamMarginY'); - let adjustmentMarginY = new Gtk.Adjustment({ - value: 0, - lower: 0, - upper: 10000, - step_increment: 1, - page_increment: 10, - }); - refSpinnerMarginYWebCam.configure(adjustmentMarginY, 10, 0); - tmpS.bind( - Settings.MARGIN_Y_WEBCAM_SETTING_KEY, - refSpinnerMarginYWebCam, - 'value', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements webcam aplha channel option - let refSpinnerAlphaWebCam = gtkDB.get_object('spb_WebCamAlpha'); - let adjustmentAlpha = new Gtk.Adjustment({ - value: 0.01, - lower: 0.0, - upper: 1.0, - step_increment: 0.05, - page_increment: 0.25, - }); - refSpinnerAlphaWebCam.configure(adjustmentAlpha, 0.25, 2); - tmpS.bind( - Settings.ALPHA_CHANNEL_WEBCAM_SETTING_KEY, - refSpinnerAlphaWebCam, - 'value', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements webcam type unit dimension option - let refComboboxTypeUnitWebCam = gtkDB.get_object('cbt_WebCamUnitMeasure'); - tmpS.bind( - Settings.TYPE_UNIT_WEBCAM_SETTING_KEY, - refComboboxTypeUnitWebCam, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements webcam width option - let refSpinnerWidthWebCam = gtkDB.get_object('spb_WebCamWidth'); - let adjustmentWidth = new Gtk.Adjustment({ - value: 20, - lower: 0, - upper: 10000, - step_increment: 1, - page_increment: 10, - }); - refSpinnerWidthWebCam.configure(adjustmentWidth, 10, 0); - tmpS.bind( - Settings.WIDTH_WEBCAM_SETTING_KEY, - refSpinnerWidthWebCam, - 'value', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements webcam heigth option - let refSpinnerHeightWebCam = gtkDB.get_object('spb_WebCamHeight'); - let adjustmentHeight = new Gtk.Adjustment({ - value: 10, - lower: 0, - upper: 10000, - step_increment: 1, - page_increment: 10, - }); - refSpinnerHeightWebCam.configure(adjustmentHeight, 10, 0); - tmpS.bind( - Settings.HEIGHT_WEBCAM_SETTING_KEY, - refSpinnerHeightWebCam, - 'value', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements webcam stack menu chooser - ctx.Ref_StackSwitcher_WebCam = gtkDB.get_object('sts_Webcam'); - // implements webcam stack obj - ctx.Ref_StackObj_WebCam = gtkDB.get_object('stk_Webcam'); - // implements webcam stack menu chooser - ctx.Ref_Label_WebCam = gtkDB.get_object('lbl_Webcam'); - // implements webcam caps stack menu chooser - ctx.Ref_Label_WebCamCaps = gtkDB.get_object('lbl_WebcamCaps'); - } - - /** - * @param {EasyScreenCastSettingsWidget} ctx the prefs/settings widget - * @param {Gtk.Builder} gtkDB the builder that loaded the UI glade file - * @param {Gio.Settings} tmpS the current settings - * @private - */ - _initTabFile(ctx, gtkDB, tmpS) { - // implements file name string rec option - let refTexteditFileName = gtkDB.get_object('txe_FileNameRec'); - tmpS.bind( - Settings.FILE_NAME_SETTING_KEY, - refTexteditFileName, - 'text', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements file container option - let refComboboxContainer = gtkDB.get_object('cbt_FileContainer'); - tmpS.bind( - Settings.FILE_CONTAINER_SETTING_KEY, - refComboboxContainer, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements file container resolution - let refStackFileResolution = gtkDB.get_object('stk_FileResolution'); - - // implements file resolution preset spinner - let refComboboxResolution = gtkDB.get_object('cbt_FileResolution'); - tmpS.bind( - Settings.FILE_RESOLUTION_TYPE_SETTING_KEY, - refComboboxResolution, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - - // intercept combobox res changed and update width/height value - refComboboxResolution.connect('changed', self => { - var activeRes = self.active; - Lib.TalkativeLog(`-^-preset combobox changed: ${activeRes}`); - if (activeRes >= 0 && activeRes < 15) { - var [h, w] = ctx._getResolutionPreset(activeRes); - - // update width/height - this._settings.setOption(Settings.FILE_RESOLUTION_HEIGHT_SETTING_KEY, h); - this._settings.setOption(Settings.FILE_RESOLUTION_WIDTH_SETTING_KEY, w); - Lib.TalkativeLog(`-^-Res changed h: ${h} w: ${w}`); - } - }); - - // load file resolution pref and upadte UI - var tmpRes = this._settings.getOption('i', Settings.FILE_RESOLUTION_TYPE_SETTING_KEY); - if (tmpRes < 0) - refStackFileResolution.set_visible_child_name('native'); - else if (tmpRes === 999) - refStackFileResolution.set_visible_child_name('custom'); - else - refStackFileResolution.set_visible_child_name('preset'); - - - // setup event on stack switcher - refStackFileResolution.connect('notify::visible-child-name', () => { - Lib.TalkativeLog('-^-stack_FR event grab'); - var page = refStackFileResolution.get_visible_child_name(); - Lib.TalkativeLog(`-^-active page -> ${page}`); - - if (page === 'native') { - // set option to -1 - this._settings.setOption(Settings.FILE_RESOLUTION_TYPE_SETTING_KEY, -1); - } else if (page === 'preset') { - // set option to fullHD 16:9 - this._settings.setOption(Settings.FILE_RESOLUTION_TYPE_SETTING_KEY, 8); - } else if (page === 'custom') { - // set option to 99 - this._settings.setOption(Settings.FILE_RESOLUTION_TYPE_SETTING_KEY, 999); - } else { - Lib.TalkativeLog('-^-page error'); - } - }); - - // implements file width option - let refSpinnerWidthRes = gtkDB.get_object('spb_ResWidth'); - let adjustmentResWidth = new Gtk.Adjustment({ - value: 640, - lower: 640, - upper: 3840, - step_increment: 1, - page_increment: 100, - }); - refSpinnerWidthRes.configure(adjustmentResWidth, 10, 0); - tmpS.bind( - Settings.FILE_RESOLUTION_WIDTH_SETTING_KEY, - refSpinnerWidthRes, - 'value', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements file heigth option - let refSpinnerHeightRes = gtkDB.get_object('spb_ResHeight'); - let adjustmentResHeight = new Gtk.Adjustment({ - value: 480, - lower: 480, - upper: 2160, - step_increment: 1, - page_increment: 100, - }); - refSpinnerHeightRes.configure(adjustmentResHeight, 10, 0); - tmpS.bind( - Settings.FILE_RESOLUTION_HEIGHT_SETTING_KEY, - refSpinnerHeightRes, - 'value', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements keep aspect ratio check box - let refCheckboxKeepAspectRatio = gtkDB.get_object('chb_FileResolution_kar'); - tmpS.bind( - Settings.FILE_RESOLUTION_KAR_SETTING_KEY, - refCheckboxKeepAspectRatio, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - - // implements resolution width scale option - let refScaleWidthRes = gtkDB.get_object('scl_ResWidth'); - refScaleWidthRes.set_valign(Gtk.Align.START); - refScaleWidthRes.set_adjustment(adjustmentResWidth); - refScaleWidthRes.set_digits(0); - refScaleWidthRes.set_value(this._settings.getOption('i', Settings.FILE_RESOLUTION_WIDTH_SETTING_KEY)); - - // implements resolution height scale option - let refScaleHeightRes = gtkDB.get_object('scl_ResHeight'); - refScaleHeightRes.set_valign(Gtk.Align.START); - refScaleHeightRes.set_adjustment(adjustmentResHeight); - refScaleHeightRes.set_digits(0); - refScaleHeightRes.set_value(this._settings.getOption('i', Settings.FILE_RESOLUTION_HEIGHT_SETTING_KEY)); - - // add marks on width/height file resolution - let ind = 0; - for (; ind < 13; ind++) { - var [h, w] = ctx._getResolutionPreset(ind); - refScaleWidthRes.add_mark(w, Gtk.PositionType.BOTTOM, ''); - refScaleHeightRes.add_mark(h, Gtk.PositionType.BOTTOM, ''); - } - - // implements file folder string rec option - let refFilechooserFileFolder = gtkDB.get_object('fcb_FilePathRec'); - // check state initial value - var tmpFolder = this._settings.getOption('s', Settings.FILE_FOLDER_SETTING_KEY); - Lib.TalkativeLog(`-^-folder for screencast: ${tmpFolder}`); - if (tmpFolder === '' || tmpFolder === null || tmpFolder === undefined) { - let result = null; - ctx.CtrlExe.Execute( - 'xdg-user-dir VIDEOS', - true, - (success, out) => { - Lib.TalkativeLog(`-^-CALLBACK sync S: ${success} out: ${out}`); - if (success && out !== '' && out !== undefined) - result = out.replace(/(\n)/g, ''); - }, - null - ); - - if (result !== null) { - Lib.TalkativeLog(`-^-xdg-user video: ${result}`); - tmpFolder = result; - } else { - Lib.TalkativeLog('-^-NOT SET xdg-user video'); - - ctx.CtrlExe.Execute( - '/usr/bin/sh -c "echo $HOME"', - true, - (success, out) => { - Lib.TalkativeLog(`-^-CALLBACK sync S: ${success} out: ${out}`); - if (success && out !== '' && out !== undefined) - tmpFolder = out.replace(/(\n)/g, ''); - }, - null - ); - } - - // connect keywebcam signal - this._settings._settings.connect( - `changed::${Settings.DEVICE_INDEX_WEBCAM_SETTING_KEY}`, - () => { - Lib.TalkativeLog('-^-webcam device changed'); - this._refreshWebcamOptions(); - } - ); - } - - refFilechooserFileFolder.set_label(`Selected: ${tmpFolder}`); - - refFilechooserFileFolder.connect('clicked', () => { - Lib.TalkativeLog('-^- file chooser button clicked...'); - - let dialog = new Gtk.FileChooserNative({ - 'title': 'Select folder', - 'transient-for': refFilechooserFileFolder.get_root(), - 'action': Gtk.FileChooserAction.SELECT_FOLDER, - 'accept-label': 'Ok', - 'cancel-label': 'Cancel', - }); - dialog.connect('response', (self, response) => { - if (response === Gtk.ResponseType.ACCEPT) { - var tmpPathFolder = self.get_file().get_path(); - Lib.TalkativeLog(`-^-file path get from widget : ${tmpPathFolder}`); - this._settings.setOption( - Settings.FILE_FOLDER_SETTING_KEY, - tmpPathFolder - ); - refFilechooserFileFolder.set_label(`Selected: ${tmpPathFolder}`); - } - ctx.fileChooserDialog = null; - }); - dialog.show(); - ctx.fileChooserDialog = dialog; // keep a reference to the dialog alive - }); - } - - /** - * @param {EasyScreenCastSettingsWidget} ctx the prefs/settings widget - * @param {Gtk.Builder} gtkDB the builder that loaded the UI glade file - * @param {Gio.Settings} tmpS the current settings - * @private - */ - _initTabSupport(ctx, gtkDB, tmpS) { - // implements textentry log - let refTextViewEscLog = gtkDB.get_object('txe_ContainerLog'); - let refBufferLog = refTextViewEscLog.get_buffer(); - - // implements verbose debug option - let refSwitchVerboseDebug = gtkDB.get_object('swt_VerboseDebug'); - tmpS.bind( - Settings.VERBOSE_DEBUG_SETTING_KEY, - refSwitchVerboseDebug, - 'active', - Gio.SettingsBindFlags.DEFAULT - ); - this._settings._settings.connect( - `changed::${Settings.VERBOSE_DEBUG_SETTING_KEY}`, - () => { - Lib.setDebugEnabled(this._settings.getOption('b', Settings.VERBOSE_DEBUG_SETTING_KEY)); - } - ); - - refSwitchVerboseDebug.connect('state-set', self => { - // update log display widgets - refTextViewEscLog.sensistive = self.active; - refComboboxLogChooser.sensitive = self.active; - }); - - // implements file resolution preset spinner - let refComboboxLogChooser = gtkDB.get_object('cbt_LogChooser'); - - // intercept combobox res changed and update width/height value - refComboboxLogChooser.connect('changed', self => { - const activeLog = self.active; - Lib.TalkativeLog(`-^-log combobox changed: ${activeLog}`); - switch (activeLog) { - case 0: - // clear buffer - refBufferLog.delete( - refBufferLog.get_start_iter(), - refBufferLog.get_end_iter() - ); - - ctx.CtrlExe.Execute( - 'journalctl --since "15 min ago" --output=cat --no-pager', - false, - success => { - Lib.TalkativeLog(`-^-CALLBACK async S= ${success}`); - }, - line => { - let esc = line.indexOf('[ESC]'); - if ( - line !== '' && - line !== undefined && - esc !== -1 - ) { - line += '\n'; - refBufferLog.insert( - refBufferLog.get_end_iter(), - line, - line.length - ); - } - } - ); - break; - case 1: - // clear buffer - refBufferLog.delete( - refBufferLog.get_start_iter(), - refBufferLog.get_end_iter() - ); - - ctx.CtrlExe.Execute( - 'journalctl --since "15 min ago" --output=cat --no-pager', - false, - success => { - Lib.TalkativeLog(`-^-CALLBACK async S= ${success}`); - if (success) { - if (refBufferLog.get_line_count() > 0) { - let strNOgsp = _( - 'No Gstreamer pipeline found' - ); - refBufferLog.insert( - refBufferLog.get_end_iter(), - strNOgsp, - strNOgsp.length - ); - } - } - }, - line => { - let esc = line.indexOf('-§-final GSP :'); - if ( - line !== '' && - line !== undefined && - esc !== -1 - ) { - line += '\n'; - refBufferLog.insert( - refBufferLog.get_end_iter(), - line, - line.length - ); - } - } - ); - break; - case 2: - // clear buffer - refBufferLog.delete( - refBufferLog.get_start_iter(), - refBufferLog.get_end_iter() - ); - - ctx.CtrlExe.Execute( - 'journalctl /usr/bin/gnome-shell --since "15 min ago" --output=cat --no-pager', - false, - success => { - Lib.TalkativeLog(`-^-CALLBACK async S= ${success}`); - }, - line => { - if (line !== '' && line !== undefined) { - line += '\n'; - refBufferLog.insert( - refBufferLog.get_end_iter(), - line, - line.length - ); - } - } - ); - break; - default: - break; - } - }); - - // update state of get log - refComboboxLogChooser.sensistive = this._settings.getOption('b', Settings.VERBOSE_DEBUG_SETTING_KEY); - - // implements default button action - let refButtonSetDefaultSettings = gtkDB.get_object('btn_DefaultOption'); - refButtonSetDefaultSettings.connect('clicked', () => - ctx._setDefaultsettings() - ); - } - - /** - * @param {EasyScreenCastSettingsWidget} ctx the prefs/settings widget - * @param {Gtk.Builder} gtkDB the builder that loaded the UI glade file - * @private - */ - _initTabInfo(ctx, gtkDB) { - // implements info img extension - let refImageEsc = gtkDB.get_object('img_ESC'); - refImageEsc.set_from_file(Lib.getImagePath(this._prefs.dir, 'Icon_Info.png')); - - // implements info version label - let refLabelVersion = gtkDB.get_object('lbl_Version'); - refLabelVersion.set_markup(`${_('Version: ')}${this._prefs.metadata.version} (${Lib.getFullVersion()})`); - } - - /** - * @param {number} device device index - * @private - */ - _updateWebCamCaps(device) { - Lib.TalkativeLog(`-^-webcam device index: ${device}`); - - if (device > 0) { - this._initializeWebcamHelper(); - var listCaps = this.CtrlWebcam.getListCapsDevice(device - 1); - Lib.TalkativeLog(`-^-webcam caps: ${listCaps.length}`); - if (listCaps !== null && listCaps !== undefined) { - this.Ref_ListStore_QualityWebCam.clear(); - for (var index in listCaps) { - this.Ref_ListStore_QualityWebCam.set( - this.Ref_ListStore_QualityWebCam.append(), - [0], - [listCaps[index]] - ); - } - } else { - Lib.TalkativeLog('-^-NO List Caps Webcam'); - this.Ref_ListStore_QualityWebCam.clear(); - this._settings.setOption(Settings.QUALITY_WEBCAM_SETTING_KEY, ''); - } - } else { - Lib.TalkativeLog('-^-NO Webcam recording'); - this.Ref_ListStore_QualityWebCam.clear(); - this._settings.setOption(Settings.QUALITY_WEBCAM_SETTING_KEY, ''); - } - } - - /** - * Refreshes the webcam settings. - * - * @private - */ - _refreshWebcamOptions() { - Lib.TalkativeLog('-^-refresh webcam options'); - this._initializeWebcamHelper(); - - // fill combobox with quality option webcam - this._updateWebCamCaps(this._settings.getOption('i', Settings.DEVICE_INDEX_WEBCAM_SETTING_KEY)); - - // update webcam widget state - this._updateStateWebcamOptions(); - } - - /** - * Initializes this.CtrlWebcam if it is null. - * - * @private - */ - _initializeWebcamHelper() { - if (this.CtrlWebcam === null) - this.CtrlWebcam = new UtilWebcam.HelperWebcam(_('Unspecified webcam')); - } - - /** - * @param {string} accel accelerator string parsable by Gtk.accelerator_parse, e.g. "<Super>E" - * @private - */ - _updateRowShortcut(accel) { - Lib.TalkativeLog(`-^-update row combo key accel: ${accel}`); - - let [key, mods] = [0, 0]; - - if (accel !== null && accel !== undefined) { - let ok; - [ok, key, mods] = Gtk.accelerator_parse(accel); - - if (ok !== true) { - Lib.TalkativeLog('-^-couldn\'t parse accel'); - key = 0; - mods = 0; - } - } - - Lib.TalkativeLog(`-^-key: ${key} mods: ${mods}`); - this.Ref_liststore_Shortcut.set( - this.Iter_ShortcutRow, - [Settings.SHORTCUT_COLUMN_KEY, Settings.SHORTCUT_COLUMN_MODS], - [key, mods] - ); - } - - /** - * @param {boolean} active custom or not custom GStream pipeline - * @private - */ - _setStateGSP(active) { - // update GSP text area - if (!active) { - Lib.TalkativeLog('-^-custom GSP'); - - this.Ref_stack_Quality.set_visible_child_name('pg_Custom'); - } else { - Lib.TalkativeLog('-^-NOT custom GSP'); - - this.Ref_stack_Quality.set_visible_child_name('pg_Preset'); - - var audio = false; - if (this._settings.getOption('i', Settings.INPUT_AUDIO_SOURCE_SETTING_KEY) > 0) - audio = true; - - this._settings.setOption( - Settings.PIPELINE_REC_SETTING_KEY, - Settings.getGSPstd(audio) - ); - } - } - - /** - * @private - */ - _updateStateWebcamOptions() { - Lib.TalkativeLog('-^-update webcam option widgets'); - - var tmpDev = this._settings.getOption( - 'i', - Settings.DEVICE_INDEX_WEBCAM_SETTING_KEY - ); - this._updateWebCamCaps(tmpDev); - if (tmpDev > 0) { - var arrDev = this.CtrlWebcam.getNameDevices(); - this.Ref_Label_WebCam.set_text(arrDev[tmpDev - 1]); - - // setup label webcam caps - var tmpCaps = this._settings.getOption( - 's', - Settings.QUALITY_WEBCAM_SETTING_KEY - ); - if (tmpCaps === '') { - this.Ref_Label_WebCamCaps.use_markup = true; - this.Ref_Label_WebCamCaps.set_markup( - _( - 'No Caps selected, please select one from the caps list' - ) - ); - } else { - this.Ref_Label_WebCamCaps.set_text(tmpCaps); - } - - // webcam recording show widget - this.Ref_StackSwitcher_WebCam.set_sensitive(true); - this.Ref_StackObj_WebCam.set_sensitive(true); - } else { - this.Ref_Label_WebCam.set_text(_('No webcam device selected')); - // setup label webcam caps - this.Ref_Label_WebCamCaps.set_text(_('-')); - // webcam NOT recording hide widget - this.Ref_StackSwitcher_WebCam.set_sensitive(false); - this.Ref_StackObj_WebCam.set_sensitive(false); - } - } - - /** - * @param {number} index index of the predefined resolutions - * @returns {Array} - * @private - */ - _getResolutionPreset(index) { - var arrRes = [ - [480, 640], - [480, 854], - [600, 800], - [720, 960], - [720, 1280], - [768, 1024], - [768, 1366], - [1024, 1280], - [1080, 1920], - [1200, 1600], - [1440, 2560], - [2048, 2560], - [2160, 3840], - ]; - if (index >= 0 && index < arrRes.length) - return arrRes[index]; - else - return null; - } - - /** - * function to restore default value of the settings - * - * @private - */ - _setDefaultsettings() { - Lib.TalkativeLog('-^-restore default option'); - - this._settings.setOption(Settings.SHOW_NOTIFY_ALERT_SETTING_KEY, true); - this._settings.setOption(Settings.SHOW_AREA_REC_SETTING_KEY, false); - this._settings.setOption(Settings.STATUS_INDICATORS_SETTING_KEY, 1); - this._settings.setOption(Settings.DRAW_CURSOR_SETTING_KEY, true); - this._settings.setOption(Settings.VERBOSE_DEBUG_SETTING_KEY, false); - this._settings.setOption(Settings.ACTIVE_CUSTOM_GSP_SETTING_KEY, false); - - this._settings.setOption(Settings.FPS_SETTING_KEY, 30); - this._settings.setOption(Settings.X_POS_SETTING_KEY, 0); - this._settings.setOption(Settings.Y_POS_SETTING_KEY, 0); - this._settings.setOption(Settings.WIDTH_SETTING_KEY, 600); - this._settings.setOption(Settings.HEIGHT_SETTING_KEY, 400); - - this._settings.setOption(Settings.FILE_NAME_SETTING_KEY, 'Screencast_%d_%t'); - this._settings.setOption(Settings.FILE_FOLDER_SETTING_KEY, ''); - this._settings.setOption(Settings.ACTIVE_POST_CMD_SETTING_KEY, false); - this._settings.setOption(Settings.ACTIVE_PRE_CMD_SETTING_KEY, false); - this._settings.setOption(Settings.POST_CMD_SETTING_KEY, 'xdg-open _fpath &'); - this._settings.setOption(Settings.INPUT_AUDIO_SOURCE_SETTING_KEY, 0); - this._settings.setOption(Settings.DEVICE_INDEX_WEBCAM_SETTING_KEY, 0); - this._settings.setOption(Settings.DEVICE_WEBCAM_SETTING_KEY, ''); - - this._settings.setOption(Settings.TIME_DELAY_SETTING_KEY, 0); - this._settings.setOption(Settings.FILE_CONTAINER_SETTING_KEY, 0); - this._settings.setOption(Settings.FILE_RESOLUTION_TYPE_SETTING_KEY, -1); - this._settings.setOption(Settings.QUALITY_SETTING_KEY, 1); - this._settings.setOption(Settings.QUALITY_WEBCAM_SETTING_KEY, ''); - this._settings.setOption(Settings.WIDTH_WEBCAM_SETTING_KEY, 20); - this._settings.setOption(Settings.HEIGHT_WEBCAM_SETTING_KEY, 10); - this._settings.setOption(Settings.TYPE_UNIT_WEBCAM_SETTING_KEY, 0); - this._settings.setOption(Settings.MARGIN_X_WEBCAM_SETTING_KEY, 0); - this._settings.setOption(Settings.MARGIN_Y_WEBCAM_SETTING_KEY, 0); - this._settings.setOption(Settings.ALPHA_CHANNEL_WEBCAM_SETTING_KEY, 0.75); - this._settings.setOption(Settings.CORNER_POSITION_WEBCAM_SETTING_KEY, 0); - } -}); - - -export default class EasyScreenCastPreferences extends ExtensionPreferences { - /** - * @param {Adw.PreferencesWindow} window preferences window? - * @returns {EasyScreenCastSettingsWidget} - */ - fillPreferencesWindow(window) { - window._settings = this.getSettings(); - - Lib.TalkativeLog('-^-Init pref widget'); - - const page = new Adw.PreferencesPage(); - - const group = new Adw.PreferencesGroup({ - title: _('EasyScreenCast'), - }); - page.add(group); - - const widget = new EasyScreenCastSettingsWidget(this); - group.add(widget); - - window.add(page); - } -} diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/schemas/gschemas.compiled b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/schemas/gschemas.compiled deleted file mode 100644 index 362d39eb573998ac109b0b56e9637cfdc2a4e295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2580 zcmZ8jU2GIp7`=#r4Ct%rLR@s>y92rSNq*aO8-GeXA@g_cE>Y+7H)>d6b1{x^#G@702+ZN zVDT(0fo=wtWmpa-S^z9ltjKUH_%@&|!|mYJKn_?7tOM@M&<@^^!2*B1<>^Vz&%Lh@ zqap{kfVU#LQ!Jh#Wd4~fRjfiHGS%4w7&|T1|B_X9imUo_%j*n zfX!{AztN{Q`vtECdJ4x*(5E(W26q9k?%Sy7Q}etY0QUe*JH2!CsTaWS1MdV*PxXF4 zpL!wuJ>Ud5wQ%51`qYfuIQTW-mqUMDpikWhe*%0Q2(}*km_D_M1NaP3E*|)TJ~hw% z5_tYXA>RCSWC?w0j?)ZY1Dt*Kxdy)P)OGMJ@Gjsf`~7CNr>4ILTm*Xd9-X33&HYxu z`+=9=IQlDnYR3O9@C0yh)!Fs*skz^i;7QKjC@8F5!>T0hNa~=J#HdnsQK~|*RuwIkA4!~&imUdR z9CDp91`w9cdyz9{yGf*jXr8c!@}UZ4N%<1Lj)wP1-_4bkKZve=te%lk_omIcvQwFB zxM5-^T6*1EbDnfOcJJQQWu9DIj9}^R_JQ2m+(;r53C0S_<)mU3;JC3Gl~{s~gR))F zA=fpOchJq&ro?ik0_&F*=_awX!wAjGUfNFiVG`R;;;F#aK@z!KIe$`lPnMjj9jkI? z)%+Xd6jwvjf;qu{VW4A9Q1J?O5K2EcI2<~0(X5vBocGHeKpn6YK)RWF%{tEe#sXMU zHUO;Is{lT%)i^R!-&yxr!&&d~I*RoGYc}r=-VdzpydUNPYXH`L-UF=ZybDhvCb^x&?AbGP&ASE*OQ9>>vR&|VeX_Cy^D)} zu-zMMM~B+)vtG8nPWt|spv+w}&x`Yp%4jIi()Q#~QlMw@yc8B4+buf2FH3X#nI_`u z_S!Drd7ICP?WsS#U09w~wLCAM=kCp3?7gxo?(a`R8Exx9vRRJKccjTHL?=FII?V@7 zr}?1iocW;Xoclr3DTJ=_Ak(S%7wa!OQ9=3k>;htZ9XoNNnMlfY;vlN^Vz}8a4av;0 p>^3in%2#I3Ff)E-P88sq^L7J2c2HPq!GM3g9%S#Ui6`g8^FK}H2&Di3 diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/schemas/org.gnome.shell.extensions.easyscreencast.gschema.xml b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/schemas/org.gnome.shell.extensions.easyscreencast.gschema.xml deleted file mode 100644 index 51bbf18..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/schemas/org.gnome.shell.extensions.easyscreencast.gschema.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - true -

Enable show notify and alert message - Enable show notify and alert message - - - false - Enable show area screencast during recording - Enable show area screencast during recording - - - 0 - select input audio source - select input audio source - - - false - Active custom GStreamer Pipeline - Active custom GStreamer Pipeline - - - 0 - Time in seconds fot delay recording - Time in seconds fot delay recording - - - false - Enable verbose debug - Enable verbose debug - - - 0 - X position of screencasting - X position of screencasting - - - 0 - Y position of screencasting - Y position of screencasting - - - 600 - width of screencasting - width of screencasting - - - 400 - height of screencasting - height of screencasting - - - 1 - active status indicators - active status indicators - - - true - draw the cursor into screencast - draw the cursor into screencast - - - 30 - fps of screencasting - fps of screencasting - - - 'vp9enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux' - gstreamer pipeline of screencasting - gstreamer pipeline of screencasting - - - 0 - select area of screencast - select area of screencast - - - 'Screencast_%d_%t' - file name template of screencast - file name template of screencast - - - '' - file folder of screencast - file folder of screencast - - - false - enable execute pre command - enable execute pre command - - - '' - command to execute - command to execute - - - false - enable execute post command - enable execute post command - - - 'xdg-open _fpath' - command to execute - command to execute - - - - E']]]> - - - - false - Enable keyboard shortcut - Enable keyboard shortcut - - - 0 - file screencast container - file screencast container - - - -1 - file screencast resolution type - file screencast resolution type [native(-1),preset(0-99),custom(99)] - - - true - file screencast resolution Keep Aspect Ratio - file screencast resolution Keep Aspect Ratio (add borders) - - - 0 - file screencast resolution width - file screencast resolution width - - - 0 - file screencast resolution height - file screencast resolution height - - - 1 - store the quality index option - store the quality index option - - - 0 - select webcam device - select webcam device - - - "" - selected webcam device path - selected webcam device path - - - "" - select webcam quality - select webcam quality - - - 20 - width webcam - width webcam - - - 10 - height webcam - height webcam - - - 0 - type of unit of measure webcam - type of unit of measure - - - 0 - margin x from border webcam - margin x webcam - - - 0 - margin y from border webcam - margin y from border webcam - - - 0.75 - - alpha channel webcam - aplha channel webcam - - - 0 - the corner position of webcam - the corner position of webcam - - - diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/selection.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/selection.js deleted file mode 100644 index c59076c..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/selection.js +++ /dev/null @@ -1,508 +0,0 @@ -/* -The MIT License (MIT) -Copyright (c) 2013 otto.allmendinger@gmail.com - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -'use strict'; - -import GObject from 'gi://GObject'; -import Meta from 'gi://Meta'; -import Clutter from 'gi://Clutter'; -import St from 'gi://St'; -import * as Main from 'resource:///org/gnome/shell/ui/main.js'; -import * as Signals from 'resource:///org/gnome/shell/misc/signals.js'; - -import {gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js'; - -import * as Lib from './convenience.js'; -import * as Ext from './extension.js'; -import * as UtilNotify from './utilnotify.js'; -import {DisplayApi} from './display_module.js'; - -/** - * @type {Capture} - */ -class Capture extends Signals.EventEmitter { - constructor() { - super(); - Lib.TalkativeLog('-£-capture selection init'); - - this._mouseDown = false; - - this.monitor = Main.layoutManager.focusMonitor; - - this._areaSelection = new St.Widget({ - name: 'area-selection', - style_class: 'area-selection', - visible: 'true', - reactive: 'true', - x: -10, - y: -10, - }); - - Main.uiGroup.add_child(this._areaSelection); - - this._areaResolution = new St.Label({ - style_class: 'area-resolution', - text: '', - }); - this._areaResolution.opacity = 255; - this._areaResolution.set_position(0, 0); - - Main.uiGroup.add_child(this._areaResolution); - - this._grab = Main.pushModal(this._areaSelection); - - if (this._grab) { - this._signalCapturedEvent = this._areaSelection.connect( - 'captured-event', - this._onCaptureEvent.bind(this) - ); - - this._setCaptureCursor(); - } else { - Lib.TalkativeLog('-£-Main.pushModal() === false'); - } - } - - /** - * @private - */ - _setDefaultCursor() { - DisplayApi.set_cursor(Meta.Cursor.DEFAULT); - } - - /** - * @private - */ - _setCaptureCursor() { - DisplayApi.set_cursor(Meta.Cursor.CROSSHAIR); - } - - /** - * @param {Clutter.Actor} actor the actor that received the event - * @param {Clutter.Event} event a Clutter.Event - * @private - */ - _onCaptureEvent(actor, event) { - if (event.type() === Clutter.EventType.KEY_PRESS) { - if (event.get_key_symbol() === Clutter.KEY_Escape) - this._stop(); - } - - this.emit('captured-event', event); - } - - /** - * Draws a on-screen rectangle showing the area that will be captured by screen cast. - * - * @param {object} rect rectangle - * @param {number} rect.x left position in pixels - * @param {number} rect.y top position in pixels - * @param {number} rect.w width in pixels - * @param {number} rect.h height in pixels - * @param {boolean} showResolution whether to display the size of the selected area - */ - drawSelection({x, y, w, h}, showResolution) { - this._areaSelection.set_position(x, y); - this._areaSelection.set_size(w, h); - - if (showResolution && w > 100 && h > 50) { - this._areaResolution.set_text(`${w} X ${h}`); - this._areaResolution.set_position( - x + (w / 2 - this._areaResolution.width / 2), - y + (h / 2 - this._areaResolution.height / 2) - ); - } else { - this._areaResolution.set_position(0, 0); - this._areaResolution.set_text(''); - } - } - - /** - * Clear drawing selection - */ - clearSelection() { - this.drawSelection( - { - x: -10, - y: -10, - w: 0, - h: 0, - }, - false - ); - } - - /** - * @private - */ - _stop() { - Lib.TalkativeLog('-£-capture selection stop'); - - this._areaSelection.disconnect(this._signalCapturedEvent); - this._setDefaultCursor(); - Main.uiGroup.remove_child(this._areaSelection); - Main.popModal(this._grab); - Main.uiGroup.remove_child(this._areaResolution); - this._areaSelection.destroy(); - this.emit('stop'); - } - - _saveRect(x, y, h, w) { - Lib.TalkativeLog(`-£-selection x:${x} y:${y} height:${h} width:${w}`); - - Ext.Indicator.saveSelectedRect(x, y, h, w); - Ext.Indicator._doDelayAction(); - } - - toString() { - return this.GTypeName; - } -} - -export class SelectionArea extends Signals.EventEmitter { - constructor() { - super(); - Lib.TalkativeLog('-£-area selection init'); - - this._mouseDown = false; - this._capture = new Capture(); - this._capture.connect('captured-event', this._onEvent.bind(this)); - this._capture.connect('stop', () => { - this._ctrlNotify.resetAlert(); - this.emit('stop'); - }); - - this._ctrlNotify = new UtilNotify.NotifyManager(); - this._ctrlNotify.createAlert( - _('Select an area for recording or press [ESC] to abort') - ); - } - - /** - * @param {Clutter.actor} capture the actor the captured the event - * @param {Clutter.Event} event a Clutter.Event - * @private - */ - _onEvent(capture, event) { - let type = event.type(); - let [x, y] = global.get_pointer(); - - if (type === Clutter.EventType.BUTTON_PRESS) { - [this._startX, this._startY] = [x, y]; - this._mouseDown = true; - } else if (this._mouseDown) { - let rect = _getRectangle(this._startX, this._startY, x, y); - if (type === Clutter.EventType.MOTION) { - this._capture.drawSelection(rect, true); - } else if (type === Clutter.EventType.BUTTON_RELEASE) { - this._capture._stop(); - - Lib.TalkativeLog(`-£-area x: ${rect.x} y: ${rect.y} height: ${rect.h} width: ${rect.w}`); - - this._capture._saveRect(rect.x, rect.y, rect.h, rect.w); - } - } - } - - toString() { - return this.GTypeName; - } -} - -export class SelectionWindow extends Signals.EventEmitter { - constructor() { - super(); - Lib.TalkativeLog('-£-window selection init'); - - this._windows = global.get_window_actors(); - this._capture = new Capture(); - this._capture.connect('captured-event', this._onEvent.bind(this)); - this._capture.connect('stop', () => { - this._ctrlNotify.resetAlert(); - this.emit('stop'); - }); - - this._ctrlNotify = new UtilNotify.NotifyManager(); - this._ctrlNotify.createAlert( - _('Select a window for recording or press [ESC] to abort') - ); - } - - /** - * @param {Clutter.Actor} capture the actor the captured the event - * @param {Clutter.Event} event a Clutter.Event - * @private - */ - _onEvent(capture, event) { - let type = event.type(); - let [x, y] = global.get_pointer(); - - this._selectedWindow = _selectWindow(this._windows, x, y); - - if (this._selectedWindow) - this._highlightWindow(this._selectedWindow); - else - this._clearHighlight(); - - - if (type === Clutter.EventType.BUTTON_PRESS) { - if (this._selectedWindow) { - this._capture._stop(); - - let maxHeight = global.screen_height; - let maxWidth = global.screen_width; - Lib.TalkativeLog(`-£-global screen area H: ${maxHeight} W: ${maxWidth}`); - - let [w, h] = this._selectedWindow.get_size(); - let [wx, wy] = this._selectedWindow.get_position(); - - Lib.TalkativeLog(`-£-windows pre wx: ${wx} wy: ${wy} height: ${h} width: ${w}`); - - if (wx < 0) - wx = 0; - if (wy < 0) - wy = 0; - if (wx + w > maxWidth) - w = maxWidth - wx; - if (wy + h > maxHeight) - h = maxHeight - wy; - - Lib.TalkativeLog(`-£-windows post wx: ${wx} wy: ${wy} height: ${h} width: ${w}`); - - this._capture._saveRect(wx, wy, h, w); - } - } - } - - /** - * @param {Clutter.Actor} win the window to highlight - * @private - */ - _highlightWindow(win) { - let rect = _getWindowRectangle(win); - Lib.TalkativeLog(`-£-window highlight on, pos/meas: x:${rect.x} y:${rect.y} w:${rect.w} h:${rect.h}`); - this._capture.drawSelection(rect, false); - } - - /** - * @private - */ - _clearHighlight() { - Lib.TalkativeLog('-£-window highlight off'); - this._capture.clearSelection(); - } - - toString() { - return this.GTypeName; - } -} - -export class SelectionDesktop extends Signals.EventEmitter { - constructor() { - super(); - Lib.TalkativeLog('-£-desktop selection init'); - const displayCount = DisplayApi.number_displays(); - Lib.TalkativeLog(`-£-Number of monitor ${displayCount}`); - - for (let i = 0; i < displayCount; i++) { - let tmpM = DisplayApi.display_geometry_for_index(i); - Lib.TalkativeLog(`-£-monitor ${i} geometry x=${tmpM.x} y=${tmpM.y} w=${tmpM.width} h=${tmpM.height}`); - } - - this._capture = new Capture(); - this._capture.connect('captured-event', this._onEvent.bind(this)); - this._capture.connect('stop', () => { - this._ctrlNotify.resetAlert(); - this.emit('stop'); - }); - - this._ctrlNotify = new UtilNotify.NotifyManager(); - this._ctrlNotify.createAlert( - _('Select a desktop for recording or press [ESC] to abort') - ); - } - - /** - * @param {Clutter.Actor} capture the actor that captured the event - * @param {Clutter.Event} event a Clutter.Event - * @private - */ - _onEvent(capture, event) { - let type = event.type(); - - if (type === Clutter.EventType.BUTTON_PRESS) { - this._capture._stop(); - - let tmpM = Main.layoutManager.currentMonitor; - - let x = tmpM.x; - let y = tmpM.y; - let height = tmpM.height; - let width = tmpM.width; - Lib.TalkativeLog(`-£-desktop x: ${x} y: ${y} height: ${height} width: ${width}`); - - this._capture._saveRect(x, y, height, width); - } - } - - toString() { - return this.GTypeName; - } -} - -export class AreaRecording extends GObject.Object { - constructor() { - super(); - Lib.TalkativeLog('-£-area recording init'); - - this._areaRecording = new St.Widget({ - name: 'area-recording', - style_class: 'area-recording', - visible: 'true', - reactive: 'false', - x: -10, - y: -10, - }); - - let [recX, recY, recW, recH] = Ext.Indicator.getSelectedRect(); - let tmpH = Main.layoutManager.currentMonitor.height; - let tmpW = Main.layoutManager.currentMonitor.width; - - Main.uiGroup.add_child(this._areaRecording); - - Main.overview.connect('showing', () => { - Lib.TalkativeLog('-£-overview opening'); - - Main.uiGroup.remove_child(this._areaRecording); - }); - - Main.overview.connect('hidden', () => { - Lib.TalkativeLog('-£-overview closed'); - - Main.uiGroup.add_child(this._areaRecording); - }); - - if (recX + recW <= tmpW - 5 && recY + recH <= tmpH - 5) - this.drawArea(recX - 2, recY - 2, recW + 4, recH + 4); - } - - /** - * @param {number} x left position - * @param {number} y top position - * @param {number} w width - * @param {number} h height - */ - drawArea(x, y, w, h) { - Lib.TalkativeLog('-£-draw area recording'); - - this._visible = true; - this._areaRecording.set_position(x, y); - this._areaRecording.set_size(w, h); - } - - /** - * Clears the drawing area - */ - clearArea() { - Lib.TalkativeLog('-£-hide area recording'); - - this._visible = false; - this.drawArea(-10, -10, 0, 0); - } - - /** - * @returns {boolean} - */ - isVisible() { - return this._visible; - } - - toString() { - return this.GTypeName; - } -} - -/** - * @param {number} x1 left position - * @param {number} y1 top position - * @param {number} x2 right position - * @param {number} y2 bottom position - * @returns {{x: number, y: number, w: number, h: number}} - */ -function _getRectangle(x1, y1, x2, y2) { - return { - x: Math.min(x1, x2), - y: Math.min(y1, y2), - w: Math.abs(x1 - x2), - h: Math.abs(y1 - y2), - }; -} - -/** - * @param {Clutter.Actor} win a Clutter.Actor - * @returns {{x: number, y: number, w: number, h: number}} - */ -function _getWindowRectangle(win) { - let [tw, th] = win.get_size(); - let [tx, ty] = win.get_position(); - - return { - x: tx, - y: ty, - w: tw, - h: th, - }; -} - -/** - * @param {Array(Clutter.Actor)} windows all windows on the display - * @param {number} x left position - * @param {number} y top position - * @returns {Clutter.Actor} - */ -function _selectWindow(windows, x, y) { - let filtered = windows.filter(win => { - if ( - win !== undefined && - win.visible && - typeof win.get_meta_window === 'function' - ) { - Lib.TalkativeLog(`-£-selectWin x:${x} y:${y}`); - - let [w, h] = win.get_size(); - let [wx, wy] = win.get_position(); - Lib.TalkativeLog(`-£-selectWin w:${w} h:${h} wx:${wx} wy:${wy}`); - - return wx <= x && wy <= y && wx + w >= x && wy + h >= y; - } else { - return false; - } - }); - - filtered.sort((a, b) => { - return ( - a.get_meta_window().get_layer() <= b.get_meta_window().get_layer() - ); - }); - - return filtered[0]; -} diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/settings.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/settings.js deleted file mode 100644 index 5d67302..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/settings.js +++ /dev/null @@ -1,146 +0,0 @@ -/* - Copyright (C) 2013 Borsato Ivano - - The JavaScript code in this page is free software: you can - redistribute it and/or modify it under the terms of the GNU - General Public License (GNU GPL) as published by the Free Software - Foundation, either version 3 of the License, or (at your option) - any later version. The code is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. -*/ - -'use strict'; - -import GObject from 'gi://GObject'; - -// setting keys -export const INPUT_AUDIO_SOURCE_SETTING_KEY = 'input-audio-source'; -export const ACTIVE_POST_CMD_SETTING_KEY = 'execute-post-cmd'; -export const POST_CMD_SETTING_KEY = 'post-cmd'; -export const ACTIVE_PRE_CMD_SETTING_KEY = 'execute-pre-cmd'; -export const PRE_CMD_SETTING_KEY = 'pre-cmd'; -export const ACTIVE_CUSTOM_GSP_SETTING_KEY = 'active-custom-gsp'; -export const ACTIVE_SHORTCUT_SETTING_KEY = 'active-shortcut'; -export const SHORTCUT_KEY_SETTING_KEY = 'shortcut-key'; -export const TIME_DELAY_SETTING_KEY = 'delay-time'; -export const SHOW_NOTIFY_ALERT_SETTING_KEY = 'show-notify-alert'; -export const SHOW_AREA_REC_SETTING_KEY = 'show-area-rec'; -export const VERBOSE_DEBUG_SETTING_KEY = 'verbose-debug'; -export const PIPELINE_REC_SETTING_KEY = 'pipeline'; -export const FPS_SETTING_KEY = 'fps'; -export const STATUS_INDICATORS_SETTING_KEY = 'status-indicators'; -export const X_POS_SETTING_KEY = 'x-pos'; -export const Y_POS_SETTING_KEY = 'y-pos'; -export const WIDTH_SETTING_KEY = 'width-rec'; -export const HEIGHT_SETTING_KEY = 'height-rec'; -export const DRAW_CURSOR_SETTING_KEY = 'draw-cursor'; -export const AREA_SCREEN_SETTING_KEY = 'area-screen'; -export const FILE_NAME_SETTING_KEY = 'file-name'; -export const FILE_FOLDER_SETTING_KEY = 'file-folder'; -export const FILE_CONTAINER_SETTING_KEY = 'file-container'; -export const FILE_RESOLUTION_TYPE_SETTING_KEY = 'file-resolution-type'; -export const FILE_RESOLUTION_KAR_SETTING_KEY = 'file-resolution-kar'; -export const FILE_RESOLUTION_WIDTH_SETTING_KEY = 'file-resolution-width'; -export const FILE_RESOLUTION_HEIGHT_SETTING_KEY = 'file-resolution-height'; -export const QUALITY_SETTING_KEY = 'quality-index'; -export const DEVICE_INDEX_WEBCAM_SETTING_KEY = 'device-webcam-index'; -export const DEVICE_WEBCAM_SETTING_KEY = 'device-webcam'; -export const QUALITY_WEBCAM_SETTING_KEY = 'quality-webcam'; -export const WIDTH_WEBCAM_SETTING_KEY = 'width-webcam'; -export const HEIGHT_WEBCAM_SETTING_KEY = 'height-webcam'; -export const TYPE_UNIT_WEBCAM_SETTING_KEY = 'type-unit-webcam'; -export const MARGIN_X_WEBCAM_SETTING_KEY = 'margin-x-webcam'; -export const MARGIN_Y_WEBCAM_SETTING_KEY = 'margin-y-webcam'; -export const ALPHA_CHANNEL_WEBCAM_SETTING_KEY = 'alpha-channel-webcam'; -export const CORNER_POSITION_WEBCAM_SETTING_KEY = 'corner-position-webcam'; - -// shortcut tree view columns -export const SHORTCUT_COLUMN_KEY = 0; -export const SHORTCUT_COLUMN_MODS = 1; - -export const Settings = GObject.registerClass(class EasyScreenCastSettings extends GObject.Object { - constructor(settings) { - super(); - this._settings = settings; - } - - /** - * getter option - * - * @param {string} type value type of the option. one of 'b', 'i', 's', 'd', 'as' - * @param {string} key option key - * @returns {string} - */ - getOption(type, key) { - switch (type) { - case 'b': - return this._settings.get_boolean(key); - case 'i': - return this._settings.get_int(key); - case 's': - return this._settings.get_string(key); - case 'd': - return this._settings.get_double(key); - case 'as': - return this._settings.get_strv(key); - } - - return ''; - } - - /** - * setter option - * - * @param {string} key option key - * @param {boolean|number|string|double|object} option option value - * @returns {string} empty string if successful, 'ERROR' otherwise - */ - setOption(key, option) { - switch (typeof option) { - case 'boolean': - this._settings.set_boolean(key, option); - break; - - case 'number': - this._settings.set_int(key, option); - break; - - case 'string': - this._settings.set_string(key, option); - break; - - case 'double': - this._settings.set_double(key, option); - break; - - case 'object': - this._settings.set_strv(key, option); - break; - - default: - return 'ERROR'; - } - return ''; - } - - destroy() { - if (this._settings) - this._settings = null; - } -}); - - -/** - * get a standard gsp pipeline - * - * @param {boolean} audio with or without audio - * @returns {string} - */ -export function getGSPstd(audio) { - // TODO update gsp - if (audio) - return 'queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! videorate ! vp8enc min_quantizer=0 max_quantizer=5 cpu-used=3 deadline=1000000 threads=%T ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! mux. pulsesrc ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! audioconvert ! vorbisenc ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! mux. webmmux name=mux '; - else - return 'vp9enc min_quantizer=0 max_quantizer=5 cpu-used=3 deadline=1000000 threads=%T ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! webmmux'; -} diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/stylesheet.css b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/stylesheet.css deleted file mode 100644 index 2802bd6..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/stylesheet.css +++ /dev/null @@ -1,36 +0,0 @@ -.RecordAction-label { - font-size: 15px; - font-weight: bold; -} - -.area-selection { - background-color: rgba(255, 0, 0, 0.5); - border: 2px solid rgba(255, 0, 0, 1); -} - -.area-recording { - border-style: dashed; - border: 2px rgba(255, 0, 0, 1); -} - -.alert-msg { - font-size: 40px; - font-weight: bold; - color: #ffffff; - background-color: rgba(10, 10, 10, 0.7); - border-radius: 5px; - padding: .5em; -} - -.area-resolution { - font-size: 20px; - font-weight: bold; - color: #ffffff; - background-color: rgba(0, 0, 0, 0.0); -} - -.time-label { - font-size: 14px; - padding-right: 5px; - color: #ff0000; -} diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/timer.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/timer.js deleted file mode 100644 index ca168f1..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/timer.js +++ /dev/null @@ -1,257 +0,0 @@ -/* - Copyright (C) 2013 Borsato Ivano - - The JavaScript code in this page is free software: you can - redistribute it and/or modify it under the terms of the GNU - General Public License (GNU GPL) as published by the Free Software - Foundation, either version 3 of the License, or (at your option) - any later version. The code is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. -*/ - -'use strict'; - -import GObject from 'gi://GObject'; -import GLib from 'gi://GLib'; -import * as Lib from './convenience.js'; - -/* - DELAY TIMER -*/ -let DelaySec = 0; -let timerDelayId = null; -let CallbackFuncDelay = null; -let ElapsedSec; - -/** - * @type {TimerDelay} - */ -export const TimerDelay = GObject.registerClass({ - GTypeName: 'EasyScreenCast_TimerDelay', -}, class TimerDelay extends GObject.Object { - /** - * Create a new timer - * - * @param {number} delay delay in seconds - * @param {Function} callback callback function that is called after delay seconds (without arguments) - * @param {*} scope scope for the callback - */ - constructor(delay, callback, scope) { - super(); - if (isNaN(delay)) { - Lib.TalkativeLog(`-%-delay is NOT a number :${delay}`); - } else { - Lib.TalkativeLog(`-%-init TimerDelay called - sec : ${delay}`); - - DelaySec = delay; - ElapsedSec = 1; - - this.setCallback(callback); - this.Scope = scope; - } - } - - /** - * Set the callback-function - * - * @param {Function} callback callback function that is called after delay seconds (without arguments) - */ - setCallback(callback) { - Lib.TalkativeLog('-%-setcallback TimerDelay called'); - - if ( - callback === undefined || - callback === null || - typeof callback !== 'function' - ) - throw TypeError("'callback' needs to be a function."); - - CallbackFuncDelay = callback; - } - - /** - * Set the delay time - * - * @param {number} delay delay in seconds - */ - setDelay(delay) { - Lib.TalkativeLog(`-%-setdelay TimerDelay called: ${delay}`); - - DelaySec = delay; - } - - /** - * Start or restart a new timer - */ - begin() { - Lib.TalkativeLog('-%-start TimerDelay called'); - this.stop(); - - timerDelayId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 1000, () => - this._callbackInternal() - ); - } - - /** - * Stop the current timer - */ - stop() { - Lib.TalkativeLog('-%-stop TimerDelay called'); - if (timerDelayId !== null) { - if (GLib.source_remove(timerDelayId)) { - timerDelayId = null; - - ElapsedSec = 1; - } - } - } - - /** - * A convenient way to restart the timer. - */ - restart() { - this.stop(); - this.begin(); - } - - /** - * The internal callback-function. - * - * @private - * @returns {boolean} - */ - _callbackInternal() { - Lib.TalkativeLog(`-%-internalFunction TimerDelay called | Sec = ${ElapsedSec} Sec delay = ${DelaySec}`); - if (ElapsedSec >= DelaySec) { - CallbackFuncDelay.apply(this.Scope, []); - ElapsedSec = 1; - return false; - } else { - ElapsedSec++; - return true; - } - } -}); - -/* - COUNTING TIMER -*/ -let timerCountingId = null; -let CallbackFuncCounting = null; -let isRunning = false; -let secpassed = 0; - -/** - * @type {TimerCounting} - */ -export const TimerCounting = GObject.registerClass({ - GTypeName: 'EasyScreenCast_TimerCounting', -}, class TimerCounting extends GObject.Object { - /** - * Callback for the counting timer. - * - * @callback TimerCounting~callback - * @param {number} count seconds passed - * @param {boolean} alertEnd whether the timer is ending - */ - - /** - * Create a new timer - * - * @param {TimerCounting~callback} callback callback function that is called every second - * @param {EasyScreenCast_Indicator} scope scope for the callback function. This is also used to updateTimeLabel. - */ - constructor(callback, scope) { - super(); - Lib.TalkativeLog('-%-init TimerCounting called'); - - this.setCallback(callback); - secpassed = 0; - this.Scope = scope; - } - - /** - * Set the callback-function - * - * @param {TimerCounting~callback} callback callback function that is called every second - */ - setCallback(callback) { - Lib.TalkativeLog('-%-setcallback TimerCounting called'); - - if ( - callback === undefined || - callback === null || - typeof callback !== 'function' - ) - throw TypeError("'callback' needs to be a function."); - - CallbackFuncCounting = callback; - } - - /** - * Start or restart a new timer - */ - begin() { - Lib.TalkativeLog('-%-start TimerCounting called'); - - if (isRunning) - this.stop(); - - isRunning = true; - - timerCountingId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 1000, () => - this._callbackInternal() - ); - } - - /** - * Stop the current timer - */ - stop() { - Lib.TalkativeLog('-%-stop TimerCounting called'); - - isRunning = false; - - if (timerCountingId !== null && GLib.source_remove(timerCountingId)) - timerCountingId = null; - } - - /** - * A convenient way to stop timer - */ - halt() { - isRunning = false; - } - - /** - * The internal callback-function. Calls a function that handles - * the desktop notifications and one that sets the time label next - * to the icon. - * - * @private - * @returns {boolean} - */ - _callbackInternal() { - if (isRunning === false) { - Lib.TalkativeLog('-%-finish TimerCounting '); - - CallbackFuncCounting.apply(this.Scope, [secpassed, true]); - secpassed = 0; - - this.stop(); - this.Scope.updateTimeLabel(''); - - return false; - } else { - secpassed++; - - Lib.TalkativeLog(`-%-continued TimerCounting | sec: ${secpassed}`); - - CallbackFuncCounting.apply(this.Scope, [secpassed, false]); - this.Scope.updateTimeLabel(secpassed); - - return true; - } - } -}); diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilaudio.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilaudio.js deleted file mode 100644 index b07e181..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilaudio.js +++ /dev/null @@ -1,319 +0,0 @@ -/* - Copyright (C) 2015 Borsato Ivano - - The JavaScript code in this page is free software: you can - redistribute it and/or modify it under the terms of the GNU - General Public License (GNU GPL) as published by the Free Software - Foundation, either version 3 of the License, or (at your option) - any later version. The code is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. -*/ - -'use strict'; - -import GObject from 'gi://GObject'; -import GIRepository from 'gi://GIRepository'; -GIRepository.Repository.prepend_search_path('/usr/lib/gnome-shell'); -GIRepository.Repository.prepend_library_path('/usr/lib/gnome-shell'); -GIRepository.Repository.prepend_search_path('/usr/lib64/gnome-shell'); -GIRepository.Repository.prepend_library_path('/usr/lib64/gnome-shell'); -import Gvc from 'gi://Gvc'; - -import * as Lib from './convenience.js'; -import * as Settings from './settings.js'; -import * as Ext from './extension.js'; - -/** - * @type {MixerAudio} - */ -export const MixerAudio = GObject.registerClass({ - GTypeName: 'EasyScreenCast_MixerAudio', -}, class MixerAudio extends GObject.Object { - constructor() { - super(); - Lib.TalkativeLog('-#-mixer constructor'); - - this._mixerControl = this._createMixerControl(); - this._isConnected = true; - this._mixerControl.connect('state-changed', () => - this._onChangeStatePAC() - ); - - // more log for debug - if (Lib.debugEnabled) { - this._mixerControl.connect('stream_added', (control, id) => { - this._onStreamAdd(control, id); - }); - this._mixerControl.connect('stream_removed', (control, id) => { - this._onStreamRemove(control, id); - }); - } - } - - /** - * @returns {Gvc.MixerControl} - * @private - */ - _createMixerControl() { - Lib.TalkativeLog('-#-mixer create'); - - // https://gitlab.gnome.org/GNOME/libgnome-volume-control - var _mixerTmp = new Gvc.MixerControl({ - name: 'ESC Mixer Control', - }); - _mixerTmp.open(); - - return _mixerTmp; - } - - _onChangeStatePAC() { - Lib.TalkativeLog('-#-mixer state changed'); - - switch (this._mixerControl.get_state()) { - case Gvc.MixerControlState.CLOSED: - Lib.TalkativeLog('-#-Mixer close'); - this._isConnected = false; - break; - case Gvc.MixerControlState.CONNECTING: - Lib.TalkativeLog('-#-Mixer connecting'); - this._isConnected = false; - break; - case Gvc.MixerControlState.FAILED: - Lib.TalkativeLog('-#-Mixer failed'); - this._isConnected = false; - break; - case Gvc.MixerControlState.READY: - Lib.TalkativeLog('-#-Mixer ready'); - this._isConnected = true; - - // more log for debug - if (Lib.debugEnabled) - this._getInfoPA(); - - break; - default: - Lib.TalkativeLog('-#-Mixer UNK'); - this._isConnected = false; - break; - } - } - - /** - * Gets a list of input audio sources. - * - * @returns {Array} - */ - getListInputAudio() { - Lib.TalkativeLog('-#-get list input audio'); - - if (this._isConnected) { - var arrayTmp = []; - - var tmpSinks = this._mixerControl.get_sinks(); - Lib.TalkativeLog(`-#-Mixer sink -> ${tmpSinks.length}`); - for (let x in tmpSinks) { - Lib.TalkativeLog(`-#-sink index: ${tmpSinks[x].index}`); - Lib.TalkativeLog(`-#-sink name: ${tmpSinks[x].name}`); - Lib.TalkativeLog( - `-#-sink description: ${tmpSinks[x].description}` - ); - Lib.TalkativeLog(`-#-sink port: ${tmpSinks[x].port}`); - - arrayTmp.push({ - desc: tmpSinks[x].description, - name: tmpSinks[x].name, - port: tmpSinks[x].port, - sortable: true, - resizeable: true, - }); - } - - var tmpSources = this._mixerControl.get_sources(); - Lib.TalkativeLog(`-#-Mixer sources -> ${tmpSources.length}`); - for (let x in tmpSources) { - Lib.TalkativeLog(`-#-source index: ${tmpSources[x].index}`); - Lib.TalkativeLog(`-#-source name: ${tmpSources[x].name}`); - Lib.TalkativeLog( - `-#-source description: ${tmpSources[x].description}` - ); - Lib.TalkativeLog(`-#-source port: ${tmpSources[x].port}`); - - arrayTmp.push({ - desc: tmpSources[x].description, - name: tmpSources[x].name, - port: tmpSources[x].port, - sortable: true, - resizeable: true, - }); - } - - Lib.TalkativeLog(`-#-MIXER SOURCE TOT -> ${arrayTmp.length}`); - - return arrayTmp; - } else { - Lib.TalkativeLog('-#-Error lib pulse NOT present or NOT respond'); - } - - return []; - } - - /** - * @returns {string} - */ - getAudioSource() { - Lib.TalkativeLog('-#-get source audio choosen'); - - var arrtmp = this.getListInputAudio(); - var index = Ext.Indicator.getSettings().getOption('i', Settings.INPUT_AUDIO_SOURCE_SETTING_KEY) - 2; - - if (index >= 0 && index < arrtmp.length) { - return arrtmp[index].name; - } else { - Lib.TalkativeLog('-#-ERROR, audio source missing'); - Ext.Indicator.getSettings().setOption(Settings.INPUT_AUDIO_SOURCE_SETTING_KEY, 0); - - return ''; - } - } - - /** - * @param {Gvc.MixerControl} control the mixer control to which the stream was added - * @param {number} id the stream id - * @private - */ - _onStreamAdd(control, id) { - Lib.TalkativeLog(`-#-mixer stream add - ID: ${id}`); - var streamTmp = control.lookup_stream_id(id); - - if ( - streamTmp.name === 'GNOME Shell' && - streamTmp.description === 'Record Stream' - ) { - Lib.TalkativeLog('-#-stream gnome recorder captured'); - - Lib.TalkativeLog(`-#-stream index: ${streamTmp.index}`); - Lib.TalkativeLog(`-#-stream card index: ${streamTmp.card_index}`); - Lib.TalkativeLog(`-#-application_ID: ${streamTmp.application_id}`); - Lib.TalkativeLog(`-#-stream name: ${streamTmp.name}`); - Lib.TalkativeLog(`-#-stream icon: ${streamTmp.icon_name}`); - Lib.TalkativeLog(`-#-stream description: ${streamTmp.description}`); - Lib.TalkativeLog(`-#-stream port: ${streamTmp.port}`); - } - } - - /** - * @param {Gvc.MixerControl} control the mixer control from where the stream was removed - * @param {number} id stream id - * @private - */ - _onStreamRemove(control, id) { - Lib.TalkativeLog(`-#-mixer stream remove - ID: ${id}`); - // note: the stream has been already removed, so - // control.lookup_stream_id(id) won't return anything - } - - /** - * @private - */ - _getInfoPA() { - var tmp = this._mixerControl.get_cards(); - Lib.TalkativeLog(`#-# mixer cards -> ${tmp.length}`); - for (let x in tmp) { - Lib.TalkativeLog(`-#-card index: ${tmp[x].index}`); - Lib.TalkativeLog(`-#-card name: ${tmp[x].name}`); - Lib.TalkativeLog(`-#-card icon: ${tmp[x].icon_name}`); - Lib.TalkativeLog(`-#-card profile: ${tmp[x].profile}`); - Lib.TalkativeLog(`-#-card human profile: ${tmp[x].human_profile}`); - } - - tmp = this._mixerControl.get_sources(); - Lib.TalkativeLog(`#-# mixer sources -> ${tmp.length}`); - for (let x in tmp) { - Lib.TalkativeLog(`-#-source index: ${tmp[x].index}`); - Lib.TalkativeLog(`-#-application_ID: ${tmp[x].application_id}`); - Lib.TalkativeLog(`-#-source name: ${tmp[x].name}`); - Lib.TalkativeLog(`-#-source icon: ${tmp[x].icon_name}`); - Lib.TalkativeLog(`-#-source description: ${tmp[x].description}`); - Lib.TalkativeLog(`-#-source port: ${tmp[x].port}`); - } - - tmp = this._mixerControl.get_source_outputs(); - Lib.TalkativeLog(`#-# mixer source output -> ${tmp.length}`); - for (let x in tmp) { - Lib.TalkativeLog(`-#-sourceouput index: ${tmp[x].index}`); - Lib.TalkativeLog(`-#-application_ID: ${tmp[x].application_id}`); - Lib.TalkativeLog(`-#-sourceouput name: ${tmp[x].name}`); - Lib.TalkativeLog(`-#-sourceoutput icon: ${tmp[x].icon_name}`); - Lib.TalkativeLog( - `-#-sourceoutput description: ${tmp[x].description}` - ); - Lib.TalkativeLog(`-#-sourceoutput port: ${tmp[x].port}`); - } - - tmp = this._mixerControl.get_sinks(); - Lib.TalkativeLog(`#-# mixer sink -> ${tmp.length}`); - for (let x in tmp) { - Lib.TalkativeLog(`-#-sink index: ${tmp[x].index}`); - Lib.TalkativeLog(`-#-application_ID: ${tmp[x].application_id}`); - Lib.TalkativeLog(`-#-sink name: ${tmp[x].name}`); - Lib.TalkativeLog(`-#-sink icon: ${tmp[x].icon_name}`); - Lib.TalkativeLog(`-#-sink description: ${tmp[x].description}`); - Lib.TalkativeLog(`-#-sink port: ${tmp[x].port}`); - } - - tmp = this._mixerControl.get_sink_inputs(); - Lib.TalkativeLog(`#-# mixer sink input -> ${tmp.length}`); - for (let x in tmp) { - Lib.TalkativeLog(`-#-sink input index: ${tmp[x].index}`); - Lib.TalkativeLog(`-#-application_ID: ${tmp[x].application_id}`); - Lib.TalkativeLog(`-#-sink input name: ${tmp[x].name}`); - Lib.TalkativeLog(`-#-sink input icon: ${tmp[x].icon_name}`); - Lib.TalkativeLog( - `-#-sink input description: ${tmp[x].description}` - ); - Lib.TalkativeLog(`-#-sink input port: ${tmp[x].port}`); - } - - tmp = this._mixerControl.get_streams(); - Lib.TalkativeLog(`#-# mixer stream -> ${tmp.length}`); - for (let x in tmp) { - Lib.TalkativeLog(`-#-STREAM index: ${tmp[x].index}`); - Lib.TalkativeLog(`-#-application_ID: ${tmp[x].application_id}`); - Lib.TalkativeLog(`-#-stream name: ${tmp[x].name}`); - Lib.TalkativeLog(`-#-stream icon: ${tmp[x].icon_name}`); - Lib.TalkativeLog(`-#-stream description: ${tmp[x].description}`); - - var tmp1 = tmp[x].get_ports(); - for (let y in tmp1) { - Lib.TalkativeLog(`-##-stream port number: ${y}`); - Lib.TalkativeLog(`-##-stream port name: ${tmp1[y].port}`); - Lib.TalkativeLog( - `-##-stream port human name: ${tmp1[y].human_port}` - ); - Lib.TalkativeLog( - `-##-stream port priority: ${tmp1[y].priority}` - ); - } - } - } - - /** - * @returns {boolean} - */ - checkAudio() { - Lib.TalkativeLog(`-#-check GVC lib presence: ${this._isConnected}`); - - return this._isConnected; - } - - /** - * Destroy mixer control - */ - destroy() { - if (this._mixerControl) { - this._mixerControl.close(); - this._mixerControl = null; - } - } -}); diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilexecmd.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilexecmd.js deleted file mode 100644 index 058b810..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilexecmd.js +++ /dev/null @@ -1,264 +0,0 @@ -/* - Copyright (C) 2017 Borsato Ivano - - The JavaScript code in this page is free software: you can - redistribute it and/or modify it under the terms of the GNU - General Public License (GNU GPL) as published by the Free Software - Foundation, either version 3 of the License, or (at your option) - any later version. The code is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. -*/ - -'use strict'; - -import GObject from 'gi://GObject'; -import GLib from 'gi://GLib'; -import Gio from 'gi://Gio'; -import * as Lib from './convenience.js'; - -/** - * @type {ExecuteStuff} - */ -export const ExecuteStuff = GObject.registerClass({ - GTypeName: 'EasyScreenCast_ExecuteStuff', -}, class ExecuteStuff extends GObject.Object { - /** - * @param {EasyScreenCastSettingsWidget|EasyScreenCastIndicator} scope the scope for executing callback methods - * @private - */ - constructor(scope) { - super(); - Lib.TalkativeLog(`-¶-init scope:${scope}`); - - this.Scope = scope; - this.Callback = null; - } - - /** - * @param {string} cmd the command to be executed - * @returns {*[]} - * @private - */ - _parseCmd(cmd) { - let successP, argv; - - try { - [successP, argv] = GLib.shell_parse_argv(cmd); - } catch (err) { - Lib.TalkativeLog('-¶-ERROR PARSE'); - successP = false; - } - if (successP) { - Lib.TalkativeLog(`-¶-parse: ${successP} argv: ${argv}`); - return [successP, argv]; - } else { - return [successP, null]; - } - } - - /** - * Result callback. - * - * @callback ExecuteStuff~resultCallback - * @param {boolean} result whether the executed command exited successfully or not - * @param {string} stdout (optional) output of the result, if it was executed synchronously - */ - - /** - * Line output callback for asynchronous commands. - * - * @callback ExecuteStuff~lineCallback - * @param {string} line a single line of output - */ - - /** - * @param {string} cmd the command to be executed - * @param {boolean} sync execute synchronously (wait for return) or fork a process - * @param {ExecuteStuff~resultCallback} resCb callback after the command is finished - * @param {ExecuteStuff~lineCallback} lineCb callback for stdout when command is executed asynchronosly - * @class - */ - Execute(cmd, sync, resCb, lineCb) { - Lib.TalkativeLog(`-¶-execute: ${cmd}`); - - this.CommandString = cmd; - if ( - resCb === undefined && - resCb === null && - typeof resCb !== 'function' - ) { - Lib.TalkativeLog('-¶-resCallback NEED to be a function'); - - this.Callback = null; - } else { - this.Callback = resCb; - } - - if (sync === true) { - Lib.TalkativeLog('-¶-sync execute (wait for return)'); - this._syncCmd(this.CommandString); - } else { - Lib.TalkativeLog('-¶-async execute (fork process)'); - if ( - lineCb === undefined && - lineCb === null && - typeof lineCb !== 'function' - ) { - Lib.TalkativeLog('-¶-lineCallback NEED to be a function'); - - this.lineCallback = null; - } else { - this.lineCallback = lineCb; - } - this._asyncCmd(this.CommandString); - } - } - - /** - * @param {string} cmd the command to be executed - * @returns {*} - * @class - */ - Spawn(cmd) { - let [successP, argv] = this._parseCmd(cmd); - if (successP) { - let successS, pid; - try { - [successS, pid] = GLib.spawn_async( - null, - argv, - null, - GLib.SpawnFlags.SEARCH_PATH | - GLib.SpawnFlags.DO_NOT_REAP_CHILD, - null - ); - } catch (err) { - Lib.TalkativeLog( - `-¶-ERROR SPAWN err:${err.message.toString()}` - ); - successS = false; - } - - if (successS) { - Lib.TalkativeLog(`-¶-spawn: ${successS} pid: ${pid}`); - return true; - } else { - Lib.TalkativeLog('-¶-spawn ERROR'); - return null; - } - } - return null; - } - - /** - * @param {string} cmd the command to be executed - * @private - */ - _syncCmd(cmd) { - let [successP, argv] = this._parseCmd(cmd); - let decoder = new TextDecoder(); - if (successP) { - Lib.TalkativeLog(`-¶-argv: ${argv}`); - let successS, stdOut, stdErr, exit; - try { - [successS, stdOut, stdErr, exit] = GLib.spawn_sync( - null, - argv, - null, - GLib.SpawnFlags.SEARCH_PATH, - () => {} - ); - } catch (err) { - Lib.TalkativeLog('-¶-ERROR SPAWN'); - successS = false; - } - if (successS) { - Lib.TalkativeLog(`-¶-argv: ${argv}`); - Lib.TalkativeLog(`-¶-stdOut: ${decoder.decode(stdOut)}`); - Lib.TalkativeLog(`-¶-stdErr: ${decoder.decode(stdErr)}`); - Lib.TalkativeLog(`-¶-exit: ${exit}`); - - Lib.TalkativeLog('-¶-exe RC'); - if (this.Callback !== null) { - this.Callback.apply(this.Scope, [ - true, - decoder.decode(stdOut), - ]); - } - } else { - Lib.TalkativeLog(`-¶-ERROR exe WC - exit status: ${exit}`); - if (this.Callback !== null) - this.Callback.apply(this.Scope, [false]); - } - } - } - - /** - * @param {string} cmd the command to be executed - * @private - */ - _asyncCmd(cmd) { - let [successP, argv] = this._parseCmd(cmd); - let decoder = new TextDecoder(); - if (successP) { - Lib.TalkativeLog(`-¶-argv: ${argv}`); - let successS, pid, stdIn, stdOut, stdErr; - - try { - [ - successS, - pid, - stdIn, - stdOut, - stdErr, - ] = GLib.spawn_async_with_pipes( - null, // working directory - argv, // argv - null, // envp - GLib.SpawnFlags.SEARCH_PATH, // flags - () => {} // child_setup - ); - } catch (err) { - Lib.TalkativeLog('-¶-ERROR SPAWN'); - successS = false; - } - if (successS) { - Lib.TalkativeLog(`-¶-argv: ${argv}`); - Lib.TalkativeLog(`-¶-pid: ${pid}`); - Lib.TalkativeLog(`-¶-stdIn: ${stdIn}`); - Lib.TalkativeLog(`-¶-stdOut: ${stdOut}`); - Lib.TalkativeLog(`-¶-stdErr: ${stdErr}`); - - let outReader = new Gio.DataInputStream({ - base_stream: new Gio.UnixInputStream({ - fd: stdOut, - }), - }); - let inWriter = new Gio.DataOutputStream({ - base_stream: new Gio.UnixOutputStream({ - fd: stdIn, - }), - }); - inWriter.close(null); - - let [out] = outReader.read_line(null); - while (out !== null) { - if (this.lineCallback !== null) - this.lineCallback.apply(this.Scope, [decoder.decode(out)]); - - [out] = outReader.read_line(null); - } - - if (this.Callback !== null) { - Lib.TalkativeLog('-¶-exe RC'); - this.Callback.apply(this.Scope, [true]); - } - } else { - Lib.TalkativeLog('-¶-ERROR exe WC'); - if (this.Callback !== null) - this.Callback.apply(this.Scope, [false]); - } - } - } -}); diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilgsp.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilgsp.js deleted file mode 100644 index e2bd0b9..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilgsp.js +++ /dev/null @@ -1,735 +0,0 @@ -/* - Copyright (C) 2016 Borsato Ivano - - The JavaScript code in this page is free software: you can - redistribute it and/or modify it under the terms of the GNU - General Public License (GNU GPL) as published by the Free Software - Foundation, either version 3 of the License, or (at your option) - any later version. The code is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. -*/ - -'use strict'; - -import * as Lib from './convenience.js'; -import * as Settings from './settings.js'; - -// CONST GSP - base -const SCREEN = - '_SCREENCAST_RES_ _ENCODER_VIDEO_ ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! _CONTAINER_'; - -// CONST GSP - base plus sound -const SCREEN_SOUND = - 'queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! _SCREENCAST_RES_ _ENCODER_VIDEO_ ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! mux. pulsesrc ! audioconvert ! _ENCODER_AUDIO_ ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! mux. _CONTAINER_ name=mux '; - -// CONST GSP - base plus webcam -const SCREEN_WEBCAM = - 'queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! videomixer name=mix _WEBCAM_OPT_ ! videoconvert ! _SCREENCAST_RES_ _ENCODER_VIDEO_ ! mux. v4l2src _WEBCAM_DEV_ ! _WEBCAM_CAP_ ! videoscale ! video/x-raw, width=_WEBCAM_W_, height=_WEBCAM_H_, add-borders=false ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! mix. _CONTAINER_ name=mux'; - -// CONST GSP - base plus sound and webcam stream -const SCREEN_WEBCAM_SOUND = - 'queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! videomixer name=mix _WEBCAM_OPT_ ! videoconvert ! _SCREENCAST_RES_ _ENCODER_VIDEO_ ! mux. v4l2src _WEBCAM_DEV_ ! _WEBCAM_CAP_ ! videoscale ! video/x-raw, width=_WEBCAM_W_, height=_WEBCAM_H_, add-borders=false ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! mix. pulsesrc ! audioconvert ! _ENCODER_AUDIO_ ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! mux. _CONTAINER_ name=mux'; - -// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -// CONST CONTAINER - WebM -const webmVP8 = { - fileExt: '.webm', - nameGSP: 'webmmux', - quality: [ - { - // quality level 0 - fps: 15, - vq: - 'vp8enc min_quantizer=13 max_quantizer=20 cpu-used=5 deadline=1000000 sharpness=2 target-bitrate=10000 threads=%T', - aq: 'vorbisenc', - descr: - 'FPS: 15 \nVideo -> VP8 Encoder:\n-min_quantizer=13\n-max_quantizer=20\n-cpu-used=5\n-deadline=1000000\n-sharpness=2\n-target-bitrate=10000\nAudio -> Vorbis Encoder', - }, - { - // quality level 1 - fps: 30, - vq: - 'vp8enc min_quantizer=4 max_quantizer=13 cpu-used=2 deadline=500000 sharpness=0 target-bitrate=15000 threads=%T', - aq: 'vorbisenc', - descr: - 'FPS: 30 \nVideo -> VP8 Encoder:\n-min_quantizer=4\n-max_quantizer=13\n-cpu-used=2\n-deadline=500000\n-sharpness=0\n-target-bitrate=15000\nAudio -> Vorbis Encoder', - }, - { - // quality level 2 - fps: 30, - vq: - 'vp8enc min_quantizer=0 max_quantizer=7 cpu-used=1 deadline=500000 sharpness=0 target-bitrate=25000 threads=%T', - aq: 'vorbisenc', - descr: - 'FPS: 30 \nVideo -> VP8 Encoder:\n-min_quantizer=0\n-max_quantizer=7\n-cpu-used=1\n-deadline=500000\n-sharpness=0\n-target-bitrate=25000\nAudio -> Vorbis Encoder', - }, - { - // quality level 3 - fps: 60, - vq: - 'vp8enc min_quantizer=0 max_quantizer=0 cpu-used=0 deadline=100000 sharpness=0 target-bitrate=40000 threads=%T', - aq: 'vorbisenc', - descr: - 'FPS: 60 \nVideo -> VP8 Encoder:\n-min_quantizer=0\n-max_quantizer=0\n-cpu-used=0\n-deadline=100000\n-sharpness=0\n-target-bitrate=40000\nAudio -> Vorbis Encoder', - }, - ], -}; - -const webmVP9 = { - fileExt: '.webm', - nameGSP: 'webmmux', - quality: [ - { - // quality level 0 - fps: 15, - vq: - 'vp9enc min_quantizer=13 max_quantizer=20 cpu-used=5 deadline=1000000 sharpness=2 target-bitrate=10000 threads=%T', - aq: 'vorbisenc', - descr: - 'FPS: 15 \nVideo -> VP9 Encoder:\n-min_quantizer=13\n-max_quantizer=20\n-cpu-used=5\n-deadline=1000000\n-sharpness=2\n-target-bitrate=10000\nAudio -> Vorbis Encoder', - }, - { - // quality level 1 - fps: 30, - vq: - 'vp9enc min_quantizer=4 max_quantizer=13 cpu-used=2 deadline=500000 sharpness=0 target-bitrate=15000 threads=%T', - aq: 'vorbisenc', - descr: - 'FPS: 30 \nVideo -> VP9 Encoder:\n-min_quantizer=4\n-max_quantizer=13\n-cpu-used=2\n-deadline=500000\n-sharpness=0\n-target-bitrate=15000\nAudio -> Vorbis Encoder', - }, - { - // quality level 2 - fps: 30, - vq: - 'vp9enc min_quantizer=0 max_quantizer=7 cpu-used=1 deadline=500000 sharpness=0 target-bitrate=25000 threads=%T', - aq: 'vorbisenc', - descr: - 'FPS: 30 \nVideo -> VP9 Encoder:\n-min_quantizer=0\n-max_quantizer=7\n-cpu-used=1\n-deadline=500000\n-sharpness=0\n-target-bitrate=25000\nAudio -> Vorbis Encoder', - }, - { - // quality level 3 - fps: 60, - vq: - 'vp9enc min_quantizer=0 max_quantizer=0 cpu-used=0 deadline=100000 sharpness=0 target-bitrate=40000 threads=%T', - aq: 'vorbisenc', - descr: - 'FPS: 60 \nVideo -> VP9 Encoder:\n-min_quantizer=0\n-max_quantizer=0\n-cpu-used=0\n-deadline=100000\n-sharpness=0\n-target-bitrate=40000\nAudio -> Vorbis Encoder', - }, - ], -}; - -// CONST CONTAINER - Mp4 -const mp4 = { - fileExt: '.mp4', - nameGSP: 'mp4mux', - quality: [ - { - // quality level 0 - fps: 15, - vq: - 'x264enc psy-tune="none" speed-preset="superfast" subme=1 qp-min=28 qp-max=40 threads=%T', - aq: 'lamemp3enc', - descr: - 'FPS: 15 \nVideo -> x264enc Encoder:\n-psy-tune="none"\n-speed-preset="superfast"\n-subme=1\n-qp-min=28\n-qp-max=40\nAudio -> Mp3 Encoder', - }, - { - // quality level 1 - fps: 30, - vq: - 'x264enc psy-tune="animation" speed-preset="fast" subme=5 qp-min=18 qp-max=28 threads=%T', - aq: 'lamemp3enc', - descr: - 'FPS: 30 \nVideo -> x264enc Encoder:\n-psy-tune="animation"\n-speed-preset="fast"\n-subme=5\n-qp-min=18\n-qp-max=28\nAudio -> Mp3 Encoder', - }, - { - // quality level 2 - fps: 30, - vq: - 'x264enc psy-tune="animation" speed-preset="medium" subme=8 qp-min=10 qp-max=18 threads=%T', - aq: 'lamemp3enc', - descr: - 'FPS: 30 \nVideo -> x264enc Encoder:\n-psy-tune="animation"\n-speed-preset="medium"\n-subme=8\n-qp-min=10\n-qp-max=18\nAudio -> Mp3 Encoder', - }, - { - // quality level 3 - fps: 60, - vq: - 'x264enc psy-tune="film" speed-preset="slower" subme=10 qp-min=0 qp-max=10 threads=%T', - aq: 'lamemp3enc', - descr: - 'FPS: 60 \nVideo -> x264enc Encoder:\n-psy-tune="film"\n-speed-preset="slower"\n-subme=10\n-qp-min=0\n-qp-max=10\nAudio -> Mp3 Encoder', - }, - ], -}; - -const mp4Aac = { - fileExt: '.mp4', - nameGSP: 'mp4mux', - quality: [ - { - // quality level 0 - fps: 15, - vq: - 'x264enc psy-tune="none" speed-preset="superfast" subme=1 qp-min=28 qp-max=40 threads=%T', - aq: 'avenc_aac', - descr: - 'FPS: 15 \nVideo -> x264enc Encoder:\n-psy-tune="none"\n-speed-preset="superfast"\n-subme=1\n-qp-min=28\n-qp-max=40\nAudio -> AAC Encoder', - }, - { - // quality level 1 - fps: 30, - vq: - 'x264enc psy-tune="animation" speed-preset="fast" subme=5 qp-min=18 qp-max=28 threads=%T', - aq: 'avenc_aac', - descr: - 'FPS: 30 \nVideo -> x264enc Encoder:\n-psy-tune="animation"\n-speed-preset="fast"\n-subme=5\n-qp-min=18\n-qp-max=28\nAudio -> AAC Encoder', - }, - { - // quality level 2 - fps: 30, - vq: - 'x264enc psy-tune="animation" speed-preset="medium" subme=8 qp-min=10 qp-max=18 threads=%T', - aq: 'avenc_aac', - descr: - 'FPS: 30 \nVideo -> x264enc Encoder:\n-psy-tune="animation"\n-speed-preset="medium"\n-subme=8\n-qp-min=10\n-qp-max=18\nAudio -> AAC Encoder', - }, - { - // quality level 3 - fps: 60, - vq: - 'x264enc psy-tune="film" speed-preset="slower" subme=10 qp-min=0 qp-max=10 threads=%T', - aq: 'avenc_aac', - descr: - 'FPS: 60 \nVideo -> x264enc Encoder:\n-psy-tune="film"\n-speed-preset="slower"\n-subme=10\n-qp-min=0\n-qp-max=10\nAudio -> AAC Encoder', - }, - ], -}; - -// CONST CONTAINER - Mkv -const mkv = { - fileExt: '.mkv', - nameGSP: 'matroskamux', - quality: [ - { - // quality level 0 - fps: 15, - vq: - 'x264enc psy-tune="none" speed-preset="superfast" subme=1 qp-min=28 qp-max=40 threads=%T', - aq: 'flacenc', - descr: - 'FPS: 15 \nVideo -> x264enc Encoder:\n-psy-tune="none"\n-speed-preset="superfast"\n-subme=1\n-qp-min=28\n-qp-max=40\nAudio -> Flac Encoder', - }, - { - // quality level 1 - fps: 30, - vq: - 'x264enc psy-tune="animation" speed-preset="fast" subme=5 qp-min=18 qp-max=28 threads=%T', - aq: 'flacenc', - descr: - 'FPS: 30 \nVideo -> x264enc Encoder:\n-psy-tune="animation"\n-speed-preset="fast"\n-subme=5\n-qp-min=18\n-qp-max=28\nAudio -> Flac Encoder', - }, - { - // quality level 2 - fps: 30, - vq: - 'x264enc psy-tune="animation" speed-preset="medium" subme=8 qp-min=10 qp-max=18 threads=%T', - aq: 'flacenc', - descr: - 'FPS: 30 \nVideo -> x264enc Encoder:\n-psy-tune="animation"\n-speed-preset="medium"\n-subme=8\n-qp-min=10\n-qp-max=18\nAudio -> Flac Encoder', - }, - { - // quality level 3 - fps: 60, - vq: - 'x264enc psy-tune="film" speed-preset="slower" subme=10 qp-min=0 qp-max=10 threads=%T', - aq: 'flacenc', - descr: - 'FPS: 60 \nVideo -> x264enc Encoder:\n-psy-tune="film"\n-speed-preset="slower"\n-subme=10\n-qp-min=0\n-qp-max=10\nAudio -> Flac Encoder', - }, - ], -}; - -// CONST CONTAINER - Ogg -const ogg = { - fileExt: '.ogg', - nameGSP: 'oggmux', - quality: [ - { - // quality level 0 - fps: 15, - vq: - 'theoraenc speed-level=3 vp3-compatible=true quality=10 bitrate=10000', - aq: 'opusenc', - descr: - 'FPS: 15 \nVideo -> Theora Encoder:\n-speed-level=3\n-vp3-compatible=true\n-quality=10\n-bitrate=10000\nAudio -> Opus Encoder', - }, - { - // quality level 1 - fps: 30, - vq: - 'theoraenc speed-level=1 vp3-compatible=false quality=30 bitrate=25000', - aq: 'opusenc', - descr: - 'FPS: 30 \nVideo -> Theora Encoder:\n-speed-level=1\n-vp3-compatible=false\n-quality=30\n-bitrate=25000\nAudio -> Opus Encoder', - }, - { - // quality level 2 - fps: 30, - vq: - 'theoraenc speed-level=0 vp3-compatible=false quality=50 bitrate=50000', - aq: 'opusenc', - descr: - 'FPS: 30 \nVideo -> Theora Encoder:\n-speed-level=0\n-vp3-compatible=false\n-quality=50\n-bitrate=50000\nAudio -> Opus Encoder', - }, - { - // quality level 3 - fps: 60, - vq: - 'theoraenc speed-level=0 vp3-compatible=false quality=60 bitrate=100000', - aq: 'opusenc', - descr: - 'FPS: 60 \nVideo -> Theora Encoder\n-speed-level=0\n-vp3-compatible=false\n-quality=60\n-bitrate=100000\nAudio -> Opus Encoder', - }, - ], -}; - -// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -// CONST RESOLUTION -const RESOLUTION = [ - // NATIVE SCREENCAST RESOLUTION - '', - // PRESET/CUSTOM SCREENCAST RESOLUTION - 'videoscale ! video/x-raw, width=_RES_WIDTH_, height=_RES_HEIGHT_, add-borders=_RES_KAR_ ! ', -]; - -// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -// VAR ARRAY CONTAINER -// see cbt_FileContainer in *.glade files for the combo box -const CONTAINER = [webmVP8, webmVP9, mp4, mkv, ogg, mp4Aac]; - -// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -/** - * Compose GSP - * - * @param {EasyScreenCastSettings} settings the extension's settings - * @param {MixerAudio} mixer the mixer - * - * @returns {string} - */ -export function composeGSP(settings, mixer) { - Lib.TalkativeLog('-§-COMPOSE GSP'); - - let tmpGSP = ''; - - // retrieve options - let deviceWebcam = settings.getOption('s', Settings.DEVICE_WEBCAM_SETTING_KEY); - let deviceAudio = settings.getOption('i', Settings.INPUT_AUDIO_SOURCE_SETTING_KEY); - let qualityGSP = settings.getOption('i', Settings.QUALITY_SETTING_KEY); - let qualityWebcam = settings.getOption('s', Settings.QUALITY_WEBCAM_SETTING_KEY); - let resolutionType = settings.getOption('i', Settings.FILE_RESOLUTION_TYPE_SETTING_KEY); - let resolutionKAR = settings.getOption('b', Settings.FILE_RESOLUTION_KAR_SETTING_KEY); - let resolutionHeight = settings.getOption('i', Settings.FILE_RESOLUTION_HEIGHT_SETTING_KEY); - let resolutionWidth = settings.getOption('i', Settings.FILE_RESOLUTION_WIDTH_SETTING_KEY); - let container = settings.getOption('i', Settings.FILE_CONTAINER_SETTING_KEY); - - Lib.TalkativeLog( - `-§-get option||devW: ${deviceWebcam}||devA: ${deviceAudio}||Qgsp: ${qualityGSP}||Qwc: ${qualityWebcam}||Res: ${resolutionType}||Cont: ${container}` - ); - - if (deviceWebcam !== '') { - switch (deviceAudio) { - case 0: - Lib.TalkativeLog('-§- SCREEN-WEBCAM'); - - tmpGSP = SCREEN_WEBCAM; - - // replace WEBCAM_DEVICE/WEBCAM_CAPS - tmpGSP = _replaceWebcam( - tmpGSP, - deviceWebcam, - qualityWebcam, - settings - ); - - break; - case 1: - Lib.TalkativeLog('-§-SCREEN-WEBCAM-AUDIO(d)'); - - tmpGSP = SCREEN_WEBCAM_SOUND; - - // replace WEBCAM_DEVICE/WEBCAM_CAPS/ENCODER-AUDIO - tmpGSP = _replaceAudio( - _replaceWebcam(tmpGSP, deviceWebcam, qualityWebcam, settings), - true, - container, - qualityGSP, - mixer - ); - - break; - default: - Lib.TalkativeLog('-§-SCREEN-WEBCAM-AUDIO'); - - tmpGSP = SCREEN_WEBCAM_SOUND; - - // replace WEBCAM_DEVICE/WEBCAM_CAPS/ENCODER-AUDIO/AUDIO_DEVICE - tmpGSP = _replaceAudio( - _replaceWebcam(tmpGSP, deviceWebcam, qualityWebcam, settings), - false, - container, - qualityGSP, - mixer - ); - } - } else { - switch (deviceAudio) { - case 0: - Lib.TalkativeLog('-§-SCREEN'); - - tmpGSP = SCREEN; - - break; - case 1: - Lib.TalkativeLog('-§-SCREEN-AUDIO(d)'); - - tmpGSP = SCREEN_SOUND; - - // replace ENCODER-AUDIO - tmpGSP = _replaceAudio( - tmpGSP, - true, - container, - qualityGSP, - mixer - ); - - break; - default: - Lib.TalkativeLog('-§-SCREEN-AUDIO'); - - tmpGSP = SCREEN_SOUND; - - // replace ENCODER-AUDIO/AUDIO_DEVICE - tmpGSP = _replaceAudio( - tmpGSP, - false, - container, - qualityGSP, - mixer - ); - } - } - - // compose resolution string - var resolution = _composeResolution( - resolutionType, - resolutionHeight, - resolutionWidth, - resolutionKAR - ); - - // replace RESOLUTION/ENCODER-VIDEO/CONTAINER - var mapObj = { - _SCREENCAST_RES_: resolution, - _ENCODER_VIDEO_: CONTAINER[container].quality[qualityGSP].vq, - _CONTAINER_: CONTAINER[container].nameGSP, - }; - - tmpGSP = tmpGSP.replace( - /_SCREENCAST_RES_|_ENCODER_VIDEO_|_CONTAINER_/gi, - match => { - return mapObj[match]; - } - ); - - Lib.TalkativeLog(`-§-final GSP :${tmpGSP}`); - - return tmpGSP; -} - -/** - * replace audio - * - * @param {string} gspRA input pipeline to be modified - * @param {boolean} defaultAudio whether to use the default audio device - * @param {int} ConTMP selected output container. Used to determine correct audio encoder - * @param {int} QGSPtmp quality setting - * @param {MixerAudio} mixer audio mixer - * @returns {string} pipeline with audio - */ -function _replaceAudio(gspRA, defaultAudio, ConTMP, QGSPtmp, mixer) { - Lib.TalkativeLog(`-§-replace audio default->${defaultAudio}`); - // replace device/encoder - var aq = CONTAINER[ConTMP].quality[QGSPtmp].aq; - Lib.TalkativeLog(`-§-pipeline pre-audio:${gspRA} aq:${aq}`); - var audioPipeline; - - if (defaultAudio) { - Lib.TalkativeLog('-§-default audio source'); - audioPipeline = gspRA.replace(/_ENCODER_AUDIO_/gi, aq); - } else { - var audiosource = mixer.getAudioSource(); - if (audiosource === undefined) { - Lib.TalkativeLog('-§-failure combination of array audio sources'); - audioPipeline = gspRA.replace(/_ENCODER_AUDIO_/gi, aq); - } else { - Lib.TalkativeLog('-§-correct audio source assignment'); - if (audiosource.indexOf('output') !== -1) - audiosource += '.monitor'; - - var reDev = `pulsesrc device="${audiosource}"`; - - var mapObj = { - pulsesrc: reDev, - _ENCODER_AUDIO_: aq, - }; - - audioPipeline = gspRA.replace( - /pulsesrc|_ENCODER_AUDIO_/gi, - match => { - return mapObj[match]; - } - ); - } - } - - Lib.TalkativeLog(`-§-pipeline post-audio:${audioPipeline}`); - - return audioPipeline; -} - -/** - * replace webcam - * - * @param {string} gspRW input pipeline to be modified - * @param {string} device webcam device file (e.g. /dev/video0) - * @param {string} caps quality options - * @param {EasyScreenCastSettings} settings the extension's settings - * @returns {string} pipeline with webcam settings - */ -function _replaceWebcam(gspRW, device, caps, settings) { - Lib.TalkativeLog(`-§-replace webcam -> ${device} caps: ${caps}`); - - // replace device/caps - var reDev = `device=${device}`; - var reWCopt = _composeWebCamOption(settings); - var [reWCwidth, reWCheight] = _getWebCamDimension(settings); - - Lib.TalkativeLog(`-§-pipeline pre-webcam:${gspRW}`); - - var mapObj = { - _WEBCAM_DEV_: reDev, - _WEBCAM_CAP_: caps, - _WEBCAM_OPT_: reWCopt, - _WEBCAM_W_: reWCwidth, - _WEBCAM_H_: reWCheight, - }; - - var webcamPipeline = gspRW.replace( - /_WEBCAM_DEV_|_WEBCAM_CAP_|_WEBCAM_OPT_|_WEBCAM_W_|_WEBCAM_H_/gi, - match => { - return mapObj[match]; - } - ); - - Lib.TalkativeLog(`-§-pipeline post-webcam:${webcamPipeline}`); - - return webcamPipeline; -} - -/** - * replace resolution - * - * @param {int} tmpRes resolution type: native/custom - * @param {int} h custom height - * @param {int} w custom width - * @param {boolean} kar whether to keep aspect ratio - * @returns {string} pipeline part for scaling resolution - */ -function _composeResolution(tmpRes, h, w, kar) { - Lib.TalkativeLog(`-§-resolution option: ${tmpRes}`); - var strRes = RESOLUTION[0]; - var mapObj = {}; - - switch (tmpRes) { - case -1: - break; - case 999: - mapObj = { - _RES_KAR_: kar ? 'true' : 'false', - _RES_HEIGHT_: h, - _RES_WIDTH_: w, - }; - - strRes = RESOLUTION[1].replace( - /_RES_KAR_|_RES_HEIGHT_|_RES_WIDTH_/gi, - match => { - return mapObj[match]; - } - ); - break; - default: - mapObj = { - _RES_KAR_: 'true', - _RES_HEIGHT_: h, - _RES_WIDTH_: w, - }; - - strRes = RESOLUTION[1].replace( - /_RES_KAR_|_RES_WIDTH_|_RES_HEIGHT_/gi, - match => { - return mapObj[match]; - } - ); - } - - Lib.TalkativeLog(`-§-compose resolution: ${strRes}`); - return strRes; -} - -/** - * compose option webcam position - * - * @param {EasyScreenCastSettings} settings the extension's settings - * - * @returns {string} - */ -function _composeWebCamOption(settings) { - Lib.TalkativeLog('-§-compose webcam option'); - - // retrieve option webcam - var webcamAlpha = settings.getOption('d', Settings.ALPHA_CHANNEL_WEBCAM_SETTING_KEY); - var webcamMarginX = settings.getOption('i', Settings.MARGIN_X_WEBCAM_SETTING_KEY); - var webcamMarginY = settings.getOption('i', Settings.MARGIN_Y_WEBCAM_SETTING_KEY); - var webcamCornerPosition = settings.getOption('i', Settings.CORNER_POSITION_WEBCAM_SETTING_KEY); - var [webcamWidth, webcamHeight, screenWidth, screenHeight] = _getWebCamDimension(settings); - - var posX = 0; - var posY = 0; - - Lib.TalkativeLog( - `-§-alpha=${webcamAlpha} |marX=${webcamMarginX} |marY=${webcamMarginY} |corner=${webcamCornerPosition}` - ); - - // corner top-left - posX = webcamMarginX; - posY = webcamMarginY; - - switch (webcamCornerPosition) { - case 0: - // corner bottom-right - posX = Math.floor(screenWidth - (webcamWidth + webcamMarginX)); - posY = Math.floor(screenHeight - (webcamHeight + webcamMarginY)); - break; - case 1: - // corner bottom-left - posX = webcamMarginX; - posY = Math.floor(screenHeight - (webcamHeight + webcamMarginY)); - break; - case 2: - // corner top-right - posX = Math.floor(screenWidth - (webcamWidth + webcamMarginX)); - posY = webcamMarginY; - break; - default: - } - - // check valid position - if ((posX < 0 || posX > screenWidth) && (posY < 0 || posY > screenHeight)) { - Lib.TalkativeLog('-§-NOT valid position'); - posX = 0; - posY = 0; - } - - var tmpWCopt = - `sink_0::alpha=1 sink_1::alpha=${ - webcamAlpha - } sink_1::xpos=${ - posX - } sink_1::ypos=${ - posY - } `; - - Lib.TalkativeLog(`-§-posX=${posX} |posY=${posY}`); - Lib.TalkativeLog(`-§-webcam option=${tmpWCopt}`); - - return tmpWCopt; -} - -/** - * retrieve dimension webcam - * - * @param {EasyScreenCastSettings} settings the extension's settings - * - * @returns {*[]} array with webcam width,height,screen-width,screen-height - */ -function _getWebCamDimension(settings) { - Lib.TalkativeLog('-§-get webcam dimension'); - - var webcamWidth = settings.getOption('i', Settings.WIDTH_WEBCAM_SETTING_KEY); - var webcamHeight = settings.getOption('i', Settings.HEIGHT_WEBCAM_SETTING_KEY); - var webcamUnit = settings.getOption('i', Settings.TYPE_UNIT_WEBCAM_SETTING_KEY); - var screenWidth = settings.getOption('i', Settings.WIDTH_SETTING_KEY); - var screenHeight = settings.getOption('i', Settings.HEIGHT_SETTING_KEY); - - if (settings.getOption('i', Settings.AREA_SCREEN_SETTING_KEY) === 0) { - screenWidth = global.screen_width; - screenHeight = global.screen_height; - } - - Lib.TalkativeLog( - `-§-WC w=${webcamWidth} WC h=${webcamHeight} WCtype=${webcamUnit} screen W=${screenWidth} screen H=${screenHeight}` - ); - - if (webcamUnit === 0) { - webcamWidth = Math.floor((screenWidth * webcamWidth) / 100); - webcamHeight = Math.floor((screenHeight * webcamHeight) / 100); - } - - Lib.TalkativeLog(`-§-after percentage WCw=${webcamWidth} WCh=${webcamHeight}`); - - return [webcamWidth, webcamHeight, screenWidth, screenHeight]; -} - -/** - * get description - * - * @param {int} quality selected quality - * @param {int} container selected container format - * @returns {string} - */ -export function getDescr(quality, container) { - Lib.TalkativeLog(`-§-get description Q-> ${quality} C-> ${container}`); - - return CONTAINER[container].quality[quality].descr; -} - -/** - * get fps - * - * @param {int} quality selected quality - * @param {int} container selected container format - * @returns {number} - */ -export function getFps(quality, container) { - Lib.TalkativeLog(`-§-get fps Q-> ${quality} C-> ${container}`); - - return CONTAINER[container].quality[quality].fps; -} - -/** - * get file extension - * - * @param {int} container selected container format - * @returns {string} - */ -export function getFileExtension(container) { - Lib.TalkativeLog(`-§-get file extension C-> ${container}`); - - return CONTAINER[container].fileExt; -} diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilnotify.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilnotify.js deleted file mode 100644 index 90f41b0..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilnotify.js +++ /dev/null @@ -1,145 +0,0 @@ -/* - Copyright (C) 2016 Borsato Ivano - - The JavaScript code in this page is free software: you can - redistribute it and/or modify it under the terms of the GNU - General Public License (GNU GPL) as published by the Free Software - Foundation, either version 3 of the License, or (at your option) - any later version. The code is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. -*/ - -'use strict'; - -import GObject from 'gi://GObject'; -import * as Main from 'resource:///org/gnome/shell/ui/main.js'; -// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/messageTray.js -import * as MessageTray from 'resource:///org/gnome/shell/ui/messageTray.js'; -import St from 'gi://St'; - -import * as Lib from './convenience.js'; -import * as Settings from './settings.js'; -import * as Ext from './extension.js'; - -import {gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js'; - -/** - * @type {NotifyManager} - */ -export const NotifyManager = GObject.registerClass({ - GTypeName: 'EasyScreenCast_NotifyManager', -}, class NotifyManager extends GObject.Object { - /** - * Create a notify manager - */ - constructor() { - super(); - Lib.TalkativeLog('-°-init notify manager'); - this._alertWidget = null; - } - - /** - * create notify - * - * @param {string} msg the title - * @param {Gio.FileIcon} icon the icon - * @param {boolean} sound whether to play a sound - * @returns {MessageTray.Notification} - */ - createNotify(msg, icon, sound) { - Lib.TalkativeLog(`-°-create notify :${msg}`); - var source = new MessageTray.Source({ - title: _('EasyScreenCast'), - }); - var notify = new MessageTray.Notification({ - source, - title: msg, - body: null, - gicon: icon, - isTransient: false, - resident: true, - }); - - Main.messageTray.add(source); - source.addNotification(notify); - - if (sound) - notify.playSound(); - - return notify; - } - - /** - * update notify - * - * @param {MessageTray.Notification} notify the already existing notification to update - * @param {string} msg the title - * @param {Gio.FileIcon} icon the icon - * @param {boolean} sound whether to play a sound - */ - updateNotify(notify, msg, icon, sound) { - Lib.TalkativeLog('-°-update notify'); - - notify.set({ - title: msg, - body: null, - gicon: icon, - }); - - if (sound) - notify.playSound(); - } - - /** - * create alert - * - * @param {string} msg the message - */ - createAlert(msg) { - Lib.TalkativeLog(`-°-show alert tweener : ${msg}`); - if (Ext.Indicator.getSettings().getOption('b', Settings.SHOW_NOTIFY_ALERT_SETTING_KEY)) { - var monitor = Main.layoutManager.focusMonitor; - - this.resetAlert(); - this._alertWidget = new St.Label({ - style_class: 'alert-msg', - opacity: 255, - text: msg, - }); - Main.uiGroup.add_child(this._alertWidget); - - this._alertWidget.set_position( - Math.floor(monitor.width / 2 - this._alertWidget.width / 2), - Math.floor(monitor.height / 2 - this._alertWidget.height / 2) - ); - - Lib.TalkativeLog(`-°-show alert tweener : opacity=${this._alertWidget.opacity}`); - - // see org/gnome/shell/ui/environment.js#_easeActor - // TODO: for some reason, no transition is created, so the onComplete - // callback is called _immediately_ - /* - import Clutter from 'gi://Clutter'; - this._alertWidget.ease({ - opacity: 0, - duration: 400, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => { - Lib.TalkativeLog(`-°-show alert tweener completed: opacity=${this._alertWidget.opacity}`); - Main.uiGroup.remove_child(this._alertWidget); - this._alertWidget = null; - }, - }); - */ - } - } - - resetAlert() { - if (this._alertWidget !== null) { - this._alertWidget.hide(); - Main.uiGroup.remove_child(this._alertWidget); - this._alertWidget = null; - } - } -}); diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilrecorder.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilrecorder.js deleted file mode 100644 index 6ab68e9..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilrecorder.js +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (C) 2013 Borsato Ivano - - The JavaScript code in this page is free software: you can - redistribute it and/or modify it under the terms of the GNU - General Public License (GNU GPL) as published by the Free Software - Foundation, either version 3 of the License, or (at your option) - any later version. The code is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. -*/ - -'use strict'; - -import GObject from 'gi://GObject'; -import Gio from 'gi://Gio'; -import GLib from 'gi://GLib'; -import {loadInterfaceXML} from 'resource:///org/gnome/shell/misc/dbusUtils.js'; -const ScreencastIface = loadInterfaceXML('org.gnome.Shell.Screencast'); - -import * as Lib from './convenience.js'; -import * as Settings from './settings.js'; -import * as Selection from './selection.js'; -import * as UtilGSP from './utilgsp.js'; -import * as Ext from './extension.js'; - -/** - * @type {CaptureVideo} - */ -export const CaptureVideo = GObject.registerClass({ - GTypeName: 'EasyScreenCast_CaptureVideo', -}, class CaptureVideo extends GObject.Object { - /** - * Create a video recorder - */ - constructor() { - super(); - Lib.TalkativeLog('-&-init recorder'); - - this.AreaSelected = null; - - // connect to d-bus service - const ScreenCastProxy = Gio.DBusProxy.makeProxyWrapper(ScreencastIface); - this._screenCastService = new ScreenCastProxy( - Gio.DBus.session, - 'org.gnome.Shell.Screencast', - '/org/gnome/Shell/Screencast', - (proxy, error) => { - if (error) - Lib.TalkativeLog(`-&-ERROR(d-bus proxy connected) - ${error.message}`); - else - Lib.TalkativeLog('-&-d-bus proxy connected'); - } - ); - } - - /** - * start recording - */ - start() { - Lib.TalkativeLog('-&-start video recording'); - this.recordingActive = false; - - let fileExt = UtilGSP.getFileExtension( - Ext.Indicator.getSettings().getOption('i', Settings.FILE_CONTAINER_SETTING_KEY) - ); - // prepare variable for screencast - let fileRec = Ext.Indicator.getSettings().getOption('s', Settings.FILE_NAME_SETTING_KEY); - - let folderRec = ''; - if (Ext.Indicator.getSettings().getOption('s', Settings.FILE_FOLDER_SETTING_KEY) !== '') - folderRec = Ext.Indicator.getSettings().getOption('s', Settings.FILE_FOLDER_SETTING_KEY); - - let pipelineRec = ''; - - if (Ext.Indicator.getSettings().getOption('b', Settings.ACTIVE_CUSTOM_GSP_SETTING_KEY)) { - pipelineRec = Ext.Indicator.getSettings().getOption( - 's', - Settings.PIPELINE_REC_SETTING_KEY - ); - } else { - // compose GSP - pipelineRec = UtilGSP.composeGSP(Ext.Indicator.getSettings(), Ext.Indicator.CtrlAudio); - } - - Lib.TalkativeLog(`-&-file template : ${fileRec}`); - fileRec = this._generateFileName(fileRec); - Lib.TalkativeLog(`-&-file final : ${fileRec}`); - const completeFileRecPath = folderRec !== '' - ? `${folderRec}/${fileRec}` - : fileRec; - Lib.TalkativeLog(`-&-file rec path complete : ${completeFileRecPath}${fileExt}`); - - // prefix with a videoconvert element - // see DEFAULT_PIPELINE in https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/dbusServices/screencast/screencastService.js#L26 - // this videoconvert element was added always previously (< Gnome 40) and needs to be added now explicitly - // https://gitlab.gnome.org/GNOME/gnome-shell/-/commit/51bf7ec17617a9ed056dd563afdb98e17da07373 - pipelineRec = `videoconvert chroma-mode=GST_VIDEO_CHROMA_MODE_NONE dither=GST_VIDEO_DITHER_NONE matrix-mode=GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY n-threads=%T ! queue ! ${pipelineRec}`; - Lib.TalkativeLog(`-&-pipeline : pipeline: ${pipelineRec}`); - - var optionsRec = { - 'draw-cursor': new GLib.Variant( - 'b', - Ext.Indicator.getSettings().getOption('b', Settings.DRAW_CURSOR_SETTING_KEY) - ), - framerate: new GLib.Variant( - 'i', - Ext.Indicator.getSettings().getOption('i', Settings.FPS_SETTING_KEY) - ), - pipeline: new GLib.Variant('s', pipelineRec), - }; - - if (Ext.Indicator.getSettings().getOption('i', Settings.AREA_SCREEN_SETTING_KEY) === 0) { - this._screenCastService.ScreencastRemote( - completeFileRecPath, - optionsRec, - (result, error) => { - if (error) { - Lib.TalkativeLog(`-&-ERROR(screencast execute) - ${error.message}`); - - this.stop(); - Ext.Indicator.doRecResult(false); - } else { - Lib.TalkativeLog(`-&-screencast execute - ${result[0]} - ${result[1]}`); - - let resultingFilePath = result[1]; - if (resultingFilePath.endsWith('.undefined')) { - resultingFilePath = resultingFilePath.substring(0, resultingFilePath.length - '.undefined'.length); - resultingFilePath = `${resultingFilePath}${fileExt}`; - } - this._originalFilePath = result[1]; - this._filePathWithExtension = resultingFilePath; - - Ext.Indicator.doRecResult(result[0], resultingFilePath); - } - } - ); - } else { - this._screenCastService.ScreencastAreaRemote( - Ext.Indicator.getSettings().getOption('i', Settings.X_POS_SETTING_KEY), - Ext.Indicator.getSettings().getOption('i', Settings.Y_POS_SETTING_KEY), - Ext.Indicator.getSettings().getOption('i', Settings.WIDTH_SETTING_KEY), - Ext.Indicator.getSettings().getOption('i', Settings.HEIGHT_SETTING_KEY), - completeFileRecPath, - optionsRec, - (result, error) => { - if (error) { - Lib.TalkativeLog(`-&-ERROR(screencast execute) - ${error.message}`); - - this.stop(); - Ext.Indicator.doRecResult(false); - } else { - Lib.TalkativeLog(`-&-screencast execute - ${result[0]} - ${result[1]}`); - - // draw area recording - if (Ext.Indicator.getSettings().getOption('b', Settings.SHOW_AREA_REC_SETTING_KEY)) - this.AreaSelected = new Selection.AreaRecording(); - - let resultingFilePath = result[1]; - if (resultingFilePath.endsWith('.undefined')) { - resultingFilePath = resultingFilePath.substring(0, resultingFilePath.length - '.undefined'.length); - resultingFilePath = `${resultingFilePath}${fileExt}`; - } - this._originalFilePath = result[1]; - this._filePathWithExtension = resultingFilePath; - - Ext.Indicator.doRecResult(result[0], resultingFilePath); - } - } - ); - } - } - - /** - * Stop recording - * - * @returns {boolean} - */ - stop() { - Lib.TalkativeLog('-&-stop video recording'); - - this._screenCastService.StopScreencastRemote((result, error) => { - if (error) { - Lib.TalkativeLog(`-&-ERROR(screencast stop) - ${error.message}`); - return false; - } else { - Lib.TalkativeLog(`-&-screencast stop - ${result[0]}`); - - - // rename the file... - Lib.TalkativeLog(`-&-screencast: rename ${this._originalFilePath} to ${this._filePathWithExtension}`); - const sourceFile = Gio.File.new_for_path(this._originalFilePath); - const destFile = Gio.File.new_for_path(this._filePathWithExtension); - sourceFile.move(destFile, 0, null, null); - } - - // clear area recording - if (this.AreaSelected !== null && this.AreaSelected.isVisible()) - this.AreaSelected.clearArea(); - - return true; - }); - } - - // without file extension - _generateFileName(template) { - template = template.replaceAll('%d', '%0x').replaceAll('%t', '%0X'); - const datetime = GLib.DateTime.new_now_local(); - let result = datetime.format(template); - result = result.replaceAll(' ', '_'); // remove white space - result = result.replaceAll('/', '_'); // remove path separators - return result; - } -}); diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilwebcam.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilwebcam.js deleted file mode 100644 index bdff6ff..0000000 --- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilwebcam.js +++ /dev/null @@ -1,326 +0,0 @@ -/* - Copyright (C) 2015 Borsato Ivano - - The JavaScript code in this page is free software: you can - redistribute it and/or modify it under the terms of the GNU - General Public License (GNU GPL) as published by the Free Software - Foundation, either version 3 of the License, or (at your option) - any later version. The code is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. -*/ - -'use strict'; - -import GObject from 'gi://GObject'; -import GLib from 'gi://GLib'; -import Gst from 'gi://Gst?version=1.0'; -import * as Lib from './convenience.js'; - -export const HelperWebcam = GObject.registerClass({ - GTypeName: 'EasyScreenCast_HelperWebcam', -}, class HelperWebcam extends GObject.Object { - /** - * Create a device monitor inputvideo - * - * @param {string} unspecifiedWebcamText localized text for "Unspecified Webcam" - */ - constructor(unspecifiedWebcamText) { - super(); - this._unspecified_webcam_text = unspecifiedWebcamText; - Lib.TalkativeLog('-@-init webcam'); - - var [result, _] = Gst.init_check(null); - Lib.TalkativeLog(`-@-gstreamer init result: ${result}`); - if (!result) { - Lib.TalkativeLog('-@-gstreamer init failed'); - throw new Error('GStreamer init failed'); - } - - // get gstreamer lib version - var [M, m, micro, nano] = Gst.version(); - Lib.TalkativeLog( - `-@-gstreamer version: ${M}.${m}.${micro}.${nano}` - ); - if (M === 1 && m >= 8) { - // gstreamer version equal or higher 1.8 - this.deviceMonitor = new Gst.DeviceMonitor({ - show_all: true, - }); - } else { - // gstreamer version lower 1.8 - this.deviceMonitor = new Gst.DeviceMonitor(); - } - - // get gstreamer plugin avaiable - let registry = new Gst.Registry(); - let listPI = registry.get_plugin_list(); - Lib.TalkativeLog(`-@-plugin list: ${listPI.length}`); - for (var ind in listPI) { - Lib.TalkativeLog( - `-@-plugin name: ${ - listPI[ind].get_name() - } Pfilename: ${ - listPI[ind].get_filename() - } Pdesc: ${ - listPI[ind].get_description() - } Pversion: ${ - listPI[ind].get_version() - } Pload: ${ - listPI[ind].is_loaded()}` - ); - } - - // create device monitor - if (this.deviceMonitor !== null && this.deviceMonitor !== undefined) { - Lib.TalkativeLog('-@-device monitor created'); - this.dmBus = this.deviceMonitor.get_bus(); - if (this.dmBus !== null && this.dmBus !== undefined) { - Lib.TalkativeLog('-@-dbus created'); - this.dmBus.add_watch(GLib.PRIORITY_DEFAULT, this._getMsg.bind(this)); - let caps = Gst.Caps.new_empty_simple('video/x-raw'); - this.deviceMonitor.add_filter('Video/Source', caps); - this.startMonitor(); - // update device and caps - this.refreshAllInputVideo(); - } else { - Lib.TalkativeLog('-@-ERROR dbus creation'); - } - } else { - Lib.TalkativeLog('-@-ERROR device monitor creation'); - } - } - - /** - * Callback for the DeviceMonitor watcher - * - * @param {Gst.Bus} bus the DeviceMonitor Bus of gstreamer - * @param {Gst.Message} message the message - * @returns {boolean} - */ - _getMsg(bus, message) { - Lib.TalkativeLog('-@-event getmsg'); - switch (message.type) { - case Gst.MessageType.DEVICE_ADDED: - Lib.TalkativeLog('Device added'); - - // update device and caps - this.refreshAllInputVideo(); - break; - case Gst.MessageType.DEVICE_REMOVED: - Lib.TalkativeLog('Device removed'); - - // update device and caps - this.refreshAllInputVideo(); - break; - default: - Lib.TalkativeLog('Device UNK'); - break; - } - - return GLib.SOURCE_CONTINUE; - } - - /** - * refresh all devices info - */ - refreshAllInputVideo() { - Lib.TalkativeLog('-@-refresh all video input'); - - this._listDevices = this.getDevicesIV(); - // compose devices array - this._listCaps = []; - for (var index in this._listDevices) { - this._listCaps[index] = this.getCapsForIV(this._listDevices[index].caps); - - Lib.TalkativeLog(`-@-webcam /dev/video${index} name: ${this._listDevices[index].display_name}`); - Lib.TalkativeLog(`-@-caps available: ${this._listCaps[index].length}`); - Lib.TalkativeLog(`-@-ListCaps[${index}]: ${this._listCaps[index]}`); - } - } - - /** - * get caps from device. - * A single capability might look like: video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1 - * This encodes a single capability (fixed), but there might also be capabilities which represent options, e.g. - * video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction) { 30/1, 25/1, 20/1 }. - *
- * The code here will take always the first option and unroll the options for framerate. - * - * @param {Gst.Caps} tmpCaps capabilities of a device - * @returns {string[]} - */ - getCapsForIV(tmpCaps) { - Lib.TalkativeLog('-@-get all caps from a input video'); - Lib.TalkativeLog(`-@-caps available before filtering for video/x-raw: ${tmpCaps.get_size()}`); - - let cleanCaps = []; - for (let i = 0; i < tmpCaps.get_size(); i++) { - let capsStructure = tmpCaps.get_structure(i); - - // only consider "video/x-raw" - if (capsStructure.get_name() === 'video/x-raw') { - Lib.TalkativeLog(`-@-cap : ${i} : original : ${capsStructure.to_string()}`); - - let tmpStr = 'video/x-raw'; - let result, number, fraction; - result = capsStructure.get_string('format'); - if (result !== null) - tmpStr += `, format=(string)${result}`; - [result, number] = capsStructure.get_int('width'); - if (result === true) - tmpStr += `, width=(int)${number}`; - [result, number] = capsStructure.get_int('height'); - if (result === true) - tmpStr += `, height=(int)${number}`; - [result, number, fraction] = capsStructure.get_fraction('pixel-aspect-ratio'); - if (result === true) - tmpStr += `, pixel-aspect-ratio=(fraction)${number}/${fraction}`; - - - if (capsStructure.has_field('framerate')) { - [result, number, fraction] = capsStructure.get_fraction('framerate'); - if (result === true) { - // a single framerate - this._addAndLogCapability(cleanCaps, i, `${tmpStr}, framerate=(fraction)${number}/${fraction}`); - } else { - // multiple framerates - - // unfortunately GstValueList is not supported in this gjs-binding - // "Error: Don't know how to convert GType GstValueList to JavaScript object" - // -> capsStructure.get_value('framerate') <- won't work - // -> capsStructure.get_list('framerate') <- only returns the numerator of the fraction - // - // therefore manually parsing the framerate values from the string representation - let framerates = capsStructure.to_string(); - framerates = framerates.substring(framerates.indexOf('framerate=(fraction){') + 21); - framerates = framerates.substring(0, framerates.indexOf('}')); - framerates.split(',').forEach(element => { - let [numerator, denominator] = element.split('/', 2); - this._addAndLogCapability(cleanCaps, i, `${tmpStr}, framerate=(fraction)${numerator.trim()}/${denominator.trim()}`); - }); - } - } else { - // no framerate at all - this._addAndLogCapability(cleanCaps, i, tmpStr); - } - } else { - Lib.TalkativeLog(`-@-cap : ${i} : skipped : ${capsStructure.to_string()}`); - } - } - return cleanCaps; - } - - /** - * Adds the capability str to the array caps, if it is not already there. Avoids duplicates. - * - * @param {Array} caps the list of capabilities - * @param {int} originalIndex index of the original capabilities list from the device - * @param {string} str the capability string to add - */ - _addAndLogCapability(caps, originalIndex, str) { - if (caps.indexOf(str) === -1) { - caps.push(str); - Lib.TalkativeLog(`-@-cap : ${originalIndex} : added cap : ${str}`); - } else { - Lib.TalkativeLog(`-@-cap : ${originalIndex} : ignore duplicated cap : ${str}`); - } - } - - /** - * get devices IV - * - * @returns {Gst.Device[]} - */ - getDevicesIV() { - Lib.TalkativeLog('-@-get devices'); - - var list = this.deviceMonitor.get_devices(); - Lib.TalkativeLog(`-@-devices number: ${list.length}`); - - // Note: - // Although the computer may have just one webcam connected to - // it, more than one GstDevice may be listed and all pointing to - // the same video device (for example /dev/video0. Each - // GstDevice is supposed to be used with a specific source, for - // example, a pipewiresrc or a v4l2src. For now, we are only - // using v4l2src. - // See also: Gst.DeviceMonitor.get_providers: pipewiredeviceprovider,decklinkdeviceprovider,v4l2deviceprovider - // CLI: "/usr/bin/gst-device-monitor-1.0 Video/Source" - // - // So, here we filter the devices, that have a device.path property, which - // means, these are only v4l2 devices - - var filtered = list.filter(device => { - let props = device.get_properties(); - let hasDevice = props != null && props.get_string('device.path') !== null; - if (props != null) - props.free(); - return hasDevice; - }); - Lib.TalkativeLog(`-@-devices number after filtering for v4l2: ${filtered.length}`); - - return filtered; - } - - /** - * get array name devices IV - * - * @returns {Array} - */ - getNameDevices() { - Lib.TalkativeLog('-@-get name devices'); - let tmpArray = []; - - for (var index in this._listDevices) { - var wcName = this._unspecified_webcam_text; - - if (this._listDevices[index].display_name !== '') - wcName = this._listDevices[index].display_name; - - tmpArray.push(wcName); - } - - Lib.TalkativeLog(`-@-list devices name: ${tmpArray}`); - return tmpArray; - } - - /** - * get array caps - * - * @param {int} index device - * @returns {string[]} - */ - getListCapsDevice(index) { - const tmpArray = this._listCaps[index]; - Lib.TalkativeLog(`-@-list caps of device: ${tmpArray}`); - return tmpArray; - } - - /** - * start listening - */ - startMonitor() { - Lib.TalkativeLog('-@-start video devicemonitor'); - this.deviceMonitor.start(); - } - - /** - * Stop listening - */ - stopMonitor() { - Lib.TalkativeLog('-@-stop video devicemonitor'); - this.disconnectSourceBus(); - this.deviceMonitor.stop(); - } - - /** - * disconect bus - */ - disconnectSourceBus() { - if (this.dmBusId) { - this.dmBus.disconnect(this.dmBusId); - this.dmBusId = 0; - } - } -}); diff --git a/gnome/.local/share/gnome-shell/extensions/Vitals@CoreCoding.com/locale/fr/LC_MESSAGES/vitals.mo b/gnome/.local/share/gnome-shell/extensions/Vitals@CoreCoding.com/locale/fr/LC_MESSAGES/vitals.mo index 5eb2d78978ff072a20f6cb1e15a6dd89741051e9..1260f3d7b8b16a93805c69286aca9146dceecdbd 100644 GIT binary patch literal 12096 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 I#bwz41Gh{Ki~s-t delta 2847 zcmZY9d2AGA7{~Fq7K?y#+ESo};pzcx=>dZE07@+icW04mbfXv} zCK~aTganN-MzGPK20Tbi&{Pwn@r*~jBT*wBG5UvMV$|<%chn}n*=IlRT<`I`@63x^ zPA$oOK5@i8LrD-7#KK}@_F!iTf0P|(7;`#akE8GgoP@W=$NO+3#}DCTJcJ|gIO@5V zV_(B+j^D-_JcV?TGc##b4b-3p(1_!34bH&LI2CWkX}BLN@hCRpyEqq%M;ETwqVB&4 zYw;S?^}CR{nWykmJc=dsZ}yHUjCeoNmU$30phKt;KZ&LIA&$o%aSHy4^RfKQ!a&+l zGtZ)Ccq1}N^9ZWFCt{BxkD3>-g#OK|R3_qEsF|O@GW-Q~vM1dE{u;m z;_I7GOJn2n1E`Mo;MuqrnY1~G8tBuQ(+HoXQjf<`4gZMh_%CD(W(>V6Gv%?fV(U;1 zo`dRWIjX%&P;0*dwI?o%ukXNej(1@d?j1}1XHj{c6B_v^s1AQZt@R(Mk(M)U?Z-;w zl$nECiWcm__W1k*$e7LJr~w?q{ANTw|8ji(b=33kj3fW*=maN}qCZg&Oya6$RF2K) zp=P=fm6ih)M9-4w`e*tQM3v*O7vQ}J*%VTei z&%cC9>8n_W?_hqQ*ue25(xzSBhBcVP`M3`k<4f3xzoYJ($HTG<>oIo=6+QR_YG&`_ zANVC|V4pK=jr42OjJ`+B_*Xm^wNuqlE9$lDL%p86aS1+*8}VaQdkt&|4SW%@)H%~j zMIB!sdo$|BJ*d>(i}YpoBW;+&I2&IN)Eol~W8p%ymG_%`KGdO_!%pv|XfT8&KcT`8Eq)SUP9W{_DWEIR>)Bv_2 zFGs#8Ln@aNt;7|Cp6wxcl{Npu&X;OTGgVPa&m;09$LWMNjt2TqQK#p|2Uo_fKz&oR z#vO#d`IitE5bZ>QQ1OU4>VGYj7DDA>!Y7ozHewkukI)XDK~xc!5lk?jLNFT$y<%Dl zm94~u`C8#k&j@Pt0dHUaJ=XE?(itC|HteK6C@M3F%L(lr zl~o1II%Er&)x_NR+-B5L<@744Xk)C**9sq+TI%dWa}l9Eu!+#xFDI4|3kj90h&B1z ze}CFj*AQ%%{I>MqU(p{b4GI!nA1%qKs(^!%Sq_ z1|oOQxbCxTDza&_B1~IvZm;VcUp2DLk2p2pYA58}mlNJE?(kDbew()4=)Nf3 zJfhQXi`>Stc6Yd}%2iHoDBk9$Tz2w(zccDd2a)w?lc)35DCD|puDE!4bA4lTeN&6q+|t^zXntc;W8>&fKNHn= zrTtVU>64FEZ&jGF-iDyh_s-u=wP|rv)3R&({UF(p2>abL6^Dx(8=72imL9BGW8Kfy6)sV8p1ZN;OgB_B&7G>bsmQu) zZQJAyvJ}{K#tXAMZJHHb(P#UElsj2_|D^UXl^Pnf884aTZ-JMw3AcCNEp9~Jb?%P3 z?$d1AeO6ad)=l<@2EAVEMXbrtU|~_*?e)9d=!VCx=(4Fy5T?wfS^Li_1lHSBNPTY@ YMD;;(cq;zwb!af5Rfu~w|2uE~22Yrrp8x;= diff --git a/gnome/.local/share/gnome-shell/extensions/Vitals@CoreCoding.com/metadata.json b/gnome/.local/share/gnome-shell/extensions/Vitals@CoreCoding.com/metadata.json index bef804f..47a1c75 100644 --- a/gnome/.local/share/gnome-shell/extensions/Vitals@CoreCoding.com/metadata.json +++ b/gnome/.local/share/gnome-shell/extensions/Vitals@CoreCoding.com/metadata.json @@ -11,9 +11,10 @@ "45", "46", "47", - "48" + "48", + "49" ], "url": "https://github.com/corecoding/Vitals", "uuid": "Vitals@CoreCoding.com", - "version": 71 + "version": 73 } \ No newline at end of file diff --git a/gnome/.local/share/gnome-shell/extensions/Vitals@CoreCoding.com/sensors.js b/gnome/.local/share/gnome-shell/extensions/Vitals@CoreCoding.com/sensors.js index fa49d41..f310161 100644 --- a/gnome/.local/share/gnome-shell/extensions/Vitals@CoreCoding.com/sensors.js +++ b/gnome/.local/share/gnome-shell/extensions/Vitals@CoreCoding.com/sensors.js @@ -230,16 +230,20 @@ export const Sensors = GObject.registerClass({ let hertz = (sum / freqs.length) * 1000 * 1000; this._returnValue(callback, 'Frequency', hertz, 'processor', 'hertz'); - //let max_hertz = Math.getMaxOfArray(freqs) * 1000 * 1000; - //this._returnValue(callback, 'Boost', max_hertz, 'processor', 'hertz'); + let max_hertz = freqs.reduce((a, b) => Math.max(a, b)) * 1000 * 1000; + this._returnValue(callback, 'Max frequency', max_hertz, 'processor', 'hertz'); + let min_hertz = freqs.reduce((a, b) => Math.min(a, b)) * 1000 * 1000; + this._returnValue(callback, 'Min frequency', min_hertz, 'processor', 'hertz'); }).catch(err => { }); // if frequency scaling is enabled, cpu-freq reports } else if (Object.values(this._last_processor['speed']).length > 0) { let sum = this._last_processor['speed'].reduce((a, b) => a + b); let hertz = (sum / this._last_processor['speed'].length) * 1000; this._returnValue(callback, 'Frequency', hertz, 'processor', 'hertz'); - //let max_hertz = Math.getMaxOfArray(this._last_processor['speed']) * 1000; - //this._returnValue(callback, 'Boost', max_hertz, 'processor', 'hertz'); + let max_hertz = this._last_processor['speed'].reduce((a, b) => Math.max(a, b)) * 1000; + this._returnValue(callback, 'Max frequency', max_hertz, 'processor', 'hertz'); + let min_hertz = this._last_processor['speed'].reduce((a, b) => Math.min(a, b)) * 1000; + this._returnValue(callback, 'Min frequency', min_hertz, 'processor', 'hertz'); } } @@ -455,7 +459,7 @@ export const Sensors = GObject.registerClass({ this._returnValue(callback, 'Energy (now)', output['ENERGY_NOW'], 'battery', 'watt-hour'); } - if ('ENERGY_FULL' in output && 'ENERGY_NOW' in output && 'POWER_NOW' in output && output['POWER_NOW'] > 0 && 'STATUS' in output && (output['STATUS'] == 'Charging' || output['STATUS'] == 'Discharging')) { + if ('ENERGY_FULL' in output && 'ENERGY_NOW' in output && 'POWER_NOW' in output && output['POWER_NOW'] !== 0 && 'STATUS' in output && (output['STATUS'] == 'Charging' || output['STATUS'] == 'Discharging')) { let timeLeft = 0; @@ -463,7 +467,7 @@ export const Sensors = GObject.registerClass({ if (output['STATUS'] == 'Charging') { timeLeft = ((output['ENERGY_FULL'] - output['ENERGY_NOW']) / output['POWER_NOW']); } else { - timeLeft = (output['ENERGY_NOW'] / output['POWER_NOW']); + timeLeft = (output['ENERGY_NOW'] / Math.abs(output['POWER_NOW'])); } // don't process Infinity values @@ -644,7 +648,7 @@ export const Sensors = GObject.registerClass({ if(vendor === "0x1002") { // read GPU usage and create group lebel for card new FileModule.File('/sys/class/drm/card'+i+'/device/gpu_busy_percent').read().then(value => { - // create group + // create group this._returnGpuValue(callback, 'Graphics', parseInt(value) * 0.01, typeName + '-group', 'percent'); this._returnGpuValue(callback, 'Vendor', "AMD", typeName, 'string'); this._returnGpuValue(callback, 'Usage', parseInt(value) * 0.01, typeName, 'percent'); diff --git a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/icons/hicolor/scalable/actions/custom-icons-symbolic.svg b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/icons/hicolor/scalable/actions/custom-icons-symbolic.svg new file mode 100644 index 0000000..bfc3698 --- /dev/null +++ b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/icons/hicolor/scalable/actions/custom-icons-symbolic.svg @@ -0,0 +1,46 @@ + + + + + + + + + + diff --git a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/icons/hicolor/scalable/actions/general-preferences-symbolic.svg b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/icons/hicolor/scalable/actions/general-preferences-symbolic.svg new file mode 100644 index 0000000..6334430 --- /dev/null +++ b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/icons/hicolor/scalable/actions/general-preferences-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/locale/ar/LC_MESSAGES/AppIndicatorExtension.mo b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/locale/ar/LC_MESSAGES/AppIndicatorExtension.mo new file mode 100644 index 0000000000000000000000000000000000000000..6c73616a8689250c4a380ba0903d8085c55f6892 GIT binary patch literal 2722 zcmbu9O>7iZ9KaulpzAmI{gr1l7$pPSR)tg~6e!q)N`+#$co=pcyF+$o)|shLJW<dk%l>;%^nD1$uTQh}0$j!V8z_3dgZIE6;r;LzxC#CNZ->ty zEdD+ZH^X+=0guAR;Ab#TtP8Nf`gbl#yuAeX5FCUO-$(Efcm}SAm*9)=C#c~{oY@AS z&3G7cq&|moJ_(BoJ7u3}LiYHQOKQ?d(#I`r*9?G!vW(4nWp zve7l$H5G09##UWnXxz~8T-}3&e#5RBwZnHx<wF3 zm~=0=;Y&NNt~tj|b|I+Q1;;IAlIcPpbHXxWk^o7G>T!!s!45rN_v})8&5=;;6UlH; z?emMq7nO-zpBFeuh8i3DO|4=VjJDlIUPZMoEJ=qx;*%y!RZXDwOFGqoR(cMYP#-HB zA4hN|2}~^MpzIA)irTK#jO}Z?>bWKDA>t>F1nQsN!_7UeSIweKlK;BrJ13~2UC~_? zr{q>CtLpQ;qoxpAJw@v+;|J8OQ+L&B&9rnMr!{0dN5B-#>J3Ux(b_Rk3aoywQ|J2j zS^Leqj)+*h?9g=T_I&%xR(`Y9(WcwlJ3I0l@*VknZZDl<;fEVkB;8mkS51*#J6g4m zIeM$(6KXK9z2c}va#S*w{g!c4cH}P^&7j2y~ete*3I?y^me!WZrhm8Ns|(n z)jwFnmCzgyH&G|YeN`9AwjY@AwS)b;tt~A%@#u*0t!}sA6=|1Fz2&eI<_=kD^ChnK zd8X)ux?|%jITf9auEZyGbT%H3hvKn#G^$6_I;zLR(FJ}_MpNlxn$zKUJep-rX+B4z z1-HwrNzXkL=}(5<4bhSqI8*69J^Ht|L=A3ME0e8v(d%G&os4SwG|h+zktB3 z1~cO0zdf!?!X@2*e_vA#sqt*1O(v=Id^{}m$SzWM7F6|S04!dKP6X zsjb+l+F~>(T}*f^&QY#8X%#9q6Q63d<2Wr+mxFpVL&b)rF=!gfc{=s&GVMXjONTe} zHXY3&GM+Rqwin`41U#ojD!r7w6482*C^#BH<51QuE;=vNZS|Nz>Rm8*E9hx=kZrp4NNe}Vp z1FAB3C`B+INuSe?u>QM6QdSnd T=CiylO@|kri}tI#(I5W-&zi76 delta 1187 zcmZ|M-%C?r7{Kv&n{MjVa{kC4sV7Ks;B50}jV>y?$zV#65Ct*kDTmuRayCZ}!tS~# zx;b4A$GsRsKVHVeIEAISfRe}} z4iaBIV$jQrPuPTwe07m3^q>U3Lz=`^4^iewU&om90MJ2C2* zKuPR2Ruf;%GmsCLPy)Qd2K{-a^i# zo;z;fDV{g6;~0Z_E}|9BB8eBuDF>0DjdZ{5a@Wo=sp{#hDum%wg@RMILO3YYK`v36 zgxp83lLwkakc*Kf=}Ib6S7}lYX?y5W^S_&XYSUKlUDNTWY*9#8Lcy&G@@E4 z(jD&7((!9ijZshy=|)z!)R1Xpt#~H;XR!O{_80e|dS@!UV;8lSaa H`ab^#toF}K diff --git a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/locale/ka/LC_MESSAGES/AppIndicatorExtension.mo b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/locale/ka/LC_MESSAGES/AppIndicatorExtension.mo new file mode 100644 index 0000000000000000000000000000000000000000..0773c28c330f7f5cc1ee7f3a2ce3d5604d758e95 GIT binary patch literal 3640 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 diff --git a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/metadata.json b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/metadata.json index 898dc6c..15be423 100644 --- a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/metadata.json +++ b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/metadata.json @@ -8,9 +8,10 @@ "45", "46", "47", - "48" + "48", + "49" ], "url": "https://github.com/ubuntu/gnome-shell-extension-appindicator", "uuid": "appindicatorsupport@rgcjonas.gmail.com", - "version": 60 + "version": 61 } \ No newline at end of file diff --git a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/preferences/customIconPage.js b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/preferences/customIconPage.js new file mode 100644 index 0000000..b132562 --- /dev/null +++ b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/preferences/customIconPage.js @@ -0,0 +1,240 @@ +/* exported GeneralPage*/ + +import Adw from 'gi://Adw'; +import Gtk from 'gi://Gtk'; +import GObject from 'gi://GObject'; +import Gio from 'gi://Gio'; +import GLib from 'gi://GLib'; +import {gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; + +const IconData = GObject.registerClass({ + GTypeName: 'IconData', + Properties: { + 'id': GObject.ParamSpec.string( + 'id', + 'Id', + 'A read and write string property', + GObject.ParamFlags.READWRITE, + '' + ), + 'name': GObject.ParamSpec.string( + 'name', + 'Name', + 'A read and write string property', + GObject.ParamFlags.READWRITE, + '' + ), + 'at-name': GObject.ParamSpec.string( + 'at-name', + 'At Name', + 'A read and write string property', + GObject.ParamFlags.READWRITE, + '' + ), + + }, +}, class IconData extends GObject.Object { + constructor(props = {}) { + super(props); + } + + get id() { + if (this._id === 'undefined') + this._id = null; + return this._id; + } + + set id(value) { + if (this.id === value) + return; + + this._id = value; + this.notify('id'); + } + + get name() { + if (this._name === 'undefined') + this._name = null; + return this._name; + } + + set name(value) { + if (this.name === value) + return; + + this._name = value; + this.notify('name'); + } + + get atName() { + if (this._atName === 'undefined') + this._atName = null; + return this._atName; + } + + set atName(value) { + if (this.atName === value) + return; + + this._atName = value; + this.notify('at-name'); + } +}); + +export var CustomIconPage = GObject.registerClass( +class AppIndicatorCustomIconPage extends Adw.PreferencesPage { + _init(settings, settingsKey) { + super._init({ + title: _('Custom Icons'), + icon_name: 'custom-icons-symbolic', + name: 'Custom Icons Page', + }); + this._settings = settings; + this._settingsKey = settingsKey; + + this.group = new Adw.PreferencesGroup(); + + this.container = new Gtk.Box({ + halign: Gtk.Align.FILL, + hexpand: true, + orientation: Gtk.Orientation.VERTICAL, + }); + + this.listStore = new Gio.ListStore({ + item_type: IconData, + }); + + const initList = this._settings.get_value(this._settingsKey.CUSTOM_ICONS).deep_unpack(); + initList.forEach(pair => { + let data = new IconData({ + id: pair[0], + name: pair[1], + atName: pair[2], + }); + this.listStore.append(data); + }); + + this.listStore.append(new IconData({id: '', name: '', atName: ''})); + + this.selectionModel = new Gtk.SingleSelection({ + model: this.listStore, + }); + + this.columnView = new Gtk.ColumnView({ + hexpand: true, + model: this.selectionModel, + reorderable: false, + }); + + const columnTitles = [ + _('Indicator ID'), + _('Icon Name'), + _('Attention Icon Name'), + ]; + const indicatorIdColumn = new Gtk.ColumnViewColumn({ + title: columnTitles[0], + expand: true, + }); + const iconNameColumn = new Gtk.ColumnViewColumn({ + title: columnTitles[1], + expand: true, + }); + const attentionIconNameColumn = new Gtk.ColumnViewColumn({ + title: columnTitles[2], + expand: true, + }); + + + const factoryId = new Gtk.SignalListItemFactory(); + factoryId.connect('setup', (_widget, item) => { + const label = new Gtk.EditableLabel({text: ''}); + item.set_child(label); + }); + factoryId.connect('bind', (_widget, item) => { + const label = item.get_child(); + const data = item.get_item(); + label.set_text(data.id); + label.bind_property('text', data, 'id', GObject.BindingFlags.SYNC_CREATE); + label.connect('changed', () => this._autoSave(item)); + }); + + const factoryName = new Gtk.SignalListItemFactory(); + factoryName.connect('setup', (_widget, item) => { + const label = new Gtk.EditableLabel({text: ''}); + item.set_child(label); + }); + factoryName.connect('bind', (_widget, item) => { + const label = item.get_child(); + const data = item.get_item(); + label.set_text(data.name); + label.bind_property('text', data, 'name', GObject.BindingFlags.SYNC_CREATE); + label.connect('changed', () => this._autoSave(item)); + }); + + const factoryItName = new Gtk.SignalListItemFactory(); + factoryItName.connect('setup', (_widget, item) => { + const label = new Gtk.EditableLabel({text: ''}); + item.set_child(label); + }); + factoryItName.connect('bind', (_widget, item) => { + const label = item.get_child(); + const data = item.get_item(); + label.set_text(data.atName); + label.bind_property('text', data, 'at-name', GObject.BindingFlags.SYNC_CREATE); + label.connect('changed', () => this._autoSave(item)); + }); + + indicatorIdColumn.set_factory(factoryId); + iconNameColumn.set_factory(factoryName); + attentionIconNameColumn.set_factory(factoryItName); + + this.columnView.append_column(indicatorIdColumn); + this.columnView.append_column(iconNameColumn); + this.columnView.append_column(attentionIconNameColumn); + + this.container.append(this.columnView); + + this.group.add(this.container); + this.add(this.group); + } + + _autoSave(item) { + const storeLength = this.listStore.get_n_items(); + const newStore = []; + + for (let i = 0; i < storeLength; i++) { + const currentItem = this.listStore.get_item(i); + const id = currentItem.id; + const name = currentItem.name; + const atName = currentItem.atName; + if (id && name) + newStore.push([id, name, atName || '']); + } + + this._settings.set_value(this._settingsKey.CUSTOM_ICONS, + new GLib.Variant('a(sss)', newStore)); + + const id = item.get_item().id; + const name = item.get_item().name; + + /* dynamic new entry*/ + if (storeLength === 1 && (id || name)) + this.listStore.append(new IconData({id: '', name: '', atName: ''})); + + if (storeLength > 1) { + if ((id || name) && item.get_position() >= storeLength - 1) + this.listStore.append(new IconData({id: '', name: '', atName: ''})); + } + } + + _autoDelete(item) { + const storeLength = this.listStore.get_n_items(); + const id = item.get_item().id; + const name = item.get_item().name; + if (storeLength > 1 && !id && !name && + item.get_position() < storeLength - 1) + this.listStore.remove(item.get_position()); + } +}); + + diff --git a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/preferences/generalPage.js b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/preferences/generalPage.js new file mode 100644 index 0000000..d699141 --- /dev/null +++ b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/preferences/generalPage.js @@ -0,0 +1,141 @@ +/* exported GeneralPage*/ + +import Adw from 'gi://Adw'; +import Gtk from 'gi://Gtk'; +import GObject from 'gi://GObject'; +import {gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; + + +export var GeneralPage = GObject.registerClass( +class AppIndicatorGeneralPage extends Adw.PreferencesPage { + _init(settings, settingsKey) { + super._init({ + title: _('General'), + icon_name: 'general-preferences-symbolic', + name: 'General Page', + }); + + this._settings = settings; + this._settingsKey = settingsKey; + + this.group = new Adw.PreferencesGroup(); // no title since only single group + + const legacyTraySwitch = new Adw.SwitchRow({ + title: _('Enable Legacy Tray Icons support'), + subtitle: _('Add X11 legacy tray icons to the panel area'), + active: this._settings.get_boolean(this._settingsKey.LEGACY_TRAY_ENABLED), + }); + + legacyTraySwitch.connect('notify::active', widget => + this._settings.set_boolean(this._settingsKey.LEGACY_TRAY_ENABLED, + widget.get_active())); + + this.group.add(legacyTraySwitch); + + this._createSpinRow({ + title: _('Opacity'), + settingsKey: this._settingsKey.ICON_OPACITY, + from: 0, + to: 255, + step: 1, + round: true, + }); + + this._createSpinRow({ + title: _('Desaturation'), + settingsKey: this._settingsKey.ICON_SATURATION, + from: 0.0, + to: 1.0, + step: 0.1, + }); + + this._createSpinRow({ + title: _('Brightness'), + settingsKey: this._settingsKey.ICON_BRIGHTNESS, + from: -1.0, + to: 1.0, + step: 0.1, + }); + + this._createSpinRow({ + title: _('Contrast'), + settingsKey: this._settingsKey.ICON_CONTRAST, + from: -1.0, + to: 1.0, + step: 0.1, + }); + + this._createSpinRow({ + title: _('Icon Size'), + settingsKey: this._settingsKey.ICON_SIZE, + from: 0, + to: 96, + step: 2, + round: true, + }); + + const alignmentList = new Gtk.StringList(); + const comboItems = [ + {pos: 'center', label: _('Center')}, + {pos: 'left', label: _('Left')}, + {pos: 'right', label: _('Right')}, + ]; + + comboItems.forEach(item => alignmentList.append(item.label)); + + const combo = new Adw.ComboRow({ + title: _('Tray Horizontal Alignment'), + model: alignmentList, + }); + const trayPos = this._settings.get_string(this._settingsKey.TRAY_POS); + combo.set_selected(comboItems.findIndex(item => trayPos === item.pos)); + + combo.connect('notify::selected', widget => this._settings.set_string( + this._settingsKey.TRAY_POS, comboItems[widget.get_selected()].pos)); + + this.group.add(combo); + this.add(this.group); + } + + _createSpinRow(args) { + let title = args.title || 'Default Title'; + let subtitle = args.subtitle || null; + let settingsKey = args.settingsKey || ''; + let from = args.from || 0; + let to = args.to || 100; + let step = args.step || 1; + let round = args.round || false; + + let spin = Adw.SpinRow.new_with_range(from, to, step); + spin.title = title; + if (subtitle !== null) + spin.subtitle = subtitle; + + if (round) + spin.set_value(this._settings.get_int(settingsKey)); + else + spin.set_value(this._settings.get_int(settingsKey)); + + + spin.connect('input', widget => { + if (round) + this._settings.set_int(settingsKey, parseInt(widget.get_value(), 10)); + else + this._settings.set_double(settingsKey, widget.get_value()); + + return false; + }); + spin.connect('output', widget => { + if (round) + this._settings.set_int(settingsKey, parseInt(widget.get_value(), 10)); + else + this._settings.set_double(settingsKey, widget.get_value()); + + return false; + }); + + this.group.add(spin); + } +}); + + diff --git a/gnome/.local/share/gnome-shell/extensions/auto-activities@CleoMenezesJr.github.io/metadata.json b/gnome/.local/share/gnome-shell/extensions/auto-activities@CleoMenezesJr.github.io/metadata.json index d65512b..22f6ffd 100644 --- a/gnome/.local/share/gnome-shell/extensions/auto-activities@CleoMenezesJr.github.io/metadata.json +++ b/gnome/.local/share/gnome-shell/extensions/auto-activities@CleoMenezesJr.github.io/metadata.json @@ -11,10 +11,10 @@ "original-author": "mi-jan-sena@proton.me", "settings-schema": "org.gnome.shell.extensions.auto-activities", "shell-version": [ - "48" + "49" ], "url": "https://github.com/CleoMenezesJr/auto-activities", "uuid": "auto-activities@CleoMenezesJr.github.io", - "version": 15, - "version-name": "48.0" + "version": 16, + "version-name": "49.0" } \ No newline at end of file diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/components/panel.js b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/components/panel.js index 4562106..a78317c 100644 --- a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/components/panel.js +++ b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/components/panel.js @@ -1,4 +1,5 @@ import St from 'gi://St'; +import GLib from 'gi://GLib'; import Meta from 'gi://Meta'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; @@ -83,23 +84,34 @@ export const PanelBlur = class PanelBlur { } blur_dtp_panels() { - // FIXME when Dash to Panel changes its size, it seems it creates new - // panels; but I can't get to delete old widgets - - // blur every panel found - global.dashToPanel.panels.forEach(p => { - this.maybe_blur_panel(p.panel); + // Defer the blurring to the next idle cycle. + // This is crucial to ensure the panel actors have been allocated their + // final size and position by the compositor, avoiding race conditions + // during extension startup. + GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => { + if (!global.dashToPanel?.panels) { + return GLib.SOURCE_REMOVE; + } + + this._log("Blurring Dash to Panel panels after idle."); + + // blur every panel found + global.dashToPanel.panels.forEach(p => { + this.maybe_blur_panel(p.panel); + }); + + // if main panel is not included in the previous panels, blur it + if ( + !global.dashToPanel.panels + .map(p => p.panel) + .includes(Main.panel) + && + this.settings.dash_to_panel.BLUR_ORIGINAL_PANEL + ) + this.maybe_blur_panel(Main.panel); + + return GLib.SOURCE_REMOVE; }); - - // if main panel is not included in the previous panels, blur it - if ( - !global.dashToPanel.panels - .map(p => p.panel) - .includes(Main.panel) - && - this.settings.dash_to_panel.BLUR_ORIGINAL_PANEL - ) - this.maybe_blur_panel(Main.panel); }; /// Blur a panel only if it is not already blurred (contained in the list) @@ -438,11 +450,15 @@ export const PanelBlur = class PanelBlur { let same_monitor = actors.monitor.index == window_monitor_i; let window_vertical_pos = meta_window.get_frame_rect().y; + let window_vertical_bottom = window_vertical_pos + meta_window.get_frame_rect().height; // if so, and if in the same monitor, then it overlaps if (same_monitor && - window_vertical_pos < panel_bottom + 5 * scale + // check if panel is on top + ((panel_top === 0 && window_vertical_pos < panel_bottom + 5 * scale) || + // check if panel is at the bottom + (panel_top > 0 && window_vertical_bottom > panel_top - 5 * scale)) ) window_overlap_panel = true; }); diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/af/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/af/LC_MESSAGES/blur-my-shell@aunetx.mo index 9228b72cb3cfcae96fe60b20b1efa0f81b858f4e..7fd4c313cdd0d3a23af943f472529110cb9f5578 100644 GIT binary patch delta 743 zcmXZaPe_w-7{KvI-D+*KQuANa+5$z@HyJ?8)~4R*o?pN2p*yySi=sqanp4V9>YN-wuG?{r%?+q@Cuf38tt9+ zeK$HSs$k*)6MFC`Jd0oO3GQJl-lgnSTtrQ5ABiP3JdPdR^@{tjiE#i~k`avIHOycE zhw(4o#vzM7YOB?gxQ<%sYt)t&v4HRY&tLM0@UC1%-S-eRp(WH#=FyL9=)xV;xS#PT zentHxKX4SSDi0JXzMgs_=TSQ`g|nDI{U^3Cg%#9qH_|I|6X!94?@$9)Q4{f#V;Fvcw9u1ET1-YDwWG3sslTI3$2j;1p)nLH&9qfr{{T8xUIhRE delta 749 zcmXZaO-K}R7{~G7mTR_aZ)>KO))dqhw&u7iY!aJwa&vpJB#7!TkW3{M;yYRn8s7h z3Ke5gs&?c3|91dX_ zpWsofV|E#VqkA<4b9 z=X>xp=a11kUqLJUFH&Gk_00P)fkgF4^h;wtopRljn{nK1Uw68*n=MxG%9Ye`$(tw# zUZq&-a|(WO!Wr?M!N4z#IVVQ^FC1vm|pI0>)e2)v2U;9nTP^5IHNz*f|F z9CPqp9F3pi7&Q2hQVI35*WkAIgFJnl2DvB$E=3>iMwze&SK~#L81Lf4n8A4%<*7ehCY3C-SE{ z`9~}&iPG+U@A)VAJoT?o?#KeRqaIh|HoT0bn9HDBabqs~FI(QtgL3={C9-*WN>yMH z%I~c>4+oLsR==XOyMr=OCd(hg#hr>*sQWmVBK!sYIAeVJs5aw^)N3({AB|`K<+2rW zWy^6pGNyVHW$XG-?#5@HKYC_8s?=Pb&q4{X0yp6y+>AF+cC>&&WWrLEtv`Y6zB-Na zdw+t0oYkP$;B#aSbseSQZ=Qc+KJ^@yD?3q)Yp~k$9Lm<;L5*uCE7gv5C==a63HTp8 zh;ybWH4_s_3MVOCN9Is1ELQ?}1E*szN+4HJ0(DWo13%yf%%IYWoA5dO5*?gHXSpNC zPy#rO^427guIe4UBJaQP9vsz5Et3W)6Wv4!96FsxRH9% zW9h*5VGH#mC_9kDg?dujqXhICau3y6EWkm`z*J)X)b@H+wSa3zK?Nq|W6}ovGZ5dxCOURPsVh70b=J0Jw9p7e@ z`BNVXDRQi-@A6udbCSy=X-=B^|FbBKyjKh89pT2f4u(R(Dn~oDmZKwf#I9=4mX2G| z>R3cKTj9EeddDtZZ&%gX(Hd+Ch8uLKG49j`f^ki=bVbU|)-D~2)6I4obS!Sy*wIvj zh}|N6o!VeTTj8*FVl_c3abI%Guw%m$5v#?HG)A-&x0-@sU2QiwR?(d@PRD5zdN^yllkAz-R7MC{oix$x7lARBQIT!4nwOY z1`$`|joE-z-PzDm6O0*xX*d9V=)_rAfeUalp25EO3O)D}ldylHF)26!ds zF*WvuB{+-=EvOEU;TU|58Zd!>O-C0hw+8HuOHtR?p#!(rZo@Q=ccSh;isWQYU^<@1 z!HjRNu~Wv0r&x>`^cKV#)Ds-Ray*MY@D29C54aNlqMmGJFJm_0X5^Ilh#B|`l}Iw3 zDFF{Ep%IwE_+|_{0W8H3Zp2CW9; z7L`x~s-NXJ8rNflG0bUp4y?i3I1gP+ zc~x!&YQPYx)Q^y&nHTo;52#o3-M;=8`59-VU+l(gTR(ca5JXj=87uL)?Q2x2^T^tR z+p!JLq7uoaJW4np_v1p$#&>uQodaVJd>NHMJ&v#{Dee-cUF zL{X)Ei0Y^lEAR)BlPUAW`dNg!FN{2kiC{gRMD_C(*I;rM-wv(+t?caLL?_naV(K*) zqo{-&Ieb(w4fW*vFdsWni6jk;O}aeva~#At>}sk`SIc8Z)hr@-V`c#3TknTzSW8X= z#uI89gq31u>VW1V$kBRg9jmdjtTw?`-vcEznV3XOBPJ4>wEwpP4)mHezO_artHfGn zRjBnnkC;J>CDb(WatRiRH94ug^@$#bTBgN>K2T~b5bL#23^Ph6XwwNzZdFNbxW@Oe zqX{vaP}5xKYE#*nLX;ET2+fNUVl+`k1PC=2g$WXx`I^LfO?riD<6{`!mNhXeQQr#9 z4Qq<)!|;D|aG(jK*8U_RJ$fghEirl{^+J5fc(32*^#?ruf+Bxll#k}DYHSUA=Z6}b zTh}&*TS7&i+QxM&R%_c7@)WmnFo8`|D7Y%xkzN<)nCJ~HYyX^4+Meaki6*-rBt;MB HEbI0Up2f3s diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/az/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/az/LC_MESSAGES/blur-my-shell@aunetx.mo index 4bfe9282c77ffc95fa41ce83df8f0bfaabd63610..2d37384f31a280ae9a12cc4de9a0db732b541bcd 100644 GIT binary patch delta 107 zcmdnQxtVi9itAcN28I(roWsDtP{z!_zy+iq18E5${SHVA0cmy?1_m}DEd`_nfwUr! t76H=6KspOZdu&`;!pLi?Yha>lV5VSbZe?t?S&PYqk;%|-b3U^(BLGZd56b`m delta 106 zcmdnYxruW^it8Fi28I(roWsDtP|D1}zy+iq0ci;!{T4_I0ckcCAO_NsKw1z;D*$N` rAZ-Msvw*bw#+4Q(62>nu(23blp zK~37BQR>koUC|uf(j7h179A+aV!^Oh_>4+ixfC(LBGc1QXa~!6-KgnCLo=IJwOKZJ sk)AV~>$c}iW@BgWdX|>AJ$KZ}`#13?6#T2y7mB_rrvj#VD#=Uf5C69(`~Uy| delta 252 zcmZ22y-a$-p87Y83=Gb!3=Fpz7#IxL85r&XX>JY%274g=3P{fZ(psDh46;D_IFRN8 z(ocaj7m)q}qy>QVe;};|qy>P2hCtdHNb>;cTp%qDq^p3mB9NX0q-Ox>EkN25Nc(a# z$T3s`8SUH*3_pQ1BT!d9kp2y%t$=j)=14|+7EKdf0}EXPV+BJ4D+5by10dk?Nh~hW z4Jk^@E6zzQ$uF`}2r0_XN}PO{_5b9EkxcwMP^1fQg>#^^Mv4r>*Btj?JMB(v#?&a06zsrJ_&IV)essKv z3u)iOLUc!qJdZv+ClZiDRI2GH8X}U3J-7h-aV@%IMAC3K&csvr65dC?D!D`L2b_zO zXqO@%Y3C4&`!E7OLB0N@(|-XAxxakxToBFGj46qzZ;+1qAek73+b|P%IG(~mwEHj= z`yC&k&e)%*-y1+fCvz}rI~IpyBIa{{nMg$k+Jt;$D+d?uME&9s$1Y5ueH!)pZ?FZg zV=B&#vzM?6^#$HUPRSk|gPo|?UBMC9hXK9t5fz=HfjpMpa0u#?CZP7akV%qs%*AQg zfOYr^_F)NT#M@K83;9R~2bNtPGo6Dv&TQnA1eQ?g z4iWL7CP(6E+g!XzdnJB{acuHZyoLH;*<8%aNCR?-?8d!#9Lq7+5Ltr?S5c?_3F-qBJ;y_1EowV}`o;%Q zbLA`CiVu;Gl#jP_>}`zJ{r@4AgPiC>O{#ppy$Kg#4F*yBT@&o7ALp2XoRS$%y9#wC z>XDDU%Ym1av#8_!iaO4`iEMdX#$g`!msTq5K)HmP%_dIA+fF-yh0I_I$KqW2m-AZF z@BnHKTt_$dqi)A|8v6Ze$B&TTBKaBhKKC#hA7MZ%VN>i2;*dT`!}VB<*RUJM^8jrb zB1dT-%M_tY7O|IfNw%R*{Ye~zy{Joa4PU^!s1J~wZO@<^HTm+gng19nE9fY|N;L2& zHefI6h0~|n+iE%Ln>V38_zBcCJ%@UOJIJ%iAE-HE@N^6z&8SOr9LaOJijjCXhxykp zKBOZRpQ2823U_%AE3pIr!7|*FOTJ(~F2Hu?c^`g@y5?nh{8QpCEXAjI8%vl5?a!V; zKHy0_j8%b|_P^YJIGm2Pv+OnUJMKii(E;QciSP6bW4>H z&x+=Q7FN>A_F7ET4$5j`JF$pZOIUYIuqv$k{^G$&0p`>CC(us)A*~?lwBeMMxY4N> zIyPe~;UQQ@>mNeX+D~X%NN9GX5mN{)nwHD0n*HmLOuazoL(4MjXdjY5b9xRjn$XqM zQb~*=78C1bHG;=ilmJ(W02u*h_`ddqO3R{Mh<^Ef#v=I$N1TmBd zB{Z$HyiN?WYWDA=Q?+)!)?H2qzu(eCtRggpy@Zx|gr=-yxf`22exusc;BBdB^0s&+ z+Z|jN84(#{wTzmI=Eg>EMSZY5zB4SQw9#W!R&elpTRnBbCnM`a!t>mjc}7;&e!pv! zF~?Wq+v2S=R@D0Zz7}IvrQM#g(Npbfs3@oj9(4^137Hz~Nv@5L?KHb@yk(v@&zP6Y z%Z3@;|9Dbb(3LecD(8@S&b(q?HZS5Cvzzlh28V9LynLfwuco)hykv0EdGiapdd!Q# JrL)2Z{0}|vSwa8+ delta 2754 zcmZwJeN5F=9LMo53W)eDAPQm^Q+z-Zkjwx>$^=vt6-@;rK+Gq&as^H2xYN~I*`p3! zmb2Be(k=hE1^KY$)Gf{a!kR8kT~n8pb3JHVX7&F3euvFJI=kQdI_KQq@0{Ox`oUYR zXE%p04UBFx(k5ak@k@8J_wi^CzDOnUW&^O)S&3UHH((3i!eLn7%Pa+-N2+YEb3YbS z{tS!o9*)Ms-ew(UVOv3F85My(W?A?GPRDkv!h852F6nEQkF7Wp4o>dlm#~QbZMVDNBGRT^M~&b%>Os^>3>2dtu*}(tv6K&DG`2gB zpl0kC>b_3YWS)2BE0{p}Iu_Eu{Y6F%<#Cs8EaEE_=c8^6IyYbvVHNi!*1gwjN$P^Sb%fz zAXebN$XKi*(TrubdQ>}2sCGA?Hvm+BZHdgkF4#*2_u2;-hlg+o9!E8F5y#<=?)M~G z(OM2eZQ4xKjFhNM=Yx%df=K+XGF7>UKWGfZYNnM*hwCo}9q45LQ= zh4Tz*sm>uE`+=`9_&4hGWYAkCZbKcf4%8H1LACP}^07O7eH_KCFe>eZ@Db)unG1LX z@8W6fNHbf2TR7Z$pmWF|ESZb>$tK{dSccVj0V^>-U^bi%cHsfahnW_&vwXPOi+B{( z{xr^XDg9et<|RnQB2-*6hHQQ#n1E%v5=Ya#OpZdC;y#tBT}m-qzbKUvs^F`waS?VE5sZbKcv zL#X?EQYnj2$8aO6qnEKa?s4vSzjt7muv2_Jjd$=2E_ldn6c3O-!T(!Onq@|n-Na-Z z%2|rVT+~wJb|AOKD9>F%)XY({BI}INktph z)9Vtvi@R~*B>!0cif>Y$%>1&9_7!f#KX3syPUfwNCsFn9F&*tVG|%j9Jd0Hr%=b6r z*Eo>!m9WeFj?<}#Enov;8GerYkbA9qitlbrp!_ZB&+ZMJfpL$Sv0~m!if8iL=!xuU zZ^W~43GpN`i(tIo5`?v`UFmT$tB4X}ETIQdCl!QJJyA?(%^L`%7^0eZj$pfZ?*Q;- zDHZkd`M;D#B@Z4p2H>rcF488_ktrlr5K6T^-l&(8U*^h7QU4d*pLliHJVM8;8=)y) zNX#S>iThJIg*iI^-N`Wf-hU@e$P#*+i@oG+5>~+bBeMwy6H07g?=Rt8Y$l!|MiY&M zHmuSbVja;!3@5ZNcz1d4f1MtsWcv4Zx(Ygii-{x^T&i=XICWghT)xUV#2G?uM(vlb zq|>CM7ftkWmFt~s8C$GZZw%FxO+ zf%2NhKtX+7-NxEraO&DnusPTm`6qQiR8&@^f7*(~9mmoKMNVX=_KGA5*G&t7Z?8pMK=*2@!7^zW7>&~Sg)VM6(k$+v z!2_)0Iof!Q(|Chd_<-{mv&^V7oWcwA@D@3xXIGo5FuW2p@C_&M9eY^eN)xwn1&?ru zPq>cDV^W3%PU6V;|KoGzqjhJu+kVjUgN_Loy9=FWKsjqsKJYiPD9Ph!kY-)8I*j{? gS=##}Cr-=zYQu8F(BJLvJL)B-Nb57@NA1M^1)2dhC;$Ke delta 295 zcmXBOu}cDR7{>AEpwmk$q#_({_>F=b+=W9*OG|-7lLbP{4{?b+;k3b})@TYM8jWgn z>ISz6n%o>3Tw3}U3R)ukLhtf3@v3m#yz~m zGo0c9?k-CS-r^d1EB}xC>BM<;w<sFWG|QRMV+9a_5vCGT;CJ diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/cs/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/cs/LC_MESSAGES/blur-my-shell@aunetx.mo index 799f75762c3c748a25ab984a19169f1e510e30d8..8f4675665f176f1bcc5e605a136f2eb4713381f9 100644 GIT binary patch delta 3279 zcmXxlX;4*V9LMp8aX}Ci0T)E&$|5SrCYZZmrluxYrfHI*Tv-CIUhch$W>-{PG88>o z;*#>B)JAg*8@KXBbn}I6zR+savc{&drbg2;Ya09hJjXNh=kuKBo@e_%&pF(!5BqIh zSn#{p_B#z%3(<#2?O@FJm>J0*u0zqrbi>1rXR)69&(V*?U5x36A?%GeP)#3T6h?Nn z?|b4T?vt?yt8kz(L34z{Nh&U388*fklY@WYL`-4yd02%hcpgXLuQ(OcV~y#Fwdlev zsDY0lkC@Y#fftY=%sr%Q6CP(w1ml}t6x1LY^+Prez(Uka%P|WNV+4MKEYAFh9q~45 z#ebtF+%DdjpK%J3Oq18$7?Nd%qn?|HTHp-H_+~8yb<~P3JcI4=isNeLTL?QK44r4w)%)}t3sq0USOt18BFoQWqB$-nk8ileWYC!%JS ziJh?sHPBP2fuBXK`~}p6mN~z#LZ!YQ8*wLg!W8y_HJD6PKNC?4nuh9sc923Qg+-_a zO{l}tj2hseQ-2&au`{T>`w|($Tt%h+zEiJvQ3FMzG8>1vn1;&GY*hc{jzK>KHCTu0 zXfx`;Ce#@?fY0KGsFcO9KWXSjy?$FzTlY0i!TU(I%>)-G9Oq*y9>=A487JW+8qLxB zzm0-2a1$qDk7Q%UVhPU1y*Li!_6fi#lTw%tBk(8|N^-NvBYV^{AD9jBOY;*q9|4LfV>qdVLN{Z~?ZW3*$-Ocq~9| z(F)Yr_#D;l7wm*_L+r!b2eY`(!=O%WDTOHXqxOC+YK1#cui@LMLv#+6%3C-bbLd6S zSEAb2q0Z0-Y=@2bB5ubUcndq=rEEJRSF*`}XDV(|QGkCsX5`o%lp>2XZdAwHu|4iW z?e#uXhbJ)tKSHhayi@-b>aDqq?6Ub4mEjmxqw$J!$^T>u4OD0aU*Pk21=V4Gp8Xb# zMRvu^MIE;FxF5HnCYC+aek+DyIrsBW^`D@=7Z@@bn3#fL#pxWI*wQD!h&U7?t z3zD&~-v43>I)pW-26d9B4CeoV|cK zs4a1$GU7wtRI>r+;|WZ__(J>BorPo5s8~tCiwAHz#&KeF7#E`Uz5%sG2T_?igF2L- z7Fm&z(-XE(3=mqBkC;X1F~7AeGNYiLQX#RPcywvdt;9S+D|?erYIYO4-m)%6W&}4; z+CV&`D(7lO<)((%MQB475UjCf)nq3LH6L86LCBrIY%QAa$w8YpacZuCCAOzgMs zwL<&SF6vrMtRCv^uDXhfDiB-fN>)XzWX^oUf-NS1ee|Hdi zXO!F5i6-I=Du0_?JT3A}S!d+e4+T1rOyibMOxpny}N`0c?GVV;UjYjtfsV-_(0`LW$u8x+OxE9sn_H4 zEXk^Iw|8(b!F&WsHN?wJ&n57E+giLKe^Cf z=JC5~+K&31>P**5KDW2+u&b(;9~M@(9Sxmh=AmN&PuY^Tqcwi}Ie(@r@W~$E!~Ozo LEfs#Nys+_qDrKa2 delta 3073 zcmXxkeQeEF9LMqR)ppg}Th;1DJ*=&2Rjb;fswfwkb`+bMp=Qdks?xP;=IPF3nX+|P zM;SsCiLoW!vWX?0x_>Z+B`i#{U=^Eq9F|S&{n@>4^6l%K)8Fqre9t+*+bbLompMFF zBLi!V-wvW95fx#hx8gGD2e1;;TA96!_1GR8QLi?k3vc=Bk1>~e zi*U2SI2@DAJXTHNTN=K>cd)dzSvsD_VHm*ZlW;i3<6i8Kr*H%YN1C<80*u8H)WFrq zBUXngxE~q9E+So9Glnp}J)xi%TD0-~BODW{$D(GMi#>2HhTwO|V(d7+fag#vzJ!|a zHEhP@C^M32kuRE&ENh2)E)liB49WO5m4Z6*Vk~aKKs@aCC~74?pgO#W!T2kx!yEqg zyU5t~2s@$kC9^@8gahzhbYneg!M~$t2!#g}G=VirF<)YjsB+=DULDcX0oa!?bVh$P3RN0WaIxR8c8tVX?X5P8?mpk8Q3rT#u@ zLjR&N5y**CyA!pyQK*%6!9G}o<+vGjWZi&eLJedL_TMFZwxBcrKmHt z2(@+9sFl~D8z106#<$)~?*vxh9L!4o|I=uD@D1u`aSA3dN-VC%A-ET{HMdY_Vi5VH zPn(1-aTV&YZonS68+Ax8pbMMPqdk8}K`RVQ^5vbgA2%F>>{e;fOOxN(23gPa8!rg zP+OLUT4}bweF*CM<{`UjZ=ufAa@07-Fb^N27U0ex|Kll)WVz~a59;)Ph3tl%Mjf(8 zxC0$MeG}V>91GirGx3bSy-zP+%5$)e_5viib{n}s*1orIg4xJ`}9ljH& z=g(r0?tc>ny?6t|@DA$mJjDsvxu4l9xERT{9mlcw7}arpe=~|U3-x`d$2|NVHG!Z3 ze9o~a(qvztZplr|VtmWZ;RK@x^}r$2z<;6c?P!iL2iBINR`4ZiD-NT!=p=IU>1kGw>Q~2D*7Xem4p^kL5w5x z*gS8IGbQswN^W8W@%*RJ))SKmt>`mCDXAm$``mlanc}IUw2By`CjW0Ua&oMc*hFX} zrVwihZGv`oE1~(P5le|#LY^S;S+yF_h%8Y%~#h7eLwAa zC?uA6kA=34TSw{n&*Lv>Plpl5$3E4;~ zh%j%FYlLHm_kgQc#CEF733k!mC(6C|TrrL{-iWYxhc#q|Rkdz7*QsN$w=BWseJ$Zg zSnt&IzNtMkVly)PrDuCPCdNlsRF+LIPn};}lHo2ZpF3~voYJD=**&JsEo~@BjCVM) T8kTmAiEKEOJvrDrV{p}fv+P(; diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/da/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/da/LC_MESSAGES/blur-my-shell@aunetx.mo index 155dcbb6f3faafe23c5efd60a31ceb7ab396d896..b44f3c80d8b4ce9f5b01740ddd100a79644fc5b1 100644 GIT binary patch delta 149 zcmbQjKA(L;i0K+e28LiD_Fw=4W(EdcAms_9g@AN8kmdx^SwNZ%NS6Ru~VMW z!&KM6MAyJf!O+~w*j(EH2)KL_i%WDviW2jRa}rDPi>wq}QuFdMixpf-3-a?y6l_w! hv_oo%ZfZ_WYLRYYUP@}o<|m9Cj7)}xlixEf1pu)|BM<-p delta 138 zcmbQwK81Zki0MK`28LiD_F!OO_{zkC#^fV2;g<^(vT-yK$xO@_eOLRku67!045=-)ntQ3k1va>T4Y=X;D^HTJZ c^hz8u@=J0PGjle7VB}zAHq|qk{EKNR0FbR8S^xk5 diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/de/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/de/LC_MESSAGES/blur-my-shell@aunetx.mo index 2b367d4b4a97e2cdedc627f55a9c08d9eacf47ac..416e6ef5aa69eaacb2e56a7f2589b34f8f8b3554 100644 GIT binary patch delta 1355 zcmXZcUr5tY6u|Mb%0IJ2b5k)hM>b7ub4#5zO{ZyONRXIO7NKkYL$QWsMzEkiC}9Ze zAtDS*f+R8XL8uo&$sWXq63ho*dMGM`f*!Pp`X08Y&pmg)-@WIYdw+X6U>F%Nyf8-u z#tb5Mt4N%PtYnJB;}@L3-x$QPERkv~+bdFzH!%U{(2UDy!Zo~zk}Yxs{CE&w<9FP^ zLHwK};=)V05|CO3&vQjC=mVI69s5EX-bEkr5?au03)zTUiLYS__M;~D7?bcLYC#)l zM5A3K5ly%gv(bTv?E#U~40@UH;5*dHOnD;PFcTv&A7jvs4Ooq4I`w#mOwz;7>e+ zCHqC{F@V~MC2YoT7=_33Lj^Ve;?eCjgS`wN)m_{C5RW^bkWg^f-bcFkK5JnecpY(?{oM*2YU>|J%*R2=wQeo zV$Bgr5|PDRk!1XVA^eB^7}_o3!n!;W2likJPNNAIFcp{a3P$IP9LB3ygOm6jSFsnr z?GdTOYXuUN<1Ahkh+NhOa2NUt!x#2r8}U3^&`}h&1>=ctVg~l2CiV=s;1|?_RxuV6 zts6tNv?lGLD{+a8Ska0%1c@S`4h7h|vwwSq^H{UO{&Jc1M_Q+NdbU>!Pb zBB${dYA5Eg6@TGIJXIDhuo;=I1Up&i1p_#VPf#ChDHqv}UJT$J)Qne9TNzamem62v z6M2C-xPaQJbqrV&FrpE&k?D#JnWmgaMiG>IEVO0MF&ST@Ui2QdWiyfeS|W3ip;u>(E0jGOT6zVN$p5iP{GF^T(Sn1!}_9JLc~Q7f5_#6M9J`iq)? zRM8DEqgMJ9%@{%*-3Qb{W>L>wLMMKW#D)9A2~}V$_sbz&U<2w)*NmEg7xm)%n2H0a ztsFr!zQKB&!wgKP{1mjIcGQKMPy=crji`U$g8A5qK|hO!EYx^D)@@jd7d^MYb|aiLI)%qQ5UEZHFrm@cG*;wE=gByVFwbUUO~F>GAnI9c^Rpa*T%ccB^e{ IF8AZs|J~rObN~PV diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/el/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/el/LC_MESSAGES/blur-my-shell@aunetx.mo index fc3ca9baefcb18db688e98c6fad1643ea138f3ab..c671ffa992e5fe1d02f02a79fbbc2fef0278c9a2 100644 GIT binary patch literal 15541 zcmcJV4U8OTdBfAbT2e=hH0KOIcQ}71xd*FM(t6t{Z zYrzf}fDeKE@8UT9LRg8j~=a;hko4{9beLMKG;D^AQ!HJu2DgB+#~E-t_ydqGZu1p>ox4Fy z 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 EzxphLbN~PV delta 1968 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 delta 252 zcmew_+9x*QNc}EG28JE13=C}y3=GBW3=9Q8`WKK^1=86Z3=E+_dLoeK0n*QbG#ilq z0;GXj7=8n3ULeiL$-p20r1^og7?4%~(m*2^%z-pWpFNNk1kyf0Isiz=0cklPy`Gan zjll}YI0qC+1k#*bKuth88%PTQ>BT@g97u25oXNO^h1W#az(Uu^P{GjD%D{566q|~+ zXI@HCYPLsWVwpo}acWVqUS57tYC%q=UPgX#NotB-d1_KlVo9oAeo^}7P&Rf(M)S={ H>~om`jhie| diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/fi/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/fi/LC_MESSAGES/blur-my-shell@aunetx.mo index 09c4422105b74b4df2d4a605eedbee852561fda3..4e50603f32322cbda5d86c4d7fb90cac9c13942d 100644 GIT binary patch delta 4432 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 GJ^ukSKj9hx diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/fr/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/fr/LC_MESSAGES/blur-my-shell@aunetx.mo index 1bb85eba81a7ea77a7bd865ec97c84d8b94fafd8..a3a72a3755fc636610648cbb2c90dd5af5de0cf8 100644 GIT binary patch delta 3311 zcmYk-4NO&K9LMnolfdiM@C8u8IJ{{JD4=GMCa4J^+I*Q-NP2}UTzBQly%#aGZYYK? zk=99zw9K|lnzfW(%vxS#3DxmlZl4+Fo5c4 z6K+M@sgD?B41JpdT!N*j_g_P0@J(ESM=%X14vy}vD%60Rk>r?lgUP=-e3l#OxEJ-p zC&;_z66%FGc9v4#A2pyY{9|z&q2++5;dR(=lLpB>RYfKw_-eIvJT9_#kZI%vH2QNGK_n`)M5VdwEkv`1lsMKF|?&~b7qdut24!{D;MrCL|s{LBW zNFxQkuol(O2GkF?p!UEEI0xTDr7VH<$wn{g_-#Th-KSWNSCMR+sTMmN7h)Ff!{vAu zORh9yAlfpxIeF&9uB_84o-Zgist)`iOCLDc)FQ8S%5E}Fr+a69!%RC||E$2T#; zXG$*?;y^6N0k{xp!-SA!GJ85H>#uf@zEJ4pq?k8g&A0eQ*a_ahO6;7 z7GtFJw&*u}Jyvq#XY7a5Z;uY7%CP~pN7kWIYhyfiU^2dlTFQf{j2uQy)GpNn=6{>@*JNWKn9%{zLsDYHDj@P}Y&9n;D&PLP#U&cgy z)p>ph)$wVpz~9l*`7fCeP5olLi3d%n2HH>qXh&sa8>)dlsAG5>=izAb%EmU2;!J!C z)p0C4O%q8$)gQnr45K#VX?$4c{~Co7Ts?`855AAu^=ZY?PiQHYQ}4jl_zkKf4=-sK zzmCetU#JYa=vA9H3AJf6u^P)T75Abx{V}{#ABa>AbtTR~HQ0&i_y=ZS^3-StMX04H z!!)d%YP(!B2XCUdg2*Mpgp#6hG};ZWoN+CbiiuXD`^u*9II)0W8O+m!cImT(uIKGj zuAInvN{wPZM(e|z+tH7*Di0BB2yLG>LOFZb-qkxf{V_`2*CS4$8A+g7MQpdv^-jrdr^Fil zdu`_LlZ4KMa{3gph1g~fcBl2)N-37uVVAh4$LzA(-DCQ_Kz%L2ZZRu~kbTOX7PG`Ls@meAk3#2d7#{eciH_pS8$LtPz1)8bO=yiU~$*LlL0C+O||RXAYJ${Lv1 zOqpAbTy57j{8PlVnuI^c#8gHn3RLlL1l!JllI&Y}!WYOsOyDR>C=vVQ7Kd@>VqwiTY!vjHIt*_o|c^ZR( c`mhyfwCV%((O=gv=YX%q9y-OcQ>OU-0WC79WdHyG delta 3105 zcmXxk3rv+|9LMqhQ4E2D%Ec=p2bGH;bi^wlg5ss{7HXzwQ&LpK3j*RL?Wj?xp=Bp; zsJUETmb13VbaPEJY%`lnt7%y>Yw66^)LNG*+4tvpdAC2G|MPO*_j#WG^E~f^jjozn zm+yLH(01e6Pjn}u+n6<>JCr|M8^g^aaFgR6Tu=KLF2^U^nf1Vf*bN&|k2awje|6e_ z;~3hl+M5l>0!%jZSslpgDFVa&!0I2MB=%{t>`^k5mP z<2vLgwi{FNDAI*pL0)aQFogc?9}+##Dk|`g_LxZ9gBs}=Ovg}W=@tPARQiKq$olk{&dkmyBz^k6*(;VH*6sF|EYz3>VKJw#O^h#jZivU#Bz;NpQ4f@( zHp?nh2er=qZKyS?N8W9RQ6+D5?q5K4a1~Y2>(~$PqAJsqGphGyIOd^#@0&oP7fnI^ za0XHYE5pfHiz?MMOh7N|qhmJ}wPXjd02`4iTYC>x!4&L`Yp@*O!7&)gL({PcnYhnB zA{ot%8#oM;dzw9m^D!4sV;(+2l`M~sfE->L1qEa`bUL4FcHIpd3=;G|7*1S2V;W+&KRT3L+zza zsJ&G0_yLyEZp2xb&Zx5J-?oz6!1K5akEZZh#aP}t7sumb{190M^H8@U%tckI9`*bC z=*6CCfxR*rHSpP}y-1HEv1G@2?<7L#| zX+pi{CQicp*p14KVpPGjXEUmHxB#_eD{v@o@KS#zr@0Y?50Pq`i{a|UeNZLzI*!5+ z+C``i=Q{0jY(slBYU$P?MYKJriF}S@u}wx`fQ6{vy_-S(7m}RjhGv%1Kk(@sjBE#c z7S-WuJcKo7@MJ5VJ* zf%?#WiEVWLe;`rEKcPl=2lawx)bWdBhfc*B)G@n;6EKYWs^cQm1j?Ou13pjtJZcjr zu>)ViNjMxY;cSe`<$pT=RV0PD7Yp!rT!Wc;fsQ`L$GexORf$5>o|uK&v}LHxx)SH$ zKJ1PzMl}h0AP38q;S4;0@%SJ1=t<(?kn6?ysL~f=9L~-6r-V-Ex|wu2(U+(sR1EcB z<=+;XI&d9X9`Q2KawU*#A!ZU((RL8pmAeUDd;Rx9Q+>5$uMiqz%e9MyE&BL-w-Yt5 z*~BJd6rmN|LulAq3>9`E5ktI5R1+(SmaB&34W|)`FB1C#?L_A`UtuRx(bp5&Hm?#h zh_(Jt!#c;mM%HrqoMaVJC|ga``~MA#NvI>E_K&Zv{M|$&!+^IZLZnd4`rMFG;Uj uP+C#CbV*)GddcGA(nSq9i9xQ`gVXypt7=P diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/he/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/he/LC_MESSAGES/blur-my-shell@aunetx.mo index abb4ac00d3cd401d964ab4adcc06716f6ff089c7..a140ba0e019da790698fce30856959598a1a8b93 100644 GIT binary patch delta 126 zcmX@j@`7c8h%Yw-1A`3^gFprl^8j%s5IZ=VG|N>iX2{v#&1zlB*a1ep3_I diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/hi/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/hi/LC_MESSAGES/blur-my-shell@aunetx.mo index ee819a73273299b58c3665b8ddd7ba64573a0e8e..d3801bb582fe3b4ad1b8e607c7c355b5c31f0422 100644 GIT binary patch delta 1325 zcmXZcYfR2z7{~G7V`WLPHHVZ#Op$axsZ>hQGf}7zA)?mIrsd3@7Zr0HFT6>!8Jc-P zJaU-hX67`SX@)Rs*sNYPhndxUul=8`J)i5k|M&mCulw+?>zS+jnX6-rzo*kB#YIZ9 zBz=u?96dvdr#%yMv3{mh#q&$ijsbM$6>Y{CJc`rs7It6{UbA){9>m<)yvsOGun-&K zq!#NRFOO~z@$C6>vPhWchRfN*M z1cR^^cVeT@eqVddTxkLA+tB*m@(}nDJVtg$&wUU6UXqvdIsfo@!hO?VPN z;&I%XBemloa+*4yEA`cC?-7!yp_&7O9aX(iSFIiuU||sSPB(MjPj!FZXBr>`ugE0~Y!6J81p8 zaWeC3h#&?hEpu+I8*M8a&<1End*K1vj{Lwp{EMxawVdO_w>SmImN}+k2zfc$dv!Ps zccB|kqvtHaH-cU~ST1eH`U*Z3{DQXPQ!6+g>_OYg=9SW6yob!GBEBWt@;1CnezQ_~ ziH)l{Cd^;sjCU1}kZ-P%9^yb1``<#~UF-Zq$XMrmuMf~x{vN}vBWB{L^%RS459LMp`%w)^j8q=6;R?Ifr?wxJiu?@Q(#@IZJc^K|SS{Wgv@GDOX5ee}J zmI#U4t`_o#Xfk2ROp-S8@P|aw+Dh^M_Pcfaz0UWX^E(gUbAGq8J))yMA~-C{2}Vdc zW2H<<-Q!$i(xqJL3$PT|kC$p`zmnk^NoQVB0JE?O(=dcV?7|kSr?Cl(CP+6J=Mm1t z#vJLO_0N@~Rti3k)Qi7x1Ag;L`>`@l`h>4>0k%$*=3!L6l#B~;3O3>)ydI7{1rlr4 zMjU~s(H49g8A@+(ISwv#q^A_>3Z-M1HOcLG4@VJqV-o(wXiS_ebzlls4v>DL)t9mg z>sO9Lunu?P=CI$w^=qa|v#8&Q)-U8x7)aqEk{z{$8-8N~@jo1m3B_*gMIW&rYj7`~ z#J6}H8%m_B*oT~^E|yB)@d*ycmT4R}wj)0|eLQU<-*jmYXH$U|Kbt{%@dL(EpIhdx zxY$o0>gQsB`m@MS{WB#_MC{L^@Gdf^%J`NnEN=@AW>~&O0&LI${wfH7V$lN+m?|vmcXyf?SNvT+ktX(_Sg<@iMCCBDxdnRY+c~ZR-i#)#2 WiLn(C11H7Edn!IXGZdHJR{S4p7{HwX diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/hr/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/hr/LC_MESSAGES/blur-my-shell@aunetx.mo index 7a2a31826d8639c49682537f667396b1325e3c3d..45ed92c75947e2cb967c0dae1f435923a1328ccc 100644 GIT binary patch delta 738 zcmXZZPe_w-9LMp`!d2=vn}3$gEgvIOqs3OP<%9?p)rhc&ve7{t3{*-%7S$>qs7`e$ zf*`O%Cp|<9R-J+h>d>h_gwQDx579-6prT9fZ+qa!^ZNb&e!tIeCHEuu=&nrO}M60+Jjs11Ww{ce1SXg zbEjO5&}rQuHDM8nr8Br2uOhkW8CqiRkQn-cmcVaZjsB?AhyiTC2yVkJ&x7b^d=_p0 zMWpFU)U5};=WSR(3-Ay(<7>1^zM&lqc1f489c}#9D0zpEAFXbC3q zIA+n}+;r*CG|$H}e}z`r8+33H?cgs=qc2`x&!7d~hih>RLpb5BpF^wonm2zPdl}!w zqxc;2=!SU^?$#+}PUrCu-a*T73A6YIt>Qt-tY87{qK|kCw>Z*%tY8pdq9y(oEzwVC z_x;2PZ0`C0L{XLLB$>F6Vf=u0!E!C{FNA{WL~<~Z+~uS)*`1kMwXM(R>%YC&ek3+9 i+;lQ=pfp{Y9WT$!W}VSe@$`7PSMd$z&?tG2n9N{5R!}qih8f&Lt=OW>In1MO^bv=!-Q@qlSq$I`YT_SI zPv|r1e!p-Mn@;avks;GGk_Fm9l3@V%DvUJnL(5|)*)Ql@2PlF8aqB;HW@a%9jr h?;lBAwr|>{vGT1_#vHb9OpTRov$rc<%SM-){{uSgSeyU= diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/hu/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/hu/LC_MESSAGES/blur-my-shell@aunetx.mo index f181edbc9dfc14c8c052be342c58e27d3983a334..8ca7d7ea93ad86db634d590f19a3558a27fb9dab 100644 GIT binary patch delta 1976 zcmZwHUrd#C9LMo50tX~DJeZ`0JU~(?2M!U(1VT^*OYk2KV>9&;4sbl!p~HbW+Im*A zHEnK{ow};%!WFri+i7iGwdqA}bz2vimCnsBx=6Im>>}Tv=bZjr^xM9?o`2`}=llEq zSlDuPtM_BDAZ@e(;vwR*MP|=qUm<^JrA20IaXGHWFqYsB?8QOs!uPNoe?|xI;1XO_ zY<54^Vkt&&G4^KfJ=?=YEf0>MIy#9B_%&*vyV!$;{7Q4`!=<Q9K{9HiiYkpo57>V zBfE+#@K@AC^5{$xC__zX4Jsp57-4*C;v$LT*oK#J7nZY3`mixn2UDmHUO=tnB|MF3 zBuQ4YjC5l?>boA)g!)kZ?8kZ>MuxE0(bL7dT<8ZMqh@>_oA3f^rniwXtbiLCM1Aj| z-q-R+^%FtW$SEAcv)F-u;ePBOU7PW3?8NU%$-ib+&ZvD@gZf|+>+n3XJN7;5yX&X{ ze!~y*coxilmmwYNczy+WWclPjge!3`c4HO3gX{4N)IzSWApc6)0uQv8OW0ryRDmkW zI&8(=IEb&ICU^~%x$2c>JFyX!kr$E0+6h!YZ=tqs4ppQdp(geT>i3sDE;R5jSc89{ z2Cm>NZNqNV3QnPl@d~mV<~(Q?#YWUXY1HpNK-OfJ(82AjZVqF}oUMfP@yZ-j4SAcm z2yoGlDx!U;R6UCt(8J?+0ei4*joBf588wk>Id7u+(LWK^U`05GYf&rx5+B8Hun>Po zzVqx)F4R$wL#Y9)P3I@eRO;VHeRmGm#y~N*5nNy2o@iRa|t&?aawh4q8sA@yR6%G(I*Qt(t;ADA1EDrRJWOy{{JkWDel?C#*YRy@! z8dZ|piAI77_S?FgI#+5snA$*E=BGeGarL-68FiwgqtW5ilnunjj=8okdOS6q{O4)r z#@bRx?>~mbFt_|XJR@vkx0ZFh7-p! z2ZDjT;+BS{=FmuVCNo}kvLw_s;l^j(ls{fPH9eJxTmQxRWa{F4JU6QQ@4L*MirM^o Dex%3A delta 1877 zcmYk-OH5Q(9LMoL0)xd;6;Z079kGBYj0}(AHI)HWu%L)Wk)+l_7zw1K1_=Q-(?l1V z=tgY~VNs)PQYs5^7EKy$Qt6_axG;gB8-tqoTvTb&MK!VC-<@mYN&fRW_i*Ms{^#7` zLBm{q^nQBMw?=6rvWXw&nMJTLnGedW$7~foz!hppF-wIkY{WdQ!-JTKSI~=p;)nPQ z7vev-2tD)7KEO=mIclq^0V!wtct+!?+TMv6lJmJe42~GZ?}QM%Bu9V?A~uo3|fvDURa-yn)(L!2+{EtVWt_ z0yFR$Y9V(}3wVTD&ojwT@BEH8lV}qlQuk!VI(>B zH!jCFsD8^niZ3V|HBLSjVkt7TeT7j~B2@H+qo@^sgMK`NTInCim^Ov#_YimCQ`DUZ z(y0U6aU)J(JHEtPY$8n|Jb_xsO>DvGMdV){a+tLMyO2|`Q>c#Lp(eP9;|XThQT_VZ zelDKFbo>>I@HXzm*SH$Da}Mk9Flqy%s0@vvj&3r8{A;2q8gvO~u^Ll2=sj4ETHpvO zQ}=K?K1OAtd|5n0HK=i#QAgE|x|I7-3+qOG{|sv4?{N)YiBi$TQ@9ylqjpfoyQIr^ z4#~33U>F~xCTjUO{=L1(9xRGpe2W**%Qjh~{f;!*43ZRkiMq^5q*Zq&x`2vOm4TWt zfI~QpTW}8dV^vmsAtSCop$7T|S+o6y7jPQ2(?Nbr*5WZt#&J}?tEdg#MCOayT`D@8 zEM7{E*9uT6szI&11vgU({K5@N3nF$59*j3kNXpN&IqNMzuf3 zROQa^HT!~wAnwHx{0!$%sV*ixdar}12^uj0Rp+`mSyR7CLZy~aW=NcKq^!$%tv|&O zp`!6O63NW}f6>iW2AbU#y&}3i6-1lcCi2|6b{}->Y|<$?d}?=f@ki$}mr?fLRnMUK?DfB z5jy)ug6!);_E{noovX^{ah%T$@6~m2-Y=Yhb4QxoM!ib<-PlU_2!3~*e@41Lx;rZQ zv9uJ={G{HVNN22k;rhh1(xT!(QAw58Usmm}I2%dN%-RTX+pM1_! uDAL*cb=RRG-=Y4V*rjw&f~U;quk`t26H88}rfi!W>mQgLi}kEJn)n}{FtV2b diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/id/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/id/LC_MESSAGES/blur-my-shell@aunetx.mo index cf7176478bf43b27bfebdeadc91abcfc0aa62423..cad32d55350b792319a6dfd298a9bb5c1715f8f2 100644 GIT binary patch delta 3588 zcmY+FdyG`o9mmfA%R*swciF8_&^@lA(k|15Mc9JMuDrUt0>Yw*R^iOd-I>eW$9f+u z*d~LCZHh`7ohsUBOd3n2>BH?bv`KBK|Cu)6ADE_ziJIsijeqo!+N8Bf+t2UZy9H17 zcR%Nxdmg{X_s)L2U~?q4BE zQ*9jHkORBu$bl=MMBE2Y!y!o7)thhy{2i2aA3<^SV<-px0}jAKcecI=B_o@lM7%v8 zPe9rK0A!1Lq+9AwXPOC|R^NwYPyIaSZ=r0sl)rxmPBQ)o9)QDmdm}sz$KlVQi1Jf7 z4SNY!MENav2wsAB!P}_IL0Ii2|5DQnOpL()LWyYP^Ge+V?}1cDy$EI9Yj6$x6Rf~) zq%0zxfwJ#$C=Q&4=L)QcCmHW2eKYVf9E1}r5`LpWM=tmY+z#J>_rk(TyoCFqhF^yd z!IvOGsDDEKR0rRzlxPhkXth4)PADaK5K5`4P{bHPIrrO80&2|CSx@J0P$Ib*sqcVA zD5+1NIQSS8t(?l|pMmljoqBs@E z!aeXj6w$QxWj{zuVVUt7DD$VGtp6_j9y|;C;i%3cu0YAeqfj*UO(+gMm-A&P=llS6 za=-d99r5fpFovJPEigb?^7;G-cFH`IuV4wci36*lWNZ_Z3q~R3R%7rCG*C40FDU!k z_!*Rp_CYDhYS_;GYLLzl9EMU$4@$~YD4sq6rIt_S^DjU-@P|+we-nx({sZOfS$1=F z@r_U}TnlCY5S)M`a1uTZMSto8I-~I4P$Io^b*9=qP%`m0JP4QEl4+$3=2{ya zQT2nEIQ$4Et(?LBn0=YP2wB=8Y$qmJmWH;i`Xxw>^~n82Y$N7ib4|Y04f%kq*?*yY zIX2x=Luun!32Vo;V%sqh+?^O&wZ9`G;4fkKV^ZRWG0}*88N*mZgeEn=8=Gsp^3DTr zA0}cO!8-3gx!V@EpKa zW<&cFVfE+Z{ZM|aw&i1sQC;%VNIO$gPC3y@%_Q1)eYYHIqazbkLSN4quRfqlC-k&i zuDd}M9(TN0Po>+Vq~=7LWeoEEj5(pFBDT3nti#Byx`AEbyT@fO8+>g%PbXp3k=@1C zTkT_oy;nO>@|>U|4wOSLjII7Q&viKu@$7sItWEPgl-FNylhRD9nwT@BtBUoju!Qpc*E=LPN`TPP|4BOE6=IA zC9m1ubE@O^wSybh4h`zT;mw2VS}*sE6y~j4-+Zrkc_VP6R39~-L1JZtNGncIW#Bu$ z>$x?YsK?~^grQ!sL#{~cQIpnm#YC<)vGIZvhFx|`P&WQ_8r2!FHZ{EBpx~&fxH>jT zT2woxoVqThk@2%5Tc7kMg>Ck9ZZwrt_Rg3nFq*1V@XHs?ntbQn!cxjdmb+Fpe#t~F zbKT$PFWhPB$h9@Oa$aGf)oa|ETy?n6X-j*RVq3GQVmQn;eZofL(d*e&YGyjmqG z1BIQdUJdETS6t;~>v?^?(6cKIY}|QTE7Ue>PW0CfjZQQFeu-IngkwgPr(YXPP0wn8ry=mIWPDU{M8l$)0tG(pj{soEH` zQ8AimeHjggU{arK;w8$MXfOfw0We(*3PgA*P1MN6ht+71#0S5>+389D^Eop+d*;ml z{Ll7>-s|biRC&?6M%zs+B>pZi%V7344zx3~%|`Hhyc0V^W_RE|4C5$v;UQdyS=@w? zIc9O(g$W$Ox#(gkj$@e~^%))h>{|}HVKV=LUBWufub~Dm<7o}J4fWucIc&tYP;)(x zC3qS6v)?%s;a`C_aUSRYq3(|qo6Xj%#^^-3un-qv5<77VuEw`9g_EcW&gHNkD{&U? z!P{{V_v0w?W;Tt_;h$KAPcl26ZEs)PtYN|b{sXc?@%c^gDrRohp;qa)`72J z51v2`6yav(W;LjB8d2l4qF!tbj$tpdI(7vs@hWC?V*%6E%tEMvqPQHZkjYy&>P-iN z^G8tMdm5F}VQj+JkTLB`WX^Uv@FME|UxLrCVISwW%E

I-42gL3{>PT*q+$FXCEk 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 diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/ja/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/ja/LC_MESSAGES/blur-my-shell@aunetx.mo index ae0944223e5a28e71725d8d606230e1722d5c47b..12d1d5283449bbdb7d7a33521409299038f917eb 100644 GIT binary patch delta 1350 zcmXZbT}YE*6u|MbN+C;(>BthqftocpH=UXvsnyb=4-6$EQpD5|D4Mdu(&k4cMa4)+ zL`*P(fo0N&pkNn;Hx+qNLgHOu5mM2|jTcG()B9eG-*cX?bDn4Kb3bGm4OwQBVuE)q zBCZUP1QD6bG+e*|;$;k@e}~8}+>#}djwPt`8!-htF&S@S8$Q5RwC)r+j6E1bo;eH= zzhN^co_0u34$`>c;D_&#T+)y&|NF1uS>k!j!y;B4z;@Jx5!8a-VmbaqD|%caHuRaE zLM^xxb^m_!Vb~QEIYQ$b9s962$Jn3`Hxq}#q(=av@FJdE>aZU9& ziMswTc455NNZ5~hW5cL75qxM4e843-mdyBBzENouC+Po*TJdm!NGjgO6?}xc;aH)u zVHB;zpHUCAiuzY2?l$(zHmyUxouCZT&=cQ7T{w+ec@*{J?@T|Uer%tx7T53?))a|c z#VOSOtYVP>_TdQrM%{0?#8^LycH#)8l3x~RXre!;g{&dBCY$&J^~B|<k85b-k_3SeJ!X@{5m#R#;~a_)-6xA=Cn<&G9Fw1-?X0 zFptzK%c%41Jb`39gqo-cb$$SKpFz}h*D)0*F{oD+rJ>KtTVb61BDNCGpq|jS*LcSs z)D8OZIF6u>FXI?mctZ6!jsv)gY%Q1ei=4z4*oa9!UIqqy+&_Ktg$~t06% zS2~1x!drM5pQ0VTl|~^akS+=175t7mzq`tC9JTOQs5i8T`qBQXip0hBq{Qbt-Cn1= zAk9-)oL4v!%GjDz(-R2zJJL!!15Fj(o?N%r)!q_$ow3dm>+v|7Th2%3Gi&Yt06zDx AhX4Qo delta 1362 zcmXZbYe-Z<6u|Mb*#=4?NTOosE~!0iw^g?^AGMW_ND&i*0wrz3QdgIhJ}jAwl%*lM zwDd4~KoV9$4_vS;k`M~~Q243H4<#gh2m*_UiXQ*ty>Q_-XXehFGjs1;3Ry-%mIte> z!J8HlXNE|eh|Fdh&SMYpBHqT%wIUmE^*WJsEJuCchbh>FNq8B3_z;^gb-hRh_M(+M zvlt?N!(t9Rnk7NmP2*yg$T@tEX>K#qIb9-AUN4rHjFc~%B0P2Z_QBNZH$Q<~9b98(%WT)6fdN=0GRvw;4h$V8R@K zhFah&)C6-#?XrmazJn`}g!@nvwWGe@gSyTj>bwh>ienhmqne?i*UIBDc76t%h$m5Z zXy0Mn<6_hW`f)GbKpkJiVT|Pp)#E7kpmmpVEzjb9;+NQfwi1zJ*i*v!(DiufJ{lNyaiu NRK7E3d^)q%{vSKFwgCVD diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/ka/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/ka/LC_MESSAGES/blur-my-shell@aunetx.mo index 8c7b5101b0b1c5b604658a13781415754f2a6050..f38aa0978a8709dc2995b3dea22b7888a06091ef 100644 GIT binary patch literal 6964 zcmd6qTWlOx8OIMaE#N>X0a8jSoRmuw>a}CHZqiLsa&eNTxtYWvC`iC~_jq^k?94JV zYsVD=Btwx9paKa=+B9;w1bSCNNFWe>;GsyM3aJPoRfJkxUMdiMDi2Wjedn9qwH+s^ z;DwQA{^#;t|KE3x?F%cHoiIGRc;CT0`f6hW@Jq}1@LYS1F)i>-;5)%DfIZ;(0-prm z&HSg}9`Jea^z7C8)k((^mXNvXX;0o5yg5u{f@M`c!;2Xf7 zfw(Zg0wu&}3;Z1@a=!=pF@NOqX7B}20LA|& zL5cTMpxC_^6hB`n){ldd-&s)ddmMZV_!PJt{0%7b&x4}>7f|f|tyupDC~>|F@?%!A zDe^afqQ4sK1xujp9|eWC3Mlb6i}@5NdY=P@r!N+Gs#re{iu|LX#QOvA2Jq+LA@C2N zZ7(Jj+MwbOA)w{1p_rm%v9}Wz1DfJ_z_)=fgYN;aV{tvW36yybioMgI$o&v}EBFj3@&5^wyoM>_ z9xwytoIF+F1yJ<<1qx5AXb#c0;4biXa1i`7cqjNIH~{_~#I(5y;rD|>pxF61D0xkT z!o$6w#P|JT{h4C^9QYa5UjikMDaaG~GayUm7sdQSG4Huf`Lm$N?FNOf7AW>V58eiz z13w7<7W^}~hM*+x71vXD@F*yGTtoA`7u*2~{}Z6Z|7GxQ@H~j9c@dPlEyoG%Vs7Q# z!7IA*2p5#tlz7+jay^-wc>8(fLEY=`^fT>EQu5CS_=<0dd;YVH$uO_*FK0#K*vc!s z$Rm8qV|j&(t9ZBY-pIR&cO5U~@el30;E~$MeMq^@M&3Jkg+IAl<)O`dAINw+uW%)g zoXriq(CYj8YVc;>+j*rAk~DTH zl4)40=P}%w?MalRd>c*T84IH@pJpavW;jSE_+)i6?8aI(zT-hF%FS??1ys;dvyQ9b zBo1o zOxZ@OQkT+Yl>l!PGoD|N-MLE(3ik$07{R{T8&+JLIgtGH>$BXOR3@@Y>S!6A0$Gvh^UX zx>QW2E+}k<)FIBGbP1E{^|BIN5=0T!YS@LmFzfa1vM8C-m8md_>=-PH;F6};N}8RM zF`5Q()(lb?=VmmerE0AxNX=oW7z_CLyTKf(hdDLj0O}25_fx5MeM-Blr4Mn+INfE> zP^mFp%IYqPwgj!%<;QxoXr+BwEv%L(Tvi%Q%C=|ZK^R9-i5%Q~K(y+M|je4tUl=_*_5-b%R{z1a?I?D=qMm*Wysf{tiPcBpS) zuvB%EJ!Wp^t8+8=&&_;mZf16F=G5HGIXgFVd~W93{`;M|nQyYn5}Oas%{<^&5l8T0 zR=?-x=&CqEkNXw1dEea3*AW6R$lgh>$Mj5FNSvMZt9Ux+S22z>24oL^czxI}F~-sT ztYS(`dp(xWBaTyj?4Wsx_%%i}A4KdM-V}P09L9QC!#qa6*0%ltON7bNY0rw zYTp-mGiOzUK?x(>YnwEfvr1OdE7;KW0Hf{HM-`K7eJvc*wDT#uF(kdl)Td11=`nfHpb#42H` zYX+J$vHv%WUC9M6tG3gy^KHlh(W0RWzr^$1c7w|A m3{{d$+P}eA5q6fiV=zTvgv56iQ>u44{U`supd&tQCJNpU>!UF9q_pANjuM> zld&Sp;AIm!n9vK)tS8t7NI$v?X~3JX7CyA|&+PmQ=tuiY=z{O;_A;dY-yltV&6Z|E z|E+^{7@zs=hE^Cxq7%}G|cEMw?1unrLybrg+RY((f z1F8RKNDFdc`96%#0(fbHov;Ir*>Xq&owxI=kS6pRPQdpt20O6qZg>RJKudQ0BBTjC zx7**^^)GgwepaLpd+^c#XJ8l9AkFYP+zTH-n)z24f-W31^=pIJ5VjpfLZN6}r}7No zN#D`Gu;~9m$3^4e{uC=0?_Y+_g$AIDLqYe!zK4~|wx>lf(3!#in#6V=4ycnv~2I z3^uJxvSF#SvSP7=d0A1dMe)-$RBPy`xME3pInBjX(%*-58PLnyxM8^nxjkYP!Mm*~PI1og=gr7MYES+g0`Yv#XfwmJXQFw?S#nif%NLCDG_%G~CrnJKKo3h^=s z>Y|%MZwxByMhfyG3hPD+g0P?rf*>fU3yG}n!+Un~IluG1=bUHfocGGW*ued!Rms~a zB40O&jEl(C0+DOz*ev3~TUds#a1H)OC$20M$;5nY!Xj+N9^8ww_!d*Qh)m*p^y1|r zkr8}^bcwfElG040wOGW$yXeE`=)fg(VOEJ>dGHdC;s?Bep6wzn_yT*;$pvY{QPc$%Pz(8n z7OvpHb!Q4uccvC~!A8u-7Nn4*bkoomWB3?HQ3v=d?H8L+EABvD=&Z^8SWg~Cy$ds_ zmvheKPpI?!H2r^2=W+P#d0d#m`cgte2YT@!9>83@j+r=#y6{8P37?@(G>17jj~nna z>KQL%GqzXRmv92tlmB7^I=P{m+wc(UON>SzK0z&@qQ>6ZA#5biV=Ly?+PMeY$y3Pj zOX?2WO4NcnPz#J<7za_0^a}=X2{|R%zf;70USFWWCn-OSPQU&6)uHadVdNUf$?5L& zH+g%i-JUA9r^fQu`h7L!9)6jDV4~lBEFO#`!omJ%+;25TqLHEA=s?1%i$vq0Sa_&m dFm#%Sp^9j{>&}RklIHcgJ45HDFBYV_{sW-nle_=` delta 1161 zcmXZbO-NKx7{>8;U@8?;8&k6&ubO7+9cTO)o#}(IT$CSCCYDIlB$?IJ3PF+i=@@Y<}lCbI&>NJ?Gpz@!|M%gEMj8 zA@VIx3u#%5f`V_2Rjvns!Zy>yJCF1V@OG7aa*S$1ATgZvR=_y_gPBc{jiiR!iiyW|$E@ufZsm{H*oq%;49hD-j^Zo4f-Ww|NgPC7Ud$} zW>GKayq!Ox&a-Ow|3aN7t;(7w3zJ!23Tfy-6C1GsGw~j#;3Vq8Pf;g)fjZGVX5a$u zz|W{>ypAo{R&8Cv3EW2hjX`vALp7hkCf1iQjb40?T0p7K+S)kQlNYcZ(`&8Vji<XClIW?Vx~M-KXV=^Oe04L(U(v2_Kk&#w-32bz#;Anh|3 zlNNJ=)uzX1R(cIjU7*HW=HZvp9E$asZPC!xSUA)di3W_7@rSG9qbpNG#=b~Tt=I1l bhAu_o?ogNea&&UQa5#Ntv}E{Z4XFonhS@)%Q7b1w=|U zJ8IFbB*l<{2|&I#tXbqnKYiQPlAJlzGkr z-2S7^=f9d_p;{kJoV}(+fb#+_$$4ds6m#7=sF&a?()t8jL*Xu-Qe$0!u`g8t@7mJC z%t{eYKEsr5RW}G9Fpw0ztk;L^2=czj4`r6W%vkX!^Z{lLjn^2glj7}7rL>shwHRVo z;tf)EbW+x+bh5DZ8y+!bizUH~u$E$s8kbBhhE)iSmuXsAAE-#a(VR^wv93&;O&*{A z72;7>>vU@`MXlrU`S^5ufIP|K_tpe5yz{c*P=W43+Gtc}AQlxmPhoU1JA>oxzb@Mq zIXE>7TPRaXaXeQcp71eI!@nR(MLHrdyk|DRb&X-Lj(NFT% SP|$50tye$RtKaL@_vishVVq$A literal 0 HcmV?d00001 diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/mrh/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/mrh/LC_MESSAGES/blur-my-shell@aunetx.mo new file mode 100644 index 0000000000000000000000000000000000000000..cfd9fc90192b5d17d6efdc1f38953aee1aa8f788 GIT binary patch literal 400 zcma)%!Ait15QbOq6mOnAMDV7gt_NAN6kOdd7OY)L71vv~9lMb2Z2l4fM7N-jC z)gL~RN&d1*~F zvj^z|6iyniWw1{0Sr=?0gDR!gJ+INAqxOo7rtV~oP@rrCH`d_anc$7vurx{IUD)yY zCA+gGprQBsmI4IahKp89Wv0B`Nary`PsIWzJKvDw4IRX$w3RZo;FGlqY)K!N8Wz?y Xo<_GnrH`(r{C67}ejM@fl#RXtt*dOf literal 0 HcmV?d00001 diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/my/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/my/LC_MESSAGES/blur-my-shell@aunetx.mo new file mode 100644 index 0000000000000000000000000000000000000000..9123894a445768bc7dfc2b013abf50a570886e17 GIT binary patch literal 394 zcma)%!A`?442FlqDcm@7$blOew%e3x5`%SO5~b5r5aX7$rVC1wDsj>JAiN&Wf(sJ6 z@=KrM*uP`v>-6|@z&c{im~-ZYxnz31FheeG`0PFZ)++dSEC`k*JY$H)J0-Wa4N!Lw zcWCX6ZXMEItg-QdAdQtN;kK}U$LAz)*`Jm*iC0}bYg|@bn6*>&uUb4|ut*#Jq)U}e%JN(NjS$85`rpaN~(bZ7g zc}M8@`L5ylgnPPftTt{Ui=7S;Y5J5eV0`fPYrJ8A#1+0Yu2OQmH6&L2Z*5`WLmhc? R^K*^U(M0}+)8Rx6z5x_1YeN74 literal 0 HcmV?d00001 diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/nb_NO/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/nb_NO/LC_MESSAGES/blur-my-shell@aunetx.mo index 2436b7ce593041297a2637a4a86fcd0d7a865502..50cdf68a41f5914b655dbf65fbba7b3f81bede27 100644 GIT binary patch delta 743 zcmXBSze^io7{KvIZQ7c|w$b{dQOh}0(2(?kHEIaasvwc3i$ZAxAwqPqxsXI8gWO+G zRD=!=8qh%;M95+X2Oa99IOq__CP)XDb`mOWzYjT%`#d~%?>*1^+!do+(Zk(ZyHX=^ z>=Ee}kUa1B>ccWShYbYc(ca}%iR;;0SGqKPSV<2Tfa?4VBi z2pNK$;sDxZf(`-?7u{I^^~FON$6?e)zTymSV;KKn0z-5&it9LrSE&C$+w1E3Zq$4p z{dk00=eDX-ei7(T_fYC_T)Rj6{pLHr88U(c;l7a1Ik!ziii0V zEF|zCQDT?qu&_79lOl9V0=o#_gz(_SPD0`LVTWZt&pflgd7j@h^C|f`S=hSfo%lp{ zZ;3n*k&Up(J>0_@JjEgWi@lhv6S<8m*o+@BfCc0yJDfszh(SETdOX7p)QbVIuniaM z#gi(6O%h}H9sO9*P--BAS|Ea&e~9I1pf+M*C8n_gUm~^S4Mx$$B(7mM{=z31Y!tbH z&l)|E7X;%Zw7@rP!UAUT2kIm`NUmZEwV^|-#beZ+p5t}A#4_~J9ZSWJy7Rk8DH+B% z{=^Zz?=eR$@EUL8G-@Nu$XgM;{~kY}?)3g09)>a0{|%w88%Awl0!_?fHLjyh@zB=A=6_Q6Joc&+#d0Bda)$Uoe6Ha16WYrVrP!AAh5M1I;a^^^Z{V z@6f<))H;7k2IPW3Kf3?LR{v4;V3%Q9h82%moe9&5nH+(%onJ6UUE9ge+6(h;BAQ-y rmZH76ygf7NzICQEj+>jwXPi`a&d$xYPtDI2Q?(5~U%dD#d=R_>RbX6d diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/nl/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/nl/LC_MESSAGES/blur-my-shell@aunetx.mo index fdca0515aec9120491c7a7d3b75f41c971a11ca7..a1a351782bcd061077beb342e4ad60f6db7c8ee8 100644 GIT binary patch delta 3307 zcmYM#drVe!9LMqBGf@;DR6tM!_~uX*kpAnlc4B@H~V(`f$;#e8fv$ zh{TRmmX-R4>2fxsM%vBRw7J%8EwhW|nyu_Qots&iy+58qo$br(_xnBP{4U?$?;Q4T z@pW$XMZZam=`dXTiF6{nr!n7RUL1e84#gXjfQLO_#}?`zU=z;kXUuJQ3WwlD)T1}i zk8%Co`XDT&o{7a+izAJRnj;jtX!s1Pux)@b`FI6OFpJTbVl8IjdpHGu#yL15(U?Kl zfEKo*20nt^Vvb`jzK;xHt|48U*d$~6FuoZ~K@Vi2ei(ULM^x#X^YOJkVHWfScDp=9Mdq28mJXJ z(DCY{1{=fJCVv79WWJ`pvcbW|p?z4pw1;!7>K0?MYU!zig-D}sosDa{9nN7j~=AbgP7}bA`XS9ie z9@vEHXgli0cGMZzhYRoxRLTahKRIZlUcXk<)_sn5<8>t4W|qYX$7Ps}$8Z&%#ZoNg zq5Jgy@1&p%T*4Ae$uwpVQape<)i;q_O@#Dm z#d|S?mr#dv!5H@~3SkWOji|lfiW;W_qdHV)C}@V?pdWunwf~KLD@+2TYegebd%6&3 z<3ZGOzo5>{4b&NmALnk#K-7I1*qhAR*pqsFzI%UTKKbuQ!)6*LqvQDjYR0hvH}!s0 z$0JbfW4-qA7*D+n``}W~YScihP-mhUNs4Jl9p*Q2J|+~9f1T6^~rqB^g0%!CQ$BKgPOo<)QZ=6?HiCc*6hGL@Gwrpi?|6hC%XMd4^mi8 z!>3q@g_GPpeG-$YA3}BX7HVSWQCsjUCg2tC_Zaq16U#!ad<-h}h1h~+sNX-v4Ez$g zFKYgzppJb^Q}1yCGD(w;TG;~BKuf*f>rokd0C}~|7StIyjKi=CHGwZM2``}fxr+K? z-avNE44I<;lI(vO1?_Pi>M%x8seBCe;BM3ep2Zw|3H2I&hSgXwm2~1BT#j$xNE}MO z@52(ba33zjcW^kS@Re)T`#+7sU3dnYFmZ-4?1tHfbMPc`9*w_<&nnJ9j)mEb%G3!| z1}~#B<12QJ$D!0yF^Cf}1^3~d*o8XK<}V5l;<%Z7k?=)iSIj@2lek+QM?BY~R=DF% zCoZlmwUuHsq4U~EEFyG!le0Q5cR~xLB4RVqeJPEP5lSOjG*1%Bz|(}T=bTUCa--WQ zJwj+o-Paxp%FRmRDI%L#PV69N69b87iA-V~q5ReoX@o?$hluCh zy7tJuI5D@bhxxmam`iLWmJsWm{e1@wdz4c5wZSW_LlSi>v(GqR^i9iYqeiN4T|4>v zIH9jhBC(rjC!TOp{TY2aDD@=vI>r7uzWq*{e|*9|>YE5oiCIfDIG^}4eA}JN{w!al zGdX_ifJD36j#w+|!VR!0wAQX`=-e|jBQ`x~dsVA3SkY)zMC|Un8pF=~?19N^LUnak zu%g+vR)+a;jUB29HaZ8h&&N*~lV3O{FwqJG?#M52+H(eFXU+^(MCj$7imG7P8tK+X zWm;2Ls-g1MkDYJl^z+380%HT69}Z7X$||+(YO6UMj@)lIMXZX7`tJEug;oR`?MP*) zw)4{D9=+!;w(G2LwN)Ro8}qEH|E66PvaSDb)eqrFs3ufz*Lk;C>q52lR?x1jwCk;v QHtVmk*Qjsjr{b=E0b4Gjxc~qF delta 3090 zcmXxmc~Dhl7{~GFDu`SzD7Y`^MFj~&t{|?U2r1=)8zZGwVy2Rq1WIb^)m%`+^+vAc zXrtCN`VTtU^oL72Q`*>=nwk@i(wZ^rN=t{H=H@k&CFMqh!N1Mgs2G>2fiuw^;gy}J6-S8lG#S18Ek=L`SM+>K%QmFp?gO3tA=yoM3@GpfTo zZul*rM++fmS6?$M4g!^Ry7_Aun2c_A^+OT`!s0gk5M!8@hU`N z0&1W%)WDgjl@CP?JkkAq8Y=ZAxCs|wOKi?QFjw=T`bk19s1K_Dfk6s=DCDCaC`TQZ zC8zA^dyeluKiQTGQ6DX60&)Q!`S zB-lKhjMb=A-NZx;us?e3rl7X$0FK79NS3XYpR8aC_QGXYj{C6y<9O(0oQfqQ zDJJXvzd}K&ev0Zif@NwYZSbIncOR9~D@l%baWC~o)LT*8+vzZs&lyctj5PFH(+6k^TD}}({&@$)hV8Z++x>IEA^1SQY=Ir$`jc1 z)?gU*2GpM4$4vYOb-4ScITOssppS+k3i_c0`4m_cGKOtJ?d6v^5~KP$4^Bj#m6_NA zD^Odp1a;pUY)R(MV>tE8>CXK(FoycCI2aq#$-fF20cXZ#sMNoW>bS;j54r6-F`D)| zjKtHf7f=ITMV*D4$YSkJ)FJNC&sj(n>M(zUT6la0`G18%N`~`(ug5s*ThWi7pawdN zNAV)I#O35u6J3YPa6f9o-TFIQk%(KU4@Gv-E+FUI9$^%A%yPD>SCB$08gfuG9*0W( zQq*gB2sME-uHT_1@FQx)x7_wS$Qx?E;Sh}B^Ou7!;%cl$^&d6RYz7X(nHbzfp*4jk z*bbuyIUV&xO)L*}m?mK?7Q4Tfq9(Q;wesz#)bGMoSm*wp#r}4uJ{)!5Yp8x_BWEUP zRTP+qJn z9l}!>uJ`|Y3VQG=YT$ZI#0RL?ul-QxU%5);8)QG>419{o_-eNEMXN?X_1jp4&B%We z7UTQ40$)HcU%5p%83*e9|CYiS^bF@sz;XCIu0*!e&Y?2&7?rw=Tqh%Wu7#)-PQ|&n z7~A7*%*RGlCbCDEy^G~Y^6Wl#Qz0qO>2QW?8ER#V^Fk@!!cH40YQj1{mBbW6JF+me z&6}FFl2R_Qns|08eVYiSk1W}TgqFUG(6u-8(3={prnHurq$c;;iJU~6PwXK0CO0K} z1CAux5_^aqL^`p8c$4TtY$vLS#l*8~4TY_4h2z$={*Rox_Qtu`=%#BKe^(J>iFL#@ zVtMFvREGrZ-?J;|7M7sWyOh`+`a7yiVhts7+H`H^?>0jJYtXR^5nG7b&|qKp$PXxm z6Ba7*jq&UY9r0zxeoXZ}g41B{5EY?^zV4p&q1fo29;?fWu5Mj-DZXn&s65dZnvi%h zyMJ0>a9SY4AIKOI7@Qj5@{TR3T$ol=QSw%0S;@i$6+`?J=9ZR~mir49EL`BvE^n&z dokOLrI4Q>C8B|x=yK9@e&xSN>8TvQx`2Qa&UIzdG diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/nn/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/nn/LC_MESSAGES/blur-my-shell@aunetx.mo index c872ad07bbf4b4f0094def207c10225fdf320fc3..28f7c42589108ae3fad3001eb677d52e4b440773 100644 GIT binary patch delta 88 zcmZ3$xsY>0i0L*)28Lrm%+A2TP|M7~AOfUYfwUx$o&}^^fbkq>Sr{1NfV9)b g&Pj~Crn&|ux&~$nhUQkrW}7vb{1`WvGHWve0C=Yk#Q*>R delta 88 zcmZ3;xqx#*i0M{F28Lrm%+A2TP{Yi?AOfUYfV3o#o(ZH|fb?b{%>kq>SQr@MfVAVr g&Pj~C#<~WUx<*C{Mg~>}Mw>O5{1`WvGixyd0CuYmvj6}9 diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/pl/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/pl/LC_MESSAGES/blur-my-shell@aunetx.mo index 61ad4991eadc26039bb0a5bdaeddc1bf891b03c8..0487afe0fb8d96cf0b06c729e34071b5901c80da 100644 GIT binary patch delta 1228 zcmXZbUr5tY6u|MLm~&2DX*OqOQ`>au%3sb|8pDDpHOM6VQ&2N4C_|H`WG_EN5~4476!UYE z$fjbEei8XoA~J%#TSVNrgn5|Z6>*>!Gtj_v3}X{EU<2O5YW#u^G1n(@7N?P|#aAk_ z7aQ>?#!AJMLV`smbOT$NNHZSB0-Qu@lQ(F`1=m){gwOYn~gJ369wEONJFJt9;(GqLi(0@_bmCjoR)54?{Dk@@mJ;*1^il6J zABV9NwZO-?5uc+LIEy(rhYnoC3i8V`fwrtDD3Xa~Xu}ZdMq$)K_9w<|iE#vV-FeiF zFCxv8Yv{$-sD&+HHvT{@B$*eeol3(j@=G>>KAIvtgmu`8SJ8(Hco6L&t3$2G;iU)j z@jlk#6n5btZ;D$z@hSk5Lmo z!{a!Kc660n^A&iLu^A%Zn&mTUCzdc5(|y)LHyVtCsENb49M8ucMD5Tu)RW#o1Mi_8 zKSK&9*H?bI>FQAWlmxVZp zWvB&C;A(t{THp*i@C&BlJbK74F#^5Al1fgE<(PtXs2hb)3)veVABm4UQP&NiZfqjW zlVNn@8`Q$)Fbfw@3$gJ6wNn{rC%-re^wE^yKCH(BcnkS*WDfUWX29yuVdU`Ai}^T? zH8_cF7(;T&(JGM>ID!T)qFzaUP=qDYfo3DY0|Kr17wX2@)gmi#Cu&E+s4eS6J_tFB zE%*>~@DJ*DZKsM-Y{FxB5%sEOQNRCxs2y?DT94LOOXKsHsEs;pVP|@!*H`WJ2MoWz z##cRT7UdQ;N4opkdyE|?BfXKg_l>Q61Cfr_wswCYP_?b|bZghC=<}jbLP9XQ;A+nO E59<+@g8%>k diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/pt/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/pt/LC_MESSAGES/blur-my-shell@aunetx.mo index 8565f5911e5920b4541dd057b11e417b0768cf26..def333ff40441de99fedba28292ad3d377a245a5 100644 GIT binary patch literal 16592 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 delta 2779 zcmYk;eN0tl9KiACDxjbcuY%$gL|#-bZx;oOR}n=NUkVU>DZIc%t{|6}i|MAjnsYj| zEqzLxE?b(jW=eIdrA=+Usn}e9m|G5=f4Fqb)K!*c%f7#JF3V^8ozHm==RW6oe$Vfm z@%>iI2dlg{A_HDmv<_k-v1z1Ia$zWl11&pPsY#fF6L2Yx#dZwA4OofWa5i4Tc^Jwc zS79v{;)fWEzhEK;jxomZs#H$WxsZ#`U?Ya38yQP&@%Q^NmHt7L2Yrc|7{F{8Q{|#O zxCC$Gb_~RIp-cvQImmrmF&lRqdX+lENdOn_`TY$e=s!XkAS6twQ5cR<7>8E0VJR-a zBJ9U9JdZqEjb=6F7=x0`29(S;VhldSR-UiMuv}Sj4~O-*4HNKhlr5RSY-Hy77>(s9 z6RhVj8C@v%??RdAag>SskY}hg!2UVoGCB5ifLVti0vZRfsZvRkZRNsjA_EtaLR>>NcYc z*pEzFy^1+_7-dCQPzJh%a^J65gO9KltI6*Id>f@`?_x5J8mCkj+Hg6(Igb3x4FBXp z2_{pb_1KK1_&Jv0W0VyY#hELfkJa>>knL6jDEFVmY4|Uu<5bc!6>CveycuPj9Vipi zUQSM1lsbtr5m&sqm-~>#s85kHP?vB84&hSFCtZthC${5NlwvEVGNl%_;|x5ClF@6J zg||^29Lqb+9F^D3iKKKP%1TzEOk^!q;C{@Q2CqeiFQfF!i_u=m-d$%ji{PMkl za^E?Wfxbm~-F`$#^(}vY0u?8JPeI9SfxlmY?3SuW+47grD>K=_i9C1@F2?teI#Z8O zUccyR=1NoXdHOb#V)SAaUPH-D@^rJ>i*Y0UR+RB>VgY8Qn{Q1UzDWO*bn-u!lV~=& z5?7$C_%O=e4PZ46qRcop!+c;Ga!GX~b5w`?o=4fj2Y#O*Wun3|m9n5TndnI4Ob+B< zR@m;pP>&Ua3_6dHtgIzQ5Ryte5ko8@q>*v;f^lYkAtgJ~TqefkrFNV|K2b(UMuwZQ z|57~5h-M;@c#g;;q}ru`+K6C6G9rc9M9d*%&n5k>gtP#HoiJJ*N9xaLvQ^T?67nWJ z-MpprC~V`^lMjnDNtraVW^9j~*Aladh0>w1rN$>&&dcTCZw{2=<2z&Qc_2zH6%)fP zo0ItjA6>6e2uXBWh}DEtxU^>p*-QDZ%U-V}QiMC|w&?st<*|r9Te;NcTr% z>VU{9-5A-Rzm7cWdpYW~MbC*z_jzOHS@h#^`}Kj?&Av%-1(wiiSF^LT*Qu&qYuY@% zgX1eLQH$M)jvkMz)zR!xOS&A*F3(2a!T551IB~kRS^EN9Yt}jRPu7z-DM25f{6}PuqqDcm(c|p&sJgD+W=DrpM_8lu^`xshF8OjmPKMpCe@?dA z=Q}%lT-|-n#5o-fe$(dYOe|{iU(0MBzE$X$AQyF(H`gm5M?_pNAMSqs_u5Pn$_1(AETf&Vc ze|5~En`w~1WFvMP}vj^Y`d zLl64>l93YxEq)R9AQM=J^JvE$Zb0jHkbop=z7@H{@iE2tB@NKY$Kj{VqxT7hwVgp=sT zLq@)G{iqp_pl;|E+HnF4F*8M=nZ3q!IENMZ0d>dUFpYtolp7yoH!h-XcyDcffxDh9&3AAJ;>ZN&)<>=Uz&#VS@;y7xh+E5obicaiB zu8o|-4t$86xQNHGi5ty}Amexd=TMKZkek`f`r;!<<0U+ZOQ>%}v_AjZjG+#EgRN*M z?UUGpahygysvlU2b&dH7HscZ6omh;|uo+F{I>~P|5(HITNvbNhSDZmTg72uM`h(S2 zWDXR5a>we8P{ar|c*2dbx`tqgkFB+DIBj&L`jW$ged(c8%riW6Dlw2w4qXg+;{Rjw Yn#XG?2#1Z+i3_&T!+y6p>%Hp!3;%wS`Tzg` delta 1163 zcmXZbUr1AN6u|K_wOU&0mbFTuJJY4P=~dVK!z>WR5)}>q1e&m7!f+|fskE12^b$Sv zkQjy(G>D)iaSsygVFaNN(u4Jo57A5XDk1sQpYL&wvCsMK-upYh-}#-JjHDtfZ8`C@ zMdar>k$Dk$2Me)?fgQ_H$Bh`oYj^|SViQ`+M807w#?Vh(c9fwvC+pFua{N7#xf^x{9% z1$)_*4cqZB4pqcO`Upn(Ba2F`U^e4qrAPs;p(a|#L%4b~PC$}pw74`H-0uxi=Ky)(FY;;YBjP5`r8kz{k f46cq(&Q6Vo41ah!bSKO(Ib%32mWJe_^Qq%Mw?mPZ diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/ro/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/ro/LC_MESSAGES/blur-my-shell@aunetx.mo index eb69073777089f76dd01715160548b3f0e5a789e..74b52b7aae950a1c0bb07fabbcb044dfebf9ce21 100644 GIT binary patch delta 37 scmdljvs-3E7(0)tu7QcJftiA#xs~zeB=$^3HbX<*l+?1#7df(60mOp}YXATM delta 37 scmdljvs-3E7(0)Nu7Rnpfu(|>iIu_TB=$^3Hd8$l-J;~p7df(60m9J=GXMYp diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/ru/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/ru/LC_MESSAGES/blur-my-shell@aunetx.mo index 84960bb6a59f01d592fbd3b77a77b49c078bdfed..f7ba1de491bdf9355959cf0a4aa880fe3c673dff 100644 GIT binary patch delta 3361 zcmZA3eQ;FO8OQNwYhqy8*qDTbG(c|NcuSB334|9hK@128Vt@<-Or^SnU|=P0AXb)5 zq!2}Ymsp}^!wv(`bT$o@;T@1 zz31gQ=icSBZk`D?8OB9 zecTUGEBOnm!|RxY|3P(_nBldjAak$`9D(ETUYv_Fa3@yaCDej%CvD+b6w)YY0?SYX zt-@>!p$6)}0~n3h#||@NY%9ezI0tqA2~-BpVhjEfbMT%l?`*9?O?V5E9NV5n{x#rX z8glVC>V|iad+jRfh9pjwQlE;N&~Q{H3gYeKPZb~| zparP@Yr+(YDLjh0p$m0b4xtA4S-kxeYGS>pz56vXhP{tU{f&6Lo<$9mjLK{pmSQ0) zLp7-WYvYESDd>haR7dTo3%gKf;6<#)K2*w5*q=fSq8`5v)YknD=iv<`+cw+bgyVOy z08il)_%6=DIoz~d&;MQu%D|^sg&BEfGjSEx;PZGd{tGK`5-$Ozt~qW5mC{aBs=ILk zo=N z@Js5$x%nGRVU!0jFwT2#EJJq3wxcroW7I_7#QltK?@?Hf8<@okd|xt9Icd2g@a-nY(>!BHM>!FszyEp`g?I z3aZ|RIruI*_-|ASGw=4E_ZqCF-jBQzY}6$0shEj6LrYMpUx9~k9e%`u5=fg4`6oP^ z%ILMp=EmKFy6_w1pCy!gr+x{bTf)J3+Ln0sPgLm0+7yoMKX`7GW!Y9DbQKRgs7_!^eY<|h?D$5EJ0-qg`_ z)I>L+_IMZS1+)(<@C0gN*D!#3mh&MQ2l;pjp`ZFRmak0RkMtL|trR%ub{KgQ?J_RI z&rvtr#}Q7$g{Y3dhuVS=YHN0)GItS`(m$cDOXnHX-shqwHXF5orKqjki1~W{-=Ltw z^AYOw-#`tVHqYC`kvM{S8R{@r;}5X|_u@!;TY@L>7~ZzP`>}Zyk5c~>i?QQDEtel7 zT!ZBcdBW6igu+&AS!DJSeucWA`yoy?-o*9TzL@_j;C0lVZh6?-)4!n>u%z1C`+D?K zkDyk%8&BaCRO)vzTlI4hXRe}9wbblYd>J?6!{na_!rsE^m{{WtP>IUWaxBHhnyBBu zFsp-N3!z0e5!$^WM00ebzo;xise*Wh82A)Y*h8!&G{8ZEZL`CKJ}*RL{-W?sN7U6on>haCpmmJ;~Yje-U+G4Ga+Wzkn$L*!pR$^PMLmdqC zNwL>aGadF2Z!pS**lz51`(kYlO?~d!fqC@nyIXTO@3^OFkKASML2l`dMZ1^&=D+st B47&gT delta 3097 zcmX}t32;qU9LMp0f`*r8ixjCPPe?=-#1e@$ODmRGqiHKTlUEW#f=TSft2JoQcy>zZ zs2Wu?sE&51YDejq>V|1cjVf9?)J)YxN58+^r+4yypL6be_bmT&?#ZtGL4Uj#fd1P53wTWl*?JK?6u8kLsuow!mSijwazcEDO}@H8-OV zYm9~19`*bxRBG4Z415P8u~me#xB8$4JQ_)k6-1DKbvTC`ZLk9M!28Ivb`JHx4OHs? zLJjB zY*Yv3f%}!HHQS7|ZM#t^KNYxt7S+K;R7Njj65d5+CW?1d?RE*6hWfp4Cn9{pP`!^xwg5AY)O28rCm8@K`c(&`rc0kwNeJ2^-1NjyY7h0}yT zyTiu-Y|X-J6OTv6Zga5!ccL;?w~Mn`qtK@t$rK`SIC^j@Ds`1ui05%UrgU|V+P6?| z!BN!SIfqL5_qYjv#j8wcem7@R=kqQqqea*h7h^GQNhbd))a~K?a60m5^Z9V&5p08> zp;CGs)lsb!XCPsy2IH^}rX$ah`D$G^D!jVYza<4EzO^)2kMomf$T)B^+9Bn>#agHbQm?#o2WIeO+H&`CfEU zKg7GOOdUtH_YWpuIB998_dlINE;kBM4}5}6@HDF7pRhUJ!bl8eiz}5;sPA)7Yo3o9 z&>~bvYf(#h05z~j*bF@bowpzbU3&jVQqbDHjM`+=kbP!ra1EZp)%t#ra}wUcJ=8O3 zy%*lb9T=PK%M77cb*{JUouKaUu2O5zbnE zghkXljC5w;N3Ho@RK`xAW_lJ6VzV44=mCtilXa;8~C^aFh zLj*=5XN9Ha`r}+fBUVtHP9zXz1mD&il+*l`uK4b+QA;Bh5l^mY3M+{*ggRJHkp7y( z0c@-Po-5v0PH73ju>ZgGGAj8c#0G*bV)=yf!;Y$%_ZEyIIuT0fM4|<;hL}OjBA#4} zDZCM=C|9o%Z#wmuz-{M^S7k1-fMDTlDUnCa^M4xJtj+6`o?KcoU9*WyVh*v{|1h*g zbOj~evzluapOr)i5k~k4?V@%5RCi>(wUp`*=J&b>2W|K7b9ZgLjjEQ5Bf@49rT%;F z$e?BZ#`W6;mDedV=FD{r==AAsQ)H9@@xWqfz)7x8IFsr1doRU(N9Wy2Y!87&e6#7_~*99ua!EprF>Xy9ub#B+EzIP=%5bg{4K@oSio_W@hY>?OC#W z;mV=c{s4}Z`U{YdDy2R2+5<;Ke?^b<@h)wmzM99+y!QKTzqxSgCjmJNTm*996W|vh z%3I)D;4k1~K%NjH0cYUPz?mSvPl3;YE%-9{8Tb$21u%kMofP6c_*XDK@h27n zzXqQM{|%1*@4%me&z)M-bqS0Ra~qKOATE%YI||I_@*&pP3(UotxO3Z(ZG&#~jC0zn zJ4d{~&*MO$RDpbBZ7Az0PT1t0T7AH^r>8oU+K{3`PuP%Cx$b-_HjdoA*l@ZigJJK* zcPhY+3e|b9m6@jzyK^V;pj0it&*{a84?^dT=_QjkfsNN;N_HPr@$o8CvE%F$lqa$Vn2o#Akh>~d>eklVh{x!mXqFGn_`Waqxz<%y1t@@o}1qvihc zb=m(?4hGa;&H97S`;g?G@|%HO?Bu2y+gzI> zqt!hfk{#5cYI(=H#%E;Ox$1{2Yqa(Fd=jJ3U7j|K+et@HB&~bFQ~%caZuJO zuPn8W$K~ORe5RU;JV`t875dvs literal 0 HcmV?d00001 diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/sl/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/sl/LC_MESSAGES/blur-my-shell@aunetx.mo index 0ceab79a22a5d83c9f1c85e8144274bf8efd091a..34b65050ee62faf141f61f0bb675d0ed7a7bd25c 100644 GIT binary patch delta 1017 zcmXZbT}YEr7{Kvo**>zSvn;|{duOKR+}Nxsu4O7_R9X_lJ}hh12+FqD6!B(nXcW;! zjG&vMD5=Ye7D3Q`bQOJpMD)ezuA~buvY`G?+Zg=LIqx~oIp;a&%naWge)zb|d~Xq% zt`V6Mk&#-F2K<8S(6L6ui7i-;5gf#AxEZfuBfiFaxPYhe_F57C;`E3NVGFu(8VN18 zP~$!Gh$+<+p3|@#Kj2cF!z%n;YIhnUmDCMv!XS3z0rcZ_tiTtj<7d%<1>B9_v4Byp zh!wqc#f>%AnZ=caX(;1E7ix!I)CKIs^>_$fIE5PcDz3yEXy7C4!#5bl8q%i@qVDtp z4qy&#_^H(X&7@$b;U{XqUpRu5^~HJ;?@~XHy2EBxvl=^4Gqx9(U;;Hx3Uz`B)P-h| z)0Kp%p7okD?kcVLjUMKI+1rpicY} zbwjhL@qS=CE}&+lwdsExQ?^jB(J+A8F^0OMqo{Y|6n3DAx|64<{obNxe*hzyfx1|HRr{Ol2?XMEh_n=5PVRXhBIq zU5y}!qO#jyLKi{MeRLIlfkb45bXU@a7uo;mIL`Pz?|a_&Iq&EF)T7k1*%IfoMqNr%9k=0{&HOQne(c6UJdFGB9`3;RID^Z04rjKA@JJveavY;ri#L$e@)$MW ztB^QSP4JqE0Di#=T*OKg!>teCI*JY0h%xNJF^u2?T#Ii|`_ExHF5nUTh4a|6Riq5V z_3p%4>K%6^aVko9aS*jZ0(Afb*nk$U$Lpwx?_v-iqJht`4?kcGLoATLzW+Qf?uGk4&g%hZGa;P7;j5^Rfvb%B% zcjHsMf}c>g&PjzuP7&mB1Aawa!X+$4FRe6j1(snI>Q-#RX>39t7EuTG0`V2h~zmQc5< zv`K{XC_x;>HXOz~Xy5{NasI@=(_P90>W4~eX-Ud_E>yRYS!*&+6<0TAXzL@act~#_QV#XqEQNxVI&5mZ1 zpFe5YxyaCzb>5z|a@nc4F?2CIVHy2aCT(=)G|mvFZTo_~|4hb8PqvO{GsT+PPLF4A Jak#Fp@*ig=eW3sV diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/sv/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/sv/LC_MESSAGES/blur-my-shell@aunetx.mo index 18fdfb2298acde03b0573b525291c1eacf02094c..a2db609a7533afc4bbb81822af7569b7fef6f28a 100644 GIT binary patch delta 3264 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 diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/ta/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/ta/LC_MESSAGES/blur-my-shell@aunetx.mo index 52334a74516f32081f28cb56b649a0e708b16a5e..8fc6e3d70216ac69dbcb7c95a5e093d82f2fb374 100644 GIT binary patch delta 3386 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 E|HGtnEdT%j diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/tr/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/tr/LC_MESSAGES/blur-my-shell@aunetx.mo index 3e9d533490b23e8d785f57ad7a9a709a2ed45276..04fce82a818e5075cb628155ff5ad4ba04342417 100644 GIT binary patch delta 3299 zcmYk-c~Dhl7{~D!7ZAKCi-?5ENx(utLDAGu!3auCGaDIG%o`rz;uY+2!M!V(sToO~ zthB`}%bd)HuxYbDDq1F|(x%cT&8BIYY+7u}Wu~<6k8_;q%shPF_uO;d<$2%pa?i%7 z&6}bk-z4?gZn$<6gNdx(#+<^uIR0=wA8$+|?(=*TTd04GO*pHcF+=e^yaK;Ry?P0K z7}wver(y;5VOWZFc(pMRv!BAN-1q_)V_SkT1^6eHVXz&gyt5Aa(21*hXxNyemN zBU-o>)$xAh5%W6c;$frnlPf741q4RxZ0Z(uL{+Vfk~OnyK$ zcn)LmUsQv=2fFtYkTIBnI0Q%F6ube8aWj_Sd#DLVleWlI3ds~SfVrrSsxTcJP#tZ> z?dW**oI%FWw<*LWSb=)~04js8U^Bjt88|7;-CI?t0k1}qV>YIde|5N%8&~3f)C->= z@0#CGFT}93l=>vpfCi&7k>%YVfm+)l)J)589JXKxUqkJgTxK;3Yw%WlHJ$uxEq!c# zjXWJSvOMgIrKpZ>LUlX`HS_tX0p02Sz6O>07Hq@q*atIN2j*b%Q0#&vBBsTOWEP=PzXjEigPPGUd^U}iy&m+=*<*aDCCtET`ZswLl-hQ@4u8N`FlU4@%kUHy;Z2P425dz=e;ApZ zu}GhGcNyBa9!Zw@5p{6IG73#(JnE||L+yzwj3{N>C?w)OR4U&@?eh0A15cn{_y=d= zNLtlWtwZhlE{wbZ;92YWIa?S3Ej!yN3MA?m#{?2Xe=?aoG$Xjb8D+=JQ^XA8;yGz#NJyKB;d zOQ_$E>gaD&$}XZBN*&{#15@y6>J?u7G^&F?F^of4uNZs~lW-@#fG;B3!OR=$X0$az z!N-k*sFc5rdf^yq=BJVEU6fy;5s zHSWYCdni-f7|mUYM>WT9YjxXXPAh|)YH6rK59T?QD03l?!Zb+ zz%$5~ZhB1YUZRM}qM(_NKs8)~EVG%8+Ei;%8MznLz!Tp61E>KWLhXU$XyH$&%=F=t z(14Rr^$Z+||fN9j9#~bk-w9v;Xx1Rn@K7|TAfc1D5wV7M2-*#h8kFupAHJWHr!}*7d+OSc$ukL(ZH-H86xzNt><= zm8qLi1FX8viHn<=wv}Qtkw=7yxr82Xa_)@F9os^wgt(iye5vvKi3J2%G>;HE*>)1T zo^+1J^4f|y!+b5-v@~pLfiWxqMdlyN%LjIZl~0nc-$%VO^@2`wE4y)K1F>4!R|0CiALwB zFC%J;bHbb+DlkmIqea!N$%VLo#9p*VmOo@)ek$DH z%+4B+vLX-+TDAUW+gjGZk1OmzO>NkDF6(6c*!+TV`J)T1!U+=#ik$ZB)Rd;6zqY#8 z4mI5oSY{Q6?g-Qesso*GWhX>M7mmqaY&Ulv8NM(%eV%`5S4TblE^V}fK|2(%!gi=S zP;1%Y&isiV#@se56sQZ-`-9#iwzbNAqao=3|7-QuVt=jQdUtQbQp?}9tE(dv?COy9 fYQ7=Zw46W7{Hy%c-M@}Br9o%t)GQ}`>eBxJuVbiu delta 3097 zcmXxl3rv+|9LMoL3L=Mt2woA9qXHU;f_Ozy1Or9FOy>{4>OCv2EV&-HTA<-g9F-`^}zku4bPyOUPmYX}%$+^%UOc#xb0Y3)`Ee;6=>A){I_+dDt5d;0QdA6EHZ^tP4&?7nY$0UXMIt zJ1_|kAw$?Dq-(p0A&hT-QBZ?c9eh88V*+&-YNol^9~&?PKR^~^pI{rjfLifo)P%ps zo0!7270n6+@qig3?YviCv z#XhL^8&Rok!bSKN#$rsA?`&nDCOi{Kj?IZ8{~B;9H+tfFRD&Z(Tl*Z<;3g{dcTp31 zfXYN5Cr&mdX0a2Hv@M2y4bSb=X~E=JO52F^ql?y>hMQ%4jQQmCg7zjlwb9g$r>~qS+ukh2!u(szCOfhs{e>2&29}K|0;Cid#H{wkj2lK;6BY@lzTd8m|CpgL;6V0;(%;fMZu zQJQan*;vi}O{nJr*|$h^;vtMhw%g7lW7>VxzzKtW8Bg<2P=oQPl@}q$!0M4#*N&oA z`Xz?oRn&@a_`QWn{e9H)k8mu;@cGNa60E@esFimf>N|vPETrx^OCf?nPmZwO`!v53 zQ8O(=4X_xs!dlcBSm&?rMNQ}c>a96~JMbK~$63RD--&9}7H!2&xEtx$V@D~lO?DD> zsD4FdOK@O0mO7i#bOqYE=o87W3hwA5d(!H(2Ds7!1@y){=*&pkwa=p4L4L3;nY zwG`+SH9!LLv9rNgh*NL|zJuBt$4Fm&5US&iI027h6#j?fv1^8Jq9wSBdM)N+AYZw1 z%*RB=w-XdJzzx)%WpY%Du@?1T>^tOqSyZNPf={7RUWD3`S(t!jI1e{t7yJivFmjBq z{S4Ia8<20B{f<4^d;Lt=-TbQ<4E$RP$);zYDu%lW&S$S2kkg~ST)$Dv(% zuA}t$(w6C3LSz$5iJjiRL!;x@QzEA=*GB#}651dgXD_jdXz~ts#)fR66hxTU?VJ#> z*L&ER7O{uwOT;MRMWWJs#~B+??~MrS9bnCa!|K{MUx?`*?5&7*dY_Izl|CprH8nXU z&6S##o|2N3!sW@KN%-gSC+xqE?YQ$!}}O} diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/uk/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/uk/LC_MESSAGES/blur-my-shell@aunetx.mo index 38b4c47a27536d544ec15630ac564cfdf8e4fb25..9957d99883fdf1feea2dc0629db5380be1468f6e 100644 GIT binary patch delta 3415 zcmYk-eNa_(9>?)7n}ot85kX`nx$&SI56UG_G!<+SS~Z_n)_mAVZ-^_a0ivs$SHM;c zS;&*5rJ2*L4>L}SA&P?5?2Ot>o1ObdTiesNJGD()Q)9b3l`~HJ{&2249_Q=p_dECe zp1!}|IsD;R)RB`>p^p-W>^H8XL>iG5ZT2_Ji{(GA6Y*vv@MOe(Y^MGuZo>I@nT^HE z_+$J8)$|ASVeD|Po`RLsGjJxZ!=IRi>=cD_+;|(;V0(gD0e*uOn91lXa2;miRlFa+ zz&SWR(JTcU(2s4Xflnci*m=ywH;^IhTcm4?8EH0*@oh8(HON5yFcHUL8EU3AH~~-M zFnkwToc#mu#OtUPe}|gz9Z6=N;cO(CR+wx?vaAI4Tm@=@3nk-Q3k7x5gMPe#L-75G zAEQ?CDXPP7F$QmZ^9LJv?FNkJ1>iW+Do zj=>G6f!c6CI+6Olqs8ak?T8WzQRwOz0WGeaBfX{K` z9z2C=a1Ci|U!fYraI%#8MAU@RP?^Yz+|NPnZ4qjvh6{rQx zMfG15qL4>nHL5`;>aZL{4RAbi|1@f17f^fm7BYr?fJ*)Mk^6cVHBdY%vm-Hp*{BRv zq57|h7}`WZ4O&qh?Lj@*i8=!>;$j>?r7VH{$;Ke+^=m_I-8(oNzelod<$g{${t~nB zG;YMdU?o=4Xqn#s4hqV^=U9QGGR$V+O02>|Sc?C_GA!aFpww-O*o;bPJ1W%&a4x=r z+S(sb?eAh1_u@QUgIjQ^-v19N_3Q{)jC=`m{I4dtS%4 zs3+6-J^U04@HIx0*O3>;GIBhpMqGqD8Q<1XsKKvsIaV>7Wl?+&@MG%n`CiJt!Vc<_ z_!{lQD|kOHn`rhF?#Bb@XVgMGkIKZCsIxPLgTP#E9{wDgFr<|InSxI5KT-7?$a%6P zdLcPhhzqa^SKtY(!|3}WpI%h^Hssr4M^FQvMSVBkz%CY4UF2=mcg5cCcT6JxdT=x^ z>nhBTxEFO8zd)UZZ&0T`FxgA_4AcZ4MSUlBU^*T|?fH4s;e8$b_z98(i!R|+#z`2& zoh9VIfx^GIp$4m_m_3bKQ3Lv>dLNQh{3-PXn266{0xLR>dajRs(BZv|C(t*|yWfi> z%l?En@xNG(|DNt0`jQaKOW{TkwSp&5r}QvZ;#HiD!%MvtJd6p{+fWlZ6si9aun%P|&jqWT*;Yw)avY%&GiScqx30~g|9RD-WkXXFMd z)x*iN22Mk6Suv*LHq=C(M?LpC=HT0?i7A~r{Uh*aI0bX`{h;9d(g#4@nL#x!HdZ8v9j4_FW^?x#8T&&)nWzy0=w}V+pA$m|RrLrrM;V(+lMkA>8IOS}w~qW=0-VF2rvII*$wQk9G*LW^u9mJ)Hq zCg<_k+~Q_RWyDV6)|E}+_rwZwWk(Xld^?Tm=YuuRZc52GEt`1@!5kn*r&k&tNmy_yC zAEvKnG;zq8>6;UE)M@wKH{wO=t%SC43(??&ed$qqoa?^KsQRAd_+1H!!N-F2{?+R@ zG{DB%Ey48-JqPbjk4ak_j8y%NYpWam)%C$!Pc?3E7G@k}Q zwKZ!Sonu)a#uw)o6y*m>{DH|+3j$7Oc1odp$nAD7gqz(ycfjvD?xpY!_f;wv!(HKB z{%Lj9ziOzhtJzS$vG&)ss|yPXimQA2vR6gL1p*TS`D=nru@-P7maqdFFO7|ILRo$ delta 3087 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 CaVX z<4in(bMOr2;^+7XUdw#{P5Shf6;Gif)|#uu|<%{u_#TNtRS>2NYj6kpa0E}`JS=7T zGT};;i8i22`~=F1w_+4`;3~XNyxquSLZRDe}^2onLIxjE1 z(lV637v+IYl)dZ0<@g-RL`P8qxPx2qca$^H&4$Ys^`K-ZgmT};`4~fXL%oKqRgFvj z`K>z6jWYZgWzTM+tfYX^#O*kUhfxM_azJE7F6_q^Jb~|^1mI&f$-t9H)>RlKpb?bR zzkn~}8)GyiwMG1QVz>=uf-5LLxQ>#MTX-Jtq73+6AqNi6BDzy}Z(;>Lz|H6(OqyyKcj7(_;C)<)&lacuM&l>}T|+;9hmz4U zUM3QF6LLgSg|AXY&VXzuh5S>hQrGmQ1uCf})OzY_Ds!d|o~%p;ZKX=_QYCw9s4J+l zRU|YOhy*1Ikk!kUNRdoQkr$n0Axq|8C3h&z)DCH6iX0FrOVgwdTsduyMyg19mr)-| zcT@YFX{KIe)pUGR`Rhu?*g4fi&89X|<=s&$>o=%n)c+TGL&$9tKdQ&|ep5xbF%q`RL zJdY!$f6Mzw|B=60uW;q-o33hIF#i|rD%haCg)iyLg(Lcvq9yLGaKN%-mg))zLvhs= z2@J#nQOmN8zQN(>@pB6t(>Luh1L63netzLe-Ro|h5smD$0&!!P8MO30cTIkeH7Nab zJgO%g95VI3MK1l>qAmK*61TorGN5(oc5Qk}^rxP4&Zud}c9~Jjj_X-vovz+cIBvf0#^W|Ip4K;PmHT7P@+t^yyQe8)JcA2qw%@!G9(2Pf-twwinc+|4}W@LTX z^qFy^%}(9uHzUEY88G7$-4(MPSxrvutt{6wDaAj)GT(Y zuBjtK#!xbGSeyPry|LD;3f&6L;&g9XhAM)*m*$ zs;!mp>KB_TwAq}0aJg&RKxk^hoM>!mayT#UPbS_<4|-tLSNcL*xu-8VdBzSJfx&QK zz!;f25;5$l2_qCqPM!-GBgw>}@WIsu^JIlVqd%EAV@w^jRcai4WA)<&zECo;*EarJ zL?++gu34Zf+Z%MQZ<>Cly-L5`QK1iYEUh+tmp))k40iE=#1fb~BD0$jGBEkcKiyDr o^7N1{?kv?;)>`_i&#fE$iJ4oX5uS|=v+lV5;n8*a*!snP1I&kT>;M1& diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/zh_CN/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/zh_CN/LC_MESSAGES/blur-my-shell@aunetx.mo index 41b29f70d785c4f95761845d0dbd5169439a37db..7b84952b520e1aa4548c4031906002dcc3c6335e 100644 GIT binary patch delta 3261 zcmX}t2~bs49LMp)B#}>478ekaCySbp`V_WP?xt8kPtKGR9zBn{_r1^Oe58Hc}OE+#SiQe1^ecorw)4>%V`Mj100E76TjsEIp~ zF6I=b;#}cI8qUTn+=|(F2DRbqNtZWIw>uS2E24*l4IH((Oyz#dE*YMfluhVoJ4FZNMLqp%!xLo@1O zX+=$N)V3c(E$n&J*}aF%VLn5p{<3Y?yQqo!qB0we9!x=HXfbO1Vymy3f^Mis4b+J0 z*o=Ax4q*YlfJ#{e=aYh7)a%!TI=T;W4qisGZDzW8!tqW_#$$Llet>zH$4z(W{og@B z8R)@W9F%CxR4l~BcmSv2@0gA0d<2xbYHJ-TrG8YZ_hLRCM;-0IsQde|iW_kruD~_8 zNbmpW6jEtOXIp%c%raE!8&MNEs2#Q8DK>Im*18FU-2qrL|#Fq%P>xq53Gs{d*0 z>(=u)k@?Lx6eeIS%VP|4D?WzRScvY?!4$8@anui?QhyFP6%)_u^|WWi4*9KaQ)YpFthjI99S%H3F>M7+SX&J=z0Qb;xyDkCg4Dv zVy_pVQo0P)Z@q2bZ0oyFN7;(nc?U*aeg7$3-HG)IY5-Se&`8wv7}SI*sHb`|-i&Kd zuiJ6tR`V`uhoO^<;ej{9Q1yINe=n+k8_v`Ff0}}Bba7ShZw{(M17_pHs1<*Q`51Fc z@U8G7pAO?kE${?t;jf}H^d`pO`*=J4h&s|4lY`%pML1O-hz1IJ>N{~7{(*6r!8YXr z)PUuviE2>;Z_099u6eOd6l;hyLPx!b&@)}_+~Z2ksH2okY$C4x_=1}4#8QH}%pO7u z*hlF1kaNzJ>f1_b3$aj5_ScH!*OU``2`zsav5ipf1`r2{M1pr%=X>?V(>5HUmRL(% z`)#JM(^gz~AJG=9kFd?gkhiP9`}w<(&>=JsONjN(;XZ?hKS1f)Z-Xt|i!+FI#D3@F zK5;4fV(9y+-wt9I5k}}x9weHH-A-(HLhlwzp~L|vCwy+mVaFdnA@UIQdP4s>t|2O& zbKwagjm|IONg=Dd2KH@;i1M!Vu68dktEhy#OV@bID!W?a6T*g;cx}~PRZ>*tE?Vuq z)~l+*S&%$nU~OqxnY*N@#_KMx;9{+}w78_oX;1ztEb}H$hTD_w_)~_&C+3uuRxBTr z=*}uBts3LW%uM%q#;0dw7nc{6mN{>wtnD?s=&nj9cSJ|Xgsz`Qob5NDeRt1>#_wOO z|Nf<&7xrxm)bF_P%%QGlGae4j>fZZQpt-$!|1;g&AK_|Xdt2aWQ?SGTJp)f~32Z*u XeV~zUfg?w0?><=H)8Kb*n_TuEhjF7i delta 3103 zcmXxlcWhN<7{~FaWz@D8Iw(SAw2WR#OX0TcU1&;8X$r~|&`=O9qn31lWq3i9QOhWY zG75!Y7=i+SAgECh5rjxI!Kh$}5Hx@xgk=DU82$dZFDHHO=Y8LE&O4rS-qVJvuM}6B>@-t5_0i7Qi2I1U6#yDVUF)a4!zTvp5nX;>}v&7)-|5sDW#c zOKc0K?TtGtytU=vy5V_ZWK;3X1mHKJ&)mVwoU?ZLbb2T5TA3thA-BA7a4N~YvAqRECT-3`_ zg&JUmYp+E;vwEa&+lxy1N!NZBHNXW_MlWF|-a%!iBYRZ+W;wG_*9QwJsH3r{3nwE< zu-P~USD;dL5mPY0^U<~&k9uV9V?LflvTQNQWChc(GcLlpxD)d*o||66Nyx&3_A!MK zG+e2U$HADG8=tgaxfh~ zz*O!3pC~BR|DrmMV3}G;3p^dh-bbbWfj?xUE@lg<$6_hgpfdK@*_zLquJ7d><}5_L zl#{V1uE#EnZ{JebkGJq;+`@E8hCM`mC=$~`DbGiqf^9@~bOdwpCTap%EQ>W*A!-8U z$hXawAeWfu+K)NUVo)o;;2M5M-EbROjD>d#eF4)@^*N}HH#m2q-kpQaBRGiq7q|-_ zx%TZDp$zXvU4IDs;n588uflD2BDH&HpdP3TC!i+y3Tk^5yY@xSWvG|7+F6fUz<$*C z<4erKUr-r{>=8 zo!N70Psdp}1og=FAv@8|U^HGsE$Cj5f>zj+X==b&XIE55!%-cNbM+~x>q}jGm8&mt z=c_S~^9{(N?J8;;C-BDcXT|&s$8D&0CwQ5HQjyXtG+>r97d6mC)C8uXuA7OP=sefH z*16H0Z@>!9?|1D^)n(=584*dFP^N>Hiah5G+vHz;IdQ|{7?^RNIHqPE=`BqMF>X8OfWK5Ss|idn&PtP|^~JtpxuJjJ;@Y5!z^Ni1oxg;!Wb|@eYM`t`da{ ziH1pLkSnPcr-KxWTl%5`XWIC#d9AW`c?>&lclTt%z7@=bg zQAlwG5>f6K+Vm?vk-Ss7ft@PrWbqce? zy_>CwJ$$ZR+X!!Niq9LJaw0b~BP%O8GiyK~Gd;i&RZvu3kukQc=#BC@MHQuG1Cn#g zW=>C@R9sY=JZJ&Gvt|~}nUNI;^a=D0^vf=-te8_;I@=rVuL{p8^uG7+3kw{c-{o}k O!(;pGY~uAERQx}%&RCoP diff --git a/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/zh_TW/LC_MESSAGES/blur-my-shell@aunetx.mo b/gnome/.local/share/gnome-shell/extensions/blur-my-shell@aunetx/locale/zh_TW/LC_MESSAGES/blur-my-shell@aunetx.mo index 3a403726c80f45156f2dd5c3fda3e2f96251e245..20e60f5694c549af8155a34237d66ad8abf324c2 100644 GIT binary patch delta 1327 zcmXZcOGp)Q6vy#nsF3->M`%8Bp;yhWdVN2lvWSGzlA;!d6cLpRNf4wqgBeOxWEnyc z(E}-jKy(pp5~1iptppbZWo@KLToeT5qVJD6Aonxp%*>f{{{I=T4UP>?XC(xSab}ez zX31ujP#T(nUBsL5EcRm_esceyuFotBEpnsSK)wZQbsrYvBo5;{?7_}*vlu=tx4^b> z@P$M>=5H}8#8asJCESPes0LCh!h+?f20AeVyHOAB^ZcYcgX_u9dHfbP5-%b%*h)oU z*2Y2h)-Z7tRXA|3Vj}Tv_df0-evH@ghvzRu!v_tauD^nuvYYOl=YOIG{N-^*P-zxV zA{R5U5LKYYZFYB}CfSSm*o8URhgzvoWRdJ8Y9&@N86#EU3f7|P2AGB;s1*$+{KO27 zl6dZMTXnd!?Kncd8&%+&=f7hw@fxboX*P5d4&w&AhZ<-K)%Xk4W`*v9BKgMb(L`59_94GjX=Z2Tn8?K zOF5(q@UG_{c|472!b|>i#mf%JU7VhIeD2&W>@QmuLbt`2zB1 ztNiG~NTV6sY&%f#In)+h_V^X*^Zkr!sI-Y~!fxbCvj?dB2RDv~?kBEqX8rXYUL?W) z2Ae{4zJTg{$>U{IW52Nj(_6xcdr*z_qh79u*opI~y6JQ&n@}r!996#;b8xVAHYw?R oUP^tmx-MGXP!wxyscjq|E18dPKhZZZekk%}T`V@c7P*o29|vQRNB{r; delta 1324 zcmXZcSx6Oe6vy$SE#QW76ET-4T*`f4u3D5NMAszA$dDqUkdg!;kU+eJVf7Fy7mA1$ zBrt+7FnUP@qlJ1Bd?+aEC5ps{f}ncH`u>;$azAsToy0kK3i~k|-?=|g=cjE8%yo;go_qt==sL{DNgTmfcoZW=W>xs0$fDN5 z!3Pq1aAUFACOnSHU%&{?p&Cdm2?`dX8i-&ByHPjp^ZcYcjS1vuJ${K9#EZxbwpesG)Q!z3JiNO4;6}r!^DiSyHs;QH{u^q*?;fW{%gxr3 z$iNMljVe&#*1OwLlkCPE?7&RyL+#W>WRq+jwG%6tjCmEo4pyS-4q+;epmsDG^Mz@= zMB<6ZJ1T>%ZNpLW-KYYeJpTnx6aPUKI>7_Y!tkr z&OmjXi@KoL^R;d>YT{OG#vY`GUB~_S8uij;@uNr7ff1ZQ)m_36F1vp*f%{upZO}j# z>clOmiOM~{*X{K6ZX96!r03tF8vE$+FI1gXkCW=m!o(re4z{D#4=CpTc8mi}-0KSi zsI45<33$WvcRhZHspKCcL)dfFWWP~`lXwASChGbEx771BsD^i9RGl5>Krc}YHTeSa zXDj^Z#JmPG9<#Ne;xnj6FzWF$)aUyi)lhz;SsQjEUz*)U<=?og*iKv>X8-jastf)% z*c7Vs1ytut9)CtP_5=4}N>ea#52~?#)XQ}TJ8%wFH-#=`9cqV !override.wmId); + this.reloadWindowOverrides(); this._kbd = this.ext.keybindings; this._tree = new Tree(this); this.eventQueue = new Queue(); @@ -98,11 +97,12 @@ export class WindowManager extends GObject.Object { } addFloatOverride(metaWindow, withWmId) { - let overrides = this.windowProps.overrides; + let currentProps = this.ext.configMgr.windowProps; + let overrides = currentProps.overrides; let wmClass = metaWindow.get_wm_class(); let wmId = metaWindow.get_id(); - for (let override in overrides) { + for (let override of overrides) { // if the window is already floating if (override.wmClass === wmClass && override.mode === "float" && !override.wmTitle) return; } @@ -111,12 +111,15 @@ export class WindowManager extends GObject.Object { wmId: withWmId ? wmId : undefined, mode: "float", }); - this.windowProps.overrides = overrides; - this.ext.configMgr.windowProps = this.windowProps; + + // Save the updated overrides back to the ConfigManager + currentProps.overrides = overrides; + this.ext.configMgr.windowProps = currentProps; } removeFloatOverride(metaWindow, withWmId) { - let overrides = this.windowProps.overrides; + let currentProps = this.ext.configMgr.windowProps; + let overrides = currentProps.overrides; let wmClass = metaWindow.get_wm_class(); let wmId = metaWindow.get_id(); overrides = overrides.filter( @@ -129,8 +132,9 @@ export class WindowManager extends GObject.Object { ) ); - this.windowProps.overrides = overrides; - this.ext.configMgr.windowProps = this.windowProps; + // Save the updated overrides back to the ConfigManager + currentProps.overrides = overrides; + this.ext.configMgr.windowProps = currentProps; } toggleFloatingMode(action, metaWindow) { @@ -285,6 +289,11 @@ export class WindowManager extends GObject.Object { settings.connect("changed", (_, settingName) => { switch (settingName) { + case "window-overrides-reload-trigger": + // Reload window overrides when triggered by preferences + // This prevents the main extension from overwriting changes made by preferences + this.reloadWindowOverrides(); + break; case "focus-border-toggle": this.renderTree(settingName); break; @@ -951,9 +960,16 @@ export class WindowManager extends GObject.Object { move(metaWindow, rect) { if (!metaWindow) return; if (metaWindow.grabbed) return; - metaWindow.unmaximize(Meta.MaximizeFlags.HORIZONTAL); - metaWindow.unmaximize(Meta.MaximizeFlags.VERTICAL); - metaWindow.unmaximize(Meta.MaximizeFlags.BOTH); + try { + // GNOME 49+ + metaWindow.set_unmaximize_flags(Meta.MaximizeFlags.BOTH); + metaWindow.unmaximize(); + } catch (e) { + // pre-49 fallback + metaWindow.unmaximize(Meta.MaximizeFlags.HORIZONTAL); + metaWindow.unmaximize(Meta.MaximizeFlags.VERTICAL); + metaWindow.unmaximize(Meta.MaximizeFlags.BOTH); + } let windowActor = metaWindow.get_compositor_private(); if (!windowActor) return; @@ -1235,7 +1251,13 @@ export class WindowManager extends GObject.Object { let tilingModeEnabled = this.ext.settings.get_boolean("tiling-mode-enabled"); let gap = this.calculateGaps(nodeWindow); let maximized = () => { - return metaWindow.get_maximized() === 3 || metaWindow.is_fullscreen() || gap === 0; + try { + // GNOME 49+ + return metaWindow.is_maximized() || metaWindow.is_fullscreen() || gap === 0; + } catch (e) { + // pre-49 fallback + return metaWindow.get_maximized() === 3 || metaWindow.is_fullscreen() || gap === 0; + } }; let monitorCount = global.display.get_n_monitors(); let tiledChildren = this.tree.getTiledChildren(nodeWindow.parentNode.childNodes); @@ -1287,7 +1309,18 @@ export class WindowManager extends GObject.Object { } } - if (gap === 0 || metaWindow.get_maximized() === 1 || metaWindow.get_maximized() === 2) { + if ( + gap === 0 || + (() => { + try { + // GNOME 49+ + return metaWindow.is_maximized(); + } catch (e) { + // pre-49 fallback + return metaWindow.get_maximized() === 1 || metaWindow.get_maximized() === 2; + } + })() + ) { inset = 0; } @@ -1506,9 +1539,16 @@ export class WindowManager extends GObject.Object { { name: "window-create-queue", callback: () => { - metaWindow.unmaximize(Meta.MaximizeFlags.HORIZONTAL); - metaWindow.unmaximize(Meta.MaximizeFlags.VERTICAL); - metaWindow.unmaximize(Meta.MaximizeFlags.BOTH); + try { + // GNOME 49+ + metaWindow.set_unmaximize_flags(Meta.MaximizeFlags.BOTH); + metaWindow.unmaximize(); + } catch (e) { + // pre-49 fallback + metaWindow.unmaximize(Meta.MaximizeFlags.HORIZONTAL); + metaWindow.unmaximize(Meta.MaximizeFlags.VERTICAL); + metaWindow.unmaximize(Meta.MaximizeFlags.BOTH); + } this.renderTree("window-create", true); }, }, @@ -1727,7 +1767,17 @@ export class WindowManager extends GObject.Object { this._handleMoving(focusNodeWindow); } } else { - if (focusMetaWindow.get_maximized() === 0) { + if ( + (() => { + try { + // GNOME 49+ + return !focusMetaWindow.is_maximized(); + } catch (e) { + // pre-49 fallback + return focusMetaWindow.get_maximized() === 0; + } + })() + ) { this.renderTree(from); } } @@ -1765,9 +1815,18 @@ export class WindowManager extends GObject.Object { let monWsNoMaxWindows = activeWsNode.getNodeByType(NODE_TYPES.MONITOR).filter((monitor) => { return ( monitor.getNodeByType(NODE_TYPES.WINDOW).filter((w) => { - return ( - w.nodeValue.get_maximized() === Meta.MaximizeFlags.BOTH || w.nodeValue.is_fullscreen() - ); + return (() => { + try { + // GNOME 49+ + return w.nodeValue.is_maximized() || w.nodeValue.is_fullscreen(); + } catch (e) { + // pre-49 fallback + return ( + w.nodeValue.get_maximized() === Meta.MaximizeFlags.BOTH || + w.nodeValue.is_fullscreen() + ); + } + })(); }).length === 0 ); }); @@ -1814,9 +1873,10 @@ export class WindowManager extends GObject.Object { * This is useful for making sure that Forge calculates the attachNode * properly */ - movePointerWith(nodeWindow) { + movePointerWith(nodeWindow, { force = false } = {}) { if (!nodeWindow || !nodeWindow._data) return; - if (this.ext.settings.get_boolean("move-pointer-focus-enabled")) { + const shouldWarp = force || this.ext.settings.get_boolean("move-pointer-focus-enabled"); + if (shouldWarp) { this.storePointerLastPosition(this.lastFocusedWindow); if (this.canMovePointerInsideNodeWindow(nodeWindow)) { this.warpPointerToNodeWindow(nodeWindow); @@ -2410,7 +2470,17 @@ export class WindowManager extends GObject.Object { } this._grabCleanup(focusNodeWindow); - if (focusMetaWindow.get_maximized() === 0) { + if ( + (() => { + try { + // GNOME 49+ + return !focusMetaWindow.is_maximized(); + } catch (e) { + // pre-49 fallback + return focusMetaWindow.get_maximized() === 0; + } + })() + ) { this.renderTree("grab-op-end"); } @@ -2708,6 +2778,20 @@ export class WindowManager extends GObject.Object { return `mo${display.get_current_monitor()}`; } + /** + * Reload window overrides from the configuration file + * This is called when the preferences page modifies the overrides + */ + reloadWindowOverrides() { + // Get fresh data from the ConfigManager + const freshProps = this.ext.configMgr.windowProps; + if (freshProps) { + this.windowProps = freshProps; + this.windowProps.overrides = this.windowProps.overrides.filter((override) => !override.wmId); + Logger.info(`Reloaded ${this.windowProps.overrides.length} window overrides from file`); + } + } + floatAllWindows() { this.tree.getNodeByType(NODE_TYPES.WINDOW).forEach((w) => { if (w.isFloat()) { diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/appearance.js b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/appearance.js index 786ebaa..5a048cf 100644 --- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/appearance.js +++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/appearance.js @@ -8,7 +8,6 @@ import { gettext as _ } from "resource:///org/gnome/Shell/Extensions/js/extensio // Shared state import { ConfigManager } from "../shared/settings.js"; - import { PrefsThemeManager } from "./prefs-theme-manager.js"; // Prefs UI @@ -42,8 +41,8 @@ export class AppearancePage extends PreferencesPage { constructor({ settings, dir }) { super({ title: _("Appearance"), icon_name: "brush-symbolic" }); this.settings = settings; - this.configMgr = new ConfigManager({ dir }); - this.themeMgr = new PrefsThemeManager(this); + let configMgr = new ConfigManager({ dir }); + this.themeMgr = new PrefsThemeManager({ configMgr: configMgr, settings: settings }); this.add_group({ title: _("Gaps"), description: _("Change the gap size between windows"), diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/floating.js b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/floating.js new file mode 100644 index 0000000..0206c8f --- /dev/null +++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/floating.js @@ -0,0 +1,82 @@ +// Gtk imports +import Gtk from "gi://Gtk"; +import GObject from "gi://GObject"; + +// Gnome imports +import { gettext as _ } from "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js"; + +// Extension imports +import { PreferencesPage, RemoveItemRow, ResetButton } from "./widgets.js"; +import { ConfigManager } from "../shared/settings.js"; + +export class FloatingPage extends PreferencesPage { + static { + GObject.registerClass(this); + } + + constructor({ settings, dir }) { + super({ title: _("Windows"), icon_name: "window-symbolic" }); + + this.settings = settings; + this.configMgr = new ConfigManager({ dir }); + + let overrides = this.configMgr.windowProps.overrides; + this.rows = this.loadItemsFromConfig(overrides); + + this.floatingWindowGroup = this.add_group({ + title: _("Floating Windows"), + description: _("Windows that will not be tiled"), + header_suffix: new ResetButton({ onReset: () => this.onResetHandler() }), + children: this.rows, + }); + } + + loadItemsFromConfig(overrides) { + let children = []; + for (let override of overrides) { + if (override.mode === "float") { + let itemrow = new RemoveItemRow({ + title: override.wmTitle ?? override.wmClass, + subtitle: override.wmClass, + onRemove: (item, parent) => this.onRemoveHandler(item, parent), + }); + children.push(itemrow); + } + } + return children; + } + + onRemoveHandler(item, parent) { + this.floatingWindowGroup.remove(parent); + this.rows = this.rows.filter((row) => row != parent); + const existing = this.configMgr.windowProps.overrides; + const modified = existing.filter((row) => item != row.wmClass); + this.saveOverrides(modified); + } + + saveOverrides(modified) { + if (modified) { + this.configMgr.windowProps = { + overrides: modified, + }; + // Signal the main extension to reload floating overrides + const changed = Math.floor(Date.now() / 1000); + this.settings.set_uint("window-overrides-reload-trigger", changed); + } + } + + onResetHandler() { + const defaultWindowProps = this.configMgr.loadDefaultWindowConfigContents(); + const original = defaultWindowProps.overrides; + this.saveOverrides(original); + + for (const child of this.rows) { + this.floatingWindowGroup.remove(child); + } + + this.rows = this.loadItemsFromConfig(original); + for (const item of this.rows) { + this.floatingWindowGroup.add(item); + } + } +} diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/settings.js b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/settings.js index 6f68f70..e90a640 100644 --- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/settings.js +++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/settings.js @@ -17,6 +17,7 @@ import { PACKAGE_VERSION } from "resource:///org/gnome/Shell/Extensions/js/misc/ import { developers } from "./metadata.js"; function showAboutWindow(parent, { version, description: comments }) { + version = version ?? "development"; const abt = new Adw.AboutWindow({ ...(parent && { transient_for: parent }), // TODO: fetch these from github at build time @@ -136,7 +137,7 @@ export class SettingsPage extends PreferencesPage { title: _("Logger"), children: [ new DropDownRow({ - title: _("Logger Level"), + title: _("Log level"), settings, bind: "log-level", items: Object.entries(Logger.LOG_LEVELS).map(([name, id]) => ({ id, name })), diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/widgets.js b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/widgets.js index 808c540..b4c7301 100644 --- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/widgets.js +++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/widgets.js @@ -22,6 +22,7 @@ export class PreferencesPage extends Adw.PreferencesPage { for (const child of children) group.add(child); if (header_suffix) group.set_header_suffix(header_suffix); this.add(group); + return group; } } @@ -87,7 +88,7 @@ export class SpinButtonRow extends Adw.ActionRow { }) { super({ title, subtitle }); const gspin = Gtk.SpinButton.new_with_range(low, high, step); - gspin.valign = Gtk.Align.CENTER; + gspin.xalign = 1; if (bind && settings) { settings.bind(bind, gspin, "value", Gio.SettingsBindFlags.DEFAULT); } else if (init) { @@ -97,6 +98,7 @@ export class SpinButtonRow extends Adw.ActionRow { }); } this.add_suffix(gspin); + this.set_css_classes(["spin"]); this.activatable_widget = gspin; } } @@ -211,15 +213,32 @@ export class DropDownRow extends Adw.ActionRow { } } +export class ClearButton extends Gtk.Button { + static { + GObject.registerClass(this); + } + constructor({ settings = undefined, bind = undefined, onClear }) { + super({ + icon_name: "edit-clear-symbolic", + tooltip_text: _("Clear shortcut"), + css_classes: ["flat", "circular"], + valign: Gtk.Align.CENTER, + }); + this.connect("clicked", () => { + onClear?.(); + }); + } +} + export class ResetButton extends Gtk.Button { static { GObject.registerClass(this); } - constructor({ settings = undefined, bind = undefined, onReset }) { super({ icon_name: "edit-undo-symbolic", - tooltip_text: _("Reset"), + tooltip_text: _("Reset to default"), + css_classes: ["flat", "circular"], valign: Gtk.Align.CENTER, }); this.connect("clicked", () => { @@ -229,6 +248,23 @@ export class ResetButton extends Gtk.Button { } } +export class RemoveButton extends Gtk.Button { + static { + GObject.registerClass(this); + } + constructor({ item, parent, onRemove }) { + super({ + icon_name: "edit-delete-symbolic", + tooltip_text: _("Remove Item"), + css_classes: ["flat", "circular"], + valign: Gtk.Align.CENTER, + }); + this.connect("clicked", () => { + onRemove?.(item, parent); + }); + } +} + export class EntryRow extends Adw.EntryRow { static { GObject.registerClass(this); @@ -247,6 +283,15 @@ export class EntryRow extends Adw.EntryRow { }); const current = map ? map.from(settings, bind) : settings.get_string(bind); this.set_text(current ?? ""); + this.add_suffix( + new ClearButton({ + settings, + bind, + onClear: () => { + this.set_text(""); + }, + }) + ); this.add_suffix( new ResetButton({ settings, @@ -266,7 +311,7 @@ export class RadioRow extends Adw.ActionRow { static orientation = Gtk.Orientation.HORIZONTAL; - static spacing = 10; + static spacing = 3; static valign = Gtk.Align.CENTER; @@ -281,6 +326,7 @@ export class RadioRow extends Adw.ActionRow { const toggle = new Gtk.ToggleButton({ label, ...(group && { group }) }); group ||= toggle; toggle.active = key === current; + toggle.set_css_classes(["flat"]); toggle.connect("clicked", () => { if (toggle.active) { settings.set_string(bind, labels[toggle.label]); @@ -291,3 +337,20 @@ export class RadioRow extends Adw.ActionRow { this.add_suffix(hbox); } } + +export class RemoveItemRow extends Adw.ActionRow { + static { + GObject.registerClass(this); + } + + constructor({ title, subtitle = "", onRemove = undefined }) { + super({ title, subtitle }); + const rmbutton = new RemoveButton({ + item: subtitle, + parent: this, + onRemove: onRemove, + }); + + this.add_suffix(rmbutton); + } +} diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/shared/settings.js b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/shared/settings.js index e92ae35..f093210 100644 --- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/shared/settings.js +++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/shared/settings.js @@ -51,7 +51,6 @@ export class ConfigManager extends GObject.Object { if (defaultStylesheetFile.query_exists(null)) { return defaultStylesheetFile; } - return null; } @@ -75,7 +74,17 @@ export class ConfigManager extends GObject.Object { if (defaultWindowConfigFile.query_exists(null)) { return defaultWindowConfigFile; } + return null; + } + loadDefaultWindowConfigContents() { + const defaultSettingFile = this.defaultWindowConfigFile; + if (defaultSettingFile) { + const contents = this.loadFileContents(defaultSettingFile); + if (contents) { + return JSON.parse(contents); + } + } return null; } @@ -119,7 +128,8 @@ export class ConfigManager extends GObject.Object { get windowProps() { let windowConfigFile = this.windowConfigFile; let windowProps = null; - if (!windowConfigFile || !production) { + // if (!windowConfigFile || !production) { + if (!windowConfigFile) { windowConfigFile = this.defaultWindowConfigFile; } @@ -134,7 +144,8 @@ export class ConfigManager extends GObject.Object { set windowProps(props) { let windowConfigFile = this.windowConfigFile; - if (!windowConfigFile || !production) { + // if (!windowConfigFile || !production) { + if (!windowConfigFile) { windowConfigFile = this.defaultWindowConfigFile; } diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/es/LC_MESSAGES/forge.mo b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/es/LC_MESSAGES/forge.mo index 0d43612384e00f12fc25b3b28644aee82027137f..bc5c6ec6b4a0dafc9649c2636f0ab3b018c275e3 100644 GIT binary patch delta 735 zcmXZaF=!M)6oBEm-E))6n)7mE&JYs^gC>y(Drg~s5Qt!-kV3JNkz136&92#nxe67$>?s`hi<1+5U_vqtC9KcWI_!q45{2kBYPdtw;CO7aZ%KBT_!U+47>ZlDm z0Rs8z}3BX(Zoh=`lRa^E8g*EH=?#tx>%5|16m^5BDZMWGs^&dO9 BW5NIc delta 639 zcmXxhODM!a9Ki9}|9|bYjqJ>Inz&1(R4!bgF6``*9LwLt7{t-o-lH!*(p9tn+|=e8nK^t4}IDSi%tu5k&$` zP{;z)C^wX;xP*LaouUmlu?df`@@nM+$Rf35NxVk+7Rn6@i6_s|Asr25xq3Oh?D#)P z(2$8)VMov;txiX^$y#4##*PJ2i}Uk3A5H01oijUjm%Xf4%!R#uns)YC=D?Nkjb`~3 dozv00d3VMAV|sZdJ)6@Roi`Epo$-5`{{TyIMos_# diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/fr/LC_MESSAGES/forge.mo b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/fr/LC_MESSAGES/forge.mo index f70456555beed7d1cc68568962d4c980399ac9ef..3b9a7031d4723d5a9244a106a785f384eaca414b 100644 GIT binary patch delta 506 zcmXZZtxH2u7{~Ev#~nA_bT29jY8XZ_%q=Y_Ech>2CstW74=$o*27{M@#ULiLMbNMy zG7t=c!Jud|*bF9v-`~CG;XdbcUhX~Tx%Uo>Z-wZ+njIK1M=p`~rd<0p>c z7f#}LnE%Br<3C)-j7#rtqUKvTkDHjsZCu1ox*l0CEF9n(3&)tl8`Qx=)J6|Dj*r1- zTwwf)T@L@jBI6xyR-s*-z;?@nhorux5#WnM;kw39bZrn>RjbB`KOV!SkhDYUb(NGZW0wIET4uo5ykuT_8*loCQ(izFQ?3$ z5F^<8UlF-#Y4VArI2-7J)KSJ(S{){;}v yE#1C9wl1yQj^EYQPT^1&jvAe2P_6r|YTIuF{kXFhue=WZz;F99tDF5z=jIo}iacTf diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/it/LC_MESSAGES/forge.mo b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/it/LC_MESSAGES/forge.mo index 9b270f29a946d27b88b1004810c05af3de8b8d00..7b6d8b5c55761bc18b291982d58cac032a730be0 100644 GIT binary patch delta 628 zcmYk(IZFdU7>DsOYYxxEc*F}y3Pr^zh+29SMvK@8Vq+69>O$CnE@&eu1Y3*s06}{} z5L9d}B$ZlOX(0-MdIE7`5U>}q8e+*+dfgxiGCQT#2hZXF>HPpbpzX4_+ zJLn%`5-%`_&!`Q(q2|9={lZTAWsIU0JK!*_XwyAoQX|$d$s)gLrlAF+sD-+zw1EUp z;{c{Hi(2p&HNJ?W_==pw{2)1vpPzB8Lya4zQo?c6_!(S42SemH4>WX=M`R6C#3p>f zLHs}^w#cGaX(jYrT2xo7!Yx;BsnVg+d|k6j~oO924&dWUxTm)**LFbX83=^ZoI}s;tyQnBD z4yAIqiY`1w4bRbsm!0t&bke`W8Ejw%zdGYd7Def&(TmIIR;s4fX!se(;|Ok|B&wrq zc!09t5F>bk3A{oNKB3HOAqmx6$4?xh|BXQml60R-#nGaF#v(uas}QT0qjZ#n6DWzM zsN^7NoX0sda2I7>1C!W9Ip7aU9w#4r(2F{TQRdH5$%|!CF1&U51Sh3bp9EnA-9&3 z%I0#Aexi?%!v*azN3=UeOO6z=vyK;gT1)tiQlVg$b;H~-i*{Zccje5AS-sxVGMatw cUho2eZJB*v0 z{q~;8J$H6r{@PzY)84^QDO5lkltFK#s##+~unvQ;4P&t5{2uh^2aY3{qo2SCTseR1 z`aSgVkC5D@Iq?$4IKw8oAO&ih7KV6eVHD~jS*Y_oR8SFCUySS+wfY`$?*EHcN?ev&gxrRh3@mHXr*i%rbMD}u%3z6OA+#RYd6gtf!k%*`@3W=5) zjY1R>(MVJ}z0Y@VyyW{nGxO&Cm^li+!t7(Rd}`PPnnD+-s&#U=95uHCUv(23W>vfC#G4 zI#hfEs!kow!EHDM&pfZ7?p;GY_6AlgGkfqCo}dc8`u#hkcVQ}|`Fh&PYr#S_N}EmBnu%Q3?bu41I9qkQu6>&akHIv-WUK4q Wjx9Nt*jhVI8gble?8)VurP)97|1@*} diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/pt_BR/LC_MESSAGES/forge.mo b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/pt_BR/LC_MESSAGES/forge.mo index 9a0bb049009f6aec51dd04a2ef25db7709c19fd2..7745013c31191ef9cf657f9055adee02c3803200 100644 GIT binary patch literal 2615 zcmZvc&yN&E6vqoek@W|H3M&361*0+BIJ*H{21J+r!4DZ&cSgOCn40d|nOeH*wN=#& zyNQ2*oV;)_CMLuK3C4pMBjKPiW1{h3;=ypzcvf#-J@|dyJ-aAYy86>q{i@!3-}>?E z_Dz=r${y6mQ4enrVn2BH4!lqr8-=(NoB;8Nm+*QHJOqw`G58p0!QJ3{AlrWmZUR3C zp9HUi2f>@*B)APf?+0hW17I6`0K5op1wRCNo=?EL!OuWE;s#zj!LRH7o8T_Ae*^J| zzwvqj+3S$-Ur$5<+}e0crV&Fz}?_?Af^(3fUM77Am_7nixAI)J3zL71!TQXfvnG2a2&h{ z;t^ls#pAvK+28kd`$v%H{~6>se*rmhi`%rle*gtFfFe(?$lXGF6o% zbq}vM?`_tT3!e`$-K8Rk>6Gh0t$0aRb|{w_C0Z_#lS?V7U~Eqgj7@0Z#dMx)<&=%J znCUCq)3Q$k8TwlKzD`q_5}os-U)B%H<#hDh*KM8>-+jzQHeHbl^WS1FjhDI8UfaMU^Hi}(%-(b&yW|q>q;gc)q>Ous z;=6eN~%S>$h8ygfyzav zlv;F3scXneMA=eS^>oGyTgwW!DpU?Fg*B&Q!O=3Jk4_}fo7#C~(Uhg)V~aW`7owK$ znIt+|^nBEzrW{*16D{iVhApF66|nr1jme3qaWI;gk`o7-ll!B_zD8s0l=30!VE_A6 z1#(S!vQSR1%Ecn_Dy+)G%VpcW+QU9b_r{bR!5G^s5O~zlDub_4yD9VV_R+<$)``~K zdYBV?8)Gws6}E7+k|UC!FN7Ddjg37dcF~-TDZxrM3)8+YYQ9{z|3@1Zcl7VuPxpHz@S)D4Jy0i#|f?Gb~$_=mD*eKB|64)RM!X{E{ z{gUV6<6aw()IL|kD~i_!4IAL4o>|PSopOy+j&%)~va%;wDsGC{+8$&B6(&Tw8QlB-3i!(OQu&iEbH(K?21}gRbB^*RY?pE%?q0(q#`_#*O3Y=sN&B45oX4d>^?lHB6f1|navJ)x6^2*Y-TQ$n9>=L9BDp{`G*>7n0Sj_LEs#J0f5Cb;IWDg3X4tdB+#fNa zu(8ofLq#FB($Z;1qJ^=rJ4pzI4bOL3`Lgdk^UdzO^X~5FYJa%*qvGuebrVgXV{`}Y z<`}3x^xQp+5g4TVH{<=+|KpwqXDhcw3|=ZRMn(A-E=d$$6{Vxq!L3-#lR7M(98ZY8*DvbzLlf;BJ z+-@3Kj-%Mha%v-2_U622v2D9UZzfoc+ihcOtLC+d+)r=H-!MBSb@Tp0kcQ2drX`!* z#8~&$pE)SyE4i^o656AW+s#ghXXZFmocGnyxG%-UV6B5!tz~L>yVK&m!cH1?ZD`%| V($dJ&S4k(@3S05O*L^E3T>u)xTs;5) diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/tr/LC_MESSAGES/forge.mo b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/tr/LC_MESSAGES/forge.mo new file mode 100644 index 0000000000000000000000000000000000000000..a6434b5aaae5d5b60310966a54dd96801c945092 GIT binary patch literal 6557 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 bWrtS#DJy6xyS~^H%uqG{CiPst!?Wf;5HsoZ literal 5280 zcmb7He~cYf6`l&!g;Ltm3R~LJ2W{C`>Fir*S5~s!EHMpDOQ2G)TZq_s@7;ZG`sU4y zGxOftZCD_P`arRiYT7>_@>>W$N`l2U(YPw=rnt0dT#bsU(LXj8BLpN>+2Z%zd*|)U zy2kjDZ@;r=?mhR+Ip>~x=eo~Yfo-{wp?~dQ{ZIBRt(yb>2vE=7(n03)jIr7H26zmE ze)r^O_E10aF~e8~{qx}Rd4@6fe%&5d0|M1*OiC>s3W(SQd`cDTX59 zhPLO1or8ELFgUw{Q}Bz|J{$5}0H%#LjdQ^B04!yk4=kL4Mfm>$4Y*~c?Az2+J_q{WfKLKLr>6cyJ>?6bKMkG&Mn~?P#~e|f3w;}cYyx%fp*D`E zEd2*>0@@$?*&EbTo{#YZ;9bC7xBsg`J!Qtn2M+=FzIsyHp-g=f`~dLyZSVh+<0&tL z{u%HKz|bozOVm@QpJU*0Ag(3Ktfdp+-j8Bk=Z+%BQ>LHWz_$R0hTd9DJ!QtN46Xue z4$qTurp!1u!4Cj;^v{4_0+x)wa)Nrw3!xtc{{*<_zM`O>@;vBIfPV!% z{L?cJQ%{-ePJ-v4Xuq?wPsV{V-!}tZ1MFW^aX6kb{qF&91a5ok<*TWu%<%)@&jH6C zyZKS-DbxQU@Ce`scGU`oO~)GcYLQv>iUOmsS8d03OW081+J@~Gy@pw`d^5E7sK*A< zj)%3iMYm`cgd2%Ko1h-Q$jawMQO*y2$BxXr7Zfol@=7HKHs%=F{MtdUPz&QH$~Lx% zv|IJ+!t^~`T2|wPYvmo4)Q$Oh?p(6PvDS*F4uO!;zph90Ra!r*B1NH8zLFlaoy;C!11kx+&#k zQ_2}esDdej8(Wg=27)hbT2-$WchUtki?|lT5CIJ%v*s7ANXULhJzOmzF|irtPZ(K+ ziYS`@ZJjUF>_Wv1MHFFbn3${c04o;)i-Gw7dmZ~S`y2ZmbIpFpzR4cSo{4QFdn!ow zPxeywL6oh*9P&NbzS(ElFWHaTN7*-1Y1aiI<6+ez&s0fGfFXV_7Lj%P)t#tZkk0=@B%Bs2^T+B@B67I2Kq~Z z%QV)2FW2Y*W4jvPJk(!Bdy@A7_QSj3#9m+Q(g}JOW>aagFD~6hI-2Ew~PEFM~&b+vgnn3-y#a{vh}{V83_Xm#L@B@uT1g;C}nGj2mUfZ4x{M{IK^D*@q}I zFYPGOE@0%(f8dcQW!m2c9S_X?@3g&0J!Ot>f*%8Zy!H5v)Kg~sN5Q`YzIMYs2dJma zcus=P0L^P1nJ>zWPdgf92XO4&ElW9`GUL+^-VQt-7IsljS>^@Y0KVOOt6Y~d^Lr5d zB5-u?A7wpLmiGtn1n^w$Jz4*h`Cg~N^RX$rzqm}+EoI*8vf!(Mulz07$8{;Qo(I4Y z!21vNl<9vHd;s`sPyTx9DKid7z^?OO}FXKa*@o9p2|JQ9+b>_e>l_N~XuXlUR7eSwc zrj@l?cNBe~%5m(Tfv`f=j(a~H1x{b@_Od+~f#l?2oO+4L^2&jmj;rh^NA5-rII_TI zEpImFEIm5D+sOH9y=$GQZy1MaVj1ltd%irUl!vi@(lHxb@jqwey(sdk$w`cZelIz% zrspNx)c3lUYv~9?`n^;yX5U3Q%U&FxO0SEckO5!C`0og)!GHC_zL%1OnmJZqepnO5z@@R=;D;d^JHGU z^g1dTro08{QY@tFSh_5$IAzDtcK)yXXW}l9!(BABp=!QfzoOU2{okxwVFh>9S}635 z1)(=?@LU8McNf-{x}xD;9N7iS;p2Ee)@Qtji&RAo&y31;P&AYKcY1$B>HQ(!z2-}+ zGwQpNj$=sc@GEIu$BX-}l(s9k_q5$qC#dLskgPD(2~zRjonAlwB1&$_)Og>ig*XKg zwWw>wK{Za-n2g^n{mDz$S!=mgaWd}7{a>|REVwwipp4OU2Dq?{Y$8r#mN>OCmF^dg zjuSqm2E+J1-s&y#J=8vI%u)yHGf}SI@|$@oq}NxiK6X^sXF0alx>2jWFDtb5QOS6u z^4dt}RhEFVoE}$Bk4t7L-q2~k;{!zX>FGUD_5yp4=SF&0&>z_W_Qd|HZ)v@N?&!1S zGudx!T?eVp6CHJJe<*EVcNqPJAsbEXe=0r&{oe8g^had+#7M^}Oy%G6g{#-!CIZ_l q&gi@8?WyBFz3+=U@6*vsFD*UR_DkvaQ<2~f)z5e9=W-6untubTLfjz$ diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/schemas/org.gnome.shell.extensions.forge.gschema.xml b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/schemas/org.gnome.shell.extensions.forge.gschema.xml index 3a7fb9c..c019edc 100644 --- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/schemas/org.gnome.shell.extensions.forge.gschema.xml +++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/schemas/org.gnome.shell.extensions.forge.gschema.xml @@ -37,7 +37,7 @@ 15

- The size of the gap between windows in the workarea + The window resize increment/decrement in pixels @@ -148,6 +148,11 @@ Whether to show the tab decoration or not + + 0 + Timestamp to trigger window overrides reload + + diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/config.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/config.js index ace7500..0f26fcb 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/config.js +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/config.js @@ -3,7 +3,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later export default { - PACKAGE_VERSION: 62, + PACKAGE_VERSION: 71, PACKAGE_URL: 'https://github.com/GSConnect/gnome-shell-extension-gsconnect', PACKAGE_BUGREPORT: 'https://github.com/GSConnect/gnome-shell-extension-gsconnect/issues/new', PACKAGE_DATADIR: '/usr/local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io', diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/ar/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/ar/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index 9f8f9b595611eb9078557b1bf45054d928385100..9a4b9b59ee13ee2a805ba04c4c566df1c17d2cf0 100644 GIT binary patch delta 25 hcmcb+fbs4E#tpl)xGZ%IjTH^O`2@L=M delta 25 hcmZ3zm~r)D#tl!@xeRp;j1`QGtPD&yzf<3<2>^ME2=)K~ diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/bg/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/bg/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index c05fed931b0ed131ae6b3c7033071a68838d612b..6321ee5f524f1dcead2e8a7408dc5a69b53fe3be 100644 GIT binary patch delta 7403 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 ZG_&tt_T+nR;*UiinU@zkJZDV1{{`0KhKm3I delta 5740 zcmZwLcU)H29mnzWFhmehao{3?3x(hST&O`D5nOQ*P1HEhs)?(KkvMORt5NI146Wj< zabPq)ZfW9dtpnQ_XWgSNZ0btY7|rL)J+%JO`|9_3pL3t*-h0mP+i3yp^Ys{05fcg<(}Q-q;@WG>_R_|b!yQ-(k7Iefi51YdjJv-Q2GdW#5KP9h*byUf zFzWaj7=uf(q%n>;LL-zNm#{WIz+zY>%$PzLk5w@dHKyLkwao}Df>V(bnR&?A%_^*n z8|?SrqXu>X1Mm*E#|Ie0^-VIv8@r0jx$1U_0sp-(eIUN6qAC)J%(0o>#CE zsxq%(AijnAKHd7hbs}oQb1<0en-w%P@{Onw?!cnB2X&%j_WLuanP0I!#sTz0xT=mD ziMrr8)Qo4KD)gmwrFA1}f;s4D=0|8~L|0KK`U!R5bJW0sSZJNFBCioUk){+DAbATqDtBjb$kly0v%8T>W!MfAk=X~QNMRGXy}V+r~_uAF1XnC*P(ux zgDUM2)Id+8es>Rb&%8k0oB=%SB`_RyTy5J=LjAszwKp;$#|)*R0gOS7%t0OaDXO#! zP$yiCn%Pd&?{}k?=z!gS7B#?2_WL~4%5oQ#9FKZ> zCRL;UYRqDX4qSjL*?QCkw%H#ZL=EUTa&2=R^_~c-ZcG!bj?tKo+CK|b;Gr3Uz!I>W|Pq)WDx$Ej|Cib=(s)MwKW9L$DVf#348t z>(zBnv=ax=zlc2Yrd6D~)`L*}4=@csM~Y(dP!kG^H>M9Z#Riy##r6E3q(ODe4b%ap z68L8nCh?(Cjzql|=A#CdjiI;;`2%Qj?fyGhoc>d6h((z08`u&XvPAPy=Qz20?n zRGLtRBO9P@ww|^>37NcEja1c~L8@j7bM{i$5F@ZXYCywKOF0plv{``@@Fc1-X^q@_ z?IYAgXE&n$EotmzhfeSUXJTj~qs1kt3n#GPnn^k~MK5;8d#E>C8*Us8bTD!)vk;k_ zIgWbq1aXim7lN8#IEG`(rqo|0?#B+QZ$805+=^ki8_(itEQ{XPm;t3cf?eoeP2$GH z2F=`=kHH}Ni%=K*3X9@a)YGvaRiT@x{XtH$JMyxqnpEj>rgYhfLeku zu38LRqd#`TaO{Pu#8^~`vr&~jg&NRpjKn8)zf+-wyEe5@Kj?%yaUawGMp&1iUL3io z%A7#mY)6mR=Te&w=9O}efP$TV+ zTB50T|0>j)Z?m36Rp^oJ*LdAsg4U>+cSb#31ML2Js6XqAv9O;1?KD*KJ*W!gVho-~ zjXbcmhRNVi16qoDqwU3Nc*j~I#r=H))C4-9e%~A0;Y8F^lZ(2}RjjHL->0FHhNZeA zu8lfzbF7GiusTjb9hi+AVs>E-^lQU2kFn^7HQKs2b1eGO?~AI$0IZ20VGJ%uML%)nx{!lf>(!{=?MIzZ|2;JaqLKT`>_Q$8^Bi?gH0|J4W(ev! zldvkT=|Ew1v*fZP3U8tYRGf!h1Bk>3OhDZOX{dpGh+3K~)Nxy|GM>jc)L*i05RXYX z0|(+^?5zEr_{)h?J5hgK=ny-!1m{tueT2>MHGW+j9n|AB2dTRG8u_1j%tsuynMI>Bjb*4GK18i~*|*#`UJKOY))O^= zvA7bmF$6okZQmC-i2eu+!ZTP7uVDZ_N9K`V)vr*4%;x&QzsdO~5WVDkvX*G;L5iut z_je_m$~l!}l2s&^6l_Om>?Pbr`CEBDU)Xj5ztBjxo$9*2?$lTkNiNtg{H$BCm2Im! z`^YnrL)H*~a-DoZSQ+z(JSEyx-b;juo4TZ6+f1Xk?fhQz=U&VI>!y8^^}(k9J7y$4 zB+2BjMBBSA`Jc=9%p+R9+eDA#a#FA@rcsZuqUI0e7|}g5kLYGzK^(1>w$DffvXq=4 z)5!nZSa$O}QuL)SOW5|Am-aQM-GY=Qe1Nc{hwyZng@iY?Swwy${~)|~{<}@5HQ)9oVOQJUh`-SpchP8RcYcH0NgLZ= zXDy5qZ2LTJA^#$J7reZM(78sU$Zj%>WDso;B$_lL+J4f9W>lLrB$bJ_8l+}^>wg~u zXpScb?XHQ|G)%E=@q}CdXfLt-Q#h8)B7Y|TCW)$lPZ~qX&qUjo z?K|WSzyxEa+eZ4KJCHi=0N2U6BZ$*ds2Gxy?s~=G}E-|5wH>lPq zfA6vQaRHtcnR64%WPaN?CG%wCQ17ZH{rtQM$t8Te)mpaq$z1jNGH=(`X9K+L-dN=C V4N05f?^&MNwqLk6qi5qnzXFLjb-e%p diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/ca/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/ca/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index d8c02e0f1648be0a8d04b74a06c4781be9961e19..7f091d6d9e454e400d180cdf521f641fab024fc0 100644 GIT binary patch delta 23 ecmaEx_cm`sjUtz&uA#Alp@o&H<>ofU=b`{_-Uwd+ delta 23 ecmaEx_cm`sjUtz!u7RE<@Y=b`{^@(4%( diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/cs/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/cs/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index 5ed7092e684cc6b98a9a3ed6e3724e9b4881e067..3d1a25d1571904bb0933f919f099d23717762dc0 100644 GIT binary patch delta 25 gcmcc8&v>PualPual`8UO$Q diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/da/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/da/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index ca0461c963b7c8d7f040fcbed90d5a9893ed3ed7..a8f412ea565a09f2a543a5de2222e7fed808369c 100644 GIT binary patch delta 23 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 R4>x$#;(u-M{!>3I`X>RxHfaC= delta 5724 zcmZwLd3;V+9>?+XWD&_|Y!MP=bpS~{+RoEee*u|KKI^p&hMW4B-}4{ zEiQDq&)4x=WY~ON#zbIhbz^dA_o}6%#%!x+Oc-v*5Ilwr@d}2cZ>V!T5^J!ZiouwT z4X`gp<7m|N^RPLtz`Dk`%|RM;49s}??_Qt!|oc>KV!=z6$7MtKK)Bx6?2Cxm)!46EoW2l)tM9s7o zkQO{-^UvCZ&uOJ$Ty-!xE-ItU8ox!wx6Fy&Ah_;07tMN zOs~3b0;+OYU@VS1k2E^nIEK~5nV*x=pO3AC#Zo1@t}3Xx~TJ_Fb7lY z@oDJC{(E+R0qRjLLsf7cw#6^86JA3Npjia&In`P#p7SBr54a!iZ-h;Zq0o3=!DSP}8YJk2R)H4r6O(+6&T|DZ#mZVi5hC zE;KZw-pH4d>4!RT3=YD{_VdH2iX2B@yl9Vqj~e(5)T60HbyzpnsboXc7gRG;KRKxT z_d&Nxn@dBb8jE^{lTgR!V>T{FRiqrXSSwL$rFNY27Q~>Aw?vh=8>)ks?fwY#WxoLZ zaT@CFnHfj@)hOhEE-XfsY#pkDuk4BYPy;%K^ldJqz9)j>jp=~#*bMVg#|u#<{sMKs z&8SCGhI-V8QT<+ur~WG0O%7;=)f1eV#Gp!=fx7THROtuXRqc-KZO#M0I!-8Jl^4nptF`Gqd)n>$=+g{-^=v zVs#vbs?_Tki0`9j{t@cD4XFFOx6;tF+lzhiEc#(f>ZucwQ6taB032tXgsRMRyyh}y zA*zB?IawVoM!ucRTI3_M5A`lKBIeYx3 z-A`=g%(y)!ab7pn04AU+HWxL}PmwQCvke3B6vpcPub`n31#q>#KtfOzh{91AhxBC% zQ3ET(R6LG)TLN18OFMM!GUPQ3JV&!SruxwsA(>7%D`L8$A7VjrA{y8j*w!XsE4&!$j+4d4g+K{e{y zmHpb-2?wGovIw;n)}ktN8Kcmzt@E13p=O+dDtT|@OVGT9`r=uF8t_t7$E#2S+0vH! zhtSx`0T#YFfhz4&)XW0Y_%_4_sMWjxE3p(g#eCMz>G&MhV*ft+WA${W!(dcLp{S0d zttqIAba&Ix``r(p!2;C#IR{mlLac`+$nO_Zh6#89bzT5vQHQ~(4nnXd#$z2!Lp_=t z)OiC@6V62q%srllE_fSNqIsx+6k%OliJ`a!^;R52b#w$(p^K;+-mwN`I>#eWkE%JU zGCffP&b7yfAro|)88mc*V&{Naj~e;6sDYifUPTS?N7Mjaykk1ACN{(v)IhUP9SuO8 zpNrv`Z;!iC=g&qzz5gp|Xw{b36ES|s8TOM z-ES3YK&99Mcca$UEo&t<*8A_5<=n6dYQ$|(H_k$pZXoJLBT+Y=hFaybQ57h~U*Znb zBTDb+{FR)ATK&1Gj`L9W9gUjE40LM|ETy3tm7v~&ZKx7fpayUibzvpy{5rgwT9l1Y zk1hpY!5-KcKS7mvm;L-KYPH|C$Dg3C59>_*RkEbcP6zE#BkhkGz!20L7>-(O6EFg2 zq8`l()Bx9`?z00mkprlbpF<5Oh`(aGVIsD}aj5Tyl5Drr(S8o-hDT5rTtJQR32Me6 zU7WuYB2kq{$5`xZk59xH_6t$xZ$b^E3^kEM_V@|ZBP&Nu^sd`B9;0p?(3L+7F%os7 z!T1VDmM`BP@PXs`p=;51*(U z9&(g?LA2!(J%3&KPsygvW|JaPLJpCt?I4YBNFRGZi}0y!SD|X=+nspz&!YDJeviiU z_5(lbR%F87tqDJOlSibCd`|qyWwM04ME*@Gi8k+Z#=)eG4%qEW%(Ly^X#Ovf7wmyq zR{eL(1ls>1+2qgm_!z5LNp285j%$SPC-VuZ+CHYymb^@slEWmHd_WqJRmA)Lqgh1s z+*gnjWDfa%o1W#biPlQhruCuiw1f92>)HFOT#NNDWEW{gs4hqJSoyiSIY z?c`ljwLPJ+pQu`TJ+%!b{mDm!wdMT_=O+G*^d?o?do+G)cV^-M+un#Hb;sY+=w=UY z!fm9d-Ct|f*Y0%NK8IV#43_bF!KIgJ`?r;Qi_T73d4%qCHrQzaW1k z_le$NZ7oP&Z;S77{EECuB1tDQjD(Uj;&M5^ke;VKm!y!<JM%EK;$z(qH1BoMNh_*kG@5ov0u=R5A{^>rI_V4WeNqn0Wl5fc^lBxQ? zN@FZ}NVI)O{!YFo^T+~HpG+Y?BU$8A;zP8(Mc(kX_-7VgB^Ss6a)b;bRa*p&cI1>j z@Xk;gVI-9_C)zfUy(C0C|Fc!2eVyze^@uMyMt(}P-6apmUr7KNPmJf?&@>;<*#=j9 ziYmerJ%b|lyFBTQ>$^N|* zY?I*$YL)Ki8Iye7w`giwYtO^9IzFBj8NFPdp!TJ%qC*{C^K{JG>E{XRa^J_(p!;qg Kk1OY%?|%SaD^qa* diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/es/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/es/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index 2a70df883e3237f2697383d466d75b1aef12efd7..05bc341400f08ecb657d4b1ed5e4d7aafdae818a 100644 GIT binary patch delta 25 hcmaFT&-kRDal<_=E=yfQV+BJCD^ttOFSP#1004oL34;It delta 25 hcmaFT&-kRDal<_=E<;@-Qw0MHD?`K0FSP#1004mM32^`b diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/et/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/et/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index 2bda121b1f7f1f8b2f8eb094eec9e75e5caeabcd..adf94d736d7c27547026a3bae7145ac78ac23e76 100644 GIT binary patch delta 23 ecmcaxb+>B66Ll_2T|;99LklZY%gyi9^F;x7jtIK| delta 23 ecmcaxb+>B66Ll^_T?1nUBO@yVv(4|+^F;x6s0gJ1 diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/fa/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/fa/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index 88b9784d224d8cf59e71ca77de46c0f13e79dfb9..4365a7c64e1040c0856bd9023806fd3a31fb3768 100644 GIT binary patch delta 6676 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 Z8AcYJT^XG-o@kyzuTE?ocG8mL{s%@{D&znF delta 5700 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 diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/fy/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/fy/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index a67e1a3ea3ce89b3dbc036b8f1eb39c5f8f205c4..ebd3bedbec068fb9425afa73c3148445fd0124b8 100644 GIT binary patch delta 23 ecmdmyvm<9iwi1`6uA#Alp@o&H<>peQ!@>Y$!UwAW delta 23 ecmdmyvm<9iwi1`2u7RY#+y|8a diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/gl/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/gl/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index 33fb285604055a4ad167cef9065473beaaf2921f..0e8255acef011337b45467a9626f5b360f04b52a 100644 GIT binary patch delta 23 ecmdm;zdL_}nlhKAuA#Alp@o&H=qdj|Lb delta 23 ecmdm;zdL_}nlhK6u7R=pl?LJf diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/he/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/he/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index 10497da2381fa37e287f46a8c1c732ddc794607d..a4d5059b053ace3aceb8d2f1063eabf6e56a6642 100644 GIT binary patch delta 25 gcmaDko$=*##tlhYT$Z|q#tMcOR;HGlbF^v|0eD3SD*ylh delta 25 gcmaDko$=*##tlhYT!y*^#tKG8Rt9F9bF^v|0e4>r6#xJL diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/hu/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/hu/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index 00f8dd3b70eb954b36ef7836e6ae0258c9fdf7d9..acf32135f2abac8e34d97974fe3fae06f83ec65c 100644 GIT binary patch delta 7375 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 delta 5742 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 diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/ko/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/ko/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index 89f118b60e28956b3f0d5f189e0f1c690839ad94..8e3204477d2935f9d5d4bbe42977f39416f8d825 100644 GIT binary patch delta 25 gcmdnn%DA_caf62@m!+!C??dI7Ct)BZm^YOuAXT9MiUT8pj*b~=bDgGS4f;-Lq z_wiWjg}p87I4r>v(8d#SEUNuQcnT)5hh=4~+bDGB#=}^J?br=J!j4!#FN3fMHK!`< zg_E%ho`-Z~)gyDaT5$ko%=dSpCiW28xEVX)%Q%bitv4uWMk81zi?A-nf!KnY$PZ8x zxeqna!&r{nP%Ao!T5%p}>5s*z3{~-Q44#Slex5OAOksD%x4uC^GhBsQ!CKS|@5ipV z0oBnH=KJ5EGO*LQ4_)g2K(%w(7Y&#|^?L;>Q_GC2jcYNZ6+TFzA3l!Cz)Pqt`4DGf z2M&fho`dRW0cxTyY5*Vg{MT^?E;sjgVIlQ5O?^LV3y+{O+PNS3A4Q=Xqff$Vs0l5_ zlW{fjthE)Hi}ey}z$2&u3(2=8+#9v$mB?4t94x>9J75}>$u`sizGdnw`;&jNX07Fh zQoIF~x?f^|FJc_0l|`p{1Ma219c%CbJ30erpAZAGPw$$oaKiFy9|Aet;V22r6S8NRR5>Q46(E z{bzkM`Q47nWp5KIe zZMWv`v;R9OXokDZ18<^Mz8`h!KSJ%*r>KFuu}_n+FRG)3s0pT!p91S@)S0>!)qW!? z)sLgvZ$rAWcIZCiTZbrUhM%GKK7VkuqF$(mWvGTHp*pO=4tOf+aMfWUo`w8qT60j( zdw4#!n(v=OWo9Q9;A@ys!?!4C1qV=j^a*OTEfLCA#T#jnL z%6JE={r#vju@yDYGv@oX2TcxN4X6h(tg$q#)T~lvC zP3%hSjMt%3b|Y%Q4X6xkK|QwvHNY;^%HPIw@N?9eIlChIejakmiXr1>tnWqz>-(q_ z-H9Kt!Ypb9cUMINZ9*NQ=aBPhy@UGxxZzR91F$RgYSimD2`lkJRKLrx25&>H{CVud z_|`!RW4O_=I_hu|DkF1|Ian8A2`)pO?lq?V2$oTAM`h%7Q-9agyN-wsac@-S2BG?$ zfs1esj?w$Sfr4gq0CfmEF-@g*Dk}90P${j)(b#6{k6<_I&mhOa+J*Y-mp?N49k5Y9 zG-HrI1J+kjnY#*m;(E-KP}oF418qmWR=-Cbx;?19eG|39gQ(wu!>9@O;&1nItVZ?o z1Ztu$U{BnKz3_8W?^zpVcnGTfgj(`XU)BO{Xy(gNsd@kx;SM|&N3d)iu1Tng%|=aV z0cwC4PRBMp9-l%@d^f7yUeuX*-`p=^zo$?yQT}I9n9mJOU>$O`vGdjC1azB z49DEeQ5`NoJr|;ltFQn!q9(WrPr!E6L|#T^<^Zall^GX3Xk!oRLovXKxB?$Sbujr< z8sP$*jMF$My8lg7yE{-@mqop9n^0$CD|W}{uoz!OE%Za|f|=q8(Z7ECq8^xzxzwUk z8AGLf3HHUMXyaX|%(SBhe$Ds}YK8Bi&P2h)sNM_J?@&~KBcuBnYZ3+R)jU*+E;4=% z)u0X4(Y2_Ru12l!KGggE5USl4Q{RsLsP9H);0S8sohC&K9E55=3J2-^A4fqey#zHt zEB3}4P#xcen!qEd47FqKEivEkL8W*f>M(wWYTtcww6LM56<4DsG9IsP;2a{hfzue+dpoAN51D3NuRa zZ4}h-9#l#9edKW5FCryo> zuS4~F9x5ZjRPwJqyNVlH(JIsm??p{)6KbZoI#o5CKf#UZC#)^J>eO8E-Z1lHh*xDK__r%@|^12xe5I2b#f z5&eKwpeDQ!m4P&B!pl)xv=%#JCTqTU4AtOS)WEN!26z`Wz{fZukL*m3{!?wrjHttF z@h!f;1(k^_&y2QU1**RXQCroHmADH}#!fSHzo;2&I0Zd80X6VkR0BJ}`GL!M_oIC$_<|GiPw>cRqkP5FDooy1>=%)NYE zL+JWGp;YOWyNtMjc#1fY(3ZSU6wt|G%qK1;blpa13v|^J?-0KvP9c6wyhO|*zCq|x z`rjjXRWlZEQ0~g3;|EMxyhglg>Z9;mL?NNW^CY3YdK^9`^lE7fk6yo_u$x#SB#4&&Ebm{t(9zj;VKG zjDbhX*pYf}{3={Pq=?T5ehRFKgid>s&>xLsc=+3R^wMvDuKOZ#{|rl*vRFpUC;p)d z*B^*I#9xV0;+w=eBD0#0Ld}Hh_K4iShE=@Q)Z4Jyl=&I3(x!YY?PgHkYU&r@Rm7#H z{$-|6IYK;0)Dm|PcWM2PP&j%`FomnJ8_{Iy?f55RF0s$t8-b6R^6U7yDVG^1VP{kR zj!~Rx$~Aa`^1p#XCsq>T^TZRxVnRQs{fJ|UXNaTM!xVNB=MnD`!-i3?RN{KZ&s{I``Fo-ZaWm0_xPrKx(DgOq1>#ELheRcz>!t|nQ5YL;vjK1aT2kV_ysYUh!eV=i?CkAPQ*-Nn7Q{y zyp{Ngsf&5UuZWJs+eARDAchdriJuZ&BXYmhE~N{Jjk@)v>m15si9SSwxqp9lW3Sr$ zvbvTqNI0PvbK>zfJ4m{|opNKY*XlOd^UpmiyRY~D{NrQsAhtMdJ1N%=T0%Q$w9{>V zY~}XS>S?y`BwRbuk`8S@2<=$lhmPmlj!$Qe_Fx+M4R*8B>e`MScm1ZYS@)|eYDUyCkAI9>pL*dX?D_fOR~WUnM)Yh>6T_LRW)-B@TRQ$ZNSf_SApH(*)~ZmSpL$%NBp`)<@ry~_eCG?v?t-O+Dp zUXK}ms}uJc?5Vk@?b$47<@~aX3;f0D?89ZN3JSthTefcCg#2PR3_ZUoZO`(WQkqrv ziorAUGp;>83@0je>2!R26=l+pNU-pVxaYgfGl<&_0rOCXoMh5e8@F1&)Z&DS#)}kvJ*kd9Y-&XK}wq#_`~d0 zFYSf)c*kx|xs4MBG>2g_J+7*%iM+PdS2D4xrZl^xbXBb^9adIbb(y!=tD2Td1*w5% z5fx0dqA_Uk8wN~NiqDvPG{Jgye3dh?GP|w3w4i8gMRko`J$78p$m}~qOA80q)u-4) z=ZiCyaQ)ELIZEeFRlU~`Y^dr{SfgsZJ=^33X);52>14pXy;dr2I&5DTuz6|EkEH_N zTjKD{%95I?i_Rv6+E>2)R}0&Z9_Nhd_>n2!^_yD~xt?R@jFJ7pbZzVF&>^MG8o?aI zFP_QHtEpz26G@JGoa3pD-FCW!PyDr|;;{V6elR<-Kp z!1Tv44?;54pcK-vj=xvmqRDUyk_(mFsCoO^iZ~sdqdP&pb~533>7&O#n!I@dcqjkw cH(>Ptcmo`MlooqBbYHv&(JL@&N@L+a0rkK+H2?qr delta 5724 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 Qf9vDYQvhT8V<8+Y}Nl8+bsj2|MrC3{8TF?Sp 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 z z+@aQ>!NUi|PTqVmt=YkNRlGW0n^>FJ5-rGU+o|4)pNQ8}WdnF|D6u+TlUS2jr;^(> zaQF0W@#@6dczyg>yb9JP?$_)1(Ri&DuV>(BVs&CO+wn57#oj1hmsqD+@#FF1ysEL- zZ4He&Es7Q7dK)#~%XEgY-lmDgJk5!IKBH|qcGybmqI>e@M;GMX6m2!OapV}|hq1es zc{C5vT+M)Elc74S9m48^iH-4EdpB^5t?F@R^Kc3~+lp^zS}n$^WU(s#qGO4Owp#4S zOm@^;nZUcXc9!ZATN7)0Dl&q#a_yNGw}DANSYT~+cI$sC($Kews zX{#d8u~qpV^3AKy{(_5`C&@)a7#Oo3q2 zJ}DhKxx$SXb!_$^<@A3{0}GnfP!+cI#Oi44f)26wM$Jj?@FW&=BqumiorF?dAFqje zhV_Z&c zoo$=iF6N&aO^F^D(zLzOb6BNB43yUcw&hytv|aSfv_`S9GuI?Vp0ORGmLMmiq;YEO zdB{${5sutWQoa29pC20;x7@fIQs$m%c6$6_lA*Iy;ckh)m{=D-f*D;%O7IXi*Ob^% zthMi}lX_vRP!`!2iGH#&VrsW(*Vu_k(ho{+E1>t7bIMivJ=`JU1+-}Z`?*@0m3X!BnN C7eDC$ delta 5803 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 diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/sr/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/sr/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index 4ef2ec08817c96612a95052520e76b42e45f24ac..8db5e446975bad74caa753bfe953a5f6adbf7171 100644 GIT binary patch delta 23 ecmaFl^2lXFzYv$DuA#Alp@o&H<>r|}C;0(qN(b2h delta 23 ecmaFl^2lXFzYv$9u7R?(`36te!y-5*5GzmgNBGE{68ZpxfI%=sU#%L2%?Sn)`@pctUXH;)9 z_7XL!)zQ|aowlaRP?U~NMYOio+9A_o+L_ctneXqu$Mbj}Kc92n`=0ll^MBuaSys8d z(m53uQf)Y{l9pusFO2Ei$e4_1oi%1yyfMwO1o>m8^H(Cy#}@diJ--8^=+|O1Jd17c zhW)%%f-zqDIT(k%u(L6a8BRlUEyO0c0%NcS`D3>5R|M|EP^`tf@uWR(?lQ(h--E2( zG)MlJHvFagc0=8_7`1?hkTsc67{&Z%CXH5{s6y>*1BT(wzy-z}upYBsMD5@w)Wi`@ z-GwznEualXVmj(RdG_-nWX-0J^-&zd{ALCX4LpG=;W^Zee?aYA^^_iKGt|yfku{iH z)Pnk=?lTf~{bQ(#O+(%9Nz`@ou{W+nM<1N05rY3g^&3!+AcP06(j}lKY>DkL1NH0& zqpqKdy764pqgjGUxD|u(3v7&asLGr`E$~uv>aP?31Av#dkiryjMDYu1|>PCuA8Tlb4XU6+KaOvjegKb1x>cLzY_JR*4p#ikOeyCLwmtq)Xop0R(J&U zeLabq_$v0mo2VNVwssfzF!K7CGUT-|vr*%hqDs96HGTu8px>T9ijDRCKSe{&{v2vY z4XA;QlHGx!s2e7rUZy0}j@qMcoN4<7s0tLK-uiy1>jt7KITZCM#-Q#$7o!~-&(mO2 zrW!S1E9%DYqe}S+sxn`qp4n;C`3BU^!}y)myO4rfU@qz0vDm9 zXSA4x23A|wq6Th4Rb&Thg8laMW2gn3N4{aE0q;dGUw&1pKWf}CRAtLhkE{YU&q7os zs_&-$+QDW{XvO4^JVxh z{dK69wj`DMYp3H<-5bq8O}H4_;wz{f?m_MBG-}{Q+rNf^cO}hzM4_mK#G-cG0`++o z>b`lXjXr?=@plf55E`591%A|uccCV{Y;8bQH4Y3SJ=u_rEI7X9m}%4DRwJL`d3KyTCzMxaVP-8vU3 zhFO3bw;46@F4RW;fts)mHNGCHjAMd2xC6parA|U!kdLZFf8@8x%t2LZC5Gc#R7p3X zHt+%J(HyYnk7FqPOQ;3>fZ=%E_M3Fn=RE%?8p(Xn6!lhi!#OwrHQ*3xf@7$X)}vm= zpHT~lV3oQq5w(Cc)T8N&szhJZLLNcg=W*2dN{rL@zlw%RvjQK)w@^2_fg0$^bo&XY z%A{dqychLIdSVU^#$;T88utcj!G6>;-(x?oM^)0(iTdlpSQ^?%BC4N`+EEwO4t|MY zH~=-_Z*dk*M*ZYo#7h{`nO);$)T2z}Me<+~>JjwAARL0aUr84A*9u2*A_^-|1D->^ zqGk!IGTTrCK1E$$i;;K%^;Z9g{8SiEw!5ItsEzbNRca7wBPAGtlThO;v#GyMRM`uC zsM0S-eQ#g47rt%%$eurls?cGK!BeP-E~D=EU(|*gb#bqY!C3k&P#eia{qW^EG<4wr z`@y5AXFT4Xe;PILMbt#=P!sr3*X=;y3WH3qU%yn8_Pp&z`2hG zzageKsw7iU6FR6JEkUh#DQZ9sw#PT^=SQ#~{o|;KI^?<&7opybfvB(VB-F%}oL%Poj2o1+}1`Q4eybR-UEUH4Y zQ44tr_5V*(MI(U|HK+map?10*^^EqS7Iqp{p^K=}HlP*|dXGCnJSNajM=uuI{vg!- z#$jtLM^)ry4E+1Qg@#tR3$?PNs0mM@DsTaH<7=qvqVwE|Q&Bt3LM^Nq^#e8pGjIwP z<0{kw&Z8E51@FQe=;(Xu?dDF{8TCOP>g(4Jo8dInJFy70fYr9Y1$D#SsD*!S`$tg~ zIE&gy18M=cP#X!)H-^2KRE{e30@MyyAeWeps8XIm-8iVb zdtD^z9chJHXew%4zU}wIX7op(-i306Y?aP(Ue1||vE`07uVdi& z$oeu)BhQd>d+s)aY~xAXPL}A+Eut}s=v|#aJ|{2FC9MY2%5*8%Xhysv2>dMP}cs4 F{{t@(|JDEi delta 5098 zcmYk<3tX4g9mnybfpWk70aHLx|01Z!Et9~h#jHpq%xt!q4w+)h>r4Y1J=t^_Im`ap z=z_Mi&6*n`<*n2-G*ebOWTs9FO+_K&mCjwX+~>=4e7$^LeSM$vT+jJE=lQdJSYB1` zoQ(2YY1rCHJb9z5F{3-t4%c2|?u|C4JLV(*nG*i#fn^wnKD)mL!|2!Jt=NdYvCSS2 zi!sJSzb{7NP)sw%G568Xvle0(ti%Xhf&6FQ;-6sLf&o~MeeiE~e>;ZIzlMz61jZV} zeH1e$&M#bGkXOCv9{v`V?MC%w;n~!pau2dtEhnm zbaMv~iJ|nnqwdombvy$Zqsg%r;Z&Y)rqR&I8&D-YjJok@)Xdwh*Q^25S2K%7o^8CS z0p+6ZQ;53mA=HDXpzik=>bx?{$LG<}fhHP$cnZ}&hk6B8eazJoWd|@UlZQ$Vbh1qV1QUDzN}n z>Ss{{S%sR>X6ts;jXy?JAzfN`8;JKGdO3dVmKtA}?wNsi+GxQ5Oue z`wLL#k3~IjitW!qowo>8+7+mQR-?|_gjyT*s72U-k?5SFp$jkD9e#WYx**o-Ma?J^ zHLww=f&CbDT_LKplTbIDiJF;%I)4f36;;~(t5E}d+db}>S{j=9Ce#RbqQ28lP!B$i zBe4Z_qm*9m0EZ*X#S|dR!AwJ4zX(<8=TO(bh<&lz?%#zP;69Af_x~9U&8Qi5VJqsw z?@%|qj#@-r6Wtj_p^kU6eJ`p4DX7(+jhgu|R3-03y^8x$_n(fc+-&UW&~Rwzf>o#+ zuR)b^1FAB+QSa;kYJW3o=9f@wA(Y=)4X`I_k*1(3I1+Wg2W`I?HNg3(3Y4Rx3mqD= z5_RE9R7KuFJ)q7WuSX5wbL2}h%{UCdM^!3^k6+i_h5DKbP_Jw<>i&H*nye;y8^Ki(dH1~<`PhAMrY z*PZA%FZI`rO4*?YmSYkwMa{4VHM0Y#3ma|!G-^Pts8{qIY9LopGxqQ29`Av=Z*SB@ z)3FHeK|ic=>N_PKQr`>T7)7fzbwFY8S+?fqP4Im3OgS%0se#AN*nY5XQx~>ZK z;Pt49Y(YKnBh>XxsLHh==R4*S4VAj<0QZExs7mA@ze%PPRjMTzgq5h0u0+jXE$Y?0 zZ};!P0Q!ef12};}c*geIQOEy-iTeIK4Rlv!AFSX&F6x4q}4-or}@>{uk3Iz*kW>I*YpSitS%Vl`cHh{ce*` zHyDIjI06%K9_qT6Q3I|g%4;sv~jL-1&t`zpg(NFnqGqFzBZcE*vY`{khqI3}I?htZhK4qY${`9#f=s713H zb-{b63wEGZ^Fib%!L*eUR%ugPuY?;04rqucKzR5pTi0sLJg}oqq&%UJL5H>!^u&vfP37Kz=ezKU77WF*NkR zpP^%0 zSb=`}{(UqwvMSUGYf!6pJE}x`P^E1|4d83k1KKeL{cm?m9f#_tq3$;ddtni(B6Cn{ zZ8_@tRoF$}e;o}ya2u)uyHPi4LY>%(daxPl&NKuyFfZ!QX(kTB(ReSGp$4!EbzK9- z;uol2+HXus@!%{UH8ljvgF^3o!xtYi#(s z%=1Ls3G%y+7OxO@5#95~w%#@lTZ?gyZ*I6J^;KHSiB{jc5vA0xBuzEL=xyiL-`7o?eNB{#M| z)3}ZNn%qT35N(}Z%v#(;j*}X9-z4)ojm6|G^0K?re1`udspK3PP4kEj z_(5;7?Q)z%wA}amilgG3XYG-nU?6F=eKD2{CQp+4$OWP=^#L+~XxmIm$TuW~OXRSM}FZh1s>E`^M-V!p9yhnaT zZr=VvCy_LedZORxuSp!ymOfV$=JhXR8# ZQq!{%Gc$A2Z?AhasUoQEa{9jD{{t=;`=tN? diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/uk/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/locale/uk/LC_MESSAGES/org.gnome.Shell.Extensions.GSConnect.mo index ca9ea4df80bab65240e2737bd4899d79d102341e..08122dfcc89ecee4ff64eccb70489b1035016e07 100644 GIT binary patch delta 7383 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 K0CJ`XH2?qr delta 25 gcmdni#JH`Aal0CB(w9{>OV diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/metadata.json b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/metadata.json index 4823ba4..f6c5cda 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/metadata.json +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/metadata.json @@ -5,9 +5,10 @@ "shell-version": [ "46", "47", - "48" + "48", + "49" ], "url": "https://github.com/GSConnect/gnome-shell-extension-gsconnect/wiki", "uuid": "gsconnect@andyholmes.github.io", - "version": 62 + "version": 71 } \ No newline at end of file diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/org.gnome.Shell.Extensions.GSConnect.gresource b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/org.gnome.Shell.Extensions.GSConnect.gresource index 33c5344b3d9e1c4f79f942a40a2ce68f5dd32d44..1b02abc35500a310eb320442c486f25c1fd421f6 100644 GIT binary patch delta 9334 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 delta 8846 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 { + this.settings.set_boolean('enabled', true); + return GLib.SOURCE_REMOVE; + }); + } + /* * Context Switcher */ diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/schemas/gschemas.compiled b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/schemas/gschemas.compiled index 60e8035b64140a152d4915064f206ccefcf0f2dd..6bbd7170afd169b2c45d46cd34c90439f6700a68 100644 GIT binary patch delta 1096 zcmYjQT}YEr7=E|5{G08YQ}H69Fl|e}enhE@j3^9)D8!)DE}Yw!elj=N*Or00E&`*Q zgi|54Knp`cLDRsCgrJ0OBqQk}3q~Ln-AE8#*7HmUz3}in=XuZfo^#%FzPJ9V12ea6 z$yK+=;@Yp791$t>h#Zk7ISIZAT==%}lzs~O82nXmagoS+qP&j24t)sz6>ti0el=$4 z&qK4$4{(Q9A1@a9*j8U%%0wK4qex7FSAaVWa+f}JJ^b7fk(v?} zDLgpWVc+9Qx{zbowqXYo4!{ZQ1o(aaHaNd#;;fr_9@r@fNrTscXS(ePed<#9q9G4x zvC}P?deCn8W#Dq)_25vl;4gv$7V?3csj*4=)FS8PB6t9J@bXO+3sIM2{up=y2yX7* zOP`txEPxjQ-|y#n^r>^;zXLA=3lH1A(_hwtA}%D-FxP>RpA|h!Q1gQg@E_oe>(Kyx zY6pD5^*Mps{?@HdLEGWyf_e2Jqch%x`I%7T+CF!$X<25ZOON&$5z7jzI<27^S+xJut>U|+LoNe)+tXuos0&cR2iA+!XHRD( zpK3m=N$@m~ElSN2GvIj@C~8TvdyMSCc0f-Ke|g0*A2zqv2aW^TD%7mf555KTj88Rk zKD7t)N5PMQmZhOu`qbRuB$z))%m^B0!qBgp;S-t0Wcr7RT%6ryWG978C^Ym&#`RhL za3CHDcI)w2*b+7C@T*?$F4gbd-N65i%QS&60om&!siO(MrW-Z;QK2EPM&9{L`<>+k7m;e;n3vIi3fp($`RD%Y6P_aL8y&Ii=6 zr~BEUqs?7vz??la7zbDfYJd~02fUxKc31wiu#TH`NKVSo1>kHJ`HMj>a#UVJe}d%7 zmd&iE_o80V7$=y$-Tw`FY4yU5i46!_!S(O$L%e~$7I_F70o$gIc$w2Xk@rHQpj^D% zzz5Sak3lbj(C^1}tf%KXd1w*beEzDFIen{?axw`s1s+DU`<$R}!3|~T0yylxQ(#VC zgZwR&pVu-Fu8vS940Qo^jGeMO2rG4<9A6H6T2QzAeI@RZgT3M2 z9!)I0pz@gVwc4OTFm!MF5OaDT@?K~Z*ela><^50|>rpdlS~)Xv);f>H!z{4)XTttK9B4F$3N>yz_0)S diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/schemas/org.gnome.Shell.Extensions.GSConnect.gschema.xml b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/schemas/org.gnome.Shell.Extensions.GSConnect.gschema.xml index 4dfaddb..bbcb566 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/schemas/org.gnome.Shell.Extensions.GSConnect.gschema.xml +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/schemas/org.gnome.Shell.Extensions.GSConnect.gschema.xml @@ -38,6 +38,9 @@ SPDX-License-Identifier: GPL-2.0-or-later true + + false + @@ -160,6 +163,9 @@ SPDX-License-Identifier: GPL-2.0-or-later "" + + false + diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/backends/lan.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/backends/lan.js index 5b8927e..fc08f3f 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/backends/lan.js +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/backends/lan.js @@ -367,9 +367,12 @@ export const ChannelService = GObject.registerClass({ if (!packet.body.deviceName) throw new Error('missing deviceName'); - // Reject invalid device names - if (!Device.validateName(packet.body.deviceName)) - throw new Error(`invalid deviceName "${packet.body.deviceName}"`); + // Sanitize invalid device names + if (!Device.validateName(packet.body.deviceName)) { + const sanitized = Device.sanitizeName(packet.body.deviceName); + debug(`Sanitized invalid device name "${packet.body.deviceName}" to "${sanitized}"`); + packet.body.deviceName = sanitized; + } debug(packet); @@ -704,6 +707,25 @@ export const Channel = GObject.registerClass({ return this._authenticate(connection); } + async _exchangeIdentities() { + await this.sendPacket(this.backend.identity); + const identity = await this.readPacket(); + + if (this.identity.body.protocolVersion !== identity.body.protocolVersion) { + this.identity = null; + throw new Error(`Unexpected protocol version ${identity.protocolVersion}; ` + + `handshake started with protocol version ${this.identity.protocolVersion}`); + } + + if (this.identity.body.deviceId !== identity.body.deviceId) { + this.identity = null; + throw new Error(`Unexpected device ID "${identity.body.deviceId}"; ` + + `handshake started with device ID "${this.identity.body.deviceId}"`); + } + + this.identity = identity; + } + /** * Negotiate an incoming connection * @@ -740,17 +762,19 @@ export const Channel = GObject.registerClass({ if (!this.identity.body.deviceName) throw new Error('missing deviceName'); - // Reject invalid device names - if (!Device.validateName(this.identity.body.deviceName)) - throw new Error(`invalid deviceName "${this.identity.body.deviceName}"`); + // Sanitize invalid device names + if (!Device.validateName(this.identity.body.deviceName)) { + const sanitized = Device.sanitizeName(this.identity.body.deviceName); + debug(`Sanitized invalid device name "${this.identity.body.deviceName}" to "${sanitized}"`); + this.identity.body.deviceName = sanitized; + } this._connection = await this._encryptClient(connection); // Starting with protocol version 8, the devices are expected to // exchange identity packets again after TLS negotiation if (this.identity.body.protocolVersion >= 8) { - await this.sendPacket(this.backend.identity); - this.identity = await this.readPacket(); + await this._exchangeIdentities(); } } catch (e) { this.close(); @@ -780,8 +804,7 @@ export const Channel = GObject.registerClass({ // Starting with protocol version 8, the devices are expected to // exchange identity packets again after TLS negotiation if (this.identity.body.protocolVersion >= 8) { - await this.sendPacket(this.backend.identity); - this.identity = await this.readPacket(); + await this._exchangeIdentities(); } } catch (e) { this.close(); diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/components/contacts.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/components/contacts.js index 2ce5620..cd30c4a 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/components/contacts.js +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/components/contacts.js @@ -64,7 +64,7 @@ const Store = GObject.registerClass({ /** * Parse an EContact and add it to the store. * - * @param {EBookContacts.Contact} econtact - an EContact to parse + * @param {"EBookContacts.Contact"} econtact - an EContact to parse * @param {string} [origin] - an optional origin string */ async _parseEContact(econtact, origin = 'desktop') { diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/components/pulseaudio.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/components/pulseaudio.js index 96717c2..67dd63f 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/components/pulseaudio.js +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/components/pulseaudio.js @@ -15,8 +15,17 @@ let Gvc = null; try { // Add gnome-shell's typelib dir to the search path const typelibDir = GLib.build_filenamev([Config.GNOME_SHELL_LIBDIR, 'gnome-shell']); - GIRepository.Repository.prepend_search_path(typelibDir); - GIRepository.Repository.prepend_library_path(typelibDir); + + if (GIRepository.Repository.hasOwnProperty('prepend_search_path')) { + // GNOME <= 48 / GIRepository 2.0 + GIRepository.Repository.prepend_search_path(typelibDir); + GIRepository.Repository.prepend_library_path(typelibDir); + } else { + // GNOME 49+ / GIRepository 3.0 + const repo = GIRepository.Repository.dup_default(); + repo.prepend_search_path(typelibDir); + repo.prepend_library_path(typelibDir); + } Gvc = (await import('gi://Gvc')).default; } catch {} diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/daemon.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/daemon.js index f9b1f13..b241434 100755 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/daemon.js +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/daemon.js @@ -7,12 +7,18 @@ import Gdk from 'gi://Gdk?version=3.0'; import 'gi://GdkPixbuf?version=2.0'; import Gio from 'gi://Gio?version=2.0'; -import 'gi://GIRepository?version=2.0'; import GLib from 'gi://GLib?version=2.0'; import GObject from 'gi://GObject?version=2.0'; import Gtk from 'gi://Gtk?version=3.0'; import 'gi://Pango?version=1.0'; +// GNOME 49 uses GIRepository 3.0 +import('gi://GIRepository?version=3.0').catch(() => { + import('gi://GIRepository?version=2.0').catch(() => {}); +}); + +import('gi://GioUnix?version=2.0').catch(() => {}); // Set version for optional dependency + import system from 'system'; import './init.js'; @@ -21,8 +27,7 @@ import Config from '../config.js'; import Device from './device.js'; import Manager from './manager.js'; import * as ServiceUI from './ui/service.js'; - -import('gi://GioUnix?version=2.0').catch(() => {}); // Set version for optional dependency +import {MissingOpensslError} from '../utils/exceptions.js'; /** @@ -48,14 +53,14 @@ const Service = GObject.registerClass({ _migrateConfiguration() { if (!Device.validateName(this.settings.get_string('name'))) - this.settings.set('name', GLib.get_host_name().slice(0, 32)); + this.settings.set_string('name', GLib.get_host_name().slice(0, 32)); const [certPath, keyPath] = [ GLib.build_filenamev([Config.CONFIGDIR, 'certificate.pem']), GLib.build_filenamev([Config.CONFIGDIR, 'private.pem']), ]; - const certificate = Gio.TlsCertificate.new_for_paths(certPath, keyPath, - null); + + const certificate = Gio.TlsCertificate.new_for_paths(certPath, keyPath, null); if (Device.validateId(certificate.common_name)) return; @@ -92,7 +97,7 @@ const Service = GObject.registerClass({ // Notify the user const notification = Gio.Notification.new(_('Settings Migrated')); - notification.set_body(_('GSConnect has updated to support changes to the KDE Connect protocol. Some devices may need to be repaired.')); + notification.set_body(_('GSConnect has updated to support changes to the KDE Connect protocol. Some devices may need to be re-paired.')); notification.set_icon(new Gio.ThemedIcon({name: 'dialog-warning'})); notification.set_priority(Gio.NotificationPriority.HIGH); this.send_notification('settings-migrated', notification); @@ -211,8 +216,9 @@ const Service = GObject.registerClass({ * Report a service-level error * * @param {object} error - An Error or object with name, message and stack + * @param {string} [notification_id] - An optional id for the notification */ - notify_error(error) { + notify_error(error, notification_id) { try { // Always log the error logError(error); @@ -226,8 +232,12 @@ const Service = GObject.registerClass({ if (error.name === undefined) error.name = 'Error'; + if (notification_id !== undefined) + id = notification_id; + else + id = error.url || error.message.trim(); + if (error.url !== undefined) { - id = error.url; body = _('Click for help troubleshooting'); priority = Gio.NotificationPriority.URGENT; @@ -238,7 +248,6 @@ const Service = GObject.registerClass({ url: error.url, }); } else { - id = error.message.trim(); body = _('Click for more information'); priority = Gio.NotificationPriority.HIGH; @@ -298,7 +307,18 @@ const Service = GObject.registerClass({ this._initActions(); // TODO: remove after a reasonable period of time - this._migrateConfiguration(); + try { + this._migrateConfiguration(); + if (this.settings.get_boolean('missing-openssl')) + this.withdraw_notification('gsconnect-missing-openssl'); + this.settings.set_boolean('missing-openssl', false); + } catch (e) { + if (e instanceof MissingOpensslError) { + this.settings.set_boolean('missing-openssl', true); + this.notify_error(e, 'gsconnect-missing-openssl'); + } + throw e; + } this.manager.start(); } diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/device.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/device.js index 4742c64..9690730 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/device.js +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/device.js @@ -144,6 +144,14 @@ const Device = GObject.registerClass({ return name.trim() && /^[^"',;:.!?()[\]<>]{1,32}$/.test(name); } + static sanitizeName(name) { + // Remove all prohibited characters + const sanitized = name.replaceAll(/["',;:.!?()[\]<>]/g, ''); + if (sanitized.length < 1) + throw new Error('No valid characters in device name!'); + return sanitized; + } + get channel() { if (this._channel === undefined) this._channel = null; diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/init.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/init.js index a024b17..e6ee47b 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/init.js +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/init.js @@ -10,6 +10,7 @@ import GLib from 'gi://GLib'; import Config from '../config.js'; import {setup, setupGettext} from '../utils/setup.js'; +import {MissingOpensslError} from '../utils/exceptions.js'; // Promise Wrappers @@ -62,10 +63,22 @@ const extensionFolder = GLib.path_get_dirname(serviceFolder); setup(extensionFolder); setupGettext(); + if (Config.IS_USER) { // Infer libdir by assuming gnome-shell shares a common prefix with gjs; // assume the parent directory if it's not there - let libdir = GIRepository.Repository.get_search_path().find(path => { + let gir_paths; + + if (GIRepository.Repository.hasOwnProperty('get_search_path')) { + // GNOME <= 48 / GIRepository 2.0 + gir_paths = GIRepository.Repository.get_search_path(); + } else { + // GNOME 49+ / GIRepository 3.0 + const repo = GIRepository.Repository.dup_default(); + gir_paths = repo.get_search_path(); + } + + let libdir = gir_paths.find(path => { return path.endsWith('/gjs/girepository-1.0'); }).replace('/gjs/girepository-1.0', ''); @@ -110,7 +123,7 @@ globalThis.HAVE_GNOME = GLib.getenv('GSCONNECT_MODE')?.toLowerCase() !== 'cli' & * @param {Error|string} message - A string or Error to log * @param {string} [prefix] - An optional prefix for the warning */ -const _debugCallerMatch = new RegExp(/([^@]*)@([^:]*):([^:]*)/); +const _debugCallerMatch = new RegExp(/^([^@]+)@(.*):(\d+):(\d+)$/); // eslint-disable-next-line func-style const _debugFunc = function (error, prefix = null) { let caller, message; @@ -127,7 +140,9 @@ const _debugFunc = function (error, prefix = null) { message = `${prefix}: ${message}`; const [, func, file, line] = _debugCallerMatch.exec(caller); - const script = file.replace(Config.PACKAGE_DATADIR, ''); + let script = file.replace(Config.PACKAGE_DATADIR, ''); + if (script.startsWith('file:///')) + script = script.slice(8); GLib.log_structured('GSConnect', GLib.LogLevelFlags.LEVEL_MESSAGE, { 'MESSAGE': `[${script}:${func}:${line}]: ${message}`, @@ -338,10 +353,11 @@ GLib.Variant.prototype.full_unpack = _full_unpack; * @param {string} keyPath - Absolute path to a private key in PEM format * @param {string} commonName - A unique common name for the certificate * @returns {Gio.TlsCertificate} A TLS certificate + * @throws MissingOpensslError on missing openssl binary */ Gio.TlsCertificate.new_for_paths = function (certPath, keyPath, commonName = null) { if (GLib.find_program_in_path(Config.OPENSSL_PATH) === null) { - const error = new Error(); + const error = new MissingOpensslError(); error.name = _('OpenSSL not found'); error.url = `${Config.PACKAGE_URL}/wiki/Error#openssl-not-found`; throw error; diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/manager.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/manager.js index e4a71bd..c58769e 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/manager.js +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/manager.js @@ -13,6 +13,8 @@ import Device from './device.js'; import * as LanBackend from './backends/lan.js'; +import {MissingOpensslError} from '../utils/exceptions.js'; + const DEVICE_NAME = 'org.gnome.Shell.Extensions.GSConnect.Device'; const DEVICE_PATH = '/org/gnome/Shell/Extensions/GSConnect/Device'; const DEVICE_IFACE = Config.DBUS.lookup_interface(DEVICE_NAME); @@ -102,10 +104,22 @@ const Manager = GObject.registerClass({ get certificate() { if (this._certificate === undefined) { - this._certificate = Gio.TlsCertificate.new_for_paths( - GLib.build_filenamev([Config.CONFIGDIR, 'certificate.pem']), - GLib.build_filenamev([Config.CONFIGDIR, 'private.pem']), - null); + const app = Gio.Application.get_default(); + try { + this._certificate = Gio.TlsCertificate.new_for_paths( + GLib.build_filenamev([Config.CONFIGDIR, 'certificate.pem']), + GLib.build_filenamev([Config.CONFIGDIR, 'private.pem']), + null); + if (this.settings.get_boolean('missing-openssl')) + app?.withdraw_notification('gsconnect-missing-openssl'); + this.settings.set_boolean('missing-openssl', false); + } catch (e) { + if (e instanceof MissingOpensslError) { + this.settings.set_boolean('missing-openssl', true); + app?.notify_error(e, 'gsconnect-missing-openssl'); + } + throw e; + } } return this._certificate; @@ -165,8 +179,7 @@ const Manager = GObject.registerClass({ notif.set_icon(new Gio.ThemedIcon({name: 'dialog-warning'})); notif.set_priority(Gio.NotificationPriority.HIGH); notif.set_default_action('app.preferences'); - - Gio.Application.prototype.withdraw_notification.call( + Gio.Application.prototype.send_notification.call( application, 'discovery-warning', notif diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/plugins/mpris.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/plugins/mpris.js index f3bb63a..b33ed37 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/plugins/mpris.js +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/plugins/mpris.js @@ -43,8 +43,6 @@ const MPRISPlugin = GObject.registerClass({ this._transferring = new WeakSet(); this._updating = new WeakSet(); - this._queueTimers = new Map(); - this._mpris = Components.acquire('mpris'); this._playerAddedId = this._mpris.connect( @@ -78,12 +76,6 @@ const MPRISPlugin = GObject.registerClass({ disconnected() { super.disconnected(); - for (const [identity, timer] of this._queueTimers) { - if (timer) - GLib.source_remove(timer); - this._queueTimers.delete(identity); - } - for (const [identity, player] of this._players) { this._players.delete(identity); player.destroy(); @@ -267,35 +259,18 @@ const MPRISPlugin = GObject.registerClass({ } } - if (packet.body.hasOwnProperty('requestNowPlaying') || - packet.body.hasOwnProperty('requestVolume')) { - const response = this._getUpdate(player.Identity, packet); - this._sendUpdate(player, response); - } + // Information Request + let hasResponse = false; - } catch (e) { - debug(e, this.device.name); - } finally { - this._updating.delete(player); - } - } + const response = { + type: 'kdeconnect.mpris', + body: { + player: packet.body.player, + }, + }; - // Respond to information request (or push updated information) - _getUpdate(identity, packet) { - - const player = this._mpris?.getPlayer(identity); - if (!player) - return; - - const response = { - type: 'kdeconnect.mpris', - body: { - player: player.Identity, - }, - }; - - try { if (packet.body.hasOwnProperty('requestNowPlaying')) { + hasResponse = true; Object.assign(response.body, { pos: Math.floor(player.Position / 1000), @@ -356,61 +331,31 @@ const MPRISPlugin = GObject.registerClass({ } } - if (packet.body.hasOwnProperty('requestVolume')) + if (packet.body.hasOwnProperty('requestVolume')) { + hasResponse = true; response.body.volume = Math.floor(player.Volume * 100); + } - return response; + if (hasResponse) + this.device.sendPacket(response); } catch (e) { debug(e, this.device.name); + } finally { + this._updating.delete(player); } } - _sendUpdate(player, packet = null) { - if (!player || (!packet && this._updating.has(player))) - return GLib.SOURCE_REMOVE; - - debug(`Sending update for ${player.Identity}`); - this._updating.add(player); - - if (this._queueTimers.has(player.Identity)) { - const timer_id = this._queueTimers.get(player.Identity); - if (timer_id) { - debug(`Stopping timer id ${timer_id}`); - GLib.source_remove(timer_id); - } - this._queueTimers.delete(player.Identity); - } - if (!packet) { - packet = this._getUpdate(player.Identity, { - body: { - requestNowPlaying: true, - requestVolume: true, - }, - }, false); - } - this.device.sendPacket(packet); - - this._updating.delete(player); - return GLib.SOURCE_REMOVE; - } - _onPlayerChanged(mpris, player) { if (!this.settings.get_boolean('share-players')) return; - // Set a timer to send the updated state after a short delay. - // Allows further state changes to be bundled into a single packet. - if (this._queueTimers.has(player.Identity)) - return; - this._queueTimers.set(player.Identity, 0); - - const timer_id = GLib.timeout_add( - GLib.PRIORITY_DEFAULT, - 250, // ms (0.25 seconds) - this._sendUpdate.bind(this, player) - ); - this._queueTimers.set(player.Identity, timer_id); - debug(`Set update timer id ${timer_id} for ${player.Identity}`); + this._handleCommand({ + body: { + player: player.Identity, + requestNowPlaying: true, + requestVolume: true, + }, + }); } _onPlayerSeeked(mpris, player, offset) { @@ -490,11 +435,6 @@ const MPRISPlugin = GObject.registerClass({ } destroy() { - for (const [identity, timer] of this._queueTimers) { - this._queueTimers.delete(identity); - GLib.source_remove(timer); - } - if (this._mpris !== undefined) { this._mpris.disconnect(this._playerAddedId); this._mpris.disconnect(this._playerRemovedId); diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/plugins/share.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/plugins/share.js index 49a0a49..ef28893 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/plugins/share.js +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/plugins/share.js @@ -71,17 +71,35 @@ const SharePlugin = GObject.registerClass({ } handlePacket(packet) { + const {filename, text, url} = packet.body; + // TODO: composite jobs (lastModified, numberOfFiles, totalPayloadSize) - if (packet.body.hasOwnProperty('filename')) { + if (filename !== undefined) { + debug(`Remote wants to share file "${filename}".`); if (this.settings.get_boolean('receive-files')) this._handleFile(packet); else this._refuseFile(packet); - } else if (packet.body.hasOwnProperty('text')) { - this._handleText(packet); - } else if (packet.body.hasOwnProperty('url')) { - this._handleUri(packet); + return; } + if (text === undefined && url === undefined) + throw new Error('Share request has invalid payload, ignoring.'); + + if (this.settings.get_boolean('launch-urls')) { + let shared_url = url; + if (url === undefined) { + const urls = URI.findUrls(text); + if (urls.length === 1) + shared_url = urls[0].url; + } + if (shared_url !== undefined) { + debug(`Launching shared URL "${shared_url}".`); + return this._handleUri(shared_url); + } + } + const message = text || url; + debug('Displaying shared message.'); + this._handleText(message); } _ensureReceiveDirectory() { @@ -232,15 +250,14 @@ const SharePlugin = GObject.registerClass({ } } - _handleUri(packet) { - const uri = packet.body.url; + _handleUri(uri) { Gio.AppInfo.launch_default_for_uri_async(uri, null, null, null); } - _handleText(packet) { + _handleText(message) { const dialog = new Gtk.MessageDialog({ text: _('Text Shared By %s').format(this.device.name), - secondary_text: URI.linkify(packet.body.text), + secondary_text: URI.linkify(message), secondary_use_markup: true, buttons: Gtk.ButtonsType.CLOSE, }); diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/plugins/systemvolume.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/plugins/systemvolume.js index 9d2aa62..388bbb2 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/plugins/systemvolume.js +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/plugins/systemvolume.js @@ -2,8 +2,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -import GIRepository from 'gi://GIRepository'; -import GLib from 'gi://GLib'; import GObject from 'gi://GObject'; import * as Components from '../components/index.js'; @@ -12,17 +10,6 @@ import * as Core from '../core.js'; import Plugin from '../plugin.js'; -let Gvc = null; -try { - // Add gnome-shell's typelib dir to the search path - const typelibDir = GLib.build_filenamev([Config.GNOME_SHELL_LIBDIR, 'gnome-shell']); - GIRepository.Repository.prepend_search_path(typelibDir); - GIRepository.Repository.prepend_library_path(typelibDir); - - Gvc = (await import('gi://Gvc')).default; -} catch {} - - export const Metadata = { label: _('System Volume'), description: _('Enable the paired device to control the system volume'), @@ -128,7 +115,7 @@ const SystemVolumePlugin = GObject.registerClass({ /** * Update the cache for @stream * - * @param {Gvc.MixerStream} stream - The stream to cache + * @param {"Gvc.MixerStream"} stream - The stream to cache * @returns {object} The updated cache object */ _updateCache(stream) { @@ -148,7 +135,7 @@ const SystemVolumePlugin = GObject.registerClass({ /** * Send the state of a local sink * - * @param {Gvc.MixerControl} mixer - The mixer that owns the stream + * @param {"Gvc.MixerControl"} mixer - The mixer that owns the stream * @param {number} id - The Id of the stream that changed */ _sendSink(mixer, id) { diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/utils/exceptions.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/utils/exceptions.js new file mode 100644 index 0000000..e4dc4af --- /dev/null +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/utils/exceptions.js @@ -0,0 +1,10 @@ +// SPDX-FileCopyrightText: GSConnect Developers https://github.com/GSConnect +// +// SPDX-License-Identifier: GPL-2.0-or-later + +export class MissingOpensslError extends Error { + constructor(message) { + super(message); + this.name = 'MissingOpensslError'; + } +} diff --git a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/wl_clipboard.js b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/wl_clipboard.js index ec7abe9..b5e847f 100644 --- a/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/wl_clipboard.js +++ b/gnome/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/wl_clipboard.js @@ -164,7 +164,7 @@ export const Clipboard = GObject.registerClass( proc.communicate_utf8_async(null, null, (proc, res) => { try { const [, stdout, stderr] = - proc.communicate_utf8_finish(res); + proc.communicate_utf8_finish(res); if (proc.get_successful()) resolve(stdout.trim().split('\n')); else @@ -194,7 +194,7 @@ export const Clipboard = GObject.registerClass( proc.communicate_utf8_async(null, null, (proc, res) => { try { const [, stdout, stderr] = - proc.communicate_utf8_finish(res); + proc.communicate_utf8_finish(res); if (proc.get_successful()) resolve(stdout); else diff --git a/gnome/.local/share/gnome-shell/extensions/impatience@gfxmonk.net/metadata.json b/gnome/.local/share/gnome-shell/extensions/impatience@gfxmonk.net/metadata.json index 4548db6..05f8853 100644 --- a/gnome/.local/share/gnome-shell/extensions/impatience@gfxmonk.net/metadata.json +++ b/gnome/.local/share/gnome-shell/extensions/impatience@gfxmonk.net/metadata.json @@ -7,9 +7,10 @@ "45", "46", "47", - "48" + "48", + "49" ], "url": "http://gfxmonk.net/dist/0install/gnome-shell-impatience.xml", "uuid": "impatience@gfxmonk.net", - "version": 28 + "version": 29 } \ No newline at end of file diff --git a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/extension.js b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/extension.js index 621e376..8199675 100644 --- a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/extension.js +++ b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/extension.js @@ -78,8 +78,10 @@ export default class ScreenAutoRotateExtension extends Extension { this._timeoutId = setTimeout(() => { this._set_hide_lock_rotate(this._settings.get_boolean('hide-lock-rotate')); - // Rotate once on start up to the orientation detected by the claimed accelerometer - this.rotate_to(this._sensor_proxy.get_accelerometer_orientation()); + if (!this._settings.get_boolean('skip-initial-rotation')) { + // Rotate once on start up to the orientation detected by the claimed accelerometer + this.rotate_to(this._sensor_proxy.get_accelerometer_orientation()); + } }, 1000); } diff --git a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/metadata.json b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/metadata.json index 599cb85..ef1a29f 100644 --- a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/metadata.json +++ b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/metadata.json @@ -15,9 +15,10 @@ "45", "46", "47", - "48" + "48", + "49" ], "url": "https://github.com/shyzus/gnome-shell-extension-screen-autorotate", "uuid": "screen-rotate@shyzus.github.io", - "version": 25 + "version": 27 } \ No newline at end of file diff --git a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/prefs.js b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/prefs.js index d28b383..6714cc7 100644 --- a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/prefs.js +++ b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/prefs.js @@ -77,6 +77,15 @@ export default class MyExtensionPreferences extends ExtensionPreferences { orientationGroup.add(setOffsetRow); + const skipInitRotationRow = new Adw.ActionRow({ + title: 'Skip initial rotation', + subtitle: 'Skip initial rotation on extension startup ensures the' + + ' last known orientation is loaded on startup and the' + + ' overview screen is not skipped.' + }); + + orientationGroup.add(skipInitRotationRow); + const enableManualFlipRow = new Adw.ActionRow({ title: 'Enable manual flip', subtitle: 'Enable a toggle in the GNOME Shell System Menu to manually flip between landscape and portrait.' @@ -132,6 +141,11 @@ export default class MyExtensionPreferences extends ExtensionPreferences { const setOffsetSpinButton = Gtk.SpinButton.new_with_range(0, 3, 1); setOffsetSpinButton.value = window._settings.get_int('orientation-offset'); + const skipInitRotationButton = new Gtk.Switch({ + active: window._settings.get_boolean('skip-initial-rotation'), + valign: Gtk.Align.CENTER + }); + const manualFlipSwitch = new Gtk.Switch({ active: window._settings.get_boolean('manual-flip'), valign: Gtk.Align.CENTER, @@ -278,6 +292,9 @@ export default class MyExtensionPreferences extends ExtensionPreferences { window._settings.bind('orientation-offset', setOffsetSpinButton, 'value', Gio.SettingsBindFlags.DEFAULT); + window._settings.bind('skip-initial-rotation', + skipInitRotationButton, 'active', Gio.SettingsBindFlags.DEFAULT); + window._settings.bind('manual-flip', manualFlipSwitch, 'active', Gio.SettingsBindFlags.DEFAULT); @@ -311,6 +328,9 @@ export default class MyExtensionPreferences extends ExtensionPreferences { setOffsetRow.add_suffix(setOffsetSpinButton); setOffsetRow.activatable_widget = setOffsetSpinButton; + skipInitRotationRow.add_suffix(skipInitRotationButton); + skipInitRotationRow.activatable_widget = skipInitRotationButton; + enableManualFlipRow.add_suffix(manualFlipSwitch); enableManualFlipRow.activatable_widget = manualFlipSwitch; diff --git a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/schemas/gschemas.compiled b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/schemas/gschemas.compiled index 5404d4b91d2f2b0ec9ac78314d8e38dbb5e7f92e..960c09629d7c6e96a4dde135be48c45852392eaf 100644 GIT binary patch literal 1517 zcmaJ>O=uHA7#*$AYOEx+EyYqRQ6U~S5v0&dEfl0ZR1o|@ilW3VlN)_;zj78f+7_w-aP1go6V+a)q$7y@@8gd=9}-Ep$odJ zbjufE>jYn{>h$)S368Z3@f)q$Hxi7w1pmtAUynG9IxU99EchoTZUftHF;lecvdnmf zG|h~h^rht~+wwAA&Xv;AT-(=u$*CRq+1&UI?%{7}g1-aU3G5CL2e$zGfCSJA><8|? zANaNl%zdTAgy_WNZs3q3WAv#z;P-+1>94fS(Wh>Ke+GOWNS@6drB9uJZ-C3dixaPx z=u>yWzXiSn3@-J~(5F5Ce*wG*bj9zN=~KtyKL@`AYB8o3VnkHH2^_NLT&kJlsar8V z4c34MO^?6Qr*4No3_cAke_UUsPtAQ^1xw(`>clnr)Jgc0;A!B)J?AZb>Vxnfg6Dyu z_T^Ff)QnFB{0cap`Y}tNn(MBBKLM5LnK*NVItKqcxH~39@5#|q98b;o^nv?0N(_jJ{x>TpPKtz051aaaH5SqHRDqOzX86?%}>#%X8b>c z*8pWrNY~f+qjI`g%|fK5mRGLK`B0c7(qqT+wyTxo)R?WidCk5W)}*c44>_^3Q{!+QMA=Cb!zMX0k|bg-v9sr literal 1445 zcmZ`(J!lj`7#)qL(MvQJ6A1=Qhz8DL?*s|hXe1C~kwWl?5DdE6o!eWox3lc-MI)HX zN-$!lh!BgQg#;`F3x!l-3N5rrBUq$RBw`9H3w>{H_mU%V;N5%o=G*!CX1*D@Vur5i z$0BK6;IW#{?@Uc_rc;Q&Xtlmk9di}_wTVAZ8AhEK=fxfH3O?KcR-sdHd{vQ!s4P9N zAaBOfk6h(Pg~$q}^o>x(W-R$BhOalyOY8!gfxQX#fwKu(z$x}aA4t#!KA4~b+#ARY z$KaX{iD~f*{2N$#5PYOheH4CIlMqLM?(Cxqed;XyJlFu1zpSs)r*4CP4m=FJSe?E> zpE?JB3_Jn!e(ji}Pu&VX09S#RuZBL+r{=s5!B2pJv*W|`sk`C72EPT;yi*G?Dwe=4 zNX-4ugFhKh-G}&--~r%q)3YD+sXO6c0AB`{ZqH_Ue$*NG*TMGyd91C2@zm|`=fTf` z?{fKiO2wNPQ6>CPtASxg8PBoMXR4a zHS>8Id{g7WX)f3se|~ zrW+fcEX9V3rjqY%IazfKPdSe3J36>F?)Hn@I)6i4eUi|1%BWYY52InLy6wg<>tGMi z4zT`O0oDVrP7Yu_u$EXytPxy&T|+oBT|cfrEyLL0k85Gyx;n8yZ%u54D;*h5!Hn diff --git a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/schemas/org.gnome.shell.extensions.screen-rotate.gschema.xml b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/schemas/org.gnome.shell.extensions.screen-rotate.gschema.xml index 56fecdb..bb0f388 100644 --- a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/schemas/org.gnome.shell.extensions.screen-rotate.gschema.xml +++ b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/schemas/org.gnome.shell.extensions.screen-rotate.gschema.xml @@ -75,6 +75,10 @@ false Toggle disabling the touchpad when the orientation is portrait right. + + false + Toggle skipping the initial rotation on extension startup. Will preserve last set orientation + false Toggle debug logging. diff --git a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/sensorProxy.js b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/sensorProxy.js index d29e098..241ce2f 100644 --- a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/sensorProxy.js +++ b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/sensorProxy.js @@ -40,13 +40,13 @@ export class SensorProxy { enable() { this._enabled = true; if (this._proxy === null) return; - this._proxy.call_sync('ClaimAccelerometer', null, Gio.DBusCallFlags.NONE, -1, null); + this._proxy.call('ClaimAccelerometer', null, Gio.DBusCallFlags.NONE, 100, null, null); } disable() { this._enabled = false; if (this._proxy === null) return; - this._proxy.call_sync('ReleaseAccelerometer', null, Gio.DBusCallFlags.NONE, -1, null); + this._proxy.call('ReleaseAccelerometer', null, Gio.DBusCallFlags.NONE, 100, null, null); } appeared(_connection, _name, _name_owner) { @@ -56,7 +56,7 @@ export class SensorProxy { null); this._proxy.connect('g-properties-changed', this.properties_changed.bind(this)); if (this._enabled) { - this._proxy.call_sync('ClaimAccelerometer', null, Gio.DBusCallFlags.NONE, -1, null); + this._proxy.call('ClaimAccelerometer', null, Gio.DBusCallFlags.NONE, 100, null, null); } } diff --git a/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/CHANGELOG.md b/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/CHANGELOG.md index de79e68..417230b 100644 --- a/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/CHANGELOG.md +++ b/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/CHANGELOG.md @@ -310,4 +310,30 @@ other: Other ### Other - Update translations (Italian) ### Added -- Gnome 48 support \ No newline at end of file +- Gnome 48 support + +## [v52] - 2025-07-12 +### Added +- Suggestion [#30](https://gitlab.com/marcosdalvarez/thinkpad-battery-threshold-extension/-/issues/30): The notification indicating inconsistencies between the values configured in the extension and the currently applied values now has action buttons that allow you to use the current values or use the configured ones (or defaults if they have never been configured). + +### Removed +- Support for versions older than Gnome 46 is removed. + +### Other +- Refactoring some code. + +## [v53] - 2025-07-13 +### Fixed +- Issue [#30](https://gitlab.com/marcosdalvarez/thinkpad-battery-threshold-extension/-/issues/30): The notification indicating inconsistencies between configured and currently applied values is now persistent and must be dismissed using the close button or one of the action buttons. + +## [v54] - 2025-07-18 +### Other +- Update translations + +## [v55] - 2025-07-18 +### Other +- The warning message when thresholds do not match has been modified. + +## [v56] - 2025-09-30 +### Added +- Gnome 49 support \ No newline at end of file diff --git a/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/libs/indicator.js b/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/libs/indicator.js index 45d8140..91b4708 100644 --- a/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/libs/indicator.js +++ b/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/libs/indicator.js @@ -238,6 +238,13 @@ export const ThresholdIndicator = GObject.registerClass({ this._updateIndicator(); + this._notificationSource = new MessageTray.Source({ + 'title': this._name, + 'icon': getIcon('threshold-app', false) + }); + + Main.messageTray.add(this._notificationSource); + // Driver signals this._driver.connectObject( 'notify', () => this._updateIndicator(), @@ -314,6 +321,8 @@ export const ThresholdIndicator = GObject.registerClass({ ); this.connect('destroy', () => { + this._notificationSource.destroy(); + this._notificationSource = null; this.quickSettingsItems.forEach(item => item.destroy()); this._settings.disconnectObject(this); this._settings = null; @@ -324,13 +333,7 @@ export const ThresholdIndicator = GObject.registerClass({ }); // Pending changes alert - this._driver.batteries.every(battery => { - if (battery.pendingChanges && battery.isActive) { - this._notify(_('Battery Threshold'), _('The currently set thresholds do not match the configured ones'), 'threshold-active-warning', false); - return false; - } - return true; - }); + this._pendingChangesAlert(); } /** @@ -375,36 +378,20 @@ export const ThresholdIndicator = GObject.registerClass({ /** * Show notification. * - * @param {string} msg Title * @param {string} details Message * @param {string} iconName Icon name * @param {boolean} [transient=true] Transient notification */ - _notify(msg, details, iconName, transient = true) { + _notify(details, iconName, transient = true) { if (!this._settings.get_boolean('show-notifications')) return; - if (SHELL_VERSION === 45) { - const source = new MessageTray.Source(this._name); - Main.messageTray.add(source); - const notification = new MessageTray.Notification( - source, - msg, - details, - { gicon: getIcon(iconName, true) } - ); - notification.setTransient(transient); - source.showNotification(notification); - } else { - const source = new MessageTray.Source({ 'title': this._name }); - Main.messageTray.add(source); - const notification = new MessageTray.Notification({ - source: source, - title: msg, - body: details, - isTransient: transient, - gicon: getIcon(iconName, true) - }); - source.addNotification(notification); - } + const notification = new MessageTray.Notification({ + source: this._notificationSource, + title: _('Battery Threshold'), + body: details, + isTransient: transient, + gicon: getIcon(iconName, true) + }); + this._notificationSource.addNotification(notification); } /** @@ -413,7 +400,7 @@ export const ThresholdIndicator = GObject.registerClass({ * @param {string} message Message */ _notifyError(message) { - this._notify(_('Battery Threshold'), message, 'threshold-error', false); + this._notify(message, 'threshold-error', false) } /** @@ -422,7 +409,7 @@ export const ThresholdIndicator = GObject.registerClass({ * @param {string} message Message */ _notifyEnabled(message) { - this._notify(_('Battery Threshold'), message, 'threshold-active'); + this._notify(message, 'threshold-active') } /** @@ -431,6 +418,54 @@ export const ThresholdIndicator = GObject.registerClass({ * @param {string} message Message */ _notifyDisabled(message) { - this._notify(_('Battery Threshold'), message, 'threshold-inactive'); + this._notify(message, 'threshold-inactive') + } + + /** + * Show alert when are pending values changes + */ + _pendingChangesAlert() { + let notify = false; + this._driver.batteries.every(battery => { + if (battery.pendingChanges && battery.isActive) { + notify = true; + } + return true; + }); + + if (notify) { + let message = _(`The currently configured thresholds don't match those set on the system.`); + if (SHELL_VERSION >= 48) { + // TRANSLATORS: The strings "" and "" are part of the markup language and indicate that the text between the tags will be rendered in "bold" + // TRANSLATORS: This chain joins another so it is a good idea to leave a space in front of it. + // TRANSLATORS: "Preserve battery health" is an option in Gnome settings. + message += _(` Is the Preserve battery health option enabled in Gnome settings? This mode restores its own values.`); + } + + const notification = new MessageTray.Notification({ + source: this._notificationSource, + title: _('Battery Threshold'), + body: message, + gicon: getIcon('threshold-active-warning', true), + resident: true, + urgency: MessageTray.Urgency.CRITICAL, + 'use-body-markup': true + }); + notification.addAction(_('Keep detected'), () => { + this._driver.batteries.every(battery => { + if (battery.pendingChanges && battery.isActive) { + this._settings.set_int(`start-${battery.name.toLowerCase()}`, battery.startValue); + this._settings.set_int(`end-${battery.name.toLowerCase()}`, battery.endValue); + } + return true; + }); + notification.destroy(); + }); + notification.addAction(_('Set configured'), () => { + this._driver.enableAll(); + notification.destroy(); + }); + this._notificationSource.addNotification(notification); + } } }); \ No newline at end of file diff --git a/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/de/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo b/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/de/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo index 7da4eace04972a4f578f70e7b25af4d97d60ad52..bf72382abc049cd23636839b13228c4127ef097c 100644 GIT binary patch delta 1140 zcmXxkJ7`l;9LMp0$W7H~)27y@Hm0`HlD4Q#(np$Bu%dm?_!uH$MDaCO5F~>}a1iTIi-PDWXm$M;~A{(em0I0o?{`f(EV{9CNX zcev6lXFnGk=5RN}jat+KG3>=5?8Y%nVG+A<4wqmnm5fs{m8Fo0ZL{0Y;4=DIT#iR^ z1)g5GpEJ8iV=V(?sD(n1G_Ei(g44Jio5=Sto#-giF^yq76(s*r8kZT+um1r?@D=j0Z&U+V!XDhlfi~bJBv!kPn&>{V zS$ly)IE~t2Bj>Rd`!S2-xDRJAMdnk7co(iQaBh{^aV#UBnrIZ;Fo#O{J=Blp4eDs- zkYl$1uMBHh9jdEG=y{HU(*{sT9& BYf%6I delta 1305 zcmXxjUr19?9Ki8ooB5~AHZ8UJ=NgSkNdC>arC|R^&5H1$j7V%dx=Y&~YriKt(^0hl09MKFn+*6^il62Okh7gM+sQWxp4f-jgnvu@>31m zWFu`Tl?fnwQTy^9MXA6kY{n=y;&m7G_t2SR!iVoszJfnkhqW9aT@}RrIE3ApK?C0) zIjbd7+% zl+ur)yhKwdCB1|4lFcJIsJHp?7nI5@=lz8&vw9qxF#Fxn06YZMwF$jNwpZlCHKUb;8z0(l%o;rY$oRA*g8^VQpm> UE9y%uWB%!BozUj2ztZja3;U0q#{d8T diff --git a/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/es/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo b/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/es/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo index 7aae3ff12319415ba4519fc704b315a53343175b..8089d91b3775c80e11841ecbb8bc71b0f1fcd303 100644 GIT binary patch delta 1839 zcmYk+TWB0r9LMpKo2}UCL6pYrNk<6MN0Aen@q5WJ@c7!c5}}E z|DQ8i%AM=2thUy_U}$-IhkC6sld_%*?WqQ1PT|wI8P|}Hxxi&RUc@V~jf>`YVi#KM z#c|w*k7FaAK|W@gOS>@@^BOm8OuU!+CGKGSGirlBaS$_`j5&z+-~cXSKfaHA%o>*_ z{3{*T5v>Bspw{1(jyv&6#@(1~GF-(}QoJHvS3s<3D%=_foeBoWpTk!ArO$ zW6V5ei2h+*LY4Rz?8G(PgKd;W0UknC;(lal6OfNBw5ZqAL9W>TI2;a6|RX zBIfZ7cHwt8j2G}u>}S;naRJBi2i(V_*~KbLj1QBxkKdpY>LI%QIEef36k2=<73c@3 z-&KC(hUCmD60G?n{i1<-sS?e|KFR$dJV3vlt`n_=w75#D>~5f6-bNUxI(fSOo%GOk zZpbOwt5@&;00T9ZSxqNc&#;@`M^{sTb@YSuTKYy)2CAOgP3t6&MbFlz;|=<`xiuZA z!q?Jw>;2ckP}{psQZ~+&8KQFzlQx*Tfu3P59o&dKjpP7kQO{Mc9WPDt2q8J7k~h-a zq8r+6^bYn<-g!+JdpNRj(b=J?;rq%ia^-nvr@T0JdS=sU|YamdA%;>d=N26o z4K=k*N1U6rzKdNUcK+G?rb~^5FgQ^}ImnT;tLDiv8^4yQ6sJb?X)4(!A$;cG@G6LTRNMT$Zm_)_g>a zKJnBkihAGEd{WAd;a`7=Fyl;BC+fP>EX2-eUa#~|LuLVS-K@eAtyWh};@ zSY%Af9_7Lm^KB{Cq812Y2cE|koWXX?;9>OS8pEGyckD*yG^bGW^*Q}v%%?ww1(?81 zn6kfT{Tp0VFffB!_!TPi3|8S++=^??xQ}vdr(cQMX$O{J6nEn_+=5TgkFQY+XRr}J zq1MYKs|MCLHC&v=0X&P3QOEHc*RX;5O<{mp25}x$(hY25FBW1owxSZdh^oLOGKIO0 zn{gJE*aKuQ<^`$><_#C`T*fRQ$(hUCrGLDNJMb3jzGseUY^MJfmFO>2#p-?89fwf! z^rM}S<0Pt5H=X`dALqY~fkg&R;Aae>MZJ&X5Nd&WR07MWiC3KdA5?;?sIxC63my+s zj=HZJbp&;&BM706^bD$U@j~ja4CfeV!sn>|67Ix*sEkXQr5l5&36fZgcaY7S1=O?i z0ojB3jv@SuHQ35|9K}IAhWBv*mr`74=bgM0bsWJJoTmShvV^gjS+$e9*nkhQ4nLxW zE?yZWScST;3t7|jB2$|S&Uh46fhlAedy}esN)JXQafndndN+0Udk9Ua@={&9>FM52 z93)ikPD15YBOg<4Uu6?&;aU}JB;14+-$$%BCC6*5=RbS4P1t7lvLD*5o@zCnm42Mo zo1TdZr*i;;(93EvnVhzV* mBV(5)Cn8}h9*ZQ>1qFTH^bcRmosRl@UFl5GIrpQo63>4V{eWBm diff --git a/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/it/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo b/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/it/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo index a249e0e267b84f15a3e4d5bca5debc5ab29fd90a..02ef3edf2c171bb3ee2797af1f30fa1448fece05 100644 GIT binary patch delta 1141 zcmXZcT}V@59LMqh@~nKxmo3}Owcg0)1Z|tHxeUq+b5z4>AQ`=2bybMqg%pSb3F+NVHXu8L=e{Zx1EFMe4e-SJpbqaocX=$ZD;1p|Mi&V@Ld%Tu6D0kHAay?OYjI_FRsQRw|y8R)K6dnFQX41U@bmFjemvBxQOe_ z^7f-rFo)hC9WAH@Vz?UzaTm^D8cUeOU$_RNJY<{)Q&}3B*!H^h9M(`D!8$yPYjM2X zpEsMLu$hJ#)WUaAk(Y2AKF22f=C=RC7V19IqMdeNE1twnco7@$Ci?LnYT**b@d;|Z z-xy6BG!>QjDT#`*15}ku2Ld>cvUa4yLgiXR#4KBQe-AYMdH%l+~!fwjf=W z#`Ty%1$wHH^FK^sf`&slkIFz3`OatnDzN*giDyw~JcpY25$ZdAjoRrVGKDRnj_?mE zV|7%zFn}Q(KpokrkNme&n4&=w+(q88qB~##b;cjux}O8p*>$2al|_v|j(YzB9>q%- z!54T0m$4uBv+W_giv48%%_xOw8d}NAIlP5R`3gqS%NMx=ccMPdVICWB43*+5s8rrY z*03TfV^2{#e;Fuztvb-AACjikMUREcrAiW#l$DfNVZ;fAd)ywSJHefD>tzbpoRCld wDU<_U9o+H4Lnl<=b)yf7TSonpai*2W3=h5&!@I delta 1300 zcmYMzTSyd97{Kwf?xs&X;jJe!>ly&G(lRj?J{|QBK;6HJHS$cpcZ{L#)8(C<`xR zJFcLtSIn;3SYI_#Ie;heAl^qw$4|^+8}YkfIBdZvavHL5lACb zs2f;@9?Hhid=sr@`8VyCbb4Gf|eApVlOIXar~4ax++kTsN#1j_pglw7yu+viYn zcnKv^vnb;qq5S?O9>pbW#2QX{1P8DmXK)nXWvC2NY2ZK6PYRNFnf4sEf1ztUC7#M2qki-Q6gX<%jBXaDe%7e`$BuD$Rbi?(z;yj z-^shFOQ_ntVJ%oEe>^FYgih`rY2-_rcSQ>Z~X(tRvH*DRqT|F6fW0Ulodd#-Q;}hwW zY3R0PI`dyj{*(-kn7U(6B;uwXb=`C{kz_7Yk0+;W$Bk06Y>OYJQgLU>whY^{^{9S6 QZ6*@`=VRFX`%1t6FGA&-NdN!< diff --git a/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/pt/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo b/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/pt/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo index da9e2efb98682087896b5a1b55c95c8b7d8bf53e..66a4e7a32f13801b2418af80251082ac00173e5b 100644 GIT binary patch delta 2369 zcmZ{kTWnNS6oz*zlu}wK1;q=`o6kb51>%YQZ?7 zG5Dxyh|z=yLV}VQHKW7_e6cTv!~_jdG||NPV0`jHF;NWhTl-9bXxKUXd}rU*TKivX z=G>ACx$=)K(+(@zJ@ke2##*Iz!hdeyMSEzvQuS~U@~9oWZi2gE9Sp1UV{jSc=V1># z0q4SRVFUaX%Kks#e0T}YQ>v_*ndL*Z!3A&)6bFyMb+8Eg;X80G{0{cPc{7yaQG>ji z;G@;?9*AvKgkrZ;9Up`<86SeP;Onpv|LRC}!zs9!g%6NzM%y#yuT*I=1TskiwMo`j#*DD?p( zI2Ex=q&xs6H3uQ;t2d$SKMGgEci|>@0m=>a92bk~g<@v_E`ozlE?R`Qz(aG;|2963 zF(HzF2JeRF;VRgI-s|BeDAK+RC7{!gN1fp%4!(q<#5YiG{u7jae?#u#@lg4w_(OI5_v-v?t}DfOCzSI~KuN^`$QE@B z%Ec;B9G`_7;P+7MFDR2B`RQ$d1MmRc3D3ZJq@o$`#HiZv{xm!RMf&Mj?SM^i1zZP3 zQVS(jWhlzL0WqbHLb<@lP|lx)qEPv3KJeoX%LXYBsrF8~L@c)#sU%u4DC(f9Ym&>m z=sCI=lbcC>NRuF>`lU&VSJUPHrH9U6jQa&F&+f*ECQ{%EzOWsIp53Z zQczP(6x7v$sM1T9d`s)5OKPUcfF}Pb($>(|tL;j)yCFG*q{Zb8QCwX}F}VVQB6AmA zniOgE57HH$o8;A3d4F1CZPR9JM|Hs_HlNtS#HV$a8}eZ=>=o09;YTyhEizG}$Bds^ z%|h%IEDO5e#b&S1ju+}*EW4HJ5uJ=gHXaH6LUt(DCbHT-lNw(qA**(3{u*noQ|4OL z5F6q|eE!D}W0Pnv{(lr@;$c1rvMw4(f*2~kF0Q_;?rNcRflP?&(?A(?9WB!-BSljhBSMxPHLuonaaqy$0{otx70RoH9=ydYT`{HtfaH=tC@d)80<>}iSQ5Y{k8T(|cci?MDM zn|nRqOXN(e+MaEjGI+fx(ozNbT7vT-TYwuI#3p65zQ6m4Yul0^ooiZrW= zA;uJJiH%tem`K~0thqq1sSS<{DREnN(#5uzdLnKnP2~JKHKaP6OXDN| zj;WQ8QD;oWS2;mQWQ#B)Dzq`BMWW^v4J2-~FbHYU zr9}`Sv>YE!rif+*mn;3Hgz@4fz2+{yV@jA4+Q*W+Fc;9=DLC$I=l zVWBa$IhSgfdECH-1=Ildu^nGw3kG<)4dd91vzUp?o)3^)&12-n=Bao739~u>f;spD zgZRt6ZX4t0EoF2BPy^SXW**1w*oXNz?e$;6jhtUct#k!9;Wyld3RfPKVFA{o299GC z4`CzPc#!eU5{+s6gM(->U4`roR^cjEqMuF;T#Z`cKFq~_)PTdt9E^oaq;VE`rKw}N zicB*q!X3!sO&{8N;24bt9Ks&FikkUH~Fqi>K*evc^WO@UnNqEz|^VBR_MOLkORsa{3N6@y}R}AucKv zQB=fwQJd{77UP_E{RV0e-3t+aJ-9}PLLDN}%6&6xB|XR`Gk~2qhI?=kyYV|Jg|$3% z5*JYs4HCXOEW#R$qarnmO2Hf|g*R;)n%N5K!DmS7+@f<8cT=UBZdw#-#&tK5HWrI_ zSFMTbU#o>Ey!uP)-71=lN`xAwD*xKt_6`mz%F`~ll}bf}*A~@O%~qwBsud`_Diu_v zP(^zpN>yr<#u&AU$|u47Hh^1{5=EWwO^c~d^_etOsI|eAbLB@VXrZ!y{uhO_G`T+` znC1*-{&mh|J$L%E&nLqW4>?1Gzz;uPHf^*PE7nnIHE#6$L+?&cX}H%3{ms IER@9l0Zp5KA^-pY diff --git a/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/pt_BR/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo b/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/pt_BR/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo index 91b30591b8a42a9f9a768d3d9abac577bebb70a9..ad5242638dd6c0f98741a615392a2088b180eedf 100644 GIT binary patch delta 1140 zcmX}sUr1A77{~Evc{bCUx@B#()*nfxrnD`Wn~S7ER#*g%Bq7P_t}YUxkctMwt8OHg zcwbO-RWPUqbz$K}1kr_E6-GrDUKB!6H~stmwnGQc`+5JI^S;mfyk~yz`P5xl3OcjK zwU>J{_b-oG9^chbaCLaiR%0jfXGw|;m_{ESbNfdyM*ActaT){o2pjPQ>iI=%#kaW5 ztY9m(iaCsi7zm>lh+{wIa1RzSgB48SH>}4_3Ynl_D$5`f+ko57V*~9`T!UwEEncXO z7tF3w*-A$dweT%eb_K|P2bCNh+Q|fk&a8+!(^(wE2dEc+xQ2O13-zORbQrbZIBG)^ zsH3@$+R!5I#}>{fkHZ-B@NJA!xkg8Y-^2)}*Vj@#gI%=eT%Vy*_yrYMJ*z4sZO9b1 z6B)7r)KMKrWp1prTsPFN-;oYd7Xucp)@n1Qs7JWtrBNpm?R7^qN0M8o^8YH`a3TTy wqtNH8OA#hYPo0QAU2WGsi%jXW)91;SqTY~acRA&qcgnqu^9|*6>yuUg0D$9YV*mgE delta 1295 zcmXxjT}TvB6u|MbI%-yCtCp2oqa{ixspZF-NlHN`(SuS!ku1Bjxv;wvJG(&-x%6hx zL%B)OlhM~xAG8n!A%n*>4;1z|)`1clL4(*LZ}Ff+e<@64Qg?zy{*O-s$Gk7dTB zaO~r%<}&g`hVXknH;%3XkyYqJPU+{i5f5P@j=19?Y@i>(HoS&je1)s=9qRj^u>!wg zxkxHEN<%7mT8WLQ6YR%sJdPbWfj-P)JLVUOaEi~h4~Z!QsPT@v{Qwrz591nia4n{C z&zb)+jcp7}picY*HS;Xi;d@+<%kFq7<=8~O7ImfFxCNuQ6~}QM-p4Y0iaK!?TX6w( zz9O<}VSZ_#F^DJd2;M>6j$gQpE!6KE?jp(v-a{>EAH0C`bGe~lBmAAB%H&FvlAyt>>sPE5U6TU{>n%}4uYbsqSZ7*t^ zK{Rm~b;U{CjFYI9epJf-Yh#XqUi^TaSWUh6;xKB7ub?J0iyAoV_TQi;_}1MA;-p!-#?IIq;Wz-K3@K6n*PBf0X zkn5-uK15y6H0sv;MO{!G`_hM}aR{eUH2P^QVVQ^3^WPYwe|Uq)G0dWt+$8!=Y;+w$ zE#(+$f;UhrlR-ks3*=LoNB#Z_Y6X8F)8wkA&(mM?d+Iea-CsR;E;YH-F>1VcXM^QeWfLR(Wvt34_EhE4^6l&{lKUy(Lb&py1Cuy1*6l`lP)Q!^z6yh z7rZolfn+>x#S)S8reh_{#Aw`dM(s$@F@v@lvlC|2p9qXHZkYi)77Cw9#;u@f$1ErF zsd%oq&oLw6XgFaxrazJNN1}wX%%Bwt$HGC|F=Mm0Z9ZfQ=d2wIT2a%_=>JH5Udh}o HpU(RSU-q8> diff --git a/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/ta/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo b/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/locale/ta/LC_MESSAGES/thinkpad-battery-threshold@marcosdalvarez.org.mo new file mode 100644 index 0000000000000000000000000000000000000000..87bbf261fe54a204e844cdbfc1742ccfd9616304 GIT binary patch literal 344 zcmYL@u};G<5Qd9j%E*k62R1mMTQFh>G>A%sR8c^J?V22kA+;m>g2;pP^>`L8OZ!Wo zEZzOKzrW+7?M!kYoCs&ap>QEgiG@>H-pDz1c3FA%MHR!chBxxTII9)6#(wu$!y1{% zkHD>`(7LV$`em|HOUqkWGbMH>!p#dAVLo(KZ7%1SR1{E9)%nW+IDGw#?GK z{rvJedT>@e<@vFf|5>cB`VNh~RaJ{V5Z}F)j}Y&Blg1}`NNwe6V;imFwc%*?53H4C AOaK4? literal 0 HcmV?d00001 diff --git a/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/metadata.json b/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/metadata.json index 9bd2545..31d0fcf 100644 --- a/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/metadata.json +++ b/gnome/.local/share/gnome-shell/extensions/thinkpad-battery-threshold@marcosdalvarez.org/metadata.json @@ -5,12 +5,12 @@ "name": "Thinkpad Battery Threshold", "settings-schema": "org.gnome.shell.extensions.thinkpad-battery-threshold", "shell-version": [ - "45", "46", "47", - "48" + "48", + "49" ], "url": "https://gitlab.com/marcosdalvarez/thinkpad-battery-threshold-extension", "uuid": "thinkpad-battery-threshold@marcosdalvarez.org", - "version": 51 + "version": 55 } \ No newline at end of file