diff --git a/mozilla/widget/public/nsWidgetAtomList.h b/mozilla/widget/public/nsWidgetAtomList.h index c9eff3adfae..3104d6bd591 100644 --- a/mozilla/widget/public/nsWidgetAtomList.h +++ b/mozilla/widget/public/nsWidgetAtomList.h @@ -54,46 +54,29 @@ ******/ -WIDGET_ATOM(accesskey, "accesskey") // The shortcut key for a menu or menu item -WIDGET_ATOM(ascending, "ascending") -WIDGET_ATOM(autocheck, "autocheck") -WIDGET_ATOM(checkbox, "checkbox") -WIDGET_ATOM(checked, "checked") -WIDGET_ATOM(_class, "class") WIDGET_ATOM(collapsed, "collapsed") -WIDGET_ATOM(command, "command") -WIDGET_ATOM(curpos, "curpos") -WIDGET_ATOM(_default, "default") -WIDGET_ATOM(descending, "descending") -WIDGET_ATOM(disabled, "disabled") -WIDGET_ATOM(_false, "false") -WIDGET_ATOM(firsttab, "first-tab") -WIDGET_ATOM(focused, "focused") -WIDGET_ATOM(hidden, "hidden") -WIDGET_ATOM(horizontal, "horizontal") -WIDGET_ATOM(id, "id") -WIDGET_ATOM(increment, "increment") -WIDGET_ATOM(input, "input") +WIDGET_ATOM(menuseparator, "menuseparator") // Divider between menu items +WIDGET_ATOM(modifiers, "modifiers") // The modifiers attribute WIDGET_ATOM(key, "key") // The key element / attribute -WIDGET_ATOM(label, "label") -WIDGET_ATOM(maxpos, "maxpos") +WIDGET_ATOM(command, "command") WIDGET_ATOM(menu, "menu") // Represents an XP menu WIDGET_ATOM(menuitem, "menuitem") // Represents an XP menu item -WIDGET_ATOM(menupopup, "menupopup") // The XP menu's children. -WIDGET_ATOM(menuseparator, "menuseparator") // Divider between menu items -WIDGET_ATOM(mode, "mode") -WIDGET_ATOM(modifiers, "modifiers") // The modifiers attribute -WIDGET_ATOM(mozinputchecked, "_moz-input-checked") -WIDGET_ATOM(mozmenuactive, "_moz-menuactive") -WIDGET_ATOM(name, "name") WIDGET_ATOM(open, "open") // Whether or not a menu, tree, etc. is open -WIDGET_ATOM(orient, "orient") -WIDGET_ATOM(pageincrement, "pageincrement") -WIDGET_ATOM(radio, "radio") -WIDGET_ATOM(readonly, "readonly") -WIDGET_ATOM(selected, "selected") -WIDGET_ATOM(sortdirection, "sortDirection") -WIDGET_ATOM(_true, "true") -WIDGET_ATOM(type, "type") -WIDGET_ATOM(value, "value") +WIDGET_ATOM(menupopup, "menupopup") // The XP menu's children. +WIDGET_ATOM(id, "id") +WIDGET_ATOM(accesskey, "accesskey") // The shortcut key for a menu or menu item + +WIDGET_ATOM(name, "name") +WIDGET_ATOM(type, "type") +WIDGET_ATOM(autocheck, "autocheck") +WIDGET_ATOM(checked, "checked") +WIDGET_ATOM(disabled, "disabled") +WIDGET_ATOM(label, "label") +WIDGET_ATOM(hidden, "hidden") + +WIDGET_ATOM(curpos, "curpos") +WIDGET_ATOM(maxpos, "maxpos") +WIDGET_ATOM(increment, "increment") +WIDGET_ATOM(pageincrement, "pageincrement") +WIDGET_ATOM(orient, "orient") diff --git a/mozilla/widget/src/build/Makefile.in b/mozilla/widget/src/build/Makefile.in index 06f7d394acd..1566dbf3e8d 100644 --- a/mozilla/widget/src/build/Makefile.in +++ b/mozilla/widget/src/build/Makefile.in @@ -73,7 +73,6 @@ endif LOCAL_INCLUDES = \ -I$(srcdir) \ -I$(srcdir)/../xpwidgets \ - -I$(srcdir)/../../public \ -I$(srcdir)/../windows \ $(NULL) diff --git a/mozilla/widget/src/cocoa/nsMenuBarX.mm b/mozilla/widget/src/cocoa/nsMenuBarX.mm index f38d50c14e8..3a375d3be05 100644 --- a/mozilla/widget/src/cocoa/nsMenuBarX.mm +++ b/mozilla/widget/src/cocoa/nsMenuBarX.mm @@ -422,8 +422,9 @@ nsMenuBarX::MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget* aParentWind // Make nsMenu a child of nsMenuBar. nsMenuBar takes ownership. AddMenu(pnsMenu); - if (menu->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::id, - NS_LITERAL_STRING("menu_Help"), eCaseMatters)) { + nsAutoString menuIDstring; + menu->GetAttr(kNameSpaceID_None, nsWidgetAtoms::id, menuIDstring); + if (menuIDstring.EqualsLiteral("menu_Help")) { nsMenuEvent event(PR_TRUE, 0, nsnull); event.mCommand = (unsigned int)nsnull; nsCOMPtr listener(do_QueryInterface(pnsMenu)); @@ -494,9 +495,9 @@ NS_IMETHODIMP nsMenuBarX::AddMenu(nsIMenu * aMenu) nsCOMPtr menu; aMenu->GetMenuContent(getter_AddRefs(menu)); - if (!menu->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) && - menu->GetChildCount() > 0) { + nsAutoString menuHidden; + menu->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, menuHidden); + if (!menuHidden.EqualsLiteral("true") && menu->GetChildCount() > 0) { NSMenuItem* newMenuItem = [[[NSMenuItem alloc] initWithTitle:@"SomeMenuItem" action:NULL keyEquivalent:@""] autorelease]; [mRootMenu addItem:newMenuItem]; [newMenuItem setSubmenu:menuRef]; diff --git a/mozilla/widget/src/cocoa/nsMenuItemX.mm b/mozilla/widget/src/cocoa/nsMenuItemX.mm index b7ada0247ed..81b20ccaee9 100644 --- a/mozilla/widget/src/cocoa/nsMenuItemX.mm +++ b/mozilla/widget/src/cocoa/nsMenuItemX.mm @@ -389,8 +389,9 @@ nsMenuItemX::UncheckRadioSiblings(nsIContent* inCheckedContent) if (sibling) { if (sibling != inCheckedContent) { // skip this node // if the current sibling is in the same group, clear it - if (sibling->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::name, - myGroupName, eCaseMatters)) + nsAutoString currGroupName; + sibling->GetAttr(kNameSpaceID_None, nsWidgetAtoms::name, currGroupName); + if (currGroupName == myGroupName) sibling->SetAttr(kNameSpaceID_None, nsWidgetAtoms::checked, NS_LITERAL_STRING("false"), PR_TRUE); } } @@ -410,8 +411,9 @@ nsMenuItemX::AttributeChanged(nsIDocument *aDocument, PRInt32 aNameSpaceID, nsIA // if we're a radio menu, uncheck our sibling radio items. No need to // do any of this if we're just a normal check menu. if (mMenuType == eRadio) { - if (mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::checked, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString checked; + mContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::checked, checked); + if (checked.EqualsLiteral("true")) UncheckRadioSiblings(mContent); } nsCOMPtr listener = do_QueryInterface(mMenuParent); diff --git a/mozilla/widget/src/cocoa/nsMenuX.mm b/mozilla/widget/src/cocoa/nsMenuX.mm index db883e3d21c..7ad94209f4e 100644 --- a/mozilla/widget/src/cocoa/nsMenuX.mm +++ b/mozilla/widget/src/cocoa/nsMenuX.mm @@ -147,10 +147,10 @@ nsMenuX::Create(nsISupports * aParent, const nsAString &aLabel, const nsAString SetLabel(aLabel); - if (mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) || - mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString hiddenValue, collapsedValue; + mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, hiddenValue); + mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::collapsed, collapsedValue); + if (hiddenValue.EqualsLiteral("true") || collapsedValue.EqualsLiteral("true")) mVisible = PR_FALSE; if (menubar && mMenuContent->GetChildCount() == 0) @@ -584,31 +584,33 @@ void nsMenuX::LoadMenuItem(nsIMenu* inParentMenu, nsIContent* inMenuItemContent) return; // if menu should be hidden, bail - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString hidden; + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, hidden); + if (hidden.EqualsLiteral("true")) return; // create nsMenuItem nsCOMPtr pnsMenuItem = do_CreateInstance(kMenuItemCID); if (pnsMenuItem) { + nsAutoString disabled; + nsAutoString checked; + nsAutoString type; nsAutoString menuitemName; + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::disabled, disabled); + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::checked, checked); + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::type, type); inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuitemName); // printf("menuitem %s \n", NS_LossyConvertUTF16toASCII(menuitemName).get()); - PRBool enabled = - ! (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)); + PRBool enabled = !(disabled.EqualsLiteral("true")); - static nsIContent::AttrValuesArray strings[] = - {&nsWidgetAtoms::checkbox, &nsWidgetAtoms::radio, nsnull}; nsIMenuItem::EMenuItemType itemType = nsIMenuItem::eRegular; - switch (inMenuItemContent->FindAttrValueIn(kNameSpaceID_None, nsWidgetAtoms::type, - strings, eCaseMatters)) { - case 0: itemType = nsIMenuItem::eCheckbox; break; - case 1: itemType = nsIMenuItem::eRadio; break; - } + if (type.EqualsLiteral("checkbox")) + itemType = nsIMenuItem::eCheckbox; + else if (type.EqualsLiteral("radio")) + itemType = nsIMenuItem::eRadio; nsCOMPtr docShell = do_QueryReferent(mDocShellWeakRef); if (!docShell) @@ -648,8 +650,7 @@ void nsMenuX::LoadMenuItem(nsIMenu* inParentMenu, nsIContent* inMenuItemContent) pnsMenuItem->SetModifiers(modifiers); } - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::checked, - nsWidgetAtoms::_true, eCaseMatters)) + if (checked.EqualsLiteral("true")) pnsMenuItem->SetChecked(PR_TRUE); else pnsMenuItem->SetChecked(PR_FALSE); @@ -664,8 +665,9 @@ void nsMenuX::LoadSubMenu(nsIMenu * pParentMenu, nsIContent* inMenuItemContent) { // if menu should be hidden, bail - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString hidden; + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, hidden); + if (hidden.EqualsLiteral("true")) return; nsAutoString menuName; @@ -683,8 +685,9 @@ nsMenuX::LoadSubMenu(nsIMenu * pParentMenu, nsIContent* inMenuItemContent) pnsMenu->Create(supports, menuName, EmptyString(), mManager, docShell, inMenuItemContent); // set if it's enabled or disabled - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString disabled; + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::disabled, disabled); + if (disabled.EqualsLiteral("true")) pnsMenu->SetEnabled(PR_FALSE); else pnsMenu->SetEnabled(PR_TRUE); @@ -700,8 +703,9 @@ void nsMenuX::LoadSeparator(nsIContent* inMenuItemContent) { // if item should be hidden, bail - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString hidden; + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, hidden); + if (hidden.EqualsLiteral("true")) return; AddSeparator(); @@ -970,11 +974,12 @@ nsMenuX::CountVisibleBefore(PRUint32* outVisibleBefore) nsCOMPtr menuContent; currMenu->GetMenuContent(getter_AddRefs(menuContent)); if (menuContent) { + nsAutoString hiddenValue, collapsedValue; + menuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, hiddenValue); + menuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::collapsed, collapsedValue); if (menuContent->GetChildCount() > 0 || - !menuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) && - !menuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, - nsWidgetAtoms::_true, eCaseMatters)) { + !hiddenValue.EqualsLiteral("true") && + !collapsedValue.EqualsLiteral("true")) { ++(*outVisibleBefore); } } @@ -1003,8 +1008,9 @@ nsMenuX::AttributeChanged(nsIDocument *aDocument, PRInt32 aNameSpaceID, nsIAtom if (aAttribute == nsWidgetAtoms::disabled) { SetRebuild(PR_TRUE); - if (mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString valueString; + mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::disabled, valueString); + if (valueString.EqualsLiteral("true")) SetEnabled(PR_FALSE); else SetEnabled(PR_TRUE); @@ -1032,11 +1038,12 @@ nsMenuX::AttributeChanged(nsIDocument *aDocument, PRInt32 aNameSpaceID, nsIAtom } else if (aAttribute == nsWidgetAtoms::hidden || aAttribute == nsWidgetAtoms::collapsed) { SetRebuild(PR_TRUE); - - if (mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) || - mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, - nsWidgetAtoms::_true, eCaseMatters)) { + + nsAutoString hiddenValue, collapsedValue; + mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, hiddenValue); + mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::collapsed, collapsedValue); + + if (hiddenValue.EqualsLiteral("true") || collapsedValue.EqualsLiteral("true")) { if (mVisible) { if (menubarParent) { PRUint32 indexToRemove = 0; diff --git a/mozilla/widget/src/cocoa/nsNativeScrollbar.mm b/mozilla/widget/src/cocoa/nsNativeScrollbar.mm index cba3450ab03..1ddb4fa6328 100644 --- a/mozilla/widget/src/cocoa/nsNativeScrollbar.mm +++ b/mozilla/widget/src/cocoa/nsNativeScrollbar.mm @@ -417,8 +417,9 @@ nsNativeScrollbar::SetContent(nsIContent* inContent, nsISupports* inScrollbar, // we may have to re-create the scrollbar view as horizontal. Check the // 'orient' attribute and rebuild the view with all the settings // present in the current view - if (mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::orient, - nsWidgetAtoms::horizontal, eCaseMatters)) + nsAutoString orient; + mContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::orient, orient); + if ( orient.Equals(NS_LITERAL_STRING("horizontal")) ) RecreateHorizontalScrollbar(); } diff --git a/mozilla/widget/src/gtk/Makefile.in b/mozilla/widget/src/gtk/Makefile.in index 4c2956d973d..c778e69f9e7 100644 --- a/mozilla/widget/src/gtk/Makefile.in +++ b/mozilla/widget/src/gtk/Makefile.in @@ -143,7 +143,6 @@ endif LOCAL_INCLUDES = \ -I$(srcdir)/../xpwidgets \ - -I$(srcdir)/../../public \ -I$(srcdir) \ -I$(topsrcdir)/gfx/src/gtk \ $(NULL) diff --git a/mozilla/widget/src/gtk/nsNativeThemeGTK.cpp b/mozilla/widget/src/gtk/nsNativeThemeGTK.cpp index 50f14561a00..c8204109548 100644 --- a/mozilla/widget/src/gtk/nsNativeThemeGTK.cpp +++ b/mozilla/widget/src/gtk/nsNativeThemeGTK.cpp @@ -55,7 +55,6 @@ #include "nsTransform2D.h" #include "nsIMenuFrame.h" #include "nsIMenuParent.h" -#include "nsWidgetAtoms.h" #include "prlink.h" #include @@ -78,6 +77,12 @@ nsNativeThemeGTK::nsNativeThemeGTK() do_GetService("@mozilla.org/observer-service;1"); obsServ->AddObserver(this, "xpcom-shutdown", PR_FALSE); + mInputCheckedAtom = do_GetAtom("_moz-input-checked"); + mInputAtom = do_GetAtom("input"); + mCurPosAtom = do_GetAtom("curpos"); + mMaxPosAtom = do_GetAtom("maxpos"); + mMenuActiveAtom = do_GetAtom("_moz-menuactive"); + memset(mDisabledWidgetTypes, 0, sizeof(mDisabledWidgetTypes)); memset(mSafeWidgetStates, 0, sizeof(mSafeWidgetStates)); @@ -194,15 +199,13 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame, // widgets, so don't adjust stateFrame here. aFrame = aFrame->GetParent(); } - } else if (content->Tag() == nsWidgetAtoms::input) { - atom = nsWidgetAtoms::mozinputchecked; + } else if (content->Tag() == mInputAtom) { + atom = mInputCheckedAtom; } if (aWidgetFlags) { if (!atom) { - atom = (aWidgetType == NS_THEME_CHECKBOX || - aWidgetType == NS_THEME_CHECKBOX_LABEL) ? nsWidgetAtoms::checked - : nsWidgetAtoms::selected; + atom = (aWidgetType == NS_THEME_CHECKBOX || aWidgetType == NS_THEME_CHECKBOX_LABEL) ? mCheckedAtom : mSelectedAtom; } *aWidgetFlags = CheckBooleanAttr(aFrame, atom); } @@ -234,8 +237,8 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame, // the slider to the actual scrollbar object nsIFrame *tmpFrame = aFrame->GetParent()->GetParent(); - aState->curpos = CheckIntAttr(tmpFrame, nsWidgetAtoms::curpos); - aState->maxpos = CheckIntAttr(tmpFrame, nsWidgetAtoms::maxpos); + aState->curpos = CheckIntAttr(tmpFrame, mCurPosAtom); + aState->maxpos = CheckIntAttr(tmpFrame, mMaxPosAtom); } // menu item state is determined by the attribute "_moz-menuactive", @@ -261,7 +264,7 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame, menuFrame->MenuIsOpen(isOpen); aState->inHover = isOpen; } else { - aState->inHover = CheckBooleanAttr(aFrame, nsWidgetAtoms::mozmenuactive); + aState->inHover = CheckBooleanAttr(aFrame, mMenuActiveAtom); } aState->active = FALSE; @@ -269,8 +272,8 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame, if (aWidgetType == NS_THEME_CHECKMENUITEM || aWidgetType == NS_THEME_RADIOMENUITEM) { *aWidgetFlags = aFrame && aFrame->GetContent()-> - AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::checked, - nsWidgetAtoms::_true, eIgnoreCase); + AttrValueIs(kNameSpaceID_None, mCheckedAtom, + NS_LITERAL_STRING("true"), eIgnoreCase); } } } @@ -363,13 +366,12 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame, *aWidgetFlags = 0; if (aWidgetType == NS_THEME_TAB && - CheckBooleanAttr(aFrame, nsWidgetAtoms::selected)) + CheckBooleanAttr(aFrame, mSelectedAtom)) *aWidgetFlags |= MOZ_GTK_TAB_SELECTED; else if (aWidgetType == NS_THEME_TAB_LEFT_EDGE) *aWidgetFlags |= MOZ_GTK_TAB_BEFORE_SELECTED; - if (aFrame->GetContent()->HasAttr(kNameSpaceID_None, - nsWidgetAtoms::firsttab)) + if (aFrame->GetContent()->HasAttr(kNameSpaceID_None, mFirstTabAtom)) *aWidgetFlags |= MOZ_GTK_TAB_FIRST; } @@ -691,11 +693,9 @@ nsNativeThemeGTK::WidgetStateChanged(nsIFrame* aFrame, PRUint8 aWidgetType, // Check the attribute to see if it's relevant. // disabled, checked, dlgtype, default, etc. *aShouldRepaint = PR_FALSE; - if (aAttribute == nsWidgetAtoms::disabled || - aAttribute == nsWidgetAtoms::checked || - aAttribute == nsWidgetAtoms::selected || - aAttribute == nsWidgetAtoms::focused || - aAttribute == nsWidgetAtoms::mozmenuactive) + if (aAttribute == mDisabledAtom || aAttribute == mCheckedAtom || + aAttribute == mSelectedAtom || aAttribute == mFocusedAtom || + aAttribute == mMenuActiveAtom) *aShouldRepaint = PR_TRUE; } diff --git a/mozilla/widget/src/gtk/nsNativeThemeGTK.h b/mozilla/widget/src/gtk/nsNativeThemeGTK.h index 51d4bd7ba00..d8cd06f5538 100644 --- a/mozilla/widget/src/gtk/nsNativeThemeGTK.h +++ b/mozilla/widget/src/gtk/nsNativeThemeGTK.h @@ -97,6 +97,13 @@ private: void RefreshWidgetWindow(nsIFrame* aFrame); + nsCOMPtr mTypeAtom; + nsCOMPtr mInputCheckedAtom; + nsCOMPtr mInputAtom; + nsCOMPtr mCurPosAtom; + nsCOMPtr mMaxPosAtom; + nsCOMPtr mMenuActiveAtom; + PRUint8 mDisabledWidgetTypes[32]; PRUint8 mSafeWidgetStates[1024]; // 256 widgets * 32 bits per widget static const char* sDisabledEngines[]; diff --git a/mozilla/widget/src/gtk2/Makefile.in b/mozilla/widget/src/gtk2/Makefile.in index 603ebd0e6c6..92a6ffa38fa 100644 --- a/mozilla/widget/src/gtk2/Makefile.in +++ b/mozilla/widget/src/gtk2/Makefile.in @@ -130,7 +130,7 @@ EXTRA_DSO_LDOPTS += -lthebes endif EXPORTS = \ - nsIGdkPixbufImage.h \ + nsIGdkPixbufImage.h \ mozdrawingarea.h \ mozcontainer.h \ $(NULL) @@ -161,7 +161,6 @@ endif DEFINES += INCLUDES += \ -I$(srcdir)/../xpwidgets \ - -I$(srcdir)/../../public \ $(NULL) test_container: mozdrawingarea.o mozcontainer.o test_container.c diff --git a/mozilla/widget/src/gtk2/nsNativeThemeGTK.cpp b/mozilla/widget/src/gtk2/nsNativeThemeGTK.cpp index 304cd5d837a..9a0a4542633 100644 --- a/mozilla/widget/src/gtk2/nsNativeThemeGTK.cpp +++ b/mozilla/widget/src/gtk2/nsNativeThemeGTK.cpp @@ -57,7 +57,6 @@ #include "nsIMenuParent.h" #include "prlink.h" #include "nsIDOMHTMLInputElement.h" -#include "nsWidgetAtoms.h" #include #include @@ -84,6 +83,12 @@ nsNativeThemeGTK::nsNativeThemeGTK() do_GetService("@mozilla.org/observer-service;1"); obsServ->AddObserver(this, "xpcom-shutdown", PR_FALSE); + mInputCheckedAtom = do_GetAtom("_moz-input-checked"); + mInputAtom = do_GetAtom("input"); + mCurPosAtom = do_GetAtom("curpos"); + mMaxPosAtom = do_GetAtom("maxpos"); + mMenuActiveAtom = do_GetAtom("_moz-menuactive"); + memset(mDisabledWidgetTypes, 0, sizeof(mDisabledWidgetTypes)); memset(mSafeWidgetStates, 0, sizeof(mSafeWidgetStates)); @@ -202,9 +207,7 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame, } if (aWidgetFlags) { if (!atom) { - atom = (aWidgetType == NS_THEME_CHECKBOX || - aWidgetType == NS_THEME_CHECKBOX_LABEL) ? nsWidgetAtoms::checked - : nsWidgetAtoms::selected; + atom = (aWidgetType == NS_THEME_CHECKBOX || aWidgetType == NS_THEME_CHECKBOX_LABEL) ? mCheckedAtom : mSelectedAtom; } *aWidgetFlags = CheckBooleanAttr(aFrame, atom); } @@ -246,8 +249,8 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame, // the slider to the actual scrollbar object nsIFrame *tmpFrame = aFrame->GetParent()->GetParent(); - aState->curpos = CheckIntAttr(tmpFrame, nsWidgetAtoms::curpos); - aState->maxpos = CheckIntAttr(tmpFrame, nsWidgetAtoms::maxpos); + aState->curpos = CheckIntAttr(tmpFrame, mCurPosAtom); + aState->maxpos = CheckIntAttr(tmpFrame, mMaxPosAtom); } // menu item state is determined by the attribute "_moz-menuactive", @@ -273,7 +276,7 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame, menuFrame->MenuIsOpen(isOpen); aState->inHover = isOpen; } else { - aState->inHover = CheckBooleanAttr(aFrame, nsWidgetAtoms::mozmenuactive); + aState->inHover = CheckBooleanAttr(aFrame, mMenuActiveAtom); } aState->active = FALSE; @@ -281,8 +284,8 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame, if (aWidgetType == NS_THEME_CHECKMENUITEM || aWidgetType == NS_THEME_RADIOMENUITEM) { *aWidgetFlags = aFrame && aFrame->GetContent()-> - AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::checked, - nsWidgetAtoms::_true, eIgnoreCase); + AttrValueIs(kNameSpaceID_None, mCheckedAtom, + NS_LITERAL_STRING("true"), eIgnoreCase); } } } @@ -375,13 +378,12 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame, *aWidgetFlags = 0; if (aWidgetType == NS_THEME_TAB && - CheckBooleanAttr(aFrame, nsWidgetAtoms::selected)) + CheckBooleanAttr(aFrame, mSelectedAtom)) *aWidgetFlags |= MOZ_GTK_TAB_SELECTED; else if (aWidgetType == NS_THEME_TAB_LEFT_EDGE) *aWidgetFlags |= MOZ_GTK_TAB_BEFORE_SELECTED; - if (aFrame->GetContent()->HasAttr(kNameSpaceID_None, - nsWidgetAtoms::firsttab)) + if (aFrame->GetContent()->HasAttr(kNameSpaceID_None, mFirstTabAtom)) *aWidgetFlags |= MOZ_GTK_TAB_FIRST; } @@ -870,11 +872,9 @@ nsNativeThemeGTK::WidgetStateChanged(nsIFrame* aFrame, PRUint8 aWidgetType, // Check the attribute to see if it's relevant. // disabled, checked, dlgtype, default, etc. *aShouldRepaint = PR_FALSE; - if (aAttribute == nsWidgetAtoms::disabled || - aAttribute == nsWidgetAtoms::checked || - aAttribute == nsWidgetAtoms::selected || - aAttribute == nsWidgetAtoms::focused || - aAttribute == nsWidgetAtoms::mozmenuactive) + if (aAttribute == mDisabledAtom || aAttribute == mCheckedAtom || + aAttribute == mSelectedAtom || aAttribute == mFocusedAtom || + aAttribute == mMenuActiveAtom) *aShouldRepaint = PR_TRUE; } diff --git a/mozilla/widget/src/gtk2/nsNativeThemeGTK.h b/mozilla/widget/src/gtk2/nsNativeThemeGTK.h index 51d4bd7ba00..d8cd06f5538 100644 --- a/mozilla/widget/src/gtk2/nsNativeThemeGTK.h +++ b/mozilla/widget/src/gtk2/nsNativeThemeGTK.h @@ -97,6 +97,13 @@ private: void RefreshWidgetWindow(nsIFrame* aFrame); + nsCOMPtr mTypeAtom; + nsCOMPtr mInputCheckedAtom; + nsCOMPtr mInputAtom; + nsCOMPtr mCurPosAtom; + nsCOMPtr mMaxPosAtom; + nsCOMPtr mMenuActiveAtom; + PRUint8 mDisabledWidgetTypes[32]; PRUint8 mSafeWidgetStates[1024]; // 256 widgets * 32 bits per widget static const char* sDisabledEngines[]; diff --git a/mozilla/widget/src/mac/nsMenuBarX.cpp b/mozilla/widget/src/mac/nsMenuBarX.cpp index eed12e21217..409022b0ae0 100644 --- a/mozilla/widget/src/mac/nsMenuBarX.cpp +++ b/mozilla/widget/src/mac/nsMenuBarX.cpp @@ -443,8 +443,9 @@ nsMenuBarX::MenuConstruct( const nsMenuEvent & aMenuEvent, nsIWidget* aParentWin // Make nsMenu a child of nsMenuBar. nsMenuBar takes ownership AddMenu(pnsMenu); - if (menu->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::id, - NS_LITERAL_STRING("menu_Help"), eCaseMatters)) { + nsAutoString menuIDstring; + menu->GetAttr(kNameSpaceID_None, nsWidgetAtoms::id, menuIDstring); + if ( menuIDstring.EqualsLiteral("menu_Help") ) { nsMenuEvent event(PR_TRUE, 0, nsnull); nsCOMPtr listener(do_QueryInterface(pnsMenu)); listener->MenuSelected(event); @@ -528,9 +529,9 @@ NS_METHOD nsMenuBarX::AddMenu(nsIMenu * aMenu) if(!helpMenu) { nsCOMPtr menu; aMenu->GetMenuContent(getter_AddRefs(menu)); - if(!menu->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) && - menu->GetChildCount() > 0) { + nsAutoString menuHidden; + menu->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, menuHidden); + if(!menuHidden.EqualsLiteral("true") && menu->GetChildCount() > 0) { // make sure we only increment |mNumMenus| if the menu is visible, since // we use it as an index of where to insert the next menu. mNumMenus++; diff --git a/mozilla/widget/src/mac/nsMenuItemX.cpp b/mozilla/widget/src/mac/nsMenuItemX.cpp index f834e43bc62..b86898b9321 100644 --- a/mozilla/widget/src/mac/nsMenuItemX.cpp +++ b/mozilla/widget/src/mac/nsMenuItemX.cpp @@ -257,8 +257,9 @@ NS_METHOD nsMenuItemX::DoCommand() { // flip "checked" state if we're a checkbox menu, or an un-checked radio menu if (mMenuType == nsIMenuItem::eCheckbox || (mMenuType == nsIMenuItem::eRadio && !mIsChecked)) { - if (!mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::autocheck, - nsWidgetAtoms::_false, eCaseMatters)) + nsAutoString value; + mContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::autocheck, value); + if (!value.EqualsLiteral("false")) SetChecked(!mIsChecked); /* the AttributeChanged code will update all the internal state */ } @@ -364,8 +365,9 @@ nsMenuItemX :: UncheckRadioSiblings(nsIContent* inCheckedContent) if ( sibling ) { if ( sibling != inCheckedContent ) { // skip this node // if the current sibling is in the same group, clear it - if (sibling->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::name, - myGroupName, eCaseMatters)) + nsAutoString currGroupName; + sibling->GetAttr(kNameSpaceID_None, nsWidgetAtoms::name, currGroupName); + if ( currGroupName == myGroupName ) sibling->SetAttr(kNameSpaceID_None, nsWidgetAtoms::checked, NS_LITERAL_STRING("false"), PR_TRUE); } } @@ -387,8 +389,9 @@ nsMenuItemX :: AttributeChanged ( nsIDocument *aDocument, PRInt32 aNameSpaceID, // if we're a radio menu, uncheck our sibling radio items. No need to // do any of this if we're just a normal check menu. if ( mMenuType == eRadio ) { - if (mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::checked, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString checked; + mContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::checked, checked); + if (checked.EqualsLiteral("true") ) UncheckRadioSiblings(mContent); } diff --git a/mozilla/widget/src/mac/nsMenuX.cpp b/mozilla/widget/src/mac/nsMenuX.cpp index 78194403127..af804923e7d 100644 --- a/mozilla/widget/src/mac/nsMenuX.cpp +++ b/mozilla/widget/src/mac/nsMenuX.cpp @@ -165,10 +165,10 @@ nsMenuX::Create(nsISupports * aParent, const nsAString &aLabel, const nsAString SetLabel(aLabel); SetAccessKey(aAccessKey); - if (mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) || - mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString hiddenValue, collapsedValue; + mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, hiddenValue); + mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::collapsed, collapsedValue); + if ( hiddenValue.EqualsLiteral("true") || collapsedValue.EqualsLiteral("true") ) mVisible = PR_FALSE; if (menubar && mMenuContent->GetChildCount() == 0) @@ -816,16 +816,25 @@ void nsMenuX::LoadMenuItem( nsIMenu* inParentMenu, nsIContent* inMenuItemContent return; // if menu should be hidden, bail - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString hidden; + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, hidden); + if ( hidden.EqualsLiteral("true") ) return; // Create nsMenuItem nsCOMPtr pnsMenuItem = do_CreateInstance ( kMenuItemCID ) ; if ( pnsMenuItem ) { + nsAutoString disabled; + nsAutoString checked; + nsAutoString type; nsAutoString menuitemName; + nsAutoString menuitemCmd; + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::disabled, disabled); + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::checked, checked); + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::type, type); inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuitemName); + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::command, menuitemCmd); // Bug 164155 - Carbon interprets a leading hyphen on a menu item as // a separator. We want a real menu item, so "escape" the hyphen by inserting @@ -835,18 +844,13 @@ void nsMenuX::LoadMenuItem( nsIMenu* inParentMenu, nsIContent* inMenuItemContent //printf("menuitem %s \n", NS_LossyConvertUTF16toASCII(menuitemName).get()); - PRBool enabled = - ! (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)); + PRBool enabled = ! (disabled.EqualsLiteral("true")); - static nsIContent::AttrValuesArray strings[] = - {&nsWidgetAtoms::checkbox, &nsWidgetAtoms::radio, nsnull}; nsIMenuItem::EMenuItemType itemType = nsIMenuItem::eRegular; - switch (inMenuItemContent->FindAttrValueIn(kNameSpaceID_None, nsWidgetAtoms::type, - strings, eCaseMatters)) { - case 0: itemType = nsIMenuItem::eCheckbox; break; - case 1: itemType = nsIMenuItem::eRadio; break; - } + if ( type.EqualsLiteral("checkbox") ) + itemType = nsIMenuItem::eCheckbox; + else if ( type.EqualsLiteral("radio") ) + itemType = nsIMenuItem::eRadio; nsCOMPtr docShell = do_QueryReferent(mDocShellWeakRef); if (!docShell) @@ -904,8 +908,7 @@ void nsMenuX::LoadMenuItem( nsIMenu* inParentMenu, nsIContent* inMenuItemContent pnsMenuItem->SetModifiers ( modifiers ); } - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::checked, - nsWidgetAtoms::_true, eCaseMatters)) + if ( checked.EqualsLiteral("true") ) pnsMenuItem->SetChecked(PR_TRUE); else pnsMenuItem->SetChecked(PR_FALSE); @@ -920,8 +923,9 @@ void nsMenuX::LoadSubMenu( nsIMenu * pParentMenu, nsIContent* inMenuItemContent ) { // if menu should be hidden, bail - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString hidden; + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, hidden); + if ( hidden.EqualsLiteral("true") ) return; nsAutoString menuName; @@ -939,8 +943,9 @@ nsMenuX::LoadSubMenu( nsIMenu * pParentMenu, nsIContent* inMenuItemContent ) pnsMenu->Create(supports, menuName, EmptyString(), mManager, docShell, inMenuItemContent); // set if it's enabled or disabled - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString disabled; + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::disabled, disabled); + if ( disabled.EqualsLiteral("true") ) pnsMenu->SetEnabled ( PR_FALSE ); else pnsMenu->SetEnabled ( PR_TRUE ); @@ -956,8 +961,9 @@ void nsMenuX::LoadSeparator ( nsIContent* inMenuItemContent ) { // if item should be hidden, bail - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString hidden; + inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, hidden); + if ( hidden.EqualsLiteral("true") ) return; AddSeparator(); @@ -1225,11 +1231,12 @@ nsMenuX :: CountVisibleBefore ( PRUint32* outVisibleBefore ) nsCOMPtr menuContent; currMenu->GetMenuContent(getter_AddRefs(menuContent)); if ( menuContent ) { + nsAutoString hiddenValue, collapsedValue; + menuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, hiddenValue); + menuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::collapsed, collapsedValue); if ( menuContent->GetChildCount() > 0 || - !menuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) && - !menuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, - nsWidgetAtoms::_true, eCaseMatters)) + !hiddenValue.EqualsLiteral("true") && + !collapsedValue.EqualsLiteral("true")) ++(*outVisibleBefore); } } @@ -1263,8 +1270,9 @@ nsMenuX::AttributeChanged(nsIDocument *aDocument, PRInt32 aNameSpaceID, nsIAtom if (aAttribute == nsWidgetAtoms::disabled) { SetRebuild(PR_TRUE); - if (mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)) + nsAutoString valueString; + mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::disabled, valueString); + if (valueString.EqualsLiteral("true")) SetEnabled(PR_FALSE); else SetEnabled(PR_TRUE); @@ -1298,10 +1306,11 @@ nsMenuX::AttributeChanged(nsIDocument *aDocument, PRInt32 aNameSpaceID, nsIAtom else if (aAttribute == nsWidgetAtoms::hidden || aAttribute == nsWidgetAtoms::collapsed) { SetRebuild(PR_TRUE); - if (mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) || - mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, - nsWidgetAtoms::_true, eCaseMatters)) { + nsAutoString hiddenValue, collapsedValue; + mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, hiddenValue); + mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::collapsed, collapsedValue); + + if (hiddenValue.EqualsLiteral("true") || collapsedValue.EqualsLiteral("true")) { if ( mVisible ) { if ( menubarParent ) { PRUint32 indexToRemove = 0; diff --git a/mozilla/widget/src/mac/nsNativeThemeMac.cpp b/mozilla/widget/src/mac/nsNativeThemeMac.cpp index 881c7c1f8e6..15774806d0c 100644 --- a/mozilla/widget/src/mac/nsNativeThemeMac.cpp +++ b/mozilla/widget/src/mac/nsNativeThemeMac.cpp @@ -56,7 +56,6 @@ #include "nsRegionPool.h" #include "nsGfxUtils.h" #include "nsUnicharUtils.h" -#include "nsWidgetAtoms.h" static PRBool sInitializedBorders = PR_FALSE; @@ -113,6 +112,8 @@ nsNativeThemeMac::nsNativeThemeMac() sListboxBGTransparent = PR_TRUE; sTextfieldDisabledBGColorID = nsILookAndFeel::eColor__moz_field; } + + mMenuActiveAtom = do_GetAtom("_moz-menuactive"); } nsNativeThemeMac::~nsNativeThemeMac() @@ -374,8 +375,7 @@ nsNativeThemeMac::DrawWidgetBackground(nsIRenderingContext* aContext, nsIFrame* case NS_THEME_MENUITEM: ::SetThemeBackground(kThemeBrushDialogBackgroundActive, 24, true); - DrawMenuItem(macRect, kThemeMenuItemPlain, IsDisabled(aFrame), - CheckBooleanAttr(aFrame, nsWidgetAtoms::mozmenuactive)); + DrawMenuItem(macRect, kThemeMenuItemPlain, IsDisabled(aFrame), CheckBooleanAttr(aFrame, mMenuActiveAtom)); ::SetThemeBackground(kThemeBrushWhite, 24, true); break; @@ -764,11 +764,9 @@ nsNativeThemeMac::WidgetStateChanged(nsIFrame* aFrame, PRUint8 aWidgetType, // Check the attribute to see if it's relevant. // disabled, checked, dlgtype, default, etc. *aShouldRepaint = PR_FALSE; - if (aAttribute == nsWidgetAtoms::disabled || - aAttribute == nsWidgetAtoms::checked || - aAttribute == nsWidgetAtoms::selected || - aAttribute == nsWidgetAtoms::mozmenuactive || - aAttribute == nsWidgetAtoms::sortdirection) + if (aAttribute == mDisabledAtom || aAttribute == mCheckedAtom || + aAttribute == mSelectedAtom || aAttribute == mMenuActiveAtom || + aAttribute == mSortDirectionAtom) *aShouldRepaint = PR_TRUE; } diff --git a/mozilla/widget/src/mac/nsNativeThemeMac.h b/mozilla/widget/src/mac/nsNativeThemeMac.h index 33ffdc09e7c..3f7d6e469cf 100644 --- a/mozilla/widget/src/mac/nsNativeThemeMac.h +++ b/mozilla/widget/src/mac/nsNativeThemeMac.h @@ -121,4 +121,5 @@ protected: private: ThemeEraseUPP mEraseProc; + nsCOMPtr mMenuActiveAtom; }; diff --git a/mozilla/widget/src/windows/Makefile.in b/mozilla/widget/src/windows/Makefile.in index 0fdd945b38b..cc8de942451 100644 --- a/mozilla/widget/src/windows/Makefile.in +++ b/mozilla/widget/src/windows/Makefile.in @@ -117,12 +117,7 @@ endif # BUILD_STATIC_LIBS EXPORTS = nsdefs.h -LOCAL_INCLUDES = \ - -I. \ - -I$(srcdir)/../xpwidgets \ - -I$(srcdir)/../../public \ - -I$(srcdir) \ - $(NULL) +LOCAL_INCLUDES = -I. -I$(srcdir)/../xpwidgets -I$(srcdir) FORCE_STATIC_LIB = 1 diff --git a/mozilla/widget/src/windows/nsNativeThemeWin.cpp b/mozilla/widget/src/windows/nsNativeThemeWin.cpp index 2dc469d4c35..a5f767ce22f 100644 --- a/mozilla/widget/src/windows/nsNativeThemeWin.cpp +++ b/mozilla/widget/src/windows/nsNativeThemeWin.cpp @@ -56,7 +56,6 @@ #include "nsIDOMHTMLInputElement.h" #include "nsIMenuFrame.h" #include "nsIMenuParent.h" -#include "nsWidgetAtoms.h" #include #ifdef MOZ_CAIRO_GFX @@ -203,6 +202,11 @@ nsNativeThemeWin::nsNativeThemeWin() { getThemeColor = (GetThemeColorPtr)GetProcAddress(mThemeDLL, "GetThemeColor"); } + mInputAtom = do_GetAtom("input"); + mInputCheckedAtom = do_GetAtom("_moz-input-checked"); + mTypeAtom = do_GetAtom("type"); + mMenuActiveAtom = do_GetAtom("_moz-menuactive"); + UpdateConfig(); // If there is a relevant change in forms.css for windows platform, @@ -384,8 +388,7 @@ nsNativeThemeWin::GetThemePartAndState(nsIFrame* aFrame, PRUint8 aWidgetType, // XXXdwh This check will need to be more complicated, since HTML radio groups // use checked, but XUL radio groups use selected. There will need to be an // IsNodeOfType test for HTML vs. XUL here. - nsIAtom* atom = (aWidgetType == NS_THEME_CHECKBOX) ? nsWidgetAtoms::checked - : nsWidgetAtoms::selected; + nsIAtom* atom = (aWidgetType == NS_THEME_CHECKBOX) ? mCheckedAtom : mSelectedAtom; PRBool isHTML = PR_FALSE; PRBool isHTMLChecked = PR_FALSE; @@ -1067,11 +1070,9 @@ nsNativeThemeWin::WidgetStateChanged(nsIFrame* aFrame, PRUint8 aWidgetType, // Check the attribute to see if it's relevant. // disabled, checked, dlgtype, default, etc. *aShouldRepaint = PR_FALSE; - if (aAttribute == nsWidgetAtoms::disabled || - aAttribute == nsWidgetAtoms::checked || - aAttribute == nsWidgetAtoms::selected || - aAttribute == nsWidgetAtoms::readonly || - aAttribute == nsWidgetAtoms::mozmenuactive) + if (aAttribute == mDisabledAtom || aAttribute == mCheckedAtom || + aAttribute == mSelectedAtom || aAttribute == mReadOnlyAtom || + aAttribute == mMenuActiveAtom) *aShouldRepaint = PR_TRUE; } @@ -1519,7 +1520,7 @@ nsresult nsNativeThemeWin::ClassicGetThemePartAndState(nsIFrame* aFrame, PRUint8 aState |= DFCS_RTL; } - if (CheckBooleanAttr(aFrame, nsWidgetAtoms::mozmenuactive)) + if (CheckBooleanAttr(aFrame, mMenuActiveAtom)) aState |= DFCS_HOT; // Only menu items of the appropriate type may have tick or bullet marks. diff --git a/mozilla/widget/src/windows/nsNativeThemeWin.h b/mozilla/widget/src/windows/nsNativeThemeWin.h index 60828a43df1..fae0d6e3811 100644 --- a/mozilla/widget/src/windows/nsNativeThemeWin.h +++ b/mozilla/widget/src/windows/nsNativeThemeWin.h @@ -127,6 +127,11 @@ private: HANDLE mHeaderTheme; BOOL mFlatMenus; + + nsCOMPtr mInputAtom; + nsCOMPtr mInputCheckedAtom; + nsCOMPtr mTypeAtom; + nsCOMPtr mMenuActiveAtom; }; // Creator function diff --git a/mozilla/widget/src/xpwidgets/Makefile.in b/mozilla/widget/src/xpwidgets/Makefile.in index b177a90e816..8b5672d95c6 100644 --- a/mozilla/widget/src/xpwidgets/Makefile.in +++ b/mozilla/widget/src/xpwidgets/Makefile.in @@ -77,12 +77,15 @@ CPPSRCS = \ nsPrimitiveHelpers.cpp \ nsXPLookAndFeel.cpp \ nsClipboardHelper.cpp \ - nsPrintOptionsImpl.cpp \ + nsPrintOptionsImpl.cpp \ nsPrintSettingsImpl.cpp \ - nsPrintSession.cpp \ - nsWidgetAtoms.cpp \ + nsPrintSession.cpp \ $(NULL) +ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) +CPPSRCS += nsWidgetAtoms.cpp +endif + ifneq (,$(filter beos os2 mac qt cocoa windows,$(MOZ_WIDGET_TOOLKIT))) CPPSRCS += nsBaseClipboard.cpp endif @@ -98,7 +101,6 @@ endif LOCAL_INCLUDES = \ -I$(srcdir)/../$(MOZ_WIDGET_TOOLKIT) \ - -I$(srcdir)/../../public \ -I$(srcdir) \ $(NULL) diff --git a/mozilla/widget/src/xpwidgets/nsNativeTheme.cpp b/mozilla/widget/src/xpwidgets/nsNativeTheme.cpp index 80c92b4c21e..3fd3fcf96be 100644 --- a/mozilla/widget/src/xpwidgets/nsNativeTheme.cpp +++ b/mozilla/widget/src/xpwidgets/nsNativeTheme.cpp @@ -73,6 +73,17 @@ nsILookAndFeel::nsColorID nsNativeTheme::sListboxDisabledBGColorID = nsILookAndF nsNativeTheme::nsNativeTheme() { + mDisabledAtom = do_GetAtom("disabled"); + mCheckedAtom = do_GetAtom("checked"); + mSelectedAtom = do_GetAtom("selected"); + mFocusedAtom = do_GetAtom("focused"); + mFirstTabAtom = do_GetAtom("first-tab"); + mDefaultAtom = do_GetAtom("default"); + mValueAtom = do_GetAtom("value"); + mModeAtom = do_GetAtom("mode"); + mClassAtom = do_GetAtom("class"); + mSortDirectionAtom = do_GetAtom("sortDirection"); + mReadOnlyAtom = do_GetAtom("readonly"); } nsIPresShell * @@ -146,6 +157,16 @@ nsNativeTheme::CheckIntAttr(nsIFrame* aFrame, nsIAtom* aAtom) return value; } +PRBool +nsNativeTheme::GetAttr(nsIFrame* aFrame, nsIAtom* aAtom, nsAString& attrValue) +{ + if (!aFrame) + return PR_FALSE; + + aFrame->GetContent()->GetAttr(kNameSpaceID_None, aAtom, attrValue); + return !attrValue.IsEmpty(); +} + PRBool nsNativeTheme::GetCheckedOrSelected(nsIFrame* aFrame, PRBool aCheckSelected) { @@ -168,8 +189,7 @@ nsNativeTheme::GetCheckedOrSelected(nsIFrame* aFrame, PRBool aCheckSelected) } } - return CheckBooleanAttr(aFrame, aCheckSelected ? nsWidgetAtoms::selected - : nsWidgetAtoms::checked); + return CheckBooleanAttr(aFrame, aCheckSelected ? mSelectedAtom : mCheckedAtom); } static void @@ -297,47 +317,3 @@ nsNativeTheme::IsWidgetStyled(nsPresContext* aPresContext, nsIFrame* aFrame, return PR_FALSE; } - -// treeheadercell: -nsNativeTheme::TreeSortDirection -nsNativeTheme::GetTreeSortDirection(nsIFrame* aFrame) -{ - if (!aFrame) - return eTreeSortDirection_Natural; - - static nsIContent::AttrValuesArray strings[] = - {&nsWidgetAtoms::descending, &nsWidgetAtoms::ascending, nsnull}; - switch (aFrame->GetContent()->FindAttrValueIn(kNameSpaceID_None, - nsWidgetAtoms::sortdirection, - strings, eCaseMatters)) { - case 0: return eTreeSortDirection_Descending; - case 1: return eTreeSortDirection_Ascending; - } - - return eTreeSortDirection_Natural; -} - -// tab: -PRBool -nsNativeTheme::IsBottomTab(nsIFrame* aFrame) -{ - if (!aFrame) - return PR_FALSE; - - nsAutoString classStr; - aFrame->GetContent()->GetAttr(kNameSpaceID_None, nsWidgetAtoms::_class, classStr); - return !classStr.IsEmpty() && classStr.Find("tab-bottom") != kNotFound; -} - -// progressbar: -PRBool -nsNativeTheme::IsIndeterminateProgress(nsIFrame* aFrame) -{ - if (!aFrame) - return PR_FALSE; - -// return aFrame->GetContent()->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::mode, -// NS_LITERAL_STRING("undetermined"), -// eCaseMatters); - return PR_TRUE; -} diff --git a/mozilla/widget/src/xpwidgets/nsNativeTheme.h b/mozilla/widget/src/xpwidgets/nsNativeTheme.h index a2a512de1fa..1c767644178 100644 --- a/mozilla/widget/src/xpwidgets/nsNativeTheme.h +++ b/mozilla/widget/src/xpwidgets/nsNativeTheme.h @@ -45,7 +45,6 @@ #include "nsString.h" #include "nsMargin.h" #include "nsILookAndFeel.h" -#include "nsWidgetAtoms.h" class nsIFrame; class nsIPresShell; @@ -76,12 +75,12 @@ class nsNativeTheme // all widgets: PRBool IsDisabled(nsIFrame* aFrame) { - return CheckBooleanAttr(aFrame, nsWidgetAtoms::disabled); + return CheckBooleanAttr(aFrame, mDisabledAtom); } // button: PRBool IsDefaultButton(nsIFrame* aFrame) { - return CheckBooleanAttr(aFrame, nsWidgetAtoms::_default); + return CheckBooleanAttr(aFrame, mDefaultAtom); } // checkbox: @@ -95,35 +94,55 @@ class nsNativeTheme } PRBool IsFocused(nsIFrame* aFrame) { - return CheckBooleanAttr(aFrame, nsWidgetAtoms::focused); + return CheckBooleanAttr(aFrame, mFocusedAtom); } // tab: PRBool IsSelectedTab(nsIFrame* aFrame) { - return CheckBooleanAttr(aFrame, nsWidgetAtoms::selected); + return CheckBooleanAttr(aFrame, mSelectedAtom); } // toolbarbutton: PRBool IsCheckedButton(nsIFrame* aFrame) { - return CheckBooleanAttr(aFrame, nsWidgetAtoms::checked); + return CheckBooleanAttr(aFrame, mCheckedAtom); } // treeheadercell: - TreeSortDirection GetTreeSortDirection(nsIFrame* aFrame); + TreeSortDirection GetTreeSortDirection(nsIFrame* aFrame) { + nsAutoString sortdir; + if (GetAttr(aFrame, mSortDirectionAtom, sortdir)) { + if (sortdir.EqualsLiteral("descending")) + return eTreeSortDirection_Descending; + else if (sortdir.EqualsLiteral("ascending")) + return eTreeSortDirection_Ascending; + } + + return eTreeSortDirection_Natural; + } // tab: - PRBool IsBottomTab(nsIFrame* aFrame); + PRBool IsBottomTab(nsIFrame* aFrame) { + nsAutoString classStr; + if (GetAttr(aFrame, mClassAtom, classStr)) + return classStr.Find("tab-bottom") != kNotFound; + return PR_FALSE; + } // progressbar: - PRBool IsIndeterminateProgress(nsIFrame* aFrame); + PRBool IsIndeterminateProgress(nsIFrame* aFrame) { + nsAutoString mode; + if (GetAttr(aFrame, mModeAtom, mode)) + return mode.EqualsLiteral("undetermined"); + return PR_FALSE; + } PRInt32 GetProgressValue(nsIFrame* aFrame) { - return CheckIntAttr(aFrame, nsWidgetAtoms::value); + return CheckIntAttr(aFrame, mValueAtom); } // textfield: PRBool IsReadOnly(nsIFrame* aFrame) { - return CheckBooleanAttr(aFrame, nsWidgetAtoms::readonly); + return CheckBooleanAttr(aFrame, mReadOnlyAtom); } // These are used by nsNativeThemeGtk @@ -132,9 +151,20 @@ class nsNativeTheme PRBool CheckBooleanAttr(nsIFrame* aFrame, nsIAtom* aAtom); private: + PRBool GetAttr(nsIFrame* aFrame, nsIAtom* aAtom, nsAString& attrValue); PRBool GetCheckedOrSelected(nsIFrame* aFrame, PRBool aCheckSelected); protected: + // these are available to subclasses because they are useful in + // implementing WidgetStateChanged() + nsCOMPtr mDisabledAtom; + nsCOMPtr mCheckedAtom; + nsCOMPtr mSelectedAtom; + nsCOMPtr mReadOnlyAtom; + nsCOMPtr mFirstTabAtom; + nsCOMPtr mFocusedAtom; + nsCOMPtr mSortDirectionAtom; + // these should be set to appropriate platform values by the subclass, to // match the values in forms.css. These defaults match forms.css static nsMargin sButtonBorderSize; @@ -157,4 +187,10 @@ protected: static PRBool sListboxBGTransparent; static nsILookAndFeel::nsColorID sListboxBGColorID; static nsILookAndFeel::nsColorID sListboxDisabledBGColorID; + +private: + nsCOMPtr mDefaultAtom; + nsCOMPtr mValueAtom; + nsCOMPtr mModeAtom; + nsCOMPtr mClassAtom; };