]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/menu.cpp
use IMPLEMENT_APP_CONSOLE and not IMPLEMENT_APP for console apps
[wxWidgets.git] / src / gtk / menu.cpp
index f143e35c50b8746a6dd0d41f8f38e953238f4c31..679ca8785970d698f323c0a6352afc7ddfaee668 100644 (file)
@@ -607,6 +607,7 @@ wxMenuItem::wxMenuItem(wxMenu *parentMenu,
     Init(text);
 }
 
     Init(text);
 }
 
+#if WXWIN_COMPATIBILITY_2_8
 wxMenuItem::wxMenuItem(wxMenu *parentMenu,
                        int id,
                        const wxString& text,
 wxMenuItem::wxMenuItem(wxMenu *parentMenu,
                        int id,
                        const wxString& text,
@@ -618,10 +619,10 @@ wxMenuItem::wxMenuItem(wxMenu *parentMenu,
 {
     Init(text);
 }
 {
     Init(text);
 }
+#endif
 
 void wxMenuItem::Init(const wxString& text)
 {
 
 void wxMenuItem::Init(const wxString& text)
 {
-    m_labelWidget = (GtkWidget *) NULL;
     m_menuItem = (GtkWidget *) NULL;
 
     DoSetText(text);
     m_menuItem = (GtkWidget *) NULL;
 
     DoSetText(text);
@@ -704,7 +705,7 @@ void wxMenuItem::SetItemLabel( const wxString& str )
     oldLabel.Replace(wxT("_"), wxT(""));
     wxString label1 = wxStripMenuCodes(str);
 #if wxUSE_ACCEL
     oldLabel.Replace(wxT("_"), wxT(""));
     wxString label1 = wxStripMenuCodes(str);
 #if wxUSE_ACCEL
-    wxString oldhotkey = GetHotKey();    // Store the old hotkey in Ctrl-foo format
+    wxString oldhotkey = m_hotKey;    // Store the old hotkey in Ctrl-foo format
     wxCharBuffer oldbuf = wxGTK_CONV_SYS( GetGtkHotKey(*this) );  // and as <control>foo
 #endif // wxUSE_ACCEL
 
     wxCharBuffer oldbuf = wxGTK_CONV_SYS( GetGtkHotKey(*this) );  // and as <control>foo
 #endif // wxUSE_ACCEL
 
@@ -712,17 +713,11 @@ void wxMenuItem::SetItemLabel( const wxString& str )
 
 #if wxUSE_ACCEL
     if (oldLabel == label1 &&
 
 #if wxUSE_ACCEL
     if (oldLabel == label1 &&
-        oldhotkey == GetHotKey())    // Make sure we can change a hotkey even if the label is unaltered
+        oldhotkey == m_hotKey)    // Make sure we can change a hotkey even if the label is unaltered
         return;
 
     if (m_menuItem)
     {
         return;
 
     if (m_menuItem)
     {
-        GtkLabel *label;
-        if (m_labelWidget)
-            label = (GtkLabel*) m_labelWidget;
-        else
-            label = GTK_LABEL( GTK_BIN(m_menuItem)->child );
-
         // stock menu items can have empty labels:
         wxString text = m_text;
         if (text.IsEmpty() && !IsSeparator())
         // stock menu items can have empty labels:
         wxString text = m_text;
         if (text.IsEmpty() && !IsSeparator())
@@ -734,7 +729,8 @@ void wxMenuItem::SetItemLabel( const wxString& str )
             text = GTKProcessMenuItemLabel(text, NULL);
         }
 
             text = GTKProcessMenuItemLabel(text, NULL);
         }
 
-        gtk_label_set_text_with_mnemonic( GTK_LABEL(label), wxGTK_CONV_SYS(text) );
+        GtkLabel* label = GTK_LABEL(GTK_BIN(m_menuItem)->child);
+        gtk_label_set_text_with_mnemonic(label, wxGTK_CONV_SYS(text));
     }
 
     // remove old accelerator from our parent's accelerator group, if present
     }
 
     // remove old accelerator from our parent's accelerator group, if present
@@ -829,7 +825,7 @@ wxString wxMenuItem::GTKProcessMenuItemLabel(const wxString& str, wxString *hotK
         hotKey->Empty();
         if(*pc == wxT('\t'))
         {
         hotKey->Empty();
         if(*pc == wxT('\t'))
         {
-            pc++;
+            ++pc;
             hotKey->assign(pc, str.end());
         }
     }
             hotKey->assign(pc, str.end());
         }
     }
@@ -848,7 +844,7 @@ void wxMenuItem::DoSetText( const wxString& str )
 
 wxAcceleratorEntry *wxMenuItem::GetAccel() const
 {
 
 wxAcceleratorEntry *wxMenuItem::GetAccel() const
 {
-    if ( !GetHotKey() )
+    if (m_hotKey.empty())
     {
         // nothing
         return NULL;
     {
         // nothing
         return NULL;
@@ -857,7 +853,7 @@ wxAcceleratorEntry *wxMenuItem::GetAccel() const
     // accelerator parsing code looks for them after a TAB, so insert a dummy
     // one here
     wxString label;
     // accelerator parsing code looks for them after a TAB, so insert a dummy
     // one here
     wxString label;
-    label << wxT('\t') << GetHotKey();
+    label << wxT('\t') << m_hotKey;
 
     return wxAcceleratorEntry::Create(label);
 }
 
     return wxAcceleratorEntry::Create(label);
 }
@@ -1215,9 +1211,9 @@ wxMenuItem *wxMenu::DoRemove(wxMenuItem *item)
         m_prevRadio = NULL;
     }
 
         m_prevRadio = NULL;
     }
 
-    // TODO: this code doesn't delete the item factory item and this seems
-    //       impossible as of GTK 1.2.6.
-    gtk_widget_destroy( mitem );
+    gtk_menu_item_set_submenu(GTK_MENU_ITEM(mitem), NULL);
+    gtk_widget_destroy(mitem);
+    item->SetMenuItem(NULL);
 
     return item;
 }
 
     return item;
 }
