diff options
author | Harley Acheson <harley.acheson@gmail.com> | 2021-02-04 04:51:19 +0300 |
---|---|---|
committer | Harley Acheson <harley.acheson@gmail.com> | 2021-02-04 04:51:19 +0300 |
commit | 492e64c7bcbd25e65eeaf75841b570bc410e7fde (patch) | |
tree | 4a83474dc9d88425526b48c9f3e6ce19776cf438 | |
parent | 261fa052ac4266618379c6a8df090430ca7cf7f8 (diff) |
UI: Win32 Child Windows On Top
Win32 child windows on top of parents. Short-term solution of forcing is_dialog when owned.
Differential Revision: https://developer.blender.org/D9971
Reviewed by Brecht Van Lommel
-rw-r--r-- | source/blender/windowmanager/intern/wm_window.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 42fd214543f..c4b50f1c889 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -560,6 +560,13 @@ static void wm_window_ghostwindow_add(wmWindowManager *wm, wmWindow *win, bool is_dialog) { + /* On Windows, if there is a parent window then force is_dialog. Otherwise the parent + handle is not used in window creation and they do not stay on top of parents. */ +#ifdef WIN32 + if (win->parent) { + is_dialog = true; + } +#endif /* a new window is created when pageflip mode is required for a window */ GHOST_GLSettings glSettings = {0}; @@ -858,13 +865,15 @@ wmWindow *WM_window_open_temp(bContext *C, /* changes rect to fit within desktop */ wm_window_check_position(&rect); - /* Reuse temporary or dialog window if one is open (but don't use a dialog for a regular - * temporary window, or vice versa). */ + /* Reuse temporary windows when they share the same title. */ wmWindow *win = NULL; LISTBASE_FOREACH (wmWindow *, win_iter, &wm->windows) { - if (WM_window_is_temp_screen(win_iter) && - (dialog == GHOST_IsDialogWindow(win_iter->ghostwin))) { - win = win_iter; + if (WM_window_is_temp_screen(win_iter)) { + char *wintitle = GHOST_GetTitle(win_iter->ghostwin); + if (strcmp(title, wintitle) == 0) { + win = win_iter; + } + free(wintitle); } } |