diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-01-12 17:40:14 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-01-12 17:44:40 +0300 |
commit | c6d28a94bee211c1d1ce41f364f5c026c4d759f0 (patch) | |
tree | 67d0e83050c410184c47a878f2a113fb4bb3c11b /source/blender/editors/screen/screen_edit.c | |
parent | 301433fe9d3864a454f0d27b9e3809e8e2c76da6 (diff) |
Fix T42754: File-Selector lost on fullscreen exit
There was a hard-coded check to exit the fileselector when restoring a view.
Now, when space types differ, flag areas as temporary and switch back to the previous type only in this case.
This means you can select a file while having a file-selector space type open, and not loose it every time.
Diffstat (limited to 'source/blender/editors/screen/screen_edit.c')
-rw-r--r-- | source/blender/editors/screen/screen_edit.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index c179cfc464c..3f814084238 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -1748,6 +1748,13 @@ ScrArea *ED_screen_full_newspace(bContext *C, ScrArea *sa, int type) } } + if (sa && (sa->spacetype != type)) { + newsa->flag |= AREA_FLAG_TEMP_TYPE; + } + else { + newsa->flag &= ~AREA_FLAG_TEMP_TYPE; + } + ED_area_newspace(C, newsa, type); return newsa; @@ -1763,6 +1770,21 @@ void ED_screen_full_prevspace(bContext *C, ScrArea *sa) ED_screen_state_toggle(C, win, sa, SCREENMAXIMIZED); } +void ED_screen_retore_temp_type(bContext *C, ScrArea *sa, bool is_screen_change) +{ + /* incase nether functions below run */ + ED_area_tag_redraw(sa); + + if (sa->flag & AREA_FLAG_TEMP_TYPE) { + ED_area_prevspace(C, sa); + sa->flag &= ~AREA_FLAG_TEMP_TYPE; + } + + if (is_screen_change && sa->full) { + ED_screen_state_toggle(C, CTX_wm_window(C), sa, SCREENMAXIMIZED); + } +} + /* restore a screen / area back to default operation, after temp fullscreen modes */ void ED_screen_full_restore(bContext *C, ScrArea *sa) { @@ -1789,12 +1811,14 @@ void ED_screen_full_restore(bContext *C, ScrArea *sa) else ED_screen_state_toggle(C, win, sa, state); } - else if (sl->spacetype == SPACE_FILE) { + else if (sa->flag & AREA_FLAG_TEMP_TYPE) { ED_screen_full_prevspace(C, sa); } else { ED_screen_state_toggle(C, win, sa, state); } + + sa->flag &= ~AREA_FLAG_TEMP_TYPE; } /* otherwise just tile the area again */ else { |