NSApplication.odin 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631
  1. package objc_Foundation
  2. foreign import "system:Foundation.framework"
  3. import "base:intrinsics"
  4. import "base:runtime"
  5. import "core:strings"
  6. RunLoopMode :: ^String
  7. @(link_prefix="NS")
  8. foreign Foundation {
  9. RunLoopCommonModes: RunLoopMode
  10. DefaultRunLoopMode: RunLoopMode
  11. EventTrackingRunLoopMode: RunLoopMode
  12. ModalPanelRunLoopMode: RunLoopMode
  13. }
  14. ActivationPolicy :: enum UInteger {
  15. Regular = 0,
  16. Accessory = 1,
  17. Prohibited = 2,
  18. }
  19. ApplicationTerminateReply :: enum UInteger {
  20. TerminateCancel = 0,
  21. TerminateNow = 1,
  22. TerminateLater = 2,
  23. }
  24. ApplicationPrintReply :: enum UInteger {
  25. PrintingCancelled = 0,
  26. PrintingSuccess = 1,
  27. PrintingReplyLater = 2,
  28. PrintingFailure = 3,
  29. }
  30. ApplicationPresentationOptionFlag :: enum UInteger {
  31. AutoHideDock = 0,
  32. HideDock = 1,
  33. AutoHideMenuBar = 2,
  34. HideMenuBar = 3,
  35. DisableAppleMenu = 4,
  36. DisableProcessSwitching = 5,
  37. DisableForceQuit = 6,
  38. DisableSessionTermination = 7,
  39. DisableHideApplication = 8,
  40. DisableMenuBarTransparency = 9,
  41. FullScreen = 10,
  42. AutoHideToolbar = 11,
  43. DisableCursorLocationAssistance = 12,
  44. }
  45. ApplicationPresentationOptions :: distinct bit_set[ApplicationPresentationOptionFlag; UInteger]
  46. ApplicationPresentationOptionsDefault :: ApplicationPresentationOptions {}
  47. ApplicationPresentationOptionsAutoHideDock :: ApplicationPresentationOptions {.AutoHideDock}
  48. ApplicationPresentationOptionsHideDock :: ApplicationPresentationOptions {.HideDock}
  49. ApplicationPresentationOptionsAutoHideMenuBar :: ApplicationPresentationOptions {.AutoHideMenuBar}
  50. ApplicationPresentationOptionsHideMenuBar :: ApplicationPresentationOptions {.HideMenuBar}
  51. ApplicationPresentationOptionsDisableAppleMenu :: ApplicationPresentationOptions {.DisableAppleMenu}
  52. ApplicationPresentationOptionsDisableProcessSwitching :: ApplicationPresentationOptions {.DisableProcessSwitching}
  53. ApplicationPresentationOptionsDisableForceQuit :: ApplicationPresentationOptions {.DisableForceQuit}
  54. ApplicationPresentationOptionsDisableSessionTermination :: ApplicationPresentationOptions {.DisableSessionTermination}
  55. ApplicationPresentationOptionsDisableHideApplication :: ApplicationPresentationOptions {.DisableHideApplication}
  56. ApplicationPresentationOptionsDisableMenuBarTransparency :: ApplicationPresentationOptions {.DisableMenuBarTransparency}
  57. ApplicationPresentationOptionsFullScreen :: ApplicationPresentationOptions {.FullScreen}
  58. ApplicationPresentationOptionsAutoHideToolbar :: ApplicationPresentationOptions {.AutoHideToolbar}
  59. ApplicationPresentationOptionsDisableCursorLocationAssistance :: ApplicationPresentationOptions {.DisableCursorLocationAssistance}
  60. @(objc_class="NSApplication")
  61. Application :: struct {using _: Object}
  62. @(objc_type=Application, objc_name="sharedApplication", objc_is_class_method=true)
  63. Application_sharedApplication :: proc "c" () -> ^Application {
  64. return msgSend(^Application, Application, "sharedApplication")
  65. }
  66. @(objc_type=Application, objc_name="setActivationPolicy")
  67. Application_setActivationPolicy :: proc "c" (self: ^Application, activationPolicy: ActivationPolicy) -> BOOL {
  68. return msgSend(BOOL, self, "setActivationPolicy:", activationPolicy)
  69. }
  70. // NOTE: this is technically deprecated but still actively used (Sokol, glfw, SDL, etc.)
  71. // and has no clear alternative although `activate` is what Apple tells you to use,
  72. // that does not work the same way.
  73. @(objc_type=Application, objc_name="activateIgnoringOtherApps")
  74. Application_activateIgnoringOtherApps :: proc "c" (self: ^Application, ignoreOtherApps: BOOL) {
  75. msgSend(nil, self, "activateIgnoringOtherApps:", ignoreOtherApps)
  76. }
  77. @(objc_type=Application, objc_name="activate")
  78. Application_activate :: proc "c" (self: ^Application) {
  79. msgSend(nil, self, "activate")
  80. }
  81. @(objc_type=Application, objc_name="setTitle")
  82. Application_setTitle :: proc "c" (self: ^Application, title: ^String) {
  83. msgSend(nil, self, "setTitle", title)
  84. }
  85. @(objc_type=Application, objc_name="mainMenu")
  86. Application_mainMenu :: proc "c" (self: ^Application) -> ^Menu {
  87. return msgSend(^Menu, self, "mainMenu")
  88. }
  89. @(objc_type=Application, objc_name="setMainMenu")
  90. Application_setMainMenu :: proc "c" (self: ^Application, menu: ^Menu) {
  91. msgSend(nil, self, "setMainMenu:", menu)
  92. }
  93. @(objc_type=Application, objc_name="mainWindow")
  94. Application_mainWindow :: proc "c" (self: ^Application) -> ^Window {
  95. return msgSend(^Window, self, "mainWindow")
  96. }
  97. @(objc_type=Application, objc_name="keyWindow")
  98. Application_keyWindow :: proc "c" (self: ^Application) -> ^Window {
  99. return msgSend(^Window, self, "keyWindow")
  100. }
  101. @(objc_type=Application, objc_name="windows")
  102. Application_windows :: proc "c" (self: ^Application) -> ^Array {
  103. return msgSend(^Array, self, "windows")
  104. }
  105. @(objc_type=Application, objc_name="run")
  106. Application_run :: proc "c" (self: ^Application) {
  107. msgSend(nil, self, "run")
  108. }
  109. @(objc_type=Application, objc_name="finishLaunching")
  110. Application_finishLaunching :: proc "c" (self: ^Application) {
  111. msgSend(nil, self, "finishLaunching")
  112. }
  113. @(objc_type=Application, objc_name="terminate")
  114. Application_terminate :: proc "c" (self: ^Application, sender: ^Object) {
  115. msgSend(nil, self, "terminate:", sender)
  116. }
  117. @(objc_type=Application, objc_name="isRunning")
  118. Application_isRunning :: proc "c" (self: ^Application) -> BOOL {
  119. return msgSend(BOOL, self, "isRunning")
  120. }
  121. @(objc_type=Application, objc_name="currentEvent")
  122. Application_currentEvent :: proc "c" (self: ^Application) -> ^Event {
  123. return msgSend(^Event, self, "currentEvent")
  124. }
  125. @(objc_type=Application, objc_name="nextEventMatchingMask")
  126. Application_nextEventMatchingMask :: proc "c" (self: ^Application, mask: EventMask, expiration: ^Date, in_mode: RunLoopMode, dequeue: BOOL) -> ^Event {
  127. return msgSend(^Event, self, "nextEventMatchingMask:untilDate:inMode:dequeue:", mask, expiration, in_mode, dequeue)
  128. }
  129. @(objc_type=Application, objc_name="sendEvent")
  130. Application_sendEvent :: proc "c" (self: ^Application, event: ^Event) {
  131. msgSend(nil, self, "sendEvent:", event)
  132. }
  133. @(objc_type=Application, objc_name="updateWindows")
  134. Application_updateWindows :: proc "c" (self: ^Application) {
  135. msgSend(nil, self, "updateWindows")
  136. }
  137. @(objc_class="NSRunningApplication")
  138. RunningApplication :: struct {using _: Object}
  139. @(objc_type=RunningApplication, objc_name="currentApplication", objc_is_class_method=true)
  140. RunningApplication_currentApplication :: proc "c" () -> ^RunningApplication {
  141. return msgSend(^RunningApplication, RunningApplication, "currentApplication")
  142. }
  143. @(objc_type=RunningApplication, objc_name="localizedName")
  144. RunningApplication_localizedName :: proc "c" (self: ^RunningApplication) -> ^String {
  145. return msgSend(^String, self, "localizedName")
  146. }
  147. ApplicationDelegateTemplate :: struct {
  148. // Launching Applications
  149. applicationWillFinishLaunching: proc(notification: ^Notification),
  150. applicationDidFinishLaunching: proc(notification: ^Notification),
  151. // Managing Active Status
  152. applicationWillBecomeActive: proc(notification: ^Notification),
  153. applicationDidBecomeActive: proc(notification: ^Notification),
  154. applicationWillResignActive: proc(notification: ^Notification),
  155. applicationDidResignActive: proc(notification: ^Notification),
  156. // Terminating Applications
  157. applicationShouldTerminate: proc(sender: ^Application) -> ApplicationTerminateReply,
  158. applicationShouldTerminateAfterLastWindowClosed: proc(sender: ^Application) -> BOOL,
  159. applicationWillTerminate: proc(notification: ^Notification),
  160. // Hiding Applications
  161. applicationWillHide: proc(notification: ^Notification),
  162. applicationDidHide: proc(notification: ^Notification),
  163. applicationWillUnhide: proc(notification: ^Notification),
  164. applicationDidUnhide: proc(notification: ^Notification),
  165. // Managing Windows
  166. applicationWillUpdate: proc(notification: ^Notification),
  167. applicationDidUpdate: proc(notification: ^Notification),
  168. applicationShouldHandleReopenHasVisibleWindows: proc(sender: ^Application, flag: BOOL) -> BOOL,
  169. // Managing the Dock Menu
  170. applicationDockMenu: proc(sender: ^Application) -> ^Menu,
  171. // Localizing Keyboard Shortcuts
  172. applicationShouldAutomaticallyLocalizeKeyEquivalents: proc(application: ^Application) -> BOOL,
  173. // Displaying Errors
  174. applicationWillPresentError: proc(application: ^Application, error: ^Error) -> ^Error,
  175. // Managing the Screen
  176. applicationDidChangeScreenParameters: proc(notification: ^Notification),
  177. // Continuing User Activities
  178. applicationWillContinueUserActivityWithType: proc(application: ^Application, userActivityType: ^String) -> BOOL,
  179. applicationContinueUserActivityRestorationHandler: proc(application: ^Application, userActivity: ^UserActivity, restorationHandler: ^Block) -> BOOL,
  180. applicationDidFailToContinueUserActivityWithTypeError: proc(application: ^Application, userActivityType: ^String, error: ^Error),
  181. applicationDidUpdateUserActivity: proc(application: ^Application, userActivity: ^UserActivity),
  182. // Handling Push Notifications
  183. applicationDidRegisterForRemoteNotificationsWithDeviceToken: proc(application: ^Application, deviceToken: ^Data),
  184. applicationDidFailToRegisterForRemoteNotificationsWithError: proc(application: ^Application, error: ^Error),
  185. applicationDidReceiveRemoteNotification: proc(application: ^Application, userInfo: ^Dictionary),
  186. // Handling CloudKit Invitations
  187. // TODO: if/when we have cloud kit bindings implement
  188. // applicationUserDidAcceptCloudKitShareWithMetadata: proc(application: ^Application, metadata: ^CKShareMetadata),
  189. // Handling SiriKit Intents
  190. // TODO: if/when we have siri kit bindings implement
  191. // applicationHandlerForIntent: proc(application: ^Application, intent: ^INIntent) -> id,
  192. // Opening Files
  193. applicationOpenURLs: proc(application: ^Application, urls: ^Array),
  194. applicationOpenFile: proc(sender: ^Application, filename: ^String) -> BOOL,
  195. applicationOpenFileWithoutUI: proc(sender: id, filename: ^String) -> BOOL,
  196. applicationOpenTempFile: proc(sender: ^Application, filename: ^String) -> BOOL,
  197. applicationOpenFiles: proc(sender: ^Application, filenames: ^Array),
  198. applicationShouldOpenUntitledFile: proc(sender: ^Application) -> BOOL,
  199. applicationOpenUntitledFile: proc(sender: ^Application) -> BOOL,
  200. // Printing
  201. applicationPrintFile: proc(sender: ^Application, filename: ^String) -> BOOL,
  202. applicationPrintFilesWithSettingsShowPrintPanels: proc(application: ^Application, fileNames: ^Array, printSettings: ^Dictionary, showPrintPanels: BOOL) -> ApplicationPrintReply,
  203. // Restoring Application State
  204. applicationSupportsSecureRestorableState: proc(app: ^Application) -> BOOL,
  205. applicationProtectedDataDidBecomeAvailable: proc(notification: ^Notification),
  206. applicationProtectedDataWillBecomeUnavailable: proc(notification: ^Notification),
  207. applicationWillEncodeRestorableState: proc(app: ^Application, coder: ^Coder),
  208. applicationDidDecodeRestorableState: proc(app: ^Application, coder: ^Coder),
  209. // Handling Changes to the Occlusion State
  210. applicationDidChangeOcclusionState: proc(notification: ^Notification),
  211. // Scripting Your App
  212. applicationDelegateHandlesKey: proc(sender: ^Application, key: ^String) -> BOOL,
  213. }
  214. ApplicationDelegate :: struct { using _: Object }
  215. _ApplicationDelegateInternal :: struct {
  216. using _: ApplicationDelegateTemplate,
  217. _context: runtime.Context,
  218. }
  219. application_delegate_register_and_alloc :: proc(template: ApplicationDelegateTemplate, class_name: string, delegate_context: Maybe(runtime.Context)) -> ^ApplicationDelegate {
  220. class := objc_allocateClassPair(intrinsics.objc_find_class("NSObject"), strings.clone_to_cstring(class_name, context.temp_allocator), 0); if class == nil {
  221. // Class already registered
  222. return nil
  223. }
  224. if template.applicationWillFinishLaunching != nil {
  225. applicationWillFinishLaunching :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  226. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  227. context = del._context
  228. del.applicationWillFinishLaunching(notification)
  229. }
  230. class_addMethod(class, intrinsics.objc_find_selector("applicationWillFinishLaunching:"), auto_cast applicationWillFinishLaunching, "v@:@")
  231. }
  232. if template.applicationDidFinishLaunching != nil {
  233. applicationDidFinishLaunching :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  234. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  235. context = del._context
  236. del.applicationDidFinishLaunching(notification)
  237. }
  238. class_addMethod(class, intrinsics.objc_find_selector("applicationDidFinishLaunching:"), auto_cast applicationDidFinishLaunching, "v@:@")
  239. }
  240. if template.applicationWillBecomeActive != nil {
  241. applicationWillBecomeActive :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  242. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  243. context = del._context
  244. del.applicationWillBecomeActive(notification)
  245. }
  246. class_addMethod(class, intrinsics.objc_find_selector("applicationWillBecomeActive:"), auto_cast applicationWillBecomeActive, "v@:@")
  247. }
  248. if template.applicationDidBecomeActive != nil {
  249. applicationDidBecomeActive :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  250. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  251. context = del._context
  252. del.applicationDidBecomeActive(notification)
  253. }
  254. class_addMethod(class, intrinsics.objc_find_selector("applicationDidBecomeActive:"), auto_cast applicationDidBecomeActive, "v@:@")
  255. }
  256. if template.applicationWillResignActive != nil {
  257. applicationWillResignActive :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  258. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  259. context = del._context
  260. del.applicationWillResignActive(notification)
  261. }
  262. class_addMethod(class, intrinsics.objc_find_selector("applicationWillResignActive:"), auto_cast applicationWillResignActive, "v@:@")
  263. }
  264. if template.applicationDidResignActive != nil {
  265. applicationDidResignActive :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  266. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  267. context = del._context
  268. del.applicationDidResignActive(notification)
  269. }
  270. class_addMethod(class, intrinsics.objc_find_selector("applicationDidResignActive:"), auto_cast applicationDidResignActive, "v@:@")
  271. }
  272. if template.applicationShouldTerminate != nil {
  273. applicationShouldTerminate :: proc "c" (self: id, cmd: SEL, sender: ^Application) -> ApplicationTerminateReply {
  274. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  275. context = del._context
  276. return del.applicationShouldTerminate(sender)
  277. }
  278. class_addMethod(class, intrinsics.objc_find_selector("applicationShouldTerminate:"), auto_cast applicationShouldTerminate, _UINTEGER_ENCODING+"@:@")
  279. }
  280. if template.applicationShouldTerminateAfterLastWindowClosed != nil {
  281. applicationShouldTerminateAfterLastWindowClosed :: proc "c" (self: id, cmd: SEL, sender: ^Application) -> BOOL {
  282. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  283. context = del._context
  284. return del.applicationShouldTerminateAfterLastWindowClosed(sender)
  285. }
  286. class_addMethod(class, intrinsics.objc_find_selector("applicationShouldTerminateAfterLastWindowClosed:"), auto_cast applicationShouldTerminateAfterLastWindowClosed, "B@:@")
  287. }
  288. if template.applicationWillTerminate != nil {
  289. applicationWillTerminate :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  290. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  291. context = del._context
  292. del.applicationWillTerminate(notification)
  293. }
  294. class_addMethod(class, intrinsics.objc_find_selector("applicationWillTerminate:"), auto_cast applicationWillTerminate, "v@:@")
  295. }
  296. if template.applicationWillHide != nil {
  297. applicationWillHide :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  298. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  299. context = del._context
  300. del.applicationWillHide(notification)
  301. }
  302. class_addMethod(class, intrinsics.objc_find_selector("applicationWillHide:"), auto_cast applicationWillHide, "v@:@")
  303. }
  304. if template.applicationDidHide != nil {
  305. applicationDidHide :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  306. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  307. context = del._context
  308. del.applicationDidHide(notification)
  309. }
  310. class_addMethod(class, intrinsics.objc_find_selector("applicationDidHide:"), auto_cast applicationDidHide, "v@:@")
  311. }
  312. if template.applicationWillUnhide != nil {
  313. applicationWillUnhide :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  314. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  315. context = del._context
  316. del.applicationWillUnhide(notification)
  317. }
  318. class_addMethod(class, intrinsics.objc_find_selector("applicationWillUnhide:"), auto_cast applicationWillUnhide, "v@:@")
  319. }
  320. if template.applicationDidUnhide != nil {
  321. applicationDidUnhide :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  322. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  323. context = del._context
  324. del.applicationDidUnhide(notification)
  325. }
  326. class_addMethod(class, intrinsics.objc_find_selector("applicationDidUnhide:"), auto_cast applicationDidUnhide, "v@:@")
  327. }
  328. if template.applicationWillUpdate != nil {
  329. applicationWillUpdate :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  330. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  331. context = del._context
  332. del.applicationWillUpdate(notification)
  333. }
  334. class_addMethod(class, intrinsics.objc_find_selector("applicationWillUpdate:"), auto_cast applicationWillUpdate, "v@:@")
  335. }
  336. if template.applicationDidUpdate != nil {
  337. applicationDidUpdate :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  338. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  339. context = del._context
  340. del.applicationDidUpdate(notification)
  341. }
  342. class_addMethod(class, intrinsics.objc_find_selector("applicationDidUpdate:"), auto_cast applicationDidUpdate, "v@:@")
  343. }
  344. if template.applicationShouldHandleReopenHasVisibleWindows != nil {
  345. applicationShouldHandleReopenHasVisibleWindows :: proc "c" (self: id, cmd: SEL, sender: ^Application, flag: BOOL) -> BOOL {
  346. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  347. context = del._context
  348. return del.applicationShouldHandleReopenHasVisibleWindows(sender, flag)
  349. }
  350. class_addMethod(class, intrinsics.objc_find_selector("applicationShouldHandleReopen:hasVisibleWindows:"), auto_cast applicationShouldHandleReopenHasVisibleWindows, "B@:@B")
  351. }
  352. if template.applicationDockMenu != nil {
  353. applicationDockMenu :: proc "c" (self: id, cmd: SEL, sender: ^Application) -> ^Menu {
  354. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  355. context = del._context
  356. return del.applicationDockMenu(sender)
  357. }
  358. class_addMethod(class, intrinsics.objc_find_selector("applicationDockMenu:"), auto_cast applicationDockMenu, "@@:@")
  359. }
  360. if template.applicationShouldAutomaticallyLocalizeKeyEquivalents != nil {
  361. applicationShouldAutomaticallyLocalizeKeyEquivalents :: proc "c" (self: id, cmd: SEL, application: ^Application) -> BOOL {
  362. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  363. context = del._context
  364. return del.applicationShouldAutomaticallyLocalizeKeyEquivalents(application)
  365. }
  366. class_addMethod(class, intrinsics.objc_find_selector("applicationShouldAutomaticallyLocalizeKeyEquivalents:"), auto_cast applicationShouldAutomaticallyLocalizeKeyEquivalents, "B@:@")
  367. }
  368. if template.applicationWillPresentError != nil {
  369. applicationWillPresentError :: proc "c" (self: id, cmd: SEL, application: ^Application, error: ^Error) -> ^Error {
  370. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  371. context = del._context
  372. return del.applicationWillPresentError(application, error)
  373. }
  374. class_addMethod(class, intrinsics.objc_find_selector("application:willPresentError:"), auto_cast applicationWillPresentError, "@@:@@")
  375. }
  376. if template.applicationDidChangeScreenParameters != nil {
  377. applicationDidChangeScreenParameters :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  378. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  379. context = del._context
  380. del.applicationDidChangeScreenParameters(notification)
  381. }
  382. class_addMethod(class, intrinsics.objc_find_selector("applicationDidChangeScreenParameters:"), auto_cast applicationDidChangeScreenParameters, "v@:@")
  383. }
  384. if template.applicationWillContinueUserActivityWithType != nil {
  385. applicationWillContinueUserActivityWithType :: proc "c" (self: id, cmd: SEL, application: ^Application, userActivityType: ^String) -> BOOL {
  386. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  387. context = del._context
  388. return del.applicationWillContinueUserActivityWithType(application, userActivityType)
  389. }
  390. class_addMethod(class, intrinsics.objc_find_selector("application:willContinueUserActivityWithType:"), auto_cast applicationWillContinueUserActivityWithType, "B@:@@")
  391. }
  392. if template.applicationContinueUserActivityRestorationHandler != nil {
  393. applicationContinueUserActivityRestorationHandler :: proc "c" (self: id, cmd: SEL, application: ^Application, userActivity: ^UserActivity, restorationHandler: ^Block) -> BOOL {
  394. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  395. context = del._context
  396. return del.applicationContinueUserActivityRestorationHandler(application, userActivity, restorationHandler)
  397. }
  398. class_addMethod(class, intrinsics.objc_find_selector("application:continueUserActivity:restorationHandler:"), auto_cast applicationContinueUserActivityRestorationHandler, "B@:@@?")
  399. }
  400. if template.applicationDidFailToContinueUserActivityWithTypeError != nil {
  401. applicationDidFailToContinueUserActivityWithTypeError :: proc "c" (self: id, cmd: SEL, application: ^Application, userActivityType: ^String, error: ^Error) {
  402. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  403. context = del._context
  404. del.applicationDidFailToContinueUserActivityWithTypeError(application, userActivityType, error)
  405. }
  406. class_addMethod(class, intrinsics.objc_find_selector("application:didFailToContinueUserActivityWithType:error:"), auto_cast applicationDidFailToContinueUserActivityWithTypeError, "v@:@@@")
  407. }
  408. if template.applicationDidUpdateUserActivity != nil {
  409. applicationDidUpdateUserActivity :: proc "c" (self: id, cmd: SEL, application: ^Application, userActivity: ^UserActivity) {
  410. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  411. context = del._context
  412. del.applicationDidUpdateUserActivity(application, userActivity)
  413. }
  414. class_addMethod(class, intrinsics.objc_find_selector("application:didUpdateUserActivity:"), auto_cast applicationDidUpdateUserActivity, "v@:@@")
  415. }
  416. if template.applicationDidRegisterForRemoteNotificationsWithDeviceToken != nil {
  417. applicationDidRegisterForRemoteNotificationsWithDeviceToken :: proc "c" (self: id, cmd: SEL, application: ^Application, deviceToken: ^Data) {
  418. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  419. context = del._context
  420. del.applicationDidRegisterForRemoteNotificationsWithDeviceToken(application, deviceToken)
  421. }
  422. class_addMethod(class, intrinsics.objc_find_selector("application:didRegisterForRemoteNotificationsWithDeviceToken:"), auto_cast applicationDidRegisterForRemoteNotificationsWithDeviceToken, "v@:@@")
  423. }
  424. if template.applicationDidFailToRegisterForRemoteNotificationsWithError != nil {
  425. applicationDidFailToRegisterForRemoteNotificationsWithError :: proc "c" (self: id, cmd: SEL, application: ^Application, error: ^Error) {
  426. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  427. context = del._context
  428. del.applicationDidFailToRegisterForRemoteNotificationsWithError(application, error)
  429. }
  430. class_addMethod(class, intrinsics.objc_find_selector("application:didFailToRegisterForRemoteNotificationsWithError:"), auto_cast applicationDidFailToRegisterForRemoteNotificationsWithError, "v@:@@")
  431. }
  432. if template.applicationDidReceiveRemoteNotification != nil {
  433. applicationDidReceiveRemoteNotification :: proc "c" (self: id, cmd: SEL, application: ^Application, userInfo: ^Dictionary) {
  434. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  435. context = del._context
  436. del.applicationDidReceiveRemoteNotification(application, userInfo)
  437. }
  438. class_addMethod(class, intrinsics.objc_find_selector("application:didReceiveRemoteNotification:"), auto_cast applicationDidReceiveRemoteNotification, "v@:@@")
  439. }
  440. // if template.applicationUserDidAcceptCloudKitShareWithMetadata != nil {
  441. // applicationUserDidAcceptCloudKitShareWithMetadata :: proc "c" (self: id, cmd: SEL, application: ^Application, metadata: ^CKShareMetadata) {
  442. // del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  443. // context = del._context
  444. // del.applicationUserDidAcceptCloudKitShareWithMetadata(application, metadata)
  445. // }
  446. // class_addMethod(class, intrinsics.objc_find_selector("application:userDidAcceptCloudKitShareWithMetadata:"), auto_cast applicationUserDidAcceptCloudKitShareWithMetadata, "v@:@@")
  447. // }
  448. // if template.applicationHandlerForIntent != nil {
  449. // applicationHandlerForIntent :: proc "c" (self: id, cmd: SEL, application: ^Application, intent: ^INIntent) -> id {
  450. // del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  451. // context = del._context
  452. // return del.applicationHandlerForIntent(application, intent)
  453. // }
  454. // class_addMethod(class, intrinsics.objc_find_selector("application:handlerForIntent:"), auto_cast applicationHandlerForIntent, "@@:@@")
  455. // }
  456. if template.applicationOpenURLs != nil {
  457. applicationOpenURLs :: proc "c" (self: id, cmd: SEL, application: ^Application, urls: ^Array) {
  458. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  459. context = del._context
  460. del.applicationOpenURLs(application, urls)
  461. }
  462. class_addMethod(class, intrinsics.objc_find_selector("application:openURLs:"), auto_cast applicationOpenURLs, "v@:@@")
  463. }
  464. if template.applicationOpenFile != nil {
  465. applicationOpenFile :: proc "c" (self: id, cmd: SEL, sender: ^Application, filename: ^String) -> BOOL {
  466. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  467. context = del._context
  468. return del.applicationOpenFile(sender, filename)
  469. }
  470. class_addMethod(class, intrinsics.objc_find_selector("application:openFile:"), auto_cast applicationOpenFile, "B@:@@")
  471. }
  472. if template.applicationOpenFileWithoutUI != nil {
  473. applicationOpenFileWithoutUI :: proc "c" (self: id, cmd: SEL, sender: id, filename: ^String) -> BOOL {
  474. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  475. context = del._context
  476. return del.applicationOpenFileWithoutUI(sender, filename)
  477. }
  478. class_addMethod(class, intrinsics.objc_find_selector("application:openFileWithoutUI:"), auto_cast applicationOpenFileWithoutUI, "B@:@@")
  479. }
  480. if template.applicationOpenTempFile != nil {
  481. applicationOpenTempFile :: proc "c" (self: id, cmd: SEL, sender: ^Application, filename: ^String) -> BOOL {
  482. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  483. context = del._context
  484. return del.applicationOpenTempFile(sender, filename)
  485. }
  486. class_addMethod(class, intrinsics.objc_find_selector("application:openTempFile:"), auto_cast applicationOpenTempFile, "B@:@@")
  487. }
  488. if template.applicationOpenFiles != nil {
  489. applicationOpenFiles :: proc "c" (self: id, cmd: SEL, sender: ^Application, filenames: ^Array) {
  490. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  491. context = del._context
  492. del.applicationOpenFiles(sender, filenames)
  493. }
  494. class_addMethod(class, intrinsics.objc_find_selector("application:openFiles:"), auto_cast applicationOpenFiles, "v@:@@")
  495. }
  496. if template.applicationShouldOpenUntitledFile != nil {
  497. applicationShouldOpenUntitledFile :: proc "c" (self: id, cmd: SEL, sender: ^Application) -> BOOL {
  498. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  499. context = del._context
  500. return del.applicationShouldOpenUntitledFile(sender)
  501. }
  502. class_addMethod(class, intrinsics.objc_find_selector("applicationShouldOpenUntitledFile:"), auto_cast applicationShouldOpenUntitledFile, "B@:@")
  503. }
  504. if template.applicationOpenUntitledFile != nil {
  505. applicationOpenUntitledFile :: proc "c" (self: id, cmd: SEL, sender: ^Application) -> BOOL {
  506. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  507. context = del._context
  508. return del.applicationOpenUntitledFile(sender)
  509. }
  510. class_addMethod(class, intrinsics.objc_find_selector("applicationOpenUntitledFile:"), auto_cast applicationOpenUntitledFile, "B@:@")
  511. }
  512. if template.applicationPrintFile != nil {
  513. applicationPrintFile :: proc "c" (self: id, cmd: SEL, sender: ^Application, filename: ^String) -> BOOL {
  514. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  515. context = del._context
  516. return del.applicationPrintFile(sender, filename)
  517. }
  518. class_addMethod(class, intrinsics.objc_find_selector("application:printFile:"), auto_cast applicationPrintFile, "B@:@@")
  519. }
  520. if template.applicationPrintFilesWithSettingsShowPrintPanels != nil {
  521. applicationPrintFilesWithSettingsShowPrintPanels :: proc "c" (self: id, cmd: SEL, application: ^Application, fileNames: ^Array, printSettings: ^Dictionary, showPrintPanels: BOOL) -> ApplicationPrintReply {
  522. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  523. context = del._context
  524. return del.applicationPrintFilesWithSettingsShowPrintPanels(application, fileNames, printSettings, showPrintPanels)
  525. }
  526. class_addMethod(class, intrinsics.objc_find_selector("application:printFiles:withSettings:showPrintPanels:"), auto_cast applicationPrintFilesWithSettingsShowPrintPanels, _UINTEGER_ENCODING+"@:@@@B")
  527. }
  528. if template.applicationSupportsSecureRestorableState != nil {
  529. applicationSupportsSecureRestorableState :: proc "c" (self: id, cmd: SEL, app: ^Application) -> BOOL {
  530. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  531. context = del._context
  532. return del.applicationSupportsSecureRestorableState(app)
  533. }
  534. class_addMethod(class, intrinsics.objc_find_selector("applicationSupportsSecureRestorableState:"), auto_cast applicationSupportsSecureRestorableState, "B@:@")
  535. }
  536. if template.applicationProtectedDataDidBecomeAvailable != nil {
  537. applicationProtectedDataDidBecomeAvailable :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  538. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  539. context = del._context
  540. del.applicationProtectedDataDidBecomeAvailable(notification)
  541. }
  542. class_addMethod(class, intrinsics.objc_find_selector("applicationProtectedDataDidBecomeAvailable:"), auto_cast applicationProtectedDataDidBecomeAvailable, "v@:@")
  543. }
  544. if template.applicationProtectedDataWillBecomeUnavailable != nil {
  545. applicationProtectedDataWillBecomeUnavailable :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  546. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  547. context = del._context
  548. del.applicationProtectedDataWillBecomeUnavailable(notification)
  549. }
  550. class_addMethod(class, intrinsics.objc_find_selector("applicationProtectedDataWillBecomeUnavailable:"), auto_cast applicationProtectedDataWillBecomeUnavailable, "v@:@")
  551. }
  552. if template.applicationWillEncodeRestorableState != nil {
  553. applicationWillEncodeRestorableState :: proc "c" (self: id, cmd: SEL, app: ^Application, coder: ^Coder) {
  554. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  555. context = del._context
  556. del.applicationWillEncodeRestorableState(app, coder)
  557. }
  558. class_addMethod(class, intrinsics.objc_find_selector("application:willEncodeRestorableState:"), auto_cast applicationWillEncodeRestorableState, "v@:@@")
  559. }
  560. if template.applicationDidDecodeRestorableState != nil {
  561. applicationDidDecodeRestorableState :: proc "c" (self: id, cmd: SEL, app: ^Application, coder: ^Coder) {
  562. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  563. context = del._context
  564. del.applicationDidDecodeRestorableState(app, coder)
  565. }
  566. class_addMethod(class, intrinsics.objc_find_selector("application:didDecodeRestorableState:"), auto_cast applicationDidDecodeRestorableState, "v@:@@")
  567. }
  568. if template.applicationDidChangeOcclusionState != nil {
  569. applicationDidChangeOcclusionState :: proc "c" (self: id, cmd: SEL, notification: ^Notification) {
  570. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  571. context = del._context
  572. del.applicationDidChangeOcclusionState(notification)
  573. }
  574. class_addMethod(class, intrinsics.objc_find_selector("applicationDidChangeOcclusionState:"), auto_cast applicationDidChangeOcclusionState, "v@:@")
  575. }
  576. if template.applicationDelegateHandlesKey != nil {
  577. applicationDelegateHandlesKey :: proc "c" (self: id, cmd: SEL, sender: ^Application, key: ^String) -> BOOL {
  578. del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self)
  579. context = del._context
  580. return del.applicationDelegateHandlesKey(sender, key)
  581. }
  582. class_addMethod(class, intrinsics.objc_find_selector("application:delegateHandlesKey:"), auto_cast applicationDelegateHandlesKey, "B@:@@")
  583. }
  584. objc_registerClassPair(class)
  585. del := class_createInstance(class, size_of(_ApplicationDelegateInternal))
  586. del_internal := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(del)
  587. del_internal^ = {
  588. template,
  589. delegate_context.(runtime.Context) or_else runtime.default_context(),
  590. }
  591. return cast(^ApplicationDelegate)del
  592. }
  593. @(objc_type=Application, objc_name="setDelegate")
  594. Application_setDelegate :: proc "c" (self: ^Application, delegate: ^ApplicationDelegate) {
  595. msgSend(nil, self, "setDelegate:", delegate)
  596. }