]> uap-core.de Git - note.git/commitdiff
fix note save main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 28 May 2026 16:21:10 +0000 (18:21 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 28 May 2026 16:21:10 +0000 (18:21 +0200)
application/src/note.rs
application/src/notebook.rs
application/src/window.rs
ui/cocoa/Toolbar.m
ui/cocoa/toolkit.m
ui/common/context.c
ui/common/types.c
ui/common/wrapper.c
ui/gtk/text.c

index 14b7c64ae4c86aa0a3e4984e965cfb08f48490a7..4a9bd4247b1652c0f64de84f055df180dab86b29 100644 (file)
@@ -24,6 +24,7 @@ pub struct Note {
 #[ui_actions]
 impl Note {
     pub fn init_from_model(&mut self, model: &entity::note::Model) {
+        self.note_id = model.note_id;
         self.text.set(model.content.as_str());
 
         let tab = match model.kind {
index 2239b5ab9d3cc4a5590a74792b6fa8aa31f9c1a3..eb1249df169684da6f4ce0ce62471b8e528d0381 100644 (file)
@@ -93,4 +93,10 @@ pub fn note_getvalue<'a>(elm: &Note, col: i32, _row: i32) -> ListValue<'a> {
         1 => ListValue::String(elm.lastmodified.to_string()),
         _ => ListValue::None
     }
+}
+
+impl Drop for Notebook {
+    fn drop(&mut self) {
+        println!("Notebook dropped");
+    }
 }
\ No newline at end of file
index ac5e96b0c9a19579d2c07f1e93b9a7dddfcea1d2..a3629cab0cd6511806a8a3c22ad7cfef43e5379e 100644 (file)
@@ -49,6 +49,12 @@ pub struct MainWindow {
     notebooks: UiSourceList<Collection>
 }
 
+impl Drop for MainWindow {
+    fn drop(&mut self) {
+        println!("MainWindow dropped!");
+    }
+}
+
 #[ui_actions]
 impl MainWindow {
     pub fn new(app: &App) -> MainWindow {
index cf03ced59342c3e5a52334fdc109400d6fd2be25..8817b8ecbf89d40506bc7dd0212b615ea19b5145 100644 (file)
@@ -243,14 +243,23 @@ NSToolbarItem* ui_nstoolbaritem_create_toggle(UiObject *obj, UiToolbarToggleItem
     }
     objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN);
     
-    NSSegmentedControl *seg;
+    NSSegmentedControl *seg = nil;
     if(!item->args.icon) {
-        NSArray *labels = @[[[NSString alloc] initWithUTF8String:item->args.label]];
-        seg = [NSSegmentedControl segmentedControlWithLabels:labels trackingMode:NSSegmentSwitchTrackingSelectAny target:event action:@selector(handleEvent:)];
-        button.view = seg;
+        if(item->args.label) {
+            NSArray *labels = @[[[NSString alloc] initWithUTF8String:item->args.label]];
+            seg = [NSSegmentedControl segmentedControlWithLabels:labels trackingMode:NSSegmentSwitchTrackingSelectAny target:event action:@selector(handleEvent:)];
+            button.view = seg;
+        } else {
+            NSLog(@"UI Error: toggle button has no icon or label");
+        }
     } else {
-        NSArray *images = @[ui_cocoa_named_icon(item->args.icon)];
-        seg = [NSSegmentedControl segmentedControlWithImages:images trackingMode:NSSegmentSwitchTrackingSelectAny target:event action:@selector(handleEvent:)];
+        NSImage *image = ui_cocoa_named_icon(item->args.icon);
+        if(image != nil) {
+            NSArray *images = @[image];
+            seg = [NSSegmentedControl segmentedControlWithImages:images trackingMode:NSSegmentSwitchTrackingSelectAny target:event action:@selector(handleEvent:)];
+        } else {
+            NSLog(@"UI Error: icon %s not found", item->args.icon);
+        }
     }
     button.view = seg;
     
@@ -265,7 +274,6 @@ NSToolbarItem* ui_nstoolbaritem_create_toggle(UiObject *obj, UiToolbarToggleItem
             
         }
         i->obj = (__bridge void*)seg;
-        printf("seg: %p\n", seg);
         i->get = ui_toolbar_seg_toggleitem_get;
         i->set = ui_toolbar_seg_toggleitem_set;
     }
index 7168465f287aacc3d82c032023bbff0e02d0cd84..6eb503e9684860ccf314d166a859cbe5733c0771 100644 (file)
@@ -76,11 +76,6 @@ void ui_init(const char *appname, int argc, char **argv) {
     
     app_delegate = [[AppDelegate alloc] init];
     
-    if(app.delegate != nil) {
-        printf("app delegate exists\n");
-    } else {
-        printf("app delegate is null\n");
-    }
     fflush(stdout);
     app.delegate = app_delegate;
     
@@ -130,6 +125,9 @@ void ui_cocoa_onexit(void) {
 
 void ui_main(void) {
     NSApplicationMain(app_argc, app_argv);
+    //[NSApp finishLaunching];
+    //[NSApp activateIgnoringOtherApps:YES];
+    //[NSApp run];
     if(exit_on_shutdown) {
         exit(0);
     }
@@ -147,6 +145,12 @@ void ui_app_quit(void) {
     [[NSApplication sharedApplication] terminate:nil];
 }
 
+void ui_open_uri(const char *uri) {
+    NSString *urlString = [NSString stringWithUTF8String:uri];
+    NSURL *url = [NSURL URLWithString:urlString];
+    [[NSWorkspace sharedWorkspace] openURL:url];
+}
+
 /* ------------------- Window Visibility functions ------------------- */
 
 void ui_show(UiObject *obj) {
index 19de77d920d3e78c4a4d7f7ca8f721b7ad8e1b5e..22ecd55f860f239401e194b7f23e4f2db77d1261 100644 (file)
@@ -109,6 +109,7 @@ void uic_context_remove_destructor(UiContext *ctx, void *data) {
 void uic_context_prepare_close(UiContext *ctx) {
     cxListClear(ctx->states);
     cxListClear(ctx->state_widgets);
+    cxListClear(ctx->action_bindings);
 }
 
 void uic_context_destroy(UiContext *ctx, void *document) {
@@ -134,6 +135,8 @@ void uic_context_destroy(UiContext *ctx, void *document) {
         h->destructor(h->data);
     }
     
+    uic_context_detach_all(ctx);
+    
     cxMempoolFree(ctx->mp);
 }
 
index 0e62a7abcb3276514df79bd7cd26932c86210885..7105af5ba7bdabd95ee33da1188268e908b17286 100644 (file)
@@ -776,6 +776,14 @@ void uic_string_unbind(UiString *s) {
 }
 
 void uic_text_unbind(UiText *t) {
+    t->obj = NULL;
+    if(t->data1 && t->datatype == UI_TEXT_TYPE_BUFFER) {
+        // the binding functions all work with t->data1, not t->obj
+        // and we don't want to NULL them, because they will be still
+        // functional even without a widget binding
+        return;
+    }
+    
     t->set = NULL;
     t->get = NULL;
     t->getsubstr = NULL;
@@ -787,7 +795,6 @@ void uic_text_unbind(UiText *t) {
     t->setselection = NULL;
     t->length = NULL;
     t->remove = NULL;
-    t->obj = NULL;
 }
 
 void uic_range_unbind(UiRange *r) {
index a6ef56a089634f00eea7bb96d309af9cff79766f..7f1441d492a0ede0dd74ab20ebdd87ebb472dacc 100644 (file)
@@ -52,6 +52,7 @@ void ui_object_set_onclose(UiObject *obj, ui_callback callback, void *userdata)
 
 static int obj_unref(void *ptr) {
     ui_object_unref(ptr);
+    return 0;
 }
 
 void ui_mainthread_object_unref(UiObject *obj) {
@@ -62,6 +63,7 @@ void ui_mainthread_object_unref(UiObject *obj) {
 
 static int doc_unref(void *ptr) {
     ui_document_unref(ptr);
+    return 0;
 }
 
 void ui_mainthread_document_unref(void *doc) {
index 3ae5318783e87b7da5c7dbc407e61c58e2ca9ca6..4fc0eb152191cb862fed2923a4e665940c61f8b0 100644 (file)
@@ -406,7 +406,9 @@ int ui_textarea_position(UiText *text) {
 }
 
 void ui_textarea_showposition(UiText *text, int pos) {
-    ui_textarea_scroll_to(text->obj, pos);
+    if(text->obj) {
+        ui_textarea_scroll_to(text->obj, pos);
+    }
 }
 
 void ui_textarea_setselection(UiText *text, int begin, int end) {
@@ -564,6 +566,7 @@ void ui_textbuf_delete(
     if(!value->data2) {
         value->data2 = ui_create_undomgr();
     }
+    GtkTextBuffer *buf = value->data1;
     UiUndoMgr *mgr = value->data2;
     if(!mgr->event) {
         return;
@@ -583,7 +586,7 @@ void ui_textbuf_delete(
         }
     }
     
-    char *text = gtk_text_buffer_get_text(value->obj, start, end, FALSE);
+    char *text = gtk_text_buffer_get_text(buf, start, end, FALSE);
     
     UiTextBufOp *op = malloc(sizeof(UiTextBufOp));
     op->prev = NULL;
@@ -659,6 +662,7 @@ int ui_check_insertstr(char *oldstr, int oldlen, char *newstr, int newlen) {
 }
 
 void ui_text_undo(UiText *value) {
+    GtkTextBuffer *buf = value->data1;
     UiUndoMgr *mgr = value->data2;
     
     if(mgr->cur) {
@@ -668,17 +672,17 @@ void ui_text_undo(UiText *value) {
             case UI_TEXTBUF_INSERT: {
                 GtkTextIter begin;
                 GtkTextIter end;
-                gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start);
-                gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end);
-                gtk_text_buffer_delete(value->obj, &begin, &end);
+                gtk_text_buffer_get_iter_at_offset(buf, &begin, op->start);
+                gtk_text_buffer_get_iter_at_offset(buf, &end, op->end);
+                gtk_text_buffer_delete(buf, &begin, &end);
                 break;
             }
             case UI_TEXTBUF_DELETE: {
                 GtkTextIter begin;
                 GtkTextIter end;
-                gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start);
-                gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end);
-                gtk_text_buffer_insert(value->obj, &begin, op->text, op->len);
+                gtk_text_buffer_get_iter_at_offset(buf, &begin, op->start);
+                gtk_text_buffer_get_iter_at_offset(buf, &end, op->end);
+                gtk_text_buffer_insert(buf, &begin, op->text, op->len);
                 break;
             }
         }
@@ -688,6 +692,7 @@ void ui_text_undo(UiText *value) {
 }
 
 void ui_text_redo(UiText *value) {
+    GtkTextBuffer *buf = value->data1;
     UiUndoMgr *mgr = value->data2;
     
     UiTextBufOp *elm = NULL;
@@ -706,17 +711,17 @@ void ui_text_redo(UiText *value) {
             case UI_TEXTBUF_INSERT: {
                 GtkTextIter begin;
                 GtkTextIter end;
-                gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start);
-                gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end);
-                gtk_text_buffer_insert(value->obj, &begin, op->text, op->len);
+                gtk_text_buffer_get_iter_at_offset(buf, &begin, op->start);
+                gtk_text_buffer_get_iter_at_offset(buf, &end, op->end);
+                gtk_text_buffer_insert(buf, &begin, op->text, op->len);
                 break;
             }
             case UI_TEXTBUF_DELETE: {
                 GtkTextIter begin;
                 GtkTextIter end;
-                gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start);
-                gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end);
-                gtk_text_buffer_delete(value->obj, &begin, &end);
+                gtk_text_buffer_get_iter_at_offset(buf, &begin, op->start);
+                gtk_text_buffer_get_iter_at_offset(buf, &end, op->end);
+                gtk_text_buffer_delete(buf, &begin, &end);
                 break;
             }
         }