diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /layout/xul/nsXULLabelFrame.cpp | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'layout/xul/nsXULLabelFrame.cpp')
-rw-r--r-- | layout/xul/nsXULLabelFrame.cpp | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/layout/xul/nsXULLabelFrame.cpp b/layout/xul/nsXULLabelFrame.cpp new file mode 100644 index 000000000..22b875461 --- /dev/null +++ b/layout/xul/nsXULLabelFrame.cpp @@ -0,0 +1,116 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* derived class of nsBlockFrame used for xul:label elements */ + +#include "mozilla/EventStateManager.h" +#include "nsXULLabelFrame.h" +#include "nsHTMLParts.h" +#include "nsNameSpaceManager.h" + +using namespace mozilla; + +nsIFrame* +NS_NewXULLabelFrame(nsIPresShell* aPresShell, nsStyleContext* aContext) +{ + nsXULLabelFrame* it = new (aPresShell) nsXULLabelFrame(aContext); + + it->AddStateBits(NS_BLOCK_FLOAT_MGR | NS_BLOCK_MARGIN_ROOT); + + return it; +} + +NS_IMPL_FRAMEARENA_HELPERS(nsXULLabelFrame) + +// If you make changes to this function, check its counterparts +// in nsBoxFrame and nsTextBoxFrame +nsresult +nsXULLabelFrame::RegUnregAccessKey(bool aDoReg) +{ + // if we have no content, we can't do anything + if (!mContent) + return NS_ERROR_FAILURE; + + // To filter out <label>s without a control attribute. + // XXXjag a side-effect is that we filter out anonymous <label>s + // in e.g. <menu>, <menuitem>, <button>. These <label>s inherit + // |accesskey| and would otherwise register themselves, overwriting + // the content we really meant to be registered. + if (!mContent->HasAttr(kNameSpaceID_None, nsGkAtoms::control)) + return NS_OK; + + nsAutoString accessKey; + mContent->GetAttr(kNameSpaceID_None, nsGkAtoms::accesskey, accessKey); + + if (accessKey.IsEmpty()) + return NS_OK; + + // With a valid PresContext we can get the ESM + // and register the access key + EventStateManager* esm = PresContext()->EventStateManager(); + + uint32_t key = accessKey.First(); + if (aDoReg) + esm->RegisterAccessKey(mContent, key); + else + esm->UnregisterAccessKey(mContent, key); + + return NS_OK; +} + +///////////////////////////////////////////////////////////////////////////// +// nsIFrame + +void +nsXULLabelFrame::Init(nsIContent* aContent, + nsContainerFrame* aParent, + nsIFrame* aPrevInFlow) +{ + nsBlockFrame::Init(aContent, aParent, aPrevInFlow); + + // register access key + RegUnregAccessKey(true); +} + +void +nsXULLabelFrame::DestroyFrom(nsIFrame* aDestructRoot) +{ + // unregister access key + RegUnregAccessKey(false); + nsBlockFrame::DestroyFrom(aDestructRoot); +} + +nsresult +nsXULLabelFrame::AttributeChanged(int32_t aNameSpaceID, + nsIAtom* aAttribute, + int32_t aModType) +{ + nsresult rv = nsBlockFrame::AttributeChanged(aNameSpaceID, + aAttribute, aModType); + + // If the accesskey changed, register for the new value + // The old value has been unregistered in nsXULElement::SetAttr + if (aAttribute == nsGkAtoms::accesskey || aAttribute == nsGkAtoms::control) + RegUnregAccessKey(true); + + return rv; +} + +nsIAtom* +nsXULLabelFrame::GetType() const +{ + return nsGkAtoms::XULLabelFrame; +} + +///////////////////////////////////////////////////////////////////////////// +// Diagnostics + +#ifdef DEBUG_FRAME_DUMP +nsresult +nsXULLabelFrame::GetFrameName(nsAString& aResult) const +{ + return MakeFrameName(NS_LITERAL_STRING("XULLabel"), aResult); +} +#endif |