DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 1a2dafdfc9fef7c1b2ebdb62b9b81b4d4d2d23f8
parent dca5c9d4765cf8283ef6b5936e6a9044233c759f
Author: falkTX <falktx@falktx.com>
Date:   Sat,  3 Jul 2021 22:23:13 +0100

Give context back to transient parent window

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
Mdgl/src/WindowPrivateData.cpp | 13+++++++++++--
Mdgl/src/WindowPrivateData.hpp | 3+++
Mdgl/src/pugl.cpp | 10+++++++++-
Mdgl/src/pugl.hpp | 4++++
4 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/dgl/src/WindowPrivateData.cpp b/dgl/src/WindowPrivateData.cpp @@ -79,6 +79,7 @@ Window::PrivateData::PrivateData(Application& a, Window* const s) appData(a.pData), self(s), view(puglNewView(appData->world)), + transientParentView(nullptr), topLevelWidgets(), isClosed(true), isVisible(false), @@ -102,6 +103,7 @@ Window::PrivateData::PrivateData(Application& a, Window* const s, PrivateData* c appData(a.pData), self(s), view(puglNewView(appData->world)), + transientParentView(ppData->view), topLevelWidgets(), isClosed(true), isVisible(false), @@ -117,9 +119,10 @@ Window::PrivateData::PrivateData(Application& a, Window* const s, PrivateData* c #endif modal(ppData) { - initPre(DEFAULT_WIDTH, DEFAULT_HEIGHT, false); + puglBackendLeave(transientParentView); + puglSetTransientFor(view, puglGetNativeWindow(transientParentView)); - puglSetTransientFor(view, puglGetNativeWindow(ppData->view)); + initPre(DEFAULT_WIDTH, DEFAULT_HEIGHT, false); } Window::PrivateData::PrivateData(Application& a, Window* const s, @@ -129,6 +132,7 @@ Window::PrivateData::PrivateData(Application& a, Window* const s, appData(a.pData), self(s), view(puglNewView(appData->world)), + transientParentView(nullptr), topLevelWidgets(), isClosed(parentWindowHandle == 0), isVisible(parentWindowHandle != 0), @@ -158,6 +162,7 @@ Window::PrivateData::PrivateData(Application& a, Window* const s, appData(a.pData), self(s), view(puglNewView(appData->world)), + transientParentView(nullptr), topLevelWidgets(), isClosed(parentWindowHandle == 0), isVisible(parentWindowHandle != 0), @@ -242,6 +247,10 @@ void Window::PrivateData::initPost() appData->oneWindowShown(); puglShow(view); } + + // give context back to transient parent window + if (transientParentView != nullptr) + puglBackendEnter(transientParentView); } // ----------------------------------------------------------------------- diff --git a/dgl/src/WindowPrivateData.hpp b/dgl/src/WindowPrivateData.hpp @@ -44,6 +44,9 @@ struct Window::PrivateData : IdleCallback { /** Pugl view instance. */ PuglView* const view; + /** Pugl view instance of the transient parent window. */ + PuglView* const transientParentView; + /** Reserved space for graphics context. */ mutable uint8_t graphicsContext[sizeof(void*)]; diff --git a/dgl/src/pugl.cpp b/dgl/src/pugl.cpp @@ -178,9 +178,17 @@ void puglClearMinSize(PuglView* const view) } // -------------------------------------------------------------------------------------------------------------------- +// missing in pugl, directly returns transient parent + +PuglNativeView puglGetTransientParent(const PuglView* const view) +{ + return view->transientParent; +} + +// -------------------------------------------------------------------------------------------------------------------- // missing in pugl, directly returns title char* pointer -const char* puglGetWindowTitle(const PuglView* view) +const char* puglGetWindowTitle(const PuglView* const view) { return view->title; } diff --git a/dgl/src/pugl.hpp b/dgl/src/pugl.hpp @@ -54,6 +54,10 @@ puglBackendLeave(PuglView* view); PUGL_API void puglClearMinSize(PuglView* view); +// missing in pugl, directly returns transient parent +PUGL_API PuglNativeView +puglGetTransientParent(const PuglView* view); + // missing in pugl, directly returns title char* pointer PUGL_API const char* puglGetWindowTitle(const PuglView* view);