folderIcon: Allow dropping application icons
Connect to the overview signals related to Drag n' Drop, and allow dropping application icons in it. Dropping an icon appends the application id to the folder's GSettings key. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/603
This commit is contained in:
parent
23191ec239
commit
cc9f949b65
@ -1221,6 +1221,11 @@ var FolderIcon = class FolderIcon {
|
||||
|
||||
this.view = new FolderView(this._folder, parentView);
|
||||
|
||||
Main.overview.connect('item-drag-begin',
|
||||
this._onDragBegin.bind(this));
|
||||
Main.overview.connect('item-drag-end',
|
||||
this._onDragEnd.bind(this));
|
||||
|
||||
this.actor.connect('clicked', this.open.bind(this));
|
||||
this.actor.connect('destroy', this.onDestroy.bind(this));
|
||||
this.actor.connect('notify::mapped', () => {
|
||||
@ -1254,6 +1259,47 @@ var FolderIcon = class FolderIcon {
|
||||
return this.view.getAllItems().map(item => item.id);
|
||||
}
|
||||
|
||||
_onDragBegin() {
|
||||
this._parentView.inhibitEventBlocker();
|
||||
}
|
||||
|
||||
_onDragEnd() {
|
||||
this._parentView.uninhibitEventBlocker();
|
||||
}
|
||||
|
||||
_canDropAt(source) {
|
||||
if (!(source instanceof AppIcon))
|
||||
return false;
|
||||
|
||||
if (!global.settings.is_writable('favorite-apps'))
|
||||
return false;
|
||||
|
||||
if (this._folder.get_strv('apps').includes(source.id))
|
||||
return false
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
handleDragOver(source, actor, x, y, time) {
|
||||
if (!this._canDropAt(source))
|
||||
return DND.DragMotionResult.NO_DROP;
|
||||
|
||||
return DND.DragMotionResult.MOVE_DROP;
|
||||
}
|
||||
|
||||
acceptDrop(source, actor, x, y, time) {
|
||||
if (!this._canDropAt(source))
|
||||
return true;
|
||||
|
||||
let app = source.app;
|
||||
let folderApps = this._folder.get_strv('apps');
|
||||
folderApps.push(app.id);
|
||||
|
||||
this._folder.set_strv('apps', folderApps);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_updateName() {
|
||||
let name = _getFolderName(this._folder);
|
||||
if (this.name == name)
|
||||
|
Loading…
Reference in New Issue
Block a user