diff options
Diffstat (limited to 'source/blender/windowmanager/intern/wm_event_system.c')
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 16 |
1 files changed, 11 insertions, 5 deletions
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"); |