Fix to get the logical key to ecore key variable 42/193442/2
authorSeoyeon Kim <seoyeon2.kim@samsung.com>
Tue, 20 Nov 2018 05:24:49 +0000 (14:24 +0900)
committerSeoyeon Kim <seoyeon2.kim@samsung.com>
Mon, 17 Dec 2018 02:21:18 +0000 (11:21 +0900)
- 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 <seoyeon2.kim@samsung.com>
dali/internal/input/tizen-wayland/input-method-context-impl-ecore-wl.cpp
dali/internal/input/ubuntu-x11/input-method-context-impl-x.cpp
dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.cpp
dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp
dali/internal/window-system/ubuntu-x11/window-base-ecore-x.cpp

index b043d32..0a50e91 100755 (executable)
@@ -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;
index 7a28eb3..7a2ab0e 100755 (executable)
@@ -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;
index c4574fd..af60d7a 100644 (file)
@@ -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 );
   }
index 5ae9032..84a8a2c 100755 (executable)
@@ -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 );
   }
index 4ff9d56..41568e9 100755 (executable)
@@ -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 );
   }