Fri, 19 Jun 2026 19:59:02 +0200
set event obj in attachment change events
| ui/common/context.c | file | annotate | diff | comparison | revisions | |
| ui/common/context.h | file | annotate | diff | comparison | revisions |
--- a/ui/common/context.c Fri Jun 19 17:49:31 2026 +0200 +++ b/ui/common/context.c Fri Jun 19 19:59:02 2026 +0200 @@ -199,7 +199,13 @@ doc_ctx->onattach(&event, doc_ctx->onattachdata); } uic_check_state_widgets(ui_context_toplevel_parent(ctx)); - uic_send_status_change(doc_ctx); + UiObject *obj = ui_context_get_parent_obj(ctx); + uic_send_status_change(doc_ctx, obj); + + UiContext *obj_ctx = uic_obj_context(ctx); + if(obj_ctx) { + ui_update_action_bindings(obj_ctx); + } } static void uic_context_unbind_vars(UiContext *ctx) { @@ -247,7 +253,10 @@ uic_context_unbind_vars(doc_ctx); // unbind all doc/subdoc vars from the parent doc_ctx->parent = NULL; - ui_update_action_bindings(ctx); + UiContext *obj_ctx = uic_obj_context(ctx); + if(obj_ctx) { + ui_update_action_bindings(obj_ctx); + } if(doc_ctx->ondetach) { UiEvent event; memset(&event, 0, sizeof(UiEvent)); @@ -256,7 +265,7 @@ } uic_check_state_widgets(ui_context_toplevel_parent(ctx)); - uic_send_status_change(doc_ctx); + uic_send_status_change(doc_ctx, NULL); ui_document_unref(document); } @@ -272,19 +281,19 @@ i = cxListIterator(ls); cx_foreach(void *, doc, i) { uic_context_detach_document(ctx, doc); - uic_send_status_change(ui_document_context(doc)); + uic_send_status_change(ui_document_context(doc), NULL); } cxListFree(ls); ui_update_action_bindings(ctx); } -static void send_status_change(UiContext *ctx, UiEvent *event) { +static void send_status_change(UiContext *ctx, UiEvent *event, UiObject *obj) { CxIterator i = cxListIterator(ctx->documents); cx_foreach(void *, doc, i) { UiContext *doc_ctx = ui_document_context(doc); if(doc_ctx->onattachmentstatuschange) { - event->obj = doc_ctx->obj; + event->obj = doc_ctx->obj ? doc_ctx->obj : obj; event->window = event->obj ? event->obj->window : NULL; event->document = doc_ctx->self_doc ? doc_ctx->self_doc : doc_ctx->document; doc_ctx->onattachmentstatuschange(event, doc_ctx->onattachmentstatuschangedata); @@ -292,17 +301,17 @@ } if(ctx->onattachmentstatuschange) { - event->obj = ctx->obj; + event->obj = ctx->obj ? ctx->obj : obj; event->window = event->obj ? event->obj->window : NULL; event->document = ctx->self_doc ? ctx->self_doc : ctx->document; ctx->onattachmentstatuschange(event, ctx->onattachmentstatuschangedata); } } -void uic_send_status_change(UiContext *ctx) { +void uic_send_status_change(UiContext *ctx, UiObject *obj) { UiEvent event; memset(&event, 0, sizeof(UiEvent)); - send_status_change(ctx, &event); + send_status_change(ctx, &event, obj); } @@ -1104,11 +1113,20 @@ } int ui_context_is_attached_to_obj(UiContext *ctx) { + return uic_obj_context(ctx) != NULL; +} + +UIEXPORT UiObject* ui_context_get_parent_obj(UiContext *ctx) { + UiContext *obj_ctx = uic_obj_context(ctx); + return obj_ctx ? obj_ctx->obj : NULL; +} + +UiContext* uic_obj_context(UiContext *ctx) { if(ctx->obj) { - return TRUE; + return ctx; } if(ctx->parent == NULL) { - return FALSE; + return NULL; } - return ui_context_is_attached_to_obj(ctx->parent); + return uic_obj_context(ctx->parent); }
--- a/ui/common/context.h Fri Jun 19 17:49:31 2026 +0200 +++ b/ui/common/context.h Fri Jun 19 19:59:02 2026 +0200 @@ -153,7 +153,7 @@ void uic_context_detach_context(UiContext *ctx, UiContext *doc_ctx); // TODO void uic_context_detach_all(UiContext *ctx); -void uic_send_status_change(UiContext *ctx); +void uic_send_status_change(UiContext *ctx, UiObject *obj); UiVar* uic_get_var(UiContext *ctx, const char *name); UiVar* uic_get_var_t(UiContext *ctx, const char *name, UiVarType type); @@ -179,6 +179,8 @@ void uic_add_state_widget_i(UiContext *ctx, void *widget, ui_enablefunc enable, const int *states, size_t numstates); void uic_remove_state_widget(UiContext *ctx, void *widget); +UiContext* uic_obj_context(UiContext *ctx); + UIEXPORT void ui_context_onattach(UiContext *ctx, ui_callback cb, void *data); UIEXPORT void ui_context_ondetach(UiContext *ctx, ui_callback cb, void *data); UIEXPORT void ui_context_onattachmentstatuschange(UiContext *ctx, ui_callback cb, void *data); @@ -188,6 +190,7 @@ UIEXPORT int ui_context_is_attached(UiContext *ctx); UIEXPORT int ui_context_is_attached_to_obj(UiContext *ctx); +UIEXPORT UiObject* ui_context_get_parent_obj(UiContext *ctx); #ifdef __cplusplus }