I just published an update for PopDo that fixes some reported issues related to the use of NSPopover for the main window.

The thing with NSPopover is that it wasn’t really made for opening from an NSStatusItem in the menu bar. I had considered moving the implementation from the popover to a normal window for some time, but finally decided to do it after a bug report from a user that collected several issues related to the use of the popover.

The issues are specifically:

  • The NSPopover window cannot be opened properly using a shortcut from a status item when there is an application running in fullscreen. The popover opens, but at the lower left side of the screen, as if it was specified (0,0) for the (X,Y) coordinates in the screen. I suppose it could then be moved to the correct location.
  • As the window attached to the popover listens to “window move” events from the parent view, the popover jumps to the sides when the status item moves a little. This happens if there’s a new item appearing in the menu bar, such as a location icon, or when the PopDo icon is set to show a task count and that task count grows or shrinks; as the icon becomes wider or narrower, the center of the popover also changes slightly. That behaviour is a little off-putting when interacting with the UI.
  • Another side effect of the previous item: a user reported that when Safari is open in fullscreen mode and the toolbar is set to autohide, if he goes to the PopDo menubar item and clicks on it to open PopDo and then moves the mouse out of the menubar, then the menubar hides dragging PopDo up, slicing a portion of the window. This is very picky of course, but a behaviour that can be fixed by simply changing to a proper window. I’m sure there’s a hack to intercept the window events and remove them before they reach the popover controller, but piling hacks upon hacks is a sure way to get broken software when a new macOS version is released.
  • NSPopover is vibrant-aware and lately it seems it prefers vibrancy, even when setting the appearance to a non-vibrant material. This makes the entire PopDo window translucent on Big Sur, which can make reading task titles difficult. An opaque view is much better.
  • The NSPopover is not resizable. There is a project on GitHub that adds resizing, but works half the time and requires some hacks to prevent bad interactions with controls close to the window edge. I’m happy to remove that dependency.

Now all this is solved for good.