Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2009-02-19 13:21:17 +0300
committerTon Roosendaal <ton@blender.org>2009-02-19 13:21:17 +0300
commit521a18f5a2cf043ba3e4254c3840fbc9f3e8906e (patch)
treed2a08620849ec559664e38e4620326d7ff65f0a6 /source
parentb6b910f8649cd28edfdd5c10252014a22d2eb0c4 (diff)
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
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/screen/screen_ops.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 8c997b98b32..1d32a6984cf 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -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;
}