Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/editors/space_clip/clip_ops.c42
1 files changed, 36 insertions, 6 deletions
diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c
index 5131b728646..73eb8ee77ff 100644
--- a/source/blender/editors/space_clip/clip_ops.c
+++ b/source/blender/editors/space_clip/clip_ops.c
@@ -36,6 +36,7 @@
#include "DNA_userdef_types.h"
#include "DNA_scene_types.h" /* min/max frames */
+#include "BLI_path_util.h"
#include "BLI_utildefines.h"
#include "BLI_math.h"
@@ -123,7 +124,7 @@ static void sclip_zoom_set_factor_exec(bContext *C, wmEvent *event, float factor
static void clip_filesel(bContext *C, wmOperator *op, const char *path)
{
- RNA_string_set(op->ptr, "filepath", path);
+ RNA_string_set(op->ptr, "directory", path);
WM_event_add_fileselect(C, op);
}
@@ -153,7 +154,28 @@ static int open_exec(bContext *C, wmOperator *op)
MovieClip *clip = NULL;
char str[FILE_MAX];
- RNA_string_get(op->ptr, "filepath", str);
+ if (RNA_collection_length(op->ptr, "files")) {
+ PointerRNA fileptr;
+ PropertyRNA *prop;
+ char dir_only[FILE_MAX], file_only[FILE_MAX];
+ int relative = RNA_boolean_get(op->ptr, "relative_path");
+
+ RNA_string_get(op->ptr, "directory", dir_only);
+ if (relative)
+ BLI_path_rel(dir_only, G.main->name);
+
+ prop = RNA_struct_find_property(op->ptr, "files");
+ RNA_property_collection_lookup_int(op->ptr, prop, 0, &fileptr);
+ RNA_string_get(&fileptr, "name", file_only);
+
+ BLI_join_dirfile(str, sizeof(str), dir_only, file_only);
+ }
+ else {
+ BKE_reportf(op->reports, RPT_ERROR, "No files selected to be opened");
+
+ return OPERATOR_CANCELLED;
+ }
+
/* default to frame 1 if there's no scene in context */
errno = 0;
@@ -199,14 +221,21 @@ static int open_exec(bContext *C, wmOperator *op)
static int open_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
{
SpaceClip *sc = CTX_wm_space_clip(C);
- char *path = U.textudir;
+ char path[FILE_MAX];
MovieClip *clip = NULL;
if (sc)
clip = ED_space_clip(sc);
- if (clip)
- path = clip->name;
+ if (clip) {
+ strncpy(path, clip->name, sizeof(path));
+
+ BLI_path_abs(path, G.main->name);
+ BLI_parent_dir(path);
+ }
+ else {
+ strncpy(path, U.textudir, sizeof(path));
+ }
if (!RNA_struct_property_is_set(op->ptr, "relative_path"))
RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
@@ -238,7 +267,8 @@ void CLIP_OT_open(wmOperatorType *ot)
/* properties */
WM_operator_properties_filesel(ot, FOLDERFILE | IMAGEFILE | MOVIEFILE, FILE_SPECIAL, FILE_OPENFILE,
- WM_FILESEL_FILEPATH | WM_FILESEL_RELPATH, FILE_DEFAULTDISPLAY);
+ WM_FILESEL_RELPATH | WM_FILESEL_FILES | WM_FILESEL_DIRECTORY,
+ FILE_DEFAULTDISPLAY);
}
/******************* reload clip operator *********************/