X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcontrols%2FFWebCtrl_WebImpl.cpp;h=c106aa0ab0c7c6738fd817adf87cd818b36ee346;hb=c2444a39bd6088a1bddd22813423ad500fc61541;hp=ed217054144dca8f375b75fe9e67431cc9b5af7c;hpb=394bdd28fb10a3415151bb115e13a6db47f217ca;p=framework%2Fosp%2Fweb.git diff --git a/src/controls/FWebCtrl_WebImpl.cpp b/src/controls/FWebCtrl_WebImpl.cpp index ed21705..c106aa0 100755 --- a/src/controls/FWebCtrl_WebImpl.cpp +++ b/src/controls/FWebCtrl_WebImpl.cpp @@ -73,6 +73,7 @@ #include #include #include +#include #include #include #include @@ -150,23 +151,6 @@ static const int DEFAULT_LIST_ITEM_COUNT = 4; Eina_Bool -AddHttpHeaderData(const Eina_Hash* pHash, const void* pKey, void* pValue, void* pUserData) -{ - result r = E_SUCCESS; - - String key(reinterpret_cast< const char* >(pKey)); - String value(reinterpret_cast< char* >(pValue)); - - SysLog(NID_WEB_CTRL, "The current value of key is %ls, value is %ls", key.GetPointer(), value.GetPointer()); - - r = reinterpret_cast< HttpHeader* >(pUserData)->AddField(key, value); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); - - return EINA_TRUE; -} - - -Eina_Bool AddHttpAttributeData(const Eina_Hash* pHash, const void* pKey, void* pValue, void* pUserData) { result r = E_SUCCESS; @@ -175,7 +159,7 @@ AddHttpAttributeData(const Eina_Hash* pHash, const void* pKey, void* pValue, voi std::unique_ptr pAttrValue(new (std::nothrow) String(reinterpret_cast< char* >(pValue))); SysTryReturn(NID_WEB_CTRL, pAttrKey.get() && pAttrValue.get(), EINA_FALSE, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); - SysLog(NID_WEB_CTRL, "The current value of key is %ls, value is %ls", pAttrKey->GetPointer(), pAttrValue->GetPointer()); + SysSecureLog(NID_WEB_CTRL, "The current value of key is %ls, value is %ls", pAttrKey->GetPointer(), pAttrValue->GetPointer()); r = reinterpret_cast< HashMap* >(pUserData)->Add(*pAttrKey, *pAttrValue); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); @@ -391,7 +375,7 @@ OnScriptPromptRequested(Evas_Object* pView, const char* pMessage, const char* pD CATCH: ewk_view_javascript_prompt_reply(pView, null); - return EINA_FALSE; + return EINA_TRUE; } @@ -988,15 +972,8 @@ OnLoadingRequested(void* pUserData, Evas_Object* pView, void* pEventInfo) String uriScheme(uri.GetScheme()); SysSecureLog(NID_WEB_CTRL, "The current value of scheme is %ls", uriScheme.GetPointer()); - if ((uriScheme != L"http") && (uriScheme != L"https") && (uriScheme != L"file")) + if ((uriScheme != L"http") && (uriScheme != L"https") && (uriScheme != L"file") && (uriScheme != L"")) { - ewk_policy_decision_ignore(pPolicy); - - if (uriScheme == L"") - { - return; - } - result r = E_SUCCESS; if (uriScheme == L"tel") @@ -1014,9 +991,13 @@ OnLoadingRequested(void* pUserData, Evas_Object* pView, void* pEventInfo) String operationId(L"http://tizen.org/appcontrol/operation/view"); r = _AppControlImpl::FindAndStart(operationId, &url, null, null, null, null); } - SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r)); - return; + if (r == E_SUCCESS) + { + ewk_policy_decision_ignore(pPolicy); + + return; + } } ewk_policy_decision_use(pPolicy); @@ -1124,11 +1105,26 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo) ILoadingListener* pLoadingListener = pImpl->GetLoadingListener(); if (pLoadingListener) { - const Eina_Hash* pHeader = ewk_policy_decision_response_headers_get(pPolicy); HttpHeader httpHeader; - eina_hash_foreach(pHeader, AddHttpHeaderData, &httpHeader); - SysTryCatch(NID_WEB_CTRL, GetLastResult() == E_SUCCESS, , GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); + Eina_Iterator* iterator = eina_hash_iterator_tuple_new(ewk_policy_decision_response_headers_get(pPolicy)); + if (iterator) + { + Eina_Hash_Tuple *tuple = null; + + EINA_ITERATOR_FOREACH(iterator, tuple) + { + String key(reinterpret_cast< const char* >(tuple->key)); + String value(reinterpret_cast< char* >(tuple->data)); + + SysSecureLog(NID_WEB_CTRL, "The current value of key is %ls, value is %ls", key.GetPointer(), value.GetPointer()); + + r = httpHeader.AddField(key, value); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + } + + eina_iterator_free(iterator); + } pImpl->SetPolicyDecision(pLoadingListener->OnWebDataReceived(mime, httpHeader)); } @@ -1146,9 +1142,10 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo) String redirectUrl(pImpl->GetRedirectUri(url, currentUrl, mime)); if (redirectUrl != L"") { - pImpl->LoadUrl(redirectUrl); ewk_policy_decision_ignore(pPolicy); + pImpl->LoadUrl(redirectUrl); + return; } @@ -1164,6 +1161,13 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo) r = _AppControlImpl::FindAndStart(operationId, &url, &mime, null, null, null); SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS || r == E_OBJ_NOT_FOUND, r, "[%s] Propagating.", GetErrorMessage(r)); + if (r == E_OBJ_NOT_FOUND) + { + String operationId(L"http://tizen.org/appcontrol/operation/download"); + + r = _AppControlImpl::FindAndStart(operationId, &url, null, null, null, null); + SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r)); + } return; } @@ -1305,7 +1309,13 @@ OnLoadingCompleted(void* pUserData, Evas_Object* pView, void* pEventInfo) SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r)); pEventArg.release(); } +} + +void +OnLoadingCommitted(void* pUserData, Evas_Object* pView, void* pEventInfo) +{ + evas_object_focus_set(pView, EINA_FALSE); } @@ -1549,7 +1559,6 @@ FireWebPageBlockSelectedEventF(_WebImpl* pImpl) SysTryReturnResult(NID_WEB_CTRL, startPoint.get() && endPoint.get(), E_OUT_OF_MEMORY, "Memory Allocation failed."); pImpl->GetBlockRange(*startPoint.get(), *endPoint.get()); - if ((endPoint->x != 0.0f) && (endPoint->y != 0.0f)) { std::unique_ptr<_WebUiEventArg> pEventArg(new (std::nothrow) _WebUiEventArg(WEB_EVENT_WEBUIEVENTLISTENER_PAGE_BLOCK_SELECTED_FLOAT)); @@ -1625,11 +1634,6 @@ OnWebKeypadStateChanged(void* pUserData, Evas_Object* pView, void* pEventInfo) Eina_Rectangle* pEinaRect = reinterpret_cast< Eina_Rectangle* >(pEventInfo); SysAssertf(pImpl && pEinaRect, "Failed to request"); - if (pImpl->IsVisible() == false) - { - evas_object_focus_set(pView, EINA_FALSE); - } - if (pImpl->GetSetting().GetInputStyle() == INPUT_STYLE_OVERLAY) { _ICoordinateSystemTransformer* pXformer = _CoordinateSystem::GetInstance()->GetInverseTransformer(); @@ -1646,12 +1650,6 @@ OnWebKeypadStateChanged(void* pUserData, Evas_Object* pView, void* pEventInfo) if (pFormImpl) { pFormImpl->DeflateClientRectHeight(pXformer->TransformVertical(rect.height)); - - if (pFormImpl->HasFooter()) - { - pFormImpl->GetCore().SetKeypadShowState(true); - pFormImpl->Draw(); - } } if (pImpl->GetWebKeypadEventListener()) @@ -1668,7 +1666,7 @@ OnWebKeypadStateChanged(void* pUserData, Evas_Object* pView, void* pEventInfo) pImpl->GetWebKeypadEventListener()->OnWebKeypadWillOpen(*dynamic_cast< Web* >(&pImpl->GetPublic())); } } - pImpl->SetKeypadVisibleState(true); + pImpl->SetPreviousKeypadBounds(rect); } else @@ -1685,6 +1683,23 @@ OnWebKeypadOpened(void* pUserData, Evas_Object* pView, void* pEventInfo) _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); SysAssertf(pImpl, "Failed to request"); + pImpl->SetKeypadVisibleState(true); + + _FormImpl* pFormImpl = pImpl->GetParentFormImpl(dynamic_cast< _ControlImpl* >(pImpl)); + if (pFormImpl) + { + _ICoordinateSystemTransformer* pXformer = _CoordinateSystem::GetInstance()->GetInverseTransformer(); + SysAssertf(pXformer, "Failed to get CoordinateTransformer"); + + pFormImpl->DeflateClientRectHeight(pXformer->TransformVertical(pImpl->GetPreviousKeypadBounds().height)); + + if (pFormImpl->HasFooter()) + { + pFormImpl->GetCore().SetKeypadShowState(true); + pFormImpl->Draw(); + } + } + if (pImpl->GetWebKeypadEventListener()) { pImpl->GetWebKeypadEventListener()->OnWebKeypadOpened(*static_cast< Web* >(&pImpl->GetPublic())); @@ -1720,20 +1735,45 @@ OnWebKeypadClosed(void* pUserData, Evas_Object* pView, void* pEventInfo) void +OnWindowObjectFocusLost(void* pUserData, Evas_Object* pWin, void* pEvent_info) +{ + _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); + SysAssertf(pImpl, "Failed to request"); + + pImpl->SetWinFocusLost(true); +} + + +void OnWindowObjectFocusGained(void* pUserData, Evas_Object* pWin, void* pEvent_info) { _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); SysAssertf(pImpl, "Failed to request"); - if (pImpl->IsKeypadOpened() == true && pImpl->IsVisible() == true && pImpl->IsFocused() == true) + if (pImpl->IsVisible() == true && pImpl->IsFocused() == true) { _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore())); SysAssertf(pWebCore, "Failed to get Web core object"); - evas_object_focus_set(pWebCore->GetWebNativeNode(), EINA_TRUE); + if (pImpl->IsWinFocusLost() == true) + { + Ewk_Settings* pSettings = ewk_view_settings_get(pWebCore->GetWebNativeNode()); + SysAssertf(pSettings, "Failed to get settings instance."); + + if (ewk_settings_clear_text_selection_automatically_get(pSettings) == EINA_FALSE) + { + ewk_settings_clear_text_selection_automatically_set(pSettings, EINA_TRUE); - pImpl->SetKeypadVisibleState(true); + evas_object_focus_set(pWebCore->GetWebNativeNode(), EINA_TRUE); + } + else if (pImpl->IsKeypadOpened() == true) + { + evas_object_focus_set(pWebCore->GetWebNativeNode(), EINA_TRUE); + } + } } + + pImpl->SetWinFocusLost(false); } @@ -1747,6 +1787,38 @@ OnWebNativeNodeFocusGained(void* pUserData, Evas* pCanvas, Evas_Object* pView, v { pImpl->SetKeypadOpened(false); } + /*else if (pImpl->IsWinFocusLost() == true) + { + _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore())); + SysAssertf(pWebCore, "Failed to get Web core object"); + + evas_object_focus_set(pWebCore->GetWebNativeNode(), EINA_FALSE); + }*/ +} + + +void +OnWebNativeNodeFocusLost(void* pUserData, Evas* pCanvas, Evas_Object* pView, void* pEventInfo) +{ + _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); + SysAssertf(pImpl, "Failed to request"); + + _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore())); + SysAssertf(pWebCore, "Failed to get Web core object"); + + Eina_Rectangle leftHandle; + Eina_Rectangle rightHandle; + + EINA_RECTANGLE_SET(&leftHandle, 0, 0, 0, 0); + EINA_RECTANGLE_SET(&rightHandle, 0, 0, 0, 0); + + if (pImpl->IsWinFocusLost() == true && ewk_view_text_selection_range_get(pWebCore->GetWebNativeNode(), &leftHandle, &rightHandle)) + { + Ewk_Settings* pSettings = ewk_view_settings_get(pWebCore->GetWebNativeNode()); + SysAssertf(pSettings, "Failed to get settings instance."); + + ewk_settings_clear_text_selection_automatically_set(pSettings, EINA_FALSE); + } } @@ -2096,6 +2168,7 @@ _WebImpl::_WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore) , __isFooterVisible(false) , __isKeypadVisible(false) , __isKeypadOpened(false) + , __isWinFocusLost(false) , __isLoadingErrorOccurred(false) , __isRedirectRequested(false) , __isCertificateRequested(false) @@ -2152,8 +2225,12 @@ _WebImpl::_WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore) _WebImpl::~_WebImpl() { _WebManager* pWebManager = _WebManager::GetInstance(); + SysTryCatch(NID_WEB_CTRL, pWebManager, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); + pWebManager->RemoveWeb(reinterpret_cast< int >(this)); + pWebManager->RemoveActiveWeb(this); +CATCH: RemoveEventListenerCallback(); ClearCertificateDb(); @@ -2360,7 +2437,7 @@ _WebImpl::LoadUrl(const String& url, const HttpHeader& header) { std::unique_ptr pUrl(_StringConverter::CopyToCharArrayN(url)); SysTryReturn(NID_WEB_CTRL, pUrl.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); - + Eina_Hash* pHttpHeader = ConvertToSlpHeaderN(header); ewk_view_url_request_set(__pWebCore->GetWebNativeNode(), pUrl.get(), EWK_HTTP_METHOD_GET, pHttpHeader, null); @@ -2429,7 +2506,7 @@ _WebImpl::ShowSelectBoxPopup(bool isMultiSelect, const String& title, Eina_List* std::unique_ptr<_SelectBox> pSelectBox(new (std::nothrow) _SelectBox()); SysTryReturnResult(NID_WEB_CTRL, pSelectBox.get(), E_OUT_OF_MEMORY, "Memory allocation failed."); - r = pSelectBox->Construct(isMultiSelect, title, DEFAULT_LIST_ITEM_COUNT, pWebView); + r = pSelectBox->Construct(this, isMultiSelect, title, DEFAULT_LIST_ITEM_COUNT, pWebView); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); r = pSelectBox->UpdateList(pItems, selectedIndex, false, false); @@ -2765,10 +2842,6 @@ _WebImpl::SynchronizeSearch(_SearchType type, Evas_Object* pView, Ewk_Find_Optio std::unique_ptr pText(_StringConverter::CopyToCharArrayN(text)); SysTryReturn(NID_WEB_CTRL, pText.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); - Ewk_Settings* pSettings = ewk_view_settings_get(__pWebCore->GetWebNativeNode()); - SysAssertf(pSettings, "Failed to get webkit instance."); - ewk_settings_clear_text_selection_automatically_set(pSettings, true); - switch (type) { case SEARCH_SYNC: @@ -3504,10 +3577,12 @@ _WebImpl::SetEventListenerCallback(void) const evas_object_smart_callback_add(pWebNativeNode, "load,stop", OnLoadingCanceled, this); evas_object_smart_callback_add(pWebNativeNode, "load,error", OnLoadingErrorOccurred, this); evas_object_smart_callback_add(pWebNativeNode, "title,changed", OnPageTitleReceived, this); + evas_object_smart_callback_add(pWebNativeNode, "load,committed", OnLoadingCommitted, this); evas_object_smart_callback_add(pWebNativeNode, "requestToNative,json", OnHandleJavaScriptRequest, this); evas_object_smart_callback_add(pWinObject, "focus,in", OnWindowObjectFocusGained, this); + evas_object_smart_callback_add(pWinObject, "focus,out", OnWindowObjectFocusLost, this); evas_object_smart_callback_add(pWebNativeNode, "inputmethod,changed", OnWebKeypadStateChanged, this); evas_object_smart_callback_add(pWebNativeNode, "editorclient,ime,opened", OnWebKeypadOpened, this); @@ -3544,7 +3619,7 @@ _WebImpl::SetEventListenerCallback(void) const evas_object_smart_callback_add(pWebNativeNode, "touchmove,handled", OnWebPreventDefaultTriggered, this); evas_object_smart_callback_add(pWebNativeNode, "icon,received", OnFaviconReceived, this); - evas_object_smart_callback_add(pWebNativeNode, "text,selected", OnWebPageBlockSelected, this); + evas_object_smart_callback_add(pWebNativeNode, "magnifier,hide", OnWebPageBlockSelected, this); evas_object_smart_callback_add(pWebNativeNode, "fullscreen,enterfullscreen", OnFullScreenEntered, this); evas_object_smart_callback_add(pWebNativeNode, "fullscreen,exitfullscreen", OnFullScreenExited, this); @@ -3563,6 +3638,7 @@ _WebImpl::SetEventListenerCallback(void) const ewk_view_exceeded_local_file_system_quota_callback_set(pWebNativeNode, OnLocalFileSystemQuotaExceeded, const_cast< _WebImpl* >(this)); evas_object_event_callback_add(pWebNativeNode, EVAS_CALLBACK_FOCUS_IN, OnWebNativeNodeFocusGained, this); + evas_object_event_callback_add(pWebNativeNode, EVAS_CALLBACK_FOCUS_OUT, OnWebNativeNodeFocusLost, this); } } @@ -3590,10 +3666,12 @@ _WebImpl::RemoveEventListenerCallback(void) const evas_object_smart_callback_del(pWebNativeNode, "load,stop", OnLoadingCanceled); evas_object_smart_callback_del(pWebNativeNode, "load,error", OnLoadingErrorOccurred); evas_object_smart_callback_del(pWebNativeNode, "title,changed", OnPageTitleReceived); + evas_object_smart_callback_del(pWebNativeNode, "load,committed", OnLoadingCommitted); evas_object_smart_callback_del(pWebNativeNode, "requestToNative,json", OnHandleJavaScriptRequest); evas_object_smart_callback_del_full(pWinObject, "focus,in", OnWindowObjectFocusGained, this); + evas_object_smart_callback_del_full(pWinObject, "focus,out", OnWindowObjectFocusLost, this); evas_object_smart_callback_del(pWebNativeNode, "inputmethod,changed", OnWebKeypadStateChanged); evas_object_smart_callback_del(pWebNativeNode, "editorclient,ime,opened", OnWebKeypadOpened); @@ -3630,7 +3708,7 @@ _WebImpl::RemoveEventListenerCallback(void) const evas_object_smart_callback_del(pWebNativeNode, "touchmove,handled", OnWebPreventDefaultTriggered); evas_object_smart_callback_del(pWebNativeNode, "icon,received", OnFaviconReceived); - evas_object_smart_callback_del(pWebNativeNode, "text,selected", OnWebPageBlockSelected); + evas_object_smart_callback_del(pWebNativeNode, "magnifier,hide", OnWebPageBlockSelected); evas_object_smart_callback_del(pWebNativeNode, "fullscreen,enterfullscreen", OnFullScreenEntered); evas_object_smart_callback_del(pWebNativeNode, "fullscreen,exitfullscreen", OnFullScreenExited); @@ -3648,6 +3726,7 @@ _WebImpl::RemoveEventListenerCallback(void) const ewk_view_exceeded_local_file_system_quota_callback_set(pWebNativeNode, null, null); evas_object_event_callback_del(pWebNativeNode, EVAS_CALLBACK_FOCUS_IN, OnWebNativeNodeFocusGained); + evas_object_event_callback_del(pWebNativeNode, EVAS_CALLBACK_FOCUS_OUT, OnWebNativeNodeFocusLost); } } @@ -3688,46 +3767,37 @@ _WebImpl::SetBlockSelectionPosition(const Point& startPoint) result _WebImpl::SetBlockSelectionPosition(const FloatPoint& startPoint) { - Evas_Object* pView = __pWebCore->GetWebNativeNode(); - Ewk_View_Smart_Data* pSmartData = (Ewk_View_Smart_Data*) evas_object_smart_data_get(pView); - if (pSmartData && pSmartData->api) + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) { - Point absPoint( _CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(startPoint))); + return E_SUCCESS; + } - Ewk_Settings* pSettings = ewk_view_settings_get(__pWebCore->GetWebNativeNode()); - SysAssertf(pSettings, "Failed to get webkit instance."); - ewk_settings_clear_text_selection_automatically_set(pSettings, true); + Ewk_View_Smart_Data* pSmartData = reinterpret_cast< Ewk_View_Smart_Data* >(evas_object_smart_data_get(pWebview)); + SysAssertf(pSmartData && pSmartData->api, "Failed to get webkit instance."); + Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(startPoint))); - Eina_Bool ret = pSmartData->api->text_selection_down(pSmartData, absPoint.x, absPoint.y); - if (ret) - { - pSmartData->api->text_selection_up(pSmartData, absPoint.x, absPoint.y); + Eina_Bool ret = pSmartData->api->text_selection_down(pSmartData, absPoint.x, absPoint.y); + if (ret) + { + pSmartData->api->text_selection_up(pSmartData, absPoint.x, absPoint.y); - Ewk_Hit_Test* pEwkHitTest = ewk_view_hit_test_new(pView, absPoint.x, absPoint.y, EWK_HIT_TEST_MODE_ALL); - SysTryReturnResult(NID_WEB_CTRL, pEwkHitTest, E_SYSTEM, "Failed to get hit test."); + Ewk_Hit_Test* pEwkHitTest = ewk_view_hit_test_new(pWebview, absPoint.x, absPoint.y, EWK_HIT_TEST_MODE_ALL); + SysTryReturnResult(NID_WEB_CTRL, pEwkHitTest, E_SYSTEM, "Failed to get hit test."); - String tagName(ewk_hit_test_tag_name_get(pEwkHitTest)); + String tagName(ewk_hit_test_tag_name_get(pEwkHitTest)); - if (tagName.Equals(L"INPUT", false) || tagName.Equals(L"TEXTAREA", false)) - { - ewk_view_command_execute(pView, "SelectWord", 0); - } - else - { - Eina_Hash* pAttrHash = ewk_hit_test_attribute_hash_get(pEwkHitTest); - char* pValue = reinterpret_cast< char* >(eina_hash_find(pAttrHash, "contenteditable")); - if(pValue) - { - ewk_view_command_execute(pView, "SelectWord", 0); - } - } + Eina_Hash* pAttrHash = ewk_hit_test_attribute_hash_get(pEwkHitTest); + char* pValue = reinterpret_cast< char* >(eina_hash_find(pAttrHash, "contenteditable")); + if (tagName.Equals(L"INPUT", false) || tagName.Equals(L"TEXTAREA", false) || pValue) + { + ewk_view_command_execute(pWebview, "SelectWord", 0); + evas_object_smart_callback_call(pWebview, "magnifier,hide", NULL); } } SysTryReturnResult(NID_WEB_CTRL, GetTextFromBlock().GetLength() > 0, E_INVALID_ARG, "Failed to set text selection up."); - evas_object_smart_callback_call(pView, "text,selected", NULL); - return E_SUCCESS; } @@ -4031,6 +4101,20 @@ _WebImpl::SetKeypadOpened(bool isKeypadOpened) } +bool +_WebImpl::IsWinFocusLost(void) const +{ + return __isWinFocusLost; +} + + +void +_WebImpl::SetWinFocusLost(bool isWinFocusLost) +{ + __isWinFocusLost = isWinFocusLost; +} + + Rectangle _WebImpl::GetPreviousKeypadBounds(void) const { @@ -4747,10 +4831,6 @@ _WebImpl::GetParentFormImpl(_ControlImpl* pControlImpl) bool _WebImpl::OnFocusGained(const _ControlImpl& source) { - Ewk_Settings* pSettings = ewk_view_settings_get(__pWebCore->GetWebNativeNode()); - SysAssertf(pSettings, "Failed to get webkit instance."); - ewk_settings_clear_text_selection_automatically_set(pSettings, true); - return false; } @@ -4758,19 +4838,17 @@ _WebImpl::OnFocusGained(const _ControlImpl& source) bool _WebImpl::OnFocusLost(const _ControlImpl& source) { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return false; + } + if(IsKeypadVisible() == true) { SetKeypadOpened(true); - - SetKeypadVisibleState(false); } - Ewk_Settings* pSettings = ewk_view_settings_get(__pWebCore->GetWebNativeNode()); - SysAssertf(pSettings, "Failed to get webkit instance."); - ewk_settings_clear_text_selection_automatically_set(pSettings, false); - - evas_object_focus_set(__pWebCore->GetWebNativeNode(), EINA_FALSE); - return false; } @@ -4813,6 +4891,8 @@ _WebImpl::OnPreAttachedToMainTree(void) r = InitializeSetting(); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + SettingInfo::AddSettingEventListener(*this); + _WebManager* pWebManager = _WebManager::GetInstance(); pWebManager->AddWeb(reinterpret_cast< int >(this)); } @@ -4837,8 +4917,30 @@ _WebImpl::OnDetachingFromMainTree(void) void +_WebImpl::OnSettingChanged(String& key) +{ + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + if (key == L"http://tizen.org/setting/font.type") + { + ewk_view_use_settings_font(pWebview); + } +} + + +void _WebImpl::OnChangeLayout(_ControlRotation rotation) { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + int degree = 0; switch (rotation) @@ -4858,7 +4960,7 @@ _WebImpl::OnChangeLayout(_ControlRotation rotation) default: SysAssert(false); } - ewk_view_orientation_send(__pWebCore->GetWebNativeNode(), degree); + ewk_view_orientation_send(pWebview, degree); } @@ -4882,22 +4984,37 @@ _WebImpl::OnChangeLayout(_ControlOrientation orientation) pWebNotification = static_cast< _WebNotification* >(pEnum->GetCurrent()); pWebNotification->OnChangeLayout(); } + + if (IsKeypadVisible()) + { + _ICoordinateSystemTransformer* pXformer = _CoordinateSystem::GetInstance()->GetInverseTransformer(); + SysAssertf(pXformer, "Failed to get CoordinateTransformer"); + + _FormImpl* pFormImpl = GetParentFormImpl(dynamic_cast< _ControlImpl* >(this)); + pFormImpl->DeflateClientRectHeight(pXformer->TransformVertical(GetPreviousKeypadBounds().height)); + } } void _WebImpl::OnAncestorVisibleStateChanged(const _Control& control) { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + _WebManager* pWebManager = _WebManager::GetInstance(); if (IsVisible() == true) { pWebManager->SetActiveWeb(this); - ewk_view_page_visibility_state_set(__pWebCore->GetWebNativeNode(), EWK_PAGE_VISIBILITY_STATE_VISIBLE, false); + ewk_view_page_visibility_state_set(pWebview, EWK_PAGE_VISIBILITY_STATE_VISIBLE, false); } else { pWebManager->RemoveActiveWeb(this); - ewk_view_page_visibility_state_set(__pWebCore->GetWebNativeNode(), EWK_PAGE_VISIBILITY_STATE_HIDDEN, false); + ewk_view_page_visibility_state_set(pWebview, EWK_PAGE_VISIBILITY_STATE_HIDDEN, false); } } @@ -4930,6 +5047,9 @@ _WebImpl::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::ILi case ID_USER_SCRIPT_CONFIRM_CLOSE: __pScriptConfirmPopup.reset(); break; + case ID_USER_SCRIPT_SELECTBOX_CLOSE: + __pSelectBox.reset(); + break; default: break; }