]> uap-core.de Git - note.git/commitdiff
add obj to Event main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Mon, 18 May 2026 17:44:20 +0000 (19:44 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Mon, 18 May 2026 17:44:20 +0000 (19:44 +0200)
application/src/window.rs
ui-rs/src/ui/event.rs
ui-rs/src/ui/toolkit.rs

index 507afa1cabca62246b7d556f1e55f5696062ddf7..e2931fefeaa6638f7fb0815751bc94cbf7381918 100644 (file)
@@ -51,7 +51,7 @@ impl MainWindow {
 
     #[action]
     pub fn new_notebook(&mut self, _event: &ActionEvent) {
 
     #[action]
     pub fn new_notebook(&mut self, _event: &ActionEvent) {
-        println!("new notebook");
+
     }
 
     #[action]
     }
 
     #[action]
index b39967f7530241983bc615c0b40c4d39a3974e87..e1d43f5e980cf9255dce471a6a6ce723abfec76d 100644 (file)
 #![allow(dead_code)]
 
 use std::ffi::{c_char, c_void, CStr, CString};
 #![allow(dead_code)]
 
 use std::ffi::{c_char, c_void, CStr, CString};
-use crate::ui::{event, ffi, UiDouble, UiInteger, UiString, UiText, UiRange, ListSelection};
+use crate::ui::{event, ffi, UiDouble, UiInteger, UiString, UiText, UiRange, ListSelection, UiObject};
 use crate::ui::ffi::{UiEvent};
 
 pub struct Event<'a, T> {
 use crate::ui::ffi::{UiEvent};
 
 pub struct Event<'a, T> {
+    pub obj: &'a mut UiObject<T>,
     pub data: &'a mut T,
     pub event_type: EventType<'a>,
     pub intval: i32,
     pub data: &'a mut T,
     pub event_type: EventType<'a>,
     pub intval: i32,
@@ -151,7 +152,11 @@ pub extern "C" fn event_wrapper<T>(e: *const ffi::UiEvent, data: *mut c_void) {
         let mut event_data = get_event_data(e);
         let event_type = get_event_type(&mut event_data);
 
         let mut event_data = get_event_data(e);
         let event_type = get_event_type(&mut event_data);
 
+        let obj_ptr = unsafe { ui_event_get_obj(e) };
+        let mut obj: UiObject<T> = UiObject::from_ptr(obj_ptr);
+
         let mut event = Event {
         let mut event = Event {
+            obj: &mut obj,
             data: wdata,
             event_type: event_type,
             intval: ev_int,
             data: wdata,
             event_type: event_type,
             intval: ev_int,
@@ -196,6 +201,7 @@ pub extern "C" fn action_event_wrapper<T>(e: *const ffi::UiEvent, data: *mut c_v
 }
 
 extern "C" {
 }
 
 extern "C" {
+    fn ui_event_get_obj(event: *const UiEvent) -> *mut ffi::UiObject;
     fn ui_event_get_windowdata(event: *const UiEvent) -> *const c_void;
     fn ui_event_get_document(event: *const UiEvent) -> *const c_void;
     fn ui_event_get_eventdata(event: *const UiEvent) -> *mut c_void;
     fn ui_event_get_windowdata(event: *const UiEvent) -> *const c_void;
     fn ui_event_get_document(event: *const UiEvent) -> *const c_void;
     fn ui_event_get_eventdata(event: *const UiEvent) -> *mut c_void;
index 050dd1ba994c73977611347f6b392179166f52de..481e6d933798089f15532346a47418928518dc31 100644 (file)
@@ -195,12 +195,25 @@ impl<T: UiModel + UiActions> UiDoc<T> {
 }
 
 impl<T> UiObject<T> {
 }
 
 impl<T> UiObject<T> {
+    pub fn from_ptr(ptr: *mut ffi::UiObject) -> UiObject<T> {
+        let ctx_ptr = unsafe { ui_object_get_context(ptr) };
+        unsafe {
+            ui_object_ref(ptr);
+        }
+        UiObject {
+            ptr: ptr,
+            ctx: UiContext::from_ptr(ctx_ptr),
+            _data: PhantomData
+        }
+    }
+
     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();
     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);
+            if !wdata_ptr.is_null() {
+                f(&mut *wdata_ptr);
+            }
         }
     }
 
         }
     }