From a04d5ebc5e2b229c0e33b6d3dbe00a08906c998c Mon Sep 17 00:00:00 2001 From: "zuperdee%penguinpowered.com" Date: Mon, 5 Jul 1999 20:15:54 +0000 Subject: [PATCH] Unbreaking the Motif build by fixing my menu fixes (boy am I stupid). Also implemented the nsWindow:SetTitle function (reusing the code I wrote for the xlib port). --- widget/src/motif/nsMenu.cpp | 66 +++++++++++++++++++++++++++++++++++ widget/src/motif/nsMenu.h | 5 +++ widget/src/motif/nsWindow.cpp | 9 +++-- 3 files changed, 78 insertions(+), 2 deletions(-) diff --git a/widget/src/motif/nsMenu.cpp b/widget/src/motif/nsMenu.cpp index b15b635a05f8..785a45afe761 100644 --- a/widget/src/motif/nsMenu.cpp +++ b/widget/src/motif/nsMenu.cpp @@ -338,6 +338,72 @@ void nsMenu::LoadMenuItem(nsIMenu * pParentMenu, return; } +void nsMenu::LoadSubMenu(nsIMenu * pParentMenu, + nsIDOMElement * menuElement, + nsIDOMNode * menuNode) +{ + nsString menuName; + menuElement->GetAttribute(nsAutoString("name"), menuName); + //printf("Creating Menu [%s] \n", menuName.ToNewCString()); // this leaks + + // Create nsMenu + nsIMenu * pnsMenu = nsnull; + nsresult rv = nsComponentManager::CreateInstance(kMenuCID, + nsnull, + nsIMenu::GetIID(), + (void**)&pnsMenu); + if (NS_OK == rv) { + // Call Create + nsISupports * supports = nsnull; + pParentMenu->QueryInterface(kISupportsIID, (void**) &supports); + pnsMenu->Create(supports, menuName); + NS_RELEASE(supports); // Balance QI + + // Set nsMenu Name + pnsMenu->SetLabel(menuName); + + supports = nsnull; + pnsMenu->QueryInterface(kISupportsIID, (void**) &supports); + pParentMenu->AddItem(supports); // parent takes ownership + NS_RELEASE(supports); + + pnsMenu->SetWebShell(mWebShell); + pnsMenu->SetDOMNode(menuNode); + + /* + // Begin menuitem inner loop + unsigned short menuIndex = 0; + + nsCOMPtr menuitemNode; + menuNode->GetFirstChild(getter_AddRefs(menuitemNode)); + while (menuitemNode) { + nsCOMPtr menuitemElement(do_QueryInterface(menuitemNode)); + if (menuitemElement) { + nsString menuitemNodeType; + menuitemElement->GetNodeName(menuitemNodeType); + +#ifdef DEBUG_saari + printf("Type [%s] %d\n", menuitemNodeType.ToNewCString(), menuitemNodeType.Equals("separator")); +#endif + + if (menuitemNodeType.Equals("menuitem")) { + // Load a menuitem + LoadMenuItem(pnsMenu, menuitemElement, menuitemNode, menuIndex, mWebShell); + } else if (menuitemNodeType.Equals("separator")) { + pnsMenu->AddSeparator(); + } else if (menuitemNodeType.Equals("menu")) { + // Add a submenu + LoadSubMenu(pnsMenu, menuitemElement, menuitemNode); + } + } + ++menuIndex; + nsCOMPtr oldmenuitemNode(menuitemNode); + oldmenuitemNode->GetNextSibling(getter_AddRefs(menuitemNode)); + } // end menu item innner loop + */ + } +} + nsEventStatus nsMenu::MenuItemSelected(const nsMenuEvent & aMenuEvent) { return nsEventStatus_eIgnore; diff --git a/widget/src/motif/nsMenu.h b/widget/src/motif/nsMenu.h index 5efdf8c30242..a64f1e1c453d 100644 --- a/widget/src/motif/nsMenu.h +++ b/widget/src/motif/nsMenu.h @@ -86,6 +86,11 @@ protected: unsigned short menuitemIndex, nsIWebShell * aWebShell); + void LoadSubMenu( + nsIMenu * pParentMenu, + nsIDOMElement * menuElement, + nsIDOMNode * menuNode); + Widget GetNativeParent(); nsString mLabel; diff --git a/widget/src/motif/nsWindow.cpp b/widget/src/motif/nsWindow.cpp index 1884ed2f3de1..a857b3edf07e 100644 --- a/widget/src/motif/nsWindow.cpp +++ b/widget/src/motif/nsWindow.cpp @@ -1206,9 +1206,14 @@ NS_METHOD nsWindow::SetBorderStyle(nsBorderStyle aBorderStyle) NS_METHOD nsWindow::SetTitle(const nsString& aTitle) { + if(!mBaseWindow) + return NS_ERROR_FAILURE; + + const char *text = aTitle.ToNewCString(); + XStoreName(gDisplay, mBaseWindow, text); + delete [] text; return NS_OK; -} - +} /** * Processes a mouse pressed event