diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index 46bfa022914..8e64f2a594a 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -105,12 +105,18 @@ static void file_deselect_all(SpaceFile* sfile) } } -static void file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short val) +typedef enum FileSelect { FILE_SELECT_DIR = 1, + FILE_SELECT_FILE = 2 } FileSelect; + + +static FileSelect file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short val) { int first_file = -1; int last_file = -1; int act_file; short selecting = (val == LEFTMOUSE); + FileSelect retval = FILE_SELECT_FILE; + FileSelectParams *params = ED_fileselect_get_params(sfile); // FileLayout *layout = ED_fileselect_get_layout(sfile, ar); @@ -147,25 +153,18 @@ static void file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short v BLI_add_slash(params->dir); params->file[0] = '\0'; file_change_dir(sfile); + retval = FILE_SELECT_DIR; } } else if (file) { if (file->relname) { BLI_strncpy(params->file, file->relname, FILE_MAXFILE); - /* XXX - if(event==MIDDLEMOUSE && filelist_gettype(sfile->files)) - imasel_execute(sfile); - */ } } - /* XXX - if(BIF_filelist_gettype(sfile->files)==FILE_MAIN) { - active_imasel_object(sfile); - } - */ } + return retval; } @@ -185,8 +184,11 @@ static int file_border_select_exec(bContext *C, wmOperator *op) BLI_isect_rcti(&(ar->v2d.mask), &rect, &rect); - file_select(sfile, ar, &rect, val ); - WM_event_add_notifier(C, NC_WINDOW, NULL); + if (FILE_SELECT_DIR == file_select(sfile, ar, &rect, val )) { + WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); + } else { + WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); + } return OPERATOR_FINISHED; } @@ -226,8 +228,11 @@ static int file_select_invoke(bContext *C, wmOperator *op, wmEvent *event) /* single select, deselect all selected first */ file_deselect_all(sfile); - file_select(sfile, ar, &rect, val ); - WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); + if (FILE_SELECT_DIR == file_select(sfile, ar, &rect, val )) { + WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); + } else { + WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); + } } return OPERATOR_FINISHED; } @@ -306,7 +311,7 @@ static int bookmark_select_invoke(bContext *C, wmOperator *op, wmEvent *event) file_change_dir(sfile); params->file[0] = '\0'; - WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); + WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); } return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index cdf65fc5af2..fdc3a927c5e 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -469,10 +469,19 @@ static void file_ui_area_draw(const bContext *C, ARegion *ar) UI_view2d_view_restore(C); } -//static void file_main_area_listener(ARegion *ar, wmNotifier *wmn) -//{ +static void file_ui_area_listener(ARegion *ar, wmNotifier *wmn) +{ /* context changes */ -//} + switch(wmn->category) { + case NC_FILE: + switch (wmn->data) { + case ND_FILELIST: + ED_region_tag_redraw(ar); + break; + } + break; + } +} /* only called once, from space/spacetypes.c */ void ED_spacetype_file(void) @@ -515,6 +524,7 @@ void ED_spacetype_file(void) art->regionid = RGN_TYPE_UI; art->minsizey= 60; art->keymapflag= ED_KEYMAP_UI; + art->listener= file_ui_area_listener; art->init= file_ui_area_init; art->draw= file_ui_area_draw; BLI_addhead(&st->regiontypes, art); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index cadb9502adb..3a646c5e799 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -190,7 +190,6 @@ typedef struct wmNotifier { /* NC_FILE Filebrowser */ #define ND_PARAMS (60<<16) #define ND_FILELIST (61<<16) -#define ND_FILEDISPLAY (62<<16) /* NC_ANIMATION Animato */ #define ND_KEYFRAME_SELECT (70<<16)