Implement a routine to go back to previous page or quit Browser when BackSpace Key... 76/40776/1
authorsungwon2.han <sungwon2.han@samsung.com>
Tue, 9 Jun 2015 04:18:35 +0000 (13:18 +0900)
committersungwon2.han <sungwon2.han@samsung.com>
Tue, 9 Jun 2015 04:18:35 +0000 (13:18 +0900)
1. Go back to previous page when "Back" is enabled.
2. Quit Browser when "Back" is not enabled.

editorclient,ime,opened, editorclient,ime,closed events should be handled not to process BackSpace Key when focus is on Editor.

Change-Id: I8ee7ab24364aef0662fa4577a5f55497a0836fce
Signed-off-by: sungwon2.han <sungwon2.han@samsung.com>
12 files changed:
core/AbstractWebEngine/AbstractWebEngine.h
core/main.cpp
services/CMakeLists.txt
services/PlatformInputManager/PlatformInputManager.cpp
services/PlatformInputManager/PlatformInputManager.h
services/SimpleUI/CMakeLists.txt
services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h
services/WebKitEngineService/WebKitEngineService.cpp
services/WebKitEngineService/WebKitEngineService.h
services/WebKitEngineService/WebView.cpp
services/WebKitEngineService/WebView.h

index 4d7ad22..dce8e93 100644 (file)
@@ -252,6 +252,11 @@ public:
     virtual std::shared_ptr<tizen_browser::tools::BrowserImage> getFavicon() = 0;
 
     /**
+     * @brief back or exit when back key is pressed
+     */
+    virtual void backButtonClicked() const = 0;
+
+    /**
      * FavIcon of current page changed
      */
     boost::signals2::signal<void (std::shared_ptr<tizen_browser::tools::BrowserImage>)> favIconChanged;
index 009d812..f435d7e 100644 (file)
@@ -59,6 +59,7 @@ static bool app_create(void * /*app_data*/)
 
 static void app_terminate(void */*app_data*/)
 {
+    BROWSER_LOGD("%s\n", __func__);
     std::shared_ptr<tizen_browser::base_ui::AbstractMainWindow<Evas_Object>> mainUi =
     std::dynamic_pointer_cast
     <
index d4b8ddc..8952538 100644 (file)
@@ -6,6 +6,6 @@ add_subdirectory(SimpleUI)
 add_subdirectory(SimpleURI)
 add_subdirectory(StorageService)
 add_subdirectory(HistoryService)
-#add_subdirectory(PlatformInputManager)
+add_subdirectory(PlatformInputManager)
 add_subdirectory(SessionStorage)
 add_subdirectory(BookmarkService)
index 417488b..b4c6925 100644 (file)
@@ -17,8 +17,8 @@
 
 #include "PlatformInputManager.h"
 
-#include <X11/Xlib.h>
-#include <utilX.h>
+//#include <X11/Xlib.h>
+//#include <utilX.h>
 #include <Ecore.h>
 #include <Ecore_Evas.h>
 #include <Ecore_Input.h>
@@ -56,11 +56,11 @@ void PlatformInputManager::init(Evas_Object* mainWindow)
     m_xWindow = elm_win_xwindow_get(mainWindow);
 
     // This snippet is needed to show mouse pointer all the time, because by default it is hidden after few seconds
-    m_atomDevicemgrInputWindow = ecore_x_atom_get(E_PROP_DEVICEMGR_INPUTWIN);
-    m_atomAlwaysCursorOn = ecore_x_atom_get(E_PROP_NOT_CURSOR_HIDE);
-    if(!ecore_x_window_prop_window_get(ecore_x_window_root_first_get(), m_atomDevicemgrInputWindow, &m_devicemgr_win, 1))
-        BROWSER_LOGD("Failed to get device manager input window!");
-    ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, __handler_FOCUS_IN, this);
+    //m_atomDevicemgrInputWindow = ecore_x_atom_get(E_PROP_DEVICEMGR_INPUTWIN);
+    //m_atomAlwaysCursorOn = ecore_x_atom_get(E_PROP_NOT_CURSOR_HIDE);
+    //if(!ecore_x_window_prop_window_get(ecore_x_window_root_first_get(), m_atomDevicemgrInputWindow, &m_devicemgr_win, 1))
+    //    BROWSER_LOGD("Failed to get device manager input window!");
+    //ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, __handler_FOCUS_IN, this);
 }
 
 Eina_Bool PlatformInputManager::__filter(void *data, void */*loop_data*/, int type, void *event)
