aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorTohei Ichikawa <ichikawa.tohei.desu@gmail.com>2025-12-05 17:20:15 -0500
committerTohei Ichikawa <ichikawa.tohei.desu@gmail.com>2025-12-05 17:20:15 -0500
commit67cc04b1dafc98090394c07264427720b3662c7d (patch)
treec2981adb8da0bd9004becd0fd6be8cd8032db84d /core
parent404f0d6e64e04c6fe0bda80971178ff5c6b60cf4 (diff)
Added more NSApplication and NSWindow bindings
Diffstat (limited to 'core')
-rw-r--r--core/sys/darwin/Foundation/NSApplication.odin34
-rw-r--r--core/sys/darwin/Foundation/NSWindow.odin24
2 files changed, 58 insertions, 0 deletions
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)