NSApplication.odin 34 KB

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