diff options
author | Lootyhoof <lootyhoofer@gmail.com> | 2020-06-06 00:37:29 +0100 |
---|---|---|
committer | Lootyhoof <lootyhoofer@gmail.com> | 2020-06-09 13:41:53 +0100 |
commit | d18faf81938c947f1d02feab2c394b8135f88d8f (patch) | |
tree | 17ad9c1ecb14acd726cb8404c3a82e2781e27253 /widget/gtk/nsMenuItem.h | |
parent | fdb918dea124a6efaf0c86f6d5c2ab1b83013e40 (diff) | |
download | UXP-d18faf81938c947f1d02feab2c394b8135f88d8f.tar UXP-d18faf81938c947f1d02feab2c394b8135f88d8f.tar.gz UXP-d18faf81938c947f1d02feab2c394b8135f88d8f.tar.lz UXP-d18faf81938c947f1d02feab2c394b8135f88d8f.tar.xz UXP-d18faf81938c947f1d02feab2c394b8135f88d8f.zip |
Issue MoonchildProductions/UXP#1578 - Add global menubar support for GTK
Diffstat (limited to 'widget/gtk/nsMenuItem.h')
-rw-r--r-- | widget/gtk/nsMenuItem.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/widget/gtk/nsMenuItem.h b/widget/gtk/nsMenuItem.h new file mode 100644 index 000000000..e81b6e308 --- /dev/null +++ b/widget/gtk/nsMenuItem.h @@ -0,0 +1,77 @@ +/* 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 __nsMenuItem_h__ +#define __nsMenuItem_h__ + +#include "mozilla/Attributes.h" +#include "nsCOMPtr.h" + +#include "nsDbusmenu.h" +#include "nsMenuObject.h" + +#include <glib.h> + +class nsIAtom; +class nsIContent; +class nsStyleContext; +class nsMenuBar; +class nsMenuContainer; + +/* + * This class represents 3 main classes of menuitems: labels, checkboxes and + * radio buttons (with/without an icon) + */ +class nsMenuItem final : public nsMenuObject { +public: + nsMenuItem(nsMenuContainer* aParent, nsIContent* aContent); + ~nsMenuItem() override; + + nsMenuObject::EType Type() const override; + +private: + friend class nsMenuItemUncheckSiblingsRunnable; + + enum { + eMenuItemFlag_ToggleState = (1 << 0) + }; + + enum EMenuItemType { + eMenuItemType_Normal, + eMenuItemType_Radio, + eMenuItemType_CheckBox + }; + + bool IsCheckboxOrRadioItem() const; + + static void item_activated_cb(DbusmenuMenuitem* menuitem, + guint timestamp, + gpointer user_data); + void Activate(uint32_t aTimestamp); + + void CopyAttrFromNodeIfExists(nsIContent* aContent, nsIAtom* aAtom); + void UpdateState(); + void UpdateTypeAndState(); + void UpdateAccel(); + nsMenuBar* MenuBar(); + void UncheckSiblings(); + + void InitializeNativeData() override; + void UpdateContentAttributes() override; + void Update(nsStyleContext* aStyleContext) override; + bool IsCompatibleWithNativeData(DbusmenuMenuitem* aNativeData) const override; + nsMenuObject::PropertyFlags SupportedProperties() const override; + + void OnAttributeChanged(nsIContent* aContent, nsIAtom* aAttribute) override; + + EMenuItemType mType; + + bool mIsChecked; + + bool mNeedsUpdate; + + nsCOMPtr<nsIContent> mKeyContent; +}; + +#endif /* __nsMenuItem_h__ */ |