xcodemacoscocoabutton

Add buttons to Mac window Title Bars, system-wide


I want to be able to add a button to the title bar of all windows that open on a Mac.

The button will go on the right hand side, opposite the X - + buttons.

This is asked about windows of my app here:
How can I create Yosemite-style unified toolbar in Interface Builder?

But I want the button to appear on all windows, of any app, that are opened on the Mac. Obviously, this will only happen once the user has installed this program.

I understand that this is essentially "plugging into" the OS's UI, but I have seen other apps do this, which makes me feel that it is do-able.

Here is screenshot where I want the button:

Screenshot


Solution

  • This is really a two-part question. As for how to get a button up there, I’d suggest using -[NSWindow standardWindowButton:] to get an existing window button and its superview (i. e. the title bar):

    NSButton *closeButton = [window standardWindowButton:NSWindowCloseButton]; // Get the existing close button of the window. Check documentation for the other window buttons.
    NSView *titleBarView = closeButton.superview; // Get the view that encloses that standard window buttons.
    NSButton *myButton = …; // Create custom button to be added to the title bar.
    myButton.frame = …; // Set the appropriate frame for your button. Use titleBarView.bounds to determine the bounding rect of the view that encloses the standard window buttons.
    [titleBarView addSubview:myButton]; // Add the custom button to the title bar.
    

    The plugging-in is probably easiest to do as a SIMBL plug-in.