Fahrsimulator_MSY2526_UX/lib/jcef/native/keyboard_handler.cpp
2026-02-19 21:31:49 +01:00

89 lines
3.1 KiB
C++

// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights
// reserved. Use of this source code is governed by a BSD-style license that
// can be found in the LICENSE file.
#include "keyboard_handler.h"
#include "client_handler.h"
#include "jni_util.h"
#include "util.h"
namespace {
jobject NewJNIKeyEvent(JNIEnv* env, const CefKeyEvent& event) {
ScopedJNIObjectResult jkeyEventType(env);
switch (event.type) {
default:
JNI_CASE(env, "org/cef/handler/CefKeyboardHandler$CefKeyEvent$EventType",
KEYEVENT_RAWKEYDOWN, jkeyEventType);
JNI_CASE(env, "org/cef/handler/CefKeyboardHandler$CefKeyEvent$EventType",
KEYEVENT_KEYDOWN, jkeyEventType);
JNI_CASE(env, "org/cef/handler/CefKeyboardHandler$CefKeyEvent$EventType",
KEYEVENT_KEYUP, jkeyEventType);
JNI_CASE(env, "org/cef/handler/CefKeyboardHandler$CefKeyEvent$EventType",
KEYEVENT_CHAR, jkeyEventType);
}
return NewJNIObject(
env, "org/cef/handler/CefKeyboardHandler$CefKeyEvent",
"(Lorg/cef/handler/CefKeyboardHandler$CefKeyEvent$EventType;IIIZCCZ)V",
jkeyEventType.get(), event.modifiers, event.windows_key_code,
event.native_key_code, (event.is_system_key != 0 ? JNI_TRUE : JNI_FALSE),
event.character, event.unmodified_character,
(event.focus_on_editable_field != 0 ? JNI_TRUE : JNI_FALSE));
}
} // namespace
KeyboardHandler::KeyboardHandler(JNIEnv* env, jobject handler)
: handle_(env, handler) {}
bool KeyboardHandler::OnPreKeyEvent(CefRefPtr<CefBrowser> browser,
const CefKeyEvent& event,
CefEventHandle os_event,
bool* is_keyboard_shortcut) {
ScopedJNIEnv env;
if (!env)
return false;
ScopedJNIObjectLocal jevent(env, NewJNIKeyEvent(env, event));
if (!jevent)
return false;
ScopedJNIBoolRef jboolRef(env, *is_keyboard_shortcut);
if (!jboolRef)
return false;
jboolean jresult = JNI_FALSE;
ScopedJNIBrowser jbrowser(env, browser);
JNI_CALL_METHOD(env, handle_, "onPreKeyEvent",
"(Lorg/cef/browser/CefBrowser;Lorg/cef/handler/"
"CefKeyboardHandler$CefKeyEvent;Lorg/cef/misc/BoolRef;)Z",
Boolean, jresult, jbrowser.get(), jevent.get(),
jboolRef.get());
*is_keyboard_shortcut = jboolRef;
return (jresult != JNI_FALSE);
}
bool KeyboardHandler::OnKeyEvent(CefRefPtr<CefBrowser> browser,
const CefKeyEvent& event,
CefEventHandle os_event) {
ScopedJNIEnv env;
if (!env)
return false;
ScopedJNIObjectLocal jevent(env, NewJNIKeyEvent(env, event));
if (!jevent)
return false;
jboolean jresult = JNI_FALSE;
ScopedJNIBrowser jbrowser(env, browser);
JNI_CALL_METHOD(env, handle_, "onKeyEvent",
"(Lorg/cef/browser/CefBrowser;Lorg/cef/handler/"
"CefKeyboardHandler$CefKeyEvent;)Z",
Boolean, jresult, jbrowser.get(), jevent.get());
return (jresult != JNI_FALSE);
}