Sfoglia il codice sorgente

wallet: send text when pressing enter

darkfi 1 anno fa
parent
commit
81c843b91c

+ 2 - 0
bin/darkwallet/src/app/node.rs

@@ -189,6 +189,8 @@ pub fn create_editbox(name: &str) -> SceneNode {
     let prop = Property::new("debug", PropertyType::Bool, PropertySubType::Null);
     node.add_property(prop).unwrap();
 
+    node.add_signal("enter_pressed", "Enter key pressed", vec![]).unwrap();
+
     node
 }
 

+ 1 - 0
bin/darkwallet/src/app/schema.rs

@@ -716,6 +716,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) {
     // Text edit
     let node = create_editbox("editz");
     node.set_property_bool(Role::App, "is_active", true).unwrap();
+    node.set_property_bool(Role::App, "is_focused", true).unwrap();
 
     let prop = node.get_property("rect").unwrap();
     prop.set_f32(Role::App, 0, EDITCHAT_LHS_PAD).unwrap();

+ 19 - 5
bin/darkwallet/src/darkirc2.rs

@@ -84,6 +84,7 @@ pub struct LocalDarkIRC {
 
     chatview_node: SceneNodePtr,
     sendbtn_node: SceneNodePtr,
+    editbox_node: SceneNodePtr,
     editbox_text: PropertyStr,
 }
 
@@ -112,6 +113,7 @@ impl LocalDarkIRC {
 
             chatview_node,
             sendbtn_node,
+            editbox_node,
             editbox_text,
         }))
     }
@@ -147,13 +149,12 @@ impl LocalDarkIRC {
             error!(target: "darkirc", "Closing DarkIRC receive loop");
         });
 
-        let (slot_click, click_recvr) = Slot::new("send_button_clicked");
-        self.sendbtn_node.register("click", slot_click).unwrap();
-
+        let (slot, recvr) = Slot::new("send_button_clicked");
+        self.sendbtn_node.register("click", slot).unwrap();
         let me = Arc::downgrade(&self);
         let send_task = ex.spawn(async move {
             while let Some(self_) = me.upgrade() {
-                let Ok(_) = click_recvr.recv().await else {
+                let Ok(_) = recvr.recv().await else {
                     error!(target: "ui::win", "Button click recvr closed");
                     break
                 };
@@ -161,9 +162,22 @@ impl LocalDarkIRC {
             }
         });
 
+        let (slot, recvr) = Slot::new("enter_pressed");
+        self.editbox_node.register("enter_pressed", slot).unwrap();
+        let me = Arc::downgrade(&self);
+        let enter_task = ex.spawn(async move {
+            while let Some(self_) = me.upgrade() {
+                let Ok(_) = recvr.recv().await else {
+                    error!(target: "ui::win", "EditBox enter_pressed recvr closed");
+                    break
+                };
+                self_.handle_send().await;
+            }
+        });
+
         let mut tasks = self.tasks.lock().unwrap();
         assert!(tasks.is_empty());
-        *tasks = vec![recv_task, send_task];
+        *tasks = vec![recv_task, send_task, enter_task];
 
         Ok(())
     }

+ 5 - 11
bin/darkwallet/src/ui/editbox.rs

@@ -479,6 +479,7 @@ impl EditBox {
 
         self.mouse_btn_held.store(true, Ordering::Relaxed);
 
+        self.redraw().await;
         true
     }
     fn handle_click_up(&self, btn: MouseButton, pos: Point) -> bool {
@@ -695,7 +696,10 @@ impl EditBox {
             KeyCode::Kp8 => self.insert_char('8').await,
             KeyCode::Kp9 => self.insert_char('9').await,
             KeyCode::KpDecimal => self.insert_char('.').await,
-            KeyCode::Enter | KeyCode::KpEnter => self.send_event().await,
+            KeyCode::Enter | KeyCode::KpEnter => {
+                let node = self.node.upgrade().unwrap();
+                node.trigger("enter_pressed", vec![]).await.unwrap();
+            }
             KeyCode::Delete => {
                 if !self.selected.is_null(0).unwrap() {
                     self.delete_highlighted();
@@ -1000,16 +1004,6 @@ impl EditBox {
             freed_buffers,
         })
     }
-
-    async fn send_event(&self) {
-        let text = self.text.get();
-        debug!(target: "ui::editbox", "sending text {}", text);
-
-        // This should probably be unset instead
-        //self.text.set(String::new());
-        //self.cursor_pos.set(0);
-        //self.redraw().await;
-    }
 }
 
 impl Drop for EditBox {