@@ -83,6 +83,7 @@ Eina_Bool PlatformInputManager::__filter(void *data, void */*loop_data*/, int ty
          * For that each arrow key is handled by us.
          * Pointer movement is realized in timer to achieve smooth animation of pointer's move.
          */
+/*
         if(self->m_pointerModeEnabled) {
             wasArrow = true;
             if (!keyName.compare("KEY_LEFT")) {
@@ -103,12 +104,13 @@ Eina_Bool PlatformInputManager::__filter(void *data, void */*loop_data*/, int ty
             }
             else
                 wasArrow = false;
-
+*/
             /**
             * If last pressed key was arrow we would like to convert Return key to mouse click
             * assuming that user was moving cursor and now want to "click" chosen element.
             * In other cases Return key is handled normally allowing for example to accecpt typed url.
             */
+/*
             if(!keyName.compare("KEY_ENTER")) {
                 if(self->m_lastPressedKey == ARROW) {
                     self->m_lastPressedKey = RETURN;
@@ -128,6 +130,7 @@ Eina_Bool PlatformInputManager::__filter(void *data, void */*loop_data*/, int ty
                 return EINA_FALSE;
             }
         }
+*/
 
         self->m_lastPressedKey= OTHER_KEY;
 
@@ -140,24 +143,24 @@ Eina_Bool PlatformInputManager::__filter(void *data, void */*loop_data*/, int ty
             return EINA_FALSE;
         }
 
-        if(!keyName.compare("KEY_CHANNELUP")){
+//        if(!keyName.compare("KEY_CHANNELUP")){
             /**
              * Converting ChannelUp Button on remote control and Page Up key on keyboard to mouse's wheel up move.
              * This is used to achieve same effect of scrolling web page using mouse, remote control and keyboard.
              */
-            self->mouseButtonManipulate(Button4, ButtonPress); // Simulate mouse wheel up movement
-            self->mouseButtonManipulate(Button4, ButtonRelease);
-            return EINA_FALSE;
-        }
+//            self->mouseButtonManipulate(Button4, ButtonPress); // Simulate mouse wheel up movement
+//            self->mouseButtonManipulate(Button4, ButtonRelease);
+//            return EINA_FALSE;
+//        }
 
-        if(!keyName.compare("KEY_CHANNELDOWN")){
+//        if(!keyName.compare("KEY_CHANNELDOWN")){
             /**
              * Same as above ChannelDown and Page Down are replaced by mouse's wheel down movement.
              */
-            self->mouseButtonManipulate(Button5, ButtonPress); // Simulate mouse wheel down movement
-            self->mouseButtonManipulate(Button5, ButtonRelease);
-            return EINA_FALSE;
-        }
+//            self->mouseButtonManipulate(Button5, ButtonPress); // Simulate mouse wheel down movement
+//            self->mouseButtonManipulate(Button5, ButtonRelease);
+//            return EINA_FALSE;
+//        }
 
         if(!keyName.compare("KEY_RETURN"))
             self->returnPressed();
