DSWaylandTizenPolicy: implements functions for handling aux hint 18/242318/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Mon, 24 Aug 2020 11:10:54 +0000 (20:10 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Tue, 25 Aug 2020 12:37:22 +0000 (21:37 +0900)
Change-Id: Ia848f749763b4c26b8645c824f7221e8005129f4

src/DSWaylandServer/DSWaylandTizenPolicy.cpp

index 2ccef52..6b0f1fa 100644 (file)
@@ -239,22 +239,67 @@ void DSWaylandTizenPolicyPrivate::tizen_policy_uniconify(Resource *resource, str
 
 void DSWaylandTizenPolicyPrivate::tizen_policy_add_aux_hint(Resource *resource, struct ::wl_resource *surface, int32_t id, const std::string &name, const std::string &value)
 {
-       DSLOG_DBG("TizenPolicyPriv", "");
+       DSLOG_DBG("TizenPolicyPriv", "Add aux hint (id:%d, key:%s, value:%s)", id, name.c_str(), value.c_str());
+
+       DSWaylandSurface *dswlSurface = DSWaylandSurface::fromWlResource(surface);
+       if (!dswlSurface) return;
+       if (!__wm) return;
+
+       __wm->addWindowAuxHint(dswlSurface, id, name, value);
 }
 
 void DSWaylandTizenPolicyPrivate::tizen_policy_change_aux_hint(Resource *resource, struct ::wl_resource *surface, int32_t id, const std::string &value)
 {
-       DSLOG_DBG("TizenPolicyPriv", "");
+       DSLOG_DBG("TizenPolicyPriv", "Change aux hint (id:%d, value:%s)", id, value.c_str());
+
+       DSWaylandSurface *dswlSurface = DSWaylandSurface::fromWlResource(surface);
+       if (!dswlSurface) return;
+       if (!__wm) return;
+
+       __wm->changeWindowAuxHint(dswlSurface, id, value);
 }
 
 void DSWaylandTizenPolicyPrivate::tizen_policy_del_aux_hint(Resource *resource, struct ::wl_resource *surface, int32_t id)
 {
-       DSLOG_DBG("TizenPolicyPriv", "");
+       DSLOG_DBG("TizenPolicyPriv", "Delete aux hint (id:%d)", id);
+
+       DSWaylandSurface *dswlSurface = DSWaylandSurface::fromWlResource(surface);
+       if (!dswlSurface) return;
+       if (!__wm) return;
+
+       __wm->removeWindowAuxHint(dswlSurface, id);
 }
 
 void DSWaylandTizenPolicyPrivate::tizen_policy_get_supported_aux_hints(Resource *resource, struct ::wl_resource *surface)
 {
-       DSLOG_DBG("TizenPolicyPriv", "");
+       DSLOG_DBG("TizenPolicyPriv", "resource:%p, surface:%p", resource, surface);
+
+       DSWaylandSurface *dswlSurface = DSWaylandSurface::fromWlResource(surface);
+       if (!dswlSurface) return;
+       if (!__wm) return;
+
+       struct wl_array hints;
+       int len;
+       int numOfHints = 0;
+       char *p;
+       std::list<std::string> hints_list;
+
+       hints_list = __wm->getWindowSupportedAuxHints(dswlSurface);
+       numOfHints = hints_list.size();
+
+       wl_array_init(&hints);
+       for (std::string hintName : hints_list)
+       {
+               len = hintName.length() + 1;
+               p = (char*)wl_array_add(&hints, len);
+
+               if (p == NULL)
+                       break;
+               hintName.copy(p, len);
+       }
+
+       send_supported_aux_hints(resource->handle, surface, &hints, numOfHints);
+       wl_array_release(&hints);
 }
 
 void DSWaylandTizenPolicyPrivate::tizen_policy_set_background_state(Resource *resource, uint32_t pid)