[polari] pasteManager: Actually look at files when called from dragMotion
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari] pasteManager: Actually look at files when called from dragMotion
- Date: Thu, 8 Aug 2013 13:13:44 +0000 (UTC)
commit e4303fb8f87b3b16830ddfaeb7eb991d8a005eb0
Author: Florian Müllner <fmuellner gnome org>
Date: Tue Jul 30 13:20:35 2013 +0200
pasteManager: Actually look at files when called from dragMotion
src/pasteManager.js | 64 +++++++++++++++++++++++++++++++++-----------------
1 files changed, 42 insertions(+), 22 deletions(-)
---
diff --git a/src/pasteManager.js b/src/pasteManager.js
index f27b7ee..a5ff3f2 100644
--- a/src/pasteManager.js
+++ b/src/pasteManager.js
@@ -165,7 +165,15 @@ const PasteManager = new Lang.Class({
let uris = data.get_uris();
this._dragDataReceived = true;
- Gdk.drag_status(context, Gdk.DragAction.COPY, time);
+ // TODO: handle multiple files ...
+ let file = Gio.File.new_for_uri(uris[0]);
+ this._lookupFileInfo(file, Lang.bind(this,
+ function(name, targetType) {
+ let action = 0;
+ if (targetType == DndTargetType.TEXT)
+ action = Gdk.DragAction.COPY;
+ Gdk.drag_status(context, action, time);
+ }));
return;
}
@@ -178,27 +186,14 @@ const PasteManager = new Lang.Class({
// TODO: handle multiple files ...
let file = Gio.File.new_for_uri(uris[0]);
- let attr = Gio.FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE + ',' +
- Gio.FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME;
- file.query_info_async(attr,
- Gio.FileQueryInfoFlags.NONE,
- GLib.PRIORITY_DEFAULT,
- null, Lang.bind(this,
- function(f, res) {
- let fileInfo = null;
- try {
- fileInfo = file.query_info_finish(res);
- } catch(e) {
- logError(e);
- Gtk.drag_finish(context, false, false, time);
- }
-
- let displayName = fileInfo.get_display_name();
- let contentType = fileInfo.get_content_type();
- let targetType = this._getTargetForContentType(contentType);
-
- this._handleFileContent(file, displayName, targetType);
- Gtk.drag_finish(context, true, false, time);
+ this._lookupFileInfo(file, Lang.bind(this,
+ function(name, targetType) {
+ let canHandle = // targetType != 0;
+ targetType == DndTargetType.TEXT;
+
+ if (canHandle)
+ this._handleFileContent(file, displayName, targetType);
+ Gtk.drag_finish(context, canHandle, false, time);
}));
} else {
let success = false;
@@ -225,6 +220,31 @@ const PasteManager = new Lang.Class({
return 0;
},
+ _lookupFileInfo: function(file, callback) {
+ let attr = Gio.FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE + ',' +
+ Gio.FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME;
+ file.query_info_async(attr,
+ Gio.FileQueryInfoFlags.NONE,
+ GLib.PRIORITY_DEFAULT,
+ null, Lang.bind(this,
+ function(f, res) {
+ let fileInfo = null;
+ try {
+ fileInfo = file.query_info_finish(res);
+ } catch(e) {
+ logError(e);
+ callback(null, 0);
+ Gtk.drag_finish(context, false, false, time);
+ }
+
+ let displayName = fileInfo.get_display_name();
+ let contentType = fileInfo.get_content_type();
+ let targetType = this._getTargetForContentType(contentType);
+ callback(displayName, targetType);
+ }))
+ },
+
+
_handleFileContent: function(file, name, type) {
let app = Gio.Application.get_default();
let n = new UploadNotification(name);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]