send wxEVT_MENU_CLOSE at least sometimes
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36554 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -101,12 +101,11 @@ static wxString wxReplaceUnderscore( const wxString& title )
|
|||||||
// activate message from GTK
|
// activate message from GTK
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
extern "C" {
|
static void DoCommonMenuCallbackCode(wxMenu *menu, wxMenuEvent& event)
|
||||||
static void gtk_menu_open_callback( GtkWidget *widget, wxMenu *menu )
|
|
||||||
{
|
{
|
||||||
if (g_isIdle) wxapp_install_idle_handler();
|
if (g_isIdle)
|
||||||
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
wxMenuEvent event( wxEVT_MENU_OPEN, -1, menu );
|
|
||||||
event.SetEventObject( menu );
|
event.SetEventObject( menu );
|
||||||
|
|
||||||
wxEvtHandler* handler = menu->GetEventHandler();
|
wxEvtHandler* handler = menu->GetEventHandler();
|
||||||
@@ -114,8 +113,26 @@ static void gtk_menu_open_callback( GtkWidget *widget, wxMenu *menu )
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
wxWindow *win = menu->GetInvokingWindow();
|
wxWindow *win = menu->GetInvokingWindow();
|
||||||
if (win) win->GetEventHandler()->ProcessEvent( event );
|
if (win)
|
||||||
|
win->GetEventHandler()->ProcessEvent( event );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
static void gtk_menu_open_callback( GtkWidget *widget, wxMenu *menu )
|
||||||
|
{
|
||||||
|
wxMenuEvent event(wxEVT_MENU_OPEN, -1, menu);
|
||||||
|
|
||||||
|
DoCommonMenuCallbackCode(menu, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gtk_menu_close_callback( GtkWidget *widget, wxMenu *menu )
|
||||||
|
{
|
||||||
|
wxMenuEvent event( wxEVT_MENU_CLOSE, -1, menu );
|
||||||
|
|
||||||
|
DoCommonMenuCallbackCode(menu, event);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -320,6 +337,15 @@ bool wxMenuBar::GtkAppend(wxMenu *menu, const wxString& title, int pos)
|
|||||||
GTK_SIGNAL_FUNC(gtk_menu_open_callback),
|
GTK_SIGNAL_FUNC(gtk_menu_open_callback),
|
||||||
(gpointer)menu );
|
(gpointer)menu );
|
||||||
|
|
||||||
|
// TODO: this is not enough as we don't get the notification if the menu is
|
||||||
|
// dismissed without any selection (e.g. by clicking outside it), but
|
||||||
|
// I couldn't find any GTK+ signal which would be triggered by this:
|
||||||
|
// neither selection-done, nor deactivate, nor cancel are
|
||||||
|
GtkMenuShell *menu_shell = &(GTK_MENU(menu->m_menu)->menu_shell);
|
||||||
|
gtk_signal_connect( GTK_OBJECT(menu_shell), "selection-done",
|
||||||
|
GTK_SIGNAL_FUNC(gtk_menu_close_callback),
|
||||||
|
(gpointer)menu );
|
||||||
|
|
||||||
// m_invokingWindow is set after wxFrame::SetMenuBar(). This call enables
|
// m_invokingWindow is set after wxFrame::SetMenuBar(). This call enables
|
||||||
// addings menu later on.
|
// addings menu later on.
|
||||||
if (m_invokingWindow)
|
if (m_invokingWindow)
|
||||||
|
@@ -101,12 +101,11 @@ static wxString wxReplaceUnderscore( const wxString& title )
|
|||||||
// activate message from GTK
|
// activate message from GTK
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
extern "C" {
|
static void DoCommonMenuCallbackCode(wxMenu *menu, wxMenuEvent& event)
|
||||||
static void gtk_menu_open_callback( GtkWidget *widget, wxMenu *menu )
|
|
||||||
{
|
{
|
||||||
if (g_isIdle) wxapp_install_idle_handler();
|
if (g_isIdle)
|
||||||
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
wxMenuEvent event( wxEVT_MENU_OPEN, -1, menu );
|
|
||||||
event.SetEventObject( menu );
|
event.SetEventObject( menu );
|
||||||
|
|
||||||
wxEvtHandler* handler = menu->GetEventHandler();
|
wxEvtHandler* handler = menu->GetEventHandler();
|
||||||
@@ -114,8 +113,26 @@ static void gtk_menu_open_callback( GtkWidget *widget, wxMenu *menu )
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
wxWindow *win = menu->GetInvokingWindow();
|
wxWindow *win = menu->GetInvokingWindow();
|
||||||
if (win) win->GetEventHandler()->ProcessEvent( event );
|
if (win)
|
||||||
|
win->GetEventHandler()->ProcessEvent( event );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
static void gtk_menu_open_callback( GtkWidget *widget, wxMenu *menu )
|
||||||
|
{
|
||||||
|
wxMenuEvent event(wxEVT_MENU_OPEN, -1, menu);
|
||||||
|
|
||||||
|
DoCommonMenuCallbackCode(menu, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gtk_menu_close_callback( GtkWidget *widget, wxMenu *menu )
|
||||||
|
{
|
||||||
|
wxMenuEvent event( wxEVT_MENU_CLOSE, -1, menu );
|
||||||
|
|
||||||
|
DoCommonMenuCallbackCode(menu, event);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -320,6 +337,15 @@ bool wxMenuBar::GtkAppend(wxMenu *menu, const wxString& title, int pos)
|
|||||||
GTK_SIGNAL_FUNC(gtk_menu_open_callback),
|
GTK_SIGNAL_FUNC(gtk_menu_open_callback),
|
||||||
(gpointer)menu );
|
(gpointer)menu );
|
||||||
|
|
||||||
|
// TODO: this is not enough as we don't get the notification if the menu is
|
||||||
|
// dismissed without any selection (e.g. by clicking outside it), but
|
||||||
|
// I couldn't find any GTK+ signal which would be triggered by this:
|
||||||
|
// neither selection-done, nor deactivate, nor cancel are
|
||||||
|
GtkMenuShell *menu_shell = &(GTK_MENU(menu->m_menu)->menu_shell);
|
||||||
|
gtk_signal_connect( GTK_OBJECT(menu_shell), "selection-done",
|
||||||
|
GTK_SIGNAL_FUNC(gtk_menu_close_callback),
|
||||||
|
(gpointer)menu );
|
||||||
|
|
||||||
// m_invokingWindow is set after wxFrame::SetMenuBar(). This call enables
|
// m_invokingWindow is set after wxFrame::SetMenuBar(). This call enables
|
||||||
// addings menu later on.
|
// addings menu later on.
|
||||||
if (m_invokingWindow)
|
if (m_invokingWindow)
|
||||||
|
Reference in New Issue
Block a user