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 <QFile>
#include <QDir> #include <QDir>
#include <QJsonDocument> #include <QJsonDocument>
#include <cmath>
#include <algorithm>
Q_LOGGING_CATEGORY(KWIN_XR, "kwin.xr") 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.SmoothFollowTrackYaw, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateSmoothFollowTrackYaw);
connect(ui.SmoothFollowTrackPitch, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateSmoothFollowTrackPitch); connect(ui.SmoothFollowTrackPitch, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateSmoothFollowTrackPitch);
connect(ui.SmoothFollowTrackRoll, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateSmoothFollowTrackRoll); 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")) { if (auto label = widget()->findChild<QLabel*>("labelAppNameVersion")) {
label->setText(QStringLiteral("Breezy Desktop - v%1").arg(QLatin1String(BREEZY_DESKTOP_VERSION_STR))); 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) if (ui.SmoothFollowTrackRoll->isChecked() != trackRoll)
ui.SmoothFollowTrackRoll->setChecked(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); refreshLicenseUi(stateJson);
m_driverStateInitialized = true; 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) bool BreezyDesktopEffectConfig::multitapEnabled(std::optional<QJsonObject> configJsonOpt)
{ {
if (!configJsonOpt) return false; if (!configJsonOpt) return false;

View File

@ -34,6 +34,8 @@ private:
void updateSmoothFollowTrackYaw(); void updateSmoothFollowTrackYaw();
void updateSmoothFollowTrackPitch(); void updateSmoothFollowTrackPitch();
void updateSmoothFollowTrackRoll(); void updateSmoothFollowTrackRoll();
void updateNeckSaverHorizontal();
void updateNeckSaverVertical();
void updateUiFromConfig(); void updateUiFromConfig();
void updateUiFromDefaultConfig(); void updateUiFromDefaultConfig();
void updateConfigFromUi(); void updateConfigFromUi();
@ -44,6 +46,8 @@ private:
bool smoothFollowTrackYawEnabled(std::optional<QJsonObject> configJsonOpt); bool smoothFollowTrackYawEnabled(std::optional<QJsonObject> configJsonOpt);
bool smoothFollowTrackPitchEnabled(std::optional<QJsonObject> configJsonOpt); bool smoothFollowTrackPitchEnabled(std::optional<QJsonObject> configJsonOpt);
bool smoothFollowTrackRollEnabled(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 pollDriverState();
void refreshLicenseUi(const QJsonObject &rootObj); void refreshLicenseUi(const QJsonObject &rootObj);
void checkEffectLoaded(); void checkEffectLoaded();

View File

@ -535,6 +535,76 @@
<property name="checked"><bool>false</bool></property> <property name="checked"><bool>false</bool></property>
</widget> </widget>
</item> </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> </layout>
</widget> </widget>
<widget class="QWidget" name="tabLicenseDetails"> <widget class="QWidget" name="tabLicenseDetails">

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -27,33 +27,33 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "" msgstr ""
#: src/connecteddevice.py:145 #: src/connecteddevice.py:151
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "" msgstr ""
#: src/connecteddevice.py:146 #: src/connecteddevice.py:152
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:153 #: src/connecteddevice.py:159
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "" msgstr ""
#: src/connecteddevice.py:154 #: src/connecteddevice.py:160
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:270 #: src/connecteddevice.py:283
msgid "" msgid ""
"Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, "
"and the pipewire GStreamer plugin are required." "and the pipewire GStreamer plugin are required."
msgstr "" msgstr ""
#: src/connecteddevice.py:304 #: src/connecteddevice.py:317
msgid "Focused display" msgid "Focused display"
msgstr "" msgstr ""
#: src/connecteddevice.py:310 #: src/connecteddevice.py:323
msgid "All displays" msgid "All displays"
msgstr "" msgstr ""
@ -94,15 +94,15 @@ msgstr ""
msgid " ({time_remaining} remaining)" msgid " ({time_remaining} remaining)"
msgstr "" msgstr ""
#: src/licensefeaturerow.py:32 #: src/licensefeaturerow.py:30
msgid "Side-by-side mode (gaming)" msgid "Side-by-side mode (gaming)"
msgstr "" msgstr ""
#: src/licensefeaturerow.py:33 #: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)" msgid "Smooth Follow (gaming)"
msgstr "" msgstr ""
#: src/licensefeaturerow.py:34 #: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)" msgid "Breezy Desktop (productivity)"
msgstr "" msgstr ""
@ -473,45 +473,61 @@ msgid "Follow mode moves all displays, not just the focused one."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:642 #: src/gtk/connected-device.ui:642
msgid "Follow mode movement tracking" msgid "Neck-saver horizontal multiplier"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:643 #: 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." msgid "Choose which movements should be tracked in follow mode."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:658 #: src/gtk/connected-device.ui:724
msgid "Horizontal" msgid "Horizontal"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:678 #: src/gtk/connected-device.ui:744
msgid "Vertical" msgid "Vertical"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:698 #: src/gtk/connected-device.ui:764
msgid "Tilt/roll" msgid "Tilt/roll"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:716 #: src/gtk/connected-device.ui:782
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:717 #: src/gtk/connected-device.ui:783
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
"movements, jumps ahead, or is very shaky." "movements, jumps ahead, or is very shaky."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:735 #: src/gtk/connected-device.ui:801
msgid "Default" msgid "Default"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:747 #: src/gtk/connected-device.ui:813
msgid "Text Scaling" msgid "Text Scaling"
msgstr "" 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" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2024-08-02 20:54-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\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." msgid "This feature is not currently supported for your device."
msgstr "Diese Funktion wird von Ihrem Gerät derzeit nicht unterstützt." 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" msgid "Set Focused Display Distance"
msgstr "Setze fokussierte Bildschirmentfernung" 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." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
"Nutze einen Näher Wert um den Bildschirm zu vergößern, wenn der Bildschirm " "Nutze einen Näher Wert um den Bildschirm zu vergößern, wenn der Bildschirm "
"angesehen wird." "angesehen wird."
#: src/connecteddevice.py:153 #: src/connecteddevice.py:159
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Setze alle Bildschirmentfernungen" 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." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
"Nutze einen Entfernter Wert um den Bildschirm zu verkleinern, wenn diese " "Nutze einen Entfernter Wert um den Bildschirm zu verkleinern, wenn diese "
"nicht angesehen werden." "nicht angesehen werden."
#: src/connecteddevice.py:270 #: src/connecteddevice.py:283
msgid "" msgid ""
"Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, "
"and the pipewire GStreamer plugin are required." "and the pipewire GStreamer plugin are required."
msgstr "" msgstr ""
"Virtuelle Bildschirme können nicht hinzugefügt werden." "Virtuelle Bildschirme können nicht hinzugefügt werden.Wayland und xdg-"
"Wayland und xdg-desktop-portal werden benötigt" "desktop-portal werden benötigt"
#: src/connecteddevice.py:304 #: src/connecteddevice.py:317
msgid "Focused display" msgid "Focused display"
msgstr "Fokussierter Bildschirm" msgstr "Fokussierter Bildschirm"
#: src/connecteddevice.py:310 #: src/connecteddevice.py:323
msgid "All displays" msgid "All displays"
msgstr "Gebogene Bildschirm" msgstr "Gebogene Bildschirm"
@ -102,15 +102,15 @@ msgstr "Aktiviert"
msgid " ({time_remaining} remaining)" msgid " ({time_remaining} remaining)"
msgstr " ({time_remaining} verbleibend)" msgstr " ({time_remaining} verbleibend)"
#: src/licensefeaturerow.py:32 #: src/licensefeaturerow.py:30
msgid "Side-by-side mode (gaming)" msgid "Side-by-side mode (gaming)"
msgstr "Side-by-Side-Modus (Gaming)" msgstr "Side-by-Side-Modus (Gaming)"
#: src/licensefeaturerow.py:33 #: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)" msgid "Smooth Follow (gaming)"
msgstr "Glattes Verfolgen (Gaming)" msgstr "Glattes Verfolgen (Gaming)"
#: src/licensefeaturerow.py:34 #: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)" msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (Produktivität)" 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" msgstr "Folgemodus bewegt alle Bildschirme, nicht nur den fokussierten"
#: src/gtk/connected-device.ui:642 #: 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" msgid "Follow mode movement tracking"
msgstr "Folgemodus Bewegungstracking" 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." msgid "Choose which movements should be tracked in follow mode."
msgstr "Setzen Sie, welchen Bewegungen der Folgemodus folgen soll." msgstr "Setzen Sie, welchen Bewegungen der Folgemodus folgen soll."
#: src/gtk/connected-device.ui:658 #: src/gtk/connected-device.ui:724
msgid "Horizontal" msgid "Horizontal"
msgstr "Horizontal" msgstr "Horizontal"
#: src/gtk/connected-device.ui:678 #: src/gtk/connected-device.ui:744
msgid "Vertical" msgid "Vertical"
msgstr "Vertikal" msgstr "Vertikal"
#: src/gtk/connected-device.ui:698 #: src/gtk/connected-device.ui:764
msgid "Tilt/roll" msgid "Tilt/roll"
msgstr "Neigen/Rollen" msgstr "Neigen/Rollen"
#: src/gtk/connected-device.ui:716 #: src/gtk/connected-device.ui:782
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Bewegungsvorausschau" msgstr "Bewegungsvorausschau"
#: src/gtk/connected-device.ui:717 #: src/gtk/connected-device.ui:783
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "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 " "es sei denn, der virtuelle Bildschirm hängt hinter Ihren Kopfbewegungen "
"hinterher, springt vor oder ist sehr wackelig." "hinterher, springt vor oder ist sehr wackelig."
#: src/gtk/connected-device.ui:735 #: src/gtk/connected-device.ui:801
msgid "Default" msgid "Default"
msgstr "Standard" msgstr "Standard"
#: src/gtk/connected-device.ui:747 #: src/gtk/connected-device.ui:813
msgid "Text Scaling" msgid "Text Scaling"
msgstr "Textskalierung" 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" 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" msgstr "Text unter 1.0 skalieren simuliert einen höher aufgelösten Bildschirm"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2024-08-02 20:55-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Spanish <es@tp.org.es>\n" "Language-Team: Spanish <es@tp.org.es>\n"
@ -28,26 +28,26 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "Esta función no es compatible con tu dispositivo en este momento." 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" msgid "Set Focused Display Distance"
msgstr "Ajusta Distancia de Enfoque de la Pantalla" 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." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
"Usa un valor más cercano para que la pantalla se acerque cuando la mires." "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" msgid "Set All Displays Distance"
msgstr "Ajusta Todas las Distancias de Pantalla" 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." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
"Usa un valor más alejado para que las pantallas se alejen cuando apartes la " "Usa un valor más alejado para que las pantallas se alejen cuando apartes la "
"vista." "vista."
#: src/connecteddevice.py:270 #: src/connecteddevice.py:283
msgid "" msgid ""
"Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, "
"and the pipewire GStreamer plugin are required." "and the pipewire GStreamer plugin are required."
@ -55,11 +55,11 @@ msgstr ""
"No se pueden agregar pantallas virtuales en esta máquina. Se requiere " "No se pueden agregar pantallas virtuales en esta máquina. Se requiere "
"Wayland y xdg-desktop-portal." "Wayland y xdg-desktop-portal."
#: src/connecteddevice.py:304 #: src/connecteddevice.py:317
msgid "Focused display" msgid "Focused display"
msgstr "Pantalla enfocada" msgstr "Pantalla enfocada"
#: src/connecteddevice.py:310 #: src/connecteddevice.py:323
msgid "All displays" msgid "All displays"
msgstr "Todas las pantallas" msgstr "Todas las pantallas"
@ -100,15 +100,15 @@ msgstr "Habilitado"
msgid " ({time_remaining} remaining)" msgid " ({time_remaining} remaining)"
msgstr " ({time_remaining} restantes)" msgstr " ({time_remaining} restantes)"
#: src/licensefeaturerow.py:32 #: src/licensefeaturerow.py:30
msgid "Side-by-side mode (gaming)" msgid "Side-by-side mode (gaming)"
msgstr "Modo lado a lado (juegos)" msgstr "Modo lado a lado (juegos)"
#: src/licensefeaturerow.py:33 #: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)" msgid "Smooth Follow (gaming)"
msgstr "Seguimiento suave (juegos)" msgstr "Seguimiento suave (juegos)"
#: src/licensefeaturerow.py:34 #: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)" msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (productividad)" 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." msgstr "El modo de seguimiento mueve todas las pantallas, no solo la enfocada."
#: src/gtk/connected-device.ui:642 #: 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" msgid "Follow mode movement tracking"
msgstr "Rastreo de movimiento de modo de seguimiento" 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." msgid "Choose which movements should be tracked in follow mode."
msgstr "Elige qué movimientos deben rastrearse en el modo de seguimiento." 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" msgid "Horizontal"
msgstr "Horizontal" msgstr "Horizontal"
#: src/gtk/connected-device.ui:678 #: src/gtk/connected-device.ui:744
msgid "Vertical" msgid "Vertical"
msgstr "Vertical" msgstr "Vertical"
#: src/gtk/connected-device.ui:698 #: src/gtk/connected-device.ui:764
msgid "Tilt/roll" msgid "Tilt/roll"
msgstr "Inclinación/giro" msgstr "Inclinación/giro"
#: src/gtk/connected-device.ui:716 #: src/gtk/connected-device.ui:782
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Anticipación de movimiento" msgstr "Anticipación de movimiento"
#: src/gtk/connected-device.ui:717 #: src/gtk/connected-device.ui:783
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "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 " "predeterminado a menos que la pantalla virtual se retrase detrás de los "
"movimientos de la cabeza, se adelante o sea muy inestable." "movimientos de la cabeza, se adelante o sea muy inestable."
#: src/gtk/connected-device.ui:735 #: src/gtk/connected-device.ui:801
msgid "Default" msgid "Default"
msgstr "Predeterminado" msgstr "Predeterminado"
#: src/gtk/connected-device.ui:747 #: src/gtk/connected-device.ui:813
msgid "Text Scaling" msgid "Text Scaling"
msgstr "Escalado de Texto" 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" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
"Escalando el texto por debajo de 1.0 simulará una pantalla de mayor " "Escalando el texto por debajo de 1.0 simulará una pantalla de mayor "

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2024-08-02 20:54-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: French <traduc@traduc.org>\n" "Language-Team: French <traduc@traduc.org>\n"
@ -31,37 +31,38 @@ msgstr ""
"Cette fonctionnalité n'est actuellement pas prise en charge par votre " "Cette fonctionnalité n'est actuellement pas prise en charge par votre "
"appareil." "appareil."
#: src/connecteddevice.py:145 #: src/connecteddevice.py:151
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Définir la distance de l'écran cible" 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." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
"Utiliser une valeur plus proche pour que l'écran zoom lorsqu'on le regarde." "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" msgid "Set All Displays Distance"
msgstr "Définir la distance d'affichage de tous les écrans" 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." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
"Utiliser une valeur plus éloignée afin que les écrans dézooment lorsqu'on ne " "Utiliser une valeur plus éloignée afin que les écrans dézooment lorsqu'on ne "
"les regarde plus." "les regarde plus."
#: src/connecteddevice.py:270 #: src/connecteddevice.py:283
msgid "" msgid ""
"Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, "
"and the pipewire GStreamer plugin are required." "and the pipewire GStreamer plugin are required."
msgstr "Impossible d'ajouter des écrans virtuels sur cet appareil. " msgstr ""
"Wayland et xdg-desktop-portal sont nécessaires." "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" msgid "Focused display"
msgstr "Ecran cible" msgstr "Ecran cible"
#: src/connecteddevice.py:310 #: src/connecteddevice.py:323
msgid "All displays" msgid "All displays"
msgstr "Tous les écrans" msgstr "Tous les écrans"
@ -102,15 +103,15 @@ msgstr "Activé"
msgid " ({time_remaining} remaining)" msgid " ({time_remaining} remaining)"
msgstr " ({time_remaining} restant)" msgstr " ({time_remaining} restant)"
#: src/licensefeaturerow.py:32 #: src/licensefeaturerow.py:30
msgid "Side-by-side mode (gaming)" msgid "Side-by-side mode (gaming)"
msgstr "Mode SBS (jeu)" msgstr "Mode SBS (jeu)"
#: src/licensefeaturerow.py:33 #: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)" msgid "Smooth Follow (gaming)"
msgstr "Suivi fluide (jeu)" msgstr "Suivi fluide (jeu)"
#: src/licensefeaturerow.py:34 #: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)" msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (productivité)" msgstr "Breezy Desktop (productivité)"
@ -507,30 +508,46 @@ msgstr ""
"Le mode suivi déplace tous les écrans, pas seulement celui que l'on regarde." "Le mode suivi déplace tous les écrans, pas seulement celui que l'on regarde."
#: src/gtk/connected-device.ui:642 #: 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" msgid "Follow mode movement tracking"
msgstr "Suivi des mouvements en mode suivi" 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." msgid "Choose which movements should be tracked in follow mode."
msgstr "Définissez quels mouvements doivent être suivis en mode suivi." 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" msgid "Horizontal"
msgstr "Horizontaux" msgstr "Horizontaux"
#: src/gtk/connected-device.ui:678 #: src/gtk/connected-device.ui:744
msgid "Vertical" msgid "Vertical"
msgstr "Verticaux" msgstr "Verticaux"
#: src/gtk/connected-device.ui:698 #: src/gtk/connected-device.ui:764
msgid "Tilt/roll" msgid "Tilt/roll"
msgstr "Inclinaison" msgstr "Inclinaison"
#: src/gtk/connected-device.ui:716 #: src/gtk/connected-device.ui:782
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Anticipation des mouvements" msgstr "Anticipation des mouvements"
#: src/gtk/connected-device.ui:717 #: src/gtk/connected-device.ui:783
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "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 " "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." "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" msgid "Default"
msgstr "Par défaut" msgstr "Par défaut"
#: src/gtk/connected-device.ui:747 #: src/gtk/connected-device.ui:813
msgid "Text Scaling" msgid "Text Scaling"
msgstr "Mise à l'échelle du texte" 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" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
"Une mise à l'échelle du texte en dessous de 1.0 simulera un affichage de " "Une mise à l'échelle du texte en dessous de 1.0 simulera un affichage de "

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2024-08-02 21:14-0700\n"
"Last-Translator: <fsciarra62@gmail.com>\n" "Last-Translator: <fsciarra62@gmail.com>\n"
"Language-Team: Italian <tp@lists.linux.it>\n" "Language-Team: Italian <tp@lists.linux.it>\n"
@ -29,36 +29,38 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "Questa funzione non è attualmente supportata sul tuo dispositivo." msgstr "Questa funzione non è attualmente supportata sul tuo dispositivo."
#: src/connecteddevice.py:145 #: src/connecteddevice.py:151
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Distanza del display con focus" 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." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
"Usa un valore più vicino, così che il display si avvicini quando lo guardi." "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" msgid "Set All Displays Distance"
msgstr "Imposta la distanza di tutti i display" 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." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
"Usa un valore più distante così che i display si allontanino quando distogli " "Usa un valore più distante così che i display si allontanino quando distogli "
"lo sguardo." "lo sguardo."
#: src/connecteddevice.py:270 #: src/connecteddevice.py:283
msgid "" msgid ""
"Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, "
"and the pipewire GStreamer plugin are required." "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" msgid "Focused display"
msgstr "Distanza del display col focus" msgstr "Distanza del display col focus"
#: src/connecteddevice.py:310 #: src/connecteddevice.py:323
msgid "All displays" msgid "All displays"
msgstr "Tutti i display" msgstr "Tutti i display"
@ -99,15 +101,15 @@ msgstr "Abilitato"
msgid " ({time_remaining} remaining)" msgid " ({time_remaining} remaining)"
msgstr " ({time_remaining} rimanenti)" msgstr " ({time_remaining} rimanenti)"
#: src/licensefeaturerow.py:32 #: src/licensefeaturerow.py:30
msgid "Side-by-side mode (gaming)" msgid "Side-by-side mode (gaming)"
msgstr "Modalità side-by-side (gaming)" msgstr "Modalità side-by-side (gaming)"
#: src/licensefeaturerow.py:33 #: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)" msgid "Smooth Follow (gaming)"
msgstr "Smooth Follow (gaming)" msgstr "Smooth Follow (gaming)"
#: src/licensefeaturerow.py:34 #: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)" msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (produttività)" msgstr "Breezy Desktop (produttività)"
@ -501,31 +503,47 @@ msgstr ""
"La modalità inseguimento muove tutti i display, non solo quello col focus." "La modalità inseguimento muove tutti i display, non solo quello col focus."
#: src/gtk/connected-device.ui:642 #: 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" msgid "Follow mode movement tracking"
msgstr "Tracciamento del movimento nella modalità inseguimento" 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." msgid "Choose which movements should be tracked in follow mode."
msgstr "" msgstr ""
"Scegli quale movimento deve essere tracciato nella modalità inseguimento." "Scegli quale movimento deve essere tracciato nella modalità inseguimento."
#: src/gtk/connected-device.ui:658 #: src/gtk/connected-device.ui:724
msgid "Horizontal" msgid "Horizontal"
msgstr "Orizzontale" msgstr "Orizzontale"
#: src/gtk/connected-device.ui:678 #: src/gtk/connected-device.ui:744
msgid "Vertical" msgid "Vertical"
msgstr "Verticale" msgstr "Verticale"
#: src/gtk/connected-device.ui:698 #: src/gtk/connected-device.ui:764
msgid "Tilt/roll" msgid "Tilt/roll"
msgstr "Inclina/ruota" msgstr "Inclina/ruota"
#: src/gtk/connected-device.ui:716 #: src/gtk/connected-device.ui:782
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Anticipo del movimento" msgstr "Anticipo del movimento"
#: src/gtk/connected-device.ui:717 #: src/gtk/connected-device.ui:783
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "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 " "che il display virtuale non rimanga indietro rispetto ai tuoi movimenti, non "
"salti in avanti o sia molto tremolante." "salti in avanti o sia molto tremolante."
#: src/gtk/connected-device.ui:735 #: src/gtk/connected-device.ui:801
msgid "Default" msgid "Default"
msgstr "Predefinito" msgstr "Predefinito"
#: src/gtk/connected-device.ui:747 #: src/gtk/connected-device.ui:813
msgid "Text Scaling" msgid "Text Scaling"
msgstr "Ridimensionamento del testo" 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" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
"Ridimensionando il testo sotto a 1.0 si simula una maggiore risoluzione del " "Ridimensionando il testo sotto a 1.0 si simula una maggiore risoluzione del "

View File

@ -11,7 +11,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2024-08-02 20:55-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\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." msgid "This feature is not currently supported for your device."
msgstr "現在接続されているデバイスはこの機能に対応していません。" msgstr "現在接続されているデバイスはこの機能に対応していません。"
#: src/connecteddevice.py:145 #: src/connecteddevice.py:151
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "フォーカスされたディスプレイ距離" msgstr "フォーカスされたディスプレイ距離"
#: src/connecteddevice.py:146 #: src/connecteddevice.py:152
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "近くに設定すると見たディスプレイにズームインします。" msgstr "近くに設定すると見たディスプレイにズームインします。"
#: src/connecteddevice.py:153 #: src/connecteddevice.py:159
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "すべてのディスプレイ距離" msgstr "すべてのディスプレイ距離"
#: src/connecteddevice.py:154 #: src/connecteddevice.py:160
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "遠くに設定すると視線の外れたディスプレイがズームアウトします。" msgstr "遠くに設定すると視線の外れたディスプレイがズームアウトします。"
#: src/connecteddevice.py:270 #: src/connecteddevice.py:283
msgid "" msgid ""
"Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, "
"and the pipewire GStreamer plugin are required." "and the pipewire GStreamer plugin are required."
msgstr "仮想ディスプレイが追加できません。" msgstr "仮想ディスプレイが追加できません。"
#: src/connecteddevice.py:304 #: src/connecteddevice.py:317
msgid "Focused display" msgid "Focused display"
msgstr "フォーカスされたディスプレイ" msgstr "フォーカスされたディスプレイ"
#: src/connecteddevice.py:310 #: src/connecteddevice.py:323
msgid "All displays" msgid "All displays"
msgstr "すべてのディスプレイ" msgstr "すべてのディスプレイ"
@ -98,15 +98,15 @@ msgstr "有効"
msgid " ({time_remaining} remaining)" msgid " ({time_remaining} remaining)"
msgstr "(残り {time_remaining})" msgstr "(残り {time_remaining})"
#: src/licensefeaturerow.py:32 #: src/licensefeaturerow.py:30
msgid "Side-by-side mode (gaming)" msgid "Side-by-side mode (gaming)"
msgstr "サイドバイサイドモード(ゲーミング)" msgstr "サイドバイサイドモード(ゲーミング)"
#: src/licensefeaturerow.py:33 #: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)" msgid "Smooth Follow (gaming)"
msgstr "スムーズフォロー(ゲーミング)" msgstr "スムーズフォロー(ゲーミング)"
#: src/licensefeaturerow.py:34 #: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)" msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop(プロダクティビティ)" msgstr "Breezy Desktop(プロダクティビティ)"
@ -491,30 +491,46 @@ msgstr ""
"す。" "す。"
#: src/gtk/connected-device.ui:642 #: 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" msgid "Follow mode movement tracking"
msgstr "フォローモード移動設定" msgstr "フォローモード移動設定"
#: src/gtk/connected-device.ui:643 #: src/gtk/connected-device.ui:709
msgid "Choose which movements should be tracked in follow mode." msgid "Choose which movements should be tracked in follow mode."
msgstr "フォローモードで追跡する方法を選択します。" msgstr "フォローモードで追跡する方法を選択します。"
#: src/gtk/connected-device.ui:658 #: src/gtk/connected-device.ui:724
msgid "Horizontal" msgid "Horizontal"
msgstr "水平" msgstr "水平"
#: src/gtk/connected-device.ui:678 #: src/gtk/connected-device.ui:744
msgid "Vertical" msgid "Vertical"
msgstr "垂直" msgstr "垂直"
#: src/gtk/connected-device.ui:698 #: src/gtk/connected-device.ui:764
msgid "Tilt/roll" msgid "Tilt/roll"
msgstr "傾き・回転" msgstr "傾き・回転"
#: src/gtk/connected-device.ui:716 #: src/gtk/connected-device.ui:782
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "動きの先読み" msgstr "動きの先読み"
#: src/gtk/connected-device.ui:717 #: src/gtk/connected-device.ui:783
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "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" msgid "Default"
msgstr "デフォルト" msgstr "デフォルト"
#: src/gtk/connected-device.ui:747 #: src/gtk/connected-device.ui:813
msgid "Text Scaling" msgid "Text Scaling"
msgstr "テキストスケーリング" 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" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
"テキストを1.0未満にスケーリングすると、高解像度ディスプレイをシミュレートしま" "テキストを1.0未満にスケーリングすると、高解像度ディスプレイをシミュレートしま"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2024-08-16 10:26-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\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." msgid "This feature is not currently supported for your device."
msgstr "" msgstr ""
#: src/connecteddevice.py:145 #: src/connecteddevice.py:151
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "" msgstr ""
#: src/connecteddevice.py:146 #: src/connecteddevice.py:152
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:153 #: src/connecteddevice.py:159
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "" msgstr ""
#: src/connecteddevice.py:154 #: src/connecteddevice.py:160
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:270 #: src/connecteddevice.py:283
msgid "" msgid ""
"Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, "
"and the pipewire GStreamer plugin are required." "and the pipewire GStreamer plugin are required."
msgstr "" msgstr ""
#: src/connecteddevice.py:304 #: src/connecteddevice.py:317
msgid "Focused display" msgid "Focused display"
msgstr "" msgstr ""
#: src/connecteddevice.py:310 #: src/connecteddevice.py:323
msgid "All displays" msgid "All displays"
msgstr "" msgstr ""
@ -95,15 +95,15 @@ msgstr ""
msgid " ({time_remaining} remaining)" msgid " ({time_remaining} remaining)"
msgstr "" msgstr ""
#: src/licensefeaturerow.py:32 #: src/licensefeaturerow.py:30
msgid "Side-by-side mode (gaming)" msgid "Side-by-side mode (gaming)"
msgstr "" msgstr ""
#: src/licensefeaturerow.py:33 #: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)" msgid "Smooth Follow (gaming)"
msgstr "" msgstr ""
#: src/licensefeaturerow.py:34 #: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)" msgid "Breezy Desktop (productivity)"
msgstr "" msgstr ""
@ -474,45 +474,61 @@ msgid "Follow mode moves all displays, not just the focused one."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:642 #: src/gtk/connected-device.ui:642
msgid "Follow mode movement tracking" msgid "Neck-saver horizontal multiplier"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:643 #: 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." msgid "Choose which movements should be tracked in follow mode."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:658 #: src/gtk/connected-device.ui:724
msgid "Horizontal" msgid "Horizontal"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:678 #: src/gtk/connected-device.ui:744
msgid "Vertical" msgid "Vertical"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:698 #: src/gtk/connected-device.ui:764
msgid "Tilt/roll" msgid "Tilt/roll"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:716 #: src/gtk/connected-device.ui:782
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:717 #: src/gtk/connected-device.ui:783
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
"movements, jumps ahead, or is very shaky." "movements, jumps ahead, or is very shaky."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:735 #: src/gtk/connected-device.ui:801
msgid "Default" msgid "Default"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:747 #: src/gtk/connected-device.ui:813
msgid "Text Scaling" msgid "Text Scaling"
msgstr "" 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" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2024-08-19 09:39-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-" "Language-Team: Brazilian Portuguese <ldpbr-"
@ -30,27 +30,27 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "Este recurso não é atualmente suportado para o seu dispositivo." msgstr "Este recurso não é atualmente suportado para o seu dispositivo."
#: src/connecteddevice.py:145 #: src/connecteddevice.py:151
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Distância da tela" 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." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
"Use um valor mais aproximado para que as telas se aproximem quando olha para " "Use um valor mais aproximado para que as telas se aproximem quando olha para "
"ela." "ela."
#: src/connecteddevice.py:153 #: src/connecteddevice.py:159
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Distância da tela" 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." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
"Use um valor mais distante para que as telas se afastem quando olha para " "Use um valor mais distante para que as telas se afastem quando olha para "
"elas." "elas."
#: src/connecteddevice.py:270 #: src/connecteddevice.py:283
msgid "" msgid ""
"Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, "
"and the pipewire GStreamer plugin are required." "and the pipewire GStreamer plugin are required."
@ -58,11 +58,11 @@ msgstr ""
"Não é possível adicionar telas neste dispositivo. xdg-desktop-portal é " "Não é possível adicionar telas neste dispositivo. xdg-desktop-portal é "
"requerido." "requerido."
#: src/connecteddevice.py:304 #: src/connecteddevice.py:317
msgid "Focused display" msgid "Focused display"
msgstr "Distância da tela" msgstr "Distância da tela"
#: src/connecteddevice.py:310 #: src/connecteddevice.py:323
msgid "All displays" msgid "All displays"
msgstr "Tela curva" msgstr "Tela curva"
@ -103,15 +103,15 @@ msgstr "Habilitado"
msgid " ({time_remaining} remaining)" msgid " ({time_remaining} remaining)"
msgstr " ({time_remaining} restantes)" msgstr " ({time_remaining} restantes)"
#: src/licensefeaturerow.py:32 #: src/licensefeaturerow.py:30
msgid "Side-by-side mode (gaming)" msgid "Side-by-side mode (gaming)"
msgstr "Modo lado a lado (Jogos)" msgstr "Modo lado a lado (Jogos)"
#: src/licensefeaturerow.py:33 #: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)" msgid "Smooth Follow (gaming)"
msgstr "Acompanhar Suavemente (Jogos)" msgstr "Acompanhar Suavemente (Jogos)"
#: src/licensefeaturerow.py:34 #: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)" msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (produtividade)" 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." msgstr "O modo Seguir move todas as telas, e não apenas o que está focado."
#: src/gtk/connected-device.ui:642 #: 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" msgid "Follow mode movement tracking"
msgstr "Modo de acompanhamento do movimento" 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." msgid "Choose which movements should be tracked in follow mode."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:658 #: src/gtk/connected-device.ui:724
msgid "Horizontal" msgid "Horizontal"
msgstr "Horizontal" msgstr "Horizontal"
#: src/gtk/connected-device.ui:678 #: src/gtk/connected-device.ui:744
msgid "Vertical" msgid "Vertical"
msgstr "Vertical" msgstr "Vertical"
#: src/gtk/connected-device.ui:698 #: src/gtk/connected-device.ui:764
msgid "Tilt/roll" msgid "Tilt/roll"
msgstr "Inclinação/rolagem" msgstr "Inclinação/rolagem"
#: src/gtk/connected-device.ui:716 #: src/gtk/connected-device.ui:782
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Antecipação de movimento" msgstr "Antecipação de movimento"
#: src/gtk/connected-device.ui:717 #: src/gtk/connected-device.ui:783
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "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 " "virtual tenha atrasos, avance ou seja muito instável em relação aos "
"movimentos da cabeça " "movimentos da cabeça "
#: src/gtk/connected-device.ui:735 #: src/gtk/connected-device.ui:801
msgid "Default" msgid "Default"
msgstr "Padrão" msgstr "Padrão"
#: src/gtk/connected-device.ui:747 #: src/gtk/connected-device.ui:813
msgid "Text Scaling" msgid "Text Scaling"
msgstr "Redimensionamento de Texto" 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" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
"Redimensionar o texto abaixo de 1.0 simulará uma tela de resolução mais alta" "Redimensionar o texto abaixo de 1.0 simulará uma tela de resolução mais alta"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2024-08-17 09:39-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Russian <gnu@d07.ru>\n" "Language-Team: Russian <gnu@d07.ru>\n"
@ -29,36 +29,36 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "Эта функция в настоящее время не поддерживается для вашего устройства." msgstr "Эта функция в настоящее время не поддерживается для вашего устройства."
#: src/connecteddevice.py:145 #: src/connecteddevice.py:151
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Расстояние дисплея" msgstr "Расстояние дисплея"
#: src/connecteddevice.py:146 #: src/connecteddevice.py:152
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:153 #: src/connecteddevice.py:159
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Расстояние дисплея" msgstr "Расстояние дисплея"
#: src/connecteddevice.py:154 #: src/connecteddevice.py:160
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:270 #: src/connecteddevice.py:283
msgid "" msgid ""
"Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, "
"and the pipewire GStreamer plugin are required." "and the pipewire GStreamer plugin are required."
msgstr "" msgstr ""
#: src/connecteddevice.py:304 #: src/connecteddevice.py:317
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "Расстояние дисплея" msgstr "Расстояние дисплея"
#: src/connecteddevice.py:310 #: src/connecteddevice.py:323
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "Изогнутый дисплей" msgstr "Изогнутый дисплей"
@ -100,15 +100,15 @@ msgstr "Включено"
msgid " ({time_remaining} remaining)" msgid " ({time_remaining} remaining)"
msgstr " ({time_remaining} осталось)" msgstr " ({time_remaining} осталось)"
#: src/licensefeaturerow.py:32 #: src/licensefeaturerow.py:30
msgid "Side-by-side mode (gaming)" msgid "Side-by-side mode (gaming)"
msgstr "Режим «бок о бок» (игровой режим)" msgstr "Режим «бок о бок» (игровой режим)"
#: src/licensefeaturerow.py:33 #: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)" msgid "Smooth Follow (gaming)"
msgstr "Плавное следование (игровой режим)" msgstr "Плавное следование (игровой режим)"
#: src/licensefeaturerow.py:34 #: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)" msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (продуктивный режим)" msgstr "Breezy Desktop (продуктивный режим)"
@ -496,30 +496,46 @@ msgid "Follow mode moves all displays, not just the focused one."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:642 #: src/gtk/connected-device.ui:642
msgid "Follow mode movement tracking" msgid "Neck-saver horizontal multiplier"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:643 #: 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." msgid "Choose which movements should be tracked in follow mode."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:658 #: src/gtk/connected-device.ui:724
msgid "Horizontal" msgid "Horizontal"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:678 #: src/gtk/connected-device.ui:744
msgid "Vertical" msgid "Vertical"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:698 #: src/gtk/connected-device.ui:764
msgid "Tilt/roll" msgid "Tilt/roll"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:716 #: src/gtk/connected-device.ui:782
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Прогнозирование движения" msgstr "Прогнозирование движения"
#: src/gtk/connected-device.ui:717 #: src/gtk/connected-device.ui:783
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "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" msgid "Default"
msgstr "По умолчанию" msgstr "По умолчанию"
#: src/gtk/connected-device.ui:747 #: src/gtk/connected-device.ui:813
msgid "Text Scaling" msgid "Text Scaling"
msgstr "" 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" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2024-08-16 10:31-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\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." msgid "This feature is not currently supported for your device."
msgstr "Din enhet stöder inte den här funktionen för tillfället." msgstr "Din enhet stöder inte den här funktionen för tillfället."
#: src/connecteddevice.py:145 #: src/connecteddevice.py:151
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Avstånd till skärmen" 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." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:153 #: src/connecteddevice.py:159
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Avstånd till skärmen" 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." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:270 #: src/connecteddevice.py:283
msgid "" msgid ""
"Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, "
"and the pipewire GStreamer plugin are required." "and the pipewire GStreamer plugin are required."
msgstr "" msgstr ""
#: src/connecteddevice.py:304 #: src/connecteddevice.py:317
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "Avstånd till skärmen" msgstr "Avstånd till skärmen"
#: src/connecteddevice.py:310 #: src/connecteddevice.py:323
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "Böjd skärm" msgstr "Böjd skärm"
@ -100,15 +100,15 @@ msgstr "Aktiverad"
msgid " ({time_remaining} remaining)" msgid " ({time_remaining} remaining)"
msgstr " ({time_remaining} kvar)" msgstr " ({time_remaining} kvar)"
#: src/licensefeaturerow.py:32 #: src/licensefeaturerow.py:30
msgid "Side-by-side mode (gaming)" msgid "Side-by-side mode (gaming)"
msgstr "Side-by-side läge (spel)" msgstr "Side-by-side läge (spel)"
#: src/licensefeaturerow.py:33 #: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)" msgid "Smooth Follow (gaming)"
msgstr "Smidig följning (spel)" msgstr "Smidig följning (spel)"
#: src/licensefeaturerow.py:34 #: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)" msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (produktivitet)" msgstr "Breezy Desktop (produktivitet)"
@ -495,30 +495,46 @@ msgid "Follow mode moves all displays, not just the focused one."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:642 #: src/gtk/connected-device.ui:642
msgid "Follow mode movement tracking" msgid "Neck-saver horizontal multiplier"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:643 #: 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." msgid "Choose which movements should be tracked in follow mode."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:658 #: src/gtk/connected-device.ui:724
msgid "Horizontal" msgid "Horizontal"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:678 #: src/gtk/connected-device.ui:744
msgid "Vertical" msgid "Vertical"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:698 #: src/gtk/connected-device.ui:764
msgid "Tilt/roll" msgid "Tilt/roll"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:716 #: src/gtk/connected-device.ui:782
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Rörs förväntning" msgstr "Rörs förväntning"
#: src/gtk/connected-device.ui:717 #: src/gtk/connected-device.ui:783
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "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 " "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." "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" msgid "Default"
msgstr "Standard" msgstr "Standard"
#: src/gtk/connected-device.ui:747 #: src/gtk/connected-device.ui:813
msgid "Text Scaling" msgid "Text Scaling"
msgstr "Textskalning" 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" 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" msgstr "Textskalning under 1.0 kommer att simulera en högre skärmupplösning"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2024-08-17 10:08-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\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." msgid "This feature is not currently supported for your device."
msgstr "Ця функція наразі не підтримується на вашому пристрої." msgstr "Ця функція наразі не підтримується на вашому пристрої."
#: src/connecteddevice.py:145 #: src/connecteddevice.py:151
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Відстань дисплея" msgstr "Відстань дисплея"
#: src/connecteddevice.py:146 #: src/connecteddevice.py:152
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:153 #: src/connecteddevice.py:159
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Відстань дисплея" msgstr "Відстань дисплея"
#: src/connecteddevice.py:154 #: src/connecteddevice.py:160
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:270 #: src/connecteddevice.py:283
msgid "" msgid ""
"Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, "
"and the pipewire GStreamer plugin are required." "and the pipewire GStreamer plugin are required."
msgstr "" msgstr ""
#: src/connecteddevice.py:304 #: src/connecteddevice.py:317
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "Відстань дисплея" msgstr "Відстань дисплея"
#: src/connecteddevice.py:310 #: src/connecteddevice.py:323
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "Викривлений дисплей" msgstr "Викривлений дисплей"
@ -99,15 +99,15 @@ msgstr "Увімкнено"
msgid " ({time_remaining} remaining)" msgid " ({time_remaining} remaining)"
msgstr "({time_remaining} залишилося)" msgstr "({time_remaining} залишилося)"
#: src/licensefeaturerow.py:32 #: src/licensefeaturerow.py:30
msgid "Side-by-side mode (gaming)" msgid "Side-by-side mode (gaming)"
msgstr "Режим «бок о бок» (ігровий режим)" msgstr "Режим «бок о бок» (ігровий режим)"
#: src/licensefeaturerow.py:33 #: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)" msgid "Smooth Follow (gaming)"
msgstr "Плавне слідування (ігровий режим)" msgstr "Плавне слідування (ігровий режим)"
#: src/licensefeaturerow.py:34 #: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)" msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (продуктивний прежим)" msgstr "Breezy Desktop (продуктивний прежим)"
@ -494,30 +494,46 @@ msgid "Follow mode moves all displays, not just the focused one."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:642 #: src/gtk/connected-device.ui:642
msgid "Follow mode movement tracking" msgid "Neck-saver horizontal multiplier"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:643 #: 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." msgid "Choose which movements should be tracked in follow mode."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:658 #: src/gtk/connected-device.ui:724
msgid "Horizontal" msgid "Horizontal"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:678 #: src/gtk/connected-device.ui:744
msgid "Vertical" msgid "Vertical"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:698 #: src/gtk/connected-device.ui:764
msgid "Tilt/roll" msgid "Tilt/roll"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:716 #: src/gtk/connected-device.ui:782
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Прогнозування руху" msgstr "Прогнозування руху"
#: src/gtk/connected-device.ui:717 #: src/gtk/connected-device.ui:783
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "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" msgid "Default"
msgstr "За замовчуванням" msgstr "За замовчуванням"
#: src/gtk/connected-device.ui:747 #: src/gtk/connected-device.ui:813
msgid "Text Scaling" msgid "Text Scaling"
msgstr "" 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" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2024-08-02 20:55-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.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." msgid "This feature is not currently supported for your device."
msgstr "您的设备目前不支援此功能。" msgstr "您的设备目前不支援此功能。"
#: src/connecteddevice.py:145 #: src/connecteddevice.py:151
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "设定注视中的屏幕的距离" msgstr "设定注视中的屏幕的距离"
#: src/connecteddevice.py:146 #: src/connecteddevice.py:152
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "近的数值会将您所看向的屏幕放大" msgstr "近的数值会将您所看向的屏幕放大"
#: src/connecteddevice.py:153 #: src/connecteddevice.py:159
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "设定所有屏幕的距离" msgstr "设定所有屏幕的距离"
#: src/connecteddevice.py:154 #: src/connecteddevice.py:160
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "远的数值会将您所看向的屏幕缩小" msgstr "远的数值会将您所看向的屏幕缩小"
#: src/connecteddevice.py:270 #: src/connecteddevice.py:283
msgid "" msgid ""
"Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, " "Unable to add virtual displays on this machine. Wayland, xdg-desktop-portal, "
"and the pipewire GStreamer plugin are required." "and the pipewire GStreamer plugin are required."
msgstr "无法增加模拟显示。需要安装xdg-desktop-portal和Wayland" msgstr "无法增加模拟显示。需要安装xdg-desktop-portal和Wayland"
#: src/connecteddevice.py:304 #: src/connecteddevice.py:317
msgid "Focused display" msgid "Focused display"
msgstr "注视中的屏幕" msgstr "注视中的屏幕"
#: src/connecteddevice.py:310 #: src/connecteddevice.py:323
msgid "All displays" msgid "All displays"
msgstr "所有的屏幕" msgstr "所有的屏幕"
@ -93,15 +93,15 @@ msgstr "已启用"
msgid " ({time_remaining} remaining)" msgid " ({time_remaining} remaining)"
msgstr " (剩下 {time_remaining})" msgstr " (剩下 {time_remaining})"
#: src/licensefeaturerow.py:32 #: src/licensefeaturerow.py:30
msgid "Side-by-side mode (gaming)" msgid "Side-by-side mode (gaming)"
msgstr "并排模式(游戏)" msgstr "并排模式(游戏)"
#: src/licensefeaturerow.py:33 #: src/licensefeaturerow.py:31
msgid "Smooth Follow (gaming)" msgid "Smooth Follow (gaming)"
msgstr "平滑跟随(游戏)" msgstr "平滑跟随(游戏)"
#: src/licensefeaturerow.py:34 #: src/licensefeaturerow.py:32
msgid "Breezy Desktop (productivity)" msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (生产力)" msgstr "Breezy Desktop (生产力)"
@ -474,30 +474,46 @@ msgid "Follow mode moves all displays, not just the focused one."
msgstr "让跟随模式移动所有的屏幕而不只是注视中的屏幕" msgstr "让跟随模式移动所有的屏幕而不只是注视中的屏幕"
#: src/gtk/connected-device.ui:642 #: 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" msgid "Follow mode movement tracking"
msgstr "跟随模式感应" msgstr "跟随模式感应"
#: src/gtk/connected-device.ui:643 #: src/gtk/connected-device.ui:709
msgid "Choose which movements should be tracked in follow mode." msgid "Choose which movements should be tracked in follow mode."
msgstr "选择那一些动作会被感应到" msgstr "选择那一些动作会被感应到"
#: src/gtk/connected-device.ui:658 #: src/gtk/connected-device.ui:724
msgid "Horizontal" msgid "Horizontal"
msgstr "水平动作" msgstr "水平动作"
#: src/gtk/connected-device.ui:678 #: src/gtk/connected-device.ui:744
msgid "Vertical" msgid "Vertical"
msgstr "垂直动作" msgstr "垂直动作"
#: src/gtk/connected-device.ui:698 #: src/gtk/connected-device.ui:764
msgid "Tilt/roll" msgid "Tilt/roll"
msgstr "倾斜及滚转动作" msgstr "倾斜及滚转动作"
#: src/gtk/connected-device.ui:716 #: src/gtk/connected-device.ui:782
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "移动预测" msgstr "移动预测"
#: src/gtk/connected-device.ui:717 #: src/gtk/connected-device.ui:783
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "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" msgid "Default"
msgstr "默认" msgstr "默认"
#: src/gtk/connected-device.ui:747 #: src/gtk/connected-device.ui:813
msgid "Text Scaling" msgid "Text Scaling"
msgstr "字体大小比例" 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" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "字体缩放小于1.0,将模拟解析度更高的显示效果" 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), '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-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-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 _instance = None
@ -35,6 +49,8 @@ class ConfigManager(GObject.GObject):
self.follow_track_roll = None self.follow_track_roll = None
self.follow_track_pitch = None self.follow_track_pitch = None
self.follow_track_yaw = None self.follow_track_yaw = None
self.neck_saver_horizontal_multiplier = None
self.neck_saver_vertical_multiplier = None
self._running = True self._running = True
self._refresh_config() self._refresh_config()
@ -58,6 +74,12 @@ class ConfigManager(GObject.GObject):
if self.config['smooth_follow_track_yaw'] != self.follow_track_yaw: if self.config['smooth_follow_track_yaw'] != self.follow_track_yaw:
self.set_property('follow-track-yaw', self.config['smooth_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() if self._running: threading.Timer(1.0, self._refresh_config).start()
def _is_breezy_desktop_enabled(self): def _is_breezy_desktop_enabled(self):
@ -98,6 +120,20 @@ class ConfigManager(GObject.GObject):
self.ipc.write_config(self.config) self.ipc.write_config(self.config)
self.follow_track_yaw = value 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): def do_set_property(self, prop, value):
if prop.name == 'breezy-desktop-enabled': if prop.name == 'breezy-desktop-enabled':
self._set_breezy_desktop_enabled(value) self._set_breezy_desktop_enabled(value)
@ -109,6 +145,10 @@ class ConfigManager(GObject.GObject):
self._set_follow_track_pitch(value) self._set_follow_track_pitch(value)
elif prop.name == 'follow-track-yaw': elif prop.name == 'follow-track-yaw':
self._set_follow_track_yaw(value) 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): def do_get_property(self, prop):
if prop.name == 'breezy-desktop-enabled': if prop.name == 'breezy-desktop-enabled':
@ -121,3 +161,7 @@ class ConfigManager(GObject.GObject):
return self.follow_track_pitch return self.follow_track_pitch
elif prop.name == 'follow-track-yaw': 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() movement_look_ahead_adjustment = Gtk.Template.Child()
text_scaling_scale = Gtk.Template.Child() text_scaling_scale = Gtk.Template.Child()
text_scaling_adjustment = 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() enable_multi_tap_switch = Gtk.Template.Child()
legacy_follow_mode_switch = Gtk.Template.Child() legacy_follow_mode_switch = Gtk.Template.Child()
follow_track_yaw_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_wrapping_scheme_menu,
self.monitor_spacing_scale, self.monitor_spacing_scale,
self.viewport_offset_x_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 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_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_pitch_switch, 'follow-track-pitch')
self._bind_switch_to_config(self.follow_track_yaw_switch, 'follow-track-yaw') 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) 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 # wayland is required to create virtual displays
self.is_wayland = "WAYLAND_DISPLAY" in os.environ 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): def _bind_switch_to_config(self, switch, config_key):
self.config_manager.bind_property(config_key, switch, 'active', Gio.SettingsBindFlags.DEFAULT) self.config_manager.bind_property(config_key, switch, 'active', Gio.SettingsBindFlags.DEFAULT)
switch.set_active(self.config_manager.get_property(config_key)) switch.set_active(self.config_manager.get_property(config_key))

View File

@ -637,6 +637,72 @@
<object class="AdwPreferencesGroup"> <object class="AdwPreferencesGroup">
<property name="title"> </property> <property name="title"> </property>
<property name="width-request">700</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> <child>
<object class="AdwActionRow"> <object class="AdwActionRow">
<property name="title" translatable="yes">Follow mode movement tracking</property> <property name="title" translatable="yes">Follow mode movement tracking</property>