@@ -167,6 +170,8 @@ Eina_Bool PlatformInputManager::__filter(void *data, void */*loop_data*/, int ty
             self->rightPressed();
         else if(!keyName.compare("KEY_ENTER"))
             self->enterPressed();
+        else if(!keyName.compare("BackSpace"))
+            self->backPressed();
     } else if(type == ECORE_EVENT_KEY_UP) {
         M_ASSERT(event);
         Ecore_Event_Key *ev = static_cast<Ecore_Event_Key *>(event);
@@ -180,27 +185,27 @@ Eina_Bool PlatformInputManager::__filter(void *data, void */*loop_data*/, int ty
         /**
          * When arrow key is released thread realizing pointer movement is stopped.
          */
-        if(self->m_pointerModeEnabled && (!keyName.compare("KEY_LEFT")||!keyName.compare("KEY_UP")
-        || !keyName.compare("KEY_RIGHT")||!keyName.compare("KEY_DOWN"))) {
-            if(self->m_mouseMoveTimer) {
-                self->m_currentMouseMovementParams.moveMousePointer = false;
-                ecore_timer_del(self->m_mouseMoveTimer);
-                self->m_mouseMoveTimer = NULL;
-            }
-            return EINA_FALSE;
-        }
+//        if(self->m_pointerModeEnabled && (!keyName.compare("KEY_LEFT")||!keyName.compare("KEY_UP")
+//        || !keyName.compare("KEY_RIGHT")||!keyName.compare("KEY_DOWN"))) {
+//            if(self->m_mouseMoveTimer) {
+//                self->m_currentMouseMovementParams.moveMousePointer = false;
+//                ecore_timer_del(self->m_mouseMoveTimer);
+//                self->m_mouseMoveTimer = NULL;
+//            }
+//            return EINA_FALSE;
+//        }
         /**
          * If Return key is being released we send event that mouse button was released (in pointer mode).
          */
-        if(self->m_lastPressedKey == RETURN && self->m_pointerModeEnabled && !keyName.compare("KEY_ENTER")) {
-            self->m_lastPressedKey = OTHER_KEY;
-            self->mouseButtonManipulate(Button1, ButtonRelease);
-            return EINA_FALSE;
-        }
+//        if(self->m_lastPressedKey == RETURN && self->m_pointerModeEnabled && !keyName.compare("KEY_ENTER")) {
+//            self->m_lastPressedKey = OTHER_KEY;
+//            self->mouseButtonManipulate(Button1, ButtonRelease);
+//            return EINA_FALSE;
+//        }
     }
     return EINA_TRUE;
 }
