Fix T69498: Crash on export UV Layout
authorJulian Eisel <eiseljulian@gmail.com>
Thu, 5 Sep 2019 22:13:24 +0000 (00:13 +0200)
committerJulian Eisel <eiseljulian@gmail.com>
Thu, 5 Sep 2019 22:13:24 +0000 (00:13 +0200)
Ensure there's a drawable context after the file browser window is
destroyed.

source/blender/windowmanager/intern/wm_event_system.c
source/blender/windowmanager/intern/wm_files.c

index 440dd6cd557760db501d96dac6824856e0af2a83..32324745bc423a171add6b264ccb0ba87f51e786 100644 (file)
@@ -2376,6 +2376,8 @@ static int wm_handler_fileselect_do(bContext *C,
     case EVT_FILESELECT_EXEC:
     case EVT_FILESELECT_CANCEL:
     case EVT_FILESELECT_EXTERNAL_CANCEL: {
+      wmWindow *ctx_win = CTX_wm_window(C);
+
       /* remlink now, for load file case before removing*/
       BLI_remlink(handlers, handler);
 
@@ -2388,11 +2390,13 @@ static int wm_handler_fileselect_do(bContext *C,
             BLI_assert(file_sa->spacetype == SPACE_FILE);
 
             if (BLI_listbase_is_single(&file_sa->spacedata)) {
-              wmWindow *ctx_win = CTX_wm_window(C);
               BLI_assert(ctx_win != win);
 
               wm_window_close(C, wm, win);
+
               CTX_wm_window_set(C, ctx_win);  // wm_window_close() NULLs.
+              /* Some operators expect a drawable context (for EVT_FILESELECT_EXEC) */
+              wm_window_make_drawable(wm, ctx_win);
             }
             else if (file_sa->full) {
               ED_screen_full_prevspace(C, file_sa);
@@ -2406,7 +2410,7 @@ static int wm_handler_fileselect_do(bContext *C,
         }
       }
 
-      wm_handler_op_context(C, handler, CTX_wm_window(C)->eventstate);
+      wm_handler_op_context(C, handler, ctx_win->eventstate);
 
       /* needed for UI_popup_menu_reports */
 
index c7f38a7f53b62e71820c1bf54f9e14f03dee945d..2b89426f083baee43c29e6986f9b8f881ae3262a 100644 (file)
@@ -1240,9 +1240,6 @@ static ImBuf *blend_file_thumb(const bContext *C,
   /* gets scaled to BLEN_THUMB_SIZE */
   Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
 
-  /* Offscreen drawing requires a drawable window context. */
-  wm_window_make_drawable(wm, CTX_wm_window(C));
-
   if (scene->camera) {
     ibuf = ED_view3d_draw_offscreen_imbuf_simple(depsgraph,
                                                  scene,