summaryrefslogtreecommitdiffstats
path: root/widget/gtk/nsMenuItem.h
diff options
context:
space:
mode:
authorLootyhoof <lootyhoofer@gmail.com>2020-06-06 00:37:29 +0100
committerLootyhoof <lootyhoofer@gmail.com>2020-06-09 13:41:53 +0100
commitd18faf81938c947f1d02feab2c394b8135f88d8f (patch)
tree17ad9c1ecb14acd726cb8404c3a82e2781e27253 /widget/gtk/nsMenuItem.h
parentfdb918dea124a6efaf0c86f6d5c2ab1b83013e40 (diff)
downloadUXP-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.h77
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__ */