Add neck-saver controls for GNOME and KWin apps

This commit is contained in:
wheaney 2025-10-03 16:04:34 -07:00
parent e1e04b24d5
commit 13d5d6bf8e
19 changed files with 698 additions and 249 deletions

View File

@ -1 +1 @@
2.3.1
2.3.2

View File

@ -48,6 +48,8 @@
#include <QFile>
#include <QDir>
#include <QJsonDocument>
#include <cmath>
#include <algorithm>
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<QLabel*>("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<int>(std::round(horiz * 100.0));
if (ui.NeckSaverHorizontalMultiplier->value() != horizInt) {
ui.NeckSaverHorizontalMultiplier->setValue(horizInt);
}
const double vert = neckSaverVerticalMultiplier(configJsonOpt);
const int vertInt = static_cast<int>(std::round(vert * 100.0));
if (ui.NeckSaverVerticalMultiplier->value() != vertInt) {
ui.NeckSaverVerticalMultiplier->setValue(vertInt);
}
refreshLicenseUi(stateJson);
m_driverStateInitialized = true;
}
double BreezyDesktopEffectConfig::neckSaverHorizontalMultiplier(std::optional<QJsonObject> 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<QJsonObject> 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<QJsonObject> configJsonOpt)
{
if (!configJsonOpt) return false;

View File

@ -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<QJsonObject> configJsonOpt);
bool smoothFollowTrackPitchEnabled(std::optional<QJsonObject> configJsonOpt);
bool smoothFollowTrackRollEnabled(std::optional<QJsonObject> configJsonOpt);
double neckSaverHorizontalMultiplier(std::optional<QJsonObject> configJsonOpt);
double neckSaverVerticalMultiplier(std::optional<QJsonObject> configJsonOpt);
void pollDriverState();
void refreshLicenseUi(const QJsonObject &rootObj);
void checkEffectLoaded();

View File

@ -535,6 +535,76 @@
<property name="checked"><bool>false</bool></property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="labelNeckSaverHorizontal">
<property name="text">
<string>Neck-saver horizontal:</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="LabeledSlider" name="NeckSaverHorizontalMultiplier">
<property name="decimalShift">
<double>2</double>
</property>
<property name="minimum">
<number>100</number>
</property>
<property name="maximum">
<number>250</number>
</property>
<property name="tickStartOffset">
<double>25</double>
</property>
<property name="tickInterval">
<double>50</double>
</property>
<property name="tickPosition">
<enum>QSlider::NoTicks</enum>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tracking">
<bool>false</bool>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="labelNeckSaverVertical">
<property name="text">
<string>Neck-saver vertical:</string>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="LabeledSlider" name="NeckSaverVerticalMultiplier">
<property name="decimalShift">
<double>2</double>
</property>
<property name="minimum">
<number>100</number>
</property>
<property name="maximum">
<number>250</number>
</property>
<property name="tickStartOffset">
<double>25</double>
</property>
<property name="tickInterval">
<double>50</double>
</property>
<property name="tickPosition">
<enum>QSlider::NoTicks</enum>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tracking">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tabLicenseDetails">

View File

@ -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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 ""

View File

@ -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: <wayne@xronlinux.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\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"

View File

@ -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: <wayne@xronlinux.com>\n"
"Language-Team: Spanish <es@tp.org.es>\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 "

View File

@ -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: <wayne@xronlinux.com>\n"
"Language-Team: French <traduc@traduc.org>\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 "

View File

@ -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: <fsciarra62@gmail.com>\n"
"Language-Team: Italian <tp@lists.linux.it>\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 "

View File

@ -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: <wayne@xronlinux.com>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\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未満にスケーリングすると、高解像度ディスプレイをシミュレートしま"

View File

@ -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: <wayne@xronlinux.com>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\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 ""

View File

