Fix monitor sorting to avoid buggy rearrangement of monitors when angling is changed

This commit is contained in:
wheaney 2025-03-07 20:36:57 -08:00
parent 1b45e00a9d
commit b599b2a6cc
14 changed files with 124 additions and 159 deletions

View File

@ -181,6 +181,7 @@ function monitorWrap(cachedMonitorRadians, radiusPixels, monitorSpacingPixels, m
* and distance to the center of the screen
* @param {Object[]} monitorDetailsList - contains x, y, width, height (coordinates from top-left)
* @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
* and a `rotation` angle for the given wrapping scheme
*/
@ -198,7 +199,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels;
cachedMonitorRadians[0] = -fovDetails.defaultDistanceHorizontalRadians / 2;
monitorDetailsList.forEach(monitorDetails => {
horizontalMonitorSort(monitorDetailsList).forEach(({monitorDetails, originalIndex}) => {
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 upTopPixels = monitorDetails.y + (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels;
@ -210,6 +211,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
const upCenterPixels = upTopPixels + upCenterOriginPixels;
monitorPlacements.push({
originalIndex,
topLeftNoRotate: [
monitorCenterRadius,
@ -257,7 +259,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
const monitorSpacingPixels = monitorSpacing * fovDetails.heightPixels;
cachedMonitorRadians[0] = -fovDetails.defaultDistanceVerticalRadians / 2;
monitorDetailsList.forEach(monitorDetails => {
verticalMonitorSort(monitorDetailsList).forEach(({monitorDetails, originalIndex}) => {
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 westPixels = monitorDetails.x + (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels;
@ -269,6 +271,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
const westCenterPixels = westPixels + westCenterOriginPixels;
monitorPlacements.push({
originalIndex,
topLeftNoRotate: [
monitorCenterRadius,
@ -312,7 +315,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels;
// 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 westPixels = monitorDetails.x + (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels;
@ -324,6 +327,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch
const upCenterPixels = upPixels + upCenterOriginPixels;
monitorPlacements.push({
originalIndex: index,
topLeftNoRotate: [
fovDetails.completeScreenDistancePixels,
westPixels,
@ -352,11 +356,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)}`);
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;
});
}
export const VirtualDisplaysActor = GObject.registerClass({
Properties: {
'target-monitor': GObject.ParamSpec.jsobject(
@ -618,7 +655,7 @@ export const VirtualDisplaysActor = GObject.registerClass({
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}`);
const containerActor = new Clutter.Actor({
@ -728,13 +765,13 @@ export const VirtualDisplaysActor = GObject.registerClass({
this.display_distance / this._display_distance_default(),
this.smooth_follow_enabled,
this._fov_details(),
this._sorted_monitors
this._all_monitors
);
if (this.focused_monitor_index !== focusedMonitorIndex) {
Globals.logger.log_debug(`Switching to monitor ${focusedMonitorIndex}`);
this.focused_monitor_index = focusedMonitorIndex;
this.focused_monitor_details = this._sorted_monitors[focusedMonitorIndex];
this.focused_monitor_details = this._all_monitors[focusedMonitorIndex];
}
}
@ -783,79 +820,55 @@ export const 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() {
const minX = Math.min(...this._all_monitors.map(monitor => monitor.x));
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));
try {
const minX = Math.min(...this._all_monitors.map(monitor => monitor.x));
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));
// the beginning edges of the viewport if it's centered on all displays
const allDisplaysCenterXBegin = (minX + maxX) / 2 - this.target_monitor.width / 2;
const allDisplaysCenterYBegin = (minY + maxY) / 2 - this.target_monitor.height / 2;
// the beginning edges of the viewport if it's centered on all displays
const allDisplaysCenterXBegin = (minX + maxX) / 2 - this.target_monitor.width / 2;
const allDisplaysCenterYBegin = (minY + maxY) / 2 - this.target_monitor.height / 2;
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;
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';
// 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 viewport center, then adjusted by the offsets
this._sorted_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];
});
}
_handle_display_distance_properties_change() {

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-07 15:10-0800\n"
"POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -308,9 +308,7 @@ msgid "Viewport horizontal offset"
msgstr ""
#: src/gtk/connected-device.ui:293
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgid "Move the viewport to the left or right of its default position."
msgstr ""
#: src/gtk/connected-device.ui:322
@ -318,9 +316,7 @@ msgid "Viewport vertical offset"
msgstr ""
#: src/gtk/connected-device.ui:323
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgid "Move the viewport up or down from its default position."
msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-07 15:10-0800\n"
"POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-02 20:54-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@ -320,9 +320,7 @@ msgid "Viewport horizontal offset"
msgstr ""
#: src/gtk/connected-device.ui:293
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgid "Move the viewport to the left or right of its default position."
msgstr ""
#: src/gtk/connected-device.ui:322
@ -330,9 +328,7 @@ msgid "Viewport vertical offset"
msgstr ""
#: src/gtk/connected-device.ui:323
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgid "Move the viewport up or down from its default position."
msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-07 15:10-0800\n"
"POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-02 20:55-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Spanish <es@tp.org.es>\n"
@ -319,9 +319,7 @@ msgid "Viewport horizontal offset"
msgstr ""
#: src/gtk/connected-device.ui:293
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgid "Move the viewport to the left or right of its default position."
msgstr ""
#: src/gtk/connected-device.ui:322
@ -329,9 +327,7 @@ msgid "Viewport vertical offset"
msgstr ""
#: src/gtk/connected-device.ui:323
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgid "Move the viewport up or down from its default position."
msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-07 15:10-0800\n"
"POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-02 20:54-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: French <traduc@traduc.org>\n"
@ -322,9 +322,7 @@ msgid "Viewport horizontal offset"
msgstr ""
#: src/gtk/connected-device.ui:293
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgid "Move the viewport to the left or right of its default position."
msgstr ""
#: src/gtk/connected-device.ui:322
@ -332,9 +330,7 @@ msgid "Viewport vertical offset"
msgstr ""
#: src/gtk/connected-device.ui:323
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgid "Move the viewport up or down from its default position."
msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-07 15:10-0800\n"
"POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-02 21:14-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
@ -320,9 +320,7 @@ msgid "Viewport horizontal offset"
msgstr ""
#: src/gtk/connected-device.ui:293
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgid "Move the viewport to the left or right of its default position."
msgstr ""
#: src/gtk/connected-device.ui:322
@ -330,9 +328,7 @@ msgid "Viewport vertical offset"
msgstr ""
#: src/gtk/connected-device.ui:323
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgid "Move the viewport up or down from its default position."
msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365

View File

@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-07 15:10-0800\n"
"POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-02 20:55-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
@ -322,9 +322,7 @@ msgid "Viewport horizontal offset"
msgstr ""
#: src/gtk/connected-device.ui:293
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgid "Move the viewport to the left or right of its default position."
msgstr ""
#: src/gtk/connected-device.ui:322
@ -332,9 +330,7 @@ msgid "Viewport vertical offset"
msgstr ""
#: src/gtk/connected-device.ui:323
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgid "Move the viewport up or down from its default position."
msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-07 15:10-0800\n"
"POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-16 10:26-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@ -309,9 +309,7 @@ msgid "Viewport horizontal offset"
msgstr ""
#: src/gtk/connected-device.ui:293
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgid "Move the viewport to the left or right of its default position."
msgstr ""
#: src/gtk/connected-device.ui:322
@ -319,9 +317,7 @@ msgid "Viewport vertical offset"
msgstr ""
#: src/gtk/connected-device.ui:323
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgid "Move the viewport up or down from its default position."
msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-07 15:10-0800\n"
"POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-19 09:39-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-"
@ -321,9 +321,7 @@ msgid "Viewport horizontal offset"
msgstr ""
#: src/gtk/connected-device.ui:293
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgid "Move the viewport to the left or right of its default position."
msgstr ""
#: src/gtk/connected-device.ui:322
@ -331,9 +329,7 @@ msgid "Viewport vertical offset"
msgstr ""
#: src/gtk/connected-device.ui:323
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgid "Move the viewport up or down from its default position."
msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-07 15:10-0800\n"
"POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-17 09:39-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Russian <gnu@d07.ru>\n"
@ -321,9 +321,7 @@ msgid "Viewport horizontal offset"
msgstr ""
#: src/gtk/connected-device.ui:293
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgid "Move the viewport to the left or right of its default position."
msgstr ""
#: src/gtk/connected-device.ui:322
@ -331,9 +329,7 @@ msgid "Viewport vertical offset"
msgstr ""
#: src/gtk/connected-device.ui:323
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgid "Move the viewport up or down from its default position."
msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-07 15:10-0800\n"
"POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-16 10:31-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@ -320,9 +320,7 @@ msgid "Viewport horizontal offset"
msgstr ""
#: src/gtk/connected-device.ui:293
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgid "Move the viewport to the left or right of its default position."
msgstr ""
#: src/gtk/connected-device.ui:322
@ -330,9 +328,7 @@ msgid "Viewport vertical offset"
msgstr ""
#: src/gtk/connected-device.ui:323
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgid "Move the viewport up or down from its default position."
msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-07 15:10-0800\n"
"POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-17 10:08-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
@ -321,9 +321,7 @@ msgid "Viewport horizontal offset"
msgstr ""
#: src/gtk/connected-device.ui:293
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgid "Move the viewport to the left or right of its default position."
msgstr ""
#: src/gtk/connected-device.ui:322
@ -331,9 +329,7 @@ msgid "Viewport vertical offset"
msgstr ""
#: src/gtk/connected-device.ui:323
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgid "Move the viewport up or down from its default position."
msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-07 15:10-0800\n"
"POT-Creation-Date: 2025-03-07 20:36-0800\n"
"PO-Revision-Date: 2024-08-02 20:55-0700\n"
"Last-Translator: <wayne@xronlinux.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@ -317,9 +317,7 @@ msgid "Viewport horizontal offset"
msgstr ""
#: src/gtk/connected-device.ui:293
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport to the left or right."
msgid "Move the viewport to the left or right of its default position."
msgstr ""
#: src/gtk/connected-device.ui:322
@ -327,9 +325,7 @@ msgid "Viewport vertical offset"
msgstr ""
#: src/gtk/connected-device.ui:323
msgid ""
"By default, the viewport will center on the primary display. Use this slider "
"to move the viewport up or down."
msgid "Move the viewport up or down from its default position."
msgstr ""
#: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365

View File

@ -290,7 +290,7 @@
<child>
<object class="AdwActionRow">
<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>
<object class="GtkScale" id="viewport_offset_x_scale">
<property name="valign">3</property>
@ -320,7 +320,7 @@
<child>
<object class="AdwActionRow">
<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>
<object class="GtkScale" id="viewport_offset_y_scale">
<property name="valign">3</property>