mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 05:41:12 +00:00
856ed80bda
Move the implementation of the XBL tooltip to C++ so the element can safely be created during native anonymous content creation. The 'mouseover' and 'mouseout' event handlers were not moved as they appear to be legacy code that is no longer needed. A number of tests started perma-failing after this patch. Most failures were caused by a timing change where plugins sometimes load after the document "load" event. Many of the failures had intermittents associated with them and the tests were not waiting for plugins to load before starting. The test "test_weakmap_keys_preserved2.xul" had a bug where it was possible for it to finish before all the tests were run. Differential Revision: https://phabricator.services.mozilla.com/D5065 --HG-- extra : moz-landing-system : lando
120 lines
3.1 KiB
C++
120 lines
3.1 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* 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/. */
|
|
|
|
#ifndef XULPopupElement_h__
|
|
#define XULPopupElement_h__
|
|
|
|
#include "mozilla/Attributes.h"
|
|
#include "mozilla/ErrorResult.h"
|
|
#include "nsCycleCollectionParticipant.h"
|
|
#include "nsWrapperCache.h"
|
|
#include "nsString.h"
|
|
#include "nsXULElement.h"
|
|
|
|
struct JSContext;
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
class DOMRect;
|
|
class Element;
|
|
class Event;
|
|
class StringOrOpenPopupOptions;
|
|
|
|
nsXULElement*
|
|
NS_NewXULPopupElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
|
|
|
|
class XULPopupElement : public nsXULElement
|
|
{
|
|
private:
|
|
nsIFrame* GetFrame(bool aFlushLayout);
|
|
|
|
public:
|
|
explicit XULPopupElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo)
|
|
: nsXULElement(std::move(aNodeInfo))
|
|
{
|
|
}
|
|
|
|
void GetLabel(DOMString& aValue) const
|
|
{
|
|
GetXULAttr(nsGkAtoms::label, aValue);
|
|
}
|
|
void SetLabel(const nsAString& aValue, ErrorResult& rv)
|
|
{
|
|
SetXULAttr(nsGkAtoms::label, aValue, rv);
|
|
}
|
|
|
|
void GetPosition(DOMString& aValue) const
|
|
{
|
|
GetXULAttr(nsGkAtoms::position, aValue);
|
|
}
|
|
void SetPosition(const nsAString& aValue, ErrorResult& rv)
|
|
{
|
|
SetXULAttr(nsGkAtoms::position, aValue, rv);
|
|
}
|
|
|
|
bool AutoPosition();
|
|
|
|
void SetAutoPosition(bool aShouldAutoPosition);
|
|
|
|
void OpenPopup(Element* aAnchorElement,
|
|
const StringOrOpenPopupOptions& aOptions,
|
|
int32_t aXPos,
|
|
int32_t aYPos,
|
|
bool aIsContextMenu, bool aAttributesOverride,
|
|
Event* aTriggerEvent);
|
|
|
|
void OpenPopupAtScreen(int32_t aXPos,
|
|
int32_t aYPos,
|
|
bool aIsContextMenu,
|
|
Event* aTriggerEvent);
|
|
|
|
void OpenPopupAtScreenRect(const nsAString& aPosition,
|
|
int32_t aXPos, int32_t aYPos,
|
|
int32_t aWidth, int32_t aHeight,
|
|
bool aIsContextMenu,
|
|
bool aAttributesOverride,
|
|
Event* aTriggerEvent);
|
|
|
|
void HidePopup(bool aCancel);
|
|
|
|
void GetState(nsString& aState);
|
|
|
|
nsINode* GetTriggerNode() const;
|
|
|
|
Element* GetAnchorNode() const;
|
|
|
|
already_AddRefed<DOMRect> GetOuterScreenRect();
|
|
|
|
void MoveTo(int32_t aLeft, int32_t aTop);
|
|
|
|
void MoveToAnchor(Element* aAnchorElement,
|
|
const nsAString& aPosition,
|
|
int32_t aXPos,
|
|
int32_t aYPos,
|
|
bool aAttributesOverride);
|
|
|
|
void SizeTo(int32_t aWidth, int32_t aHeight);
|
|
|
|
void GetAlignmentPosition(nsString& positionStr);
|
|
|
|
int32_t AlignmentOffset();
|
|
|
|
void SetConstraintRect(DOMRectReadOnly& aRect);
|
|
|
|
protected:
|
|
virtual ~XULPopupElement()
|
|
{
|
|
}
|
|
|
|
JSObject* WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto) override;
|
|
};
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif // XULPopupElement_h
|