[Bf-blender-cvs] [66776bd] workspaces: Cleanup: Screen/workspace change functions, comments, naming, etc
Julian Eisel
noreply at git.blender.org
Thu Jan 5 19:35:57 CET 2017
Commit: 66776bd2f71fe50fe09b43d3e16f30f63ef2c4a2
Author: Julian Eisel
Date: Thu Jan 5 19:30:20 2017 +0100
Branches: workspaces
https://developer.blender.org/rB66776bd2f71fe50fe09b43d3e16f30f63ef2c4a2
Cleanup: Screen/workspace change functions, comments, naming, etc
===================================================================
M source/blender/editors/include/ED_screen.h
M source/blender/editors/screen/screen_edit.c
M source/blender/editors/screen/screen_intern.h
M source/blender/editors/screen/workspace_edit.c
M source/blender/editors/screen/workspace_layout_edit.c
M source/blender/makesdna/DNA_screen_types.h
M source/blender/makesdna/dna_workspace_types.h
M source/blender/windowmanager/intern/wm_event_system.c
M source/blender/windowmanager/intern/wm_window.c
===================================================================
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index 2482c15..3b73c38 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -106,7 +106,7 @@ void ED_screens_initialize(struct wmWindowManager *wm);
void ED_screen_draw(struct wmWindow *win);
void ED_screen_refresh(struct wmWindowManager *wm, struct wmWindow *win);
void ED_screen_do_listen(struct bContext *C, struct wmNotifier *note);
-bool ED_screen_set(struct bContext *C, struct bScreen *sc);
+bool ED_screen_change(struct bContext *C, struct bScreen *sc);
void ED_screen_update_after_scene_change(const struct bScreen *screen, struct Scene *scene_new);
void ED_screen_set_subwinactive(struct bContext *C, struct wmEvent *event);
void ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen);
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 7550f35..720da7f 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -533,13 +533,29 @@ void screen_data_copy(bScreen *to, bScreen *from)
/**
* Prepare a newly created screen for initializing it as active screen.
*/
-void screen_new_activate_refresh(const wmWindow *win, bScreen *screen_new)
+void screen_new_activate_prepare(const wmWindow *win, bScreen *screen_new)
{
screen_new->winid = win->winid;
screen_new->do_refresh = true;
screen_new->do_draw = true;
}
+void screen_changed_update(bContext *C, wmWindow *win, bScreen *sc)
+{
+ Scene *scene = WM_window_get_active_scene(win);
+
+ CTX_wm_window_set(C, win); /* stores C->wm.screen... hrmf */
+
+ ED_screen_refresh(CTX_wm_manager(C), win);
+
+ BKE_screen_view3d_scene_sync(sc, scene); /* sync new screen with scene data */
+ WM_event_add_notifier(C, NC_WINDOW, NULL);
+ WM_event_add_notifier(C, NC_WORKSPACE | ND_SCREENSET, sc);
+
+ /* makes button hilites work */
+ WM_event_add_mousemove(C);
+}
+
/* with sa as center, sb is located at: 0=W, 1=N, 2=E, 3=S */
/* -1 = not valid check */
@@ -946,6 +962,8 @@ void ED_screen_refresh(wmWindowManager *wm, wmWindow *win)
printf("%s: set screen\n", __func__);
}
screen->do_refresh = false;
+ /* prevent multiwin errors */
+ screen->winid = win->winid;
screen->context = ed_screen_context;
}
@@ -1191,7 +1209,7 @@ int ED_screen_area_active(const bContext *C)
/* -------------------------------------------------------------------- */
/* Screen Activation (screen_set_xxx) */
-bScreen *screen_set_find_associated_fullscreen(const Main *bmain, bScreen *screen)
+static bScreen *screen_find_associated_fullscreen(const Main *bmain, bScreen *screen)
{
for (bScreen *screen_iter = bmain->screen.first; screen_iter; screen_iter = screen_iter->id.next) {
ScrArea *sa = screen_iter->areabase.first;
@@ -1204,33 +1222,10 @@ bScreen *screen_set_find_associated_fullscreen(const Main *bmain, bScreen *scree
}
/**
- * Refresh data and make screen ready for drawing *after* activating it.
- */
-void screen_set_refresh(bContext *C, wmWindow *win)
-{
- Scene *scene = WM_window_get_active_scene(win);
- bScreen *sc = WM_window_get_active_screen(win);
-
- CTX_wm_window_set(C, win); // stores C->wm.screen... hrmf
-
- /* prevent multiwin errors */
- sc->winid = win->winid;
-
- BKE_screen_view3d_scene_sync(sc, scene); /* sync new screen with scene data */
- ED_screen_refresh(CTX_wm_manager(C), CTX_wm_window(C));
- WM_event_add_notifier(C, NC_WINDOW, NULL);
- WM_event_add_notifier(C, NC_WORKSPACE | ND_SCREENSET, sc);
-
- /* makes button hilites work */
- WM_event_add_mousemove(C);
-}
-
-/**
- * Make sure the correct screen is used and that it's valid for display in \a win.
- * \return the screen to activate (might differ from \a screen_new in case
- * of fullscreen) or NULL if no valid one found.
+ * \return the screen to activate.
+ * \warning The returned screen may not always equal \a screen_new!
*/
-bScreen *screen_set_ensure_valid(const Main *bmain, const wmWindow *win, bScreen *screen_new)
+bScreen *screen_change_prepare(bScreen *screen_old, bScreen *screen_new, Main *bmain, bContext *C, wmWindow *win)
{
/* validate screen, it's called with notifier reference */
if (BLI_findindex(&bmain->screen, screen_new) == -1) {
@@ -1238,7 +1233,7 @@ bScreen *screen_set_ensure_valid(const Main *bmain, const wmWindow *win, bScreen
}
if (ELEM(screen_new->state, SCREENMAXIMIZED, SCREENFULL)) {
- screen_new = screen_set_find_associated_fullscreen(bmain, screen_new);
+ screen_new = screen_find_associated_fullscreen(bmain, screen_new);
}
/* check for valid winid */
@@ -1246,56 +1241,55 @@ bScreen *screen_set_ensure_valid(const Main *bmain, const wmWindow *win, bScreen
return NULL;
}
- return screen_new;
-}
+ if (screen_old != screen_new) {
+ wmTimer *wt = screen_old->animtimer;
-void screen_set_prepare(bContext *C, wmWindow *win, bScreen *screen_new, bScreen *screen_old)
-{
- wmWindowManager *wm = CTX_wm_manager(C);
- wmTimer *wt = screen_old->animtimer;
- ScrArea *sa;
+ /* remove handlers referencing areas in old screen */
+ for (ScrArea *sa = screen_old->areabase.first; sa; sa = sa->next) {
+ WM_event_remove_area_handler(&win->modalhandlers, sa);
+ }
- /* remove handlers referencing areas in old screen */
- for (sa = screen_old->areabase.first; sa; sa = sa->next) {
- WM_event_remove_area_handler(&win->modalhandlers, sa);
- }
+ /* we put timer to sleep, so screen_exit has to think there's no timer */
+ screen_old->animtimer = NULL;
+ if (wt) {
+ WM_event_timer_sleep(CTX_wm_manager(C), win, wt, true);
+ }
+ ED_screen_exit(C, win, screen_old);
- /* we put timer to sleep, so screen_exit has to think there's no timer */
- screen_old->animtimer = NULL;
- if (wt) {
- WM_event_timer_sleep(wm, win, wt, true);
- }
- ED_screen_exit(C, win, screen_old);
+ /* Same scene, "transfer" playback to new screen. */
+ if (wt) {
+ screen_new->animtimer = wt;
+ }
- /* Same scene, "transfer" playback to new screen. */
- if (wt) {
- screen_new->animtimer = wt;
+ return screen_new;
}
+
+ return NULL;
}
/**
- * operator call, WM + Window + screen already existed before
+ * \brief Change the active screen.
+ *
+ * Operator call, WM + Window + screen already existed before
+ *
* \warning Do NOT call in area/region queues!
- * \returns success.
+ * \returns if screen changing was successful.
*/
-bool ED_screen_set(bContext *C, bScreen *sc)
+bool ED_screen_change(bContext *C, bScreen *sc)
{
Main *bmain = CTX_data_main(C);
wmWindow *win = CTX_wm_window(C);
bScreen *screen_old = CTX_wm_screen(C);
- bScreen *screen_new;
-
- if (!(screen_new = screen_set_ensure_valid(bmain, win, sc))) {
- return false;
- }
+ bScreen *screen_new = screen_change_prepare(screen_old, sc, bmain, C, win);
- if (screen_old != screen_new) {
- screen_set_prepare(C, win, screen_new, screen_old);
+ if (screen_new) {
WM_window_set_active_screen(win, sc);
- screen_set_refresh(C, win);
+ screen_changed_update(C, win, screen_new);
+
+ return true;
}
- return true;
+ return false;
}
static void screen_set_3dview_camera(Scene *scene, ScrArea *sa, View3D *v3d)
@@ -1499,7 +1493,7 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *sa, const s
sc->animtimer = oldscreen->animtimer;
oldscreen->animtimer = NULL;
- ED_screen_set(C, sc);
+ ED_screen_change(C, sc);
BKE_workspace_layout_remove(workspace, layout_old, CTX_data_main(C));
@@ -1577,7 +1571,7 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *sa, const s
BLI_assert(false);
}
- ED_screen_set(C, sc);
+ ED_screen_change(C, sc);
}
/* XXX bad code: setscreen() ends with first area active. fullscreen render assumes this too */
diff --git a/source/blender/editors/screen/screen_intern.h b/source/blender/editors/screen/screen_intern.h
index d1b71c6..a420471 100644
--- a/source/blender/editors/screen/screen_intern.h
+++ b/source/blender/editors/screen/screen_intern.h
@@ -48,11 +48,9 @@ void region_toggle_hidden(struct bContext *C, ARegion *ar, const bool do_
/* screen_edit.c */
bScreen *screen_add(wmWindow *win, const char *name, const int winsize_x, const int winsize_y);
void screen_data_copy(bScreen *to, bScreen *from);
-void screen_new_activate_refresh(const wmWindow *win, bScreen *screen_new);
-bScreen *screen_set_find_associated_fullscreen(const struct Main *bmain, bScreen *screen);
-void screen_set_refresh(struct bContext *C, wmWindow *win);
-bScreen *screen_set_ensure_valid(const struct Main *bmain, const wmWindow *win, bScreen *screen_new);
-void screen_set_prepare(struct bContext *C, wmWindow *win, bScreen *screen_new, bScreen *screen_old);
+void screen_new_activate_prepare(const wmWindow *win, bScreen *screen_new);
+void screen_changed_update(struct bContext *C, wmWindow *win, bScreen *sc);
+bScreen *screen_change_prepare(bScreen *screen_old, bScreen *screen_new, struct Main *bmain, struct bContext *C, wmWindow *win);
ScrEdge *screen_findedge(bScreen *sc, ScrVert *v1, ScrVert *v2);
ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac, int merge);
int screen_area_join(struct bContext *C, bScreen *scr, ScrArea *sa1, ScrArea *sa2);
diff --git a/source/blender/editors/screen/workspace_edit.c b/source/blender/editors/screen/workspace_edit.c
index 4557ccb..bc701c4 100644
--- a/source/blender/editors/screen/workspace_edit.c
+++ b/source/blender/editors/screen/workspace_edit.c
@@ -68,10 +68,10 @@ static void workspace_change_update_mode(const WorkSpace *workspace_old, const W
* \brief Change the active workspace.
*
* Operator call, WM + Window + screen already existed before
- * Pretty similar to #ED_screen_set since changing workspace also changes screen.
+ * Pretty similar to #ED_screen_change since changing workspace also changes screen.
*
* \warning Do NOT call in area/region queues!
- * \returns success.
+ * \returns if workspace changing was successful.
*/
bool ED_workspace_change(bContext *C, wmWindowManager *wm, wmWindow *win, WorkSpace *works
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list