2.5
- Fix in ESC for render output window; it didn't check the 'full' and 'prevspace' flags correct. In some cases it left the screen in 'full' mode on ESC. - Added modal handler on a render, which catches the ESC while render, to prevent that ESC to be passed on to the image window. This handler can be further elaborated later to prevent edit accidents while render is in progress. I already notice some derivedmesh/customdata free errors on render now
This commit is contained in:
@@ -2145,6 +2145,22 @@ static int render_breakjob(void *rjv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* catch esc */
|
||||
static int screen_render_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
/* no running blender, remove handler and pass through */
|
||||
if(0==WM_jobs_test(CTX_wm_manager(C), CTX_data_scene(C)))
|
||||
return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH;
|
||||
|
||||
/* running render */
|
||||
switch (event->type) {
|
||||
case ESCKEY:
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
break;
|
||||
}
|
||||
return OPERATOR_PASS_THROUGH;
|
||||
}
|
||||
|
||||
/* using context, starts job */
|
||||
static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
@@ -2209,7 +2225,10 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
WM_cursor_wait(0);
|
||||
WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, scene);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
/* add modal handler for ESC */
|
||||
WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
|
||||
|
||||
return OPERATOR_RUNNING_MODAL;
|
||||
}
|
||||
|
||||
|
||||
@@ -2222,6 +2241,7 @@ void SCREEN_OT_render(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->invoke= screen_render_invoke;
|
||||
ot->modal= screen_render_modal;
|
||||
ot->exec= screen_render_exec;
|
||||
|
||||
ot->poll= ED_operator_screenactive;
|
||||
@@ -2239,12 +2259,18 @@ static int render_view_cancel_exec(bContext *C, wmOperator *unused)
|
||||
|
||||
if(sima->flag & SI_PREVSPACE) {
|
||||
sima->flag &= ~SI_PREVSPACE;
|
||||
ED_area_prevspace(C);
|
||||
|
||||
if(sima->flag & SI_FULLWINDOW) {
|
||||
sima->flag &= ~SI_FULLWINDOW;
|
||||
ED_screen_full_prevspace(C);
|
||||
}
|
||||
else
|
||||
ED_area_prevspace(C);
|
||||
}
|
||||
else if(sima->flag & SI_FULLWINDOW) {
|
||||
sima->flag &= ~SI_FULLWINDOW;
|
||||
ED_screen_full_prevspace(C);
|
||||
}
|
||||
ed_screen_fullarea(C, sa);
|
||||
}
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user