enlightenment/src/bin/e_wayland/e_manager.c

125 lines
2.3 KiB
C

#include "e.h"
/* local function prototypes */
static void _e_manager_cb_free(E_Manager *man);
/* local variables */
static Eina_List *_managers = NULL;
EINTERN int
e_manager_init(void)
{
return 1;
}
EINTERN int
e_manager_shutdown(void)
{
E_FREE_LIST(_managers, e_object_del);
return 1;
}
EAPI Eina_List *
e_manager_list(void)
{
return _managers;
}
EAPI E_Manager *
e_manager_new(E_Output *output, unsigned int num)
{
E_Manager *man;
/* try to create new manager object */
if (!(man = E_OBJECT_ALLOC(E_Manager, E_MANAGER_TYPE, _e_manager_cb_free)))
return NULL;
/* set manager properties */
man->num = num;
man->x = output->x;
man->y = output->y;
man->w = output->w;
man->h = output->h;
/* add this manager to the list */
_managers = eina_list_append(_managers, man);
return man;
}
EAPI E_Manager *
e_manager_current_get(void)
{
Eina_List *l;
E_Manager *man;
Evas_Coord x, y;
if (!_managers) return NULL;
/* get the current mouse position */
ecore_wl_pointer_xy_get(&x, &y);
/* loop the list of managers */
EINA_LIST_FOREACH(_managers, l, man)
{
/* test if the mouse is inside this manager */
if (E_INSIDE(x, y, man->x, man->y, man->w, man->h))
return man;
}
/* return the current manager pointed to by the list */
return eina_list_data_get(_managers);
}
EAPI void
e_manager_show(E_Manager *man)
{
E_Container *con;
Eina_List *l;
/* check for valid manager */
E_OBJECT_CHECK(man);
E_OBJECT_TYPE_CHECK(man, E_MANAGER_TYPE);
/* check for already visible */
if (man->visible) return;
/* show containers */
EINA_LIST_FOREACH(man->containers, l, con)
e_container_show(con);
man->visible = EINA_TRUE;
}
EAPI void
e_manager_hide(E_Manager *man)
{
E_Container *con;
Eina_List *l;
/* check for valid manager */
E_OBJECT_CHECK(man);
E_OBJECT_TYPE_CHECK(man, E_MANAGER_TYPE);
/* check for already invisible */
if (!man->visible) return;
/* hide containers */
EINA_LIST_FOREACH(man->containers, l, con)
e_container_hide(con);
man->visible = EINA_FALSE;
}
/* local functions */
static void
_e_manager_cb_free(E_Manager *man)
{
/* remove this manager from the list */
_managers = eina_list_remove(_managers, man);
/* free the object */
E_FREE(man);
}