From 7d49370d34a9afc8d333ce6c9799c3625e80ecfb Mon Sep 17 00:00:00 2001 From: Taejeong Lee Date: Thu, 20 Sep 2012 18:24:51 +0900 Subject: [PATCH] Fix for N_SE-10234 and Redefine of system language change action When change system language setting, the webapp in background comes out foreground. Re-designed about wrt system language change action. It doesn't works as reset event any more. --- src/api_new/i_runnable_widget_object.h | 4 +++ src/api_new/runnable_widget_object.cpp | 13 +++++---- src/api_new/runnable_widget_object.h | 1 + src/view/i_view_module.h | 1 + src/view/webkit/view_logic.cpp | 52 ++++++++++++++++++++++++++++++++++ src/view/webkit/view_logic.h | 1 + src/wrt-client/wrt-client.cpp | 2 +- 7 files changed, 68 insertions(+), 6 deletions(-) diff --git a/src/api_new/i_runnable_widget_object.h b/src/api_new/i_runnable_widget_object.h index 342c4f3..1b1f0df 100644 --- a/src/api_new/i_runnable_widget_object.h +++ b/src/api_new/i_runnable_widget_object.h @@ -100,6 +100,10 @@ public: */ virtual WidgetModelPtr GetModel() = 0; /** + * Reload start page on widget. + */ + virtual void ReloadStartPage() = 0; + /** * Retrieve widget's top level webview * @return Evas_Object* */ diff --git a/src/api_new/runnable_widget_object.cpp b/src/api_new/runnable_widget_object.cpp index 054d3c9..cf7df6b 100644 --- a/src/api_new/runnable_widget_object.cpp +++ b/src/api_new/runnable_widget_object.cpp @@ -176,23 +176,26 @@ void RunnableWidgetObject::Suspend() { void RunnableWidgetObject::Resume() { LogDebug("Resuming widget"); - Assert(m_widgetModel); m_view->resumeWidget(); } void RunnableWidgetObject::Reset() { - LogDebug("Resetting widget"); - Assert(m_widgetModel); - + LogDebug("Reseting widget"); m_view->resetWidget(); } -WidgetModelPtr RunnableWidgetObject::GetModel() { +WidgetModelPtr RunnableWidgetObject::GetModel() +{ Assert(m_widgetModel); return m_widgetModel; } +void RunnableWidgetObject::ReloadStartPage() +{ + m_view->reloadStartPage(); +} + Evas_Object* RunnableWidgetObject::GetCurrentWebview() { return m_view->getCurrentWebview(); } diff --git a/src/api_new/runnable_widget_object.h b/src/api_new/runnable_widget_object.h index 065a4ee..e414173 100644 --- a/src/api_new/runnable_widget_object.h +++ b/src/api_new/runnable_widget_object.h @@ -49,6 +49,7 @@ public: void Resume(); void Reset(); WidgetModelPtr GetModel(); + void ReloadStartPage(); Evas_Object* GetCurrentWebview(); void SetUserCallbacks(UserCallbacksPtr cbs, void *data); void GoBack(); diff --git a/src/view/i_view_module.h b/src/view/i_view_module.h index 923fbdd..869e298 100644 --- a/src/view/i_view_module.h +++ b/src/view/i_view_module.h @@ -50,6 +50,7 @@ public: virtual void resumeWidget() = 0; virtual void resetWidget() = 0; virtual void goBack() = 0; + virtual void reloadStartPage() = 0; virtual Evas_Object* getCurrentWebview() = 0; virtual void setUserCallbacks(WRT::UserCallbacksPtr cbs, void *data) = 0; }; diff --git a/src/view/webkit/view_logic.cpp b/src/view/webkit/view_logic.cpp index 5c355cf..0a8fa97 100644 --- a/src/view/webkit/view_logic.cpp +++ b/src/view/webkit/view_logic.cpp @@ -365,6 +365,58 @@ void ViewLogic::goBack() } } +void ViewLogic::reloadStartPage() +{ + LogInfo("Reload Start Page"); + + if (m_ewkViewList.size() == 0) + { + // create new webview + createEwkView(); + ewkClientInit(m_currentEwkView); + } + else + { + // close opened windows + while (m_ewkViewList.size() > 1) + { + if (m_cbs->bufferUnset) { + m_cbs->bufferUnset(m_currentEwkView, m_cbsData); + } + removeEwkView(m_currentEwkView); + + m_currentEwkView = m_ewkViewList.back(); + } + + LogInfo("Close ewkViews done : m_ewkViewList.size() = " + << m_ewkViewList.size()); + } + + setStartPage(); + prepareEwkView(m_currentEwkView); + initializePluginLoading(); + + // load page + WKURLRef baseUrl = WKURLCreateWithUTF8CString(m_currentUri.c_str()); + + if (!baseUrl) + { + LogError("URL creation failed"); + return; + } + + WKPageLoadURL(ewk_view_WKPage_get(m_currentEwkView), baseUrl); + WKRelease(baseUrl); + + // show ewkView + if (m_cbs->bufferSet) + { + m_cbs->bufferSet(m_currentEwkView, m_cbsData); + } + + LogInfo("Reloading Start Page is done!"); +} + Evas_Object* ViewLogic::getCurrentWebview() { LogInfo("get current webview"); diff --git a/src/view/webkit/view_logic.h b/src/view/webkit/view_logic.h index 69c5a59..43bbcd6 100644 --- a/src/view/webkit/view_logic.h +++ b/src/view/webkit/view_logic.h @@ -55,6 +55,7 @@ class ViewLogic : public ViewModule::IViewModule void resumeWidget(); void resetWidget(); void goBack(); + void reloadStartPage(); Evas_Object* getCurrentWebview(); void setUserCallbacks(WRT::UserCallbacksPtr cbs, void *data); diff --git a/src/wrt-client/wrt-client.cpp b/src/wrt-client/wrt-client.cpp index 67aee80..daf05a1 100644 --- a/src/wrt-client/wrt-client.cpp +++ b/src/wrt-client/wrt-client.cpp @@ -656,7 +656,7 @@ int WrtClient::languageChangedCallback(void *data) if (true == wrtClient->m_launched && wrtClient->m_widgetState != WidgetState_Stopped) { - wrtClient->m_widget->Reset(); + wrtClient->m_widget->ReloadStartPage(); } } return 0; -- 2.7.4