apply backkey logic for fullscreen
authorSeongjun Yim <se201.yim@samsung.com>
Mon, 29 Jul 2013 08:48:44 +0000 (17:48 +0900)
committerSeongjun Yim <se201.yim@samsung.com>
Mon, 29 Jul 2013 09:25:33 +0000 (18:25 +0900)
Change-Id: I3af7c8558f9f34fd90e28b0856c7543cd4653c02
Signed-off-by: Seongjun Yim <se201.yim@samsung.com>
src/controls/FWebCtrl_Web.cpp
src/controls/FWebCtrl_Web.h
src/controls/FWebCtrl_WebImpl.cpp

index 74782d2..f2d63b8 100755 (executable)
@@ -42,6 +42,7 @@
 #include <FUi_CoordinateSystemUtils.h>
 #include <FUi_AccessibilityContainer.h>
 #include <FUi_AccessibilityElement.h>
+#include <FUi_UiEventManager.h>
 #include <FUi_IAccessibilityFocusHandler.h>
 #include <FUi_IAccessibilityListener.h>
 #include <FUi_Math.h>
@@ -342,6 +343,7 @@ _Web::_Web(void)
        , __edgeType(WEB_EDGE_NONE)
        , __pTextElement(null)
        , __previousTouchedPosition(0.0f, 0.0f)
+       , __isFullScreenEntered(false)
 {
        SetBackgroundColor(Color(0, 0, 0, 0));
 }
@@ -349,6 +351,11 @@ _Web::_Web(void)
 
 _Web::~_Web(void)
 {
+       _UiEventManager* pManager = _UiEventManager::GetInstance();
+       SysAssertf(pManager, "Failed to get ui evnet manager.");
+
+       pManager->RemoveKeyEventListener(*this);
+
        RemoveGestureListener();
 }
 
@@ -374,6 +381,11 @@ _Web::CreateWebN(void)
        r = pWeb->InitializeGestureStates();
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
 
+       _UiEventManager* pManager = _UiEventManager::GetInstance();
+       SysAssertf(pManager, "Failed to get ui evnet manager.");
+
+       pManager->AddKeyEventListener(*pWeb.get());
+
        return pWeb.release();
 }
 
@@ -1142,4 +1154,30 @@ _Web::GetEvasTouchState(TouchStatus touchStatus)
 }
 
 
+void
+_Web::SetFullScreenEntered(bool isFullScreenEntered)
+{
+       __isFullScreenEntered = isFullScreenEntered;
+}
+
+
+bool
+_Web::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
+{
+       if (__isFullScreenEntered)
+       {
+               if (keyInfo.GetKeyCode() == _KEY_ESC || keyInfo.GetKeyCode() == _KEY_BACK)
+               {
+                       __isFullScreenEntered = false;
+
+                       ewk_view_fullscreen_exit(GetWebNativeNode());
+
+                       return true;
+               }
+       }
+
+       return false;
+}
+
+
 }}} // Tizen::Web::Controls
index a1878ae..44fab11 100755 (executable)
@@ -115,6 +115,8 @@ public:
 
        void SetEdgeReachedEvent(_WebEdgeType type);
 
+       void SetFullScreenEntered(bool isFullScreenEntered);
+
        virtual result OnAttaching(const _Control* pParent);
        virtual result OnBoundsChanging(const Tizen::Graphics::Rectangle& bounds);
 
@@ -147,6 +149,8 @@ public:
        virtual bool OnCaptureAcquire(Tizen::Graphics::BufferInfo& output);
        virtual void OnCaptureReleased(void) {};
 
+       virtual bool OnKeyReleased(const Tizen::Ui::_Control& source, const Tizen::Ui::_KeyInfo& keyInfo);
+
 private:
        _Web(const _Web& value);
 
@@ -196,6 +200,8 @@ private:
        Tizen::Ui::_AccessibilityElement* __pTextElement;
 
        Tizen::Graphics::FloatPoint __previousTouchedPosition;
+
+       bool __isFullScreenEntered;
 }; // _Web
 
 }}} // Tizen::Web::Controls
index 3302be6..2552153 100755 (executable)
@@ -832,9 +832,16 @@ void
 OnFullScreenEntered(void* pUserData, Evas_Object* pView, void* pEventInfo)
 {
        _WebImpl* pImpl = reinterpret_cast<_WebImpl*>(pUserData);
-       SysAssertf(pImpl, "Failed to request");
+       bool* pIsHandleNeeded = reinterpret_cast< bool* >(pEventInfo);
+       SysAssertf(pImpl && pIsHandleNeeded, "Failed to request");
+
+       _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore()));
+       SysAssertf(pWebCore, "Failed to get Web core object");
 
-       SysLog(NID_WEB_CTRL, "Enter.");
+       if (*pIsHandleNeeded)
+       {
+               pWebCore->SetFullScreenEntered(true);
+       }
 }
 
 
@@ -844,7 +851,10 @@ OnFullScreenExited(void* pUserData, Evas_Object* pView, void* pEventInfo)
        _WebImpl* pImpl = reinterpret_cast<_WebImpl*>(pUserData);
        SysAssertf(pImpl, "Failed to request");
 
-       SysLog(NID_WEB_CTRL, "Exit.");
+       _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore()));
+       SysAssertf(pWebCore, "Failed to get Web core object");
+
+       pWebCore->SetFullScreenEntered(false);
 }
 
 
@@ -890,6 +900,11 @@ OnLoadingRequested(void* pUserData, Evas_Object* pView, void* pEventInfo)
        if (pImpl->GetLoadingListener() && ewk_frame_is_main_frame(ewk_policy_decision_frame_get(pPolicy))
                && !pImpl->IsRedirectRequested())
        {
+               _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore()));
+               SysAssertf(pWebCore, "Failed to get Web core object");
+
+               pWebCore->SetFullScreenEntered(false);
+
                pImpl->SetCertificateRequested(false);
 
                if (pImpl->GetTextSearchListener())
@@ -2124,6 +2139,14 @@ _WebImpl::_WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore)
 
 _WebImpl::~_WebImpl()
 {
+       _DownloadManagerImpl* pManagerImpl = _DownloadManagerImpl::GetInstance();
+       pManagerImpl->SetDownloadListener(null);
+
+       _WebManager* pWebManager = _WebManager::GetInstance();
+       pWebManager->RemoveWeb(reinterpret_cast< int >(this));
+
+       RemoveEventListenerCallback();
+
        ClearCertificateDb();
 }
 
@@ -4763,21 +4786,24 @@ _WebImpl::OnPreAttachedToMainTree(void)
                pWebManager->SetActiveWeb(this);
        }
 
-       r = __pWebCore->InitializeWebNativeNode();
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       if (!HasValidNativeNode())
+       {
+               r = __pWebCore->InitializeWebNativeNode();
+               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
-       _ControlManager* pControlManager = _ControlManager::GetInstance();
-       SysTryReturnResult(NID_WEB_CTRL, pControlManager, E_SYSTEM, "Failed to get the ControlManager instance.");
-       OnChangeLayout(pControlManager->GetScreenRotation());
+               _ControlManager* pControlManager = _ControlManager::GetInstance();
+               SysTryReturnResult(NID_WEB_CTRL, pControlManager, E_SYSTEM, "Failed to get the ControlManager instance.");
+               OnChangeLayout(pControlManager->GetScreenRotation());
 
-       r = InitializeSetting();
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+               r = InitializeSetting();
+               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
-       r = _ContainerImpl::OnPreAttachedToMainTree();
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+               r = _ContainerImpl::OnPreAttachedToMainTree();
+               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
-       _WebManager* pWebManager = _WebManager::GetInstance();
-       pWebManager->AddWeb(reinterpret_cast< int >(this));
+               _WebManager* pWebManager = _WebManager::GetInstance();
+               pWebManager->AddWeb(reinterpret_cast< int >(this));
+       }
 
        return E_SUCCESS;
 }
@@ -4787,14 +4813,8 @@ result
 _WebImpl::OnDetachingFromMainTree(void)
 {
        _WebManager* pWebManager = _WebManager::GetInstance();
-       pWebManager->RemoveWeb(reinterpret_cast< int >(this));
        pWebManager->RemoveActiveWeb(this);     
 
-       _DownloadManagerImpl* pManagerImpl = _DownloadManagerImpl::GetInstance();
-       pManagerImpl->SetDownloadListener(null);
-
-       RemoveEventListenerCallback();
-
        return E_SUCCESS;
 }