@ -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: <wayne@xronlinux.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-"
@ -30,27 +30,27 @@ msgstr ""
msgid "This feature is not currently supported for your device."
msgstr "Este recurso não é atualmente suportado para o seu dispositivo."
#: src/connecteddevice.py:145
#: src/connecteddevice.py:151
msgid "Set Focused Display Distance"
msgstr "Distância da tela"
#: src/connecteddevice.py:146
#: src/connecteddevice.py:152
msgid "Use a closer value so the display zooms in when you look at it."
msgstr ""
"Use um valor mais aproximado para que as telas se aproximem quando olha para "
"ela."
#: src/connecteddevice.py:153
#: src/connecteddevice.py:159
msgid "Set All Displays Distance"
msgstr "Distância da tela"
#: src/connecteddevice.py:154
#: src/connecteddevice.py:160
msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr ""
"Use um valor mais distante para que as telas se afastem quando olha para "
"elas."
#: 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."
@ -58,11 +58,11 @@ msgstr ""
"Não é possível adicionar telas neste dispositivo. xdg-desktop-portal é "
"requerido."
#: src/connecteddevice.py:304
#: src/connecteddevice.py:317
msgid "Focused display"
msgstr "Distância da tela"
#: src/connecteddevice.py:310
#: src/connecteddevice.py:323
msgid "All displays"
msgstr "Tela curva"
@ -103,15 +103,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 (Jogos)"
#: src/licensefeaturerow.py:33
#: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)"
msgstr "Acompanhar Suavemente (Jogos)"
#: src/licensefeaturerow.py:34
#: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (produtividade)"
@ -504,30 +504,46 @@ msgid "Follow mode moves all displays, not just the focused one."
msgstr "O modo Seguir move todas as telas, e não apenas o que está focado."
#: 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 "Modo de acompanhamento do movimento"
#: 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 "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 "Inclinação/rolagem"
#: src/gtk/connected-device.ui:716
#: src/gtk/connected-device.ui:782
msgid "Movement look-ahead"
msgstr "Antecipação de 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 "
@ -538,15 +554,15 @@ msgstr ""
"virtual tenha atrasos, avance ou seja muito instável em relação aos "
"movimentos da cabeça "
#: src/gtk/connected-device.ui:735
#: src/gtk/connected-device.ui:801
msgid "Default"
msgstr "Padrão"
#: src/gtk/connected-device.ui:747
#: src/gtk/connected-device.ui:813
msgid "Text Scaling"
msgstr "Redimensionamento 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 ""
"Redimensionar o texto abaixo de 1.0 simulará uma tela de resolução mais alta"

View File

@ -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 09:39-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Russian <gnu@d07.ru>\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 ""

View File

@ -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: <wayne@xronlinux.com>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\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"

View File

@ -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: <wayne@xronlinux.com>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\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 ""

View File

@ -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: <wayne@xronlinux.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\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,将模拟解析度更高的显示效果"

View File

@ -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
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

View File

@ -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))

View File

@ -637,6 +637,72 @@
<object class="AdwPreferencesGroup">
<property name="title"> </property>
<property name="width-request">700</property>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Neck-saver horizontal multiplier</property>
<property name="subtitle" translatable="yes">Higher values require smaller horizontal head movements.</property>
<child>
<object class="GtkScale" id="neck_saver_horizontal_scale">
<property name="valign">3</property>
<property name="draw-value">true</property>
<property name="value-pos">0</property>
<property name="digits">2</property>
<property name="width-request">350</property>
<property name="has-origin">false</property>
<property name="adjustment">
<object class="GtkAdjustment" id="neck_saver_horizontal_adjustment">
<property name="lower">1.0</property>
<property name="upper">2.5</property>
<property name="step-increment">0.01</property>
<property name="value">1.0</property>
</object>
</property>
<marks>
<mark value="1.0" position="bottom">1.0</mark>
<mark value="1.25" position="bottom">1.25</mark>
<mark value="1.5" position="bottom">1.5</mark>
<mark value="1.75" position="bottom">1.75</mark>
<mark value="2.0" position="bottom">2.0</mark>
<mark value="2.25" position="bottom">2.25</mark>
<mark value="2.5" position="bottom">2.5</mark>
</marks>
</object>
</child>
</object>
</child>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Neck-saver vertical multiplier</property>
<property name="subtitle" translatable="yes">Higher values require smaller vertical head movements.</property>
<child>
<object class="GtkScale" id="neck_saver_vertical_scale">
<property name="valign">3</property>
<property name="draw-value">true</property>
<property name="value-pos">0</property>
<property name="digits">2</property>
<property name="width-request">350</property>
<property name="has-origin">false</property>
<property name="adjustment">
<object class="GtkAdjustment" id="neck_saver_vertical_adjustment">
<property name="lower">1.0</property>
<property name="upper">2.5</property>
<property name="step-increment">0.01</property>
<property name="value">1.0</property>
</object>
</property>
<marks>
<mark value="1.0" position="bottom">1.0</mark>
<mark value="1.25" position="bottom">1.25</mark>
<mark value="1.5" position="bottom">1.5</mark>
<mark value="1.75" position="bottom">1.75</mark>
<mark value="2.0" position="bottom">2.0</mark>
<mark value="2.25" position="bottom">2.25</mark>
<mark value="2.5" position="bottom">2.5</mark>
</marks>
</object>
</child>
</object>
</child>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Follow mode movement tracking</property>