diff --git a/gnome/src/extension.js b/gnome/src/extension.js index 85588d5..1cd35f1 100644 --- a/gnome/src/extension.js +++ b/gnome/src/extension.js @@ -301,6 +301,8 @@ export default class BreezyDesktopExtension extends Extension { ); this._distance_connection = this.settings.connect('changed::display-distance', this._update_display_distance.bind(this)); + this._toggle_distance_start_connection = this.settings.connect('changed::toggle-display-distance-start', this._update_display_distance.bind(this)); + this._toggle_distance_end_connection = this.settings.connect('changed::toggle-display-distance-end', this._update_display_distance.bind(this)); this._display_size_connection = this.settings.connect('changed::display-size', this._update_display_distance.bind(this)); this._focused_monitor_distance_connection = this._virtual_displays_actor.connect('notify::focused-monitor-details', this._update_display_distance.bind(this)); @@ -402,14 +404,14 @@ export default class BreezyDesktopExtension extends Extension { _update_display_distance(object, event) { const distance = this.settings.get_double('display-distance'); - const defaultDistance = Math.max( - distance, - this.settings.get_double('toggle-display-distance-start'), - this.settings.get_double('toggle-display-distance-end') - ); const size = this.settings.get_double('display-size'); Globals.logger.log_debug(`BreezyDesktopExtension _update_display_distance ${distance} ${size}`); if (distance !== undefined && size !== undefined) { + const defaultDistance = Math.max( + distance, + this.settings.get_double('toggle-display-distance-start'), + this.settings.get_double('toggle-display-distance-end') + ); let focusedMonitorSizeAdjustment = size * defaultDistance; if (this._virtual_displays_actor?.focused_monitor_details && this._target_monitor) { const fovMonitor = this._target_monitor.monitor; @@ -595,6 +597,14 @@ export default class BreezyDesktopExtension extends Extension { this.settings.disconnect(this._distance_connection); this._distance_connection = null; } + if (this._toggle_distance_start_connection) { + this.settings.disconnect(this._toggle_distance_start_connection); + this._toggle_distance_start_connection = null; + } + if (this._toggle_distance_end_connection) { + this.settings.disconnect(this._toggle_distance_end_connection); + this._toggle_distance_end_connection = null; + } if (this._display_size_connection) { this.settings.disconnect(this._display_size_connection); this._display_size_connection = null; diff --git a/gnome/src/virtualdisplayeffect.js b/gnome/src/virtualdisplayeffect.js index 621c010..83316b4 100644 --- a/gnome/src/virtualdisplayeffect.js +++ b/gnome/src/virtualdisplayeffect.js @@ -262,6 +262,7 @@ export const VirtualDisplayEffect = GObject.registerClass({ this._use_smooth_follow_origin = false; this.connect('notify::display-distance', this._update_display_distance.bind(this)); + this.connect('notify::display-distance-default', this._update_display_distance.bind(this)); this.connect('notify::display-size', this._update_display_position.bind(this)); this.connect('notify::focused-monitor-index', this._update_display_distance.bind(this)); this.connect('notify::monitor-placements', this._update_display_position.bind(this)); diff --git a/gnome/src/virtualdisplaysactor.js b/gnome/src/virtualdisplaysactor.js index d06f2d9..385d8b1 100644 --- a/gnome/src/virtualdisplaysactor.js +++ b/gnome/src/virtualdisplaysactor.js @@ -646,7 +646,6 @@ export const VirtualDisplaysActor = GObject.registerClass({ this._property_connections.push(this.connect(`notify::${property}`, fn.bind(this))); }).bind(this); - this._distance_ease_timeline = null; notifyToFunction('toggle-display-distance-start', this._handle_display_distance_properties_change); notifyToFunction('toggle-display-distance-end', this._handle_display_distance_properties_change); notifyToFunction('display-distance', this._handle_display_distance_properties_change); diff --git a/ui/src/connecteddevice.py b/ui/src/connecteddevice.py index 2fa6a4d..1d6348f 100644 --- a/ui/src/connecteddevice.py +++ b/ui/src/connecteddevice.py @@ -374,18 +374,25 @@ class ConnectedDevice(Gtk.Box): if (distance < focused_display_distance): self._set_focused_display_distance(distance) + all_displays_distance = self.settings.get_double('toggle-display-distance-end') self._set_all_displays_distance(distance) - if prev_distance == focused_display_distance: - self.settings.set_double('display-distance', prev_distance) + # if we were at the unfocused distance, put us at the new unfocused distance + if prev_distance == all_displays_distance: + self.settings.set_double('display-distance', distance) def _on_set_focused_display_distance(self, prev_distance, distance): all_displays_distance = self.settings.get_double('toggle-display-distance-end') if (distance > all_displays_distance): self._set_all_displays_distance(distance) + focused_display_distance = self.settings.get_double('toggle-display-distance-start') self._set_focused_display_distance(distance) + # if we were at the focused distance, put us at the new focused distance + if prev_distance == focused_display_distance: + self.settings.set_double('display-distance', distance) + def _save_custom_resolutions(self): with open(self._custom_resolutions_file_path, 'w') as f: json.dump(self._custom_resolution_options, f) diff --git a/ui/src/displaydistancedialogcontent.py b/ui/src/displaydistancedialogcontent.py index 6a84d61..9823a59 100644 --- a/ui/src/displaydistancedialogcontent.py +++ b/ui/src/displaydistancedialogcontent.py @@ -25,8 +25,7 @@ class DisplayDistanceDialogContent(Gtk.Box): self.settings = SettingsManager.get_instance().settings self.state_manager = StateManager.get_instance() self.prev_distance = self.settings.get_double('display-distance') - - self.settings.bind('display-distance', self.display_distance_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT) + self.display_distance_adjustment.set_value(self.settings.get_double(settings_key)) self.display_distance_scale.set_format_value_func(lambda scale, val: self._format_distance(val)) self.state_manager.connect('notify::connected-device-full-distance-cm', lambda *args: self.display_distance_scale.queue_draw())