Wed, 03 Jun 2026 19:07:24 +0200
implement actions for toolbar items (Cocoa)
| make/xcode/toolkit/toolkit.xcodeproj/project.pbxproj | file | annotate | diff | comparison | revisions | |
| ui/cocoa/Toolbar.m | file | annotate | diff | comparison | revisions |
--- 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 = "<absolute>"; }; ED3EDBF22F96B2F80096E507 /* action.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = action.h; path = ../../../ui/common/action.h; sourceTree = "<absolute>"; }; ED3EDBF32F96B2F80096E507 /* action.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = action.c; path = ../../../ui/common/action.c; sourceTree = "<absolute>"; }; + ED4AB28C2FD09446001B6C02 /* icons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = icons.h; path = /Users/olaf/Projekte/toolkit/ui/common/icons.h; sourceTree = "<absolute>"; }; + ED4AB28D2FD09446001B6C02 /* icons.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = icons.c; path = /Users/olaf/Projekte/toolkit/ui/common/icons.c; sourceTree = "<absolute>"; }; ED52BFAE2D86FC5D00FD8BE5 /* text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = text.h; path = ../../../ui/cocoa/text.h; sourceTree = "<absolute>"; }; ED52BFAF2D86FC5D00FD8BE5 /* text.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = text.m; path = ../../../ui/cocoa/text.m; sourceTree = "<absolute>"; }; 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 */,
--- 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; }