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
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2015-06-08 18:25:34 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-06-08 18:27:40 +0300
commit962f764d58847614d083dc382285d997652d6992 (patch)
treef76e59ebafff75b19db8c8ed3ffd2b5ee3e4bdd8 /source/blender/windowmanager/intern/wm_window.c
parentf8385de5edd67becf91f09e4974e102450a69238 (diff)
WM: refactor window code for stereo3d
Window copy code made it hard to test fixes.
Diffstat (limited to 'source/blender/windowmanager/intern/wm_window.c')
-rw-r--r--source/blender/windowmanager/intern/wm_window.c69
1 files changed, 41 insertions, 28 deletions
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index d0db55d64db..d11d88db147 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -244,30 +244,53 @@ wmWindow *wm_window_new(bContext *C)
/* part of wm_window.c api */
-wmWindow *wm_window_copy(bContext *C, wmWindow *winorig)
+wmWindow *wm_window_copy(bContext *C, wmWindow *win_src)
{
- wmWindow *win = wm_window_new(C);
+ wmWindow *win_dst = wm_window_new(C);
- win->posx = winorig->posx + 10;
- win->posy = winorig->posy;
- win->sizex = winorig->sizex;
- win->sizey = winorig->sizey;
+ win_dst->posx = win_src->posx + 10;
+ win_dst->posy = win_src->posy;
+ win_dst->sizex = win_src->sizex;
+ win_dst->sizey = win_src->sizey;
/* duplicate assigns to window */
- win->screen = ED_screen_duplicate(win, winorig->screen);
- BLI_strncpy(win->screenname, win->screen->id.name + 2, sizeof(win->screenname));
- win->screen->winid = win->winid;
+ win_dst->screen = ED_screen_duplicate(win_dst, win_src->screen);
+ BLI_strncpy(win_dst->screenname, win_dst->screen->id.name + 2, sizeof(win_dst->screenname));
+ win_dst->screen->winid = win_dst->winid;
- win->screen->do_refresh = true;
- win->screen->do_draw = true;
+ win_dst->screen->do_refresh = true;
+ win_dst->screen->do_draw = true;
- win->drawmethod = U.wmdrawmethod;
+ win_dst->drawmethod = U.wmdrawmethod;
- BLI_listbase_clear(&win->drawdata);
+ BLI_listbase_clear(&win_dst->drawdata);
- *win->stereo3d_format = *winorig->stereo3d_format;
+ *win_dst->stereo3d_format = *win_src->stereo3d_format;
- return win;
+ return win_dst;
+}
+
+/**
+ * A higher level version of copy that tests the new window can be added.
+ * (called from the operator directly)
+ */
+wmWindow *wm_window_copy_test(bContext *C, wmWindow *win_src)
+{
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wmWindow *win_dst;
+
+ win_dst = wm_window_copy(C, win_src);
+
+ WM_check(C);
+
+ if (win_dst->ghostwin) {
+ WM_event_add_notifier(C, NC_WINDOW | NA_ADDED, NULL);
+ return win_dst;
+ }
+ else {
+ wm_window_close(C, wm, win_dst);
+ return NULL;
+ }
}
/* this is event from ghost, or exit-blender op */
@@ -615,22 +638,12 @@ void WM_window_open_temp(bContext *C, rcti *position, int type)
/* operator callback */
int wm_window_duplicate_exec(bContext *C, wmOperator *UNUSED(op))
{
- wmWindowManager *wm = CTX_wm_manager(C);
wmWindow *win_src = CTX_wm_window(C);
- wmWindow *win_dst;
+ bool ok;
- win_dst = wm_window_copy(C, win_src);
+ ok = (wm_window_copy_test(C, win_src) != NULL);
- WM_check(C);
-
- if (win_dst->ghostwin) {
- WM_event_add_notifier(C, NC_WINDOW | NA_ADDED, NULL);
- return OPERATOR_FINISHED;
- }
- else {
- wm_window_close(C, wm, win_dst);
- return OPERATOR_CANCELLED;
- }
+ return ok ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
}