[gnome-shell/gbsneto/icon-grid-dnd: 4/37] folderIcon: Allow dropping application icons
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/gbsneto/icon-grid-dnd: 4/37] folderIcon: Allow dropping application icons
- Date: Wed, 3 Jul 2019 19:11:45 +0000 (UTC)
commit bea5e0c5fd0962498573bd61aaf6ab3cb5c9ae48
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Fri Jun 28 19:47:32 2019 -0300
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
js/ui/appDisplay.js | 47 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index 448a8015d..af13e09ff 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -1126,6 +1126,11 @@ var FolderIcon = class FolderIcon {
this.view = new FolderView();
+ 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._ensurePopup();
this.view.actor.vscroll.adjustment.value = 0;
@@ -1144,6 +1149,48 @@ 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;
+
+ return true;
+ }
+
+ handleDragOver(source, actor, x, y, time) {
+ if (!this._canDropAt(source))
+ return DND.DragMotionResult.NO_DROP;
+
+ let folderApps = this._folder.get_strv('apps');
+ if (folderApps.includes(source.app.id))
+ return DND.DragMotionResult.NO_DROP;
+
+ return DND.DragMotionResult.MOVE_DROP;
+ }
+
+ acceptDrop(source, actor, x, y, time) {
+ if (!this._canDropAt(source))
+ return false;
+
+ 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)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]