Fix Preferences opens file browser in wrong window
authorJulian Eisel <eiseljulian@gmail.com>
Thu, 19 Sep 2019 20:31:19 +0000 (22:31 +0200)
committerJulian Eisel <eiseljulian@gmail.com>
Thu, 19 Sep 2019 20:35:48 +0000 (22:35 +0200)
Steps to reproduce were:
* Open Preferences in a new window (Edit -> Preferences)
* Set file browsers to open fullscreen (Interface->Editors->Temporary
  Windows)
* Open a file browser in the Preferences (e.g. Add-ons -> Install)
The file browser would be opened in the parent window, rather than the
preferences.

source/blender/windowmanager/intern/wm_event_system.c

index 47b77cf435bf796a0d3c76c44f045a00baf8f83a..fb91a65a7cc8f43c6d273cb12d84f969f9bbd6c9 100644 (file)
@@ -3546,10 +3546,12 @@ void WM_event_add_fileselect(bContext *C, wmOperator *op)
   wmWindowManager *wm = CTX_wm_manager(C);
   wmWindow *win = CTX_wm_window(C);
   const bool is_temp_screen = WM_window_is_temp_screen(win);
-  /* Don't add the file handler to the temporary window, or else it owns the handlers for itself,
-   * causing dangling pointers once it's destructed through a handler. It has a parent which should
-   * hold the handlers itself. */
-  ListBase *modalhandlers = is_temp_screen ? &win->parent->modalhandlers : &win->modalhandlers;
+  const bool opens_window = (U.filebrowser_display_type == USER_TEMP_SPACE_DISPLAY_WINDOW);
+  /* Don't add the file handler to the temporary window if one is opened, or else it owns the
+   * handlers for itself, causing dangling pointers once it's destructed through a handler. It has
+   * a parent which should hold the handlers itself. */
+  ListBase *modalhandlers = (is_temp_screen && opens_window) ? &win->parent->modalhandlers :
+                                                               &win->modalhandlers;
 
   /* Close any popups, like when opening a file browser from the splash. */
   UI_popup_handlers_remove_all(C, modalhandlers);