stupid workaround for https://sciter.com/forums/topic/crash-on-latest-tis-mac-sdk-sometimes/
This commit is contained in:
parent
3ec69b6d97
commit
809c220eaf
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -3503,7 +3503,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "sciter-rs"
|
name = "sciter-rs"
|
||||||
version = "0.5.57"
|
version = "0.5.57"
|
||||||
source = "git+https://github.com/open-trade/rust-sciter?branch=dyn#4cd10f985e76d64fbf3438ffe7532489936f489a"
|
source = "git+https://github.com/open-trade/rust-sciter?branch=dyn#82025b9ba77d5ae14543009444033036dbe25917"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libc",
|
"libc",
|
||||||
|
12
src/ui.rs
12
src/ui.rs
@ -22,6 +22,11 @@ use std::{
|
|||||||
|
|
||||||
pub type Childs = Arc<Mutex<(bool, HashMap<(String, String), Child>)>>;
|
pub type Childs = Arc<Mutex<(bool, HashMap<(String, String), Child>)>>;
|
||||||
|
|
||||||
|
lazy_static::lazy_static! {
|
||||||
|
// stupid workaround for https://sciter.com/forums/topic/crash-on-latest-tis-mac-sdk-sometimes/
|
||||||
|
static ref STUPID_VALUES: Mutex<Vec<Arc<Vec<Value>>>> = Default::default();
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
struct UI(
|
struct UI(
|
||||||
Childs,
|
Childs,
|
||||||
@ -811,3 +816,10 @@ fn check_connect_status(
|
|||||||
std::thread::spawn(move || check_connect_status_(reconnect, cloned, cloned_options));
|
std::thread::spawn(move || check_connect_status_(reconnect, cloned, cloned_options));
|
||||||
(status, options)
|
(status, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sacrifice some memory
|
||||||
|
pub fn value_crash_workaround(values: &[Value]) -> Arc<Vec<Value>> {
|
||||||
|
let persist = Arc::new(values.to_vec());
|
||||||
|
STUPID_VALUES.lock().unwrap().push(persist.clone());
|
||||||
|
persist
|
||||||
|
}
|
||||||
|
@ -61,7 +61,7 @@ impl ConnectionManager {
|
|||||||
fn call(&self, func: &str, args: &[Value]) {
|
fn call(&self, func: &str, args: &[Value]) {
|
||||||
let r = self.read().unwrap();
|
let r = self.read().unwrap();
|
||||||
if let Some(ref e) = r.root {
|
if let Some(ref e) = r.root {
|
||||||
allow_err!(e.call_method(func, args));
|
allow_err!(e.call_method(func, &super::value_crash_workaround(args)[..]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1066,7 +1066,7 @@ impl Handler {
|
|||||||
fn call(&self, func: &str, args: &[Value]) {
|
fn call(&self, func: &str, args: &[Value]) {
|
||||||
let r = self.read().unwrap();
|
let r = self.read().unwrap();
|
||||||
if let Some(ref e) = r.element {
|
if let Some(ref e) = r.element {
|
||||||
allow_err!(e.call_method(func, args));
|
allow_err!(e.call_method(func, &super::value_crash_workaround(args)[..]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1605,7 +1605,7 @@ impl Remote {
|
|||||||
if !(self.handler.is_file_transfer()
|
if !(self.handler.is_file_transfer()
|
||||||
|| self.handler.is_port_forward()
|
|| self.handler.is_port_forward()
|
||||||
|| !unsafe { SERVER_CLIPBOARD_ENABLED }
|
|| !unsafe { SERVER_CLIPBOARD_ENABLED }
|
||||||
|| !unsafe { SERVER_KEYBOARD_ENABLED }
|
|| !unsafe { SERVER_KEYBOARD_ENABLED }
|
||||||
|| self.handler.lc.read().unwrap().disable_clipboard)
|
|| self.handler.lc.read().unwrap().disable_clipboard)
|
||||||
{
|
{
|
||||||
let txt = self.old_clipboard.lock().unwrap().clone();
|
let txt = self.old_clipboard.lock().unwrap().clone();
|
||||||
@ -1681,12 +1681,16 @@ impl Remote {
|
|||||||
log::info!("Change permission {:?} -> {}", p.permission, p.enabled);
|
log::info!("Change permission {:?} -> {}", p.permission, p.enabled);
|
||||||
match p.permission.enum_value_or_default() {
|
match p.permission.enum_value_or_default() {
|
||||||
Permission::Keyboard => {
|
Permission::Keyboard => {
|
||||||
unsafe { SERVER_KEYBOARD_ENABLED = p.enabled; }
|
unsafe {
|
||||||
|
SERVER_KEYBOARD_ENABLED = p.enabled;
|
||||||
|
}
|
||||||
self.handler
|
self.handler
|
||||||
.call("setPermission", &make_args!("keyboard", p.enabled));
|
.call("setPermission", &make_args!("keyboard", p.enabled));
|
||||||
}
|
}
|
||||||
Permission::Clipboard => {
|
Permission::Clipboard => {
|
||||||
unsafe { SERVER_CLIPBOARD_ENABLED = p.enabled; }
|
unsafe {
|
||||||
|
SERVER_CLIPBOARD_ENABLED = p.enabled;
|
||||||
|
}
|
||||||
self.handler
|
self.handler
|
||||||
.call("setPermission", &make_args!("clipboard", p.enabled));
|
.call("setPermission", &make_args!("clipboard", p.enabled));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user