diff --git a/core/sys/darwin/Foundation/NSApplication.odin b/core/sys/darwin/Foundation/NSApplication.odin index 6cb3df979..2295e46b8 100644 --- a/core/sys/darwin/Foundation/NSApplication.odin +++ b/core/sys/darwin/Foundation/NSApplication.odin @@ -92,6 +92,11 @@ Application_activate :: proc "c" (self: ^Application) { msgSend(nil, self, "activate") } +@(objc_type=Application, objc_name="active") +Application_active :: proc "c" (self: ^Application) -> BOOL { + return msgSend(BOOL, self, "isActive") +} + @(objc_type=Application, objc_name="setTitle") Application_setTitle :: proc "c" (self: ^Application, title: ^String) { msgSend(nil, self, "setTitle", title) @@ -107,6 +112,35 @@ Application_setMainMenu :: proc "c" (self: ^Application, menu: ^Menu) { msgSend(nil, self, "setMainMenu:", menu) } +// This property is actually not exposed in AppKit's public API. +// But there is basically no other way to configure the apple menu without using NIB files. +// Therefore, an Odin binding for this non-public API was created. +// Note: SDL also calls this non-public method. +@(objc_type=Application, objc_name="setAppleMenu") +Application_setAppleMenu :: proc "c" (self: ^Application, menu: ^Menu) { + msgSend(nil, self, "setAppleMenu:", menu) +} + +@(objc_type=Application, objc_name="servicesMenu") +Application_servicesMenu :: proc "c" (self: ^Application) -> ^Menu { + return msgSend(^Menu, self, "servicesMenu") +} + +@(objc_type=Application, objc_name="setServicesMenu") +Application_setServicesMenu :: proc "c" (self: ^Application, menu: ^Menu) { + msgSend(nil, self, "setServicesMenu:", menu) +} + +@(objc_type=Application, objc_name="windowsMenu") +Application_windowsMenu :: proc "c" (self: ^Application) -> ^Menu { + return msgSend(^Menu, self, "windowsMenu") +} + +@(objc_type=Application, objc_name="setWindowsMenu") +Application_setWindowsMenu :: proc "c" (self: ^Application, menu: ^Menu) { + msgSend(nil, self, "setWindowsMenu:", menu) +} + @(objc_type=Application, objc_name="mainWindow") Application_mainWindow :: proc "c" (self: ^Application) -> ^Window { return msgSend(^Window, self, "mainWindow") diff --git a/core/sys/darwin/Foundation/NSWindow.odin b/core/sys/darwin/Foundation/NSWindow.odin index 244d25001..8317c7bb1 100644 --- a/core/sys/darwin/Foundation/NSWindow.odin +++ b/core/sys/darwin/Foundation/NSWindow.odin @@ -643,6 +643,14 @@ Layer_setContentsScale :: proc "c" (self: ^Layer, scale: Float) { Layer_frame :: proc "c" (self: ^Layer) -> Rect { return msgSend(Rect, self, "frame") } +@(objc_type=Layer, objc_name="position") +Layer_position :: proc "c" (self: ^Layer) -> Point { + return msgSend(Point, self, "position") +} +@(objc_type=Layer, objc_name="setPosition") +Layer_setPosition :: proc "c" (self: ^Layer, position: Point) { + msgSend(nil, self, "setPosition:", position) +} @(objc_type=Layer, objc_name="addSublayer") Layer_addSublayer :: proc "c" (self: ^Layer, layer: ^Layer) { msgSend(nil, self, "addSublayer:", layer) @@ -784,6 +792,10 @@ Window_setAcceptsMouseMovedEvents :: proc "c" (self: ^Window, ok: BOOL) { Window_setStyleMask :: proc "c" (self: ^Window, style_mask: WindowStyleMask) { msgSend(nil, self, "setStyleMask:", style_mask) } +@(objc_type=Window, objc_name="performClose") +Window_performClose :: proc "c" (self: ^Window, sender: id) { + msgSend(nil, self, "performClose:", sender) +} @(objc_type=Window, objc_name="close") Window_close :: proc "c" (self: ^Window) { msgSend(nil, self, "close") @@ -916,6 +928,18 @@ Window_collectionBehavior :: proc "c" (self: ^Window) -> WindowCollectionBehavio Window_setLevel :: proc "c" (self: ^Window, level: WindowLevel) { msgSend(nil, self, "setLevel:", level) } +@(objc_type = Window, objc_name = "keyWindow") +Window_keyWindow :: proc "c" (self: ^Window) -> BOOL { + return msgSend(BOOL, self, "isKeyWindow") +} +@(objc_type = Window, objc_name = "mainWindow") +Window_mainWindow :: proc "c" (self: ^Window) -> BOOL { + return msgSend(BOOL, self, "isMainWindow") +} +@(objc_type = Window, objc_name = "parentWindow") +Window_parentWindow :: proc "c" (self: ^Window) -> ^Window { + return msgSend(^Window, self, "parentWindow") +} @(objc_type = Window, objc_name = "setReleasedWhenClosed") Window_setReleasedWhenClosed :: proc "c" (self: ^Window, flag: BOOL) { msgSend(nil, self, "setReleasedWhenClosed:", flag)