Merge branch 'main' into gnome-44-max

This commit is contained in:
wheaney 2024-09-10 09:19:50 -07:00
commit 38e7830e06
29 changed files with 2088 additions and 185 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@ gschemas.compiled
.flatpak-builder/
out/
*.po~
gnome-44-max/

View File

@ -8,7 +8,7 @@
This repo contains a collection of tools to enable virtual desktop environments for gaming and productivity on Linux using [supported XR glasses](https://github.com/wheaney/XRLinuxDriver#supported-devices).
There are two installations at the moment. **Note: Only install one of these at a time, as they invalidate each other's installations. This is only temporary.**
There are two installations at the moment. **Note: Don't manually install either of these if you're running the Decky plugin on the same machine, as they invalidate each other's installations. This is only temporary.**
* [Breezy GNOME](#breezy-gnome) for desktop support, primarily in GNOME Linux desktop environments
* [Breezy Vulkan](#breezy-vulkan) primarily for gaming but would work with pretty much any application that uses Vulkan rendering.
@ -29,9 +29,7 @@ Breezy GNOME is in AUR (but not pacman, yet). To install, run these commands fro
#### All other distros
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:
* For **GNOME 45+**: `~/Downloads/breezy_gnome_setup`
* For **GNOME 42-44**: `~/Downloads/breezy_gnome_setup --tag gnome-44-max`
2. Run the setup script: `~/Downloads/breezy_gnome_setup`
### Steam Deck desktop mode

View File

@ -11,23 +11,40 @@ if [ "$(id -u)" == "0" ]; then
exit 1
fi
start_dir=$(pwd)
check_command() {
if ! command -v "$1" &>/dev/null; then
echo "Please install \"$1\" and make sure it's available in your \$PATH, then rerun the setup."
exit 1
fi
}
check_command "gnome-shell"
ARCH=$(uname -m)
FILE_NAME="breezyGNOME-$ARCH.tar.gz"
if [ "$(gnome-shell --version | cut -d' ' -f3 | cut -d'.' -f1)" -lt 45 ]; then
echo "Performing setup for GNOME 44 and below ($ARCH)"
FILE_NAME="breezyGNOME-44-max-$ARCH.tar.gz"
else
echo "Performing setup for GNOME 45 and up ($ARCH)"
fi
start_dir=$(pwd)
# create temp directory
tmp_dir=$(mktemp -d -t breezy-gnome-XXXXXXXXXX)
pushd $tmp_dir > /dev/null
echo "Created temp directory: ${tmp_dir}"
binary_download_url="https://github.com/wheaney/breezy-desktop/releases/latest/download/breezyGNOME-$ARCH.tar.gz"
binary_download_url="https://github.com/wheaney/breezy-desktop/releases/latest/download/$FILE_NAME"
if [ "$1" = "-v" ]
then
metrics_version="$2"
binary_path_arg="$3"
elif [ "$1" = "--tag" ] && [ -n "$2" ]
then
binary_download_url="https://github.com/wheaney/breezy-desktop/releases/download/$2/breezyGNOME-$ARCH.tar.gz"
binary_download_url="https://github.com/wheaney/breezy-desktop/releases/download/$2/$FILE_NAME"
else
binary_path_arg="$1"
fi
@ -35,10 +52,10 @@ fi
if [ -z "$binary_path_arg" ]
then
# download and unzip the binary
echo "Downloading to: ${tmp_dir}/breezyGNOME-$ARCH.tar.gz"
echo "Downloading to: ${tmp_dir}/$FILE_NAME"
curl -L -O $binary_download_url
binary_path_arg="breezyGNOME-$ARCH.tar.gz"
else
FILE_NAME=$(basename $binary_path_arg)
if [[ "$binary_path_arg" = /* ]]; then
abs_path="$binary_path_arg"
else
@ -49,7 +66,7 @@ else
fi
echo "Extracting to: ${tmp_dir}/breezy_gnome"
tar -xf $(basename $binary_path_arg)
tar -xf $FILE_NAME
pushd breezy_gnome > /dev/null

View File

@ -4,15 +4,34 @@
set -e
ARCH=${ARCH:-$(uname -m)}
echo "Building Breezy GNOME for $ARCH"
# https://stackoverflow.com/a/246128
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
ROOT_DIR=$(realpath $SCRIPT_DIR/..)
VULKAN_DIR=$ROOT_DIR/vulkan
GNOME_DIR=$ROOT_DIR/gnome
if [ -z "$GNOME_44_MAX" ]; then
# standard build for GNOME 45 and up
echo "Building Breezy GNOME for $ARCH, GNOME versions 45 and up"
GNOME_DIR=$ROOT_DIR/gnome
BUILD_FILE_NAME=breezyGNOME-$ARCH.tar.gz
else
# special patched build for GNOME 44 and below
echo "Building Breezy GNOME for $ARCH, GNOME versions 44 and below"
# use a special directory for the GNOME 44 max build, ignored by git
GNOME_DIR=$ROOT_DIR/gnome-44-max
rm -rf $GNOME_DIR
mkdir $GNOME_DIR
BUILD_FILE_NAME=breezyGNOME-44-max-$ARCH.tar.gz
# copy the GNOME extension source code to the new directory and apply
# a patch that makes it compatible with GNOME 44 and below
cp -ra $ROOT_DIR/gnome/* $GNOME_DIR
rm -rf $GNOME_DIR/build
git apply gnome-44-max.patch
fi
GNOME_BUILD_DIR=$GNOME_DIR/build
BUILD_FILE_NAME=breezyGNOME-$ARCH.tar.gz
mkdir -p $GNOME_BUILD_DIR
if [ -e "$GNOME_BUILD_DIR/$BUILD_FILE_NAME" ]; then
@ -65,11 +84,11 @@ rm -rf $TMP_DIR
cp $XR_DRIVER_BINARY $PACKAGE_DIR/xrDriver.tar.gz
cp $XR_DRIVER_DIR/bin/xr_driver_setup $PACKAGE_DIR/bin
gnome/bin/package_extension
cp gnome/out/breezydesktop@xronlinux.com.shell-extension.zip $PACKAGE_DIR
$GNOME_DIR/bin/package_extension
cp $GNOME_DIR/out/breezydesktop@xronlinux.com.shell-extension.zip $PACKAGE_DIR
# create a checksum that combines the checksums of all files in the directory
pushd gnome/src
pushd $GNOME_DIR/src
GNOME_MANIFEST_LINE=$(find -L . -type f ! -name "*.compiled" -exec sha256sum {} \; | sort | sha256sum | sed 's/ .*//')
popd

View File

@ -41,8 +41,8 @@ cp $VKBASALT_BUILD_DIR/builddir/src/libvkbasalt.so $PACKAGE_DIR/vkBasalt.64/
cp $VKBASALT_BUILD_DIR/builddir/config/vkBasalt.json $PACKAGE_DIR/vkBasalt.64/
cp $VKBASALT_BUILD_DIR/builddir.32/src/libvkbasalt.so $PACKAGE_DIR/vkBasalt.32/
# copy Sombrero FX, get ReShade headers
cp modules/sombrero/*.fx $PACKAGE_DIR
# copy Sombrero shader, get ReShade headers
cp modules/sombrero/*.frag $PACKAGE_DIR
cp modules/sombrero/*.png $PACKAGE_DIR
wget -P $PACKAGE_DIR https://raw.githubusercontent.com/crosire/reshade-shaders/384465d0287999caa6190b5ebea506200b4f4a0a/Shaders/ReShade.fxh
wget -P $PACKAGE_DIR https://raw.githubusercontent.com/crosire/reshade-shaders/384465d0287999caa6190b5ebea506200b4f4a0a/Shaders/ReShadeUI.fxh
@ -93,7 +93,7 @@ cp $XR_DRIVER_DIR/bin/xr_driver_setup $PACKAGE_DIR/bin
# include any file that doesn't get modified during setup (e.g. vkBasalt.json files)
pushd $PACKAGE_DIR
echo $XR_DRIVER_MANIFEST_LINE > manifest
sha256sum bin/breezy_vulkan_uninstall vkBasalt.64/libvkbasalt.so vkBasalt.32/libvkbasalt.so *.fx* *.png >> manifest
sha256sum bin/breezy_vulkan_uninstall vkBasalt.64/libvkbasalt.so vkBasalt.32/libvkbasalt.so *.frag *.fx* *.png >> manifest
popd
# bundle everything up

427
gnome-44-max.patch Normal file
View File

@ -0,0 +1,427 @@
diff --git a/gnome-44-max/bin/setup b/gnome-44-max/bin/setup
index 7ee291a..3bd001b 100755
--- a/gnome-44-max/bin/setup
+++ b/gnome-44-max/bin/setup
@@ -11,6 +11,7 @@ check_command() {
check_command "flatpak"
check_command "gnome-extensions"
+check_command "glib-compile-schemas"
# This script gets packaged with the release and should do the bulk of the setup work. This allows this setup to be tied
# to a specific release of the code, and guarantees it will never run along-side newer or older binaries.
@@ -78,8 +79,10 @@ echo "Copying the manifest file to ${DATA_DIR}"
mkdir -p $DATA_DIR
cp manifest $DATA_DIR
-echo "Installing the breezydesktop@xronlinux.com GNOME extension"
-gnome-extensions install --force breezydesktop@xronlinux.com.shell-extension.zip
+EXTENSION_UUID="breezydesktop@xronlinux.com"
+echo "Installing the $EXTENSION_UUID GNOME extension"
+gnome-extensions install --force "$EXTENSION_UUID.shell-extension.zip"
+glib-compile-schemas "$GNOME_SHELL_DATA_DIR/extensions/$EXTENSION_UUID/schemas"
echo "Installing the Breezy Desktop UI Flatpak (this may take a couple minutes the first time)"
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
diff --git a/gnome-44-max/src/cursor.js b/gnome-44-max/src/cursor.js
index 36ad7ee..41102a0 100644
--- a/gnome-44-max/src/cursor.js
+++ b/gnome-44-max/src/cursor.js
@@ -15,11 +15,11 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
-import Clutter from 'gi://Clutter';
-import GObject from 'gi://GObject';
+const Clutter = imports.gi.Clutter;
+const GObject = imports.gi.GObject;
// Copied almost verbatim from ui/magnifier.js.
-export const MouseSpriteContent = GObject.registerClass({
+var MouseSpriteContent = GObject.registerClass({
Implements: [Clutter.Content],
}, class MouseSpriteContent extends GObject.Object {
_init() {
diff --git a/gnome-44-max/src/cursormanager.js b/gnome-44-max/src/cursormanager.js
index 44b3f5f..fa65a4a 100644
--- a/gnome-44-max/src/cursormanager.js
+++ b/gnome-44-max/src/cursormanager.js
@@ -1,11 +1,15 @@
-import Clutter from 'gi://Clutter';
-import Meta from 'gi://Meta';
-import * as PointerWatcher from 'resource:///org/gnome/shell/ui/pointerWatcher.js';
-import { MouseSpriteContent } from './cursor.js';
-import Globals from './globals.js';
+const Clutter = imports.gi.Clutter;
+const Meta = imports.gi.Meta;
+const PointerWatcher = imports.ui.pointerWatcher;
+
+const ExtensionUtils = imports.misc.extensionUtils;
+const Me = ExtensionUtils.getCurrentExtension();
+
+const Globals = Me.imports.globals;
+const { MouseSpriteContent } = Me.imports.cursor;
// Taken from https://github.com/jkitching/soft-brightness-plus
-export class CursorManager {
+var CursorManager = class CursorManager {
constructor(mainActor, refreshRate) {
this._mainActor = mainActor;
this._refreshRate = refreshRate;
@@ -208,7 +212,7 @@ export class CursorManager {
_queueVisibilityUpdate() {
this._queued_visibility_update = true;
- this._cursorTrackerSetPointerVisibleBound(false);
+ if (this._cursorTrackerSetPointerVisibleBound) this._cursorTrackerSetPointerVisibleBound(false);
this._queueSpriteUpdate();
}
diff --git a/gnome-44-max/src/extension.js b/gnome-44-max/src/extension.js
index cd17162..435154d 100644
--- a/gnome-44-max/src/extension.js
+++ b/gnome-44-max/src/extension.js
@@ -1,19 +1,21 @@
-import Clutter from 'gi://Clutter'
-import Gio from 'gi://Gio';
-import GLib from 'gi://GLib';
-import Meta from 'gi://Meta';
-import Shell from 'gi://Shell';
-import St from 'gi://St';
-
-import { CursorManager } from './cursormanager.js';
-import Globals from './globals.js';
-import { Logger } from './logger.js';
-import { MonitorManager } from './monitormanager.js';
-import { isValidKeepAlive } from './time.js';
-import { IPC_FILE_PATH, XREffect } from './xrEffect.js';
-
-import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
-import * as Main from 'resource:///org/gnome/shell/ui/main.js';
+const Clutter = imports.gi.Clutter;
+const Gio = imports.gi.Gio;
+const GLib = imports.gi.GLib;
+const Meta = imports.gi.Meta;
+const Shell = imports.gi.Shell;
+const St = imports.gi.St;
+
+const Main = imports.ui.main;
+
+const ExtensionUtils = imports.misc.extensionUtils;
+const Me = ExtensionUtils.getCurrentExtension();
+
+const Globals = Me.imports.globals;
+const { CursorManager } = Me.imports.cursormanager;
+const { Logger } = Me.imports.logger;
+const { MonitorManager } = Me.imports.monitormanager;
+const { isValidKeepAlive } = Me.imports.time;
+const { IPC_FILE_PATH, XREffect } = Me.imports.xrEffect;
const NESTED_MONITOR_PRODUCT = 'MetaMonitor';
const SUPPORTED_MONITOR_PRODUCTS = [
@@ -29,11 +31,10 @@ const SUPPORTED_MONITOR_PRODUCTS = [
NESTED_MONITOR_PRODUCT
];
-export default class BreezyDesktopExtension extends Extension {
- constructor(metadata, uuid) {
- super(metadata, uuid);
-
- this.settings = this.getSettings();
+class BreezyDesktopExtension {
+ constructor(extensionPath) {
+ this.path = extensionPath;
+ this.settings = ExtensionUtils.getSettings();
// Set/destroyed by enable/disable
this._cursor_manager = null;
@@ -593,6 +594,6 @@ export default class BreezyDesktopExtension extends Extension {
}
}
-function init() {
- return new Extension();
+function init(meta) {
+ return new BreezyDesktopExtension(meta.path);
}
diff --git a/gnome-44-max/src/globals.js b/gnome-44-max/src/globals.js
index 124d2e1..79a3a87 100644
--- a/gnome-44-max/src/globals.js
+++ b/gnome-44-max/src/globals.js
@@ -2,5 +2,4 @@ const Globals = {
logger: null,
ipc_file: null, // Gio.File instance, file exists if set
extension_dir: null // string path
-}
-export default Globals;
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/gnome-44-max/src/ipc.js b/gnome-44-max/src/ipc.js
index a729368..d5f7ab0 100644
--- a/gnome-44-max/src/ipc.js
+++ b/gnome-44-max/src/ipc.js
@@ -1,30 +1,30 @@
-export const UINT8_SIZE = 1;
-export const BOOL_SIZE = UINT8_SIZE;
-export const UINT_SIZE = 4;
-export const FLOAT_SIZE = 4;
+var UINT8_SIZE = 1;
+var BOOL_SIZE = UINT8_SIZE;
+var UINT_SIZE = 4;
+var FLOAT_SIZE = 4;
-export const DATA_VIEW_INFO_OFFSET_INDEX = 0;
-export const DATA_VIEW_INFO_SIZE_INDEX = 1;
-export const DATA_VIEW_INFO_COUNT_INDEX = 2;
+var DATA_VIEW_INFO_OFFSET_INDEX = 0;
+var DATA_VIEW_INFO_SIZE_INDEX = 1;
+var DATA_VIEW_INFO_COUNT_INDEX = 2;
// computes the end offset, exclusive
-export function dataViewEnd(dataViewInfo) {
+function dataViewEnd(dataViewInfo) {
return dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX] + dataViewInfo[DATA_VIEW_INFO_SIZE_INDEX] * dataViewInfo[DATA_VIEW_INFO_COUNT_INDEX];
}
-export function dataViewUint8(dataView, dataViewInfo) {
+function dataViewUint8(dataView, dataViewInfo) {
return dataView.getUint8(dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX]);
}
-export function dataViewUint(dataView, dataViewInfo) {
+function dataViewUint(dataView, dataViewInfo) {
return dataView.getUint32(dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX], true);
}
-export function dataViewBigUint(dataView, dataViewInfo) {
+function dataViewBigUint(dataView, dataViewInfo) {
return Number(dataView.getBigUint64(dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX], true));
}
-export function dataViewUint32Array(dataView, dataViewInfo) {
+function dataViewUint32Array(dataView, dataViewInfo) {
const uintArray = []
let offset = dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX];
for (let i = 0; i < dataViewInfo[DATA_VIEW_INFO_COUNT_INDEX]; i++) {
@@ -34,7 +34,7 @@ export function dataViewUint32Array(dataView, dataViewInfo) {
return uintArray;
}
-export function dataViewUint8Array(dataView, dataViewInfo) {
+function dataViewUint8Array(dataView, dataViewInfo) {
const uintArray = []
let offset = dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX];
for (let i = 0; i < dataViewInfo[DATA_VIEW_INFO_SIZE_INDEX] * dataViewInfo[DATA_VIEW_INFO_COUNT_INDEX]; i++) {
@@ -44,11 +44,11 @@ export function dataViewUint8Array(dataView, dataViewInfo) {
return uintArray;
}
-export function dataViewFloat(dataView, dataViewInfo) {
+function dataViewFloat(dataView, dataViewInfo) {
return dataView.getFloat32(dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX], true);
}
-export function dataViewFloatArray(dataView, dataViewInfo) {
+function dataViewFloatArray(dataView, dataViewInfo) {
const floatArray = []
let offset = dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX];
for (let i = 0; i < dataViewInfo[DATA_VIEW_INFO_COUNT_INDEX]; i++) {
diff --git a/gnome-44-max/src/logger.js b/gnome-44-max/src/logger.js
index 50450c1..8b307fc 100644
--- a/gnome-44-max/src/logger.js
+++ b/gnome-44-max/src/logger.js
@@ -14,15 +14,15 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
-import * as Config from 'resource:///org/gnome/shell/misc/config.js';
-import Gio from 'gi://Gio';
-import GLib from 'gi://GLib';
-import GObject from 'gi://GObject';
-import System from 'system';
+const Config = imports.misc.config;
+const Gio = imports.gi.Gio;
+const GLib = imports.gi.GLib;
+const GObject = imports.gi.GObject;
+const System = imports.system;
const LOG_DIR_NAME = 'breezy_gnome/logs/gjs';
-export const Logger = GObject.registerClass({
+var Logger = GObject.registerClass({
GTypeName: 'Logger',
Properties: {
'title': GObject.ParamSpec.string(
diff --git a/gnome-44-max/src/math.js b/gnome-44-max/src/math.js
index 497274e..6c98cdb 100644
--- a/gnome-44-max/src/math.js
+++ b/gnome-44-max/src/math.js
@@ -1,3 +1,3 @@
-export function degreeToRadian(degree) {
+function degreeToRadian(degree) {
return degree * Math.PI / 180;
}
\ No newline at end of file
diff --git a/gnome-44-max/src/metadata.json b/gnome-44-max/src/metadata.json
index b9b5ebf..c888f94 100644
--- a/gnome-44-max/src/metadata.json
+++ b/gnome-44-max/src/metadata.json
@@ -5,7 +5,7 @@
"settings-schema": "com.xronlinux.BreezyDesktop",
"session-modes": ["user", "unlock-dialog"],
"shell-version": [
- "45", "46"
+ "42", "43", "44"
],
"url": "https://github.com/wheaney/breezy-desktop"
}
\ No newline at end of file
diff --git a/gnome-44-max/src/monitormanager.js b/gnome-44-max/src/monitormanager.js
index ca8a6a5..075ba63 100644
--- a/gnome-44-max/src/monitormanager.js
+++ b/gnome-44-max/src/monitormanager.js
@@ -16,12 +16,15 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
-import Gio from 'gi://Gio';
-import GObject from 'gi://GObject';
+const Gio = imports.gi.Gio;
+const GObject = imports.gi.GObject;
-import * as Main from 'resource:///org/gnome/shell/ui/main.js';
+const Main = imports.ui.main;
-import Globals from './globals.js';
+const ExtensionUtils = imports.misc.extensionUtils;
+const Me = ExtensionUtils.getCurrentExtension();
+
+const Globals = Me.imports.globals;
let cachedDisplayConfigProxy = null;
@@ -43,7 +46,7 @@ function getDisplayConfigProxy(extPath) {
return cachedDisplayConfigProxy;
}
-export function newDisplayConfig(extPath, callback) {
+function newDisplayConfig(extPath, callback) {
const DisplayConfigProxy = getDisplayConfigProxy(extPath);
new DisplayConfigProxy(
Gio.DBus.session,
@@ -243,7 +246,7 @@ function performOptimalModeCheck(displayConfigProxy, connectorName, headsetAsPri
}
// Monitor change handling
-export const MonitorManager = GObject.registerClass({
+var MonitorManager = GObject.registerClass({
Properties: {
'use-optimal-monitor-config': GObject.ParamSpec.boolean(
'use-optimal-monitor-config',
diff --git a/gnome-44-max/src/shader.js b/gnome-44-max/src/shader.js
index f70c96d..352be40 100644
--- a/gnome-44-max/src/shader.js
+++ b/gnome-44-max/src/shader.js
@@ -1,6 +1,6 @@
-import Gio from 'gi://Gio';
+const Gio = imports.gi.Gio;
-export function getShaderSource(path) {
+function getShaderSource(path) {
const file = Gio.file_new_for_path(path);
const data = file.load_contents(null);
diff --git a/gnome-44-max/src/time.js b/gnome-44-max/src/time.js
index 7883b9b..5478d2a 100644
--- a/gnome-44-max/src/time.js
+++ b/gnome-44-max/src/time.js
@@ -1,11 +1,11 @@
-export function getEpochSec() {
+function getEpochSec() {
return toSec(Date.now());
}
-export function toSec(milliseconds) {
+function toSec(milliseconds) {
return Math.floor(milliseconds / 1000);
}
-export function isValidKeepAlive(dateSec, strictCheck = false) {
+function isValidKeepAlive(dateSec, strictCheck = false) {
return Math.abs(toSec(Date.now()) - dateSec) <= (strictCheck ? 1 : 5);
}
\ No newline at end of file
diff --git a/gnome-44-max/src/xrEffect.js b/gnome-44-max/src/xrEffect.js
index 2680cae..bfb036f 100644
--- a/gnome-44-max/src/xrEffect.js
+++ b/gnome-44-max/src/xrEffect.js
@@ -1,13 +1,15 @@
-import Clutter from 'gi://Clutter';
-import Cogl from 'gi://Cogl';
-import GdkPixbuf from 'gi://GdkPixbuf';
-import GLib from 'gi://GLib';
-import GObject from 'gi://GObject';
-import Shell from 'gi://Shell';
-
-import Globals from './globals.js';
-
-import {
+const Clutter = imports.gi.Clutter;
+const Cogl = imports.gi.Cogl;
+const GdkPixbuf = imports.gi.GdkPixbuf;
+const GLib = imports.gi.GLib;
+const GObject = imports.gi.GObject;
+const Shell = imports.gi.Shell;
+
+const ExtensionUtils = imports.misc.extensionUtils;
+const Me = ExtensionUtils.getCurrentExtension();
+
+const Globals = Me.imports.globals;
+const {
dataViewEnd,
dataViewUint8,
dataViewBigUint,
@@ -21,12 +23,12 @@ import {
FLOAT_SIZE,
UINT_SIZE,
UINT8_SIZE
-} from "./ipc.js";
-import { degreeToRadian } from "./math.js";
-import { getShaderSource } from "./shader.js";
-import { isValidKeepAlive, toSec } from "./time.js";
+} = Me.imports.ipc;
+const { degreeToRadian } = Me.imports.math;
+const { getShaderSource } = Me.imports.shader;
+const { isValidKeepAlive, toSec } = Me.imports.time;
-export const IPC_FILE_PATH = "/dev/shm/breezy_desktop_imu";
+var IPC_FILE_PATH = "/dev/shm/breezy_desktop_imu";
// the driver should be using the same data layout version
const DATA_LAYOUT_VERSION = 3;
@@ -220,7 +222,7 @@ function checkParityByte(dataView) {
return parityByte === parity;
}
-export const XREffect = GObject.registerClass({
+var XREffect = GObject.registerClass({
Properties: {
'supported-device-detected': GObject.ParamSpec.boolean(
'supported-device-detected',
@@ -360,8 +362,13 @@ export const XREffect = GObject.registerClass({
if (!this._initialized) {
this.set_uniform_float(this.get_uniform_location('uDesktopTexture'), 1, [0]);
- this.get_pipeline().set_layer_texture(1, calibratingImage.get_texture());
- this.get_pipeline().set_layer_texture(2, customBannerImage.get_texture());
+ try {
+ // this can break in GNOME 42
+ this.get_pipeline().set_layer_texture(1, calibratingImage.get_texture());
+ this.get_pipeline().set_layer_texture(2, customBannerImage.get_texture());
+ } catch (e) {
+ Globals.logger.log(`ERROR: xrEffect.js vfunc_paint_target ${e.message}\n${e.stack}`);
+ }
this.get_pipeline().set_uniform_1i(this.get_uniform_location('uCalibratingTexture'), 1);
this.get_pipeline().set_uniform_1i(this.get_uniform_location('uCustomBannerTexture'), 2);

View File

@ -1 +0,0 @@
../../modules/sombrero/IMUAdjust.frag

1
gnome/src/Sombrero.frag Symbolic link
View File

@ -0,0 +1 @@
../../modules/sombrero/Sombrero.frag

View File

@ -54,8 +54,7 @@ const shaderUniformLocations = {
'imu_quat_data': null,
'look_ahead_cfg': null,
'look_ahead_ms': null,
'trim_width_percent': null,
'trim_height_percent': null,
'trim_percent': null,
'display_size': null,
'display_north_offset': null,
'lens_vector': null,
@ -143,9 +142,12 @@ function setIntermittentUniformVariables() {
const halfFovYRads = halfFovZRads * displayAspectRatio;
const fovHalfWidths = [Math.tan(halfFovYRads), Math.tan(halfFovZRads)];
const fovWidths = [fovHalfWidths[0] * 2, fovHalfWidths[1] * 2];
const lensDistanceRatio = dataViewFloat(dataView, LENS_DISTANCE_RATIO);
let lensFromCenter = 0.0;
let texcoordXLimits = [0.0, 1.0];
let texcoordXLimitsRight = [0.0, 1.0];
if (sbsEnabled) {
lensFromCenter = lensDistanceRatio / 3.0;
if (sbsContent) {
texcoordXLimits[1] = 0.5;
texcoordXLimitsRight[0] = 0.5;
@ -156,10 +158,10 @@ function setIntermittentUniformVariables() {
} else if (!sbsModeStretched) {
texcoordXLimits[0] = 0.25;
texcoordXLimits[1] = 0.75;
texcoordXLimitsRight[0] = 0.25;
texcoordXLimitsRight[1] = 0.75;
}
}
const lensDistanceRatio = dataViewFloat(dataView, LENS_DISTANCE_RATIO);
const lensFromCenter = lensDistanceRatio / 3.0;
const lensVector = [lensDistanceRatio, lensFromCenter, 0.0];
const lensVectorRight = [lensDistanceRatio, -lensFromCenter, 0.0];
@ -173,8 +175,7 @@ function setIntermittentUniformVariables() {
transferUniformFloat(this, 'lens_distance_ratio', dataView, LENS_DISTANCE_RATIO);
// computed values with no dataViewInfo, so we set these manually
setSingleFloat(this, 'trim_width_percent', trimWidthPercent);
setSingleFloat(this, 'trim_height_percent', trimHeightPercent);
this.set_uniform_float(shaderUniformLocations['trim_percent'], 2, [trimWidthPercent, trimHeightPercent]);
setSingleFloat(this, 'half_fov_z_rads', halfFovZRads);
setSingleFloat(this, 'half_fov_y_rads', halfFovYRads);
this.set_uniform_float(shaderUniformLocations['fov_half_widths'], 2, fovHalfWidths);
@ -193,7 +194,7 @@ function setIntermittentUniformVariables() {
if (enabled && this.widescreen_mode_state !== sbsEnabled) this.widescreen_mode_state = sbsEnabled;
// these variables are always in play, even if enabled is false
setSingleFloat(this, 'enabled', enabled ? 1.0 : 0.0);
setSingleFloat(this, 'virtual_display_enabled', enabled ? 1.0 : 0.0);
setSingleFloat(this, 'show_banner', imuResetState ? 1.0 : 0.0);
setSingleFloat(this, 'sbs_enabled', sbsEnabled ? 1.0 : 0.0);
setSingleFloat(this, 'custom_banner_enabled', dataViewUint8(dataView, CUSTOM_BANNER_ENABLED) !== 0 ? 1.0 : 0.0);
@ -347,8 +348,8 @@ var XREffect = GObject.registerClass({
}
vfunc_build_pipeline() {
const code = getShaderSource(`${Globals.extension_dir}/IMUAdjust.frag`);
const main = 'PS_IMU_Transform(vec4(0, 0, 0, 0), cogl_tex_coord_in[0].xy, cogl_color_out);';
const code = getShaderSource(`${Globals.extension_dir}/Sombrero.frag`);
const main = 'PS_Sombrero(true, false, source_to_display_ratio, show_banner, cogl_tex_coord_in[0].xy, cogl_color_out);';
this.add_glsl_snippet(Shell.SnippetHook.FRAGMENT, code, main, false);
}
@ -360,7 +361,7 @@ var XREffect = GObject.registerClass({
let buffer = new Uint8Array(data[1]).buffer;
this._dataView = new DataView(buffer);
if (!this._initialized) {
this.set_uniform_float(this.get_uniform_location('uDesktopTexture'), 1, [0]);
this.set_uniform_float(this.get_uniform_location('screenTexture'), 1, [0]);
try {
// this can break in GNOME 42
@ -369,8 +370,8 @@ var XREffect = GObject.registerClass({
} catch (e) {
Globals.logger.log(`ERROR: xrEffect.js vfunc_paint_target ${e.message}\n${e.stack}`);
}
this.get_pipeline().set_uniform_1i(this.get_uniform_location('uCalibratingTexture'), 1);
this.get_pipeline().set_uniform_1i(this.get_uniform_location('uCustomBannerTexture'), 2);
this.get_pipeline().set_uniform_1i(this.get_uniform_location('calibratingTexture'), 1);
this.get_pipeline().set_uniform_1i(this.get_uniform_location('customBannerTexture'), 2);
for (let key in shaderUniformLocations) {
shaderUniformLocations[key] = this.get_uniform_location(key);

@ -1 +1 @@
Subproject commit 2e07ebe241afc9582065f974e19f3d0d6dec5c0c
Subproject commit d7415dc00a29afb5db844fd5867de4f0cc09d85d

@ -1 +1 @@
Subproject commit ec3f82aa4834847adf1f0c640eba4b87b6f3ff65
Subproject commit 46b99881e066fdc8a90b36dd9f83cc9894ecffa0

View File

@ -1,5 +1,5 @@
project('breezydesktop',
version: '0.1.1',
version: '0.11.0',
meson_version: '>= 0.62.0',
default_options: [ 'warning_level=2', 'werror=false', ],
)

View File

@ -1 +1 @@
de es fr it ja pl sv zh_CN
de es fr it ja pl pt_BR ru sv uk_UA zh_CN

View File

@ -5,6 +5,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-15 15:19-0700\n"
@ -22,285 +23,296 @@ msgid ""
"Switches your glasses into side-by-side mode and doubles the width of the "
"display."
msgstr ""
"Basculez vos lunettes en mode Side-By-Side (Côte-à-Côte) et doublez la largeur de l'écran."
#: src/connecteddevice.py:17
msgid "This feature is not currently supported for your device."
msgstr ""
msgstr "Cette fonctionnalité n'est actuellement pas prise en charge par votre appareil."
#: src/licensedialog.py:49
msgid "Paid Tier Status"
msgstr ""
msgstr "Statut de l'abonnement payant"
#: src/licensedialog.py:57
msgid "Feature Availability"
msgstr ""
msgstr "Disponibilité des fonctionnalités"
#: src/licensefeaturerow.py:15 src/shortcutdialog.py:107
msgid "Disabled"
msgstr ""
msgstr "Désactivé"
#: src/licensefeaturerow.py:18
msgid "In trial"
msgstr ""
msgstr "En essai"
#: src/licensefeaturerow.py:18
msgid "Enabled"
msgstr ""
msgstr "Activé"
#: src/licensefeaturerow.py:24 src/licensetierrow.py:30
#, python-brace-format
msgid " ({time_remaining} remaining)"
msgstr ""
msgstr " ({time_remaining} restant)"
#: src/licensefeaturerow.py:32
msgid "Side-by-side mode (gaming)"
msgstr ""
msgstr "Mode SBS (jeu)"
#: src/licensefeaturerow.py:33
msgid "Smooth Follow (gaming)"
msgstr ""
msgstr "Suivi fluide (jeu)"
#: src/licensefeaturerow.py:34
msgid "Breezy Desktop (productivity)"
msgstr ""
msgstr "Breezy Desktop (productivité)"
#: src/licensetierrow.py:24
msgid "Active"
msgstr ""
msgstr "Actif"
#: src/licensetierrow.py:24
msgid "Inactive"
msgstr ""
msgstr "Inactif"
#: src/licensetierrow.py:41
#, python-brace-format
msgid "<b>${amount}</b> USD"
msgstr ""
msgstr "${amount} USD"
#: src/licensetierrow.py:43
msgid " to renew"
msgstr ""
msgstr " à renouveler"
#: src/licensetierrow.py:45
msgid " to upgrade"
msgstr ""
msgstr " à mettre à niveau"
#: src/licensetierrow.py:47
msgid "Paid through next renewal period"
msgstr ""
msgstr "Payé jusqu'à la prochaine période de renouvellement"
#: src/licensetierrow.py:56
msgid "Gaming"
msgstr ""
msgstr "Jeu"
#: src/licensetierrow.py:57
msgid "Productivity"
msgstr ""
msgstr "Productivité"
#: src/licensetierrow.py:63
msgid " - renewing monthly"
msgstr ""
msgstr " - renouvellement mensuel"
#: src/licensetierrow.py:64
msgid " - renewing yearly"
msgstr ""
msgstr " - renouvellement annuel"
#: src/licensetierrow.py:65
msgid "with lifetime access"
msgstr ""
msgstr "avec accès à vie"
#: src/licensetierrow.py:72
msgid "Monthly"
msgstr ""
msgstr "Mensuel"
#: src/licensetierrow.py:73
msgid "Yearly"
msgstr ""
msgstr "Annuel"
#: src/licensetierrow.py:74
msgid "Lifetime"
msgstr ""
msgstr "À vie"
#: src/time.py:14
msgid "less than an hour"
msgstr ""
msgstr "moins d'une heure"
#: src/time.py:17
msgid "1 hour"
msgstr ""
msgstr "1 heure"
#: src/time.py:17
#, python-brace-format
msgid "{time_remaining} hours"
msgstr ""
msgstr "{time_remaining} heures"
#: src/time.py:20
msgid "1 day"
msgstr ""
msgstr "1 jour"
#: src/time.py:20
#, python-brace-format
msgid "{time_remaining} days"
msgstr ""
msgstr "{time_remaining} jours"
#: src/gtk/connected-device.ui:21
msgid "connected"
msgstr ""
msgstr "connecté"
#: src/gtk/connected-device.ui:31
msgid "General Settings"
msgstr ""
msgstr "Paramètres généraux"
#: src/gtk/connected-device.ui:41
msgid "Features"
msgstr ""
msgstr "Fonctionnalités"
#: src/gtk/connected-device.ui:44
msgid "XR effect"
msgstr ""
msgstr "Effet XR"
#: src/gtk/connected-device.ui:45
msgid "Enables the Breezy Desktop XR effect."
msgstr ""
msgstr "Active l'effet Breezy Desktop XR."
#: src/gtk/connected-device.ui:55
msgid "Widescreen mode"
msgstr ""
msgstr "Mode grand écran"
#: src/gtk/connected-device.ui:66
msgid "Follow mode"
msgstr ""
msgstr "Mode de suivi"
#: src/gtk/connected-device.ui:67
msgid "Keep the virtual display near the center of your view."
msgstr ""
msgstr "Gardez l'affichage virtuel près du centre de votre champ de vision."
#: src/gtk/connected-device.ui:77
msgid "Curved display"
msgstr ""
msgstr "Affichage incurvé"
#: src/gtk/connected-device.ui:78
msgid "Switch between flat and curved displays."
msgstr ""
msgstr "Basculez entre les affichages plats et incurvés."
#: src/gtk/connected-device.ui:91
msgid "Adjustments"
msgstr ""
msgstr "Réglages"
#: src/gtk/connected-device.ui:94
msgid "Display distance"
msgstr ""
msgstr "Distance d'affichage"
#: src/gtk/connected-device.ui:95
msgid ""
"Closer appears larger, further appears smaller. Controls depth when in "
"widescreen mode."
msgstr ""
"Plus proche apparaît plus grand, plus éloigné apparaît plus petit. Contrôle la "
"profondeur lorsque vous êtes en mode grand écran."
#: src/gtk/connected-device.ui:123
msgid "Display size"
msgstr ""
msgstr "Taille de l'affichage"
#: src/gtk/connected-device.ui:124
msgid ""
"Combine with display distance to achieve a comfortable level of depth and "
"size."
msgstr ""
"Combinez avec la distance d'affichage pour obtenir un niveau de profondeur et "
"de taille confortable."
#: src/gtk/connected-device.ui:152
msgid "Display toggle distances"
msgstr ""
msgstr "Distances de basculement de l'affichage"
#: src/gtk/connected-device.ui:153
msgid ""
"Use the buttons to capture the current display distance for use with the "
"keyboard shortcut."
msgstr ""
"Utilisez les boutons pour capturer la distance d'affichage actuelle pour une "
"utilisation avec le raccourci clavier."
#: src/gtk/connected-device.ui:178
msgid "Follow threshold"
msgstr ""
msgstr "Seuil de suivi"
#: src/gtk/connected-device.ui:179
msgid "How far away you can look before the display follows."
msgstr ""
msgstr "Distance jusqu'où vous pouvez regarder avant que l'affichage ne suive."
#: src/gtk/connected-device.ui:209 src/gtk/connected-device.ui:215
msgid "Keyboard Shortcuts"
msgstr ""
msgstr "Raccourcis clavier"
#: src/gtk/connected-device.ui:218
msgid "Re-center display shortcut"
msgstr ""
msgstr "Raccourci de recentrage de l'affichage"
#: src/gtk/connected-device.ui:219
msgid "Pin the virtual display to the current position."
msgstr ""
msgstr "Fixez l'affichage virtuel à la position actuelle."
#: src/gtk/connected-device.ui:238 src/gtk/connected-device.ui:267
#: src/gtk/connected-device.ui:296
msgid "Change"
msgstr ""
msgstr "Changer"
#: src/gtk/connected-device.ui:247
msgid "Display distance shortcut"
msgstr ""
msgstr "Raccourci de distance d'affichage"
#: src/gtk/connected-device.ui:248
msgid "Quickly toggle between two predefined distances."
msgstr ""
msgstr "Basculez rapidement entre deux distances prédéfinies."
#: src/gtk/connected-device.ui:276
msgid "Toggle follow mode shortcut"
msgstr ""
msgstr "Raccourci de basculement du mode de suivi"
#: src/gtk/connected-device.ui:277
msgid "Quickly toggle follow mode."
msgstr ""
msgstr "Basculer rapidement le mode de suivi."
#: src/gtk/connected-device.ui:312 src/gtk/connected-device.ui:318
msgid "Advanced Settings"
msgstr ""
msgstr "Paramètres avancés"
#: src/gtk/connected-device.ui:321
msgid "Find optimal display config"
msgstr ""
msgstr "Trouver la configuration d'affichage optimale"
#: src/gtk/connected-device.ui:322
msgid ""
"Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in."
msgstr ""
"Modifiez automatiquement la configuration d'affichage des lunettes pour une "
"résolution maximale et une meilleure mise à l'échelle lorsque elles sont branchées."
#: src/gtk/connected-device.ui:332
msgid "Use highest refresh rate"
msgstr ""
msgstr "Utiliser le taux de rafraîchissement le plus élevé"
#: src/gtk/connected-device.ui:333
msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr ""
msgstr "Un taux de rafraîchissement élevé peut affecter les performances, désactivez-le pour le définir manuellement."
#: src/gtk/connected-device.ui:343
msgid "Always primary display"
msgstr ""
msgstr "Affichage principal en permanence"
#: src/gtk/connected-device.ui:344
msgid "Automatically set the glasses as the primary display when plugged in."
msgstr ""
msgstr "Définissez automatiquement les lunettes comme affichage principal lorsqu'elles sont branchées."
#: src/gtk/connected-device.ui:354
msgid "Fast SBS mode switching"
msgstr ""
msgstr "Bascule rapide vers le mode SBS"
#: src/gtk/connected-device.ui:355
msgid ""
"Switches glasses to SBS mode immediately when plugged in, if widescreen mode "
"is on. May cause instability."
msgstr ""
"Bascule les lunettes vers le mode SBS immédiatement lorsqu'elles sont branchées "
"si le mode grand écran est activé. Peut provoquer des instabilités."
#: src/gtk/connected-device.ui:365
msgid "Movement look-ahead"
msgstr ""
msgstr "Prédiction de mouvement"
#: src/gtk/connected-device.ui:366
msgid ""
@ -308,48 +320,54 @@ msgid ""
"time. Stick with default unless virtual display drags behind your head "
"movements, jumps ahead, or is very shaky."
msgstr ""
"Compense le lag d'entrée en prédisant la position de suivi de la tête avant "
"le temps de rendu. Restez sur la valeur par défaut à moins que l'affichage virtuel "
"ne soit lent, ne saute pas ou ne soit très instable."
#: src/gtk/connected-device.ui:384
msgid "Default"
msgstr ""
msgstr "Par défaut"
#: src/gtk/failed-verification.ui:13
msgid "Breezy Desktop GNOME invalid setup"
msgstr ""
msgstr "Configuration Breezy Desktop GNOME non valide"
#: src/gtk/failed-verification.ui:14
msgid ""
"Your Breezy GNOME setup is invalid or incomplete. Please re-run the setup "
"script. Report this issue if it persists."
msgstr ""
"Votre configuration Breezy GNOME est invalide ou incomplète. Veuillez "
"exécuter à nouveau le script de configuration. Signalez ce problème s'il "
"persiste."
#: src/gtk/license-dialog.ui:5 src/gtk/window.ui:55
msgid "License Details"
msgstr ""
msgstr "Détails de la licence"
#: src/gtk/license-dialog.ui:27
msgid "Donate"
msgstr ""
msgstr "Faire un don"
#: src/gtk/license-dialog.ui:44
msgid "Request a token"
msgstr ""
msgstr "Demander un jeton d'authentification"
#: src/gtk/license-dialog.ui:52
msgid "Verify token"
msgstr ""
msgstr "Vérifier le jeton d'authentification"
#: src/gtk/no-device.ui:13
msgid "No device connected"
msgstr ""
msgstr "Aucun appareil connecté"
#: src/gtk/no-device.ui:14
msgid "Breezy Desktop was unable to detect any supported XR devices."
msgstr ""
msgstr "Breezy Desktop n'a pas pu détecter d'appareils XR pris en charge."
#: src/gtk/no-driver.ui:13
msgid "No driver running"
msgstr ""
msgstr "Aucun pilote en cours d'exécution"
#: src/gtk/no-driver.ui:14
msgid ""
@ -362,20 +380,31 @@ msgid ""
"in the #troubleshooting channel on Discord.\n"
" "
msgstr ""
"\n"
" Si vous avez installé via AUR, assurez-vous d'avoir exécuté la "
"commande de post-installation recommandée:\n"
" systemctl --user enable --now xr-driver.service\n"
"\n"
" Sinon, veuillez signaler le problème sur GitHub, ou créer un nouveau "
"fil de discussion dans le canal #troubleshooting sur Discord.\n"
" "
#: src/gtk/no-extension.ui:13
msgid "Breezy Desktop GNOME extension not ready"
msgstr ""
msgstr "Extension Breezy Desktop GNOME non prête"
#: src/gtk/no-extension.ui:14
msgid ""
"If you have just run the setup, then you may need to log out and back in to "
"use it. Otherwise, please follow the Breezy GNOME setup instructions."
msgstr ""
"Si vous venez d'exécuter la configuration, vous devrez peut-être vous déconnecter "
"et vous reconnecter pour l'utiliser. Sinon, veuillez suivre les instructions "
"d'installation de Breezy GNOME."
#: src/gtk/no-license.ui:13
msgid "No license file was found"
msgstr ""
msgstr "Aucun fichier de licence trouvé"
#: src/gtk/no-license.ui:14
msgid ""
@ -392,43 +421,55 @@ msgid ""
"lifetime access).\n"
" "
msgstr ""
"\n"
" La première fois que vous utilisez Breezy Desktop, une connexion "
"Internet est requise pour récupérer la licence de votre appareil.\n"
" \n"
" Ne vous inquiétez pas, vous n'êtes pas obligé de faire un don à "
"ce stade. Si vous ne le faites pas, vous obtiendrez une licence d'essai pour "
"vous permettre de décider si Breezy Desktop répond à vos besoins.\n"
" \n"
" Une fois que vous avez obtenu une licence, d'essai ou autre, vous "
"pouvez utiliser Breezy Desktop hors ligne jusqu'à l'expiration des fonctionnalités "
"(ou indéfiniment, si vous avez choisi l'accès à vie).\n"
" "
#: src/gtk/no-license.ui:27
msgid "Try Again"
msgstr ""
msgstr "Réessayer"
#: src/gtk/shortcut-dialog.ui:5
msgid "Assign Keyboard Shortcut"
msgstr ""
msgstr "Attribuer un raccourci clavier"
#: src/gtk/shortcut-dialog.ui:20
msgid "Press your keyboard shortcut or 'Backspace' to disable..."
msgstr ""
msgstr "Appuyez sur votre raccourci clavier ou sur 'Backspace' pour désactiver..."
#: src/gtk/window.ui:10
msgid "Breezy Desktop"
msgstr ""
msgstr "Breezy Desktop"
#: src/gtk/window.ui:23
msgid "Menu"
msgstr ""
msgstr "Menu"
#: src/gtk/window.ui:35
msgid "Some features expire soon"
msgstr ""
msgstr "Certaines fonctionnalités expirent bientôt"
#: src/gtk/window.ui:36 src/gtk/window.ui:43
msgid "View details"
msgstr ""
msgstr "Afficher les détails"
#: src/gtk/window.ui:42
msgid "Productivity features are disabled"
msgstr ""
msgstr "Les fonctionnalités de productivité sont désactivées"
#: src/gtk/window.ui:59
msgid "Force Reset"
msgstr ""
msgstr "Réinitialiser"
#: src/gtk/window.ui:63
msgid "About BreezyDesktop"
msgstr ""
msgstr "À propos de BreezyDesktop"

View File

@ -5,7 +5,7 @@
#
# Breezy DesktopやXR、GNOMEのような固有名詞はそのままの表記にしています。
#「gaming」が「ゲーミング」なので「productivity」も「プロダクティビティ」とカナ表記にしました。
#「glasses」は「XR効果」から「XRメガネ」にしても良かったんですが、繰り返すのもくどいので「メガネ」にしてます。
#「glasses」は「XRエフェクト」から「XRメガネ」にしても良かったんですが、繰り返すのもくどいので「メガネ」にしてます。
#
msgid ""
msgstr ""
@ -25,15 +25,15 @@ msgstr ""
msgid ""
"Switches your glasses into side-by-side mode and doubles the width of the "
"display."
msgstr "ARグラスをサイドバイサイドモードに切り替え、表示の幅を2倍にします。"
msgstr "メガネを3Dモードに切り替え、表示の幅を2倍にします。"
#: src/connecteddevice.py:17
msgid "This feature is not currently supported for your device."
msgstr "この機能は現在、お使いのデバイスではサポートされていません。"
msgstr "この機能は現在接続されているデバイスではサポートされていません。"
#: src/licensedialog.py:49
msgid "Paid Tier Status"
msgstr "有料会員資格"
msgstr "有料ティアの状態"
#: src/licensedialog.py:57
msgid "Feature Availability"
@ -45,7 +45,7 @@ msgstr "無効"
#: src/licensefeaturerow.py:18
msgid "In trial"
msgstr "試用中"
msgstr "試用期間中"
#: src/licensefeaturerow.py:18
msgid "Enabled"
@ -79,15 +79,15 @@ msgstr "非アクティブ"
#: src/licensetierrow.py:41
#, python-brace-format
msgid "<b>${amount}</b> USD"
msgstr "<b>${amount}</b>ドル"
msgstr "<b>あと${amount}</b> (USD)"
#: src/licensetierrow.py:43
msgid " to renew"
msgstr "を更新"
msgstr "で更新可能"
#: src/licensetierrow.py:45
msgid " to upgrade"
msgstr "にアップグレード"
msgstr "でアップグレード可能"
#: src/licensetierrow.py:47
msgid "Paid through next renewal period"
@ -103,27 +103,27 @@ msgstr "プロダクティビティ"
#: src/licensetierrow.py:63
msgid " - renewing monthly"
msgstr " - 毎月更新"
msgstr " - 月払い"
#: src/licensetierrow.py:64
msgid " - renewing yearly"
msgstr " - 毎年更新"
msgstr " - 年払い"
#: src/licensetierrow.py:65
msgid "with lifetime access"
msgstr "生涯アクセス権付き"
msgstr "一括払い済み"
#: src/licensetierrow.py:72
msgid "Monthly"
msgstr "月"
msgstr "月払い"
#: src/licensetierrow.py:73
msgid "Yearly"
msgstr "年"
msgstr "年払い"
#: src/licensetierrow.py:74
msgid "Lifetime"
msgstr "生涯"
msgstr "一括払い"
#: src/time.py:14
msgid "less than an hour"
@ -161,11 +161,11 @@ msgstr "機能"
#: src/gtk/connected-device.ui:44
msgid "XR effect"
msgstr "XR効果"
msgstr "XRエフェクト"
#: src/gtk/connected-device.ui:45
msgid "Enables the Breezy Desktop XR effect."
msgstr "Breezy DesktopのXR効果を有効にします。"
msgstr "Breezy DesktopのXRエフェクトを有効にします。"
#: src/gtk/connected-device.ui:55
msgid "Widescreen mode"
@ -193,14 +193,15 @@ msgstr "調整"
#: src/gtk/connected-device.ui:94
msgid "Display distance"
msgstr "ディスプレイとの距離"
msgstr "ディスプレイ距離"
#: src/gtk/connected-device.ui:95
msgid ""
"Closer appears larger, further appears smaller. Controls depth when in "
"widescreen mode."
msgstr ""
"近づけると大きく見え、遠ざけると小さく見えます。ワイドスクリーンモードの奥行きを制御します。"
"近づけると大きく見え、遠ざけると小さく見えます。\n"
"ワイドスクリーンモードの奥行きを制御します。"
#: src/gtk/connected-device.ui:123
msgid "Display size"
@ -211,11 +212,11 @@ msgid ""
"Combine with display distance to achieve a comfortable level of depth and "
"size."
msgstr ""
"ディスプレイ距離と組み合わせて、奥行きとサイズの快適なレベルを達成します。"
"ディスプレイ距離と組み合わせて、\n快適な奥行きとサイズを実現します。"
#: src/gtk/connected-device.ui:152
msgid "Display toggle distances"
msgstr "ディスプレイ距離切り替え"
msgstr "ディスプレイ距離切り替え"
#: src/gtk/connected-device.ui:153
msgid ""
@ -230,7 +231,7 @@ msgstr "フォローしきい値"
#: src/gtk/connected-device.ui:179
msgid "How far away you can look before the display follows."
msgstr "どれだけ遠ざかるとディスプレイがフォロー(追従)するか"
msgstr "ディスプレイがフォロー(追従)を開始するまでの距離"
#: src/gtk/connected-device.ui:209 src/gtk/connected-device.ui:215
msgid "Keyboard Shortcuts"
@ -238,7 +239,7 @@ msgstr "キーボードショートカット"
#: src/gtk/connected-device.ui:218
msgid "Re-center display shortcut"
msgstr "中心へ移動するショートカット"
msgstr "ディスプレイを中央へ移動"
#: src/gtk/connected-device.ui:219
msgid "Pin the virtual display to the current position."
@ -251,7 +252,7 @@ msgstr "変更"
#: src/gtk/connected-device.ui:247
msgid "Display distance shortcut"
msgstr "ディスプレイ距離ショートカット"
msgstr "ディスプレイ距離の切り替え"
#: src/gtk/connected-device.ui:248
msgid "Quickly toggle between two predefined distances."
@ -259,11 +260,11 @@ msgstr "設定してある2個の距離をすばやく切り替えます。"
#: src/gtk/connected-device.ui:276
msgid "Toggle follow mode shortcut"
msgstr "フォローモードに切り替えるショートカット"
msgstr "フォローモードの切り替え"
#: src/gtk/connected-device.ui:277
msgid "Quickly toggle follow mode."
msgstr "フォローモードすばやく切り替えます。"
msgstr "フォローモードのオン/オフをすばやく切り替えます。"
#: src/gtk/connected-device.ui:312 src/gtk/connected-device.ui:318
msgid "Advanced Settings"
@ -336,7 +337,7 @@ msgstr ""
#: src/gtk/license-dialog.ui:5 src/gtk/window.ui:55
msgid "License Details"
msgstr "ライセンス詳細"
msgstr "ライセンス詳細"
#: src/gtk/license-dialog.ui:27
msgid "Donate"
@ -411,11 +412,11 @@ msgid ""
" "
msgstr ""
"\n"
" Breezy Desktopを初めて使用する際は、デバイスライセンスを取得するためにインターネット接続が必要です。\n"
" Breezy Desktopを初めて使用する際は、デバイスライセンスを取得するためにインターネット接続が必要です。\n"
" \n"
" 寄付する義務はありません。まだであれば、Breezy Desktopがニーズに合っているかどうかを判断できるトライアルライセンスが提供されます。\n"
" ご安心ください。今すぐに寄付する必要はありません。寄付していない場合は、Breezy Desktopがニーズに合っているかどうかを判断できる試用ライセンスが提供されます。\n"
" \n"
" ライセンスを取得したら、トライアルであろうと、Breezy Desktopをオフラインで使用できます。機能が期限切れるまでまたは生涯アクセスを選択した場合、無期限に使用できます。\n"
" ライセンスを取得したら、試用期間中であろうと期限切れるまではBreezy Desktopをオフラインで使用できます。(生涯アクセスを選択した場合は期限はありません。)\n"
" "
#: src/gtk/no-license.ui:27

477
ui/po/pt_BR.po Normal file
View File

@ -0,0 +1,477 @@
# Portuguese translations for PACKAGE package.
# Copyright (C) 2024 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# <wayne@xronlinux.com>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-19 09:50-0700\n"
"PO-Revision-Date: 2024-08-19 09:39-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
"net>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/connecteddevice.py:16
msgid ""
"Switches your glasses into side-by-side mode and doubles the width of the "
"display."
msgstr ""
"Altera o modo dos óculos para lado a lado (SBS) e dobra a largura da tela (ultrawide)."
#: src/connecteddevice.py:17
msgid "This feature is not currently supported for your device."
msgstr "Este recurso não é atualmente suportado para o seu dispositivo."
#: src/licensedialog.py:49
msgid "Paid Tier Status"
msgstr "Status do Nível Pago"
#: src/licensedialog.py:57
msgid "Feature Availability"
msgstr "Disponibilidade de Recursos"
#: src/licensefeaturerow.py:15 src/shortcutdialog.py:107
msgid "Disabled"
msgstr "Desabilitado"
#: src/licensefeaturerow.py:18
msgid "In trial"
msgstr "Em teste"
#: src/licensefeaturerow.py:18
msgid "Enabled"
msgstr "Habilitado"
#: src/licensefeaturerow.py:24 src/licensetierrow.py:30
#, python-brace-format
msgid " ({time_remaining} remaining)"
msgstr " ({time_remaining} restantes)"
#: src/licensefeaturerow.py:32
msgid "Side-by-side mode (gaming)"
msgstr "Modo lado a lado (Jogos)"
#: src/licensefeaturerow.py:33
msgid "Smooth Follow (gaming)"
msgstr "Acompanhar Suavemente (Jogos)"
#: src/licensefeaturerow.py:34
msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (produtividade)"
#: src/licensetierrow.py:24
msgid "Active"
msgstr "Ativo"
#: src/licensetierrow.py:24
msgid "Inactive"
msgstr "Inativo"
#: src/licensetierrow.py:41
#, fuzzy, python-brace-format
msgid "<b>${amount}</b> USD"
msgstr "${amount} USD"
#: src/licensetierrow.py:43
msgid " to renew"
msgstr " para renovar"
#: src/licensetierrow.py:45
msgid " to upgrade"
msgstr " para atualizar"
#: src/licensetierrow.py:47
msgid "Paid through next renewal period"
msgstr "Pago até o próximo período de renovação"
#: src/licensetierrow.py:56
msgid "Gaming"
msgstr "Jogos"
#: src/licensetierrow.py:57
msgid "Productivity"
msgstr "Produtividade"
#: src/licensetierrow.py:63
msgid " - renewing monthly"
msgstr " - renovando mensalmente"
#: src/licensetierrow.py:64
msgid " - renewing yearly"
msgstr " - renovando anualmente"
#: src/licensetierrow.py:65
msgid "with lifetime access"
msgstr "com acesso vitalício"
#: src/licensetierrow.py:72
msgid "Monthly"
msgstr "Mensal"
#: src/licensetierrow.py:73
msgid "Yearly"
msgstr "Anual"
#: src/licensetierrow.py:74
msgid "Lifetime"
msgstr "Vitalício"
#: src/time.py:14
msgid "less than an hour"
msgstr "menos de uma hora"
#: src/time.py:17
msgid "1 hour"
msgstr "1 hora"
#: src/time.py:17
#, python-brace-format
msgid "{time_remaining} hours"
msgstr "{time_remaining} horas"
#: src/time.py:20
msgid "1 day"
msgstr "1 dia"
#: src/time.py:20
#, python-brace-format
msgid "{time_remaining} days"
msgstr "{time_remaining} dias"
#: src/gtk/connected-device.ui:21
msgid "connected"
msgstr "conectado"
#: src/gtk/connected-device.ui:31
msgid "General Settings"
msgstr "Configurações Gerais"
#: src/gtk/connected-device.ui:41
msgid "Features"
msgstr "Recursos"
#: src/gtk/connected-device.ui:44
msgid "XR effect"
msgstr "Efeito XR"
#: src/gtk/connected-device.ui:45
msgid "Enables the Breezy Desktop XR effect."
msgstr "Habilita o efeito XR do Breezy Desktop."
#: src/gtk/connected-device.ui:55
msgid "Widescreen mode"
msgstr "Modo Ultrawide"
#: src/gtk/connected-device.ui:66
msgid "Follow mode"
msgstr "Modo de acompanhamento"
#: src/gtk/connected-device.ui:67
msgid "Keep the virtual display near the center of your view."
msgstr "Mantenha a tela virtual próxima ao centro da sua visão."
#: src/gtk/connected-device.ui:77
msgid "Curved display"
msgstr "Tela curva"
#: src/gtk/connected-device.ui:78
msgid "Switch between flat and curved displays."
msgstr "Alterne entre tela plana e tela curva."
#: src/gtk/connected-device.ui:91
msgid "Adjustments"
msgstr "Ajustes"
#: src/gtk/connected-device.ui:94
msgid "Display distance"
msgstr "Distância da tela"
#: src/gtk/connected-device.ui:95
msgid ""
"Closer appears larger, further appears smaller. Controls depth when in "
"widescreen mode."
msgstr ""
"Mais perto parece maior, mais longe parece menor. Controla a profundidade "
"no modo ultrawide."
#: src/gtk/connected-device.ui:123
msgid "Display size"
msgstr "Tamanho da tela"
#: src/gtk/connected-device.ui:124
msgid ""
"Combine with display distance to achieve a comfortable level of depth and "
"size."
msgstr ""
"Combine com a distância da tela para alcançar um nível confortável de "
"profundidade e tamanho."
#: src/gtk/connected-device.ui:152
msgid "Display toggle distances"
msgstr "Alternância das distâncias de tela"
#: src/gtk/connected-device.ui:153
msgid ""
"Use the buttons to capture the current display distance for use with the "
"keyboard shortcut."
msgstr ""
"Use os botões para obter a distância atual da tela para depois usar com o "
"atalho de teclado."
#: src/gtk/connected-device.ui:178
msgid "Follow threshold"
msgstr "Sensibilidade do modo de acompanhamento"
#: src/gtk/connected-device.ui:179
msgid "How far away you can look before the display follows."
msgstr "Quanto você pode mover a cabeça antes que a tela te acompanhe."
#: src/gtk/connected-device.ui:209 src/gtk/connected-device.ui:215
msgid "Keyboard Shortcuts"
msgstr "Atalhos de teclado"
#: src/gtk/connected-device.ui:218
msgid "Re-center display shortcut"
msgstr "Atalho para recentralizar a tela"
#: src/gtk/connected-device.ui:219
msgid "Pin the virtual display to the current position."
msgstr "Traga a tela virtual para onde você está olhando."
#: src/gtk/connected-device.ui:238 src/gtk/connected-device.ui:267
#: src/gtk/connected-device.ui:296
msgid "Change"
msgstr "Alterar"
#: src/gtk/connected-device.ui:247
msgid "Display distance shortcut"
msgstr "Atalho de distância da tela"
#: src/gtk/connected-device.ui:248
msgid "Quickly toggle between two predefined distances."
msgstr "Alterne rapidamente entre as duas distâncias predefinidas."
#: src/gtk/connected-device.ui:276
msgid "Toggle follow mode shortcut"
msgstr "Atalho para alternar o modo de acompanhamento"
#: src/gtk/connected-device.ui:277
msgid "Quickly toggle follow mode."
msgstr "Alterne rapidamente o modo de acompanhamento."
#: src/gtk/connected-device.ui:312 src/gtk/connected-device.ui:318
msgid "Advanced Settings"
msgstr "Configurações Avançadas"
#: src/gtk/connected-device.ui:321
msgid "Find optimal display config"
msgstr "Encontre a configuração de tela ideal"
#: src/gtk/connected-device.ui:322
msgid ""
"Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in."
msgstr ""
"Modifique automaticamente a configuração de exibição dos óculos para máxima "
"resolução e melhor dimensionamento quando conectado."
#: src/gtk/connected-device.ui:332
msgid "Use highest refresh rate"
msgstr "Use a taxa de atualização mais alta"
#: src/gtk/connected-device.ui:333
msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr ""
"A taxa de atualização pode afetar o desempenho, desative-a para defini-la "
"manualmente."
#: src/gtk/connected-device.ui:343
msgid "Always primary display"
msgstr "Sempre tela principal"
#: src/gtk/connected-device.ui:344
msgid "Automatically set the glasses as the primary display when plugged in."
msgstr ""
"Defina automaticamente os óculos como a tela primária quando conectados."
#: src/gtk/connected-device.ui:354
msgid "Fast SBS mode switching"
msgstr "Alternância rápida do modo SBS"
#: src/gtk/connected-device.ui:355
msgid ""
"Switches glasses to SBS mode immediately when plugged in, if widescreen mode "
"is on. May cause instability."
msgstr ""
"Altera os óculos para o modo SBS imediatamente quando conectados, se o modo "
"ultrawide estiver ativado. Pode causar instabilidade."
#: src/gtk/connected-device.ui:365
msgid "Movement look-ahead"
msgstr "Antecipação de movimento"
#: src/gtk/connected-device.ui:366
msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head "
"movements, jumps ahead, or is very shaky."
msgstr ""
"Compensa o atraso de entrada prevendo a posição de rastreamento de cabeça "
"antes do tempo de renderização. Mantenha o padrão, a menos que a exibição "
"virtual tenha atrasos, avance ou seja muito instável em relação aos movimentos da cabeça "
#: src/gtk/connected-device.ui:384
msgid "Default"
msgstr "Padrão"
#: src/gtk/failed-verification.ui:13
msgid "Breezy Desktop GNOME invalid setup"
msgstr "Configuração inválida do Breezy Desktop GNOME"
#: src/gtk/failed-verification.ui:14
msgid ""
"Your Breezy GNOME setup is invalid or incomplete. Please re-run the setup "
"script. Report this issue if it persists."
msgstr ""
"Sua configuração do Breezy GNOME é inválida ou incompleta. Por favor, "
"execute novamente o script de configuração. Relate este problema se "
"persistir."
#: src/gtk/license-dialog.ui:5 src/gtk/window.ui:55
msgid "License Details"
msgstr "Detalhes da Licença"
#: src/gtk/license-dialog.ui:27
msgid "Donate"
msgstr "Doar"
#: src/gtk/license-dialog.ui:44
msgid "Request a token"
msgstr "Solicitar um token"
#: src/gtk/license-dialog.ui:52
msgid "Verify token"
msgstr "Verificar token"
#: src/gtk/no-device.ui:13
msgid "No device connected"
msgstr "Nenhum dispositivo conectado"
#: src/gtk/no-device.ui:14
msgid "Breezy Desktop was unable to detect any supported XR devices."
msgstr ""
"O Breezy Desktop não conseguiu detectar nenhum dispositivo XR suportado."
#: src/gtk/no-driver.ui:13
msgid "No driver running"
msgstr "Nenhum driver em execução"
#: src/gtk/no-driver.ui:14
#, fuzzy
msgid ""
"\n"
" If you installed via AUR, make sure you ran the recommended post-"
"install command:\n"
" systemctl --user enable --now xr-driver.service\n"
"\n"
" Otherwise, please file an issue on GitHub, or create a new thread "
"in the #troubleshooting channel on Discord.\n"
" "
msgstr ""
" Se você instalou via AUR, certifique-se de ter executado o comando de pós-"
"instalação recomendado:\n"
" systemctl --user enable --now xr-driver.service\n"
"\n"
" Caso contrário, por favor, crie uma issue no GitHub ou um novo tópico no "
"canal #troubleshooting no Discord."
#: src/gtk/no-extension.ui:13
msgid "Breezy Desktop GNOME extension not ready"
msgstr "Extensão do Breezy Desktop GNOME não está pronta"
#: src/gtk/no-extension.ui:14
msgid ""
"If you have just run the setup, then you may need to log out and back in to "
"use it. Otherwise, please follow the Breezy GNOME setup instructions."
msgstr ""
"Se você acabou de executar a configuração, pode ser necessário fazer logout e "
"login novamente para usá-la. Caso contrário, siga as instruções de "
"configuração do Breezy GNOME."
#: src/gtk/no-license.ui:13
msgid "No license file was found"
msgstr "Nenhum arquivo de licença foi encontrado"
#: src/gtk/no-license.ui:14
#, fuzzy
msgid ""
"\n"
" The first time you use Breezy Desktop, an internet connection is "
"required to retrieve your device's license.\n"
" \n"
" Don't worry, there's no obligation to donate at this time. If you "
"haven't, you'll be given a trial license so you can decide if Breezy Desktop "
"fits your needs. \n"
" \n"
" Once you obtain a license, trial or otherwise, you can use Breezy "
"Desktop offline until features expire (or indefinitely, if you've chosen "
"lifetime access).\n"
" "
msgstr ""
" A primeira vez que você usar o Breezy Desktop, uma conexão com a internet "
"será necessária para obter a licença do seu dispositivo.\n"
" \n"
" Não se preocupe, não há nenhuma obrigação de doar neste momento. Se você "
"ainda não o fez, será fornecida uma licença de teste para que você possa "
"decidir se o Breezy Desktop atende às suas necessidades.\n"
" \n"
" Uma vez que você obtenha uma licença, de teste ou não, você poderá usar o "
"Breezy Desktop offline até que os recursos expirem (ou indefinidamente, se "
"você escolheu o acesso vitalício)."
#: src/gtk/no-license.ui:27
msgid "Try Again"
msgstr "Tentar Novamente"
#: src/gtk/shortcut-dialog.ui:5
msgid "Assign Keyboard Shortcut"
msgstr "Atribuir Atalho de Teclado"
#: src/gtk/shortcut-dialog.ui:20
msgid "Press your keyboard shortcut or 'Backspace' to disable..."
msgstr "Pressione seu atalho de teclado ou 'Backspace' para desativar..."
#: src/gtk/window.ui:10
msgid "Breezy Desktop"
msgstr "Breezy Desktop"
#: src/gtk/window.ui:23
msgid "Menu"
msgstr "Menu"
#: src/gtk/window.ui:35
msgid "Some features expire soon"
msgstr "Algumas funcionalidades expirarão em breve"
#: src/gtk/window.ui:36 src/gtk/window.ui:43
msgid "View details"
msgstr "Ver detalhes"
#: src/gtk/window.ui:42
msgid "Productivity features are disabled"
msgstr "As funcionalidades de produtividade estão desabilitadas"
#: src/gtk/window.ui:59
msgid "Force Reset"
msgstr "Forçar redefinição"
#: src/gtk/window.ui:63
msgid "About BreezyDesktop"
msgstr "Sobre o BreezyDesktop"

Binary file not shown.

482
ui/po/ru.po Normal file
View File

@ -0,0 +1,482 @@
# Russian translations for PACKAGE package.
# Copyright (C) 2024 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# <wayne@xronlinux.com>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-17 09:44-0700\n"
"PO-Revision-Date: 2024-08-17 09:39-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Russian <gnu@d07.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: src/connecteddevice.py:16
msgid ""
"Switches your glasses into side-by-side mode and doubles the width of the "
"display."
msgstr ""
"Переключает очки в режим «сторона к стороне» и удваивает ширину дисплея."
#: src/connecteddevice.py:17
msgid "This feature is not currently supported for your device."
msgstr "Эта функция в настоящее время не поддерживается для вашего устройства."
#: src/licensedialog.py:49
msgid "Paid Tier Status"
msgstr "Статус платного уровня"
#: src/licensedialog.py:57
msgid "Feature Availability"
msgstr "Статус функций"
#: src/licensefeaturerow.py:15 src/shortcutdialog.py:107
msgid "Disabled"
msgstr "Отключено"
#: src/licensefeaturerow.py:18
msgid "In trial"
msgstr "На пробном периоде"
#: src/licensefeaturerow.py:18
msgid "Enabled"
msgstr "Включено"
#: src/licensefeaturerow.py:24 src/licensetierrow.py:30
#, python-brace-format
msgid " ({time_remaining} remaining)"
msgstr " ({time_remaining} осталось)"
#: src/licensefeaturerow.py:32
msgid "Side-by-side mode (gaming)"
msgstr "Режим «бок о бок» (игровой режим)"
#: src/licensefeaturerow.py:33
msgid "Smooth Follow (gaming)"
msgstr "Плавное следование (игровой режим)"
#: src/licensefeaturerow.py:34
msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (продуктивный режим)"
#: src/licensetierrow.py:24
msgid "Active"
msgstr "Активный"
#: src/licensetierrow.py:24
msgid "Inactive"
msgstr "Неактивный"
#: src/licensetierrow.py:41
#, python-brace-format
msgid "<b>${amount}</b> USD"
msgstr "<b>${amount}</b> USD"
#: src/licensetierrow.py:43
msgid " to renew"
msgstr " для обновления"
#: src/licensetierrow.py:45
msgid " to upgrade"
msgstr " для апгрейда"
#: src/licensetierrow.py:47
msgid "Paid through next renewal period"
msgstr "Оплачено до следующего периода"
#: src/licensetierrow.py:56
msgid "Gaming"
msgstr "Игровой режим"
#: src/licensetierrow.py:57
msgid "Productivity"
msgstr "Продуктивный режим"
#: src/licensetierrow.py:63
msgid " - renewing monthly"
msgstr " - ежемесячное обновление"
#: src/licensetierrow.py:64
msgid " - renewing yearly"
msgstr " - ежегодное обновление"
#: src/licensetierrow.py:65
msgid "with lifetime access"
msgstr "с пожизненным доступом"
#: src/licensetierrow.py:72
msgid "Monthly"
msgstr "Ежемесячно"
#: src/licensetierrow.py:73
msgid "Yearly"
msgstr "Ежегодно"
#: src/licensetierrow.py:74
msgid "Lifetime"
msgstr "Пожизненно"
#: src/time.py:14
msgid "less than an hour"
msgstr "менее часа"
#: src/time.py:17
msgid "1 hour"
msgstr "1 час"
#: src/time.py:17
#, python-brace-format
msgid "{time_remaining} hours"
msgstr "{time_remaining} часов"
#: src/time.py:20
msgid "1 day"
msgstr "1 день"
#: src/time.py:20
#, python-brace-format
msgid "{time_remaining} days"
msgstr "{time_remaining} дней"
#: src/gtk/connected-device.ui:21
msgid "connected"
msgstr "подключено"
#: src/gtk/connected-device.ui:31
msgid "General Settings"
msgstr "Общие настройки"
#: src/gtk/connected-device.ui:41
msgid "Features"
msgstr "Функции"
#: src/gtk/connected-device.ui:44
msgid "XR effect"
msgstr "Эффект XR"
#: src/gtk/connected-device.ui:45
msgid "Enables the Breezy Desktop XR effect."
msgstr "Включает эффект Breezy Desktop XR."
#: src/gtk/connected-device.ui:55
msgid "Widescreen mode"
msgstr "Режим широкого экрана"
#: src/gtk/connected-device.ui:66
msgid "Follow mode"
msgstr "Режим следования"
#: src/gtk/connected-device.ui:67
msgid "Keep the virtual display near the center of your view."
msgstr "Поддерживает виртуальный дисплей вблизи центра вашего зрения."
#: src/gtk/connected-device.ui:77
msgid "Curved display"
msgstr "Изогнутый дисплей"
#: src/gtk/connected-device.ui:78
msgid "Switch between flat and curved displays."
msgstr "Переключается между плоскими и изогнутыми дисплеями."
#: src/gtk/connected-device.ui:91
msgid "Adjustments"
msgstr "Настройки"
#: src/gtk/connected-device.ui:94
msgid "Display distance"
msgstr "Расстояние дисплея"
#: src/gtk/connected-device.ui:95
msgid ""
"Closer appears larger, further appears smaller. Controls depth when in "
"widescreen mode."
msgstr ""
"Чем ближе, тем больше. Чем дальше, тем меньше. Управляет глубиной при "
"использовании режима широкого экрана."
#: src/gtk/connected-device.ui:123
msgid "Display size"
msgstr "Размер дисплея"
#: src/gtk/connected-device.ui:124
msgid ""
"Combine with display distance to achieve a comfortable level of depth and "
"size."
msgstr ""
"Комбинируйте с расстоянием дисплея, чтобы достичь комфортного уровня глубины "
"и размера."
#: src/gtk/connected-device.ui:152
msgid "Display toggle distances"
msgstr "Переключения расстояние дисплея"
#: src/gtk/connected-device.ui:153
msgid ""
"Use the buttons to capture the current display distance for use with the "
"keyboard shortcut."
msgstr ""
"Используйте кнопки, чтобы зафиксировать текущее расстояние дисплея для "
"использования с сочетанием клавиш."
#: src/gtk/connected-device.ui:178
msgid "Follow threshold"
msgstr "Порог следования"
#: src/gtk/connected-device.ui:179
msgid "How far away you can look before the display follows."
msgstr ""
"Как далеко вы можете отвернуть взгляд, прежде чем дисплей последует за "
"вами."
#: src/gtk/connected-device.ui:209 src/gtk/connected-device.ui:215
msgid "Keyboard Shortcuts"
msgstr "Сочетания клавиш"
#: src/gtk/connected-device.ui:218
msgid "Re-center display shortcut"
msgstr "Сочетание клавиш для перецентровки дисплея"
#: src/gtk/connected-device.ui:219
msgid "Pin the virtual display to the current position."
msgstr "Фиксировать виртуальный дисплей в текущем положении."
#: src/gtk/connected-device.ui:238 src/gtk/connected-device.ui:267
#: src/gtk/connected-device.ui:296
msgid "Change"
msgstr "Изменить"
#: src/gtk/connected-device.ui:247
msgid "Display distance shortcut"
msgstr "Сочетание клавиш для расстояния дисплея"
#: src/gtk/connected-device.ui:248
msgid "Quickly toggle between two predefined distances."
msgstr "Быстро переключаться между двумя предопределенными расстояниями."
#: src/gtk/connected-device.ui:276
msgid "Toggle follow mode shortcut"
msgstr "Сочетание клавиш для переключения режима следования"
#: src/gtk/connected-device.ui:277
msgid "Quickly toggle follow mode."
msgstr "Быстро переключать режим следования."
#: src/gtk/connected-device.ui:312 src/gtk/connected-device.ui:318
msgid "Advanced Settings"
msgstr "Дополнительные настройки"
#: src/gtk/connected-device.ui:321
msgid "Find optimal display config"
msgstr "Найти оптимальную конфигурацию дисплея"
#: src/gtk/connected-device.ui:322
msgid ""
"Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in."
msgstr ""
"Автоматически изменять конфигурацию дисплея очков для максимального "
"разрешения и лучшей масштабирования при подключении."
#: src/gtk/connected-device.ui:332
msgid "Use highest refresh rate"
msgstr "Использовать высшую частоту обновления"
#: src/gtk/connected-device.ui:333
msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr ""
"Частота обновления может повлиять на производительность, отключите это, "
"чтобы установить ее вручную."
#: src/gtk/connected-device.ui:343
msgid "Always primary display"
msgstr "Всегда основной дисплей"
#: src/gtk/connected-device.ui:344
msgid "Automatically set the glasses as the primary display when plugged in."
msgstr ""
"Автоматически устанавливать очки в качестве основного дисплея при "
"подключении."
#: src/gtk/connected-device.ui:354
msgid "Fast SBS mode switching"
msgstr "Быстрое переключение режима SBS"
#: src/gtk/connected-device.ui:355
msgid ""
"Switches glasses to SBS mode immediately when plugged in, if widescreen mode "
"is on. May cause instability."
msgstr ""
"Переключает очки в режим SBS сразу при подключении, если режим широкого "
"экрана включен. Может вызвать нестабильность."
#: src/gtk/connected-device.ui:365
msgid "Movement look-ahead"
msgstr "Прогнозирование движения"
#: src/gtk/connected-device.ui:366
msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head "
"movements, jumps ahead, or is very shaky."
msgstr ""
"Компенсирует задержку ввода, прогнозируя положение отслеживания головы до "
"времени рендеринга. Оставайтесь на уровне по умолчанию, если только "
"виртуальный дисплей не отстает от движений вашей головы, не опережает или не "
"очень трясётся."
#: src/gtk/connected-device.ui:384
msgid "Default"
msgstr "По умолчанию"
#: src/gtk/failed-verification.ui:13
msgid "Breezy Desktop GNOME invalid setup"
msgstr "Недействительная настройка Breezy Desktop GNOME"
#: src/gtk/failed-verification.ui:14
msgid ""
"Your Breezy GNOME setup is invalid or incomplete. Please re-run the setup "
"script. Report this issue if it persists."
msgstr ""
"Ваша настройка Breezy GNOME недействительна или неполна. Пожалуйста, "
"перезапустите скрипт настройки. Сообщите об этой проблеме, если она "
"сохраняется."
#: src/gtk/license-dialog.ui:5 src/gtk/window.ui:55
msgid "License Details"
msgstr "Подробности лицензии"
#: src/gtk/license-dialog.ui:27
msgid "Donate"
msgstr "Донатить"
#: src/gtk/license-dialog.ui:44
msgid "Request a token"
msgstr "Запросить токен"
#: src/gtk/license-dialog.ui:52
msgid "Verify token"
msgstr "Проверить токен"
#: src/gtk/no-device.ui:13
msgid "No device connected"
msgstr "Устройство не подключено"
#: src/gtk/no-device.ui:14
msgid "Breezy Desktop was unable to detect any supported XR devices."
msgstr "Breezy Desktop не смог обнаружить никаких поддерживаемых устройств XR."
#: src/gtk/no-driver.ui:13
msgid "No driver running"
msgstr "Драйвер не запущен"
#: src/gtk/no-driver.ui:14
msgid ""
"\n"
" If you installed via AUR, make sure you ran the recommended post-"
"install command:\n"
" systemctl --user enable --now xr-driver.service\n"
"\n"
" Otherwise, please file an issue on GitHub, or create a new thread "
"in the #troubleshooting channel on Discord.\n"
" "
msgstr ""
"\n"
" Если вы установили через AUR, убедитесь, что вы запустили "
"рекомендуемую команду пост-установки:\n"
" systemctl --user enable --now xr-driver.service\n"
"\n"
" В противном случае, пожалуйста, создайте запрос на GitHub или "
"новый тред в канале #troubleshooting на Discord.\n"
" "
#: src/gtk/no-extension.ui:13
msgid "Breezy Desktop GNOME extension not ready"
msgstr "Расширение Breezy Desktop GNOME не готово"
#: src/gtk/no-extension.ui:14
msgid ""
"If you have just run the setup, then you may need to log out and back in to "
"use it. Otherwise, please follow the Breezy GNOME setup instructions."
msgstr ""
"Если вы только что запустили настройку, вам может потребоваться выйти и "
"снова войти, чтобы использовать её. В противном случае, пожалуйста, следуйте "
"инструкциям по настройке Breezy GNOME."
#: src/gtk/no-license.ui:13
msgid "No license file was found"
msgstr "Файл лицензии не найден"
#: src/gtk/no-license.ui:14
msgid ""
"\n"
" The first time you use Breezy Desktop, an internet connection is "
"required to retrieve your device's license.\n"
" \n"
" Don't worry, there's no obligation to donate at this time. If you "
"haven't, you'll be given a trial license so you can decide if Breezy Desktop "
"fits your needs. \n"
" \n"
" Once you obtain a license, trial or otherwise, you can use Breezy "
"Desktop offline until features expire (or indefinitely, if you've chosen "
"lifetime access).\n"
" "
msgstr ""
"\n"
" При первом использовании Breezy Desktop требуется интернет-"
"соединение для получения лицензии вашего устройства.\n"
" \n"
" Не волнуйтесь, на данный момент нет обязательства донатить. "
"Если вы не сделали этого, вам будет предоставлена пробная "
"лицензия, чтобы вы могли решить, подходит ли вам Breezy Desktop.\n"
" \n"
" После получения лицензии, пробной или иной, вы можете "
"использовать Breezy Desktop офлайн до истечения срока "
"действия функций (или бессрочно, если вы выбрали пожизненный доступ).\n"
" "
#: src/gtk/no-license.ui:27
msgid "Try Again"
msgstr "Попробовать еще раз"
#: src/gtk/shortcut-dialog.ui:5
msgid "Assign Keyboard Shortcut"
msgstr "Назначить сочетание клавиш"
#: src/gtk/shortcut-dialog.ui:20
msgid "Press your keyboard shortcut or 'Backspace' to disable..."
msgstr "Нажмите на свое сочетание клавиш или 'Backspace', чтобы отключить..."
#: src/gtk/window.ui:10
msgid "Breezy Desktop"
msgstr "Breezy Desktop"
#: src/gtk/window.ui:23
msgid "Menu"
msgstr "Меню"
#: src/gtk/window.ui:35
msgid "Some features expire soon"
msgstr "Некоторые функции скоро истекут"
#: src/gtk/window.ui:36 src/gtk/window.ui:43
msgid "View details"
msgstr "Просмотреть детали"
#: src/gtk/window.ui:42
msgid "Productivity features are disabled"
msgstr "Функции повышения производительности отключены"
#: src/gtk/window.ui:59
msgid "Force Reset"
msgstr "Сброс"
#: src/gtk/window.ui:63
msgid "About BreezyDesktop"
msgstr "О BreezyDesktop"

Binary file not shown.

460
ui/po/uk_UA.po Normal file
View File

@ -0,0 +1,460 @@
# Ukrainian translations for PACKAGE package.
# Copyright (C) 2024 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# <wayne@xronlinux.com>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-15 15:36-0700\n"
"PO-Revision-Date: 2024-08-17 10:08-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: src/connecteddevice.py:16
msgid ""
"Switches your glasses into side-by-side mode and doubles the width of the "
"display."
msgstr "Переключає окуляри в режим «бок о бок» і подвоює ширину дисплея."
#: src/connecteddevice.py:17
msgid "This feature is not currently supported for your device."
msgstr "Ця функція наразі не підтримується на вашому пристрої."
#: src/licensedialog.py:49
msgid "Paid Tier Status"
msgstr "Статус платного рівня"
#: src/licensedialog.py:57
msgid "Feature Availability"
msgstr "Статус функцій"
#: src/licensefeaturerow.py:15 src/shortcutdialog.py:107
msgid "Disabled"
msgstr "Вимкнено"
#: src/licensefeaturerow.py:18
msgid "In trial"
msgstr "У пробному режимі"
#: src/licensefeaturerow.py:18
msgid "Enabled"
msgstr "Увімкнено"
#: src/licensefeaturerow.py:24 src/licensetierrow.py:30
#, python-brace-format
msgid " ({time_remaining} remaining)"
msgstr "({time_remaining} залишилося)"
#: src/licensefeaturerow.py:32
msgid "Side-by-side mode (gaming)"
msgstr "Режим «бок о бок» (ігровий режим)"
#: src/licensefeaturerow.py:33
msgid "Smooth Follow (gaming)"
msgstr "Плавне слідування (ігровий режим)"
#: src/licensefeaturerow.py:34
msgid "Breezy Desktop (productivity)"
msgstr "Breezy Desktop (продуктивний прежим)"
#: src/licensetierrow.py:24
msgid "Active"
msgstr "Активний"
#: src/licensetierrow.py:24
msgid "Inactive"
msgstr "Неактивний"
#: src/licensetierrow.py:41
#, python-brace-format
msgid "<b>${amount}</b> USD"
msgstr "<b>${amount}</b> USD"
#: src/licensetierrow.py:43
msgid " to renew"
msgstr " для оновлення"
#: src/licensetierrow.py:45
msgid " to upgrade"
msgstr " для удосконалювання"
#: src/licensetierrow.py:47
msgid "Paid through next renewal period"
msgstr "Оплата до наступного періоду"
#: src/licensetierrow.py:56
msgid "Gaming"
msgstr "Ігровий режим"
#: src/licensetierrow.py:57
msgid "Productivity"
msgstr "Продуктивний режим"
#: src/licensetierrow.py:63
msgid " - renewing monthly"
msgstr " - щомісячне продовження"
#: src/licensetierrow.py:64
msgid " - renewing yearly"
msgstr " - щорічне продовження"
#: src/licensetierrow.py:65
msgid "with lifetime access"
msgstr "з довічним доступом"
#: src/licensetierrow.py:72
msgid "Monthly"
msgstr "Щомісячно"
#: src/licensetierrow.py:73
msgid "Yearly"
msgstr "Щорічно"
#: src/licensetierrow.py:74
msgid "Lifetime"
msgstr "Довічно"
#: src/time.py:14
msgid "less than an hour"
msgstr "менше години"
#: src/time.py:17
msgid "1 hour"
msgstr "1 година"
#: src/time.py:17
#, python-brace-format
msgid "{time_remaining} hours"
msgstr "{time_remaining} годин"
#: src/time.py:20
msgid "1 day"
msgstr "1 день"
#: src/time.py:20
#, python-brace-format
msgid "{time_remaining} days"
msgstr "{time_remaining} днів"
#: src/gtk/connected-device.ui:21
msgid "connected"
msgstr "підключено"
#: src/gtk/connected-device.ui:31
msgid "General Settings"
msgstr "Загальні налаштування"
#: src/gtk/connected-device.ui:41
msgid "Features"
msgstr "Функції"
#: src/gtk/connected-device.ui:44
msgid "XR effect"
msgstr "Ефект XR"
#: src/gtk/connected-device.ui:45
msgid "Enables the Breezy Desktop XR effect."
msgstr "Включає ефект Breezy Desktop XR."
#: src/gtk/connected-device.ui:55
msgid "Widescreen mode"
msgstr "Режим широкого екрану"
#: src/gtk/connected-device.ui:66
msgid "Follow mode"
msgstr "Режим слідування"
#: src/gtk/connected-device.ui:67
msgid "Keep the virtual display near the center of your view."
msgstr "Зберігае віртуальний дисплей поблизу центру вашого зору."
#: src/gtk/connected-device.ui:77
msgid "Curved display"
msgstr "Викривлений дисплей"
#: src/gtk/connected-device.ui:78
msgid "Switch between flat and curved displays."
msgstr "Переключается між плоскими і викривленими дисплеями."
#: src/gtk/connected-device.ui:91
msgid "Adjustments"
msgstr "Налаштування"
#: src/gtk/connected-device.ui:94
msgid "Display distance"
msgstr "Відстань дисплея"
#: src/gtk/connected-device.ui:95
msgid ""
"Closer appears larger, further appears smaller. Controls depth when in "
"widescreen mode."
msgstr "Чим ближче, тим більший. Чим далі, тим менший. Керує глибиною при "
"використанні режиму широкого екрана."
#: src/gtk/connected-device.ui:123
msgid "Display size"
msgstr "Розмір дисплея"
#: src/gtk/connected-device.ui:124
msgid ""
"Combine with display distance to achieve a comfortable level of depth and "
"size."
msgstr "Поєднуйте з відстанню дисплея, щоб досягти комфортного рівня глибини і розміру."
#: src/gtk/connected-device.ui:152
msgid "Display toggle distances"
msgstr "Перемикання відстані дисплея"
#: src/gtk/connected-device.ui:153
msgid ""
"Use the buttons to capture the current display distance for use with the "
"keyboard shortcut."
msgstr "Використовуйте кнопки, щоб зафіксувати поточну відстань дисплея для використання "
"з сполученням клавіш."
#: src/gtk/connected-device.ui:178
msgid "Follow threshold"
msgstr "Поріг слідування"
#: src/gtk/connected-device.ui:179
msgid "How far away you can look before the display follows."
msgstr "Як далеко ви можете відвернути ваш взор, перш ніж дисплей почне слідувати за вами."
#: src/gtk/connected-device.ui:209 src/gtk/connected-device.ui:215
msgid "Keyboard Shortcuts"
msgstr "Сполучення клавіш"
#: src/gtk/connected-device.ui:218
msgid "Re-center display shortcut"
msgstr "Сполучення клавіш для центрування дисплея"
#: src/gtk/connected-device.ui:219
msgid "Pin the virtual display to the current position."
msgstr "Фіксувати віртуальний дисплей у поточній позиції."
#: src/gtk/connected-device.ui:238 src/gtk/connected-device.ui:267
#: src/gtk/connected-device.ui:296
msgid "Change"
msgstr "Змінити"
#: src/gtk/connected-device.ui:247
msgid "Display distance shortcut"
msgstr "Сполучення клавіш для відстані дисплея"
#: src/gtk/connected-device.ui:248
msgid "Quickly toggle between two predefined distances."
msgstr "Швидко перемикатися між двома попередньо визначеними відстанями."
#: src/gtk/connected-device.ui:276
msgid "Toggle follow mode shortcut"
msgstr "Сполучення клавіш для перемикання режиму слідування"
#: src/gtk/connected-device.ui:277
msgid "Quickly toggle follow mode."
msgstr "Швидко перемикати режим слідування."
#: src/gtk/connected-device.ui:312 src/gtk/connected-device.ui:318
msgid "Advanced Settings"
msgstr "Додаткові налаштування"
#: src/gtk/connected-device.ui:321
msgid "Find optimal display config"
msgstr "Знайти оптимальну конфігурацію дисплея"
#: src/gtk/connected-device.ui:322
msgid ""
"Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in."
msgstr "Автоматично змінює конфігурацію дисплея окулярів для максимальної "
"роздільної здатності і найкращого масштабування при підключенні."
#: src/gtk/connected-device.ui:332
msgid "Use highest refresh rate"
msgstr "Використовувати найвищу частоту оновлення"
#: src/gtk/connected-device.ui:333
msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr "Частота оновлення може вплинути на продуктивність, вимкніть це, "
"щоб встановити її вручну."
#: src/gtk/connected-device.ui:343
msgid "Always primary display"
msgstr "Завжди основний дисплей"
#: src/gtk/connected-device.ui:344
msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "Автоматично встановлює окуляри як основний дисплей при підключенні."
#: src/gtk/connected-device.ui:354
msgid "Fast SBS mode switching"
msgstr "Швидке перемикання режиму SBS"
#: src/gtk/connected-device.ui:355
msgid ""
"Switches glasses to SBS mode immediately when plugged in, if widescreen mode "
"is on. May cause instability."
msgstr "Переключає окуляри в режим SBS відразу після підключення, якщо режим "
"широкого екрана увімкнено. Може викликати нестабільність."
#: src/gtk/connected-device.ui:365
msgid "Movement look-ahead"
msgstr "Прогнозування руху"
#: src/gtk/connected-device.ui:366
msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head "
"movements, jumps ahead, or is very shaky."
msgstr ""
"Компенсує затримку введення, передбачаючи позицію відстеження голови перед часом рендерингу. "
"Залишайтеся при налаштуваннях за замовчуванням, якщо віртуальний дисплей відстає від рухів вашої голови, "
"випереджає або дуже тремтить."
#: src/gtk/connected-device.ui:384
msgid "Default"
msgstr "За замовчуванням"
#: src/gtk/failed-verification.ui:13
msgid "Breezy Desktop GNOME invalid setup"
msgstr "Невірна настройка Breezy Desktop GNOME"
#: src/gtk/failed-verification.ui:14
msgid ""
"Your Breezy GNOME setup is invalid or incomplete. Please re-run the setup "
"script. Report this issue if it persists."
msgstr ""
"Ваша настройка Breezy GNOME є невірною або неповною. Будь ласка, запустіть скрипт настройки повторно. "
"Повідомте про цю проблему, якщо вона не зникає."
#: src/gtk/license-dialog.ui:5 src/gtk/window.ui:55
msgid "License Details"
msgstr "Деталі ліцензії"
#: src/gtk/license-dialog.ui:27
msgid "Donate"
msgstr "Донатити"
#: src/gtk/license-dialog.ui:44
msgid "Request a token"
msgstr "Запитати токен"
#: src/gtk/license-dialog.ui:52
msgid "Verify token"
msgstr "Перевірити токен"
#: src/gtk/no-device.ui:13
msgid "No device connected"
msgstr "Жоден пристрій не підключено"
#: src/gtk/no-device.ui:14
msgid "Breezy Desktop was unable to detect any supported XR devices."
msgstr "Breezy Desktop не зміг виявити жодного підтримуваного XR пристрою."
#: src/gtk/no-driver.ui:13
msgid "No driver running"
msgstr "Жоден драйвер не запущений"
#: src/gtk/no-driver.ui:14
msgid ""
"\n"
" If you installed via AUR, make sure you ran the recommended post-"
"install command:\n"
" systemctl --user enable --now xr-driver.service\n"
"\n"
" Otherwise, please file an issue on GitHub, or create a new thread "
"in the #troubleshooting channel on Discord.\n"
" "
msgstr ""
"\n"
" Якщо ви встановили через AUR, переконайтеся, що ви запустили рекомендовану команду після встановлення:\n"
" systemctl --user enable --now xr-driver.service\n"
"\n"
"В іншому випадку, будь ласка, створіть запит на GitHub або новий тред у каналі #troubleshooting на Discord.\n"
" "
#: src/gtk/no-extension.ui:13
msgid "Breezy Desktop GNOME extension not ready"
msgstr "Розширення Breezy Desktop GNOME не готове"
#: src/gtk/no-extension.ui:14
msgid ""
"If you have just run the setup, then you may need to log out and back in to "
"use it. Otherwise, please follow the Breezy GNOME setup instructions."
msgstr ""
"Якщо ви тільки що запустили налаштування, можливо, вам потрібно вийти і знову увійти, щоб використовувати його. "
"В іншому випадку, будь ласка, дотримуйтесь інструкцій з налаштування Breezy GNOME."
#: src/gtk/no-license.ui:13
msgid "No license file was found"
msgstr "Жоден файл ліцензії не знайдено"
#: src/gtk/no-license.ui:14
msgid ""
"\n"
" The first time you use Breezy Desktop, an internet connection is "
"required to retrieve your device's license.\n"
" \n"
" Don't worry, there's no obligation to donate at this time. If you "
"haven't, you'll be given a trial license so you can decide if Breezy Desktop "
"fits your needs. \n"
" \n"
" Once you obtain a license, trial or otherwise, you can use Breezy "
"Desktop offline until features expire (or indefinitely, if you've chosen "
"lifetime access).\n"
" "
msgstr ""
"\n"
"Під час першого запуску програми Breezy Desktop потрібне підключення до Інтернету для отримання ліцензії на пристрій.\n"
" \n"
"Не хвилюйтеся, наразі немає обов'язку донатити. Якщо ви не зробили цього, вам буде надана пробна ліцензія, щоб ви могли вирішити, чи відповідає Breezy Desktop вашим потребам.\n"
" \n"
"Після отримання ліцензії, пробної або іншої, ви можете використовувати Breezy Desktop офлайн до закінчення терміну дії функції (або безстроково, якщо ви обрали довічний доступ).\n"
" "
#: src/gtk/no-license.ui:27
msgid "Try Again"
msgstr "Спробуйте ще раз"
#: src/gtk/shortcut-dialog.ui:5
msgid "Assign Keyboard Shortcut"
msgstr "Призначити сполучення клавіш"
#: src/gtk/shortcut-dialog.ui:20
msgid "Press your keyboard shortcut or 'Backspace' to disable..."
msgstr "Натисніть сполучення клавіш або 'Backspace', щоб відключити..."
#: src/gtk/window.ui:10
msgid "Breezy Desktop"
msgstr "Breezy Desktop"
#: src/gtk/window.ui:23
msgid "Menu"
msgstr "Меню"
#: src/gtk/window.ui:35
msgid "Some features expire soon"
msgstr "Деякі функції закінчуються незабаром"
#: src/gtk/window.ui:36 src/gtk/window.ui:43
msgid "View details"
msgstr "Переглянути деталі"
#: src/gtk/window.ui:42
msgid "Productivity features are disabled"
msgstr "Функції продуктивного режиму відключені"
#: src/gtk/window.ui:59
msgid "Force Reset"
msgstr "Скинути"
#: src/gtk/window.ui:63
msgid "About BreezyDesktop"
msgstr "Про BreezyDesktop"

Binary file not shown.

View File

@ -24,7 +24,7 @@ class LicenseTierRow(Adw.ExpanderRow):
status = _('Active') if active_period else _('Inactive')
details = ''
if active_period:
details += f" {self._period_description[active_period]}"
details += f" {self._period_description(active_period)}"
if funds_needed_in_seconds is not None and funds_needed_in_seconds > 0:
time_remaining = time_remaining_text(funds_needed_in_seconds)
if time_remaining: details += _(" ({time_remaining} remaining)").format(time_remaining=time_remaining)

View File

@ -83,6 +83,10 @@ class BreezydesktopApplication(Adw.Application):
self.create_action('reset_driver', self.on_reset_driver_action)
self._skip_verification = skip_verification
# always do this on start-up since the driver sometimes fails to update the license on boot,
# prevent showing a license warning unnecessarily
XRDriverIPC.get_instance().write_control_flags({'refresh_device_license': True})
def do_activate(self):
"""Called when the application is activated.
@ -102,7 +106,7 @@ class BreezydesktopApplication(Adw.Application):
modal=True,
program_name='Breezy Desktop',
logo_icon_name='com.xronlinux.BreezyDesktop',
version='0.1.1',
version='0.11.0',
authors=['Wayne Heaney'],
copyright='© 2024 Wayne Heaney')
about.present()

View File

@ -24,47 +24,20 @@ USER_HOME=$(getent passwd $USER | cut -d: -f6)
if [ -z "$XDG_DATA_HOME" ]; then
XDG_DATA_HOME="$USER_HOME/.local/share"
fi
DATA_DIR="$XDG_DATA_HOME/breezy_vulkan"
if [ ! -d "$DATA_DIR" ]; then
mkdir -p $DATA_DIR
fi
VULKAN_DATA_DIR="$XDG_DATA_HOME/vulkan"
XR_DRIVER_DATA_DIR="$XDG_DATA_HOME/breezy_vulkan"
if [ -z "$XDG_CONFIG_HOME" ]; then
XDG_CONFIG_HOME="$USER_HOME/.config"
fi
CONFIG_DIR="$XDG_CONFIG_HOME/breezy_vulkan"
if [ ! -d "$CONFIG_DIR" ]; then
mkdir -p $CONFIG_DIR
fi
if [ -z "$XDG_BIN_HOME" ]; then
XDG_BIN_HOME="$USER_HOME/.local/bin"
fi
OLD_BIN_DIR="$USER_HOME/bin"
BIN_DIR="$XDG_BIN_HOME"
if [ ! -d "$BIN_DIR" ]; then
mkdir -p $BIN_DIR
fi
if [ -z "$XDG_STATE_HOME" ]; then
XDG_STATE_HOME="$USER_HOME/.local/state"
fi
STATE_DIR="$XDG_STATE_HOME/breezy_vulkan"
if [ ! -d "$STATE_DIR" ]; then
mkdir -p $STATE_DIR
fi
LIB_DIR="$USER_HOME/.local/lib"
if [ ! -d "$LIB_DIR" ]; then
mkdir -p "$LIB_DIR"
fi
LIB32_DIR="$USER_HOME/.local/lib32"
if [ ! -d "$LIB32_DIR" ]; then
mkdir -p "$LIB32_DIR"
fi
if [ "$for_install" -eq 0 ]; then
UA_EVENT_NAME="breezy_uninstall"
@ -81,8 +54,8 @@ rm $VULKAN_DATA_DIR/implicit_layer.d/vkBasalt.json
rm $VULKAN_DATA_DIR/implicit_layer.d/vkBasalt.x86.json
[ "$for_install" -eq 0 ] && echo "Removing vkBasalt and reshade directories at $CONFIG_DIR/"
rm -rf $CONFIG_DIR/vkBasalt
rm -rf $CONFIG_DIR/reshade
rm -rf $XDG_CONFIG_HOME/vkBasalt
rm -rf $XDG_CONFIG_HOME/reshade
[ "$for_install" -eq 0 ] && echo "Removing scripts at $BIN_DIR"
rm -f $BIN_DIR/breezy_vulkan_verify

View File

@ -8,10 +8,9 @@ file_paths=(
["bin/breezy_vulkan_uninstall"]="{bin_dir}/breezy_vulkan_uninstall"
["vkBasalt.64/libvkbasalt.so"]="{lib_dir}/libvkbasalt.so"
["vkBasalt.32/libvkbasalt.so"]="{lib32_dir}/libvkbasalt.so"
["IMUAdjust.fx"]="{reshade_config_dir}/Shaders/IMUAdjust.fx"
["Sombrero.frag"]="{reshade_config_dir}/Shaders/Sombrero.frag"
["ReShade.fxh"]="{reshade_config_dir}/Shaders/ReShade.fxh"
["ReShadeUI.fxh"]="{reshade_config_dir}/Shaders/ReShadeUI.fxh"
["Sideview.fx"]="{reshade_config_dir}/Shaders/Sideview.fx"
["calibrating.png"]="{reshade_config_dir}/Textures/calibrating.png"
["custom_banner.png"]="{reshade_config_dir}/Textures/custom_banner.png"
["xr_driver/manifest"]="{xr_driver_data_dir}/manifest"

View File

@ -99,6 +99,9 @@ cp bin/breezy_vulkan_verify $BIN_DIR
cp manifest $DATA_DIR
# keep putting this in the old location in case an older version of the script tries to find it
if [ ! -d "$OLD_BIN_DIR" ]; then
mkdir -p $OLD_BIN_DIR
fi
cp bin/breezy_vulkan_uninstall $OLD_BIN_DIR
echo "Installing vkBasalt; copying binaries, configs, and shader files"
@ -121,11 +124,11 @@ fi
# copy the vkBasalt.conf file and make replacements
sed -e "s|/path/to/reshade-shaders|${RESHADE_CONFIG_DIR}|" \
-e "s|/path/to/virtual_display|${RESHADE_CONFIG_DIR}/Shaders/IMUAdjust.fx|" \
-e "s|/path/to/sideview|${RESHADE_CONFIG_DIR}/Shaders/Sideview.fx|" \
-e "s|/path/to/sombrero|${RESHADE_CONFIG_DIR}/Shaders/Sombrero.frag|" \
config/vkBasalt.conf > $VKBASALT_CONFIG_DIR/vkBasalt.conf
echo "Installing the Sombrero shaders and texture files to ${RESHADE_CONFIG_DIR}/{Shaders,Textures}"
cp *.frag $RESHADE_CONFIG_DIR/Shaders
cp *.fx* $RESHADE_CONFIG_DIR/Shaders
cp *.png $RESHADE_CONFIG_DIR/Textures
@ -137,6 +140,7 @@ chown -R $USER:$GROUP $RESHADE_CONFIG_DIR
chown -R $USER:$GROUP $VKBASALT_CONFIG_DIR
chown -R $USER:$GROUP $STATE_DIR
chown -R $USER:$GROUP $BIN_DIR/breezy_vulkan_*
chown -R $USER:$GROUP $OLD_BIN_DIR
# clear bash's cache of executable locations, so it can find the newly installed scripts
hash -r

View File

@ -1,7 +1,6 @@
effects = sideview:virtual_display
effects = sombrero
virtual_display = /path/to/virtual_display
sideview = /path/to/sideview
sombrero = /path/to/sombrero
reshadeTexturePath = "/path/to/reshade-shaders/Textures"
reshadeIncludePath = "/path/to/reshade-shaders/Shaders"
depthCapture = off