Bunch of changes to the UI
This commit is contained in:
parent
f5159fb06e
commit
12eecc591f
|
|
@ -58,6 +58,11 @@ if [ ! -L $extensions_dir/breezydesktop@org.xronlinux ]; then
|
||||||
chown -R $user:$group $extensions_dir/breezydesktop@org.xronlinux
|
chown -R $user:$group $extensions_dir/breezydesktop@org.xronlinux
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
glib-compile-schemas --targetdir=$extensions_dir/breezydesktop@org.xronlinux/schemas/ $extensions_dir/breezydesktop@org.xronlinux/schemas/
|
||||||
|
|
||||||
|
sudo cp $extensions_dir/breezydesktop@org.xronlinux/schemas/org.gnome.shell.extensions.breezy-desktop.gschema.xml /usr/share/glib-2.0/schemas/
|
||||||
|
sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
|
||||||
|
|
||||||
echo "Breezy Desktop extension is installed. Please log out, log back in, \
|
echo "Breezy Desktop extension is installed. Please log out, log back in, \
|
||||||
and then run the following command to enable it:\
|
and then run the following command to enable it:\
|
||||||
gnome-extensions enable breezydesktop@org.xronlinux"
|
gnome-extensions enable breezydesktop@org.xronlinux"
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,14 @@ export default class BreezyDesktopExtension extends Extension {
|
||||||
super(metadata, uuid);
|
super(metadata, uuid);
|
||||||
|
|
||||||
this.settings = this.getSettings();
|
this.settings = this.getSettings();
|
||||||
|
|
||||||
|
this.settings.connect('changed::effect-enable', () => {
|
||||||
|
if (this.settings.get_boolean('effect-enable')) {
|
||||||
|
this.enable();
|
||||||
|
} else {
|
||||||
|
this.disable();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Set/destroyed by enable/disable
|
// Set/destroyed by enable/disable
|
||||||
this._cursor_manager = null;
|
this._cursor_manager = null;
|
||||||
|
|
@ -132,43 +140,20 @@ export default class BreezyDesktopExtension extends Extension {
|
||||||
this._xr_effect = new XREffect({
|
this._xr_effect = new XREffect({
|
||||||
target_monitor: this._target_monitor,
|
target_monitor: this._target_monitor,
|
||||||
target_framerate: this._refresh_rate ?? 60,
|
target_framerate: this._refresh_rate ?? 60,
|
||||||
display_distance: this.settings.get_double('display-distance')
|
display_distance: this.settings.get_double('display-distance'),
|
||||||
|
toggle_display_distance_start: this.settings.get_double('toggle-display-distance-start'),
|
||||||
|
toggle_display_distance_end: this.settings.get_double('toggle-display-distance-end'),
|
||||||
});
|
});
|
||||||
|
|
||||||
this.settings.bind('display-distance', this._xr_effect, 'display-distance', Gio.SettingsBindFlags.DEFAULT)
|
this.settings.bind('display-distance', this._xr_effect, 'display-distance', Gio.SettingsBindFlags.DEFAULT)
|
||||||
|
this.settings.bind('toggle-display-distance-start', this._xr_effect, 'toggle-display-distance-start', Gio.SettingsBindFlags.DEFAULT)
|
||||||
|
this.settings.bind('toggle-display-distance-end', this._xr_effect, 'toggle-display-distance-end', Gio.SettingsBindFlags.DEFAULT)
|
||||||
|
|
||||||
this._overlay.add_effect_with_name('xr-desktop', this._xr_effect);
|
this._overlay.add_effect_with_name('xr-desktop', this._xr_effect);
|
||||||
Meta.disable_unredirect_for_display(global.display);
|
Meta.disable_unredirect_for_display(global.display);
|
||||||
Main.wm.addKeybinding(
|
|
||||||
'recenter-display-shortcut',
|
|
||||||
this.settings,
|
|
||||||
Meta.KeyBindingFlags.IGNORE_AUTOREPEAT,
|
|
||||||
Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW | Shell.ActionMode.POPUP,
|
|
||||||
this._recenter_display.bind(this)
|
|
||||||
);
|
|
||||||
|
|
||||||
Main.wm.addKeybinding(
|
this._add_settings_keybinding('recenter-display-shortcut', this._recenter_display.bind(this));
|
||||||
'toggle-display-distance-shortcut',
|
this._add_settings_keybinding('toggle-display-distance-shortcut', this._xr_effect._change_distance.bind(this._xr_effect));
|
||||||
this.settings,
|
|
||||||
Meta.KeyBindingFlags.IGNORE_AUTOREPEAT,
|
|
||||||
Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW | Shell.ActionMode.POPUP,
|
|
||||||
this._xr_effect._change_distance.bind(this._xr_effect)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Connect to the 'changed' signal for the keybinding property
|
|
||||||
this.settings.connect('changed::toggle-display-distance-shortcut', () => {
|
|
||||||
// Remove the old keybinding
|
|
||||||
Main.wm.removeKeybinding('toggle-display-distance-shortcut');
|
|
||||||
|
|
||||||
// Add the updated keybinding
|
|
||||||
Main.wm.addKeybinding(
|
|
||||||
'toggle-display-distance-shortcut',
|
|
||||||
this.settings,
|
|
||||||
Meta.KeyBindingFlags.IGNORE_AUTOREPEAT,
|
|
||||||
Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW | Shell.ActionMode.POPUP,
|
|
||||||
this._xr_effect._change_distance.bind(this._xr_effect)
|
|
||||||
);
|
|
||||||
});
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Error enabling XR effect', e);
|
console.error('Error enabling XR effect', e);
|
||||||
this._effect_disable();
|
this._effect_disable();
|
||||||
|
|
@ -176,6 +161,31 @@ export default class BreezyDesktopExtension extends Extension {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_add_settings_keybinding(settings_key, bind_to_function) {
|
||||||
|
Main.wm.addKeybinding(
|
||||||
|
settings_key,
|
||||||
|
this.settings,
|
||||||
|
Meta.KeyBindingFlags.IGNORE_AUTOREPEAT,
|
||||||
|
Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW | Shell.ActionMode.POPUP,
|
||||||
|
bind_to_function
|
||||||
|
);
|
||||||
|
|
||||||
|
// Connect to the 'changed' signal for the keybinding property
|
||||||
|
this.settings.connect(`changed::${settings_key}`, () => {
|
||||||
|
// Remove the old keybinding
|
||||||
|
Main.wm.removeKeybinding(settings_key);
|
||||||
|
|
||||||
|
// Add the updated keybinding
|
||||||
|
Main.wm.addKeybinding(
|
||||||
|
settings_key,
|
||||||
|
this.settings,
|
||||||
|
Meta.KeyBindingFlags.IGNORE_AUTOREPEAT,
|
||||||
|
Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW | Shell.ActionMode.POPUP,
|
||||||
|
bind_to_function
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
_recenter_display() {
|
_recenter_display() {
|
||||||
const file = Gio.file_new_for_path('/dev/shm/xr_driver_control');
|
const file = Gio.file_new_for_path('/dev/shm/xr_driver_control');
|
||||||
const stream = file.replace(null, false, Gio.FileCreateFlags.NONE, null);
|
const stream = file.replace(null, false, Gio.FileCreateFlags.NONE, null);
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,5 +1,14 @@
|
||||||
<schemalist gettext-domain="breezydesktop@org.xronlinux">
|
<schemalist gettext-domain="breezydesktop@org.xronlinux">
|
||||||
<schema id="org.gnome.shell.extensions.breezy-desktop" path="/org/gnome/shell/extensions/breezy-desktop/">
|
<schema id="org.gnome.shell.extensions.breezy-desktop" path="/org/gnome/shell/extensions/breezy-desktop/">
|
||||||
|
<key name="effect-enable" type="b">
|
||||||
|
<default>
|
||||||
|
true
|
||||||
|
</default>
|
||||||
|
<summary>Enable XR effect</summary>
|
||||||
|
<description>
|
||||||
|
Enable XR effect
|
||||||
|
</description>
|
||||||
|
</key>
|
||||||
<key name="recenter-display-shortcut" type="as">
|
<key name="recenter-display-shortcut" type="as">
|
||||||
<default>
|
<default>
|
||||||
<![CDATA[['<Control><Super>space', 'Ctrl+Super+Space']]]>
|
<![CDATA[['<Control><Super>space', 'Ctrl+Super+Space']]]>
|
||||||
|
|
@ -27,22 +36,22 @@
|
||||||
How far away the display appears. Farther will look smaller, closer will look larger.
|
How far away the display appears. Farther will look smaller, closer will look larger.
|
||||||
</description>
|
</description>
|
||||||
</key>
|
</key>
|
||||||
<key name="toggle-display-distance-nearest" type="d">
|
<key name="toggle-display-distance-start" type="d">
|
||||||
<default>
|
<default>
|
||||||
0.85
|
0.85
|
||||||
</default>
|
</default>
|
||||||
<summary>Display distance nearest</summary>
|
<summary>Display distance start</summary>
|
||||||
<description>
|
<description>
|
||||||
How close to bring in the display when using the "change distance" shortcut.
|
Start distance when using the "change distance" shortcut.
|
||||||
</description>
|
</description>
|
||||||
</key>
|
</key>
|
||||||
<key name="toggle-display-distance-farthest" type="d">
|
<key name="toggle-display-distance-end" type="d">
|
||||||
<default>
|
<default>
|
||||||
1.05
|
1.05
|
||||||
</default>
|
</default>
|
||||||
<summary>Display distance farthest</summary>
|
<summary>Display distance end</summary>
|
||||||
<description>
|
<description>
|
||||||
How far to push out the display when using the "change distance" shortcut.
|
End distance when using the "toggle display distance" shortcut.
|
||||||
</description>
|
</description>
|
||||||
</key>
|
</key>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,6 @@ import { getShaderSource } from "./shader.js";
|
||||||
import { toSec } from "./time.js";
|
import { toSec } from "./time.js";
|
||||||
|
|
||||||
export const IPC_FILE_PATH = "/dev/shm/breezy_desktop_imu";
|
export const IPC_FILE_PATH = "/dev/shm/breezy_desktop_imu";
|
||||||
const display_distance_nearest = 0.85;
|
|
||||||
const display_distance_furthest = 1.05;
|
|
||||||
|
|
||||||
// the driver should be using the same data layout version
|
// the driver should be using the same data layout version
|
||||||
const DATA_LAYOUT_VERSION = 2;
|
const DATA_LAYOUT_VERSION = 2;
|
||||||
|
|
@ -192,6 +190,24 @@ export const XREffect = GObject.registerClass({
|
||||||
2.5,
|
2.5,
|
||||||
1.05
|
1.05
|
||||||
),
|
),
|
||||||
|
'toggle-display-distance-start': GObject.ParamSpec.double(
|
||||||
|
'toggle-display-distance-start',
|
||||||
|
'Display distance start',
|
||||||
|
'Start distance when using the "change distance" shortcut.',
|
||||||
|
GObject.ParamFlags.READWRITE,
|
||||||
|
0.2,
|
||||||
|
2.5,
|
||||||
|
1.05
|
||||||
|
),
|
||||||
|
'toggle-display-distance-end': GObject.ParamSpec.double(
|
||||||
|
'toggle-display-distance-end',
|
||||||
|
'Display distance end',
|
||||||
|
'End distance when using the "change distance" shortcut.',
|
||||||
|
GObject.ParamFlags.READWRITE,
|
||||||
|
0.2,
|
||||||
|
2.5,
|
||||||
|
1.05
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}, class XREffect extends Shell.GLSLEffect {
|
}, class XREffect extends Shell.GLSLEffect {
|
||||||
constructor(params = {}) {
|
constructor(params = {}) {
|
||||||
|
|
@ -199,26 +215,24 @@ export const XREffect = GObject.registerClass({
|
||||||
|
|
||||||
this._frametime = Math.floor(1000 / this.target_framerate);
|
this._frametime = Math.floor(1000 / this.target_framerate);
|
||||||
|
|
||||||
this._display_distance_near = false;
|
this._is_display_distance_at_end = false;
|
||||||
this._distance_ease_timeline = null;
|
this._distance_ease_timeline = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
_change_distance() {
|
_change_distance() {
|
||||||
if (this._distance_ease_timeline?.is_playing()) this._distance_ease_timeline.stop();
|
if (this._distance_ease_timeline?.is_playing()) this._distance_ease_timeline.stop();
|
||||||
|
|
||||||
this._distance_ease_start = this.display_distance;
|
this._distance_ease_start = this.display_distance;
|
||||||
this._distance_ease_timeline = Clutter.Timeline.new_for_actor(this.get_actor(), 250);
|
this._distance_ease_timeline = Clutter.Timeline.new_for_actor(this.get_actor(), 250);
|
||||||
|
|
||||||
if (this._display_distance_near) {
|
const toggle_display_distance_target = this._is_display_distance_at_end ?
|
||||||
this._distance_ease_timeline.connect('new-frame', () => {
|
this.toggle_display_distance_start : this.toggle_display_distance_end;
|
||||||
this.display_distance = this._distance_ease_start + this._distance_ease_timeline.get_progress() * (display_distance_furthest - this._distance_ease_start);
|
this._distance_ease_timeline.connect('new-frame', () => {
|
||||||
});
|
this.display_distance = this._distance_ease_start +
|
||||||
this._display_distance_near = false;
|
this._distance_ease_timeline.get_progress() *
|
||||||
} else {
|
(toggle_display_distance_target - this._distance_ease_start);
|
||||||
this._distance_ease_timeline.connect('new-frame', () => {
|
});
|
||||||
this.display_distance = this._distance_ease_start - this._distance_ease_timeline.get_progress() * (this._distance_ease_start - display_distance_nearest);
|
this._is_display_distance_at_end = !this._is_display_distance_at_end;
|
||||||
});
|
|
||||||
this._display_distance_near = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._distance_ease_timeline.start();
|
this._distance_ease_timeline.start();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,93 @@
|
||||||
|
import gi
|
||||||
|
import sys
|
||||||
|
import threading
|
||||||
|
|
||||||
|
gi.require_version("Gtk", "4.0")
|
||||||
|
gi.require_version('Adw', '1')
|
||||||
|
|
||||||
|
from gi.repository import Adw, Gio, Gtk
|
||||||
|
|
||||||
|
from XRDriverIPC import XRDriverIPC
|
||||||
|
from ShortcutDialog import bind_shortcut_settings
|
||||||
|
|
||||||
|
class Logger:
|
||||||
|
def info(self, message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
def error(self, message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
class MainWindow(Gtk.ApplicationWindow):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.set_title("Breezy Desktop")
|
||||||
|
|
||||||
|
builder = Gtk.Builder()
|
||||||
|
builder.add_from_file("./breezy-desktop.ui")
|
||||||
|
self.set_child(builder.get_object("main"))
|
||||||
|
self.connected_device_info = builder.get_object("connected-device-info")
|
||||||
|
self.connected_device_label = builder.get_object("connected-device-label")
|
||||||
|
self.connected_device_settings = builder.get_object("connected-device-settings")
|
||||||
|
self.connected_device_shortcuts = builder.get_object("connected-device-shortcuts")
|
||||||
|
self.no_connected_device = builder.get_object("no-connected-device")
|
||||||
|
|
||||||
|
self.settings = Gio.Settings.new_with_path("org.gnome.shell.extensions.breezy-desktop", "/org/gnome/shell/extensions/breezy-desktop/")
|
||||||
|
self.ipc = XRDriverIPC(logger = Logger())
|
||||||
|
self._refresh_state()
|
||||||
|
|
||||||
|
bind_shortcut_settings(self, self.settings, [
|
||||||
|
builder.get_object('reassign-recenter-display-shortcut-button'),
|
||||||
|
builder.get_object('reassign-toggle-display-distance-shortcut-button'),
|
||||||
|
])
|
||||||
|
|
||||||
|
self.bind_set_distance_toggle([
|
||||||
|
builder.get_object('set-toggle-display-distance-start-button'),
|
||||||
|
builder.get_object('set-toggle-display-distance-end-button')
|
||||||
|
])
|
||||||
|
display_distance_slider = builder.get_object('display-distance-slider')
|
||||||
|
self.settings.bind('display-distance', display_distance_slider, 'value', Gio.SettingsBindFlags.DEFAULT)
|
||||||
|
|
||||||
|
effect_enable_switch = builder.get_object('effect-enable')
|
||||||
|
self.settings.bind('effect-enable', effect_enable_switch, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||||
|
|
||||||
|
def _refresh_state(self):
|
||||||
|
self.state = self.ipc.retrieve_driver_state()
|
||||||
|
if self.state.get('connected_device_brand') and self.state.get('connected_device_model'):
|
||||||
|
self.connected_device_info.set_visible(True)
|
||||||
|
self.connected_device_settings.set_visible(True)
|
||||||
|
self.connected_device_shortcuts.set_visible(True)
|
||||||
|
self.no_connected_device.set_visible(False)
|
||||||
|
self.connected_device_label.set_markup(f"<b>{self.state['connected_device_brand']} {self.state['connected_device_model']}</b>")
|
||||||
|
else:
|
||||||
|
self.connected_device_info.set_visible(False)
|
||||||
|
self.connected_device_settings.set_visible(False)
|
||||||
|
self.connected_device_shortcuts.set_visible(False)
|
||||||
|
self.no_connected_device.set_visible(True)
|
||||||
|
threading.Timer(1.0, self._refresh_state).start()
|
||||||
|
|
||||||
|
|
||||||
|
def bind_set_distance_toggle(self, widgets):
|
||||||
|
for widget in widgets:
|
||||||
|
widget.connect('clicked', lambda *args, widget=widget: on_set_display_distance_toggle(self.settings, widget))
|
||||||
|
reload_display_distance_toggle_button(self.settings, widget)
|
||||||
|
|
||||||
|
def reload_display_distance_toggle_button(settings, widget):
|
||||||
|
distance = settings.get_double(widget.get_name())
|
||||||
|
if distance: widget.set_label(str(distance))
|
||||||
|
|
||||||
|
def on_set_display_distance_toggle(settings, widget):
|
||||||
|
distance = settings.get_double('display-distance')
|
||||||
|
settings.set_double(widget.get_name(), distance)
|
||||||
|
reload_display_distance_toggle_button(settings, widget)
|
||||||
|
|
||||||
|
class BreezyDesktop(Adw.Application):
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
super().__init__(**kwargs)
|
||||||
|
self.connect('activate', self.on_activate)
|
||||||
|
|
||||||
|
def on_activate(self, app):
|
||||||
|
self.win = MainWindow(application=app)
|
||||||
|
self.win.present()
|
||||||
|
|
||||||
|
app = BreezyDesktop(application_id="com.example.GtkApplication")
|
||||||
|
app.run(sys.argv)
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
import gi
|
|
||||||
import sys
|
|
||||||
|
|
||||||
gi.require_version("Gtk", "4.0")
|
|
||||||
gi.require_version('Adw', '1')
|
|
||||||
|
|
||||||
from gi.repository import Adw, Gio, Gtk
|
|
||||||
|
|
||||||
from XRDriverIPC import XRDriverIPC
|
|
||||||
from ShortcutDialog import bind_shortcut_settings
|
|
||||||
|
|
||||||
class Logger:
|
|
||||||
def info(self, message):
|
|
||||||
print(message)
|
|
||||||
|
|
||||||
def error(self, message):
|
|
||||||
print(message)
|
|
||||||
|
|
||||||
class MainWindow(Gtk.ApplicationWindow):
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
self.set_title("Breezy GNOME")
|
|
||||||
|
|
||||||
builder = Gtk.Builder()
|
|
||||||
builder.add_from_file("./breezy-desktop.ui")
|
|
||||||
self.set_child(builder.get_object("main"))
|
|
||||||
|
|
||||||
self.settings = Gio.Settings.new_with_path("org.gnome.shell.extensions.breezy-desktop", "/org/gnome/shell/extensions/breezy-desktop/")
|
|
||||||
self.ipc = XRDriverIPC(logger = Logger())
|
|
||||||
|
|
||||||
bind_shortcut_settings(self, self.settings, [
|
|
||||||
builder.get_object('reassign-recenter-display-shortcut-button'),
|
|
||||||
builder.get_object('reassign-toggle-display-distance-shortcut-button'),
|
|
||||||
])
|
|
||||||
|
|
||||||
display_distance_slider = builder.get_object('display-distance-slider')
|
|
||||||
self.settings.bind('display-distance', display_distance_slider, 'value', Gio.SettingsBindFlags.DEFAULT)
|
|
||||||
|
|
||||||
class MyApp(Adw.Application):
|
|
||||||
def __init__(self, **kwargs):
|
|
||||||
super().__init__(**kwargs)
|
|
||||||
self.connect('activate', self.on_activate)
|
|
||||||
|
|
||||||
def on_activate(self, app):
|
|
||||||
self.win = MainWindow(application=app)
|
|
||||||
self.win.present()
|
|
||||||
|
|
||||||
app = MyApp(application_id="com.example.GtkApplication")
|
|
||||||
app.run(sys.argv)
|
|
||||||
|
|
@ -32,7 +32,10 @@ class ShortcutDialog:
|
||||||
state
|
state
|
||||||
)
|
)
|
||||||
label = Gtk.accelerator_get_label(keyval, state)
|
label = Gtk.accelerator_get_label(keyval, state)
|
||||||
|
|
||||||
|
# hacky way to store the label, causes warnings from the WM
|
||||||
self.settings.set_strv(self.settings_key, [binding, label])
|
self.settings.set_strv(self.settings_key, [binding, label])
|
||||||
|
|
||||||
self.widget.close()
|
self.widget.close()
|
||||||
else:
|
else:
|
||||||
done = False
|
done = False
|
||||||
|
|
|
||||||
|
|
@ -1,145 +1,140 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface domain="breezy-desktop">
|
<interface domain="breezy-desktop">
|
||||||
<requires lib="gtk" version="4.0"/>
|
<requires lib="gtk" version="4.0"/>
|
||||||
<object class="AdwClamp" id="main">
|
<object class="GtkBox" id="main">
|
||||||
<property name="child">
|
<property name="orientation">1</property>
|
||||||
<object class="GtkBox">
|
<property name="margin-top">20</property>
|
||||||
<property name="orientation">1</property>
|
<property name="margin-bottom">20</property>
|
||||||
<property name="margin-top">20</property>
|
<property name="margin-start">20</property>
|
||||||
<property name="margin-bottom">20</property>
|
<property name="margin-end">20</property>
|
||||||
<property name="margin-start">20</property>
|
<property name="spacing">20</property>
|
||||||
<property name="margin-end">20</property>
|
<child>
|
||||||
<property name="spacing">20</property>
|
<object class="AdwStatusPage" id="no-connected-device">
|
||||||
|
<property name="title" translatable="true">No device connected</property>
|
||||||
|
<property name="description" translatable="true">Breezy Desktop was unable to detect any supported XR devices.</property>
|
||||||
|
<property name="icon-name">network-disconnected-symbolic</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkGrid" id="connected-device-info">
|
||||||
|
<property name="column-spacing">4</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwPreferencesGroup">
|
<object class="GtkImage">
|
||||||
<property name="title" translatable="true">Settings</property>
|
<property name="icon-name">horizontal-arrows-symbolic</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="connected-device-label">
|
||||||
|
<property name="label">VITURE One</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label" translatable="yes">connected</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="AdwPreferencesGroup" id="connected-device-settings">
|
||||||
|
<property name="title" translatable="true">Settings</property>
|
||||||
|
<child>
|
||||||
|
<object class="AdwActionRow">
|
||||||
|
<property name="title" translatable="true">Effect enabled</property>
|
||||||
|
<property name="subtitle" translatable="true">Turn on or off the XR desktop effect</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwActionRow">
|
<object class="GtkSwitch" id="effect-enable">
|
||||||
<property name="title" translatable="true">Effect enabled</property>
|
<property name="valign">3</property>
|
||||||
<property name="subtitle" translatable="true">Turn on or off the XR desktop effect</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkSwitch" id="effect-enable">
|
|
||||||
<property name="valign">center</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="AdwActionRow">
|
|
||||||
<property name="title" translatable="true">Display distance</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkScale" id="display-distance">
|
|
||||||
<property name="valign">center</property>
|
|
||||||
<property name="draw-value">true</property>
|
|
||||||
<property name="value-pos">0</property>
|
|
||||||
<property name="digits">2</property>
|
|
||||||
<property name="width-request">350</property>
|
|
||||||
<property name="has-origin">false</property>
|
|
||||||
<property name="adjustment">
|
|
||||||
<object class="GtkAdjustment" id="display-distance-slider">
|
|
||||||
<property name="lower">0.2</property>
|
|
||||||
<property name="upper">2.5</property>
|
|
||||||
<property name="step-increment">0.01</property>
|
|
||||||
<property name="value">1.05</property>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
<marks>
|
|
||||||
<mark value="0.2" position="bottom"></mark>
|
|
||||||
<mark value="1.0" position="bottom"></mark>
|
|
||||||
<mark value="2.5" position="bottom"></mark>
|
|
||||||
</marks>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwPreferencesGroup">
|
<object class="AdwActionRow">
|
||||||
<property name="title" translatable="true">Keyboard Shortcuts</property>
|
<property name="title" translatable="true">Display distance</property>
|
||||||
<property name="description" translatable="true">Modify keyboard shortcuts and how they work</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwActionRow">
|
<object class="GtkScale" id="display-distance">
|
||||||
<property name="title" translatable="true">Re-center display shortcut</property>
|
<property name="valign">3</property>
|
||||||
<property name="subtitle" translatable="true">Pin the virtual display to the current position</property>
|
<property name="draw-value">true</property>
|
||||||
<child>
|
<property name="value-pos">0</property>
|
||||||
<object class="GtkButton" id="reassign-recenter-display-shortcut-button">
|
<property name="digits">2</property>
|
||||||
<style>
|
<property name="width-request">350</property>
|
||||||
<class name="row-button"/>
|
<property name="has-origin">false</property>
|
||||||
</style>
|
<property name="adjustment">
|
||||||
<property name="name">recenter-display-shortcut</property>
|
<object class="GtkAdjustment" id="display-distance-slider">
|
||||||
<property name="valign">center</property>
|
<property name="lower">0.2</property>
|
||||||
<property name="label">Test</property>
|
<property name="upper">2.5</property>
|
||||||
|
<property name="step-increment">0.01</property>
|
||||||
|
<property name="value">1.05</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</property>
|
||||||
|
<marks>
|
||||||
|
<mark value="0.2" position="bottom"></mark>
|
||||||
|
<mark value="1.0" position="bottom"></mark>
|
||||||
|
<mark value="2.5" position="bottom"></mark>
|
||||||
|
</marks>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="AdwPreferencesGroup" id="connected-device-shortcuts">
|
||||||
|
<property name="title" translatable="true">Keyboard Shortcuts</property>
|
||||||
|
<property name="description" translatable="true">Modify keyboard shortcuts and how they work</property>
|
||||||
|
<child>
|
||||||
|
<object class="AdwActionRow">
|
||||||
|
<property name="title" translatable="true">Re-center display shortcut</property>
|
||||||
|
<property name="subtitle" translatable="true">Pin the virtual display to the current position</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwActionRow">
|
<object class="GtkButton" id="reassign-recenter-display-shortcut-button">
|
||||||
<property name="title" translatable="true">Display distance shortcut</property>
|
<style>
|
||||||
<property name="subtitle" translatable="true">Quickly toggle between two predefined distances</property>
|
<class name="row-button"/>
|
||||||
<child>
|
</style>
|
||||||
<object class="GtkButton" id="reassign-toggle-display-distance-shortcut-button">
|
<property name="name">recenter-display-shortcut</property>
|
||||||
<style>
|
<property name="valign">3</property>
|
||||||
<class name="row-button"/>
|
<property name="label">Test</property>
|
||||||
</style>
|
|
||||||
<property name="name">toggle-display-distance-shortcut</property>
|
|
||||||
<property name="valign">center</property>
|
|
||||||
<property name="label">Test</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="AdwActionRow">
|
||||||
|
<property name="title" translatable="true">Display distance shortcut</property>
|
||||||
|
<property name="subtitle" translatable="true">Quickly toggle between two predefined distances</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwActionRow">
|
<object class="GtkButton" id="reassign-toggle-display-distance-shortcut-button">
|
||||||
<property name="title" translatable="true">Nearest toggle distance</property>
|
<style>
|
||||||
<property name="visible">false</property>
|
<class name="row-button"/>
|
||||||
|
</style>
|
||||||
|
<property name="name">toggle-display-distance-shortcut</property>
|
||||||
|
<property name="valign">3</property>
|
||||||
|
<property name="label">Test</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="AdwActionRow">
|
||||||
|
<property name="title" translatable="true">Toggle distance start</property>
|
||||||
|
<property name="subtitle" translatable="true">Use the buttons to capture the current display distance as start and end points.</property>
|
||||||
|
<property name="valign">2</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="spacing">30</property>
|
||||||
|
<property name="width-request">150</property>
|
||||||
|
<property name="margin-start">30</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScale" id="toggle-display-distance-nearest">
|
<object class="GtkButton" id="set-toggle-display-distance-start-button">
|
||||||
|
<property name="name">toggle-display-distance-start</property>
|
||||||
<property name="valign">3</property>
|
<property name="valign">3</property>
|
||||||
<property name="draw-value">true</property>
|
|
||||||
<property name="value-pos">0</property>
|
|
||||||
<property name="digits">2</property>
|
|
||||||
<property name="width-request">350</property>
|
|
||||||
<property name="has-origin">false</property>
|
|
||||||
<property name="adjustment">
|
|
||||||
<object class="GtkAdjustment">
|
|
||||||
<property name="lower">0.2</property>
|
|
||||||
<property name="upper">2.5</property>
|
|
||||||
<property name="step-increment">0.01</property>
|
|
||||||
<property name="value">0.85</property>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
<marks>
|
|
||||||
<mark value="1.0" position="bottom"></mark>
|
|
||||||
</marks>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="AdwActionRow">
|
|
||||||
<property name="title" translatable="true">Farthest toggle distance</property>
|
|
||||||
<property name="visible">false</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScale" id="toggle-display-distance-farthest">
|
<object class="GtkButton" id="set-toggle-display-distance-end-button">
|
||||||
|
<property name="name">toggle-display-distance-end</property>
|
||||||
<property name="valign">3</property>
|
<property name="valign">3</property>
|
||||||
<property name="draw-value">true</property>
|
|
||||||
<property name="value-pos">0</property>
|
|
||||||
<property name="digits">2</property>
|
|
||||||
<property name="width-request">350</property>
|
|
||||||
<property name="has-origin">false</property>
|
|
||||||
<property name="adjustment">
|
|
||||||
<object class="GtkAdjustment">
|
|
||||||
<property name="lower">0.2</property>
|
|
||||||
<property name="upper">2.5</property>
|
|
||||||
<property name="step-increment">0.01</property>
|
|
||||||
<property name="value">1.05</property>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
<marks>
|
|
||||||
<mark value="1.0" position="bottom"></mark>
|
|
||||||
</marks>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
|
@ -147,6 +142,6 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</property>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
Loading…
Reference in New Issue