Merge branch 'main' into gnome-44-max

This commit is contained in:
wheaney 2025-03-07 20:43:21 -08:00
commit d9cdf1aa6a
26 changed files with 1304 additions and 534 deletions

View File

@ -1 +1 @@
2.0.1 2.0.6

View File

@ -101,7 +101,7 @@ index aae3706..d2e96c0 100644
'breezy-desktop-running': GObject.ParamSpec.boolean( 'breezy-desktop-running': GObject.ParamSpec.boolean(
'breezy-desktop-running', 'breezy-desktop-running',
diff --git a/gnome-44-max/src/extension.js b/gnome-44-max/src/extension.js diff --git a/gnome-44-max/src/extension.js b/gnome-44-max/src/extension.js
index ea30261..814f170 100644 index fcf860f..1f12ec1 100644
--- a/gnome-44-max/src/extension.js --- a/gnome-44-max/src/extension.js
+++ b/gnome-44-max/src/extension.js +++ b/gnome-44-max/src/extension.js
@@ -1,28 +1,32 @@ @@ -1,28 +1,32 @@
@ -431,7 +431,7 @@ index 7fb013b..bb12660 100644
'monitor-index': GObject.ParamSpec.int( 'monitor-index': GObject.ParamSpec.int(
'monitor-index', 'monitor-index',
diff --git a/gnome-44-max/src/virtualdisplaysactor.js b/gnome-44-max/src/virtualdisplaysactor.js diff --git a/gnome-44-max/src/virtualdisplaysactor.js b/gnome-44-max/src/virtualdisplaysactor.js
index cab3c47..f69eef6 100644 index a4b6a83..a3a4550 100644
--- a/gnome-44-max/src/virtualdisplaysactor.js --- a/gnome-44-max/src/virtualdisplaysactor.js
+++ b/gnome-44-max/src/virtualdisplaysactor.js +++ b/gnome-44-max/src/virtualdisplaysactor.js
@@ -1,18 +1,19 @@ @@ -1,18 +1,19 @@
@ -475,33 +475,3 @@ index cab3c47..f69eef6 100644
Properties: { Properties: {
'target-monitor': GObject.ParamSpec.jsobject( 'target-monitor': GObject.ParamSpec.jsobject(
'target-monitor', 'target-monitor',
@@ -538,26 +539,19 @@ export const VirtualDisplaysActor = GObject.registerClass({
this._all_monitors = [
this.target_monitor,
...this.virtual_monitors
- ]
-
- const bannerTextureClippingRect = new Mtk.Rectangle({
- x: 0,
- y: 0,
- width: 800,
- height: 200
- });
+ ];
const calibratingBanner = GdkPixbuf.Pixbuf.new_from_file(`${Globals.extension_dir}/textures/calibrating.png`);
const calibratingImage = new Clutter.Image();
calibratingImage.set_data(calibratingBanner.get_pixels(), Cogl.PixelFormat.RGB_888,
calibratingBanner.width, calibratingBanner.height, calibratingBanner.rowstride);
- this.bannerContent = Clutter.TextureContent.new_from_texture(calibratingImage.get_texture(), bannerTextureClippingRect);
+ this.bannerContent = Clutter.TextureContent.new_from_texture(calibratingImage.get_texture(), null);
const customBanner = GdkPixbuf.Pixbuf.new_from_file(`${Globals.extension_dir}/textures/custom_banner.png`);
const customBannerImage = new Clutter.Image();
customBannerImage.set_data(customBanner.get_pixels(), Cogl.PixelFormat.RGB_888,
customBanner.width, customBanner.height, customBanner.rowstride);
- this.customBannerContent = Clutter.TextureContent.new_from_texture(customBannerImage.get_texture(), bannerTextureClippingRect);
+ this.customBannerContent = Clutter.TextureContent.new_from_texture(customBannerImage.get_texture(), null);
this.bannerActor = new Clutter.Actor({
width: calibratingBanner.width,

View File

@ -121,6 +121,13 @@ var DeviceDataStream = GObject.registerClass({
GObject.ParamFlags.READWRITE, GObject.ParamFlags.READWRITE,
false false
), ),
'legacy-follow-mode': GObject.ParamSpec.boolean(
'legacy-follow-mode',
'Legacy follow mode',
'Whether the legacy follow mode is enabled',
GObject.ParamFlags.READWRITE,
false
),
'debug-no-device': GObject.ParamSpec.boolean( 'debug-no-device': GObject.ParamSpec.boolean(
'debug-no-device', 'debug-no-device',
'Debug without device', 'Debug without device',
@ -164,6 +171,12 @@ var DeviceDataStream = GObject.registerClass({
} }
} }
_ipc_file_exists() {
if (!this._ipc_file_exists_cached) this._ipc_file_exists_cached = this._ipc_file.query_exists(null);
return this._ipc_file_exists_cached;
}
// Refresh the data from the IPC file. if keepalive_only is true, we'll only check and update breezy_desktop_running if it // Refresh the data from the IPC file. if keepalive_only is true, we'll only check and update breezy_desktop_running if it
// hasn't been checked within KEEPALIVE_REFRESH_INTERVAL_SEC. // hasn't been checked within KEEPALIVE_REFRESH_INTERVAL_SEC.
refresh_data(keepalive_only = false) { refresh_data(keepalive_only = false) {
@ -177,13 +190,20 @@ var DeviceDataStream = GObject.registerClass({
} }
} }
if (this._ipc_file.query_exists(null) && ( if (this._ipc_file_exists() && (
!this.device_data?.imuData || !this.device_data?.imuData ||
!keepalive_only || !keepalive_only ||
getEpochSec() - toSec(this.device_data?.imuDateMs ?? 0) > KEEPALIVE_REFRESH_INTERVAL_SEC getEpochSec() - toSec(this.device_data?.imuDateMs ?? 0) > KEEPALIVE_REFRESH_INTERVAL_SEC
)) { )) {
let data = this._ipc_file.load_contents(null); let data;
if (data[0]) { let data_success = false;
try {
data = this._ipc_file.load_contents(null);
data_success = data[0];
} catch (e) {
Globals.logger.log_debug(`Error loading contents from IPC file: ${e.message}\n${e.stack}`);
}
if (data_success) {
let buffer = new Uint8Array(data[1]).buffer; let buffer = new Uint8Array(data[1]).buffer;
let dataView = new DataView(buffer); let dataView = new DataView(buffer);
if (dataView.byteLength === DATA_VIEW_LENGTH) { if (dataView.byteLength === DATA_VIEW_LENGTH) {
@ -194,7 +214,7 @@ var DeviceDataStream = GObject.registerClass({
const version = dataViewUint8(dataView, VERSION); const version = dataViewUint8(dataView, VERSION);
const enabled = dataViewUint8(dataView, ENABLED) !== 0 && version === DATA_LAYOUT_VERSION && validData; const enabled = dataViewUint8(dataView, ENABLED) !== 0 && version === DATA_LAYOUT_VERSION && validData;
let imuData = dataViewFloatArray(dataView, IMU_QUAT_DATA); let imuData = dataViewFloatArray(dataView, IMU_QUAT_DATA);
let smoothFollowEnabled = dataViewUint8(dataView, SMOOTH_FOLLOW_ENABLED) !== 0; let smoothFollowEnabled = !this.legacy_follow_mode && dataViewUint8(dataView, SMOOTH_FOLLOW_ENABLED) !== 0;
let smoothFollowOrigin = dataViewFloatArray(dataView, SMOOTH_FOLLOW_ORIGIN_DATA); let smoothFollowOrigin = dataViewFloatArray(dataView, SMOOTH_FOLLOW_ORIGIN_DATA);
const imuResetState = enabled && validData && imuData[0] === 0.0 && imuData[1] === 0.0 && imuData[2] === 0.0 && imuData[3] === 1.0; const imuResetState = enabled && validData && imuData[0] === 0.0 && imuData[1] === 0.0 && imuData[2] === 0.0 && imuData[3] === 1.0;
const customBannerEnabled = dataViewUint8(dataView, CUSTOM_BANNER_ENABLED) !== 0; const customBannerEnabled = dataViewUint8(dataView, CUSTOM_BANNER_ENABLED) !== 0;
@ -271,6 +291,7 @@ var DeviceDataStream = GObject.registerClass({
this.breezy_desktop_actually_running = false; this.breezy_desktop_actually_running = false;
} }
} else { } else {
this._ipc_file_exists_cached = false;
this.breezy_desktop_actually_running = false; this.breezy_desktop_actually_running = false;
} }
} }

View File

@ -80,6 +80,7 @@ class BreezyDesktopExtension {
this.settings.bind('use-optimal-monitor-config',this._monitor_manager, 'use-optimal-monitor-config', Gio.SettingsBindFlags.DEFAULT); this.settings.bind('use-optimal-monitor-config',this._monitor_manager, 'use-optimal-monitor-config', Gio.SettingsBindFlags.DEFAULT);
this.settings.bind('headset-as-primary', this._monitor_manager, 'headset-as-primary', Gio.SettingsBindFlags.DEFAULT); this.settings.bind('headset-as-primary', this._monitor_manager, 'headset-as-primary', Gio.SettingsBindFlags.DEFAULT);
this.settings.bind('disable-physical-displays', this._monitor_manager, 'disable-physical-displays', Gio.SettingsBindFlags.DEFAULT); this.settings.bind('disable-physical-displays', this._monitor_manager, 'disable-physical-displays', Gio.SettingsBindFlags.DEFAULT);
this.settings.bind('legacy-follow-mode', Globals.data_stream, 'legacy-follow-mode', Gio.SettingsBindFlags.DEFAULT);
this.settings.bind('debug-no-device', Globals.data_stream, 'debug-no-device', Gio.SettingsBindFlags.DEFAULT); this.settings.bind('debug-no-device', Globals.data_stream, 'debug-no-device', Gio.SettingsBindFlags.DEFAULT);
this._breezy_desktop_running_connection = Globals.data_stream.connect('notify::breezy-desktop-running', this._breezy_desktop_running_connection = Globals.data_stream.connect('notify::breezy-desktop-running',
@ -233,6 +234,7 @@ class BreezyDesktopExtension {
virtual_monitors: virtualMonitors, virtual_monitors: virtualMonitors,
monitor_wrapping_scheme: this.settings.get_string('monitor-wrapping-scheme'), monitor_wrapping_scheme: this.settings.get_string('monitor-wrapping-scheme'),
monitor_spacing: this.settings.get_int('monitor-spacing'), monitor_spacing: this.settings.get_int('monitor-spacing'),
headset_display_as_viewport_center: this.settings.get_boolean('headset-display-as-viewport-center'),
viewport_offset_x: this.settings.get_double('viewport-offset-x'), viewport_offset_x: this.settings.get_double('viewport-offset-x'),
viewport_offset_y: this.settings.get_double('viewport-offset-y'), viewport_offset_y: this.settings.get_double('viewport-offset-y'),
display_distance: this.settings.get_double('display-distance'), display_distance: this.settings.get_double('display-distance'),
@ -276,6 +278,7 @@ class BreezyDesktopExtension {
this._effect_settings_bindings = [ this._effect_settings_bindings = [
'monitor-wrapping-scheme', 'monitor-wrapping-scheme',
'headset-display-as-viewport-center',
'viewport-offset-x', 'viewport-offset-x',
'viewport-offset-y', 'viewport-offset-y',
'monitor-spacing', 'monitor-spacing',
@ -586,11 +589,23 @@ class BreezyDesktopExtension {
Globals.logger.log('Disabling SBS mode due to disabling effect'); Globals.logger.log('Disabling SBS mode due to disabling effect');
this._write_control('sbs_mode', 'disable'); this._write_control('sbs_mode', 'disable');
} }
if (!for_setup && this.settings.get_boolean('remove-virtual-displays-on-disable')) {
this._remove_virtual_displays();
}
} catch (e) { } catch (e) {
Globals.logger.log(`[ERROR] BreezyDesktopExtension _effect_disable ${e.message}\n${e.stack}`); Globals.logger.log(`[ERROR] BreezyDesktopExtension _effect_disable ${e.message}\n${e.stack}`);
} }
} }
_remove_virtual_displays() {
try {
GLib.spawn_command_line_sync(`pkill -f "/virtualdisplay( |$)"`);
} catch (e) {
Globals.logger.log(`[ERROR] BreezyDesktopExtension _remove_virtual_displays ${e.message}\n${e.stack}`);
}
}
disable() { disable() {
try { try {
Globals.logger.log_debug('BreezyDesktopExtension disable'); Globals.logger.log_debug('BreezyDesktopExtension disable');

View File

@ -471,7 +471,7 @@ var VirtualDisplayEffect = GObject.registerClass({
cogl_tex_coord_out[0] = cogl_tex_coord_in; cogl_tex_coord_out[0] = cogl_tex_coord_in;
` `
this.add_glsl_snippet(Shell.SnippetHook.VERTEX, declarations, main, false); this.add_glsl_snippet(Cogl.SnippetHook?.VERTEX ?? Shell.SnippetHook.VERTEX, declarations, main, false);
} }
vfunc_paint_target(node, paintContext) { vfunc_paint_target(node, paintContext) {

View File

@ -182,6 +182,7 @@ function monitorWrap(cachedMonitorRadians, radiusPixels, monitorSpacingPixels, m
* and distance to the center of the screen * and distance to the center of the screen
* @param {Object[]} monitorDetailsList - contains x, y, width, height (coordinates from top-left) * @param {Object[]} monitorDetailsList - contains x, y, width, height (coordinates from top-left)
* @param {string} monitorWrappingScheme - horizontal, vertical, none * @param {string} monitorWrappingScheme - horizontal, vertical, none
* @param {number} monitorSpacing - visual spacing between monitors, as a percentage of the viewport width
* @returns {Object[]} - contains NWU vectors pointing to `topLeftNoRotate` and `center` of each monitor * @returns {Object[]} - contains NWU vectors pointing to `topLeftNoRotate` and `center` of each monitor
* and a `rotation` angle for the given wrapping scheme * and a `rotation` angle for the given wrapping scheme
*/ */
@ -199,7 +200,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels; const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels;
cachedMonitorRadians[0] = -fovDetails.defaultDistanceHorizontalRadians / 2; cachedMonitorRadians[0] = -fovDetails.defaultDistanceHorizontalRadians / 2;
monitorDetailsList.forEach(monitorDetails => { horizontalMonitorSort(monitorDetailsList).forEach(({monitorDetails, originalIndex}) => {
const monitorWrapDetails = monitorWrap(cachedMonitorRadians, sideEdgeRadius, monitorSpacingPixels, monitorDetails.x, monitorDetails.width); const monitorWrapDetails = monitorWrap(cachedMonitorRadians, sideEdgeRadius, monitorSpacingPixels, monitorDetails.x, monitorDetails.width);
const monitorCenterRadius = Math.sqrt(Math.pow(sideEdgeRadius, 2) - Math.pow(monitorDetails.width / 2, 2)); const monitorCenterRadius = Math.sqrt(Math.pow(sideEdgeRadius, 2) - Math.pow(monitorDetails.width / 2, 2));
const upTopPixels = monitorDetails.y + (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels; const upTopPixels = monitorDetails.y + (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels;
@ -211,6 +212,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
const upCenterPixels = upTopPixels + upCenterOriginPixels; const upCenterPixels = upTopPixels + upCenterOriginPixels;
monitorPlacements.push({ monitorPlacements.push({
originalIndex,
topLeftNoRotate: [ topLeftNoRotate: [
monitorCenterRadius, monitorCenterRadius,
@ -258,7 +260,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
const monitorSpacingPixels = monitorSpacing * fovDetails.heightPixels; const monitorSpacingPixels = monitorSpacing * fovDetails.heightPixels;
cachedMonitorRadians[0] = -fovDetails.defaultDistanceVerticalRadians / 2; cachedMonitorRadians[0] = -fovDetails.defaultDistanceVerticalRadians / 2;
monitorDetailsList.forEach(monitorDetails => { verticalMonitorSort(monitorDetailsList).forEach(({monitorDetails, originalIndex}) => {
const monitorWrapDetails = monitorWrap(cachedMonitorRadians, topEdgeRadius, monitorSpacingPixels, monitorDetails.y, monitorDetails.height); const monitorWrapDetails = monitorWrap(cachedMonitorRadians, topEdgeRadius, monitorSpacingPixels, monitorDetails.y, monitorDetails.height);
const monitorCenterRadius = Math.sqrt(Math.pow(topEdgeRadius, 2) - Math.pow(monitorDetails.height / 2, 2)); const monitorCenterRadius = Math.sqrt(Math.pow(topEdgeRadius, 2) - Math.pow(monitorDetails.height / 2, 2));
const westPixels = monitorDetails.x + (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels; const westPixels = monitorDetails.x + (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels;
@ -270,6 +272,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
const westCenterPixels = westPixels + westCenterOriginPixels; const westCenterPixels = westPixels + westCenterOriginPixels;
monitorPlacements.push({ monitorPlacements.push({
originalIndex,
topLeftNoRotate: [ topLeftNoRotate: [
monitorCenterRadius, monitorCenterRadius,
@ -313,7 +316,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels; const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels;
// monitors make a flat wall in front of us, no wrapping // monitors make a flat wall in front of us, no wrapping
monitorDetailsList.forEach(monitorDetails => { monitorDetailsList.forEach((monitorDetails, index) => {
const upPixels = monitorDetails.y + (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels; const upPixels = monitorDetails.y + (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels;
const westPixels = monitorDetails.x + (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels; const westPixels = monitorDetails.x + (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels;
@ -325,6 +328,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
const upCenterPixels = upPixels + upCenterOriginPixels; const upCenterPixels = upPixels + upCenterOriginPixels;
monitorPlacements.push({ monitorPlacements.push({
originalIndex: index,
topLeftNoRotate: [ topLeftNoRotate: [
fovDetails.completeScreenDistancePixels, fovDetails.completeScreenDistancePixels,
westPixels, westPixels,
@ -353,11 +357,44 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
}); });
} }
// put them back in the original monitor order before returning
monitorPlacements.sort((a, b) => a.originalIndex - b.originalIndex);
Globals.logger.log_debug(`\t\t\tMonitor placements: ${JSON.stringify(monitorPlacements)}, cached values: ${JSON.stringify(cachedMonitorRadians)}`); Globals.logger.log_debug(`\t\t\tMonitor placements: ${JSON.stringify(monitorPlacements)}, cached values: ${JSON.stringify(cachedMonitorRadians)}`);
return monitorPlacements; return monitorPlacements;
} }
// sort monitors based on wrapping scheme before determining their placements to avoid odd gaps
function horizontalMonitorSort(monitors) {
return monitors.map((monitor, index) => ({originalIndex: index, monitorDetails: monitor})).sort((a, b) => {
const aMon = a.monitorDetails;
const bMon = b.monitorDetails;
// First compare by y-coordinate to form rows (top to bottom)
if (aMon.y !== bMon.y) {
return aMon.y - bMon.y;
}
// Then compare by x-coordinate within the same row (left to right)
return aMon.x - bMon.x;
});
}
// sort monitors based on wrapping scheme before determining their placements to avoid odd gaps
function verticalMonitorSort(monitors) {
return monitors.map((monitor, index) => ({originalIndex: index, monitorDetails: monitor})).sort((a, b) => {
const aMon = a.monitorDetails;
const bMon = b.monitorDetails;
// First compare by x-coordinate to form columns (left to right)
if (aMon.x !== bMon.x) {
return aMon.x - bMon.x;
}
// Then compare by y-coordinate within the same column (top to bottom)
return aMon.y - bMon.y;
});
}
var VirtualDisplaysActor = GObject.registerClass({ var VirtualDisplaysActor = GObject.registerClass({
Properties: { Properties: {
'target-monitor': GObject.ParamSpec.jsobject( 'target-monitor': GObject.ParamSpec.jsobject(
@ -484,6 +521,13 @@ var VirtualDisplaysActor = GObject.registerClass({
2.5, 2.5,
1.05 1.05
), ),
'headset-display-as-viewport-center': GObject.ParamSpec.boolean(
'headset-display-as-viewport-center',
'Headset display as viewport center',
'Whether to use the headset display as the reference point for the center of the viewport',
GObject.ParamFlags.READWRITE,
false
),
'lens-vector': GObject.ParamSpec.jsobject( 'lens-vector': GObject.ParamSpec.jsobject(
'lens-vector', 'lens-vector',
'Lens Vector', 'Lens Vector',
@ -587,6 +631,7 @@ var VirtualDisplaysActor = GObject.registerClass({
notifyToFunction('display-distance', this._handle_display_distance_properties_change); notifyToFunction('display-distance', this._handle_display_distance_properties_change);
notifyToFunction('monitor-wrapping-scheme', this._update_monitor_placements); notifyToFunction('monitor-wrapping-scheme', this._update_monitor_placements);
notifyToFunction('monitor-spacing', this._update_monitor_placements); notifyToFunction('monitor-spacing', this._update_monitor_placements);
notifyToFunction('headset-display-as-viewport-center', this._update_monitor_placements);
notifyToFunction('viewport-offset-x', this._update_monitor_placements); notifyToFunction('viewport-offset-x', this._update_monitor_placements);
notifyToFunction('viewport-offset-y', this._update_monitor_placements); notifyToFunction('viewport-offset-y', this._update_monitor_placements);
notifyToFunction('show-banner', this._handle_banner_update); notifyToFunction('show-banner', this._handle_banner_update);
@ -611,7 +656,7 @@ var VirtualDisplaysActor = GObject.registerClass({
Globals.logger.log_debug(`\t\t\tActor to display ratios: ${actorToDisplayRatios}, offsets: ${actorToDisplayOffsets}`); Globals.logger.log_debug(`\t\t\tActor to display ratios: ${actorToDisplayRatios}, offsets: ${actorToDisplayOffsets}`);
this._sorted_monitors.forEach(((monitor, index) => { this._all_monitors.forEach(((monitor, index) => {
Globals.logger.log_debug(`\t\t\tMonitor ${index}: ${monitor.x}, ${monitor.y}, ${monitor.width}, ${monitor.height}`); Globals.logger.log_debug(`\t\t\tMonitor ${index}: ${monitor.x}, ${monitor.y}, ${monitor.width}, ${monitor.height}`);
const containerActor = new Clutter.Actor({ const containerActor = new Clutter.Actor({
@ -721,13 +766,13 @@ var VirtualDisplaysActor = GObject.registerClass({
this.display_distance / this._display_distance_default(), this.display_distance / this._display_distance_default(),
this.smooth_follow_enabled, this.smooth_follow_enabled,
this._fov_details(), this._fov_details(),
this._sorted_monitors this._all_monitors
); );
if (this.focused_monitor_index !== focusedMonitorIndex) { if (this.focused_monitor_index !== focusedMonitorIndex) {
Globals.logger.log_debug(`Switching to monitor ${focusedMonitorIndex}`); Globals.logger.log_debug(`Switching to monitor ${focusedMonitorIndex}`);
this.focused_monitor_index = focusedMonitorIndex; this.focused_monitor_index = focusedMonitorIndex;
this.focused_monitor_details = this._sorted_monitors[focusedMonitorIndex]; this.focused_monitor_details = this._all_monitors[focusedMonitorIndex];
} }
} }
@ -776,72 +821,55 @@ var VirtualDisplaysActor = GObject.registerClass({
}; };
} }
_horizontal_monitor_sort() {
return [...this._all_monitors].sort((a, b) => {
// First compare by y-coordinate to form rows (top to bottom)
if (a.y !== b.y) {
return a.y - b.y;
}
// Then compare by x-coordinate within the same row (left to right)
return a.x - b.x;
});
}
_vertical_monitor_sort() {
return [...this._all_monitors].sort((a, b) => {
// First compare by x-coordinate to form columns (left to right)
if (a.x !== b.x) {
return a.x - b.x;
}
// Then compare by y-coordinate within the same column (top to bottom)
return a.y - b.y;
});
}
_update_monitor_placements() { _update_monitor_placements() {
// collect minimum and maximum x and y values of monitors try {
let actualWrapScheme = this.monitor_wrapping_scheme;
if (actualWrapScheme === 'automatic') {
const minX = Math.min(...this._all_monitors.map(monitor => monitor.x)); const minX = Math.min(...this._all_monitors.map(monitor => monitor.x));
const minY = Math.min(...this._all_monitors.map(monitor => monitor.y));
const maxX = Math.max(...this._all_monitors.map(monitor => monitor.x + monitor.width)); const maxX = Math.max(...this._all_monitors.map(monitor => monitor.x + monitor.width));
const minY = Math.min(...this._all_monitors.map(monitor => monitor.y));
const maxY = Math.max(...this._all_monitors.map(monitor => monitor.y + monitor.height)); const maxY = Math.max(...this._all_monitors.map(monitor => monitor.y + monitor.height));
// check if there are more monitors in the horizontal or vertical direction, prefer horizontal if equal // the beginning edges of the viewport if it's centered on all displays
if ((maxX - minX) / this.target_monitor.width >= (maxY - minY) / this.target_monitor.height) { const allDisplaysCenterXBegin = (minX + maxX) / 2 - this.target_monitor.width / 2;
actualWrapScheme = 'horizontal'; const allDisplaysCenterYBegin = (minY + maxY) / 2 - this.target_monitor.height / 2;
} else {
actualWrapScheme = 'vertical'; const viewportXBegin = this.headset_display_as_viewport_center ? this.target_monitor.x : allDisplaysCenterXBegin;
const viewportYBegin = this.headset_display_as_viewport_center ? this.target_monitor.y : allDisplaysCenterYBegin;
// collect minimum and maximum x and y values of monitors
let actualWrapScheme = this.monitor_wrapping_scheme;
if (actualWrapScheme === 'automatic') {
// check if there are more monitors in the horizontal or vertical direction, prefer horizontal if equal
if ((maxX - minX) / this.target_monitor.width >= (maxY - minY) / this.target_monitor.height) {
actualWrapScheme = 'horizontal';
} else {
actualWrapScheme = 'vertical';
}
} }
const fovDetails = this._fov_details();
this.lens_vector = [0.0, 0.0, -fovDetails.lensDistancePixels];
this.monitor_placements = monitorsToPlacements(
fovDetails,
// shift all monitors so they center around the viewport center, then adjusted by the offsets
this._all_monitors.map(monitor => ({
x: monitor.x - viewportXBegin - this.viewport_offset_x * this.target_monitor.width,
y: monitor.y - viewportYBegin + this.viewport_offset_y * this.target_monitor.height,
width: monitor.width,
height: monitor.height
})),
actualWrapScheme,
this.monitor_spacing / 1000.0
);
// normalize the center vectors
this._monitorsAsNormalizedVectors = this.monitor_placements.map(monitorVectors => {
const vector = monitorVectors.centerLook;
const length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1] + vector[2] * vector[2]);
return [vector[0] / length, vector[1] / length, vector[2] / length];
});
} catch (e) {
Globals.logger.log(`ERROR: virtualdisplaysactor.js _update_monitor_placements ${e.message}\n${e.stack}`);
} }
// use horizontal in all cases but vertical wrapping
this._sorted_monitors = actualWrapScheme === 'vertical' ?
this._vertical_monitor_sort() :
this._horizontal_monitor_sort();
const fovDetails = this._fov_details();
this.lens_vector = [0.0, 0.0, -fovDetails.lensDistancePixels];
this.monitor_placements = monitorsToPlacements(
fovDetails,
// shift all monitors so they center around the target monitor, then adjusted by the offsets
this._sorted_monitors.map(monitor => ({
x: monitor.x - this.target_monitor.x - this.viewport_offset_x * this.target_monitor.width,
y: monitor.y - this.target_monitor.y + this.viewport_offset_y * this.target_monitor.height,
width: monitor.width,
height: monitor.height
})),
actualWrapScheme,
this.monitor_spacing / 1000.0
);
// normalize the center vectors
this._monitorsAsNormalizedVectors = this.monitor_placements.map(monitorVectors => {
const vector = monitorVectors.centerLook;
const length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1] + vector[2] * vector[2]);
return [vector[0] / length, vector[1] / length, vector[2] / length];
});
} }
_handle_display_distance_properties_change() { _handle_display_distance_properties_change() {

@ -1 +1 @@
Subproject commit a66c9aee82989ea7e98da5a05fde621ffb47af83 Subproject commit 1cc7520d725df7f568ac78d9d19eb6f0881f1680

View File

@ -163,6 +163,15 @@
Automatically set the headset as the primary display upon connection Automatically set the headset as the primary display upon connection
</description> </description>
</key> </key>
<key name="headset-display-as-viewport-center" type="b">
<default>
false
</default>
<summary>Headset display as viewport center</summary>
<description>
Use the headset display as the reference point for the center of the viewport
</description>
</key>
<key name="use-highest-refresh-rate" type="b"> <key name="use-highest-refresh-rate" type="b">
<default> <default>
true true
@ -199,6 +208,24 @@
Disable physical displays when XR effect is enabled Disable physical displays when XR effect is enabled
</description> </description>
</key> </key>
<key name="remove-virtual-displays-on-disable" type="b">
<default>
true
</default>
<summary>Remove virtual displays on disable</summary>
<description>
Remove virtual displays when XR effect is disabled
</description>
</key>
<key name="legacy-follow-mode" type="b">
<default>
false
</default>
<summary>Legacy follow mode</summary>
<description>
Enable legacy follow mode
</description>
</key>
<key name="developer-mode" type="b"> <key name="developer-mode" type="b">
<default> <default>
false false

@ -1 +1 @@
Subproject commit 5ae87f35970486f12d3896fb6582a0b2d5ab15b2 Subproject commit cfe4c918e2d23b56bf77de62d0d469cc4e5a7c2c

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-06 15:32-0800\n" "POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -27,33 +27,33 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "" msgstr ""
#: src/connecteddevice.py:125 #: src/connecteddevice.py:134
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "" msgstr ""
#: src/connecteddevice.py:126 #: src/connecteddevice.py:135
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:133 #: src/connecteddevice.py:142
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "" msgstr ""
#: src/connecteddevice.py:134 #: src/connecteddevice.py:143
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:232 #: src/connecteddevice.py:248
msgid "" msgid ""
"Unable to add virtual displays on this machine. xdg-desktop-portal is " "Unable to add virtual displays on this machine. xdg-desktop-portal is "
"required." "required."
msgstr "" msgstr ""
#: src/connecteddevice.py:266 #: src/connecteddevice.py:282
msgid "Focused display" msgid "Focused display"
msgstr "" msgstr ""
#: src/connecteddevice.py:272 #: src/connecteddevice.py:288
msgid "All displays" msgid "All displays"
msgstr "" msgstr ""
@ -308,9 +308,7 @@ msgid "Viewport horizontal offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:293 #: src/gtk/connected-device.ui:293
msgid "" msgid "Move the viewport to the left or right of its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:322 #: src/gtk/connected-device.ui:322
@ -318,9 +316,7 @@ msgid "Viewport vertical offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:323 #: src/gtk/connected-device.ui:323
msgid "" msgid "Move the viewport up or down from its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365
@ -366,67 +362,113 @@ msgstr ""
msgid "Quickly toggle follow mode." msgid "Quickly toggle follow mode."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 #: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:500 #: src/gtk/connected-device.ui:505
msgid "Find optimal display config" msgid "Find optimal display config"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:501 #: src/gtk/connected-device.ui:506
msgid "" msgid ""
"Automatically modify the glasses display configuration for maximum " "Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in." "resolution and best scaling when plugged in."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:511 #: src/gtk/connected-device.ui:516
msgid "Use highest refresh rate" msgid "Use highest refresh rate"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:512 #: src/gtk/connected-device.ui:517
msgid "Refresh rate may affect performance, disable this to set it manually." msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:522 #: src/gtk/connected-device.ui:527
msgid "Center on glasses' display"
msgstr ""
#: src/gtk/connected-device.ui:528
msgid ""
"Center the viewport on the glasses' display, even if the display is not in "
"the middle."
msgstr ""
#: src/gtk/connected-device.ui:538
msgid "Always primary display" msgid "Always primary display"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:523 #: src/gtk/connected-device.ui:539
msgid "Automatically set the glasses as the primary display when plugged in." msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:533 #: src/gtk/connected-device.ui:549
msgid "Remove virtual displays on disable"
msgstr ""
#: src/gtk/connected-device.ui:550
msgid "Automatically remove virtual displays when the XR effect is disabled."
msgstr ""
#: src/gtk/connected-device.ui:560
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:561
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/connected-device.ui:571
msgid "All displays follow mode"
msgstr ""
#: src/gtk/connected-device.ui:572
msgid "Follow mode moves all displays, not just the focused one."
msgstr ""
#: src/gtk/connected-device.ui:588
msgid "Follow mode movement tracking"
msgstr ""
#: src/gtk/connected-device.ui:589
msgid "Choose which movements should be tracked in follow mode."
msgstr ""
#: src/gtk/connected-device.ui:604
msgid "Horizontal"
msgstr ""
#: src/gtk/connected-device.ui:624
msgid "Vertical"
msgstr ""
#: src/gtk/connected-device.ui:644
msgid "Tilt/roll"
msgstr ""
#: src/gtk/connected-device.ui:662
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:534 #: src/gtk/connected-device.ui:663
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
"movements, jumps ahead, or is very shaky." "movements, jumps ahead, or is very shaky."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:552 #: src/gtk/connected-device.ui:681
msgid "Default" msgid "Default"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:564 #: src/gtk/connected-device.ui:693
msgid "Text Scaling" msgid "Text Scaling"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:565 #: src/gtk/connected-device.ui:694
msgid "Scaling text below 1.0 will simulate a higher resolution display" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:595
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:596
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/display-distance-dialog.ui:9 #: src/gtk/display-distance-dialog.ui:9
msgid "Show full range" msgid "Show full range"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-06 15:32-0800\n" "POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-02 20:54-0700\n" "PO-Revision-Date: 2024-08-02 20:54-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@ -29,36 +29,36 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "Diese Funktion wird von Ihrem Gerät derzeit nicht unterstützt." msgstr "Diese Funktion wird von Ihrem Gerät derzeit nicht unterstützt."
#: src/connecteddevice.py:125 #: src/connecteddevice.py:134
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Display-Entfernung" msgstr "Display-Entfernung"
#: src/connecteddevice.py:126 #: src/connecteddevice.py:135
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:133 #: src/connecteddevice.py:142
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Display-Entfernung" msgstr "Display-Entfernung"
#: src/connecteddevice.py:134 #: src/connecteddevice.py:143
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:232 #: src/connecteddevice.py:248
msgid "" msgid ""
"Unable to add virtual displays on this machine. xdg-desktop-portal is " "Unable to add virtual displays on this machine. xdg-desktop-portal is "
"required." "required."
msgstr "" msgstr ""
#: src/connecteddevice.py:266 #: src/connecteddevice.py:282
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "Display-Entfernung" msgstr "Display-Entfernung"
#: src/connecteddevice.py:272 #: src/connecteddevice.py:288
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "Gebogenes Display" msgstr "Gebogenes Display"
@ -320,9 +320,7 @@ msgid "Viewport horizontal offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:293 #: src/gtk/connected-device.ui:293
msgid "" msgid "Move the viewport to the left or right of its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:322 #: src/gtk/connected-device.ui:322
@ -330,9 +328,7 @@ msgid "Viewport vertical offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:323 #: src/gtk/connected-device.ui:323
msgid "" msgid "Move the viewport up or down from its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365
@ -383,15 +379,15 @@ msgstr "Folgemodus-Tastenkombination umschalten"
msgid "Quickly toggle follow mode." msgid "Quickly toggle follow mode."
msgstr "Schnell den Folgemodus wechseln." msgstr "Schnell den Folgemodus wechseln."
#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 #: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "Erweiterte Einstellungen" msgstr "Erweiterte Einstellungen"
#: src/gtk/connected-device.ui:500 #: src/gtk/connected-device.ui:505
msgid "Find optimal display config" msgid "Find optimal display config"
msgstr "Optimale Display-Konfiguration finden" msgstr "Optimale Display-Konfiguration finden"
#: src/gtk/connected-device.ui:501 #: src/gtk/connected-device.ui:506
msgid "" msgid ""
"Automatically modify the glasses display configuration for maximum " "Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in." "resolution and best scaling when plugged in."
@ -399,31 +395,87 @@ msgstr ""
"Ändern Sie die Display-Konfiguration der Brille automatisch zur maximalen " "Ändern Sie die Display-Konfiguration der Brille automatisch zur maximalen "
"Auflösung und besten Skalierung, wenn sie angeschlossen ist." "Auflösung und besten Skalierung, wenn sie angeschlossen ist."
#: src/gtk/connected-device.ui:511 #: src/gtk/connected-device.ui:516
msgid "Use highest refresh rate" msgid "Use highest refresh rate"
msgstr "Höchste Bildwiederholrate verwenden" msgstr "Höchste Bildwiederholrate verwenden"
#: src/gtk/connected-device.ui:512 #: src/gtk/connected-device.ui:517
msgid "Refresh rate may affect performance, disable this to set it manually." msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr "" msgstr ""
"Die Bildwiederholrate kann die Leistung beeinflussen, deaktivieren Sie dies, " "Die Bildwiederholrate kann die Leistung beeinflussen, deaktivieren Sie dies, "
"um sie manuell festzulegen." "um sie manuell festzulegen."
#: src/gtk/connected-device.ui:522 #: src/gtk/connected-device.ui:527
msgid "Center on glasses' display"
msgstr ""
#: src/gtk/connected-device.ui:528
msgid ""
"Center the viewport on the glasses' display, even if the display is not in "
"the middle."
msgstr ""
#: src/gtk/connected-device.ui:538
msgid "Always primary display" msgid "Always primary display"
msgstr "Immer primäres Display" msgstr "Immer primäres Display"
#: src/gtk/connected-device.ui:523 #: src/gtk/connected-device.ui:539
msgid "Automatically set the glasses as the primary display when plugged in." msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "" msgstr ""
"Setzen Sie die Brille automatisch als primäres Display, wenn sie " "Setzen Sie die Brille automatisch als primäres Display, wenn sie "
"angeschlossen ist." "angeschlossen ist."
#: src/gtk/connected-device.ui:533 #: src/gtk/connected-device.ui:549
#, fuzzy
msgid "Remove virtual displays on disable"
msgstr "Gebogenes Display"
#: src/gtk/connected-device.ui:550
msgid "Automatically remove virtual displays when the XR effect is disabled."
msgstr ""
#: src/gtk/connected-device.ui:560
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:561
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/connected-device.ui:571
#, fuzzy
msgid "All displays follow mode"
msgstr "Gebogenes Display"
#: src/gtk/connected-device.ui:572
msgid "Follow mode moves all displays, not just the focused one."
msgstr ""
#: src/gtk/connected-device.ui:588
msgid "Follow mode movement tracking"
msgstr ""
#: src/gtk/connected-device.ui:589
msgid "Choose which movements should be tracked in follow mode."
msgstr ""
#: src/gtk/connected-device.ui:604
msgid "Horizontal"
msgstr ""
#: src/gtk/connected-device.ui:624
msgid "Vertical"
msgstr ""
#: src/gtk/connected-device.ui:644
msgid "Tilt/roll"
msgstr ""
#: src/gtk/connected-device.ui:662
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Bewegungsvorausschau" msgstr "Bewegungsvorausschau"
#: src/gtk/connected-device.ui:534 #: src/gtk/connected-device.ui:663
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
@ -434,26 +486,18 @@ msgstr ""
"es sei denn, das virtuelle Display hängt hinter Ihren Kopfbewegungen " "es sei denn, das virtuelle Display hängt hinter Ihren Kopfbewegungen "
"hinterher, springt vor oder ist sehr wackelig." "hinterher, springt vor oder ist sehr wackelig."
#: src/gtk/connected-device.ui:552 #: src/gtk/connected-device.ui:681
msgid "Default" msgid "Default"
msgstr "Standard" msgstr "Standard"
#: src/gtk/connected-device.ui:564 #: src/gtk/connected-device.ui:693
msgid "Text Scaling" msgid "Text Scaling"
msgstr "Textskalierung" msgstr "Textskalierung"
#: src/gtk/connected-device.ui:565 #: src/gtk/connected-device.ui:694
msgid "Scaling text below 1.0 will simulate a higher resolution display" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "Text unter 1.0 skalieren simuliert ein höher aufgelöstes Display" msgstr "Text unter 1.0 skalieren simuliert ein höher aufgelöstes Display"
#: src/gtk/connected-device.ui:595
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:596
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/display-distance-dialog.ui:9 #: src/gtk/display-distance-dialog.ui:9
msgid "Show full range" msgid "Show full range"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-06 15:32-0800\n" "POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-02 20:55-0700\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Spanish <es@tp.org.es>\n" "Language-Team: Spanish <es@tp.org.es>\n"
@ -28,36 +28,36 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "Esta función no es compatible con tu dispositivo en este momento." msgstr "Esta función no es compatible con tu dispositivo en este momento."
#: src/connecteddevice.py:125 #: src/connecteddevice.py:134
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Distancia de la pantalla" msgstr "Distancia de la pantalla"
#: src/connecteddevice.py:126 #: src/connecteddevice.py:135
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:133 #: src/connecteddevice.py:142
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Distancia de la pantalla" msgstr "Distancia de la pantalla"
#: src/connecteddevice.py:134 #: src/connecteddevice.py:143
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:232 #: src/connecteddevice.py:248
msgid "" msgid ""
"Unable to add virtual displays on this machine. xdg-desktop-portal is " "Unable to add virtual displays on this machine. xdg-desktop-portal is "
"required." "required."
msgstr "" msgstr ""
#: src/connecteddevice.py:266 #: src/connecteddevice.py:282
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "Distancia de la pantalla" msgstr "Distancia de la pantalla"
#: src/connecteddevice.py:272 #: src/connecteddevice.py:288
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "Pantalla curvada" msgstr "Pantalla curvada"
@ -319,9 +319,7 @@ msgid "Viewport horizontal offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:293 #: src/gtk/connected-device.ui:293
msgid "" msgid "Move the viewport to the left or right of its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:322 #: src/gtk/connected-device.ui:322
@ -329,9 +327,7 @@ msgid "Viewport vertical offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:323 #: src/gtk/connected-device.ui:323
msgid "" msgid "Move the viewport up or down from its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365
@ -381,15 +377,15 @@ msgstr "Atajo para alternar el modo de seguimiento"
msgid "Quickly toggle follow mode." msgid "Quickly toggle follow mode."
msgstr "Activar el modo de seguimiento." msgstr "Activar el modo de seguimiento."
#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 #: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "Configuración Avanzada" msgstr "Configuración Avanzada"
#: src/gtk/connected-device.ui:500 #: src/gtk/connected-device.ui:505
msgid "Find optimal display config" msgid "Find optimal display config"
msgstr "Encuentre la configuración de pantalla óptima" msgstr "Encuentre la configuración de pantalla óptima"
#: src/gtk/connected-device.ui:501 #: src/gtk/connected-device.ui:506
msgid "" msgid ""
"Automatically modify the glasses display configuration for maximum " "Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in." "resolution and best scaling when plugged in."
@ -398,30 +394,86 @@ msgstr ""
"obtener la máxima resolución y la mejor escalabilidad cuando estén " "obtener la máxima resolución y la mejor escalabilidad cuando estén "
"enchufadas." "enchufadas."
#: src/gtk/connected-device.ui:511 #: src/gtk/connected-device.ui:516
msgid "Use highest refresh rate" msgid "Use highest refresh rate"
msgstr "Utilizar la frecuencia de actualización más alta" msgstr "Utilizar la frecuencia de actualización más alta"
#: src/gtk/connected-device.ui:512 #: src/gtk/connected-device.ui:517
msgid "Refresh rate may affect performance, disable this to set it manually." msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr "" msgstr ""
"La frecuencia de actualización puede afectar el rendimiento, deshabilite " "La frecuencia de actualización puede afectar el rendimiento, deshabilite "
"esto para configurarlo manualmente." "esto para configurarlo manualmente."
#: src/gtk/connected-device.ui:522 #: src/gtk/connected-device.ui:527
msgid "Center on glasses' display"
msgstr ""
#: src/gtk/connected-device.ui:528
msgid ""
"Center the viewport on the glasses' display, even if the display is not in "
"the middle."
msgstr ""
#: src/gtk/connected-device.ui:538
msgid "Always primary display" msgid "Always primary display"
msgstr "Siempre como pantalla principal" msgstr "Siempre como pantalla principal"
#: src/gtk/connected-device.ui:523 #: src/gtk/connected-device.ui:539
msgid "Automatically set the glasses as the primary display when plugged in." msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "" msgstr ""
"Automáticamente configurar las gafas como pantalla principal al enchufarse." "Automáticamente configurar las gafas como pantalla principal al enchufarse."
#: src/gtk/connected-device.ui:533 #: src/gtk/connected-device.ui:549
#, fuzzy
msgid "Remove virtual displays on disable"
msgstr "Pantalla curvada"
#: src/gtk/connected-device.ui:550
msgid "Automatically remove virtual displays when the XR effect is disabled."
msgstr ""
#: src/gtk/connected-device.ui:560
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:561
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/connected-device.ui:571
#, fuzzy
msgid "All displays follow mode"
msgstr "Pantalla curvada"
#: src/gtk/connected-device.ui:572
msgid "Follow mode moves all displays, not just the focused one."
msgstr ""
#: src/gtk/connected-device.ui:588
msgid "Follow mode movement tracking"
msgstr ""
#: src/gtk/connected-device.ui:589
msgid "Choose which movements should be tracked in follow mode."
msgstr ""
#: src/gtk/connected-device.ui:604
msgid "Horizontal"
msgstr ""
#: src/gtk/connected-device.ui:624
msgid "Vertical"
msgstr ""
#: src/gtk/connected-device.ui:644
msgid "Tilt/roll"
msgstr ""
#: src/gtk/connected-device.ui:662
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Anticipación de movimiento" msgstr "Anticipación de movimiento"
#: src/gtk/connected-device.ui:534 #: src/gtk/connected-device.ui:663
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
@ -432,28 +484,20 @@ msgstr ""
"predeterminado a menos que la pantalla virtual se retrase detrás de los " "predeterminado a menos que la pantalla virtual se retrase detrás de los "
"movimientos de la cabeza, se adelante o sea muy inestable." "movimientos de la cabeza, se adelante o sea muy inestable."
#: src/gtk/connected-device.ui:552 #: src/gtk/connected-device.ui:681
msgid "Default" msgid "Default"
msgstr "Predeterminado" msgstr "Predeterminado"
#: src/gtk/connected-device.ui:564 #: src/gtk/connected-device.ui:693
msgid "Text Scaling" msgid "Text Scaling"
msgstr "Escalado de Texto" msgstr "Escalado de Texto"
#: src/gtk/connected-device.ui:565 #: src/gtk/connected-device.ui:694
msgid "Scaling text below 1.0 will simulate a higher resolution display" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
"Escalando el texto por debajo de 1.0 simulará una pantalla de mayor " "Escalando el texto por debajo de 1.0 simulará una pantalla de mayor "
"resolución" "resolución"
#: src/gtk/connected-device.ui:595
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:596
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/display-distance-dialog.ui:9 #: src/gtk/display-distance-dialog.ui:9
msgid "Show full range" msgid "Show full range"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-06 15:32-0800\n" "POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-02 20:54-0700\n" "PO-Revision-Date: 2024-08-02 20:54-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: French <traduc@traduc.org>\n" "Language-Team: French <traduc@traduc.org>\n"
@ -31,36 +31,36 @@ msgstr ""
"Cette fonctionnalité n'est actuellement pas prise en charge par votre " "Cette fonctionnalité n'est actuellement pas prise en charge par votre "
"appareil." "appareil."
#: src/connecteddevice.py:125 #: src/connecteddevice.py:134
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Distance d'affichage" msgstr "Distance d'affichage"
#: src/connecteddevice.py:126 #: src/connecteddevice.py:135
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:133 #: src/connecteddevice.py:142
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Distance d'affichage" msgstr "Distance d'affichage"
#: src/connecteddevice.py:134 #: src/connecteddevice.py:143
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:232 #: src/connecteddevice.py:248
msgid "" msgid ""
"Unable to add virtual displays on this machine. xdg-desktop-portal is " "Unable to add virtual displays on this machine. xdg-desktop-portal is "
"required." "required."
msgstr "" msgstr ""
#: src/connecteddevice.py:266 #: src/connecteddevice.py:282
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "Distance d'affichage" msgstr "Distance d'affichage"
#: src/connecteddevice.py:272 #: src/connecteddevice.py:288
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "Affichage incurvé" msgstr "Affichage incurvé"
@ -322,9 +322,7 @@ msgid "Viewport horizontal offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:293 #: src/gtk/connected-device.ui:293
msgid "" msgid "Move the viewport to the left or right of its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:322 #: src/gtk/connected-device.ui:322
@ -332,9 +330,7 @@ msgid "Viewport vertical offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:323 #: src/gtk/connected-device.ui:323
msgid "" msgid "Move the viewport up or down from its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365
@ -384,15 +380,15 @@ msgstr "Raccourci de basculement du mode de suivi"
msgid "Quickly toggle follow mode." msgid "Quickly toggle follow mode."
msgstr "Basculer rapidement le mode de suivi." msgstr "Basculer rapidement le mode de suivi."
#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 #: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "Paramètres avancés" msgstr "Paramètres avancés"
#: src/gtk/connected-device.ui:500 #: src/gtk/connected-device.ui:505
msgid "Find optimal display config" msgid "Find optimal display config"
msgstr "Trouver la configuration d'affichage optimale" msgstr "Trouver la configuration d'affichage optimale"
#: src/gtk/connected-device.ui:501 #: src/gtk/connected-device.ui:506
msgid "" msgid ""
"Automatically modify the glasses display configuration for maximum " "Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in." "resolution and best scaling when plugged in."
@ -401,31 +397,87 @@ msgstr ""
"résolution maximale et une meilleure mise à l'échelle lorsque elles sont " "résolution maximale et une meilleure mise à l'échelle lorsque elles sont "
"branchées." "branchées."
#: src/gtk/connected-device.ui:511 #: src/gtk/connected-device.ui:516
msgid "Use highest refresh rate" msgid "Use highest refresh rate"
msgstr "Utiliser le taux de rafraîchissement le plus élevé" msgstr "Utiliser le taux de rafraîchissement le plus élevé"
#: src/gtk/connected-device.ui:512 #: src/gtk/connected-device.ui:517
msgid "Refresh rate may affect performance, disable this to set it manually." 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-" "Un taux de rafraîchissement élevé peut affecter les performances, désactivez-"
"le pour le définir manuellement." "le pour le définir manuellement."
#: src/gtk/connected-device.ui:522 #: src/gtk/connected-device.ui:527
msgid "Center on glasses' display"
msgstr ""
#: src/gtk/connected-device.ui:528
msgid ""
"Center the viewport on the glasses' display, even if the display is not in "
"the middle."
msgstr ""
#: src/gtk/connected-device.ui:538
msgid "Always primary display" msgid "Always primary display"
msgstr "Affichage principal en permanence" msgstr "Affichage principal en permanence"
#: src/gtk/connected-device.ui:523 #: src/gtk/connected-device.ui:539
msgid "Automatically set the glasses as the primary display when plugged in." msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "" msgstr ""
"Définissez automatiquement les lunettes comme affichage principal " "Définissez automatiquement les lunettes comme affichage principal "
"lorsqu'elles sont branchées." "lorsqu'elles sont branchées."
#: src/gtk/connected-device.ui:533 #: src/gtk/connected-device.ui:549
#, fuzzy
msgid "Remove virtual displays on disable"
msgstr "Affichage incurvé"
#: src/gtk/connected-device.ui:550
msgid "Automatically remove virtual displays when the XR effect is disabled."
msgstr ""
#: src/gtk/connected-device.ui:560
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:561
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/connected-device.ui:571
#, fuzzy
msgid "All displays follow mode"
msgstr "Affichage incurvé"
#: src/gtk/connected-device.ui:572
msgid "Follow mode moves all displays, not just the focused one."
msgstr ""
#: src/gtk/connected-device.ui:588
msgid "Follow mode movement tracking"
msgstr ""
#: src/gtk/connected-device.ui:589
msgid "Choose which movements should be tracked in follow mode."
msgstr ""
#: src/gtk/connected-device.ui:604
msgid "Horizontal"
msgstr ""
#: src/gtk/connected-device.ui:624
msgid "Vertical"
msgstr ""
#: src/gtk/connected-device.ui:644
msgid "Tilt/roll"
msgstr ""
#: src/gtk/connected-device.ui:662
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Prédiction de mouvement" msgstr "Prédiction de mouvement"
#: src/gtk/connected-device.ui:534 #: src/gtk/connected-device.ui:663
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
@ -435,28 +487,20 @@ msgstr ""
"le temps de rendu. Restez sur la valeur par défaut à moins que l'affichage " "le temps de rendu. Restez sur la valeur par défaut à moins que l'affichage "
"virtuel ne soit lent, ne saute pas ou ne soit très instable." "virtuel ne soit lent, ne saute pas ou ne soit très instable."
#: src/gtk/connected-device.ui:552 #: src/gtk/connected-device.ui:681
msgid "Default" msgid "Default"
msgstr "Par défaut" msgstr "Par défaut"
#: src/gtk/connected-device.ui:564 #: src/gtk/connected-device.ui:693
msgid "Text Scaling" msgid "Text Scaling"
msgstr "Mise à l'échelle du texte" msgstr "Mise à l'échelle du texte"
#: src/gtk/connected-device.ui:565 #: src/gtk/connected-device.ui:694
msgid "Scaling text below 1.0 will simulate a higher resolution display" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
"Une mise à l'échelle du texte en dessous de 1.0 simulera un affichage de " "Une mise à l'échelle du texte en dessous de 1.0 simulera un affichage de "
"plus haute résolution" "plus haute résolution"
#: src/gtk/connected-device.ui:595
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:596
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/display-distance-dialog.ui:9 #: src/gtk/display-distance-dialog.ui:9
msgid "Show full range" msgid "Show full range"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-06 15:32-0800\n" "POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-02 21:14-0700\n" "PO-Revision-Date: 2024-08-02 21:14-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Italian <tp@lists.linux.it>\n" "Language-Team: Italian <tp@lists.linux.it>\n"
@ -29,36 +29,36 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "Questa funzione non è attualmente supportata sul tuo dispositivo." msgstr "Questa funzione non è attualmente supportata sul tuo dispositivo."
#: src/connecteddevice.py:125 #: src/connecteddevice.py:134
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Distanza del display" msgstr "Distanza del display"
#: src/connecteddevice.py:126 #: src/connecteddevice.py:135
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:133 #: src/connecteddevice.py:142
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Distanza del display" msgstr "Distanza del display"
#: src/connecteddevice.py:134 #: src/connecteddevice.py:143
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:232 #: src/connecteddevice.py:248
msgid "" msgid ""
"Unable to add virtual displays on this machine. xdg-desktop-portal is " "Unable to add virtual displays on this machine. xdg-desktop-portal is "
"required." "required."
msgstr "" msgstr ""
#: src/connecteddevice.py:266 #: src/connecteddevice.py:282
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "Distanza del display" msgstr "Distanza del display"
#: src/connecteddevice.py:272 #: src/connecteddevice.py:288
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "Display curvo" msgstr "Display curvo"
@ -320,9 +320,7 @@ msgid "Viewport horizontal offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:293 #: src/gtk/connected-device.ui:293
msgid "" msgid "Move the viewport to the left or right of its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:322 #: src/gtk/connected-device.ui:322
@ -330,9 +328,7 @@ msgid "Viewport vertical offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:323 #: src/gtk/connected-device.ui:323
msgid "" msgid "Move the viewport up or down from its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365
@ -383,15 +379,15 @@ msgstr "Scorciatoia per attivare/disattivare la modalità di inseguimento"
msgid "Quickly toggle follow mode." msgid "Quickly toggle follow mode."
msgstr "Attivazione/disattivazione rapida della modalità di inseguimento." msgstr "Attivazione/disattivazione rapida della modalità di inseguimento."
#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 #: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "Impostazioni avanzate" msgstr "Impostazioni avanzate"
#: src/gtk/connected-device.ui:500 #: src/gtk/connected-device.ui:505
msgid "Find optimal display config" msgid "Find optimal display config"
msgstr "Trova la configurazione ottimale del display" msgstr "Trova la configurazione ottimale del display"
#: src/gtk/connected-device.ui:501 #: src/gtk/connected-device.ui:506
msgid "" msgid ""
"Automatically modify the glasses display configuration for maximum " "Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in." "resolution and best scaling when plugged in."
@ -399,31 +395,87 @@ msgstr ""
"Modifica automaticamente la configurazione del display degli occhiali per " "Modifica automaticamente la configurazione del display degli occhiali per "
"ottenere la massima risoluzione e la migliore scalabilità quando collegati." "ottenere la massima risoluzione e la migliore scalabilità quando collegati."
#: src/gtk/connected-device.ui:511 #: src/gtk/connected-device.ui:516
msgid "Use highest refresh rate" msgid "Use highest refresh rate"
msgstr "Usa la frequenza di aggiornamento più elevata" msgstr "Usa la frequenza di aggiornamento più elevata"
#: src/gtk/connected-device.ui:512 #: src/gtk/connected-device.ui:517
msgid "Refresh rate may affect performance, disable this to set it manually." msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr "" msgstr ""
"La frequenza di aggiornamento potrebbe influire sulle prestazioni, " "La frequenza di aggiornamento potrebbe influire sulle prestazioni, "
"disabilitala per impostarla manualmente." "disabilitala per impostarla manualmente."
#: src/gtk/connected-device.ui:522 #: src/gtk/connected-device.ui:527
msgid "Center on glasses' display"
msgstr ""
#: src/gtk/connected-device.ui:528
msgid ""
"Center the viewport on the glasses' display, even if the display is not in "
"the middle."
msgstr ""
#: src/gtk/connected-device.ui:538
msgid "Always primary display" msgid "Always primary display"
msgstr "Imposta sempre come display primario" msgstr "Imposta sempre come display primario"
#: src/gtk/connected-device.ui:523 #: src/gtk/connected-device.ui:539
msgid "Automatically set the glasses as the primary display when plugged in." msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "" msgstr ""
"Imposta automaticamente gli occhiali come display primario quando sono " "Imposta automaticamente gli occhiali come display primario quando sono "
"collegati." "collegati."
#: src/gtk/connected-device.ui:533 #: src/gtk/connected-device.ui:549
#, fuzzy
msgid "Remove virtual displays on disable"
msgstr "Display curvo"
#: src/gtk/connected-device.ui:550
msgid "Automatically remove virtual displays when the XR effect is disabled."
msgstr ""
#: src/gtk/connected-device.ui:560
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:561
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/connected-device.ui:571
#, fuzzy
msgid "All displays follow mode"
msgstr "Display curvo"
#: src/gtk/connected-device.ui:572
msgid "Follow mode moves all displays, not just the focused one."
msgstr ""
#: src/gtk/connected-device.ui:588
msgid "Follow mode movement tracking"
msgstr ""
#: src/gtk/connected-device.ui:589
msgid "Choose which movements should be tracked in follow mode."
msgstr ""
#: src/gtk/connected-device.ui:604
msgid "Horizontal"
msgstr ""
#: src/gtk/connected-device.ui:624
msgid "Vertical"
msgstr ""
#: src/gtk/connected-device.ui:644
msgid "Tilt/roll"
msgstr ""
#: src/gtk/connected-device.ui:662
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Anticipo del movimento" msgstr "Anticipo del movimento"
#: src/gtk/connected-device.ui:534 #: src/gtk/connected-device.ui:663
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
@ -434,28 +486,20 @@ msgstr ""
"che il display virtuale non rimanga indietro rispetto ai tuoi movimenti, non " "che il display virtuale non rimanga indietro rispetto ai tuoi movimenti, non "
"salti in avanti o sia molto tremolante." "salti in avanti o sia molto tremolante."
#: src/gtk/connected-device.ui:552 #: src/gtk/connected-device.ui:681
msgid "Default" msgid "Default"
msgstr "Predefinito" msgstr "Predefinito"
#: src/gtk/connected-device.ui:564 #: src/gtk/connected-device.ui:693
msgid "Text Scaling" msgid "Text Scaling"
msgstr "Ridimensionamento del testo" msgstr "Ridimensionamento del testo"
#: src/gtk/connected-device.ui:565 #: src/gtk/connected-device.ui:694
msgid "Scaling text below 1.0 will simulate a higher resolution display" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
"Ridimensionando il testo sotto a 1.0 si simula una maggiore risoluzione del " "Ridimensionando il testo sotto a 1.0 si simula una maggiore risoluzione del "
"display" "display"
#: src/gtk/connected-device.ui:595
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:596
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/display-distance-dialog.ui:9 #: src/gtk/display-distance-dialog.ui:9
msgid "Show full range" msgid "Show full range"
msgstr "" msgstr ""

View File

@ -11,7 +11,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-06 15:32-0800\n" "POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-02 20:55-0700\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n" "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
@ -31,36 +31,36 @@ msgstr "メガネを3Dモードに切り替え、表示の幅を2倍にします
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "現在接続されているデバイスはこの機能に対応していません。" msgstr "現在接続されているデバイスはこの機能に対応していません。"
#: src/connecteddevice.py:125 #: src/connecteddevice.py:134
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "ディスプレイ距離" msgstr "ディスプレイ距離"
#: src/connecteddevice.py:126 #: src/connecteddevice.py:135
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:133 #: src/connecteddevice.py:142
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "ディスプレイ距離" msgstr "ディスプレイ距離"
#: src/connecteddevice.py:134 #: src/connecteddevice.py:143
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:232 #: src/connecteddevice.py:248
msgid "" msgid ""
"Unable to add virtual displays on this machine. xdg-desktop-portal is " "Unable to add virtual displays on this machine. xdg-desktop-portal is "
"required." "required."
msgstr "" msgstr ""
#: src/connecteddevice.py:266 #: src/connecteddevice.py:282
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "ディスプレイ距離" msgstr "ディスプレイ距離"
#: src/connecteddevice.py:272 #: src/connecteddevice.py:288
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "曲面ディスプレイ" msgstr "曲面ディスプレイ"
@ -322,9 +322,7 @@ msgid "Viewport horizontal offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:293 #: src/gtk/connected-device.ui:293
msgid "" msgid "Move the viewport to the left or right of its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:322 #: src/gtk/connected-device.ui:322
@ -332,9 +330,7 @@ msgid "Viewport vertical offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:323 #: src/gtk/connected-device.ui:323
msgid "" msgid "Move the viewport up or down from its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365
@ -384,15 +380,15 @@ msgstr "フォローモードの切り替え"
msgid "Quickly toggle follow mode." msgid "Quickly toggle follow mode."
msgstr "フォローモードのオン/オフをすばやく切り替えます。" msgstr "フォローモードのオン/オフをすばやく切り替えます。"
#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 #: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "詳細設定" msgstr "詳細設定"
#: src/gtk/connected-device.ui:500 #: src/gtk/connected-device.ui:505
msgid "Find optimal display config" msgid "Find optimal display config"
msgstr "ディスプレイ設定を最適化する" msgstr "ディスプレイ設定を最適化する"
#: src/gtk/connected-device.ui:501 #: src/gtk/connected-device.ui:506
msgid "" msgid ""
"Automatically modify the glasses display configuration for maximum " "Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in." "resolution and best scaling when plugged in."
@ -400,29 +396,85 @@ msgstr ""
"メガネ接続時、最大解像度と最適なスケーリングのためにディスプレイ設定を自動的" "メガネ接続時、最大解像度と最適なスケーリングのためにディスプレイ設定を自動的"
"に変更します。" "に変更します。"
#: src/gtk/connected-device.ui:511 #: src/gtk/connected-device.ui:516
msgid "Use highest refresh rate" msgid "Use highest refresh rate"
msgstr "最大のリフレッシュレートを使用する" msgstr "最大のリフレッシュレートを使用する"
#: src/gtk/connected-device.ui:512 #: src/gtk/connected-device.ui:517
msgid "Refresh rate may affect performance, disable this to set it manually." msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr "" msgstr ""
"リフレッシュレートはパフォーマンスに影響を与える可能性があります。手動で設定" "リフレッシュレートはパフォーマンスに影響を与える可能性があります。手動で設定"
"する場合は無効にしてください。" "する場合は無効にしてください。"
#: src/gtk/connected-device.ui:522 #: src/gtk/connected-device.ui:527
msgid "Center on glasses' display"
msgstr ""
#: src/gtk/connected-device.ui:528
msgid ""
"Center the viewport on the glasses' display, even if the display is not in "
"the middle."
msgstr ""
#: src/gtk/connected-device.ui:538
msgid "Always primary display" msgid "Always primary display"
msgstr "常にプライマリディスプレイにする" msgstr "常にプライマリディスプレイにする"
#: src/gtk/connected-device.ui:523 #: src/gtk/connected-device.ui:539
msgid "Automatically set the glasses as the primary display when plugged in." msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "メガネ接続時、自動的にプライマリディスプレイにします。" msgstr "メガネ接続時、自動的にプライマリディスプレイにします。"
#: src/gtk/connected-device.ui:533 #: src/gtk/connected-device.ui:549
#, fuzzy
msgid "Remove virtual displays on disable"
msgstr "曲面ディスプレイ"
#: src/gtk/connected-device.ui:550
msgid "Automatically remove virtual displays when the XR effect is disabled."
msgstr ""
#: src/gtk/connected-device.ui:560
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:561
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/connected-device.ui:571
#, fuzzy
msgid "All displays follow mode"
msgstr "曲面ディスプレイ"
#: src/gtk/connected-device.ui:572
msgid "Follow mode moves all displays, not just the focused one."
msgstr ""
#: src/gtk/connected-device.ui:588
msgid "Follow mode movement tracking"
msgstr ""
#: src/gtk/connected-device.ui:589
msgid "Choose which movements should be tracked in follow mode."
msgstr ""
#: src/gtk/connected-device.ui:604
msgid "Horizontal"
msgstr ""
#: src/gtk/connected-device.ui:624
msgid "Vertical"
msgstr ""
#: src/gtk/connected-device.ui:644
msgid "Tilt/roll"
msgstr ""
#: src/gtk/connected-device.ui:662
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "動きの先読み" msgstr "動きの先読み"
#: src/gtk/connected-device.ui:534 #: src/gtk/connected-device.ui:663
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
@ -432,28 +484,20 @@ msgstr ""
"ます。仮想ディスプレイが頭の動きに遅れたり、先に進んだり、非常に揺れたりする" "ます。仮想ディスプレイが頭の動きに遅れたり、先に進んだり、非常に揺れたりする"
"場合を除き、デフォルトのままで問題ありません。" "場合を除き、デフォルトのままで問題ありません。"
#: src/gtk/connected-device.ui:552 #: src/gtk/connected-device.ui:681
msgid "Default" msgid "Default"
msgstr "デフォルト" msgstr "デフォルト"
#: src/gtk/connected-device.ui:564 #: src/gtk/connected-device.ui:693
msgid "Text Scaling" msgid "Text Scaling"
msgstr "テキストスケーリング" msgstr "テキストスケーリング"
#: src/gtk/connected-device.ui:565 #: src/gtk/connected-device.ui:694
msgid "Scaling text below 1.0 will simulate a higher resolution display" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
"テキストを1.0未満にスケーリングすると、高解像度ディスプレイをシミュレートしま" "テキストを1.0未満にスケーリングすると、高解像度ディスプレイをシミュレートしま"
"す。" "す。"
#: src/gtk/connected-device.ui:595
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:596
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/display-distance-dialog.ui:9 #: src/gtk/display-distance-dialog.ui:9
msgid "Show full range" msgid "Show full range"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-06 15:32-0800\n" "POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-16 10:26-0700\n" "PO-Revision-Date: 2024-08-16 10:26-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@ -28,33 +28,33 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "" msgstr ""
#: src/connecteddevice.py:125 #: src/connecteddevice.py:134
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "" msgstr ""
#: src/connecteddevice.py:126 #: src/connecteddevice.py:135
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:133 #: src/connecteddevice.py:142
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "" msgstr ""
#: src/connecteddevice.py:134 #: src/connecteddevice.py:143
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:232 #: src/connecteddevice.py:248
msgid "" msgid ""
"Unable to add virtual displays on this machine. xdg-desktop-portal is " "Unable to add virtual displays on this machine. xdg-desktop-portal is "
"required." "required."
msgstr "" msgstr ""
#: src/connecteddevice.py:266 #: src/connecteddevice.py:282
msgid "Focused display" msgid "Focused display"
msgstr "" msgstr ""
#: src/connecteddevice.py:272 #: src/connecteddevice.py:288
msgid "All displays" msgid "All displays"
msgstr "" msgstr ""
@ -309,9 +309,7 @@ msgid "Viewport horizontal offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:293 #: src/gtk/connected-device.ui:293
msgid "" msgid "Move the viewport to the left or right of its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:322 #: src/gtk/connected-device.ui:322
@ -319,9 +317,7 @@ msgid "Viewport vertical offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:323 #: src/gtk/connected-device.ui:323
msgid "" msgid "Move the viewport up or down from its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365
@ -367,67 +363,113 @@ msgstr ""
msgid "Quickly toggle follow mode." msgid "Quickly toggle follow mode."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 #: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:500 #: src/gtk/connected-device.ui:505
msgid "Find optimal display config" msgid "Find optimal display config"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:501 #: src/gtk/connected-device.ui:506
msgid "" msgid ""
"Automatically modify the glasses display configuration for maximum " "Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in." "resolution and best scaling when plugged in."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:511 #: src/gtk/connected-device.ui:516
msgid "Use highest refresh rate" msgid "Use highest refresh rate"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:512 #: src/gtk/connected-device.ui:517
msgid "Refresh rate may affect performance, disable this to set it manually." msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:522 #: src/gtk/connected-device.ui:527
msgid "Center on glasses' display"
msgstr ""
#: src/gtk/connected-device.ui:528
msgid ""
"Center the viewport on the glasses' display, even if the display is not in "
"the middle."
msgstr ""
#: src/gtk/connected-device.ui:538
msgid "Always primary display" msgid "Always primary display"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:523 #: src/gtk/connected-device.ui:539
msgid "Automatically set the glasses as the primary display when plugged in." msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:533 #: src/gtk/connected-device.ui:549
msgid "Remove virtual displays on disable"
msgstr ""
#: src/gtk/connected-device.ui:550
msgid "Automatically remove virtual displays when the XR effect is disabled."
msgstr ""
#: src/gtk/connected-device.ui:560
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:561
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/connected-device.ui:571
msgid "All displays follow mode"
msgstr ""
#: src/gtk/connected-device.ui:572
msgid "Follow mode moves all displays, not just the focused one."
msgstr ""
#: src/gtk/connected-device.ui:588
msgid "Follow mode movement tracking"
msgstr ""
#: src/gtk/connected-device.ui:589
msgid "Choose which movements should be tracked in follow mode."
msgstr ""
#: src/gtk/connected-device.ui:604
msgid "Horizontal"
msgstr ""
#: src/gtk/connected-device.ui:624
msgid "Vertical"
msgstr ""
#: src/gtk/connected-device.ui:644
msgid "Tilt/roll"
msgstr ""
#: src/gtk/connected-device.ui:662
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:534 #: src/gtk/connected-device.ui:663
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
"movements, jumps ahead, or is very shaky." "movements, jumps ahead, or is very shaky."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:552 #: src/gtk/connected-device.ui:681
msgid "Default" msgid "Default"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:564 #: src/gtk/connected-device.ui:693
msgid "Text Scaling" msgid "Text Scaling"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:565 #: src/gtk/connected-device.ui:694
msgid "Scaling text below 1.0 will simulate a higher resolution display" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:595
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:596
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/display-distance-dialog.ui:9 #: src/gtk/display-distance-dialog.ui:9
msgid "Show full range" msgid "Show full range"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-06 15:32-0800\n" "POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-19 09:39-0700\n" "PO-Revision-Date: 2024-08-19 09:39-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-" "Language-Team: Brazilian Portuguese <ldpbr-"
@ -30,36 +30,36 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "Este recurso não é atualmente suportado para o seu dispositivo." msgstr "Este recurso não é atualmente suportado para o seu dispositivo."
#: src/connecteddevice.py:125 #: src/connecteddevice.py:134
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Distância da tela" msgstr "Distância da tela"
#: src/connecteddevice.py:126 #: src/connecteddevice.py:135
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:133 #: src/connecteddevice.py:142
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Distância da tela" msgstr "Distância da tela"
#: src/connecteddevice.py:134 #: src/connecteddevice.py:143
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:232 #: src/connecteddevice.py:248
msgid "" msgid ""
"Unable to add virtual displays on this machine. xdg-desktop-portal is " "Unable to add virtual displays on this machine. xdg-desktop-portal is "
"required." "required."
msgstr "" msgstr ""
#: src/connecteddevice.py:266 #: src/connecteddevice.py:282
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "Distância da tela" msgstr "Distância da tela"
#: src/connecteddevice.py:272 #: src/connecteddevice.py:288
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "Tela curva" msgstr "Tela curva"
@ -321,9 +321,7 @@ msgid "Viewport horizontal offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:293 #: src/gtk/connected-device.ui:293
msgid "" msgid "Move the viewport to the left or right of its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:322 #: src/gtk/connected-device.ui:322
@ -331,9 +329,7 @@ msgid "Viewport vertical offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:323 #: src/gtk/connected-device.ui:323
msgid "" msgid "Move the viewport up or down from its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365
@ -381,15 +377,15 @@ msgstr "Atalho para alternar o modo de acompanhamento"
msgid "Quickly toggle follow mode." msgid "Quickly toggle follow mode."
msgstr "Alterne rapidamente o modo de acompanhamento." msgstr "Alterne rapidamente o modo de acompanhamento."
#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 #: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "Configurações Avançadas" msgstr "Configurações Avançadas"
#: src/gtk/connected-device.ui:500 #: src/gtk/connected-device.ui:505
msgid "Find optimal display config" msgid "Find optimal display config"
msgstr "Encontre a configuração de tela ideal" msgstr "Encontre a configuração de tela ideal"
#: src/gtk/connected-device.ui:501 #: src/gtk/connected-device.ui:506
msgid "" msgid ""
"Automatically modify the glasses display configuration for maximum " "Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in." "resolution and best scaling when plugged in."
@ -397,30 +393,86 @@ msgstr ""
"Modifique automaticamente a configuração de exibição dos óculos para máxima " "Modifique automaticamente a configuração de exibição dos óculos para máxima "
"resolução e melhor dimensionamento quando conectado." "resolução e melhor dimensionamento quando conectado."
#: src/gtk/connected-device.ui:511 #: src/gtk/connected-device.ui:516
msgid "Use highest refresh rate" msgid "Use highest refresh rate"
msgstr "Use a taxa de atualização mais alta" msgstr "Use a taxa de atualização mais alta"
#: src/gtk/connected-device.ui:512 #: src/gtk/connected-device.ui:517
msgid "Refresh rate may affect performance, disable this to set it manually." msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr "" msgstr ""
"A taxa de atualização pode afetar o desempenho, desative-a para defini-la " "A taxa de atualização pode afetar o desempenho, desative-a para defini-la "
"manualmente." "manualmente."
#: src/gtk/connected-device.ui:522 #: src/gtk/connected-device.ui:527
msgid "Center on glasses' display"
msgstr ""
#: src/gtk/connected-device.ui:528
msgid ""
"Center the viewport on the glasses' display, even if the display is not in "
"the middle."
msgstr ""
#: src/gtk/connected-device.ui:538
msgid "Always primary display" msgid "Always primary display"
msgstr "Sempre tela principal" msgstr "Sempre tela principal"
#: src/gtk/connected-device.ui:523 #: src/gtk/connected-device.ui:539
msgid "Automatically set the glasses as the primary display when plugged in." msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "" msgstr ""
"Defina automaticamente os óculos como a tela primária quando conectados." "Defina automaticamente os óculos como a tela primária quando conectados."
#: src/gtk/connected-device.ui:533 #: src/gtk/connected-device.ui:549
#, fuzzy
msgid "Remove virtual displays on disable"
msgstr "Tela curva"
#: src/gtk/connected-device.ui:550
msgid "Automatically remove virtual displays when the XR effect is disabled."
msgstr ""
#: src/gtk/connected-device.ui:560
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:561
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/connected-device.ui:571
#, fuzzy
msgid "All displays follow mode"
msgstr "Tela curva"
#: src/gtk/connected-device.ui:572
msgid "Follow mode moves all displays, not just the focused one."
msgstr ""
#: src/gtk/connected-device.ui:588
msgid "Follow mode movement tracking"
msgstr ""
#: src/gtk/connected-device.ui:589
msgid "Choose which movements should be tracked in follow mode."
msgstr ""
#: src/gtk/connected-device.ui:604
msgid "Horizontal"
msgstr ""
#: src/gtk/connected-device.ui:624
msgid "Vertical"
msgstr ""
#: src/gtk/connected-device.ui:644
msgid "Tilt/roll"
msgstr ""
#: src/gtk/connected-device.ui:662
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Antecipação de movimento" msgstr "Antecipação de movimento"
#: src/gtk/connected-device.ui:534 #: src/gtk/connected-device.ui:663
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
@ -431,27 +483,19 @@ msgstr ""
"virtual tenha atrasos, avance ou seja muito instável em relação aos " "virtual tenha atrasos, avance ou seja muito instável em relação aos "
"movimentos da cabeça " "movimentos da cabeça "
#: src/gtk/connected-device.ui:552 #: src/gtk/connected-device.ui:681
msgid "Default" msgid "Default"
msgstr "Padrão" msgstr "Padrão"
#: src/gtk/connected-device.ui:564 #: src/gtk/connected-device.ui:693
msgid "Text Scaling" msgid "Text Scaling"
msgstr "Redimensionamento de Texto" msgstr "Redimensionamento de Texto"
#: src/gtk/connected-device.ui:565 #: src/gtk/connected-device.ui:694
msgid "Scaling text below 1.0 will simulate a higher resolution display" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
"Redimensionar o texto abaixo de 1.0 simulará uma tela de resolução mais alta" "Redimensionar o texto abaixo de 1.0 simulará uma tela de resolução mais alta"
#: src/gtk/connected-device.ui:595
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:596
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/display-distance-dialog.ui:9 #: src/gtk/display-distance-dialog.ui:9
msgid "Show full range" msgid "Show full range"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-06 15:32-0800\n" "POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-17 09:39-0700\n" "PO-Revision-Date: 2024-08-17 09:39-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Russian <gnu@d07.ru>\n" "Language-Team: Russian <gnu@d07.ru>\n"
@ -29,36 +29,36 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "Эта функция в настоящее время не поддерживается для вашего устройства." msgstr "Эта функция в настоящее время не поддерживается для вашего устройства."
#: src/connecteddevice.py:125 #: src/connecteddevice.py:134
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Расстояние дисплея" msgstr "Расстояние дисплея"
#: src/connecteddevice.py:126 #: src/connecteddevice.py:135
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:133 #: src/connecteddevice.py:142
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Расстояние дисплея" msgstr "Расстояние дисплея"
#: src/connecteddevice.py:134 #: src/connecteddevice.py:143
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:232 #: src/connecteddevice.py:248
msgid "" msgid ""
"Unable to add virtual displays on this machine. xdg-desktop-portal is " "Unable to add virtual displays on this machine. xdg-desktop-portal is "
"required." "required."
msgstr "" msgstr ""
#: src/connecteddevice.py:266 #: src/connecteddevice.py:282
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "Расстояние дисплея" msgstr "Расстояние дисплея"
#: src/connecteddevice.py:272 #: src/connecteddevice.py:288
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "Изогнутый дисплей" msgstr "Изогнутый дисплей"
@ -321,9 +321,7 @@ msgid "Viewport horizontal offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:293 #: src/gtk/connected-device.ui:293
msgid "" msgid "Move the viewport to the left or right of its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:322 #: src/gtk/connected-device.ui:322
@ -331,9 +329,7 @@ msgid "Viewport vertical offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:323 #: src/gtk/connected-device.ui:323
msgid "" msgid "Move the viewport up or down from its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365
@ -381,15 +377,15 @@ msgstr "Сочетание клавиш для переключения режи
msgid "Quickly toggle follow mode." msgid "Quickly toggle follow mode."
msgstr "Быстро переключать режим следования." msgstr "Быстро переключать режим следования."
#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 #: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "Дополнительные настройки" msgstr "Дополнительные настройки"
#: src/gtk/connected-device.ui:500 #: src/gtk/connected-device.ui:505
msgid "Find optimal display config" msgid "Find optimal display config"
msgstr "Найти оптимальную конфигурацию дисплея" msgstr "Найти оптимальную конфигурацию дисплея"
#: src/gtk/connected-device.ui:501 #: src/gtk/connected-device.ui:506
msgid "" msgid ""
"Automatically modify the glasses display configuration for maximum " "Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in." "resolution and best scaling when plugged in."
@ -397,31 +393,87 @@ msgstr ""
"Автоматически изменять конфигурацию дисплея очков для максимального " "Автоматически изменять конфигурацию дисплея очков для максимального "
"разрешения и лучшей масштабирования при подключении." "разрешения и лучшей масштабирования при подключении."
#: src/gtk/connected-device.ui:511 #: src/gtk/connected-device.ui:516
msgid "Use highest refresh rate" msgid "Use highest refresh rate"
msgstr "Использовать высшую частоту обновления" msgstr "Использовать высшую частоту обновления"
#: src/gtk/connected-device.ui:512 #: src/gtk/connected-device.ui:517
msgid "Refresh rate may affect performance, disable this to set it manually." msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr "" msgstr ""
"Частота обновления может повлиять на производительность, отключите это, " "Частота обновления может повлиять на производительность, отключите это, "
"чтобы установить ее вручную." "чтобы установить ее вручную."
#: src/gtk/connected-device.ui:522 #: src/gtk/connected-device.ui:527
msgid "Center on glasses' display"
msgstr ""
#: src/gtk/connected-device.ui:528
msgid ""
"Center the viewport on the glasses' display, even if the display is not in "
"the middle."
msgstr ""
#: src/gtk/connected-device.ui:538
msgid "Always primary display" msgid "Always primary display"
msgstr "Всегда основной дисплей" msgstr "Всегда основной дисплей"
#: src/gtk/connected-device.ui:523 #: src/gtk/connected-device.ui:539
msgid "Automatically set the glasses as the primary display when plugged in." msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "" msgstr ""
"Автоматически устанавливать очки в качестве основного дисплея при " "Автоматически устанавливать очки в качестве основного дисплея при "
"подключении." "подключении."
#: src/gtk/connected-device.ui:533 #: src/gtk/connected-device.ui:549
#, fuzzy
msgid "Remove virtual displays on disable"
msgstr "Изогнутый дисплей"
#: src/gtk/connected-device.ui:550
msgid "Automatically remove virtual displays when the XR effect is disabled."
msgstr ""
#: src/gtk/connected-device.ui:560
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:561
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/connected-device.ui:571
#, fuzzy
msgid "All displays follow mode"
msgstr "Изогнутый дисплей"
#: src/gtk/connected-device.ui:572
msgid "Follow mode moves all displays, not just the focused one."
msgstr ""
#: src/gtk/connected-device.ui:588
msgid "Follow mode movement tracking"
msgstr ""
#: src/gtk/connected-device.ui:589
msgid "Choose which movements should be tracked in follow mode."
msgstr ""
#: src/gtk/connected-device.ui:604
msgid "Horizontal"
msgstr ""
#: src/gtk/connected-device.ui:624
msgid "Vertical"
msgstr ""
#: src/gtk/connected-device.ui:644
msgid "Tilt/roll"
msgstr ""
#: src/gtk/connected-device.ui:662
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Прогнозирование движения" msgstr "Прогнозирование движения"
#: src/gtk/connected-device.ui:534 #: src/gtk/connected-device.ui:663
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
@ -432,26 +484,18 @@ msgstr ""
"виртуальный дисплей не отстает от движений вашей головы, не опережает или не " "виртуальный дисплей не отстает от движений вашей головы, не опережает или не "
"очень трясётся." "очень трясётся."
#: src/gtk/connected-device.ui:552 #: src/gtk/connected-device.ui:681
msgid "Default" msgid "Default"
msgstr "По умолчанию" msgstr "По умолчанию"
#: src/gtk/connected-device.ui:564 #: src/gtk/connected-device.ui:693
msgid "Text Scaling" msgid "Text Scaling"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:565 #: src/gtk/connected-device.ui:694
msgid "Scaling text below 1.0 will simulate a higher resolution display" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:595
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:596
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/display-distance-dialog.ui:9 #: src/gtk/display-distance-dialog.ui:9
msgid "Show full range" msgid "Show full range"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-06 15:32-0800\n" "POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-16 10:31-0700\n" "PO-Revision-Date: 2024-08-16 10:31-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@ -29,36 +29,36 @@ msgstr ""
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "Din enhet stöder inte den här funktionen för tillfället." msgstr "Din enhet stöder inte den här funktionen för tillfället."
#: src/connecteddevice.py:125 #: src/connecteddevice.py:134
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Avstånd till skärmen" msgstr "Avstånd till skärmen"
#: src/connecteddevice.py:126 #: src/connecteddevice.py:135
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:133 #: src/connecteddevice.py:142
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Avstånd till skärmen" msgstr "Avstånd till skärmen"
#: src/connecteddevice.py:134 #: src/connecteddevice.py:143
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:232 #: src/connecteddevice.py:248
msgid "" msgid ""
"Unable to add virtual displays on this machine. xdg-desktop-portal is " "Unable to add virtual displays on this machine. xdg-desktop-portal is "
"required." "required."
msgstr "" msgstr ""
#: src/connecteddevice.py:266 #: src/connecteddevice.py:282
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "Avstånd till skärmen" msgstr "Avstånd till skärmen"
#: src/connecteddevice.py:272 #: src/connecteddevice.py:288
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "Böjd skärm" msgstr "Böjd skärm"
@ -320,9 +320,7 @@ msgid "Viewport horizontal offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:293 #: src/gtk/connected-device.ui:293
msgid "" msgid "Move the viewport to the left or right of its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:322 #: src/gtk/connected-device.ui:322
@ -330,9 +328,7 @@ msgid "Viewport vertical offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:323 #: src/gtk/connected-device.ui:323
msgid "" msgid "Move the viewport up or down from its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365
@ -382,15 +378,15 @@ msgstr "Växla följ läge kort"
msgid "Quickly toggle follow mode." msgid "Quickly toggle follow mode."
msgstr "Växla snabbt följ läge." msgstr "Växla snabbt följ läge."
#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 #: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "Avancerade inställningar" msgstr "Avancerade inställningar"
#: src/gtk/connected-device.ui:500 #: src/gtk/connected-device.ui:505
msgid "Find optimal display config" msgid "Find optimal display config"
msgstr "Hitta optimal konfiguration till skärmen" msgstr "Hitta optimal konfiguration till skärmen"
#: src/gtk/connected-device.ui:501 #: src/gtk/connected-device.ui:506
msgid "" msgid ""
"Automatically modify the glasses display configuration for maximum " "Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in." "resolution and best scaling when plugged in."
@ -398,29 +394,85 @@ msgstr ""
"Ändrar automatisk glasögonens skärmkonfiguration för maximal upplösning och " "Ändrar automatisk glasögonens skärmkonfiguration för maximal upplösning och "
"bästa skälning när den är ansluten." "bästa skälning när den är ansluten."
#: src/gtk/connected-device.ui:511 #: src/gtk/connected-device.ui:516
msgid "Use highest refresh rate" msgid "Use highest refresh rate"
msgstr "Använd högsta uppdateringsfrekvens" msgstr "Använd högsta uppdateringsfrekvens"
#: src/gtk/connected-device.ui:512 #: src/gtk/connected-device.ui:517
msgid "Refresh rate may affect performance, disable this to set it manually." msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr "" msgstr ""
"Uppdateringsfrekvens kan påverka prestanda, inaktivera detta för att ställa " "Uppdateringsfrekvens kan påverka prestanda, inaktivera detta för att ställa "
"in det manuellt." "in det manuellt."
#: src/gtk/connected-device.ui:522 #: src/gtk/connected-device.ui:527
msgid "Center on glasses' display"
msgstr ""
#: src/gtk/connected-device.ui:528
msgid ""
"Center the viewport on the glasses' display, even if the display is not in "
"the middle."
msgstr ""
#: src/gtk/connected-device.ui:538
msgid "Always primary display" msgid "Always primary display"
msgstr "Alltid primär skärm" msgstr "Alltid primär skärm"
#: src/gtk/connected-device.ui:523 #: src/gtk/connected-device.ui:539
msgid "Automatically set the glasses as the primary display when plugged in." msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "Ställer automatisk glasögon som primär skärm när den är ansluten." msgstr "Ställer automatisk glasögon som primär skärm när den är ansluten."
#: src/gtk/connected-device.ui:533 #: src/gtk/connected-device.ui:549
#, fuzzy
msgid "Remove virtual displays on disable"
msgstr "Böjd skärm"
#: src/gtk/connected-device.ui:550
msgid "Automatically remove virtual displays when the XR effect is disabled."
msgstr ""
#: src/gtk/connected-device.ui:560
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:561
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/connected-device.ui:571
#, fuzzy
msgid "All displays follow mode"
msgstr "Böjd skärm"
#: src/gtk/connected-device.ui:572
msgid "Follow mode moves all displays, not just the focused one."
msgstr ""
#: src/gtk/connected-device.ui:588
msgid "Follow mode movement tracking"
msgstr ""
#: src/gtk/connected-device.ui:589
msgid "Choose which movements should be tracked in follow mode."
msgstr ""
#: src/gtk/connected-device.ui:604
msgid "Horizontal"
msgstr ""
#: src/gtk/connected-device.ui:624
msgid "Vertical"
msgstr ""
#: src/gtk/connected-device.ui:644
msgid "Tilt/roll"
msgstr ""
#: src/gtk/connected-device.ui:662
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Rörs förväntning" msgstr "Rörs förväntning"
#: src/gtk/connected-device.ui:534 #: src/gtk/connected-device.ui:663
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
@ -429,26 +481,18 @@ msgstr ""
"Motverkar ingångsfördröjning genom förutsägelse av huvudrörelser.Behåll " "Motverkar ingångsfördröjning genom förutsägelse av huvudrörelser.Behåll "
"standardinställningen om inte skärmen skakar mycket eller rörsig konstigt." "standardinställningen om inte skärmen skakar mycket eller rörsig konstigt."
#: src/gtk/connected-device.ui:552 #: src/gtk/connected-device.ui:681
msgid "Default" msgid "Default"
msgstr "Standard" msgstr "Standard"
#: src/gtk/connected-device.ui:564 #: src/gtk/connected-device.ui:693
msgid "Text Scaling" msgid "Text Scaling"
msgstr "Textskalning" msgstr "Textskalning"
#: src/gtk/connected-device.ui:565 #: src/gtk/connected-device.ui:694
msgid "Scaling text below 1.0 will simulate a higher resolution display" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "Textskalning under 1.0 kommer att simulera en högre skärmupplösning" msgstr "Textskalning under 1.0 kommer att simulera en högre skärmupplösning"
#: src/gtk/connected-device.ui:595
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:596
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/display-distance-dialog.ui:9 #: src/gtk/display-distance-dialog.ui:9
msgid "Show full range" msgid "Show full range"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-06 15:32-0800\n" "POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-17 10:08-0700\n" "PO-Revision-Date: 2024-08-17 10:08-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n" "Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
@ -28,36 +28,36 @@ msgstr "Переключає окуляри в режим «бок о бок»
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "Ця функція наразі не підтримується на вашому пристрої." msgstr "Ця функція наразі не підтримується на вашому пристрої."
#: src/connecteddevice.py:125 #: src/connecteddevice.py:134
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "Відстань дисплея" msgstr "Відстань дисплея"
#: src/connecteddevice.py:126 #: src/connecteddevice.py:135
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:133 #: src/connecteddevice.py:142
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "Відстань дисплея" msgstr "Відстань дисплея"
#: src/connecteddevice.py:134 #: src/connecteddevice.py:143
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:232 #: src/connecteddevice.py:248
msgid "" msgid ""
"Unable to add virtual displays on this machine. xdg-desktop-portal is " "Unable to add virtual displays on this machine. xdg-desktop-portal is "
"required." "required."
msgstr "" msgstr ""
#: src/connecteddevice.py:266 #: src/connecteddevice.py:282
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "Відстань дисплея" msgstr "Відстань дисплея"
#: src/connecteddevice.py:272 #: src/connecteddevice.py:288
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "Викривлений дисплей" msgstr "Викривлений дисплей"
@ -321,9 +321,7 @@ msgid "Viewport horizontal offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:293 #: src/gtk/connected-device.ui:293
msgid "" msgid "Move the viewport to the left or right of its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:322 #: src/gtk/connected-device.ui:322
@ -331,9 +329,7 @@ msgid "Viewport vertical offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:323 #: src/gtk/connected-device.ui:323
msgid "" msgid "Move the viewport up or down from its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365
@ -381,15 +377,15 @@ msgstr "Сполучення клавіш для перемикання режи
msgid "Quickly toggle follow mode." msgid "Quickly toggle follow mode."
msgstr "Швидко перемикати режим слідування." msgstr "Швидко перемикати режим слідування."
#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 #: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "Додаткові налаштування" msgstr "Додаткові налаштування"
#: src/gtk/connected-device.ui:500 #: src/gtk/connected-device.ui:505
msgid "Find optimal display config" msgid "Find optimal display config"
msgstr "Знайти оптимальну конфігурацію дисплея" msgstr "Знайти оптимальну конфігурацію дисплея"
#: src/gtk/connected-device.ui:501 #: src/gtk/connected-device.ui:506
msgid "" msgid ""
"Automatically modify the glasses display configuration for maximum " "Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in." "resolution and best scaling when plugged in."
@ -397,29 +393,85 @@ msgstr ""
"Автоматично змінює конфігурацію дисплея окулярів для максимальної роздільної " "Автоматично змінює конфігурацію дисплея окулярів для максимальної роздільної "
"здатності і найкращого масштабування при підключенні." "здатності і найкращого масштабування при підключенні."
#: src/gtk/connected-device.ui:511 #: src/gtk/connected-device.ui:516
msgid "Use highest refresh rate" msgid "Use highest refresh rate"
msgstr "Використовувати найвищу частоту оновлення" msgstr "Використовувати найвищу частоту оновлення"
#: src/gtk/connected-device.ui:512 #: src/gtk/connected-device.ui:517
msgid "Refresh rate may affect performance, disable this to set it manually." msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr "" msgstr ""
"Частота оновлення може вплинути на продуктивність, вимкніть це, щоб " "Частота оновлення може вплинути на продуктивність, вимкніть це, щоб "
"встановити її вручну." "встановити її вручну."
#: src/gtk/connected-device.ui:522 #: src/gtk/connected-device.ui:527
msgid "Center on glasses' display"
msgstr ""
#: src/gtk/connected-device.ui:528
msgid ""
"Center the viewport on the glasses' display, even if the display is not in "
"the middle."
msgstr ""
#: src/gtk/connected-device.ui:538
msgid "Always primary display" msgid "Always primary display"
msgstr "Завжди основний дисплей" msgstr "Завжди основний дисплей"
#: src/gtk/connected-device.ui:523 #: src/gtk/connected-device.ui:539
msgid "Automatically set the glasses as the primary display when plugged in." msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "Автоматично встановлює окуляри як основний дисплей при підключенні." msgstr "Автоматично встановлює окуляри як основний дисплей при підключенні."
#: src/gtk/connected-device.ui:533 #: src/gtk/connected-device.ui:549
#, fuzzy
msgid "Remove virtual displays on disable"
msgstr "Викривлений дисплей"
#: src/gtk/connected-device.ui:550
msgid "Automatically remove virtual displays when the XR effect is disabled."
msgstr ""
#: src/gtk/connected-device.ui:560
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:561
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/connected-device.ui:571
#, fuzzy
msgid "All displays follow mode"
msgstr "Викривлений дисплей"
#: src/gtk/connected-device.ui:572
msgid "Follow mode moves all displays, not just the focused one."
msgstr ""
#: src/gtk/connected-device.ui:588
msgid "Follow mode movement tracking"
msgstr ""
#: src/gtk/connected-device.ui:589
msgid "Choose which movements should be tracked in follow mode."
msgstr ""
#: src/gtk/connected-device.ui:604
msgid "Horizontal"
msgstr ""
#: src/gtk/connected-device.ui:624
msgid "Vertical"
msgstr ""
#: src/gtk/connected-device.ui:644
msgid "Tilt/roll"
msgstr ""
#: src/gtk/connected-device.ui:662
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "Прогнозування руху" msgstr "Прогнозування руху"
#: src/gtk/connected-device.ui:534 #: src/gtk/connected-device.ui:663
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
@ -430,26 +482,18 @@ msgstr ""
"віртуальний дисплей відстає від рухів вашої голови, випереджає або дуже " "віртуальний дисплей відстає від рухів вашої голови, випереджає або дуже "
"тремтить." "тремтить."
#: src/gtk/connected-device.ui:552 #: src/gtk/connected-device.ui:681
msgid "Default" msgid "Default"
msgstr "За замовчуванням" msgstr "За замовчуванням"
#: src/gtk/connected-device.ui:564 #: src/gtk/connected-device.ui:693
msgid "Text Scaling" msgid "Text Scaling"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:565 #: src/gtk/connected-device.ui:694
msgid "Scaling text below 1.0 will simulate a higher resolution display" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:595
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:596
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/display-distance-dialog.ui:9 #: src/gtk/display-distance-dialog.ui:9
msgid "Show full range" msgid "Show full range"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-06 15:32-0800\n" "POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-02 20:55-0700\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n" "Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@ -26,36 +26,36 @@ msgstr "切换到并排模式,并将显示宽度翻倍。"
msgid "This feature is not currently supported for your device." msgid "This feature is not currently supported for your device."
msgstr "您的设备目前不支援此功能。" msgstr "您的设备目前不支援此功能。"
#: src/connecteddevice.py:125 #: src/connecteddevice.py:134
#, fuzzy #, fuzzy
msgid "Set Focused Display Distance" msgid "Set Focused Display Distance"
msgstr "显示距离" msgstr "显示距离"
#: src/connecteddevice.py:126 #: src/connecteddevice.py:135
msgid "Use a closer value so the display zooms in when you look at it." msgid "Use a closer value so the display zooms in when you look at it."
msgstr "" msgstr ""
#: src/connecteddevice.py:133 #: src/connecteddevice.py:142
#, fuzzy #, fuzzy
msgid "Set All Displays Distance" msgid "Set All Displays Distance"
msgstr "显示距离" msgstr "显示距离"
#: src/connecteddevice.py:134 #: src/connecteddevice.py:143
msgid "Use a farther value so the displays are zoomed out when you look away." msgid "Use a farther value so the displays are zoomed out when you look away."
msgstr "" msgstr ""
#: src/connecteddevice.py:232 #: src/connecteddevice.py:248
msgid "" msgid ""
"Unable to add virtual displays on this machine. xdg-desktop-portal is " "Unable to add virtual displays on this machine. xdg-desktop-portal is "
"required." "required."
msgstr "" msgstr ""
#: src/connecteddevice.py:266 #: src/connecteddevice.py:282
#, fuzzy #, fuzzy
msgid "Focused display" msgid "Focused display"
msgstr "显示距离" msgstr "显示距离"
#: src/connecteddevice.py:272 #: src/connecteddevice.py:288
#, fuzzy #, fuzzy
msgid "All displays" msgid "All displays"
msgstr "曲面显示" msgstr "曲面显示"
@ -317,9 +317,7 @@ msgid "Viewport horizontal offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:293 #: src/gtk/connected-device.ui:293
msgid "" msgid "Move the viewport to the left or right of its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:322 #: src/gtk/connected-device.ui:322
@ -327,9 +325,7 @@ msgid "Viewport vertical offset"
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:323 #: src/gtk/connected-device.ui:323
msgid "" msgid "Move the viewport up or down from its default position."
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgstr "" msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365
@ -377,41 +373,97 @@ msgstr "切换跟随模式快捷键"
msgid "Quickly toggle follow mode." msgid "Quickly toggle follow mode."
msgstr "快速切换跟随模式。" msgstr "快速切换跟随模式。"
#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 #: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "高级设定" msgstr "高级设定"
#: src/gtk/connected-device.ui:500 #: src/gtk/connected-device.ui:505
msgid "Find optimal display config" msgid "Find optimal display config"
msgstr "寻找最佳显示设定" msgstr "寻找最佳显示设定"
#: src/gtk/connected-device.ui:501 #: src/gtk/connected-device.ui:506
msgid "" msgid ""
"Automatically modify the glasses display configuration for maximum " "Automatically modify the glasses display configuration for maximum "
"resolution and best scaling when plugged in." "resolution and best scaling when plugged in."
msgstr "连接时,可以自动修改眼镜显示设定以表现出最大解析度和最佳的对比。" msgstr "连接时,可以自动修改眼镜显示设定以表现出最大解析度和最佳的对比。"
#: src/gtk/connected-device.ui:511 #: src/gtk/connected-device.ui:516
msgid "Use highest refresh rate" msgid "Use highest refresh rate"
msgstr "使用最高刷新率" msgstr "使用最高刷新率"
#: src/gtk/connected-device.ui:512 #: src/gtk/connected-device.ui:517
msgid "Refresh rate may affect performance, disable this to set it manually." msgid "Refresh rate may affect performance, disable this to set it manually."
msgstr "刷新率可能会影响性能,禁用此功能即可手动设置。" msgstr "刷新率可能会影响性能,禁用此功能即可手动设置。"
#: src/gtk/connected-device.ui:522 #: src/gtk/connected-device.ui:527
msgid "Center on glasses' display"
msgstr ""
#: src/gtk/connected-device.ui:528
msgid ""
"Center the viewport on the glasses' display, even if the display is not in "
"the middle."
msgstr ""
#: src/gtk/connected-device.ui:538
msgid "Always primary display" msgid "Always primary display"
msgstr "每次设置为主要显示" msgstr "每次设置为主要显示"
#: src/gtk/connected-device.ui:523 #: src/gtk/connected-device.ui:539
msgid "Automatically set the glasses as the primary display when plugged in." msgid "Automatically set the glasses as the primary display when plugged in."
msgstr "连接时,自动将眼镜设置为主要显示。" msgstr "连接时,自动将眼镜设置为主要显示。"
#: src/gtk/connected-device.ui:533 #: src/gtk/connected-device.ui:549
#, fuzzy
msgid "Remove virtual displays on disable"
msgstr "曲面显示"
#: src/gtk/connected-device.ui:550
msgid "Automatically remove virtual displays when the XR effect is disabled."
msgstr ""
#: src/gtk/connected-device.ui:560
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:561
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/connected-device.ui:571
#, fuzzy
msgid "All displays follow mode"
msgstr "曲面显示"
#: src/gtk/connected-device.ui:572
msgid "Follow mode moves all displays, not just the focused one."
msgstr ""
#: src/gtk/connected-device.ui:588
msgid "Follow mode movement tracking"
msgstr ""
#: src/gtk/connected-device.ui:589
msgid "Choose which movements should be tracked in follow mode."
msgstr ""
#: src/gtk/connected-device.ui:604
msgid "Horizontal"
msgstr ""
#: src/gtk/connected-device.ui:624
msgid "Vertical"
msgstr ""
#: src/gtk/connected-device.ui:644
msgid "Tilt/roll"
msgstr ""
#: src/gtk/connected-device.ui:662
msgid "Movement look-ahead" msgid "Movement look-ahead"
msgstr "移动预测" msgstr "移动预测"
#: src/gtk/connected-device.ui:534 #: src/gtk/connected-device.ui:663
msgid "" msgid ""
"Counteracts input lag by predicting head-tracking position ahead of render " "Counteracts input lag by predicting head-tracking position ahead of render "
"time. Stick with default unless virtual display drags behind your head " "time. Stick with default unless virtual display drags behind your head "
@ -420,26 +472,18 @@ msgstr ""
"透过预测头部追踪位置,提前于渲染时间进行预测来抵消输入延迟。除非虚拟显示滞后" "透过预测头部追踪位置,提前于渲染时间进行预测来抵消输入延迟。除非虚拟显示滞后"
"于头部,提前跳动或非常抖动,请尽量使用默认设置。" "于头部,提前跳动或非常抖动,请尽量使用默认设置。"
#: src/gtk/connected-device.ui:552 #: src/gtk/connected-device.ui:681
msgid "Default" msgid "Default"
msgstr "默认" msgstr "默认"
#: src/gtk/connected-device.ui:564 #: src/gtk/connected-device.ui:693
msgid "Text Scaling" msgid "Text Scaling"
msgstr "字体大小比例" msgstr "字体大小比例"
#: src/gtk/connected-device.ui:565 #: src/gtk/connected-device.ui:694
msgid "Scaling text below 1.0 will simulate a higher resolution display" msgid "Scaling text below 1.0 will simulate a higher resolution display"
msgstr "字体缩放小于1.0,将模拟解析度更高的显示效果" msgstr "字体缩放小于1.0,将模拟解析度更高的显示效果"
#: src/gtk/connected-device.ui:595
msgid "Enable multi-tap detection"
msgstr ""
#: src/gtk/connected-device.ui:596
msgid "Enables double-tap to recenter and triple-tap to recalibrate."
msgstr ""
#: src/gtk/display-distance-dialog.ui:9 #: src/gtk/display-distance-dialog.ui:9
msgid "Show full range" msgid "Show full range"
msgstr "" msgstr ""

View File

@ -7,6 +7,9 @@ class ConfigManager(GObject.GObject):
__gproperties__ = { __gproperties__ = {
'breezy-desktop-enabled': (bool, 'Breezy Desktop Enabled', 'Whether Breezy Desktop is enabled', False, GObject.ParamFlags.READWRITE), 'breezy-desktop-enabled': (bool, 'Breezy Desktop Enabled', 'Whether Breezy Desktop is enabled', False, GObject.ParamFlags.READWRITE),
'multi-tap-enabled': (bool, 'Multi-Tap Enabled', 'Whether Multi-Tap is enabled', False, GObject.ParamFlags.READWRITE), 'multi-tap-enabled': (bool, 'Multi-Tap Enabled', 'Whether Multi-Tap is enabled', False, GObject.ParamFlags.READWRITE),
'follow-track-roll': (bool, 'Follow Track Roll', 'Whether to follow on the roll axis', False, GObject.ParamFlags.READWRITE),
'follow-track-pitch': (bool, 'Follow Track Pitch', 'Whether to follow on the pitch axis', True, GObject.ParamFlags.READWRITE),
'follow-track-yaw': (bool, 'Follow Track Yaw', 'Whether to follow on the yaw axis', True, GObject.ParamFlags.READWRITE)
} }
_instance = None _instance = None
@ -29,6 +32,9 @@ class ConfigManager(GObject.GObject):
self.ipc = XRDriverIPC.get_instance() self.ipc = XRDriverIPC.get_instance()
self.breezy_desktop_enabled = None self.breezy_desktop_enabled = None
self.multi_tap_enabled = None self.multi_tap_enabled = None
self.follow_track_roll = None
self.follow_track_pitch = None
self.follow_track_yaw = None
self._running = True self._running = True
self._refresh_config() self._refresh_config()
@ -43,6 +49,15 @@ class ConfigManager(GObject.GObject):
if self.config['multi_tap_enabled'] != self.multi_tap_enabled: if self.config['multi_tap_enabled'] != self.multi_tap_enabled:
self.set_property('multi-tap-enabled', self.config['multi_tap_enabled']) self.set_property('multi-tap-enabled', self.config['multi_tap_enabled'])
if self.config['smooth_follow_track_roll'] != self.follow_track_roll:
self.set_property('follow-track-roll', self.config['smooth_follow_track_roll'])
if self.config['smooth_follow_track_pitch'] != self.follow_track_pitch:
self.set_property('follow-track-pitch', self.config['smooth_follow_track_pitch'])
if self.config['smooth_follow_track_yaw'] != self.follow_track_yaw:
self.set_property('follow-track-yaw', self.config['smooth_follow_track_yaw'])
if self._running: threading.Timer(1.0, self._refresh_config).start() if self._running: threading.Timer(1.0, self._refresh_config).start()
def _is_breezy_desktop_enabled(self): def _is_breezy_desktop_enabled(self):
@ -65,14 +80,44 @@ class ConfigManager(GObject.GObject):
self.ipc.write_config(self.config) self.ipc.write_config(self.config)
self.multi_tap_enabled = value self.multi_tap_enabled = value
def _set_follow_track_roll(self, value):
if self.follow_track_roll != value:
self.config['smooth_follow_track_roll'] = value
self.ipc.write_config(self.config)
self.follow_track_roll = value
def _set_follow_track_pitch(self, value):
if self.follow_track_pitch != value:
self.config['smooth_follow_track_pitch'] = value
self.ipc.write_config(self.config)
self.follow_track_pitch = value
def _set_follow_track_yaw(self, value):
if self.follow_track_yaw != value:
self.config['smooth_follow_track_yaw'] = value
self.ipc.write_config(self.config)
self.follow_track_yaw = value
def do_set_property(self, prop, value): def do_set_property(self, prop, value):
if prop.name == 'breezy-desktop-enabled': if prop.name == 'breezy-desktop-enabled':
self._set_breezy_desktop_enabled(value) self._set_breezy_desktop_enabled(value)
elif prop.name == 'multi-tap-enabled': elif prop.name == 'multi-tap-enabled':
self._set_multi_tap_enabled(value) self._set_multi_tap_enabled(value)
elif prop.name == 'follow-track-roll':
self._set_follow_track_roll(value)
elif prop.name == 'follow-track-pitch':
self._set_follow_track_pitch(value)
elif prop.name == 'follow-track-yaw':
self._set_follow_track_yaw(value)
def do_get_property(self, prop): def do_get_property(self, prop):
if prop.name == 'breezy-desktop-enabled': if prop.name == 'breezy-desktop-enabled':
return self.breezy_desktop_enabled return self.breezy_desktop_enabled
elif prop.name == 'multi-tap-enabled': elif prop.name == 'multi-tap-enabled':
return self.multi_tap_enabled return self.multi_tap_enabled
elif prop.name == 'follow-track-roll':
return self.follow_track_roll
elif prop.name == 'follow-track-pitch':
return self.follow_track_pitch
elif prop.name == 'follow-track-yaw':
return self.follow_track_yaw

View File

@ -48,7 +48,9 @@ class ConnectedDevice(Gtk.Box):
toggle_display_distance_shortcut_label = Gtk.Template.Child() toggle_display_distance_shortcut_label = Gtk.Template.Child()
reassign_toggle_follow_shortcut_button = Gtk.Template.Child() reassign_toggle_follow_shortcut_button = Gtk.Template.Child()
toggle_follow_shortcut_label = Gtk.Template.Child() toggle_follow_shortcut_label = Gtk.Template.Child()
headset_display_as_viewport_center_switch = Gtk.Template.Child()
headset_as_primary_switch = Gtk.Template.Child() headset_as_primary_switch = Gtk.Template.Child()
remove_virtual_displays_on_disable_switch = Gtk.Template.Child()
use_optimal_monitor_config_switch = Gtk.Template.Child() use_optimal_monitor_config_switch = Gtk.Template.Child()
use_highest_refresh_rate_switch = Gtk.Template.Child() use_highest_refresh_rate_switch = Gtk.Template.Child()
movement_look_ahead_scale = Gtk.Template.Child() movement_look_ahead_scale = Gtk.Template.Child()
@ -56,6 +58,10 @@ class ConnectedDevice(Gtk.Box):
text_scaling_scale = Gtk.Template.Child() text_scaling_scale = Gtk.Template.Child()
text_scaling_adjustment = Gtk.Template.Child() text_scaling_adjustment = Gtk.Template.Child()
enable_multi_tap_switch = Gtk.Template.Child() enable_multi_tap_switch = Gtk.Template.Child()
legacy_follow_mode_switch = Gtk.Template.Child()
follow_track_yaw_switch = Gtk.Template.Child()
follow_track_pitch_switch = Gtk.Template.Child()
follow_track_roll_switch = Gtk.Template.Child()
monitor_wrapping_scheme_menu = Gtk.Template.Child() monitor_wrapping_scheme_menu = Gtk.Template.Child()
monitor_spacing_scale = Gtk.Template.Child() monitor_spacing_scale = Gtk.Template.Child()
monitor_spacing_adjustment = Gtk.Template.Child() monitor_spacing_adjustment = Gtk.Template.Child()
@ -97,11 +103,14 @@ class ConnectedDevice(Gtk.Box):
self.settings.bind('follow-threshold', self.follow_threshold_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('follow-threshold', self.follow_threshold_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT)
# self.settings.bind('widescreen-mode', self.widescreen_mode_switch, 'active', Gio.SettingsBindFlags.DEFAULT) # self.settings.bind('widescreen-mode', self.widescreen_mode_switch, 'active', Gio.SettingsBindFlags.DEFAULT)
# self.settings.bind('curved-display', self.curved_display_switch, 'active', Gio.SettingsBindFlags.DEFAULT) # self.settings.bind('curved-display', self.curved_display_switch, 'active', Gio.SettingsBindFlags.DEFAULT)
self.settings.bind('headset-display-as-viewport-center', self.headset_display_as_viewport_center_switch, 'active', Gio.SettingsBindFlags.DEFAULT)
self.settings.bind('headset-as-primary', self.headset_as_primary_switch, 'active', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('headset-as-primary', self.headset_as_primary_switch, 'active', Gio.SettingsBindFlags.DEFAULT)
self.settings.bind('remove-virtual-displays-on-disable', self.remove_virtual_displays_on_disable_switch, 'active', Gio.SettingsBindFlags.DEFAULT)
self.settings.bind('use-optimal-monitor-config', self.use_optimal_monitor_config_switch, 'active', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('use-optimal-monitor-config', self.use_optimal_monitor_config_switch, 'active', Gio.SettingsBindFlags.DEFAULT)
self.settings.bind('use-highest-refresh-rate', self.use_highest_refresh_rate_switch, 'active', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('use-highest-refresh-rate', self.use_highest_refresh_rate_switch, 'active', Gio.SettingsBindFlags.DEFAULT)
# self.settings.bind('fast-sbs-mode-switching', self.fast_sbs_mode_switch, 'active', Gio.SettingsBindFlags.DEFAULT) # self.settings.bind('fast-sbs-mode-switching', self.fast_sbs_mode_switch, 'active', Gio.SettingsBindFlags.DEFAULT)
self.settings.bind('look-ahead-override', self.movement_look_ahead_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('look-ahead-override', self.movement_look_ahead_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT)
self.settings.bind('legacy-follow-mode', self.legacy_follow_mode_switch, 'active', Gio.SettingsBindFlags.DEFAULT)
self.settings.bind('monitor-spacing', self.monitor_spacing_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('monitor-spacing', self.monitor_spacing_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT)
self.settings.bind('viewport-offset-x', self.viewport_offset_x_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('viewport-offset-x', self.viewport_offset_x_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT)
self.settings.bind('viewport-offset-y', self.viewport_offset_y_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('viewport-offset-y', self.viewport_offset_y_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT)
@ -152,8 +161,10 @@ class ConnectedDevice(Gtk.Box):
self.config_manager = ConfigManager.get_instance() self.config_manager = ConfigManager.get_instance()
self.config_manager.connect('notify::breezy-desktop-enabled', self._handle_enabled_config) self.config_manager.connect('notify::breezy-desktop-enabled', self._handle_enabled_config)
self.config_manager.bind_property('multi-tap-enabled', self.enable_multi_tap_switch, 'active', Gio.SettingsBindFlags.DEFAULT) self._bind_switch_to_config(self.enable_multi_tap_switch, 'multi-tap-enabled')
self.enable_multi_tap_switch.connect('notify::active', lambda widget, param: self.config_manager.set_property('multi-tap-enabled', widget.get_active())) self._bind_switch_to_config(self.follow_track_roll_switch, 'follow-track-roll')
self._bind_switch_to_config(self.follow_track_pitch_switch, 'follow-track-pitch')
self._bind_switch_to_config(self.follow_track_yaw_switch, 'follow-track-yaw')
self.use_optimal_monitor_config_switch.connect('notify::active', self._refresh_use_optimal_monitor_config) self.use_optimal_monitor_config_switch.connect('notify::active', self._refresh_use_optimal_monitor_config)
@ -177,6 +188,11 @@ class ConnectedDevice(Gtk.Box):
self._settings_displays_app_info = appinfo self._settings_displays_app_info = appinfo
break break
def _bind_switch_to_config(self, switch, config_key):
self.config_manager.bind_property(config_key, switch, 'active', Gio.SettingsBindFlags.DEFAULT)
switch.set_active(self.config_manager.get_property(config_key))
switch.connect('notify::active', lambda widget, param: self.config_manager.set_property(config_key, widget.get_active()))
def _handle_zoom_on_focus_switch_changed(self, widget, param): def _handle_zoom_on_focus_switch_changed(self, widget, param):
display_distance = self.settings.get_double('display-distance') display_distance = self.settings.get_double('display-distance')
toggle_display_distance_end = self.settings.get_double('toggle-display-distance-end') toggle_display_distance_end = self.settings.get_double('toggle-display-distance-end')
@ -316,9 +332,6 @@ class ConnectedDevice(Gtk.Box):
def _on_virtual_displays_update_gui(self, virtual_display_manager): def _on_virtual_displays_update_gui(self, virtual_display_manager):
effect_enabled = self.effect_enable_switch.get_active() effect_enabled = self.effect_enable_switch.get_active()
virtual_displays_present = len(virtual_display_manager.displays) > 0 virtual_displays_present = len(virtual_display_manager.displays) > 0
self.launch_display_settings_button.set_visible(
self._settings_displays_app_info is not None and virtual_displays_present
)
self.monitor_wrapping_scheme_menu.set_sensitive(effect_enabled and virtual_displays_present) self.monitor_wrapping_scheme_menu.set_sensitive(effect_enabled and virtual_displays_present)
self.monitor_spacing_scale.set_sensitive(effect_enabled and virtual_displays_present) self.monitor_spacing_scale.set_sensitive(effect_enabled and virtual_displays_present)
@ -335,7 +348,9 @@ class ConnectedDevice(Gtk.Box):
new_displays_by_pid[display['pid']] = child new_displays_by_pid[display['pid']] = child
self.top_features_group.add(self.launch_display_settings_row) self.top_features_group.add(self.launch_display_settings_row)
self.launch_display_settings_row.set_visible(len(virtual_display_manager.displays) > 0) self.launch_display_settings_row.set_visible(
self._settings_displays_app_info is not None and virtual_displays_present
)
self.virtual_displays_by_pid = new_displays_by_pid self.virtual_displays_by_pid = new_displays_by_pid

View File

@ -290,7 +290,7 @@
<child> <child>
<object class="AdwActionRow"> <object class="AdwActionRow">
<property name="title" translatable="yes"><!-- adjustment slider -->Viewport horizontal offset</property> <property name="title" translatable="yes"><!-- adjustment slider -->Viewport horizontal offset</property>
<property name="subtitle" translatable="yes">By default, the viewport will center on the primary display. Use this slider to move the viewport to the left or right.</property> <property name="subtitle" translatable="yes">Move the viewport to the left or right of its default position.</property>
<child> <child>
<object class="GtkScale" id="viewport_offset_x_scale"> <object class="GtkScale" id="viewport_offset_x_scale">
<property name="valign">3</property> <property name="valign">3</property>
@ -320,7 +320,7 @@
<child> <child>
<object class="AdwActionRow"> <object class="AdwActionRow">
<property name="title" translatable="yes"><!-- adjustment slider -->Viewport vertical offset</property> <property name="title" translatable="yes"><!-- adjustment slider -->Viewport vertical offset</property>
<property name="subtitle" translatable="yes">By default, the viewport will center on the primary display. Use this slider to move the viewport up or down.</property> <property name="subtitle" translatable="yes">Move the viewport up or down from its default position.</property>
<child> <child>
<object class="GtkScale" id="viewport_offset_y_scale"> <object class="GtkScale" id="viewport_offset_y_scale">
<property name="valign">3</property> <property name="valign">3</property>
@ -492,9 +492,14 @@
<property name="icon-name">applications-system-symbolic</property> <property name="icon-name">applications-system-symbolic</property>
<property name="child"> <property name="child">
<object class="GtkBox"> <object class="GtkBox">
<property name="orientation">2</property>
<property name="margin-start">20</property>
<property name="margin-end">20</property>
<property name="spacing">20</property>
<child> <child>
<object class="AdwPreferencesGroup"> <object class="AdwPreferencesGroup">
<property name="title" translatable="yes"><!-- section heading for the advanced settings -->Advanced Settings</property> <property name="title" translatable="yes"><!-- section heading for the advanced settings -->Advanced Settings</property>
<property name="width-request">450</property>
<child> <child>
<object class="AdwActionRow"> <object class="AdwActionRow">
<property name="title" translatable="yes"><!-- feature that tries to the find best-fit monitor config -->Find optimal display config</property> <property name="title" translatable="yes"><!-- feature that tries to the find best-fit monitor config -->Find optimal display config</property>
@ -517,6 +522,17 @@
</child> </child>
</object> </object>
</child> </child>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Center on glasses' display</property>
<property name="subtitle" translatable="yes">Center the viewport on the glasses' display, even if the display is not in the middle.</property>
<child>
<object class="GtkSwitch" id="headset_display_as_viewport_center_switch">
<property name="valign">3</property>
</object>
</child>
</object>
</child>
<child> <child>
<object class="AdwActionRow"> <object class="AdwActionRow">
<property name="title" translatable="yes">Always primary display</property> <property name="title" translatable="yes">Always primary display</property>
@ -528,6 +544,119 @@
</child> </child>
</object> </object>
</child> </child>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Remove virtual displays on disable</property>
<property name="subtitle" translatable="yes">Automatically remove virtual displays when the XR effect is disabled.</property>
<child>
<object class="GtkSwitch" id="remove_virtual_displays_on_disable_switch">
<property name="valign">3</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Enable multi-tap detection</property>
<property name="subtitle" translatable="yes">Enables double-tap to recenter and triple-tap to recalibrate.</property>
<child>
<object class="GtkSwitch" id="enable_multi_tap_switch">
<property name="valign">3</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">All displays follow mode</property>
<property name="subtitle" translatable="yes">Follow mode moves all displays, not just the focused one.</property>
<child>
<object class="GtkSwitch" id="legacy_follow_mode_switch">
<property name="valign">3</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="AdwPreferencesGroup">
<property name="title"> </property>
<property name="width-request">700</property>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Follow mode movement tracking</property>
<property name="subtitle" translatable="yes">Choose which movements should be tracked in follow mode.</property>
<child>
<object class="GtkBox">
<property name="spacing">30</property>
<property name="margin-start">20</property>
<property name="margin-end">20</property>
<property name="halign">start</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="spacing">10</property>
<property name="halign">center</property>
<property name="width-request">80</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Horizontal</property>
<property name="valign">3</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="follow_track_yaw_switch">
<property name="valign">3</property>
<property name="halign">center</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="spacing">10</property>
<property name="halign">center</property>
<property name="width-request">80</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Vertical</property>
<property name="valign">3</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="follow_track_pitch_switch">
<property name="valign">3</property>
<property name="halign">center</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="spacing">10</property>
<property name="halign">center</property>
<property name="width-request">80</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Tilt/roll</property>
<property name="valign">3</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="follow_track_roll_switch">
<property name="valign">3</property>
<property name="halign">center</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child> <child>
<object class="AdwActionRow"> <object class="AdwActionRow">
<property name="title" translatable="yes">Movement look-ahead</property> <property name="title" translatable="yes">Movement look-ahead</property>
@ -590,17 +719,6 @@
</child> </child>
</object> </object>
</child> </child>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Enable multi-tap detection</property>
<property name="subtitle" translatable="yes">Enables double-tap to recenter and triple-tap to recalibrate.</property>
<child>
<object class="GtkSwitch" id="enable_multi_tap_switch">
<property name="valign">3</property>
</object>
</child>
</object>
</child>
</object> </object>
</child> </child>
</object> </object>

View File

@ -111,7 +111,9 @@ class BreezydesktopApplication(Adw.Application):
logo_icon_name='com.xronlinux.BreezyDesktop', logo_icon_name='com.xronlinux.BreezyDesktop',
version=self.version, version=self.version,
authors=['Wayne Heaney'], authors=['Wayne Heaney'],
copyright='© 2024 Wayne Heaney') copyright='© 2025 Wayne Heaney',
license_type=Gtk.License.GPL_3_0,
wrap_license=True)
about.present() about.present()
def on_license_action(self, widget, _): def on_license_action(self, widget, _):

View File

@ -102,6 +102,11 @@ class BreezydesktopWindow(Gtk.ApplicationWindow):
self.main_content.append(self.connected_device) self.main_content.append(self.connected_device)
self.connected_device.set_device_name(state_manager.connected_device_name) self.connected_device.set_device_name(state_manager.connected_device_name)
self.set_resizable(True)
self.set_default_size(1, 1)
return False
def _on_license_button_clicked(self, widget): def _on_license_button_clicked(self, widget):
dialog = LicenseDialog() dialog = LicenseDialog()
dialog.set_transient_for(widget.get_ancestor(Gtk.Window)) dialog.set_transient_for(widget.get_ancestor(Gtk.Window))