38 lines
866 B
C++
38 lines
866 B
C++
#include "PopupWindow.hpp"
|
|
|
|
static wxWindow *GetTopParent(wxWindow *pWindow)
|
|
{
|
|
wxWindow *pWin = pWindow;
|
|
while (pWin->GetParent()) {
|
|
pWin = pWin->GetParent();
|
|
if (auto top = dynamic_cast<wxNonOwnedWindow*>(pWin))
|
|
return top;
|
|
}
|
|
return pWin;
|
|
}
|
|
|
|
bool PopupWindow::Create(wxWindow *parent, int style)
|
|
{
|
|
if (!wxPopupTransientWindow::Create(parent, style))
|
|
return false;
|
|
#ifdef __WXGTK__
|
|
GetTopParent(parent)->Bind(wxEVT_ACTIVATE, &PopupWindow::topWindowActiavate, this);
|
|
#endif
|
|
return true;
|
|
}
|
|
|
|
PopupWindow::~PopupWindow()
|
|
{
|
|
#ifdef __WXGTK__
|
|
GetTopParent(this)->Unbind(wxEVT_ACTIVATE, &PopupWindow::topWindowActiavate, this);
|
|
#endif
|
|
}
|
|
|
|
#ifdef __WXGTK__
|
|
void PopupWindow::topWindowActiavate(wxActivateEvent &event)
|
|
{
|
|
event.Skip();
|
|
if (!event.GetActive() && IsShown()) DismissAndNotify();
|
|
}
|
|
#endif
|