forked from enlightenment/enlightenment
We need id's for gadgets which are independent of shelves, so if we move
a gadget from one shelf to another it will keep the same config. Since the id is mainly for the module to find the appropriate config for a gadget, the module is now responsible for creating id's for gadgets config. One problem is that we no longer can trust the id of a gadget, so we need to store a reference between a gadget and its config after startup. No big deal. SVN revision: 31727
This commit is contained in:
parent
b285623bc0
commit
ac35054634
|
@ -1357,10 +1357,10 @@ e_config_init(void)
|
||||||
cf_gc->name = evas_stringshare_add(_name); \
|
cf_gc->name = evas_stringshare_add(_name); \
|
||||||
cf_gc->id = evas_stringshare_add(_id); \
|
cf_gc->id = evas_stringshare_add(_id); \
|
||||||
e_config->gadcons = evas_list_append(e_config->gadcons, cf_gc)
|
e_config->gadcons = evas_list_append(e_config->gadcons, cf_gc)
|
||||||
#define CFG_GADCON_CLIENT(_name, _id, _res, _size, _pos, _style, _autoscr, _resizable) \
|
#define CFG_GADCON_CLIENT(_name, _res, _size, _pos, _style, _autoscr, _resizable) \
|
||||||
cf_gcc = E_NEW(E_Config_Gadcon_Client, 1); \
|
cf_gcc = E_NEW(E_Config_Gadcon_Client, 1); \
|
||||||
cf_gcc->name = evas_stringshare_add(_name); \
|
cf_gcc->name = evas_stringshare_add(_name); \
|
||||||
cf_gcc->id = evas_stringshare_add(_id); \
|
cf_gcc->id = NULL; \
|
||||||
cf_gcc->geom.res = _res; \
|
cf_gcc->geom.res = _res; \
|
||||||
cf_gcc->geom.size = _size; \
|
cf_gcc->geom.size = _size; \
|
||||||
cf_gcc->geom.pos = _pos; \
|
cf_gcc->geom.pos = _pos; \
|
||||||
|
@ -1374,39 +1374,39 @@ e_config_init(void)
|
||||||
|
|
||||||
/* the default shelf on the default head/zone */
|
/* the default shelf on the default head/zone */
|
||||||
CFG_GADCON("shelf", "0");
|
CFG_GADCON("shelf", "0");
|
||||||
CFG_GADCON_CLIENT("start", "0.start.0", 800, 32,
|
CFG_GADCON_CLIENT("start", 800, 32,
|
||||||
0, NULL, 0, 0);
|
0, NULL, 0, 0);
|
||||||
CFG_GADCON_CLIENT("pager", "0.pager.0", 800, 120,
|
CFG_GADCON_CLIENT("pager", 800, 120,
|
||||||
32, NULL, 0, 0);
|
32, NULL, 0, 0);
|
||||||
CFG_GADCON_CLIENT("ibox", "0.ibox.0", 800, 32,
|
CFG_GADCON_CLIENT("ibox", 800, 32,
|
||||||
32 + 120, NULL, 0, 0);
|
32 + 120, NULL, 0, 0);
|
||||||
CFG_GADCON_CLIENT("ibar", "0.ibar.0", 800, 200,
|
CFG_GADCON_CLIENT("ibar", 800, 200,
|
||||||
(800 / 2) - (100 / 2), NULL, 0, 0);
|
(800 / 2) - (100 / 2), NULL, 0, 0);
|
||||||
CFG_GADCON_CLIENT("temperature", "0.temperature.0", 800, 32,
|
CFG_GADCON_CLIENT("temperature", 800, 32,
|
||||||
800 - 128, NULL, 0, 0);
|
800 - 128, NULL, 0, 0);
|
||||||
CFG_GADCON_CLIENT("cpufreq", "0.cpufreq.0", 800, 32,
|
CFG_GADCON_CLIENT("cpufreq", 800, 32,
|
||||||
800 - 96, NULL, 0, 0);
|
800 - 96, NULL, 0, 0);
|
||||||
CFG_GADCON_CLIENT("battery", "0.battery.0", 800, 32,
|
CFG_GADCON_CLIENT("battery", 800, 32,
|
||||||
800 - 64, NULL, 0, 0);
|
800 - 64, NULL, 0, 0);
|
||||||
CFG_GADCON_CLIENT("clock", "0.clock.0", 800, 32,
|
CFG_GADCON_CLIENT("clock", 800, 32,
|
||||||
800 - 32, NULL, 0, 0);
|
800 - 32, NULL, 0, 0);
|
||||||
/* additional shelves for up to 3 more heads by default */
|
/* additional shelves for up to 3 more heads by default */
|
||||||
CFG_GADCON("shelf", "1");
|
CFG_GADCON("shelf", "1");
|
||||||
CFG_GADCON_CLIENT("pager", "1.pager.0", 800, 120,
|
CFG_GADCON_CLIENT("pager", 800, 120,
|
||||||
0, NULL, 0, 0);
|
0, NULL, 0, 0);
|
||||||
CFG_GADCON_CLIENT("ibox", "1.ibox.0", 800, 32,
|
CFG_GADCON_CLIENT("ibox", 800, 32,
|
||||||
800 - 32, NULL, 0, 0);
|
800 - 32, NULL, 0, 0);
|
||||||
|
|
||||||
CFG_GADCON("shelf", "2");
|
CFG_GADCON("shelf", "2");
|
||||||
CFG_GADCON_CLIENT("pager", "2.pager.0", 800, 120,
|
CFG_GADCON_CLIENT("pager", 800, 120,
|
||||||
0, NULL, 0, 0);
|
0, NULL, 0, 0);
|
||||||
CFG_GADCON_CLIENT("ibox", "2.ibox.0", 800, 32,
|
CFG_GADCON_CLIENT("ibox", 800, 32,
|
||||||
800 - 32, NULL, 0, 0);
|
800 - 32, NULL, 0, 0);
|
||||||
|
|
||||||
CFG_GADCON("shelf", "3");
|
CFG_GADCON("shelf", "3");
|
||||||
CFG_GADCON_CLIENT("pager", "3.pager.0", 800, 120,
|
CFG_GADCON_CLIENT("pager", 800, 120,
|
||||||
0, NULL, 0, 0);
|
0, NULL, 0, 0);
|
||||||
CFG_GADCON_CLIENT("ibox", "3.ibox.0", 800, 32,
|
CFG_GADCON_CLIENT("ibox", 800, 32,
|
||||||
800 - 32, NULL, 0, 0);
|
800 - 32, NULL, 0, 0);
|
||||||
}
|
}
|
||||||
IFCFGEND;
|
IFCFGEND;
|
||||||
|
|
|
@ -3,6 +3,10 @@
|
||||||
*/
|
*/
|
||||||
#include "e.h"
|
#include "e.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO: gadcon client ordering on drop
|
||||||
|
*/
|
||||||
|
|
||||||
static void _e_gadcon_free(E_Gadcon *gc);
|
static void _e_gadcon_free(E_Gadcon *gc);
|
||||||
static void _e_gadcon_client_free(E_Gadcon_Client *gcc);
|
static void _e_gadcon_client_free(E_Gadcon_Client *gcc);
|
||||||
|
|
||||||
|
@ -56,6 +60,8 @@ static void e_gadcon_layout_pack_aspect_set(Evas_Object *obj, int w, int h);
|
||||||
static void e_gadcon_layout_pack_aspect_pad_set(Evas_Object *obj, int w, int h);
|
static void e_gadcon_layout_pack_aspect_pad_set(Evas_Object *obj, int w, int h);
|
||||||
static void e_gadcon_layout_unpack(Evas_Object *obj);
|
static void e_gadcon_layout_unpack(Evas_Object *obj);
|
||||||
|
|
||||||
|
static int _e_gadcon_client_class_version_check(E_Gadcon_Client_Class *cc);
|
||||||
|
|
||||||
/********************/
|
/********************/
|
||||||
#define E_LAYOUT_ITEM_DRAG_RESIST_LEVEL 10
|
#define E_LAYOUT_ITEM_DRAG_RESIST_LEVEL 10
|
||||||
|
|
||||||
|
@ -164,6 +170,11 @@ static Evas_Hash *providers = NULL;
|
||||||
static Evas_List *providers_list = NULL;
|
static Evas_List *providers_list = NULL;
|
||||||
static Evas_List *gadcons = NULL;
|
static Evas_List *gadcons = NULL;
|
||||||
|
|
||||||
|
/* This is the gadcon client which is currently dragged */
|
||||||
|
static E_Gadcon_Client *drag_gcc = NULL;
|
||||||
|
/* This is the gadcon client created on entering a new shelf */
|
||||||
|
static E_Gadcon_Client *new_gcc = NULL;
|
||||||
|
|
||||||
/* externally accessible functions */
|
/* externally accessible functions */
|
||||||
EAPI int
|
EAPI int
|
||||||
e_gadcon_init(void)
|
e_gadcon_init(void)
|
||||||
|
@ -177,33 +188,6 @@ e_gadcon_shutdown(void)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI E_Config_Gadcon *
|
|
||||||
e_gadcon_config_get(const char *name, const char *id)
|
|
||||||
{
|
|
||||||
Evas_List *l;
|
|
||||||
E_Config_Gadcon *cf_gc = NULL;
|
|
||||||
|
|
||||||
if (!name) return NULL;
|
|
||||||
|
|
||||||
for (l = e_config->gadcons; l; l = l->next)
|
|
||||||
{
|
|
||||||
cf_gc = l->data;
|
|
||||||
if ((!strcmp(cf_gc->name, name)) &&
|
|
||||||
(!strcmp(cf_gc->id, id)))
|
|
||||||
{
|
|
||||||
return cf_gc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cf_gc = E_NEW(E_Config_Gadcon, 1);
|
|
||||||
if (!cf_gc) return NULL;
|
|
||||||
cf_gc->name = evas_stringshare_add(name);
|
|
||||||
cf_gc->id = evas_stringshare_add(id);
|
|
||||||
e_config->gadcons = evas_list_append(e_config->gadcons, cf_gc);
|
|
||||||
e_config_save_queue();
|
|
||||||
return cf_gc;
|
|
||||||
}
|
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
e_gadcon_provider_register(const E_Gadcon_Client_Class *cc)
|
e_gadcon_provider_register(const E_Gadcon_Client_Class *cc)
|
||||||
{
|
{
|
||||||
|
@ -253,9 +237,10 @@ e_gadcon_provider_list(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI E_Gadcon *
|
EAPI E_Gadcon *
|
||||||
e_gadcon_swallowed_new(const char *name, char *id, Evas_Object *obj, char *swallow_name)
|
e_gadcon_swallowed_new(const char *name, const char *id, Evas_Object *obj, char *swallow_name)
|
||||||
{
|
{
|
||||||
E_Gadcon *gc;
|
E_Gadcon *gc;
|
||||||
|
Evas_List *l;
|
||||||
Evas_Coord x, y, w, h;
|
Evas_Coord x, y, w, h;
|
||||||
const char *drop_types[] = { "enlightenment/gadcon_client" };
|
const char *drop_types[] = { "enlightenment/gadcon_client" };
|
||||||
|
|
||||||
|
@ -290,6 +275,27 @@ e_gadcon_swallowed_new(const char *name, char *id, Evas_Object *obj, char *swall
|
||||||
edje_object_part_swallow(gc->edje.o_parent, gc->edje.swallow_name,
|
edje_object_part_swallow(gc->edje.o_parent, gc->edje.swallow_name,
|
||||||
gc->o_container);
|
gc->o_container);
|
||||||
gadcons = evas_list_append(gadcons, gc);
|
gadcons = evas_list_append(gadcons, gc);
|
||||||
|
|
||||||
|
for (l = e_config->gadcons; l; l = l->next)
|
||||||
|
{
|
||||||
|
E_Config_Gadcon *cf_gc;
|
||||||
|
|
||||||
|
cf_gc = l->data;
|
||||||
|
if ((!strcmp(cf_gc->name, gc->name)) &&
|
||||||
|
(!strcmp(cf_gc->id, gc->id)))
|
||||||
|
{
|
||||||
|
gc->cf = cf_gc;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!gc->cf)
|
||||||
|
{
|
||||||
|
gc->cf = E_NEW(E_Config_Gadcon, 1);
|
||||||
|
gc->cf->name = evas_stringshare_add(gc->name);
|
||||||
|
gc->cf->id = evas_stringshare_add(gc->id);
|
||||||
|
e_config->gadcons = evas_list_append(e_config->gadcons, gc->cf);
|
||||||
|
e_config_save_queue();
|
||||||
|
}
|
||||||
return gc;
|
return gc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -348,16 +354,13 @@ EAPI void
|
||||||
e_gadcon_populate(E_Gadcon *gc)
|
e_gadcon_populate(E_Gadcon *gc)
|
||||||
{
|
{
|
||||||
Evas_List *l;
|
Evas_List *l;
|
||||||
E_Config_Gadcon *cf_gc;
|
|
||||||
E_Config_Gadcon_Client *cf_gcc;
|
|
||||||
|
|
||||||
E_OBJECT_CHECK(gc);
|
E_OBJECT_CHECK(gc);
|
||||||
E_OBJECT_TYPE_CHECK(gc, E_GADCON_TYPE);
|
E_OBJECT_TYPE_CHECK(gc, E_GADCON_TYPE);
|
||||||
e_gadcon_layout_freeze(gc->o_container);
|
e_gadcon_layout_freeze(gc->o_container);
|
||||||
cf_gc = e_gadcon_config_get(gc->name, gc->id);
|
for (l = gc->cf->clients; l; l = l->next)
|
||||||
if (!cf_gc) return;
|
|
||||||
for (l = cf_gc->clients; l; l = l->next)
|
|
||||||
{
|
{
|
||||||
|
E_Config_Gadcon_Client *cf_gcc;
|
||||||
E_Gadcon_Client_Class *cc;
|
E_Gadcon_Client_Class *cc;
|
||||||
|
|
||||||
cf_gcc = l->data;
|
cf_gcc = l->data;
|
||||||
|
@ -367,6 +370,9 @@ e_gadcon_populate(E_Gadcon *gc)
|
||||||
{
|
{
|
||||||
E_Gadcon_Client *gcc;
|
E_Gadcon_Client *gcc;
|
||||||
|
|
||||||
|
if ((!cf_gcc->id) && (_e_gadcon_client_class_version_check(cc)))
|
||||||
|
cf_gcc->id = evas_stringshare_add(cc->func.id_new());
|
||||||
|
|
||||||
if (!cf_gcc->style)
|
if (!cf_gcc->style)
|
||||||
{
|
{
|
||||||
gcc = cc->func.init(gc, cf_gcc->name, cf_gcc->id,
|
gcc = cc->func.init(gc, cf_gcc->name, cf_gcc->id,
|
||||||
|
@ -378,6 +384,7 @@ e_gadcon_populate(E_Gadcon *gc)
|
||||||
|
|
||||||
if (gcc)
|
if (gcc)
|
||||||
{
|
{
|
||||||
|
gcc->cf = cf_gcc;
|
||||||
gcc->client_class = cc;
|
gcc->client_class = cc;
|
||||||
gcc->config.pos = cf_gcc->geom.pos;
|
gcc->config.pos = cf_gcc->geom.pos;
|
||||||
gcc->config.size = cf_gcc->geom.size;
|
gcc->config.size = cf_gcc->geom.size;
|
||||||
|
@ -427,16 +434,14 @@ EAPI void
|
||||||
e_gadcon_populate_class(E_Gadcon *gc, const E_Gadcon_Client_Class *cc)
|
e_gadcon_populate_class(E_Gadcon *gc, const E_Gadcon_Client_Class *cc)
|
||||||
{
|
{
|
||||||
Evas_List *l;
|
Evas_List *l;
|
||||||
E_Config_Gadcon *cf_gc;
|
|
||||||
E_Config_Gadcon_Client *cf_gcc;
|
|
||||||
|
|
||||||
E_OBJECT_CHECK(gc);
|
E_OBJECT_CHECK(gc);
|
||||||
E_OBJECT_TYPE_CHECK(gc, E_GADCON_TYPE);
|
E_OBJECT_TYPE_CHECK(gc, E_GADCON_TYPE);
|
||||||
e_gadcon_layout_freeze(gc->o_container);
|
e_gadcon_layout_freeze(gc->o_container);
|
||||||
cf_gc = e_gadcon_config_get(gc->name, gc->id);
|
for (l = gc->cf->clients; l; l = l->next)
|
||||||
if (!cf_gc) return;
|
|
||||||
for (l = cf_gc->clients; l; l = l->next)
|
|
||||||
{
|
{
|
||||||
|
E_Config_Gadcon_Client *cf_gcc;
|
||||||
|
|
||||||
cf_gcc = l->data;
|
cf_gcc = l->data;
|
||||||
if ((cf_gcc->name) && (cc->name) &&
|
if ((cf_gcc->name) && (cc->name) &&
|
||||||
(!strcmp(cf_gcc->name, cc->name)))
|
(!strcmp(cf_gcc->name, cc->name)))
|
||||||
|
@ -447,6 +452,7 @@ e_gadcon_populate_class(E_Gadcon *gc, const E_Gadcon_Client_Class *cc)
|
||||||
cf_gcc->style);
|
cf_gcc->style);
|
||||||
if (gcc)
|
if (gcc)
|
||||||
{
|
{
|
||||||
|
gcc->cf = cf_gcc;
|
||||||
gcc->client_class = cc;
|
gcc->client_class = cc;
|
||||||
gcc->config.pos = cf_gcc->geom.pos;
|
gcc->config.pos = cf_gcc->geom.pos;
|
||||||
gcc->config.size = cf_gcc->geom.size;
|
gcc->config.size = cf_gcc->geom.size;
|
||||||
|
@ -668,93 +674,42 @@ e_gadcon_shelf_get(E_Gadcon *gc)
|
||||||
EAPI E_Config_Gadcon_Client *
|
EAPI E_Config_Gadcon_Client *
|
||||||
e_gadcon_client_config_new(E_Gadcon *gc, const char *name)
|
e_gadcon_client_config_new(E_Gadcon *gc, const char *name)
|
||||||
{
|
{
|
||||||
Evas_List *l;
|
E_Gadcon_Client_Class *cc;
|
||||||
E_Config_Gadcon *cf_gc;
|
|
||||||
E_Config_Gadcon_Client *cf_gcc;
|
E_Config_Gadcon_Client *cf_gcc;
|
||||||
int id = 0;
|
|
||||||
char buf[256];
|
|
||||||
int ok;
|
|
||||||
|
|
||||||
E_OBJECT_CHECK_RETURN(gc, NULL);
|
E_OBJECT_CHECK_RETURN(gc, NULL);
|
||||||
E_OBJECT_TYPE_CHECK_RETURN(gc, E_GADCON_TYPE, NULL);
|
E_OBJECT_TYPE_CHECK_RETURN(gc, E_GADCON_TYPE, NULL);
|
||||||
if (!name) return NULL;
|
if (!name) return NULL;
|
||||||
|
|
||||||
cf_gc = e_gadcon_config_get(gc->name, gc->id);
|
cc = evas_hash_find(providers, name);
|
||||||
if (!cf_gc) return NULL;
|
if (!cc) return NULL;
|
||||||
do
|
if (!_e_gadcon_client_class_version_check(cc)) return NULL;
|
||||||
{
|
|
||||||
ok = 1;
|
|
||||||
snprintf(buf, sizeof(buf), "%s.%s.%i", cf_gc->id, name, id);
|
|
||||||
for (l = cf_gc->clients; l; l = l->next)
|
|
||||||
{
|
|
||||||
cf_gcc = l->data;
|
|
||||||
if (!strcmp(buf, cf_gcc->id))
|
|
||||||
{
|
|
||||||
ok = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
id++;
|
|
||||||
}
|
|
||||||
while (!ok);
|
|
||||||
|
|
||||||
cf_gcc = E_NEW(E_Config_Gadcon_Client, 1);
|
cf_gcc = E_NEW(E_Config_Gadcon_Client, 1);
|
||||||
if (!cf_gcc) return NULL;
|
if (!cf_gcc) return NULL;
|
||||||
cf_gcc->name = evas_stringshare_add(name);
|
cf_gcc->name = evas_stringshare_add(name);
|
||||||
cf_gcc->id = evas_stringshare_add(buf);
|
cf_gcc->id = evas_stringshare_add(cc->func.id_new());
|
||||||
cf_gcc->geom.res = 800;
|
cf_gcc->geom.res = 800;
|
||||||
cf_gcc->geom.size = 80;
|
cf_gcc->geom.size = 80;
|
||||||
cf_gcc->geom.pos = cf_gcc->geom.res - cf_gcc->geom.size;
|
cf_gcc->geom.pos = cf_gcc->geom.res - cf_gcc->geom.size;
|
||||||
cf_gcc->style = NULL;
|
cf_gcc->style = NULL;
|
||||||
cf_gcc->autoscroll = 0;
|
cf_gcc->autoscroll = 0;
|
||||||
cf_gcc->resizable = 0;
|
cf_gcc->resizable = 0;
|
||||||
cf_gc->clients = evas_list_append(cf_gc->clients, cf_gcc);
|
gc->cf->clients = evas_list_append(gc->cf->clients, cf_gcc);
|
||||||
e_config_save_queue();
|
e_config_save_queue();
|
||||||
return cf_gcc;
|
return cf_gcc;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI E_Config_Gadcon_Client *
|
|
||||||
e_gadcon_client_config_get(E_Gadcon *gc, const char *id)
|
|
||||||
{
|
|
||||||
Evas_List *l;
|
|
||||||
E_Config_Gadcon *cf_gc = NULL;
|
|
||||||
E_Config_Gadcon_Client *cf_gcc = NULL;
|
|
||||||
|
|
||||||
E_OBJECT_CHECK_RETURN(gc, NULL);
|
|
||||||
E_OBJECT_TYPE_CHECK_RETURN(gc, E_GADCON_TYPE, NULL);
|
|
||||||
|
|
||||||
cf_gc = e_gadcon_config_get(gc->name, gc->id);
|
|
||||||
if (!cf_gc) return NULL;
|
|
||||||
for (l = cf_gc->clients; l; l = l->next)
|
|
||||||
{
|
|
||||||
cf_gcc = l->data;
|
|
||||||
if (!strcmp(cf_gcc->id, id))
|
|
||||||
{
|
|
||||||
return cf_gcc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
e_gadcon_client_config_del(E_Gadcon *gc, const char *id)
|
e_gadcon_client_config_del(E_Config_Gadcon *cf_gc, E_Config_Gadcon_Client *cf_gcc)
|
||||||
{
|
{
|
||||||
E_Config_Gadcon *cf_gc;
|
if (!cf_gcc) return;
|
||||||
E_Config_Gadcon_Client *cf_gcc;
|
|
||||||
|
|
||||||
cf_gc = e_gadcon_config_get(gc->name, gc->id);
|
if (cf_gcc->name) evas_stringshare_del(cf_gcc->name);
|
||||||
if (cf_gc)
|
if (cf_gcc->id) evas_stringshare_del(cf_gcc->id);
|
||||||
{
|
if (cf_gcc->style) evas_stringshare_del(cf_gcc->style);
|
||||||
cf_gcc = e_gadcon_client_config_get(gc, id);
|
if (cf_gc) cf_gc->clients = evas_list_remove(cf_gc->clients, cf_gcc);
|
||||||
if (cf_gcc)
|
free(cf_gcc);
|
||||||
{
|
|
||||||
if (cf_gcc->name) evas_stringshare_del(cf_gcc->name);
|
|
||||||
if (cf_gcc->id) evas_stringshare_del(cf_gcc->id);
|
|
||||||
if (cf_gcc->style) evas_stringshare_del(cf_gcc->style);
|
|
||||||
cf_gc->clients = evas_list_remove(cf_gc->clients, cf_gcc);
|
|
||||||
free(cf_gcc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI E_Gadcon_Client *
|
EAPI E_Gadcon_Client *
|
||||||
|
@ -767,10 +722,11 @@ e_gadcon_client_new(E_Gadcon *gc, const char *name, const char *id, const char *
|
||||||
gcc = E_OBJECT_ALLOC(E_Gadcon_Client, E_GADCON_CLIENT_TYPE, _e_gadcon_client_free);
|
gcc = E_OBJECT_ALLOC(E_Gadcon_Client, E_GADCON_CLIENT_TYPE, _e_gadcon_client_free);
|
||||||
if (!gcc) return NULL;
|
if (!gcc) return NULL;
|
||||||
gcc->name = evas_stringshare_add(name);
|
gcc->name = evas_stringshare_add(name);
|
||||||
gcc->id = evas_stringshare_add(id);
|
|
||||||
gcc->gadcon = gc;
|
gcc->gadcon = gc;
|
||||||
gcc->o_base = base_obj;
|
gcc->o_base = base_obj;
|
||||||
gc->clients = evas_list_append(gc->clients, gcc);
|
gc->clients = evas_list_append(gc->clients, gcc);
|
||||||
|
/* This must only be unique during runtime */
|
||||||
|
gcc->id = E_GADCON_CLIENT(evas_list_last(gc->clients))->id + 1;
|
||||||
if ((gc->frame_request.func) && (style))
|
if ((gc->frame_request.func) && (style))
|
||||||
{
|
{
|
||||||
gcc->o_frame = gc->frame_request.func(gc->frame_request.data, gcc, style);
|
gcc->o_frame = gc->frame_request.func(gc->frame_request.data, gcc, style);
|
||||||
|
@ -1227,22 +1183,11 @@ _e_gadcon_client_cb_menu_remove(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
{
|
{
|
||||||
E_Gadcon *gc;
|
E_Gadcon *gc;
|
||||||
E_Gadcon_Client *gcc;
|
E_Gadcon_Client *gcc;
|
||||||
E_Config_Gadcon *cf_gc;
|
|
||||||
E_Config_Gadcon_Client *cf_gcc;
|
|
||||||
|
|
||||||
gcc = data;
|
gcc = data;
|
||||||
gc = gcc->gadcon;
|
gc = gcc->gadcon;
|
||||||
|
|
||||||
cf_gc = e_gadcon_config_get(gcc->gadcon->name, gcc->gadcon->id);
|
e_gadcon_client_config_del(gc->cf, gcc->cf);
|
||||||
if (!cf_gc) return;
|
|
||||||
cf_gcc = e_gadcon_client_config_get(gcc->gadcon, gcc->id);
|
|
||||||
if (!cf_gcc) return;
|
|
||||||
|
|
||||||
if (cf_gcc->name) evas_stringshare_del(cf_gcc->name);
|
|
||||||
if (cf_gcc->id) evas_stringshare_del(cf_gcc->id);
|
|
||||||
if (cf_gcc->style) evas_stringshare_del(cf_gcc->style);
|
|
||||||
free(cf_gcc);
|
|
||||||
cf_gc->clients = evas_list_remove(cf_gc->clients, cf_gcc);
|
|
||||||
e_gadcon_unpopulate(gc);
|
e_gadcon_unpopulate(gc);
|
||||||
e_gadcon_populate(gc);
|
e_gadcon_populate(gc);
|
||||||
e_config_save_queue();
|
e_config_save_queue();
|
||||||
|
@ -1378,22 +1323,6 @@ e_gadcon_client_util_menu_attach(E_Gadcon_Client *gcc)
|
||||||
evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_MOUSE_DOWN, _e_gadcon_client_cb_mouse_down, gcc);
|
evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_MOUSE_DOWN, _e_gadcon_client_cb_mouse_down, gcc);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI E_Gadcon_Client *
|
|
||||||
e_gadcon_client_find(E_Gadcon *gc, const char *id)
|
|
||||||
{
|
|
||||||
Evas_List *l;
|
|
||||||
|
|
||||||
for (l = gc->clients; l; l = l->next)
|
|
||||||
{
|
|
||||||
E_Gadcon_Client *gcc;
|
|
||||||
|
|
||||||
gcc = l->data;
|
|
||||||
if ((gcc->id) && (!strcmp(id, gcc->id)))
|
|
||||||
return gcc;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* local subsystem functions */
|
/* local subsystem functions */
|
||||||
static void
|
static void
|
||||||
_e_gadcon_free(E_Gadcon *gc)
|
_e_gadcon_free(E_Gadcon *gc)
|
||||||
|
@ -1424,7 +1353,6 @@ _e_gadcon_client_free(E_Gadcon_Client *gcc)
|
||||||
if (gcc->o_box) evas_object_del(gcc->o_box);
|
if (gcc->o_box) evas_object_del(gcc->o_box);
|
||||||
if (gcc->o_frame) evas_object_del(gcc->o_frame);
|
if (gcc->o_frame) evas_object_del(gcc->o_frame);
|
||||||
evas_stringshare_del(gcc->name);
|
evas_stringshare_del(gcc->name);
|
||||||
evas_stringshare_del(gcc->id);
|
|
||||||
if (gcc->scroll_timer) ecore_timer_del(gcc->scroll_timer);
|
if (gcc->scroll_timer) ecore_timer_del(gcc->scroll_timer);
|
||||||
if (gcc->scroll_animator) ecore_animator_del(gcc->scroll_animator);
|
if (gcc->scroll_animator) ecore_animator_del(gcc->scroll_animator);
|
||||||
if (gcc->style) evas_stringshare_del(gcc->style);
|
if (gcc->style) evas_stringshare_del(gcc->style);
|
||||||
|
@ -1565,25 +1493,17 @@ _e_gadcon_cb_client_frame_moveresize(void *data, Evas *e, Evas_Object *obj, void
|
||||||
static void
|
static void
|
||||||
_e_gadcon_client_save(E_Gadcon_Client *gcc)
|
_e_gadcon_client_save(E_Gadcon_Client *gcc)
|
||||||
{
|
{
|
||||||
E_Config_Gadcon *cf_gc;
|
gcc->cf->geom.pos = gcc->config.pos;
|
||||||
E_Config_Gadcon_Client *cf_gcc;
|
gcc->cf->geom.size = gcc->config.size;
|
||||||
|
gcc->cf->geom.res = gcc->config.res;
|
||||||
cf_gc = e_gadcon_config_get(gcc->gadcon->name, gcc->gadcon->id);
|
gcc->cf->state_info.seq = gcc->state_info.seq;
|
||||||
if (!cf_gc) return;
|
gcc->cf->state_info.flags = gcc->state_info.flags;
|
||||||
cf_gcc = e_gadcon_client_config_get(gcc->gadcon, gcc->id);
|
gcc->cf->autoscroll = gcc->autoscroll;
|
||||||
if (!cf_gcc) return;
|
if (gcc->cf->style) evas_stringshare_del(gcc->cf->style);
|
||||||
|
gcc->cf->style = NULL;
|
||||||
cf_gcc->geom.pos = gcc->config.pos;
|
|
||||||
cf_gcc->geom.size = gcc->config.size;
|
|
||||||
cf_gcc->geom.res = gcc->config.res;
|
|
||||||
cf_gcc->state_info.seq = gcc->state_info.seq;
|
|
||||||
cf_gcc->state_info.flags = gcc->state_info.flags;
|
|
||||||
cf_gcc->autoscroll = gcc->autoscroll;
|
|
||||||
if (cf_gcc->style) evas_stringshare_del(cf_gcc->style);
|
|
||||||
cf_gcc->style = NULL;
|
|
||||||
if (gcc->style)
|
if (gcc->style)
|
||||||
cf_gcc->style = evas_stringshare_add(gcc->style);
|
gcc->cf->style = evas_stringshare_add(gcc->style);
|
||||||
cf_gcc->resizable = gcc->resizable;
|
gcc->cf->resizable = gcc->resizable;
|
||||||
|
|
||||||
e_config_save_queue();
|
e_config_save_queue();
|
||||||
}
|
}
|
||||||
|
@ -1596,17 +1516,16 @@ _e_gadcon_client_drag_begin(E_Gadcon_Client *gcc, int x, int y)
|
||||||
Evas_Coord w, h;
|
Evas_Coord w, h;
|
||||||
const char *drag_types[] = { "enlightenment/gadcon_client" };
|
const char *drag_types[] = { "enlightenment/gadcon_client" };
|
||||||
|
|
||||||
|
drag_gcc = gcc;
|
||||||
|
|
||||||
e_object_ref(E_OBJECT(gcc));
|
e_object_ref(E_OBJECT(gcc));
|
||||||
/* Delete the config, it will be recreated on drop */
|
/* Remove this config from the current gadcon */
|
||||||
e_gadcon_client_config_del(gcc->gadcon, gcc->id);
|
gcc->gadcon->cf->clients = evas_list_remove(gcc->gadcon->cf->clients, gcc->cf);
|
||||||
gcc->state_info.state = E_LAYOUT_ITEM_STATE_NONE;
|
gcc->state_info.state = E_LAYOUT_ITEM_STATE_NONE;
|
||||||
gcc->state_info.resist = 0;
|
gcc->state_info.resist = 0;
|
||||||
|
|
||||||
if (!e_drop_inside(gcc->gadcon->drop_handler, x, y))
|
if (!e_drop_inside(gcc->gadcon->drop_handler, x, y))
|
||||||
e_gadcon_client_hide(gcc);
|
e_gadcon_client_hide(gcc);
|
||||||
/* Set id on gcc to something we can recognize later */
|
|
||||||
evas_stringshare_del(gcc->id);
|
|
||||||
gcc->id = evas_stringshare_add("drag");
|
|
||||||
|
|
||||||
drag = e_drag_new(gcc->gadcon->zone->container, gcc->drag.x, gcc->drag.y,
|
drag = e_drag_new(gcc->gadcon->zone->container, gcc->drag.x, gcc->drag.y,
|
||||||
drag_types, 1, gcc, -1, NULL, _e_gadcon_cb_drag_finished);
|
drag_types, 1, gcc, -1, NULL, _e_gadcon_cb_drag_finished);
|
||||||
|
@ -2116,12 +2035,22 @@ _e_gadcon_cb_drag_finished(E_Drag *drag, int dropped)
|
||||||
E_Gadcon_Client *gcc;
|
E_Gadcon_Client *gcc;
|
||||||
|
|
||||||
gcc = drag->data;
|
gcc = drag->data;
|
||||||
if (!strcmp(gcc->id, "drag"))
|
if (!dropped)
|
||||||
{
|
{
|
||||||
/* This gadcon client was not dropped on the starting gadcon, delete it */
|
/* free client config */
|
||||||
|
e_gadcon_client_config_del(NULL, gcc->cf);
|
||||||
|
/* delete the gadcon client */
|
||||||
|
/* TODO: Clean up module config too? */
|
||||||
|
e_object_del(E_OBJECT(gcc));
|
||||||
|
}
|
||||||
|
else if (new_gcc)
|
||||||
|
{
|
||||||
|
/* dropped on new gadcon, delete this one as it is no longer in use */
|
||||||
e_object_del(E_OBJECT(gcc));
|
e_object_del(E_OBJECT(gcc));
|
||||||
}
|
}
|
||||||
e_object_unref(E_OBJECT(gcc));
|
e_object_unref(E_OBJECT(gcc));
|
||||||
|
new_gcc = NULL;
|
||||||
|
drag_gcc = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2134,9 +2063,9 @@ _e_gadcon_cb_dnd_enter(void *data, const char *type, void *event)
|
||||||
ev = event;
|
ev = event;
|
||||||
gc = data;
|
gc = data;
|
||||||
e_gadcon_layout_freeze(gc->o_container);
|
e_gadcon_layout_freeze(gc->o_container);
|
||||||
|
gcc = drag_gcc;
|
||||||
|
|
||||||
gcc = e_gadcon_client_find(gc, "drag");
|
if (gcc->gadcon == gc)
|
||||||
if (gcc)
|
|
||||||
{
|
{
|
||||||
/* We have re-entered the gadcon we left, revive gadcon client */
|
/* We have re-entered the gadcon we left, revive gadcon client */
|
||||||
Evas_Coord dx, dy;
|
Evas_Coord dx, dy;
|
||||||
|
@ -2162,7 +2091,6 @@ _e_gadcon_cb_dnd_enter(void *data, const char *type, void *event)
|
||||||
else if (ev->data)
|
else if (ev->data)
|
||||||
{
|
{
|
||||||
/* Create a new gadcon to show where the gadcon will end up */
|
/* Create a new gadcon to show where the gadcon will end up */
|
||||||
E_Gadcon_Client *gcc2;
|
|
||||||
E_Gadcon_Client_Class *cc;
|
E_Gadcon_Client_Class *cc;
|
||||||
|
|
||||||
gcc = ev->data;
|
gcc = ev->data;
|
||||||
|
@ -2171,31 +2099,32 @@ _e_gadcon_cb_dnd_enter(void *data, const char *type, void *event)
|
||||||
{
|
{
|
||||||
if (!gcc->style)
|
if (!gcc->style)
|
||||||
{
|
{
|
||||||
gcc2 = cc->func.init(gc, gcc->name, "new",
|
new_gcc = cc->func.init(gc, gcc->name, gcc->cf->id,
|
||||||
cc->default_style);
|
cc->default_style);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
gcc2 = cc->func.init(gc, gcc->name, "new",
|
new_gcc = cc->func.init(gc, gcc->name, gcc->cf->id,
|
||||||
gcc->style);
|
gcc->style);
|
||||||
|
|
||||||
if (gcc2)
|
if (new_gcc)
|
||||||
{
|
{
|
||||||
gcc2->client_class = cc;
|
new_gcc->cf = gcc->cf;
|
||||||
gcc2->config.pos = gcc->config.pos;
|
new_gcc->client_class = cc;
|
||||||
gcc2->config.size = gcc->config.size;
|
new_gcc->config.pos = gcc->config.pos;
|
||||||
gcc2->config.res = gcc->config.res;
|
new_gcc->config.size = gcc->config.size;
|
||||||
gcc2->state_info.seq = gcc->state_info.seq;
|
new_gcc->config.res = gcc->config.res;
|
||||||
gcc2->state_info.flags = gcc->state_info.flags;
|
new_gcc->state_info.seq = gcc->state_info.seq;
|
||||||
if (gcc2->o_frame)
|
new_gcc->state_info.flags = gcc->state_info.flags;
|
||||||
e_gadcon_layout_pack_options_set(gcc2->o_frame, gcc2);
|
if (new_gcc->o_frame)
|
||||||
|
e_gadcon_layout_pack_options_set(new_gcc->o_frame, new_gcc);
|
||||||
else
|
else
|
||||||
e_gadcon_layout_pack_options_set(gcc2->o_base, gcc2);
|
e_gadcon_layout_pack_options_set(new_gcc->o_base, new_gcc);
|
||||||
|
|
||||||
e_gadcon_client_autoscroll_set(gcc2, gcc->autoscroll);
|
e_gadcon_client_autoscroll_set(new_gcc, gcc->autoscroll);
|
||||||
e_gadcon_client_resizable_set(gcc2, gcc->resizable);
|
e_gadcon_client_resizable_set(new_gcc, gcc->resizable);
|
||||||
if (gcc2->client_class->func.orient)
|
if (new_gcc->client_class->func.orient)
|
||||||
gcc2->client_class->func.orient(gcc2);
|
new_gcc->client_class->func.orient(new_gcc);
|
||||||
gcc2->state_info.resist = 1;
|
new_gcc->state_info.resist = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2211,13 +2140,15 @@ _e_gadcon_cb_dnd_move(void *data, const char *type, void *event)
|
||||||
{
|
{
|
||||||
E_Event_Dnd_Move *ev;
|
E_Event_Dnd_Move *ev;
|
||||||
E_Gadcon *gc;
|
E_Gadcon *gc;
|
||||||
E_Gadcon_Client *gcc;
|
E_Gadcon_Client *gcc = NULL;
|
||||||
|
|
||||||
ev = event;
|
ev = event;
|
||||||
gc = data;
|
gc = data;
|
||||||
|
|
||||||
gcc = e_gadcon_client_find(gc, "drag");
|
/* If we move in the same gadcon as the client originates */
|
||||||
if (!gcc) gcc = e_gadcon_client_find(gc, "new");
|
if (drag_gcc->gadcon == gc) gcc = drag_gcc;
|
||||||
|
/* If we move in the newly entered gadcon */
|
||||||
|
else if (new_gcc->gadcon == gc) gcc = new_gcc;
|
||||||
if (gcc)
|
if (gcc)
|
||||||
{
|
{
|
||||||
Evas_Coord dx, dy;
|
Evas_Coord dx, dy;
|
||||||
|
@ -2230,7 +2161,6 @@ _e_gadcon_cb_dnd_move(void *data, const char *type, void *event)
|
||||||
}
|
}
|
||||||
e_gadcon_layout_freeze(gc->o_container);
|
e_gadcon_layout_freeze(gc->o_container);
|
||||||
|
|
||||||
/* We have re-entered the gadcon we left, revive gadcon client */
|
|
||||||
if (e_gadcon_layout_orientation_get(gc->o_container))
|
if (e_gadcon_layout_orientation_get(gc->o_container))
|
||||||
gcc->config.pos = ev->x - gcc->config.size / 2;
|
gcc->config.pos = ev->x - gcc->config.size / 2;
|
||||||
else
|
else
|
||||||
|
@ -2254,18 +2184,19 @@ _e_gadcon_cb_dnd_leave(void *data, const char *type, void *event)
|
||||||
{
|
{
|
||||||
E_Event_Dnd_Leave *ev;
|
E_Event_Dnd_Leave *ev;
|
||||||
E_Gadcon *gc;
|
E_Gadcon *gc;
|
||||||
E_Gadcon_Client *gcc;
|
|
||||||
|
|
||||||
ev = event;
|
ev = event;
|
||||||
gc = data;
|
gc = data;
|
||||||
|
|
||||||
/* If we exit the starting container hide the gadcon visual */
|
/* If we exit the starting container hide the gadcon visual */
|
||||||
gcc = e_gadcon_client_find(gc, "drag");
|
if (drag_gcc->gadcon == gc) e_gadcon_client_hide(drag_gcc);
|
||||||
if (gcc) e_gadcon_client_hide(gcc);
|
|
||||||
|
|
||||||
/* Delete temporary object */
|
/* Delete temporary object */
|
||||||
gcc = e_gadcon_client_find(gc, "new");
|
if (new_gcc)
|
||||||
if (gcc) e_object_del(E_OBJECT(gcc));
|
{
|
||||||
|
e_object_del(E_OBJECT(new_gcc));
|
||||||
|
new_gcc = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2273,20 +2204,14 @@ _e_gadcon_cb_drop(void *data, const char *type, void *event)
|
||||||
{
|
{
|
||||||
E_Event_Dnd_Drop *ev;
|
E_Event_Dnd_Drop *ev;
|
||||||
E_Gadcon *gc;
|
E_Gadcon *gc;
|
||||||
E_Gadcon_Client *gcc;
|
E_Gadcon_Client *gcc = NULL;
|
||||||
|
|
||||||
E_Config_Gadcon_Client *cf_gcc;
|
|
||||||
|
|
||||||
ev = event;
|
ev = event;
|
||||||
gc = data;
|
gc = data;
|
||||||
gcc = e_gadcon_client_find(gc, "drag");
|
if (drag_gcc->gadcon == gc) gcc = drag_gcc;
|
||||||
if (!gcc) gcc = e_gadcon_client_find(gc, "new");
|
else if ((new_gcc) && (new_gcc->gadcon == gc)) gcc = new_gcc;
|
||||||
if (!gcc) return;
|
|
||||||
|
|
||||||
/* Create config for new gadcon client */
|
gc->cf->clients = evas_list_append(gc->cf->clients, gcc->cf);
|
||||||
cf_gcc = e_gadcon_client_config_new(gc, gcc->name);
|
|
||||||
evas_stringshare_del(gcc->id);
|
|
||||||
gcc->id = evas_stringshare_add(cf_gcc->id);
|
|
||||||
|
|
||||||
if (gc->editing) e_gadcon_client_edit_begin(gcc);
|
if (gc->editing) e_gadcon_client_edit_begin(gcc);
|
||||||
e_config_save_queue();
|
e_config_save_queue();
|
||||||
|
@ -4859,3 +4784,13 @@ _e_gadcon_layout_smart_restore_gadcons_position_before_move(E_Smart_Data *sd, E_
|
||||||
lc->state = E_LAYOUT_ITEM_CONTAINER_STATE_NONE;
|
lc->state = E_LAYOUT_ITEM_CONTAINER_STATE_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_e_gadcon_client_class_version_check(E_Gadcon_Client_Class *cc)
|
||||||
|
{
|
||||||
|
if (cc->version == GADCON_CLIENT_CLASS_VERSION) return 1;
|
||||||
|
e_util_dialog_show("Old module version",
|
||||||
|
"Module %s is version %d, it must be<br>"
|
||||||
|
"version %d to work with e17", cc->name, cc->version, GADCON_CLIENT_CLASS_VERSION);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
*/
|
*/
|
||||||
#ifdef E_TYPEDEFS
|
#ifdef E_TYPEDEFS
|
||||||
|
|
||||||
|
#define E_GADCON_CLIENT(x) ((E_Gadcon_Client *)(x))
|
||||||
|
|
||||||
/* different layout policies - only 1 supported for now */
|
/* different layout policies - only 1 supported for now */
|
||||||
typedef enum _E_Gadcon_Layout_Policy
|
typedef enum _E_Gadcon_Layout_Policy
|
||||||
{
|
{
|
||||||
|
@ -84,9 +86,11 @@ struct _E_Gadcon
|
||||||
E_Shelf *shelf;
|
E_Shelf *shelf;
|
||||||
|
|
||||||
E_Drop_Handler *drop_handler;
|
E_Drop_Handler *drop_handler;
|
||||||
|
|
||||||
|
E_Config_Gadcon *cf;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GADCON_CLIENT_CLASS_VERSION 1
|
#define GADCON_CLIENT_CLASS_VERSION 2
|
||||||
struct _E_Gadcon_Client_Class
|
struct _E_Gadcon_Client_Class
|
||||||
{
|
{
|
||||||
int version;
|
int version;
|
||||||
|
@ -99,6 +103,11 @@ struct _E_Gadcon_Client_Class
|
||||||
char *(*label) (void);
|
char *(*label) (void);
|
||||||
Evas_Object *(*icon) (Evas *evas);
|
Evas_Object *(*icon) (Evas *evas);
|
||||||
/* All members below are part of version 2 */
|
/* All members below are part of version 2 */
|
||||||
|
/* Create new id, so that the gadcon client can refer to a config set inside the module */
|
||||||
|
const char *(*id_new) (void);
|
||||||
|
/* Del an id when a gadcon client is removed from the system */
|
||||||
|
void (*id_del) (const char *id);
|
||||||
|
/* All members below are part of version 3 */
|
||||||
} func;
|
} func;
|
||||||
char *default_style;
|
char *default_style;
|
||||||
};
|
};
|
||||||
|
@ -108,7 +117,7 @@ struct _E_Gadcon_Client
|
||||||
E_Object e_obj_inherit;
|
E_Object e_obj_inherit;
|
||||||
E_Gadcon *gadcon;
|
E_Gadcon *gadcon;
|
||||||
const char *name;
|
const char *name;
|
||||||
const char *id;
|
int id;
|
||||||
Evas_Object *o_base;
|
Evas_Object *o_base;
|
||||||
Evas_Object *o_box;
|
Evas_Object *o_box;
|
||||||
Evas_Object *o_frame;
|
Evas_Object *o_frame;
|
||||||
|
@ -153,15 +162,16 @@ struct _E_Gadcon_Client
|
||||||
} drag;
|
} drag;
|
||||||
|
|
||||||
unsigned char hidden : 1;
|
unsigned char hidden : 1;
|
||||||
|
|
||||||
|
E_Config_Gadcon_Client *cf;
|
||||||
};
|
};
|
||||||
|
|
||||||
EAPI int e_gadcon_init(void);
|
EAPI int e_gadcon_init(void);
|
||||||
EAPI int e_gadcon_shutdown(void);
|
EAPI int e_gadcon_shutdown(void);
|
||||||
EAPI E_Config_Gadcon *e_gadcon_config_get(const char *name, const char *id);
|
|
||||||
EAPI void e_gadcon_provider_register(const E_Gadcon_Client_Class *cc);
|
EAPI void e_gadcon_provider_register(const E_Gadcon_Client_Class *cc);
|
||||||
EAPI void e_gadcon_provider_unregister(const E_Gadcon_Client_Class *cc);
|
EAPI void e_gadcon_provider_unregister(const E_Gadcon_Client_Class *cc);
|
||||||
EAPI Evas_List *e_gadcon_provider_list(void);
|
EAPI Evas_List *e_gadcon_provider_list(void);
|
||||||
EAPI E_Gadcon *e_gadcon_swallowed_new(const char *name, char *id, Evas_Object *obj, char *swallow_name);
|
EAPI E_Gadcon *e_gadcon_swallowed_new(const char *name, const char *id, Evas_Object *obj, char *swallow_name);
|
||||||
EAPI void e_gadcon_swallowed_min_size_set(E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
|
EAPI void e_gadcon_swallowed_min_size_set(E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
|
||||||
EAPI void e_gadcon_min_size_request_callback_set(E_Gadcon *gc, void (*func) (void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h), void *data);
|
EAPI void e_gadcon_min_size_request_callback_set(E_Gadcon *gc, void (*func) (void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h), void *data);
|
||||||
EAPI void e_gadcon_size_request_callback_set(E_Gadcon *gc, void (*func) (void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h), void *data);
|
EAPI void e_gadcon_size_request_callback_set(E_Gadcon *gc, void (*func) (void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h), void *data);
|
||||||
|
@ -186,8 +196,7 @@ EAPI void e_gadcon_shelf_set(E_Gadcon *gc, E_Shelf *shelf);
|
||||||
EAPI E_Shelf *e_gadcon_shelf_get(E_Gadcon *gc);
|
EAPI E_Shelf *e_gadcon_shelf_get(E_Gadcon *gc);
|
||||||
|
|
||||||
EAPI E_Config_Gadcon_Client *e_gadcon_client_config_new(E_Gadcon *gc, const char *name);
|
EAPI E_Config_Gadcon_Client *e_gadcon_client_config_new(E_Gadcon *gc, const char *name);
|
||||||
EAPI E_Config_Gadcon_Client *e_gadcon_client_config_get(E_Gadcon *gc, const char *id);
|
EAPI void e_gadcon_client_config_del(E_Config_Gadcon *cf_gc, E_Config_Gadcon_Client *cf_gcc);
|
||||||
EAPI void e_gadcon_client_config_del(E_Gadcon *gc, const char *id);
|
|
||||||
EAPI E_Gadcon_Client *e_gadcon_client_new(E_Gadcon *gc, const char *name, const char *id, const char *style, Evas_Object *base_obj);
|
EAPI E_Gadcon_Client *e_gadcon_client_new(E_Gadcon *gc, const char *name, const char *id, const char *style, Evas_Object *base_obj);
|
||||||
EAPI void e_gadcon_client_edit_begin(E_Gadcon_Client *gcc);
|
EAPI void e_gadcon_client_edit_begin(E_Gadcon_Client *gcc);
|
||||||
EAPI void e_gadcon_client_edit_end(E_Gadcon_Client *gcc);
|
EAPI void e_gadcon_client_edit_end(E_Gadcon_Client *gcc);
|
||||||
|
@ -205,7 +214,5 @@ EAPI int e_gadcon_client_geometry_get(E_Gadcon_Client *gcc, int *x, int *y
|
||||||
EAPI void e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu, int flags);
|
EAPI void e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu, int flags);
|
||||||
EAPI void e_gadcon_client_util_menu_attach(E_Gadcon_Client *gcc);
|
EAPI void e_gadcon_client_util_menu_attach(E_Gadcon_Client *gcc);
|
||||||
|
|
||||||
EAPI E_Gadcon_Client *e_gadcon_client_find(E_Gadcon *gc, const char *id);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -11,12 +11,13 @@ static void _load_available_gadgets(void *data);
|
||||||
static void _load_selected_gadgets(void *data);
|
static void _load_selected_gadgets(void *data);
|
||||||
static int _cb_mod_update(void *data, int type, void *event);
|
static int _cb_mod_update(void *data, int type, void *event);
|
||||||
|
|
||||||
/* Actual config data we will be playing with whil the dialog is active */
|
/* Actual config data we will be playing with while the dialog is active */
|
||||||
struct _E_Config_Dialog_Data
|
struct _E_Config_Dialog_Data
|
||||||
{
|
{
|
||||||
E_Gadcon *gc;
|
E_Gadcon *gc;
|
||||||
char *name_add;
|
char *name_add;
|
||||||
char *id_remove;
|
char *id_remove;
|
||||||
|
Evas_Hash *ids;
|
||||||
Evas_Object *o_add, *o_remove, *o_instances, *o_avail;
|
Evas_Object *o_add, *o_remove, *o_instances, *o_avail;
|
||||||
|
|
||||||
E_Config_Gadcon *cf_gc;
|
E_Config_Gadcon *cf_gc;
|
||||||
|
@ -51,9 +52,19 @@ e_int_gadcon_config(E_Gadcon *gc)
|
||||||
static void
|
static void
|
||||||
_fill_data(E_Config_Dialog_Data *cfdata)
|
_fill_data(E_Config_Dialog_Data *cfdata)
|
||||||
{
|
{
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
cfdata->name_add = NULL;
|
cfdata->name_add = NULL;
|
||||||
cfdata->id_remove = NULL;
|
cfdata->id_remove = NULL;
|
||||||
cfdata->cf_gc = e_gadcon_config_get(cfdata->gc->name, cfdata->gc->id);
|
cfdata->cf_gc = cfdata->gc->cf;
|
||||||
|
|
||||||
|
for (l = cfdata->cf_gc->clients; l; l = l->next)
|
||||||
|
{
|
||||||
|
char buf[32];
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf), "%p", l->data);
|
||||||
|
cfdata->ids = evas_hash_add(cfdata->ids, buf, l->data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
|
@ -71,6 +82,7 @@ static void
|
||||||
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
{
|
{
|
||||||
cfdata->gc->config_dialog = NULL;
|
cfdata->gc->config_dialog = NULL;
|
||||||
|
evas_hash_free(cfdata->ids);
|
||||||
if (cfdata->name_add) free(cfdata->name_add);
|
if (cfdata->name_add) free(cfdata->name_add);
|
||||||
if (cfdata->id_remove) free(cfdata->id_remove);
|
if (cfdata->id_remove) free(cfdata->id_remove);
|
||||||
if (cfdata->hdl) ecore_event_handler_del(cfdata->hdl);
|
if (cfdata->hdl) ecore_event_handler_del(cfdata->hdl);
|
||||||
|
@ -103,7 +115,7 @@ _cb_add_instance(void *data, void *data2)
|
||||||
cfdata = data;
|
cfdata = data;
|
||||||
if (!cfdata) return;
|
if (!cfdata) return;
|
||||||
|
|
||||||
e_gadcon_client_config_new(cfdata->gc, cfdata->name_add);
|
if (!e_gadcon_client_config_new(cfdata->gc, cfdata->name_add)) return;
|
||||||
|
|
||||||
e_gadcon_unpopulate(cfdata->gc);
|
e_gadcon_unpopulate(cfdata->gc);
|
||||||
e_gadcon_populate(cfdata->gc);
|
e_gadcon_populate(cfdata->gc);
|
||||||
|
@ -123,7 +135,7 @@ _cb_remove_instance(void *data, void *data2)
|
||||||
cfdata = data;
|
cfdata = data;
|
||||||
i = e_widget_ilist_selected_get(cfdata->o_instances);
|
i = e_widget_ilist_selected_get(cfdata->o_instances);
|
||||||
|
|
||||||
e_gadcon_client_config_del(cfdata->gc, cfdata->id_remove);
|
e_gadcon_client_config_del(cfdata->cf_gc, evas_hash_find(cfdata->ids, cfdata->id_remove));
|
||||||
|
|
||||||
_load_selected_gadgets(cfdata);
|
_load_selected_gadgets(cfdata);
|
||||||
|
|
||||||
|
@ -259,11 +271,14 @@ _load_selected_gadgets(void *data)
|
||||||
if ((cc->name) && (cf_gcc->name) &&
|
if ((cc->name) && (cf_gcc->name) &&
|
||||||
(!strcmp(cc->name, cf_gcc->name)))
|
(!strcmp(cc->name, cf_gcc->name)))
|
||||||
{
|
{
|
||||||
|
char buf[32];
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf), "%p", cf_gcc);
|
||||||
if (cc->func.label) label = cc->func.label();
|
if (cc->func.label) label = cc->func.label();
|
||||||
if (!label) label = cc->name;
|
if (!label) label = cc->name;
|
||||||
if (cc->func.icon) icon = cc->func.icon(evas);
|
if (cc->func.icon) icon = cc->func.icon(evas);
|
||||||
e_widget_ilist_append(oi, icon, label, _cb_select_client_instance,
|
e_widget_ilist_append(oi, icon, label, _cb_select_client_instance,
|
||||||
cfdata, cf_gcc->id);
|
cfdata, buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,13 +31,14 @@ static void _gc_shutdown(E_Gadcon_Client *gcc);
|
||||||
static void _gc_orient(E_Gadcon_Client *gcc);
|
static void _gc_orient(E_Gadcon_Client *gcc);
|
||||||
static char *_gc_label(void);
|
static char *_gc_label(void);
|
||||||
static Evas_Object *_gc_icon(Evas *evas);
|
static Evas_Object *_gc_icon(Evas *evas);
|
||||||
|
static const char *_gc_id_new(void);
|
||||||
/* and actually define the gadcon class that this module provides (just 1) */
|
/* and actually define the gadcon class that this module provides (just 1) */
|
||||||
static const E_Gadcon_Client_Class _gadcon_class =
|
static const E_Gadcon_Client_Class _gadcon_class =
|
||||||
{
|
{
|
||||||
GADCON_CLIENT_CLASS_VERSION,
|
GADCON_CLIENT_CLASS_VERSION,
|
||||||
"battery",
|
"battery",
|
||||||
{
|
{
|
||||||
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon
|
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL
|
||||||
},
|
},
|
||||||
E_GADCON_CLIENT_STYLE_PLAIN
|
E_GADCON_CLIENT_STYLE_PLAIN
|
||||||
};
|
};
|
||||||
|
@ -148,6 +149,13 @@ _gc_icon(Evas *evas)
|
||||||
edje_object_file_set(o, buf, "icon");
|
edje_object_file_set(o, buf, "icon");
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
_gc_id_new(void)
|
||||||
|
{
|
||||||
|
return _gadcon_class.name;
|
||||||
|
}
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -12,13 +12,14 @@ static void _gc_shutdown(E_Gadcon_Client *gcc);
|
||||||
static void _gc_orient(E_Gadcon_Client *gcc);
|
static void _gc_orient(E_Gadcon_Client *gcc);
|
||||||
static char *_gc_label(void);
|
static char *_gc_label(void);
|
||||||
static Evas_Object *_gc_icon(Evas *evas);
|
static Evas_Object *_gc_icon(Evas *evas);
|
||||||
|
static const char *_gc_id_new(void);
|
||||||
/* and actually define the gadcon class that this module provides (just 1) */
|
/* and actually define the gadcon class that this module provides (just 1) */
|
||||||
static const E_Gadcon_Client_Class _gadcon_class =
|
static const E_Gadcon_Client_Class _gadcon_class =
|
||||||
{
|
{
|
||||||
GADCON_CLIENT_CLASS_VERSION,
|
GADCON_CLIENT_CLASS_VERSION,
|
||||||
"clock",
|
"clock",
|
||||||
{
|
{
|
||||||
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon
|
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL
|
||||||
},
|
},
|
||||||
E_GADCON_CLIENT_STYLE_PLAIN
|
E_GADCON_CLIENT_STYLE_PLAIN
|
||||||
};
|
};
|
||||||
|
@ -102,6 +103,13 @@ _gc_icon(Evas *evas)
|
||||||
edje_object_file_set(o, buf, "icon");
|
edje_object_file_set(o, buf, "icon");
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
_gc_id_new(void)
|
||||||
|
{
|
||||||
|
return _gadcon_class.name;
|
||||||
|
}
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -17,13 +17,14 @@ static void _gc_shutdown(E_Gadcon_Client *gcc);
|
||||||
static void _gc_orient(E_Gadcon_Client *gcc);
|
static void _gc_orient(E_Gadcon_Client *gcc);
|
||||||
static char *_gc_label(void);
|
static char *_gc_label(void);
|
||||||
static Evas_Object *_gc_icon(Evas *evas);
|
static Evas_Object *_gc_icon(Evas *evas);
|
||||||
|
static const char *_gc_id_new(void);
|
||||||
/* and actually define the gadcon class that this module provides (just 1) */
|
/* and actually define the gadcon class that this module provides (just 1) */
|
||||||
static const E_Gadcon_Client_Class _gadcon_class =
|
static const E_Gadcon_Client_Class _gadcon_class =
|
||||||
{
|
{
|
||||||
GADCON_CLIENT_CLASS_VERSION,
|
GADCON_CLIENT_CLASS_VERSION,
|
||||||
"cpufreq",
|
"cpufreq",
|
||||||
{
|
{
|
||||||
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon
|
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL
|
||||||
},
|
},
|
||||||
E_GADCON_CLIENT_STYLE_PLAIN
|
E_GADCON_CLIENT_STYLE_PLAIN
|
||||||
};
|
};
|
||||||
|
@ -141,6 +142,13 @@ _gc_icon(Evas *evas)
|
||||||
edje_object_file_set(o, buf, "icon");
|
edje_object_file_set(o, buf, "icon");
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
_gc_id_new(void)
|
||||||
|
{
|
||||||
|
return _gadcon_class.name;
|
||||||
|
}
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ struct _Config
|
||||||
/* saved * loaded config values */
|
/* saved * loaded config values */
|
||||||
double poll_time;
|
double poll_time;
|
||||||
int restore_governor;
|
int restore_governor;
|
||||||
const char *governor;
|
const char *governor;
|
||||||
/* just config state */
|
/* just config state */
|
||||||
E_Module *module;
|
E_Module *module;
|
||||||
Evas_List *instances;
|
Evas_List *instances;
|
||||||
|
|
|
@ -153,7 +153,7 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
if (cfdata->dir) ci->dir = evas_stringshare_add(cfdata->dir);
|
if (cfdata->dir) ci->dir = evas_stringshare_add(cfdata->dir);
|
||||||
ci->show_label = cfdata->show_label;
|
ci->show_label = cfdata->show_label;
|
||||||
ci->eap_label = cfdata->eap_label;
|
ci->eap_label = cfdata->eap_label;
|
||||||
_ibar_config_update();
|
_ibar_config_update(ci);
|
||||||
e_config_save_queue();
|
e_config_save_queue();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,13 +16,15 @@ static void _gc_shutdown(E_Gadcon_Client *gcc);
|
||||||
static void _gc_orient(E_Gadcon_Client *gcc);
|
static void _gc_orient(E_Gadcon_Client *gcc);
|
||||||
static char *_gc_label(void);
|
static char *_gc_label(void);
|
||||||
static Evas_Object *_gc_icon(Evas *evas);
|
static Evas_Object *_gc_icon(Evas *evas);
|
||||||
|
static const char *_gc_id_new(void);
|
||||||
|
static void _gc_id_del(const char *id);
|
||||||
/* and actually define the gadcon class that this module provides (just 1) */
|
/* and actually define the gadcon class that this module provides (just 1) */
|
||||||
static const E_Gadcon_Client_Class _gadcon_class =
|
static const E_Gadcon_Client_Class _gadcon_class =
|
||||||
{
|
{
|
||||||
GADCON_CLIENT_CLASS_VERSION,
|
GADCON_CLIENT_CLASS_VERSION,
|
||||||
"ibar",
|
"ibar",
|
||||||
{
|
{
|
||||||
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon
|
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, _gc_id_del
|
||||||
},
|
},
|
||||||
E_GADCON_CLIENT_STYLE_INSET
|
E_GADCON_CLIENT_STYLE_INSET
|
||||||
};
|
};
|
||||||
|
@ -44,7 +46,7 @@ struct _Instance
|
||||||
Evas_Object *o_ibar;
|
Evas_Object *o_ibar;
|
||||||
IBar *ibar;
|
IBar *ibar;
|
||||||
E_Drop_Handler *drop_handler;
|
E_Drop_Handler *drop_handler;
|
||||||
const char *dir;
|
Config_Item *ci;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _IBar
|
struct _IBar
|
||||||
|
@ -58,8 +60,6 @@ struct _IBar
|
||||||
int drop_before;
|
int drop_before;
|
||||||
E_Order *apps;
|
E_Order *apps;
|
||||||
Evas_List *icons;
|
Evas_List *icons;
|
||||||
int show_label;
|
|
||||||
int eap_label;
|
|
||||||
Evas_Coord dnd_x, dnd_y;
|
Evas_Coord dnd_x, dnd_y;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ struct _IBar_Icon
|
||||||
} drag;
|
} drag;
|
||||||
};
|
};
|
||||||
|
|
||||||
static IBar *_ibar_new(Evas *evas, const char *dir);
|
static IBar *_ibar_new(Evas *evas, Instance *inst);
|
||||||
static void _ibar_free(IBar *b);
|
static void _ibar_free(IBar *b);
|
||||||
static void _ibar_cb_empty_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
static void _ibar_cb_empty_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
static void _ibar_empty_handle(IBar *b);
|
static void _ibar_empty_handle(IBar *b);
|
||||||
|
@ -137,13 +137,9 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
|
||||||
inst = E_NEW(Instance, 1);
|
inst = E_NEW(Instance, 1);
|
||||||
|
|
||||||
ci = _ibar_config_item_get(id);
|
ci = _ibar_config_item_get(id);
|
||||||
|
inst->ci = ci;
|
||||||
if (!ci->dir) ci->dir = evas_stringshare_add("default");
|
if (!ci->dir) ci->dir = evas_stringshare_add("default");
|
||||||
inst->dir = evas_stringshare_add(ci->dir);
|
b = _ibar_new(gc->evas, inst);
|
||||||
b = _ibar_new(gc->evas, ci->dir);
|
|
||||||
b->show_label = ci->show_label;
|
|
||||||
b->eap_label = ci->eap_label;
|
|
||||||
b->inst = inst;
|
|
||||||
inst->ibar = b;
|
|
||||||
o = b->o_box;
|
o = b->o_box;
|
||||||
gcc = e_gadcon_client_new(gc, name, id, style, o);
|
gcc = e_gadcon_client_new(gc, name, id, style, o);
|
||||||
gcc->data = inst;
|
gcc->data = inst;
|
||||||
|
@ -171,7 +167,6 @@ _gc_shutdown(E_Gadcon_Client *gcc)
|
||||||
Instance *inst;
|
Instance *inst;
|
||||||
|
|
||||||
inst = gcc->data;
|
inst = gcc->data;
|
||||||
evas_stringshare_del(inst->dir);
|
|
||||||
ibar_config->instances = evas_list_remove(ibar_config->instances, inst);
|
ibar_config->instances = evas_list_remove(ibar_config->instances, inst);
|
||||||
e_drop_handler_del(inst->drop_handler);
|
e_drop_handler_del(inst->drop_handler);
|
||||||
_ibar_free(inst->ibar);
|
_ibar_free(inst->ibar);
|
||||||
|
@ -231,6 +226,29 @@ _gc_icon(Evas *evas)
|
||||||
edje_object_file_set(o, buf, "icon");
|
edje_object_file_set(o, buf, "icon");
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
_gc_id_new(void)
|
||||||
|
{
|
||||||
|
Config_Item *ci;
|
||||||
|
|
||||||
|
ci = _ibar_config_item_get(NULL);
|
||||||
|
return ci->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_gc_id_del(const char *id)
|
||||||
|
{
|
||||||
|
Config_Item *ci;
|
||||||
|
|
||||||
|
ci = _ibar_config_item_get(id);
|
||||||
|
if (ci)
|
||||||
|
{
|
||||||
|
if (ci->id) evas_stringshare_del(ci->id);
|
||||||
|
ibar_config->items = evas_list_remove(ibar_config->items, ci);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
@ -238,25 +256,27 @@ _gc_icon(Evas *evas)
|
||||||
/**/
|
/**/
|
||||||
|
|
||||||
static IBar *
|
static IBar *
|
||||||
_ibar_new(Evas *evas, const char *dir)
|
_ibar_new(Evas *evas, Instance *inst)
|
||||||
{
|
{
|
||||||
IBar *b;
|
IBar *b;
|
||||||
char buf[4096];
|
char buf[4096];
|
||||||
|
|
||||||
b = E_NEW(IBar, 1);
|
b = E_NEW(IBar, 1);
|
||||||
|
inst->ibar = b;
|
||||||
|
b->inst = inst;
|
||||||
b->o_box = e_box_add(evas);
|
b->o_box = e_box_add(evas);
|
||||||
e_box_homogenous_set(b->o_box, 1);
|
e_box_homogenous_set(b->o_box, 1);
|
||||||
e_box_orientation_set(b->o_box, 1);
|
e_box_orientation_set(b->o_box, 1);
|
||||||
e_box_align_set(b->o_box, 0.5, 0.5);
|
e_box_align_set(b->o_box, 0.5, 0.5);
|
||||||
if (dir[0] != '/')
|
if (inst->ci->dir[0] != '/')
|
||||||
{
|
{
|
||||||
const char *homedir;
|
const char *homedir;
|
||||||
|
|
||||||
homedir = e_user_homedir_get();
|
homedir = e_user_homedir_get();
|
||||||
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s/.order", homedir, dir);
|
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s/.order", homedir, inst->ci->dir);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
snprintf(buf, sizeof(buf), dir);
|
snprintf(buf, sizeof(buf), inst->ci->dir);
|
||||||
b->apps = e_order_new(buf);
|
b->apps = e_order_new(buf);
|
||||||
e_order_update_callback_set(b->apps, _ibar_cb_app_change, b);
|
e_order_update_callback_set(b->apps, _ibar_cb_app_change, b);
|
||||||
_ibar_fill(b);
|
_ibar_fill(b);
|
||||||
|
@ -432,22 +452,48 @@ _ibar_config_item_get(const char *id)
|
||||||
Evas_List *l;
|
Evas_List *l;
|
||||||
Config_Item *ci;
|
Config_Item *ci;
|
||||||
|
|
||||||
for (l = ibar_config->items; l; l = l->next)
|
if (!id)
|
||||||
{
|
{
|
||||||
ci = l->data;
|
char buf[128];
|
||||||
if ((ci->id) && (ci->dir) && (!strcmp(ci->id, id)))
|
int num = 0;
|
||||||
return ci;
|
|
||||||
|
/* Create id */
|
||||||
|
if (ibar_config->items)
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
ci = evas_list_last(ibar_config->items)->data;
|
||||||
|
p = strrchr(ci->id, '.');
|
||||||
|
if (p) num = atoi(p + 1) + 1;
|
||||||
|
}
|
||||||
|
snprintf(buf, sizeof(buf), "%s.%d", _gadcon_class.name, num);
|
||||||
|
|
||||||
|
/* Create new config */
|
||||||
|
ci = E_NEW(Config_Item, 1);
|
||||||
|
ci->id = evas_stringshare_add(buf);
|
||||||
|
ci->show_label = 1;
|
||||||
|
ci->eap_label = 0;
|
||||||
|
ibar_config->items = evas_list_append(ibar_config->items, ci);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Find old config, or reuse supplied id */
|
||||||
|
for (l = ibar_config->items; l; l = l->next)
|
||||||
|
{
|
||||||
|
ci = l->data;
|
||||||
|
if ((ci->id) && (ci->dir) && (!strcmp(ci->id, id)))
|
||||||
|
return ci;
|
||||||
|
}
|
||||||
|
ci = E_NEW(Config_Item, 1);
|
||||||
|
ci->id = evas_stringshare_add(id);
|
||||||
|
ci->show_label = 1;
|
||||||
|
ci->eap_label = 0;
|
||||||
|
ibar_config->items = evas_list_append(ibar_config->items, ci);
|
||||||
}
|
}
|
||||||
ci = E_NEW(Config_Item, 1);
|
|
||||||
ci->id = evas_stringshare_add(id);
|
|
||||||
ci->show_label = 1;
|
|
||||||
ci->eap_label = 0;
|
|
||||||
ibar_config->items = evas_list_append(ibar_config->items, ci);
|
|
||||||
return ci;
|
return ci;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_ibar_config_update(void)
|
_ibar_config_update(Config_Item *ci)
|
||||||
{
|
{
|
||||||
Evas_List *l;
|
Evas_List *l;
|
||||||
Evas_List *i;
|
Evas_List *i;
|
||||||
|
@ -455,35 +501,27 @@ _ibar_config_update(void)
|
||||||
for (l = ibar_config->instances; l; l = l->next)
|
for (l = ibar_config->instances; l; l = l->next)
|
||||||
{
|
{
|
||||||
Instance *inst;
|
Instance *inst;
|
||||||
Config_Item *ci;
|
char buf[4096];
|
||||||
|
|
||||||
inst = l->data;
|
inst = l->data;
|
||||||
ci = _ibar_config_item_get(inst->gcc->id);
|
if (inst->ci != ci) continue;
|
||||||
if ((inst->dir) && (ci->dir) && (strcmp(ci->dir, inst->dir)))
|
|
||||||
|
_ibar_empty(inst->ibar);
|
||||||
|
if (inst->ibar->apps)
|
||||||
|
e_object_del(E_OBJECT(inst->ibar->apps));
|
||||||
|
if (inst->ci->dir[0] != '/')
|
||||||
{
|
{
|
||||||
char buf[4096];
|
const char *homedir;
|
||||||
|
|
||||||
evas_stringshare_del(inst->dir);
|
homedir = e_user_homedir_get();
|
||||||
inst->dir = evas_stringshare_add(ci->dir);
|
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s/.order", homedir, inst->ci->dir);
|
||||||
_ibar_empty(inst->ibar);
|
|
||||||
if (inst->ibar->apps)
|
|
||||||
e_object_del(E_OBJECT(inst->ibar->apps));
|
|
||||||
if (inst->dir[0] != '/')
|
|
||||||
{
|
|
||||||
const char *homedir;
|
|
||||||
|
|
||||||
homedir = e_user_homedir_get();
|
|
||||||
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s/.order", homedir, inst->dir);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
snprintf(buf, sizeof(buf), inst->dir);
|
|
||||||
inst->ibar->apps = e_order_new(buf);
|
|
||||||
_ibar_fill(inst->ibar);
|
|
||||||
_ibar_resize_handle(inst->ibar);
|
|
||||||
_gc_orient(inst->gcc);
|
|
||||||
}
|
}
|
||||||
inst->ibar->show_label = ci->show_label;
|
else
|
||||||
inst->ibar->eap_label = ci->eap_label;
|
snprintf(buf, sizeof(buf), inst->ci->dir);
|
||||||
|
inst->ibar->apps = e_order_new(buf);
|
||||||
|
_ibar_fill(inst->ibar);
|
||||||
|
_ibar_resize_handle(inst->ibar);
|
||||||
|
_gc_orient(inst->gcc);
|
||||||
|
|
||||||
for (i = inst->ibar->icons; i; i = i->next)
|
for (i = inst->ibar->icons; i; i = i->next)
|
||||||
{
|
{
|
||||||
|
@ -589,7 +627,7 @@ _ibar_icon_fill(IBar_Icon *ic)
|
||||||
evas_object_pass_events_set(ic->o_icon2, 1);
|
evas_object_pass_events_set(ic->o_icon2, 1);
|
||||||
evas_object_show(ic->o_icon2);
|
evas_object_show(ic->o_icon2);
|
||||||
|
|
||||||
switch (ic->ibar->eap_label)
|
switch (ic->ibar->inst->ci->eap_label)
|
||||||
{
|
{
|
||||||
case 0: /* Eap Name */
|
case 0: /* Eap Name */
|
||||||
edje_object_part_text_set(ic->o_holder, "e.text.label", ic->app->name);
|
edje_object_part_text_set(ic->o_holder, "e.text.label", ic->app->name);
|
||||||
|
@ -679,11 +717,9 @@ static void
|
||||||
_ibar_cb_menu_configuration(void *data, E_Menu *m, E_Menu_Item *mi)
|
_ibar_cb_menu_configuration(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
{
|
{
|
||||||
IBar *b;
|
IBar *b;
|
||||||
Config_Item *ci;
|
|
||||||
|
|
||||||
b = data;
|
b = data;
|
||||||
ci = _ibar_config_item_get(b->inst->gcc->id);
|
_config_ibar_module(b->inst->ci);
|
||||||
_config_ibar_module(ci);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -714,7 +750,7 @@ _ibar_cb_icon_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||||
ev = event_info;
|
ev = event_info;
|
||||||
ic = data;
|
ic = data;
|
||||||
_ibar_icon_signal_emit(ic, "e,state,focused", "e");
|
_ibar_icon_signal_emit(ic, "e,state,focused", "e");
|
||||||
if (ic->ibar->show_label)
|
if (ic->ibar->inst->ci->show_label)
|
||||||
_ibar_icon_signal_emit(ic, "e,action,show,label", "e");
|
_ibar_icon_signal_emit(ic, "e,action,show,label", "e");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -727,7 +763,7 @@ _ibar_cb_icon_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||||
ev = event_info;
|
ev = event_info;
|
||||||
ic = data;
|
ic = data;
|
||||||
_ibar_icon_signal_emit(ic, "e,state,unfocused", "e");
|
_ibar_icon_signal_emit(ic, "e,state,unfocused", "e");
|
||||||
if (ic->ibar->show_label)
|
if (ic->ibar->inst->ci->show_label)
|
||||||
_ibar_icon_signal_emit(ic, "e,action,hide,label", "e");
|
_ibar_icon_signal_emit(ic, "e,action,hide,label", "e");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1222,19 +1258,6 @@ e_modapi_shutdown(E_Module *m)
|
||||||
EAPI int
|
EAPI int
|
||||||
e_modapi_save(E_Module *m)
|
e_modapi_save(E_Module *m)
|
||||||
{
|
{
|
||||||
Evas_List *l;
|
|
||||||
|
|
||||||
for (l = ibar_config->instances; l; l = l->next)
|
|
||||||
{
|
|
||||||
Instance *inst;
|
|
||||||
Config_Item *ci;
|
|
||||||
|
|
||||||
inst = l->data;
|
|
||||||
ci = _ibar_config_item_get(inst->gcc->id);
|
|
||||||
if (ci->dir) evas_stringshare_del(ci->dir);
|
|
||||||
/* FIXME: path should be recorded from setup */
|
|
||||||
ci->dir = evas_stringshare_add(inst->dir);
|
|
||||||
}
|
|
||||||
e_config_domain_save("module.ibar", conf_edd, ibar_config);
|
e_config_domain_save("module.ibar", conf_edd, ibar_config);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ EAPI int e_modapi_save (E_Module *m);
|
||||||
EAPI int e_modapi_info (E_Module *m);
|
EAPI int e_modapi_info (E_Module *m);
|
||||||
EAPI int e_modapi_about (E_Module *m);
|
EAPI int e_modapi_about (E_Module *m);
|
||||||
|
|
||||||
void _ibar_config_update(void);
|
void _ibar_config_update(Config_Item *ci);
|
||||||
void _config_ibar_module(Config_Item *ci);
|
void _config_ibar_module(Config_Item *ci);
|
||||||
extern Config *ibar_config;
|
extern Config *ibar_config;
|
||||||
|
|
||||||
|
|
|
@ -165,7 +165,7 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
ci->show_zone = cfdata->zone_policy;
|
ci->show_zone = cfdata->zone_policy;
|
||||||
ci->show_desk = cfdata->desk_policy;
|
ci->show_desk = cfdata->desk_policy;
|
||||||
|
|
||||||
_ibox_config_update();
|
_ibox_config_update(ci);
|
||||||
e_config_save_queue();
|
e_config_save_queue();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,13 +12,15 @@ static void _gc_shutdown(E_Gadcon_Client *gcc);
|
||||||
static void _gc_orient(E_Gadcon_Client *gcc);
|
static void _gc_orient(E_Gadcon_Client *gcc);
|
||||||
static char *_gc_label(void);
|
static char *_gc_label(void);
|
||||||
static Evas_Object *_gc_icon(Evas *evas);
|
static Evas_Object *_gc_icon(Evas *evas);
|
||||||
|
static const char *_gc_id_new(void);
|
||||||
|
static void _gc_id_del(const char *id);
|
||||||
/* and actually define the gadcon class that this module provides (just 1) */
|
/* and actually define the gadcon class that this module provides (just 1) */
|
||||||
static const E_Gadcon_Client_Class _gadcon_class =
|
static const E_Gadcon_Client_Class _gadcon_class =
|
||||||
{
|
{
|
||||||
GADCON_CLIENT_CLASS_VERSION,
|
GADCON_CLIENT_CLASS_VERSION,
|
||||||
"ibox",
|
"ibox",
|
||||||
{
|
{
|
||||||
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon
|
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, _gc_id_del
|
||||||
},
|
},
|
||||||
E_GADCON_CLIENT_STYLE_INSET
|
E_GADCON_CLIENT_STYLE_INSET
|
||||||
};
|
};
|
||||||
|
@ -40,6 +42,7 @@ struct _Instance
|
||||||
Evas_Object *o_ibox;
|
Evas_Object *o_ibox;
|
||||||
IBox *ibox;
|
IBox *ibox;
|
||||||
E_Drop_Handler *drop_handler;
|
E_Drop_Handler *drop_handler;
|
||||||
|
Config_Item *ci;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _IBox
|
struct _IBox
|
||||||
|
@ -52,10 +55,6 @@ struct _IBox
|
||||||
IBox_Icon *ic_drop_before;
|
IBox_Icon *ic_drop_before;
|
||||||
int drop_before;
|
int drop_before;
|
||||||
Evas_List *icons;
|
Evas_List *icons;
|
||||||
int show_label;
|
|
||||||
int show_zone;
|
|
||||||
int show_desk;
|
|
||||||
int icon_label;
|
|
||||||
E_Zone *zone;
|
E_Zone *zone;
|
||||||
Evas_Coord dnd_x, dnd_y;
|
Evas_Coord dnd_x, dnd_y;
|
||||||
};
|
};
|
||||||
|
@ -140,16 +139,12 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
|
||||||
inst = E_NEW(Instance, 1);
|
inst = E_NEW(Instance, 1);
|
||||||
|
|
||||||
ci = _ibox_config_item_get(id);
|
ci = _ibox_config_item_get(id);
|
||||||
|
inst->ci = ci;
|
||||||
|
|
||||||
b = _ibox_new(gc->evas, gc->zone);
|
b = _ibox_new(gc->evas, gc->zone);
|
||||||
b->show_label = ci->show_label;
|
|
||||||
b->show_zone = ci->show_zone;
|
|
||||||
b->show_desk = ci->show_desk;
|
|
||||||
b->icon_label = ci->icon_label;
|
|
||||||
_ibox_fill(b);
|
|
||||||
|
|
||||||
b->inst = inst;
|
b->inst = inst;
|
||||||
inst->ibox = b;
|
inst->ibox = b;
|
||||||
|
_ibox_fill(b);
|
||||||
o = b->o_box;
|
o = b->o_box;
|
||||||
gcc = e_gadcon_client_new(gc, name, id, style, o);
|
gcc = e_gadcon_client_new(gc, name, id, style, o);
|
||||||
gcc->data = inst;
|
gcc->data = inst;
|
||||||
|
@ -236,6 +231,29 @@ _gc_icon(Evas *evas)
|
||||||
edje_object_file_set(o, buf, "icon");
|
edje_object_file_set(o, buf, "icon");
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
_gc_id_new(void)
|
||||||
|
{
|
||||||
|
Config_Item *ci;
|
||||||
|
|
||||||
|
ci = _ibox_config_item_get(NULL);
|
||||||
|
return ci->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_gc_id_del(const char *id)
|
||||||
|
{
|
||||||
|
Config_Item *ci;
|
||||||
|
|
||||||
|
ci = _ibox_config_item_get(id);
|
||||||
|
if (ci)
|
||||||
|
{
|
||||||
|
if (ci->id) evas_stringshare_del(ci->id);
|
||||||
|
ibox_config->items = evas_list_remove(ibox_config->items, ci);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
@ -352,17 +370,17 @@ _ibox_fill(IBox *b)
|
||||||
while ((bd = e_container_border_list_next(bl)))
|
while ((bd = e_container_border_list_next(bl)))
|
||||||
{
|
{
|
||||||
ok = 0;
|
ok = 0;
|
||||||
if ((b->show_zone == 0) && (bd->iconic))
|
if ((b->inst->ci->show_zone == 0) && (bd->iconic))
|
||||||
{
|
{
|
||||||
ok = 1;
|
ok = 1;
|
||||||
}
|
}
|
||||||
else if((b->show_zone == 1) && (bd->iconic))
|
else if((b->inst->ci->show_zone == 1) && (bd->iconic))
|
||||||
{
|
{
|
||||||
if ((b->show_desk == 0) && (bd->zone == b->zone))
|
if ((b->inst->ci->show_desk == 0) && (bd->zone == b->zone))
|
||||||
{
|
{
|
||||||
ok = 1;
|
ok = 1;
|
||||||
}
|
}
|
||||||
else if((b->show_desk == 1) && (bd->zone == b->zone) &&
|
else if((b->inst->ci->show_desk == 1) && (bd->zone == b->zone) &&
|
||||||
(bd->desk == e_desk_current_get(b->zone)))
|
(bd->desk == e_desk_current_get(b->zone)))
|
||||||
{
|
{
|
||||||
ok = 1;
|
ok = 1;
|
||||||
|
@ -538,7 +556,7 @@ _ibox_icon_fill_label(IBox_Icon *ic)
|
||||||
{
|
{
|
||||||
char *label = NULL;
|
char *label = NULL;
|
||||||
|
|
||||||
switch (ic->ibox->icon_label)
|
switch (ic->ibox->inst->ci->icon_label)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
label = ic->border->client.netwm.name;
|
label = ic->border->client.netwm.name;
|
||||||
|
@ -594,18 +612,12 @@ _ibox_zone_find(E_Zone *zone)
|
||||||
for (l = ibox_config->instances; l; l = l->next)
|
for (l = ibox_config->instances; l; l = l->next)
|
||||||
{
|
{
|
||||||
Instance *inst;
|
Instance *inst;
|
||||||
Config_Item *ci;
|
|
||||||
|
|
||||||
inst = l->data;
|
inst = l->data;
|
||||||
ci = _ibox_config_item_get(inst->gcc->id);
|
if (inst->ci->show_zone == 0)
|
||||||
if (!ci) continue;
|
ibox = evas_list_append(ibox, inst->ibox);
|
||||||
|
else if ((inst->ci->show_zone == 1) && (inst->ibox->zone == zone))
|
||||||
if (ci->show_zone == 0)
|
|
||||||
ibox = evas_list_append(ibox, inst->ibox);
|
ibox = evas_list_append(ibox, inst->ibox);
|
||||||
else if (ci->show_zone == 1)
|
|
||||||
{
|
|
||||||
if (inst->ibox->zone == zone) ibox = evas_list_append(ibox, inst->ibox);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return ibox;
|
return ibox;
|
||||||
}
|
}
|
||||||
|
@ -637,7 +649,7 @@ _ibox_cb_icon_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||||
ev = event_info;
|
ev = event_info;
|
||||||
ic = data;
|
ic = data;
|
||||||
_ibox_icon_signal_emit(ic, "e,state,focused", "e");
|
_ibox_icon_signal_emit(ic, "e,state,focused", "e");
|
||||||
if (ic->ibox->show_label)
|
if (ic->ibox->inst->ci->show_label)
|
||||||
{
|
{
|
||||||
_ibox_icon_fill_label(ic);
|
_ibox_icon_fill_label(ic);
|
||||||
_ibox_icon_signal_emit(ic, "e,action,show,label", "e");
|
_ibox_icon_signal_emit(ic, "e,action,show,label", "e");
|
||||||
|
@ -653,7 +665,7 @@ _ibox_cb_icon_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||||
ev = event_info;
|
ev = event_info;
|
||||||
ic = data;
|
ic = data;
|
||||||
_ibox_icon_signal_emit(ic, "e,state,unfocused", "e");
|
_ibox_icon_signal_emit(ic, "e,state,unfocused", "e");
|
||||||
if (ic->ibox->show_label)
|
if (ic->ibox->inst->ci->show_label)
|
||||||
_ibox_icon_signal_emit(ic, "e,action,hide,label", "e");
|
_ibox_icon_signal_emit(ic, "e,action,hide,label", "e");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1022,7 +1034,7 @@ _ibox_cb_event_border_add(void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
b = l->data;
|
b = l->data;
|
||||||
if (_ibox_icon_find(b, ev->border)) continue;
|
if (_ibox_icon_find(b, ev->border)) continue;
|
||||||
if ((b->show_desk) && (ev->border->desk != desk)) continue;
|
if ((b->inst->ci->show_desk) && (ev->border->desk != desk)) continue;
|
||||||
ic = _ibox_icon_new(b, ev->border);
|
ic = _ibox_icon_new(b, ev->border);
|
||||||
if (!ic) continue;
|
if (!ic) continue;
|
||||||
b->icons = evas_list_append(b->icons, ic);
|
b->icons = evas_list_append(b->icons, ic);
|
||||||
|
@ -1084,7 +1096,7 @@ _ibox_cb_event_border_iconify(void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
b = l->data;
|
b = l->data;
|
||||||
if (_ibox_icon_find(b, ev->border)) continue;
|
if (_ibox_icon_find(b, ev->border)) continue;
|
||||||
if ((b->show_desk) && (ev->border->desk != desk)) continue;
|
if ((b->inst->ci->show_desk) && (ev->border->desk != desk)) continue;
|
||||||
ic = _ibox_icon_new(b, ev->border);
|
ic = _ibox_icon_new(b, ev->border);
|
||||||
if (!ic) continue;
|
if (!ic) continue;
|
||||||
b->icons = evas_list_append(b->icons, ic);
|
b->icons = evas_list_append(b->icons, ic);
|
||||||
|
@ -1212,7 +1224,7 @@ _ibox_cb_event_desk_show(void *data, int type, void *event)
|
||||||
for (l = ibox; l; l = l->next)
|
for (l = ibox; l; l = l->next)
|
||||||
{
|
{
|
||||||
b = l->data;
|
b = l->data;
|
||||||
if (b->show_desk)
|
if (b->inst->ci->show_desk)
|
||||||
{
|
{
|
||||||
_ibox_empty(b);
|
_ibox_empty(b);
|
||||||
_ibox_fill(b);
|
_ibox_fill(b);
|
||||||
|
@ -1232,38 +1244,60 @@ _ibox_config_item_get(const char *id)
|
||||||
{
|
{
|
||||||
Evas_List *l;
|
Evas_List *l;
|
||||||
Config_Item *ci;
|
Config_Item *ci;
|
||||||
|
if (!id)
|
||||||
for (l = ibox_config->items; l; l = l->next)
|
|
||||||
{
|
{
|
||||||
ci = l->data;
|
char buf[128];
|
||||||
if ((ci->id) && (!strcmp(ci->id, id)))
|
int num = 0;
|
||||||
return ci;
|
|
||||||
|
/* Create id */
|
||||||
|
if (ibox_config->items)
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
ci = evas_list_last(ibox_config->items)->data;
|
||||||
|
p = strrchr(ci->id, '.');
|
||||||
|
if (p) num = atoi(p + 1) + 1;
|
||||||
|
}
|
||||||
|
snprintf(buf, sizeof(buf), "%s.%d", _gadcon_class.name, num);
|
||||||
|
|
||||||
|
/* Create new config */
|
||||||
|
ci = E_NEW(Config_Item, 1);
|
||||||
|
ci->id = evas_stringshare_add(buf);
|
||||||
|
ci->show_label = 0;
|
||||||
|
ci->show_zone = 1;
|
||||||
|
ci->show_desk = 0;
|
||||||
|
ci->icon_label = 0;
|
||||||
|
ibox_config->items = evas_list_append(ibox_config->items, ci);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Find old config, or reuse supplied id */
|
||||||
|
for (l = ibox_config->items; l; l = l->next)
|
||||||
|
{
|
||||||
|
ci = l->data;
|
||||||
|
if ((ci->id) && (!strcmp(ci->id, id)))
|
||||||
|
return ci;
|
||||||
|
}
|
||||||
|
ci = E_NEW(Config_Item, 1);
|
||||||
|
ci->id = evas_stringshare_add(id);
|
||||||
|
ci->show_label = 0;
|
||||||
|
ci->show_zone = 1;
|
||||||
|
ci->show_desk = 0;
|
||||||
|
ci->icon_label = 0;
|
||||||
|
ibox_config->items = evas_list_append(ibox_config->items, ci);
|
||||||
}
|
}
|
||||||
ci = E_NEW(Config_Item, 1);
|
|
||||||
ci->id = evas_stringshare_add(id);
|
|
||||||
ci->show_label = 0;
|
|
||||||
ci->show_zone = 1;
|
|
||||||
ci->show_desk = 0;
|
|
||||||
ci->icon_label = 0;
|
|
||||||
ibox_config->items = evas_list_append(ibox_config->items, ci);
|
|
||||||
return ci;
|
return ci;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_ibox_config_update(void)
|
_ibox_config_update(Config_Item *ci)
|
||||||
{
|
{
|
||||||
Evas_List *l;
|
Evas_List *l;
|
||||||
for (l = ibox_config->instances; l; l = l->next)
|
for (l = ibox_config->instances; l; l = l->next)
|
||||||
{
|
{
|
||||||
Instance *inst;
|
Instance *inst;
|
||||||
Config_Item *ci;
|
|
||||||
|
|
||||||
inst = l->data;
|
inst = l->data;
|
||||||
ci = _ibox_config_item_get(inst->gcc->id);
|
if (inst->ci != ci) continue;
|
||||||
inst->ibox->show_label = ci->show_label;
|
|
||||||
inst->ibox->show_zone = ci->show_zone;
|
|
||||||
inst->ibox->show_desk = ci->show_desk;
|
|
||||||
inst->ibox->icon_label = ci->icon_label;
|
|
||||||
|
|
||||||
_ibox_empty(inst->ibox);
|
_ibox_empty(inst->ibox);
|
||||||
_ibox_fill(inst->ibox);
|
_ibox_fill(inst->ibox);
|
||||||
|
@ -1281,13 +1315,12 @@ _ibox_cb_menu_configuration(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
Evas_List *l;
|
Evas_List *l;
|
||||||
|
|
||||||
b = data;
|
b = data;
|
||||||
ci = _ibox_config_item_get(b->inst->gcc->id);
|
|
||||||
for (l = ibox_config->config_dialog; l; l = l->next)
|
for (l = ibox_config->config_dialog; l; l = l->next)
|
||||||
{
|
{
|
||||||
E_Config_Dialog *cfd;
|
E_Config_Dialog *cfd;
|
||||||
|
|
||||||
cfd = l->data;
|
cfd = l->data;
|
||||||
if (cfd->data == ci)
|
if (cfd->data == b->inst->ci)
|
||||||
{
|
{
|
||||||
ok = 0;
|
ok = 0;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -34,7 +34,7 @@ EAPI int e_modapi_shutdown (E_Module *m);
|
||||||
EAPI int e_modapi_save (E_Module *m);
|
EAPI int e_modapi_save (E_Module *m);
|
||||||
EAPI int e_modapi_about (E_Module *m);
|
EAPI int e_modapi_about (E_Module *m);
|
||||||
|
|
||||||
void _ibox_config_update(void);
|
void _ibox_config_update(Config_Item *ci);
|
||||||
void _config_ibox_module(Config_Item *ci);
|
void _config_ibox_module(Config_Item *ci);
|
||||||
extern Config *ibox_config;
|
extern Config *ibox_config;
|
||||||
|
|
||||||
|
|
|
@ -12,13 +12,14 @@ static void _gc_shutdown(E_Gadcon_Client *gcc);
|
||||||
static void _gc_orient(E_Gadcon_Client *gcc);
|
static void _gc_orient(E_Gadcon_Client *gcc);
|
||||||
static char *_gc_label(void);
|
static char *_gc_label(void);
|
||||||
static Evas_Object *_gc_icon(Evas *evas);
|
static Evas_Object *_gc_icon(Evas *evas);
|
||||||
|
static const char *_gc_id_new(void);
|
||||||
/* and actually define the gadcon class that this module provides (just 1) */
|
/* and actually define the gadcon class that this module provides (just 1) */
|
||||||
static const E_Gadcon_Client_Class _gadcon_class =
|
static const E_Gadcon_Client_Class _gadcon_class =
|
||||||
{
|
{
|
||||||
GADCON_CLIENT_CLASS_VERSION,
|
GADCON_CLIENT_CLASS_VERSION,
|
||||||
"pager",
|
"pager",
|
||||||
{
|
{
|
||||||
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon
|
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL
|
||||||
},
|
},
|
||||||
E_GADCON_CLIENT_STYLE_INSET
|
E_GADCON_CLIENT_STYLE_INSET
|
||||||
};
|
};
|
||||||
|
@ -250,6 +251,13 @@ _gc_icon(Evas *evas)
|
||||||
edje_object_file_set(o, buf, "icon");
|
edje_object_file_set(o, buf, "icon");
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
_gc_id_new(void)
|
||||||
|
{
|
||||||
|
return _gadcon_class.name;
|
||||||
|
}
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@ struct _Config
|
||||||
unsigned int drag_resist;
|
unsigned int drag_resist;
|
||||||
unsigned int scale;
|
unsigned int scale;
|
||||||
unsigned char resize;
|
unsigned char resize;
|
||||||
Evas_List *items; /* FIXME: save/load this */
|
|
||||||
/* just config state */
|
/* just config state */
|
||||||
E_Module *module;
|
E_Module *module;
|
||||||
E_Config_Dialog *config_dialog;
|
E_Config_Dialog *config_dialog;
|
||||||
|
@ -43,12 +42,6 @@ struct _Config
|
||||||
unsigned int flip_desk;
|
unsigned int flip_desk;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Config_Item
|
|
||||||
{
|
|
||||||
char *id;
|
|
||||||
int zone_num;
|
|
||||||
};
|
|
||||||
|
|
||||||
EAPI extern E_Module_Api e_modapi;
|
EAPI extern E_Module_Api e_modapi;
|
||||||
|
|
||||||
EAPI void *e_modapi_init (E_Module *m);
|
EAPI void *e_modapi_init (E_Module *m);
|
||||||
|
|
|
@ -12,13 +12,14 @@ static void _gc_shutdown(E_Gadcon_Client *gcc);
|
||||||
static void _gc_orient(E_Gadcon_Client *gcc);
|
static void _gc_orient(E_Gadcon_Client *gcc);
|
||||||
static char *_gc_label(void);
|
static char *_gc_label(void);
|
||||||
static Evas_Object *_gc_icon(Evas *evas);
|
static Evas_Object *_gc_icon(Evas *evas);
|
||||||
|
static const char *_gc_id_new(void);
|
||||||
/* and actually define the gadcon class that this module provides (just 1) */
|
/* and actually define the gadcon class that this module provides (just 1) */
|
||||||
static const E_Gadcon_Client_Class _gadcon_class =
|
static const E_Gadcon_Client_Class _gadcon_class =
|
||||||
{
|
{
|
||||||
GADCON_CLIENT_CLASS_VERSION,
|
GADCON_CLIENT_CLASS_VERSION,
|
||||||
"start",
|
"start",
|
||||||
{
|
{
|
||||||
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon
|
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL
|
||||||
},
|
},
|
||||||
E_GADCON_CLIENT_STYLE_PLAIN
|
E_GADCON_CLIENT_STYLE_PLAIN
|
||||||
};
|
};
|
||||||
|
@ -114,6 +115,13 @@ _gc_icon(Evas *evas)
|
||||||
edje_object_file_set(o, buf, "icon");
|
edje_object_file_set(o, buf, "icon");
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
_gc_id_new(void)
|
||||||
|
{
|
||||||
|
return _gadcon_class.name;
|
||||||
|
}
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -17,13 +17,15 @@ static void _gc_shutdown(E_Gadcon_Client *gcc);
|
||||||
static void _gc_orient(E_Gadcon_Client *gcc);
|
static void _gc_orient(E_Gadcon_Client *gcc);
|
||||||
static char *_gc_label(void);
|
static char *_gc_label(void);
|
||||||
static Evas_Object *_gc_icon(Evas *evas);
|
static Evas_Object *_gc_icon(Evas *evas);
|
||||||
|
static const char *_gc_id_new(void);
|
||||||
|
static void _gc_id_del(const char *id);
|
||||||
/* and actually define the gadcon class that this module provides (just 1) */
|
/* and actually define the gadcon class that this module provides (just 1) */
|
||||||
static const E_Gadcon_Client_Class _gadcon_class =
|
static const E_Gadcon_Client_Class _gadcon_class =
|
||||||
{
|
{
|
||||||
GADCON_CLIENT_CLASS_VERSION,
|
GADCON_CLIENT_CLASS_VERSION,
|
||||||
"temperature",
|
"temperature",
|
||||||
{
|
{
|
||||||
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon
|
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, _gc_id_del
|
||||||
},
|
},
|
||||||
E_GADCON_CLIENT_STYLE_PLAIN
|
E_GADCON_CLIENT_STYLE_PLAIN
|
||||||
};
|
};
|
||||||
|
@ -42,6 +44,7 @@ static void _temperature_face_level_set(Config_Face *inst, double level);
|
||||||
static void _temperature_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi);
|
static void _temperature_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
|
|
||||||
static Evas_Bool _temperature_face_shutdown(Evas_Hash *hash, const char *key, void *hdata, void *fdata);
|
static Evas_Bool _temperature_face_shutdown(Evas_Hash *hash, const char *key, void *hdata, void *fdata);
|
||||||
|
static Evas_Bool _temperature_face_id_max(Evas_Hash *hash, const char *key, void *hdata, void *fdata);
|
||||||
|
|
||||||
static E_Config_DD *conf_edd = NULL;
|
static E_Config_DD *conf_edd = NULL;
|
||||||
static E_Config_DD *conf_face_edd = NULL;
|
static E_Config_DD *conf_face_edd = NULL;
|
||||||
|
@ -59,7 +62,7 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
|
||||||
if (!inst)
|
if (!inst)
|
||||||
{
|
{
|
||||||
inst = E_NEW(Config_Face, 1);
|
inst = E_NEW(Config_Face, 1);
|
||||||
temperature_config->faces = evas_hash_add(temperature_config->faces, id, inst);
|
inst->id = evas_stringshare_add(id);
|
||||||
inst->poll_time = 10.0;
|
inst->poll_time = 10.0;
|
||||||
inst->low = 30;
|
inst->low = 30;
|
||||||
inst->high = 80;
|
inst->high = 80;
|
||||||
|
@ -67,7 +70,9 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
|
||||||
inst->sensor_name = NULL;
|
inst->sensor_name = NULL;
|
||||||
inst->sensor_path = NULL;
|
inst->sensor_path = NULL;
|
||||||
inst->units = CELCIUS;
|
inst->units = CELCIUS;
|
||||||
|
temperature_config->faces = evas_hash_direct_add(temperature_config->faces, inst->id, inst);
|
||||||
}
|
}
|
||||||
|
if (!inst->id) evas_stringshare_add(id);
|
||||||
E_CONFIG_LIMIT(inst->poll_time, 0.5, 1000.0);
|
E_CONFIG_LIMIT(inst->poll_time, 0.5, 1000.0);
|
||||||
E_CONFIG_LIMIT(inst->low, 0, 100);
|
E_CONFIG_LIMIT(inst->low, 0, 100);
|
||||||
E_CONFIG_LIMIT(inst->high, 0, 220);
|
E_CONFIG_LIMIT(inst->high, 0, 220);
|
||||||
|
@ -139,6 +144,45 @@ _gc_icon(Evas *evas)
|
||||||
edje_object_file_set(o, buf, "icon");
|
edje_object_file_set(o, buf, "icon");
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
_gc_id_new(void)
|
||||||
|
{
|
||||||
|
Config_Face *inst;
|
||||||
|
char id[128];
|
||||||
|
int num = 0;
|
||||||
|
|
||||||
|
evas_hash_foreach(temperature_config->faces, _temperature_face_id_max, &num);
|
||||||
|
snprintf(id, sizeof(id), "%s.%d", _gadcon_class.name, num + 1);
|
||||||
|
|
||||||
|
inst = E_NEW(Config_Face, 1);
|
||||||
|
inst->id = evas_stringshare_add(id);
|
||||||
|
inst->poll_time = 10.0;
|
||||||
|
inst->low = 30;
|
||||||
|
inst->high = 80;
|
||||||
|
inst->sensor_type = SENSOR_TYPE_NONE;
|
||||||
|
inst->sensor_name = NULL;
|
||||||
|
inst->sensor_path = NULL;
|
||||||
|
inst->units = CELCIUS;
|
||||||
|
temperature_config->faces = evas_hash_direct_add(temperature_config->faces, inst->id, inst);
|
||||||
|
return inst->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_gc_id_del(const char *id)
|
||||||
|
{
|
||||||
|
Config_Face *inst;
|
||||||
|
|
||||||
|
inst = evas_hash_find(temperature_config->faces, id);
|
||||||
|
if (inst)
|
||||||
|
{
|
||||||
|
temperature_config->faces = evas_hash_del(temperature_config->faces, id, inst);
|
||||||
|
if (inst->sensor_name) evas_stringshare_del(inst->sensor_name);
|
||||||
|
if (inst->sensor_path) evas_stringshare_del(inst->sensor_path);
|
||||||
|
free(inst);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
@ -525,10 +569,25 @@ _temperature_face_shutdown(Evas_Hash *hash, const char *key, void *hdata, void *
|
||||||
|
|
||||||
if (inst->sensor_name) evas_stringshare_del(inst->sensor_name);
|
if (inst->sensor_name) evas_stringshare_del(inst->sensor_name);
|
||||||
if (inst->sensor_path) evas_stringshare_del(inst->sensor_path);
|
if (inst->sensor_path) evas_stringshare_del(inst->sensor_path);
|
||||||
|
if (inst->id) evas_stringshare_del(inst->id);
|
||||||
free(inst);
|
free(inst);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Evas_Bool
|
||||||
|
_temperature_face_id_max(Evas_Hash *hash, const char *key, void *hdata, void *fdata)
|
||||||
|
{
|
||||||
|
const char *p;
|
||||||
|
int *max;
|
||||||
|
int num = -1;
|
||||||
|
|
||||||
|
max = (int *)fdata;
|
||||||
|
p = strrchr(key, '.');
|
||||||
|
if (p) num = atoi(p + 1);
|
||||||
|
if (num > *max) *max = num;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
temperature_face_update_config(Config_Face *inst)
|
temperature_face_update_config(Config_Face *inst)
|
||||||
{
|
{
|
||||||
|
@ -595,6 +654,7 @@ temperature_get_i2c_files()
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
/**/
|
/**/
|
||||||
/* module setup */
|
/* module setup */
|
||||||
|
@ -612,6 +672,7 @@ e_modapi_init(E_Module *m)
|
||||||
#undef D
|
#undef D
|
||||||
#define T Config_Face
|
#define T Config_Face
|
||||||
#define D conf_face_edd
|
#define D conf_face_edd
|
||||||
|
E_CONFIG_VAL(D, T, id, STR);
|
||||||
E_CONFIG_VAL(D, T, poll_time, DOUBLE);
|
E_CONFIG_VAL(D, T, poll_time, DOUBLE);
|
||||||
E_CONFIG_VAL(D, T, low, INT);
|
E_CONFIG_VAL(D, T, low, INT);
|
||||||
E_CONFIG_VAL(D, T, high, INT);
|
E_CONFIG_VAL(D, T, high, INT);
|
||||||
|
|
|
@ -27,6 +27,7 @@ typedef enum _Sensor_Type
|
||||||
|
|
||||||
struct _Config_Face
|
struct _Config_Face
|
||||||
{
|
{
|
||||||
|
const char *id;
|
||||||
/* saved * loaded config values */
|
/* saved * loaded config values */
|
||||||
double poll_time;
|
double poll_time;
|
||||||
int low, high;
|
int low, high;
|
||||||
|
|
Loading…
Reference in New Issue