4
4
5
5
#include " key_event_handler.h"
6
6
7
- #include " flutter/shell/platform/tizen/flutter_tizen_engine.h "
7
+ #include < app.h >
8
8
9
- static constexpr char kPlatformBackButtonName [] = " XF86Back" ;
9
+ #include " flutter/shell/platform/tizen/flutter_tizen_engine.h"
10
+ #include " flutter/shell/platform/tizen/tizen_log.h"
10
11
11
12
namespace flutter {
12
13
14
+ namespace {
15
+
16
+ constexpr char kBackKey [] = " XF86Back" ;
17
+ constexpr char kExitKey [] = " XF86Exit" ;
18
+
19
+ } // namespace
20
+
13
21
KeyEventHandler::KeyEventHandler (FlutterTizenEngine* engine) : engine_(engine) {
14
22
key_event_handlers_.push_back (
15
23
ecore_event_handler_add (ECORE_EVENT_KEY_DOWN, OnKey, this ));
@@ -30,24 +38,34 @@ Eina_Bool KeyEventHandler::OnKey(void* data, int type, void* event) {
30
38
auto * engine = self->engine_ ;
31
39
auto is_down = type == ECORE_EVENT_KEY_DOWN;
32
40
33
- if (strcmp (key->keyname , kPlatformBackButtonName ) == 0 ) {
34
- // The device back button was pressed.
35
- if (engine->navigation_channel && !is_down) {
36
- engine->navigation_channel ->PopRoute ();
37
- }
38
- } else {
39
- if (engine->text_input_channel ) {
40
- if (is_down) {
41
- engine->text_input_channel ->OnKeyDown (key);
42
- }
43
- if (engine->text_input_channel ->IsSoftwareKeyboardShowing ()) {
44
- return ECORE_CALLBACK_PASS_ON;
45
- }
41
+ FT_LOGI (" Keycode: %d, name: %s, mods: %d, is_down: %d" , key->keycode ,
42
+ key->keyname , key->modifiers , is_down);
43
+
44
+ if (engine->text_input_channel ) {
45
+ if (is_down) {
46
+ engine->text_input_channel ->OnKeyDown (key);
46
47
}
47
- if (engine->key_event_channel ) {
48
- engine-> key_event_channel -> SendKeyEvent (key, is_down) ;
48
+ if (engine->text_input_channel -> IsSoftwareKeyboardShowing () ) {
49
+ return ECORE_CALLBACK_PASS_ON ;
49
50
}
50
51
}
52
+
53
+ if (engine->key_event_channel ) {
54
+ engine->key_event_channel ->SendKeyEvent (
55
+ key, is_down,
56
+ [engine, keyname = std::string (key->keyname ), is_down](bool handled) {
57
+ if (handled) {
58
+ return ;
59
+ }
60
+ if (keyname == kBackKey && !is_down) {
61
+ if (engine->navigation_channel ) {
62
+ engine->navigation_channel ->PopRoute ();
63
+ }
64
+ } else if (keyname == kExitKey && !is_down) {
65
+ ui_app_exit ();
66
+ }
67
+ });
68
+ }
51
69
return ECORE_CALLBACK_PASS_ON;
52
70
}
53
71
0 commit comments