From 388dc6fe317412274f885a8b9e354143d54ca78f Mon Sep 17 00:00:00 2001 From: Adrian Wielgosik Date: Sun, 20 Feb 2022 12:58:11 +0100 Subject: [PATCH] avm2: Add customItems to ContextMenu stub --- core/src/avm2/class.rs | 15 +++++++++++++++ core/src/avm2/globals/flash/ui/contextmenu.rs | 16 +++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/core/src/avm2/class.rs b/core/src/avm2/class.rs index 66d8a2dd4..2aa910ace 100644 --- a/core/src/avm2/class.rs +++ b/core/src/avm2/class.rs @@ -745,6 +745,21 @@ impl<'gc> Class<'gc> { )); } } + + #[inline(never)] + pub fn define_public_slot_instance_traits( + &mut self, + items: &[(&'static str, &'static str, &'static str)], + ) { + for &(name, type_ns, type_name) in items { + self.define_instance_trait(Trait::from_slot( + QName::new(Namespace::public(), name), + QName::new(Namespace::Package(type_ns.into()), type_name).into(), + None, + )); + } + } + #[inline(never)] pub fn define_private_slot_instance_traits( &mut self, diff --git a/core/src/avm2/globals/flash/ui/contextmenu.rs b/core/src/avm2/globals/flash/ui/contextmenu.rs index cb1e59556..a1c3bf9cb 100644 --- a/core/src/avm2/globals/flash/ui/contextmenu.rs +++ b/core/src/avm2/globals/flash/ui/contextmenu.rs @@ -3,9 +3,10 @@ use crate::avm2::activation::Activation; use crate::avm2::class::{Class, ClassAttributes}; use crate::avm2::method::{Method, NativeMethodImpl}; -use crate::avm2::names::{Namespace, QName}; -use crate::avm2::object::Object; +use crate::avm2::names::{Multiname, Namespace, QName}; +use crate::avm2::object::{Object, TObject}; use crate::avm2::value::Value; +use crate::avm2::ArrayObject; use crate::avm2::Error; use gc_arena::{GcCell, MutationContext}; @@ -14,9 +15,15 @@ fn instance_init<'gc>( this: Option>, _args: &[Value<'gc>], ) -> Result, Error> { - if let Some(this) = this { + if let Some(mut this) = this { log::warn!("flash.ui.ContextMenu is a stub"); activation.super_init(this, &[])?; + + this.set_property( + &Multiname::public("customItems"), + ArrayObject::empty(activation).unwrap().into(), + activation, + )?; } Ok(Value::Undefined) @@ -76,5 +83,8 @@ pub fn create_class<'gc>(mc: MutationContext<'gc, '_>) -> GcCell<'gc, Class<'gc> &[("hideBuiltInItems", hide_built_in_items)]; write.define_public_builtin_instance_methods(mc, PUBLIC_INSTANCE_METHODS); + const PUBLIC_INSTANCE_SLOTS: &[(&str, &str, &str)] = &[("customItems", "", "Array")]; + write.define_public_slot_instance_traits(PUBLIC_INSTANCE_SLOTS); + class }