-
+/*
 Eina_Bool PlatformInputManager::mouseMove(void *data)
 {
     int x, y;
@@ -222,14 +227,14 @@ Eina_Bool PlatformInputManager::mouseMove(void *data)
     }
     return EINA_FALSE;
 }
-
-Eina_Bool PlatformInputManager::__handler_FOCUS_IN(void *data, int /*type*/, void */*event*/)
-{
-    PlatformInputManager * self = reinterpret_cast<PlatformInputManager *>(data);
-    ecore_x_window_prop_window_set(self->m_devicemgr_win, self->m_atomAlwaysCursorOn, &(self->m_xWindow), 1);
-    return EINA_TRUE;
-}
-
+*/
+//Eina_Bool PlatformInputManager::__handler_FOCUS_IN(void *data, int /*type*/, void */*event*/)
+//{
+//    PlatformInputManager * self = reinterpret_cast<PlatformInputManager *>(data);
+//    ecore_x_window_prop_window_set(self->m_devicemgr_win, self->m_atomAlwaysCursorOn, &(self->m_xWindow), 1);
+//    return EINA_TRUE;
+//}
+/*
 void PlatformInputManager::mouseButtonManipulate(int button, int event_type)
 {
     XEvent event;
@@ -260,7 +265,7 @@ void PlatformInputManager::mouseButtonManipulate(int button, int event_type)
 
     XFlush(display);
 }
-
+*/
 void PlatformInputManager::setPointerModeEnabled(bool enabled)
 {
     m_pointerModeEnabled = enabled;
index f35fcd2..63bbec2 100644 (file)
@@ -20,7 +20,7 @@
 #include <boost/signals2/signal.hpp>
 #include <boost/thread/thread.hpp>
 #include <Ecore.h>
-#include <Ecore_X.h>
+//#include <Ecore_X.h>
 #include <Eina.h>
 #include <Elementary.h>
 
@@ -54,6 +54,7 @@ public:
     boost::signals2::signal<void ()> enterPressed;
     boost::signals2::signal<void ()> leftPressed;
     boost::signals2::signal<void ()> rightPressed;
+    boost::signals2::signal<void ()> backPressed;
 
     /**
      * @brief Returns current service's name.
index 96fe02c..6539054 100644 (file)
@@ -46,7 +46,7 @@ include_directories(${CMAKE_SOURCE_DIR}/services/StorageService/Storage/include)
 include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService)
 include_directories(${CMAKE_SOURCE_DIR}/services/HistoryService)
 include_directories(${CMAKE_SOURCE_DIR}/services/BookmarksUI)
-#include_directories(${CMAKE_SOURCE_DIR}/services/PlatformInputManager)
+include_directories(${CMAKE_SOURCE_DIR}/services/PlatformInputManager)
 include_directories(${CMAKE_SOURCE_DIR}/services/SessionStorage)
 
 include(FindPkgConfig)
@@ -59,13 +59,13 @@ add_dependencies(${PROJECT_NAME} SimpleURI)
 add_dependencies(${PROJECT_NAME} StorageService)
 add_dependencies(${PROJECT_NAME} HistoryService)
 add_dependencies(${PROJECT_NAME} BookmarksUI)
-#add_dependencies(${PROJECT_NAME} PlatformInputManager)
+add_dependencies(${PROJECT_NAME} PlatformInputManager)
 add_dependencies(${PROJECT_NAME} SessionStorage)
 target_link_libraries(${PROJECT_NAME} SimpleURI)
 target_link_libraries(${PROJECT_NAME} StorageService)
 target_link_libraries(${PROJECT_NAME} HistoryService)
 target_link_libraries(${PROJECT_NAME} BookmarksUI)
-#target_link_libraries(${PROJECT_NAME} PlatformInputManager)
+target_link_libraries(${PROJECT_NAME} PlatformInputManager)
 target_link_libraries(${PROJECT_NAME} SessionStorage)
 target_link_libraries(${PROJECT_NAME} ${EFL_LDFLAGS})
 
index 4099f52..042a297 100644 (file)
@@ -77,6 +77,7 @@ SimpleUI::SimpleUI(/*Evas_Object *window*/)
 }
 
 SimpleUI::~SimpleUI() {
+    BROWSER_LOGD("%s", __func__);
     m_sessionService->getStorage()->deleteSession(m_currentSession);
     /// \todo Auto-generated destructor stub
     evas_object_del(m_window.get());
@@ -84,6 +85,7 @@ SimpleUI::~SimpleUI() {
 
 void SimpleUI::destroyUI()
 {
+    BROWSER_LOGD("%s", __func__);
     evas_object_del(m_window.get());
 }
 
@@ -192,7 +194,7 @@ int SimpleUI::exec(const std::string& _url)
                 (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyservice"));
             M_ASSERT(m_historyService);
 
-/*
+
             // Platforminputmanager
             BROWSER_LOGD("[%s:%d] service: platforminputmanager ", __PRETTY_FUNCTION__, __LINE__);
             m_platformInputManager =
@@ -202,7 +204,8 @@ int SimpleUI::exec(const std::string& _url)
             M_ASSERT(m_platformInputManager);
             m_platformInputManager->init(m_window.get());
             m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit));
-*/
+            m_platformInputManager->backPressed.connect(boost::bind(&SimpleUI::onBackPressed, this));
+
             createActions();
             // left buttons
             leftButtonBar = std::make_shared<ButtonBar>(m_mainLayout, "SimpleUI/LeftButtonBar.edj", "left_button_bar");
@@ -599,7 +602,7 @@ void SimpleUI::onBookmarkRemoved(const std::string& uri)
     webTitleBar->removeFavIcon();
     webTitleBar->show("Removed from favorites");
 }
-/*
+
 void SimpleUI::onReturnPressed(MenuButton *m)
 {
     BROWSER_LOGD("[%s]", __func__);
@@ -608,7 +611,13 @@ void SimpleUI::onReturnPressed(MenuButton *m)
     hidePopup.disconnect_all_slots();
     m->hidePopup();
 }
-*/
+
+void SimpleUI::onBackPressed()
+{
+    BROWSER_LOGD("[%s]", __func__);
+    m_webEngine->backButtonClicked();
+}
+
 void SimpleUI::backEnable(bool enable)
 {
     m_back->setEnabled(enable);
@@ -815,9 +824,9 @@ void SimpleUI::showZoomMenu()
     m_zoomList->setZoom(currentZoomType);
     BROWSER_LOGD("Current zoom factor from webkit %d%%", m_webEngine->getZoomFactor());
 
-//    m_platformInputManager->returnPressed.disconnect_all_slots();
-//    m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_zoomList.get()));
-//    hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_zoomList.get()));
+    m_platformInputManager->returnPressed.disconnect_all_slots();
+    m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_zoomList.get()));
+    hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_zoomList.get()));
     m_zoomList->showPopup();
 }
 
@@ -836,13 +845,13 @@ void SimpleUI::showTabMenu()
         m_tabList->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this, _1));
         m_tabList->tabDelete.connect(boost::bind(&SimpleUI::closeTab, this, _1));
 
