Sat, 13 Jun 2026 17:19:59 +0200
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);