@@ -1516,108 +1512,6 @@ static wxString GetGtkHotKey( const wxMenuItem& item )
 
 #endif // wxUSE_ACCEL
 
 
 #endif // wxUSE_ACCEL
 
-// ----------------------------------------------------------------------------
-// Pop-up menu stuff
-// ----------------------------------------------------------------------------
-
-#if wxUSE_MENUS_NATIVE
-
-extern "C" WXDLLIMPEXP_CORE
-void gtk_pop_hide_callback( GtkWidget *WXUNUSED(widget), bool* is_waiting  )
-{
-    *is_waiting = false;
-}
-
-WXDLLIMPEXP_CORE void SetInvokingWindow( wxMenu *menu, wxWindow* win )
-{
-    menu->SetInvokingWindow( win );
-
-    wxMenuItemList::compatibility_iterator node = menu->GetMenuItems().GetFirst();
-    while (node)
-    {
-        wxMenuItem *menuitem = node->GetData();
-        if (menuitem->IsSubMenu())
-        {
-            SetInvokingWindow( menuitem->GetSubMenu(), win );
-        }
-
-        node = node->GetNext();
-    }
-}
-
-extern "C" WXDLLIMPEXP_CORE
-void wxPopupMenuPositionCallback( GtkMenu *menu,
-                                  gint *x, gint *y,
-                                  gboolean * WXUNUSED(whatever),
-                                  gpointer user_data )
-{
-    // ensure that the menu appears entirely on screen
-    GtkRequisition req;
-    gtk_widget_get_child_requisition(GTK_WIDGET(menu), &req);
-
-    wxSize sizeScreen = wxGetDisplaySize();
-    wxPoint *pos = (wxPoint*)user_data;
-
-    gint xmax = sizeScreen.x - req.width,
-         ymax = sizeScreen.y - req.height;
-
-    *x = pos->x < xmax ? pos->x : xmax;
-    *y = pos->y < ymax ? pos->y : ymax;
-}
-
-bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y )
-{
-    wxCHECK_MSG( m_widget != NULL, false, wxT("invalid window") );
-
-    wxCHECK_MSG( menu != NULL, false, wxT("invalid popup-menu") );
-
-    // NOTE: if you change this code, you need to update
-    //       the same code in taskbar.cpp as well. This
-    //       is ugly code duplication, I know.
-
-    SetInvokingWindow( menu, this );
-
-    menu->UpdateUI();
-
-    wxPoint pos;
-    gpointer userdata;
-    GtkMenuPositionFunc posfunc;
-    if ( x == -1 && y == -1 )
-    {
-        // use GTK's default positioning algorithm
-        userdata = NULL;
-        posfunc = NULL;
-    }
-    else
-    {
-        pos = ClientToScreen(wxPoint(x, y));
-        userdata = &pos;
-        posfunc = wxPopupMenuPositionCallback;
-    }
-
-    menu->m_popupShown = true;
-    gtk_menu_popup(
-                  GTK_MENU(menu->m_menu),
-                  (GtkWidget *) NULL,           // parent menu shell
-                  (GtkWidget *) NULL,           // parent menu item
-                  posfunc,                      // function to position it
-                  userdata,                     // client data
-                  0,                            // button used to activate it
-                  gtk_get_current_event_time()
-                );
-
-    while (menu->m_popupShown)
-    {
-        gtk_main_iteration();
-    }
-
-    return true;
-}
-
-#endif // wxUSE_MENUS_NATIVE
-
-#include <gtk/gtk.h>
-
 const char *wxGetStockGtkID(wxWindowID id)
 {
     #define STOCKITEM(wx,gtk)      \
 const char *wxGetStockGtkID(wxWindowID id)
 {
     #define STOCKITEM(wx,gtk)      \