Ver Fonte

app: fix window stop blocking the app from closing

darkfi há 19 horas atrás
pai
commit
6b73f0d016
3 ficheiros alterados com 8 adições e 24 exclusões
  1. 1 1
      bin/app/src/app/mod.rs
  2. 2 8
      bin/app/src/plugin/darkirc.rs
  3. 5 15
      bin/app/src/ui/win/mod.rs

+ 1 - 1
bin/app/src/app/mod.rs

@@ -229,7 +229,7 @@ impl App {
     pub fn stop(&self) {
         let window_node = self.sg_root.lookup_node("/window").unwrap();
         match window_node.pimpl() {
-            Pimpl::Window(win) => win.stop(self.ex.clone()),
+            Pimpl::Window(win) => win.stop(),
             _ => panic!("wrong pimpl"),
         }
     }

+ 2 - 8
bin/app/src/plugin/darkirc.rs

@@ -949,11 +949,7 @@ impl DarkIrc {
             .unwrap();
     }
 
-    async fn start(
-        self: Arc<Self>,
-        sg_root: SceneNodePtr,
-        ex: ExecutorPtr,
-    ) {
+    async fn start(self: Arc<Self>, sg_root: SceneNodePtr, ex: ExecutorPtr) {
         i!("Registering EventGraph P2P protocol");
         let event_graph_ = Arc::clone(&self.event_graph);
         let registry = self.p2p.protocol_registry();
@@ -1044,9 +1040,7 @@ impl DarkIrc {
                 let Some(self_) = me2.upgrade() else { break };
 
                 let mut cursor = Cursor::new(&data);
-                let Ok(screen_on) = bool::decode(&mut cursor) else {
-                    continue
-                };
+                let Ok(screen_on) = bool::decode(&mut cursor) else { continue };
 
                 if screen_on {
                     self_.set_outbound_connections(P2P_OUTBOUND_ACTIVE).await;

+ 5 - 15
bin/app/src/ui/win/mod.rs

@@ -149,9 +149,7 @@ impl Window {
         let me2 = me.clone();
         let screen_task = ex.spawn(async move {
             while let Ok(screen_on) = screen_sub.recv().await {
-                let Some(self_) = me2.upgrade() else {
-                    break
-                };
+                let Some(self_) = me2.upgrade() else { break };
 
                 self_
                     .node
@@ -282,24 +280,16 @@ impl Window {
         }
     }
 
-    pub fn stop(&self, ex: ExecutorPtr) {
-        let node = self.node.clone();
-        let stop_task = ex.spawn(async move {
-            node.upgrade()
-                .unwrap()
-                .trigger("stop", vec![])
-                .await
-                .unwrap();
+    pub fn stop(&self) {
+        let node = self.node.clone().upgrade().unwrap();
+        smol::block_on(async move {
+            node.trigger("stop", vec![]).await.unwrap();
         });
 
-        self.tasks.lock().clear();
-
         for child in self.get_children() {
             let obj = get_ui_object3(&child);
             obj.stop();
         }
-
-        smol::block_on(stop_task);
     }
 
     async fn process_char(me: &Weak<Self>, ev_sub: &GraphicsEventCharSub) -> bool {