diff --git a/VERSION b/VERSION index a625450..e703481 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.3.1 \ No newline at end of file +2.3.2 \ No newline at end of file diff --git a/kwin/src/kcm/breezydesktopeffectkcm.cpp b/kwin/src/kcm/breezydesktopeffectkcm.cpp index afa7176..b629f5b 100644 --- a/kwin/src/kcm/breezydesktopeffectkcm.cpp +++ b/kwin/src/kcm/breezydesktopeffectkcm.cpp @@ -48,6 +48,8 @@ #include #include #include +#include +#include Q_LOGGING_CATEGORY(KWIN_XR, "kwin.xr") @@ -343,6 +345,8 @@ BreezyDesktopEffectConfig::BreezyDesktopEffectConfig(QObject *parent, const KPlu connect(ui.SmoothFollowTrackYaw, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateSmoothFollowTrackYaw); connect(ui.SmoothFollowTrackPitch, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateSmoothFollowTrackPitch); connect(ui.SmoothFollowTrackRoll, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateSmoothFollowTrackRoll); + connect(ui.NeckSaverHorizontalMultiplier, &QSlider::valueChanged, this, &BreezyDesktopEffectConfig::updateNeckSaverHorizontal); + connect(ui.NeckSaverVerticalMultiplier, &QSlider::valueChanged, this, &BreezyDesktopEffectConfig::updateNeckSaverVertical); if (auto label = widget()->findChild("labelAppNameVersion")) { label->setText(QStringLiteral("Breezy Desktop - v%1").arg(QLatin1String(BREEZY_DESKTOP_VERSION_STR))); @@ -689,11 +693,64 @@ void BreezyDesktopEffectConfig::pollDriverState() if (ui.SmoothFollowTrackRoll->isChecked() != trackRoll) ui.SmoothFollowTrackRoll->setChecked(trackRoll); + const double horiz = neckSaverHorizontalMultiplier(configJsonOpt); + const int horizInt = static_cast(std::round(horiz * 100.0)); + if (ui.NeckSaverHorizontalMultiplier->value() != horizInt) { + ui.NeckSaverHorizontalMultiplier->setValue(horizInt); + } + const double vert = neckSaverVerticalMultiplier(configJsonOpt); + const int vertInt = static_cast(std::round(vert * 100.0)); + if (ui.NeckSaverVerticalMultiplier->value() != vertInt) { + ui.NeckSaverVerticalMultiplier->setValue(vertInt); + } + refreshLicenseUi(stateJson); m_driverStateInitialized = true; } +double BreezyDesktopEffectConfig::neckSaverHorizontalMultiplier(std::optional configJsonOpt) +{ + if (!configJsonOpt) return 1.0; + const QJsonValue jv = configJsonOpt->value(QStringLiteral("neck_saver_horizontal_multiplier")); + const double v = jv.isDouble() ? jv.toDouble() : 1.0; + if (v < 1.0) return 1.0; + if (v > 2.5) return 2.5; + return v; +} + +double BreezyDesktopEffectConfig::neckSaverVerticalMultiplier(std::optional configJsonOpt) +{ + if (!configJsonOpt) return 1.0; + const QJsonValue jv = configJsonOpt->value(QStringLiteral("neck_saver_vertical_multiplier")); + const double v = jv.isDouble() ? jv.toDouble() : 1.0; + if (v < 1.0) return 1.0; + if (v > 2.5) return 2.5; + return v; +} + +void BreezyDesktopEffectConfig::updateNeckSaverHorizontal() +{ + auto configJsonOpt = XRDriverIPC::instance().retrieveConfig(); + double val = ui.NeckSaverHorizontalMultiplier->value() / 100.0; + if (neckSaverHorizontalMultiplier(configJsonOpt) == val) return; + + QJsonObject newConfig = configJsonOpt ? configJsonOpt.value() : QJsonObject(); + newConfig.insert(QStringLiteral("neck_saver_horizontal_multiplier"), val); + XRDriverIPC::instance().writeConfig(newConfig); +} + +void BreezyDesktopEffectConfig::updateNeckSaverVertical() +{ + auto configJsonOpt = XRDriverIPC::instance().retrieveConfig(); + double val = ui.NeckSaverVerticalMultiplier->value() / 100.0; + if (neckSaverVerticalMultiplier(configJsonOpt) == val) return; + + QJsonObject newConfig = configJsonOpt ? configJsonOpt.value() : QJsonObject(); + newConfig.insert(QStringLiteral("neck_saver_vertical_multiplier"), val); + XRDriverIPC::instance().writeConfig(newConfig); +} + bool BreezyDesktopEffectConfig::multitapEnabled(std::optional configJsonOpt) { if (!configJsonOpt) return false; diff --git a/kwin/src/kcm/breezydesktopeffectkcm.h b/kwin/src/kcm/breezydesktopeffectkcm.h index aa457f9..bc64832 100644 --- a/kwin/src/kcm/breezydesktopeffectkcm.h +++ b/kwin/src/kcm/breezydesktopeffectkcm.h @@ -34,6 +34,8 @@ private: void updateSmoothFollowTrackYaw(); void updateSmoothFollowTrackPitch(); void updateSmoothFollowTrackRoll(); + void updateNeckSaverHorizontal(); + void updateNeckSaverVertical(); void updateUiFromConfig(); void updateUiFromDefaultConfig(); void updateConfigFromUi(); @@ -44,6 +46,8 @@ private: bool smoothFollowTrackYawEnabled(std::optional configJsonOpt); bool smoothFollowTrackPitchEnabled(std::optional configJsonOpt); bool smoothFollowTrackRollEnabled(std::optional configJsonOpt); + double neckSaverHorizontalMultiplier(std::optional configJsonOpt); + double neckSaverVerticalMultiplier(std::optional configJsonOpt); void pollDriverState(); void refreshLicenseUi(const QJsonObject &rootObj); void checkEffectLoaded(); diff --git a/kwin/src/kcm/breezydesktopeffectkcm.ui b/kwin/src/kcm/breezydesktopeffectkcm.ui index ab2c0cf..372b818 100644 --- a/kwin/src/kcm/breezydesktopeffectkcm.ui +++ b/kwin/src/kcm/breezydesktopeffectkcm.ui @@ -535,6 +535,76 @@ false + + + + Neck-saver horizontal: + + + + + + + 2 + + + 100 + + + 250 + + + 25 + + + 50 + + + QSlider::NoTicks + + + Qt::Horizontal + + + false + + + + + + + Neck-saver vertical: + + + + + + + 2 + + + 100 + + + 250 + + + 25 + + + 50 + + + QSlider::NoTicks + + + Qt::Horizontal + + + false + + + diff --git a/ui/po/breezydesktop.pot b/ui/po/breezydesktop.pot index f956831..fa78c43 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: 2025-05-07 12:43-0700\n" +"POT-Creation-Date: 2025-10-03 16:04-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -27,33 +27,33 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "" -#: src/connecteddevice.py:145 +#: src/connecteddevice.py:151 msgid "Set Focused Display Distance" msgstr "" -#: src/connecteddevice.py:146 +#: src/connecteddevice.py:152 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:153 +#: src/connecteddevice.py:159 msgid "Set All Displays Distance" msgstr "" -#: src/connecteddevice.py:154 +#: src/connecteddevice.py:160 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:270 +#: src/connecteddevice.py:283 msgid "" "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "and the pipewire GStreamer plugin are required." msgstr "" -#: src/connecteddevice.py:304 +#: src/connecteddevice.py:317 msgid "Focused display" msgstr "" -#: src/connecteddevice.py:310 +#: src/connecteddevice.py:323 msgid "All displays" msgstr "" @@ -94,15 +94,15 @@ msgstr "" msgid " ({time_remaining} remaining)" msgstr "" -#: src/licensefeaturerow.py:32 +#: src/licensefeaturerow.py:30 msgid "Side-by-side mode (gaming)" msgstr "" -#: src/licensefeaturerow.py:33 +#: src/licensefeaturerow.py:31 msgid "Smooth Follow (gaming)" msgstr "" -#: src/licensefeaturerow.py:34 +#: src/licensefeaturerow.py:32 msgid "Breezy Desktop (productivity)" msgstr "" @@ -473,45 +473,61 @@ msgid "Follow mode moves all displays, not just the focused one." msgstr "" #: src/gtk/connected-device.ui:642 -msgid "Follow mode movement tracking" +msgid "Neck-saver horizontal multiplier" msgstr "" #: src/gtk/connected-device.ui:643 +msgid "Higher values require smaller horizontal head movements." +msgstr "" + +#: src/gtk/connected-device.ui:675 +msgid "Neck-saver vertical multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:676 +msgid "Higher values require smaller vertical head movements." +msgstr "" + +#: src/gtk/connected-device.ui:708 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:709 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:658 +#: src/gtk/connected-device.ui:724 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:678 +#: src/gtk/connected-device.ui:744 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:698 +#: src/gtk/connected-device.ui:764 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:716 +#: src/gtk/connected-device.ui:782 msgid "Movement look-ahead" msgstr "" -#: src/gtk/connected-device.ui:717 +#: src/gtk/connected-device.ui:783 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " "movements, jumps ahead, or is very shaky." msgstr "" -#: src/gtk/connected-device.ui:735 +#: src/gtk/connected-device.ui:801 msgid "Default" msgstr "" -#: src/gtk/connected-device.ui:747 +#: src/gtk/connected-device.ui:813 msgid "Text Scaling" msgstr "" -#: src/gtk/connected-device.ui:748 +#: src/gtk/connected-device.ui:814 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" diff --git a/ui/po/de.po b/ui/po/de.po index 89b36af..3a4a1a5 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: 2025-05-07 12:40-0700\n" +"POT-Creation-Date: 2025-10-03 16:04-0700\n" "PO-Revision-Date: 2024-08-02 20:54-0700\n" "Last-Translator: \n" "Language-Team: German \n" @@ -29,39 +29,39 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "Diese Funktion wird von Ihrem Gerät derzeit nicht unterstützt." -#: src/connecteddevice.py:145 +#: src/connecteddevice.py:151 msgid "Set Focused Display Distance" msgstr "Setze fokussierte Bildschirmentfernung" -#: src/connecteddevice.py:146 +#: src/connecteddevice.py:152 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" "Nutze einen Näher Wert um den Bildschirm zu vergößern, wenn der Bildschirm " "angesehen wird." -#: src/connecteddevice.py:153 +#: src/connecteddevice.py:159 msgid "Set All Displays Distance" msgstr "Setze alle Bildschirmentfernungen" -#: src/connecteddevice.py:154 +#: src/connecteddevice.py:160 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" "Nutze einen Entfernter Wert um den Bildschirm zu verkleinern, wenn diese " "nicht angesehen werden." -#: src/connecteddevice.py:270 +#: src/connecteddevice.py:283 msgid "" "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "and the pipewire GStreamer plugin are required." msgstr "" -"Virtuelle Bildschirme können nicht hinzugefügt werden." -"Wayland und xdg-desktop-portal werden benötigt" +"Virtuelle Bildschirme können nicht hinzugefügt werden.Wayland und xdg-" +"desktop-portal werden benötigt" -#: src/connecteddevice.py:304 +#: src/connecteddevice.py:317 msgid "Focused display" msgstr "Fokussierter Bildschirm" -#: src/connecteddevice.py:310 +#: src/connecteddevice.py:323 msgid "All displays" msgstr "Gebogene Bildschirm" @@ -102,15 +102,15 @@ msgstr "Aktiviert" msgid " ({time_remaining} remaining)" msgstr " ({time_remaining} verbleibend)" -#: src/licensefeaturerow.py:32 +#: src/licensefeaturerow.py:30 msgid "Side-by-side mode (gaming)" msgstr "Side-by-Side-Modus (Gaming)" -#: src/licensefeaturerow.py:33 +#: src/licensefeaturerow.py:31 msgid "Smooth Follow (gaming)" msgstr "Glattes Verfolgen (Gaming)" -#: src/licensefeaturerow.py:34 +#: src/licensefeaturerow.py:32 msgid "Breezy Desktop (productivity)" msgstr "Breezy Desktop (Produktivität)" @@ -504,30 +504,46 @@ msgid "Follow mode moves all displays, not just the focused one." msgstr "Folgemodus bewegt alle Bildschirme, nicht nur den fokussierten" #: src/gtk/connected-device.ui:642 +msgid "Neck-saver horizontal multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:643 +msgid "Higher values require smaller horizontal head movements." +msgstr "" + +#: src/gtk/connected-device.ui:675 +msgid "Neck-saver vertical multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:676 +msgid "Higher values require smaller vertical head movements." +msgstr "" + +#: src/gtk/connected-device.ui:708 msgid "Follow mode movement tracking" msgstr "Folgemodus Bewegungstracking" -#: src/gtk/connected-device.ui:643 +#: src/gtk/connected-device.ui:709 msgid "Choose which movements should be tracked in follow mode." msgstr "Setzen Sie, welchen Bewegungen der Folgemodus folgen soll." -#: src/gtk/connected-device.ui:658 +#: src/gtk/connected-device.ui:724 msgid "Horizontal" msgstr "Horizontal" -#: src/gtk/connected-device.ui:678 +#: src/gtk/connected-device.ui:744 msgid "Vertical" msgstr "Vertikal" -#: src/gtk/connected-device.ui:698 +#: src/gtk/connected-device.ui:764 msgid "Tilt/roll" msgstr "Neigen/Rollen" -#: src/gtk/connected-device.ui:716 +#: src/gtk/connected-device.ui:782 msgid "Movement look-ahead" msgstr "Bewegungsvorausschau" -#: src/gtk/connected-device.ui:717 +#: src/gtk/connected-device.ui:783 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -538,15 +554,15 @@ msgstr "" "es sei denn, der virtuelle Bildschirm hängt hinter Ihren Kopfbewegungen " "hinterher, springt vor oder ist sehr wackelig." -#: src/gtk/connected-device.ui:735 +#: src/gtk/connected-device.ui:801 msgid "Default" msgstr "Standard" -#: src/gtk/connected-device.ui:747 +#: src/gtk/connected-device.ui:813 msgid "Text Scaling" msgstr "Textskalierung" -#: src/gtk/connected-device.ui:748 +#: src/gtk/connected-device.ui:814 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "Text unter 1.0 skalieren simuliert einen höher aufgelösten Bildschirm" diff --git a/ui/po/es.po b/ui/po/es.po index f3c91a0..cf34d27 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: 2025-05-07 12:40-0700\n" +"POT-Creation-Date: 2025-10-03 16:04-0700\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n" "Last-Translator: \n" "Language-Team: Spanish \n" @@ -28,26 +28,26 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "Esta función no es compatible con tu dispositivo en este momento." -#: src/connecteddevice.py:145 +#: src/connecteddevice.py:151 msgid "Set Focused Display Distance" msgstr "Ajusta Distancia de Enfoque de la Pantalla" -#: src/connecteddevice.py:146 +#: src/connecteddevice.py:152 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" "Usa un valor más cercano para que la pantalla se acerque cuando la mires." -#: src/connecteddevice.py:153 +#: src/connecteddevice.py:159 msgid "Set All Displays Distance" msgstr "Ajusta Todas las Distancias de Pantalla" -#: src/connecteddevice.py:154 +#: src/connecteddevice.py:160 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" "Usa un valor más alejado para que las pantallas se alejen cuando apartes la " "vista." -#: src/connecteddevice.py:270 +#: src/connecteddevice.py:283 msgid "" "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "and the pipewire GStreamer plugin are required." @@ -55,11 +55,11 @@ msgstr "" "No se pueden agregar pantallas virtuales en esta máquina. Se requiere " "Wayland y xdg-desktop-portal." -#: src/connecteddevice.py:304 +#: src/connecteddevice.py:317 msgid "Focused display" msgstr "Pantalla enfocada" -#: src/connecteddevice.py:310 +#: src/connecteddevice.py:323 msgid "All displays" msgstr "Todas las pantallas" @@ -100,15 +100,15 @@ msgstr "Habilitado" msgid " ({time_remaining} remaining)" msgstr " ({time_remaining} restantes)" -#: src/licensefeaturerow.py:32 +#: src/licensefeaturerow.py:30 msgid "Side-by-side mode (gaming)" msgstr "Modo lado a lado (juegos)" -#: src/licensefeaturerow.py:33 +#: src/licensefeaturerow.py:31 msgid "Smooth Follow (gaming)" msgstr "Seguimiento suave (juegos)" -#: src/licensefeaturerow.py:34 +#: src/licensefeaturerow.py:32 msgid "Breezy Desktop (productivity)" msgstr "Breezy Desktop (productividad)" @@ -498,30 +498,46 @@ msgid "Follow mode moves all displays, not just the focused one." msgstr "El modo de seguimiento mueve todas las pantallas, no solo la enfocada." #: src/gtk/connected-device.ui:642 +msgid "Neck-saver horizontal multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:643 +msgid "Higher values require smaller horizontal head movements." +msgstr "" + +#: src/gtk/connected-device.ui:675 +msgid "Neck-saver vertical multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:676 +msgid "Higher values require smaller vertical head movements." +msgstr "" + +#: src/gtk/connected-device.ui:708 msgid "Follow mode movement tracking" msgstr "Rastreo de movimiento de modo de seguimiento" -#: src/gtk/connected-device.ui:643 +#: src/gtk/connected-device.ui:709 msgid "Choose which movements should be tracked in follow mode." msgstr "Elige qué movimientos deben rastrearse en el modo de seguimiento." -#: src/gtk/connected-device.ui:658 +#: src/gtk/connected-device.ui:724 msgid "Horizontal" msgstr "Horizontal" -#: src/gtk/connected-device.ui:678 +#: src/gtk/connected-device.ui:744 msgid "Vertical" msgstr "Vertical" -#: src/gtk/connected-device.ui:698 +#: src/gtk/connected-device.ui:764 msgid "Tilt/roll" msgstr "Inclinación/giro" -#: src/gtk/connected-device.ui:716 +#: src/gtk/connected-device.ui:782 msgid "Movement look-ahead" msgstr "Anticipación de movimiento" -#: src/gtk/connected-device.ui:717 +#: src/gtk/connected-device.ui:783 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -532,15 +548,15 @@ msgstr "" "predeterminado a menos que la pantalla virtual se retrase detrás de los " "movimientos de la cabeza, se adelante o sea muy inestable." -#: src/gtk/connected-device.ui:735 +#: src/gtk/connected-device.ui:801 msgid "Default" msgstr "Predeterminado" -#: src/gtk/connected-device.ui:747 +#: src/gtk/connected-device.ui:813 msgid "Text Scaling" msgstr "Escalado de Texto" -#: src/gtk/connected-device.ui:748 +#: src/gtk/connected-device.ui:814 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" "Escalando el texto por debajo de 1.0 simulará una pantalla de mayor " diff --git a/ui/po/fr.po b/ui/po/fr.po index 94bcb8b..a2eda27 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: 2025-05-07 12:40-0700\n" +"POT-Creation-Date: 2025-10-03 16:04-0700\n" "PO-Revision-Date: 2024-08-02 20:54-0700\n" "Last-Translator: \n" "Language-Team: French \n" @@ -31,37 +31,38 @@ msgstr "" "Cette fonctionnalité n'est actuellement pas prise en charge par votre " "appareil." -#: src/connecteddevice.py:145 +#: src/connecteddevice.py:151 msgid "Set Focused Display Distance" msgstr "Définir la distance de l'écran cible" -#: src/connecteddevice.py:146 +#: src/connecteddevice.py:152 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" "Utiliser une valeur plus proche pour que l'écran zoom lorsqu'on le regarde." -#: src/connecteddevice.py:153 +#: src/connecteddevice.py:159 msgid "Set All Displays Distance" msgstr "Définir la distance d'affichage de tous les écrans" -#: src/connecteddevice.py:154 +#: src/connecteddevice.py:160 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" "Utiliser une valeur plus éloignée afin que les écrans dézooment lorsqu'on ne " "les regarde plus." -#: src/connecteddevice.py:270 +#: src/connecteddevice.py:283 msgid "" "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "and the pipewire GStreamer plugin are required." -msgstr "Impossible d'ajouter des écrans virtuels sur cet appareil. " -"Wayland et xdg-desktop-portal sont nécessaires." +msgstr "" +"Impossible d'ajouter des écrans virtuels sur cet appareil. Wayland et xdg-" +"desktop-portal sont nécessaires." -#: src/connecteddevice.py:304 +#: src/connecteddevice.py:317 msgid "Focused display" msgstr "Ecran cible" -#: src/connecteddevice.py:310 +#: src/connecteddevice.py:323 msgid "All displays" msgstr "Tous les écrans" @@ -102,15 +103,15 @@ msgstr "Activé" msgid " ({time_remaining} remaining)" msgstr " ({time_remaining} restant)" -#: src/licensefeaturerow.py:32 +#: src/licensefeaturerow.py:30 msgid "Side-by-side mode (gaming)" msgstr "Mode SBS (jeu)" -#: src/licensefeaturerow.py:33 +#: src/licensefeaturerow.py:31 msgid "Smooth Follow (gaming)" msgstr "Suivi fluide (jeu)" -#: src/licensefeaturerow.py:34 +#: src/licensefeaturerow.py:32 msgid "Breezy Desktop (productivity)" msgstr "Breezy Desktop (productivité)" @@ -507,30 +508,46 @@ msgstr "" "Le mode suivi déplace tous les écrans, pas seulement celui que l'on regarde." #: src/gtk/connected-device.ui:642 +msgid "Neck-saver horizontal multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:643 +msgid "Higher values require smaller horizontal head movements." +msgstr "" + +#: src/gtk/connected-device.ui:675 +msgid "Neck-saver vertical multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:676 +msgid "Higher values require smaller vertical head movements." +msgstr "" + +#: src/gtk/connected-device.ui:708 msgid "Follow mode movement tracking" msgstr "Suivi des mouvements en mode suivi" -#: src/gtk/connected-device.ui:643 +#: src/gtk/connected-device.ui:709 msgid "Choose which movements should be tracked in follow mode." msgstr "Définissez quels mouvements doivent être suivis en mode suivi." -#: src/gtk/connected-device.ui:658 +#: src/gtk/connected-device.ui:724 msgid "Horizontal" msgstr "Horizontaux" -#: src/gtk/connected-device.ui:678 +#: src/gtk/connected-device.ui:744 msgid "Vertical" msgstr "Verticaux" -#: src/gtk/connected-device.ui:698 +#: src/gtk/connected-device.ui:764 msgid "Tilt/roll" msgstr "Inclinaison" -#: src/gtk/connected-device.ui:716 +#: src/gtk/connected-device.ui:782 msgid "Movement look-ahead" msgstr "Anticipation des mouvements" -#: src/gtk/connected-device.ui:717 +#: src/gtk/connected-device.ui:783 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -540,15 +557,15 @@ msgstr "" "le temps de rendu. Restez sur la valeur par défaut à moins que l'affichage " "virtuel ne soit lent, ne saute pas ou ne soit très instable." -#: src/gtk/connected-device.ui:735 +#: src/gtk/connected-device.ui:801 msgid "Default" msgstr "Par défaut" -#: src/gtk/connected-device.ui:747 +#: src/gtk/connected-device.ui:813 msgid "Text Scaling" msgstr "Mise à l'échelle du texte" -#: src/gtk/connected-device.ui:748 +#: src/gtk/connected-device.ui:814 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" "Une mise à l'échelle du texte en dessous de 1.0 simulera un affichage de " diff --git a/ui/po/it.po b/ui/po/it.po index a7131ab..1850bbf 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: 2025-05-07 12:40-0700\n" +"POT-Creation-Date: 2025-10-03 16:04-0700\n" "PO-Revision-Date: 2024-08-02 21:14-0700\n" "Last-Translator: \n" "Language-Team: Italian \n" @@ -29,36 +29,38 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "Questa funzione non è attualmente supportata sul tuo dispositivo." -#: src/connecteddevice.py:145 +#: src/connecteddevice.py:151 msgid "Set Focused Display Distance" msgstr "Distanza del display con focus" -#: src/connecteddevice.py:146 +#: src/connecteddevice.py:152 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" "Usa un valore più vicino, così che il display si avvicini quando lo guardi." -#: src/connecteddevice.py:153 +#: src/connecteddevice.py:159 msgid "Set All Displays Distance" msgstr "Imposta la distanza di tutti i display" -#: src/connecteddevice.py:154 +#: src/connecteddevice.py:160 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" "Usa un valore più distante così che i display si allontanino quando distogli " "lo sguardo." -#: src/connecteddevice.py:270 +#: src/connecteddevice.py:283 msgid "" "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "and the pipewire GStreamer plugin are required." -msgstr "Non è possibile aggiungere display virtuali su questo dispositivo. Sono richiesti Wayland e xdg-desktop-portal." +msgstr "" +"Non è possibile aggiungere display virtuali su questo dispositivo. Sono " +"richiesti Wayland e xdg-desktop-portal." -#: src/connecteddevice.py:304 +#: src/connecteddevice.py:317 msgid "Focused display" msgstr "Distanza del display col focus" -#: src/connecteddevice.py:310 +#: src/connecteddevice.py:323 msgid "All displays" msgstr "Tutti i display" @@ -99,15 +101,15 @@ msgstr "Abilitato" msgid " ({time_remaining} remaining)" msgstr " ({time_remaining} rimanenti)" -#: src/licensefeaturerow.py:32 +#: src/licensefeaturerow.py:30 msgid "Side-by-side mode (gaming)" msgstr "Modalità side-by-side (gaming)" -#: src/licensefeaturerow.py:33 +#: src/licensefeaturerow.py:31 msgid "Smooth Follow (gaming)" msgstr "Smooth Follow (gaming)" -#: src/licensefeaturerow.py:34 +#: src/licensefeaturerow.py:32 msgid "Breezy Desktop (productivity)" msgstr "Breezy Desktop (produttività)" @@ -501,31 +503,47 @@ msgstr "" "La modalità inseguimento muove tutti i display, non solo quello col focus." #: src/gtk/connected-device.ui:642 +msgid "Neck-saver horizontal multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:643 +msgid "Higher values require smaller horizontal head movements." +msgstr "" + +#: src/gtk/connected-device.ui:675 +msgid "Neck-saver vertical multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:676 +msgid "Higher values require smaller vertical head movements." +msgstr "" + +#: src/gtk/connected-device.ui:708 msgid "Follow mode movement tracking" msgstr "Tracciamento del movimento nella modalità inseguimento" -#: src/gtk/connected-device.ui:643 +#: src/gtk/connected-device.ui:709 msgid "Choose which movements should be tracked in follow mode." msgstr "" "Scegli quale movimento deve essere tracciato nella modalità inseguimento." -#: src/gtk/connected-device.ui:658 +#: src/gtk/connected-device.ui:724 msgid "Horizontal" msgstr "Orizzontale" -#: src/gtk/connected-device.ui:678 +#: src/gtk/connected-device.ui:744 msgid "Vertical" msgstr "Verticale" -#: src/gtk/connected-device.ui:698 +#: src/gtk/connected-device.ui:764 msgid "Tilt/roll" msgstr "Inclina/ruota" -#: src/gtk/connected-device.ui:716 +#: src/gtk/connected-device.ui:782 msgid "Movement look-ahead" msgstr "Anticipo del movimento" -#: src/gtk/connected-device.ui:717 +#: src/gtk/connected-device.ui:783 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -536,15 +554,15 @@ msgstr "" "che il display virtuale non rimanga indietro rispetto ai tuoi movimenti, non " "salti in avanti o sia molto tremolante." -#: src/gtk/connected-device.ui:735 +#: src/gtk/connected-device.ui:801 msgid "Default" msgstr "Predefinito" -#: src/gtk/connected-device.ui:747 +#: src/gtk/connected-device.ui:813 msgid "Text Scaling" msgstr "Ridimensionamento del testo" -#: src/gtk/connected-device.ui:748 +#: src/gtk/connected-device.ui:814 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" "Ridimensionando il testo sotto a 1.0 si simula una maggiore risoluzione del " diff --git a/ui/po/ja.po b/ui/po/ja.po index 5667d44..be07633 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: 2025-05-07 12:40-0700\n" +"POT-Creation-Date: 2025-10-03 16:04-0700\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n" "Last-Translator: \n" "Language-Team: Japanese \n" @@ -31,33 +31,33 @@ msgstr "メガネを3Dモードに切り替え、表示の幅を2倍にします msgid "This feature is not currently supported for your device." msgstr "現在接続されているデバイスはこの機能に対応していません。" -#: src/connecteddevice.py:145 +#: src/connecteddevice.py:151 msgid "Set Focused Display Distance" msgstr "フォーカスされたディスプレイ距離" -#: src/connecteddevice.py:146 +#: src/connecteddevice.py:152 msgid "Use a closer value so the display zooms in when you look at it." msgstr "近くに設定すると見たディスプレイにズームインします。" -#: src/connecteddevice.py:153 +#: src/connecteddevice.py:159 msgid "Set All Displays Distance" msgstr "すべてのディスプレイ距離" -#: src/connecteddevice.py:154 +#: src/connecteddevice.py:160 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "遠くに設定すると視線の外れたディスプレイがズームアウトします。" -#: src/connecteddevice.py:270 +#: src/connecteddevice.py:283 msgid "" "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "and the pipewire GStreamer plugin are required." msgstr "仮想ディスプレイが追加できません。" -#: src/connecteddevice.py:304 +#: src/connecteddevice.py:317 msgid "Focused display" msgstr "フォーカスされたディスプレイ" -#: src/connecteddevice.py:310 +#: src/connecteddevice.py:323 msgid "All displays" msgstr "すべてのディスプレイ" @@ -98,15 +98,15 @@ msgstr "有効" msgid " ({time_remaining} remaining)" msgstr "(残り {time_remaining})" -#: src/licensefeaturerow.py:32 +#: src/licensefeaturerow.py:30 msgid "Side-by-side mode (gaming)" msgstr "サイドバイサイドモード(ゲーミング)" -#: src/licensefeaturerow.py:33 +#: src/licensefeaturerow.py:31 msgid "Smooth Follow (gaming)" msgstr "スムーズフォロー(ゲーミング)" -#: src/licensefeaturerow.py:34 +#: src/licensefeaturerow.py:32 msgid "Breezy Desktop (productivity)" msgstr "Breezy Desktop(プロダクティビティ)" @@ -491,30 +491,46 @@ msgstr "" "す。" #: src/gtk/connected-device.ui:642 +msgid "Neck-saver horizontal multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:643 +msgid "Higher values require smaller horizontal head movements." +msgstr "" + +#: src/gtk/connected-device.ui:675 +msgid "Neck-saver vertical multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:676 +msgid "Higher values require smaller vertical head movements." +msgstr "" + +#: src/gtk/connected-device.ui:708 msgid "Follow mode movement tracking" msgstr "フォローモード移動設定" -#: src/gtk/connected-device.ui:643 +#: src/gtk/connected-device.ui:709 msgid "Choose which movements should be tracked in follow mode." msgstr "フォローモードで追跡する方法を選択します。" -#: src/gtk/connected-device.ui:658 +#: src/gtk/connected-device.ui:724 msgid "Horizontal" msgstr "水平" -#: src/gtk/connected-device.ui:678 +#: src/gtk/connected-device.ui:744 msgid "Vertical" msgstr "垂直" -#: src/gtk/connected-device.ui:698 +#: src/gtk/connected-device.ui:764 msgid "Tilt/roll" msgstr "傾き・回転" -#: src/gtk/connected-device.ui:716 +#: src/gtk/connected-device.ui:782 msgid "Movement look-ahead" msgstr "動きの先読み" -#: src/gtk/connected-device.ui:717 +#: src/gtk/connected-device.ui:783 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -524,15 +540,15 @@ msgstr "" "ます。仮想ディスプレイが頭の動きに遅れたり、先に進んだり、非常に揺れたりする" "場合を除き、デフォルトのままで問題ありません。" -#: src/gtk/connected-device.ui:735 +#: src/gtk/connected-device.ui:801 msgid "Default" msgstr "デフォルト" -#: src/gtk/connected-device.ui:747 +#: src/gtk/connected-device.ui:813 msgid "Text Scaling" msgstr "テキストスケーリング" -#: src/gtk/connected-device.ui:748 +#: src/gtk/connected-device.ui:814 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" "テキストを1.0未満にスケーリングすると、高解像度ディスプレイをシミュレートしま" diff --git a/ui/po/pl.po b/ui/po/pl.po index c831c8a..1ce574b 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: 2025-05-07 12:40-0700\n" +"POT-Creation-Date: 2025-10-03 16:04-0700\n" "PO-Revision-Date: 2024-08-16 10:26-0700\n" "Last-Translator: \n" "Language-Team: Polish \n" @@ -28,33 +28,33 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "" -#: src/connecteddevice.py:145 +#: src/connecteddevice.py:151 msgid "Set Focused Display Distance" msgstr "" -#: src/connecteddevice.py:146 +#: src/connecteddevice.py:152 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:153 +#: src/connecteddevice.py:159 msgid "Set All Displays Distance" msgstr "" -#: src/connecteddevice.py:154 +#: src/connecteddevice.py:160 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:270 +#: src/connecteddevice.py:283 msgid "" "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "and the pipewire GStreamer plugin are required." msgstr "" -#: src/connecteddevice.py:304 +#: src/connecteddevice.py:317 msgid "Focused display" msgstr "" -#: src/connecteddevice.py:310 +#: src/connecteddevice.py:323 msgid "All displays" msgstr "" @@ -95,15 +95,15 @@ msgstr "" msgid " ({time_remaining} remaining)" msgstr "" -#: src/licensefeaturerow.py:32 +#: src/licensefeaturerow.py:30 msgid "Side-by-side mode (gaming)" msgstr "" -#: src/licensefeaturerow.py:33 +#: src/licensefeaturerow.py:31 msgid "Smooth Follow (gaming)" msgstr "" -#: src/licensefeaturerow.py:34 +#: src/licensefeaturerow.py:32 msgid "Breezy Desktop (productivity)" msgstr "" @@ -474,45 +474,61 @@ msgid "Follow mode moves all displays, not just the focused one." msgstr "" #: src/gtk/connected-device.ui:642 -msgid "Follow mode movement tracking" +msgid "Neck-saver horizontal multiplier" msgstr "" #: src/gtk/connected-device.ui:643 +msgid "Higher values require smaller horizontal head movements." +msgstr "" + +#: src/gtk/connected-device.ui:675 +msgid "Neck-saver vertical multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:676 +msgid "Higher values require smaller vertical head movements." +msgstr "" + +#: src/gtk/connected-device.ui:708 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:709 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:658 +#: src/gtk/connected-device.ui:724 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:678 +#: src/gtk/connected-device.ui:744 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:698 +#: src/gtk/connected-device.ui:764 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:716 +#: src/gtk/connected-device.ui:782 msgid "Movement look-ahead" msgstr "" -#: src/gtk/connected-device.ui:717 +#: src/gtk/connected-device.ui:783 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " "movements, jumps ahead, or is very shaky." msgstr "" -#: src/gtk/connected-device.ui:735 +#: src/gtk/connected-device.ui:801 msgid "Default" msgstr "" -#: src/gtk/connected-device.ui:747 +#: src/gtk/connected-device.ui:813 msgid "Text Scaling" msgstr "" -#: src/gtk/connected-device.ui:748 +#: src/gtk/connected-device.ui:814 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" diff --git a/ui/po/pt_BR.po b/ui/po/pt_BR.po index e3d2333..4a099ab 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: 2025-05-07 12:40-0700\n" +"POT-Creation-Date: 2025-10-03 16:04-0700\n" "PO-Revision-Date: 2024-08-19 09:39-0700\n" "Last-Translator: \n" "Language-Team: Brazilian Portuguese \n" "Language-Team: Russian \n" @@ -29,36 +29,36 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "Эта функция в настоящее время не поддерживается для вашего устройства." -#: src/connecteddevice.py:145 +#: src/connecteddevice.py:151 #, fuzzy msgid "Set Focused Display Distance" msgstr "Расстояние дисплея" -#: src/connecteddevice.py:146 +#: src/connecteddevice.py:152 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:153 +#: src/connecteddevice.py:159 #, fuzzy msgid "Set All Displays Distance" msgstr "Расстояние дисплея" -#: src/connecteddevice.py:154 +#: src/connecteddevice.py:160 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:270 +#: src/connecteddevice.py:283 msgid "" "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "and the pipewire GStreamer plugin are required." msgstr "" -#: src/connecteddevice.py:304 +#: src/connecteddevice.py:317 #, fuzzy msgid "Focused display" msgstr "Расстояние дисплея" -#: src/connecteddevice.py:310 +#: src/connecteddevice.py:323 #, fuzzy msgid "All displays" msgstr "Изогнутый дисплей" @@ -100,15 +100,15 @@ msgstr "Включено" msgid " ({time_remaining} remaining)" msgstr " ({time_remaining} осталось)" -#: src/licensefeaturerow.py:32 +#: src/licensefeaturerow.py:30 msgid "Side-by-side mode (gaming)" msgstr "Режим «бок о бок» (игровой режим)" -#: src/licensefeaturerow.py:33 +#: src/licensefeaturerow.py:31 msgid "Smooth Follow (gaming)" msgstr "Плавное следование (игровой режим)" -#: src/licensefeaturerow.py:34 +#: src/licensefeaturerow.py:32 msgid "Breezy Desktop (productivity)" msgstr "Breezy Desktop (продуктивный режим)" @@ -496,30 +496,46 @@ msgid "Follow mode moves all displays, not just the focused one." msgstr "" #: src/gtk/connected-device.ui:642 -msgid "Follow mode movement tracking" +msgid "Neck-saver horizontal multiplier" msgstr "" #: src/gtk/connected-device.ui:643 +msgid "Higher values require smaller horizontal head movements." +msgstr "" + +#: src/gtk/connected-device.ui:675 +msgid "Neck-saver vertical multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:676 +msgid "Higher values require smaller vertical head movements." +msgstr "" + +#: src/gtk/connected-device.ui:708 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:709 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:658 +#: src/gtk/connected-device.ui:724 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:678 +#: src/gtk/connected-device.ui:744 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:698 +#: src/gtk/connected-device.ui:764 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:716 +#: src/gtk/connected-device.ui:782 msgid "Movement look-ahead" msgstr "Прогнозирование движения" -#: src/gtk/connected-device.ui:717 +#: src/gtk/connected-device.ui:783 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -530,15 +546,15 @@ msgstr "" "виртуальный дисплей не отстает от движений вашей головы, не опережает или не " "очень трясётся." -#: src/gtk/connected-device.ui:735 +#: src/gtk/connected-device.ui:801 msgid "Default" msgstr "По умолчанию" -#: src/gtk/connected-device.ui:747 +#: src/gtk/connected-device.ui:813 msgid "Text Scaling" msgstr "" -#: src/gtk/connected-device.ui:748 +#: src/gtk/connected-device.ui:814 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" diff --git a/ui/po/sv.po b/ui/po/sv.po index 17d5248..82c30a2 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: 2025-05-07 12:40-0700\n" +"POT-Creation-Date: 2025-10-03 16:04-0700\n" "PO-Revision-Date: 2024-08-16 10:31-0700\n" "Last-Translator: \n" "Language-Team: Swedish \n" @@ -29,36 +29,36 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "Din enhet stöder inte den här funktionen för tillfället." -#: src/connecteddevice.py:145 +#: src/connecteddevice.py:151 #, fuzzy msgid "Set Focused Display Distance" msgstr "Avstånd till skärmen" -#: src/connecteddevice.py:146 +#: src/connecteddevice.py:152 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:153 +#: src/connecteddevice.py:159 #, fuzzy msgid "Set All Displays Distance" msgstr "Avstånd till skärmen" -#: src/connecteddevice.py:154 +#: src/connecteddevice.py:160 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:270 +#: src/connecteddevice.py:283 msgid "" "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "and the pipewire GStreamer plugin are required." msgstr "" -#: src/connecteddevice.py:304 +#: src/connecteddevice.py:317 #, fuzzy msgid "Focused display" msgstr "Avstånd till skärmen" -#: src/connecteddevice.py:310 +#: src/connecteddevice.py:323 #, fuzzy msgid "All displays" msgstr "Böjd skärm" @@ -100,15 +100,15 @@ msgstr "Aktiverad" msgid " ({time_remaining} remaining)" msgstr " ({time_remaining} kvar)" -#: src/licensefeaturerow.py:32 +#: src/licensefeaturerow.py:30 msgid "Side-by-side mode (gaming)" msgstr "Side-by-side läge (spel)" -#: src/licensefeaturerow.py:33 +#: src/licensefeaturerow.py:31 msgid "Smooth Follow (gaming)" msgstr "Smidig följning (spel)" -#: src/licensefeaturerow.py:34 +#: src/licensefeaturerow.py:32 msgid "Breezy Desktop (productivity)" msgstr "Breezy Desktop (produktivitet)" @@ -495,30 +495,46 @@ msgid "Follow mode moves all displays, not just the focused one." msgstr "" #: src/gtk/connected-device.ui:642 -msgid "Follow mode movement tracking" +msgid "Neck-saver horizontal multiplier" msgstr "" #: src/gtk/connected-device.ui:643 +msgid "Higher values require smaller horizontal head movements." +msgstr "" + +#: src/gtk/connected-device.ui:675 +msgid "Neck-saver vertical multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:676 +msgid "Higher values require smaller vertical head movements." +msgstr "" + +#: src/gtk/connected-device.ui:708 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:709 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:658 +#: src/gtk/connected-device.ui:724 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:678 +#: src/gtk/connected-device.ui:744 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:698 +#: src/gtk/connected-device.ui:764 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:716 +#: src/gtk/connected-device.ui:782 msgid "Movement look-ahead" msgstr "Rörs förväntning" -#: src/gtk/connected-device.ui:717 +#: src/gtk/connected-device.ui:783 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -527,15 +543,15 @@ msgstr "" "Motverkar ingångsfördröjning genom förutsägelse av huvudrörelser.Behåll " "standardinställningen om inte skärmen skakar mycket eller rörsig konstigt." -#: src/gtk/connected-device.ui:735 +#: src/gtk/connected-device.ui:801 msgid "Default" msgstr "Standard" -#: src/gtk/connected-device.ui:747 +#: src/gtk/connected-device.ui:813 msgid "Text Scaling" msgstr "Textskalning" -#: src/gtk/connected-device.ui:748 +#: src/gtk/connected-device.ui:814 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "Textskalning under 1.0 kommer att simulera en högre skärmupplösning" diff --git a/ui/po/uk_UA.po b/ui/po/uk_UA.po index 8c0044f..a2e71b3 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: 2025-05-07 12:40-0700\n" +"POT-Creation-Date: 2025-10-03 16:04-0700\n" "PO-Revision-Date: 2024-08-17 10:08-0700\n" "Last-Translator: \n" "Language-Team: Ukrainian \n" @@ -28,36 +28,36 @@ msgstr "Переключає окуляри в режим «бок о бок» msgid "This feature is not currently supported for your device." msgstr "Ця функція наразі не підтримується на вашому пристрої." -#: src/connecteddevice.py:145 +#: src/connecteddevice.py:151 #, fuzzy msgid "Set Focused Display Distance" msgstr "Відстань дисплея" -#: src/connecteddevice.py:146 +#: src/connecteddevice.py:152 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:153 +#: src/connecteddevice.py:159 #, fuzzy msgid "Set All Displays Distance" msgstr "Відстань дисплея" -#: src/connecteddevice.py:154 +#: src/connecteddevice.py:160 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:270 +#: src/connecteddevice.py:283 msgid "" "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "and the pipewire GStreamer plugin are required." msgstr "" -#: src/connecteddevice.py:304 +#: src/connecteddevice.py:317 #, fuzzy msgid "Focused display" msgstr "Відстань дисплея" -#: src/connecteddevice.py:310 +#: src/connecteddevice.py:323 #, fuzzy msgid "All displays" msgstr "Викривлений дисплей" @@ -99,15 +99,15 @@ msgstr "Увімкнено" msgid " ({time_remaining} remaining)" msgstr "({time_remaining} залишилося)" -#: src/licensefeaturerow.py:32 +#: src/licensefeaturerow.py:30 msgid "Side-by-side mode (gaming)" msgstr "Режим «бок о бок» (ігровий режим)" -#: src/licensefeaturerow.py:33 +#: src/licensefeaturerow.py:31 msgid "Smooth Follow (gaming)" msgstr "Плавне слідування (ігровий режим)" -#: src/licensefeaturerow.py:34 +#: src/licensefeaturerow.py:32 msgid "Breezy Desktop (productivity)" msgstr "Breezy Desktop (продуктивний прежим)" @@ -494,30 +494,46 @@ msgid "Follow mode moves all displays, not just the focused one." msgstr "" #: src/gtk/connected-device.ui:642 -msgid "Follow mode movement tracking" +msgid "Neck-saver horizontal multiplier" msgstr "" #: src/gtk/connected-device.ui:643 +msgid "Higher values require smaller horizontal head movements." +msgstr "" + +#: src/gtk/connected-device.ui:675 +msgid "Neck-saver vertical multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:676 +msgid "Higher values require smaller vertical head movements." +msgstr "" + +#: src/gtk/connected-device.ui:708 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:709 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:658 +#: src/gtk/connected-device.ui:724 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:678 +#: src/gtk/connected-device.ui:744 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:698 +#: src/gtk/connected-device.ui:764 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:716 +#: src/gtk/connected-device.ui:782 msgid "Movement look-ahead" msgstr "Прогнозування руху" -#: src/gtk/connected-device.ui:717 +#: src/gtk/connected-device.ui:783 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -528,15 +544,15 @@ msgstr "" "віртуальний дисплей відстає від рухів вашої голови, випереджає або дуже " "тремтить." -#: src/gtk/connected-device.ui:735 +#: src/gtk/connected-device.ui:801 msgid "Default" msgstr "За замовчуванням" -#: src/gtk/connected-device.ui:747 +#: src/gtk/connected-device.ui:813 msgid "Text Scaling" msgstr "" -#: src/gtk/connected-device.ui:748 +#: src/gtk/connected-device.ui:814 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" diff --git a/ui/po/zh_CN.po b/ui/po/zh_CN.po index 2bdfd1f..9d016fb 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: 2025-05-07 12:40-0700\n" +"POT-Creation-Date: 2025-10-03 16:04-0700\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n" "Last-Translator: \n" "Language-Team: Chinese (simplified) \n" @@ -26,33 +26,33 @@ msgstr "切换到并排模式,并将显示宽度翻倍。" msgid "This feature is not currently supported for your device." msgstr "您的设备目前不支援此功能。" -#: src/connecteddevice.py:145 +#: src/connecteddevice.py:151 msgid "Set Focused Display Distance" msgstr "设定注视中的屏幕的距离" -#: src/connecteddevice.py:146 +#: src/connecteddevice.py:152 msgid "Use a closer value so the display zooms in when you look at it." msgstr "近的数值会将您所看向的屏幕放大" -#: src/connecteddevice.py:153 +#: src/connecteddevice.py:159 msgid "Set All Displays Distance" msgstr "设定所有屏幕的距离" -#: src/connecteddevice.py:154 +#: src/connecteddevice.py:160 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "远的数值会将您所看向的屏幕缩小" -#: src/connecteddevice.py:270 +#: src/connecteddevice.py:283 msgid "" "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "and the pipewire GStreamer plugin are required." msgstr "无法增加模拟显示。需要安装xdg-desktop-portal和Wayland" -#: src/connecteddevice.py:304 +#: src/connecteddevice.py:317 msgid "Focused display" msgstr "注视中的屏幕" -#: src/connecteddevice.py:310 +#: src/connecteddevice.py:323 msgid "All displays" msgstr "所有的屏幕" @@ -93,15 +93,15 @@ msgstr "已启用" msgid " ({time_remaining} remaining)" msgstr " (剩下 {time_remaining})" -#: src/licensefeaturerow.py:32 +#: src/licensefeaturerow.py:30 msgid "Side-by-side mode (gaming)" msgstr "并排模式(游戏)" -#: src/licensefeaturerow.py:33 +#: src/licensefeaturerow.py:31 msgid "Smooth Follow (gaming)" msgstr "平滑跟随(游戏)" -#: src/licensefeaturerow.py:34 +#: src/licensefeaturerow.py:32 msgid "Breezy Desktop (productivity)" msgstr "Breezy Desktop (生产力)" @@ -474,30 +474,46 @@ msgid "Follow mode moves all displays, not just the focused one." msgstr "让跟随模式移动所有的屏幕而不只是注视中的屏幕" #: src/gtk/connected-device.ui:642 +msgid "Neck-saver horizontal multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:643 +msgid "Higher values require smaller horizontal head movements." +msgstr "" + +#: src/gtk/connected-device.ui:675 +msgid "Neck-saver vertical multiplier" +msgstr "" + +#: src/gtk/connected-device.ui:676 +msgid "Higher values require smaller vertical head movements." +msgstr "" + +#: src/gtk/connected-device.ui:708 msgid "Follow mode movement tracking" msgstr "跟随模式感应" -#: src/gtk/connected-device.ui:643 +#: src/gtk/connected-device.ui:709 msgid "Choose which movements should be tracked in follow mode." msgstr "选择那一些动作会被感应到" -#: src/gtk/connected-device.ui:658 +#: src/gtk/connected-device.ui:724 msgid "Horizontal" msgstr "水平动作" -#: src/gtk/connected-device.ui:678 +#: src/gtk/connected-device.ui:744 msgid "Vertical" msgstr "垂直动作" -#: src/gtk/connected-device.ui:698 +#: src/gtk/connected-device.ui:764 msgid "Tilt/roll" msgstr "倾斜及滚转动作" -#: src/gtk/connected-device.ui:716 +#: src/gtk/connected-device.ui:782 msgid "Movement look-ahead" msgstr "移动预测" -#: src/gtk/connected-device.ui:717 +#: src/gtk/connected-device.ui:783 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -506,15 +522,15 @@ msgstr "" "透过预测头部追踪位置,提前于渲染时间进行预测来抵消输入延迟。除非虚拟显示滞后" "于头部,提前跳动或非常抖动,请尽量使用默认设置。" -#: src/gtk/connected-device.ui:735 +#: src/gtk/connected-device.ui:801 msgid "Default" msgstr "默认" -#: src/gtk/connected-device.ui:747 +#: src/gtk/connected-device.ui:813 msgid "Text Scaling" msgstr "字体大小比例" -#: src/gtk/connected-device.ui:748 +#: src/gtk/connected-device.ui:814 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "字体缩放小于1.0,将模拟解析度更高的显示效果" diff --git a/ui/src/configmanager.py b/ui/src/configmanager.py index 0324d35..39fc234 100644 --- a/ui/src/configmanager.py +++ b/ui/src/configmanager.py @@ -9,7 +9,21 @@ class ConfigManager(GObject.GObject): 'multi-tap-enabled': (bool, 'Multi-Tap Enabled', 'Whether Multi-Tap is enabled', False, GObject.ParamFlags.READWRITE), 'follow-track-roll': (bool, 'Follow Track Roll', 'Whether to follow on the roll axis', False, GObject.ParamFlags.READWRITE), 'follow-track-pitch': (bool, 'Follow Track Pitch', 'Whether to follow on the pitch axis', True, GObject.ParamFlags.READWRITE), - 'follow-track-yaw': (bool, 'Follow Track Yaw', 'Whether to follow on the yaw axis', True, GObject.ParamFlags.READWRITE) + 'follow-track-yaw': (bool, 'Follow Track Yaw', 'Whether to follow on the yaw axis', True, GObject.ParamFlags.READWRITE), + 'neck-saver-horizontal-multiplier': ( + float, + 'Neck Saver Horizontal Multiplier', + 'Multiplier to reduce horizontal head movement', + 1.0, 2.5, 1.0, + GObject.ParamFlags.READWRITE, + ), + 'neck-saver-vertical-multiplier': ( + float, + 'Neck Saver Vertical Multiplier', + 'Multiplier to reduce vertical head movement', + 1.0, 2.5, 1.0, + GObject.ParamFlags.READWRITE, + ) } _instance = None @@ -35,6 +49,8 @@ class ConfigManager(GObject.GObject): self.follow_track_roll = None self.follow_track_pitch = None self.follow_track_yaw = None + self.neck_saver_horizontal_multiplier = None + self.neck_saver_vertical_multiplier = None self._running = True self._refresh_config() @@ -58,6 +74,12 @@ class ConfigManager(GObject.GObject): if self.config['smooth_follow_track_yaw'] != self.follow_track_yaw: self.set_property('follow-track-yaw', self.config['smooth_follow_track_yaw']) + if self.config['neck_saver_horizontal_multiplier'] != self.neck_saver_horizontal_multiplier: + self.set_property('neck-saver-horizontal-multiplier', self.config['neck_saver_horizontal_multiplier']) + + if self.config['neck_saver_vertical_multiplier'] != self.neck_saver_vertical_multiplier: + self.set_property('neck-saver-vertical-multiplier', self.config['neck_saver_vertical_multiplier']) + if self._running: threading.Timer(1.0, self._refresh_config).start() def _is_breezy_desktop_enabled(self): @@ -98,6 +120,20 @@ class ConfigManager(GObject.GObject): self.ipc.write_config(self.config) self.follow_track_yaw = value + def _set_neck_saver_horizontal_multiplier(self, value): + value = round(min(2.5, max(1.0, float(value))), 2) + if self.neck_saver_horizontal_multiplier != value: + self.config['neck_saver_horizontal_multiplier'] = value + self.ipc.write_config(self.config) + self.neck_saver_horizontal_multiplier = value + + def _set_neck_saver_vertical_multiplier(self, value): + value = round(min(2.5, max(1.0, float(value))), 2) + if self.neck_saver_vertical_multiplier != value: + self.config['neck_saver_vertical_multiplier'] = value + self.ipc.write_config(self.config) + self.neck_saver_vertical_multiplier = value + def do_set_property(self, prop, value): if prop.name == 'breezy-desktop-enabled': self._set_breezy_desktop_enabled(value) @@ -109,6 +145,10 @@ class ConfigManager(GObject.GObject): self._set_follow_track_pitch(value) elif prop.name == 'follow-track-yaw': self._set_follow_track_yaw(value) + elif prop.name == 'neck-saver-horizontal-multiplier': + self._set_neck_saver_horizontal_multiplier(value) + elif prop.name == 'neck-saver-vertical-multiplier': + self._set_neck_saver_vertical_multiplier(value) def do_get_property(self, prop): if prop.name == 'breezy-desktop-enabled': @@ -120,4 +160,8 @@ class ConfigManager(GObject.GObject): elif prop.name == 'follow-track-pitch': return self.follow_track_pitch elif prop.name == 'follow-track-yaw': - return self.follow_track_yaw \ No newline at end of file + return self.follow_track_yaw + elif prop.name == 'neck-saver-horizontal-multiplier': + return self.neck_saver_horizontal_multiplier + elif prop.name == 'neck-saver-vertical-multiplier': + return self.neck_saver_vertical_multiplier \ No newline at end of file diff --git a/ui/src/connecteddevice.py b/ui/src/connecteddevice.py index 01f3f71..ee1442c 100644 --- a/ui/src/connecteddevice.py +++ b/ui/src/connecteddevice.py @@ -67,6 +67,10 @@ class ConnectedDevice(Gtk.Box): movement_look_ahead_adjustment = Gtk.Template.Child() text_scaling_scale = Gtk.Template.Child() text_scaling_adjustment = Gtk.Template.Child() + neck_saver_horizontal_scale = Gtk.Template.Child() + neck_saver_horizontal_adjustment = Gtk.Template.Child() + neck_saver_vertical_scale = Gtk.Template.Child() + neck_saver_vertical_adjustment = Gtk.Template.Child() enable_multi_tap_switch = Gtk.Template.Child() legacy_follow_mode_switch = Gtk.Template.Child() follow_track_yaw_switch = Gtk.Template.Child() @@ -98,7 +102,9 @@ class ConnectedDevice(Gtk.Box): self.monitor_wrapping_scheme_menu, self.monitor_spacing_scale, self.viewport_offset_x_scale, - self.viewport_offset_y_scale + self.viewport_offset_y_scale, + self.neck_saver_horizontal_scale, + self.neck_saver_vertical_scale ] self.settings = SettingsManager.get_instance().settings @@ -176,6 +182,8 @@ class ConnectedDevice(Gtk.Box): self._bind_switch_to_config(self.follow_track_roll_switch, 'follow-track-roll') self._bind_switch_to_config(self.follow_track_pitch_switch, 'follow-track-pitch') self._bind_switch_to_config(self.follow_track_yaw_switch, 'follow-track-yaw') + self._bind_scale_to_config(self.neck_saver_horizontal_adjustment, 'neck-saver-horizontal-multiplier') + self._bind_scale_to_config(self.neck_saver_vertical_adjustment, 'neck-saver-vertical-multiplier') self.use_optimal_monitor_config_switch.connect('notify::active', self._refresh_use_optimal_monitor_config) @@ -210,6 +218,11 @@ class ConnectedDevice(Gtk.Box): # wayland is required to create virtual displays self.is_wayland = "WAYLAND_DISPLAY" in os.environ + def _bind_scale_to_config(self, scale, config_key): + self.config_manager.bind_property(config_key, scale, 'value', Gio.SettingsBindFlags.DEFAULT) + scale.set_value(self.config_manager.get_property(config_key)) + scale.connect('value-changed', lambda widget: self.config_manager.set_property(config_key, widget.get_value())) + def _bind_switch_to_config(self, switch, config_key): self.config_manager.bind_property(config_key, switch, 'active', Gio.SettingsBindFlags.DEFAULT) switch.set_active(self.config_manager.get_property(config_key)) diff --git a/ui/src/gtk/connected-device.ui b/ui/src/gtk/connected-device.ui index df5ed11..daec778 100644 --- a/ui/src/gtk/connected-device.ui +++ b/ui/src/gtk/connected-device.ui @@ -637,6 +637,72 @@ 700 + + + Neck-saver horizontal multiplier + Higher values require smaller horizontal head movements. + + + 3 + true + 0 + 2 + 350 + false + + + 1.0 + 2.5 + 0.01 + 1.0 + + + + 1.0 + 1.25 + 1.5 + 1.75 + 2.0 + 2.25 + 2.5 + + + + + + + + Neck-saver vertical multiplier + Higher values require smaller vertical head movements. + + + 3 + true + 0 + 2 + 350 + false + + + 1.0 + 2.5 + 0.01 + 1.0 + + + + 1.0 + 1.25 + 1.5 + 1.75 + 2.0 + 2.25 + 2.5 + + + + + Follow mode movement tracking