diff --git a/ui/po/breezydesktop.pot b/ui/po/breezydesktop.pot index 7f853e4..2c451ec 100644 --- a/ui/po/breezydesktop.pot +++ b/ui/po/breezydesktop.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-21 13:39-0700\n" +"POT-Creation-Date: 2024-10-22 13:27-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,13 +17,13 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/connecteddevice.py:20 +#: src/connecteddevice.py:17 msgid "" "Switches your glasses into side-by-side mode and doubles the width of the " "display." msgstr "" -#: src/connecteddevice.py:21 +#: src/connecteddevice.py:18 msgid "This feature is not currently supported for your device." msgstr "" @@ -365,6 +365,24 @@ msgstr "" msgid "Breezy Desktop was unable to detect any supported XR devices." msgstr "" +#: src/gtk/no-device.ui:23 +msgid "Auto-enable XR effect" +msgstr "" + +#: src/gtk/no-device.ui:24 +msgid "" +"Automatically enable the Breezy Desktop XR effect when supported glasses are " +"connected." +msgstr "" + +#: src/gtk/no-device.ui:34 +msgid "Start in widescreen mode" +msgstr "" + +#: src/gtk/no-device.ui:35 +msgid "Widescreen mode is not supported for all glasses." +msgstr "" + #: src/gtk/no-driver.ui:13 msgid "No driver running" msgstr "" diff --git a/ui/po/de.po b/ui/po/de.po index b82a330..415ed1f 100644 --- a/ui/po/de.po +++ b/ui/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-21 12:23-0700\n" +"POT-Creation-Date: 2024-10-22 13:27-0700\n" "PO-Revision-Date: 2024-08-02 20:54-0700\n" "Last-Translator: \n" "Language-Team: German \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/connecteddevice.py:20 +#: src/connecteddevice.py:17 msgid "" "Switches your glasses into side-by-side mode and doubles the width of the " "display." @@ -25,7 +25,7 @@ msgstr "" "Schaltet Ihre Brille in den Side-by-Side-Modus und verdoppelt die Breite des " "Displays." -#: src/connecteddevice.py:21 +#: src/connecteddevice.py:18 msgid "This feature is not currently supported for your device." msgstr "Diese Funktion wird von Ihrem Gerät derzeit nicht unterstützt." @@ -388,6 +388,26 @@ msgstr "Kein Gerät verbunden" msgid "Breezy Desktop was unable to detect any supported XR devices." msgstr "Breezy Desktop konnte kein unterstütztes XR-Gerät erkennen." +#: src/gtk/no-device.ui:23 +#, fuzzy +msgid "Auto-enable XR effect" +msgstr "XR-Effekt" + +#: src/gtk/no-device.ui:24 +msgid "" +"Automatically enable the Breezy Desktop XR effect when supported glasses are " +"connected." +msgstr "" + +#: src/gtk/no-device.ui:34 +#, fuzzy +msgid "Start in widescreen mode" +msgstr "Breitbildmodus" + +#: src/gtk/no-device.ui:35 +msgid "Widescreen mode is not supported for all glasses." +msgstr "" + #: src/gtk/no-driver.ui:13 msgid "No driver running" msgstr "Kein Treiber wird ausgeführt" diff --git a/ui/po/es.po b/ui/po/es.po index 3fcbba8..e941058 100644 --- a/ui/po/es.po +++ b/ui/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-21 12:23-0700\n" +"POT-Creation-Date: 2024-10-22 13:27-0700\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n" "Last-Translator: \n" "Language-Team: Spanish \n" @@ -17,14 +17,14 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/connecteddevice.py:20 +#: src/connecteddevice.py:17 msgid "" "Switches your glasses into side-by-side mode and doubles the width of the " "display." msgstr "" "Cambia tus gafas al modo lado a lado y duplica el ancho de la pantalla." -#: src/connecteddevice.py:21 +#: src/connecteddevice.py:18 msgid "This feature is not currently supported for your device." msgstr "Esta función no es compatible con tu dispositivo en este momento." @@ -387,6 +387,26 @@ msgstr "No hay dispositivo conectado" msgid "Breezy Desktop was unable to detect any supported XR devices." msgstr "Breezy Desktop no pudo detectar ningún dispositivo XR compatible." +#: src/gtk/no-device.ui:23 +#, fuzzy +msgid "Auto-enable XR effect" +msgstr "Efecto XR" + +#: src/gtk/no-device.ui:24 +msgid "" +"Automatically enable the Breezy Desktop XR effect when supported glasses are " +"connected." +msgstr "" + +#: src/gtk/no-device.ui:34 +#, fuzzy +msgid "Start in widescreen mode" +msgstr "Modo pantalla ancha" + +#: src/gtk/no-device.ui:35 +msgid "Widescreen mode is not supported for all glasses." +msgstr "" + #: src/gtk/no-driver.ui:13 msgid "No driver running" msgstr "No se está ejecutando ningún controlador" diff --git a/ui/po/fr.po b/ui/po/fr.po index 59e4ec4..1b1c543 100644 --- a/ui/po/fr.po +++ b/ui/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-21 12:23-0700\n" +"POT-Creation-Date: 2024-10-22 13:27-0700\n" "PO-Revision-Date: 2024-08-02 20:54-0700\n" "Last-Translator: \n" "Language-Team: French \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/connecteddevice.py:20 +#: src/connecteddevice.py:17 msgid "" "Switches your glasses into side-by-side mode and doubles the width of the " "display." @@ -25,7 +25,7 @@ msgstr "" "Basculez vos lunettes en mode Side-By-Side (Côte-à-Côte) et doublez la " "largeur de l'écran." -#: src/connecteddevice.py:21 +#: src/connecteddevice.py:18 msgid "This feature is not currently supported for your device." msgstr "" "Cette fonctionnalité n'est actuellement pas prise en charge par votre " @@ -392,6 +392,26 @@ msgstr "Aucun appareil connecté" msgid "Breezy Desktop was unable to detect any supported XR devices." msgstr "Breezy Desktop n'a pas pu détecter d'appareils XR pris en charge." +#: src/gtk/no-device.ui:23 +#, fuzzy +msgid "Auto-enable XR effect" +msgstr "Effet XR" + +#: src/gtk/no-device.ui:24 +msgid "" +"Automatically enable the Breezy Desktop XR effect when supported glasses are " +"connected." +msgstr "" + +#: src/gtk/no-device.ui:34 +#, fuzzy +msgid "Start in widescreen mode" +msgstr "Mode grand écran" + +#: src/gtk/no-device.ui:35 +msgid "Widescreen mode is not supported for all glasses." +msgstr "" + #: src/gtk/no-driver.ui:13 msgid "No driver running" msgstr "Aucun pilote en cours d'exécution" diff --git a/ui/po/it.po b/ui/po/it.po index f913be5..953e96c 100644 --- a/ui/po/it.po +++ b/ui/po/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-21 12:23-0700\n" +"POT-Creation-Date: 2024-10-22 13:27-0700\n" "PO-Revision-Date: 2024-08-02 21:14-0700\n" "Last-Translator: \n" "Language-Team: Italian \n" @@ -17,13 +17,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/connecteddevice.py:20 +#: src/connecteddevice.py:17 msgid "" "Switches your glasses into side-by-side mode and doubles the width of the " "display." msgstr "" -#: src/connecteddevice.py:21 +#: src/connecteddevice.py:18 msgid "This feature is not currently supported for your device." msgstr "" @@ -365,6 +365,24 @@ msgstr "" msgid "Breezy Desktop was unable to detect any supported XR devices." msgstr "" +#: src/gtk/no-device.ui:23 +msgid "Auto-enable XR effect" +msgstr "" + +#: src/gtk/no-device.ui:24 +msgid "" +"Automatically enable the Breezy Desktop XR effect when supported glasses are " +"connected." +msgstr "" + +#: src/gtk/no-device.ui:34 +msgid "Start in widescreen mode" +msgstr "" + +#: src/gtk/no-device.ui:35 +msgid "Widescreen mode is not supported for all glasses." +msgstr "" + #: src/gtk/no-driver.ui:13 msgid "No driver running" msgstr "" diff --git a/ui/po/ja.po b/ui/po/ja.po index 21fac02..852bcbd 100644 --- a/ui/po/ja.po +++ b/ui/po/ja.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-21 12:23-0700\n" +"POT-Creation-Date: 2024-10-22 13:27-0700\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n" "Last-Translator: \n" "Language-Team: Japanese \n" @@ -21,13 +21,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: src/connecteddevice.py:20 +#: src/connecteddevice.py:17 msgid "" "Switches your glasses into side-by-side mode and doubles the width of the " "display." msgstr "メガネを3Dモードに切り替え、表示の幅を2倍にします。" -#: src/connecteddevice.py:21 +#: src/connecteddevice.py:18 msgid "This feature is not currently supported for your device." msgstr "この機能は現在接続されているデバイスではサポートされていません。" @@ -390,6 +390,26 @@ msgstr "デバイスが接続されていません" msgid "Breezy Desktop was unable to detect any supported XR devices." msgstr "Breezy DesktopはサポートされているXRデバイスを検出できませんでした。" +#: src/gtk/no-device.ui:23 +#, fuzzy +msgid "Auto-enable XR effect" +msgstr "XRエフェクト" + +#: src/gtk/no-device.ui:24 +msgid "" +"Automatically enable the Breezy Desktop XR effect when supported glasses are " +"connected." +msgstr "" + +#: src/gtk/no-device.ui:34 +#, fuzzy +msgid "Start in widescreen mode" +msgstr "ワイドスクリーンモード" + +#: src/gtk/no-device.ui:35 +msgid "Widescreen mode is not supported for all glasses." +msgstr "" + #: src/gtk/no-driver.ui:13 msgid "No driver running" msgstr "ドライバーが実行されていません" diff --git a/ui/po/pl.po b/ui/po/pl.po index c314dba..0b599c8 100644 --- a/ui/po/pl.po +++ b/ui/po/pl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-21 12:23-0700\n" +"POT-Creation-Date: 2024-10-22 13:27-0700\n" "PO-Revision-Date: 2024-08-16 10:26-0700\n" "Last-Translator: \n" "Language-Team: Polish \n" @@ -18,13 +18,13 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: src/connecteddevice.py:20 +#: src/connecteddevice.py:17 msgid "" "Switches your glasses into side-by-side mode and doubles the width of the " "display." msgstr "" -#: src/connecteddevice.py:21 +#: src/connecteddevice.py:18 msgid "This feature is not currently supported for your device." msgstr "" @@ -366,6 +366,24 @@ msgstr "" msgid "Breezy Desktop was unable to detect any supported XR devices." msgstr "" +#: src/gtk/no-device.ui:23 +msgid "Auto-enable XR effect" +msgstr "" + +#: src/gtk/no-device.ui:24 +msgid "" +"Automatically enable the Breezy Desktop XR effect when supported glasses are " +"connected." +msgstr "" + +#: src/gtk/no-device.ui:34 +msgid "Start in widescreen mode" +msgstr "" + +#: src/gtk/no-device.ui:35 +msgid "Widescreen mode is not supported for all glasses." +msgstr "" + #: src/gtk/no-driver.ui:13 msgid "No driver running" msgstr "" diff --git a/ui/po/pt_BR.po b/ui/po/pt_BR.po index 7127362..1ca89cc 100644 --- a/ui/po/pt_BR.po +++ b/ui/po/pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-21 12:23-0700\n" +"POT-Creation-Date: 2024-10-22 13:27-0700\n" "PO-Revision-Date: 2024-08-19 09:39-0700\n" "Last-Translator: \n" "Language-Team: Brazilian Portuguese 1);\n" -#: src/connecteddevice.py:20 +#: src/connecteddevice.py:17 msgid "" "Switches your glasses into side-by-side mode and doubles the width of the " "display." @@ -26,7 +26,7 @@ msgstr "" "Altera o modo dos óculos para lado a lado (SBS) e dobra a largura da tela " "(ultrawide)." -#: src/connecteddevice.py:21 +#: src/connecteddevice.py:18 msgid "This feature is not currently supported for your device." msgstr "Este recurso não é atualmente suportado para o seu dispositivo." @@ -390,6 +390,26 @@ msgid "Breezy Desktop was unable to detect any supported XR devices." msgstr "" "O Breezy Desktop não conseguiu detectar nenhum dispositivo XR suportado." +#: src/gtk/no-device.ui:23 +#, fuzzy +msgid "Auto-enable XR effect" +msgstr "Efeito XR" + +#: src/gtk/no-device.ui:24 +msgid "" +"Automatically enable the Breezy Desktop XR effect when supported glasses are " +"connected." +msgstr "" + +#: src/gtk/no-device.ui:34 +#, fuzzy +msgid "Start in widescreen mode" +msgstr "Modo Ultrawide" + +#: src/gtk/no-device.ui:35 +msgid "Widescreen mode is not supported for all glasses." +msgstr "" + #: src/gtk/no-driver.ui:13 msgid "No driver running" msgstr "Nenhum driver em execução" diff --git a/ui/po/ru.po b/ui/po/ru.po index 4880c92..da7815e 100644 --- a/ui/po/ru.po +++ b/ui/po/ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-21 12:23-0700\n" +"POT-Creation-Date: 2024-10-22 13:27-0700\n" "PO-Revision-Date: 2024-08-17 09:39-0700\n" "Last-Translator: \n" "Language-Team: Russian \n" @@ -18,14 +18,14 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: src/connecteddevice.py:20 +#: src/connecteddevice.py:17 msgid "" "Switches your glasses into side-by-side mode and doubles the width of the " "display." msgstr "" "Переключает очки в режим «сторона к стороне» и удваивает ширину дисплея." -#: src/connecteddevice.py:21 +#: src/connecteddevice.py:18 msgid "This feature is not currently supported for your device." msgstr "Эта функция в настоящее время не поддерживается для вашего устройства." @@ -389,6 +389,26 @@ msgstr "Устройство не подключено" msgid "Breezy Desktop was unable to detect any supported XR devices." msgstr "Breezy Desktop не смог обнаружить никаких поддерживаемых устройств XR." +#: src/gtk/no-device.ui:23 +#, fuzzy +msgid "Auto-enable XR effect" +msgstr "Эффект XR" + +#: src/gtk/no-device.ui:24 +msgid "" +"Automatically enable the Breezy Desktop XR effect when supported glasses are " +"connected." +msgstr "" + +#: src/gtk/no-device.ui:34 +#, fuzzy +msgid "Start in widescreen mode" +msgstr "Режим широкого экрана" + +#: src/gtk/no-device.ui:35 +msgid "Widescreen mode is not supported for all glasses." +msgstr "" + #: src/gtk/no-driver.ui:13 msgid "No driver running" msgstr "Драйвер не запущен" diff --git a/ui/po/sv.po b/ui/po/sv.po index 9067a68..2fbe58b 100644 --- a/ui/po/sv.po +++ b/ui/po/sv.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-21 12:23-0700\n" +"POT-Creation-Date: 2024-10-22 13:27-0700\n" "PO-Revision-Date: 2024-08-16 10:31-0700\n" "Last-Translator: \n" "Language-Team: Swedish \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/connecteddevice.py:20 +#: src/connecteddevice.py:17 msgid "" "Switches your glasses into side-by-side mode and doubles the width of the " "display." @@ -25,7 +25,7 @@ msgstr "" "Växlar dina glasögon till side-by-side-läget och dubblerar bredden på " "visningen." -#: src/connecteddevice.py:21 +#: src/connecteddevice.py:18 msgid "This feature is not currently supported for your device." msgstr "Din enhet stöder inte den här funktionen för tillfället." @@ -383,6 +383,26 @@ msgstr "Inget enhet ansluten" msgid "Breezy Desktop was unable to detect any supported XR devices." msgstr "Breezy Desktop kunde inte upptäcka enheter som stöder XR." +#: src/gtk/no-device.ui:23 +#, fuzzy +msgid "Auto-enable XR effect" +msgstr "XR-effekt" + +#: src/gtk/no-device.ui:24 +msgid "" +"Automatically enable the Breezy Desktop XR effect when supported glasses are " +"connected." +msgstr "" + +#: src/gtk/no-device.ui:34 +#, fuzzy +msgid "Start in widescreen mode" +msgstr "Bredbildsläge" + +#: src/gtk/no-device.ui:35 +msgid "Widescreen mode is not supported for all glasses." +msgstr "" + #: src/gtk/no-driver.ui:13 msgid "No driver running" msgstr "Inget drivrutin köres" diff --git a/ui/po/uk_UA.po b/ui/po/uk_UA.po index e883c11..4189b2f 100644 --- a/ui/po/uk_UA.po +++ b/ui/po/uk_UA.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-21 12:23-0700\n" +"POT-Creation-Date: 2024-10-22 13:27-0700\n" "PO-Revision-Date: 2024-08-17 10:08-0700\n" "Last-Translator: \n" "Language-Team: Ukrainian \n" @@ -18,13 +18,13 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: src/connecteddevice.py:20 +#: src/connecteddevice.py:17 msgid "" "Switches your glasses into side-by-side mode and doubles the width of the " "display." msgstr "Переключає окуляри в режим «бок о бок» і подвоює ширину дисплея." -#: src/connecteddevice.py:21 +#: src/connecteddevice.py:18 msgid "This feature is not currently supported for your device." msgstr "Ця функція наразі не підтримується на вашому пристрої." @@ -386,6 +386,26 @@ msgstr "Жоден пристрій не підключено" msgid "Breezy Desktop was unable to detect any supported XR devices." msgstr "Breezy Desktop не зміг виявити жодного підтримуваного XR пристрою." +#: src/gtk/no-device.ui:23 +#, fuzzy +msgid "Auto-enable XR effect" +msgstr "Ефект XR" + +#: src/gtk/no-device.ui:24 +msgid "" +"Automatically enable the Breezy Desktop XR effect when supported glasses are " +"connected." +msgstr "" + +#: src/gtk/no-device.ui:34 +#, fuzzy +msgid "Start in widescreen mode" +msgstr "Режим широкого екрану" + +#: src/gtk/no-device.ui:35 +msgid "Widescreen mode is not supported for all glasses." +msgstr "" + #: src/gtk/no-driver.ui:13 msgid "No driver running" msgstr "Жоден драйвер не запущений" diff --git a/ui/po/zh_CN.po b/ui/po/zh_CN.po index ad5855f..e97586d 100644 --- a/ui/po/zh_CN.po +++ b/ui/po/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-21 12:23-0700\n" +"POT-Creation-Date: 2024-10-22 13:27-0700\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n" "Last-Translator: \n" "Language-Team: Chinese (simplified) \n" @@ -16,13 +16,13 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/connecteddevice.py:20 +#: src/connecteddevice.py:17 msgid "" "Switches your glasses into side-by-side mode and doubles the width of the " "display." msgstr "" -#: src/connecteddevice.py:21 +#: src/connecteddevice.py:18 msgid "This feature is not currently supported for your device." msgstr "" @@ -364,6 +364,24 @@ msgstr "" msgid "Breezy Desktop was unable to detect any supported XR devices." msgstr "" +#: src/gtk/no-device.ui:23 +msgid "Auto-enable XR effect" +msgstr "" + +#: src/gtk/no-device.ui:24 +msgid "" +"Automatically enable the Breezy Desktop XR effect when supported glasses are " +"connected." +msgstr "" + +#: src/gtk/no-device.ui:34 +msgid "Start in widescreen mode" +msgstr "" + +#: src/gtk/no-device.ui:35 +msgid "Widescreen mode is not supported for all glasses." +msgstr "" + #: src/gtk/no-driver.ui:13 msgid "No driver running" msgstr "" diff --git a/ui/src/configmanager.py b/ui/src/configmanager.py new file mode 100644 index 0000000..b328b16 --- /dev/null +++ b/ui/src/configmanager.py @@ -0,0 +1,66 @@ +import sys +import threading +from gi.repository import GObject +from .time import LICENSE_WARN_SECONDS +from .xrdriveripc import XRDriverIPC + +class ConfigManager(GObject.GObject): + __gproperties__ = { + 'breezy-desktop-enabled': (bool, 'Breezy Desktop Enabled', 'Whether Breezy Desktop is enabled', False, GObject.ParamFlags.READWRITE), + } + + _instance = None + + @staticmethod + def get_instance(): + if not ConfigManager._instance: + ConfigManager._instance = ConfigManager() + + return ConfigManager._instance + + @staticmethod + def destroy_instance(): + if ConfigManager._instance: + ConfigManager._instance.stop() + ConfigManager._instance = None + + def __init__(self): + GObject.GObject.__init__(self) + self.ipc = XRDriverIPC.get_instance() + self.breezy_desktop_enabled = None + self._running = True + self._refresh_config() + + def stop(self): + self._running = False + + def _refresh_config(self): + self.config = self.ipc.retrieve_config(False) + if self._is_breezy_desktop_enabled() != self.breezy_desktop_enabled: + self.set_property('breezy-desktop-enabled', self._is_breezy_desktop_enabled()) + + if self._running: threading.Timer(1.0, self._refresh_config).start() + + def _is_breezy_desktop_enabled(self): + return self.config.get('disabled') == False and 'breezy_desktop' in self.config.get('external_mode', []) + + def _set_breezy_desktop_enabled(self, value): + if value: + self.config['disabled'] = False + self.config['output_mode'] = 'external_only' + self.config['external_mode'] = ['breezy_desktop'] + self.ipc.write_config(self.config) + else: + self.config['external_mode'] = [] + self.ipc.write_config(self.config) + + self.breezy_desktop_enabled = value + + def do_set_property(self, prop, value): + logging.info(f"Setting property {prop.name} to {value}") + if prop.name == 'breezy-desktop-enabled': + self._set_breezy_desktop_enabled(value) + + def do_get_property(self, prop): + if prop.name == 'breezy-desktop-enabled': + return self.breezy_desktop_enabled \ No newline at end of file diff --git a/ui/src/connecteddevice.py b/ui/src/connecteddevice.py index 1488e12..efe638e 100644 --- a/ui/src/connecteddevice.py +++ b/ui/src/connecteddevice.py @@ -1,4 +1,5 @@ from gi.repository import Gio, Gtk, GObject +from .configmanager import ConfigManager from .extensionsmanager import ExtensionsManager from .license import BREEZY_GNOME_FEATURES from .settingsmanager import SettingsManager @@ -6,13 +7,9 @@ from .shortcutdialog import bind_shortcut_settings from .statemanager import StateManager from .xrdriveripc import XRDriverIPC import gettext -import logging -import threading _ = gettext.gettext -logger = logging.getLogger('breezy_ui') - @Gtk.Template(resource_path='/com/xronlinux/BreezyDesktop/gtk/connected-device.ui') class ConnectedDevice(Gtk.Box): __gtype_name__ = "ConnectedDevice" @@ -103,17 +100,18 @@ class ConnectedDevice(Gtk.Box): self.follow_mode_switch.set_active(self.state_manager.get_property('follow-mode')) self.follow_mode_switch.connect('notify::active', self._refresh_follow_mode) + self.effect_enable_switch.connect('notify::active', self._handle_switch_enabled_state) - self._refresh_enabled_state_thread = None - self._refresh_enabled_state(); - self.effect_enable_switch.connect('notify::active', self._handle_enabled_state) + self.config_manager = ConfigManager.get_instance() + self.config_manager.connect('notify::breezy-desktop-enabled', self._handle_enabled_config) self.use_optimal_monitor_config_switch.connect('notify::active', self._refresh_use_optimal_monitor_config) self._handle_enabled_features(self.state_manager, None) self._handle_device_supports_sbs(self.state_manager, None) - self._handle_enabled_state(self.effect_enable_switch, None) + self._handle_enabled_config(None, None) self._refresh_use_optimal_monitor_config(self.use_optimal_monitor_config_switch, None) + self.extensions_manager.connect('notify::breezy-enabled', self._handle_enabled_config) self.connect("destroy", self._on_widget_destroy) @@ -130,34 +128,20 @@ class ConnectedDevice(Gtk.Box): self.widescreen_mode_switch.set_sensitive(state_manager.get_property('device-supports-sbs')) subtitle = self.widescreen_mode_subtitle if state_manager.get_property('device-supports-sbs') else self.widescreen_mode_not_supported_subtitle self.widescreen_mode_row.set_subtitle(subtitle) - - def _refresh_enabled_state(self): - try: - enabled = self._is_config_enabled(self.ipc.retrieve_config()) and self.extensions_manager.is_enabled() - if enabled != self.effect_enable_switch.get_active(): - self.effect_enable_switch.set_active(enabled) - self._refresh_enabled_state_thread = threading.Timer(1.0, self._refresh_enabled_state) - self._refresh_enabled_state_thread.start() - except Exception as e: - logger.error(f"_refresh_enabled_state {e}") - - def _is_config_enabled(self, config): - return config.get('disabled') == False and 'breezy_desktop' in config.get('external_mode', []) + def _handle_enabled_config(self, object, val): + enabled = self.config_manager.get_property('breezy-desktop-enabled') and self.extensions_manager.get_property('breezy-enabled') + if enabled != self.effect_enable_switch.get_active(): + self.effect_enable_switch.set_active(enabled) - def _handle_enabled_state(self, switch, param): + def _handle_switch_enabled_state(self, switch, param): requesting_enabled = switch.get_active() - config = self.ipc.retrieve_config(False) + + # never turn off the extension, disabling the effect is done via configs only if requesting_enabled: self.extensions_manager.set_property('breezy-enabled', True) - if not self._is_config_enabled(config): - config['disabled'] = False - config['output_mode'] = 'external_only' - config['external_mode'] = ['breezy_desktop'] - self.ipc.write_config(config) - else: - config['external_mode'] = [] - self.ipc.write_config(config) + + self.config_manager.set_property('breezy-desktop-enabled', requesting_enabled) for widget in self.all_enabled_state_inputs: widget.set_sensitive(requesting_enabled) @@ -190,9 +174,6 @@ class ConnectedDevice(Gtk.Box): reload_display_distance_toggle_button(widget) def _on_widget_destroy(self, widget): - if self._refresh_enabled_state_thread: - self._refresh_enabled_state_thread.cancel() - self.state_manager.unbind_property('follow-mode', self.follow_mode_switch, 'active') self.settings.unbind('display-distance', self.display_distance_adjustment, 'value') self.settings.unbind('display-size', self.display_size_adjustment, 'value') diff --git a/ui/src/extensionsmanager.py b/ui/src/extensionsmanager.py index 0c1d54c..397686a 100644 --- a/ui/src/extensionsmanager.py +++ b/ui/src/extensionsmanager.py @@ -24,7 +24,7 @@ class ExtensionsManager(GObject.GObject): self.gnome_shell_extensions = self.bus.get("org.gnome.Shell.Extensions") self.gnome_shell_extensions.ExtensionStateChanged.connect(self._handle_extension_state_change) - self.remote_extension_state = None + self.remote_extension_state = self.is_enabled() def _handle_extension_state_change(self, extension_uuid, state): if extension_uuid == BREEZY_DESKTOP_UUID: diff --git a/ui/src/gtk/no-device.ui b/ui/src/gtk/no-device.ui index ecc6d51..c7d6cad 100644 --- a/ui/src/gtk/no-device.ui +++ b/ui/src/gtk/no-device.ui @@ -12,7 +12,35 @@ No device connected Breezy Desktop was unable to detect any supported XR devices. - 650 + 800 + 150 + + + + + + + Auto-enable XR effect + Automatically enable the Breezy Desktop XR effect when supported glasses are connected. + + + 3 + + + + + + + Start in widescreen mode + Widescreen mode is not supported for all glasses. + 2 + + + 3 + + + + diff --git a/ui/src/gtk/no-driver.ui b/ui/src/gtk/no-driver.ui index b0f6a29..bd9bba5 100644 --- a/ui/src/gtk/no-driver.ui +++ b/ui/src/gtk/no-driver.ui @@ -17,7 +17,7 @@ Otherwise, please file an issue on GitHub, or create a new thread in the #troubleshooting channel on Discord. - 650 + 800 diff --git a/ui/src/gtk/no-extension.ui b/ui/src/gtk/no-extension.ui index ad126bb..bc5fe43 100644 --- a/ui/src/gtk/no-extension.ui +++ b/ui/src/gtk/no-extension.ui @@ -12,7 +12,7 @@ Breezy Desktop GNOME extension not ready If you have just run the setup, then you may need to log out and back in to use it. Otherwise, please follow the Breezy GNOME setup instructions. - 650 + 800 diff --git a/ui/src/gtk/no-license.ui b/ui/src/gtk/no-license.ui index 7a5a9db..7525017 100644 --- a/ui/src/gtk/no-license.ui +++ b/ui/src/gtk/no-license.ui @@ -18,7 +18,7 @@ Once you obtain a license, trial or otherwise, you can use Breezy Desktop offline until features expire (or indefinitely, if you've chosen lifetime access). - 650 + 800 400 diff --git a/ui/src/main.py b/ui/src/main.py index 248b558..c1472b7 100644 --- a/ui/src/main.py +++ b/ui/src/main.py @@ -35,6 +35,7 @@ gi.require_version('Gio', '2.0') gi.require_version('GLib', '2.0') from gi.repository import Adw, Gtk, Gio, GLib +from .configmanager import ConfigManager from .licensedialog import LicenseDialog from .statemanager import StateManager from .window import BreezydesktopWindow @@ -144,6 +145,7 @@ class BreezydesktopApplication(Adw.Application): win.close() StateManager.destroy_instance() + ConfigManager.destroy_instance() self.quit() diff --git a/ui/src/meson.build b/ui/src/meson.build index cb1ecbc..0a2b141 100644 --- a/ui/src/meson.build +++ b/ui/src/meson.build @@ -29,6 +29,7 @@ configure_file( breezydesktop_sources = [ '../modules/PyXRLinuxDriverIPC/xrdriveripc.py', '__init__.py', + 'configmanager.py', 'connecteddevice.py', 'extensionsmanager.py', 'failedverification.py', diff --git a/ui/src/nodevice.py b/ui/src/nodevice.py index ed71c40..b36c656 100644 --- a/ui/src/nodevice.py +++ b/ui/src/nodevice.py @@ -1,5 +1,45 @@ -from gi.repository import Gtk +from gi.repository import Gio, Gtk +from .configmanager import ConfigManager +from .extensionsmanager import ExtensionsManager +from .settingsmanager import SettingsManager +from .statemanager import StateManager +from .xrdriveripc import XRDriverIPC @Gtk.Template(resource_path='/com/xronlinux/BreezyDesktop/gtk/no-device.ui') class NoDevice(Gtk.Box): __gtype_name__ = "NoDevice" + + effect_enable_switch = Gtk.Template.Child() + widescreen_mode_switch = Gtk.Template.Child() + + def __init__(self): + super(Gtk.Box, self).__init__() + self.init_template() + + self.ipc = XRDriverIPC.get_instance() + self.extensions_manager = ExtensionsManager.get_instance() + self.settings = SettingsManager.get_instance().settings + self.config_manager = ConfigManager.get_instance() + self.config_manager.connect('notify::breezy-desktop-enabled', self._handle_enabled_config) + + self.effect_enable_switch.connect('notify::active', self._handle_switch_enabled_state) + self.settings.bind('widescreen-mode', self.widescreen_mode_switch, 'active', Gio.SettingsBindFlags.DEFAULT) + + self._handle_enabled_config(self.config_manager, None) + + def _handle_enabled_config(self, config_manager, val): + enabled = config_manager.get_property('breezy-desktop-enabled') and self.extensions_manager.get_property('breezy-enabled') + if enabled != self.effect_enable_switch.get_active(): + self.effect_enable_switch.set_active(enabled) + + def _handle_switch_enabled_state(self, switch, param): + requesting_enabled = switch.get_active() + + # never turn off the extension, disabling the effect is done via configs only + if requesting_enabled: + self.extensions_manager.set_property('breezy-enabled', True) + + self.config_manager.set_property('breezy-desktop-enabled', requesting_enabled) + + def _on_widget_destroy(self, widget): + self.settings.unbind('widescreen-mode', self.widescreen_mode_switch, 'active') diff --git a/ui/src/statemanager.py b/ui/src/statemanager.py index f9dc84a..efb03c6 100644 --- a/ui/src/statemanager.py +++ b/ui/src/statemanager.py @@ -7,13 +7,6 @@ from .xrdriveripc import XRDriverIPC # shouldn't need a number larger than a year LICENSE_ACTION_NEEDED_MAX = 60 * 60 * 24 * 366 -class Logger: - def info(self, message): - print(message) - - def error(self, message): - print(message) - class StateManager(GObject.GObject): __gsignals__ = { 'device-update': (GObject.SIGNAL_RUN_FIRST, None, (str,)) @@ -66,15 +59,11 @@ class StateManager(GObject.GObject): self.license_present = False self.enabled_features = [] self.device_supports_sbs = False - - self.start() - - def start(self): - self.running = True + self._running = True self._refresh_state() def stop(self): - self.running = False + self._running = False def _refresh_state(self): self.state = self.ipc.retrieve_driver_state() @@ -109,7 +98,7 @@ class StateManager(GObject.GObject): self.set_property('device-supports-sbs', self.state.get('sbs_mode_supported', False)) self.set_property('widescreen-mode', self.state.get('sbs_mode_enabled', False)) - if self.running: threading.Timer(1.0, self._refresh_state).start() + if self._running: threading.Timer(1.0, self._refresh_state).start() def do_set_property(self, prop, value): if prop.name == 'driver-running':