Ver código fonte

app/settings: store editbox text before restoring label to avoid bug where edit gets cleared

darkfi 1 semana atrás
pai
commit
dcf49c86cb
1 arquivos alterados com 8 adições e 7 exclusões
  1. 8 7
      bin/app/src/app/schema/settings.rs

+ 8 - 7
bin/app/src/app/schema/settings.rs

@@ -1865,6 +1865,10 @@ async fn update_setting(
 ) {
     let atom = &mut PropertyAtomicGuard::none();
 
+    // Snapshot the edited text before the editbox is cleared below, since
+    // editz_text wraps the very property that gets reset to empty
+    let edited_text = editz_text.map(|prop| prop.get());
+
     if let Some(node) = sn.lookup_node("/value_editbox") {
         node.set_property_bool(atom, Role::App, "is_active", false).unwrap();
         node.set_property_bool(atom, Role::App, "is_focused", false).unwrap();
@@ -1884,15 +1888,14 @@ async fn update_setting(
         }
     }
 
-    let Some(editz_text) = editz_text else { return };
+    let Some(value_str) = edited_text else { return };
 
     match &setting.get_value() {
         PropertyValue::Uint32(_) => {
-            let value_str = editz_text.get();
             let parsed = value_str.parse::<u32>();
             if let Ok(value) = parsed {
                 if let Some(node) = sn.lookup_node("/value_label") {
-                    node.set_property_str(atom, Role::App, "text", value_str).unwrap();
+                    node.set_property_str(atom, Role::App, "text", &value_str).unwrap();
                 }
                 if let Some(node) = sn.lookup_node("/confirm_btn_bg") {
                     node.set_property_bool(atom, Role::App, "is_visible", false).unwrap();
@@ -1903,11 +1906,10 @@ async fn update_setting(
             }
         }
         PropertyValue::Float32(_) => {
-            let value_str = editz_text.get();
             let parsed = value_str.parse::<f32>();
             if let Ok(value) = parsed {
                 if let Some(node) = sn.lookup_node("/value_label") {
-                    node.set_property_str(atom, Role::App, "text", value_str).unwrap();
+                    node.set_property_str(atom, Role::App, "text", &value_str).unwrap();
                 }
                 if let Some(node) = sn.lookup_node("/confirm_btn_bg") {
                     node.set_property_bool(atom, Role::App, "is_visible", false).unwrap();
@@ -1918,14 +1920,13 @@ async fn update_setting(
             }
         }
         PropertyValue::Str(_) => {
-            let value_str = editz_text.get();
             if let Some(node) = sn.lookup_node("/value_label") {
                 node.set_property_str(atom, Role::App, "text", &value_str).unwrap();
             }
             if let Some(node) = sn.lookup_node("/confirm_btn_bg") {
                 node.set_property_bool(atom, Role::App, "is_visible", false).unwrap();
             }
-            setting.prop.set_str(atom, Role::User, 0, value_str).unwrap();
+            setting.prop.set_str(atom, Role::User, 0, &value_str).unwrap();
             let mut active_setting_value = active_setting.lock().unwrap();
             *active_setting_value = None;
         }