workspace: Stop using WindowPreview.realWindow in the overview
We can simply get the MetaWindowActor by calling MetaWindow.get_compositor_private(), so stop accessing the realWindow property of WindowPreview. For this we also have to make _isMyWindow() and _isOverviewWindow() take a MetaWindow as an argument instead of a MetaWindowActor. Since the WorkspacesThumbnails are also drop targets for WindowPreviews and their WindowClones also have the public metaWindow property, switch to using the metaWindow property there, too. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1307
This commit is contained in:
parent
c281e868a0
commit
46600740fe
@ -1159,14 +1159,15 @@ class Workspace extends St.Widget {
|
|||||||
|
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
|
|
||||||
let windows = global.get_window_actors().filter(this._isMyWindow, this);
|
const windows = global.get_window_actors().map(a => a.meta_window)
|
||||||
|
.filter(this._isMyWindow, this);
|
||||||
|
|
||||||
// Create clones for windows that should be
|
// Create clones for windows that should be
|
||||||
// visible in the Overview
|
// visible in the Overview
|
||||||
this._windows = [];
|
this._windows = [];
|
||||||
for (let i = 0; i < windows.length; i++) {
|
for (let i = 0; i < windows.length; i++) {
|
||||||
if (this._isOverviewWindow(windows[i]))
|
if (this._isOverviewWindow(windows[i]))
|
||||||
this._addWindowClone(windows[i], true);
|
this._addWindowClone(windows[i].get_compositor_private(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Track window changes
|
// Track window changes
|
||||||
@ -1514,10 +1515,10 @@ class Workspace extends St.Widget {
|
|||||||
if (this._lookupIndex(metaWin) != -1)
|
if (this._lookupIndex(metaWin) != -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!this._isMyWindow(win))
|
if (!this._isMyWindow(metaWin))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!this._isOverviewWindow(win)) {
|
if (!this._isOverviewWindow(metaWin)) {
|
||||||
if (metaWin.get_transient_for() == null)
|
if (metaWin.get_transient_for() == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1798,16 +1799,16 @@ class Workspace extends St.Widget {
|
|||||||
this._recalculateWindowPositions(WindowPositionFlags.INITIAL);
|
this._recalculateWindowPositions(WindowPositionFlags.INITIAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests if @actor belongs to this workspaces and monitor
|
_isMyWindow(window) {
|
||||||
_isMyWindow(actor) {
|
const isOnWorkspace = this.metaWorkspace === null ||
|
||||||
let win = actor.meta_window;
|
window.located_on_workspace(this.metaWorkspace);
|
||||||
return (this.metaWorkspace == null || win.located_on_workspace(this.metaWorkspace)) &&
|
const isOnMonitor = window.get_monitor() === this.monitorIndex;
|
||||||
(win.get_monitor() == this.monitorIndex);
|
|
||||||
|
return isOnWorkspace && isOnMonitor;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests if @win should be shown in the Overview
|
_isOverviewWindow(window) {
|
||||||
_isOverviewWindow(win) {
|
return !window.skip_taskbar;
|
||||||
return !win.get_meta_window().skip_taskbar;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a clone of a (non-desktop) window and add it to the window list
|
// Create a clone of a (non-desktop) window and add it to the window list
|
||||||
@ -1961,7 +1962,7 @@ class Workspace extends St.Widget {
|
|||||||
|
|
||||||
// Draggable target interface
|
// Draggable target interface
|
||||||
handleDragOver(source, _actor, _x, _y, _time) {
|
handleDragOver(source, _actor, _x, _y, _time) {
|
||||||
if (source.realWindow && !this._isMyWindow(source.realWindow))
|
if (source.metaWindow && !this._isMyWindow(source.metaWindow))
|
||||||
return DND.DragMotionResult.MOVE_DROP;
|
return DND.DragMotionResult.MOVE_DROP;
|
||||||
if (source.app && source.app.can_open_new_window())
|
if (source.app && source.app.can_open_new_window())
|
||||||
return DND.DragMotionResult.COPY_DROP;
|
return DND.DragMotionResult.COPY_DROP;
|
||||||
@ -1977,29 +1978,27 @@ class Workspace extends St.Widget {
|
|||||||
? this.metaWorkspace.index()
|
? this.metaWorkspace.index()
|
||||||
: workspaceManager.get_active_workspace_index();
|
: workspaceManager.get_active_workspace_index();
|
||||||
|
|
||||||
if (source.realWindow) {
|
if (source.metaWindow) {
|
||||||
let win = source.realWindow;
|
const window = source.metaWindow;
|
||||||
if (this._isMyWindow(win))
|
if (this._isMyWindow(window))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Set a hint on the Mutter.Window so its initial position
|
// Set a hint on the Mutter.Window so its initial position
|
||||||
// in the new workspace will be correct
|
// in the new workspace will be correct
|
||||||
win._overviewHint = {
|
window.get_compositor_private()._overviewHint = {
|
||||||
x: actor.x,
|
x: actor.x,
|
||||||
y: actor.y,
|
y: actor.y,
|
||||||
width: actor.width,
|
width: actor.width,
|
||||||
heigth: actor.height,
|
heigth: actor.height,
|
||||||
};
|
};
|
||||||
|
|
||||||
let metaWindow = win.get_meta_window();
|
|
||||||
|
|
||||||
// We need to move the window before changing the workspace, because
|
// We need to move the window before changing the workspace, because
|
||||||
// the move itself could cause a workspace change if the window enters
|
// the move itself could cause a workspace change if the window enters
|
||||||
// the primary monitor
|
// the primary monitor
|
||||||
if (metaWindow.get_monitor() != this.monitorIndex)
|
if (window.get_monitor() != this.monitorIndex)
|
||||||
metaWindow.move_to_monitor(this.monitorIndex);
|
window.move_to_monitor(this.monitorIndex);
|
||||||
|
|
||||||
metaWindow.change_workspace_by_index(workspaceIndex, false);
|
window.change_workspace_by_index(workspaceIndex, false);
|
||||||
return true;
|
return true;
|
||||||
} else if (source.app && source.app.can_open_new_window()) {
|
} else if (source.app && source.app.can_open_new_window()) {
|
||||||
if (source.animateLaunchAtPos)
|
if (source.animateLaunchAtPos)
|
||||||
|
@ -567,7 +567,8 @@ var WorkspaceThumbnail = GObject.registerClass({
|
|||||||
if (this.state > ThumbnailState.NORMAL)
|
if (this.state > ThumbnailState.NORMAL)
|
||||||
return DND.DragMotionResult.CONTINUE;
|
return DND.DragMotionResult.CONTINUE;
|
||||||
|
|
||||||
if (source.realWindow && !this._isMyWindow(source.realWindow))
|
if (source.metaWindow &&
|
||||||
|
!this._isMyWindow(source.metaWindow.get_compositor_private()))
|
||||||
return DND.DragMotionResult.MOVE_DROP;
|
return DND.DragMotionResult.MOVE_DROP;
|
||||||
if (source.app && source.app.can_open_new_window())
|
if (source.app && source.app.can_open_new_window())
|
||||||
return DND.DragMotionResult.COPY_DROP;
|
return DND.DragMotionResult.COPY_DROP;
|
||||||
@ -581,8 +582,8 @@ var WorkspaceThumbnail = GObject.registerClass({
|
|||||||
if (this.state > ThumbnailState.NORMAL)
|
if (this.state > ThumbnailState.NORMAL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (source.realWindow) {
|
if (source.metaWindow) {
|
||||||
let win = source.realWindow;
|
let win = source.metaWindow.get_compositor_private();
|
||||||
if (this._isMyWindow(win))
|
if (this._isMyWindow(win))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -795,7 +796,7 @@ var ThumbnailsBox = GObject.registerClass({
|
|||||||
|
|
||||||
// Draggable target interface
|
// Draggable target interface
|
||||||
handleDragOver(source, actor, x, y, time) {
|
handleDragOver(source, actor, x, y, time) {
|
||||||
if (!source.realWindow &&
|
if (!source.metaWindow &&
|
||||||
(!source.app || !source.app.can_open_new_window()) &&
|
(!source.app || !source.app.can_open_new_window()) &&
|
||||||
(source.app || !source.shellWorkspaceLaunch) &&
|
(source.app || !source.shellWorkspaceLaunch) &&
|
||||||
source != Main.xdndHandler)
|
source != Main.xdndHandler)
|
||||||
@ -846,7 +847,7 @@ var ThumbnailsBox = GObject.registerClass({
|
|||||||
if (this._dropWorkspace != -1)
|
if (this._dropWorkspace != -1)
|
||||||
return this._thumbnails[this._dropWorkspace].handleDragOverInternal(source, actor, time);
|
return this._thumbnails[this._dropWorkspace].handleDragOverInternal(source, actor, time);
|
||||||
else if (this._dropPlaceholderPos != -1)
|
else if (this._dropPlaceholderPos != -1)
|
||||||
return source.realWindow ? DND.DragMotionResult.MOVE_DROP : DND.DragMotionResult.COPY_DROP;
|
return source.metaWindow ? DND.DragMotionResult.MOVE_DROP : DND.DragMotionResult.COPY_DROP;
|
||||||
else
|
else
|
||||||
return DND.DragMotionResult.CONTINUE;
|
return DND.DragMotionResult.CONTINUE;
|
||||||
}
|
}
|
||||||
@ -855,12 +856,12 @@ var ThumbnailsBox = GObject.registerClass({
|
|||||||
if (this._dropWorkspace != -1) {
|
if (this._dropWorkspace != -1) {
|
||||||
return this._thumbnails[this._dropWorkspace].acceptDropInternal(source, actor, time);
|
return this._thumbnails[this._dropWorkspace].acceptDropInternal(source, actor, time);
|
||||||
} else if (this._dropPlaceholderPos != -1) {
|
} else if (this._dropPlaceholderPos != -1) {
|
||||||
if (!source.realWindow &&
|
if (!source.metaWindow &&
|
||||||
(!source.app || !source.app.can_open_new_window()) &&
|
(!source.app || !source.app.can_open_new_window()) &&
|
||||||
(source.app || !source.shellWorkspaceLaunch))
|
(source.app || !source.shellWorkspaceLaunch))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
let isWindow = !!source.realWindow;
|
let isWindow = !!source.metaWindow;
|
||||||
|
|
||||||
let newWorkspaceIndex;
|
let newWorkspaceIndex;
|
||||||
[newWorkspaceIndex, this._dropPlaceholderPos] = [this._dropPlaceholderPos, -1];
|
[newWorkspaceIndex, this._dropPlaceholderPos] = [this._dropPlaceholderPos, -1];
|
||||||
|
Loading…
Reference in New Issue
Block a user