Fix timing issue of surface creation 15/18415/2
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>
Thu, 29 Nov 2018 12:11:50 +0000 (21:11 +0900)
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>
Mon, 3 Dec 2018 04:01:18 +0000 (13:01 +0900)
Rarely Window Manager get the event of surface creation
after activateWindow.
In that case, Window Manager reject application request
because client doesn't have surface.
This patch makes WM does provisional registration.

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

index cd7d2e5..5dc22be 100644 (file)
@@ -187,6 +187,9 @@ result<int> WindowManager::api_request_surface(char const *appid, char const *dr
         auto id = int(this->id_alloc.generate_id(role));
         this->tmp_surface2app[id] = {str_id, lid};
 
+        auto client = g_app_list.lookUpClient(str_id);
+        client->registerSurface(id);
+
         return Ok<int>(id);
     }
 
index e7cb552..040c52b 100644 (file)
@@ -111,6 +111,11 @@ unsigned WMClient::surfaceID() const
     return this->surface;
 }
 
+void WMClient::registerSurface(unsigned surface)
+{
+    this->surface = surface;
+}
+
 /**
  * Add surface to the client
  *
index 623d34f..9568324 100644 (file)
@@ -51,6 +51,7 @@ class WMClient
     std::string role() const;
     unsigned layerID() const;
     unsigned surfaceID() const;
+    void registerSurface(unsigned surface);
     WMError addSurface(unsigned surface);
     bool removeSurfaceIfExist(unsigned surface);