From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- widget/cocoa/nsSystemStatusBarCocoa.mm | 69 ++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 widget/cocoa/nsSystemStatusBarCocoa.mm (limited to 'widget/cocoa/nsSystemStatusBarCocoa.mm') diff --git a/widget/cocoa/nsSystemStatusBarCocoa.mm b/widget/cocoa/nsSystemStatusBarCocoa.mm new file mode 100644 index 0000000000..6261a4b0c4 --- /dev/null +++ b/widget/cocoa/nsSystemStatusBarCocoa.mm @@ -0,0 +1,69 @@ +/* -*- Mode: c++; tab-width: 2; indent-tabs-mode: nil; -*- */ +/* 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/. */ + +#import + +#include "nsComponentManagerUtils.h" +#include "nsSystemStatusBarCocoa.h" +#include "NativeMenuMac.h" +#include "nsObjCExceptions.h" +#include "mozilla/dom/Element.h" + +using mozilla::dom::Element; +using mozilla::widget::NativeMenuMac; + +NS_IMPL_ISUPPORTS(nsSystemStatusBarCocoa, nsISystemStatusBar) + +NS_IMETHODIMP +nsSystemStatusBarCocoa::AddItem(Element* aElement) { + if (!aElement->IsAnyOfXULElements(nsGkAtoms::menu, nsGkAtoms::menupopup)) { + return NS_ERROR_FAILURE; + } + + RefPtr menu = new NativeMenuMac(aElement); + + nsCOMPtr keyPtr = aElement; + mItems.InsertOrUpdate(keyPtr, mozilla::MakeUnique(menu)); + + return NS_OK; +} + +NS_IMETHODIMP +nsSystemStatusBarCocoa::RemoveItem(Element* aElement) { + mItems.Remove(aElement); + return NS_OK; +} + +nsSystemStatusBarCocoa::StatusItem::StatusItem(NativeMenuMac* aMenu) : mMenu(aMenu) { + NS_OBJC_BEGIN_TRY_ABORT_BLOCK; + + MOZ_COUNT_CTOR(nsSystemStatusBarCocoa::StatusItem); + + mStatusItem = + [[NSStatusBar.systemStatusBar statusItemWithLength:NSSquareStatusItemLength] retain]; + mStatusItem.menu = mMenu->NativeNSMenu(); + mStatusItem.highlightMode = YES; + + // We want the status item to get its image from menu item that mMenu was + // initialized with. Icon loads are asynchronous, so we need to let the menu + // know about the item so that it can update its icon as soon as it has + // loaded. + mMenu->SetContainerStatusBarItem(mStatusItem); + + NS_OBJC_END_TRY_ABORT_BLOCK; +} + +nsSystemStatusBarCocoa::StatusItem::~StatusItem() { + NS_OBJC_BEGIN_TRY_ABORT_BLOCK; + + mMenu->SetContainerStatusBarItem(nil); + [NSStatusBar.systemStatusBar removeStatusItem:mStatusItem]; + [mStatusItem release]; + mStatusItem = nil; + + MOZ_COUNT_DTOR(nsSystemStatusBarCocoa::StatusItem); + + NS_OBJC_END_TRY_ABORT_BLOCK; +} -- cgit v1.2.3