1use gpui::{App, AppContext as _, Context, Entity, EventEmitter, Global, ReadGlobal as _};
2
3pub fn init(cx: &mut App) {
4 let extension_events = cx.new(ExtensionEvents::new);
5 cx.set_global(GlobalExtensionEvents(extension_events));
6}
7
8struct GlobalExtensionEvents(Entity<ExtensionEvents>);
9
10impl Global for GlobalExtensionEvents {}
11
12/// An event bus for broadcasting extension-related events throughout the app.
13pub struct ExtensionEvents;
14
15impl ExtensionEvents {
16 /// Returns the global [`ExtensionEvents`].
17 pub fn global(cx: &App) -> Entity<Self> {
18 GlobalExtensionEvents::global(cx).0.clone()
19 }
20
21 fn new(_cx: &mut Context<Self>) -> Self {
22 Self
23 }
24
25 pub fn emit(&mut self, event: Event, cx: &mut Context<Self>) {
26 cx.emit(event)
27 }
28}
29
30#[derive(Clone)]
31pub enum Event {
32 ExtensionsUpdated,
33}
34
35impl EventEmitter<Event> for ExtensionEvents {}