From cfd5046c9e4a6617a20cfc7e59519a84d3c18b9d Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Tue, 7 Jul 2009 07:25:44 +0000 Subject: 2.5 filebrowser: previous/next + bugfix + elubie's changes and cleanup * Previous/Next Folder browser * bugfix: "open most recently opened directory". * Previous and Next functionalities: - use BACKSPACE to navigate to previous folders - use SHIFT+BACKSPACE to navigate forward - once you change the folder by other ways the forward folder list is cleared * bug fix: the sfile->params->dir set through ED_fileselect_set_params wasn't correct. According to the code taking the settings from the existing (previous) filebrowser is a temp solution. In that case this is a fix for a temp solution :) (changes in: wm_event_system.c, filesel.c and ED_fileselect.h) ** Andrea(elubie): we can get away of the folderlist_clear_next test if we manually pass a boolean to file_change_dir (e.g. file_change_dir(sfile, true)). I tried not to mess up with your changes here. It's slightly slower (and maybe hacky) but its's more conservative IMHO. (my first commit to 2.5 ... that was a good reason to put my paper on hold :p) --- source/blender/editors/space_file/space_file.c | 30 ++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/space_file/space_file.c') diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index 9c30a0ed988..3167d2809c9 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -124,6 +124,18 @@ static void file_free(SpaceLink *sl) sfile->files= NULL; } + if(sfile->folders_prev) { + folderlist_free(sfile->folders_prev); + MEM_freeN(sfile->folders_prev); + sfile->folders_prev= NULL; + } + + if(sfile->folders_next) { + folderlist_free(sfile->folders_next); + MEM_freeN(sfile->folders_next); + sfile->folders_next= NULL; + } + if (sfile->params) { if(sfile->params->pupmenu) MEM_freeN(sfile->params->pupmenu); @@ -153,11 +165,15 @@ static SpaceLink *file_duplicate(SpaceLink *sl) sfilen->op = NULL; /* file window doesn't own operators */ sfilen->files = filelist_new(); - + if(sfileo->folders_prev) + sfilen->folders_prev = MEM_dupallocN(sfileo->folders_prev); + + if(sfileo->folders_next) + sfilen->folders_next = MEM_dupallocN(sfileo->folders_next); + if(sfileo->params) { sfilen->params= MEM_dupallocN(sfileo->params); - - filelist_setdir(sfilen->files, sfilen->params->dir); + file_change_dir(sfilen); } if (sfileo->layout) { sfilen->layout= MEM_dupallocN(sfileo->layout); @@ -170,9 +186,11 @@ static void file_refresh(const bContext *C, ScrArea *sa) SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); FileSelectParams *params = ED_fileselect_get_params(sfile); + if (!sfile->folders_prev) + sfile->folders_prev = folderlist_new(); if (!sfile->files) { sfile->files = filelist_new(); - filelist_setdir(sfile->files, params->dir); + file_change_dir(sfile); params->active_file = -1; // added this so it opens nicer (ton) } filelist_hidedot(sfile->files, params->flag & FILE_HIDE_DOT); @@ -295,6 +313,8 @@ void file_operatortypes(void) WM_operatortype_append(FILE_OT_exec); WM_operatortype_append(FILE_OT_cancel); WM_operatortype_append(FILE_OT_parent); + WM_operatortype_append(FILE_OT_previous); + WM_operatortype_append(FILE_OT_next); WM_operatortype_append(FILE_OT_refresh); WM_operatortype_append(FILE_OT_bookmark_toggle); WM_operatortype_append(FILE_OT_add_bookmark); @@ -313,6 +333,8 @@ void file_keymap(struct wmWindowManager *wm) WM_keymap_add_item(keymap, "FILE_OT_parent", PKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_add_bookmark", BKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "FILE_OT_hidedot", HKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "FILE_OT_previous", BACKSPACEKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "FILE_OT_next", BACKSPACEKEY, KM_PRESS, KM_SHIFT, 0); /* keys for main area */ keymap= WM_keymap_listbase(wm, "FileMain", SPACE_FILE, 0); -- cgit v1.2.3