From: Olaf Wintermann Date: Fri, 3 Apr 2026 12:41:45 +0000 (+0200) Subject: fix build on macos X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=0053a42f0a00f903c54996122580aecca0e4bf11;p=note.git fix build on macos --- diff --git a/ui-rs/build.rs b/ui-rs/build.rs index a760840..a064c55 100644 --- a/ui-rs/build.rs +++ b/ui-rs/build.rs @@ -13,22 +13,31 @@ fn main() { // read the toolkit linker flags from the config.mk file let content = fs::read_to_string(&config_mk) .expect(&format!("Failed to read {}", config_mk.display())); + let mut tokens = vec![]; for line in content.lines() { if line.starts_with("TK_LDFLAGS += ") || line.starts_with("TK_LDFLAGS = ") { - let parts: Vec<&str> = line.split_whitespace().collect(); - for token in &parts[2..] { - if let Some(lib) = token.strip_prefix("-l") { - println!("cargo:rustc-link-lib={}", lib); - } else if token.starts_with("-L") { - let path = &token[2..]; - println!("cargo:rustc-link-search=native={}", path); - } else if token.starts_with("-R") { - let path = &token[2..]; - println!("cargo:rustc-link-arg=-Wl,-rpath,{}", path); - } else { - println!("cargo:rustc-link-arg={}", token); - } + tokens.extend(line.split_whitespace().skip(2)); // skip "TK_LDFLAGS =" + } + } + + let mut iter = tokens.iter(); + while let Some(token) = iter.next() { + if let Some(lib) = token.strip_prefix("-l") { + println!("cargo:rustc-link-lib={}", lib); + } else if token.starts_with("-L") { + let path = &token[2..]; + println!("cargo:rustc-link-search=native={}", path); + } else if token.starts_with("-R") { + let path = &token[2..]; + println!("cargo:rustc-link-arg=-Wl,-rpath,{}", path); + } else if token == &"-framework" { + // The next token is the framework name + if let Some(framework) = iter.next() { + println!("cargo:rustc-link-lib=framework={}", framework); } + } else { + println!("cargo:rustc-link-arg={}", token); } } + } diff --git a/ui/cocoa/BoxContainer.h b/ui/cocoa/BoxContainer.h index a80ae7d..065c78f 100644 --- a/ui/cocoa/BoxContainer.h +++ b/ui/cocoa/BoxContainer.h @@ -26,7 +26,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#import "Container.h" +#import "container.h" #import "GridLayout.h" @interface BoxContainer : GridLayout diff --git a/ui/cocoa/GridLayout.h b/ui/cocoa/GridLayout.h index 362c9b2..c7f7519 100644 --- a/ui/cocoa/GridLayout.h +++ b/ui/cocoa/GridLayout.h @@ -28,7 +28,7 @@ #import "toolkit.h" -#import "Container.h" +#import "container.h" #import diff --git a/ui/cocoa/MainWindow.m b/ui/cocoa/MainWindow.m index c62079f..3806f6c 100644 --- a/ui/cocoa/MainWindow.m +++ b/ui/cocoa/MainWindow.m @@ -27,7 +27,7 @@ */ #import "MainWindow.h" -#import "Container.h" +#import "container.h" #import "GridLayout.h" #import "BoxContainer.h" #import "../common/object.h" diff --git a/ui/cocoa/TabView.h b/ui/cocoa/TabView.h index d6e4b0d..506c1e6 100644 --- a/ui/cocoa/TabView.h +++ b/ui/cocoa/TabView.h @@ -26,7 +26,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#import "Container.h" +#import "container.h" @protocol TabView diff --git a/ui/cocoa/appdelegate.m b/ui/cocoa/appdelegate.m index f0967ed..82d9020 100644 --- a/ui/cocoa/appdelegate.m +++ b/ui/cocoa/appdelegate.m @@ -40,6 +40,7 @@ } - (void)applicationWillTerminate:(NSNotification *)aNotification { + NSLog(@"toolkit applicationWillTerminate"); ui_cocoa_onexit(); } diff --git a/ui/cocoa/button.m b/ui/cocoa/button.m index a2af1a4..03c6367 100644 --- a/ui/cocoa/button.m +++ b/ui/cocoa/button.m @@ -28,7 +28,7 @@ #import "button.h" #import "EventData.h" -#import "Container.h" +#import "container.h" #import "image.h" #import @@ -370,7 +370,7 @@ static char* create_linkbutton_jsonvalue(const char *label, const char *uri, UiB CxJsonWriter writer = cxJsonWriterCompact(); CxBuffer buf; - cxBufferInit(&buf, NULL, NULL, 128, bCX_BUFFER_AUTO_EXTEND); + cxBufferInit(&buf, NULL, NULL, 128, CX_BUFFER_AUTO_EXTEND); cxJsonWrite(&buf, obj, (cx_write_func)cxBufferWrite, &writer); cxJsonValueFree(obj); cxBufferTerminate(&buf); diff --git a/ui/cocoa/container.m b/ui/cocoa/container.m index d9b2e2d..9081da8 100644 --- a/ui/cocoa/container.m +++ b/ui/cocoa/container.m @@ -26,7 +26,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#import "Container.h" +#import "container.h" #import "GridLayout.h" #import "BoxContainer.h" #import "TabView.h" diff --git a/ui/cocoa/entry.h b/ui/cocoa/entry.h index b0cb2fd..227d984 100644 --- a/ui/cocoa/entry.h +++ b/ui/cocoa/entry.h @@ -27,7 +27,7 @@ */ #import "toolkit.h" -#import "Container.h" +#import "container.h" #import "../ui/entry.h" diff --git a/ui/cocoa/image.h b/ui/cocoa/image.h index 8b80a70..70f1d8d 100644 --- a/ui/cocoa/image.h +++ b/ui/cocoa/image.h @@ -28,7 +28,7 @@ #include "../ui/image.h" -#include "Container.h" +#include "container.h" typedef struct UiImage { void *nsimage; diff --git a/ui/cocoa/label.m b/ui/cocoa/label.m index 4e75e01..44e9045 100644 --- a/ui/cocoa/label.m +++ b/ui/cocoa/label.m @@ -27,7 +27,7 @@ */ #import "label.h" -#import "Container.h" +#import "container.h" #import diff --git a/ui/cocoa/list.h b/ui/cocoa/list.h index 6a3b174..173afc6 100644 --- a/ui/cocoa/list.h +++ b/ui/cocoa/list.h @@ -27,7 +27,7 @@ */ #import "toolkit.h" -#import "Container.h" +#import "container.h" #import "../ui/list.h" #import "ListDataSource.h" diff --git a/ui/cocoa/objs.mk b/ui/cocoa/objs.mk index d4d0e61..598237e 100644 --- a/ui/cocoa/objs.mk +++ b/ui/cocoa/objs.mk @@ -38,7 +38,7 @@ COCOAOBJ += UiThread.o COCOAOBJ += MainWindow.o COCOAOBJ += WindowManager.o COCOAOBJ += window.o -COCOAOBJ += Container.o +COCOAOBJ += container.o COCOAOBJ += button.o COCOAOBJ += text.o COCOAOBJ += menu.o diff --git a/ui/cocoa/text.m b/ui/cocoa/text.m index 679968f..d359d44 100644 --- a/ui/cocoa/text.m +++ b/ui/cocoa/text.m @@ -28,7 +28,7 @@ #import "text.h" #import "EventData.h" -#import "Container.h" +#import "container.h" #import UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) { @@ -41,6 +41,11 @@ UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) { scrollview.hasVerticalScroller = YES; scrollview.documentView = textview; + // store link to the textview + // associate it with the textview and the scrollview to support both widgets in ui_textarea_gettextwidget + objc_setAssociatedObject(textview, "ui_textarea", textview, OBJC_ASSOCIATION_ASSIGN); + objc_setAssociatedObject(scrollview, "ui_textarea", textview, OBJC_ASSOCIATION_ASSIGN); + UiLayout layout = UI_INIT_LAYOUT(args); ui_container_add(obj, scrollview, &layout); @@ -69,6 +74,11 @@ UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) { return (__bridge void*)scrollview; } +UIWIDGET ui_textarea_gettextwidget(UIWIDGET textarea) { + id view = (__bridge id)textarea; + id textview = objc_getAssociatedObject(view, "ui_textarea"); + return (__bridge void*)textview; +} diff --git a/ui/cocoa/toolkit.m b/ui/cocoa/toolkit.m index 4ef962c..7168465 100644 --- a/ui/cocoa/toolkit.m +++ b/ui/cocoa/toolkit.m @@ -54,6 +54,7 @@ static UiBool exit_on_shutdown; /* ------------------- App Init / Event Loop functions ------------------- */ +static AppDelegate *app_delegate; void ui_init(const char *appname, int argc, char **argv) { application_name = appname ? strdup(appname) : NULL; @@ -61,24 +62,35 @@ void ui_init(const char *appname, int argc, char **argv) { app_argv = (const char**)argv; uic_init_global_context(); - + uic_menu_init(); uic_toolbar_init(); - + uic_load_app_properties(); - + NSApplication *app = [NSApplication sharedApplication]; - //[app setActivationPolicy:NSApplicationActivationPolicyRegular]; + [app setActivationPolicy:NSApplicationActivationPolicyRegular]; //[NSBundle loadNibNamed:@"MainMenu" owner:NSApp ]; //[[NSBundle mainBundle] loadNibNamed:@"MainMenu" owner:NSApp topLevelObjects:&topLevelObjects]; + app_delegate = [[AppDelegate alloc] init]; + + if(app.delegate != nil) { + printf("app delegate exists\n"); + } else { + printf("app delegate is null\n"); + } + fflush(stdout); + app.delegate = app_delegate; + + ui_icon_init(); ui_toolbar_init(); } -const char* ui_appname() { +const char* ui_appname(void) { return application_name; } @@ -131,6 +143,10 @@ void ui_app_unref(void) { // TODO } +void ui_app_quit(void) { + [[NSApplication sharedApplication] terminate:nil]; +} + /* ------------------- Window Visibility functions ------------------- */ void ui_show(UiObject *obj) { diff --git a/ui/cocoa/widget.m b/ui/cocoa/widget.m index edc78c1..ff32bfe 100644 --- a/ui/cocoa/widget.m +++ b/ui/cocoa/widget.m @@ -44,6 +44,14 @@ void ui_set_visible(UIWIDGET widget, int visible) { view.hidden = !visible; } +void ui_widget_set_size(UIWIDGET w, int width, int height) { + NSView *view = (__bridge NSView*)w; + NSRect frame = view.frame; + frame.size.width = width; + frame.size.height = height; + view.frame = frame; +} + UIWIDGET ui_separator_create(UiObject *obj, UiWidgetArgs *args) { // TODO diff --git a/ui/ui/icons.h b/ui/ui/icons.h index 9bc86a4..6589cc9 100644 --- a/ui/ui/icons.h +++ b/ui/ui/icons.h @@ -74,6 +74,25 @@ extern "C" { #define UI_ICON_GO_DOWN "" // TODO: implement workaround for missing down symbol #endif /* UI_WINUI */ + +#ifdef UI_COCOA + +#define UI_ICON_HOME "NSImageNameHomeTemplate" +#define UI_ICON_NEW_WINDOW "" +#define UI_ICON_REFRESH "NSImageNameRefreshTemplate" +#define UI_ICON_NEW_FOLDER "" +#define UI_ICON_ADD "NSImageNameAddTemplate" +#define UI_ICON_UPLOAD "" +#define UI_ICON_SAVE_LOCAL "" +#define UI_ICON_DELETE "" +#define UI_ICON_DOCK_LEFT "" +#define UI_ICON_DOCK_RIGHT "" +#define UI_ICON_GO_BACK "NSImageNameGoLeftTemplate" +#define UI_ICON_GO_FORWARD "NSImageNameGoRightTemplate" +#define UI_ICON_GO_UP "" +#define UI_ICON_GO_DOWN "" + +#endif /* UI_COCOA */ UIEXPORT UiIcon* ui_icon(const char* name, size_t size); diff --git a/ui/ui/toolkit.h b/ui/ui/toolkit.h index b798e66..fb8c349 100644 --- a/ui/ui/toolkit.h +++ b/ui/ui/toolkit.h @@ -529,7 +529,7 @@ struct UiTextStyle { UIEXPORT void ui_init(const char *appname, int argc, char **argv); -UIEXPORT const char* ui_appname(); +UIEXPORT const char* ui_appname(void); UIEXPORT void ui_add_styledata(const char *styledata, int len);