Godot: Expose drag and drop from filesystem to GDScript

Created on 10 Jul 2016  路  18Comments  路  Source: godotengine/godot

from
https://godotengine.org/qa/5972/list-files-that-been-dragged-onto-games-window-their-directory

I want to create a batch processing application in godot - that takes for input files that have been dragged and dropped by the user to the application window. Is that something that is possible to do in godot? I need to get that data and store it in an array

Other possible applications of this would be for plugins - being able to drag external files onto a godot plugin window.

archived feature proposal core gdscript

Most helpful comment

After some investigation, i found there's a API for using D&D from the OS exposed to GDScript, there's a MainLoop::_drop_files virtual function, and files_dropped(StringArray files, int screen) signal on SceneTree.

I've made a simple example, where you can drag images into the application window, and it'll show all images in a ItemList:

drag_n_drop_os.zip

All 18 comments

After some investigation, i found there's a API for using D&D from the OS exposed to GDScript, there's a MainLoop::_drop_files virtual function, and files_dropped(StringArray files, int screen) signal on SceneTree.

I've made a simple example, where you can drag images into the application window, and it'll show all images in a ItemList:

drag_n_drop_os.zip

Thank you! I am going to try this out today

files_dropped(StringArray files, int screen) is missing in the documentation!
:o

@blurymind, i think this is because this feature is not available in 2.0.x versions. Only on Github HEAD.

nice! I wonder how many other hidden features there are :)

Seeing as to how this feature exists already in godot head master - do you guys think I should close this? Is there anything that is missing in the current implementation?

Compiling now btw.

Well, IMO this should be closed since we already support it in master. If there are bugs with the implementation itself, open a new issue, but if there are issues with the way it is exposed, you might decide it is better to comment here.

I think the file @TheHX provided should be included in the demos folder. It is awesome! :)

Mayby @TheHX demo put in godot-demo-projects ?

@TheHX Do you know how to tell this action to trigger only when the cursor is over a specific node?
Right now the files get loaded when I drag them anywhere on the app window - but I want them to load only when dragged onto a specific node!

I'm not sure if there's any way to do this, without using some crazy tricks. But this id be a nice improvement for the drag and drop, but i don't know how this should be exposed.

@TheHx What does the 'screen' (string) value do? I noticed that it always returns a zero.

@TheHX perhaps it would be useful if all gui related nodes get a _drop_files signal

I don't think so, actually the D&D system in Godot is based on virtual functions, as you can see in this script.

I tried doing it with focus_enter and focus_exit signals and a variable. Didnt work. Focus enter signal requires the user to click on the node - which doesnt work with drag and drop.

Can you come up with any workarounds?

We might have to reopen this bug - because drag and drop does not seem to be properly exposed to gdscript at the moment.

@vnen can you reopen the bug? I shouldnt have closed it so early. Drag and drop is missing a very key element at the moment

@blurymind it's better if you open a new issue with a proper request.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

mefihl picture mefihl  路  3Comments

EdwardAngeles picture EdwardAngeles  路  3Comments

blurymind picture blurymind  路  3Comments

nunodonato picture nunodonato  路  3Comments

testman42 picture testman42  路  3Comments