wallet: fix issue with chatview swallowing input events

This commit is contained in:
darkfi
2024-09-23 12:40:49 +02:00
parent 47833e5415
commit 177e390262
7 changed files with 48 additions and 26 deletions

View File

@@ -168,8 +168,8 @@ impl App {
Window::new(me, self.render_api.clone(), self.event_pub.clone(), self.ex.clone())
})
.await;
self.sg_root.link(window.clone());
schema::make_test(&self, window).await;
self.sg_root.clone().link(window.clone());
schema::make(&self, window).await;
debug!(target: "app", "Schema loaded");

View File

@@ -125,7 +125,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) {
);
let node =
node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await;
layer_node.link(node);
layer_node.clone().link(node);
// Create button bg
let node = create_vector_art("btnbg");
@@ -157,7 +157,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) {
let shape = VectorShape { verts, indices };
let node =
node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await;
layer_node.link(node);
layer_node.clone().link(node);
// Create the button
let node = create_button("btn");
@@ -174,7 +174,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) {
//node.register("click", slot_click).unwrap();
let node = node.setup(|me| Button::new(me, app.ex.clone())).await;
layer_node.link(node);
layer_node.clone().link(node);
// Create another mesh
let node = create_vector_art("box");
@@ -205,7 +205,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) {
let shape = VectorShape { verts, indices };
let node =
node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await;
layer_node.link(node);
layer_node.clone().link(node);
// Debugging tool
let node = create_vector_art("debugtool");
@@ -235,7 +235,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) {
);
let node =
node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await;
layer_node.link(node);
layer_node.clone().link(node);
// Create KING GNU!
let node = create_image("king");
@@ -247,7 +247,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) {
node.set_property_str(Role::App, "path", KING_PATH).unwrap();
node.set_property_u32(Role::App, "z_index", 1).unwrap();
let node = node.setup(|me| Image::new(me, app.render_api.clone(), app.ex.clone())).await;
layer_node.link(node);
layer_node.clone().link(node);
// Create some text
let node = create_text("label");
@@ -278,11 +278,12 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) {
)
})
.await;
layer_node.link(node);
layer_node.clone().link(node);
// 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, 150.).unwrap();
prop.set_f32(Role::App, 1, 150.).unwrap();
@@ -368,7 +369,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) {
)
})
.await;
layer_node.link(node);
layer_node.clone().link(node);
// ChatView
let node = create_chatview("chatty");
@@ -452,7 +453,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) {
)
})
.await;
layer_node.link(node);
layer_node.clone().link(node);
}
pub(super) async fn make(app: &App, window: SceneNodePtr) {
@@ -498,7 +499,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) {
);
let node =
node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await;
layer_node.link(node);
layer_node.clone().link(node);
// Create the toolbar bg
let node = create_vector_art("toolbar_bg");
@@ -520,7 +521,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) {
let node =
node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await;
layer_node.link(node);
layer_node.clone().link(node);
// Create some text
let node = create_text("channel_label");
@@ -552,7 +553,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) {
)
})
.await;
layer_node.link(node);
layer_node.clone().link(node);
// ChatView
let node = create_chatview("chatty");
@@ -642,7 +643,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) {
)
})
.await;
layer_node.link(node);
layer_node.clone().link(node);
// Create the editbox bg
let node = create_vector_art("editbox_bg");
@@ -678,7 +679,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) {
);
let node =
node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await;
layer_node.link(node);
layer_node.clone().link(node);
// Create some text
let node = create_text("send_label");
@@ -711,7 +712,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) {
)
})
.await;
layer_node.link(node);
layer_node.clone().link(node);
// Text edit
let node = create_editbox("editz");
@@ -795,7 +796,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) {
)
})
.await;
layer_node.link(node);
layer_node.clone().link(node);
// Create the send button
let node = create_button("send_btn");
@@ -809,5 +810,5 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) {
prop.set_f32(Role::App, 3, EDITCHAT_HEIGHT).unwrap();
let node = node.setup(|me| Button::new(me, app.ex.clone())).await;
layer_node.link(node);
layer_node.clone().link(node);
}

View File

@@ -142,7 +142,6 @@ fn main() {
let cv_started = app.is_started.clone();
let sg_root = app.sg_root.clone();
let ex2 = ex.clone();
/*
let darkirc_task = ex.spawn(async move {
cv_started.wait().await;
let darkirc_evgr = LocalDarkIRC::new(sg_root.clone(), ex2.clone()).await.unwrap();
@@ -152,7 +151,6 @@ fn main() {
}
});
async_runtime.push_task(darkirc_task);
*/
/*
// Nice to see which events exist

View File

@@ -160,10 +160,10 @@ impl SceneNode {
self_
}
pub fn link(&self, child: SceneNodePtr) {
pub fn link(self: Arc<Self>, child: SceneNodePtr) {
let mut childs_parent = child.parent.write().unwrap();
assert!(childs_parent.is_none());
*childs_parent = Some(Arc::downgrade(&child));
*childs_parent = Some(Arc::downgrade(&self));
drop(childs_parent);
let mut children = self.children.write().unwrap();
@@ -349,11 +349,32 @@ impl SceneNode {
let method_sub = method.pubsub.clone().subscribe();
Ok(method_sub)
}
pub fn get_full_path(&self) -> Option<String> {
if self.typ == SceneNodeType::Root {
return Some("/".to_string())
}
let mut self_name = self.name.clone();
let parent = self.parent.read().unwrap().clone()?;
let Some(parent) = parent.upgrade() else { return None };
let parent_path = parent.get_full_path()?;
if parent_path == "/" {
return Some(format!("/{self_name}"))
}
Some(format!("{parent_path}/{self_name}"))
}
}
impl std::fmt::Debug for SceneNode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "'{}':{}", self.name, self.id)
if let Some(path) = self.get_full_path() {
write!(f, "{path}")
} else {
write!(f, "{}:{}", self.name, self.id)
}
}
}

View File

@@ -741,15 +741,17 @@ impl UIObject for ChatView {
KeyCode::PageUp => {
let scroll = self.scroll.get() + 200.;
self.scrollview(scroll).await;
return true
}
KeyCode::PageDown => {
let scroll = self.scroll.get() - 200.;
self.scrollview(scroll).await;
return true
}
_ => {}
}
true
false
}
async fn handle_mouse_btn_down(&self, btn: MouseButton, mouse_pos: Point) -> bool {

View File

@@ -110,7 +110,6 @@ impl PressedKeysSmoothRepeat {
/*
fn key_up(&mut self, key: &PressedKey) {
//debug!(target: "PressedKeysSmoothRepeat", "key_up({:?})", key);
println!("{:?}", self.pressed_keys.keys());
assert!(self.pressed_keys.contains_key(key));
self.pressed_keys.remove(key).expect("key was pressed");
}

View File

@@ -184,6 +184,7 @@ impl UIObject for Layer {
for child in self.get_children() {
let obj = get_ui_object3(&child);
if obj.handle_key_down(key, mods, repeat).await {
//debug!(target: "layer", "handle_key_down({key:?}, {mods:?}, {repeat}) swallowed by {child:?}");
return true
}
}