TZSH_CLIENT_HANDLE_TYPE_NONE = 0,
TZSH_CLIENT_HANDLE_TYPE_QUICKPANEL = 1,
TZSH_CLIENT_HANDLE_TYPE_SHARED_WIDGET_LAUNCH = 2,
+ TZSH_CLIENT_HANDLE_TYPE_SOFTKEY = 3,
} Tzsh_Client_Handle_Type;
typedef enum _Tzsh_Type
E_Quickpanel_Type type;
} E_Policy_Wl_Tzsh_Client_Data_Quickpanel;
+typedef struct _E_Policy_Wl_Tzsh_Client_Data_Softkey
+{
+ int show_state;
+} E_Policy_Wl_Tzsh_Client_Data_Softkey;
+
typedef struct _E_Policy_Wl_Tzsh_Region
{
E_Policy_Wl_Tzsh *tzsh;
}
static void
-_tzsh_softkey_iface_cb_show(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tzsh_softkey)
+_tzsh_softkey_show(E_Client *ec)
{
- E_Policy_Wl_Tzsh_Client *tzsh_client;
-
- ELOGF("TZ_SOFTKEY", "Request to Show softkey", NULL);
-
- if (!e_config->use_softkey && !e_config->use_softkey_service)
- return;
-
- tzsh_client = wl_resource_get_user_data(res_tzsh_softkey);
- EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
- EINA_SAFETY_ON_NULL_RETURN(tzsh_client->tzsh);
- EINA_SAFETY_ON_NULL_RETURN(tzsh_client->ec);
-
- if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
- return;
+ if (!ec) return;
+ if (!ec->zone) return;
if (e_config->use_softkey)
{
E_Policy_Softkey *softkey;
- softkey = e_policy_softkey_get(tzsh_client->ec->zone);
+ softkey = e_policy_softkey_get(ec->zone);
if (softkey)
{
ELOGF("TZ_SOFTKEY", "SHOW softkey", NULL);
if (e_config->use_softkey_service)
{
E_Service_Softkey *softkey_service;
- softkey_service = e_service_softkey_get(tzsh_client->ec->zone);
+ softkey_service = e_service_softkey_get(ec->zone);
if (softkey_service)
{
ELOGF("TZ_SOFTKEY", "Request to SHOW softkey service. (service:%p)", NULL, softkey_service);
}
else
{
- ELOGF("TZ_SOFTKEY", "There is no softkey service. store show request", tzsh_client->ec);
- e_service_softkey_store_visible_request(tzsh_client->ec, 1);
+ ELOGF("TZ_SOFTKEY", "There is no softkey service. store show request", ec);
+ e_service_softkey_store_visible_request(ec, 1);
}
}
}
static void
-_tzsh_softkey_iface_cb_hide(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tzsh_softkey)
+_tzsh_softkey_iface_cb_show(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tzsh_softkey)
{
E_Policy_Wl_Tzsh_Client *tzsh_client;
- ELOGF("TZ_SOFTKEY", "Request to Hide softkey", NULL);
+ ELOGF("TZ_SOFTKEY", "Request to Show softkey", NULL);
if (!e_config->use_softkey && !e_config->use_softkey_service)
return;
if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
return;
+ E_Policy_Wl_Tzsh_Client_Data_Softkey *tzsh_client_data_softkey;
+ tzsh_client_data_softkey = (E_Policy_Wl_Tzsh_Client_Data_Softkey*)tzsh_client->client_data;
+ EINA_SAFETY_ON_NULL_RETURN(tzsh_client_data_softkey);
+
+ if (tzsh_client_data_softkey->show_state == 1)
+ return;
+
+ tzsh_client_data_softkey->show_state = 1;
+ _tzsh_softkey_show(tzsh_client->ec);
+}
+
+static void
+_tzsh_softkey_hide(E_Client *ec)
+{
+ if (!ec) return;
+ if (!ec->zone) return;
+
if (e_config->use_softkey)
{
E_Policy_Softkey *softkey;
- softkey = e_policy_softkey_get(tzsh_client->ec->zone);
+ softkey = e_policy_softkey_get(ec->zone);
if (softkey)
{
ELOGF("TZ_SOFTKEY", "HIDE softkey", NULL);
if (e_config->use_softkey_service)
{
E_Service_Softkey *softkey_service;
- softkey_service = e_service_softkey_get(tzsh_client->ec->zone);
+ softkey_service = e_service_softkey_get(ec->zone);
if (softkey_service)
{
ELOGF("TZ_SOFTKEY", "Request to HIDE softkey service. (service:%p)", NULL, softkey_service);
}
else
{
- ELOGF("TZ_SOFTKEY", "There is no softkey service. store hide request", tzsh_client->ec);
- e_service_softkey_store_visible_request(tzsh_client->ec, 0);
+ ELOGF("TZ_SOFTKEY", "There is no softkey service. store hide request", ec);
+ e_service_softkey_store_visible_request(ec, 0);
}
}
}
static void
+_tzsh_softkey_iface_cb_hide(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tzsh_softkey)
+{
+ E_Policy_Wl_Tzsh_Client *tzsh_client;
+
+ ELOGF("TZ_SOFTKEY", "Request to Hide softkey", NULL);
+
+ if (!e_config->use_softkey && !e_config->use_softkey_service)
+ return;
+
+ tzsh_client = wl_resource_get_user_data(res_tzsh_softkey);
+ EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
+ EINA_SAFETY_ON_NULL_RETURN(tzsh_client->tzsh);
+ EINA_SAFETY_ON_NULL_RETURN(tzsh_client->ec);
+
+ if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
+ return;
+
+ E_Policy_Wl_Tzsh_Client_Data_Softkey *tzsh_client_data_softkey;
+ tzsh_client_data_softkey = (E_Policy_Wl_Tzsh_Client_Data_Softkey*)tzsh_client->client_data;
+ EINA_SAFETY_ON_NULL_RETURN(tzsh_client_data_softkey);
+
+ if (tzsh_client_data_softkey->show_state == 0)
+ return;
+
+ tzsh_client_data_softkey->show_state = 0;
+ _tzsh_softkey_hide(tzsh_client->ec);
+}
+
+static void
_tzsh_softkey_iface_cb_state_set(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tzsh_softkey, int32_t type, int32_t val)
{
E_Policy_Wl_Tzsh_Client *tzsh_client;
_tzsh_softkey_iface_cb_state_get
};
+static E_Policy_Wl_Tzsh_Client_Data_Softkey *
+_tzsh_client_data_softkey_new(void)
+{
+ E_Policy_Wl_Tzsh_Client_Data_Softkey *tzsh_client_data_softkey;
+
+ tzsh_client_data_softkey = E_NEW(E_Policy_Wl_Tzsh_Client_Data_Softkey, 1);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(tzsh_client_data_softkey, NULL);
+
+ tzsh_client_data_softkey->show_state = 1;
+ return tzsh_client_data_softkey;
+}
+
static void
_tzsh_cb_softkey_destroy(struct wl_resource *res_tzsh_softkey)
{
tzsh_client = wl_resource_get_user_data(res_tzsh_softkey);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
+ E_Policy_Wl_Tzsh_Client_Data_Softkey *tzsh_client_data_softkey;
+ tzsh_client_data_softkey = (E_Policy_Wl_Tzsh_Client_Data_Softkey*)tzsh_client->client_data;
+ if (tzsh_client_data_softkey)
+ {
+ if (tzsh_client_data_softkey->show_state == 0)
+ {
+ ELOGF("TZ_SOFTKEY", "Request to Show softkey by destroying client", NULL);
+ _tzsh_softkey_show(tzsh_client->ec);
+ }
+ }
+ E_FREE(tzsh_client->client_data);
+
tzsh_client->res_tzsh_client = NULL;
_e_policy_wl_tzsh_client_del(tzsh_client);
}
return;
}
+ tzsh_client->handle_type = TZSH_CLIENT_HANDLE_TYPE_SOFTKEY;
+ tzsh_client->client_data = _tzsh_client_data_softkey_new();
+ if (!tzsh_client->client_data)
+ {
+ ERR("Could not create tzsh_client");
+ _e_policy_wl_tzsh_client_del(tzsh_client);
+ wl_resource_destroy(res_tzsh_softkey);
+ wl_client_post_no_memory(client);
+ return;
+ }
+
wl_resource_set_implementation(res_tzsh_softkey,
&_tzsh_softkey_iface,
tzsh_client,