Add notification-count, highligh and has-notifications properties to the
sidebar section model and signal on corresponding changes.
Aggregation is done as follows:
is-read := conjunction_over_all_rooms_in_section(is-read)
highligh := union_over_rooms_in_section(highligh)
has-notification := any_over_rooms(has-notifications)
notification-count := sum_over_rooms_in_section(notification-count)
Functionality of ExpressionList is reused on one of the intermediate
models to populate watches (internally on the underlying model) and signal
change of notification-count or highlight with the room indices.
This implementation recalculates the aggregate expressions via
naive iterations (discarding exactly which room(s)' values were
changed).
UI state bits are reflected accordingly to consume the signalled changes.
Fixes: #1048
The main goal here is to move safety-related settings to a new tab so
we can add more in the future.
Since we do not want more tabs, we have to:
- Move the sessions to a subpage accessible with a button in the
"General" tab. While we are here, we reorder most of this tab.
- Move the settings that were in the "Privacy" section of the "Security"
tab to a new "Safety" tab.
- Rename the "Security" tab to "Encryption", to avoid confusion between
"Security" and "Safety".
It requires a few changes during login to only offer SSO when OIDC
compatability is detected,
and most actions that require UIAA in account details must now occur
in the account management UI of MAS.
Use "session" and "item" instead.
"User" is not exact as we allow the same user to log in several
sessions.
"Entry" is easily associated with GtkEntry and can be confusing.
Destroying the popover on close results in the action not being
called.
Instead do like the members list and keep a single popover for the
whole list. To do that we need to pass a weak reference to the
closest common parent of the list items, via the list view factory.