tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

XULMenuParentElement.h (2724B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef XULMenuParentElement_h__
      8 #define XULMenuParentElement_h__
      9 
     10 #include "mozilla/Attributes.h"
     11 #include "nsISupports.h"
     12 #include "nsXULElement.h"
     13 
     14 namespace mozilla::dom {
     15 
     16 class KeyboardEvent;
     17 class XULButtonElement;
     18 
     19 nsXULElement* NS_NewXULMenuParentElement(
     20    already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
     21 
     22 class XULMenuParentElement : public nsXULElement {
     23 public:
     24  NS_DECL_ISUPPORTS_INHERITED
     25  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULMenuParentElement, nsXULElement)
     26 
     27  explicit XULMenuParentElement(
     28      already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
     29 
     30  bool IsMenuBar() const { return NodeInfo()->Equals(nsGkAtoms::menubar); }
     31  bool IsMenu() const { return !IsMenuBar(); }
     32 
     33  bool IsLocked() const { return mLocked; }
     34 
     35  void LockMenuUntilClosed(bool aLock);
     36 
     37  bool IsInMenuList() const {
     38    return GetParent() && GetParent()->IsXULElement(nsGkAtoms::menulist);
     39  }
     40 
     41  XULButtonElement* FindMenuWithShortcut(KeyboardEvent&) const;
     42  XULButtonElement* FindMenuWithShortcut(const nsAString& aString,
     43                                         bool& aDoAction) const;
     44  MOZ_CAN_RUN_SCRIPT void HandleEnterKeyPress(WidgetEvent&);
     45 
     46  NS_IMPL_FROMNODE_HELPER(XULMenuParentElement,
     47                          IsAnyOfXULElements(nsGkAtoms::menupopup,
     48                                             nsGkAtoms::panel,
     49                                             nsGkAtoms::tooltip,
     50                                             nsGkAtoms::menubar));
     51 
     52  XULButtonElement* GetActiveMenuChild() const { return mActiveItem.get(); }
     53  enum class ByKey : bool { No, Yes };
     54  MOZ_CAN_RUN_SCRIPT void SetActiveMenuChild(XULButtonElement*,
     55                                             ByKey = ByKey::No);
     56 
     57  XULButtonElement* GetFirstMenuItem() const;
     58  XULButtonElement* GetLastMenuItem() const;
     59 
     60  XULButtonElement* GetNextMenuItemFrom(const XULButtonElement&) const;
     61  XULButtonElement* GetPrevMenuItemFrom(const XULButtonElement&) const;
     62 
     63  enum class Wrap : bool { No, Yes };
     64  XULButtonElement* GetNextMenuItem(Wrap = Wrap::Yes) const;
     65  XULButtonElement* GetPrevMenuItem(Wrap = Wrap::Yes) const;
     66 
     67  XULButtonElement* GetContainingMenu() const;
     68 
     69  MOZ_CAN_RUN_SCRIPT void SelectFirstItem();
     70 
     71 protected:
     72  RefPtr<XULButtonElement> mActiveItem;
     73  bool mLocked = false;
     74 
     75  ~XULMenuParentElement() override;
     76 };
     77 
     78 }  // namespace mozilla::dom
     79 
     80 #endif  // XULMenuParentElement_h