www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit db8d3fd4b4bb55202ffd715c7562b1b80844bc04
parent e0b96a873bc6c8e77f37cd156e2baadcf1516c26
Author: Dan Stillman <dstillman@zotero.org>
Date:   Fri, 30 Sep 2016 02:42:17 -0400

Fix dragging of files to the filesystem on macOS (and maybe Linux)

Calling getTransferData('zotero/item') when handling the
application/x-moz-file-promise seems to have stopped working between Fx46 and
Fx47, though I can't get older Nightly builds to run with mozregression
(Sierra?) to find the specific change. Instead, work around this by passing an
array of item ids to the file drag data provider.

Diffstat:
Mchrome/content/zotero/xpcom/itemTreeView.js | 14+++++---------
1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/chrome/content/zotero/xpcom/itemTreeView.js b/chrome/content/zotero/xpcom/itemTreeView.js @@ -2612,7 +2612,7 @@ Zotero.ItemTreeView.prototype.onDragStart = function (event) { Zotero.debug("Adding file via x-moz-file-promise"); event.dataTransfer.mozSetDataAt( "application/x-moz-file-promise", - new Zotero.ItemTreeView.fileDragDataProvider(), + new Zotero.ItemTreeView.fileDragDataProvider(itemIDs), 0 ); break; @@ -2688,7 +2688,9 @@ Zotero.ItemTreeView.prototype.onDragStart = function (event) { // Implements nsIFlavorDataProvider for dragging attachment files to OS // // Not used on Windows in Firefox 3 or higher -Zotero.ItemTreeView.fileDragDataProvider = function() { }; +Zotero.ItemTreeView.fileDragDataProvider = function (itemIDs) { + this._itemIDs = itemIDs; +}; Zotero.ItemTreeView.fileDragDataProvider.prototype = { QueryInterface : function(iid) { @@ -2712,13 +2714,7 @@ Zotero.ItemTreeView.fileDragDataProvider.prototype = { transferable.getTransferData("application/x-moz-file-promise-dir", dirPrimitive, dataSize); var destDir = dirPrimitive.value.QueryInterface(Components.interfaces.nsILocalFile); - // Get the items we're dragging - var items = {}; - transferable.getTransferData("zotero/item", items, dataSize); - items.value.QueryInterface(Components.interfaces.nsISupportsString); - - var draggedItems = Zotero.Items.get(items.value.data.split(',')); - + var draggedItems = Zotero.Items.get(this._itemIDs); var items = []; // Make sure files exist