E_API E_Client *
e_client_above_get(const E_Client *ec)
{
+#ifdef REFACTOR_DESK_AREA
+ E_Client_Data_Get_Above data;
+
+ E_OBJECT_CHECK_RETURN(ec, NULL);
+ E_OBJECT_TYPE_CHECK_RETURN(ec, E_CLIENT_TYPE, NULL);
+
+ data.above_ec = NULL;
+
+ wl_signal_emit_mutable(&PRI(ec)->events.get_above, &data);
+
+ return data.above_ec;
+#else
unsigned int x;
E_Client *ec2;
g_rec_mutex_unlock(&e_comp->ec_list_mutex);
return NULL;
+#endif
}
E_API E_Client *
typedef struct E_Client E_Client;
+typedef struct _E_Client_Data_Get_Above
+{
+ E_Client *above_ec; // returned above_ec
+} E_Client_Data_Get_Above;
+
EINTERN void e_client_eval_pre_fetch_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_eval_fetch_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_eval_pre_post_fetch_listener_add(E_Client *ec, struct wl_listener *listener);
static void
_desk_area_cb_client_get_above(struct wl_listener *listener, void *data)
{
- // TODO:
+ E_Desk_Area_Private_Client *eda_client;
+ E_Client_Data_Get_Above *get_above_data = data;
+ E_Desk_Area *eda;
+ E_Client *ec, *ec2;
+ unsigned int x;
+
+ eda_client = wl_container_of(listener, eda_client, client_get_above);
+ ec = eda_client->ec;
+ eda = eda_client->eda;
+
+ if (EINA_INLIST_GET(ec)->next) //check current layer
+ {
+ EINA_INLIST_FOREACH(EINA_INLIST_GET(ec)->next, ec2)
+ {
+ if (ec == ec2)
+ {
+ ELOGF("FATAL", "CHECK the ec inlist next", ec);
+ continue;
+ }
+ if (!e_object_is_del(E_OBJECT(ec2)))
+ {
+ get_above_data->above_ec = ec2;
+ return;
+ }
+ }
+ }
+
+ if (ec->layer == E_LAYER_CLIENT_CURSOR) return;
+ if (e_comp_canvas_client_layer_map(ec->layer) == 9999) return;
+
+ g_rec_mutex_lock(&e_comp->ec_list_mutex);
+
+ /* go up the layers until we find one */
+ for (x = e_comp_canvas_layer_map(ec->layer) + 1; x <= e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); x++)
+ {
+ if (!e_comp->layers[x].clients) continue;
+
+ EINA_INLIST_FOREACH(e_comp->layers[x].clients, ec2)
+ {
+ if (ec == ec2)
+ {
+ ELOGF("FATAL", "[eda:%p] EC exist above layer. ec layer_map:%d, cur layer_map:%d",
+ ec, eda, e_comp_canvas_layer_map(ec->layer), x);
+ continue;
+ }
+ if (!e_object_is_del(E_OBJECT(ec2)))
+ {
+ get_above_data->above_ec = ec2;
+ g_rec_mutex_unlock(&e_comp->ec_list_mutex);
+ return;
+ }
+ }
+ }
+
+ g_rec_mutex_unlock(&e_comp->ec_list_mutex);
}
static void