//-----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(wxFrame, wxWindow)
- EVT_CLOSE(wxFrame::OnCloseWindow)
EVT_SIZE(wxFrame::OnSize)
+ EVT_CLOSE(wxFrame::OnCloseWindow)
+ EVT_IDLE(wxFrame::OnIdle)
END_EVENT_TABLE()
IMPLEMENT_DYNAMIC_CLASS(wxFrame,wxWindow)
gtk_widget_set_sensitive( m_mainWindow, enable );
};
-void wxFrame::OnCloseWindow( wxCloseEvent& WXUNUSED(event) )
+void wxFrame::OnCloseWindow( wxCloseEvent &event )
{
- this->Destroy();
+ if ( GetEventHandler()->OnClose() || event.GetForce())
+ {
+ this->Destroy();
+ }
};
bool wxFrame::Destroy(void)
}
};
-void SetInvokingWindow( wxMenu *menu, wxWindow *win )
+static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
{
menu->SetInvokingWindow( win );
wxNode *node = menu->m_items.First();
void wxFrame::SetMenuBar( wxMenuBar *menuBar )
{
m_frameMenuBar = menuBar;
-
- wxNode *node = m_frameMenuBar->m_menus.First();
- while (node)
+
+ if (m_frameMenuBar)
{
- wxMenu *menu = (wxMenu*)node->Data();
- SetInvokingWindow( menu, this );
- node = node->Next();
- };
-
- m_frameMenuBar->m_parent = this;
- gtk_myfixed_put( GTK_MYFIXED(m_mainWindow),
- m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y );
+ if (m_frameMenuBar->m_parent != this)
+ {
+ wxNode *node = m_frameMenuBar->m_menus.First();
+ while (node)
+ {
+ wxMenu *menu = (wxMenu*)node->Data();
+ SetInvokingWindow( menu, this );
+ node = node->Next();
+ };
+
+ m_frameMenuBar->m_parent = this;
+ gtk_myfixed_put( GTK_MYFIXED(m_mainWindow),
+ m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y );
+ }
+ }
};
bool wxFrame::CreateStatusBar( int number )
return (wxString&)m_title;
};
+void wxFrame::OnIdle(wxIdleEvent& WXUNUSED(event))
+{
+ DoMenuUpdates();
+}
+
+// Query app for menu item updates (called from OnIdle)
+void wxFrame::DoMenuUpdates(void)
+{
+ wxMenuBar* bar = GetMenuBar();
+ if (!bar) return;
+
+ wxNode *node = bar->m_menus.First();
+ while (node)
+ {
+ wxMenu* menu = (wxMenu*)node->Data();
+ DoMenuUpdates(menu);
+
+ node = node->Next();
+ };
+}
+
+void wxFrame::DoMenuUpdates(wxMenu* menu)
+{
+ wxNode* node = menu->m_items.First();
+ while (node)
+ {
+ wxMenuItem* item = (wxMenuItem*) node->Data();
+ if ( !item->IsSeparator() )
+ {
+ wxWindowID id = item->GetId();
+ wxUpdateUIEvent event(id);
+ event.SetEventObject( this );
+
+ if (GetEventHandler()->ProcessEvent(event))
+ {
+ if (event.GetSetText())
+ menu->SetLabel(id, event.GetText());
+ if (event.GetSetChecked())
+ menu->Check(id, event.GetChecked());
+ if (event.GetSetEnabled())
+ menu->Enable(id, event.GetEnabled());
+ }
+
+ if (item->GetSubMenu())
+ DoMenuUpdates(item->GetSubMenu());
+ }
+ node = node->Next();
+ }
+}
+
+