diff --git a/mozilla/widget/src/gtk/nsMenu.cpp b/mozilla/widget/src/gtk/nsMenu.cpp index b07abea10e6..03ab54280c4 100644 --- a/mozilla/widget/src/gtk/nsMenu.cpp +++ b/mozilla/widget/src/gtk/nsMenu.cpp @@ -82,6 +82,7 @@ nsMenu::nsMenu() : nsIMenu() mDOMNode = nsnull; mWebShell = nsnull; mDOMElement = nsnull; + mAccessKey = "_"; } //------------------------------------------------------------------------- @@ -173,12 +174,20 @@ NS_METHOD nsMenu::SetLabel(const nsString &aText) //------------------------------------------------------------------------- NS_METHOD nsMenu::GetAccessKey(nsString &aText) { + aText = mAccessKey; + char *foo = mAccessKey.ToNewCString(); + g_print("GetAccessKey returns \"%s\"\n", foo); + delete [] foo; return NS_OK; } //------------------------------------------------------------------------- NS_METHOD nsMenu::SetAccessKey(const nsString &aText) { + mAccessKey = aText; + char *foo = mAccessKey.ToNewCString(); + g_print("SetAccessKey setting to \"%s\"\n", foo); + delete [] foo; return NS_OK; } diff --git a/mozilla/widget/src/gtk/nsMenu.h b/mozilla/widget/src/gtk/nsMenu.h index 40d4547239e..9d6314df38f 100644 --- a/mozilla/widget/src/gtk/nsMenu.h +++ b/mozilla/widget/src/gtk/nsMenu.h @@ -93,6 +93,7 @@ protected: GtkWidget *GetNativeParent(); nsString mLabel; + nsString mAccessKey; PRUint32 mNumMenuItems; GtkWidget *mMenu; diff --git a/mozilla/widget/src/gtk/nsMenuBar.cpp b/mozilla/widget/src/gtk/nsMenuBar.cpp index ae1ce9e76d8..9806418070d 100644 --- a/mozilla/widget/src/gtk/nsMenuBar.cpp +++ b/mozilla/widget/src/gtk/nsMenuBar.cpp @@ -136,13 +136,28 @@ NS_METHOD nsMenuBar::AddMenu(nsIMenu * aMenu) nsISupports * supports = nsnull; aMenu->QueryInterface(kISupportsIID, (void**)&supports); - if(supports){ + if (supports) { mMenusVoidArray.AppendElement(aMenu); mNumMenus++; } aMenu->GetLabel(Label); + // get access key + nsString accessKey = " "; + aMenu->GetAccessKey(accessKey); + if(accessKey != " ") + { + // munge acess key into name + PRInt32 offset = Label.Find(accessKey); + if(offset != -1) + Label.Insert("_", offset); + } + + char *foo = Label.ToNewCString(); + g_print("%s\n", foo); + delete [] foo; + widget = nsMenuItem::CreateLocalized(Label); gtk_widget_show(widget); gtk_menu_bar_append (GTK_MENU_BAR (mMenuBar), widget); @@ -277,9 +292,11 @@ nsEventStatus nsMenuBar::MenuConstruct( if (menuElement) { nsString menuNodeType; nsString menuName; + nsString menuAccessKey = " "; menuElement->GetNodeName(menuNodeType); if (menuNodeType.Equals("menu")) { menuElement->GetAttribute(nsAutoString("name"), menuName); + menuElement->GetAttribute(nsAutoString("accesskey"), menuAccessKey); // Don't create the menu yet, just add in the top level names // Create nsMenu @@ -292,7 +309,8 @@ nsEventStatus nsMenuBar::MenuConstruct( pnsMenu->Create(supports, menuName); NS_RELEASE(supports); - pnsMenu->SetLabel(menuName); + pnsMenu->SetLabel(menuName); + pnsMenu->SetAccessKey(menuAccessKey); pnsMenu->SetDOMNode(menuNode); pnsMenu->SetDOMElement(menuElement); pnsMenu->SetWebShell(mWebShell);