forked from enlightenment/enlightenment
parent
99fa80874a
commit
fce2c3b1fc
|
@ -37,6 +37,8 @@ static E_Config_DD *_e_config_remember_edd = NULL;
|
|||
static E_Config_DD *_e_config_color_class_edd = NULL;
|
||||
static E_Config_DD *_e_config_gadcon_edd = NULL;
|
||||
static E_Config_DD *_e_config_gadcon_client_edd = NULL;
|
||||
static E_Config_DD *_e_config_shelf_edd = NULL;
|
||||
static E_Config_DD *_e_config_shelf_config_edd = NULL;
|
||||
|
||||
|
||||
/* externally accessible functions */
|
||||
|
@ -98,6 +100,32 @@ e_config_init(void)
|
|||
E_CONFIG_VAL(D, T, id, STR);
|
||||
E_CONFIG_LIST(D, T, clients, _e_config_gadcon_client_edd);
|
||||
|
||||
_e_config_shelf_config_edd = E_CONFIG_DD_NEW("E_Config_Shelf_Config", E_Config_Shelf_Config);
|
||||
#undef T
|
||||
#undef D
|
||||
#define T E_Config_Shelf_Config
|
||||
#define D _e_config_shelf_config_edd
|
||||
E_CONFIG_VAL(D, T, res.w, INT);
|
||||
E_CONFIG_VAL(D, T, res.h, INT);
|
||||
E_CONFIG_VAL(D, T, x, INT);
|
||||
E_CONFIG_VAL(D, T, y, INT);
|
||||
E_CONFIG_VAL(D, T, w, INT);
|
||||
E_CONFIG_VAL(D, T, h, INT);
|
||||
E_CONFIG_VAL(D, T, orient, INT);
|
||||
E_CONFIG_VAL(D, T, style, STR);
|
||||
|
||||
_e_config_shelf_edd = E_CONFIG_DD_NEW("E_Config_Shelf", E_Config_Shelf);
|
||||
#undef T
|
||||
#undef D
|
||||
#define T E_Config_Shelf
|
||||
#define D _e_config_shelf_edd
|
||||
E_CONFIG_VAL(D, T, name, STR);
|
||||
E_CONFIG_VAL(D, T, container, INT);
|
||||
E_CONFIG_VAL(D, T, zone, INT);
|
||||
E_CONFIG_VAL(D, T, layer, INT);
|
||||
E_CONFIG_VAL(D, T, popup, UCHAR);
|
||||
E_CONFIG_LIST(D, T, configs, _e_config_shelf_config_edd);
|
||||
|
||||
_e_config_desktop_bg_edd = E_CONFIG_DD_NEW("E_Config_Desktop_Background", E_Config_Desktop_Background);
|
||||
#undef T
|
||||
#undef D
|
||||
|
@ -428,6 +456,7 @@ e_config_init(void)
|
|||
E_CONFIG_VAL(D, T, cfgdlg_auto_apply, INT); /**/
|
||||
E_CONFIG_VAL(D, T, cfgdlg_default_mode, INT); /**/
|
||||
E_CONFIG_LIST(D, T, gadcons, _e_config_gadcon_edd);
|
||||
E_CONFIG_LIST(D, T, shelves, _e_config_shelf_edd);
|
||||
|
||||
e_config = e_config_domain_load("e", _e_config_edd);
|
||||
if (e_config)
|
||||
|
@ -581,6 +610,30 @@ e_config_init(void)
|
|||
e_config->gadcons = NULL;
|
||||
|
||||
/* FIXME: fill up default gadcons! */
|
||||
{
|
||||
E_Config_Shelf *cf_es;
|
||||
E_Config_Shelf_Config *cf_escf;
|
||||
|
||||
cf_es = E_NEW(E_Config_Shelf, 1);
|
||||
cf_es->name = evas_stringshare_add("shelf");
|
||||
cf_es->container = 0;
|
||||
cf_es->zone = 0;
|
||||
cf_es->popup = 1;
|
||||
cf_es->layer = 200;
|
||||
e_config->shelves = evas_list_append(e_config->shelves, cf_es);
|
||||
|
||||
cf_escf = E_NEW(E_Config_Shelf_Config, 1);
|
||||
cf_escf->res.w = 800;
|
||||
cf_escf->res.h = 600;
|
||||
cf_escf->x = 0;
|
||||
cf_escf->y = 0;
|
||||
cf_escf->w = 800;
|
||||
cf_escf->h = 32;
|
||||
cf_escf->orient = E_GADCON_ORIENT_TOP;
|
||||
cf_escf->style = evas_stringshare_add("default");
|
||||
cf_es->configs = evas_list_append(cf_es->configs, cf_escf);
|
||||
}
|
||||
|
||||
{
|
||||
E_Config_Gadcon *cf_gc;
|
||||
E_Config_Gadcon_Client *cf_gcc;
|
||||
|
@ -1628,6 +1681,8 @@ e_config_shutdown(void)
|
|||
E_CONFIG_DD_FREE(_e_config_remember_edd);
|
||||
E_CONFIG_DD_FREE(_e_config_gadcon_edd);
|
||||
E_CONFIG_DD_FREE(_e_config_gadcon_client_edd);
|
||||
E_CONFIG_DD_FREE(_e_config_shelf_edd);
|
||||
E_CONFIG_DD_FREE(_e_config_shelf_config_edd);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,8 @@ typedef struct _E_Config_Desktop_Background E_Config_Desktop_Background;
|
|||
typedef struct _E_Config_Desktop_Name E_Config_Desktop_Name;
|
||||
typedef struct _E_Config_Gadcon E_Config_Gadcon;
|
||||
typedef struct _E_Config_Gadcon_Client E_Config_Gadcon_Client;
|
||||
typedef struct _E_Config_Shelf E_Config_Shelf;
|
||||
typedef struct _E_Config_Shelf_Config E_Config_Shelf_Config;
|
||||
|
||||
typedef Eet_Data_Descriptor E_Config_DD;
|
||||
|
||||
|
@ -47,7 +49,7 @@ typedef Eet_Data_Descriptor E_Config_DD;
|
|||
* versioning feature. the value of this is really irrelevant - just as
|
||||
* long as it increases every time we change something
|
||||
*/
|
||||
#define E_CONFIG_FILE_VERSION 137
|
||||
#define E_CONFIG_FILE_VERSION 138
|
||||
|
||||
#define E_EVAS_ENGINE_DEFAULT 0
|
||||
#define E_EVAS_ENGINE_SOFTWARE_X11 1
|
||||
|
@ -207,6 +209,7 @@ struct _E_Config
|
|||
int cfgdlg_auto_apply; // GUI
|
||||
int cfgdlg_default_mode; // GUI
|
||||
Evas_List *gadcons;
|
||||
Evas_List *shelves;
|
||||
};
|
||||
|
||||
struct _E_Config_Module
|
||||
|
@ -295,6 +298,25 @@ struct _E_Config_Gadcon_Client
|
|||
} geom;
|
||||
};
|
||||
|
||||
struct _E_Config_Shelf
|
||||
{
|
||||
char *name;
|
||||
int container, zone;
|
||||
int layer;
|
||||
unsigned char popup;
|
||||
Evas_List *configs;
|
||||
};
|
||||
|
||||
struct _E_Config_Shelf_Config
|
||||
{
|
||||
struct {
|
||||
int w, h;
|
||||
} res;
|
||||
int x, y, w, h;
|
||||
int orient;
|
||||
char *style;
|
||||
};
|
||||
|
||||
EAPI int e_config_init(void);
|
||||
EAPI int e_config_shutdown(void);
|
||||
|
||||
|
|
|
@ -663,33 +663,8 @@ main(int argc, char **argv)
|
|||
e_test();
|
||||
|
||||
/* FIXME: for testing only */
|
||||
if (0)
|
||||
{
|
||||
Evas_List *l, *l2, *l3, *managers;
|
||||
|
||||
for (l = e_manager_list(); l; l = l->next)
|
||||
{
|
||||
E_Manager *man;
|
||||
|
||||
man = l->data;
|
||||
for (l2 = man->containers; l2; l2 = l2->next)
|
||||
{
|
||||
E_Container *con;
|
||||
|
||||
con = l2->data;
|
||||
for (l3 = con->zones; l3; l3 = l3->next)
|
||||
{
|
||||
E_Zone *zone;
|
||||
E_Shelf *es;
|
||||
|
||||
zone = l3->data;
|
||||
es = e_shelf_zone_new(zone, "shelf", 0, 200);
|
||||
e_shelf_populate(es);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// e_shelf_config_init();
|
||||
|
||||
/* no longer starting up */
|
||||
starting = 0;
|
||||
/* start our main loop */
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "e.h"
|
||||
|
||||
static void _e_shelf_free(E_Shelf *es);
|
||||
static void _e_shelf_config_port(E_Config_Shelf_Config *cf1, E_Config_Shelf_Config *cf2);
|
||||
|
||||
static Evas_List *shelves = NULL;
|
||||
static int shelf_id = 0;
|
||||
|
@ -21,8 +22,82 @@ e_shelf_shutdown(void)
|
|||
return 1;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_shelf_config_init(void)
|
||||
{
|
||||
Evas_List *l, *l2;
|
||||
|
||||
for (l = e_config->shelves; l; l = l->next)
|
||||
{
|
||||
E_Config_Shelf *cf_es;
|
||||
E_Config_Shelf_Config *cf_escf, *cf_escf2;
|
||||
E_Zone *zone;
|
||||
int closeness;
|
||||
|
||||
cf_es = l->data;
|
||||
zone = e_util_container_zone_number_get(cf_es->container, cf_es->zone);
|
||||
if (zone)
|
||||
{
|
||||
cf_escf2 = NULL;
|
||||
closeness = 0x7fffffff;
|
||||
for (l2 = cf_es->configs; l2; l2 = l2->next)
|
||||
{
|
||||
cf_escf = l2->data;
|
||||
if ((cf_escf->res.w == zone->w) &&
|
||||
(cf_escf->res.h == zone->h))
|
||||
{
|
||||
cf_escf2 = cf_escf;
|
||||
closeness = 0;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
int difx, dify;
|
||||
|
||||
difx = cf_escf->res.w - zone->w;
|
||||
if (difx < 0) difx = -difx;
|
||||
dify = cf_escf->res.h - zone->h;
|
||||
if (dify < 0) dify = -dify;
|
||||
difx = difx * dify;
|
||||
if (difx < closeness)
|
||||
{
|
||||
closeness = difx;
|
||||
cf_escf2 = cf_escf;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((closeness != 0) && (cf_escf2))
|
||||
{
|
||||
cf_escf = E_NEW(E_Config_Shelf_Config, 1);
|
||||
cf_escf->res.w = zone->w;
|
||||
cf_escf->res.h = zone->h;
|
||||
cf_escf->orient = cf_escf2->orient;
|
||||
cf_escf->style = evas_stringshare_add(cf_escf2->style);
|
||||
_e_shelf_config_port(cf_escf2, cf_escf);
|
||||
cf_escf2 = cf_escf;
|
||||
e_config_save_queue();
|
||||
}
|
||||
if (cf_escf2)
|
||||
{
|
||||
E_Shelf *es;
|
||||
|
||||
es = e_shelf_zone_new(zone, cf_es->name, cf_escf2->style,
|
||||
cf_es->popup, cf_es->layer);
|
||||
if (es)
|
||||
{
|
||||
e_shelf_move_resize(es, cf_escf2->x, cf_escf2->y,
|
||||
cf_escf2->w, cf_escf2->h);
|
||||
e_shelf_orient(es, cf_escf2->orient);
|
||||
e_shelf_populate(es);
|
||||
e_shelf_show(es);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EAPI E_Shelf *
|
||||
e_shelf_zone_new(E_Zone *zone, char *name, int popup, int layer)
|
||||
e_shelf_zone_new(E_Zone *zone, char *name, char *style, int popup, int layer)
|
||||
{
|
||||
E_Shelf *es;
|
||||
char buf[1024];
|
||||
|
@ -30,11 +105,9 @@ e_shelf_zone_new(E_Zone *zone, char *name, int popup, int layer)
|
|||
es = E_OBJECT_ALLOC(E_Shelf, E_SHELF_TYPE, _e_shelf_free);
|
||||
if (!es) return NULL;
|
||||
|
||||
/* FIXME: geometry, layer and style shoudl be loaded from config for this
|
||||
named shelf */
|
||||
es->x = 0;
|
||||
es->y = 0;
|
||||
es->w = zone->w;
|
||||
es->w = 32;
|
||||
es->h = 32;
|
||||
if (popup)
|
||||
{
|
||||
|
@ -50,25 +123,24 @@ e_shelf_zone_new(E_Zone *zone, char *name, int popup, int layer)
|
|||
}
|
||||
es->layer = layer;
|
||||
es->zone = zone;
|
||||
es->style = strdup("default");
|
||||
es->style = evas_stringshare_add(style);
|
||||
|
||||
es->o_base = edje_object_add(es->evas);
|
||||
es->name = strdup(name);
|
||||
es->name = evas_stringshare_add(name);
|
||||
snprintf(buf, sizeof(buf), "shelf/%s/base", es->style);
|
||||
evas_object_resize(es->o_base, es->w, es->h);
|
||||
if (!e_theme_edje_object_set(es->o_base, "base/theme/shelf", buf))
|
||||
e_theme_edje_object_set(es->o_base, "base/theme/shelf", "shelf/default/base");
|
||||
if (es->popup)
|
||||
{
|
||||
evas_object_show(es->o_base);
|
||||
e_popup_edje_bg_object_set(es->popup, es->o_base);
|
||||
e_popup_show(es->popup);
|
||||
}
|
||||
else
|
||||
{
|
||||
evas_object_move(es->o_base, es->zone->x + es->x, es->zone->y + es->y);
|
||||
evas_object_layer_set(es->o_base, layer);
|
||||
}
|
||||
evas_object_show(es->o_base);
|
||||
|
||||
snprintf(buf, sizeof(buf), "%i", shelf_id);
|
||||
shelf_id++;
|
||||
|
@ -89,6 +161,28 @@ e_shelf_populate(E_Shelf *es)
|
|||
e_gadcon_populate(es->gadcon);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_shelf_show(E_Shelf *es)
|
||||
{
|
||||
E_OBJECT_CHECK(es);
|
||||
E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE);
|
||||
if (es->popup)
|
||||
e_popup_show(es->popup);
|
||||
else
|
||||
evas_object_show(es->o_base);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_shelf_hide(E_Shelf *es)
|
||||
{
|
||||
E_OBJECT_CHECK(es);
|
||||
E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE);
|
||||
if (es->popup)
|
||||
e_popup_hide(es->popup);
|
||||
else
|
||||
evas_object_hide(es->o_base);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_shelf_move(E_Shelf *es, int x, int y)
|
||||
{
|
||||
|
@ -110,7 +204,10 @@ e_shelf_resize(E_Shelf *es, int w, int h)
|
|||
es->w = w;
|
||||
es->h = h;
|
||||
if (es->popup)
|
||||
e_popup_resize(es->popup, es->w, es->h);
|
||||
{
|
||||
e_popup_resize(es->popup, es->w, es->h);
|
||||
evas_object_resize(es->o_base, es->w, es->h);
|
||||
}
|
||||
else
|
||||
evas_object_resize(es->o_base, es->w, es->h);
|
||||
}
|
||||
|
@ -125,7 +222,10 @@ e_shelf_move_resize(E_Shelf *es, int x, int y, int w, int h)
|
|||
es->w = w;
|
||||
es->h = h;
|
||||
if (es->popup)
|
||||
e_popup_move_resize(es->popup, es->x, es->y, es->w, es->h);
|
||||
{
|
||||
e_popup_move_resize(es->popup, es->x, es->y, es->w, es->h);
|
||||
evas_object_resize(es->o_base, es->w, es->h);
|
||||
}
|
||||
else
|
||||
{
|
||||
evas_object_move(es->o_base, es->zone->x + es->x, es->zone->y + es->y);
|
||||
|
@ -155,6 +255,16 @@ e_shelf_save(E_Shelf *es)
|
|||
*/
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_shelf_unsave(E_Shelf *es)
|
||||
{
|
||||
E_OBJECT_CHECK(es);
|
||||
E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE);
|
||||
/* FIXME: find or create saved shelf node and then delete and queue a
|
||||
* save
|
||||
*/
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_shelf_orient(E_Shelf *es, E_Gadcon_Orient orient)
|
||||
{
|
||||
|
@ -169,9 +279,49 @@ _e_shelf_free(E_Shelf *es)
|
|||
{
|
||||
shelves = evas_list_remove(shelves, es);
|
||||
e_object_del(E_OBJECT(es->gadcon));
|
||||
E_FREE(es->name);
|
||||
E_FREE(es->style);
|
||||
evas_stringshare_del(es->name);
|
||||
evas_stringshare_del(es->style);
|
||||
evas_object_del(es->o_base);
|
||||
if (es->popup) e_object_del(E_OBJECT(es->popup));
|
||||
free(es);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_shelf_config_port(E_Config_Shelf_Config *cf1, E_Config_Shelf_Config *cf2)
|
||||
{
|
||||
int px[4], py[4];
|
||||
int i;
|
||||
|
||||
/*
|
||||
* We have 4 corners. figure out what gravity zone (3x3 grid) they are in
|
||||
* then lock them in relative to the edge or middle of that zone and re
|
||||
* calculate it all then.
|
||||
*/
|
||||
px[0] = cf1->x;
|
||||
px[1] = cf1->x + cf1->w - 1;
|
||||
px[2] = cf1->x;
|
||||
px[3] = cf1->x + cf1->w - 1;
|
||||
py[0] = cf1->y;
|
||||
py[1] = cf1->y;
|
||||
py[2] = cf1->y + cf1->h - 1;
|
||||
py[3] = cf1->y + cf1->h - 1;
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if (px[i] < (cf1->res.w / 3))
|
||||
px[i] = px[i];
|
||||
else if (px[i] > ((2 * cf1->res.w) / 3))
|
||||
px[i] = (cf2->res.w) + (px[i] - cf1->res.w);
|
||||
else
|
||||
px[i] = (cf2->res.w / 2) + (px[i] - (cf1->res.w / 2));
|
||||
if (py[i] < (cf1->res.h / 3))
|
||||
py[i] = py[i];
|
||||
else if (py[i] > ((2 * cf1->res.h) / 3))
|
||||
py[i] = (cf2->res.h) + (py[i] - cf1->res.h);
|
||||
else
|
||||
py[i] = (cf2->res.h / 2) + (py[i] - (cf1->res.h / 2));
|
||||
}
|
||||
cf2->x = px[0];
|
||||
cf2->y = py[0];
|
||||
cf2->w = px[3] - px[0] + 1;
|
||||
cf2->h = py[3] = py[0] + 1;
|
||||
}
|
||||
|
|
|
@ -31,13 +31,17 @@ struct _E_Shelf
|
|||
|
||||
EAPI int e_shelf_init(void);
|
||||
EAPI int e_shelf_shutdown(void);
|
||||
EAPI E_Shelf *e_shelf_zone_new(E_Zone *zone, char *name, int popup, int layer);
|
||||
EAPI void e_shelf_config_init(void);
|
||||
EAPI E_Shelf *e_shelf_zone_new(E_Zone *zone, char *name, char *style, int popup, int layer);
|
||||
EAPI void e_shelf_populate(E_Shelf *es);
|
||||
EAPI void e_shelf_show(E_Shelf *es);
|
||||
EAPI void e_shelf_hide(E_Shelf *es);
|
||||
EAPI void e_shelf_move(E_Shelf *es, int x, int y);
|
||||
EAPI void e_shelf_resize(E_Shelf *es, int w, int h);
|
||||
EAPI void e_shelf_move_resize(E_Shelf *es, int x, int y, int w, int h);
|
||||
EAPI void e_shelf_layer_set(E_Shelf *es, int layer);
|
||||
EAPI void e_shelf_save(E_Shelf *es);
|
||||
EAPI void e_shelf_unsave(E_Shelf *es);
|
||||
EAPI void e_shelf_orient(E_Shelf *es, E_Gadcon_Orient orient);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue