Proactive Peek & Reveal on Edge Hover

These are two misfeatures that appeared in macOS Sonoma (I believe). They are where a closed sidebar forces its way back into view temporarily, if the mouse comes to rest near the relevant edge of the window.

It’s easy to see how some UI designer thought this was a good idea. Surely if you move the mouse near the edge of the window (or the screen, in fullscreen mode) and rest it there, it’s because you’re looking forlornly for your lost sidebar? What could be more helpful and delightful than your missing sidebar popping into view?!

Unfortunately, they have ignored that fact that there is usually already other GUI controls at the edge of the window, not the least of which being the window edge itself (for drag-resizing of the window). Scrollbars are another common inhabitant of window edges.

“Proactive Peek” is the worst of these two because not only does it change what’s under the mouse cursor just as you’re likely to click, stealing the click away from its true target, but it actually shrinks the window’s visible contents. This leads to layout changes and motion noise, particularly in web pages where it can have knock-on effects like mucking with the scroll position or causing major changes by crossing some “responsive design” threshold.

I’m not the only one to detest this ‘feature’, although it’s hard to know the sentiments of the overall Mac community since these ‘features’ have no official names – I deduced them from the private method & category names in AppKit – so they’re hard to search for. FWIW, I could not find a single positive comment about these behaviours.

Unfortunately there’s no way to turn this poorly-considered ‘feature’ off completely, although you can effectively disable the “Reveal on Edge Hover” piece:

defaults write -g NSSplitViewItemFullscreenEdgeRevealDelay -float 1e300
defaults write -g NSSplitViewItemTileEdgeRevealDelay -float 1e300

Steve Troughton-Smith

If you’re an app developer it looks like (I haven’t tested it) you can disable these ‘features’ within your own app, at least, by implementing the private NSSplitView delegate method _splitView:canProactivePeekArrangedView: and setting the NSSplitView revealsOnEdgeHoverInFullscreen property to NO (or the NSSplitViewController private property  _hasItemToRevealOnEdgeHover to NO, if you’re using NSSplitViewController). Or subclassing NSSplitView and overriding _canDoSidebarProactivePeek and _canDoInspectorProactivePeek to return NO – though that only applies to Proactive Peek.

Leave a Comment