Unread counts, a window margin, blurred dialogs, softer group names
Each rise in an app's unread count while you are elsewhere adds to a tally beside its name, and a dot on its icon in the rail. Looking at the app is the only thing that clears it. The window has no frame of its own, so the shell now keeps a 6px margin in a normal window - the only part of it that is not a web page, and so the only place left to grab. Full screen gives the room back. Dialogs get the app blurred behind them. An app's webview paints above the shell, so it has to be moved aside before a dialog can be seen at all, and once moved there is nothing left to blur - a still taken on the way out is the only way to keep the background there. It runs on a blocking worker: its completion handler is on the main thread, and waiting there deadlocks until the timeout and returns nothing. Settings is much larger, the cog moved to the foot of the nav, group names read as names rather than shouted headings, and "Refresh icons" bumps a version every favicon URL carries, for the ones that cache wrong.
This commit is contained in:
@@ -242,6 +242,33 @@ screen raises a banner; a fall is you reading things, and is not news.
|
||||
|
||||
The site's own notifications still work when they fire — both paths feed the same channel.
|
||||
|
||||
### Counting what was missed
|
||||
|
||||
Each rise in an app's unread count while you are elsewhere adds to a per-app tally shown
|
||||
against its name in the nav — and on the rail, as a dot on the icon. Looking at an app is
|
||||
the only thing that clears it; nothing else does, because nothing else means you have seen
|
||||
it. Counts live in memory rather than `apps.json`: a restart reloads every app anyway, and
|
||||
a number that survived would be a claim the app can no longer support.
|
||||
|
||||
## The window
|
||||
|
||||
There is no title bar and no toolbar, so in a normal window the shell keeps a 6px margin
|
||||
around itself. That margin is the only part of the window that is not a web page, and
|
||||
therefore the only place left to grab it by. Full screen has no use for it and gets the
|
||||
room back.
|
||||
|
||||
## Dialogs
|
||||
|
||||
An app's webview is a native view that paints above the shell, so a dialog cannot simply
|
||||
sit on a higher z-index — the app has to be moved out of the way first. Once it is moved
|
||||
there is nothing left behind the dialog to look at, so a still is taken on the way out with
|
||||
`takeSnapshotWithConfiguration` and shown blurred behind it.
|
||||
|
||||
The snapshot is deliberately 640px wide: it is going behind a 16px blur. It is also taken
|
||||
on a blocking worker rather than the calling thread — its completion handler runs on the
|
||||
main thread, and waiting for it *there* deadlocks until the timeout and returns nothing
|
||||
every time.
|
||||
|
||||
## Zoom
|
||||
|
||||
Per app, on a fixed ladder so ⌘0 returns to exactly 100% rather than to whatever a
|
||||
|
||||
Reference in New Issue
Block a user