[Bf-blender-cvs] [03d1f08282c] blender2.8: WM: Make sure that immediate mode is active before deactivate it

Germano noreply at git.blender.org
Thu Feb 22 17:22:40 CET 2018


Commit: 03d1f08282cfb1e7b579d999ecde12f1bee25c81
Author: Germano
Date:   Thu Feb 22 13:22:28 2018 -0300
Branches: blender2.8
https://developer.blender.org/rB03d1f08282cfb1e7b579d999ecde12f1bee25c81

WM: Make sure that immediate mode is active before deactivate it

===================================================================

M	source/blender/windowmanager/intern/wm_window.c

===================================================================

diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 3268841334d..103f8d580c1 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -175,13 +175,19 @@ static void wm_ghostwindow_destroy(wmWindowManager *wm, wmWindow *win)
 {
 	if (win->ghostwin) {
 		/* We need this window's opengl context active to discard it. */
-		wm_window_make_drawable(wm, win);
+		GHOST_ActivateWindowDrawingContext(win->ghostwin);
+		GWN_context_active_set(win->gwnctx);
+
 		/* Delete local gawain objects.  */
 		GWN_context_discard(win->gwnctx);
 
 		GHOST_DisposeWindow(g_system, win->ghostwin);
 		win->ghostwin = NULL;
 		win->gwnctx = NULL;
+
+		/* prevents non-drawable state of main windows (bugs #22967 and #25071, possibly #22477 too) */
+		wm->windrawable = NULL;
+		wm->winactive = NULL;
 	}
 }
 
@@ -222,11 +228,6 @@ void wm_window_free(bContext *C, wmWindowManager *wm, wmWindow *win)
 
 	wm_ghostwindow_destroy(wm, win);
 
-	/* always set drawable and active to NULL,
-	 * prevents non-drawable state of main windows (bugs #22967 and #25071, possibly #22477 too) */
-	wm->windrawable = NULL;
-	wm->winactive = NULL;
-
 	BKE_workspace_instance_hook_free(G.main, win->workspace_hook);
 	MEM_freeN(win->stereo3d_format);
 
@@ -378,9 +379,20 @@ void wm_window_close(bContext *C, wmWindowManager *wm, wmWindow *win)
 		if (screen) {
 			ED_screen_exit(C, win, screen);
 		}
-		
+
+		if (tmpwin) {
+			immDeactivate();
+		}
+
 		wm_window_free(C, wm, win);
-	
+
+		/* keep imediatemode active before the next `wm_window_make_drawable` call */
+		if (tmpwin) {
+			GHOST_ActivateWindowDrawingContext(tmpwin->ghostwin);
+			GWN_context_active_set(tmpwin->gwnctx);
+			immActivate();
+		}
+
 		/* if temp screen, delete it after window free (it stops jobs that can access it) */
 		if (screen && screen->temp) {
 			Main *bmain = CTX_data_main(C);



More information about the Bf-blender-cvs mailing list