Init(text);
}
+#if WXWIN_COMPATIBILITY_2_8
wxMenuItem::wxMenuItem(wxMenu *parentMenu,
int id,
const wxString& text,
{
Init(text);
}
+#endif
void wxMenuItem::Init(const wxString& text)
{
- m_labelWidget = (GtkWidget *) NULL;
m_menuItem = (GtkWidget *) NULL;
DoSetText(text);
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
#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)
{
- 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())
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
hotKey->Empty();
if(*pc == wxT('\t'))
{
- pc++;
+ ++pc;
hotKey->assign(pc, str.end());
}
}
wxAcceleratorEntry *wxMenuItem::GetAccel() const
{
- if ( !GetHotKey() )
+ if (m_hotKey.empty())
{
// nothing
return NULL;
// 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);
}
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;
}
#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) \