window-list: Use overlap to determine preview visibility
In order to better reflect the actual workspace, show any preview that is at least partially located on the monitor, not only those that have the major part on that monitor. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/142>
This commit is contained in:
@@ -26,13 +26,12 @@ class WindowPreview extends St.Button {
|
||||
this._sizeChangedId = this._window.connect('size-changed',
|
||||
() => this.queue_relayout());
|
||||
this._positionChangedId = this._window.connect('position-changed',
|
||||
() => this.queue_relayout());
|
||||
() => {
|
||||
this._updateVisible();
|
||||
this.queue_relayout();
|
||||
});
|
||||
this._minimizedChangedId = this._window.connect('notify::minimized',
|
||||
this._updateVisible.bind(this));
|
||||
this._monitorEnteredId = global.display.connect('window-entered-monitor',
|
||||
this._updateVisible.bind(this));
|
||||
this._monitorLeftId = global.display.connect('window-left-monitor',
|
||||
this._updateVisible.bind(this));
|
||||
|
||||
this._focusChangedId = global.display.connect('notify::focus-window',
|
||||
this._onFocusChanged.bind(this));
|
||||
@@ -48,8 +47,6 @@ class WindowPreview extends St.Button {
|
||||
this._window.disconnect(this._sizeChangedId);
|
||||
this._window.disconnect(this._positionChangedId);
|
||||
this._window.disconnect(this._minimizedChangedId);
|
||||
global.display.disconnect(this._monitorEnteredId);
|
||||
global.display.disconnect(this._monitorLeftId);
|
||||
global.display.disconnect(this._focusChangedId);
|
||||
}
|
||||
|
||||
@@ -61,8 +58,9 @@ class WindowPreview extends St.Button {
|
||||
}
|
||||
|
||||
_updateVisible() {
|
||||
let monitor = Main.layoutManager.findIndexForActor(this);
|
||||
this.visible = monitor === this._window.get_monitor() &&
|
||||
const monitor = Main.layoutManager.findIndexForActor(this);
|
||||
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
||||
this.visible = this._window.get_frame_rect().overlap(workArea) &&
|
||||
this._window.window_type !== Meta.WindowType.DESKTOP &&
|
||||
this._window.showing_on_its_workspace();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user