Implement basic focus handling

Similar to the mouse_grabber, we use a VisitChildrenResult field to
track the focus item within a component. Unlike the mouse grabber
however, it is set/cleared using dedicated focus events.

The key event now routes the key event directly to the focus item.

The focus can be requested via set_focus_item on a window, which the
TextItem does.
This commit is contained in:
Simon Hausmann 2020-09-24 08:50:32 +02:00
parent aa5babffe1
commit e5dfb3a4c0
19 changed files with 603 additions and 48 deletions

View file

@ -255,6 +255,12 @@ impl<'a, T: ?Sized + VTableMeta> VRef<'a, T> {
}
}
/// Returns a raw pointer to the VRef's instance. This is primarily useful for comparisons.
/// The caller must ensure that the VRef outlives the pointer returned.
pub fn as_ptr(&self) -> *const u8 {
self.inner.ptr
}
unsafe fn from_inner(inner: Inner) -> Self {
Self { inner, phantom: PhantomData }
}