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
This commit is contained in:
Harley Acheson 2021-02-03 17:51:19 -08:00
parent 261fa052ac
commit 492e64c7bc
Notes: blender-bot 2023-02-14 10:18:56 +01:00
Referenced by issue #85768, Toggle Window Fullscreen broken for New Window (Titlebar visible)
Referenced by issue #85358, Renderpreview, Header jumps to bottom with open preferences and render
1 changed files with 14 additions and 5 deletions

View File

@ -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);
}
}