git.lucas.co / cce-data-editor
structured data editor
git clone https://git.lucas.co/cce-data-editor.git

commit978250c54c3370ada5bc11d77ba75cd71833056d
parentf67ff13f15
authorLucas Galante <[email protected]>
date2026-06-29 12:17
Register widgets in UiContext to support click and hold drag exclusions

 src/main.rs | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/src/main.rs b/src/main.rs
index 05a5288..52e971b 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -189,6 +189,7 @@ struct DataEditorApp {
     ui_context: cce_ui::context::UiContext,
     ctrl_pressed: bool,
     initial_focus: bool,
+    widgets_registered: bool,
 }
 
 impl DataEditorApp {
@@ -567,6 +568,7 @@ impl Application for DataEditorApp {
             ui_context: cce_ui::context::UiContext::new(),
             ctrl_pressed: false,
             initial_focus: true,
+            widgets_registered: false,
         }
     }
 
@@ -827,6 +829,25 @@ impl Application for DataEditorApp {
     }
 
     fn view(&mut self, quads: &mut Vec<(f32, f32, f32, f32, [f32; 4])>, size: LogicalSize, scale: f64) {
+        if !self.widgets_registered {
+            self.widgets_registered = true;
+            let self_ptr = self as *mut Self;
+            unsafe {
+                self.ui_context.register_widget(self.btn_open.base().unwrap().id(), &mut (*self_ptr).btn_open as *mut Button as *mut (dyn Element + 'static));
+                self.ui_context.register_widget(self.btn_save.base().unwrap().id(), &mut (*self_ptr).btn_save as *mut Button as *mut (dyn Element + 'static));
+                self.ui_context.register_widget(self.btn_save_as.base().unwrap().id(), &mut (*self_ptr).btn_save_as as *mut Button as *mut (dyn Element + 'static));
+                self.ui_context.register_widget(self.btn_format.base().unwrap().id(), &mut (*self_ptr).btn_format as *mut Button as *mut (dyn Element + 'static));
+                self.ui_context.register_widget(self.btn_exit.base().unwrap().id(), &mut (*self_ptr).btn_exit as *mut Button as *mut (dyn Element + 'static));
+                self.ui_context.register_widget(self.btn_add_key.base().unwrap().id(), &mut (*self_ptr).btn_add_key as *mut Button as *mut (dyn Element + 'static));
+                self.ui_context.register_widget(self.btn_apply_val.base().unwrap().id(), &mut (*self_ptr).btn_apply_val as *mut Button as *mut (dyn Element + 'static));
+                self.ui_context.register_widget(self.btn_delete_key.base().unwrap().id(), &mut (*self_ptr).btn_delete_key as *mut Button as *mut (dyn Element + 'static));
+                self.ui_context.register_widget(self.new_key_editor.base().unwrap().id(), &mut (*self_ptr).new_key_editor as *mut TextBox as *mut (dyn Element + 'static));
+                self.ui_context.register_widget(self.selected_value_editor.base().unwrap().id(), &mut (*self_ptr).selected_value_editor as *mut TextBox as *mut (dyn Element + 'static));
+                self.ui_context.register_widget(self.raw_json_editor.base().unwrap().id(), &mut (*self_ptr).raw_json_editor as *mut TextBox as *mut (dyn Element + 'static));
+            }
+            self.ui_context.rebuild_spatial_grid();
+        }
+
         if self.initial_focus {
             self.initial_focus = false;
             self.ui_context.set_focused(&mut self.raw_json_editor);
@@ -862,6 +883,7 @@ impl Application for DataEditorApp {
             self.raw_json_editor.set_rect(410.0, 52.0, right_w, right_h);
             
             self.rebuild_text_items();
+            self.ui_context.rebuild_spatial_grid();
             self.needs_rebuild = false;
         }