diff options
author | julianeisel <julian_eisel@web.de> | 2015-01-28 04:32:52 +0300 |
---|---|---|
committer | julianeisel <julian_eisel@web.de> | 2015-01-28 04:52:49 +0300 |
commit | 3e590923485dd0206545654d58202fb073a4469d (patch) | |
tree | 1b0be1dbf7a9be7146fc2a8a0d6fa5315a4a6e2c /source/blender/windowmanager | |
parent | 01cebb6e91dce40772a1f9444a09eef7ba97ea7b (diff) |
Stacked fullscreen area support (proper implemenation)
Adds support for stacked fullscreens. This basically means, if a user opens a
temporary fullscreen mode, such as the File Browser or the Image Editor render
view, from a different fullscreen, the "Back to Previous" function or the other
ways to escape those temporary fullscreens don't return to the split screen
layout but to the previous fullscreen he has been in.
I already committed something similar (f7e844570fea862) but that was only
supposed as a fix, it didn't work for the "Back to Previous" operator and the
implementation wasn't really reusable. This one looks a bit nicer + makes some
older hacks unnecessary :)
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 13 | ||||
-rw-r--r-- | source/blender/windowmanager/wm_event_system.h | 3 |
2 files changed, 6 insertions, 10 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 885aa69b179..4e5f0d3798d 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -1677,8 +1677,12 @@ static int wm_handler_fileselect_do(bContext *C, ListBase *handlers, wmEventHand sa = handler->op_area; } - if (val == EVT_FILESELECT_OPEN) { + if (val == EVT_FILESELECT_OPEN || sa->full) { ED_area_newspace(C, sa, SPACE_FILE); /* 'sa' is modified in-place */ + /* we already had a fullscreen here -> mark new space as a stacked fullscreen */ + if (sa->full) { + sa->flag |= AREA_FLAG_STACKED_FULLSCREEN; + } } else { sa = ED_screen_full_newspace(C, sa, SPACE_FILE); /* sets context */ @@ -1702,15 +1706,11 @@ static int wm_handler_fileselect_do(bContext *C, ListBase *handlers, wmEventHand case EVT_FILESELECT_CANCEL: case EVT_FILESELECT_EXTERNAL_CANCEL: { - /* XXX validate area and region? */ - bScreen *screen = CTX_wm_screen(C); - /* remlink now, for load file case before removing*/ BLI_remlink(handlers, handler); if (val != EVT_FILESELECT_EXTERNAL_CANCEL) { - ScrArea *sa = CTX_wm_area(C); - ED_screen_restore_temp_type(C, sa, screen != handler->filescreen); + ED_screen_full_prevspace(C, CTX_wm_area(C)); } wm_handler_op_context(C, handler); @@ -2494,7 +2494,6 @@ void WM_event_add_fileselect(bContext *C, wmOperator *op) handler->op = op; handler->op_area = CTX_wm_area(C); handler->op_region = CTX_wm_region(C); - handler->filescreen = CTX_wm_screen(C); BLI_addhead(&win->modalhandlers, handler); diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h index d1a94194108..f89177a82ea 100644 --- a/source/blender/windowmanager/wm_event_system.h +++ b/source/blender/windowmanager/wm_event_system.h @@ -65,9 +65,6 @@ typedef struct wmEventHandler { struct ARegion *ui_region; /* for derived/modal handlers */ struct ARegion *ui_menu; /* for derived/modal handlers */ - /* fileselect handler re-uses modal operator data */ - struct bScreen *filescreen; /* screen it started in, to validate exec */ - /* drop box handler */ ListBase *dropboxes; |