forked from enlightenment/enlightenment
parent
ba1d75580a
commit
66b989bc33
2
TODO
2
TODO
|
@ -160,8 +160,6 @@ Some of the things (in very short form) that need to be done to E17...
|
|||
"NICE TO HAVE" FEATURES
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
* make gadman remember positions PER resolution so if you switch to a res it
|
||||
uses that res's layout if it exists
|
||||
* screensaver/lock module
|
||||
* tip/hint/suggestion dialog app (textblock etc.)
|
||||
* add tooltips
|
||||
|
|
|
@ -2290,8 +2290,8 @@ _e_border_cb_window_configure_request(void *data, int ev_type, void *ev)
|
|||
|
||||
bd = data;
|
||||
e = ev;
|
||||
printf("##- CONF REQ 0x%x , %iX%i+%i+%i\n",
|
||||
e->win, e->w, e->h, e->x, e->y);
|
||||
// printf("##- CONF REQ 0x%x , %iX%i+%i+%i\n",
|
||||
// e->win, e->w, e->h, e->x, e->y);
|
||||
bd = e_border_find_by_client_window(e->win);
|
||||
if (!bd)
|
||||
{
|
||||
|
|
|
@ -1094,6 +1094,8 @@ _e_container_resize_handle(E_Container *con)
|
|||
|
||||
ev = calloc(1, sizeof(E_Event_Container_Resize));
|
||||
ev->container = con;
|
||||
|
||||
e_gadman_all_save(con->gadman);
|
||||
|
||||
e_xinerama_update();
|
||||
|
||||
|
|
|
@ -13,7 +13,6 @@ typedef struct _Gadman_Client_Config Gadman_Client_Config;
|
|||
|
||||
struct _Gadman_Client_Config
|
||||
{
|
||||
// double ax, ay;
|
||||
struct {
|
||||
int x, y, w, h;
|
||||
} pos;
|
||||
|
@ -21,6 +20,10 @@ struct _Gadman_Client_Config
|
|||
int edge;
|
||||
int zone;
|
||||
int use_autow, use_autoh;
|
||||
struct {
|
||||
int w, h;
|
||||
Evas_List *others;
|
||||
} res;
|
||||
};
|
||||
|
||||
static void _e_gadman_free(E_Gadman *gm);
|
||||
|
@ -70,6 +73,9 @@ static void _e_gadman_cb_center_vert(void *data, E_Menu *m, E_Menu_Item *mi);
|
|||
|
||||
static void _e_gadman_cb_end_edit_mode(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
|
||||
static void _e_gadman_config_free(Gadman_Client_Config *cf);
|
||||
static void _e_gadman_client_geom_store(E_Gadman_Client *gmc);
|
||||
|
||||
static E_Config_DD *gadman_config_edd = NULL;
|
||||
|
||||
/* externally accessible functions */
|
||||
|
@ -81,8 +87,6 @@ e_gadman_init(void)
|
|||
#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, pos.x, INT);
|
||||
E_CONFIG_VAL(D, T, pos.y, INT);
|
||||
E_CONFIG_VAL(D, T, pos.w, INT);
|
||||
|
@ -93,6 +97,9 @@ e_gadman_init(void)
|
|||
E_CONFIG_VAL(D, T, zone, INT);
|
||||
E_CONFIG_VAL(D, T, use_autow, INT);
|
||||
E_CONFIG_VAL(D, T, use_autoh, INT);
|
||||
E_CONFIG_VAL(D, T, res.w, INT);
|
||||
E_CONFIG_VAL(D, T, res.h, INT);
|
||||
E_CONFIG_LIST(D, T, res.others, gadman_config_edd);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -154,6 +161,21 @@ e_gadman_mode_get(E_Gadman *gm)
|
|||
return gm->mode;
|
||||
}
|
||||
|
||||
void
|
||||
e_gadman_all_save(E_Gadman *gm)
|
||||
{
|
||||
Evas_List *l;
|
||||
|
||||
E_OBJECT_CHECK(gm);
|
||||
for (l = gm->clients; l; l = l->next)
|
||||
{
|
||||
E_Gadman_Client *gmc;
|
||||
|
||||
gmc = l->data;
|
||||
e_gadman_client_save(gmc);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_gadman_container_resize(E_Gadman *gm)
|
||||
{
|
||||
|
@ -165,22 +187,7 @@ e_gadman_container_resize(E_Gadman *gm)
|
|||
E_Gadman_Client *gmc;
|
||||
|
||||
gmc = l->data;
|
||||
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);
|
||||
_e_gadman_client_overlap_deny(gmc);
|
||||
_e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE);
|
||||
e_gadman_client_load(gmc);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -212,40 +219,77 @@ e_gadman_client_new(E_Gadman *gm)
|
|||
void
|
||||
e_gadman_client_save(E_Gadman_Client *gmc)
|
||||
{
|
||||
Gadman_Client_Config cf;
|
||||
Gadman_Client_Config *cf, *cf2;
|
||||
Evas_List *l;
|
||||
char buf[1024];
|
||||
int found_res = 0;
|
||||
|
||||
E_OBJECT_CHECK(gmc);
|
||||
E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE);
|
||||
/* save all values */
|
||||
cf.pos.x = gmc->x - gmc->zone->x;
|
||||
cf.pos.y = gmc->y - gmc->zone->y;
|
||||
cf.pos.w = gmc->zone->w;
|
||||
cf.pos.h = gmc->zone->h;
|
||||
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;
|
||||
if (!gmc->config)
|
||||
{
|
||||
cf = calloc(1, sizeof(Gadman_Client_Config));
|
||||
gmc->config = cf;
|
||||
}
|
||||
cf = gmc->config;
|
||||
_e_gadman_client_geom_store(gmc);
|
||||
cf->res.w = gmc->zone->w;
|
||||
cf->res.h = gmc->zone->h;
|
||||
snprintf(buf, sizeof(buf), "gadman.%s.%i", gmc->domain, gmc->instance);
|
||||
e_config_domain_save(buf, gadman_config_edd, &cf);
|
||||
for (l = cf->res.others; l; l = l->next)
|
||||
{
|
||||
cf2 = (Gadman_Client_Config *)l->data;
|
||||
if ((cf2->res.w == cf->res.w) && (cf2->res.h == cf->res.h))
|
||||
{
|
||||
*cf2 = *cf;
|
||||
cf2->res.others = NULL;
|
||||
found_res = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found_res)
|
||||
{
|
||||
cf2 = calloc(1, sizeof(Gadman_Client_Config));
|
||||
cf->res.others = evas_list_prepend(cf->res.others, cf2);
|
||||
*cf2 = *cf;
|
||||
cf2->res.others = NULL;
|
||||
}
|
||||
e_config_domain_save(buf, gadman_config_edd, cf);
|
||||
}
|
||||
|
||||
void
|
||||
e_gadman_client_load(E_Gadman_Client *gmc)
|
||||
{
|
||||
Gadman_Client_Config *cf;
|
||||
Gadman_Client_Config *cf, *cf2;
|
||||
Evas_List *l;
|
||||
char buf[1024];
|
||||
|
||||
E_OBJECT_CHECK(gmc);
|
||||
E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE);
|
||||
if (gmc->config)
|
||||
{
|
||||
_e_gadman_config_free(gmc->config);
|
||||
gmc->config = NULL;
|
||||
}
|
||||
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;
|
||||
|
||||
for (l = cf->res.others; l; l = l->next)
|
||||
{
|
||||
cf2 = (Gadman_Client_Config *)l->data;
|
||||
zone = e_container_zone_number_get(gmc->zone->container, cf2->zone);
|
||||
if ((zone->w == cf2->res.w) && (zone->h == cf2->res.h))
|
||||
{
|
||||
l = cf->res.others;
|
||||
*cf = *cf2;
|
||||
cf->res.others = l;
|
||||
break;
|
||||
}
|
||||
}
|
||||
E_CONFIG_LIMIT(cf->pos.x, 0, 10000);
|
||||
E_CONFIG_LIMIT(cf->pos.y, 0, 10000);
|
||||
E_CONFIG_LIMIT(cf->pos.w, 1, 10000);
|
||||
|
@ -290,10 +334,13 @@ e_gadman_client_load(E_Gadman_Client *gmc)
|
|||
gmc->y = gmc->zone->y + ((cf->pos.y * (gmc->zone->h - gmc->h)) / (cf->pos.h - gmc->h));
|
||||
else
|
||||
gmc->y = gmc->zone->y;
|
||||
free(cf);
|
||||
gmc->config = cf;
|
||||
}
|
||||
else
|
||||
{
|
||||
cf = calloc(1, sizeof(Gadman_Client_Config));
|
||||
gmc->config = cf;
|
||||
_e_gadman_client_geom_store(gmc);
|
||||
}
|
||||
_e_gadman_client_overlap_deny(gmc);
|
||||
e_object_ref(E_OBJECT(gmc));
|
||||
|
@ -655,6 +702,7 @@ _e_gadman_client_free(E_Gadman_Client *gmc)
|
|||
if (gmc->event_object) evas_object_del(gmc->event_object);
|
||||
gmc->gadman->clients = evas_list_remove(gmc->gadman->clients, gmc);
|
||||
if (gmc->domain) free(gmc->domain);
|
||||
_e_gadman_config_free(gmc->config);
|
||||
free(gmc);
|
||||
}
|
||||
|
||||
|
@ -1890,3 +1938,32 @@ _e_gadman_cb_end_edit_mode(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
gmc = data;
|
||||
e_gadman_mode_set(gmc->gadman, E_GADMAN_MODE_NORMAL);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_gadman_config_free(Gadman_Client_Config *cf)
|
||||
{
|
||||
while (cf->res.others)
|
||||
{
|
||||
_e_gadman_config_free(cf->res.others->data);
|
||||
cf->res.others = evas_list_remove_list(cf->res.others, cf->res.others);
|
||||
}
|
||||
free(cf);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_gadman_client_geom_store(E_Gadman_Client *gmc)
|
||||
{
|
||||
Gadman_Client_Config *cf;
|
||||
|
||||
cf = gmc->config;
|
||||
cf->pos.x = gmc->x - gmc->zone->x;
|
||||
cf->pos.y = gmc->y - gmc->zone->y;
|
||||
cf->pos.w = gmc->zone->w;
|
||||
cf->pos.h = gmc->zone->h;
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -85,6 +85,7 @@ struct _E_Gadman_Client
|
|||
double mina, maxa;
|
||||
void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change);
|
||||
void *data;
|
||||
void *config;
|
||||
};
|
||||
|
||||
EAPI int e_gadman_init(void);
|
||||
|
@ -92,6 +93,7 @@ EAPI int e_gadman_shutdown(void);
|
|||
EAPI E_Gadman *e_gadman_new(E_Container *con);
|
||||
EAPI void e_gadman_mode_set(E_Gadman *gm, E_Gadman_Mode mode);
|
||||
EAPI E_Gadman_Mode e_gadman_mode_get(E_Gadman *gm);
|
||||
EAPI void e_gadman_all_save(E_Gadman *gm);
|
||||
EAPI void e_gadman_container_resize(E_Gadman *gm);
|
||||
EAPI E_Gadman_Client *e_gadman_client_new(E_Gadman *gm);
|
||||
EAPI void e_gadman_client_save(E_Gadman_Client *gmc);
|
||||
|
|
Loading…
Reference in New Issue