]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/menu.cpp
moved IMPLEMENT_DYNAMIC_CLASS(wxGDIObject,wxObject) line to gdicmn.cpp so that we...
[wxWidgets.git] / src / gtk / menu.cpp
index 10dfc43511e1f33ab1ca2d4aec362b1f699d7915..f27623a98089824be06b8ac7edaeeec5fffab133 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        menu.cpp
+// Name:        src/gtk/menu.cpp
 // Purpose:
 // Author:      Robert Roebling
 // Id:          $Id$
 #include "wx/wxprec.h"
 
 #include "wx/menu.h"
-#include "wx/log.h"
-#include "wx/intl.h"
-#include "wx/app.h"
-#include "wx/bitmap.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/intl.h"
+    #include "wx/log.h"
+    #include "wx/app.h"
+    #include "wx/bitmap.h"
+#endif
 
 #if wxUSE_ACCEL
     #include "wx/accel.h"
 #include <gdk/gdkkeysyms.h>
 
 // FIXME: is this right? somehow I don't think so (VZ)
-#ifdef __WXGTK20__
-    #include <glib-object.h>
-
-    #define gtk_accel_group_attach(g, o) gtk_window_add_accel_group((o), (g))
-    #define gtk_accel_group_detach(g, o) gtk_window_remove_accel_group((o), (g))
-    #define gtk_menu_ensure_uline_accel_group(m) gtk_menu_get_accel_group(m)
-
-    #define ACCEL_OBJECT        GtkWindow
-    #define ACCEL_OBJECTS(a)    (a)->acceleratables
-    #define ACCEL_OBJ_CAST(obj) ((GtkWindow*) obj)
-#else // GTK+ 1.x
-    #define ACCEL_OBJECT        GtkObject
-    #define ACCEL_OBJECTS(a)    (a)->attach_objects
-    #define ACCEL_OBJ_CAST(obj) GTK_OBJECT(obj)
-#endif
+
+#define gtk_accel_group_attach(g, o) gtk_window_add_accel_group((o), (g))
+//#define gtk_accel_group_detach(g, o) gtk_window_remove_accel_group((o), (g))
+//#define gtk_menu_ensure_uline_accel_group(m) gtk_menu_get_accel_group(m)
+
+#define ACCEL_OBJECT        GtkWindow
+#define ACCEL_OBJECTS(a)    (a)->acceleratables
+#define ACCEL_OBJ_CAST(obj) ((GtkWindow*) obj)
 
 // we use normal item but with a special id for the menu title
 static const int wxGTK_TITLE_ID = -3;
@@ -48,9 +44,6 @@ static const int wxGTK_TITLE_ID = -3;
 // idle system
 //-----------------------------------------------------------------------------
 
-extern void wxapp_install_idle_handler();
-extern bool g_isIdle;
-
 #if wxUSE_ACCEL
 static wxString GetGtkHotKey( const wxMenuItem& item );
 #endif
@@ -150,7 +143,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxMenuBar,wxWindow)
 void wxMenuBar::Init(size_t n, wxMenu *menus[], const wxString titles[], long style)
 {
     // the parent window is known after wxFrame::SetMenu()
-    m_needParent = FALSE;
+    m_needParent = false;
     m_style = style;
     m_invokingWindow = (wxWindow*) NULL;
 
@@ -285,7 +278,7 @@ void wxMenuBar::UnsetInvokingWindow( wxWindow *win )
 bool wxMenuBar::Append( wxMenu *menu, const wxString &title )
 {
     if ( !wxMenuBarBase::Append( menu, title ) )
-        return FALSE;
+        return false;
 
     return GtkAppend(menu, title);
 }
@@ -331,20 +324,20 @@ bool wxMenuBar::GtkAppend(wxMenu *menu, const wxString& title, int pos)
             frame->UpdateMenuBarSize();
     }
 
-    return TRUE;
+    return true;
 }
 
 bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
 {
     if ( !wxMenuBarBase::Insert(pos, menu, title) )
-        return FALSE;
+        return false;
 
     // TODO
 
     if ( !GtkAppend(menu, title, (int)pos) )
-        return FALSE;
+        return false;
 
-    return TRUE;
+    return true;
 }
 
 wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
@@ -511,17 +504,7 @@ void wxMenuBar::SetLabelTop( size_t pos, const wxString& label )
     menu->SetTitle( str );
 
     if (menu->m_owner)
