#define DESK_EC_DATA_KEY "E_Desk_Client"
+#define PRI(desk) ((E_Desk_Private *)e_object_data_get(E_OBJECT(desk)))
+
+#define API_ENTRY \
+ EINA_SAFETY_ON_NULL_RETURN(desk); \
+ E_Desk_Private *priv = PRI(desk)
+
#define E_DESK_SMART_DATA_GET(obj, ptr) \
E_Desk_Smart_Data *ptr = evas_object_smart_data_get(obj);
+#define API_ENTRY_VAL(ret) \
+ EINA_SAFETY_ON_NULL_RETURN_VAL(desk, ret); \
+ E_Desk_Private *priv = PRI(desk)
+
#define E_DESK_SMART_DATA_GET_OR_RETURN(obj, ptr) \
E_DESK_SMART_DATA_GET(obj, ptr); \
if (!ptr) return
+typedef struct _E_Desk_Private E_Desk_Private;
typedef struct _E_Desk_Smart_Data E_Desk_Smart_Data;
typedef enum _E_Desk_Zoom_Animating_Type
E_DESK_ZOOM_ANIMATING_TYPE_DISABLE,
} E_Desk_Zoom_Animating_Type;
+struct _E_Desk_Private
+{
+ struct
+ {
+ struct wl_signal client_add;
+ struct wl_signal desk_area_enable;
+ struct wl_signal desk_area_disable;
+ struct wl_signal desk_area_active_change;
+ } events;
+};
+
struct _E_Desk_Smart_Data
{
Evas_Object_Smart_Clipped_Data base;
E_API int E_EVENT_DESK_ZOOM_SET = 0;
E_API int E_EVENT_DESK_ZOOM_UNSET = 0;
+static Eina_Bool
+_e_desk_private_init(E_Desk *desk)
+{
+ E_Desk_Private *priv;
+
+ priv = E_NEW(E_Desk_Private, 1);
+ if (!priv)
+ return EINA_FALSE;
+
+ wl_signal_init(&priv->events.client_add);
+ wl_signal_init(&priv->events.desk_area_enable);
+ wl_signal_init(&priv->events.desk_area_disable);
+ wl_signal_init(&priv->events.desk_area_active_change);
+
+ e_object_data_set(E_OBJECT(desk), priv);
+
+ return EINA_TRUE;
+}
+
+static void
+_e_desk_private_finish(E_Desk *desk)
+{
+ E_Desk_Private *priv;
+
+ priv = PRI(desk);
+ e_object_data_set(E_OBJECT(desk), NULL);
+
+ free(priv);
+}
static void
_e_desk_event_simple_free(void *d EINA_UNUSED, E_Event_Desk *event)
desk = E_OBJECT_ALLOC(E_Desk, E_DESK_TYPE, _e_desk_free);
if (!desk) return NULL;
+ if (!_e_desk_private_init(desk))
+ {
+ e_object_del(E_OBJECT(desk));
+ return NULL;
+ }
+
desk->zone = zone;
desk->x = x;
desk->y = y;
_e_desk_client_data_set(desk, ec);
#ifdef REFACTOR_ZONE_DESK
+ wl_signal_emit_mutable(&PRI(desk)->events.client_add, desk);
_e_desk_hook_call(E_DESK_HOOK_CLIENT_ADD, desk);
#endif
eina_stringshare_del(desk->name);
desk->name = NULL;
E_FREE_LIST(desk->handlers, ecore_event_handler_del);
+
+ _e_desk_private_finish(desk);
free(desk);
}
desk->desk_area.active = eda;
+ wl_signal_emit_mutable(&PRI(desk)->events.desk_area_active_change, desk);
_e_desk_hook_call(E_DESK_HOOK_DESK_AREA_ACTIVE_CHANGE, desk);
}
if (desk->desk_area.enable) return EINA_TRUE;
desk->desk_area.enable = EINA_TRUE;
+ wl_signal_emit_mutable(&PRI(desk)->events.desk_area_enable, desk);
_e_desk_hook_call(E_DESK_HOOK_DESK_AREA_ENABLE, desk);
// check all ec is included in desk group
if (!desk->desk_area.enable) return EINA_TRUE;
desk->desk_area.enable = EINA_FALSE;
+ wl_signal_emit_mutable(&PRI(desk)->events.desk_area_disable, desk);
_e_desk_hook_call(E_DESK_HOOK_DESK_AREA_DISABLE, desk);
for (int i=0; i<E_DESK_AREA_LAYER_COUNT; i++)
return EINA_FALSE;
}
+
+EINTERN void
+e_desk_client_add_listener_add(E_Zone *desk, struct wl_listener *listener)
+{
+ API_ENTRY;
+ wl_signal_add(&priv->events.client_add, listener);
+}
+
+EINTERN struct wl_listener *
+e_desk_client_add_listener_get(E_Zone *desk, wl_notify_func_t notify)
+{
+ API_ENTRY_VAL(NULL);
+ return wl_signal_get(&priv->events.client_add, notify);
+}
+
+EINTERN void
+e_desk_desk_area_enable_listener_add(E_Zone *desk, struct wl_listener *listener)
+{
+ API_ENTRY;
+ wl_signal_add(&priv->events.desk_area_enable, listener);
+}
+
+EINTERN struct wl_listener *
+e_desk_desk_area_enable_listener_get(E_Zone *desk, wl_notify_func_t notify)
+{
+ API_ENTRY_VAL(NULL);
+ return wl_signal_get(&priv->events.desk_area_enable, notify);
+}
+
+EINTERN void
+e_desk_desk_area_disable_listener_add(E_Zone *desk, struct wl_listener *listener)
+{
+ API_ENTRY;
+ wl_signal_add(&priv->events.desk_area_disable, listener);
+}
+
+EINTERN struct wl_listener *
+e_desk_desk_area_disable_listener_get(E_Zone *desk, wl_notify_func_t notify)
+{
+ API_ENTRY_VAL(NULL);
+ return wl_signal_get(&priv->events.desk_area_disable, notify);
+}
+
+EINTERN void
+e_desk_desk_area_active_change_listener_add(E_Zone *desk, struct wl_listener *listener)
+{
+ API_ENTRY;
+ wl_signal_add(&priv->events.desk_area_active_change, listener);
+}
+
+EINTERN struct wl_listener *
+e_desk_desk_area_active_change_listener_get(E_Zone *desk, wl_notify_func_t notify)
+{
+ API_ENTRY_VAL(NULL);
+ return wl_signal_get(&priv->events.desk_area_active_change, notify);
+}