TZSH_SRV_ROLE_MAX
} Tzsh_Srv_Role;
+typedef enum _Tzsh_Client_Handle_Type
+{
+ TZSH_CLIENT_HANDLE_TYPE_NONE = 0,
+ TZSH_CLIENT_HANDLE_TYPE_QUICKPANEL = 1,
+ TZSH_CLIENT_HANDLE_TYPE_SHARED_WIDGET_LAUNCH = 2,
+} Tzsh_Client_Handle_Type;
+
typedef enum _Tzsh_Type
{
TZSH_TYPE_UNKNOWN = 0,
{
E_Policy_Wl_Tzsh *tzsh;
struct wl_resource *res_tzsh_client;
- Eina_Bool qp_client;
- E_Quickpanel_Type qp_type;
- Eina_Bool swl_client;
+ Tzsh_Client_Handle_Type handle_type;
E_Pixmap *ep;
E_Client *ec;
+ void *client_data;
} E_Policy_Wl_Tzsh_Client;
+typedef struct _E_Policy_Wl_Tzsh_Client_Data_Quickpanel
+{
+ E_Quickpanel_Type type;
+} E_Policy_Wl_Tzsh_Client_Data_Quickpanel;
+
typedef struct _E_Policy_Wl_Tzsh_Region
{
E_Policy_Wl_Tzsh *tzsh;
_print_tzsh_client_info();
#endif
- if (tzsh_client->ec)
- {
- if (tzsh_client->qp_client)
- e_qp_client_del(tzsh_client->ec,
- tzsh_client->qp_type);
- if (tzsh_client->swl_client)
- e_service_launcher_release_shared_widget_launch(tzsh_client->ec);
- }
-
if (tzsh_client->res_tzsh_client)
wl_resource_set_user_data(tzsh_client->res_tzsh_client, NULL);
// --------------------------------------------------------
// tizen_ws_shell_interface::quickpanel
// --------------------------------------------------------
+static void
+_tzsh_client_data_quickpanel_type_set(E_Policy_Wl_Tzsh_Client_Data_Quickpanel *quickpanel_client, E_Quickpanel_Type type)
+{
+ if (quickpanel_client)
+ quickpanel_client->type = type;
+}
+
+static E_Quickpanel_Type
+_tzsh_client_data_quickpanel_type_get(E_Policy_Wl_Tzsh_Client_Data_Quickpanel *quickpanel_client)
+{
+ if (!quickpanel_client)
+ return E_QUICKPANEL_TYPE_UNKNOWN;
+ else
+ return quickpanel_client->type;
+}
+
static void
_e_tzsh_qp_state_change_send(struct wl_resource *res_tzsh_client, int type, int value)
{
wl_array_release(&states);
}
+static Eina_Bool
+_e_tzsh_qp_client_data_type_check(E_Policy_Wl_Tzsh_Client *tzsh_client, E_Quickpanel_Type type)
+{
+ E_Policy_Wl_Tzsh_Client_Data_Quickpanel *tzsh_client_quickpanel;
+
+ if (!tzsh_client)
+ return EINA_FALSE;
+
+ if (tzsh_client->handle_type != TZSH_CLIENT_HANDLE_TYPE_QUICKPANEL)
+ return EINA_FALSE;
+
+ tzsh_client_quickpanel = (E_Policy_Wl_Tzsh_Client_Data_Quickpanel*)tzsh_client->client_data;
+ if (!tzsh_client_quickpanel)
+ return EINA_FALSE;
+
+ if (_tzsh_client_data_quickpanel_type_get(tzsh_client_quickpanel) != type)
+ return EINA_FALSE;
+
+ return EINA_TRUE;
+}
+
E_API void
e_tzsh_qp_state_visible_update(E_Client *ec, Eina_Bool vis, E_Quickpanel_Type type)
{
EINA_LIST_FOREACH(polwl->tzsh_clients, l, tzsh_client)
{
/* check for type of qp */
- if (tzsh_client->qp_type != type) continue;
+ if (!_e_tzsh_qp_client_data_type_check(tzsh_client, type))
+ continue;
if (!tzsh_client->tzsh) continue;
if (!tzsh_client->ec) continue;
EINA_LIST_FOREACH(polwl->tzsh_clients, l, tzsh_client)
{
/* check for type of qp */
- if (tzsh_client->qp_type != type) continue;
+ if (!_e_tzsh_qp_client_data_type_check(tzsh_client, type))
+ continue;
if (!tzsh_client->tzsh) continue;
if (!tzsh_client->ec) continue;
EINA_LIST_FOREACH(polwl->tzsh_clients, l, tzsh_client)
{
/* check for type of qp */
- if (tzsh_client->qp_type != type) continue;
+ if (!_e_tzsh_qp_client_data_type_check(tzsh_client, type))
+ continue;
if (!tzsh_client->tzsh) continue;
if (!tzsh_client->ec) continue;
wl_resource_destroy(res_tzsh_qp);
}
+static E_Quickpanel_Type
+_e_tzsh_qp_type_get(E_Policy_Wl_Tzsh_Client *tzsh_client)
+{
+ E_Policy_Wl_Tzsh_Client_Data_Quickpanel *tzsh_client_quickpanel;
+ tzsh_client_quickpanel = (E_Policy_Wl_Tzsh_Client_Data_Quickpanel*)tzsh_client->client_data;
+ if (!tzsh_client_quickpanel)
+ return E_QUICKPANEL_TYPE_UNKNOWN;
+ else
+ return _tzsh_client_data_quickpanel_type_get(tzsh_client_quickpanel);
+}
+
+
static void
_tzsh_qp_iface_cb_show(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tzsh_qp)
{
EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->tzsh);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->ec);
+ EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->handle_type != TZSH_CLIENT_HANDLE_TYPE_QUICKPANEL);
- /* unexpected case: this client doesn't have specific quickpanel type */
- EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
+ E_Quickpanel_Type qp_type = _e_tzsh_qp_type_get(tzsh_client);
+ EINA_SAFETY_ON_TRUE_RETURN(qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
ec = tzsh_client->ec;
if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
return;
- e_qp_client_show(ec, tzsh_client->qp_type);
+ e_qp_client_show(ec, qp_type);
}
static void
EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->tzsh);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->ec);
+ EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->handle_type != TZSH_CLIENT_HANDLE_TYPE_QUICKPANEL);
- /* unexpected case: this client doesn't have specific quickpanel type */
- EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
+ E_Quickpanel_Type qp_type = _e_tzsh_qp_type_get(tzsh_client);
+ EINA_SAFETY_ON_TRUE_RETURN(qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
ec = tzsh_client->ec;
if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
return;
- e_qp_client_hide(ec, tzsh_client->qp_type);
+ e_qp_client_hide(ec, qp_type);
}
static void
EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->tzsh);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->ec);
+ EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->handle_type != TZSH_CLIENT_HANDLE_TYPE_QUICKPANEL);
- /* unexpected case: this client doesn't have specific quickpanel type */
- EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
+ E_Quickpanel_Type qp_type = _e_tzsh_qp_type_get(tzsh_client);
+ EINA_SAFETY_ON_TRUE_RETURN(qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
ec = tzsh_client->ec;
if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
return;
- e_qp_client_scrollable_state_set(ec, tzsh_client->qp_type, E_QUICKPANEL_CLIENT_SCROLL_STATE_SET);
+ e_qp_client_scrollable_state_set(ec, qp_type, E_QUICKPANEL_CLIENT_SCROLL_STATE_SET);
}
static void
EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->tzsh);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->ec);
+ EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->handle_type != TZSH_CLIENT_HANDLE_TYPE_QUICKPANEL);
- /* unexpected case: this client doesn't have specific quickpanel type */
- EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
+ E_Quickpanel_Type qp_type = _e_tzsh_qp_type_get(tzsh_client);
+ EINA_SAFETY_ON_TRUE_RETURN(qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
ec = tzsh_client->ec;
if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
return;
- e_qp_client_scrollable_state_set(ec, tzsh_client->qp_type, E_QUICKPANEL_CLIENT_SCROLL_STATE_UNSET);
+ e_qp_client_scrollable_state_set(ec, qp_type, E_QUICKPANEL_CLIENT_SCROLL_STATE_UNSET);
}
static void
EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->tzsh);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->ec);
+ EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->handle_type != TZSH_CLIENT_HANDLE_TYPE_QUICKPANEL);
- /* unexpected case: this client doesn't have specific quickpanel type */
- EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
+ E_Quickpanel_Type qp_type = _e_tzsh_qp_type_get(tzsh_client);
+ EINA_SAFETY_ON_TRUE_RETURN(qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
ec = tzsh_client->ec;
{
case TWS_QUICKPANEL_STATE_TYPE_VISIBILITY:
val = TWS_QUICKPANEL_STATE_VALUE_VISIBLE_HIDE;
- vis = e_qp_visible_get(ec, tzsh_client->qp_type);
+ vis = e_qp_visible_get(ec, qp_type);
if (vis) val = TWS_QUICKPANEL_STATE_VALUE_VISIBLE_SHOW;
break;
case TWS_QUICKPANEL_STATE_TYPE_SCROLLABLE:
- scrollable = e_qp_client_scrollable_state_get(ec, tzsh_client->qp_type);
+ scrollable = e_qp_client_scrollable_state_get(ec, qp_type);
if (scrollable == E_QUICKPANEL_CLIENT_SCROLL_STATE_UNSET)
val = TWS_QUICKPANEL_STATE_VALUE_SCROLLABLE_UNSET;
else if (scrollable == E_QUICKPANEL_CLIENT_SCROLL_STATE_SET)
val = TWS_QUICKPANEL_STATE_VALUE_SCROLLABLE_SET;
break;
case TWS_QUICKPANEL_STATE_TYPE_ORIENTATION:
- ridx = e_qp_orientation_get(ec, tzsh_client->qp_type);
+ ridx = e_qp_orientation_get(ec, qp_type);
val = TWS_QUICKPANEL_STATE_VALUE_ORIENTATION_0 + ridx;
break;
default:
EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->tzsh);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->ec);
+ EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->handle_type != TZSH_CLIENT_HANDLE_TYPE_QUICKPANEL);
+
+ E_Policy_Wl_Tzsh_Client_Data_Quickpanel *tzsh_client_quickpanel;
+ tzsh_client_quickpanel = (E_Policy_Wl_Tzsh_Client_Data_Quickpanel*)tzsh_client->client_data;
+ EINA_SAFETY_ON_NULL_RETURN(tzsh_client_quickpanel);
- /* unexpected case: this client has already specific quickpanel type */
- EINA_SAFETY_ON_FALSE_RETURN(tzsh_client->qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
+ E_Quickpanel_Type qp_type = _tzsh_client_data_quickpanel_type_get(tzsh_client_quickpanel);
+ EINA_SAFETY_ON_TRUE_RETURN(qp_type != E_QUICKPANEL_TYPE_UNKNOWN);
+
+ _tzsh_client_data_quickpanel_type_set(tzsh_client_quickpanel, type);
- tzsh_client->qp_type = (E_Quickpanel_Type)type;
ec = tzsh_client->ec;
if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->tzsh);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client->ec);
+ EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->handle_type != TZSH_CLIENT_HANDLE_TYPE_QUICKPANEL);
- /* unexpected case: this client doesn't have specific quickpanel type */
- EINA_SAFETY_ON_TRUE_RETURN(tzsh_client->qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
+ E_Quickpanel_Type qp_type = _e_tzsh_qp_type_get(tzsh_client);
+ EINA_SAFETY_ON_TRUE_RETURN(qp_type == E_QUICKPANEL_TYPE_UNKNOWN);
ec = tzsh_client->ec;
if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
return;
if (state == TWS_QUICKPANEL_STATE_VALUE_SCROLLABLE_UNSET)
- e_qp_client_scrollable_state_set(ec, tzsh_client->qp_type, E_QUICKPANEL_CLIENT_SCROLL_STATE_UNSET);
+ e_qp_client_scrollable_state_set(ec, qp_type, E_QUICKPANEL_CLIENT_SCROLL_STATE_UNSET);
else if (state == TWS_QUICKPANEL_STATE_VALUE_SCROLLABLE_SET)
- e_qp_client_scrollable_state_set(ec, tzsh_client->qp_type, E_QUICKPANEL_CLIENT_SCROLL_STATE_SET);
+ e_qp_client_scrollable_state_set(ec, qp_type, E_QUICKPANEL_CLIENT_SCROLL_STATE_SET);
else if (state == TWS_QUICKPANEL_STATE_VALUE_SCROLLABLE_RETAIN)
- e_qp_client_scrollable_state_set(ec, tzsh_client->qp_type, E_QUICKPANEL_CLIENT_SCROLL_STATE_RETAIN);
-
+ e_qp_client_scrollable_state_set(ec, qp_type, E_QUICKPANEL_CLIENT_SCROLL_STATE_RETAIN);
}
static const struct tws_quickpanel_interface _tzsh_qp_iface =
tzsh_client = wl_resource_get_user_data(res_tzsh_qp);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
- tzsh_client->res_tzsh_client = NULL;
+ E_Quickpanel_Type qp_type =
+ _tzsh_client_data_quickpanel_type_get((E_Policy_Wl_Tzsh_Client_Data_Quickpanel*)tzsh_client->client_data);
+ e_qp_client_del(tzsh_client->ec, qp_type);
+ E_FREE(tzsh_client->client_data);
+
+ tzsh_client->res_tzsh_client = NULL;
_e_policy_wl_tzsh_client_del(tzsh_client);
}
+static E_Policy_Wl_Tzsh_Client_Data_Quickpanel *
+_tzsh_client_data_quickpanel_new(void)
+{
+ E_Policy_Wl_Tzsh_Client_Data_Quickpanel *tzsh_client_quickpanel;
+
+ tzsh_client_quickpanel = E_NEW(E_Policy_Wl_Tzsh_Client_Data_Quickpanel, 1);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(tzsh_client_quickpanel, NULL);
+
+ tzsh_client_quickpanel->type = E_QUICKPANEL_TYPE_UNKNOWN;
+ return tzsh_client_quickpanel;
+}
+
static void
_tzsh_iface_cb_qp_get(struct wl_client *client, struct wl_resource *res_tzsh, uint32_t id, uint32_t surf_id)
{
return;
}
- tzsh_client->qp_client = EINA_TRUE;
- tzsh_client->qp_type = E_QUICKPANEL_TYPE_UNKNOWN;
+ tzsh_client->handle_type = TZSH_CLIENT_HANDLE_TYPE_QUICKPANEL;
+ tzsh_client->client_data = _tzsh_client_data_quickpanel_new();
+ if (!tzsh_client->client_data)
+ {
+ ERR("Could not create tzsh_client");
+ wl_client_post_no_memory(client);
+ return;
+ }
/* Since various types of qp are supported, one ec can be used for handler for
* two or more qp types. So e_qp_client_add function is called at the callback
tzsh_client = wl_resource_get_user_data(res_tzsh_swl);
EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
+ e_service_launcher_release_shared_widget_launch(tzsh_client->ec);
+
tzsh_client->res_tzsh_client = NULL;
_e_policy_wl_tzsh_client_del(tzsh_client);
}
return;
}
- tzsh_client->swl_client = EINA_TRUE;
+ tzsh_client->handle_type = TZSH_CLIENT_HANDLE_TYPE_SHARED_WIDGET_LAUNCH;
wl_resource_set_implementation(res_tzsh_swl,
&_tzsh_swl_iface,