diff --git a/src/foundation/class.rs b/src/foundation/class.rs index ba8201a..8c242f6 100644 --- a/src/foundation/class.rs +++ b/src/foundation/class.rs @@ -1,11 +1,11 @@ use std::cell::Cell; -use std::collections::HashMap; use std::collections::hash_map::DefaultHasher; -use std::hash::{Hash, Hasher}; +use std::collections::HashMap; use std::ffi::CString; +use std::hash::{Hash, Hasher}; +use std::sync::{Arc, RwLock}; use std::thread; use std::time::Instant; -use std::sync::{Arc, RwLock}; use lazy_static::lazy_static; use objc::declare::ClassDecl; @@ -32,7 +32,7 @@ thread_local! { } /// Represents an entry in a `ClassMap`. We store an optional superclass_name for debugging -/// purposes; it's an `Option` to make the logic of loading a class type where we don't need to +/// purposes; it's an `Option` to make the logic of loading a class type where we don't need to /// care about the superclass type simpler. #[derive(Debug)] struct ClassEntry { @@ -124,11 +124,7 @@ impl ClassMap { /// /// There's definitely room to optimize here, but it works for now. #[inline(always)] -pub fn load_or_register_class( - superclass_name: &'static str, - subclass_name: &'static str, - config: F -) -> *const Class +pub fn load_or_register_class(superclass_name: &'static str, subclass_name: &'static str, config: F) -> *const Class where F: Fn(&mut ClassDecl) + 'static { @@ -145,12 +141,17 @@ where // guarantees that we almost always have a unique name to register with the ObjC runtime). // // For more context, see: https://github.com/ryanmcgrath/cacao/issues/63 - let objc_subclass_name = format!("{}_{}_{}", subclass_name, superclass_name, RNG_SEED.with(|rng| { - rng.set(rng.get().wrapping_add(0xa0761d6478bd642f)); - let s = rng.get(); - let t = u128::from(s) * (u128::from(s ^ 0xe7037ed1a0b428db)); - ((t >> 64) as u64) ^ (t as u64) - })); + let objc_subclass_name = format!( + "{}_{}_{}", + subclass_name, + superclass_name, + RNG_SEED.with(|rng| { + rng.set(rng.get().wrapping_add(0xa0761d6478bd642f)); + let s = rng.get(); + let t = u128::from(s) * (u128::from(s ^ 0xe7037ed1a0b428db)); + ((t >> 64) as u64) ^ (t as u64) + }) + ); match ClassDecl::new(&objc_subclass_name, unsafe { &*superclass }) { Some(mut decl) => { diff --git a/src/webview/class.rs b/src/webview/class.rs index aedc5d4..44b368e 100644 --- a/src/webview/class.rs +++ b/src/webview/class.rs @@ -12,7 +12,7 @@ use objc::declare::ClassDecl; use objc::runtime::{Class, Object, Sel}; use objc::{class, msg_send, sel, sel_impl}; -use crate::foundation::{id, nil, NSArray, NSInteger, NSString, NO, YES, load_or_register_class}; +use crate::foundation::{id, load_or_register_class, nil, NSArray, NSInteger, NSString, NO, YES}; use crate::webview::actions::{NavigationAction, NavigationResponse}; use crate::webview::{mimetype::MimeType, WebViewDelegate, WEBVIEW_DELEGATE_PTR}; //, OpenPanelParameters}; //use crate::webview::enums::{NavigationPolicy, NavigationResponsePolicy};