diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-08-26 06:49:58 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-08-26 06:49:58 +0300 |
commit | acb99cfd7b4f74b1c32ae7fb37f40afb0c0f3c7b (patch) | |
tree | 7a4541e2352955a9009184a46194b8b4a8eedaf1 /source/blender/editors/screen | |
parent | 3ee74feb2b0f6988ed17a5583998fac768ce7021 (diff) |
Return success when a screen was added/removed
Currently unused, but useful for screen-operators.
Diffstat (limited to 'source/blender/editors/screen')
-rw-r--r-- | source/blender/editors/screen/screen_edit.c | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 90a3afc78a2..b2609b4653d 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -1469,23 +1469,23 @@ int ED_screen_area_active(const bContext *C) return 0; } -/* operator call, WM + Window + screen already existed before */ -/* Do NOT call in area/region queues! */ -void ED_screen_set(bContext *C, bScreen *sc) +/** + * operator call, WM + Window + screen already existed before + * + * \warning Do NOT call in area/region queues! + * \returns success. + */ +bool ED_screen_set(bContext *C, bScreen *sc) { Main *bmain = CTX_data_main(C); wmWindowManager *wm = CTX_wm_manager(C); wmWindow *win = CTX_wm_window(C); bScreen *oldscreen = CTX_wm_screen(C); - ID *id; /* validate screen, it's called with notifier reference */ - for (id = bmain->screen.first; id; id = id->next) - if (sc == (bScreen *)id) - break; - if (id == NULL) - return; - + if (BLI_findindex(&bmain->screen, sc) == -1) { + return true; + } if (ELEM(sc->state, SCREENMAXIMIZED, SCREENFULL)) { /* find associated full */ @@ -1500,8 +1500,9 @@ void ED_screen_set(bContext *C, bScreen *sc) } /* check for valid winid */ - if (sc->winid != 0 && sc->winid != win->winid) - return; + if (sc->winid != 0 && sc->winid != win->winid) { + return false; + } if (oldscreen != sc) { wmTimer *wt = oldscreen->animtimer; @@ -1566,6 +1567,8 @@ void ED_screen_set(bContext *C, bScreen *sc) */ DAG_on_visible_update(bmain, false); } + + return true; } static bool ed_screen_used(wmWindowManager *wm, bScreen *sc) @@ -1589,20 +1592,18 @@ static bool ed_screen_used(wmWindowManager *wm, bScreen *sc) } /* only call outside of area/region loops */ -void ED_screen_delete(bContext *C, bScreen *sc) +bool ED_screen_delete(bContext *C, bScreen *sc) { Main *bmain = CTX_data_main(C); wmWindowManager *wm = CTX_wm_manager(C); wmWindow *win = CTX_wm_window(C); bScreen *newsc; - int delete = 1; /* don't allow deleting temp fullscreens for now */ if (ELEM(sc->state, SCREENMAXIMIZED, SCREENFULL)) { - return; + return false; } - - + /* screen can only be in use by one window at a time, so as * long as we are able to find a screen that is unused, we * can safely assume ours is not in use anywhere an delete it */ @@ -1617,13 +1618,19 @@ void ED_screen_delete(bContext *C, bScreen *sc) break; } - if (!newsc) - return; + if (!newsc) { + return false; + } ED_screen_set(C, newsc); - if (delete && win->screen != sc) + if (win->screen != sc) { BKE_libblock_free(bmain, sc); + return true; + } + else { + return false; + } } static void ed_screen_set_3dview_camera(Scene *scene, bScreen *sc, ScrArea *sa, View3D *v3d) |