extension_events.rs

 1use gpui::{App, AppContext as _, Context, Entity, EventEmitter, Global};
 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 try_global(cx: &App) -> Option<Entity<Self>> {
18        return cx
19            .try_global::<GlobalExtensionEvents>()
20            .map(|g| g.0.clone());
21    }
22
23    fn new(_cx: &mut Context<Self>) -> Self {
24        Self
25    }
26
27    pub fn emit(&mut self, event: Event, cx: &mut Context<Self>) {
28        cx.emit(event)
29    }
30}
31
32#[derive(Clone)]
33pub enum Event {
34    ExtensionsInstalledChanged,
35}
36
37impl EventEmitter<Event> for ExtensionEvents {}