From 6a81ee750f1624d1f1ab59d6e97cfd5dbbbbf542 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Mon, 24 Aug 2020 20:10:54 +0900 Subject: [PATCH] DSWaylandTizenPolicy: implements functions for handling aux hint Change-Id: Ia848f749763b4c26b8645c824f7221e8005129f4 --- src/DSWaylandServer/DSWaylandTizenPolicy.cpp | 53 +++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/src/DSWaylandServer/DSWaylandTizenPolicy.cpp b/src/DSWaylandServer/DSWaylandTizenPolicy.cpp index 2ccef52..6b0f1fa 100644 --- a/src/DSWaylandServer/DSWaylandTizenPolicy.cpp +++ b/src/DSWaylandServer/DSWaylandTizenPolicy.cpp @@ -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 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) -- 2.7.4