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:
Florian Müllner
2020-12-02 19:22:51 +01:00
parent 6949a5d075
commit 08dfb78815
+7 -9
View File
@@ -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();
}