diff options
| author | Andre Weissflog <floooh@gmail.com> | 2021-05-13 18:45:22 +0200 |
|---|---|---|
| committer | Andre Weissflog <floooh@gmail.com> | 2021-05-13 18:45:22 +0200 |
| commit | 4260fb4c6ea02c9b91bc752b7e2db9572a084a69 (patch) | |
| tree | 6f01143e471ffb5cce3cbb610084589d850996e5 | |
| parent | 1183c90e16da3e6df3de7387762ba6c5e27ab523 (diff) | |
sokol_app.h: programmatic window close
| -rw-r--r-- | sokol_app.h | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/sokol_app.h b/sokol_app.h index 0ef22cde..bbbb30ed 100644 --- a/sokol_app.h +++ b/sokol_app.h @@ -2475,39 +2475,46 @@ _SOKOL_PRIVATE void _sapp_macos_init_state(void); _SOKOL_PRIVATE void _sapp_macos_discard_state(void); _SOKOL_PRIVATE bool _sapp_macos_create_window(_sapp_window_t* win); _SOKOL_PRIVATE void _sapp_macos_destroy_window(_sapp_window_t* win); +_SOKOL_PRIVATE void _sapp_macos_close_window(_sapp_window_t* win); _SOKOL_PRIVATE void _sapp_macos_set_icon(const sapp_icon_desc* desc, int num_images); #elif defined(_SAPP_IOS) _SOKOL_PRIVATE void _sapp_ios_init_state(void); _SOKOL_PRIVATE void _sapp_ios_discard_state(void); _SOKOL_PRIVATE bool _sapp_ios_create_window(_sapp_window_t* win); _SOKOL_PRIVATE void _sapp_ios_destroy_window(_sapp_window_t* win); +_SOKOL_PRIVATE void _sapp_ios_close_window(_sapp_window_t* win); #elif defined(_SAPP_EMSCRIPTEN) _SOKOL_PRIVATE void _sapp_emsc_init_state(void); _SOKOL_PRIVATE void _sapp_emsc_discard_state(void); _SOKOL_PRIVATE bool _sapp_emsc_create_window(_sapp_window_t* win); _SOKOL_PRIVATE void _sapp_emsc_destroy_window(_sapp_window_t* win); +_SOKOL_PRIVATE void _sapp_emsc_close_window(_sapp_window_t* win); _SOKOL_PRIVATE void _sapp_emsc_set_icon(const sapp_icon_desc* desc, int num_images); #elif defined(_SAPP_WIN32) _SOKOL_PRIVATE void _sapp_win32_init_state(void); _SOKOL_PRIVATE void _sapp_win32_discard_state(void); _SOKOL_PRIVATE bool _sapp_win32_create_window(_sapp_window_t* win); _SOKOL_PRIVATE void _sapp_win32_destroy_window(_sapp_window_t* win); +_SOKOL_PRIVATE void _sapp_win32_close_window(_sapp_window_t* win); _SOKOL_PRIVATE void _sapp_win32_set_icon(const sapp_icon_desc* desc, int num_images); #elif defined(_SAPP_UWP) _SOKOL_PRIVATE void _sapp_uwp_init_state(void); _SOKOL_PRIVATE void _sapp_uwp_discard_state(void); _SOKOL_PRIVATE bool _sapp_uwp_create_window(_sapp_window_t* win); _SOKOL_PRIVATE void _sapp_uwp_destroy_window(_sapp_window_t* win); +_SOKOL_PRIVATE void _sapp_uwp_close_window(_sapp_window_t* win); #elif defined(_SAPP_ANDROID) _SOKOL_PRIVATE void _sapp_android_init_state(void); _SOKOL_PRIVATE void _sapp_android_discard_state(void); _SOKOL_PRIVATE bool _sapp_android_create_window(_sapp_window_t* win); _SOKOL_PRIVATE void _sapp_android_destroy_window(_sapp_window_t* win); +_SOKOL_PRIVATE void _sapp_android_close_window(_sapp_window_t* win); #elif defined(_SAPP_LINUX) _SOKOL_PRIVATE void _sapp_x11_init_state(void); _SOKOL_PRIVATE void _sapp_x11_discard_state(void); _SOKOL_PRIVATE bool _sapp_x11_create_window(_sapp_window_t* win); _SOKOL_PRIVATE void _sapp_x11_destroy_window(_sapp_window_t* win); +_SOKOL_PRIVATE void _sapp_x11_close_window(_sapp_window_t* win); _SOKOL_PRIVATE void _sapp_x11_set_icon(const sapp_icon_desc* desc, int num_images); #endif @@ -2682,6 +2689,24 @@ _SOKOL_PRIVATE void _sapp_platform_destroy_window(_sapp_window_t* win) { #endif } +_SOKOL_PRIVATE void _sapp_platform_close_window(_sapp_window_t* win) { + #if defined(_SAPP_MACOS) + _sapp_macos_close_window(win); + #elif defined(_SAPP_IOS) + _sapp_ios_close_window(win); + #elif defined(_SAPP_EMSCRIPTEN) + _sapp_emsc_close_window(win); + #elif defined(_SAPP_WIN32) + _sapp_win32_close_window(win); + #elif defined(_SAPP_UWP) + _sapp_uwp_close_window(win); + #elif defined(_SAPP_ANDROID) + _sapp_android_close_window(win); + #elif defined(_SAPP_LINUX) + _sapp_x11_close_window(win); + #endif +} + _SOKOL_PRIVATE void _sapp_platform_set_icon(const sapp_icon_desc* desc, int num_images) { #if defined(_SAPP_MACOS) _sapp_macos_set_icon(desc, num_images); @@ -3511,6 +3536,12 @@ _SOKOL_PRIVATE void _sapp_macos_destroy_window(_sapp_window_t* win) { _SAPP_OBJC_RELEASE(win->macos.window); } +_SOKOL_PRIVATE void _sapp_macos_close_window(_sapp_window_t* win) { + SOKOL_ASSERT(win); + SOKOL_ASSERT(win->macos.window); + [win->macos.window close]; +} + /* MacOS entry function */ #if !defined(SOKOL_NO_ENTRY) int main(int argc, char* argv[]) { @@ -3805,9 +3836,7 @@ _SOKOL_PRIVATE CVReturn _sapp_macos_displaylink_callback( } if (_sapp.quit_requested && !_sapp.quit_ordered) { _sapp_window_t* win = _sapp_lookup_window(_sapp.main_window_id); - if (win) { - [win->macos.window performClose:nil]; - } + _sapp_macos_close_window(win); } if (_sapp.quit_ordered) { [NSApp terminate:self]; @@ -11566,8 +11595,10 @@ SOKOL_API_IMPL sapp_window sapp_open_window(const sapp_window_desc* in_desc) { SOKOL_API_IMPL void sapp_close_window(sapp_window window) { SOKOL_ASSERT(_sapp.valid); - // FIXME FIXME FIXME: this just sets a flag, closing windows happens - // at end of current frame! + _sapp_window_t* win = _sapp_lookup_window(window.id); + if (win) { + _sapp_platform_close_window(win); + } } SOKOL_API_IMPL void sapp_activate_window_context(sapp_window window) { |