Build preferences from UI file

This commit is contained in:
Romain
2020-08-03 20:11:47 +00:00
parent 7440cec8ff
commit e477be9ae6
14 changed files with 3485 additions and 1518 deletions
+2 -2
View File
@@ -31,9 +31,9 @@ build: build-clean
--extra-source=./compat.js \ --extra-source=./compat.js \
--extra-source=./config.js \ --extra-source=./config.js \
--extra-source=./convenience.js \ --extra-source=./convenience.js \
--extra-source=./prefs.ui \
--extra-source=./utils.js \ --extra-source=./utils.js \
--extra-source=./modules/ \ --extra-source=./modules/ \
--extra-source=./preferences/ \
--extra-source=./schemas/ \ --extra-source=./schemas/ \
--podir=./po/ \ --podir=./po/ \
--gettext-domain=$(UUID) \ --gettext-domain=$(UUID) \
@@ -85,7 +85,7 @@ pot:
--package-name="$(NAME)" \ --package-name="$(NAME)" \
--package-version="$(VERSION)" \ --package-version="$(VERSION)" \
--output=./src/po/$(UUID).pot \ --output=./src/po/$(UUID).pot \
./src/*.js ./src/**/*.js ./src/**/*.xml ./src/*.js ./src/**/*.js ./src/**/*.xml ./src/*.ui
sed -i '1,4s/SOME DESCRIPTIVE TITLE./$(NAME)/g' ./src/po/$(UUID).pot sed -i '1,4s/SOME DESCRIPTIVE TITLE./$(NAME)/g' ./src/po/$(UUID).pot
sed -i '1,4s/YEAR/$(COPYRIGHT_YEAR)/' ./src/po/$(UUID).pot sed -i '1,4s/YEAR/$(COPYRIGHT_YEAR)/' ./src/po/$(UUID).pot
sed -i "1,4s/THE PACKAGE'S COPYRIGHT HOLDER/$(AUTHOR_NAME)/" ./src/po/$(UUID).pot sed -i "1,4s/THE PACKAGE'S COPYRIGHT HOLDER/$(AUTHOR_NAME)/" ./src/po/$(UUID).pot
+285 -205
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Night Theme Switcher 7\n" "Project-Id-Version: Night Theme Switcher 7\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-15 17:50+0200\n" "POT-Creation-Date: 2020-08-03 20:16+0200\n"
"PO-Revision-Date: 2020-06-15 17:56+0200\n" "PO-Revision-Date: 2020-08-03 20:18+0200\n"
"Last-Translator: Romain Vigier <romain@romainvigier.fr>\n" "Last-Translator: Romain Vigier <romain@romainvigier.fr>\n"
"Language-Team: French - France <romain@romainvigier.fr>\n" "Language-Team: French - France <romain@romainvigier.fr>\n"
"Language: fr_FR\n" "Language: fr_FR\n"
@@ -18,7 +18,15 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1)\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n"
"X-Generator: Gtranslator 3.36.0\n" "X-Generator: Gtranslator 3.36.0\n"
#: src/modules/GtkThemer.js:175 #: src/prefs.js:212 src/prefs.ui:644
msgid "Choose"
msgstr "Choisir"
#: src/prefs.js:324
msgid "Default"
msgstr "Par défaut"
#: src/modules/GtkThemer.js:176
#, javascript-format #, javascript-format
msgid "" msgid ""
"Unable to automatically detect the day and night variants for the \"%s\" GTK " "Unable to automatically detect the day and night variants for the \"%s\" GTK "
@@ -28,7 +36,7 @@ msgstr ""
"pour le thème GTK \"%s\". Veuillez les sélectionner manuellement dans les " "pour le thème GTK \"%s\". Veuillez les sélectionner manuellement dans les "
"préférences de lextension." "préférences de lextension."
#: src/modules/ShellThemer.js:182 #: src/modules/ShellThemer.js:183
#, javascript-format #, javascript-format
msgid "" msgid ""
"Unable to automatically detect the day and night variants for the \"%s\" " "Unable to automatically detect the day and night variants for the \"%s\" "
@@ -39,209 +47,11 @@ msgstr ""
"pour le thème GNOME Shell \"%s\". Veuillez les sélectionner manuellement " "pour le thème GNOME Shell \"%s\". Veuillez les sélectionner manuellement "
"dans les préférences de lextension." "dans les préférences de lextension."
#: src/preferences/Backgrounds.js:41
msgid "Backgrounds"
msgstr "Arrière-plans"
#: src/preferences/Backgrounds.js:42
msgid "You can set different backgrounds for day and night."
msgstr "Vous pouvez définir des arrière-plans diurnes et nocturnes différents."
#: src/preferences/Backgrounds.js:45
msgid "Switch backgrounds"
msgstr "Permuter les arrière-plans"
#: src/preferences/Backgrounds.js:47
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:156
msgid "Day background"
msgstr "Arrière-plan diurne"
#: src/preferences/Backgrounds.js:56
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:161
msgid "Night background"
msgstr "Arrière-plan nocturne"
#: src/preferences/Backgrounds.js:105
msgid "Select your background image"
msgstr "Sélectionnez votre image darrière-plan"
#: src/preferences/Commands.js:41
msgid "Commands"
msgstr "Commandes"
#: src/preferences/Commands.js:42
msgid ""
"You can set custom commands that will be run when the time of the day "
"changes."
msgstr ""
"Vous pouvez définir des commandes personnalisées qui seront lancées au "
"moment du changement."
#: src/preferences/Commands.js:45
msgid "Use custom commands"
msgstr "Utiliser des commandes personnalisées"
#: src/preferences/Commands.js:47 src/preferences/Schedule.js:63
msgid "Sunrise"
msgstr "Lever du soleil"
#: src/preferences/Commands.js:56 src/preferences/Schedule.js:70
msgid "Sunset"
msgstr "Coucher du soleil"
#: src/preferences/Commands.js:94
msgid "Hello sunshine!"
msgstr "Bonjour!"
#: src/preferences/Commands.js:95
msgid "Hello moonshine!"
msgstr "Bonsoir!"
#: src/preferences/CursorTheme.js:42
msgid "Cursor theme"
msgstr "Thème de curseur"
#: src/preferences/CursorTheme.js:43
msgid "You can set different cursor themes for day and night."
msgstr ""
"Vous pouvez définir des thèmes de curseurs diurnes et nocturnes différents."
#: src/preferences/CursorTheme.js:46
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:76
msgid "Switch cursor variants"
msgstr "Permuter les variantes de curseur"
#: src/preferences/CursorTheme.js:48 src/preferences/GtkTheme.js:57
#: src/preferences/IconTheme.js:48 src/preferences/ShellTheme.js:57
msgid "Day variant"
msgstr "Variante diurne"
#: src/preferences/CursorTheme.js:57 src/preferences/GtkTheme.js:64
#: src/preferences/IconTheme.js:57 src/preferences/ShellTheme.js:64
msgid "Night variant"
msgstr "Variante nocturne"
#: src/preferences/GtkTheme.js:42
msgid "GTK theme"
msgstr "Thème GTK"
#: src/preferences/GtkTheme.js:43
msgid ""
"The extension will try to automatically detect the day and night variants of "
"your GTK theme.\n"
"\n"
"If the theme you use isn't supported, please <a href=\"https://gitlab.com/"
"rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues\">submit a request</"
"a>. You can also manually set variants."
msgstr ""
"Lextension essayera de déterminer automatiquement les variantes diurnes et "
"nocturnes de votre thème GTK.\n"
"\n"
"Si le thème que vous utilisez nest pas pris en charge, merci d<a href="
"\"https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues"
"\">ouvrir une demande</a>. Vous pouvez aussi sélectionner manuellement les "
"variantes."
#: src/preferences/GtkTheme.js:46
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:6 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:6
#: src/prefs.ui:755
msgid "Switch GTK variants" msgid "Switch GTK variants"
msgstr "Permuter les variantes GTK" msgstr "Permuter les variantes GTK"
#: src/preferences/GtkTheme.js:48 src/preferences/ShellTheme.js:48
msgid "Manual variants"
msgstr "Variantes manuelles"
#: src/preferences/IconTheme.js:42
msgid "Icon theme"
msgstr "Thème dicônes"
#: src/preferences/IconTheme.js:43
msgid "You can set different icon themes for day and night."
msgstr ""
"Vous pouvez définir des thèmes dicônes diurnes et nocturnes différents."
#: src/preferences/IconTheme.js:46
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:56
msgid "Switch icon variants"
msgstr "Permuter les variantes dicônes"
#: src/preferences/Schedule.js:41
msgid "Schedule"
msgstr "Horaires"
#: src/preferences/Schedule.js:42
msgid ""
"The extension will try to use Night Light or Location Services to "
"automatically set your current sunrise and sunset times if they are "
"enabled.\n"
"\n"
"If you prefer, you can manually choose a time source."
msgstr ""
"Sils sont activés, lextension essayera dutiliser le mode nuit ou les "
"services de localisation pour déterminer automatiquement les heures "
"actuelles de lever et de coucher du soleil.\n"
"\n"
"Si vous préférez, vous pouvez sélectionner manuellement une source "
"dhoraires."
#: src/preferences/Schedule.js:45
msgid "Automatic time source"
msgstr "Source dhoraires automatique"
#: src/preferences/Schedule.js:47
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:102
msgid "Time source"
msgstr "Source dhoraires"
#: src/preferences/Schedule.js:56
msgid "On-demand shortcut"
msgstr "Raccourci à la demande"
#: src/preferences/Schedule.js:115
msgid "Night Light"
msgstr "Mode nuit"
#: src/preferences/Schedule.js:132
msgid "Location Services"
msgstr "Services de localisation"
#: src/preferences/Schedule.js:150
msgid "Manual schedule"
msgstr "Horaire manuel"
#: src/preferences/Schedule.js:168
msgid "On-demand"
msgstr "À la demande"
#: src/preferences/ShellTheme.js:42
msgid "Shell theme"
msgstr "Thème du shell"
#: src/preferences/ShellTheme.js:43
msgid ""
"The extension will try to automatically detect the day and night variants of "
"your GNOME Shell theme.\n"
"\n"
"If the theme you use isn't supported, please <a href=\"https://gitlab.com/"
"rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues\">submit a request</"
"a>. You can also manually set variants."
msgstr ""
"Lextension essayera de déterminer automatiquement les variantes diurnes et "
"nocturnes de votre thème GNOME Shell.\n"
"\n"
"Si le thème que vous utilisez nest pas pris en charge, merci d<a href="
"\"https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues"
"\">ouvrir une demande</a>. Vous pouvez aussi sélectionner manuellement les "
"variantes."
#: src/preferences/ShellTheme.js:46
msgid "Switch Shell variants"
msgstr "Permuter les variantes Shell"
#: src/preferences/ShellTheme.js:121
msgid "Default"
msgstr "Par défaut"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:7 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:7
msgid "Enable GTK variants switching" msgid "Enable GTK variants switching"
msgstr "Activer le changement de variantes GTK" msgstr "Activer le changement de variantes GTK"
@@ -318,6 +128,11 @@ msgstr "Utiliser des variantes shell manuelles"
msgid "Disable automatic shell theme variants detection" msgid "Disable automatic shell theme variants detection"
msgstr "Désactiver la détection automatique des variantes du thème shell" msgstr "Désactiver la détection automatique des variantes du thème shell"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:56
#: src/prefs.ui:1443
msgid "Switch icon variants"
msgstr "Permuter les variantes dicônes"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:57 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:57
msgid "Enable icon variants switching" msgid "Enable icon variants switching"
msgstr "Activer le changement de variantes dicônes" msgstr "Activer le changement de variantes dicônes"
@@ -346,6 +161,11 @@ msgstr "Thème dicônes original"
msgid "The icon theme to restore when the extension is disabled" msgid "The icon theme to restore when the extension is disabled"
msgstr "Le thème dicônes à restaurer quand lextension est désactivée" msgstr "Le thème dicônes à restaurer quand lextension est désactivée"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:76
#: src/prefs.ui:1689
msgid "Switch cursor variants"
msgstr "Permuter les variantes de curseur"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:77 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:77
msgid "Enable cursor variants switching" msgid "Enable cursor variants switching"
msgstr "Activer le changement de variantes de curseur" msgstr "Activer le changement de variantes de curseur"
@@ -374,6 +194,10 @@ msgstr "Thème de curseurs original"
msgid "The cursor theme to restore when the extension is disabled" msgid "The cursor theme to restore when the extension is disabled"
msgstr "Le thème de curseurs à restaurer quand lextension est désactivée" msgstr "Le thème de curseurs à restaurer quand lextension est désactivée"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:102
msgid "Time source"
msgstr "Source dhoraires"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:103 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:103
msgid "The source used to check current time" msgid "The source used to check current time"
msgstr "Source utilisée pour vérifier les horaires" msgstr "Source utilisée pour vérifier les horaires"
@@ -427,6 +251,7 @@ msgid "Commands will be spawned on time change"
msgstr "Les commandes seront lancées au changement dhoraire" msgstr "Les commandes seront lancées au changement dhoraire"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:141 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:141
#: src/prefs.ui:2308
msgid "Sunrise command" msgid "Sunrise command"
msgstr "Commande du lever de soleil" msgstr "Commande du lever de soleil"
@@ -435,6 +260,7 @@ msgid "The command to spawn at sunrise"
msgstr "La commande à lancer quand le soleil se lève" msgstr "La commande à lancer quand le soleil se lève"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:146 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:146
#: src/prefs.ui:2367
msgid "Sunset command" msgid "Sunset command"
msgstr "Commande du coucher de soleil" msgstr "Commande du coucher de soleil"
@@ -450,16 +276,270 @@ msgstr "Activer les arrière-plans"
msgid "Background will be changed on time change" msgid "Background will be changed on time change"
msgstr "Larrière-plan changera au changement dhoraire" msgstr "Larrière-plan changera au changement dhoraire"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:156
#: src/prefs.ui:2022
msgid "Day background"
msgstr "Arrière-plan diurne"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:157 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:157
msgid "Path to the day background" msgid "Path to the day background"
msgstr "Chemin vers larrière-plan diurne" msgstr "Chemin vers larrière-plan diurne"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:161
#: src/prefs.ui:2082
msgid "Night background"
msgstr "Arrière-plan nocturne"
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:162 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:162
msgid "Path to the night background" msgid "Path to the night background"
msgstr "Chemin vers larrière-plan nocturne" msgstr "Chemin vers larrière-plan nocturne"
#~ msgid "Manual time source" #: src/prefs.ui:58
#~ msgstr "Source dhoraires manuelle" msgid "Press your keyboard shortcut..."
msgstr "Pressez votre raccourci clavier…"
#: src/prefs.ui:72 src/prefs.ui:629
msgid "Keyboard shortcut"
msgstr "Raccourci clavier"
#: src/prefs.ui:75
msgid "Cancel"
msgstr "Annuler"
#: src/prefs.ui:159
msgid "Automatic time source"
msgstr "Source dhoraires automatique"
#: src/prefs.ui:172
msgid ""
"<small>The extension will try to use Night Light or Location Services to "
"automatically set your current sunrise and sunset times if they are enabled. "
"If you prefer, you can manually choose a time source.</small>"
msgstr ""
"<small>Sils sont activés, lextension tentera dutiliser le mode nuit ou "
"les services de localisation pour déterminer automatiquement les heures de "
"lever et de coucher du soleil. Si vous préférez, vous pouvez choisir "
"manuellement une source dhoraires.</small>"
#: src/prefs.ui:236
msgid "Manual time source"
msgstr "Source dhoraires manuelle"
#: src/prefs.ui:256
msgid "Night Light"
msgstr "Mode nuit"
#: src/prefs.ui:271
msgid "Location Services"
msgstr "Services de localisation"
#: src/prefs.ui:286
msgid "Manual schedule"
msgstr "Horaire manuel"
#: src/prefs.ui:301 src/prefs.ui:590
msgid "On-demand"
msgstr "À la demande"
#: src/prefs.ui:343
msgid "Manual schedule times"
msgstr "Horaires manuels"
#: src/prefs.ui:382
msgid "Sunrise"
msgstr "Lever du soleil"
#: src/prefs.ui:418 src/prefs.ui:522
msgid ":"
msgstr ":"
#: src/prefs.ui:486
msgid "Sunset"
msgstr "Coucher du soleil"
#: src/prefs.ui:659
msgid "Clear"
msgstr "Effacer"
#: src/prefs.ui:707
msgid "Schedule"
msgstr "Horaires"
#: src/prefs.ui:827 src/prefs.ui:902 src/prefs.ui:1171 src/prefs.ui:1246
msgid "Manual variants"
msgstr "Variantes manuelles"
#: src/prefs.ui:840
msgid ""
"<small>You can manually set variants if the extension cannot automatically "
"detect the day and night variants of your GTK theme. Please <a href="
"\"https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues"
"\">submit a request</a> to get your theme supported.</small>"
msgstr ""
"<small>Vous pouvez manuellement définir les variants si lextension ne "
"parvient pas à déterminer les variantes diurnes et nocturnes de votre thème "
"GTK. Merci de <a href=\"https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-"
"shell-extension/-/issues\">soumettre une requête</a> pour obtenir le support "
"de votre thème.</small>"
#: src/prefs.ui:941 src/prefs.ui:1285 src/prefs.ui:1531 src/prefs.ui:1777
msgid "Day variant"
msgstr "Variante diurne"
#: src/prefs.ui:997 src/prefs.ui:1341 src/prefs.ui:1587 src/prefs.ui:1833
msgid "Night variant"
msgstr "Variante nocturne"
#: src/prefs.ui:1050
msgid "GTK theme"
msgstr "Thème GTK"
#: src/prefs.ui:1099
msgid "Switch Shell variants"
msgstr "Permuter les variantes Shell"
#: src/prefs.ui:1184
msgid ""
"<small>You can manually set variants if the extension cannot automatically "
"detect the day and night variants of your GNOME Shell theme. Please <a href="
"\"https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues"
"\">submit a request</a> to get your theme supported.</small>"
msgstr ""
"<small>Vous pouvez manuellement définir les variants si lextension ne "
"parvient pas à déterminer les variantes diurnes et nocturnes de votre thème "
"GNOME Shell. Merci de <a href=\"https://gitlab.com/rmnvgr/nightthemeswitcher-"
"gnome-shell-extension/-/issues\">soumettre une requête</a> pour obtenir le "
"support de votre thème.</small>"
#: src/prefs.ui:1394
msgid "Shell theme"
msgstr "Thème du shell"
#: src/prefs.ui:1492 src/prefs.ui:1738
msgid "Variants"
msgstr "Variantes"
#: src/prefs.ui:1640
msgid "Icon theme"
msgstr "Thème dicônes"
#: src/prefs.ui:1886
msgid "Cursor theme"
msgstr "Thème de curseur"
#: src/prefs.ui:1935
msgid "Switch backgrounds"
msgstr "Permuter les arrière-plans"
#: src/prefs.ui:1983 src/prefs.ui:2139
msgid "Backgrounds"
msgstr "Arrière-plans"
#: src/prefs.ui:2039 src/prefs.ui:2099
msgid "Select your background image"
msgstr "Sélectionnez votre image darrière-plan"
#: src/prefs.ui:2194
msgid "Run commands"
msgstr "Lancer des commandes"
#: src/prefs.ui:2207
msgid ""
"<small>You can set custom commands that will be run when the time of the day "
"changes.</small>"
msgstr ""
"<small>Vous pouvez définir des commandes personnalisées qui seront lancées "
"quand le moment du jour change.</small>"
#: src/prefs.ui:2269 src/prefs.ui:2423
msgid "Commands"
msgstr "Commandes"
#: src/prefs.ui:2324
msgid "notify-send \"Hello sunshine!\""
msgstr "notify-send \"Bonjour!\""
#: src/prefs.ui:2383
msgid "notify-send \"Hello moonshine!\""
msgstr "notify-send \"Bonsoir\""
#~ msgid "You can set different backgrounds for day and night."
#~ msgstr ""
#~ "Vous pouvez définir des arrière-plans diurnes et nocturnes différents."
#~ msgid ""
#~ "You can set custom commands that will be run when the time of the day "
#~ "changes."
#~ msgstr ""
#~ "Vous pouvez définir des commandes personnalisées qui seront lancées au "
#~ "moment du changement."
#~ msgid "Use custom commands"
#~ msgstr "Utiliser des commandes personnalisées"
#~ msgid "Hello sunshine!"
#~ msgstr "Bonjour!"
#~ msgid "Hello moonshine!"
#~ msgstr "Bonsoir!"
#~ msgid "You can set different cursor themes for day and night."
#~ msgstr ""
#~ "Vous pouvez définir des thèmes de curseurs diurnes et nocturnes "
#~ "différents."
#~ msgid ""
#~ "The extension will try to automatically detect the day and night variants "
#~ "of your GTK theme.\n"
#~ "\n"
#~ "If the theme you use isn't supported, please <a href=\"https://gitlab.com/"
#~ "rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues\">submit a "
#~ "request</a>. You can also manually set variants."
#~ msgstr ""
#~ "Lextension essayera de déterminer automatiquement les variantes diurnes "
#~ "et nocturnes de votre thème GTK.\n"
#~ "\n"
#~ "Si le thème que vous utilisez nest pas pris en charge, merci d<a href="
#~ "\"https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension/-/"
#~ "issues\">ouvrir une demande</a>. Vous pouvez aussi sélectionner "
#~ "manuellement les variantes."
#~ msgid "You can set different icon themes for day and night."
#~ msgstr ""
#~ "Vous pouvez définir des thèmes dicônes diurnes et nocturnes différents."
#~ msgid ""
#~ "The extension will try to use Night Light or Location Services to "
#~ "automatically set your current sunrise and sunset times if they are "
#~ "enabled.\n"
#~ "\n"
#~ "If you prefer, you can manually choose a time source."
#~ msgstr ""
#~ "Sils sont activés, lextension essayera dutiliser le mode nuit ou les "
#~ "services de localisation pour déterminer automatiquement les heures "
#~ "actuelles de lever et de coucher du soleil.\n"
#~ "\n"
#~ "Si vous préférez, vous pouvez sélectionner manuellement une source "
#~ "dhoraires."
#~ msgid "On-demand shortcut"
#~ msgstr "Raccourci à la demande"
#~ msgid ""
#~ "The extension will try to automatically detect the day and night variants "
#~ "of your GNOME Shell theme.\n"
#~ "\n"
#~ "If the theme you use isn't supported, please <a href=\"https://gitlab.com/"
#~ "rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues\">submit a "
#~ "request</a>. You can also manually set variants."
#~ msgstr ""
#~ "Lextension essayera de déterminer automatiquement les variantes diurnes "
#~ "et nocturnes de votre thème GNOME Shell.\n"
#~ "\n"
#~ "Si le thème que vous utilisez nest pas pris en charge, merci d<a href="
#~ "\"https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension/-/"
#~ "issues\">ouvrir une demande</a>. Vous pouvez aussi sélectionner "
#~ "manuellement les variantes."
#~ msgid "Shortcut" #~ msgid "Shortcut"
#~ msgstr "Raccourci" #~ msgstr "Raccourci"
+192 -179
View File
@@ -6,9 +6,9 @@
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Night Theme Switcher 31\n" "Project-Id-Version: Night Theme Switcher 32\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-15 17:50+0200\n" "POT-Creation-Date: 2020-08-03 20:16+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,14 +17,22 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n" "Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: src/modules/GtkThemer.js:175 #: src/prefs.js:212 src/prefs.ui:644
msgid "Choose"
msgstr ""
#: src/prefs.js:324
msgid "Default"
msgstr ""
#: src/modules/GtkThemer.js:176
#, javascript-format #, javascript-format
msgid "" msgid ""
"Unable to automatically detect the day and night variants for the \"%s\" GTK " "Unable to automatically detect the day and night variants for the \"%s\" GTK "
"theme. Please manually choose them in the extension's preferences." "theme. Please manually choose them in the extension's preferences."
msgstr "" msgstr ""
#: src/modules/ShellThemer.js:182 #: src/modules/ShellThemer.js:183
#, javascript-format #, javascript-format
msgid "" msgid ""
"Unable to automatically detect the day and night variants for the \"%s\" " "Unable to automatically detect the day and night variants for the \"%s\" "
@@ -32,185 +40,11 @@ msgid ""
"preferences." "preferences."
msgstr "" msgstr ""
#: src/preferences/Backgrounds.js:41
msgid "Backgrounds"
msgstr ""
#: src/preferences/Backgrounds.js:42
msgid "You can set different backgrounds for day and night."
msgstr ""
#: src/preferences/Backgrounds.js:45
msgid "Switch backgrounds"
msgstr ""
#: src/preferences/Backgrounds.js:47
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:156
msgid "Day background"
msgstr ""
#: src/preferences/Backgrounds.js:56
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:161
msgid "Night background"
msgstr ""
#: src/preferences/Backgrounds.js:105
msgid "Select your background image"
msgstr ""
#: src/preferences/Commands.js:41
msgid "Commands"
msgstr ""
#: src/preferences/Commands.js:42
msgid ""
"You can set custom commands that will be run when the time of the day "
"changes."
msgstr ""
#: src/preferences/Commands.js:45
msgid "Use custom commands"
msgstr ""
#: src/preferences/Commands.js:47 src/preferences/Schedule.js:63
msgid "Sunrise"
msgstr ""
#: src/preferences/Commands.js:56 src/preferences/Schedule.js:70
msgid "Sunset"
msgstr ""
#: src/preferences/Commands.js:94
msgid "Hello sunshine!"
msgstr ""
#: src/preferences/Commands.js:95
msgid "Hello moonshine!"
msgstr ""
#: src/preferences/CursorTheme.js:42
msgid "Cursor theme"
msgstr ""
#: src/preferences/CursorTheme.js:43
msgid "You can set different cursor themes for day and night."
msgstr ""
#: src/preferences/CursorTheme.js:46
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:76
msgid "Switch cursor variants"
msgstr ""
#: src/preferences/CursorTheme.js:48 src/preferences/GtkTheme.js:57
#: src/preferences/IconTheme.js:48 src/preferences/ShellTheme.js:57
msgid "Day variant"
msgstr ""
#: src/preferences/CursorTheme.js:57 src/preferences/GtkTheme.js:64
#: src/preferences/IconTheme.js:57 src/preferences/ShellTheme.js:64
msgid "Night variant"
msgstr ""
#: src/preferences/GtkTheme.js:42
msgid "GTK theme"
msgstr ""
#: src/preferences/GtkTheme.js:43
msgid ""
"The extension will try to automatically detect the day and night variants of "
"your GTK theme.\n"
"\n"
"If the theme you use isn't supported, please <a href=\"https://gitlab.com/"
"rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues\">submit a request</"
"a>. You can also manually set variants."
msgstr ""
#: src/preferences/GtkTheme.js:46
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:6 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:6
#: src/prefs.ui:755
msgid "Switch GTK variants" msgid "Switch GTK variants"
msgstr "" msgstr ""
#: src/preferences/GtkTheme.js:48 src/preferences/ShellTheme.js:48
msgid "Manual variants"
msgstr ""
#: src/preferences/IconTheme.js:42
msgid "Icon theme"
msgstr ""
#: src/preferences/IconTheme.js:43
msgid "You can set different icon themes for day and night."
msgstr ""
#: src/preferences/IconTheme.js:46
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:56
msgid "Switch icon variants"
msgstr ""
#: src/preferences/Schedule.js:41
msgid "Schedule"
msgstr ""
#: src/preferences/Schedule.js:42
msgid ""
"The extension will try to use Night Light or Location Services to "
"automatically set your current sunrise and sunset times if they are "
"enabled.\n"
"\n"
"If you prefer, you can manually choose a time source."
msgstr ""
#: src/preferences/Schedule.js:45
msgid "Automatic time source"
msgstr ""
#: src/preferences/Schedule.js:47
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:102
msgid "Time source"
msgstr ""
#: src/preferences/Schedule.js:56
msgid "On-demand shortcut"
msgstr ""
#: src/preferences/Schedule.js:115
msgid "Night Light"
msgstr ""
#: src/preferences/Schedule.js:132
msgid "Location Services"
msgstr ""
#: src/preferences/Schedule.js:150
msgid "Manual schedule"
msgstr ""
#: src/preferences/Schedule.js:168
msgid "On-demand"
msgstr ""
#: src/preferences/ShellTheme.js:42
msgid "Shell theme"
msgstr ""
#: src/preferences/ShellTheme.js:43
msgid ""
"The extension will try to automatically detect the day and night variants of "
"your GNOME Shell theme.\n"
"\n"
"If the theme you use isn't supported, please <a href=\"https://gitlab.com/"
"rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues\">submit a request</"
"a>. You can also manually set variants."
msgstr ""
#: src/preferences/ShellTheme.js:46
msgid "Switch Shell variants"
msgstr ""
#: src/preferences/ShellTheme.js:121
msgid "Default"
msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:7 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:7
msgid "Enable GTK variants switching" msgid "Enable GTK variants switching"
msgstr "" msgstr ""
@@ -287,6 +121,11 @@ msgstr ""
msgid "Disable automatic shell theme variants detection" msgid "Disable automatic shell theme variants detection"
msgstr "" msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:56
#: src/prefs.ui:1443
msgid "Switch icon variants"
msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:57 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:57
msgid "Enable icon variants switching" msgid "Enable icon variants switching"
msgstr "" msgstr ""
@@ -315,6 +154,11 @@ msgstr ""
msgid "The icon theme to restore when the extension is disabled" msgid "The icon theme to restore when the extension is disabled"
msgstr "" msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:76
#: src/prefs.ui:1689
msgid "Switch cursor variants"
msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:77 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:77
msgid "Enable cursor variants switching" msgid "Enable cursor variants switching"
msgstr "" msgstr ""
@@ -343,6 +187,10 @@ msgstr ""
msgid "The cursor theme to restore when the extension is disabled" msgid "The cursor theme to restore when the extension is disabled"
msgstr "" msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:102
msgid "Time source"
msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:103 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:103
msgid "The source used to check current time" msgid "The source used to check current time"
msgstr "" msgstr ""
@@ -396,6 +244,7 @@ msgid "Commands will be spawned on time change"
msgstr "" msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:141 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:141
#: src/prefs.ui:2308
msgid "Sunrise command" msgid "Sunrise command"
msgstr "" msgstr ""
@@ -404,6 +253,7 @@ msgid "The command to spawn at sunrise"
msgstr "" msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:146 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:146
#: src/prefs.ui:2367
msgid "Sunset command" msgid "Sunset command"
msgstr "" msgstr ""
@@ -419,10 +269,173 @@ msgstr ""
msgid "Background will be changed on time change" msgid "Background will be changed on time change"
msgstr "" msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:156
#: src/prefs.ui:2022
msgid "Day background"
msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:157 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:157
msgid "Path to the day background" msgid "Path to the day background"
msgstr "" msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:161
#: src/prefs.ui:2082
msgid "Night background"
msgstr ""
#: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:162 #: src/schemas/org.gnome.shell.extensions.nightthemeswitcher.gschema.xml:162
msgid "Path to the night background" msgid "Path to the night background"
msgstr "" msgstr ""
#: src/prefs.ui:58
msgid "Press your keyboard shortcut..."
msgstr ""
#: src/prefs.ui:72 src/prefs.ui:629
msgid "Keyboard shortcut"
msgstr ""
#: src/prefs.ui:75
msgid "Cancel"
msgstr ""
#: src/prefs.ui:159
msgid "Automatic time source"
msgstr ""
#: src/prefs.ui:172
msgid ""
"<small>The extension will try to use Night Light or Location Services to "
"automatically set your current sunrise and sunset times if they are enabled. "
"If you prefer, you can manually choose a time source.</small>"
msgstr ""
#: src/prefs.ui:236
msgid "Manual time source"
msgstr ""
#: src/prefs.ui:256
msgid "Night Light"
msgstr ""
#: src/prefs.ui:271
msgid "Location Services"
msgstr ""
#: src/prefs.ui:286
msgid "Manual schedule"
msgstr ""
#: src/prefs.ui:301 src/prefs.ui:590
msgid "On-demand"
msgstr ""
#: src/prefs.ui:343
msgid "Manual schedule times"
msgstr ""
#: src/prefs.ui:382
msgid "Sunrise"
msgstr ""
#: src/prefs.ui:418 src/prefs.ui:522
msgid ":"
msgstr ""
#: src/prefs.ui:486
msgid "Sunset"
msgstr ""
#: src/prefs.ui:659
msgid "Clear"
msgstr ""
#: src/prefs.ui:707
msgid "Schedule"
msgstr ""
#: src/prefs.ui:827 src/prefs.ui:902 src/prefs.ui:1171 src/prefs.ui:1246
msgid "Manual variants"
msgstr ""
#: src/prefs.ui:840
msgid ""
"<small>You can manually set variants if the extension cannot automatically "
"detect the day and night variants of your GTK theme. Please <a href="
"\"https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues"
"\">submit a request</a> to get your theme supported.</small>"
msgstr ""
#: src/prefs.ui:941 src/prefs.ui:1285 src/prefs.ui:1531 src/prefs.ui:1777
msgid "Day variant"
msgstr ""
#: src/prefs.ui:997 src/prefs.ui:1341 src/prefs.ui:1587 src/prefs.ui:1833
msgid "Night variant"
msgstr ""
#: src/prefs.ui:1050
msgid "GTK theme"
msgstr ""
#: src/prefs.ui:1099
msgid "Switch Shell variants"
msgstr ""
#: src/prefs.ui:1184
msgid ""
"<small>You can manually set variants if the extension cannot automatically "
"detect the day and night variants of your GNOME Shell theme. Please <a href="
"\"https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues"
"\">submit a request</a> to get your theme supported.</small>"
msgstr ""
#: src/prefs.ui:1394
msgid "Shell theme"
msgstr ""
#: src/prefs.ui:1492 src/prefs.ui:1738
msgid "Variants"
msgstr ""
#: src/prefs.ui:1640
msgid "Icon theme"
msgstr ""
#: src/prefs.ui:1886
msgid "Cursor theme"
msgstr ""
#: src/prefs.ui:1935
msgid "Switch backgrounds"
msgstr ""
#: src/prefs.ui:1983 src/prefs.ui:2139
msgid "Backgrounds"
msgstr ""
#: src/prefs.ui:2039 src/prefs.ui:2099
msgid "Select your background image"
msgstr ""
#: src/prefs.ui:2194
msgid "Run commands"
msgstr ""
#: src/prefs.ui:2207
msgid ""
"<small>You can set custom commands that will be run when the time of the day "
"changes.</small>"
msgstr ""
#: src/prefs.ui:2269 src/prefs.ui:2423
msgid "Commands"
msgstr ""
#: src/prefs.ui:2324
msgid "notify-send \"Hello sunshine!\""
msgstr ""
#: src/prefs.ui:2383
msgid "notify-send \"Hello moonshine!\""
msgstr ""
-118
View File
@@ -1,118 +0,0 @@
/*
Night Theme Switcher Gnome Shell extension
Copyright (C) 2020 Romain Vigier
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see <http s ://www.gnu.org/licenses/>.
*/
const { GdkPixbuf, Gio, Gtk } = imports.gi;
const { extensionUtils } = imports.misc;
const Me = extensionUtils.getCurrentExtension();
const compat = Me.imports.compat;
const { SettingsPage, SettingsList, SettingsListRow } = Me.imports.preferences.bases;
const Gettext = imports.gettext.domain(Me.metadata.uuid);
const _ = Gettext.gettext;
var BackgroundsPreferences = class {
constructor() {
const settings = compat.getExtensionSettings();
const label = _('Backgrounds');
const description = _('You can set different backgrounds for day and night.');
const content = new SettingsList();
content.add_row(new SettingsListRow(_('Switch backgrounds'), new BackgroundsEnabledControl()));
const dayBackgroundRow = new SettingsListRow(_('Day background'), new TimeBackgroundControl('day'));
settings.bind(
'backgrounds-enabled',
dayBackgroundRow,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(dayBackgroundRow);
const nightBackgroundRow = new SettingsListRow(_('Night background'), new TimeBackgroundControl('night'));
settings.bind(
'backgrounds-enabled',
nightBackgroundRow,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(nightBackgroundRow);
return new SettingsPage(label, description, content);
}
};
class BackgroundsEnabledControl {
constructor() {
const settings = compat.getExtensionSettings();
const toggle = new Gtk.Switch({
active: settings.get_boolean('backgrounds-enabled'),
});
settings.bind(
'backgrounds-enabled',
toggle,
'active',
Gio.SettingsBindFlags.DEFAULT
);
return toggle;
}
}
class TimeBackgroundControl {
constructor(time) {
const settings = compat.getExtensionSettings();
const filter = new Gtk.FileFilter();
filter.add_mime_type('image/jpeg');
filter.add_mime_type('image/png');
filter.add_mime_type('image/tiff');
const preview = new Gtk.Image({
pixel_size: 256,
});
const button = new Gtk.FileChooserButton({
title: _('Select your background image'),
action: Gtk.FileChooserAction.OPEN,
filter,
preview_widget: preview,
use_preview_label: false,
});
button.set_uri(settings.get_string(`background-${time}`));
button.connect('update-preview', () => {
const file = button.get_preview_filename();
const pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(file, 256, 256);
preview.set_from_pixbuf(pixbuf);
});
button.connect('file-set', () => settings.set_string(`background-${time}`, button.get_uri()));
settings.connect(`changed::background-${time}`, () => button.set_uri(settings.get_string(`background-${time}`)));
return button;
}
}
-106
View File
@@ -1,106 +0,0 @@
/*
Night Theme Switcher Gnome Shell extension
Copyright (C) 2020 Romain Vigier
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see <http s ://www.gnu.org/licenses/>.
*/
const { Gio, Gtk } = imports.gi;
const { extensionUtils } = imports.misc;
const Me = extensionUtils.getCurrentExtension();
const compat = Me.imports.compat;
const { SettingsPage, SettingsList, SettingsListRow } = Me.imports.preferences.bases;
const Gettext = imports.gettext.domain(Me.metadata.uuid);
const _ = Gettext.gettext;
var CommandsPreferences = class {
constructor() {
const settings = compat.getExtensionSettings();
const label = _('Commands');
const description = _('You can set custom commands that will be run when the time of the day changes.');
const content = new SettingsList();
content.add_row(new SettingsListRow(_('Use custom commands'), new CommandsEnabledControl()));
const dayCommandRow = new SettingsListRow(_('Sunrise'), new SuntimeCommandControl('sunrise'));
settings.bind(
'commands-enabled',
dayCommandRow,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(dayCommandRow);
const nightCommandRow = new SettingsListRow(_('Sunset'), new SuntimeCommandControl('sunset'));
settings.bind(
'commands-enabled',
nightCommandRow,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(nightCommandRow);
return new SettingsPage(label, description, content);
}
};
class CommandsEnabledControl {
constructor() {
const settings = compat.getExtensionSettings();
const toggle = new Gtk.Switch({
active: settings.get_boolean('commands-enabled'),
});
settings.bind(
'commands-enabled',
toggle,
'active',
Gio.SettingsBindFlags.DEFAULT
);
return toggle;
}
}
class SuntimeCommandControl {
constructor(suntime) {
const message = new Map([
['sunrise', _('Hello sunshine!')],
['sunset', _('Hello moonshine!')],
]);
const settings = compat.getExtensionSettings();
const entry = new Gtk.Entry({
width_request: 300,
placeholder_text: _(`notify-send "${message.get(suntime)}"`),
});
settings.bind(
`command-${suntime}`,
entry,
'text',
Gio.SettingsBindFlags.DEFAULT
);
return entry;
}
}
-102
View File
@@ -1,102 +0,0 @@
/*
Night Theme Switcher Gnome Shell extension
Copyright (C) 2020 Romain Vigier
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see <http s ://www.gnu.org/licenses/>.
*/
const { GdkPixbuf, Gio, Gtk } = imports.gi;
const { extensionUtils } = imports.misc;
const Me = extensionUtils.getCurrentExtension();
const compat = Me.imports.compat;
const { SettingsPage, SettingsList, SettingsListRow } = Me.imports.preferences.bases;
const { getInstalledCursorThemes } = Me.imports.utils;
const Gettext = imports.gettext.domain(Me.metadata.uuid);
const _ = Gettext.gettext;
var CursorThemePreferences = class {
constructor() {
const settings = compat.getExtensionSettings();
const label = _('Cursor theme');
const description = _('You can set different cursor themes for day and night.');
const content = new SettingsList();
content.add_row(new SettingsListRow(_('Switch cursor variants'), new CursorVariantsEnabledControl()));
const dayVariantRow = new SettingsListRow(_('Day variant'), new TimeCursorVariantControl('day'));
settings.bind(
'cursor-variants-enabled',
dayVariantRow,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(dayVariantRow);
const nightVariantRow = new SettingsListRow(_('Night variant'), new TimeCursorVariantControl('night'));
settings.bind(
'cursor-variants-enabled',
nightVariantRow,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(nightVariantRow);
return new SettingsPage(label, description, content);
}
};
class CursorVariantsEnabledControl {
constructor() {
const settings = compat.getExtensionSettings();
const toggle = new Gtk.Switch({
active: settings.get_boolean('cursor-variants-enabled'),
});
settings.bind(
'cursor-variants-enabled',
toggle,
'active',
Gio.SettingsBindFlags.DEFAULT
);
return toggle;
}
}
class TimeCursorVariantControl {
constructor(time) {
const settings = compat.getExtensionSettings();
const combo = new Gtk.ComboBoxText();
const themes = Array.from(getInstalledCursorThemes()).sort();
themes.forEach(theme => combo.append(theme, theme));
settings.bind(
`cursor-variant-${time}`,
combo,
'active-id',
Gio.SettingsBindFlags.DEFAULT
);
return combo;
}
}
-126
View File
@@ -1,126 +0,0 @@
/*
Night Theme Switcher Gnome Shell extension
Copyright (C) 2020 Romain Vigier
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see <http s ://www.gnu.org/licenses/>.
*/
const { Gio, Gtk } = imports.gi;
const { extensionUtils } = imports.misc;
const Me = extensionUtils.getCurrentExtension();
const compat = Me.imports.compat;
const { SettingsPage, SettingsList, SettingsListRow } = Me.imports.preferences.bases;
const { getInstalledGtkThemes } = Me.imports.utils;
const Gettext = imports.gettext.domain(Me.metadata.uuid);
const _ = Gettext.gettext;
var GtkThemePreferences = class {
constructor() {
const settings = compat.getExtensionSettings();
const label = _('GTK theme');
const description = _('The extension will try to automatically detect the day and night variants of your GTK theme.\n\nIf the theme you use isn\'t supported, please <a href="https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues">submit a request</a>. You can also manually set variants.');
const content = new SettingsList();
content.add_row(new SettingsListRow(_('Switch GTK variants'), new GtkVariantsEnabledControl()));
const manualVariantsRow = new SettingsListRow(_('Manual variants'), new ManualGtkVariantsControl());
settings.bind(
'gtk-variants-enabled',
manualVariantsRow,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(manualVariantsRow);
const dayVariantRow = new SettingsListRow(_('Day variant'), new TimeGtkVariantControl('day'));
const updateDayVariantRowSensitivity = () => dayVariantRow.set_sensitive(!!(settings.get_boolean('gtk-variants-enabled') && settings.get_boolean('manual-gtk-variants')));
settings.connect('changed::gtk-variants-enabled', updateDayVariantRowSensitivity);
settings.connect('changed::manual-gtk-variants', updateDayVariantRowSensitivity);
updateDayVariantRowSensitivity();
content.add_row(dayVariantRow);
const nightVariantRow = new SettingsListRow(_('Night variant'), new TimeGtkVariantControl('night'));
const updateNightVariantRowSensitivity = () => nightVariantRow.set_sensitive(!!(settings.get_boolean('gtk-variants-enabled') && settings.get_boolean('manual-gtk-variants')));
settings.connect('changed::gtk-variants-enabled', updateNightVariantRowSensitivity);
settings.connect('changed::manual-gtk-variants', updateNightVariantRowSensitivity);
updateNightVariantRowSensitivity();
content.add_row(nightVariantRow);
return new SettingsPage(label, description, content);
}
};
class GtkVariantsEnabledControl {
constructor() {
const settings = compat.getExtensionSettings();
const toggle = new Gtk.Switch({
active: settings.get_boolean('gtk-variants-enabled'),
});
settings.bind(
'gtk-variants-enabled',
toggle,
'active',
Gio.SettingsBindFlags.DEFAULT
);
return toggle;
}
}
class ManualGtkVariantsControl {
constructor() {
const settings = compat.getExtensionSettings();
const toggle = new Gtk.Switch({
active: false,
});
settings.bind(
'manual-gtk-variants',
toggle,
'active',
Gio.SettingsBindFlags.DEFAULT
);
return toggle;
}
}
class TimeGtkVariantControl {
constructor(time) {
const settings = compat.getExtensionSettings();
const combo = new Gtk.ComboBoxText();
const themes = Array.from(getInstalledGtkThemes()).sort();
themes.forEach(theme => combo.append(theme, theme));
settings.bind(
`gtk-variant-${time}`,
combo,
'active-id',
Gio.SettingsBindFlags.DEFAULT
);
return combo;
}
}
-102
View File
@@ -1,102 +0,0 @@
/*
Night Theme Switcher Gnome Shell extension
Copyright (C) 2020 Romain Vigier
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see <http s ://www.gnu.org/licenses/>.
*/
const { GdkPixbuf, Gio, Gtk } = imports.gi;
const { extensionUtils } = imports.misc;
const Me = extensionUtils.getCurrentExtension();
const compat = Me.imports.compat;
const { SettingsPage, SettingsList, SettingsListRow } = Me.imports.preferences.bases;
const { getInstalledIconThemes } = Me.imports.utils;
const Gettext = imports.gettext.domain(Me.metadata.uuid);
const _ = Gettext.gettext;
var IconThemePreferences = class {
constructor() {
const settings = compat.getExtensionSettings();
const label = _('Icon theme');
const description = _('You can set different icon themes for day and night.');
const content = new SettingsList();
content.add_row(new SettingsListRow(_('Switch icon variants'), new IconVariantsEnabledControl()));
const dayVariantRow = new SettingsListRow(_('Day variant'), new TimeIconVariantControl('day'));
settings.bind(
'icon-variants-enabled',
dayVariantRow,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(dayVariantRow);
const nightVariantRow = new SettingsListRow(_('Night variant'), new TimeIconVariantControl('night'));
settings.bind(
'icon-variants-enabled',
nightVariantRow,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(nightVariantRow);
return new SettingsPage(label, description, content);
}
};
class IconVariantsEnabledControl {
constructor() {
const settings = compat.getExtensionSettings();
const toggle = new Gtk.Switch({
active: settings.get_boolean('icon-variants-enabled'),
});
settings.bind(
'icon-variants-enabled',
toggle,
'active',
Gio.SettingsBindFlags.DEFAULT
);
return toggle;
}
}
class TimeIconVariantControl {
constructor(time) {
const settings = compat.getExtensionSettings();
const combo = new Gtk.ComboBoxText();
const themes = Array.from(getInstalledIconThemes()).sort();
themes.forEach(theme => combo.append(theme, theme));
settings.bind(
`icon-variant-${time}`,
combo,
'active-id',
Gio.SettingsBindFlags.DEFAULT
);
return combo;
}
}
-306
View File
@@ -1,306 +0,0 @@
/*
Night Theme Switcher Gnome Shell extension
Copyright (C) 2020 Romain Vigier
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see <http s ://www.gnu.org/licenses/>.
*/
const { Gio, GObject, Gtk } = imports.gi;
const { extensionUtils } = imports.misc;
const Me = extensionUtils.getCurrentExtension();
const compat = Me.imports.compat;
const { SettingsPage, SettingsList, SettingsListRow } = Me.imports.preferences.bases;
const Gettext = imports.gettext.domain(Me.metadata.uuid);
const _ = Gettext.gettext;
var SchedulePreferences = class {
constructor() {
const settings = compat.getExtensionSettings();
const label = _('Schedule');
const description = _('The extension will try to use Night Light or Location Services to automatically set your current sunrise and sunset times if they are enabled.\n\nIf you prefer, you can manually choose a time source.');
const content = new SettingsList();
content.add_row(new SettingsListRow(_('Automatic time source'), new ManualTimeSourceControl()));
const timeSourceRow = new SettingsListRow(_('Time source'), new TimeSourceControl());
settings.bind(
'manual-time-source',
timeSourceRow,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(timeSourceRow);
const ondemandShortcutRow = new SettingsListRow(_('On-demand shortcut'), new KeyBindingControl());
const updateOndemandShortcutRowSensitivity = () => ondemandShortcutRow.set_sensitive(!!(settings.get_boolean('manual-time-source') && settings.get_string('time-source') === 'ondemand'));
settings.connect('changed::manual-time-source', () => updateOndemandShortcutRowSensitivity());
settings.connect('changed::time-source', () => updateOndemandShortcutRowSensitivity());
updateOndemandShortcutRowSensitivity();
content.add_row(ondemandShortcutRow);
const sunriseRow = new SettingsListRow(_('Sunrise'), new SuntimeControl('sunrise'));
const updateSunriseRowSensitivity = () => sunriseRow.set_sensitive(!!(settings.get_boolean('manual-time-source') && settings.get_string('time-source') === 'schedule'));
settings.connect('changed::manual-time-source', () => updateSunriseRowSensitivity());
settings.connect('changed::time-source', () => updateSunriseRowSensitivity());
updateSunriseRowSensitivity();
content.add_row(sunriseRow);
const sunsetRow = new SettingsListRow(_('Sunset'), new SuntimeControl('sunset'));
const updateSunsetRowSensitivity = () => sunsetRow.set_sensitive(!!(settings.get_boolean('manual-time-source') && settings.get_string('time-source') === 'schedule'));
settings.connect('changed::manual-time-source', () => updateSunsetRowSensitivity());
settings.connect('changed::time-source', () => updateSunsetRowSensitivity());
updateSunsetRowSensitivity();
content.add_row(sunsetRow);
return new SettingsPage(label, description, content);
}
};
class ManualTimeSourceControl {
constructor() {
const settings = compat.getExtensionSettings();
const toggle = new Gtk.Switch({
active: false,
});
settings.bind(
'manual-time-source',
toggle,
'active',
Gio.SettingsBindFlags.INVERT_BOOLEAN
);
return toggle;
}
}
class TimeSourceControl {
constructor() {
const settings = compat.getExtensionSettings();
const colorSettings = new Gio.Settings({ schema: 'org.gnome.settings-daemon.plugins.color' });
const locationSettings = new Gio.Settings({ schema: 'org.gnome.system.location' });
const box = new Gtk.Box({
spacing: 8,
orientation: Gtk.Orientation.HORIZONTAL,
can_focus: false,
});
const nightlightRadio = new Gtk.RadioButton({
label: _('Night Light'),
active: settings.get_string('time-source') === 'nightlight',
});
nightlightRadio.connect('toggled', () => {
if (nightlightRadio.get_active())
settings.set_string('time-source', 'nightlight');
});
colorSettings.bind(
'night-light-enabled',
nightlightRadio,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
box.pack_start(nightlightRadio, false, false, 0);
const locationRadio = new Gtk.RadioButton({
label: _('Location Services'),
group: nightlightRadio,
active: settings.get_string('time-source') === 'location',
});
locationRadio.connect('toggled', () => {
if (locationRadio.get_active())
settings.set_string('time-source', 'location');
});
locationSettings.bind(
'enabled',
locationRadio,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
box.pack_start(locationRadio, false, false, 0);
const scheduleRadio = new Gtk.RadioButton({
label: _('Manual schedule'),
group: nightlightRadio,
active: settings.get_string('time-source') === 'schedule',
});
scheduleRadio.connect('toggled', () => {
if (scheduleRadio.get_active())
settings.set_string('time-source', 'schedule');
});
settings.bind(
'manual-time-source',
scheduleRadio,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
box.pack_start(scheduleRadio, false, false, 0);
const ondemandRadio = new Gtk.RadioButton({
label: _('On-demand'),
group: nightlightRadio,
active: settings.get_string('time-source') === 'ondemand',
});
ondemandRadio.connect('toggled', () => {
settings.set_string('time-source', 'ondemand');
});
settings.bind(
'manual-time-source',
ondemandRadio,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
box.pack_start(ondemandRadio, false, false, 0);
return box;
}
}
class KeyBindingControl {
constructor() {
const settings = compat.getExtensionSettings();
const KEYBINDING_KEY = 'nightthemeswitcher-ondemand-keybinding';
const COLUMN_KEY = 0;
const COLUMN_MODS = 1;
const listStore = new Gtk.ListStore();
listStore.set_column_types([GObject.TYPE_INT, GObject.TYPE_INT]);
const treeView = new Gtk.TreeView({ model: listStore });
treeView.set_headers_visible(false);
const renderer = new Gtk.CellRendererAccel({ editable: true });
const column = new Gtk.TreeViewColumn();
const iter = listStore.append();
const updateShortcutRow = accel => {
const [key, mods] = accel ? Gtk.accelerator_parse(accel) : [0, 0];
listStore.set(iter, [COLUMN_KEY, COLUMN_MODS], [key, mods]);
};
renderer.connect('accel-edited', (_renderer, _path, key, mods) => {
const accel = Gtk.accelerator_name(key, mods);
updateShortcutRow(accel);
settings.set_strv(KEYBINDING_KEY, [accel]);
});
renderer.connect('accel-cleared', () => {
updateShortcutRow(null);
settings.set_strv(KEYBINDING_KEY, []);
});
settings.connect(`changed::${KEYBINDING_KEY}`, () => {
updateShortcutRow(settings.get_strv(KEYBINDING_KEY)[0]);
});
column.pack_start(renderer, true);
column.add_attribute(renderer, 'accel-key', COLUMN_KEY);
column.add_attribute(renderer, 'accel-mods', COLUMN_MODS);
treeView.append_column(column);
updateShortcutRow(settings.get_strv(KEYBINDING_KEY)[0]);
return treeView;
}
}
class SuntimeControl {
constructor(suntime) {
const settings = compat.getExtensionSettings();
const box = new Gtk.Box({
spacing: 8,
orientation: Gtk.Orientation.HORIZONTAL,
can_focus: false,
});
const time = settings.get_double(`schedule-${suntime}`);
const hours = Math.trunc(time);
const minutes = Math.round((time - hours) * 60);
const hoursSpin = new Gtk.SpinButton({
adjustment: new Gtk.Adjustment({
value: hours,
lower: 0,
upper: 23,
step_increment: 1,
page_increment: 0,
page_size: 0,
}),
value: hours,
numeric: true,
wrap: true,
orientation: Gtk.Orientation.VERTICAL,
});
hoursSpin.connect('output', () => {
const text = hoursSpin.adjustment.value.toString().padStart(2, '0');
hoursSpin.set_text(text);
return true;
});
hoursSpin.connect('value-changed', () => {
const oldTime = settings.get_double(`schedule-${suntime}`);
const oldHour = Math.trunc(oldTime);
const newMinutes = oldTime - oldHour;
const newTime = hoursSpin.value + newMinutes;
settings.set_double(`schedule-${suntime}`, newTime);
});
const separator = new Gtk.Label({ label: ':' });
const minutesSpin = new Gtk.SpinButton({
adjustment: new Gtk.Adjustment({
value: minutes,
lower: 0,
upper: 59,
step_increment: 1,
page_increment: 0,
page_size: 0,
}),
value: minutes,
numeric: true,
wrap: true,
orientation: Gtk.Orientation.VERTICAL,
});
minutesSpin.connect('output', () => {
const text = minutesSpin.adjustment.value.toString().padStart(2, '0');
minutesSpin.set_text(text);
return true;
});
minutesSpin.connect('value-changed', () => {
const hour = Math.trunc(settings.get_double(`schedule-${suntime}`));
const newMinutes = minutesSpin.value / 60;
const newTime = hour + newMinutes;
settings.set_double(`schedule-${suntime}`, newTime);
});
box.pack_start(hoursSpin, false, false, 0);
box.pack_start(separator, false, false, 0);
box.pack_start(minutesSpin, false, false, 0);
return box;
}
}
-126
View File
@@ -1,126 +0,0 @@
/*
Night Theme Switcher Gnome Shell extension
Copyright (C) 2020 Romain Vigier
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see <http s ://www.gnu.org/licenses/>.
*/
const { Gio, Gtk } = imports.gi;
const { extensionUtils } = imports.misc;
const Me = extensionUtils.getCurrentExtension();
const compat = Me.imports.compat;
const { SettingsPage, SettingsList, SettingsListRow } = Me.imports.preferences.bases;
const { getInstalledShellThemes } = Me.imports.utils;
const Gettext = imports.gettext.domain(Me.metadata.uuid);
const _ = Gettext.gettext;
var ShellThemePreferences = class {
constructor() {
const settings = compat.getExtensionSettings();
const label = _('Shell theme');
const description = _('The extension will try to automatically detect the day and night variants of your GNOME Shell theme.\n\nIf the theme you use isn\'t supported, please <a href="https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension/-/issues">submit a request</a>. You can also manually set variants.');
const content = new SettingsList();
content.add_row(new SettingsListRow(_('Switch Shell variants'), new ShellVariantsEnabledControl()));
const manualVariantsRow = new SettingsListRow(_('Manual variants'), new ManualShellVariantsControl());
settings.bind(
'shell-variants-enabled',
manualVariantsRow,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(manualVariantsRow);
const dayVariantRow = new SettingsListRow(_('Day variant'), new TimeShellVariantControl('day'));
const updateDayVariantRowSensitivity = () => dayVariantRow.set_sensitive(!!(settings.get_boolean('shell-variants-enabled') && settings.get_boolean('manual-shell-variants')));
settings.connect('changed::shell-variants-enabled', updateDayVariantRowSensitivity);
settings.connect('changed::manual-shell-variants', updateDayVariantRowSensitivity);
updateDayVariantRowSensitivity();
content.add_row(dayVariantRow);
const nightVariantRow = new SettingsListRow(_('Night variant'), new TimeShellVariantControl('night'));
const updateNightVariantRowSensitivity = () => nightVariantRow.set_sensitive(!!(settings.get_boolean('shell-variants-enabled') && settings.get_boolean('manual-shell-variants')));
settings.connect('changed::shell-variants-enabled', updateNightVariantRowSensitivity);
settings.connect('changed::manual-shell-variants', updateNightVariantRowSensitivity);
updateNightVariantRowSensitivity();
content.add_row(nightVariantRow);
return new SettingsPage(label, description, content);
}
};
class ShellVariantsEnabledControl {
constructor() {
const settings = compat.getExtensionSettings();
const toggle = new Gtk.Switch({
active: settings.get_boolean('shell-variants-enabled'),
});
settings.bind(
'shell-variants-enabled',
toggle,
'active',
Gio.SettingsBindFlags.DEFAULT
);
return toggle;
}
}
class ManualShellVariantsControl {
constructor() {
const settings = compat.getExtensionSettings();
const toggle = new Gtk.Switch({
active: false,
});
settings.bind(
'manual-shell-variants',
toggle,
'active',
Gio.SettingsBindFlags.DEFAULT
);
return toggle;
}
}
class TimeShellVariantControl {
constructor(time) {
const settings = compat.getExtensionSettings();
const combo = new Gtk.ComboBoxText();
const themes = Array.from(getInstalledShellThemes()).sort();
themes.forEach(theme => combo.append(theme, theme === '' ? _('Default') : theme));
settings.bind(
`shell-variant-${time}`,
combo,
'active-id',
Gio.SettingsBindFlags.DEFAULT
);
return combo;
}
}
-109
View File
@@ -1,109 +0,0 @@
/*
Night Theme Switcher Gnome Shell extension
Copyright (C) 2020 Romain Vigier
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see <http s ://www.gnu.org/licenses/>.
*/
const { Gtk } = imports.gi;
var SettingsPage = class {
constructor(label, description, contentWidget) {
this.label = new Gtk.Label({
label,
});
this.page = new Gtk.Box({
orientation: Gtk.Orientation.VERTICAL,
spacing: 30,
margin_top: 30,
margin_end: 36,
margin_start: 36,
margin_bottom: 36,
valign: Gtk.Align.START,
halign: Gtk.Align.CENTER,
});
const descriptionWidget = new Gtk.Label({
label: description,
use_markup: true,
width_request: 600,
max_width_chars: 60,
wrap: true,
justify: Gtk.Justification.LEFT,
halign: Gtk.Align.START,
});
this.page.pack_start(descriptionWidget, false, false, 0);
this.page.pack_start(contentWidget, false, false, 0);
}
};
var SettingsList = class {
constructor() {
const frame = new Gtk.Frame({
can_focus: false,
});
const list = new Gtk.ListBox({
border_width: 0,
margin: 0,
can_focus: false,
selection_mode: Gtk.SelectionMode.NONE,
});
frame.add(list);
frame.add_row = widget => {
if (list.get_children().length > 0) {
const separator = new Gtk.Separator({
orientation: Gtk.Orientation.VERTICAL,
can_focus: false,
});
list.add(separator);
}
list.add(widget);
};
return frame;
}
};
var SettingsListRow = class {
constructor(label, widget) {
const row = new Gtk.Box({
margin: 16,
spacing: 30,
orientation: Gtk.Orientation.HORIZONTAL,
can_focus: false,
});
const labelWidget = new Gtk.Label({
label,
halign: Gtk.Align.START,
});
row.pack_start(labelWidget, true, true, 0);
widget.set_halign(Gtk.Align.END);
row.pack_start(widget, false, false, 0);
return row;
}
};
+531 -36
View File
@@ -18,19 +18,15 @@ this program. If not, see <http s ://www.gnu.org/licenses/>.
'use strict'; 'use strict';
const { Gtk } = imports.gi; const { Gdk, GdkPixbuf, Gio, GLib, GObject, Gtk } = imports.gi;
const { extensionUtils } = imports.misc; const { extensionUtils } = imports.misc;
const Me = extensionUtils.getCurrentExtension(); const Me = extensionUtils.getCurrentExtension();
const compat = Me.imports.compat; const { compat, utils } = Me.imports;
const { BackgroundsPreferences } = Me.imports.preferences.Backgrounds;
const { CommandsPreferences } = Me.imports.preferences.Commands; const Gettext = imports.gettext.domain(Me.metadata.uuid);
const { CursorThemePreferences } = Me.imports.preferences.CursorTheme; const _ = Gettext.gettext;
const { GtkThemePreferences } = Me.imports.preferences.GtkTheme;
const { IconThemePreferences } = Me.imports.preferences.IconTheme;
const { SchedulePreferences } = Me.imports.preferences.Schedule;
const { ShellThemePreferences } = Me.imports.preferences.ShellTheme;
function init() { function init() {
@@ -38,32 +34,531 @@ function init() {
} }
function buildPrefsWidget() { function buildPrefsWidget() {
const prefsWidget = new Gtk.Notebook({ const prefsWidget = new Preferences();
visible: true,
});
const schedulePreferences = new SchedulePreferences();
prefsWidget.append_page(schedulePreferences.page, schedulePreferences.label);
const gtkThemePreferences = new GtkThemePreferences();
prefsWidget.append_page(gtkThemePreferences.page, gtkThemePreferences.label);
const shellThemePreferences = new ShellThemePreferences();
prefsWidget.append_page(shellThemePreferences.page, shellThemePreferences.label);
const iconThemePreferences = new IconThemePreferences();
prefsWidget.append_page(iconThemePreferences.page, iconThemePreferences.label);
const cursorThemePreferences = new CursorThemePreferences();
prefsWidget.append_page(cursorThemePreferences.page, cursorThemePreferences.label);
const backgroundsPreferences = new BackgroundsPreferences();
prefsWidget.append_page(backgroundsPreferences.page, backgroundsPreferences.label);
const commandsPreferences = new CommandsPreferences();
prefsWidget.append_page(commandsPreferences.page, commandsPreferences.label);
prefsWidget.show_all();
return prefsWidget; return prefsWidget;
} }
const Preferences = class {
constructor() {
this.settings = compat.getExtensionSettings();
this.colorSettings = new Gio.Settings({ schema: 'org.gnome.settings-daemon.plugins.color' });
this.locationSettings = new Gio.Settings({ schema: 'org.gnome.system.location' });
this.builder = new Gtk.Builder();
this.builder.set_translation_domain(Me.metadata.uuid);
this.builder.add_from_file(GLib.build_filenamev([Me.path, 'prefs.ui']));
this.widget = this.builder.get_object('prefs_notebook');
this._connectSchedulePreferences();
this._connectGtkThemePreferences();
this._connectShellThemePreferences();
this._connectIconThemePreferences();
this._connectCursorThemePreferences();
this._connectBackgroundPreferences();
this._connectCommandsPreferences();
this._connectOndemandKeyboardShortcutDialog();
return this.widget;
}
_connectSchedulePreferences() {
const scheduleAutoSwitch = this.builder.get_object('prefs_schedule_auto_switch');
this.settings.bind(
'manual-time-source',
scheduleAutoSwitch,
'active',
Gio.SettingsBindFlags.INVERT_BOOLEAN
);
const scheduleManualTimeSource = this.builder.get_object('prefs_schedule_manual_time_source');
this.settings.bind(
'manual-time-source',
scheduleManualTimeSource,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
const scheduleManualTimeSourceNightlightRadio = this.builder.get_object('prefs_schedule_manual_time_source_nightlight_radio');
const updateScheduleManualTimeSourceNightlightRadioActivity = () => {
scheduleManualTimeSourceNightlightRadio.active = this.settings.get_string('time-source') === 'nightlight';
};
this.settings.connect('changed::time-source', () => updateScheduleManualTimeSourceNightlightRadioActivity());
this.colorSettings.bind(
'night-light-enabled',
scheduleManualTimeSourceNightlightRadio,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
scheduleManualTimeSourceNightlightRadio.connect('toggled', () => {
if (scheduleManualTimeSourceNightlightRadio.active)
this.settings.set_string('time-source', 'nightlight');
});
updateScheduleManualTimeSourceNightlightRadioActivity();
const scheduleManualTimeSourceLocationRadio = this.builder.get_object('prefs_schedule_manual_time_source_location_radio');
const updateScheduleManualTimeSourceLocationRadioActivity = () => {
scheduleManualTimeSourceLocationRadio.active = this.settings.get_string('time-source') === 'location';
};
this.settings.connect('changed::time-source', () => updateScheduleManualTimeSourceLocationRadioActivity());
this.locationSettings.bind(
'enabled',
scheduleManualTimeSourceLocationRadio,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
scheduleManualTimeSourceLocationRadio.connect('toggled', () => {
if (scheduleManualTimeSourceLocationRadio.active)
this.settings.set_string('time-source', 'location');
});
updateScheduleManualTimeSourceLocationRadioActivity();
const scheduleManualTimeSourceManualRadio = this.builder.get_object('prefs_schedule_manual_time_source_manual_radio');
const updateScheduleManualTimeSourceManualRadioActivity = () => {
scheduleManualTimeSourceManualRadio.active = this.settings.get_string('time-source') === 'schedule';
};
this.settings.connect('changed::time-source', () => updateScheduleManualTimeSourceManualRadioActivity());
scheduleManualTimeSourceManualRadio.connect('toggled', () => {
if (scheduleManualTimeSourceManualRadio.active)
this.settings.set_string('time-source', 'schedule');
});
updateScheduleManualTimeSourceManualRadioActivity();
const scheduleManualTimeSourceOndemandRadio = this.builder.get_object('prefs_schedule_manual_time_source_ondemand_radio');
const updateScheduleManualTimeSourceOndemandRadioActivity = () => {
scheduleManualTimeSourceOndemandRadio.active = this.settings.get_string('time-source') === 'ondemand';
};
this.settings.connect('changed::time-source', () => updateScheduleManualTimeSourceOndemandRadioActivity());
scheduleManualTimeSourceOndemandRadio.connect('toggled', () => {
if (scheduleManualTimeSourceOndemandRadio.active)
this.settings.set_string('time-source', 'ondemand');
});
updateScheduleManualTimeSourceOndemandRadioActivity();
const scheduleManualScheduleTimes = this.builder.get_object('prefs_schedule_manual_schedule_times');
const updateScheduleManualScheduleTimesVisibility = () => {
scheduleManualScheduleTimes.visible = this.settings.get_string('time-source') === 'schedule';
};
this.settings.bind(
'manual-time-source',
scheduleManualScheduleTimes,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
this.settings.connect('changed::time-source', () => updateScheduleManualScheduleTimesVisibility());
updateScheduleManualScheduleTimesVisibility();
const scheduleManualScheduleTimesSunriseHoursSpin = this.builder.get_object('prefs_schedule_manual_schedule_times_sunrise_hours_spin');
scheduleManualScheduleTimesSunriseHoursSpin.value = Math.trunc(this.settings.get_double('schedule-sunrise'));
scheduleManualScheduleTimesSunriseHoursSpin.connect('output', () => {
const text = scheduleManualScheduleTimesSunriseHoursSpin.adjustment.value.toString().padStart(2, '0');
scheduleManualScheduleTimesSunriseHoursSpin.set_text(text);
return true;
});
scheduleManualScheduleTimesSunriseHoursSpin.connect('value-changed', () => {
const oldTime = this.settings.get_double('schedule-sunrise');
const oldHour = Math.trunc(oldTime);
const newMinutes = oldTime - oldHour;
const newTime = scheduleManualScheduleTimesSunriseHoursSpin.value + newMinutes;
this.settings.set_double('schedule-sunrise', newTime);
});
const scheduleManualScheduleTimesSunriseMinutesSpin = this.builder.get_object('prefs_schedule_manual_schedule_times_sunrise_minutes_spin');
scheduleManualScheduleTimesSunriseMinutesSpin.value = Math.round((this.settings.get_double('schedule-sunrise') - Math.trunc(this.settings.get_double('schedule-sunrise'))) * 60);
scheduleManualScheduleTimesSunriseMinutesSpin.connect('output', () => {
const text = scheduleManualScheduleTimesSunriseMinutesSpin.adjustment.value.toString().padStart(2, '0');
scheduleManualScheduleTimesSunriseMinutesSpin.set_text(text);
return true;
});
scheduleManualScheduleTimesSunriseMinutesSpin.connect('value-changed', () => {
const hour = Math.trunc(this.settings.get_double('schedule-sunrise'));
const newMinutes = scheduleManualScheduleTimesSunriseMinutesSpin.value / 60;
const newTime = hour + newMinutes;
this.settings.set_double('schedule-sunrise', newTime);
});
const scheduleManualScheduleTimesSunsetHoursSpin = this.builder.get_object('prefs_schedule_manual_schedule_times_sunset_hours_spin');
scheduleManualScheduleTimesSunsetHoursSpin.value = Math.trunc(this.settings.get_double('schedule-sunset'));
scheduleManualScheduleTimesSunsetHoursSpin.connect('output', () => {
const text = scheduleManualScheduleTimesSunsetHoursSpin.adjustment.value.toString().padStart(2, '0');
scheduleManualScheduleTimesSunsetHoursSpin.set_text(text);
return true;
});
scheduleManualScheduleTimesSunsetHoursSpin.connect('value-changed', () => {
const oldTime = this.settings.get_double('schedule-sunset');
const oldHour = Math.trunc(oldTime);
const newMinutes = oldTime - oldHour;
const newTime = scheduleManualScheduleTimesSunsetHoursSpin.value + newMinutes;
this.settings.set_double('schedule-sunset', newTime);
});
const scheduleManualScheduleTimesSunsetMinutesSpin = this.builder.get_object('prefs_schedule_manual_schedule_times_sunset_minutes_spin');
scheduleManualScheduleTimesSunsetMinutesSpin.value = Math.round((this.settings.get_double('schedule-sunset') - Math.trunc(this.settings.get_double('schedule-sunset'))) * 60);
scheduleManualScheduleTimesSunsetMinutesSpin.connect('output', () => {
const text = scheduleManualScheduleTimesSunsetMinutesSpin.adjustment.value.toString().padStart(2, '0');
scheduleManualScheduleTimesSunsetMinutesSpin.set_text(text);
return true;
});
scheduleManualScheduleTimesSunsetMinutesSpin.connect('value-changed', () => {
const hour = Math.trunc(this.settings.get_double('schedule-sunset'));
const newMinutes = scheduleManualScheduleTimesSunsetMinutesSpin.value / 60;
const newTime = hour + newMinutes;
this.settings.set_double('schedule-sunset', newTime);
});
const scheduleOndemand = this.builder.get_object('prefs_schedule_ondemand');
const updateScheduleOndemandVisibility = () => {
scheduleOndemand.visible = this.settings.get_string('time-source') === 'ondemand';
};
this.settings.bind(
'manual-time-source',
scheduleOndemand,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
this.settings.connect('changed::time-source', () => updateScheduleOndemandVisibility());
updateScheduleOndemandVisibility();
const scheduleOndemandShortcutButton = this.builder.get_object('prefs_schedule_ondemand_shortcut_button');
const updateScheduleOndemandShortcutButtonLabel = () => {
const label = this.settings.get_strv('nightthemeswitcher-ondemand-keybinding')[0];
scheduleOndemandShortcutButton.label = label || _('Choose');
};
this.settings.connect('changed::nightthemeswitcher-ondemand-keybinding', () => updateScheduleOndemandShortcutButtonLabel());
scheduleOndemandShortcutButton.connect('clicked', () => {
const dialog = this.builder.get_object('ondemand_keyboard_shortcut_dialog');
dialog.set_transient_for(this.widget.get_toplevel());
dialog.show_all();
});
updateScheduleOndemandShortcutButtonLabel();
const scheduleOndemandShortcutClearButton = this.builder.get_object('prefs_schedule_ondemand_shortcut_clear_button');
scheduleOndemandShortcutClearButton.connect('clicked', () => {
this.settings.set_strv('nightthemeswitcher-ondemand-keybinding', ['']);
});
const updateScheduleOndemandShortcutClearButtonVisibility = () => {
scheduleOndemandShortcutClearButton.visible = !!this.settings.get_strv('nightthemeswitcher-ondemand-keybinding')[0];
};
this.settings.connect('changed::nightthemeswitcher-ondemand-keybinding', () => updateScheduleOndemandShortcutClearButtonVisibility());
updateScheduleOndemandShortcutClearButtonVisibility();
}
_connectGtkThemePreferences() {
const gtkThemeSwitchVariantsSwitch = this.builder.get_object('prefs_gtk_theme_switch_variants_switch');
this.settings.bind(
'gtk-variants-enabled',
gtkThemeSwitchVariantsSwitch,
'active',
Gio.SettingsBindFlags.DEFAULT
);
const gtkThemeManualVariants = this.builder.get_object('prefs_gtk_theme_manual_variants');
this.settings.bind(
'gtk-variants-enabled',
gtkThemeManualVariants,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
const gtkThemeManualVariantsSwitch = this.builder.get_object('prefs_gtk_theme_manual_variants_switch');
this.settings.bind(
'manual-gtk-variants',
gtkThemeManualVariantsSwitch,
'active',
Gio.SettingsBindFlags.DEFAULT
);
const gtkThemeVariants = this.builder.get_object('prefs_gtk_theme_variants');
const updateGtkThemeVariantsSensitivity = () => {
gtkThemeVariants.sensitive = !!(this.settings.get_boolean('gtk-variants-enabled') && this.settings.get_boolean('manual-gtk-variants'));
};
this.settings.connect('changed::gtk-variants-enabled', () => updateGtkThemeVariantsSensitivity());
this.settings.connect('changed::manual-gtk-variants', () => updateGtkThemeVariantsSensitivity());
updateGtkThemeVariantsSensitivity();
const gtkThemeVariantsDayCombo = this.builder.get_object('prefs_gtk_theme_variants_day_combo');
const gtkThemeVariantsNightCombo = this.builder.get_object('prefs_gtk_theme_variants_night_combo');
const installedGtkThemes = Array.from(utils.getInstalledGtkThemes()).sort();
installedGtkThemes.forEach(theme => {
gtkThemeVariantsDayCombo.append(theme, theme);
gtkThemeVariantsNightCombo.append(theme, theme);
});
this.settings.bind(
'gtk-variant-day',
gtkThemeVariantsDayCombo,
'active-id',
Gio.SettingsBindFlags.DEFAULT
);
this.settings.bind(
'gtk-variant-night',
gtkThemeVariantsNightCombo,
'active-id',
Gio.SettingsBindFlags.DEFAULT
);
}
_connectShellThemePreferences() {
const shellThemeSwitchVariantsSwitch = this.builder.get_object('prefs_shell_theme_switch_variants_switch');
this.settings.bind(
'shell-variants-enabled',
shellThemeSwitchVariantsSwitch,
'active',
Gio.SettingsBindFlags.DEFAULT
);
const shellThemeManualVariants = this.builder.get_object('prefs_shell_theme_manual_variants');
this.settings.bind(
'shell-variants-enabled',
shellThemeManualVariants,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
const shellThemeManualVariantsSwitch = this.builder.get_object('prefs_shell_theme_manual_variants_switch');
this.settings.bind(
'manual-shell-variants',
shellThemeManualVariantsSwitch,
'active',
Gio.SettingsBindFlags.DEFAULT
);
const shellThemeVariants = this.builder.get_object('prefs_shell_theme_variants');
const updateShellThemeVariantsSensitivity = () => {
shellThemeVariants.sensitive = !!(this.settings.get_boolean('shell-variants-enabled') && this.settings.get_boolean('manual-shell-variants'));
};
this.settings.connect('changed::shell-variants-enabled', () => updateShellThemeVariantsSensitivity());
this.settings.connect('changed::manual-shell-variants', () => updateShellThemeVariantsSensitivity());
updateShellThemeVariantsSensitivity();
const shellThemeVariantsDayCombo = this.builder.get_object('prefs_shell_theme_variants_day_combo');
const shellThemeVariantsNightCombo = this.builder.get_object('prefs_shell_theme_variants_night_combo');
const installedShellThemes = Array.from(utils.getInstalledShellThemes()).sort();
installedShellThemes.forEach(theme => {
const themeName = theme === '' ? _('Default') : theme;
shellThemeVariantsDayCombo.append(theme, themeName);
shellThemeVariantsNightCombo.append(theme, themeName);
});
this.settings.bind(
'shell-variant-day',
shellThemeVariantsDayCombo,
'active-id',
Gio.SettingsBindFlags.DEFAULT
);
this.settings.bind(
'shell-variant-night',
shellThemeVariantsNightCombo,
'active-id',
Gio.SettingsBindFlags.DEFAULT
);
}
_connectIconThemePreferences() {
const iconThemeSwitchVariantsSwitch = this.builder.get_object('prefs_icon_theme_switch_variants_switch');
this.settings.bind(
'icon-variants-enabled',
iconThemeSwitchVariantsSwitch,
'active',
Gio.SettingsBindFlags.DEFAULT
);
const iconThemeVariants = this.builder.get_object('prefs_icon_theme_variants');
this.settings.bind(
'icon-variants-enabled',
iconThemeVariants,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
const installedIconThemes = Array.from(utils.getInstalledIconThemes()).sort();
const iconThemeVariantsDayCombo = this.builder.get_object('prefs_icon_theme_variants_day_combo');
const iconThemeVariantsNightCombo = this.builder.get_object('prefs_icon_theme_variants_night_combo');
installedIconThemes.forEach(theme => {
iconThemeVariantsDayCombo.append(theme, theme);
iconThemeVariantsNightCombo.append(theme, theme);
});
this.settings.bind(
'icon-variant-day',
iconThemeVariantsDayCombo,
'active-id',
Gio.SettingsBindFlags.DEFAULT
);
this.settings.bind(
'icon-variant-night',
iconThemeVariantsNightCombo,
'active-id',
Gio.SettingsBindFlags.DEFAULT
);
}
_connectCursorThemePreferences() {
const cursorThemeSwitchVariantsSwitch = this.builder.get_object('prefs_cursor_theme_switch_variants_switch');
this.settings.bind(
'cursor-variants-enabled',
cursorThemeSwitchVariantsSwitch,
'active',
Gio.SettingsBindFlags.DEFAULT
);
const cursorThemeVariants = this.builder.get_object('prefs_cursor_theme_variants');
this.settings.bind(
'cursor-variants-enabled',
cursorThemeVariants,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
const installedCursorThemes = Array.from(utils.getInstalledCursorThemes()).sort();
const cursorThemeVariantsDayCombo = this.builder.get_object('prefs_cursor_theme_variants_day_combo');
const cursorThemeVariantsNightCombo = this.builder.get_object('prefs_cursor_theme_variants_night_combo');
installedCursorThemes.forEach(theme => {
cursorThemeVariantsDayCombo.append(theme, theme);
cursorThemeVariantsNightCombo.append(theme, theme);
});
this.settings.bind(
'cursor-variant-day',
cursorThemeVariantsDayCombo,
'active-id',
Gio.SettingsBindFlags.DEFAULT
);
this.settings.bind(
'cursor-variant-night',
cursorThemeVariantsNightCombo,
'active-id',
Gio.SettingsBindFlags.DEFAULT
);
}
_connectBackgroundPreferences() {
const backgroundSwitchBackgroundsSwitch = this.builder.get_object('prefs_backgrounds_switch_backgrounds_switch');
this.settings.bind(
'backgrounds-enabled',
backgroundSwitchBackgroundsSwitch,
'active',
Gio.SettingsBindFlags.DEFAULT
);
const backgroundsBackgrounds = this.builder.get_object('prefs_backgrounds_backgrounds');
this.settings.bind(
'backgrounds-enabled',
backgroundsBackgrounds,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
const backgroundsBackgroundsDayBackgroundButton = this.builder.get_object('prefs_backgrounds_backgrounds_day_background_button');
const dayBackgroundPreview = this.builder.get_object('day_background_preview');
const updateBackgroundsBackgroundsDayBackgroundButtonUri = () => {
backgroundsBackgroundsDayBackgroundButton.set_uri(this.settings.get_string('background-day'));
};
this.settings.connect('changed::background-day', () => updateBackgroundsBackgroundsDayBackgroundButtonUri());
backgroundsBackgroundsDayBackgroundButton.connect('update-preview', () => {
const file = backgroundsBackgroundsDayBackgroundButton.get_preview_filename();
const pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(file, 256, 256);
dayBackgroundPreview.set_from_pixbuf(pixbuf);
});
backgroundsBackgroundsDayBackgroundButton.connect('file-set', () => {
this.settings.set_string('background-day', backgroundsBackgroundsDayBackgroundButton.get_uri());
});
updateBackgroundsBackgroundsDayBackgroundButtonUri();
const backgroundsBackgroundsNightBackgroundButton = this.builder.get_object('prefs_backgrounds_backgrounds_night_background_button');
const nightBackgroundPreview = this.builder.get_object('night_background_preview');
const updateBackgroundsBackgroundsNightBackgroundButtonUri = () => {
backgroundsBackgroundsNightBackgroundButton.set_uri(this.settings.get_string('background-night'));
};
this.settings.connect('changed::background-night', () => updateBackgroundsBackgroundsNightBackgroundButtonUri());
backgroundsBackgroundsNightBackgroundButton.connect('update-preview', () => {
const file = backgroundsBackgroundsNightBackgroundButton.get_preview_filename();
const pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(file, 256, 256);
nightBackgroundPreview.set_from_pixbuf(pixbuf);
});
backgroundsBackgroundsNightBackgroundButton.connect('file-set', () => {
this.settings.set_string('background-night', backgroundsBackgroundsNightBackgroundButton.get_uri());
});
updateBackgroundsBackgroundsNightBackgroundButtonUri();
}
_connectCommandsPreferences() {
const commandsSwitchCommandsSwitch = this.builder.get_object('prefs_commands_switch_commands_switch');
this.settings.bind(
'commands-enabled',
commandsSwitchCommandsSwitch,
'active',
Gio.SettingsBindFlags.DEFAULT
);
const commandsCommands = this.builder.get_object('prefs_commands_commands');
this.settings.bind(
'commands-enabled',
commandsCommands,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
const commandsCommandsSunriseCommandEntry = this.builder.get_object('prefs_commands_commands_sunrise_command_entry');
this.settings.bind(
'command-sunrise',
commandsCommandsSunriseCommandEntry,
'text',
Gio.SettingsBindFlags.DEFAULT
);
const commandsCommandsSunsetCommandEntry = this.builder.get_object('prefs_commands_commands_sunset_command_entry');
this.settings.bind(
'command-sunset',
commandsCommandsSunsetCommandEntry,
'text',
Gio.SettingsBindFlags.DEFAULT
);
}
_connectOndemandKeyboardShortcutDialog() {
const ondemandKeyboardShortcutDialog = this.builder.get_object('ondemand_keyboard_shortcut_dialog');
ondemandKeyboardShortcutDialog.connect('key-press-event', (_widget, event) => {
const state = event.get_state()[1];
let mask = state & Gtk.accelerator_get_default_mod_mask();
mask &= ~Gdk.ModifierType.LOCK_MASK;
const keycode = event.get_keycode()[1];
const eventKeyval = event.get_keyval()[1];
let keyval = Gdk.keyval_to_lower(eventKeyval);
if (mask === 0 && keyval === Gdk.KEY_Escape) {
ondemandKeyboardShortcutDialog.visible = false;
return Gdk.EVENT_STOP;
}
if (keyval === Gdk.KEY_ISO_Left_Tab)
keyval = Gdk.KEY_Tab;
if (keyval !== eventKeyval)
mask |= Gdk.ModifierType.SHIFT_MASK;
if (keyval === Gdk.KEY_Sys_Req && (mask & Gdk.ModifierType.MOD1_MASK) !== 0)
keyval = Gdk.KEY_Print;
if (
!utils.isBindingValid({ mask, keycode, keyval }) ||
!utils.isAccelValid({ mask, keyval })
)
return Gdk.EVENT_STOP;
const binding = Gtk.accelerator_name_with_keycode(
null,
keyval,
keycode,
mask
);
this.settings.set_strv('nightthemeswitcher-ondemand-keybinding', [binding]);
ondemandKeyboardShortcutDialog.visible = false;
return Gdk.EVENT_STOP;
});
const ondemandKeyboardShortcutDialogCancelButton = this.builder.get_object('ondemand_keyboard_shortcut_dialog_cancel_button');
ondemandKeyboardShortcutDialogCancelButton.connect('clicked', () => {
ondemandKeyboardShortcutDialog.visible = false;
});
}
};
+2431
View File
File diff suppressed because it is too large Load Diff
+44 -1
View File
@@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program. If not, see <http s ://www.gnu.org/licenses/>. this program. If not, see <http s ://www.gnu.org/licenses/>.
*/ */
const { Gio, GLib, Gtk } = imports.gi; const { Gdk, Gio, GLib, Gtk } = imports.gi;
const { extensionUtils } = imports.misc; const { extensionUtils } = imports.misc;
const Me = extensionUtils.getCurrentExtension(); const Me = extensionUtils.getCurrentExtension();
@@ -210,3 +210,46 @@ function applyShellStylesheet(stylesheet) {
imports.ui.main.loadTheme(); imports.ui.main.loadTheme();
logDebug('Shell stylesheet applied.'); logDebug('Shell stylesheet applied.');
} }
function isKeyvalForbidden(keyval) {
const forbiddenKeyvals = [
Gdk.KEY_Home,
Gdk.KEY_Left,
Gdk.KEY_Up,
Gdk.KEY_Right,
Gdk.KEY_Down,
Gdk.KEY_Page_Up,
Gdk.KEY_Page_Down,
Gdk.KEY_End,
Gdk.KEY_Tab,
Gdk.KEY_KP_Enter,
Gdk.KEY_Return,
Gdk.KEY_Mode_switch,
];
return forbiddenKeyvals.includes(keyval);
}
function isBindingValid({ mask, keycode, keyval }) {
if ((mask === 0 || mask === Gdk.SHIFT_MASK) && keycode !== 0) {
if (
(keyval >= Gdk.KEY_a && keyval <= Gdk.KEY_z) ||
(keyval >= Gdk.KEY_A && keyval <= Gdk.KEY_Z) ||
(keyval >= Gdk.KEY_0 && keyval <= Gdk.KEY_9) ||
(keyval >= Gdk.KEY_kana_fullstop && keyval <= Gdk.KEY_semivoicedsound) ||
(keyval >= Gdk.KEY_Arabic_comma && keyval <= Gdk.KEY_Arabic_sukun) ||
(keyval >= Gdk.KEY_Serbian_dje && keyval <= Gdk.KEY_Cyrillic_HARDSIGN) ||
(keyval >= Gdk.KEY_Greek_ALPHAaccent && keyval <= Gdk.KEY_Greek_omega) ||
(keyval >= Gdk.KEY_hebrew_doublelowline && keyval <= Gdk.KEY_hebrew_taf) ||
(keyval >= Gdk.KEY_Thai_kokai && keyval <= Gdk.KEY_Thai_lekkao) ||
(keyval >= Gdk.KEY_Hangul_Kiyeog && keyval <= Gdk.KEY_Hangul_J_YeorinHieuh) ||
(keyval === Gdk.KEY_space && mask === 0) ||
isKeyvalForbidden(keyval)
)
return false;
}
return true;
}
function isAccelValid({ mask, keyval }) {
return Gtk.accelerator_valid(keyval, mask) || (keyval === Gdk.KEY_Tab && mask !== 0);
}