Fix the race condition of HomeScreen 47/15647/1
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>
Tue, 24 Jul 2018 10:38:30 +0000 (19:38 +0900)
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>
Tue, 24 Jul 2018 14:17:33 +0000 (23:17 +0900)
HomeScreen and launcher have race condition.
This patch fixes if the homescreen requests to be shown,
WM doesn't change launcher(and others) invisible.

This is quick hack.
System UI's role is homescreen now.
We can't change system UI from setting and so on currently.

Bug-AGL: SPEC-1407

Change-Id: Ie70e0fd635fae03de7b731f3d73fb1863e3c6ad4
Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
src/window_manager.cpp

index 15f55f0..fb35ab0 100644 (file)
@@ -1102,6 +1102,15 @@ WMError WindowManager::setInvisibleTask(const std::string &role, bool split)
 {
     unsigned req_num = g_app_list.currentRequestNumber();
     HMI_SEQ_DEBUG(req_num, "set current visible app to invisible task");
+    bool found = false;
+    auto trigger = g_app_list.getRequest(req_num, &found);
+    // I don't check found == true here because this is checked in caller.
+    if(trigger.role == "homescreen")
+    {
+        HMI_SEQ_INFO(req_num, "In case of 'homescreen' visible, don't change app to invisible");
+        return WMError::SUCCESS;
+    }
+
     // This task is copied from original actiavete surface
     const char *drawing_name = this->rolenew2old[role].c_str();
     auto const &surface_id = this->lookup_id(role.c_str());
@@ -1113,7 +1122,6 @@ WMError WindowManager::setInvisibleTask(const std::string &role, bool split)
     int surface;
     TaskVisible task_visible = TaskVisible::INVISIBLE;
     bool end_draw_finished = true;
-    bool found = false;
 
     for (auto const &l : this->layers.mapping)
     {