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:
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);