mirror of
https://github.com/slint-ui/slint.git
synced 2025-08-04 10:50:00 +00:00
Add window_adapter
to ComponentVTable
Make it duplicate as `maybe_window_adapter` with a boolean `do_create` parameter.
This commit is contained in:
parent
de96455dda
commit
a362b7a1ae
7 changed files with 148 additions and 58 deletions
|
@ -1292,6 +1292,21 @@ fn generate_item_tree(
|
|||
}),
|
||||
));
|
||||
|
||||
target_struct.members.push((
|
||||
Access::Private,
|
||||
Declaration::Function(Function {
|
||||
name: "window_adapter".into(),
|
||||
signature:
|
||||
"([[maybe_unused]] slint::private_api::ComponentRef component, [[maybe_unused]] bool do_create, [[maybe_unused]] slint::cbindgen_private::Option<slint::private_api::WindowAdapterRc>* result) -> void"
|
||||
.into(),
|
||||
is_static: true,
|
||||
statements: Some(vec![format!(
|
||||
"/* TODO: implement this! */",
|
||||
)]),
|
||||
..Default::default()
|
||||
}),
|
||||
));
|
||||
|
||||
target_struct.members.push((
|
||||
Access::Public,
|
||||
Declaration::Var(Var {
|
||||
|
@ -1307,7 +1322,7 @@ fn generate_item_tree(
|
|||
init: Some(format!(
|
||||
"{{ visit_children, get_item_ref, get_subtree_range, get_subtree_component, \
|
||||
get_item_tree, parent_node, embed_component, subtree_index, layout_info, \
|
||||
accessible_role, accessible_string_property, \
|
||||
accessible_role, accessible_string_property, window_adapter, \
|
||||
slint::private_api::drop_in_place<{}>, slint::private_api::dealloc }}",
|
||||
item_tree_class_name
|
||||
)),
|
||||
|
|
|
@ -1256,16 +1256,16 @@ fn generate_item_tree(
|
|||
(
|
||||
quote!(
|
||||
#[allow(unused)]
|
||||
fn window_adapter(&self) -> Rc<dyn sp::WindowAdapter> {
|
||||
self.root.get().unwrap().upgrade().unwrap().window_adapter()
|
||||
fn window_adapter_impl(&self) -> Rc<dyn sp::WindowAdapter> {
|
||||
self.root.get().unwrap().upgrade().unwrap().window_adapter_impl()
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
fn maybe_window_adapter(&self) -> Option<Rc<dyn sp::WindowAdapter>> {
|
||||
fn maybe_window_adapter_impl(&self) -> Option<Rc<dyn sp::WindowAdapter>> {
|
||||
self.root
|
||||
.get()
|
||||
.and_then(|root_weak| root_weak.upgrade())
|
||||
.and_then(|root| root.maybe_window_adapter())
|
||||
.and_then(|root| root.maybe_window_adapter_impl())
|
||||
}
|
||||
),
|
||||
quote!(vtable::VRc<sp::ComponentVTable, Self>),
|
||||
|
@ -1283,7 +1283,7 @@ fn generate_item_tree(
|
|||
(
|
||||
quote!(
|
||||
#[allow(unused)]
|
||||
fn window_adapter(&self) -> Rc<dyn sp::WindowAdapter> {
|
||||
fn window_adapter_impl(&self) -> Rc<dyn sp::WindowAdapter> {
|
||||
Rc::clone(self.window_adapter_ref().unwrap())
|
||||
}
|
||||
|
||||
|
@ -1300,7 +1300,7 @@ fn generate_item_tree(
|
|||
}
|
||||
|
||||
#[allow(unused)]
|
||||
fn maybe_window_adapter(&self) -> Option<Rc<dyn sp::WindowAdapter>> {
|
||||
fn maybe_window_adapter_impl(&self) -> Option<Rc<dyn sp::WindowAdapter>> {
|
||||
self.window_adapter_.get().cloned()
|
||||
}
|
||||
),
|
||||
|
@ -1392,7 +1392,7 @@ fn generate_item_tree(
|
|||
#(_self.parent = parent.clone() as #parent_component_type;)*
|
||||
let self_rc = VRc::new(_self);
|
||||
let self_dyn_rc = vtable::VRc::into_dyn(self_rc.clone());
|
||||
sp::register_component(&self_dyn_rc, (*#root_token).maybe_window_adapter());
|
||||
sp::register_component(&self_dyn_rc, (*#root_token).maybe_window_adapter_impl());
|
||||
Self::init(sp::VRc::map(self_rc.clone(), |x| x), #root_token, 0, 1);
|
||||
#new_end
|
||||
}
|
||||
|
@ -1418,7 +1418,7 @@ fn generate_item_tree(
|
|||
use slint::private_unstable_api::re_exports::*;
|
||||
ComponentVTable_static!(static VT for self::#inner_component_id);
|
||||
new_vref!(let vref : VRef<ComponentVTable> for Component = self.as_ref().get_ref());
|
||||
if let Some(wa) = self.maybe_window_adapter() {
|
||||
if let Some(wa) = self.maybe_window_adapter_impl() {
|
||||
sp::unregister_component(self.as_ref(), vref, Self::item_array(), &wa);
|
||||
}
|
||||
}
|
||||
|
@ -1493,6 +1493,18 @@ fn generate_item_tree(
|
|||
) {
|
||||
*result = self.accessible_string_property(index, what);
|
||||
}
|
||||
|
||||
fn window_adapter(
|
||||
self: ::core::pin::Pin<&Self>,
|
||||
do_create: bool,
|
||||
result: &mut Option<Rc<dyn WindowAdapter>>,
|
||||
) {
|
||||
if do_create {
|
||||
*result = Some(self.window_adapter_impl());
|
||||
} else {
|
||||
*result = self.maybe_window_adapter_impl();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1798,7 +1810,7 @@ fn follow_sub_component_path<'a>(
|
|||
|
||||
fn access_window_adapter_field(ctx: &EvaluationContext) -> TokenStream {
|
||||
let root = &ctx.generator_state;
|
||||
quote!((&#root.window_adapter()))
|
||||
quote!((&#root.window_adapter_impl()))
|
||||
}
|
||||
|
||||
/// Given a property reference to a native item (eg, the property name is empty)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue