#include <gtk/gtk.h>
+#if wxUSE_LIBHILDON
+ #include <hildon-widgets/hildon-window.h>
+#endif // wxUSE_LIBHILDON
+
+#if wxUSE_LIBHILDON2
+ #include <hildon/hildon.h>
+#endif // wxUSE_LIBHILDON2
+
// ----------------------------------------------------------------------------
// event tables
// ----------------------------------------------------------------------------
wxFrame::~wxFrame()
{
- m_isBeingDeleted = true;
+ SendDestroyEvent();
+
DeleteAllBars();
}
{
GtkRequisition req;
gtk_widget_size_request(m_frameMenuBar->m_widget, &req);
+#if !wxUSE_LIBHILDON && !wxUSE_LIBHILDON2
*height -= req.height;
+#endif
}
#endif // wxUSE_MENUS_NATIVE
*height = 0;
}
+#if wxUSE_MENUS && wxUSE_ACCEL
+// Helper for wxCreateAcceleratorTableForMenuBar
+static void wxAddAccelerators(wxList& accelEntries, wxMenu* menu)
+{
+ size_t i;
+ for (i = 0; i < menu->GetMenuItems().GetCount(); i++)
+ {
+ wxMenuItem* item = (wxMenuItem*) menu->GetMenuItems().Item(i)->GetData();
+ if (item->GetSubMenu())
+ {
+ wxAddAccelerators(accelEntries, item->GetSubMenu());
+ }
+ else if (!item->GetItemLabel().IsEmpty())
+ {
+ wxAcceleratorEntry* entry = wxAcceleratorEntry::Create(item->GetItemLabel());
+ if (entry)
+ {
+ entry->Set(entry->GetFlags(), entry->GetKeyCode(), item->GetId());
+ accelEntries.Append((wxObject*) entry);
+ }
+ }
+ }
+}
+
+// Create an accelerator table consisting of all the accelerators
+// from the menubar in the given menus
+static wxAcceleratorTable wxCreateAcceleratorTableForMenuBar(wxMenuBar* menuBar)
+{
+ wxList accelEntries;
+
+ size_t i;
+ for (i = 0; i < menuBar->GetMenuCount(); i++)
+ {
+ wxAddAccelerators(accelEntries, menuBar->GetMenu(i));
+ }
+
+ size_t n = accelEntries.GetCount();
+
+ if (n == 0)
+ return wxAcceleratorTable();
+
+ wxAcceleratorEntry* entries = new wxAcceleratorEntry[n];
+
+ for (i = 0; i < accelEntries.GetCount(); i++)
+ {
+ wxAcceleratorEntry* entry = (wxAcceleratorEntry*) accelEntries.Item(i)->GetData();
+ entries[i] = (*entry);
+ delete entry;
+
+ }
+
+ wxAcceleratorTable table(n, entries);
+ delete[] entries;
+
+ return table;
+}
+#endif // wxUSE_MENUS && wxUSE_ACCEL
+
bool wxFrame::ShowFullScreen(bool show, long style)
{
if (!wxFrameBase::ShowFullScreen(show, style))
return false;
+#if wxUSE_MENUS && wxUSE_ACCEL
+ if (show && GetMenuBar())
+ {
+ wxAcceleratorTable table(wxCreateAcceleratorTableForMenuBar(GetMenuBar()));
+ if (table.IsOk())
+ SetAcceleratorTable(table);
+ }
+#endif // wxUSE_MENUS && wxUSE_ACCEL
+
wxWindow* const bar[] = {
#if wxUSE_MENUS
m_frameMenuBar,
if ( m_frameMenuBar )
{
+#if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
+ hildon_window_set_menu(HILDON_WINDOW(m_widget), NULL);
+#else // !wxUSE_LIBHILDON && !wxUSE_LIBHILDON2
m_frameMenuBar->UnsetInvokingWindow( this );
gtk_widget_ref( m_frameMenuBar->m_widget );
gtk_container_remove( GTK_CONTAINER(m_mainWidget), m_frameMenuBar->m_widget );
+#endif // wxUSE_LIBHILDON || wxUSE_LIBHILDON2 /!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2
}
wxFrameBase::DetachMenuBar();
if (m_frameMenuBar)
{
+#if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
+ hildon_window_set_menu(HILDON_WINDOW(m_widget),
+ GTK_MENU(m_frameMenuBar->m_menubar));
+#else // !wxUSE_LIBHILDON && !wxUSE_LIBHILDON2
m_frameMenuBar->SetInvokingWindow( this );
m_frameMenuBar->SetParent(this);
gtk_widget_set_size_request(menuBar->m_widget, -1, -1);
gtk_widget_show( m_frameMenuBar->m_widget );
+#endif // wxUSE_LIBHILDON || wxUSE_LIBHILDON2/!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2
}
// make sure next size_allocate causes a wxSizeEvent
m_oldClientWidth = 0;