From d9a95f967aa239a6c0609a3f838a8a93721bdc26 Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Mon, 17 Sep 2012 21:38:04 +0000 Subject: [PATCH] == filebrowser == added operator for resetting (cleaning up) the recent folders list in the file-browser panels. (small and low risk request by dfelinto) --- .../blender/editors/space_file/file_intern.h | 1 + source/blender/editors/space_file/file_ops.c | 29 +++++++++++++++++++ .../blender/editors/space_file/file_panels.c | 5 ++++ .../blender/editors/space_file/space_file.c | 1 + 4 files changed, 36 insertions(+) diff --git a/source/blender/editors/space_file/file_intern.h b/source/blender/editors/space_file/file_intern.h index a07a560328c..e5c6a839380 100644 --- a/source/blender/editors/space_file/file_intern.h +++ b/source/blender/editors/space_file/file_intern.h @@ -66,6 +66,7 @@ void FILE_OT_select_border(struct wmOperatorType *ot); void FILE_OT_select_bookmark(struct wmOperatorType *ot); void FILE_OT_bookmark_add(struct wmOperatorType *ot); void FILE_OT_delete_bookmark(struct wmOperatorType *ot); +void FILE_OT_reset_recent(wmOperatorType *ot); void FILE_OT_hidedot(struct wmOperatorType *ot); void FILE_OT_execute(struct wmOperatorType *ot); void FILE_OT_cancel(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index f0fdffadb12..6c718751cfe 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -515,6 +515,35 @@ void FILE_OT_delete_bookmark(wmOperatorType *ot) RNA_def_int(ot->srna, "index", -1, -1, 20000, "Index", "", -1, 20000); } +static int reset_recent_exec(bContext *C, wmOperator *op) +{ + ScrArea *sa = CTX_wm_area(C); + char name[FILE_MAX]; + struct FSMenu *fsmenu = fsmenu_get(); + + while (fsmenu_get_entry(fsmenu, FS_CATEGORY_RECENT, 0) != NULL) { + fsmenu_remove_entry(fsmenu, FS_CATEGORY_RECENT, 0); + } + BLI_make_file_string("/", name, BLI_get_folder_create(BLENDER_USER_CONFIG, NULL), BLENDER_BOOKMARK_FILE); + fsmenu_write_file(fsmenu, name); + ED_area_tag_redraw(sa); + + return OPERATOR_FINISHED; +} + +void FILE_OT_reset_recent(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Reset Recent"; + ot->description = "Reset Recent files"; + ot->idname = "FILE_OT_reset_recent"; + + /* api callbacks */ + ot->exec = reset_recent_exec; + ot->poll = ED_operator_file_active; + +} + int file_highlight_set(SpaceFile *sfile, ARegion *ar, int mx, int my) { View2D *v2d = &ar->v2d; diff --git a/source/blender/editors/space_file/file_panels.c b/source/blender/editors/space_file/file_panels.c index 415155af486..a7054909aaa 100644 --- a/source/blender/editors/space_file/file_panels.c +++ b/source/blender/editors/space_file/file_panels.c @@ -152,9 +152,14 @@ static void file_panel_bookmarks(const bContext *C, Panel *pa) static void file_panel_recent(const bContext *C, Panel *pa) { SpaceFile *sfile = CTX_wm_space_file(C); + uiLayout *row; if (sfile) { if (!(U.uiflag & USER_HIDE_RECENT) ) { + row = uiLayoutRow(pa->layout, FALSE); + uiItemO(row, IFACE_("Reset"), ICON_X, "file.reset_recent"); + uiItemL(row, NULL, ICON_NONE); + file_panel_category(C, pa, FS_CATEGORY_RECENT, &sfile->recentnr, ICON_FILE_FOLDER, 0); } } diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index 509a4f00c49..7f39545258d 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -386,6 +386,7 @@ static void file_operatortypes(void) WM_operatortype_append(FILE_OT_bookmark_toggle); WM_operatortype_append(FILE_OT_bookmark_add); WM_operatortype_append(FILE_OT_delete_bookmark); + WM_operatortype_append(FILE_OT_reset_recent); WM_operatortype_append(FILE_OT_hidedot); WM_operatortype_append(FILE_OT_filenum); WM_operatortype_append(FILE_OT_directory_new);