typedef void (*E_Comp_Object_Stack_Func)(Evas_Object *obj, Evas_Object *stack);
#endif
+#ifdef REFACTOR_DESK_AREA
+EINTERN void
+_e_comp_object_raise(Evas_Object *obj)
+#else
static void
_e_comp_object_raise(Evas_Object *obj)
+#endif
{
evas_object_raise(obj);
_e_comp_object_transform_obj_stack_update(obj);
end:
+#endif
TRACE_DS_END();
}
_e_comp_intercept_raise(void *data, Evas_Object *obj)
{
E_Comp_Object *cw = data;
+#ifdef REFACTOR_DESK_AREA
+#else
Evas_Object *o;
Evas_Object *op;
+#endif
TRACE_DS_BEGIN(COMP:INTERCEPT RAISE);
+#ifdef REFACTOR_DESK_AREA
+ wl_signal_emit_mutable(&cw->events.raise, cw);
+#else
if ((cw->ec->layer_block) || (cw->ec->layer_pending))
{
if (cw->ec->layer_pending)
EINTERN void _e_comp_object_layers_add(E_Comp_Object *cw, E_Comp_Object *above, E_Comp_Object *below, Eina_Bool prepend);
EINTERN void _e_comp_object_layers_remove(E_Comp_Object *cw);
EINTERN void _e_comp_object_lower(E_Comp_Object *cw, Evas_Object *obj);
+EINTERN void _e_comp_object_raise(Evas_Object *obj);
EINTERN void e_comp_object_layer_set(Evas_Object *obj, short layer);
EINTERN void _e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target);
EINTERN void _e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target);
static void
_desk_area_cb_comp_object_raise(struct wl_listener *listener, void *data)
{
- // TODO:
+ E_Desk_Area_Private_Client *eda_client;
+ E_Client *ec;
+ Evas_Object *obj, *o, *op;
+ E_Comp_Object *cw;
+
+ eda_client = wl_container_of(listener, eda_client, comp_object_raise);
+ ec = eda_client->ec;
+ obj = ec->frame;
+ cw = (E_Comp_Object *)data;
+
+ if ((cw->ec->layer_block) || (cw->ec->layer_pending))
+ {
+ if (cw->ec->layer_pending)
+ {
+ int obj_layer = evas_object_layer_get(obj);
+ if (cw->ec->layer != obj_layer)
+ e_comp_object_layer_update(obj, NULL, NULL);
+ }
+
+ _e_comp_object_raise(obj);
+ return;
+ }
+ if (!EINA_INLIST_GET(cw->ec)->next) return;//already highest on layer
+ o = evas_object_above_get(obj);
+ if (evas_object_layer_get(o) != evas_object_layer_get(obj)) return; //already at top!
+
+ /* still stack below override below the layer marker */
+ for (op = o = e_comp->layers[cw->layer].obj;
+ o && o != e_comp->layers[cw->layer - 1].obj;
+ op = o, o = evas_object_below_get(o))
+ {
+ if (evas_object_smart_smart_get(o))
+ {
+ E_Client *ec;
+
+ ec = e_comp_object_client_get(o);
+ if (ec && (!ec->override)) break;
+ }
+ }
+ _e_comp_object_stack_below(obj, op);
+ e_client_focus_defer_set(cw->ec);
+
+ if (!cw->visible) return;
+ e_comp_render_queue();
+ _e_comp_object_transform_obj_stack_update(obj);
}
static void