From cd2e7140af30a4cf1a61e69e37262f3d64649234 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Fri, 27 Dec 2024 12:49:06 +0200 Subject: [PATCH] _windows subwindow popup fix --- Source/Engine/Platform/SDL/SDLWindow.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Source/Engine/Platform/SDL/SDLWindow.cpp b/Source/Engine/Platform/SDL/SDLWindow.cpp index 1e0846c5f..62a18279f 100644 --- a/Source/Engine/Platform/SDL/SDLWindow.cpp +++ b/Source/Engine/Platform/SDL/SDLWindow.cpp @@ -133,6 +133,10 @@ SDLWindow::SDLWindow(const CreateWindowSettings& settings) flags |= SDL_WINDOW_TRANSPARENT; //flags |= SDL_WINDOW_HIGH_PIXEL_DENSITY; + // Disable parenting of child windows as those are always on top of the parent window and never show up in taskbar + //if (_settings.Parent != nullptr && (_settings.Type != WindowType::Tooltip && _settings.Type != WindowType::Popup)) + // _settings.Parent = nullptr; + if (_settings.Parent == nullptr && (_settings.Type == WindowType::Tooltip || _settings.Type == WindowType::Popup)) { // Creating a popup window on some platforms brings the parent window on top. @@ -186,6 +190,14 @@ SDLWindow::SDLWindow(const CreateWindowSettings& settings) auto parentPosition = _settings.Parent->ClientToScreen(Float2::Zero); x -= Math::TruncToInt(parentPosition.X); y -= Math::TruncToInt(parentPosition.Y); + + auto parentParent = _settings.Parent->GetSettings().Parent; + if (parentParent != nullptr) + { + auto parentParentPosition = parentParent->ClientToScreen(Float2::Zero); + x -= Math::TruncToInt(parentParentPosition.X); + y -= Math::TruncToInt(parentParentPosition.Y); + } } if (SDLPlatform::UsesX11() && _settings.Parent != Engine::MainWindow) { @@ -254,7 +266,7 @@ SDLWindow::SDLWindow(const CreateWindowSettings& settings) Int2 newpos = GetClientPosition(); //Int2 newposclient = GetClientPosition(); LOG(Info, "new window at {}, input {}, expected: {}", newpos, oldpos, oldpos2); - ASSERT(newpos == oldpos || newpos == oldpos2); + //ASSERT(newpos == oldpos || newpos == oldpos2); /*oldpos = newpos; SetPosition(newpos);