DPF

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

commit a054116f6769856c6d52805f6292194016b8bded
parent 9228f1763226cabf1179775d55e5e343b1ef3636
Author: falkTX <falktx@gmail.com>
Date:   Tue, 24 Dec 2013 06:39:05 +0000

Add dbg messages to Window.cpp; Fix first setVisible on Windows

Diffstat:
Mdgl/src/Window.cpp | 109++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 91 insertions(+), 18 deletions(-)

diff --git a/dgl/src/Window.cpp b/dgl/src/Window.cpp @@ -19,6 +19,7 @@ #include "../Window.hpp" #include <cassert> +#include <cstdio> #include <list> #include "pugl/pugl.h" @@ -43,6 +44,16 @@ extern "C" { #define FOR_EACH_WIDGET_INV(rit) \ for (std::list<Widget*>::reverse_iterator rit = fWidgets.rbegin(); rit != fWidgets.rend(); ++rit) +#ifdef DEBUG +# define DBG(msg) std::fprintf(stderr, "%s", msg); +# define DBGp(...) std::fprintf(stderr, __VA_ARGS__); +# define DBGF std::fflush(stderr); +#else +# define DBG(msg) +# define DBGp(...) +# define DBGF +#endif + START_NAMESPACE_DGL Window* dgl_lastUiParent = nullptr; @@ -69,6 +80,7 @@ public: _dummy('\0') #endif { + DBG("Creating simple window without parent..."); DBGF; init(); } @@ -89,12 +101,14 @@ public: _dummy('\0') #endif { + DBG("Creating window with parent..."); DBGF; init(); #if DGL_OS_LINUX PuglInternals* const parentImpl = parent.pData->fView->impl; XSetTransientForHint(xDisplay, xWindow, parentImpl->win); + XFlush(xDisplay); #endif } @@ -114,17 +128,22 @@ public: _dummy('\0') #endif { + DBG("Creating window embedded with parent Id..."); DBGF; init(); - // starts visible + DBG("Embed window always visible\n"); fApp.oneShown(); fFirstInit = false; } void init() { - if (fView == nullptr) + if (fSelf == nullptr || fView == nullptr) + { + DBG("Failed!\n"); + dgl_lastUiParent = nullptr; return; + } dgl_lastUiParent = fSelf; @@ -141,31 +160,43 @@ public: #if DGL_OS_WINDOWS PuglInternals* impl = fView->impl; hwnd = impl->hwnd; + assert(hwnd != 0); #elif DGL_OS_LINUX PuglInternals* impl = fView->impl; xDisplay = impl->display; xWindow = impl->win; + assert(xWindow != 0); #endif + DBG("Success!\n"); + + // process any initial events + puglProcessEvents(fView); + fApp.addWindow(fSelf); } ~PrivateData() { + DBG("Destroying window..."); DBGF; + //fOnModal = false; fWidgets.clear(); - if (fView != nullptr) + if (fSelf != nullptr && fView != nullptr) { fApp.removeWindow(fSelf); puglDestroy(fView); } + + DBG("Success!\n"); } // ------------------------------------------------------------------- void close() { + DBG("Window close\n"); setVisible(false); if (! fFirstInit) @@ -177,6 +208,7 @@ public: void exec(const bool lockWait) { + DBG("Window exec\n"); exec_init(); if (lockWait) @@ -204,6 +236,7 @@ public: void focus() { + DBG("Window focus\n"); #if DGL_OS_WINDOWS SetForegroundWindow(hwnd); SetActiveWindow(hwnd); @@ -213,6 +246,7 @@ public: #elif DGL_OS_LINUX XRaiseWindow(xDisplay, xWindow); XSetInputFocus(xDisplay, xWindow, RevertToPointerRoot, CurrentTime); + XFlush(xDisplay); #endif } @@ -226,19 +260,10 @@ public: void repaint() { + DBG("Window repaint\n"); puglPostRedisplay(fView); } - void flush() - { -#if DGL_OS_WINDOWS - UpdateWindow(hwnd); -#elif DGL_OS_MAC -#elif DGL_OS_LINUX - XFlush(xDisplay); -#endif - } - // ------------------------------------------------------------------- bool isVisible() const noexcept @@ -249,7 +274,12 @@ public: void setVisible(const bool yesNo) { if (fVisible == yesNo) + { + DBG("Window setVisible ignored!\n"); return; + } + + DBG("Window setVisible called\n"); fVisible = yesNo; @@ -261,15 +291,17 @@ public: #if DGL_OS_WINDOWS if (yesNo) { - ShowWindow(hwnd, WS_VISIBLE); - - if (! fFirstInit) + if (fFirstInit) + ShowWindow(hwnd, SW_SHOWNORMAL); + else ShowWindow(hwnd, SW_RESTORE); } else { ShowWindow(hwnd, SW_HIDE); } + + UpdateWindow(hwnd); #elif DGL_OS_MAC puglImplSetVisible(fView, yesNo); #elif DGL_OS_LINUX @@ -277,6 +309,8 @@ public: XMapRaised(xDisplay, xWindow); else XUnmapWindow(xDisplay, xWindow); + + XFlush(xDisplay); #endif if (yesNo) @@ -301,7 +335,12 @@ public: void setResizable(const bool yesNo) { if (fResizable == yesNo) + { + DBG("Window setResizable ignored!\n"); return; + } + + DBG("Window setResizable called\n"); fResizable = yesNo; @@ -338,12 +377,17 @@ public: #ifndef DGL_OS_MAC if (fView->width == (int)width && fView->height == (int)height && ! forced) - return; + { + DBG("Window setSize ignored!\n"); + return; + } fView->width = width; fView->height = height; #endif + DBG("Window setSize called\n"); + #if DGL_OS_WINDOWS int winFlags = WS_POPUPWINDOW | WS_CAPTION; @@ -354,6 +398,7 @@ public: AdjustWindowRectEx(&wr, winFlags, FALSE, WS_EX_TOPMOST); SetWindowPos(hwnd, 0, 0, 0, wr.right-wr.left, wr.bottom-wr.top, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOOWNERZORDER|SWP_NOZORDER); + UpdateWindow(hwnd); #elif DGL_OS_MAC puglImplSetSize(fView, width, height); #elif DGL_OS_LINUX @@ -372,6 +417,8 @@ public: XSetNormalHints(xDisplay, xWindow, &sizeHints); } + + XFlush(xDisplay); #endif repaint(); @@ -381,12 +428,14 @@ public: void setTitle(const char* const title) { + DBG("Window setTitle\n"); #if DGL_OS_WINDOWS SetWindowTextA(hwnd, title); #elif DGL_OS_MAC puglImplSetTitle(fView, title); #elif DGL_OS_LINUX XStoreName(xDisplay, xWindow, title); + XFlush(xDisplay); #endif } @@ -426,6 +475,7 @@ public: void exec_init() { + DBG("Window modal loop starting..."); DBGF; fModal.enabled = true; assert(fModal.parent != nullptr); @@ -452,14 +502,19 @@ public: fModal.parent->setVisible(true); setVisible(true); + + DBG("Ok\n"); } void exec_fini() { + DBG("Window modal loop stopping..."); DBGF; fModal.enabled = false; if (fModal.parent != nullptr) fModal.parent->fModal.childFocus = nullptr; + + DBG("Ok\n"); } // ------------------------------------------------------------------- @@ -467,6 +522,8 @@ public: protected: void onDisplay() { + DBG("PUGL: onDisplay\n"); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); FOR_EACH_WIDGET(it) @@ -480,6 +537,8 @@ protected: void onKeyboard(const bool press, const uint32_t key) { + DBGp("PUGL: onKeyboard : %i %i\n", press, key); + if (fModal.childFocus != nullptr) return fModal.childFocus->focus(); @@ -494,6 +553,8 @@ protected: void onMouse(const int button, const bool press, const int x, const int y) { + DBGp("PUGL: onMouse : %i %i %i %i\n", button, press, x, y); + if (fModal.childFocus != nullptr) return fModal.childFocus->focus(); @@ -508,6 +569,8 @@ protected: void onMotion(const int x, const int y) { + DBGp("PUGL: onMotion : %i %i\n", x, y); + if (fModal.childFocus != nullptr) return; @@ -522,6 +585,8 @@ protected: void onScroll(const float dx, const float dy) { + DBGp("PUGL: onScroll : %f %f\n", dx, dy); + if (fModal.childFocus != nullptr) return; @@ -536,6 +601,8 @@ protected: void onSpecial(const bool press, const Key key) { + DBGp("PUGL: onSpecial : %i %i\n", press, key); + if (fModal.childFocus != nullptr) return; @@ -550,7 +617,8 @@ protected: void onReshape(const int width, const int height) { - printf("resized: %i:%i\n", width, height); + DBGp("PUGL: onReshape : %i %i\n", width, height); + FOR_EACH_WIDGET(it) { Widget* const widget(*it); @@ -560,6 +628,8 @@ protected: void onClose() { + DBG("PUGL: onClose\n"); + fModal.enabled = false; if (fModal.childFocus != nullptr) @@ -803,3 +873,6 @@ void Window::removeWidget(Widget* const widget) // ----------------------------------------------------------------------- END_NAMESPACE_DGL + +#undef DBG +#undef DBGF