ui_add_action(self.ctx.ptr, cstr.as_ptr(), Some(action_event_wrapper::<T>), ptr as *mut c_void);
}
}
+
+ pub fn call_mainthread<F>(&self, mut f: F)
+ where F: FnMut(&mut T) + 'static {
+ let doc = self.clone();
+ call_mainthread(move || {
+ let data = unsafe { doc.get_data_ptr() };
+ unsafe {
+ f(&mut *data);
+ }
+ });
+ }
+}
+
+impl<T> UiObject<T> {
+ pub fn window_data<F>(self, mut f: F)
+ where F: FnMut(&mut T) {
+ unsafe {
+ let wdata_ptr: *mut T = ui_object_get_windowdata(self.ptr).cast();
+ assert!(!wdata_ptr.is_null());
+ f(&mut *wdata_ptr);
+ }
+ }
+
+ pub fn call_mainthread<F>(&self, mut f: F)
+ where F: FnMut(&mut T) + 'static {
+ let obj = self.clone();
+ call_mainthread(move || {
+ obj.window_data(|wdata| {
+ f(wdata);
+ });
+ });
+ }
}
pub trait UiModel {
}
+/* ----------------------------------- Event Loop ---------------------------------- */
+
+pub fn call_mainthread<F>(f: F)
+where F: FnOnce() {
+ let b = Box::new(f);
+ let ptr = Box::into_raw(b);
+ unsafe {
+ ui_call_mainthread(mainthread_callback::<F>, ptr as *mut c_void);
+ }
+}
+
+extern "C" fn mainthread_callback<F>(data: *mut c_void) -> c_int
+where F: FnOnce() {
+ unsafe {
+ // Reconstruct the Box<F>
+ let callback: Box<F> = Box::from_raw(data as *mut F);
+
+ (*callback)();
+ }
+
+ 0
+}
+
/* ----------------------------------- Config ---------------------------------- */
pub fn app_configdir() -> String {
}
}
-pub fn call_mainthread<F>(f: F)
-where F: FnOnce() {
- let b = Box::new(f);
- let ptr = Box::into_raw(b);
- unsafe {
- ui_call_mainthread(mainthread_callback::<F>, ptr as *mut c_void);
- }
-}
-
-extern "C" fn mainthread_callback<F>(data: *mut c_void) -> c_int
-where F: FnOnce() {
- unsafe {
- // Reconstruct the Box<F>
- let callback: Box<F> = Box::from_raw(data as *mut F);
-
- (*callback)();
- }
-
- 0
-}
-
/* -------------------------------- C functions -------------------------------- */
extern "C" {