]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/menu.cpp
derive wxMask from wxMaskBase
[wxWidgets.git] / src / gtk / menu.cpp
index e1be8ff88acf4626a545fbfed5f4b0d98c66a594..2e4427ac194d1148e4d9c8e3126c818eda7c7cd3 100644 (file)
@@ -63,12 +63,12 @@ void wxMenuBar::Init(size_t n, wxMenu *menus[], const wxString titles[], long st
 {
     m_invokingWindow = NULL;
 
-#if wxUSE_LIBHILDON
+#if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
     // Hildon window uses a single menu instead of a menu bar, so wxMenuBar is
     // the same as menu in this case
     m_widget =
     m_menubar = gtk_menu_new();
-#else // !wxUSE_LIBHILDON
+#else // !wxUSE_LIBHILDON && !wxUSE_LIBHILDON2
     if (!PreCreation( NULL, wxDefaultPosition, wxDefaultSize ) ||
         !CreateBase( NULL, -1, wxDefaultPosition, wxDefaultSize, style, wxDefaultValidator, wxT("menubar") ))
     {
@@ -91,8 +91,8 @@ void wxMenuBar::Init(size_t n, wxMenu *menus[], const wxString titles[], long st
 
     PostCreation();
 
-    ApplyWidgetStyle();
-#endif // wxUSE_LIBHILDON/!wxUSE_LIBHILDON
+    GTKApplyWidgetStyle();
+#endif // wxUSE_LIBHILDON || wxUSE_LIBHILDON2/!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2
 
     g_object_ref(m_widget);
 
@@ -122,7 +122,7 @@ wxMenuBar::~wxMenuBar()
 static void
 wxMenubarUnsetInvokingWindow(wxMenu* menu, wxWindow* win, GtkWindow* tlw = NULL)
 {
-    menu->SetInvokingWindow( (wxWindow*) NULL );
+    menu->SetInvokingWindow( NULL );
 
     // support for native hot keys
     if (menu->m_accel)
@@ -226,7 +226,7 @@ void wxMenuBar::Attach(wxFrame *frame)
 
 void wxMenuBar::UnsetInvokingWindow( wxWindow *win )
 {
-    m_invokingWindow = (wxWindow*) NULL;
+    m_invokingWindow = NULL;
 
     wxMenuList::compatibility_iterator node = m_menus.GetFirst();
     while (node)
@@ -249,7 +249,7 @@ bool wxMenuBar::GtkAppend(wxMenu *menu, const wxString& title, int pos)
 {
     menu->SetLayoutDirection(GetLayoutDirection());
 
-#if wxUSE_LIBHILDON
+#if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
     // if the menu has only one item, append it directly to the top level menu
     // instead of inserting a useless submenu
     if ( menu->GetMenuItemCount() == 1 )
@@ -269,7 +269,7 @@ bool wxMenuBar::GtkAppend(wxMenu *menu, const wxString& title, int pos)
         item->SetMenuItem(menu->m_owner);
     }
     else
-#endif // wxUSE_LIBHILDON/!wxUSE_LIBHILDON
+#endif // wxUSE_LIBHILDON || wxUSE_LIBHILDON2 /!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2
     {
         const wxString str(wxConvertMnemonicsToGTK(title));
 
@@ -316,7 +316,7 @@ wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
     wxMenu *menuOld = Remove(pos);
     if ( menuOld && !Insert(pos, menu, title) )
     {
-        return (wxMenu*) NULL;
+        return NULL;
     }
 
     // either Insert() succeeded or Remove() failed and menuOld is NULL
@@ -327,7 +327,7 @@ wxMenu *wxMenuBar::Remove(size_t pos)
 {
     wxMenu *menu = wxMenuBarBase::Remove(pos);
     if ( !menu )
-        return (wxMenu*) NULL;
+        return NULL;
 
     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu->m_owner), NULL);
     gtk_container_remove(GTK_CONTAINER(m_menubar), menu->m_owner);
@@ -410,7 +410,7 @@ wxMenuItem* wxMenuBar::FindItem( int id, wxMenu **menuForItem ) const
 
     if ( menuForItem )
     {
-        *menuForItem = result ? result->GetMenu() : (wxMenu *)NULL;
+        *menuForItem = result ? result->GetMenu() : NULL;
     }
 
     return result;
@@ -652,7 +652,7 @@ void wxMenuItem::Check( bool check )
             break;
 
         default:
-            wxFAIL_MSG( _T("can't check this item") );
+            wxFAIL_MSG( wxT("can't check this item") );
     }
 }
 
@@ -695,6 +695,16 @@ static void menu_hide(GtkWidget*, wxMenu* menu)
 }
 }
 
+// "can_activate_accel" from menu item
+extern "C" {
+static gboolean can_activate_accel(GtkWidget*, guint, wxMenu* menu)
+{
+    menu->UpdateUI();
+    // always allow our "activate" handler to be called
+    return true;
+}
+}
+
 IMPLEMENT_DYNAMIC_CLASS(wxMenu,wxEvtHandler)
 
 void wxMenu::Init()
@@ -706,9 +716,9 @@ void wxMenu::Init()
     // NB: keep reference to the menu so that it is not destroyed behind
     //     our back by GTK+ e.g. when it is removed from menubar:
     g_object_ref(m_menu);
-    g_object_ref_sink(m_menu);
+    gtk_object_sink(GTK_OBJECT(m_menu));
 
-    m_owner = (GtkWidget*) NULL;
+    m_owner = NULL;
 
     // Tearoffs are entries, just like separators. So if we want this
     // menu to be a tear-off one, we just append a tearoff entry
@@ -832,6 +842,8 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
         }
         else
         {
+            g_signal_connect(menuItem, "can_activate_accel",
+                G_CALLBACK(can_activate_accel), this);
             g_signal_connect (menuItem, "activate",
                               G_CALLBACK(menuitem_activate),
                               mitem);