-    {
-        GtkLabel *glabel = GTK_LABEL( GTK_BIN(menu->m_owner)->child );
-
-        /* set new text */
-        gtk_label_set_text( glabel, wxGTK_CONV( str ) );
-
-        /* reparse key accel */
-        (void)gtk_label_parse_uline (GTK_LABEL(glabel), wxGTK_CONV( str ) );
-        gtk_accel_label_refetch( GTK_ACCEL_LABEL(glabel) );
-    }
-
+        gtk_label_set_text_with_mnemonic( GTK_LABEL( GTK_BIN(menu->m_owner)->child), wxGTK_CONV(str) );
 }
 
 //-----------------------------------------------------------------------------
@@ -760,7 +743,7 @@ void wxMenuItem::SetText( const wxString& str )
     oldLabel.Replace(wxT("_"), wxT(""));
     wxString label1 = wxStripMenuCodes(str);
     wxString oldhotkey = GetHotKey();    // Store the old hotkey in Ctrl-foo format
-    wxCharBuffer oldbuf = wxGTK_CONV( GetGtkHotKey(*this) );  // and as <control>foo
+    wxCharBuffer oldbuf = wxGTK_CONV_SYS( GetGtkHotKey(*this) );  // and as <control>foo
 
     DoSetText(str);
 
@@ -776,7 +759,7 @@ void wxMenuItem::SetText( const wxString& str )
         else
             label = GTK_LABEL( GTK_BIN(m_menuItem)->child );
 
-        gtk_label_set_text_with_mnemonic( GTK_LABEL(label), wxGTK_CONV(m_text) );
+        gtk_label_set_text_with_mnemonic( GTK_LABEL(label), wxGTK_CONV_SYS(m_text) );
     }
 
     guint accel_key;
@@ -790,7 +773,7 @@ void wxMenuItem::SetText( const wxString& str )
                                        accel_mods );
     }
 
