Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarley Acheson <harley.acheson@gmail.com>2021-02-04 04:51:19 +0300
committerHarley Acheson <harley.acheson@gmail.com>2021-02-04 04:51:19 +0300
commit492e64c7bcbd25e65eeaf75841b570bc410e7fde (patch)
tree4a83474dc9d88425526b48c9f3e6ce19776cf438 /source/blender/windowmanager/intern/wm_window.c
parent261fa052ac4266618379c6a8df090430ca7cf7f8 (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
Diffstat (limited to 'source/blender/windowmanager/intern/wm_window.c')
-rw-r--r--source/blender/windowmanager/intern/wm_window.c19
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);
}
}