From 516317c798eb786f300a82661c35a8d9e564b4f3 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Wed, 19 Mar 2025 17:04:44 -0700 Subject: [PATCH 1/7] Merge in the latest backports --- gnome/backports/gnome-44-max | 2 +- gnome/backports/gnome-45 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gnome/backports/gnome-44-max b/gnome/backports/gnome-44-max index dd10f4e..69840c6 160000 --- a/gnome/backports/gnome-44-max +++ b/gnome/backports/gnome-44-max @@ -1 +1 @@ -Subproject commit dd10f4ee505779467488258b95995580aab970a8 +Subproject commit 69840c63fbaa64bac20f6d8f92288ee5cd4b0525 diff --git a/gnome/backports/gnome-45 b/gnome/backports/gnome-45 index 29218cd..6ce35b9 160000 --- a/gnome/backports/gnome-45 +++ b/gnome/backports/gnome-45 @@ -1 +1 @@ -Subproject commit 29218cd4f226f7bf63f2e1bb84f3facb38ef6f43 +Subproject commit 6ce35b949a029034e15460a02edcc22e6029c279 From 6fe70c661354adbc77f7034a0adec9eeed0dae79 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Thu, 20 Mar 2025 20:59:22 -0700 Subject: [PATCH 2/7] Fix imports so it's compatible with the AUR setup --- ui/src/breezydesktop.in | 6 ++++++ ui/src/main.py | 4 ---- ui/src/virtualdisplay.py | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/ui/src/breezydesktop.in b/ui/src/breezydesktop.in index 2729644..f65166b 100755 --- a/ui/src/breezydesktop.in +++ b/ui/src/breezydesktop.in @@ -21,6 +21,12 @@ import os import sys +import os +import sys + +lib_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib') +sys.path.insert(0, lib_dir) + import signal import locale import gettext diff --git a/ui/src/main.py b/ui/src/main.py index e96cdcf..d12bbc8 100644 --- a/ui/src/main.py +++ b/ui/src/main.py @@ -19,10 +19,6 @@ import os import sys - -lib_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib') -sys.path.insert(0, lib_dir) - import gi import logging import argparse diff --git a/ui/src/virtualdisplay.py b/ui/src/virtualdisplay.py index 64eb478..4ffd3f2 100644 --- a/ui/src/virtualdisplay.py +++ b/ui/src/virtualdisplay.py @@ -4,7 +4,7 @@ import argparse import logging import sys import signal -from .lib import pydbus +import pydbus import gi import time From 8cc5949851eb99da500caff6e005fa18fdf6949e Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Thu, 20 Mar 2025 21:21:14 -0700 Subject: [PATCH 3/7] Pull in latest driver, fix uninstall so it doesn't fail if driver was uninstalled first, v2.1.2 --- VERSION | 2 +- gnome/bin/breezy_gnome_uninstall | 13 +++++++------ modules/XRLinuxDriver | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/VERSION b/VERSION index 7c32728..8f9174b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.1.1 \ No newline at end of file +2.1.2 \ No newline at end of file diff --git a/gnome/bin/breezy_gnome_uninstall b/gnome/bin/breezy_gnome_uninstall index 004458c..f6b6380 100755 --- a/gnome/bin/breezy_gnome_uninstall +++ b/gnome/bin/breezy_gnome_uninstall @@ -43,12 +43,13 @@ rm -f $XDG_DATA_HOME/icons/hicolor/*/apps/com.xronlinux.BreezyDesktop.png rm -f $XDG_DATA_HOME/locale/*/LC_MESSAGES/breezydesktop.mo rm -f $XDG_BIN_HOME/breezydesktop -[ "$for_install" -eq 0 ] && echo "Uninstalling XRLinuxDriver" -# if for-install -if [ "$for_install" -eq 1 ]; then - sudo ~/.local/bin/xr_driver_uninstall --for-install -else - sudo ~/.local/bin/xr_driver_uninstall +if [ -e "$XDG_BIN_HOME/xr_driver_uninstall" ]; then + [ "$for_install" -eq 0 ] && echo "Uninstalling XRLinuxDriver" + if [ "$for_install" -eq 1 ]; then + sudo $XDG_BIN_HOME/xr_driver_uninstall --for-install + else + sudo $XDG_BIN_HOME/xr_driver_uninstall + fi fi diff --git a/modules/XRLinuxDriver b/modules/XRLinuxDriver index 28cd5f7..f614e6e 160000 --- a/modules/XRLinuxDriver +++ b/modules/XRLinuxDriver @@ -1 +1 @@ -Subproject commit 28cd5f7f47a75a63013286f8e2059730f242fcf7 +Subproject commit f614e6eae93ebfe1f6e690b8170f3f06bbd25413 From 537dca8357013e6e5a7d4a2bda2256b233824172 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Thu, 20 Mar 2025 21:24:00 -0700 Subject: [PATCH 4/7] Remove duplicate imports --- ui/src/breezydesktop.in | 2 -- 1 file changed, 2 deletions(-) diff --git a/ui/src/breezydesktop.in b/ui/src/breezydesktop.in index f65166b..b23c408 100755 --- a/ui/src/breezydesktop.in +++ b/ui/src/breezydesktop.in @@ -19,8 +19,6 @@ # # SPDX-License-Identifier: GPL-3.0-or-later -import os -import sys import os import sys From 94cd703db3f4d9474ba0f04ffa5ca01a55d64976 Mon Sep 17 00:00:00 2001 From: Wayne Heaney <42350981+wheaney@users.noreply.github.com> Date: Fri, 21 Mar 2025 15:03:05 -0700 Subject: [PATCH 5/7] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4543df7..a05496e 100644 --- a/README.md +++ b/README.md @@ -22,15 +22,16 @@ For the best performance, ensure you have the latest graphics drivers installed #### Multi-display (Beta) +**Note: an [AUR installation](#arch-linux) is also available for Arch users** + 1. Download the Breezy GNOME [setup script](https://github.com/wheaney/breezy-desktop/releases/latest/download/breezy_gnome_setup) and set the execute flag (e.g. from the terminal: `chmod +x ~/Downloads/breezy_gnome_setup`) 2. Run the setup script: `~/Downloads/breezy_gnome_setup` 3. Log out and back in, then proceed to [usage](#breezy-gnome-usage). #### Arch Linux -**Note: for now only the legacy/single-screen build is in AUR.** - Breezy GNOME is in AUR (but not pacman, yet). To install, run these commands from a terminal: + 1. If you've previously installed Breezy GNOME using the setup script, you must uninstall it first with `breezy_gnome_uninstall` 2. `yay -S breezy-desktop-gnome-git` 3. `systemctl --user enable --now xr-driver.service` From cc910349dda676aa967cc3595f9829e7a65d4ea8 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Sat, 22 Mar 2025 10:30:59 -0700 Subject: [PATCH 6/7] Restore smooth follow auto-focus logic, update uninstall for missed virtualdisplay script cleanup, update setup warning for python error ignore --- gnome/bin/breezy_gnome_uninstall | 1 + gnome/bin/setup | 14 +++++++------- gnome/src/virtualdisplaysactor.js | 7 ++++--- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/gnome/bin/breezy_gnome_uninstall b/gnome/bin/breezy_gnome_uninstall index f6b6380..16d8936 100755 --- a/gnome/bin/breezy_gnome_uninstall +++ b/gnome/bin/breezy_gnome_uninstall @@ -42,6 +42,7 @@ rm -f $XDG_DATA_HOME/applications/com.xronlinux.BreezyDesktop.desktop rm -f $XDG_DATA_HOME/icons/hicolor/*/apps/com.xronlinux.BreezyDesktop.png rm -f $XDG_DATA_HOME/locale/*/LC_MESSAGES/breezydesktop.mo rm -f $XDG_BIN_HOME/breezydesktop +rm -f $XDG_BIN_HOME/virtualdisplay if [ -e "$XDG_BIN_HOME/xr_driver_uninstall" ]; then [ "$for_install" -eq 0 ] && echo "Uninstalling XRLinuxDriver" diff --git a/gnome/bin/setup b/gnome/bin/setup index dbaac12..549db4b 100755 --- a/gnome/bin/setup +++ b/gnome/bin/setup @@ -22,14 +22,14 @@ check_command "python" "python3" PYTHON_GI_CHECK="import gi; gi.require_version('Gtk', '4.0'); gi.require_version('Adw', '1'); gi.require_version('Gio', '2.0'); gi.require_version('GLib', '2.0'); gi.require_version('GObject', '2.0'); gi.require_version('Gst', '1.0'); from gi.repository import Gtk, Adw, Gio, GLib, GObject, Gst" if ! { python3 -c "$PYTHON_GI_CHECK" 2>/dev/null || python -c "$PYTHON_GI_CHECK" 2>/dev/null; }; then - printf "\033[1;31mERROR:\033[0m Python GObject libraries are missing\n" - printf "Please install the required Python GObject dependencies: GTK4, libadwaita, and GStreamer libraries:\n" - printf "If you're using a Python installation from a package manager, you may need to install the following packages:\n" - printf "\tFor Debian/Ubuntu: sudo apt install python3-gi gir1.2-gtk-4.0 libadwaita-1-0 gir1.2-adw-1 gir1.2-glib-2.0 gir1.2-gobject-2.0 gir1.2-gstreamer-1.0\n" - printf "\tFor Fedora: sudo dnf install python3-gobject python3-gstreamer1 gtk4 libadwaita\n" - printf "\tFor Arch Linux: sudo pacman -S python-gobject gst-python gtk4 libadwaita\n" - printf "\nIf you continue to have issues, rerun the setup with BREEZY_IGNORE_PYTHON_ERRORS=1 to skip this check.\n\n" if [ -z "$BREEZY_IGNORE_PYTHON_ERRORS" ]; then + printf "\033[1;31mERROR:\033[0m Python GObject libraries are missing\n" + printf "Please install the required Python GObject dependencies: GTK4, libadwaita, and GStreamer libraries:\n" + printf "If you're using a Python installation from a package manager, you may need to install the following packages:\n" + printf "\tFor Debian/Ubuntu: sudo apt install python3-gi gir1.2-gtk-4.0 libadwaita-1-0 gir1.2-adw-1 gir1.2-glib-2.0 gir1.2-gobject-2.0 gir1.2-gstreamer-1.0\n" + printf "\tFor Fedora: sudo dnf install python3-gobject python3-gstreamer1 gtk4 libadwaita\n" + printf "\tFor Arch Linux: sudo pacman -S python-gobject gst-python gtk4 libadwaita\n" + printf "\nIf you continue to have issues, rerun the setup with BREEZY_IGNORE_PYTHON_ERRORS=1 to skip this check.\n\n" exit 1 else printf "\033[1;33mWARNING:\033[0m Ignoring Python dependency failures. " diff --git a/gnome/src/virtualdisplaysactor.js b/gnome/src/virtualdisplaysactor.js index c695d4b..c5a08fa 100644 --- a/gnome/src/virtualdisplaysactor.js +++ b/gnome/src/virtualdisplaysactor.js @@ -54,11 +54,12 @@ function getMonitorDistance(fovDetails, lookUpPixels, lookWestPixels, monitorVec * @param {number[][]} monitorVectors - Array of monitor vectors [x, y, z] to search from * @param {number} currentFocusedIndex - Index of the currently focused monitor * @param {number} focusedMonitorDistance - Distance to the focused monitor, < 1.0 if zoomed in + * @param {boolean} smoothFollowEnabled - If true, always keep the current monitor in focus or choose the closest * @param {Object} fovDetails - Contains reference widthPixels, heightPixels, horizontal and vertical radians, and pixel distance to the center of the screen * @param {Object[]} monitorsDetails - Contains x, y, width, height (coordinates from top-left) for each monitor * @returns {number} Index of the closest vector, if it surpasses the previous closest index by a certain margin, otherwise the previous index */ -function findFocusedMonitor(quaternion, monitorVectors, currentFocusedIndex, focusedMonitorDistance, fovDetails, monitorsDetails) { +function findFocusedMonitor(quaternion, monitorVectors, currentFocusedIndex, focusedMonitorDistance, smoothFollowEnabled, fovDetails, monitorsDetails) { const lookVector = [1.0, 0.0, 0.0]; // NWU vector pointing to the center of the screen const rotatedLookVector = applyQuaternionToVector(lookVector, quaternion); @@ -96,7 +97,7 @@ function findFocusedMonitor(quaternion, monitorVectors, currentFocusedIndex, foc westConversionFns.angleToLength ) * focusedMonitorDistance; - if (focusedDistance < UNFOCUS_THRESHOLD) return currentFocusedIndex; + if (smoothFollowEnabled || focusedDistance < UNFOCUS_THRESHOLD) return currentFocusedIndex; } // find the vector closest to the rotated look vector @@ -119,7 +120,7 @@ function findFocusedMonitor(quaternion, monitorVectors, currentFocusedIndex, foc } }); - if (closestDistance < FOCUS_THRESHOLD) return closestIndex; + if (smoothFollowEnabled || closestDistance < FOCUS_THRESHOLD) return closestIndex; // neither the current nor the closest will take focus, unfocus all displays return -1; From 4732a0f49a53b6e64bcd91bc987cf69c290721e5 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Mon, 31 Mar 2025 18:07:19 -0700 Subject: [PATCH 7/7] Update de.po Contributed by homejacob --- ui/po/de.po | 162 +++++++++++------------ ui/po/mo/de/LC_MESSAGES/breezydesktop.mo | Bin 9823 -> 15424 bytes 2 files changed, 80 insertions(+), 82 deletions(-) diff --git a/ui/po/de.po b/ui/po/de.po index 378c99c..3aceedc 100644 --- a/ui/po/de.po +++ b/ui/po/de.po @@ -23,57 +23,56 @@ msgid "" "display." msgstr "" "Schaltet Ihre Brille in den Side-by-Side-Modus und verdoppelt die Breite des " -"Displays." +"Bildschirms." #: src/connecteddevice.py:30 msgid "This feature is not currently supported for your device." msgstr "Diese Funktion wird von Ihrem Gerät derzeit nicht unterstützt." #: src/connecteddevice.py:145 -#, fuzzy msgid "Set Focused Display Distance" -msgstr "Display-Entfernung" +msgstr "Setze fokussierte Bildschirmentfernung" #: src/connecteddevice.py:146 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 angesehen wird." #: src/connecteddevice.py:153 -#, fuzzy msgid "Set All Displays Distance" -msgstr "Display-Entfernung" +msgstr "Setze alle Bildschirmentfernungen" #: src/connecteddevice.py:154 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 nicht angesehen werden." #: src/connecteddevice.py:270 msgid "" "Unable to add virtual displays on this machine. Wayland and xdg-desktop-" "portal are required." msgstr "" +"Virtuelle Bildschirme können nicht hinzugefügt werden." +"Wayland und xdg-desktop-portal werden benötigt" #: src/connecteddevice.py:304 -#, fuzzy msgid "Focused display" -msgstr "Display-Entfernung" +msgstr "Fokussierter Bildschirm" #: src/connecteddevice.py:310 -#, fuzzy msgid "All displays" -msgstr "Gebogenes Display" +msgstr "Gebogene Bildschirm" #: src/displaydistancedialogcontent.py:41 msgid "closer" -msgstr "" +msgstr "Näher" #: src/displaydistancedialogcontent.py:45 msgid "fullscreen" -msgstr "" +msgstr "Vollbild" #: src/displaydistancedialogcontent.py:48 msgid "farther" -msgstr "" +msgstr "Entfernter" #: src/licensedialogcontent.py:63 msgid "Paid Tier Status" @@ -222,71 +221,72 @@ msgid "" "section.\n" " " msgstr "" +"Bewege automatisch einen Bildschirm näher, wenn Sie ihn ansehen.\n" +"Setzen Sie Ihren bevorzugten fokussierten und nicht fokussierten Abstand " +"im Anpassungen Bereich.\n" +" " #: src/gtk/connected-device.ui:70 msgid "Follow mode" msgstr "Folgemodus" #: src/gtk/connected-device.ui:71 -#, fuzzy msgid "Keep the focused display near the center of your view." -msgstr "Halten Sie das virtuelle Display Nahe der Mitte Ihres Blickfelds." +msgstr "Halten Sie den virtuellen Bildschirm Nahe der Mitte Ihres Blickfelds." #: src/gtk/connected-device.ui:81 msgid "Curved display" -msgstr "Gebogenes Display" +msgstr "Gebogener Bildschirm" #: src/gtk/connected-device.ui:82 msgid "Switch between flat and curved displays." -msgstr "Zwischen flachen und gebogenen Displays wechseln." +msgstr "Zwischen flachen und gebogenen Bildschirm wechseln." #: src/gtk/connected-device.ui:93 src/gtk/no-device.ui:34 msgid "Disable physical displays" -msgstr "" +msgstr "Physische Bildschirme deaktivieren" #: src/gtk/connected-device.ui:94 src/gtk/no-device.ui:35 msgid "" "Automatically disable all physical displays when the XR effect is enabled." msgstr "" +"Deaktiviere automatisch alle physikalischen Bildschirme, wenn der XR Effekt aktiviert ist." #: src/gtk/connected-device.ui:104 -#, fuzzy msgid "Virtual displays" -msgstr "Gebogenes Display" +msgstr "Virtuelle Bildschirme" #: src/gtk/connected-device.ui:120 msgid "1080p" -msgstr "" +msgstr "1080p" #: src/gtk/connected-device.ui:121 msgid "1440p" -msgstr "" +msgstr "1440p" #: src/gtk/connected-device.ui:122 msgid "Add custom" -msgstr "" +msgstr "Eigene Auflösung hinzufügen" #: src/gtk/connected-device.ui:136 msgid "Remove custom resolution" -msgstr "" +msgstr "Eigene Auflösung entfernen" #: src/gtk/connected-device.ui:156 -#, fuzzy msgid "Rearrange displays" -msgstr "Gebogenes Display" +msgstr "Bildschirme neu anordnen" #: src/gtk/connected-device.ui:174 msgid "Adjustments" msgstr "Einstellungen" #: src/gtk/connected-device.ui:178 -#, fuzzy msgid "Display distances" -msgstr "Display-Entfernung" +msgstr "Bildschirmentfernung" #: src/gtk/connected-device.ui:179 msgid "Set how close you want displays to appear." -msgstr "" +msgstr "Stelle ein, wie nah Ihre Bildschirme erscheinen sollen." #: src/gtk/connected-device.ui:200 src/gtk/connected-device.ui:221 #: src/gtk/connected-device.ui:413 src/gtk/connected-device.ui:442 @@ -301,78 +301,77 @@ msgstr "Folgemodus-Schwelle" #: src/gtk/connected-device.ui:235 msgid "How far away you can look before the display follows." -msgstr "Wie weit Sie wegschauen können, bevor das Display folgt." +msgstr "Wie weit Sie wegschauen können, bevor der Bildschirm folgt." #: src/gtk/connected-device.ui:258 -#, fuzzy msgid "Display angling" -msgstr "Display-Größe" +msgstr "Bildschirmgröße" #: src/gtk/connected-device.ui:259 msgid "" "When there are multiple displays, choose how they should angle towards you." msgstr "" +"Stelle ein, wie mehrere Bildschirme angewinkelt werden sollen." #: src/gtk/connected-device.ui:273 msgid "Automatic" -msgstr "" +msgstr "Automatisch" #: src/gtk/connected-device.ui:274 msgid "Side-angled" -msgstr "" +msgstr "Seitlich gewinkelt" #: src/gtk/connected-device.ui:275 msgid "Top-angled" -msgstr "" +msgstr "Oben gewinkelt" #: src/gtk/connected-device.ui:276 msgid "Flat" -msgstr "" +msgstr "Flach" #: src/gtk/connected-device.ui:286 -#, fuzzy msgid "Display spacing" -msgstr "Display-Größe" +msgstr "Bildschirmgröße" #: src/gtk/connected-device.ui:287 msgid "Put empty space between displays, when there are multiple." -msgstr "" +msgstr "Setze einen leeren Bereich zwischen Bildschirme, wenn mehrere vorhanden sind." #: src/gtk/connected-device.ui:317 msgid "Viewport horizontal offset" -msgstr "" +msgstr "Horizontaler Anzeigebereich Ausgleich" #: src/gtk/connected-device.ui:318 msgid "Move the viewport to the left or right of its default position." -msgstr "" +msgstr "Bewege den Anzeigebreich nach links oder rechts der Anfangsposition." #: src/gtk/connected-device.ui:335 msgid "left" -msgstr "" +msgstr "Links" #: src/gtk/connected-device.ui:337 src/gtk/connected-device.ui:367 msgid "center" -msgstr "" +msgstr "Mitte" #: src/gtk/connected-device.ui:339 msgid "right" -msgstr "" +msgstr "Rechts" #: src/gtk/connected-device.ui:347 msgid "Viewport vertical offset" -msgstr "" +msgstr "Vertikaler Anzeigebereich Ausgleich" #: src/gtk/connected-device.ui:348 msgid "Move the viewport up or down from its default position." -msgstr "" +msgstr "Bewege den Anzeigebreich nach oberhalb oder unterhalb der Anfangsposition." #: src/gtk/connected-device.ui:365 msgid "down" -msgstr "" +msgstr "Unten" #: src/gtk/connected-device.ui:369 msgid "up" -msgstr "" +msgstr "Oben" #: src/gtk/connected-device.ui:384 src/gtk/connected-device.ui:390 msgid "Keyboard Shortcuts" @@ -393,19 +392,17 @@ msgstr "" #: src/gtk/connected-device.ui:422 msgid "Re-center display shortcut" -msgstr "Display-Zentrierung-Tastenkombination" +msgstr "Bildschirm-Zentrierung-Tastenkombination" #: src/gtk/connected-device.ui:423 msgid "Pin the virtual display to the current position." -msgstr "Heften Sie das virtuelle Display an die aktuelle Position an." +msgstr "Heften Sie den virtuellen Bildschirm an die aktuelle Position an." #: src/gtk/connected-device.ui:451 -#, fuzzy msgid "Toggle zoom on focus shortcut" msgstr "Folgemodus-Tastenkombination umschalten" #: src/gtk/connected-device.ui:452 -#, fuzzy msgid "Quickly toggle zoom on focus mode." msgstr "Schnell den Folgemodus wechseln." @@ -419,11 +416,11 @@ msgstr "Schnell den Folgemodus wechseln." #: src/gtk/connected-device.ui:509 msgid "Summon mouse cursor shortcut" -msgstr "" +msgstr "Mauszeigerazeigenkürzel" #: src/gtk/connected-device.ui:510 msgid "Bring the mouse cursor to the center of the focused display." -msgstr "" +msgstr "Bewege den Mauszeiger in die Mitte des fokussierten Bildschirms." #: src/gtk/connected-device.ui:545 src/gtk/connected-device.ui:555 msgid "Advanced Settings" @@ -431,14 +428,14 @@ msgstr "Erweiterte Einstellungen" #: src/gtk/connected-device.ui:559 msgid "Find optimal display config" -msgstr "Optimale Display-Konfiguration finden" +msgstr "Optimale Bildschirm-Konfiguration finden" #: src/gtk/connected-device.ui:560 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." msgstr "" -"Ändern Sie die Display-Konfiguration der Brille automatisch zur maximalen " +"Ändern Sie die Bildschirmkonfiguration der Brille automatisch zur maximalen " "Auflösung und besten Skalierung, wenn sie angeschlossen ist." #: src/gtk/connected-device.ui:570 @@ -453,69 +450,70 @@ msgstr "" #: src/gtk/connected-device.ui:581 msgid "Center on glasses' display" -msgstr "" +msgstr "Zentriere auf den Brillenbildschirm" #: src/gtk/connected-device.ui:582 msgid "" "Center the viewport on the glasses' display, even if the display is not in " "the middle." msgstr "" +"Zentriere den Anzeigebereich auf den Brillenbildschirm, selbst wenn der Bildschirm " +"nicht mittig ist." #: src/gtk/connected-device.ui:592 msgid "Always primary display" -msgstr "Immer primäres Display" +msgstr "Immer primärer Bildschirm" #: src/gtk/connected-device.ui:593 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "" -"Setzen Sie die Brille automatisch als primäres Display, wenn sie " +"Setzen Sie die Brille automatisch als primären Bildschirm, wenn sie " "angeschlossen ist." #: src/gtk/connected-device.ui:603 -#, fuzzy msgid "Remove virtual displays on disable" -msgstr "Gebogenes Display" +msgstr "Gebogener Bildschirm" #: src/gtk/connected-device.ui:604 msgid "Automatically remove virtual displays when the XR effect is disabled." -msgstr "" +msgstr "Entferne virtuelle Bildschirme automatisch, wenn der XR Effekt deaktiviert ist." #: src/gtk/connected-device.ui:614 msgid "Enable multi-tap detection" -msgstr "" +msgstr "Aktiviere Multi Tap Erkennung" #: src/gtk/connected-device.ui:615 msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "" +msgstr "Aktviert die Doppelberührung zum rezentrieren und Dreifach-" +"berührung zum Kalibrieren." #: src/gtk/connected-device.ui:625 -#, fuzzy msgid "All displays follow mode" -msgstr "Gebogenes Display" +msgstr "Gebogener Bildschirm" #: src/gtk/connected-device.ui:626 msgid "Follow mode moves all displays, not just the focused one." -msgstr "" +msgstr "Folgemodus bewegt alle Bildschirme, nicht nur den fokussierten" #: src/gtk/connected-device.ui:642 msgid "Follow mode movement tracking" -msgstr "" +msgstr "Folgemodus Bewegungstracking" #: src/gtk/connected-device.ui:643 msgid "Choose which movements should be tracked in follow mode." -msgstr "" +msgstr "Setzen Sie, welchen Bewegungen der Folgemodus folgen soll." #: src/gtk/connected-device.ui:658 msgid "Horizontal" -msgstr "" +msgstr "Horizontal" #: src/gtk/connected-device.ui:678 msgid "Vertical" -msgstr "" +msgstr "Vertikal" #: src/gtk/connected-device.ui:698 msgid "Tilt/roll" -msgstr "" +msgstr "Neigen/Rollen" #: src/gtk/connected-device.ui:716 msgid "Movement look-ahead" @@ -529,7 +527,7 @@ msgid "" msgstr "" "Wirkt Eingabeverzögerungen entgegen, indem die Kopfverfolgungsposition vor " "der Renderzeit vorhergesagt wird. Bleiben Sie bei den Standardeinstellungen, " -"es sei denn, das virtuelle Display hängt hinter Ihren Kopfbewegungen " +"es sei denn, der virtuelle Bildschirm hängt hinter Ihren Kopfbewegungen " "hinterher, springt vor oder ist sehr wackelig." #: src/gtk/connected-device.ui:735 @@ -542,31 +540,31 @@ msgstr "Textskalierung" #: src/gtk/connected-device.ui:748 msgid "Scaling text below 1.0 will simulate a higher resolution display" -msgstr "Text unter 1.0 skalieren simuliert ein höher aufgelöstes Display" +msgstr "Text unter 1.0 skalieren simuliert einen höher aufgelösten Bildschirm" #: src/gtk/custom-resolution-dialog-content.ui:9 msgid "Width" -msgstr "" +msgstr "Breite" #: src/gtk/custom-resolution-dialog-content.ui:42 msgid "Height" -msgstr "" +msgstr "Höhe" #: src/gtk/custom-resolution-dialog.ui:5 msgid "Add a Custom Resolution" -msgstr "" +msgstr "Eigene Auflösung hinzufügen" #: src/gtk/custom-resolution-dialog.ui:10 msgid "Add" -msgstr "" +msgstr "Hinzufügen" #: src/gtk/display-distance-dialog.ui:9 msgid "Show full range" -msgstr "" +msgstr "Gesamtes Spektrum anzeigen" #: src/gtk/display-distance-dialog.ui:18 msgid "Done" -msgstr "" +msgstr "Fertig" #: src/gtk/failed-verification.ui:13 msgid "Breezy Desktop GNOME invalid setup" @@ -780,4 +778,4 @@ msgstr "Über BreezyDesktop" #~ msgstr "Im Breitbildmodus starten" #~ msgid "Widescreen mode is not supported for all glasses." -#~ msgstr "Breitbildmodus wird nicht für alle Gläsern unterstützt" +#~ msgstr "Breitbildmodus wird nicht für alle Gläsern unterstützt" \ No newline at end of file diff --git a/ui/po/mo/de/LC_MESSAGES/breezydesktop.mo b/ui/po/mo/de/LC_MESSAGES/breezydesktop.mo index d3a9d90e81440c62796534cbaef0cacaa4916709..fb1a2455d98a00d4c38778404a649c306a6d5418 100644 GIT binary patch literal 15424 zcmb7~35+CHdB>l@2MjSb#^8e^&w$xovpu^u2CvuaW7a!+cu#g_cdlT2dAh5b zI%al;D_k*0fRJD(5++8(BmpTGAS0Po0F4NQD}6KY*`(JU<+t`!!=OKgXEA0lx=+`$A)$ z!Tm2>WXzMn?}L|sKLhp3#TOg%1n^4mJn*^T`QX-Y{rrG8f|qjtR#4;2gX-4>9}8yS zWnckLfo}&j?)~7Czz={d$$SjF9Q-u+RPbxz`rpB)a6Lt5t;>RUfY*ShzzWR3FM;m| zZ)Ov-;5Pz3hebV+>w7@$cLm%G{vP-&@KfN;;CH}X;8kqqO7P|2NpJr^Q5K@}+*$hiFPX%?o8Ps??Kv-mM1vTFuP~+SUYCRqB zYVd;~Q<^V;8uy#v)4=b8djC9#t8u45$1hO(d@gt+xCexU=C$GZyFktV-f;f|;rgSX z`11((0`N27yTShfHSarMj_`i)h2VproE{R`?&zT6}$+%0Xzyq zYIASE_kyC&pM(6FPxGVoejT*n55eu=g%IgR@D@<=avBu>-VE*p{{&nCzXOUsFXKng zS3qu=2SBa&`aSk4&+iLC@%s``>%KDFzZw*OuK~{kcY%)qcY~7aSrAn*cY&hc z0KEGg9sot(zYO?A&~p72cp1WV3haQgE1v|l-!Fp=@JHZQ@afO<_Td0{8`t-O&jvpS zw!j~P7l1FK^G@(i@M7rr9#HH3AcH*)d<2BFW(|A-_^+V&^dF%5ojdKXuK+dP^T6}L z=YyipPEh=RF{pJnLAGoj0WSl;4Nigo4YE~p-ZsydX;9Cv2lf0AC_Om^-U61O==)Jn z^7vU$^L`5y{l5o_zvo~S^!^3lF7OiYOW;vZ>wU(x9)P66;7AJK+E;x>8$y#0a=>49lR4<2A>H29e5k~O;Gf^YKQ0d zwt%NV^?Mz7G5Aif13n1847}h*FaI%!Dx1FswVoe zO?1IrxT6XvK%~uY(!^IC_tH=|)22ygbS%&c+Lg3d(CS0F@Fv=Cha2~RmL}Tnrs?=y znsn$s+A>YY9-8E2uP!+D(^|BMmeSrq(}9|r)3gJ+;JBamQrd6OV%lS9i!>cg59aLw zQ8jnm#qV2bzvD06?>>H?N-JsNyJSW3e1vulO*Z-jZ9vm;%!7FYDEWPLxIPu|Nucb< zvuJ(V8)-V8NjpwEM9XPgXp+~L({xBCUqX8e?TNG-X!UU$C-0%XmX^@Yr|Eb)O)|Qf zhM2nJB7QHV-A#KQ?RB(Q(jH6Gai<4oL*LB#676ZUJ7_bsSJ8A_O?!bm^FKEO7mr=f za=v5i`c}?SaUc7H`(5z$;au=;{Y=^6aiDEivdSiDQAWL9+_FnaWM@ts-)j5OVr+{l zk6nj6N^RMVZ5}UV{eGOb=sL)XvJu|2x*eshonvDcD@7Ui7s{S(G^!%bZJb8UUd&aR zE!)$1qm?I1aX!tXrDP$V8hiC9bLGoP5pT7FUK|y%Z700RB9fx0Vw_F#ACalE=>_r%3wnGLqO6{TgIr*R1h7%RNCb%&sVl;FS%YxGn+MgNhfmCFmx+R-QHPe zmsz#gX&boOjh14@*eVWg>h)|hwjC&*LMhf0_38!KB6Cb$fWEDGA!)@nX-{kwVw8n? zn#tF%mdwhfCB z#=^#@2awfnW}E~uY$s__#yv>HlC@8$ywJ@GcG*kXv14Aeun-r;mJywe-TW#&xjT>h zEE2hR4Lk~`Ta0aRg)B*4`dM0bdn@bit;A8TTaL5zb7$3{lSi%CTx(m=3cp=QWv<=6 zWBb5dd;RtN?rPrhoL5EtjQzZ3*S6*@_Qc#CGt~Wen_qm~#_cw8@9y>y%!Sbz zHpLC+^qvbl=&lsW0-{$h$}V?d6#`+014(=Q;H~M2p~9T%zFrf@-gW~P)nLG4Aw{Pb z6$Nq=Av8fl;|=3Ng`~aWmQnW)3)DO9q*LWyB8N3HI zYn9elEVvZ+i`w>$Nro-FVH&Bx&;x{%2|}X{TH;cYm(?%l7E_DE8^~I)cJZpFX@r5| zazf5F5^Ftg&H78bd5~wVN=lNHD_bU??mKey@GMrM#I(v3r&$T7qSngUJ0|H89BVP#zq(PRFcv*ri|E23d*6Ox543tx(zEwOmaswb(&Zbu7?PK?Km2Jg$1#XQ6@Bhr0K(JhVtq+yi*LK1=qv5XoEkG&8(NEK6^_VWi$vvC7bRawE`A+b_Fi3lXEmd zex&qxQo^FKM~H9}3k6gCC|=Jd^k!&ar_EmPP3_E5l=Pxz(nFK#n}yjcs%8V2GE)6u z2hHAIRGPiP0M+E%JLXHq&WFov49H6VtIMx_0O3N7oMeVv_7LMK9bV+vW}H^cg_J7a{8CKPzS?q&l2O- zTO4{fZ_L~zyj_&J%wCpiMa-{wiW3x2@xsA49;_o&0#CQ*Lw7UP`XWu~z8X1WYr|9cxp^{ojonz_t69WuT4$f9g`wwfUu_&?`DT>v|6j>nB4-C>u*p?MVL zq_3T!S{K}E%ZgZ;Ot+25ZA-kx2C(u463@}jl~-ko5Rk~>zBH%&4PM?w=L}d!=i$MG zXcSs=7?gKkSt(v56U!Fk)Xasrv6QGaV@2lIPH)E-VjT;jO{}g0#x5!a5l3^?Of{H1 zJ45F^A=uZ6^GEJUZLq`B^$)vD<|0sM!ImS$mSwt>LHmvd11LCc=G3oUF^8k3nIlhZ z$P30Tf8Jba6v`cyQrOKMXOg#=xjvb9*9P-Fx}A|#PbPImh98`(`XpV9G8RJBa$@F) z4hU0fk#0j5XI}}m#{4<<(RU;mcBZZlK$BFA)WX*-RubB`k`sScH@wnIFZ6N*LS{ynSMnq*rds5pOfULDWY=8=kEf^&u7Jvq4Sy zd19KG4oR#zF$`2Avc|IspQ{k`qXnWSiUg;km7X@PcDmJRw0upYq3{wr7hxFc8pgCa zL4+99c?uCTH5iHpQsF=ztEIZs!=*lKc|3~=@8fuR1Nqpl;qGd%`&Wq{7h0Yk=5DmcMHfrtqxkrSE?#bRO4Al%1Xd^Fe0zZwc0z=|tjGR9|xVn<`0^#z75Ely=GAtL}PgG{ihGGmQ zlw#vul~i!ed3FzZSmQve0i%`U?X<^cZa+A)Z`PiiJwA8f=#eSEug2k`le8MUt4`6F z&vx3WV@Dgu2@~{AV-FT}r@e0bb=Nnx?`Uklj??&Du!9A~ znVoo=lHq8Corvkw;RACKx{d)3YM+ATLt zQ3O2|r>UJwV!L*xiMF-~lV(mFcL69KohYfa-KZI-TP+1%s>Z%EbscmYze&Btz1`vg zaY#Gs(uMP5suv&dm1b8>DG0gaE~cg`I&pjLOt&7GD)Rrocs!#_GHtWM!uI2yX4f9r zKCUw+06}nwsQOIT4%K6er=l!Pm3Ooadh%u(SNzV0T5{hWj8bgkhHA2g!l#BZGNjub zCw)I4vzM4VyM!;BNW>5YEhx4JLg^T@(VyIU<)rWSiRl&r?-s)aO!|<7SiLmTn&qu z8z=|2tCcMoH0dzhNCHy5K^&#J4AG3wm=$iw5eTO zdziX7FK5k3La-M)%uvEoY{5$apC<(?>A(+094?~anRyVF z)ax0pHb`q&i5qN!C3Uemtx8BuUB4pASe71${(Gx*QF#~3BPeGEPBuH)snTZLVH2xV z*JhG@CMG@(%h!I?lG z9V&iQn!ac4p{^5|vAe4X&!~^CqD2++Fn_ogkRmd^x7HPZ8J7D)${e*cUf5 zH_7g#*Fwyayiexu@3Fwq%>#U?%3ZZ_?V((2A3d7K!pG@i)<^GrWp}k=IzAiVkQ>T! z7SS)t+$v}@hiFH=(GgD7?{J&K(eT0g?wCbiMOqZa(FLr)aC#Kf%NC0Y{$JCDDM&Ml za#S(a>=Kg+i5*+!aA{#!SC%WvwKM2=Z1?rn9#VB#k|a*2%#FIGX6;Q}aj1?I9VW6duU~j4_-^yzyaZ?cQm2SQ@fNOwfth6g6*srEz=R9WTcu zXye06vBzmd0EPv&D*U8ImPFHL*Nz z*4EvgX)0f$Sl`DW4e(*!9PNhXXxlF+oX@5u9v7K+AvaPwPRVt9IxE*(LkS9eCzGpp z;<&Pr^0@AyRF9MBm(Y0Kr%N*-PMcko!AX+bz}d^{janzA*Pe#h1hkaoqqBB~nkGz~ z7}y1>>)ih2)JPkC(D^BtgT~jQTc8|`;OpX?G#QDY%I;-Ff_#|BVU-de0*ZeZwGKOP zPb#yX=OfW3q`eCl!{=Cq@VIZUT9WRxIaJWGK6*Zrx>?*_WeXndH3Fizha8Qxdo*#N z7akHSd8rQys0=-DTpa9qW1(Go5tROsK6fZLv?^_k)0Fh9*HaFWV>z&o9Re~me0A+% zsNvsZn;oA5WK9V??4cc_m7<4M?@)S`DaUSy=clCI7tH32k-%!=4!-f(*l-u3j z6FDtw#)+dHQBK+-sX<>yHrfRsh3~=q8u@J6VY_P&rHqb?(5DfvxLRU!w0r-|X};nD zb=P8@_f;T;{`2KbUnux2K7DpaP_NM()8|K7<1u4L3OiImtm4R`muAGhPQLc=+Jo`f z9jGg{hl*o2>ux@#N-3$6Pj<{qZK3U975;I&13T*kTCdkn`GUGw%Ezew67&6^!b=aC zQ(#O#A~bz-L{hx;dP}wk^=p&THzqnB#PBwql6rI-)YwCuQ%FSc z=go*kqTTg<$aB3z+?Z~!`*oNW5Oxeq#(s91p10(Mamn7A+K{nPW(rr@vcgNgbfo^C%O>Q1iS*$wZWMA& zW83Hy(xzZqG`vrn#>B zDSX=E_|3N$=aN|_*Il^)Y--i+#7c0bA|ql2F`INz!$^T8xma)9NsYZe7E;W)ij;(c zkdUpXQP+h>$suNxzR>HFM$%2Oa%q8{raK5x#^t zJnW*&&E5%aG5aWeYM_%oT4bNYM^I3K{wONoA3t18#Fc8IrWwWMkqeyDMJiXTanIaU z>lzuH1QUiikHSe6wCKg5rs8u0ZC-uKt7>@DKjI7F6-$Ib&YB8?Xs+iuHmFfCBkO+5{ z??Ap6dYZ01Oe|ZPBPx*vQ+mYZ*I<6O5q*7 zq2bu*vtDuJ$9~}qi=-v|E@7c{kPw{945e*WMQCN_S zz*muRNBVJ>>p%6tsi_ki$Qew#dlr zUga-P(?t?|O27hEgT~yVzChL0dBq>9xAAYqhexG*8Gm#()a|$Oe>pq-+m#PgQjrkZPz^oqLP8^* aGo98?(m52C^Pcao&PsWvY{Tn#rj`WO8Z-%7|;6_IjMkc>~G}LMZpW zjOn-?8H@S|U3k(tKZo+3i%$C$Ea&_tzK&DJ@g7O_ajD=LlvJKYe(JK*ejVdDzl}1` zKTuLQl-|T-l+5MhB%Fo()M^d}da)R{VHI{GNl~{jA}NxmyI=~+jP_$1cB7>DJETvQ z#^~l^KFaltC`M4|^d6k3gm4he)JAoV6wBO)NETXZ74gN$5%g*%=CXs)6 z;7fWF`;mR2?jVC#aZFQoaSF;3Wg_oVImj4PwR3$r%5zO96KX;FP){R2wS$9!hw*Vd zkK3>$LOvd$auV4WY8>C7j4TTaa1KsGAIdJ?gR%!M;uvOh6(s{V*!nWSyC|D6AuD#@ zM3hu#U@qpM46Fh9B2}c7itO%9PQxygnH@w~f@3JDKaVoAi&%xfU?1i)S{cyqjxtSo zJ^>{o87Lj)qhzuiWkA(PCL^kjillxWGI-U2{M2h4r2Q~TCVFu;-olkwk{!#~^O(>1 zc6};9XR&2v}PzE-7ic<5@z;yZkTd1%cDuM>?#S%P)tMLZP($qc>+x?9w zsoa5lLF!ZFr}{X^p83^jkEeI~RLLkau5w&}?{U6N&goy>rXp){7bV3hIkA}+qny{{ z5R_$*C6R2bC8WqMm;F&m$e^TfyP6ZN#WEw+rNlf!mX4JgEYg3p%ypF1WD_!SnT?bR zqMj%tWQn9aM98}45iTC9&L)P?M&)5 z#3HAy&{0@H7=$c|?1ve|K;dJEeg*PpC7G*rE4o}q<{Hb?k%$BQdoA? zNQ@`g?9noeV=2)@6cOdbK$%Wu6~V6lPm#UVKrFbYRhFC8R*NNd)y{=DT;tS*hY9`` zlseiw+8(BBT%~%qD@$K?Ez{48@6)9dZr-<`&24*4Juc~z%cE-jwmW31I@{gsGd=oH za`Q;P&*$$n+Wj6=Z%wJtU!+{p-=|g|ePvSS5dA~i8+u=Qrv56uUN>Z{&>5La^^2LG z>y=p<34tzSp4V;J`nkz@qb#%2@R%XDph@~}PMUV-=B6xeZ#M%*N5E?DITSF1My(a>@VUG6x!gs1OJ3^;=e%Hv{yDEh zd-DrN{Cm%V{A*J4{|;t9b)0y1TF`cd%!_-D-Km0e8sq+eWJuy|v!&^O~eB9MngOmg~gg zypi-iF!+VV*L1LCzOF0%U0}tGuK3Nx(Z`5bYD>IC?o?~s~#2s$+ zn!cW6!O%Tv`F6&mx$8QuU`w0HSbXlNVcTPP&1S#Xv}twT8PvXtwSygeUD2qED)U@* z0ox3RjLl{s7?x*sZ&j76Hnw&w(iYR=CHnNt{%me(=EbC?)3j-2K)#@1TDEC4hU9|& Ht$Oi4!$yxt