mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 11:25:00 +00:00
Bug 1037433 - Update the image of an NSStatusItem when the image of its corresponding NSMenuItem changes. r=smichaud
This commit is contained in:
parent
42401caa11
commit
f4ad7f7695
@ -21,13 +21,20 @@ public:
|
||||
// nsMenuObjectX
|
||||
nsMenuObjectTypeX MenuObjectType() { return eStandaloneNativeMenuObjectType; }
|
||||
void * NativeData() { return mMenu != nullptr ? mMenu->NativeData() : nullptr; }
|
||||
virtual void IconUpdated() MOZ_OVERRIDE;
|
||||
|
||||
nsMenuX * GetMenuXObject() { return mMenu; }
|
||||
|
||||
// If this menu is the menu of a system status bar item (NSStatusItem),
|
||||
// let the menu know about the status item so that it can propagate
|
||||
// any icon changes to the status item.
|
||||
void SetContainerStatusBarItem(NSStatusItem* aItem);
|
||||
|
||||
protected:
|
||||
virtual ~nsStandaloneNativeMenu();
|
||||
|
||||
nsMenuX * mMenu;
|
||||
NSStatusItem* mContainerStatusBarItem;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -18,6 +18,7 @@ NS_IMPL_ISUPPORTS_INHERITED(nsStandaloneNativeMenu, nsMenuGroupOwnerX,
|
||||
|
||||
nsStandaloneNativeMenu::nsStandaloneNativeMenu()
|
||||
: mMenu(nullptr)
|
||||
, mContainerStatusBarItem(nil)
|
||||
{
|
||||
}
|
||||
|
||||
@ -197,3 +198,18 @@ nsStandaloneNativeMenu::ForceUpdateNativeMenuAt(const nsAString& indexString)
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
nsStandaloneNativeMenu::IconUpdated()
|
||||
{
|
||||
if (mContainerStatusBarItem) {
|
||||
[mContainerStatusBarItem setImage:[mMenu->NativeMenuItem() image]];
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsStandaloneNativeMenu::SetContainerStatusBarItem(NSStatusItem* aItem)
|
||||
{
|
||||
mContainerStatusBarItem = aItem;
|
||||
IconUpdated();
|
||||
}
|
||||
|
@ -53,10 +53,17 @@ nsSystemStatusBarCocoa::StatusItem::StatusItem(nsStandaloneNativeMenu* aMenu)
|
||||
mStatusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];
|
||||
[mStatusItem setMenu:nativeMenu];
|
||||
[mStatusItem setHighlightMode: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);
|
||||
}
|
||||
|
||||
nsSystemStatusBarCocoa::StatusItem::~StatusItem()
|
||||
{
|
||||
mMenu->SetContainerStatusBarItem(nil);
|
||||
[[NSStatusBar systemStatusBar] removeStatusItem:mStatusItem];
|
||||
[mStatusItem release];
|
||||
mStatusItem = nil;
|
||||
|
Loading…
Reference in New Issue
Block a user