-//        m_platformInputManager->rightPressed.connect(boost::bind(&TabList::rightPressed, m_tabList.get()));
-//        m_platformInputManager->leftPressed.connect(boost::bind(&TabList::leftPressed, m_tabList.get()));
-//        m_platformInputManager->enterPressed.connect(boost::bind(&TabList::enterPressed, m_tabList.get()));
+        m_platformInputManager->rightPressed.connect(boost::bind(&TabList::rightPressed, m_tabList.get()));
+        m_platformInputManager->leftPressed.connect(boost::bind(&TabList::leftPressed, m_tabList.get()));
+        m_platformInputManager->enterPressed.connect(boost::bind(&TabList::enterPressed, m_tabList.get()));
     }
-//    m_platformInputManager->returnPressed.disconnect_all_slots();
-//    m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_tabList.get()));
-//    hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_tabList.get()));
+    m_platformInputManager->returnPressed.disconnect_all_slots();
+    m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_tabList.get()));
+    hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_tabList.get()));
     m_tabList->addItems(m_webEngine->getTabContents());
     m_tabList->setCurrentTabId(m_webEngine->currentTabId());
     m_tabList->disableNewTabBtn(m_tabList->getItemcCount() >= m_tabLimit);
@@ -950,9 +959,9 @@ void SimpleUI::showSettingsMenu()
         m_settings->addAction( m_settingDeleteFavorite);
         //m_settingPointerMode->toggled.connect(boost::bind(&tizen_browser::base_ui::Settings::setPointerModeEnabled, m_settings.get(), _1));
     }
-//    m_platformInputManager->returnPressed.disconnect_all_slots();
-//    m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_settings.get()));
-//    hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_settings.get()));
+    m_platformInputManager->returnPressed.disconnect_all_slots();
+    m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_settings.get()));
+    hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_settings.get()));
     m_settingDeleteHistory->setEnabled(m_historyService->getHistoryItemsCount());
     m_settingDeleteFavorite->setEnabled(m_favoriteService->countBookmarksAndSubFolders());
     m_settings->showPopup();
@@ -967,13 +976,13 @@ void SimpleUI::showHistory()
         m_historyList->deleteHistoryItem.connect(boost::bind(&tizen_browser::services::HistoryService::clearURLHistory, m_historyService.get(),_1));
         m_historyList->deleteHistoryItem.connect(boost::bind(&SimpleUI::hideHistory, this));
 
-//        m_platformInputManager->rightPressed.connect(boost::bind(&HistoryList::rightPressed, m_historyList.get()));
-//        m_platformInputManager->leftPressed.connect(boost::bind(&HistoryList::leftPressed, m_historyList.get()));
-//        m_platformInputManager->enterPressed.connect(boost::bind(&HistoryList::enterPressed, m_historyList.get()));
+        m_platformInputManager->rightPressed.connect(boost::bind(&HistoryList::rightPressed, m_historyList.get()));
+        m_platformInputManager->leftPressed.connect(boost::bind(&HistoryList::leftPressed, m_historyList.get()));
+        m_platformInputManager->enterPressed.connect(boost::bind(&HistoryList::enterPressed, m_historyList.get()));
     }
-//    m_platformInputManager->returnPressed.disconnect_all_slots();
-//    m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_historyList.get()));
-//    hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_historyList.get()));
+    m_platformInputManager->returnPressed.disconnect_all_slots();
+    m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_historyList.get()));
+    hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_historyList.get()));
     m_historyList->addItems(m_historyService->getHistoryItems());
     m_historyList->showPopup();
 }
index 296730a..c33c4ee 100644 (file)
@@ -43,7 +43,7 @@
 #include "SimpleURI.h"
 #include "SimpleScroller.h"
 #include "WebTitleBar.h"
-//#include "PlatformInputManager.h"
+#include "PlatformInputManager.h"
 #include "SessionStorage.h"
 #include "SqlStorage.h"
 
@@ -235,6 +235,7 @@ private:
     void onNetErrorButtonPressed(PopupButtons, std::shared_ptr<PopupData>);
 
     void onReturnPressed(MenuButton *m);
+    void onBackPressed();
 
     boost::signals2::signal<void ()> hidePopup;
 
