Also added wxPopTransientWindow::CanDismiss() which will
be needed for pop-up menus, although that actually
still has to be done...
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14436
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// hide the window
virtual void Dismiss();
// hide the window
virtual void Dismiss();
+
+
+ virtual bool CanDismiss()
+ { return TRUE; }
// called when a mouse is pressed while the popup is shown: return TRUE
// from here to prevent its normal processing by the popup (which consists
// called when a mouse is pressed while the popup is shown: return TRUE
// from here to prevent its normal processing by the popup (which consists
win = win->GetParent();
}
win = win->GetParent();
}
- printf( "Dismiss now.\n" );
-
m_popup->DismissAndNotify();
}
m_popup->DismissAndNotify();
}
// ----------------------------------------------------------------------------
// default margins around the image
// ----------------------------------------------------------------------------
// default margins around the image
-static const wxCoord DEFAULT_BTN_MARGIN_X = 0;
+static const wxCoord DEFAULT_BTN_MARGIN_X = 0; // We should give space for the border, at least.
static const wxCoord DEFAULT_BTN_MARGIN_Y = 0;
// ============================================================================
static const wxCoord DEFAULT_BTN_MARGIN_Y = 0;
// ============================================================================
{
public:
wxPopupMenuWindow(wxWindow *parent, wxMenu *menu);
{
public:
wxPopupMenuWindow(wxWindow *parent, wxMenu *menu);
+
+ ~wxPopupMenuWindow();
// override the base class version to select the first item initially
virtual void Popup(wxWindow *focus = NULL);
// override the base class version to select the first item initially
virtual void Popup(wxWindow *focus = NULL);
SetCursor(wxCURSOR_ARROW);
}
SetCursor(wxCURSOR_ARROW);
}
+wxPopupMenuWindow::~wxPopupMenuWindow()
+{
+}
+
// ----------------------------------------------------------------------------
// wxPopupMenuWindow current item/node handling
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// wxPopupMenuWindow current item/node handling
// ----------------------------------------------------------------------------
wxMenu *menu = GetParent();
while ( menu )
{
wxMenu *menu = GetParent();
while ( menu )
{
+ // We are a submenu of a menu of a menubar
+ if (menu->GetMenuBar())
+ return menu->GetMenuBar();
+
win = menu->GetInvokingWindow();
if ( win )
break;
win = menu->GetInvokingWindow();
if ( win )
break;
// we're probably going to crash in the caller anyhow, but try to detect
// this error as soon as possible
wxASSERT_MSG( win, _T("menu without any associated window?") );
// we're probably going to crash in the caller anyhow, but try to detect
// this error as soon as possible
wxASSERT_MSG( win, _T("menu without any associated window?") );
// also remember it in this menu so that we don't have to search for it the
// next time
wxConstCast(this, wxMenu)->m_invokingWindow = win;
// also remember it in this menu so that we don't have to search for it the
// next time
wxConstCast(this, wxMenu)->m_invokingWindow = win;
void wxWindow::DismissPopupMenu()
{
wxCHECK_RET( ms_evtLoopPopup, _T("no popup menu shown") );
void wxWindow::DismissPopupMenu()
{
wxCHECK_RET( ms_evtLoopPopup, _T("no popup menu shown") );
+
+ char *crash = NULL;
+ (*crash) = 0;
ms_evtLoopPopup->Exit();
}
ms_evtLoopPopup->Exit();
}
tlw = tlw->GetParent();
if (tlw && !tlw->IsEnabled())
return;
tlw = tlw->GetParent();
if (tlw && !tlw->IsEnabled())
return;
if (event->type == ButtonPress)
{
if ((win != wxWindow::FindFocus()) && win->AcceptsFocus())
{
// This might actually be done in wxWindow::SetFocus()
if (event->type == ButtonPress)
{
if ((win != wxWindow::FindFocus()) && win->AcceptsFocus())
{
// This might actually be done in wxWindow::SetFocus()
g_prevFocus = wxWindow::FindFocus();
g_nextFocus = win;
win->SetFocus();
}
}
g_prevFocus = wxWindow::FindFocus();
g_nextFocus = win;
win->SetFocus();
}
}
+
+#if !wxUSE_NANOX
+ if (event->type == LeaveNotify || event->type == EnterNotify)
+ {
+ // Throw out NotifyGrab and NotifyUngrab
+ if (event->xcrossing.mode != NotifyNormal)
+ return;
+ }
+#endif
wxMouseEvent wxevent;
wxTranslateMouseEvent(wxevent, win, window, event);
win->GetEventHandler()->ProcessEvent( wxevent );
wxMouseEvent wxevent;
wxTranslateMouseEvent(wxevent, win, window, event);
win->GetEventHandler()->ProcessEvent( wxevent );