summaryrefslogtreecommitdiffstats
path: root/widget/gtk/nsMenuSeparator.cpp
diff options
context:
space:
mode:
authorMoonchild <moonchild@palemoon.org>2020-06-09 16:22:26 +0200
committerGitHub <noreply@github.com>2020-06-09 16:22:26 +0200
commit907530e8669d40c1ff59c2855afcf669fe724263 (patch)
tree40312a1ab94ab5e6a3d155e62136309ff4b5acfd /widget/gtk/nsMenuSeparator.cpp
parentad6ce890dc38fe71df1c55958aed3128a711fb5a (diff)
parentd18faf81938c947f1d02feab2c394b8135f88d8f (diff)
downloadUXP-907530e8669d40c1ff59c2855afcf669fe724263.tar
UXP-907530e8669d40c1ff59c2855afcf669fe724263.tar.gz
UXP-907530e8669d40c1ff59c2855afcf669fe724263.tar.lz
UXP-907530e8669d40c1ff59c2855afcf669fe724263.tar.xz
UXP-907530e8669d40c1ff59c2855afcf669fe724263.zip
Merge pull request #1584 from Lootyhoof/global-menu
Add global menubar support for GTK
Diffstat (limited to 'widget/gtk/nsMenuSeparator.cpp')
-rw-r--r--widget/gtk/nsMenuSeparator.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/widget/gtk/nsMenuSeparator.cpp b/widget/gtk/nsMenuSeparator.cpp
new file mode 100644
index 000000000..893c5c7f0
--- /dev/null
+++ b/widget/gtk/nsMenuSeparator.cpp
@@ -0,0 +1,74 @@
+/* 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/. */
+
+#include "mozilla/Assertions.h"
+#include "mozilla/Move.h"
+#include "nsAutoPtr.h"
+#include "nsCRT.h"
+#include "nsGkAtoms.h"
+#include "nsStyleContext.h"
+
+#include "nsDbusmenu.h"
+
+#include "nsMenuContainer.h"
+#include "nsMenuSeparator.h"
+
+using namespace mozilla;
+
+void
+nsMenuSeparator::InitializeNativeData() {
+ dbusmenu_menuitem_property_set(GetNativeData(),
+ DBUSMENU_MENUITEM_PROP_TYPE,
+ "separator");
+}
+
+void
+nsMenuSeparator::Update(nsStyleContext* aContext) {
+ UpdateVisibility(aContext);
+}
+
+bool
+nsMenuSeparator::IsCompatibleWithNativeData(DbusmenuMenuitem* aNativeData) const {
+ return nsCRT::strcmp(dbusmenu_menuitem_property_get(aNativeData,
+ DBUSMENU_MENUITEM_PROP_TYPE),
+ "separator") == 0;
+}
+
+nsMenuObject::PropertyFlags
+nsMenuSeparator::SupportedProperties() const {
+ return static_cast<nsMenuObject::PropertyFlags>(
+ nsMenuObject::ePropVisible |
+ nsMenuObject::ePropType
+ );
+}
+
+void
+nsMenuSeparator::OnAttributeChanged(nsIContent* aContent, nsIAtom* aAttribute) {
+ MOZ_ASSERT(aContent == ContentNode(), "Received an event that wasn't meant for us!");
+
+ if (!Parent()->IsBeingDisplayed()) {
+ return;
+ }
+
+ if (aAttribute == nsGkAtoms::hidden ||
+ aAttribute == nsGkAtoms::collapsed) {
+ RefPtr<nsStyleContext> sc = GetStyleContext();
+ UpdateVisibility(sc);
+ }
+}
+
+nsMenuSeparator::nsMenuSeparator(nsMenuContainer* aParent,
+ nsIContent* aContent) :
+ nsMenuObject(aParent, aContent) {
+ MOZ_COUNT_CTOR(nsMenuSeparator);
+}
+
+nsMenuSeparator::~nsMenuSeparator() {
+ MOZ_COUNT_DTOR(nsMenuSeparator);
+}
+
+nsMenuObject::EType
+nsMenuSeparator::Type() const {
+ return eType_MenuItem;
+}