aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2025-12-07 16:37:52 +0000
committerGitHub <noreply@github.com>2025-12-07 16:37:52 +0000
commit36152bb1341a47c722bb654afecda36bb6a61367 (patch)
treef11b2b943104e20251c7d33e98fd7a92787d144d /core
parent3f354a4717445f019f0eebe0de79b73bf7434801 (diff)
parent67cc04b1dafc98090394c07264427720b3662c7d (diff)
Merge pull request #5998 from slowhei/master
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)