OBMenuBarWindow is an NSWindow subclass that adds the ability to attach the window to an icon in the menu bar in OS X.
It emulates much of the look and feel of NSPopover but retains the appearance and functionality of a regular window, including the title bar and traffic light controls. You can drag the window to and from the menu bar icon to attach and detach it from the menu bar.
Notes:
- OBMenuBarWindow is compatible with OS X 10.7+.
- It does not use any private APIs, so it is Mac App Store compatible.
- If you want the window to be usable while another application is in full-screen mode, create a new entry in your application’s
Info.plist
file forLSUIElement
of Boolean type and set its value toYES
. A side-effect of doing this is that the application’s dock icon will be hidden. - OBMenuBarWindow does not support textured windows or standard toolbars.
- You can hide the "traffic light" controls when the window is attached to the menu bar, if desired (see Window properties below).
- You can control the height of the title bar and the arrow size (see Window properties below).
- You can observe the
OBMenuBarWindowDidAttachToMenuBar
andOBMenuBarWindowDidDetachFromMenuBar
notifications from the window object to be notified when the user attaches or detaches the window from the menu bar. - If the user resizes the window while it is attached to the menu bar, it will resize horizontally in a symmetrical manner around the center to give a natural user experience.
CocoaPods is a dependency manager for Objective-C projects.
Add the project to your Podfile:
pod "OBMenuBarWindow"
Download the source and add OBMenuBarWindow.h
and OBMenuBarWindow.m
to your project.
- Set your window's class to
OBMenuBarWindow
. - Set your window's icon using the
menuBarIcon
property. - Set the
hasMenuBarIcon
property toYES
.
Menu bar icon
hasMenuBarIcon
- whether the window has a menu bar icon (BOOL
, default isNO
).menuBarIcon
- the menu bar icon image (NSImage
).highlightedMenuBarIcon
- the highlighted version of the menu bar icon (NSImage
).statusItem
- the status item associated with the window (NSStatusItem
).
Attaching to the menu bar
attachedToMenuBar
- whether the window is attached to the menu bar (BOOL
, default isNO
).isDetachable
- whether the window can be detached from the menu bar (BOOL
, default isYES
).hideWindowControlsWhenAttached
- whether to hide the window "traffic lights" when it is attached to the menu bar (BOOL
, default isYES
).snapDistance
- the threshold distance between the centre of the title bar and the menu bar icon at which to "snap" the window to the menu bar when dragging (CGFloat
, default is 30 pixels).distanceFromMenuBar
- the distance between the window and the menu bar when the window is attached (CGFloat
, default is 0 pixels).arrowSize
- the size of the arrow that points to the menu bar icon (NSSize
, default is{20, 10}
).
Title bar
titleBarHeight
- the height of the title bar (CGFloat
, default is 22 pixels).titleTextField
- the window title text field (NSTextField
).toolbarView
- the view containing the window's toolbar items (NSView
).
Read the Documentation.
OBMenuBarWindow was created by Oliver Bolton.
OBMenuBarWindow is licensed under the Modified BSD License. See the LICENSE
file for more information.