# HG changeset patch # User Olaf Wintermann # Date 1780506444 -7200 # Node ID 3a2bf179557987a6d7251c0e250c7ccd39ccc2d7 # Parent 6cac1a5b4c47352bc3725e5f0662a07682590ac3 implement actions for toolbar items (Cocoa) diff -r 6cac1a5b4c47 -r 3a2bf1795579 make/xcode/toolkit/toolkit.xcodeproj/project.pbxproj --- a/make/xcode/toolkit/toolkit.xcodeproj/project.pbxproj Tue Jun 02 20:14:14 2026 +0200 +++ b/make/xcode/toolkit/toolkit.xcodeproj/project.pbxproj Wed Jun 03 19:07:24 2026 +0200 @@ -11,6 +11,7 @@ ED2F55AE2E34FAD800A84793 /* Toolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = ED2F55AD2E34FAD800A84793 /* Toolbar.m */; }; ED3EDBD82F96B1910096E507 /* action.m in Sources */ = {isa = PBXBuildFile; fileRef = ED3EDBD72F96B1910096E507 /* action.m */; }; ED3EDBF42F96B2F80096E507 /* action.c in Sources */ = {isa = PBXBuildFile; fileRef = ED3EDBF32F96B2F80096E507 /* action.c */; }; + ED4AB28E2FD09446001B6C02 /* icons.c in Sources */ = {isa = PBXBuildFile; fileRef = ED4AB28D2FD09446001B6C02 /* icons.c */; }; ED52BFB02D86FC5D00FD8BE5 /* text.m in Sources */ = {isa = PBXBuildFile; fileRef = ED52BFAF2D86FC5D00FD8BE5 /* text.m */; }; ED6580EE2CFF19F900F5402F /* context.c in Sources */ = {isa = PBXBuildFile; fileRef = ED6580DD2CFF19F900F5402F /* context.c */; }; ED6580EF2CFF19F900F5402F /* menu.c in Sources */ = {isa = PBXBuildFile; fileRef = ED6580E12CFF19F900F5402F /* menu.c */; }; @@ -76,6 +77,8 @@ ED3EDBE12F96B2100096E507 /* action.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = action.h; path = ../../../ui/cocoa/action.h; sourceTree = ""; }; ED3EDBF22F96B2F80096E507 /* action.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = action.h; path = ../../../ui/common/action.h; sourceTree = ""; }; ED3EDBF32F96B2F80096E507 /* action.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = action.c; path = ../../../ui/common/action.c; sourceTree = ""; }; + ED4AB28C2FD09446001B6C02 /* icons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = icons.h; path = /Users/olaf/Projekte/toolkit/ui/common/icons.h; sourceTree = ""; }; + ED4AB28D2FD09446001B6C02 /* icons.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = icons.c; path = /Users/olaf/Projekte/toolkit/ui/common/icons.c; sourceTree = ""; }; ED52BFAE2D86FC5D00FD8BE5 /* text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = text.h; path = ../../../ui/cocoa/text.h; sourceTree = ""; }; ED52BFAF2D86FC5D00FD8BE5 /* text.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = text.m; path = ../../../ui/cocoa/text.m; sourceTree = ""; }; ED6580AC2CFF122700F5402F /* toolkit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = toolkit.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -251,6 +254,8 @@ ED6580D92CFF19DB00F5402F /* common */ = { isa = PBXGroup; children = ( + ED4AB28C2FD09446001B6C02 /* icons.h */, + ED4AB28D2FD09446001B6C02 /* icons.c */, ED3EDBF22F96B2F80096E507 /* action.h */, ED3EDBF32F96B2F80096E507 /* action.c */, ED67B50C2EEDB89300DA8FD6 /* app.h */, @@ -496,6 +501,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + ED4AB28E2FD09446001B6C02 /* icons.c in Sources */, ED679B0A2E5B266C001D4F71 /* label.m in Sources */, ED6FB03D2E95466F006C6E8E /* args.c in Sources */, ED6FB03E2E95466F006C6E8E /* container.c in Sources */, diff -r 6cac1a5b4c47 -r 3a2bf1795579 ui/cocoa/Toolbar.m --- a/ui/cocoa/Toolbar.m Tue Jun 02 20:14:14 2026 +0200 +++ b/ui/cocoa/Toolbar.m Wed Jun 03 19:07:24 2026 +0200 @@ -39,7 +39,21 @@ } +static void toolitem_set_enabled(void *item, int enabled) { + NSToolbarItem *i = (__bridge NSToolbarItem*)item; + i.enabled = enabled; +} +static void toolitem_bind_action(UiContext *ctx, NSToolbarItem *item, const char *action) { + if(action) { + void *widget = (__bridge void*)item; + uic_bind_action(ctx, action, widget, (ui_enablefunc)toolitem_set_enabled); + UiAction *ui_action = uic_resolve_action(ctx, action); + if(!ui_action) { + toolitem_set_enabled(widget, FALSE); + } + } +} /* --------------------- UiToolbar --------------------- */ @@ -219,12 +233,14 @@ button.image = ui_cocoa_named_icon(item->args.icon); } - if(item->args.onclick) { + if(item->args.onclick || item->args.action) { EventData *event = [[EventData alloc] init:item->args.onclick userdata:item->args.onclickdata action:item->args.action]; event.obj = obj; button.target = event; button.action = @selector(handleEvent:); objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); + + toolitem_bind_action(obj->ctx, button, item->args.action); } return button; }