From 2219abd835f4ba4c5dc330ee951b24d027089898 Mon Sep 17 00:00:00 2001 From: hsdk123 Date: Sun, 19 Jan 2025 02:46:14 -0500 Subject: [PATCH] Platform: use non-deprecated ALooper_pollOnce() in AndroidApplication. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vladimír Vondruš --- src/Magnum/Platform/AndroidApplication.cpp | 38 +++++++++++----------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/Magnum/Platform/AndroidApplication.cpp b/src/Magnum/Platform/AndroidApplication.cpp index 0c7b59bea..4b113f079 100644 --- a/src/Magnum/Platform/AndroidApplication.cpp +++ b/src/Magnum/Platform/AndroidApplication.cpp @@ -662,25 +662,25 @@ void AndroidApplication::exec(android_app* state, Containers::PointeruserData = &data; - for(;;) { - /* Read all pending events. Block and wait for them only if the app - doesn't want to redraw immediately WHY THIS GODDAMN THING DOESNT - HAVE SOMETHING LIKE WAIT FOR EVENT SO I NEED TO TANGLE THIS TANGLED - MESS OF HELL */ - int ident, events; - android_poll_source* source; - while((ident = ALooper_pollAll( - data.instance && (data.instance->_flags & Flag::Redraw) ? 0 : -1, - nullptr, &events, reinterpret_cast(&source))) >= 0) - { - /* Process this event OH SIR MAY MY POOR EXISTENCE CALL THIS - FUNCTION FOR YOU IF YOU DON'T MIND? */ - if(source) source->process(state, source); - - /* Exit WHY THIS HAS TO BE HANDLED HERE WHILE EVERY OTHER THING - IS HANDLED THROUGH CALLBACK GODDAMMIT */ - if(state->destroyRequested != 0) return; - } + /* Poll for event until destroy is requested */ + while(!state->destroyRequested) { + android_poll_source* source = nullptr; + const int result = ALooper_pollOnce( + data.instance && (data.instance->_flags & Flag::Redraw) ? + 0 : -1, /* negative value: wait indefinitely until an event appears */ + nullptr, nullptr, reinterpret_cast(&source)); + + /** @todo shouldn't this be acted upon somehow? the change in + https://github.com/android/ndk-samples/pull/1008 prints some error + message, the docs at https://developer.android.com/ndk/reference/group/looper + don't say anything useful as usual */ + if(result == ALOOPER_POLL_ERROR) + return; + + /* Process this event OH SIR MAY MY POOR EXISTENCE CALL THIS FUNCTION + FOR YOU IF YOU DON'T MIND? */ + if(source) + source->process(state, source); /* Redraw the app if it wants to be redrawn. Frame limiting is done by Android itself */