workspace: Use AppIcon.app to check action-support by the drag source
`AppIcon.shellWorkspaceLaunch()` can easily be replaced by checking for `AppIcon.app` and calling `AppIcon.app.open_new_window()` directly. For compatibility and to prevent breaking extensions implementing the function, keep supporting the `shellWorkspaceLaunch` API in AppIcon while logging a deprecation warning. Also keep supporting the API on drag sources (without deprecating it) to allow extensions to define custom actions on their drag sources. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/121
This commit is contained in:

committed by
Florian Müllner

parent
e0947b01bd
commit
942758bb30
@ -1994,13 +1994,20 @@ var Workspace = class {
|
||||
handleDragOver(source, _actor, _x, _y, _time) {
|
||||
if (source.realWindow && !this._isMyWindow(source.realWindow))
|
||||
return DND.DragMotionResult.MOVE_DROP;
|
||||
if (source.shellWorkspaceLaunch)
|
||||
if (source.app)
|
||||
return DND.DragMotionResult.COPY_DROP;
|
||||
if (!source.app && source.shellWorkspaceLaunch)
|
||||
return DND.DragMotionResult.COPY_DROP;
|
||||
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
}
|
||||
|
||||
acceptDrop(source, actor, x, y, time) {
|
||||
let workspaceManager = global.workspace_manager;
|
||||
let workspaceIndex = this.metaWorkspace
|
||||
? this.metaWorkspace.index()
|
||||
: workspaceManager.get_active_workspace_index();
|
||||
|
||||
if (source.realWindow) {
|
||||
let win = source.realWindow;
|
||||
if (this._isMyWindow(win))
|
||||
@ -2022,12 +2029,15 @@ var Workspace = class {
|
||||
if (metaWindow.get_monitor() != this.monitorIndex)
|
||||
metaWindow.move_to_monitor(this.monitorIndex);
|
||||
|
||||
let workspaceManager = global.workspace_manager;
|
||||
let index = this.metaWorkspace ? this.metaWorkspace.index() : workspaceManager.get_active_workspace_index();
|
||||
metaWindow.change_workspace_by_index(index, false);
|
||||
metaWindow.change_workspace_by_index(workspaceIndex, false);
|
||||
return true;
|
||||
} else if (source.shellWorkspaceLaunch) {
|
||||
source.shellWorkspaceLaunch({ workspace: this.metaWorkspace ? this.metaWorkspace.index() : -1,
|
||||
} else if (source.app) {
|
||||
source.app.open_new_window(workspaceIndex);
|
||||
return true;
|
||||
} else if (!source.app && source.shellWorkspaceLaunch) {
|
||||
// While unused in our own drag sources, shellWorkspaceLaunch allows
|
||||
// extensions to define custom actions for their drag sources.
|
||||
source.shellWorkspaceLaunch({ workspace: workspaceIndex,
|
||||
timestamp: time });
|
||||
return true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user