TZSH_SRV_ROLE_QUICKPANEL_APPS_MENU,
TZSH_SRV_ROLE_LOCKSCREEN,
TZSH_SRV_ROLE_INDICATOR,
- TZSH_SRV_ROLE_TVSERVICE,
TZSH_SRV_ROLE_SCREENSAVER_MNG,
TZSH_SRV_ROLE_SCREENSAVER,
TZSH_SRV_ROLE_CBHM,
Eina_List *tzsh_srvs; /* list of E_Policy_Wl_Tzsh_Srv */
Eina_List *tzsh_clients; /* list of E_Policy_Wl_Tzsh_Client */
E_Policy_Wl_Tzsh_Srv *srvs[TZSH_SRV_ROLE_MAX]; /* list of registered E_Policy_Wl_Tzsh_Srv */
- Eina_List *tvsrv_bind_list; /* list of activated E_Policy_Wl_Tzsh_Client */
Eina_List *tz_indicators;
Eina_List *tz_clipboards; /* list of E_Policy_Wl_Tz_Clipboard */
};
static void _e_policy_wl_surf_del(E_Policy_Wl_Surface *psurf);
-static void _e_policy_wl_tzsh_srv_register_handle(E_Policy_Wl_Tzsh_Srv *tzsh_srv);
-static void _e_policy_wl_tzsh_srv_unregister_handle(E_Policy_Wl_Tzsh_Srv *tzsh_srv);
static void _e_policy_wl_tzsh_srv_state_broadcast(E_Policy_Wl_Tzsh_Srv *tzsh_srv, Eina_Bool reg);
-static void _e_policy_wl_tzsh_srv_tvsrv_bind_update(void);
static Eina_Bool _e_policy_wl_e_client_is_valid(E_Client *ec);
static E_Policy_Wl_Tzsh_Srv *_e_policy_wl_tzsh_srv_add(E_Policy_Wl_Tzsh *tzsh, Tzsh_Srv_Role role, struct wl_resource *res_tzsh_srv, const char *name);
static void _e_policy_wl_tzsh_srv_del(E_Policy_Wl_Tzsh_Srv *tzsh_srv);
return NULL;
}
-static E_Policy_Wl_Tzsh_Client *
-_e_policy_wl_tzsh_client_get_from_tzsh(E_Policy_Wl_Tzsh *tzsh)
-{
- E_Policy_Wl_Tzsh_Client *tzsh_client;
- Eina_List *l;
-
- EINA_LIST_FOREACH(polwl->tvsrv_bind_list, l, tzsh_client)
- {
- if (tzsh_client->tzsh == tzsh)
- return tzsh_client;
- }
-
- return NULL;
-}
-
static void
_e_policy_wl_tzsh_client_set(E_Client *ec)
{
- E_Policy_Wl_Tzsh *tzsh, *tzsh2;
- E_Policy_Wl_Tzsh_Srv *tzsh_srv;
+ E_Policy_Wl_Tzsh *tzsh;
tzsh = _e_policy_wl_tzsh_get_from_client(ec);
if (!tzsh) return;
tzsh->ec = ec;
-
- if (tzsh->type == TZSH_TYPE_SRV)
- {
- tzsh_srv = polwl->srvs[TZSH_SRV_ROLE_TVSERVICE];
- if (tzsh_srv)
- {
- tzsh2 = tzsh_srv->tzsh;
- if (tzsh2 == tzsh)
- _e_policy_wl_tzsh_srv_register_handle(tzsh_srv);
- }
- }
- else
- {
- if (_e_policy_wl_tzsh_client_get_from_tzsh(tzsh))
- _e_policy_wl_tzsh_srv_tvsrv_bind_update();
- }
}
static void
_e_policy_wl_tzsh_client_unset(E_Client *ec)
{
- E_Policy_Wl_Tzsh *tzsh, *tzsh2;
+ E_Policy_Wl_Tzsh *tzsh;
E_Policy_Wl_Tzsh_Srv *tzsh_srv;
tzsh = _e_policy_wl_tzsh_get_from_client(ec);
if (tzsh->type == TZSH_TYPE_SRV)
{
- tzsh_srv = polwl->srvs[TZSH_SRV_ROLE_TVSERVICE];
- if (tzsh_srv)
- {
- tzsh2 = tzsh_srv->tzsh;
- if (tzsh2 == tzsh)
- _e_policy_wl_tzsh_srv_unregister_handle(tzsh_srv);
- }
-
tzsh_srv = polwl->srvs[TZSH_SRV_ROLE_SOFTKEY];
if (tzsh_srv)
{
}
}
}
- else
- {
- if (_e_policy_wl_tzsh_client_get_from_tzsh(tzsh))
- _e_policy_wl_tzsh_srv_tvsrv_bind_update();
- }
}
// --------------------------------------------------------
polwl->srvs[role] = tzsh_srv;
polwl->tzsh_srvs = eina_list_append(polwl->tzsh_srvs, tzsh_srv);
- _e_policy_wl_tzsh_srv_register_handle(tzsh_srv);
_e_policy_wl_tzsh_srv_state_broadcast(tzsh_srv, EINA_TRUE);
return tzsh_srv;
polwl->srvs[tzsh_srv->role] = NULL;
_e_policy_wl_tzsh_srv_state_broadcast(tzsh_srv, EINA_TRUE);
- _e_policy_wl_tzsh_srv_unregister_handle(tzsh_srv);
if (tzsh_srv->name)
eina_stringshare_del(tzsh_srv->name);
else if (!e_util_strcmp(name, "quickpanel_apps_menu" )) role = TZSH_SRV_ROLE_QUICKPANEL_APPS_MENU;
else if (!e_util_strcmp(name, "lockscreen" )) role = TZSH_SRV_ROLE_LOCKSCREEN;
else if (!e_util_strcmp(name, "indicator" )) role = TZSH_SRV_ROLE_INDICATOR;
- else if (!e_util_strcmp(name, "tvsrv" )) role = TZSH_SRV_ROLE_TVSERVICE;
else if (!e_util_strcmp(name, "screensaver_manager" )) role = TZSH_SRV_ROLE_SCREENSAVER_MNG;
else if (!e_util_strcmp(name, "screensaver" )) role = TZSH_SRV_ROLE_SCREENSAVER;
else if (!e_util_strcmp(name, "cbhm" )) role = TZSH_SRV_ROLE_CBHM;
return role;
}
-static E_Client *
-_e_policy_wl_tzsh_srv_parent_client_pick(void)
-{
- E_Policy_Wl_Tzsh *tzsh = NULL;
- E_Policy_Wl_Tzsh_Client *tzsh_client;
- E_Client *ec = NULL, *ec2;
- Eina_List *l;
-
- EINA_LIST_REVERSE_FOREACH(polwl->tvsrv_bind_list, l, tzsh_client)
- {
- tzsh = tzsh_client->tzsh;
- if (!tzsh) continue;
-
- ec2 = tzsh->ec;
- if (!ec2) continue;
- if (!_e_policy_wl_e_client_is_valid(ec2)) continue;
-
- ec = ec2;
- break;
- }
-
- return ec;
-}
-
-static void
-_e_policy_wl_tzsh_srv_tvsrv_bind_update(void)
-{
- E_Policy_Wl_Tzsh_Srv *tzsh_srv;
- E_Client *tzsh_client_ec = NULL;
- E_Client *tzsh_srv_ec = NULL;
-
- tzsh_srv = polwl->srvs[TZSH_SRV_ROLE_TVSERVICE];
- if ((tzsh_srv) && (tzsh_srv->tzsh))
- tzsh_srv_ec = tzsh_srv->tzsh->ec;
-
- tzsh_client_ec = _e_policy_wl_tzsh_srv_parent_client_pick();
-
- if ((tzsh_srv_ec) &&
- (tzsh_srv_ec->parent == tzsh_client_ec))
- return;
-
- if ((tzsh_client_ec) && (tzsh_srv_ec))
- {
- ELOGF("TZSH",
- "TR_SET |parent_ec:0x%08zx|child_ec:0x%08zx",
- NULL,
- e_client_util_win_get(tzsh_client_ec),
- e_client_util_win_get(tzsh_srv_ec));
-
- e_policy_stack_transient_for_set(tzsh_srv_ec, tzsh_client_ec);
- e_client_stack_below(tzsh_srv_ec, tzsh_client_ec);
- }
- else
- {
- if (tzsh_srv_ec)
- {
- ELOGF("TZSH",
- "TR_UNSET | |child_ec:0x%08zx",
- NULL,
- e_client_util_win_get(tzsh_srv_ec));
-
- e_policy_stack_transient_for_set(tzsh_srv_ec, NULL);
- }
- }
-}
-
-static void
-_e_policy_wl_tzsh_srv_register_handle(E_Policy_Wl_Tzsh_Srv *tzsh_srv)
-{
- E_Policy_Wl_Tzsh *tzsh;
-
- EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
-
- tzsh = tzsh_srv->tzsh;
- EINA_SAFETY_ON_NULL_RETURN(tzsh);
-
- switch (tzsh_srv->role)
- {
- case TZSH_SRV_ROLE_TVSERVICE:
- if (tzsh->ec) tzsh->ec->transient_policy = E_TRANSIENT_BELOW;
- _e_policy_wl_tzsh_srv_tvsrv_bind_update();
- break;
-
- default:
- break;
- }
-}
-
-static void
-_e_policy_wl_tzsh_srv_unregister_handle(E_Policy_Wl_Tzsh_Srv *tzsh_srv)
-{
- E_Policy_Wl_Tzsh *tzsh;
-
- EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
-
- tzsh = tzsh_srv->tzsh;
- EINA_SAFETY_ON_NULL_RETURN(tzsh);
-
- switch (tzsh_srv->role)
- {
- case TZSH_SRV_ROLE_TVSERVICE:
- _e_policy_wl_tzsh_srv_tvsrv_bind_update();
- break;
-
- default:
- break;
- }
-}
-
/* broadcast state of registered service to all subscribers */
static void
_e_policy_wl_tzsh_srv_state_broadcast(E_Policy_Wl_Tzsh_Srv *tzsh_srv, Eina_Bool reg)
return;
polwl->tzsh_clients = eina_list_remove(polwl->tzsh_clients, tzsh_client);
- polwl->tvsrv_bind_list = eina_list_remove(polwl->tvsrv_bind_list, tzsh_client);
if ((tzsh_client->tzsh) &&
(tzsh_client->tzsh->ec))
_tzsh_cb_qp_destroy);
}
-// --------------------------------------------------------
-// tizen_ws_shell_interface::tvservice
-// --------------------------------------------------------
-static void
-_tzsh_tvsrv_iface_cb_release(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tzsh_tvsrv)
-{
- wl_resource_destroy(res_tzsh_tvsrv);
-}
-
-static void
-_tzsh_tvsrv_iface_cb_bind(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tzsh_tvsrv)
-{
- E_Policy_Wl_Tzsh_Client *tzsh_client;
-
- tzsh_client = wl_resource_get_user_data(res_tzsh_tvsrv);
- EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
-
- if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
- return;
-
- polwl->tvsrv_bind_list = eina_list_append(polwl->tvsrv_bind_list, tzsh_client);
-
- _e_policy_wl_tzsh_srv_tvsrv_bind_update();
-}
-
-static void
-_tzsh_tvsrv_iface_cb_unbind(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tzsh_tvsrv)
-{
- E_Policy_Wl_Tzsh_Client *tzsh_client;
-
- tzsh_client = wl_resource_get_user_data(res_tzsh_tvsrv);
- EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
-
- if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
- return;
-
- polwl->tvsrv_bind_list = eina_list_remove(polwl->tvsrv_bind_list, tzsh_client);
-
- _e_policy_wl_tzsh_srv_tvsrv_bind_update();
-}
-
-static const struct tws_tvsrv_interface _tzsh_tvsrv_iface =
-{
- _tzsh_tvsrv_iface_cb_release,
- _tzsh_tvsrv_iface_cb_bind,
- _tzsh_tvsrv_iface_cb_unbind
-};
-
-static void
-_tzsh_cb_tvsrv_destroy(struct wl_resource *res_tzsh_tvsrv)
-{
- E_Policy_Wl_Tzsh_Client *tzsh_client;
-
- tzsh_client = wl_resource_get_user_data(res_tzsh_tvsrv);
- EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
-
- if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
- return;
-
- polwl->tvsrv_bind_list = eina_list_remove(polwl->tvsrv_bind_list, tzsh_client);
- _e_policy_wl_tzsh_srv_tvsrv_bind_update();
-
- tzsh_client->res_tzsh_client = NULL;
- _e_policy_wl_tzsh_client_del(tzsh_client);
-}
-
-static void
-_tzsh_iface_cb_tvsrv_get(struct wl_client *client, struct wl_resource *res_tzsh, uint32_t id, uint32_t surf_id)
-{
- E_Policy_Wl_Tzsh *tzsh;
- E_Policy_Wl_Tzsh_Client *tzsh_client;
- struct wl_resource *res_tzsh_tvsrv;
- E_Pixmap *cp;
- E_Client *ec;
-
- tzsh = wl_resource_get_user_data(res_tzsh);
- if (!tzsh)
- {
- wl_resource_post_error
- (res_tzsh,
- WL_DISPLAY_ERROR_INVALID_OBJECT,
- "Invalid res_tzsh's user data");
- return;
- }
-
- cp = _e_policy_wl_e_pixmap_get_from_id(client, surf_id);
- if (!cp)
- {
- wl_resource_post_error
- (res_tzsh,
- WL_DISPLAY_ERROR_INVALID_OBJECT,
- "Invalid surface id");
- return;
- }
-
- ec = e_pixmap_client_get(cp);
- if (ec)
- {
- if (!_e_policy_wl_e_client_is_valid(ec))
- {
- wl_resource_post_error
- (res_tzsh,
- WL_DISPLAY_ERROR_INVALID_OBJECT,
- "Invalid surface id");
- return;
- }
- }
-
- res_tzsh_tvsrv = wl_resource_create(client,
- &tws_tvsrv_interface,
- wl_resource_get_version(res_tzsh),
- id);
- if (!res_tzsh_tvsrv)
- {
- ERR("Could not create tws_tvsrv resource: %m");
- wl_client_post_no_memory(client);
- return;
- }
-
- _e_policy_wl_tzsh_data_set(tzsh, TZSH_TYPE_CLIENT, cp, ec);
-
- tzsh_client = _e_policy_wl_tzsh_client_add(tzsh, res_tzsh_tvsrv);
- if (!tzsh_client)
- {
- ERR("Could not create tzsh_client");
- wl_client_post_no_memory(client);
- wl_resource_destroy(res_tzsh_tvsrv);
- return;
- }
-
- wl_resource_set_implementation(res_tzsh_tvsrv,
- &_tzsh_tvsrv_iface,
- tzsh_client,
- _tzsh_cb_tvsrv_destroy);
-}
-
static void _tzsh_iface_cb_extension_get(struct wl_client *client, struct wl_resource *res_tzsh, uint32_t id, const char *name)
{
E_Policy_Wl_Tzsh *tzsh;
_tzsh_iface_cb_srv_create,
_tzsh_iface_cb_reg_create,
_tzsh_iface_cb_qp_get,
- _tzsh_iface_cb_tvsrv_get,
_tzsh_iface_cb_extension_get,
_tzsh_iface_cb_softkey_get,
_tzsh_iface_cb_shared_widget_launch_get,