diff --git a/crates/core/src/view/dictionary/mod.rs b/crates/core/src/view/dictionary/mod.rs index 5114f58..ba09040 100644 --- a/crates/core/src/view/dictionary/mod.rs +++ b/crates/core/src/view/dictionary/mod.rs @@ -256,6 +256,7 @@ impl Dictionary { rect.absorb(self.child(index-1).rect()); self.children.drain(index - 1 ..= index); + context.kb_rect = Rectangle::default(); rq.add(RenderData::expose(rect, UpdateMode::Gui)); hub.send(Event::Focus(None)).ok(); } else { diff --git a/crates/core/src/view/home/mod.rs b/crates/core/src/view/home/mod.rs index 0ca9563..619b46a 100644 --- a/crates/core/src/view/home/mod.rs +++ b/crates/core/src/view/home/mod.rs @@ -451,6 +451,7 @@ impl Home { } } + context.kb_rect = Rectangle::default(); hub.send(Event::Focus(None)).ok(); if update { let rect = rect![self.rect.min.x, y_min, diff --git a/crates/core/src/view/named_input.rs b/crates/core/src/view/named_input.rs index 755bfbb..894a62d 100644 --- a/crates/core/src/view/named_input.rs +++ b/crates/core/src/view/named_input.rs @@ -96,7 +96,9 @@ impl View for NamedInput { }, Event::Gesture(GestureEvent::Tap(center)) | Event::Gesture(GestureEvent::HoldFingerShort(center, _)) => { if !self.rect.includes(center) && !context.kb_rect.includes(center) { - bus.push_back(Event::Close(self.view_id)); + if !context.kb_rect.is_empty() { + bus.push_back(Event::Close(self.view_id)); + } true } else { self.rect.includes(center) diff --git a/crates/core/src/view/reader/mod.rs b/crates/core/src/view/reader/mod.rs index fb488ec..27c9702 100644 --- a/crates/core/src/view/reader/mod.rs +++ b/crates/core/src/view/reader/mod.rs @@ -1276,6 +1276,7 @@ impl Reader { rq.add(RenderData::expose(rect, UpdateMode::Gui)); } + context.kb_rect = Rectangle::default(); hub.send(Event::Focus(None)).ok(); } else { if !enable {