From a33410c1064d1cb733400f648870c1b04801b154 Mon Sep 17 00:00:00 2001 From: "hyatt%netscape.com" Date: Mon, 13 Mar 2000 10:37:57 +0000 Subject: [PATCH] Making menus give feedback even when disabled. r=ben --- layout/xul/base/src/nsMenuFrame.cpp | 13 +++++-------- layout/xul/base/src/nsMenuPopupFrame.cpp | 3 +-- xpfe/global/resources/skin/global.css | 20 ++++++++++++++++++++ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/layout/xul/base/src/nsMenuFrame.cpp b/layout/xul/base/src/nsMenuFrame.cpp index 04dee3b2b29e..1a3470c46cae 100644 --- a/layout/xul/base/src/nsMenuFrame.cpp +++ b/layout/xul/base/src/nsMenuFrame.cpp @@ -241,10 +241,7 @@ nsMenuFrame::HandleEvent(nsIPresContext* aPresContext, NS_ENSURE_ARG_POINTER(aEventStatus); *aEventStatus = nsEventStatus_eConsumeDoDefault; - if (IsDisabled()) // Disabled menus process no events. - return NS_OK; - - if (aEvent->message == NS_KEY_PRESS) { + if (aEvent->message == NS_KEY_PRESS && !IsDisabled()) { nsKeyEvent* keyEvent = (nsKeyEvent*)aEvent; PRUint32 keyCode = keyEvent->keyCode; if (keyCode == NS_VK_UP || keyCode == NS_VK_DOWN) { @@ -252,7 +249,7 @@ nsMenuFrame::HandleEvent(nsIPresContext* aPresContext, OpenMenu(PR_TRUE); } } - else if (aEvent->message == NS_MOUSE_LEFT_BUTTON_DOWN) { + else if (aEvent->message == NS_MOUSE_LEFT_BUTTON_DOWN && !IsDisabled()) { PRBool isMenuBar = PR_FALSE; if (mMenuParent) mMenuParent->IsMenuBar(isMenuBar); @@ -271,14 +268,14 @@ nsMenuFrame::HandleEvent(nsIPresContext* aPresContext, } } } - else if ( aEvent->message == NS_MOUSE_RIGHT_BUTTON_UP && mMenuParent ) { + else if ( aEvent->message == NS_MOUSE_RIGHT_BUTTON_UP && mMenuParent && !IsDisabled()) { // if this menu is a context menu it accepts right-clicks...fire away! PRBool isContextMenu = PR_FALSE; mMenuParent->GetIsContextMenu(isContextMenu); if ( isContextMenu ) Execute(); } - else if (aEvent->message == NS_MOUSE_LEFT_BUTTON_UP && !IsMenu() && mMenuParent) { + else if (aEvent->message == NS_MOUSE_LEFT_BUTTON_UP && !IsMenu() && mMenuParent && !IsDisabled()) { // First, flip "checked" state if we're a checkbox menu, or // an un-checked radio menu if (mType == eMenuType_Checkbox || @@ -340,7 +337,7 @@ nsMenuFrame::HandleEvent(nsIPresContext* aPresContext, // If we're a menu (and not a menu item), // kick off the timer. - if (!isMenuBar && IsMenu() && !mMenuOpen && !mOpenTimer) { + if (!IsDisabled() && !isMenuBar && IsMenu() && !mMenuOpen && !mOpenTimer) { PRInt32 menuDelay = 300; // ms diff --git a/layout/xul/base/src/nsMenuPopupFrame.cpp b/layout/xul/base/src/nsMenuPopupFrame.cpp index eae6b901bb05..67ea09ee5599 100644 --- a/layout/xul/base/src/nsMenuPopupFrame.cpp +++ b/layout/xul/base/src/nsMenuPopupFrame.cpp @@ -1185,8 +1185,7 @@ nsMenuPopupFrame::IsValidItem(nsIContent* aContent) nsCOMPtr tag; aContent->GetTag(*getter_AddRefs(tag)); if (tag && (tag.get() == nsXULAtoms::menu || - tag.get() == nsXULAtoms::menuitem) && - !IsDisabled(aContent)) + tag.get() == nsXULAtoms::menuitem)) return PR_TRUE; return PR_FALSE; diff --git a/xpfe/global/resources/skin/global.css b/xpfe/global/resources/skin/global.css index 212e388fba56..42601b2a3c67 100644 --- a/xpfe/global/resources/skin/global.css +++ b/xpfe/global/resources/skin/global.css @@ -840,6 +840,22 @@ popup > menuitem[menuactive="true"] { color: white; } +menupopup > menu[menuactive="true"][disabled="true"] { + color: #999999; +} + +popup > menu[menuactive="true"][disabled="true"] { + color: #999999; +} + +menupopup > menuitem[menuactive="true"][disabled="true"] { + color: #999999; +} + +popup > menuitem[menuactive="true"][disabled="true"] { + color: #999999; +} + .menu-right { padding: 0px; border: 0px; @@ -915,6 +931,10 @@ menu[disabled="true"] > .menu-right { list-style-image: url("chrome://global/skin/menu-arrow-disabled.gif"); } +menu[menuactive="true"][disabled="true"] > .menu-right { + list-style-image: url("chrome://global/skin/menu-arrow-disabled.gif"); +} + menu[menuactive="true"] > .menu-right { list-style-image: url("chrome://global/skin/menu-arrow-hover.gif"); }