From 06bb57a7235d2b7accf33224166c70a2e58dd898 Mon Sep 17 00:00:00 2001 From: Seoyeon Kim Date: Tue, 20 Nov 2018 14:24:49 +0900 Subject: [PATCH] Fix to get the logical key to ecore key variable - Ecore key variable should be the logical key, not the string name of the key pressed. - For example, if the user press 'Shift + 2' key, keyPressedName is 2, but key variable is "at" and key string is "@". Change-Id: I1c59b69873635e180e9e66f347c8ebe0b394ac9f Signed-off-by: Seoyeon Kim --- .../input-method-context-impl-ecore-wl.cpp | 10 ++++++++-- .../input/ubuntu-x11/input-method-context-impl-x.cpp | 10 ++++++++-- .../tizen-wayland/ecore-wl/window-base-ecore-wl.cpp | 18 ++++++++++++++++-- .../tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp | 18 ++++++++++++++++-- .../window-system/ubuntu-x11/window-base-ecore-x.cpp | 18 ++++++++++++++++-- 5 files changed, 64 insertions(+), 10 deletions(-) diff --git a/dali/internal/input/tizen-wayland/input-method-context-impl-ecore-wl.cpp b/dali/internal/input/tizen-wayland/input-method-context-impl-ecore-wl.cpp index b043d32..0a50e91 100755 --- a/dali/internal/input/tizen-wayland/input-method-context-impl-ecore-wl.cpp +++ b/dali/internal/input/tizen-wayland/input-method-context-impl-ecore-wl.cpp @@ -946,13 +946,16 @@ bool InputMethodContextEcoreWl::ProcessEventKeyDown( const KeyEvent& keyEvent ) bool eventHandled( false ); if ( mIMFContext ) { + Integration::KeyEvent integKeyEvent( keyEvent ); + std::string key = integKeyEvent.logicalKey; + std::string compose = keyEvent.GetCompose(); std::string deviceName = keyEvent.GetDeviceName(); // We're consuming key down event so we have to pass to InputMethodContext so that it can parse it as well. Ecore_IMF_Event_Key_Down ecoreKeyDownEvent; ecoreKeyDownEvent.keyname = keyEvent.keyPressedName.c_str(); - ecoreKeyDownEvent.key = keyEvent.keyPressedName.c_str(); + ecoreKeyDownEvent.key = key.c_str(); ecoreKeyDownEvent.string = keyEvent.keyPressed.c_str(); ecoreKeyDownEvent.compose = compose.c_str(); ecoreKeyDownEvent.timestamp = keyEvent.time; @@ -996,13 +999,16 @@ bool InputMethodContextEcoreWl::ProcessEventKeyUp( const KeyEvent& keyEvent ) bool eventHandled( false ); if( mIMFContext ) { + Integration::KeyEvent integKeyEvent( keyEvent ); + std::string key = integKeyEvent.logicalKey; + std::string compose = keyEvent.GetCompose(); std::string deviceName = keyEvent.GetDeviceName(); // We're consuming key up event so we have to pass to InputMethodContext so that it can parse it as well. Ecore_IMF_Event_Key_Up ecoreKeyUpEvent; ecoreKeyUpEvent.keyname = keyEvent.keyPressedName.c_str(); - ecoreKeyUpEvent.key = keyEvent.keyPressedName.c_str(); + ecoreKeyUpEvent.key = key.c_str(); ecoreKeyUpEvent.string = keyEvent.keyPressed.c_str(); ecoreKeyUpEvent.compose = compose.c_str(); ecoreKeyUpEvent.timestamp = keyEvent.time; diff --git a/dali/internal/input/ubuntu-x11/input-method-context-impl-x.cpp b/dali/internal/input/ubuntu-x11/input-method-context-impl-x.cpp index 7a28eb3..7a2ab0e 100755 --- a/dali/internal/input/ubuntu-x11/input-method-context-impl-x.cpp +++ b/dali/internal/input/ubuntu-x11/input-method-context-impl-x.cpp @@ -753,12 +753,15 @@ bool InputMethodContextX::ProcessEventKeyDown( const KeyEvent& keyEvent ) bool eventHandled( false ); if ( mIMFContext ) { + Integration::KeyEvent integKeyEvent( keyEvent ); + std::string key = integKeyEvent.logicalKey; + std::string compose = keyEvent.GetCompose(); // We're consuming key down event so we have to pass to InputMethodContext so that it can parse it as well. Ecore_IMF_Event_Key_Down ecoreKeyDownEvent; ecoreKeyDownEvent.keyname = keyEvent.keyPressedName.c_str(); - ecoreKeyDownEvent.key = keyEvent.keyPressedName.c_str(); + ecoreKeyDownEvent.key = key.c_str(); ecoreKeyDownEvent.string = keyEvent.keyPressed.c_str(); ecoreKeyDownEvent.compose = compose.c_str(); ecoreKeyDownEvent.timestamp = keyEvent.time; @@ -804,12 +807,15 @@ bool InputMethodContextX::ProcessEventKeyUp( const KeyEvent& keyEvent ) bool eventHandled( false ); if( mIMFContext ) { + Integration::KeyEvent integKeyEvent( keyEvent ); + std::string key = integKeyEvent.logicalKey; + std::string compose = keyEvent.GetCompose(); // We're consuming key up event so we have to pass to InputMethodContext so that it can parse it as well. Ecore_IMF_Event_Key_Up ecoreKeyUpEvent; ecoreKeyUpEvent.keyname = keyEvent.keyPressedName.c_str(); - ecoreKeyUpEvent.key = keyEvent.keyPressedName.c_str(); + ecoreKeyUpEvent.key = key.c_str(); ecoreKeyUpEvent.string = keyEvent.keyPressed.c_str(); ecoreKeyUpEvent.compose = compose.c_str(); ecoreKeyUpEvent.timestamp = keyEvent.time; diff --git a/dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.cpp b/dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.cpp index c4574fd..af60d7a 100644 --- a/dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.cpp +++ b/dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.cpp @@ -998,6 +998,7 @@ void WindowBaseEcoreWl::OnKeyDown( void* data, int type, void* event ) DALI_LOG_INFO( gWindowBaseLogFilter, Debug::General, "WindowBaseEcoreWl::OnKeyDown\n" ); std::string keyName( keyEvent->keyname ); + std::string logicalKey( "" ); std::string keyString( "" ); std::string compose( "" ); @@ -1007,6 +1008,12 @@ void WindowBaseEcoreWl::OnKeyDown( void* data, int type, void* event ) compose = keyEvent->compose; } + // Ensure key symbol is not NULL as keys like SHIFT have a null string. + if( keyEvent->key ) + { + logicalKey = keyEvent->key; + } + int keyCode = KeyLookup::GetDaliKeyCode( keyEvent->keyname ); keyCode = ( keyCode == -1 ) ? 0 : keyCode; int modifier( keyEvent->modifiers ); @@ -1030,7 +1037,7 @@ void WindowBaseEcoreWl::OnKeyDown( void* data, int type, void* event ) GetDeviceClass( ecore_device_class_get( keyEvent->dev ), deviceClass ); GetDeviceSubclass( ecore_device_subclass_get( keyEvent->dev ), deviceSubclass ); - Integration::KeyEvent keyEvent( keyName, keyString, keyCode, modifier, time, Integration::KeyEvent::Down, compose, deviceName, deviceClass, deviceSubclass ); + Integration::KeyEvent keyEvent( keyName, logicalKey, keyString, keyCode, modifier, time, Integration::KeyEvent::Down, compose, deviceName, deviceClass, deviceSubclass ); mKeyEventSignal.Emit( keyEvent ); } @@ -1045,6 +1052,7 @@ void WindowBaseEcoreWl::OnKeyUp( void* data, int type, void* event ) DALI_LOG_INFO( gWindowBaseLogFilter, Debug::General, "WindowBaseEcoreWl::OnKeyUp\n" ); std::string keyName( keyEvent->keyname ); + std::string logicalKey( "" ); std::string keyString( "" ); std::string compose( "" ); @@ -1054,6 +1062,12 @@ void WindowBaseEcoreWl::OnKeyUp( void* data, int type, void* event ) compose = keyEvent->compose; } + // Ensure key symbol is not NULL as keys like SHIFT have a null string. + if( keyEvent->key ) + { + logicalKey = keyEvent->key; + } + int keyCode = KeyLookup::GetDaliKeyCode( keyEvent->keyname ); keyCode = ( keyCode == -1 ) ? 0 : keyCode; int modifier( keyEvent->modifiers ); @@ -1077,7 +1091,7 @@ void WindowBaseEcoreWl::OnKeyUp( void* data, int type, void* event ) GetDeviceClass( ecore_device_class_get( keyEvent->dev ), deviceClass ); GetDeviceSubclass( ecore_device_subclass_get( keyEvent->dev ), deviceSubclass ); - Integration::KeyEvent keyEvent( keyName, keyString, keyCode, modifier, time, Integration::KeyEvent::Up, compose, deviceName, deviceClass, deviceSubclass ); + Integration::KeyEvent keyEvent( keyName, logicalKey, keyString, keyCode, modifier, time, Integration::KeyEvent::Up, compose, deviceName, deviceClass, deviceSubclass ); mKeyEventSignal.Emit( keyEvent ); } diff --git a/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp b/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp index 5ae9032..84a8a2c 100755 --- a/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp +++ b/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp @@ -1008,6 +1008,7 @@ void WindowBaseEcoreWl2::OnKeyDown( void* data, int type, void* event ) DALI_LOG_INFO( gWindowBaseLogFilter, Debug::General, "WindowBaseEcoreWl::OnKeyDown\n" ); std::string keyName( keyEvent->keyname ); + std::string logicalKey( "" ); std::string keyString( "" ); std::string compose( "" ); @@ -1017,6 +1018,12 @@ void WindowBaseEcoreWl2::OnKeyDown( void* data, int type, void* event ) compose = keyEvent->compose; } + // Ensure key symbol is not NULL as keys like SHIFT have a null string. + if( keyEvent->key ) + { + logicalKey = keyEvent->key; + } + int keyCode = KeyLookup::GetDaliKeyCode( keyEvent->keyname ); keyCode = ( keyCode == -1 ) ? 0 : keyCode; int modifier( keyEvent->modifiers ); @@ -1040,7 +1047,7 @@ void WindowBaseEcoreWl2::OnKeyDown( void* data, int type, void* event ) GetDeviceClass( ecore_device_class_get( keyEvent->dev ), deviceClass ); GetDeviceSubclass( ecore_device_subclass_get( keyEvent->dev ), deviceSubclass ); - Integration::KeyEvent keyEvent( keyName, keyString, keyCode, modifier, time, Integration::KeyEvent::Down, compose, deviceName, deviceClass, deviceSubclass ); + Integration::KeyEvent keyEvent( keyName, logicalKey, keyString, keyCode, modifier, time, Integration::KeyEvent::Down, compose, deviceName, deviceClass, deviceSubclass ); mKeyEventSignal.Emit( keyEvent ); } @@ -1055,6 +1062,7 @@ void WindowBaseEcoreWl2::OnKeyUp( void* data, int type, void* event ) DALI_LOG_INFO( gWindowBaseLogFilter, Debug::General, "WindowBaseEcoreWl::OnKeyUp\n" ); std::string keyName( keyEvent->keyname ); + std::string logicalKey( "" ); std::string keyString( "" ); std::string compose( "" ); @@ -1064,6 +1072,12 @@ void WindowBaseEcoreWl2::OnKeyUp( void* data, int type, void* event ) compose = keyEvent->compose; } + // Ensure key symbol is not NULL as keys like SHIFT have a null string. + if( keyEvent->key ) + { + logicalKey = keyEvent->key; + } + int keyCode = KeyLookup::GetDaliKeyCode( keyEvent->keyname ); keyCode = ( keyCode == -1 ) ? 0 : keyCode; int modifier( keyEvent->modifiers ); @@ -1087,7 +1101,7 @@ void WindowBaseEcoreWl2::OnKeyUp( void* data, int type, void* event ) GetDeviceClass( ecore_device_class_get( keyEvent->dev ), deviceClass ); GetDeviceSubclass( ecore_device_subclass_get( keyEvent->dev ), deviceSubclass ); - Integration::KeyEvent keyEvent( keyName, keyString, keyCode, modifier, time, Integration::KeyEvent::Up, compose, deviceName, deviceClass, deviceSubclass ); + Integration::KeyEvent keyEvent( keyName, logicalKey, keyString, keyCode, modifier, time, Integration::KeyEvent::Up, compose, deviceName, deviceClass, deviceSubclass ); mKeyEventSignal.Emit( keyEvent ); } diff --git a/dali/internal/window-system/ubuntu-x11/window-base-ecore-x.cpp b/dali/internal/window-system/ubuntu-x11/window-base-ecore-x.cpp index 4ff9d56..41568e9 100755 --- a/dali/internal/window-system/ubuntu-x11/window-base-ecore-x.cpp +++ b/dali/internal/window-system/ubuntu-x11/window-base-ecore-x.cpp @@ -519,6 +519,7 @@ void WindowBaseEcoreX::OnKeyDown( void* data, int type, void* event ) DALI_LOG_INFO( gWindowBaseLogFilter, Debug::General, "WindowBaseEcoreX::OnKeyDown\n" ); std::string keyName( keyEvent->keyname ); + std::string logicalKey( "" ); std::string keyString( "" ); std::string compose( "" ); @@ -528,6 +529,12 @@ void WindowBaseEcoreX::OnKeyDown( void* data, int type, void* event ) compose = keyEvent->compose; } + // Ensure key symbol is not NULL as keys like SHIFT have a null string. + if( keyEvent->key ) + { + logicalKey = keyEvent->key; + } + int keyCode = ecore_x_keysym_keycode_get( keyEvent->keyname ); int modifier( keyEvent->modifiers ); unsigned long time = keyEvent->timestamp; @@ -538,7 +545,7 @@ void WindowBaseEcoreX::OnKeyDown( void* data, int type, void* event ) keyString = keyEvent->string; } - Integration::KeyEvent keyEvent( keyName, keyString, keyCode, modifier, time, Integration::KeyEvent::Down, compose, DEFAULT_DEVICE_NAME, DEFAULT_DEVICE_CLASS, DEFAULT_DEVICE_SUBCLASS ); + Integration::KeyEvent keyEvent( keyName, logicalKey, keyString, keyCode, modifier, time, Integration::KeyEvent::Down, compose, DEFAULT_DEVICE_NAME, DEFAULT_DEVICE_CLASS, DEFAULT_DEVICE_SUBCLASS ); mKeyEventSignal.Emit( keyEvent ); } @@ -553,6 +560,7 @@ void WindowBaseEcoreX::OnKeyUp( void* data, int type, void* event ) DALI_LOG_INFO( gWindowBaseLogFilter, Debug::General, " WindowBaseEcoreX::OnKeyUp\n" ); std::string keyName( keyEvent->keyname ); + std::string logicalKey( "" ); std::string keyString( "" ); std::string compose( "" ); @@ -561,6 +569,12 @@ void WindowBaseEcoreX::OnKeyUp( void* data, int type, void* event ) { compose = keyEvent->compose; } + // Ensure key symbol is not NULL as keys like SHIFT have a null string. + if( keyEvent->key ) + { + logicalKey = keyEvent->key; + } + int keyCode = ecore_x_keysym_keycode_get( keyEvent->keyname ); int modifier( keyEvent->modifiers ); unsigned long time( keyEvent->timestamp ); @@ -571,7 +585,7 @@ void WindowBaseEcoreX::OnKeyUp( void* data, int type, void* event ) keyString = keyEvent->string; } - Integration::KeyEvent keyEvent( keyName, keyString, keyCode, modifier, time, Integration::KeyEvent::Up, compose, DEFAULT_DEVICE_NAME, DEFAULT_DEVICE_CLASS, DEFAULT_DEVICE_SUBCLASS ); + Integration::KeyEvent keyEvent( keyName, logicalKey, keyString, keyCode, modifier, time, Integration::KeyEvent::Up, compose, DEFAULT_DEVICE_NAME, DEFAULT_DEVICE_CLASS, DEFAULT_DEVICE_SUBCLASS ); mKeyEventSignal.Emit( keyEvent ); } -- 2.7.4