IO: Add support for multiple drag-n-drop files #107230
|
@ -5941,7 +5941,7 @@ static bool blend_file_drop_poll(bContext * /*C*/, wmDrag *drag, const wmEvent *
|
||||||
static void blend_file_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
static void blend_file_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||||
{
|
{
|
||||||
/* copy drag path to properties */
|
/* copy drag path to properties */
|
||||||
RNA_string_set(drop->ptr, "filepath", WM_drag_get_paths(drag)[0].c_str());
|
RNA_string_set(drop->ptr, "filepath", WM_drag_get_single_path(drag));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ED_keymap_screen(wmKeyConfig *keyconf)
|
void ED_keymap_screen(wmKeyConfig *keyconf)
|
||||||
|
|
|
@ -536,8 +536,7 @@ static void clip_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||||
PointerRNA itemptr;
|
PointerRNA itemptr;
|
||||||
char dir[FILE_MAX], file[FILE_MAX];
|
char dir[FILE_MAX], file[FILE_MAX];
|
||||||
|
|
||||||
BLI_path_split_dir_file(
|
BLI_path_split_dir_file(WM_drag_get_single_path(drag), dir, sizeof(dir), file, sizeof(file));
|
||||||
WM_drag_get_paths(drag)[0].c_str(), dir, sizeof(dir), file, sizeof(file));
|
|
||||||
|
|
||||||
RNA_string_set(drop->ptr, "directory", dir);
|
RNA_string_set(drop->ptr, "directory", dir);
|
||||||
|
|
||||||
|
|
|
@ -174,7 +174,7 @@ static bool path_drop_poll(bContext * /*C*/, wmDrag *drag, const wmEvent * /*eve
|
||||||
static void path_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
static void path_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||||
{
|
{
|
||||||
char pathname[FILE_MAX + 2];
|
char pathname[FILE_MAX + 2];
|
||||||
SNPRINTF(pathname, "\"%s\"", WM_drag_get_paths(drag)[0].c_str());
|
SNPRINTF(pathname, "\"%s\"", WM_drag_get_single_path(drag));
|
||||||
RNA_string_set(drop->ptr, "text", pathname);
|
RNA_string_set(drop->ptr, "text", pathname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -797,7 +797,7 @@ static bool filepath_drop_poll(bContext *C, wmDrag *drag, const wmEvent * /*even
|
||||||
|
|
||||||
static void filepath_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
static void filepath_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||||
{
|
{
|
||||||
RNA_string_set(drop->ptr, "filepath", WM_drag_get_paths(drag)[0].c_str());
|
RNA_string_set(drop->ptr, "filepath", WM_drag_get_single_path(drag));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* region dropbox definition */
|
/* region dropbox definition */
|
||||||
|
|
|
@ -268,7 +268,7 @@ static bool image_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
|
||||||
static void image_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
static void image_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||||
{
|
{
|
||||||
/* copy drag path to properties */
|
/* copy drag path to properties */
|
||||||
RNA_string_set(drop->ptr, "filepath", WM_drag_get_paths(drag)[0].c_str());
|
RNA_string_set(drop->ptr, "filepath", WM_drag_get_single_path(drag));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* area+region dropbox definition */
|
/* area+region dropbox definition */
|
||||||
|
|
|
@ -898,9 +898,9 @@ static void node_id_path_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto paths = WM_drag_get_paths(drag);
|
const char* path = WM_drag_get_single_path(drag);
|
||||||
if (paths.begin()) {
|
if (path) {
|
||||||
RNA_string_set(drop->ptr, "filepath", paths[0].c_str());
|
RNA_string_set(drop->ptr, "filepath", path);
|
||||||
RNA_struct_property_unset(drop->ptr, "name");
|
RNA_struct_property_unset(drop->ptr, "name");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -249,17 +249,17 @@ static void sequencer_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto paths = WM_drag_get_paths(drag);
|
const char *path = WM_drag_get_single_path(drag);
|
||||||
/* Path dropped. */
|
/* Path dropped. */
|
||||||
if (paths.begin()) {
|
if (path) {
|
||||||
if (RNA_struct_find_property(drop->ptr, "filepath")) {
|
if (RNA_struct_find_property(drop->ptr, "filepath")) {
|
||||||
RNA_string_set(drop->ptr, "filepath", paths[0].c_str());
|
RNA_string_set(drop->ptr, "filepath", path);
|
||||||
}
|
}
|
||||||
if (RNA_struct_find_property(drop->ptr, "directory")) {
|
if (RNA_struct_find_property(drop->ptr, "directory")) {
|
||||||
PointerRNA itemptr;
|
PointerRNA itemptr;
|
||||||
char dir[FILE_MAX], file[FILE_MAX];
|
char dir[FILE_MAX], file[FILE_MAX];
|
||||||
|
|
||||||
BLI_path_split_dir_file(paths[0].c_str(), dir, sizeof(dir), file, sizeof(file));
|
BLI_path_split_dir_file(path, dir, sizeof(dir), file, sizeof(file));
|
||||||
|
|
||||||
RNA_string_set(drop->ptr, "directory", dir);
|
RNA_string_set(drop->ptr, "directory", dir);
|
||||||
|
|
||||||
|
@ -337,7 +337,7 @@ static void get_drag_path(const bContext *C, wmDrag *drag, char r_path[FILE_MAX]
|
||||||
BLI_path_abs(r_path, BKE_main_blendfile_path_from_global());
|
BLI_path_abs(r_path, BKE_main_blendfile_path_from_global());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
BLI_strncpy(r_path, WM_drag_get_paths(drag)[0].c_str(), FILE_MAX);
|
BLI_strncpy(r_path, WM_drag_get_single_path(drag), FILE_MAX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -316,7 +316,7 @@ static bool text_drop_poll(bContext * /*C*/, wmDrag *drag, const wmEvent * /*eve
|
||||||
static void text_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
static void text_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||||
{
|
{
|
||||||
/* copy drag path to properties */
|
/* copy drag path to properties */
|
||||||
RNA_string_set(drop->ptr, "filepath", WM_drag_get_paths(drag)[0].c_str());
|
RNA_string_set(drop->ptr, "filepath", WM_drag_get_single_path(drag));
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool text_drop_paste_poll(bContext * /*C*/, wmDrag *drag, const wmEvent * /*event*/)
|
static bool text_drop_paste_poll(bContext * /*C*/, wmDrag *drag, const wmEvent * /*event*/)
|
||||||
|
|
|
@ -891,9 +891,9 @@ static void view3d_id_path_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||||
RNA_struct_property_unset(drop->ptr, "filepath");
|
RNA_struct_property_unset(drop->ptr, "filepath");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const auto paths = WM_drag_get_paths(drag);
|
const char* path = WM_drag_get_single_path(drag);
|
||||||
if (paths.begin()) {
|
if (path) {
|
||||||
RNA_string_set(drop->ptr, "filepath", paths[0].c_str());
|
RNA_string_set(drop->ptr, "filepath", path);
|
||||||
RNA_struct_property_unset(drop->ptr, "image");
|
RNA_struct_property_unset(drop->ptr, "image");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1426,6 +1426,7 @@ const char *WM_drag_get_item_name(wmDrag *drag);
|
||||||
* may be destructed. Only paths that share the same extension of the first file will be copied.
|
* may be destructed. Only paths that share the same extension of the first file will be copied.
|
||||||
*/
|
*/
|
||||||
wmDragPath *WM_drag_create_path_data(blender::Span<const char *> paths);
|
wmDragPath *WM_drag_create_path_data(blender::Span<const char *> paths);
|
||||||
|
const char *WM_drag_get_single_path(const wmDrag *drag);
|
||||||
const blender::Span<std::string> WM_drag_get_paths(const wmDrag *drag);
|
const blender::Span<std::string> WM_drag_get_paths(const wmDrag *drag);
|
||||||
guishe marked this conversation as resolved
Outdated
|
|||||||
/**
|
/**
|
||||||
* Note that even though the enum return type uses bit-flags, this should never have multiple
|
* Note that even though the enum return type uses bit-flags, this should never have multiple
|
||||||
|
|
|
@ -792,6 +792,16 @@ static void wm_drag_free_path_data(wmDragPath **path_data)
|
||||||
*path_data = nullptr;
|
*path_data = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *WM_drag_get_single_path(const wmDrag *drag)
|
||||||
|
{
|
||||||
|
if (drag->type != WM_DRAG_PATH) {
|
||||||
|
nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
guishe marked this conversation as resolved
Outdated
Julian Eisel
commented
Same, remove Same, remove `const` from return type.
|
|||||||
|
const wmDragPath *path_data = static_cast<const wmDragPath *>(drag->poin);
|
||||||
|
return path_data->paths[0].c_str();
|
||||||
|
}
|
||||||
guishe marked this conversation as resolved
Outdated
Bastien Montagne
commented
`return nullptr;`
|
|||||||
|
|
||||||
const blender::Span<std::string> WM_drag_get_paths(const wmDrag *drag)
|
const blender::Span<std::string> WM_drag_get_paths(const wmDrag *drag)
|
||||||
{
|
{
|
||||||
if (drag->type != WM_DRAG_PATH) {
|
if (drag->type != WM_DRAG_PATH) {
|
||||||
|
|
Loading…
Reference in New Issue
This is returned by value, so
const
for the return type doesn't make sense (some static analyzers will warn I think).