From: Seoyeon Kim Date: Fri, 30 Jun 2017 05:07:53 +0000 (+0900) Subject: Add Keyboard type and Language locale X-Git-Tag: dali_1.2.48~4 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git;a=commitdiff_plain;h=8387d40cf2c46e00afe0e295997b971b769fdea4 Add Keyboard type and Language locale - KeyboardTypeChangedSignal() and GetKeyboardType() - GetInputPanelLocale() - Added OVER_TIZEN_VERSION_4 conditional in dali-adaptor.spec Change-Id: Idd5159cb3c49d5a0e072ab7a2b873427e4ebf743 Signed-off-by: Seoyeon Kim --- diff --git a/adaptors/devel-api/adaptor-framework/imf-manager.cpp b/adaptors/devel-api/adaptor-framework/imf-manager.cpp index f5736d5..b1498d2 100644 --- a/adaptors/devel-api/adaptor-framework/imf-manager.cpp +++ b/adaptors/devel-api/adaptor-framework/imf-manager.cpp @@ -143,6 +143,16 @@ void ImfManager::HideInputPanel() Internal::Adaptor::ImfManager::GetImplementation(*this).HideInputPanel(); } +Dali::ImfManager::KeyboardType ImfManager::GetKeyboardType() +{ + return Internal::Adaptor::ImfManager::GetImplementation(*this).GetKeyboardType(); +} + +std::string ImfManager::GetInputPanelLocale() +{ + return Internal::Adaptor::ImfManager::GetImplementation(*this).GetInputPanelLocale(); +} + ImfManager::ImfManagerSignalType& ImfManager::ActivatedSignal() { return Internal::Adaptor::ImfManager::GetImplementation(*this).ActivatedSignal(); @@ -168,6 +178,11 @@ ImfManager::VoidSignalType& ImfManager::LanguageChangedSignal() return Internal::Adaptor::ImfManager::GetImplementation(*this).LanguageChangedSignal(); } +ImfManager::KeyboardTypeSignalType& ImfManager::KeyboardTypeChangedSignal() +{ + return Internal::Adaptor::ImfManager::GetImplementation(*this).KeyboardTypeChangedSignal(); +} + ImfManager::ImfManager(Internal::Adaptor::ImfManager *impl) : BaseHandle(impl) { diff --git a/adaptors/devel-api/adaptor-framework/imf-manager.h b/adaptors/devel-api/adaptor-framework/imf-manager.h index 18c2557..c8f20b7 100644 --- a/adaptors/devel-api/adaptor-framework/imf-manager.h +++ b/adaptors/devel-api/adaptor-framework/imf-manager.h @@ -77,6 +77,15 @@ public: }; /** + * @brief Enumeration for the type of Keyboard. + */ + enum KeyboardType + { + SOFTWARE_KEYBOARD, ///< Software keyboard (Virtual keyboard) is default + HARDWARE_KEYBOARD ///< Hardware keyboard + }; + + /** * @brief This structure is used to pass on data from the IMF regarding predictive text. */ struct ImfEventData @@ -156,6 +165,7 @@ public: typedef Signal< ImfCallbackData ( ImfManager&, const ImfEventData& ) > ImfEventSignalType; ///< keyboard events typedef Signal< void () > VoidSignalType; typedef Signal< void (bool) > StatusSignalType; + typedef Signal< void (KeyboardType) > KeyboardTypeSignalType; ///< keyboard type public: @@ -307,6 +317,22 @@ public: */ void HideInputPanel(); + /** + * @brief Gets the keyboard type. + * + * The default keyboard type is SOFTWARE_KEYBOARD. + * @return The keyboard type + */ + KeyboardType GetKeyboardType(); + + /** + * @brief Gets the current language locale of the input panel. + * + * ex) en_US, en_GB, en_PH, fr_FR, ... + * @return The current language locale of the input panel + */ + std::string GetInputPanelLocale(); + public: // Signals @@ -362,6 +388,18 @@ public: */ VoidSignalType& LanguageChangedSignal(); + /** + * @brief Connect to this signal to be notified when the keyboard type is changed. + * + * A callback of the following type may be connected: + * @code + * void YourCallbackName( KeyboardType keyboard ); + * @endcode + * + * @return The signal to connect to. + */ + KeyboardTypeSignalType& KeyboardTypeChangedSignal(); + // Construction & Destruction /** diff --git a/adaptors/ecore/wayland/imf-manager-impl-ecore-wl.cpp b/adaptors/ecore/wayland/imf-manager-impl-ecore-wl.cpp index 723c90e..5764c3a 100644 --- a/adaptors/ecore/wayland/imf-manager-impl-ecore-wl.cpp +++ b/adaptors/ecore/wayland/imf-manager-impl-ecore-wl.cpp @@ -199,6 +199,31 @@ void InputPanelGeometryChangedCallback ( void *data, Ecore_IMF_Context *context, imfManager->ResizedSignal().Emit(); } +void InputPanelKeyboardTypeChangedCallback( void *data, Ecore_IMF_Context *context, int value ) +{ + if( !data ) + { + return; + } + + ImfManager* imfManager = reinterpret_cast< ImfManager* > ( data ); + switch (value) + { + case ECORE_IMF_INPUT_PANEL_SW_KEYBOARD_MODE: + { + // Emit Signal that the keyboard type is changed to Software Keyboard + imfManager->KeyboardTypeChangedSignal().Emit( Dali::ImfManager::KeyboardType::SOFTWARE_KEYBOARD ); + break; + } + case ECORE_IMF_INPUT_PANEL_HW_KEYBOARD_MODE: + { + // Emit Signal that the keyboard type is changed to Hardware Keyboard + imfManager->KeyboardTypeChangedSignal().Emit( Dali::ImfManager::KeyboardType::HARDWARE_KEYBOARD ); + break; + } + } +} + /** * Called when an IMF delete surrounding event is received. * Here we tell the application that it should delete a certain range. @@ -365,6 +390,7 @@ void ImfManager::ConnectCallbacks() ecore_imf_context_input_panel_event_callback_add( mIMFContext, ECORE_IMF_INPUT_PANEL_STATE_EVENT, InputPanelStateChangeCallback, this ); ecore_imf_context_input_panel_event_callback_add( mIMFContext, ECORE_IMF_INPUT_PANEL_LANGUAGE_EVENT, InputPanelLanguageChangeCallback, this ); ecore_imf_context_input_panel_event_callback_add( mIMFContext, ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, InputPanelGeometryChangedCallback, this ); + ecore_imf_context_input_panel_event_callback_add( mIMFContext, ECORE_IMF_INPUT_PANEL_KEYBOARD_MODE_EVENT, InputPanelKeyboardTypeChangedCallback, this ); ecore_imf_context_retrieve_surrounding_callback_set( mIMFContext, ImfRetrieveSurrounding, this); } @@ -384,6 +410,7 @@ void ImfManager::DisconnectCallbacks() ecore_imf_context_input_panel_event_callback_del( mIMFContext, ECORE_IMF_INPUT_PANEL_STATE_EVENT, InputPanelStateChangeCallback ); ecore_imf_context_input_panel_event_callback_del( mIMFContext, ECORE_IMF_INPUT_PANEL_LANGUAGE_EVENT, InputPanelLanguageChangeCallback ); ecore_imf_context_input_panel_event_callback_del( mIMFContext, ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, InputPanelGeometryChangedCallback ); + ecore_imf_context_input_panel_event_callback_del( mIMFContext, ECORE_IMF_INPUT_PANEL_KEYBOARD_MODE_EVENT, InputPanelKeyboardTypeChangedCallback ); // We do not need to unset the retrieve surrounding callback. } @@ -829,6 +856,57 @@ void ImfManager::HideInputPanel() } } +Dali::ImfManager::KeyboardType ImfManager::GetKeyboardType() +{ + DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetKeyboardType\n" ); + +#ifdef OVER_TIZEN_VERSION_4 + if( mIMFContext ) + { + int value; + value = ecore_imf_context_keyboard_mode_get( mIMFContext ); + + switch (value) + { + case ECORE_IMF_INPUT_PANEL_SW_KEYBOARD_MODE: + { + return Dali::ImfManager::SOFTWARE_KEYBOARD; + break; + } + case ECORE_IMF_INPUT_PANEL_HW_KEYBOARD_MODE: + { + return Dali::ImfManager::HARDWARE_KEYBOARD; + break; + } + } + } +#endif // OVER_TIZEN_VERSION_4 + return Dali::ImfManager::KeyboardType::SOFTWARE_KEYBOARD; +} + +std::string ImfManager::GetInputPanelLocale() +{ + DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetInputPanelLocale\n" ); + + std::string locale = ""; + + if( mIMFContext ) + { + char* value = NULL; + ecore_imf_context_input_panel_language_locale_get( mIMFContext, &value ); + + if( value ) + { + std::string valueCopy( value ); + locale = valueCopy; + + // The locale string retrieved must be freed with free(). + free( value ); + } + } + return locale; +} + } // Adaptor } // Internal diff --git a/adaptors/ecore/wayland/imf-manager-impl.h b/adaptors/ecore/wayland/imf-manager-impl.h index 73e92c1..59f1b7a 100644 --- a/adaptors/ecore/wayland/imf-manager-impl.h +++ b/adaptors/ecore/wayland/imf-manager-impl.h @@ -48,6 +48,7 @@ public: typedef Dali::ImfManager::ImfEventSignalType ImfEventSignalType; typedef Dali::ImfManager::StatusSignalType ImfStatusSignalType; typedef Dali::ImfManager::VoidSignalType ImfVoidSignalType; + typedef Dali::ImfManager::KeyboardTypeSignalType ImfKeyboardTypeSignalType; public: @@ -213,6 +214,16 @@ public: */ void HideInputPanel(); + /** + * @copydoc Dali::ImfManager::GetKeyboardType() + */ + Dali::ImfManager::KeyboardType GetKeyboardType(); + + /** + * @copydoc Dali::ImfManager::GetInputPanelLocale() + */ + std::string GetInputPanelLocale(); + public: // Signals /** @@ -240,6 +251,10 @@ public: // Signals */ ImfVoidSignalType& LanguageChangedSignal() { return mKeyboardLanguageChangedSignal; } + /** + * @copydoc Dali::ImfManager::KeyboardTypeChangedSignal() + */ + ImfKeyboardTypeSignalType& KeyboardTypeChangedSignal() { return mKeyboardTypeChangedSignal; } protected: @@ -277,11 +292,12 @@ private: std::vector mKeyEvents; ///< Stores key events to be sent from idle call-back. InputMethodOptions mOptions; - ImfManagerSignalType mActivatedSignal; - ImfEventSignalType mEventSignal; - ImfStatusSignalType mKeyboardStatusSignal; - ImfVoidSignalType mKeyboardResizeSignal; - ImfVoidSignalType mKeyboardLanguageChangedSignal; + ImfManagerSignalType mActivatedSignal; + ImfEventSignalType mEventSignal; + ImfStatusSignalType mKeyboardStatusSignal; + ImfVoidSignalType mKeyboardResizeSignal; + ImfVoidSignalType mKeyboardLanguageChangedSignal; + ImfKeyboardTypeSignalType mKeyboardTypeChangedSignal; public: diff --git a/adaptors/integration-api/x11/imf-manager-impl.h b/adaptors/integration-api/x11/imf-manager-impl.h index 4972f26..d7d0716 100644 --- a/adaptors/integration-api/x11/imf-manager-impl.h +++ b/adaptors/integration-api/x11/imf-manager-impl.h @@ -45,6 +45,7 @@ public: typedef Dali::ImfManager::ImfEventSignalType ImfEventSignalType; typedef Dali::ImfManager::StatusSignalType ImfStatusSignalType; typedef Dali::ImfManager::VoidSignalType ImfVoidSignalType; + typedef Dali::ImfManager::KeyboardTypeSignalType ImfKeyboardTypeSignalType; public: @@ -211,6 +212,16 @@ public: */ void HideInputPanel(); + /** + * @copydoc Dali::ImfManager::GetKeyboardType() + */ + Dali::ImfManager::KeyboardType GetKeyboardType(); + + /** + * @copydoc Dali::ImfManager::GetInputPanelLocale() + */ + std::string GetInputPanelLocale(); + public: // Signals /** @@ -238,6 +249,10 @@ public: // Signals */ ImfVoidSignalType& LanguageChangedSignal() { return mKeyboardLanguageChangedSignal; } + /** + * @copydoc Dali::ImfManager::KeyboardTypeChangedSignal() + */ + ImfKeyboardTypeSignalType& KeyboardTypeChangedSignal() { return mKeyboardTypeChangedSignal; } protected: /** @@ -271,11 +286,12 @@ private: bool mIdleCallbackConnected:1; ///< Whether the idle callback is already connected. InputMethodOptions mOptions; - ImfManagerSignalType mActivatedSignal; - ImfEventSignalType mEventSignal; - ImfStatusSignalType mKeyboardStatusSignal; - ImfVoidSignalType mKeyboardResizeSignal; - ImfVoidSignalType mKeyboardLanguageChangedSignal; + ImfManagerSignalType mActivatedSignal; + ImfEventSignalType mEventSignal; + ImfStatusSignalType mKeyboardStatusSignal; + ImfVoidSignalType mKeyboardResizeSignal; + ImfVoidSignalType mKeyboardLanguageChangedSignal; + ImfKeyboardTypeSignalType mKeyboardTypeChangedSignal; public: diff --git a/adaptors/wayland/input/text/imf/imf-manager-impl-wl.cpp b/adaptors/wayland/input/text/imf/imf-manager-impl-wl.cpp index 3d49a51..ab45e74 100644 --- a/adaptors/wayland/input/text/imf/imf-manager-impl-wl.cpp +++ b/adaptors/wayland/input/text/imf/imf-manager-impl-wl.cpp @@ -346,6 +346,16 @@ void ImfManager::HideInputPanel() { } +Dali::ImfManager::KeyboardType ImfManager::GetKeyboardType() +{ + return Dali::ImfManager::KeyboardType::SOFTWARE_KEYBOARD; +} + +std::string ImfManager::GetInputPanelLocale() +{ + return NULL; +} + Dali::ImfManager::TextDirection ImfManager::GetTextDirection() { TextInputManager::SeatInfo& info = mTextInputManager.GetLastActiveSeat(); diff --git a/adaptors/wayland/input/text/imf/imf-manager-impl.h b/adaptors/wayland/input/text/imf/imf-manager-impl.h index 0cc918c..f93cfe5 100644 --- a/adaptors/wayland/input/text/imf/imf-manager-impl.h +++ b/adaptors/wayland/input/text/imf/imf-manager-impl.h @@ -57,6 +57,7 @@ public: typedef Dali::ImfManager::ImfEventSignalType ImfEventSignalType; typedef Dali::ImfManager::StatusSignalType ImfStatusSignalType; typedef Dali::ImfManager::VoidSignalType ImfVoidSignalType; + typedef Dali::ImfManager::KeyboardTypeSignalType ImfKeyboardTypeSignalType; public: @@ -205,6 +206,16 @@ public: */ void HideInputPanel(); + /** + * @copydoc Dali::ImfManager::GetKeyboardType() + */ + Dali::ImfManager::KeyboardType GetKeyboardType(); + + /** + * @copydoc Dali::ImfManager::GetInputPanelLocale() + */ + std::string GetInputPanelLocale(); + public: // Signals /** @@ -232,6 +243,10 @@ public: // Signals */ ImfVoidSignalType& LanguageChangedSignal() { return mKeyboardLanguageChangedSignal; } + /** + * @copydoc Dali::ImfManager::KeyboardTypeChangedSignal() + */ + ImfKeyboardTypeSignalType& KeyboardTypeChangedSignal() { return mKeyboardTypeChangedSignal; } /** * @brief Called when an IMF Pre-Edit change event is received. @@ -274,11 +289,12 @@ protected: private: - ImfManagerSignalType mActivatedSignal; - ImfEventSignalType mEventSignal; - ImfStatusSignalType mKeyboardStatusSignal; - ImfVoidSignalType mKeyboardResizeSignal; - ImfVoidSignalType mKeyboardLanguageChangedSignal; + ImfManagerSignalType mActivatedSignal; + ImfEventSignalType mEventSignal; + ImfStatusSignalType mKeyboardStatusSignal; + ImfVoidSignalType mKeyboardResizeSignal; + ImfVoidSignalType mKeyboardLanguageChangedSignal; + ImfKeyboardTypeSignalType mKeyboardTypeChangedSignal; // Undefined ImfManager( const ImfManager& ); diff --git a/adaptors/x11/imf-manager-impl-x.cpp b/adaptors/x11/imf-manager-impl-x.cpp index 1e598c2..e0fa762 100644 --- a/adaptors/x11/imf-manager-impl-x.cpp +++ b/adaptors/x11/imf-manager-impl-x.cpp @@ -690,6 +690,34 @@ void ImfManager::HideInputPanel() } } +Dali::ImfManager::KeyboardType ImfManager::GetKeyboardType() +{ + return Dali::ImfManager::KeyboardType::SOFTWARE_KEYBOARD; +} + +std::string ImfManager::GetInputPanelLocale() +{ + DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetInputPanelLocale\n" ); + + std::string locale = ""; + + if( mIMFContext ) + { + char* value = NULL; + ecore_imf_context_input_panel_language_locale_get( mIMFContext, &value ); + + if( value ) + { + std::string valueCopy( value ); + locale = valueCopy; + + // The locale string retrieved must be freed with free(). + free( value ); + } + } + return locale; +} + } // Adaptor } // Internal diff --git a/packaging/dali-adaptor.spec b/packaging/dali-adaptor.spec index 06e768c..bf8332c 100644 --- a/packaging/dali-adaptor.spec +++ b/packaging/dali-adaptor.spec @@ -308,6 +308,11 @@ CXXFLAGS+=" -DWAYLAND" configure_flags="--enable-wayland" %endif +# Use this conditional when Tizen version is 4.x or greater +%if 0%{?tizen_version_major} >= 4 +CXXFLAGS+=" -DOVER_TIZEN_VERSION_4" +%endif + %if 0%{?tizen_2_2_compatibility} CFLAGS+=" -DTIZEN_SDK_2_2_COMPATIBILITY" CXXFLAGS+=" -DTIZEN_SDK_2_2_COMPATIBILITY"