add ui_document_onattach_action/ui_document_ondetach_action default tip

Sat, 13 Jun 2026 17:19:59 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 13 Jun 2026 17:19:59 +0200
changeset 1196
296b8b6eaae6
parent 1195
6ec3c71ba298

add ui_document_onattach_action/ui_document_ondetach_action

ui/common/action.c file | annotate | diff | comparison | revisions
ui/common/document.c file | annotate | diff | comparison | revisions
ui/ui/toolkit.h file | annotate | diff | comparison | revisions
--- a/ui/common/action.c	Sat Jun 13 17:08:09 2026 +0200
+++ b/ui/common/action.c	Sat Jun 13 17:19:59 2026 +0200
@@ -227,6 +227,22 @@
     broadcast_action(action_name, eventdata, UI_EVENT_DATA_POINTER, intval);
 }
 
+void ui_call_action_on(UiContext *ctx, const char *action) {
+    UiEvent event;
+    memset(&event, 0, sizeof(UiEvent));
+    event.obj = ctx->obj;
+    event.window = event.obj ? event.obj->window : NULL;
+    event.document = ctx->self_doc ? ctx->self_doc : ctx->document;
+    
+    UiAction *a = NULL;
+    if(ctx->actions) {
+        a = cxMapGet(ctx->actions, action);
+    }
+    if(a && a->callback) {
+        a->callback(&event, a->userdata);
+    }
+}
+
 typedef struct UiActionBroadcast {
     char *action;
     void *eventdata;
--- a/ui/common/document.c	Sat Jun 13 17:08:09 2026 +0200
+++ b/ui/common/document.c	Sat Jun 13 17:19:59 2026 +0200
@@ -87,14 +87,34 @@
     return ctx->obj;
 }
 
-void  ui_document_onattach(void *doc, ui_callback cb, void *data) {
+void ui_document_onattach(void *doc, ui_callback cb, void *data) {
     UiContext *ctx = ui_document_context(doc);
     ctx->onattach = cb;
     ctx->onattachdata = data;
 }
 
-void  ui_document_ondetach(void *doc, ui_callback cb, void *data) {
+void ui_document_ondetach(void *doc, ui_callback cb, void *data) {
     UiContext *ctx = ui_document_context(doc);
     ctx->ondetach = cb;
     ctx->ondetachdata = data;
 }
+
+static void attachment_action_callback(UiEvent *event, void *action) {
+    if(event->document) {
+        UiContext *ctx = ui_document_context(event->document);
+        ui_call_action_on(ctx, action);
+    }
+}
+
+void ui_document_onattach_action(void *doc, const char *action) {
+    UiContext *ctx = ui_document_context(doc);
+    ctx->onattach = attachment_action_callback;
+    ctx->onattachdata = ui_strdup(ctx, action);
+}
+
+void ui_document_ondetach_action(void *doc, const char *action) {
+    UiContext *ctx = ui_document_context(doc);
+    ctx->ondetach = attachment_action_callback;
+    ctx->ondetachdata = ui_strdup(ctx, action);
+}
+
--- a/ui/ui/toolkit.h	Sat Jun 13 17:08:09 2026 +0200
+++ b/ui/ui/toolkit.h	Sat Jun 13 17:19:59 2026 +0200
@@ -578,6 +578,8 @@
 UIEXPORT void  ui_document_destroy(void *doc);
 UIEXPORT void  ui_document_onattach(void *doc, ui_callback cb, void *data);
 UIEXPORT void  ui_document_ondetach(void *doc, ui_callback cb, void *data);
+UIEXPORT void  ui_document_onattach_action(void *doc, const char *action);
+UIEXPORT void  ui_document_ondetach_action(void *doc, const char *action);
 
 UIEXPORT UiContext* ui_document_context(void *doc);
 UIEXPORT void* ui_context_document(UiContext *ctx);
@@ -610,6 +612,7 @@
 UIEXPORT void ui_mainthread_broadcast(const char *action_name);
 UIEXPORT void ui_mainthread_broadcast2(const char *action_name, void *eventdata, int intval);
 UIEXPORT void ui_mainthread_broadcast3(const char *action_name, void *ptr, uint64_t type_id);
+UIEXPORT void ui_call_action_on(UiContext *ctx, const char *action);
 
 UIEXPORT void ui_set_state(UiContext *ctx, int state);
 UIEXPORT void ui_unset_state(UiContext *ctx, int state);

mercurial