blob: 2ec8b06541cf7243076ee6698bfb3cf8a5ab1afc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
// Copyright 2023 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include <jni.h>
#include "Common/Config/Config.h"
#include "jni/AndroidCommon/AndroidCommon.h"
#include "jni/AndroidCommon/IDCache.h"
struct ConfigChangedCallbackContext
{
jobject runnable;
Config::ConfigChangedCallbackID callback_id;
};
extern "C" {
JNIEXPORT jlong JNICALL
Java_org_dolphinemu_dolphinemu_features_settings_model_ConfigChangedCallback_initialize(
JNIEnv* env, jclass, jobject runnable)
{
auto* context = new ConfigChangedCallbackContext;
jobject runnable_global = env->NewGlobalRef(runnable);
context->runnable = runnable_global;
context->callback_id = Config::AddConfigChangedCallback([runnable_global] {
IDCache::GetEnvForThread()->CallVoidMethod(runnable_global, IDCache::GetRunnableRun());
});
return reinterpret_cast<jlong>(context);
}
JNIEXPORT void JNICALL
Java_org_dolphinemu_dolphinemu_features_settings_model_ConfigChangedCallback_deinitialize(
JNIEnv* env, jclass, jlong pointer)
{
auto* context = reinterpret_cast<ConfigChangedCallbackContext*>(pointer);
Config::RemoveConfigChangedCallback(context->callback_id);
env->DeleteGlobalRef(context->runnable);
delete context;
}
}
|