forked from enlightenment/enlightenment
gadman in. clock module poprted. others need porting.
SVN revision: 13042
This commit is contained in:
parent
f8315b82cb
commit
072e32c609
1
TODO
1
TODO
|
@ -41,6 +41,7 @@ ISSUES:
|
|||
* border show/hide needs to show from top down and hide from bottom up
|
||||
* restart loses window properties (stickyness)
|
||||
* restart loses zone and container info
|
||||
* xrandr root window resize needs to propagate from con to zones and gadman
|
||||
|
||||
<add more issues as they are found>
|
||||
|
||||
|
|
|
@ -212,6 +212,23 @@ e_container_zone_at_point_get(E_Container *con, int x, int y)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
E_Zone *
|
||||
e_container_zone_number_get(E_Container *con, int num)
|
||||
{
|
||||
Evas_List *l;
|
||||
|
||||
E_OBJECT_CHECK_RETURN(con, NULL);
|
||||
for (l = con->zones; l; l = l->next)
|
||||
{
|
||||
E_Zone *zone;
|
||||
|
||||
zone = l->data;
|
||||
if (zone->num == num)
|
||||
return zone;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
E_Container_Shape *
|
||||
e_container_shape_add(E_Container *con)
|
||||
{
|
||||
|
|
|
@ -80,6 +80,7 @@ EAPI void e_container_lower(E_Container *con);
|
|||
|
||||
EAPI Evas_List *e_container_clients_list_get(E_Container *con);
|
||||
EAPI E_Zone *e_container_zone_at_point_get(E_Container *con, int x, int y);
|
||||
EAPI E_Zone *e_container_zone_number_get(E_Container *con, int num);
|
||||
|
||||
EAPI E_Container_Shape *e_container_shape_add(E_Container *con);
|
||||
EAPI void e_container_shape_show(E_Container_Shape *es);
|
||||
|
|
|
@ -7,15 +7,26 @@
|
|||
/* re-enter edit mode (cant access root menu) */
|
||||
/* FIXME: resist can still jump on top of other gads... */
|
||||
|
||||
/* FIXME: handle save */
|
||||
/* FIXME: handle load */
|
||||
/* FIXME: handle resize resist */
|
||||
|
||||
/* local subsystem functions */
|
||||
|
||||
typedef struct _Gadman_Client_Config Gadman_Client_Config;
|
||||
|
||||
struct _Gadman_Client_Config
|
||||
{
|
||||
double ax, ay;
|
||||
int w, h;
|
||||
int edge;
|
||||
int zone;
|
||||
int use_autow, use_autoh;
|
||||
};
|
||||
|
||||
static void _e_gadman_free(E_Gadman *gm);
|
||||
static void _e_gadman_client_free(E_Gadman_Client *gmc);
|
||||
static void _e_gadman_client_edit_begin(E_Gadman_Client *gmc);
|
||||
static void _e_gadman_client_edit_end(E_Gadman_Client *gmc);
|
||||
static void _e_gadman_client_overlap_deny(E_Gadman_Client *gmc);
|
||||
static void _e_gadman_client_down_store(E_Gadman_Client *gmc);
|
||||
static int _e_gadman_client_is_being_modified(E_Gadman_Client *gmc);
|
||||
static void _e_gadman_client_geometry_to_align(E_Gadman_Client *gmc);
|
||||
|
@ -56,16 +67,33 @@ static void _e_gadman_cb_full_height(void *data, E_Menu *m, E_Menu_Item *mi);
|
|||
static void _e_gadman_cb_auto_height(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_gadman_cb_center_vert(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
|
||||
static E_Config_DD *gadman_config_edd = NULL;
|
||||
|
||||
/* externally accessible functions */
|
||||
int
|
||||
e_gadman_init(void)
|
||||
{
|
||||
gadman_config_edd = E_CONFIG_DD_NEW("Gadman_Client_Config", Gadman_Client_Config);
|
||||
#undef T
|
||||
#undef D
|
||||
#define T Gadman_Client_Config
|
||||
#define D gadman_config_edd
|
||||
E_CONFIG_VAL(D, T, ax, DOUBLE);
|
||||
E_CONFIG_VAL(D, T, ay, DOUBLE);
|
||||
E_CONFIG_VAL(D, T, w, INT);
|
||||
E_CONFIG_VAL(D, T, h, INT);
|
||||
E_CONFIG_VAL(D, T, edge, INT);
|
||||
E_CONFIG_VAL(D, T, zone, INT);
|
||||
E_CONFIG_VAL(D, T, use_autow, INT);
|
||||
E_CONFIG_VAL(D, T, use_autoh, INT);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
e_gadman_shutdown(void)
|
||||
{
|
||||
E_CONFIG_DD_FREE(gadman_config_edd);
|
||||
gadman_config_edd = NULL;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -118,13 +146,13 @@ e_gadman_client_new(E_Gadman *gm)
|
|||
gmc->gadman = gm;
|
||||
gmc->policy = E_GADMAN_POLICY_ANYWHERE | E_GADMAN_POLICY_HSIZE | E_GADMAN_POLICY_VSIZE | E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE;
|
||||
gmc->zone = e_zone_current_get(gm->container);
|
||||
gmc->edge = E_GADMAN_EDGE_BOTTOM;
|
||||
gmc->edge = E_GADMAN_EDGE_TOP;
|
||||
gmc->minw = 1;
|
||||
gmc->minh = 1;
|
||||
gmc->maxw = 0;
|
||||
gmc->maxh = 0;
|
||||
gmc->ax = 0.0;
|
||||
gmc->ay = 1.0;
|
||||
gmc->ay = 0.0;
|
||||
gmc->mina = 0.0;
|
||||
gmc->maxa = 9999999.0;
|
||||
gm->clients = evas_list_append(gm->clients, gmc);
|
||||
|
@ -134,8 +162,21 @@ e_gadman_client_new(E_Gadman *gm)
|
|||
void
|
||||
e_gadman_client_save(E_Gadman_Client *gmc)
|
||||
{
|
||||
Gadman_Client_Config cf;
|
||||
char buf[1024];
|
||||
|
||||
E_OBJECT_CHECK(gmc);
|
||||
/* save all values */
|
||||
cf.ax = gmc->ax;
|
||||
cf.ay = gmc->ay;
|
||||
cf.w = gmc->w;
|
||||
cf.h = gmc->h;
|
||||
cf.edge = gmc->edge;
|
||||
cf.zone = gmc->zone->num;
|
||||
cf.use_autow = gmc->use_autow;
|
||||
cf.use_autoh = gmc->use_autoh;
|
||||
snprintf(buf, sizeof(buf), "gadman.%s.%i", gmc->domain, gmc->instance);
|
||||
e_config_domain_save(buf, gadman_config_edd, &cf);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -148,9 +189,55 @@ e_client_gadman_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge)
|
|||
void
|
||||
e_gadman_client_load(E_Gadman_Client *gmc)
|
||||
{
|
||||
Gadman_Client_Config *cf;
|
||||
char buf[1024];
|
||||
|
||||
E_OBJECT_CHECK(gmc);
|
||||
/* load all the vales */
|
||||
/* implement all the values */
|
||||
snprintf(buf, sizeof(buf), "gadman.%s.%i", gmc->domain, gmc->instance);
|
||||
cf = e_config_domain_load(buf, gadman_config_edd);
|
||||
if (cf)
|
||||
{
|
||||
E_Zone *zone;
|
||||
|
||||
E_CONFIG_LIMIT(cf->ax, 0.0, 1.0);
|
||||
E_CONFIG_LIMIT(cf->ay, 0.0, 1.0);
|
||||
E_CONFIG_LIMIT(cf->w, 0, 10000);
|
||||
E_CONFIG_LIMIT(cf->h, 0, 10000);
|
||||
E_CONFIG_LIMIT(cf->edge, E_GADMAN_EDGE_LEFT, E_GADMAN_EDGE_BOTTOM);
|
||||
gmc->ax = cf->ax;
|
||||
gmc->ay = cf->ay;
|
||||
gmc->w = cf->w;
|
||||
gmc->h = cf->h;
|
||||
gmc->edge = cf->edge;
|
||||
gmc->use_autow = cf->use_autow;
|
||||
gmc->use_autoh = cf->use_autoh;
|
||||
zone = e_container_zone_number_get(gmc->zone->container, cf->zone);
|
||||
if (zone) gmc->zone = zone;
|
||||
if (gmc->use_autow)
|
||||
{
|
||||
gmc->w = gmc->autow;
|
||||
gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax);
|
||||
}
|
||||
if (gmc->use_autoh)
|
||||
{
|
||||
gmc->h = gmc->autoh;
|
||||
gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay);
|
||||
}
|
||||
if (gmc->w > gmc->zone->w) gmc->w = gmc->zone->w;
|
||||
if (gmc->h > gmc->zone->h) gmc->h = gmc->zone->h;
|
||||
gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax);
|
||||
gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay);
|
||||
free(cf);
|
||||
}
|
||||
_e_gadman_client_overlap_deny(gmc);
|
||||
e_object_ref(E_OBJECT(gmc));
|
||||
if (!e_object_del_get(E_OBJECT(gmc)))
|
||||
_e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_ZONE);
|
||||
if (!e_object_del_get(E_OBJECT(gmc)))
|
||||
_e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_EDGE);
|
||||
if (!e_object_del_get(E_OBJECT(gmc)))
|
||||
_e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE);
|
||||
e_object_unref(E_OBJECT(gmc));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -166,7 +253,16 @@ void
|
|||
e_gadman_client_zone_set(E_Gadman_Client *gmc, E_Zone *zone)
|
||||
{
|
||||
E_OBJECT_CHECK(gmc);
|
||||
if (zone == gmc->zone) return;
|
||||
gmc->zone = zone;
|
||||
gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax);
|
||||
gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay);
|
||||
e_object_ref(E_OBJECT(gmc));
|
||||
if (!e_object_del_get(E_OBJECT(gmc)))
|
||||
_e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_ZONE);
|
||||
if (!e_object_del_get(E_OBJECT(gmc)))
|
||||
_e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE);
|
||||
e_object_unref(E_OBJECT(gmc));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -180,24 +276,52 @@ void
|
|||
e_gadman_client_min_size_set(E_Gadman_Client *gmc, Evas_Coord minw, Evas_Coord minh)
|
||||
{
|
||||
E_OBJECT_CHECK(gmc);
|
||||
if ((gmc->minw == minw) && (gmc->minh == minh)) return;
|
||||
gmc->minw = minw;
|
||||
gmc->minh = minh;
|
||||
if (gmc->minw > gmc->w)
|
||||
{
|
||||
gmc->w = gmc->minw;
|
||||
gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax);
|
||||
}
|
||||
if (gmc->minh > gmc->h)
|
||||
{
|
||||
gmc->h = gmc->minh;
|
||||
gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay);
|
||||
}
|
||||
_e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE);
|
||||
}
|
||||
|
||||
void
|
||||
e_gadman_client_max_size_set(E_Gadman_Client *gmc, Evas_Coord maxw, Evas_Coord maxh)
|
||||
{
|
||||
E_OBJECT_CHECK(gmc);
|
||||
if ((gmc->maxw == maxw) && (gmc->maxh == maxh)) return;
|
||||
gmc->maxw = maxw;
|
||||
gmc->maxh = maxh;
|
||||
if (gmc->maxw < gmc->w)
|
||||
{
|
||||
gmc->w = gmc->maxw;
|
||||
gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax);
|
||||
}
|
||||
if (gmc->maxh < gmc->h)
|
||||
{
|
||||
gmc->h = gmc->maxh;
|
||||
gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay);
|
||||
}
|
||||
_e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE);
|
||||
}
|
||||
|
||||
void
|
||||
e_gadman_client_align_set(E_Gadman_Client *gmc, double xalign, double yalign)
|
||||
{
|
||||
E_OBJECT_CHECK(gmc);
|
||||
if ((gmc->ax == xalign) && (gmc->ay == yalign)) return;
|
||||
gmc->ax = xalign;
|
||||
gmc->ay = yalign;
|
||||
gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax);
|
||||
gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay);
|
||||
_e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -214,6 +338,31 @@ e_gadman_client_auto_size_set(E_Gadman_Client *gmc, Evas_Coord autow, Evas_Coord
|
|||
E_OBJECT_CHECK(gmc);
|
||||
gmc->autow = autow;
|
||||
gmc->autoh = autoh;
|
||||
if (gmc->use_autow)
|
||||
{
|
||||
gmc->w = gmc->autow;
|
||||
gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax);
|
||||
}
|
||||
if (gmc->use_autoh)
|
||||
{
|
||||
gmc->h = gmc->autoh;
|
||||
gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay);
|
||||
}
|
||||
_e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE);
|
||||
}
|
||||
|
||||
void
|
||||
e_gadman_client_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge)
|
||||
{
|
||||
E_OBJECT_CHECK(gmc);
|
||||
gmc->edge = edge;
|
||||
}
|
||||
|
||||
E_Gadman_Edge
|
||||
e_gadman_client_edge_get(E_Gadman_Client *gmc)
|
||||
{
|
||||
E_OBJECT_CHECK_RETURN(gmc, E_GADMAN_EDGE_TOP);
|
||||
return gmc->edge;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -226,6 +375,20 @@ e_gadman_client_geometry_get(E_Gadman_Client *gmc, Evas_Coord *x, Evas_Coord *y,
|
|||
if (h) *h = gmc->h;
|
||||
}
|
||||
|
||||
void
|
||||
e_gadman_client_resize(E_Gadman_Client *gmc, Evas_Coord w, Evas_Coord h)
|
||||
{
|
||||
E_OBJECT_CHECK(gmc);
|
||||
if ((gmc->w == w) && (gmc->h == h)) return;
|
||||
gmc->w = w;
|
||||
if (gmc->w > gmc->zone->w) gmc->w = gmc->zone->w;
|
||||
gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax);
|
||||
gmc->h = h;
|
||||
if (gmc->h > gmc->zone->h) gmc->h = gmc->zone->h;
|
||||
gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay);
|
||||
_e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE);
|
||||
}
|
||||
|
||||
void
|
||||
e_gadman_client_change_func_set(E_Gadman_Client *gmc, void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change), void *data)
|
||||
{
|
||||
|
@ -421,6 +584,93 @@ _e_gadman_client_edit_end(E_Gadman_Client *gmc)
|
|||
gmc->event_object = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_gadman_client_overlap_deny(E_Gadman_Client *gmc)
|
||||
{
|
||||
Evas_List *l;
|
||||
Evas_Coord ox, oy;
|
||||
int ok = 0;
|
||||
int iterate = 0;
|
||||
|
||||
ox = gmc->x;
|
||||
oy = gmc->y;
|
||||
ok = 0;
|
||||
while ((!ok) && (iterate < 1000))
|
||||
{
|
||||
for (l = gmc->zone->container->gadman->clients; l; l = l->next)
|
||||
{
|
||||
E_Gadman_Client *gmc2;
|
||||
|
||||
gmc2 = l->data;
|
||||
if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) &&
|
||||
(E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h)))
|
||||
{
|
||||
gmc->x = gmc2->x + gmc2->w;
|
||||
}
|
||||
}
|
||||
if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w))
|
||||
gmc->x = gmc->zone->x + gmc->zone->w - gmc->w;
|
||||
ok = 1;
|
||||
for (l = gmc->zone->container->gadman->clients; l; l = l->next)
|
||||
{
|
||||
E_Gadman_Client *gmc2;
|
||||
|
||||
gmc2 = l->data;
|
||||
if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) &&
|
||||
(E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h)))
|
||||
ok = 0;
|
||||
}
|
||||
if (ok) break;
|
||||
for (l = gmc->zone->container->gadman->clients; l; l = l->next)
|
||||
{
|
||||
E_Gadman_Client *gmc2;
|
||||
|
||||
gmc2 = l->data;
|
||||
if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) &&
|
||||
(E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h)))
|
||||
{
|
||||
gmc->x = gmc2->x - gmc->w;
|
||||
}
|
||||
}
|
||||
if (gmc->x < gmc->zone->x)
|
||||
gmc->x = gmc->zone->x;
|
||||
ok = 1;
|
||||
for (l = gmc->zone->container->gadman->clients; l; l = l->next)
|
||||
{
|
||||
E_Gadman_Client *gmc2;
|
||||
|
||||
gmc2 = l->data;
|
||||
if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) &&
|
||||
(E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h)))
|
||||
ok = 0;
|
||||
}
|
||||
if (ok) break;
|
||||
if (gmc->y > (gmc->zone->y + (gmc->zone->h / 2)))
|
||||
gmc->y -= 8;
|
||||
else
|
||||
gmc->y += 8;
|
||||
if (oy < (gmc->zone->y + (gmc->zone->h / 2)))
|
||||
{
|
||||
if ((gmc->y - oy) > (gmc->zone->h / 3))
|
||||
{
|
||||
gmc->x = ox;
|
||||
gmc->y = oy;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((oy - gmc->y) > (gmc->zone->h / 3))
|
||||
{
|
||||
gmc->x = ox;
|
||||
gmc->y = oy;
|
||||
break;
|
||||
}
|
||||
}
|
||||
iterate++;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_gadman_client_down_store(E_Gadman_Client *gmc)
|
||||
{
|
||||
|
@ -808,7 +1058,7 @@ _e_gadman_cb_signal_resize_left_go(void *data, Evas_Object *obj, const char *emi
|
|||
/* limit to max size */
|
||||
if (gmc->maxw > 0)
|
||||
{
|
||||
if (gmc->w > gmc->minw)
|
||||
if (gmc->w > gmc->maxw)
|
||||
{
|
||||
gmc->x -= (gmc->maxw - gmc->w);
|
||||
gmc->w = gmc->maxw;
|
||||
|
@ -942,7 +1192,7 @@ _e_gadman_cb_signal_resize_up_go(void *data, Evas_Object *obj, const char *emiss
|
|||
/* limit to max size */
|
||||
if (gmc->maxh > 0)
|
||||
{
|
||||
if (gmc->h > gmc->minh)
|
||||
if (gmc->h > gmc->maxh)
|
||||
{
|
||||
gmc->y -= (gmc->maxh - gmc->h);
|
||||
gmc->h = gmc->maxh;
|
||||
|
|
|
@ -98,7 +98,10 @@ EAPI void e_gadman_client_max_size_set(E_Gadman_Client *gmc, Evas_Co
|
|||
EAPI void e_gadman_client_align_set(E_Gadman_Client *gmc, double xalign, double yalign);
|
||||
EAPI void e_gadman_client_aspect_set(E_Gadman_Client *gmc, double mina, double maxa);
|
||||
EAPI void e_gadman_client_auto_size_set(E_Gadman_Client *gmc, Evas_Coord autow, Evas_Coord autoh);
|
||||
EAPI void e_gadman_client_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge);
|
||||
EAPI E_Gadman_Edge e_gadman_client_edge_get(E_Gadman_Client *gmc);
|
||||
EAPI void e_gadman_client_geometry_get(E_Gadman_Client *gmc, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
|
||||
EAPI void e_gadman_client_resize(E_Gadman_Client *gmc, Evas_Coord w, Evas_Coord h);
|
||||
EAPI void e_gadman_client_change_func_set(E_Gadman_Client *gmc, void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change), void *data);
|
||||
EAPI E_Menu *e_gadman_client_menu_new(E_Gadman_Client *gmc);
|
||||
|
||||
|
|
|
@ -573,7 +573,7 @@ _e_main_screens_init(void)
|
|||
i);
|
||||
return 0;
|
||||
}
|
||||
/* FIXME: testing... */
|
||||
/*
|
||||
{
|
||||
E_Gadman_Client *gmc;
|
||||
|
||||
|
@ -593,6 +593,8 @@ _e_main_screens_init(void)
|
|||
e_gadman_client_auto_size_set(gmc, 50, 200);
|
||||
e_gadman_client_align_set(gmc, 0.0, 0.5);
|
||||
e_client_gadman_edge_set(gmc, E_GADMAN_EDGE_LEFT);
|
||||
e_gadman_client_domain_set(gmc, "test", 0);
|
||||
e_gadman_client_load(gmc);
|
||||
|
||||
gmc = e_gadman_client_new(con->gadman);
|
||||
gmc->x = 0;
|
||||
|
@ -610,6 +612,8 @@ _e_main_screens_init(void)
|
|||
e_gadman_client_auto_size_set(gmc, 50, 200);
|
||||
e_gadman_client_align_set(gmc, 0.0, 0.5);
|
||||
e_client_gadman_edge_set(gmc, E_GADMAN_EDGE_LEFT);
|
||||
e_gadman_client_domain_set(gmc, "test", 1);
|
||||
e_gadman_client_load(gmc);
|
||||
|
||||
gmc = e_gadman_client_new(con->gadman);
|
||||
gmc->x = 0;
|
||||
|
@ -627,7 +631,10 @@ _e_main_screens_init(void)
|
|||
e_gadman_client_auto_size_set(gmc, 50, 200);
|
||||
e_gadman_client_align_set(gmc, 0.0, 0.5);
|
||||
e_client_gadman_edge_set(gmc, E_GADMAN_EDGE_LEFT);
|
||||
e_gadman_client_domain_set(gmc, "test", 2);
|
||||
e_gadman_client_load(gmc);
|
||||
}
|
||||
*/
|
||||
}
|
||||
free(roots);
|
||||
ecore_x_sync();
|
||||
|
|
|
@ -233,7 +233,7 @@ e_resist_container_gadman_position(E_Container *con, Evas_List *skiplist,
|
|||
int *rx, int *ry)
|
||||
{
|
||||
int resist = 1;
|
||||
int gad_resist = 4800;
|
||||
int gad_resist = 32;
|
||||
int dx, dy, d, pd;
|
||||
int resist_x = 0, resist_y = 0;
|
||||
Evas_List *l, *ll, *rects = NULL;
|
||||
|
|
|
@ -14,11 +14,8 @@ static E_Menu *_clock_config_menu_new(Clock *e);
|
|||
static void _clock_config_menu_del(Clock *e, E_Menu *m);
|
||||
static void _clock_face_init(Clock_Face *ef);
|
||||
static void _clock_face_free(Clock_Face *ef);
|
||||
static void _clock_face_reconfigure(Clock_Face *ef);
|
||||
static void _clock_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change);
|
||||
static void _clock_cb_face_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _clock_cb_face_up(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _clock_cb_face_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static int _clock_cb_event_container_resize(void *data, int type, void *event);
|
||||
|
||||
/* public module routines. all modules must have these */
|
||||
void *
|
||||
|
@ -68,7 +65,7 @@ save(E_Module *m)
|
|||
Clock *e;
|
||||
|
||||
e = m->data;
|
||||
e_config_domain_save("module.clock", e->conf_edd, e->conf);
|
||||
/* e_config_domain_save("module.clock", e->conf_edd, e->conf);*/
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -100,28 +97,16 @@ _clock_init(E_Module *m)
|
|||
|
||||
e = calloc(1, sizeof(Clock));
|
||||
if (!e) return NULL;
|
||||
|
||||
e->conf_edd = E_CONFIG_DD_NEW("Clock_Config", Config);
|
||||
#undef T
|
||||
#undef D
|
||||
#define T Config
|
||||
#define D e->conf_edd
|
||||
E_CONFIG_VAL(D, T, width, INT);
|
||||
E_CONFIG_VAL(D, T, x, DOUBLE);
|
||||
E_CONFIG_VAL(D, T, y, DOUBLE);
|
||||
|
||||
e->conf = e_config_domain_load("module.clock", e->conf_edd);
|
||||
if (!e->conf)
|
||||
{
|
||||
e->conf = E_NEW(Config, 1);
|
||||
e->conf->width = 64;
|
||||
e->conf->x = 0.0;
|
||||
e->conf->y = 1.0;
|
||||
}
|
||||
E_CONFIG_LIMIT(e->conf->width, 2, 256);
|
||||
E_CONFIG_LIMIT(e->conf->x, 0.0, 1.0);
|
||||
E_CONFIG_LIMIT(e->conf->y, 0.0, 1.0);
|
||||
|
||||
/*
|
||||
e->conf_edd = E_CONFIG_DD_NEW("Clock_Config", Config);
|
||||
*
|
||||
e->conf = e_config_domain_load("module.clock", e->conf_edd);
|
||||
if (!e->conf)
|
||||
{
|
||||
e->conf = E_NEW(Config, 1);
|
||||
}
|
||||
*/
|
||||
managers = e_manager_list();
|
||||
for (l = managers; l; l = l->next)
|
||||
{
|
||||
|
@ -152,8 +137,7 @@ static void
|
|||
_clock_shutdown(Clock *e)
|
||||
{
|
||||
free(e->conf);
|
||||
E_CONFIG_DD_FREE(e->conf_edd);
|
||||
|
||||
/* E_CONFIG_DD_FREE(e->conf_edd);*/
|
||||
_clock_face_free(e->face);
|
||||
free(e);
|
||||
}
|
||||
|
@ -187,14 +171,6 @@ _clock_face_init(Clock_Face *ef)
|
|||
Evas_Coord ww, hh, bw, bh;
|
||||
Evas_Object *o;
|
||||
|
||||
ef->ev_handler_container_resize =
|
||||
ecore_event_handler_add(E_EVENT_CONTAINER_RESIZE,
|
||||
_clock_cb_event_container_resize,
|
||||
ef);
|
||||
evas_output_viewport_get(ef->evas, NULL, NULL, &ww, &hh);
|
||||
ef->fx = ef->clock->conf->x * (ww - ef->clock->conf->width);
|
||||
ef->fy = ef->clock->conf->y * (hh - ef->clock->conf->width);
|
||||
|
||||
evas_event_freeze(ef->evas);
|
||||
o = edje_object_add(ef->evas);
|
||||
ef->clock_object = o;
|
||||
|
@ -210,48 +186,56 @@ _clock_face_init(Clock_Face *ef)
|
|||
evas_object_layer_set(o, 2);
|
||||
evas_object_repeat_events_set(o, 1);
|
||||
evas_object_color_set(o, 0, 0, 0, 0);
|
||||
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _clock_cb_face_down, ef);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, _clock_cb_face_up, ef);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, _clock_cb_face_move, ef);
|
||||
evas_object_show(o);
|
||||
|
||||
edje_object_size_min_calc(ef->clock_object, &bw, &bh);
|
||||
ef->minsize = bh;
|
||||
ef->minsize = bw;
|
||||
|
||||
_clock_face_reconfigure(ef);
|
||||
|
||||
ef->gmc = e_gadman_client_new(ef->con->gadman);
|
||||
e_gadman_client_domain_set(ef->gmc, "module.clock", 0);
|
||||
e_gadman_client_policy_set(ef->gmc,
|
||||
E_GADMAN_POLICY_ANYWHERE |
|
||||
E_GADMAN_POLICY_HMOVE |
|
||||
E_GADMAN_POLICY_VMOVE |
|
||||
E_GADMAN_POLICY_HSIZE |
|
||||
E_GADMAN_POLICY_VSIZE);
|
||||
e_gadman_client_min_size_set(ef->gmc, 4, 4);
|
||||
e_gadman_client_max_size_set(ef->gmc, 128, 128);
|
||||
e_gadman_client_auto_size_set(ef->gmc, 64, 64);
|
||||
e_gadman_client_align_set(ef->gmc, 0.0, 1.0);
|
||||
e_gadman_client_resize(ef->gmc, 64, 64);
|
||||
e_gadman_client_change_func_set(ef->gmc, _clock_cb_gmc_change, ef);
|
||||
e_gadman_client_load(ef->gmc);
|
||||
evas_event_thaw(ef->evas);
|
||||
}
|
||||
|
||||
static void
|
||||
_clock_face_free(Clock_Face *ef)
|
||||
{
|
||||
ecore_event_handler_del(ef->ev_handler_container_resize);
|
||||
e_object_del(E_OBJECT(ef->gmc));
|
||||
evas_object_del(ef->clock_object);
|
||||
evas_object_del(ef->event_object);
|
||||
free(ef);
|
||||
}
|
||||
|
||||
static void
|
||||
_clock_face_reconfigure(Clock_Face *ef)
|
||||
_clock_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change)
|
||||
{
|
||||
Evas_Coord minw, minh, maxw, maxh, ww, hh;
|
||||
Clock_Face *ef;
|
||||
Evas_Coord x, y, w, h;
|
||||
|
||||
edje_object_size_min_calc(ef->clock_object, &minw, &maxh);
|
||||
edje_object_size_max_get(ef->clock_object, &maxw, &minh);
|
||||
evas_output_viewport_get(ef->evas, NULL, NULL, &ww, &hh);
|
||||
ef->fx = ef->clock->conf->x * (ww - ef->clock->conf->width);
|
||||
ef->fy = ef->clock->conf->y * (hh - ef->clock->conf->width);
|
||||
ef->fw = ef->clock->conf->width;
|
||||
ef->minsize = minw;
|
||||
ef->maxsize = maxw;
|
||||
|
||||
evas_object_move(ef->clock_object, ef->fx, ef->fy);
|
||||
evas_object_resize(ef->clock_object, ef->clock->conf->width, ef->clock->conf->width);
|
||||
evas_object_move(ef->event_object, ef->fx, ef->fy);
|
||||
evas_object_resize(ef->event_object, ef->clock->conf->width, ef->clock->conf->width);
|
||||
ef = data;
|
||||
if (change == E_GADMAN_CHANGE_MOVE_RESIZE)
|
||||
{
|
||||
e_gadman_client_geometry_get(ef->gmc, &x, &y, &w, &h);
|
||||
evas_object_move(ef->clock_object, x, y);
|
||||
evas_object_move(ef->event_object, x, y);
|
||||
evas_object_resize(ef->clock_object, w, h);
|
||||
evas_object_resize(ef->event_object, w, h);
|
||||
}
|
||||
else if (change == E_GADMAN_CHANGE_RAISE)
|
||||
{
|
||||
evas_object_raise(ef->clock_object);
|
||||
evas_object_raise(ef->event_object);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -269,81 +253,4 @@ _clock_cb_face_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
E_MENU_POP_DIRECTION_DOWN);
|
||||
e_util_container_fake_mouse_up_all_later(ef->con);
|
||||
}
|
||||
else if (ev->button == 2)
|
||||
{
|
||||
ef->resize = 1;
|
||||
}
|
||||
else if (ev->button == 1)
|
||||
{
|
||||
ef->move = 1;
|
||||
}
|
||||
evas_pointer_canvas_xy_get(e, &ef->xx, &ef->yy);
|
||||
}
|
||||
|
||||
static void
|
||||
_clock_cb_face_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Evas_Event_Mouse_Up *ev;
|
||||
Clock_Face *ef;
|
||||
Evas_Coord ww, hh;
|
||||
|
||||
ev = event_info;
|
||||
ef = data;
|
||||
ef->move = 0;
|
||||
ef->resize = 0;
|
||||
evas_output_viewport_get(ef->evas, NULL, NULL, &ww, &hh);
|
||||
ef->clock->conf->width = ef->fw;
|
||||
ef->clock->conf->x = (double)ef->fx / (double)(ww - ef->clock->conf->width);
|
||||
ef->clock->conf->y = (double)ef->fy / (double)(hh - ef->clock->conf->width);
|
||||
e_config_save_queue();
|
||||
}
|
||||
|
||||
static void
|
||||
_clock_cb_face_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Evas_Event_Mouse_Move *ev;
|
||||
Clock_Face *ef;
|
||||
Evas_Coord cx, cy, sw, sh;
|
||||
|
||||
evas_pointer_canvas_xy_get(e, &cx, &cy);
|
||||
evas_output_viewport_get(e, NULL, NULL, &sw, &sh);
|
||||
|
||||
ev = event_info;
|
||||
ef = data;
|
||||
if (ef->move)
|
||||
{
|
||||
ef->fx += cx - ef->xx;
|
||||
ef->fy += cy - ef->yy;
|
||||
if (ef->fx < 0) ef->fx = 0;
|
||||
if (ef->fy < 0) ef->fy = 0;
|
||||
if (ef->fx + ef->fw > sw) ef->fx = sw - ef->fw;
|
||||
if (ef->fy + ef->fw > sh) ef->fy = sh - ef->fw;
|
||||
evas_object_move(ef->clock_object, ef->fx, ef->fy);
|
||||
evas_object_move(ef->event_object, ef->fx, ef->fy);
|
||||
}
|
||||
else if (ef->resize)
|
||||
{
|
||||
Evas_Coord d;
|
||||
|
||||
d = cx - ef->xx;
|
||||
ef->fw += d;
|
||||
if (ef->fw < ef->minsize) ef->fw = ef->minsize;
|
||||
if (ef->fw > ef->maxsize) ef->fw = ef->maxsize;
|
||||
if (ef->fx + ef->fw > sw) ef->fw = sw - ef->fx;
|
||||
if (ef->fy + ef->fw > sh) ef->fw = sh - ef->fy;
|
||||
evas_object_resize(ef->clock_object, ef->fw, ef->fw);
|
||||
evas_object_resize(ef->event_object, ef->fw, ef->fw);
|
||||
}
|
||||
ef->xx = ev->cur.canvas.x;
|
||||
ef->yy = ev->cur.canvas.y;
|
||||
}
|
||||
|
||||
static int
|
||||
_clock_cb_event_container_resize(void *data, int type, void *event)
|
||||
{
|
||||
Clock_Face *ef;
|
||||
|
||||
ef = data;
|
||||
_clock_face_reconfigure(ef);
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -7,8 +7,7 @@ typedef struct _Clock_Face Clock_Face;
|
|||
|
||||
struct _Config
|
||||
{
|
||||
int width;
|
||||
double x, y;
|
||||
int dummy; /* just here to hold space */
|
||||
};
|
||||
|
||||
struct _Clock
|
||||
|
@ -16,7 +15,7 @@ struct _Clock
|
|||
E_Menu *config_menu;
|
||||
Clock_Face *face;
|
||||
|
||||
E_Config_DD *conf_edd;
|
||||
/* E_Config_DD *conf_edd;*/
|
||||
Config *conf;
|
||||
};
|
||||
|
||||
|
@ -29,14 +28,8 @@ struct _Clock_Face
|
|||
Evas_Object *clock_object;
|
||||
Evas_Object *event_object;
|
||||
|
||||
Evas_Coord minsize, maxsize;
|
||||
|
||||
unsigned char move : 1;
|
||||
unsigned char resize : 1;
|
||||
Evas_Coord xx, yy;
|
||||
Evas_Coord fx, fy, fw;
|
||||
|
||||
Ecore_Event_Handler *ev_handler_container_resize;
|
||||
E_Gadman_Client *gmc;
|
||||
/* Ecore_Event_Handler *ev_handler_container_resize;*/
|
||||
};
|
||||
|
||||
EAPI void *init (E_Module *m);
|
||||
|
|
Loading…
Reference in New Issue