-    wxCharBuffer buf = wxGTK_CONV( GetGtkHotKey(*this) );
+    wxCharBuffer buf = wxGTK_CONV_SYS( GetGtkHotKey(*this) );
     gtk_accelerator_parse( (const char*) buf, &accel_key, &accel_mods);
     if (accel_key != 0)
     {
@@ -875,7 +858,7 @@ void wxMenuItem::Check( bool check )
     {
         case wxITEM_CHECK:
         case wxITEM_RADIO:
-            gtk_check_menu_item_set_state( (GtkCheckMenuItem*)m_menuItem, (gint)check );
+            gtk_check_menu_item_set_active( (GtkCheckMenuItem*)m_menuItem, (gint)check );
             break;
 
         default:
@@ -893,9 +876,9 @@ void wxMenuItem::Enable( bool enable )
 
 bool wxMenuItem::IsChecked() const
 {
-    wxCHECK_MSG( m_menuItem, FALSE, wxT("invalid menu item") );
+    wxCHECK_MSG( m_menuItem, false, wxT("invalid menu item") );
 
-    wxCHECK_MSG( IsCheckable(), FALSE,
+    wxCHECK_MSG( IsCheckable(), false,
                  wxT("can't get state of uncheckable item!") );
 
     return ((GtkCheckMenuItem*)m_menuItem)->active != 0;
@@ -924,7 +907,7 @@ void wxMenu::Init()
     {
         GtkWidget *tearoff = gtk_tearoff_menu_item_new();
 
-        gtk_menu_append(GTK_MENU(m_menu), tearoff);
+        gtk_menu_shell_append(GTK_MENU_SHELL(m_menu), tearoff);
     }
 
     m_prevRadio = NULL;
@@ -967,7 +950,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
         text = mitem->GetText();
         const wxBitmap *bitmap = &mitem->GetBitmap();
 
-        menuItem = gtk_image_menu_item_new_with_mnemonic( wxGTK_CONV( text ) );
+        menuItem = gtk_image_menu_item_new_with_mnemonic( wxGTK_CONV_SYS( text ) );
 
         GtkWidget *image;
         if (bitmap->HasPixbuf())
@@ -998,7 +981,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
         {
             case wxITEM_CHECK:
             {
-                menuItem = gtk_check_menu_item_new_with_mnemonic( wxGTK_CONV( text ) );
+                menuItem = gtk_check_menu_item_new_with_mnemonic( wxGTK_CONV_SYS( text ) );
                 m_prevRadio = NULL;
                 break;
             }
@@ -1009,12 +992,14 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
                 if ( m_prevRadio == NULL )
                 {
                     // start of a new radio group
-                    m_prevRadio = menuItem = gtk_radio_menu_item_new_with_mnemonic( group, wxGTK_CONV( text ) );
+                    m_prevRadio = menuItem =
+                        gtk_radio_menu_item_new_with_mnemonic( group, wxGTK_CONV_SYS( text ) );
                 }
                 else // continue the radio group
                 {
                     group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (m_prevRadio));
-                    m_prevRadio = menuItem = gtk_radio_menu_item_new_with_mnemonic( group, wxGTK_CONV( text ) );
+                    m_prevRadio = menuItem =
+                        gtk_radio_menu_item_new_with_mnemonic( group, wxGTK_CONV_SYS( text ) );
                 }
                 break;
             }
@@ -1025,7 +1010,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
 
             case wxITEM_NORMAL:
             {
-                menuItem = gtk_menu_item_new_with_mnemonic( wxGTK_CONV( text ) );
+                menuItem = gtk_menu_item_new_with_mnemonic( wxGTK_CONV_SYS( text ) );
                 m_prevRadio = NULL;
                 break;
             }
@@ -1035,7 +1020,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
 
     guint accel_key;
     GdkModifierType accel_mods;
-    wxCharBuffer buf = wxGTK_CONV( GetGtkHotKey(*mitem) );
+    wxCharBuffer buf = wxGTK_CONV_SYS( GetGtkHotKey(*mitem) );
 
     // wxPrintf( wxT("item: %s hotkey %s\n"), mitem->GetText().c_str(), GetGtkHotKey(*mitem).c_str() );
     gtk_accelerator_parse( (const char*) buf, &accel_key, &accel_mods);
@@ -1093,7 +1078,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
         // gtk_widget_lock_accelerators(mitem->GetMenuItem());
     }
 
-    return TRUE;
+    return true;
 }
 
 wxMenuItem* wxMenu::DoAppend(wxMenuItem *mitem)
@@ -1209,12 +1194,10 @@ static wxString GetGtkHotKey( const wxMenuItem& item )
                 hotkey << wxT("Down" );
                 break;
             case WXK_PAGEUP:
-            case WXK_PRIOR:
-                hotkey << wxT("Prior" );
+                hotkey << wxT("PgUp" );
                 break;
             case WXK_PAGEDOWN:
-            case WXK_NEXT:
-                hotkey << wxT("Next" );
+                hotkey << wxT("PgDn" );
                 break;
             case WXK_LEFT:
                 hotkey << wxT("Left" );
@@ -1331,11 +1314,11 @@ static wxString GetGtkHotKey( const wxMenuItem& item )
             case WXK_NUMPAD_DOWN:
                 hotkey << wxT("KP_Down" );
                 break;
-            case WXK_NUMPAD_PRIOR: case WXK_NUMPAD_PAGEUP:
-                hotkey << wxT("KP_Prior" );
+            case WXK_NUMPAD_PAGEUP:
+                hotkey << wxT("KP_PgUp" );
                 break;
-            case WXK_NUMPAD_NEXT:  case WXK_NUMPAD_PAGEDOWN:
-                hotkey << wxT("KP_Next" );
+            case WXK_NUMPAD_PAGEDOWN:
+                hotkey << wxT("KP_PgDn" );
                 break;
             case WXK_NUMPAD_END:
                 hotkey << wxT("KP_End" );
@@ -1421,13 +1404,13 @@ static wxString GetGtkHotKey( const wxMenuItem& item )
 
 #if wxUSE_MENUS_NATIVE
 
-extern "C"
+extern "C" WXDLLIMPEXP_CORE
 void gtk_pop_hide_callback( GtkWidget *WXUNUSED(widget), bool* is_waiting  )
 {
-    *is_waiting = FALSE;
+    *is_waiting = false;
 }
 
-void SetInvokingWindow( wxMenu *menu, wxWindow* win )
+WXDLLIMPEXP_CORE void SetInvokingWindow( wxMenu *menu, wxWindow* win )
 {
     menu->SetInvokingWindow( win );
 
@@ -1444,7 +1427,7 @@ void SetInvokingWindow( wxMenu *menu, wxWindow* win )
     }
 }
 
-extern "C"
+extern "C" WXDLLIMPEXP_CORE
 void wxPopupMenuPositionCallback( GtkMenu *menu,
                                   gint *x, gint *y,
                                   gboolean * WXUNUSED(whatever),
@@ -1527,4 +1510,3 @@ bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y )
 }
 
 #endif // wxUSE_MENUS_NATIVE
-