]> uap-core.de Git - note.git/commitdiff
fix build on macos
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 3 Apr 2026 12:41:45 +0000 (14:41 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 3 Apr 2026 12:41:45 +0000 (14:41 +0200)
18 files changed:
ui-rs/build.rs
ui/cocoa/BoxContainer.h
ui/cocoa/GridLayout.h
ui/cocoa/MainWindow.m
ui/cocoa/TabView.h
ui/cocoa/appdelegate.m
ui/cocoa/button.m
ui/cocoa/container.m
ui/cocoa/entry.h
ui/cocoa/image.h
ui/cocoa/label.m
ui/cocoa/list.h
ui/cocoa/objs.mk
ui/cocoa/text.m
ui/cocoa/toolkit.m
ui/cocoa/widget.m
ui/ui/icons.h
ui/ui/toolkit.h

index a7608402b45c7df6d895a0317156d1397008ed38..a064c55bb1a8c5c0dd39a361ba52f504c00d9ad3 100644 (file)
@@ -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);
         }
     }
+
 }
index a80ae7dc8c7d2219d4b6b7843f247a10ec190ef9..065c78ff2e9b801c7b333a5dd76f69fc4fc2ec86 100644 (file)
@@ -26,7 +26,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#import "Container.h"
+#import "container.h"
 #import "GridLayout.h"
 
 @interface BoxContainer : GridLayout
index 362c9b281551a4299ed98696e1836080f1bf3b28..c7f751938eb22ab30d56a98c209b87452d48dc73 100644 (file)
@@ -28,7 +28,7 @@
 
 #import "toolkit.h"
 
-#import "Container.h"
+#import "container.h"
 
 #import <cx/array_list.h>
 
index c62079f03b64a79264976d96e896f97f89f4a0a3..3806f6c561bc46d93126766cd06acde1b2da1363 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 #import "MainWindow.h"
-#import "Container.h"
+#import "container.h"
 #import "GridLayout.h"
 #import "BoxContainer.h"
 #import "../common/object.h"
index d6e4b0dfb4d1825dd29480ddd970faae0707c292..506c1e61864151191a02e0327faa2b244906af9b 100644 (file)
@@ -26,7 +26,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#import "Container.h"
+#import "container.h"
 
 @protocol TabView
 
index f0967edf57f54307e9062f8e330255c7e1d69101..82d90206b11dbf501a54e33e8a928b914cf59bf5 100644 (file)
@@ -40,6 +40,7 @@
 }
 
 - (void)applicationWillTerminate:(NSNotification *)aNotification {
+    NSLog(@"toolkit applicationWillTerminate");
     ui_cocoa_onexit();
 }
 
index a2af1a4885477d4d244a658367622034e428f9b7..03c636727842461ad4049f2f79f0bee442747013 100644 (file)
@@ -28,7 +28,7 @@
 
 #import "button.h"
 #import "EventData.h"
-#import "Container.h"
+#import "container.h"
 #import "image.h"
 #import <objc/runtime.h>
 
@@ -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);
index d9b2e2d8cfd4d2c35312669161a2b13793da912b..9081da8a250254adf8b03f5b79e17ef6f4ad9996 100644 (file)
@@ -26,7 +26,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#import "Container.h"
+#import "container.h"
 #import "GridLayout.h"
 #import "BoxContainer.h"
 #import "TabView.h"
index b0cb2fdaa5a6f9bcf5aad53b67881d7dac6a2800..227d984607238f9b7485122634b6534b487be0bf 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 #import "toolkit.h"
-#import "Container.h"
+#import "container.h"
 
 #import "../ui/entry.h"
 
index 8b80a70f50fe9c14dba3457623b420da43b6c260..70f1d8de0d66b3e7ed8f3887f81f0ebef8c57394 100644 (file)
@@ -28,7 +28,7 @@
 
 #include "../ui/image.h"
 
-#include "Container.h"
+#include "container.h"
 
 typedef struct UiImage {
     void *nsimage;
index 4e75e01d57bbdf6e49e87b862a413666e2d5d553..44e90451f7437c5b53c797a8e9e7e88765a84acb 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 #import "label.h"
-#import "Container.h"
+#import "container.h"
 
 #import <string.h>
 
index 6a3b174dec9a35da1dc96d71fb443688d005bbea..173afc604373eb976086d93a210ad0afb4f1ab19 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 #import "toolkit.h"
-#import "Container.h"
+#import "container.h"
 #import "../ui/list.h"
 
 #import "ListDataSource.h"
index d4d0e61143ba9925294bb13ee39451a671d65d3a..598237ee7c3441babaea1bac7fc253cd4aba998c 100644 (file)
@@ -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
index 679968f78260a9144c833797e93a4ac7693a866d..d359d4433d9ae529db5ccbfb2d2583dbfd29cca0 100644 (file)
@@ -28,7 +28,7 @@
 
 #import "text.h"
 #import "EventData.h"
-#import "Container.h"
+#import "container.h"
 #import <objc/runtime.h>
 
 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;
+}
 
 
 
index 4ef962c2c6cea6d7a3f9e6c71471a21c276efb4c..7168465f287aacc3d82c032023bbff0e02d0cd84 100644 (file)
@@ -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) {
index edc78c138240336a56b4662839db032d1bd07c8e..ff32bfe332b84cb121ba0a703038ed836a67fc0f 100644 (file)
@@ -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
index 9bc86a44927ced04df40d59a9cfd3c62ab5ed490..6589cc9a2ddc68e7edc700d285290c269834f82f 100644 (file)
@@ -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);
index b798e664b7d53699edf528a3e38b9c2b9ff32d63..fb8c349790e3885bbc0e5f28ffc549125cd72040 100644 (file)
@@ -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);