Skip to content

Commit 8db6780

Browse files
committed
Fix tcore window input handling
1 parent bf226ab commit 8db6780

2 files changed

Lines changed: 41 additions & 15 deletions

File tree

flutter/shell/platform/tizen/tizen_input_method_context_tcore.cc

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,24 +84,27 @@ tizen_core_imf_event_key_h CreateImfKeyEventFromTcoreWlEvent(void* event) {
8484
tizen_core_wl_event_key_get_keyname(ev, &keyname);
8585
if (keyname) {
8686
tizen_core_imf_event_key_set_keyname(imf_key, keyname);
87-
tizen_core_imf_event_key_set_key(imf_key, keyname);
88-
free(keyname);
8987
}
9088

9189
char* keysymbol = nullptr;
9290
tizen_core_wl_event_key_get_keysymbol(ev, &keysymbol);
9391
if (keysymbol) {
94-
tizen_core_imf_event_key_set_string(imf_key, keysymbol);
95-
free(keysymbol);
92+
tizen_core_imf_event_key_set_key(imf_key, keysymbol);
93+
} else if (keyname) {
94+
tizen_core_imf_event_key_set_key(imf_key, keyname);
9695
}
9796

9897
char* compose = nullptr;
9998
tizen_core_wl_event_key_get_compose(ev, &compose);
10099
if (compose) {
100+
tizen_core_imf_event_key_set_string(imf_key, compose);
101101
tizen_core_imf_event_key_set_compose(imf_key, compose);
102-
free(compose);
103102
}
104103

104+
free(keyname);
105+
free(keysymbol);
106+
free(compose);
107+
105108
unsigned int keycode = 0;
106109
tizen_core_wl_event_key_get_keycode(ev, &keycode);
107110
tizen_core_imf_event_key_set_keycode(imf_key, keycode);

flutter/shell/platform/tizen/tizen_window_tcore_wl.cc

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,15 @@ void TizenWindowTcoreWl::RegisterEventHandlers() {
666666
char* dev_identifier = nullptr;
667667
tizen_core_wl_event_input_base_get_device_identifier(ev,
668668
&dev_identifier);
669+
const char* key = keysymbol ? keysymbol : keyname;
670+
if (!key) {
671+
FT_LOG(Error) << "Failed to get a key symbol from tcore wl event.";
672+
free(keyname);
673+
free(keysymbol);
674+
free(compose);
675+
free(dev_identifier);
676+
return;
677+
}
669678

670679
bool handled = false;
671680
if (self->input_method_context_ &&
@@ -682,8 +691,8 @@ void TizenWindowTcoreWl::RegisterEventHandlers() {
682691
// Passing keysymbol as `string` breaks the printable-key fallback
683692
// in TextInputChannel::HandleKey() for keys whose symbol name is
684693
// multi-char ("period", "minus", "equal", ...).
685-
self->view_delegate_->OnKey(keysymbol, compose, compose, modifiers,
686-
keycode, dev_identifier, true);
694+
self->view_delegate_->OnKey(key, compose, compose, modifiers, keycode,
695+
dev_identifier, true);
687696
}
688697
free(keyname);
689698
free(keysymbol);
@@ -718,6 +727,14 @@ void TizenWindowTcoreWl::RegisterEventHandlers() {
718727
tizen_core_wl_event_key_get_modifiers(ev, &modifiers);
719728
unsigned int keycode = 0;
720729
tizen_core_wl_event_key_get_keycode(ev, &keycode);
730+
const char* key = keysymbol ? keysymbol : keyname;
731+
if (!key) {
732+
FT_LOG(Error) << "Failed to get a key symbol from tcore wl event.";
733+
free(keyname);
734+
free(keysymbol);
735+
free(compose);
736+
return;
737+
}
721738

722739
bool handled = false;
723740
if (self->input_method_context_ &&
@@ -727,8 +744,8 @@ void TizenWindowTcoreWl::RegisterEventHandlers() {
727744
}
728745
if (!handled) {
729746
// See key-down handler for the keysymbol vs compose rationale.
730-
self->view_delegate_->OnKey(keysymbol, compose, compose, modifiers,
731-
keycode, nullptr, false);
747+
self->view_delegate_->OnKey(key, compose, compose, modifiers, keycode,
748+
nullptr, false);
732749
}
733750
free(keyname);
734751
free(keysymbol);
@@ -843,17 +860,24 @@ void TizenWindowTcoreWl::SetPreferredOrientations(
843860
}
844861

845862
void TizenWindowTcoreWl::BindKeys(const std::vector<std::string>& keys) {
863+
GList* list = nullptr;
864+
std::vector<tizen_core_wl_keygrab_info_h> infos;
846865
for (const std::string& key : keys) {
847866
tizen_core_wl_keygrab_info_h info = nullptr;
848867
tizen_core_wl_keygrab_info_create(key.c_str(),
849868
TIZEN_CORE_WL_KEYGRAB_TOPMOST, &info);
850869
if (info) {
851-
GList* list = g_list_append(nullptr, info);
852-
tizen_core_wl_window_set_keygrab_list(tcore_wl_window_, list);
853-
g_list_free(list);
854-
tizen_core_wl_keygrab_info_destroy(info);
870+
list = g_list_append(list, info);
871+
infos.push_back(info);
855872
}
856873
}
874+
if (list) {
875+
tizen_core_wl_window_set_keygrab_list(tcore_wl_window_, list);
876+
g_list_free(list);
877+
}
878+
for (tizen_core_wl_keygrab_info_h info : infos) {
879+
tizen_core_wl_keygrab_info_destroy(info);
880+
}
857881
}
858882

859883
void TizenWindowTcoreWl::Show() {
@@ -910,8 +934,7 @@ void TizenWindowTcoreWl::UpdateFlutterCursor(const std::string& kind) {
910934
kTcoreWlInputCursorThemeName);
911935
tizen_core_wl_seat_set_cursor_name(default_seat, cursor_name.c_str());
912936
} else {
913-
tizen_core_wl_seat_set_cursor_theme(default_seat, "default");
914-
tizen_core_wl_seat_set_cursor_name(default_seat, "left_ptr");
937+
FT_LOG(Error) << "Could not get default seat.";
915938
}
916939
#else
917940
tizen_core_wl_seat_h default_seat = nullptr;

0 commit comments

Comments
 (0)