Introduce channels and move collab popover contents to a collaboration panel (#2828)
### Summary This PR introduces channels: a new way of starting collaboration sessions. You can create channels and invite others to join them. You can then hold a call in a channel, where any member of the channel is free to join the call without needing to be invited. Channels are displayed in a new panel called the collaboration panel, which now also contains the contacts list, and the current call. The collaboration popover has been removed from the titlebar.  For now, the channels functionality will only be revealed to staff, so the public-facing change is just the move from the popover to the panel. ### To-do * User-facing UI * [x] signed-out state for collab panel * [x] new icon for collab panel * [x] for now, channels section only appears for zed staff * [x] current call section styling (https://zed-industries.slack.com/archives/C05CJUNF2BU/p1691189389988239?thread_ts=1691189120.403009&cid=C05CJUNF2BU) * [x] Channel members * Channels * [x] style channel name editor * [x] decide on a special "empty state" for the panel, when user has no contacts * [x] ensure channels are sorted in a consistent way (expose channel id paths to client) * [x] Figure out layered panels UX * [x] Change add contacts to be the same kind of tabbed modal * [x] race condition between channel updates and user fetches (`ChannelStore::handle_update_contacts`) * [x] race condition between joining channels and channel update messages `collab::rpc::channel_updated`) * [x] don't display mic as muted when microphone share is pending upon first joining call Release Notes: - Moved the collaboration dropdown into its own panel. - Added settings for disabling the AI assistant panel button. - Switch to lazily initializing audio output sources (https://github.com/zed-industries/community/issues/1840, https://github.com/zed-industries/community/issues/1919)
This commit is contained in:
commit
4ea8b8292c
117 changed files with 9002 additions and 2660 deletions
|
@ -48,6 +48,10 @@ pub trait Element<V: View>: 'static {
|
|||
type LayoutState;
|
||||
type PaintState;
|
||||
|
||||
fn view_name(&self) -> &'static str {
|
||||
V::ui_name()
|
||||
}
|
||||
|
||||
fn layout(
|
||||
&mut self,
|
||||
constraint: SizeConstraint,
|
||||
|
@ -272,8 +276,16 @@ impl<V: View, E: Element<V>> AnyElementState<V> for ElementState<V, E> {
|
|||
| ElementState::PostLayout { mut element, .. }
|
||||
| ElementState::PostPaint { mut element, .. } => {
|
||||
let (size, layout) = element.layout(constraint, view, cx);
|
||||
debug_assert!(size.x().is_finite());
|
||||
debug_assert!(size.y().is_finite());
|
||||
debug_assert!(
|
||||
size.x().is_finite(),
|
||||
"Element for {:?} had infinite x size after layout",
|
||||
element.view_name()
|
||||
);
|
||||
debug_assert!(
|
||||
size.y().is_finite(),
|
||||
"Element for {:?} had infinite y size after layout",
|
||||
element.view_name()
|
||||
);
|
||||
|
||||
result = size;
|
||||
ElementState::PostLayout {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue