Fix visibility change event for background-support app
authorLongXiang <xiang.long@intel.com>
Tue, 8 Jan 2013 07:46:18 +0000 (15:46 +0800)
committerGerrit Code Review <gerrit2@kim11>
Fri, 11 Jan 2013 02:06:14 +0000 (11:06 +0900)
[Title] Fix visibility change event for background-support app
[Issue#] TDIS-2111 (https://tizendev.org/bugs/browse/TDIS-2111)
[Problem] N/A
[Cause] wrt-client will bypass visibility event sending for background-support app.
[Solution] Add a new changeViewVisibility method for IViewModule and implemented in ViewLogic.

src/api_new/runnable_widget_object.cpp
src/view/i_view_module.h
src/view/webkit/view_logic.cpp
src/view/webkit/view_logic.h

index 8244564..e1b7957 100644 (file)
@@ -167,6 +167,7 @@ void RunnableWidgetObject::Suspend() {
     }
 #endif
 
+    m_view->changeViewVisibility(false);
     if(suspendWebkit) //if widget has background page suspending wk will be skipped
     {
         m_view->suspendWidget();
index 8068151..a59dcbc 100644 (file)
@@ -46,6 +46,7 @@ public:
     virtual void prepareView(WidgetModel *, const std::string &) = 0;
     virtual void showWidget() = 0;
     virtual void hideWidget() = 0;
+    virtual void changeViewVisibility(bool isVisible) = 0;
     virtual void suspendWidget()= 0;
     virtual void resumeWidget() = 0;
     virtual void resetWidget() = 0;
index 1c1c503..faf8ca8 100644 (file)
@@ -262,6 +262,25 @@ void ViewLogic::hideWidget()
     m_ewkViewList.clear();
 }
 
+void ViewLogic::changeViewVisibility(bool isVisible)
+{
+    Evas_Object* wkView = m_currentEwkView;
+    if (!wkView)
+        return;
+
+    if (isVisible) {
+        ewk_view_page_visibility_state_set(wkView,
+                                           EWK_PAGE_VISIBILITY_STATE_VISIBLE,
+                                           EINA_FALSE);
+        ewk_view_visibility_set(wkView, EINA_TRUE);
+    } else {
+        ewk_view_page_visibility_state_set(wkView,
+                                           EWK_PAGE_VISIBILITY_STATE_HIDDEN,
+                                           EINA_FALSE);
+        ewk_view_visibility_set(wkView, EINA_FALSE);
+    }
+}
+
 void ViewLogic::suspendWidget()
 {
     LogInfo("Pausing widget");
@@ -714,13 +733,8 @@ void ViewLogic::suspendWebkit(Evas_Object *wkView)
     // The followings are not implemeted yet by webkit2
     //      ewk_view_pause_or_resume_plugins(true);
     //      ewk_view_pause_or_resume_video_audio(true);
-
-    // send visibility event to webpage
-    ewk_view_page_visibility_state_set(wkView,
-                                       EWK_PAGE_VISIBILITY_STATE_HIDDEN,
-                                       EINA_FALSE);
     ewk_view_suspend(wkView);
-    ewk_view_visibility_set(wkView, EINA_FALSE);
+
     return;
 }
 
index 4fc7492..fe85963 100644 (file)
@@ -55,6 +55,7 @@ class ViewLogic : public ViewModule::IViewModule
     void prepareView(WidgetModel* m, const std::string &startUrl);
     void showWidget();
     void hideWidget();
+    void changeViewVisibility(bool isVisible);
     void suspendWidget();
     void resumeWidget();
     void resetWidget();