@@ -257,7 +258,7 @@ private:
     std::shared_ptr<tizen_browser::base_ui::ZoomList> m_zoomList;
     std::shared_ptr<tizen_browser::base_ui::TabList> m_tabList;
     std::shared_ptr<tizen_browser::base_ui::SearchBox> m_searchBox;
-    //std::shared_ptr<tizen_browser::services::PlatformInputManager> m_platformInputManager;
+    std::shared_ptr<tizen_browser::services::PlatformInputManager> m_platformInputManager;
     std::shared_ptr<tizen_browser::services::SessionStorage> m_sessionService;
     tizen_browser::Session::Session m_currentSession;
     std::shared_ptr<Settings> m_settings;
index f07a1ea..5261a81 100644 (file)
@@ -28,6 +28,7 @@
 #include <Evas.h>
 #include <memory>
 #include <BrowserImage.h>
+#include <app.h>
 
 #include "BrowserAssert.h"
 #include "BrowserLogger.h"
@@ -477,6 +478,16 @@ void WebKitEngineService::searchOnWebsite(const std::string & searchString, int
     m_currentWebView->searchOnWebsite(searchString, flags);
 }
 
+void WebKitEngineService::backButtonClicked() const
+{
+    if(isBackEnabled()) {
+        M_ASSERT(m_currentWebView);
+        m_currentWebView->back();
+    } else {
+        app_efl_exit();
+    }
+}
+
 } /* end of webkitengine_service */
 } /* end of basic_webengine */
 } /* end of tizen_browser */
index df8160e..6931a9c 100644 (file)
@@ -154,6 +154,11 @@ public:
      */
     std::shared_ptr<tizen_browser::tools::BrowserImage> getFavicon();
 
+    /**
+     * @brief back or exit when back key is pressed
+     */
+    void backButtonClicked() const;
+
 private:
     // callbacks from WebView
     void _favIconChanged(std::shared_ptr<tizen_browser::tools::BrowserImage> bi);
index 6cc11a6..f3deff2 100644 (file)
@@ -157,6 +157,9 @@ void WebView::registerCallbacks()
 
     evas_object_event_callback_add(m_ewkView, EVAS_CALLBACK_MOUSE_DOWN, __setFocusToEwkView, this);
     evas_object_smart_callback_add(m_ewkView, "favicon,changed", onFaviconChaged, this);
+
+    evas_object_smart_callback_add(m_ewkView, "editorclient,ime,closed", __IMEClosed, this);
+    evas_object_smart_callback_add(m_ewkView, "editorclient,ime,opened", __IMEOpened, this);
 #endif
 }
 
@@ -182,6 +185,9 @@ void WebView::unregisterCallbacks()
 
     evas_object_event_callback_del(m_ewkView, EVAS_CALLBACK_MOUSE_DOWN, __setFocusToEwkView);
     evas_object_smart_callback_del_full(m_ewkView, "favicon,changed", onFaviconChaged, this);
+
+    evas_object_smart_callback_del_full(m_ewkView, "editorclient,ime,closed", __IMEClosed, this);
+    evas_object_smart_callback_del_full(m_ewkView, "editorclient,ime,opened", __IMEOpened, this);
 #endif
 }
 
@@ -746,6 +752,16 @@ void WebView::onFaviconChaged(void* data, Evas_Object*, void*)
     }
 }
 
+void WebView::__IMEClosed(void* data, Evas_Object*, void*)
+{
+    BROWSER_LOGD("%s", __func__);
+}
+
+void WebView::__IMEOpened(void* data, Evas_Object*, void*)
+{
+    BROWSER_LOGD("%s", __func__);
+}
+
 std::string WebView::securityOriginToUri(const Ewk_Security_Origin *origin)
 {
     std::string protocol = tizen_browser::tools::fromChar(ewk_security_origin_protocol_get(origin));
index 8fad26d..69609cd 100644 (file)
@@ -176,6 +176,9 @@ private:
     //from webkit ewk_view
     static void onFaviconChaged(void * data, Evas_Object *obj, void *event_info);
 
+    static void __IMEClosed(void * data, Evas_Object *obj, void *event_info);
+    static void __IMEOpened(void * data, Evas_Object *obj, void *event_info);
+
     // confirmation requests
     static void __geolocationPermissionRequest(void * data, Evas_Object * obj, void * event_info);
     static void __usermediaPermissionRequest(void * data, Evas_Object * obj, void * event_info);