# HG changeset patch # User Olaf Wintermann # Date 1784645204 -7200 # Node ID 86ed681698aa3600fa4182f1c86eb768d2939ca0 # Parent 943fc009bd1c42e98968d9dd64d3b4278b250499 fix win32 build diff -r 943fc009bd1c -r 86ed681698aa ucx/allocator.c --- a/ucx/allocator.c Wed Jul 15 20:03:33 2026 +0200 +++ b/ucx/allocator.c Tue Jul 21 16:46:44 2026 +0200 @@ -101,8 +101,8 @@ &cx_stdlib_allocator_class, NULL }; -const CxAllocator * const cxStdlibAllocator = &cx_stdlib_allocator; -const CxAllocator * cxDefaultAllocator = &cx_stdlib_allocator; +CX_EXPORT const CxAllocator * const cxStdlibAllocator = &cx_stdlib_allocator; +CX_EXPORT const CxAllocator * cxDefaultAllocator = &cx_stdlib_allocator; int cx_reallocate_( void **mem, diff -r 943fc009bd1c -r 86ed681698aa ui/ui/toolkit.h --- a/ui/ui/toolkit.h Wed Jul 15 20:03:33 2026 +0200 +++ b/ui/ui/toolkit.h Tue Jul 21 16:46:44 2026 +0200 @@ -91,6 +91,7 @@ #elif UI_WIN32 #include "win32.h" +typedef SSIZE_T ssize_t; #define UIWIDGET W32Widget* #define UIWINDOW void* diff -r 943fc009bd1c -r 86ed681698aa ui/win32/container.c --- a/ui/win32/container.c Wed Jul 15 20:03:33 2026 +0200 +++ b/ui/win32/container.c Tue Jul 21 16:46:44 2026 +0200 @@ -99,14 +99,14 @@ return box_create(obj, args, UI_BOX_HORIZONTAL); } -UiContainerX* ui_box_container_create(UiObject *obj, HWND hwnd, UiBoxOrientation orientation, short spacing, GridEdgeInsets padding) { +UiContainer* ui_box_container_create(UiObject *obj, HWND hwnd, UiBoxOrientation orientation, short spacing, GridEdgeInsets padding) { UiBoxContainer *container = cxZalloc(obj->ctx->allocator, sizeof(UiBoxContainer)); container->container.hwnd = hwnd; container->container.add = ui_box_container_add; container->layout = ui_grid_layout_create(obj->ctx->allocator, spacing, spacing); container->layout->padding = padding; container->orientation = orientation; - return (UiContainerX*)container; + return (UiContainer*)container; } void ui_box_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout) { @@ -156,7 +156,7 @@ UiGridWidget *widget = w32_widget_create(&grid_layout_widget_class, hwnd, sizeof(UiGridWidget)); ui_container_add(container, (W32Widget*)widget, &layout); - UiContainerX *gridContainer = ui_grid_container_create(obj, hwnd, args->columnspacing, args->rowspacing, INSETS_ZERO); + UiContainer *gridContainer = ui_grid_container_create(obj, hwnd, args->columnspacing, args->rowspacing, INSETS_ZERO); uic_object_push_container(obj, gridContainer); UiGridLayoutContainer *grid = (UiGridLayoutContainer*)gridContainer; @@ -169,13 +169,13 @@ return (W32Widget*)widget; } -UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short columnspacing, short rowspacing, GridEdgeInsets padding) { +UiContainer* ui_grid_container_create(UiObject *obj, HWND hwnd, short columnspacing, short rowspacing, GridEdgeInsets padding) { UiGridLayoutContainer *container = cxZalloc(obj->ctx->allocator, sizeof(UiGridLayoutContainer)); container->container.hwnd = hwnd; container->container.add = ui_grid_container_add; container->layout = ui_grid_layout_create(obj->ctx->allocator, columnspacing, rowspacing); container->layout->padding = padding; - return (UiContainerX*)container; + return (UiContainer*)container; } void ui_grid_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout) { @@ -204,12 +204,12 @@ /* ---------------------------- Container Helper ---------------------------- */ void ui_container_begin_close(UiObject *obj) { - UiContainerX *ct = obj->container_end; + UiContainer *ct = obj->container_end; ct->close = 1; } int ui_container_finish(UiObject *obj) { - UiContainerX *ct = obj->container_end; + UiContainer *ct = obj->container_end; if(ct->close) { ui_end_new(obj); return 0; diff -r 943fc009bd1c -r 86ed681698aa ui/win32/container.h --- a/ui/win32/container.h Wed Jul 15 20:03:33 2026 +0200 +++ b/ui/win32/container.h Tue Jul 21 16:46:44 2026 +0200 @@ -63,7 +63,7 @@ struct UiContainerPrivate { - UiContainerX container; + UiContainer container; HWND (*parent)(UiContainerPrivate*); void (*add)(UiContainerPrivate*, W32Widget*, UiLayout*); UiContainerType type; @@ -101,10 +101,10 @@ int ui_grid_widget_event(W32Widget *widget, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); W32Size ui_grid_layout_get_preferred_size(W32Widget *widget); -UiContainerX* ui_box_container_create(UiObject *obj, HWND hwnd, UiBoxOrientation orientation, short spacing, GridEdgeInsets padding); +UiContainer* ui_box_container_create(UiObject *obj, HWND hwnd, UiBoxOrientation orientation, short spacing, GridEdgeInsets padding); void ui_box_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout); -UiContainerX* ui_grid_container_create( +UiContainer* ui_grid_container_create( UiObject *obj, HWND hwnd, short columnspacing, diff -r 943fc009bd1c -r 86ed681698aa ui/win32/menu.c --- a/ui/win32/menu.c Wed Jul 15 20:03:33 2026 +0200 +++ b/ui/win32/menu.c Tue Jul 21 16:46:44 2026 +0200 @@ -289,6 +289,7 @@ ls->command_ids = cxArrayListCreate(a, sizeof(uint64_t), 16); ls->index = pos; ls->getvalue = il->getvalue; + ls->getvaluedata = NULL; // TODO ls->callback = il->callback; ls->userdata = il->userdata; ls->addseparator = il->addseparator; @@ -339,12 +340,15 @@ } cxListClear(list->command_ids); // TODO: we could reuse some of the ids - ui_getvaluefunc getvalue = list->getvalue; + ui_getvaluefunc2 getvalue = list->getvalue; + void *getvaluedata = list->getvaluedata; void* elm = ui_list_first(ls); int pos = list->index; + int row = 0; while(elm) { - char *label = (char*) (getvalue ? getvalue(elm, 0) : elm); + UiBool freeResult = FALSE; + char *label = (char*) (getvalue ? getvalue(ls, elm, row, 0, getvaluedata, &freeResult) : elm); if (!label) { label = ""; } @@ -353,7 +357,12 @@ InsertMenu(list->menu, pos++, MF_STRING, id, label); cxListAdd(list->command_ids, &id); + if (freeResult) { + free(label); + } + elm = ui_list_next(ls); + row++; } } diff -r 943fc009bd1c -r 86ed681698aa ui/win32/menu.h --- a/ui/win32/menu.h Wed Jul 15 20:03:33 2026 +0200 +++ b/ui/win32/menu.h Tue Jul 21 16:46:44 2026 +0200 @@ -55,7 +55,8 @@ CxList *command_ids; int index; UiVar *var; - ui_getvaluefunc getvalue; + ui_getvaluefunc2 getvalue; + void *getvaluedata; ui_callback callback; void *userdata; bool addseparator; diff -r 943fc009bd1c -r 86ed681698aa ui/win32/text.c --- a/ui/win32/text.c Wed Jul 15 20:03:33 2026 +0200 +++ b/ui/win32/text.c Tue Jul 21 16:46:44 2026 +0200 @@ -127,7 +127,7 @@ return NULL; } -void ui_textarea_insert(UiText *text, int pos, char *str) { +void ui_textarea_insert(UiText *text, int pos, const char *str) { } diff -r 943fc009bd1c -r 86ed681698aa ui/win32/text.h --- a/ui/win32/text.h Wed Jul 15 20:03:33 2026 +0200 +++ b/ui/win32/text.h Tue Jul 21 16:46:44 2026 +0200 @@ -53,7 +53,7 @@ void ui_textarea_set(UiText *text, const char *str); char* ui_textarea_get(UiText *text); char* ui_textarea_getsubstr(UiText *text, int begin, int end); -void ui_textarea_insert(UiText *text, int pos, char *str); +void ui_textarea_insert(UiText *text, int pos, const char *str); void ui_textarea_setposition(UiText *text, int pos); int ui_textarea_position(UiText *text); void ui_textarea_setselection(UiText *text, int begin, int end); diff -r 943fc009bd1c -r 86ed681698aa ui/win32/window.c --- a/ui/win32/window.c Wed Jul 15 20:03:33 2026 +0200 +++ b/ui/win32/window.c Tue Jul 21 16:46:44 2026 +0200 @@ -105,7 +105,7 @@ UpdateWindow(hwnd); - UiContainerX *container = ui_box_container_create(obj, hwnd, UI_BOX_VERTICAL, 0, INSETS_ZERO); + UiContainer *container = ui_box_container_create(obj, hwnd, UI_BOX_VERTICAL, 0, INSETS_ZERO); uic_object_push_container(obj, container); UiBoxContainer *box = (UiBoxContainer*)container;