From 8b1bfbcfea8af306dbf42743b5f67d46159015c5 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Tue, 4 Jan 2011 14:37:21 +0000 Subject: Todo items: - File Window: when opened with operator (save, load, etc), you couldn't start a new one, causing memleaks. Now it nicely refreshes file window for new operator. Also means you can make CTRL+F3 screenies of filewindow now. - CTRL+F3 screenshot had memleak on cancel. --- source/blender/windowmanager/intern/wm_event_system.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'source/blender/windowmanager') diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 7ad52f8fcb1..b84a00097b1 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -1893,14 +1893,20 @@ void WM_event_fileselect_event(bContext *C, void *ophandle, int eventval) void WM_event_add_fileselect(bContext *C, wmOperator *op) { - wmEventHandler *handler; + wmEventHandler *handler, *handlernext; wmWindow *win= CTX_wm_window(C); int full= 1; // XXX preset? - /* only allow file selector open per window bug [#23553] */ - for(handler= win->modalhandlers.first; handler; handler=handler->next) { - if(handler->type == WM_HANDLER_FILESELECT) - return; + /* only allow 1 file selector open per window */ + for(handler= win->modalhandlers.first; handler; handler=handlernext) { + handlernext= handler->next; + + if(handler->type == WM_HANDLER_FILESELECT) { + if(handler->op) + WM_operator_free(handler->op); + BLI_remlink(&win->modalhandlers, handler); + wm_event_free_handler(handler); + } } handler = MEM_callocN(sizeof(wmEventHandler), "fileselect handler"); -- cgit v1.2.3