ui/win32/menu.c

changeset 1035
86d3a45dc928
parent 954
07c1effb2a31
child 1036
24677835f298
--- a/ui/win32/menu.c	Wed Dec 31 09:16:02 2025 +0100
+++ b/ui/win32/menu.c	Wed Dec 31 10:06:15 2025 +0100
@@ -58,7 +58,6 @@
     UiMenu *menu = (UiMenu*)item;
     HMENU hMenu = CreatePopupMenu();
     AppendMenu(parent, MF_POPUP, (UINT_PTR)hMenu, menu->label);
-
     int i = 0;
     UiMenuItemI *child = menu->items_begin;
     while (child) {
@@ -67,9 +66,30 @@
     }
 }
 
+static void menu_item_clicked(UiObject *obj, UiMenuItem *item) {
+    UiEvent event;
+    event.obj = obj;
+    event.window = obj->window;
+    event.document = obj->ctx->document;
+    event.eventdata = NULL;
+    event.eventdatatype = 0;
+    event.intval = 0;
+    event.set = 0;
+    if (item->callback) {
+        item->callback(&event, item->userdata);
+    }
+}
+
 void ui_add_menu_item(HMENU parent, int pos, UiMenuItemI *item, UiObject *obj) {
+    uint64_t id = ++obj->ctx->command_id_counter;
+
     UiMenuItem *i = (UiMenuItem*)item;
-    AppendMenu(parent, MF_STRING, 0, i->label);
+    AppendMenu(parent, MF_STRING, id, i->label);
+
+    UiCommand cmd;
+    cmd.callback = (ui_command_func)menu_item_clicked;
+    cmd.userdata = i;
+    cxMapPut(obj->ctx->command_map, id, &cmd);
 }
 
 void ui_add_menu_checkitem(HMENU parent, int pos, UiMenuItemI *item, UiObject *obj) {

mercurial