forked from enlightenment/enlightenment
fix annoying redraw bug (finally) and hide it under an indent run ;)
SVN revision: 6016
This commit is contained in:
parent
fdb0dbc708
commit
e752aabcd1
|
@ -0,0 +1,14 @@
|
|||
-i3
|
||||
-bl
|
||||
-bad
|
||||
-nbap
|
||||
-sob
|
||||
-ncdb
|
||||
-di20
|
||||
-nbc
|
||||
-lp
|
||||
-nce
|
||||
-npcs
|
||||
-sc
|
||||
-ncs
|
||||
-l80
|
1534
src/actions.c
1534
src/actions.c
File diff suppressed because it is too large
Load Diff
123
src/actions.h
123
src/actions.h
|
@ -3,65 +3,68 @@
|
|||
|
||||
#include "object.h"
|
||||
|
||||
typedef struct _E_Action E_Action;
|
||||
typedef struct _E_Action_Impl E_Action_Impl;
|
||||
typedef struct _E_Action E_Action;
|
||||
typedef struct _E_Action_Impl E_Action_Impl;
|
||||
typedef struct _E_Active_Action_Timer E_Active_Action_Timer;
|
||||
|
||||
typedef enum e_action_type
|
||||
{
|
||||
ACT_MOUSE_IN,
|
||||
ACT_MOUSE_OUT,
|
||||
ACT_MOUSE_CLICK,
|
||||
ACT_MOUSE_DOUBLE,
|
||||
ACT_MOUSE_TRIPLE,
|
||||
ACT_MOUSE_UP,
|
||||
ACT_MOUSE_CLICKED,
|
||||
ACT_MOUSE_MOVE,
|
||||
ACT_KEY_DOWN,
|
||||
ACT_KEY_UP
|
||||
} E_Action_Type;
|
||||
ACT_MOUSE_IN,
|
||||
ACT_MOUSE_OUT,
|
||||
ACT_MOUSE_CLICK,
|
||||
ACT_MOUSE_DOUBLE,
|
||||
ACT_MOUSE_TRIPLE,
|
||||
ACT_MOUSE_UP,
|
||||
ACT_MOUSE_CLICKED,
|
||||
ACT_MOUSE_MOVE,
|
||||
ACT_KEY_DOWN,
|
||||
ACT_KEY_UP
|
||||
}
|
||||
E_Action_Type;
|
||||
|
||||
struct _E_Active_Action_Timer
|
||||
{
|
||||
void *object;
|
||||
char *name;
|
||||
void *object;
|
||||
char *name;
|
||||
};
|
||||
|
||||
struct _E_Action
|
||||
{
|
||||
E_Object o;
|
||||
|
||||
char *name;
|
||||
char *action;
|
||||
char *params;
|
||||
E_Action_Type event;
|
||||
int button;
|
||||
char *key;
|
||||
int modifiers;
|
||||
E_Action_Impl *action_impl;
|
||||
E_Object *object;
|
||||
int started;
|
||||
int grabbed;
|
||||
E_Object o;
|
||||
|
||||
char *name;
|
||||
char *action;
|
||||
char *params;
|
||||
E_Action_Type event;
|
||||
int button;
|
||||
char *key;
|
||||
int modifiers;
|
||||
E_Action_Impl *action_impl;
|
||||
E_Object *object;
|
||||
int started;
|
||||
int grabbed;
|
||||
};
|
||||
|
||||
typedef void (*E_Action_Start_Func)(E_Object *o, E_Action *a,
|
||||
void *data, int x, int y, int rx, int ry);
|
||||
typedef void (*E_Action_Cont_Func) (E_Object *o, E_Action *a,
|
||||
void *data, int x, int y, int rx, int ry, int dx, int dy);
|
||||
typedef void (*E_Action_Stop_Func) (E_Object *o, E_Action *a,
|
||||
void *data, int x, int y, int rx, int ry);
|
||||
|
||||
typedef void (*E_Action_Start_Func) (E_Object * o, E_Action * a,
|
||||
void *data, int x, int y, int rx,
|
||||
int ry);
|
||||
typedef void (*E_Action_Cont_Func) (E_Object * o, E_Action * a,
|
||||
void *data, int x, int y, int rx,
|
||||
int ry, int dx, int dy);
|
||||
typedef void (*E_Action_Stop_Func) (E_Object * o, E_Action * a,
|
||||
void *data, int x, int y, int rx,
|
||||
int ry);
|
||||
|
||||
struct _E_Action_Impl
|
||||
{
|
||||
E_Object o;
|
||||
|
||||
char *action;
|
||||
|
||||
E_Object o;
|
||||
|
||||
char *action;
|
||||
|
||||
E_Action_Start_Func func_start;
|
||||
E_Action_Cont_Func func_cont;
|
||||
E_Action_Stop_Func func_stop;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* e_action_init - Actions implementation initializer
|
||||
|
@ -69,23 +72,29 @@ struct _E_Action_Impl
|
|||
* This function registers the various action implementations,
|
||||
* i.e. the way E performs actions.
|
||||
*/
|
||||
void e_action_init(void);
|
||||
void e_action_init(void);
|
||||
|
||||
int e_action_start(char *action, E_Action_Type act, int button, char *key,
|
||||
Ecore_Event_Key_Modifiers mods, E_Object *o, void *data,
|
||||
int x, int y, int rx, int ry);
|
||||
void e_action_stop(char *action, E_Action_Type act, int button, char *key,
|
||||
Ecore_Event_Key_Modifiers mods, E_Object *o, void *data,
|
||||
int x, int y, int rx, int ry);
|
||||
void e_action_cont(char *action, E_Action_Type act, int button, char *key,
|
||||
Ecore_Event_Key_Modifiers mods, E_Object *o, void *data,
|
||||
int x, int y, int rx, int ry, int dx, int dy);
|
||||
void e_action_stop_by_object(E_Object *o, void *data, int x, int y, int rx, int ry);
|
||||
void e_action_stop_by_type(char *action);
|
||||
void e_action_add_impl(char *action, E_Action_Start_Func func_start,
|
||||
E_Action_Cont_Func func_cont, E_Action_Stop_Func func_stop);
|
||||
void e_action_del_timer(E_Object *object, char *name);
|
||||
void e_action_add_timer(E_Object *object, char *name);
|
||||
void e_action_del_timer_object(E_Object *object);
|
||||
int e_action_start(char *action, E_Action_Type act, int button,
|
||||
char *key, Ecore_Event_Key_Modifiers mods,
|
||||
E_Object * o, void *data, int x, int y,
|
||||
int rx, int ry);
|
||||
void e_action_stop(char *action, E_Action_Type act, int button,
|
||||
char *key, Ecore_Event_Key_Modifiers mods,
|
||||
E_Object * o, void *data, int x, int y,
|
||||
int rx, int ry);
|
||||
void e_action_cont(char *action, E_Action_Type act, int button,
|
||||
char *key, Ecore_Event_Key_Modifiers mods,
|
||||
E_Object * o, void *data, int x, int y,
|
||||
int rx, int ry, int dx, int dy);
|
||||
void e_action_stop_by_object(E_Object * o, void *data, int x,
|
||||
int y, int rx, int ry);
|
||||
void e_action_stop_by_type(char *action);
|
||||
void e_action_add_impl(char *action,
|
||||
E_Action_Start_Func func_start,
|
||||
E_Action_Cont_Func func_cont,
|
||||
E_Action_Stop_Func func_stop);
|
||||
void e_action_del_timer(E_Object * object, char *name);
|
||||
void e_action_add_timer(E_Object * object, char *name);
|
||||
void e_action_del_timer_object(E_Object * object);
|
||||
|
||||
#endif
|
||||
|
|
209
src/background.c
209
src/background.c
|
@ -4,9 +4,9 @@
|
|||
#include "util.h"
|
||||
|
||||
static void
|
||||
e_background_cleanup(E_Background *bg)
|
||||
e_background_cleanup(E_Background * bg)
|
||||
{
|
||||
Evas_List l;
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
@ -15,49 +15,55 @@ e_background_cleanup(E_Background *bg)
|
|||
for (l = bg->layers; l; l = l->next)
|
||||
{
|
||||
E_Background_Layer *bl;
|
||||
|
||||
|
||||
bl = l->data;
|
||||
if (bl->color_class) FREE(bl->color_class);
|
||||
if (bl->file) FREE(bl->file);
|
||||
if (bl->obj) evas_del_object(bg->evas, bl->obj);
|
||||
if (bl->color_class)
|
||||
FREE(bl->color_class);
|
||||
if (bl->file)
|
||||
FREE(bl->file);
|
||||
if (bl->obj)
|
||||
evas_del_object(bg->evas, bl->obj);
|
||||
FREE(bl);
|
||||
}
|
||||
evas_list_free(bg->layers);
|
||||
}
|
||||
if (bg->file) FREE (bg->file);
|
||||
if (bg->base_obj) evas_del_object(bg->evas, bg->base_obj);
|
||||
if (bg->file)
|
||||
FREE(bg->file);
|
||||
if (bg->base_obj)
|
||||
evas_del_object(bg->evas, bg->base_obj);
|
||||
|
||||
e_object_cleanup(E_OBJECT(bg));
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
E_Background *
|
||||
E_Background *
|
||||
e_background_new(void)
|
||||
{
|
||||
E_Background *bg;
|
||||
|
||||
E_Background *bg;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
bg = NEW(E_Background, 1);
|
||||
ZERO(bg, E_Background, 1);
|
||||
|
||||
e_object_init(E_OBJECT(bg), (E_Cleanup_Func) e_background_cleanup);
|
||||
|
||||
|
||||
D_RETURN_(bg);
|
||||
}
|
||||
|
||||
E_Background *
|
||||
E_Background *
|
||||
e_background_load(char *file)
|
||||
{
|
||||
E_Background *bg;
|
||||
E_DB_File *db;
|
||||
int i, num;
|
||||
|
||||
E_Background *bg;
|
||||
E_DB_File *db;
|
||||
int i, num;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
db = e_db_open_read(file);
|
||||
if (!db) D_RETURN_(NULL);
|
||||
if (!db)
|
||||
D_RETURN_(NULL);
|
||||
num = 0;
|
||||
e_db_int_get(db, "/type/bg", &num);
|
||||
if (num != 1)
|
||||
|
@ -67,77 +73,105 @@ e_background_load(char *file)
|
|||
D_RETURN_(NULL);
|
||||
}
|
||||
e_db_int_get(db, "/layers/count", &num);
|
||||
|
||||
|
||||
bg = e_background_new();
|
||||
e_strdup(bg->file, file);
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
E_Background_Layer *bl;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
char buf[PATH_MAX];
|
||||
|
||||
bl = NEW(E_Background_Layer, 1);
|
||||
ZERO(bl, E_Background_Layer, 1);
|
||||
bg->layers = evas_list_append(bg->layers, bl);
|
||||
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/type", i); e_db_int_get(db, buf, (int*)&(bl->type));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/inlined", i); e_db_int_get(db, buf, &(bl->inlined));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/color_class", i); bl->color_class = e_db_str_get(db, buf);
|
||||
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/type", i);
|
||||
e_db_int_get(db, buf, (int *)&(bl->type));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/inlined", i);
|
||||
e_db_int_get(db, buf, &(bl->inlined));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/color_class", i);
|
||||
bl->color_class = e_db_str_get(db, buf);
|
||||
if (bl->inlined)
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "%s:/layers/%i/image", file, i); e_strdup(bl->file, buf);
|
||||
snprintf(buf, PATH_MAX, "%s:/layers/%i/image", file, i);
|
||||
e_strdup(bl->file, buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/file", i); bl->file = e_db_str_get(db, buf);
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/file", i);
|
||||
bl->file = e_db_str_get(db, buf);
|
||||
}
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/scroll.x", i); e_db_float_get(db, buf, &(bl->scroll.x));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/scroll.y", i); e_db_float_get(db, buf, &(bl->scroll.y));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/pos.x", i); e_db_float_get(db, buf, &(bl->pos.x));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/pos.y", i); e_db_float_get(db, buf, &(bl->pos.y));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/size.w", i); e_db_float_get(db, buf, &(bl->size.w));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/size.h", i); e_db_float_get(db, buf, &(bl->size.h));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/size.orig.w", i); e_db_int_get(db, buf, &(bl->size.orig.w));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/size.orig.h", i); e_db_int_get(db, buf, &(bl->size.orig.h));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fill.w", i); e_db_float_get(db, buf, &(bl->fill.w));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fill.h", i); e_db_float_get(db, buf, &(bl->fill.h));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fill.orig.w", i); e_db_int_get(db, buf, &(bl->fill.orig.w));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fill.orig.h", i); e_db_int_get(db, buf, &(bl->fill.orig.h));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/angle", i); e_db_float_get(db, buf, (float*)&(bl->angle));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fg.r", i); e_db_int_get(db, buf, &(bl->fg.r));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fg.g", i); e_db_int_get(db, buf, &(bl->fg.g));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fg.b", i); e_db_int_get(db, buf, &(bl->fg.b));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fg.a", i); e_db_int_get(db, buf, &(bl->fg.a));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/bg.r", i); e_db_int_get(db, buf, &(bl->bg.r));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/bg.g", i); e_db_int_get(db, buf, &(bl->bg.g));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/bg.b", i); e_db_int_get(db, buf, &(bl->bg.b));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/bg.a", i); e_db_int_get(db, buf, &(bl->bg.a));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/scroll.x", i);
|
||||
e_db_float_get(db, buf, &(bl->scroll.x));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/scroll.y", i);
|
||||
e_db_float_get(db, buf, &(bl->scroll.y));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/pos.x", i);
|
||||
e_db_float_get(db, buf, &(bl->pos.x));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/pos.y", i);
|
||||
e_db_float_get(db, buf, &(bl->pos.y));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/size.w", i);
|
||||
e_db_float_get(db, buf, &(bl->size.w));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/size.h", i);
|
||||
e_db_float_get(db, buf, &(bl->size.h));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/size.orig.w", i);
|
||||
e_db_int_get(db, buf, &(bl->size.orig.w));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/size.orig.h", i);
|
||||
e_db_int_get(db, buf, &(bl->size.orig.h));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fill.w", i);
|
||||
e_db_float_get(db, buf, &(bl->fill.w));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fill.h", i);
|
||||
e_db_float_get(db, buf, &(bl->fill.h));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fill.orig.w", i);
|
||||
e_db_int_get(db, buf, &(bl->fill.orig.w));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fill.orig.h", i);
|
||||
e_db_int_get(db, buf, &(bl->fill.orig.h));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/angle", i);
|
||||
e_db_float_get(db, buf, (float *)&(bl->angle));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fg.r", i);
|
||||
e_db_int_get(db, buf, &(bl->fg.r));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fg.g", i);
|
||||
e_db_int_get(db, buf, &(bl->fg.g));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fg.b", i);
|
||||
e_db_int_get(db, buf, &(bl->fg.b));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/fg.a", i);
|
||||
e_db_int_get(db, buf, &(bl->fg.a));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/bg.r", i);
|
||||
e_db_int_get(db, buf, &(bl->bg.r));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/bg.g", i);
|
||||
e_db_int_get(db, buf, &(bl->bg.g));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/bg.b", i);
|
||||
e_db_int_get(db, buf, &(bl->bg.b));
|
||||
snprintf(buf, PATH_MAX, "/layers/%i/bg.a", i);
|
||||
e_db_int_get(db, buf, &(bl->bg.a));
|
||||
}
|
||||
e_db_close(db);
|
||||
D_RETURN_(bg);
|
||||
}
|
||||
|
||||
void
|
||||
e_background_realize(E_Background *bg, Evas evas)
|
||||
e_background_realize(E_Background * bg, Evas evas)
|
||||
{
|
||||
Evas_List l;
|
||||
int ww, hh, count;
|
||||
Evas_List l;
|
||||
int ww, hh, count;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (bg->evas) D_RETURN;
|
||||
if (bg->evas)
|
||||
D_RETURN;
|
||||
bg->evas = evas;
|
||||
if (!bg->evas) D_RETURN;
|
||||
if (!bg->evas)
|
||||
D_RETURN;
|
||||
for (count = 0, l = bg->layers; l; l = l->next, count++)
|
||||
{
|
||||
E_Background_Layer *bl;
|
||||
|
||||
|
||||
bl = l->data;
|
||||
if (bl->type == E_BACKGROUND_TYPE_IMAGE)
|
||||
{
|
||||
bl->obj = evas_add_image_from_file(bg->evas, bl->file);
|
||||
evas_set_layer(bg->evas, bl->obj, 0);
|
||||
evas_show(bg->evas, bl->obj);
|
||||
#if 0 /* dont need this... do we? */
|
||||
#if 0 /* dont need this... do we? */
|
||||
if (evas_get_image_alpha(bg->evas, bl->obj))
|
||||
{
|
||||
D("Adding rectangle to bg!\n");
|
||||
|
@ -167,25 +201,27 @@ e_background_realize(E_Background *bg, Evas evas)
|
|||
}
|
||||
|
||||
void
|
||||
e_background_set_scroll(E_Background *bg, int sx, int sy)
|
||||
e_background_set_scroll(E_Background * bg, int sx, int sy)
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if ((bg->geom.sx == sx) && (bg->geom.sy == sy)) D_RETURN;
|
||||
if ((bg->geom.sx == sx) && (bg->geom.sy == sy))
|
||||
D_RETURN;
|
||||
bg->geom.sx = sx;
|
||||
bg->geom.sy = sy;
|
||||
if (!bg->evas) D_RETURN;
|
||||
if (!bg->evas)
|
||||
D_RETURN;
|
||||
for (l = bg->layers; l; l = l->next)
|
||||
{
|
||||
E_Background_Layer *bl;
|
||||
|
||||
|
||||
bl = l->data;
|
||||
if (bl->type == E_BACKGROUND_TYPE_IMAGE)
|
||||
{
|
||||
evas_set_image_fill(bg->evas, bl->obj,
|
||||
(double)bg->geom.sx * bl->scroll.x,
|
||||
evas_set_image_fill(bg->evas, bl->obj,
|
||||
(double)bg->geom.sx * bl->scroll.x,
|
||||
(double)bg->geom.sy * bl->scroll.y,
|
||||
bl->fw, bl->fh);
|
||||
}
|
||||
|
@ -194,33 +230,43 @@ e_background_set_scroll(E_Background *bg, int sx, int sy)
|
|||
}
|
||||
|
||||
void
|
||||
e_background_set_size(E_Background *bg, int w, int h)
|
||||
e_background_set_size(E_Background * bg, int w, int h)
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if ((bg->geom.w == w) && (bg->geom.h == h)) D_RETURN;
|
||||
if ((bg->geom.w == w) && (bg->geom.h == h))
|
||||
D_RETURN;
|
||||
bg->geom.w = w;
|
||||
bg->geom.h = h;
|
||||
for (l = bg->layers; l; l = l->next)
|
||||
{
|
||||
E_Background_Layer *bl;
|
||||
double x, y, w, h, fw, fh;
|
||||
int iw, ih;
|
||||
|
||||
double x, y, w, h, fw, fh;
|
||||
int iw, ih;
|
||||
|
||||
bl = l->data;
|
||||
iw = 0;
|
||||
ih = 0;
|
||||
if (bg->evas) evas_get_image_size(bg->evas, bl->obj, &iw, &ih);
|
||||
if (bg->evas)
|
||||
evas_get_image_size(bg->evas, bl->obj, &iw, &ih);
|
||||
w = bl->size.w * (double)bg->geom.w;
|
||||
h = bl->size.h * (double)bg->geom.h;
|
||||
if (bl->size.orig.w) w = (double)iw * bl->size.w;
|
||||
if (bl->size.orig.h) h = (double)ih * bl->size.h;
|
||||
if (bl->size.orig.w)
|
||||
w = (double)iw *bl->size.w;
|
||||
|
||||
if (bl->size.orig.h)
|
||||
h = (double)ih *bl->size.h;
|
||||
|
||||
fw = bl->fill.w * w;
|
||||
fh = bl->fill.h * h;
|
||||
if (bl->fill.orig.w) fw = (double)iw * bl->fill.w;
|
||||
if (bl->fill.orig.h) fh = (double)ih * bl->fill.h;
|
||||
if (bl->fill.orig.w)
|
||||
fw = (double)iw *bl->fill.w;
|
||||
|
||||
if (bl->fill.orig.h)
|
||||
fh = (double)ih *bl->fill.h;
|
||||
|
||||
x = ((double)bg->geom.w - w + 1) * bl->pos.x;
|
||||
y = ((double)bg->geom.h - h + 1) * bl->pos.y;
|
||||
bl->x = x;
|
||||
|
@ -253,25 +299,26 @@ e_background_set_size(E_Background *bg, int w, int h)
|
|||
}
|
||||
|
||||
void
|
||||
e_background_set_color_class(E_Background *bg, char *cc, int r, int g, int b, int a)
|
||||
e_background_set_color_class(E_Background * bg, char *cc, int r, int g, int b,
|
||||
int a)
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
for (l = bg->layers; l; l = l->next)
|
||||
{
|
||||
E_Background_Layer *bl;
|
||||
|
||||
|
||||
bl = l->data;
|
||||
if ((bl->color_class) && (cc) && (!strcmp(bl->color_class, cc)))
|
||||
{
|
||||
if (bg->evas)
|
||||
{
|
||||
if ((l == bg->layers) && (bg->base_obj))
|
||||
evas_set_color(bg->evas, bl->obj, r, g, b, 255);
|
||||
evas_set_color(bg->evas, bl->obj, r, g, b, 255);
|
||||
else
|
||||
evas_set_color(bg->evas, bl->obj, r, g, b, a);
|
||||
evas_set_color(bg->evas, bl->obj, r, g, b, a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
113
src/background.h
113
src/background.h
|
@ -3,70 +3,81 @@
|
|||
|
||||
#include "object.h"
|
||||
|
||||
typedef struct _E_Background E_Background;
|
||||
typedef struct _E_Background_Layer E_Background_Layer;
|
||||
typedef struct _E_Background E_Background;
|
||||
typedef struct _E_Background_Layer E_Background_Layer;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
E_BACKGROUND_TYPE_IMAGE = 0,
|
||||
E_BACKGROUND_TYPE_GRADIENT = 1,
|
||||
E_BACKGROUND_TYPE_SOLID = 2
|
||||
E_BACKGROUND_TYPE_IMAGE = 0,
|
||||
E_BACKGROUND_TYPE_GRADIENT = 1,
|
||||
E_BACKGROUND_TYPE_SOLID = 2
|
||||
}
|
||||
E_Background_Type;
|
||||
|
||||
struct _E_Background
|
||||
{
|
||||
E_Object o;
|
||||
|
||||
Evas evas;
|
||||
char *file;
|
||||
|
||||
struct {
|
||||
int sx, sy;
|
||||
int w, h;
|
||||
} geom;
|
||||
|
||||
Evas_List layers;
|
||||
|
||||
Evas_Object base_obj;
|
||||
};
|
||||
E_Object o;
|
||||
|
||||
Evas evas;
|
||||
char *file;
|
||||
|
||||
struct
|
||||
{
|
||||
int sx, sy;
|
||||
int w, h;
|
||||
}
|
||||
geom;
|
||||
|
||||
Evas_List layers;
|
||||
|
||||
Evas_Object base_obj;
|
||||
};
|
||||
|
||||
struct _E_Background_Layer
|
||||
{
|
||||
E_Background_Type type;
|
||||
int inlined;
|
||||
struct {
|
||||
float x, y;
|
||||
} scroll;
|
||||
struct {
|
||||
float x, y;
|
||||
} pos;
|
||||
struct {
|
||||
float w, h;
|
||||
struct {
|
||||
int w, h;
|
||||
} orig;
|
||||
} size, fill;
|
||||
char *color_class;
|
||||
char *file;
|
||||
double angle;
|
||||
struct {
|
||||
int r, g, b, a;
|
||||
} fg, bg;
|
||||
|
||||
double x, y, w, h, fw, fh;
|
||||
|
||||
Evas_Object obj;
|
||||
E_Background_Type type;
|
||||
int inlined;
|
||||
struct
|
||||
{
|
||||
float x, y;
|
||||
}
|
||||
scroll;
|
||||
struct
|
||||
{
|
||||
float x, y;
|
||||
}
|
||||
pos;
|
||||
struct
|
||||
{
|
||||
float w, h;
|
||||
struct
|
||||
{
|
||||
int w, h;
|
||||
}
|
||||
orig;
|
||||
}
|
||||
size , fill;
|
||||
char *color_class;
|
||||
char *file;
|
||||
double angle;
|
||||
struct
|
||||
{
|
||||
int r, g, b, a;
|
||||
}
|
||||
fg , bg;
|
||||
|
||||
double x, y, w, h, fw, fh;
|
||||
|
||||
Evas_Object obj;
|
||||
};
|
||||
|
||||
E_Background *e_background_new(void);
|
||||
E_Background *e_background_load(char *file);
|
||||
|
||||
E_Background *e_background_new(void);
|
||||
E_Background *e_background_load(char *file);
|
||||
void e_background_realize(E_Background * bg, Evas evas);
|
||||
void e_background_set_scroll(E_Background * bg, int sx, int sy);
|
||||
void e_background_set_size(E_Background * bg, int w, int h);
|
||||
void e_background_set_color_class(E_Background * bg, char *cc,
|
||||
int r, int g, int b, int a);
|
||||
|
||||
void e_background_realize(E_Background *bg, Evas evas);
|
||||
void e_background_set_scroll(E_Background *bg, int sx, int sy);
|
||||
void e_background_set_size(E_Background *bg, int w, int h);
|
||||
void e_background_set_color_class(E_Background *bg, char *cc, int r, int g, int b, int a);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
32
src/block.c
32
src/block.c
|
@ -6,24 +6,24 @@ typedef struct _e_block E_Block;
|
|||
|
||||
struct _e_block
|
||||
{
|
||||
char *name;
|
||||
int refs;
|
||||
char *name;
|
||||
int refs;
|
||||
};
|
||||
|
||||
static Evas_List blocks = NULL;
|
||||
static Evas_List blocks = NULL;
|
||||
|
||||
static E_Block *e_block_find(char *name);
|
||||
static E_Block *e_block_find(char *name);
|
||||
|
||||
static E_Block *
|
||||
static E_Block *
|
||||
e_block_find(char *name)
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
for (l = blocks; l; l = l->next)
|
||||
{
|
||||
E_Block *b;
|
||||
|
||||
E_Block *b;
|
||||
|
||||
b = l->data;
|
||||
if (!strcmp(b->name, name))
|
||||
{
|
||||
|
@ -38,8 +38,8 @@ e_block_find(char *name)
|
|||
void
|
||||
e_block_start(char *name)
|
||||
{
|
||||
E_Block *b;
|
||||
|
||||
E_Block *b;
|
||||
|
||||
D_ENTER;
|
||||
b = e_block_find(name);
|
||||
if (b)
|
||||
|
@ -58,8 +58,8 @@ e_block_start(char *name)
|
|||
void
|
||||
e_block_stop(char *name)
|
||||
{
|
||||
E_Block *b;
|
||||
|
||||
E_Block *b;
|
||||
|
||||
D_ENTER;
|
||||
b = e_block_find(name);
|
||||
if (b)
|
||||
|
@ -69,7 +69,7 @@ e_block_stop(char *name)
|
|||
{
|
||||
blocks = evas_list_remove(blocks, b);
|
||||
IF_FREE(b->name);
|
||||
FREE(b);
|
||||
FREE(b);
|
||||
}
|
||||
}
|
||||
D_RETURN;
|
||||
|
@ -78,8 +78,8 @@ e_block_stop(char *name)
|
|||
int
|
||||
e_block_is_active(char *name)
|
||||
{
|
||||
E_Block *b;
|
||||
|
||||
E_Block *b;
|
||||
|
||||
D_ENTER;
|
||||
b = e_block_find(name);
|
||||
if (b)
|
||||
|
|
|
@ -3,9 +3,8 @@
|
|||
|
||||
#include "e.h"
|
||||
|
||||
void e_block_start(char *name);
|
||||
void e_block_stop(char *name);
|
||||
int e_block_is_active(char *name);
|
||||
void e_block_start(char *name);
|
||||
void e_block_stop(char *name);
|
||||
int e_block_is_active(char *name);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
2579
src/border.c
2579
src/border.c
File diff suppressed because it is too large
Load Diff
435
src/border.h
435
src/border.h
|
@ -8,175 +8,225 @@
|
|||
|
||||
#ifndef E_DESKTOPS_TYPEDEF
|
||||
#define E_DESKTOPS_TYPEDEF
|
||||
typedef struct _E_Desktop E_Desktop;
|
||||
typedef struct _E_Desktop E_Desktop;
|
||||
#endif
|
||||
|
||||
typedef struct _E_Grab E_Grab;
|
||||
typedef struct _E_Border E_Border;
|
||||
typedef struct _E_Grab E_Grab;
|
||||
typedef struct _E_Border E_Border;
|
||||
|
||||
struct _E_Grab
|
||||
{
|
||||
int button;
|
||||
int button;
|
||||
Ecore_Event_Key_Modifiers mods;
|
||||
int any_mod;
|
||||
int remove_after;
|
||||
int allow;
|
||||
int any_mod;
|
||||
int remove_after;
|
||||
int allow;
|
||||
};
|
||||
|
||||
struct _E_Border
|
||||
{
|
||||
E_Observee obs;
|
||||
E_Observee obs;
|
||||
|
||||
struct {
|
||||
Window main;
|
||||
Window l, r, t, b;
|
||||
Window input;
|
||||
Window container;
|
||||
Window client;
|
||||
} win;
|
||||
struct {
|
||||
Evas l, r, t, b;
|
||||
} evas;
|
||||
struct {
|
||||
struct {
|
||||
E_Text *l, *r, *t, *b;
|
||||
} title;
|
||||
struct {
|
||||
Evas_Object l, r, t, b;
|
||||
} title_clip;
|
||||
} obj;
|
||||
struct {
|
||||
Pixmap l, r, t, b;
|
||||
} pixmap;
|
||||
struct {
|
||||
int new;
|
||||
Ebits_Object l, r, t, b;
|
||||
} bits;
|
||||
|
||||
struct {
|
||||
struct {
|
||||
int x, y, w, h;
|
||||
int visible;
|
||||
int dx, dy;
|
||||
} requested;
|
||||
int x, y, w, h;
|
||||
int visible;
|
||||
int selected;
|
||||
int select_lost_from_grab;
|
||||
int shaded;
|
||||
int has_shape;
|
||||
int shape_changes;
|
||||
int shaped_client;
|
||||
} current, previous;
|
||||
|
||||
struct {
|
||||
struct {
|
||||
int w, h;
|
||||
double aspect;
|
||||
} base, min, max, step;
|
||||
int layer;
|
||||
char *title;
|
||||
char *name;
|
||||
char *class;
|
||||
char *command;
|
||||
char *machine;
|
||||
char *icon_name;
|
||||
int pid;
|
||||
Window group;
|
||||
int takes_focus;
|
||||
int sticky;
|
||||
Colormap colormap;
|
||||
int fixed;
|
||||
int arrange_ignore;
|
||||
int hidden;
|
||||
int iconified;
|
||||
int titlebar;
|
||||
int border;
|
||||
int handles;
|
||||
int initial_state;
|
||||
int is_desktop;
|
||||
int w, h;
|
||||
int no_place;
|
||||
struct {
|
||||
int launch_id;
|
||||
pid_t pid;
|
||||
pid_t ppid;
|
||||
uid_t user;
|
||||
} e;
|
||||
struct {
|
||||
int requested;
|
||||
int x, y;
|
||||
int gravity;
|
||||
} pos;
|
||||
int desk;
|
||||
struct {
|
||||
int x, y;
|
||||
} area;
|
||||
int internal;
|
||||
struct {
|
||||
int matched;
|
||||
struct {
|
||||
int matched;
|
||||
int ignore;
|
||||
} prog_location;
|
||||
struct {
|
||||
int matched;
|
||||
char *style;
|
||||
} border;
|
||||
struct {
|
||||
int matched;
|
||||
int x, y;
|
||||
} location;
|
||||
struct {
|
||||
int matched;
|
||||
int x, y;
|
||||
} desk_area;
|
||||
struct {
|
||||
int matched;
|
||||
int w, h;
|
||||
} size;
|
||||
struct {
|
||||
int matched;
|
||||
int desk;
|
||||
} desktop;
|
||||
struct {
|
||||
int matched;
|
||||
int sticky;
|
||||
} sticky;
|
||||
struct {
|
||||
int matched;
|
||||
int layer;
|
||||
} layer;
|
||||
} matched;
|
||||
} client;
|
||||
|
||||
struct {
|
||||
int move, resize;
|
||||
} mode;
|
||||
|
||||
struct {
|
||||
int x, y, w, h;
|
||||
int is;
|
||||
} max;
|
||||
|
||||
int ignore_unmap;
|
||||
int shape_changed;
|
||||
int placed;
|
||||
|
||||
Evas_List grabs;
|
||||
E_Grab *click_grab;
|
||||
E_Desktop *desk;
|
||||
|
||||
char *border_style;
|
||||
char *border_file;
|
||||
struct
|
||||
{
|
||||
Window main;
|
||||
Window l, r, t, b;
|
||||
Window input;
|
||||
Window container;
|
||||
Window client;
|
||||
}
|
||||
win;
|
||||
struct
|
||||
{
|
||||
Evas l, r, t, b;
|
||||
}
|
||||
evas;
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
E_Text *l, *r, *t, *b;
|
||||
}
|
||||
title;
|
||||
struct
|
||||
{
|
||||
Evas_Object l, r, t, b;
|
||||
}
|
||||
title_clip;
|
||||
}
|
||||
obj;
|
||||
struct
|
||||
{
|
||||
Pixmap l, r, t, b;
|
||||
}
|
||||
pixmap;
|
||||
struct
|
||||
{
|
||||
int new;
|
||||
Ebits_Object l, r, t, b;
|
||||
}
|
||||
bits;
|
||||
|
||||
int first_expose;
|
||||
|
||||
int hold_changes;
|
||||
|
||||
Evas_List menus;
|
||||
|
||||
int changed;
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
int x, y, w, h;
|
||||
int visible;
|
||||
int dx, dy;
|
||||
}
|
||||
requested;
|
||||
int x, y, w, h;
|
||||
int visible;
|
||||
int selected;
|
||||
int select_lost_from_grab;
|
||||
int shaded;
|
||||
int has_shape;
|
||||
int shape_changes;
|
||||
int shaped_client;
|
||||
}
|
||||
current , previous;
|
||||
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
int w, h;
|
||||
double aspect;
|
||||
}
|
||||
base , min, max, step;
|
||||
int layer;
|
||||
char *title;
|
||||
char *name;
|
||||
char *class;
|
||||
char *command;
|
||||
char *machine;
|
||||
char *icon_name;
|
||||
int pid;
|
||||
Window group;
|
||||
int takes_focus;
|
||||
int sticky;
|
||||
Colormap colormap;
|
||||
int fixed;
|
||||
int arrange_ignore;
|
||||
int hidden;
|
||||
int iconified;
|
||||
int titlebar;
|
||||
int border;
|
||||
int handles;
|
||||
int initial_state;
|
||||
int is_desktop;
|
||||
int w, h;
|
||||
int no_place;
|
||||
struct
|
||||
{
|
||||
int launch_id;
|
||||
pid_t pid;
|
||||
pid_t ppid;
|
||||
uid_t user;
|
||||
}
|
||||
e;
|
||||
struct
|
||||
{
|
||||
int requested;
|
||||
int x, y;
|
||||
int gravity;
|
||||
}
|
||||
pos;
|
||||
int desk;
|
||||
struct
|
||||
{
|
||||
int x, y;
|
||||
}
|
||||
area;
|
||||
int internal;
|
||||
struct
|
||||
{
|
||||
int matched;
|
||||
struct
|
||||
{
|
||||
int matched;
|
||||
int ignore;
|
||||
}
|
||||
prog_location;
|
||||
struct
|
||||
{
|
||||
int matched;
|
||||
char *style;
|
||||
}
|
||||
border;
|
||||
struct
|
||||
{
|
||||
int matched;
|
||||
int x, y;
|
||||
}
|
||||
location;
|
||||
struct
|
||||
{
|
||||
int matched;
|
||||
int x, y;
|
||||
}
|
||||
desk_area;
|
||||
struct
|
||||
{
|
||||
int matched;
|
||||
int w, h;
|
||||
}
|
||||
size;
|
||||
struct
|
||||
{
|
||||
int matched;
|
||||
int desk;
|
||||
}
|
||||
desktop;
|
||||
struct
|
||||
{
|
||||
int matched;
|
||||
int sticky;
|
||||
}
|
||||
sticky;
|
||||
struct
|
||||
{
|
||||
int matched;
|
||||
int layer;
|
||||
}
|
||||
layer;
|
||||
}
|
||||
matched;
|
||||
}
|
||||
client;
|
||||
|
||||
struct
|
||||
{
|
||||
int move, resize;
|
||||
}
|
||||
mode;
|
||||
|
||||
struct
|
||||
{
|
||||
int x, y, w, h;
|
||||
int is;
|
||||
}
|
||||
max;
|
||||
|
||||
int ignore_unmap;
|
||||
int shape_changed;
|
||||
int placed;
|
||||
|
||||
Evas_List grabs;
|
||||
E_Grab *click_grab;
|
||||
E_Desktop *desk;
|
||||
|
||||
char *border_style;
|
||||
char *border_file;
|
||||
|
||||
int first_expose;
|
||||
|
||||
int hold_changes;
|
||||
|
||||
Evas_List menus;
|
||||
|
||||
int changed;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -185,41 +235,42 @@ struct _E_Border
|
|||
* This function registers the border event handlers
|
||||
* against ecore.
|
||||
*/
|
||||
void e_border_init(void);
|
||||
void e_border_init(void);
|
||||
|
||||
E_Border *e_border_new(void);
|
||||
E_Border *e_border_new(void);
|
||||
|
||||
void e_border_update_borders(void);
|
||||
void e_border_apply_border(E_Border *b);
|
||||
void e_border_reshape(E_Border *b);
|
||||
void e_border_release(E_Border *b);
|
||||
E_Border *e_border_adopt(Window win, int use_client_pos);
|
||||
void e_border_adopt_children(Window win);
|
||||
void e_border_remove_mouse_grabs(E_Border *b);
|
||||
void e_border_remove_click_grab(E_Border *b);
|
||||
void e_border_attach_mouse_grabs(E_Border *b);
|
||||
void e_border_remove_all_mouse_grabs(void);
|
||||
void e_border_attach_all_mouse_grabs(void);
|
||||
void e_border_redo_grabs(void);
|
||||
E_Border *e_border_find_by_window(Window win);
|
||||
void e_border_set_bits(E_Border *b, char *file);
|
||||
void e_border_set_color_class(E_Border *b, char *class, int rr, int gg, int bb, int aa);
|
||||
void e_border_adjust_limits(E_Border *b);
|
||||
void e_border_update(E_Border *b);
|
||||
void e_border_set_layer(E_Border *b, int layer);
|
||||
void e_border_raise(E_Border *b);
|
||||
void e_border_lower(E_Border *b);
|
||||
void e_border_iconify(E_Border *b);
|
||||
void e_border_uniconify(E_Border *b);
|
||||
void e_border_raise_above(E_Border *b, E_Border *above);
|
||||
void e_border_lower_below(E_Border *b, E_Border *below);
|
||||
E_Border *e_border_current_focused(void);
|
||||
void e_border_focus_grab_ended(void);
|
||||
void e_border_raise_next(void);
|
||||
void e_border_send_pointer(E_Border *b);
|
||||
int e_border_viewable(E_Border *b);
|
||||
void e_border_print_pos(char *buf, E_Border *b);
|
||||
void e_border_print_size(char *buf, E_Border *b);
|
||||
void e_border_set_gravity(E_Border *b, int gravity);
|
||||
Evas_List e_border_get_borders_list();
|
||||
void e_border_update_borders(void);
|
||||
void e_border_apply_border(E_Border * b);
|
||||
void e_border_reshape(E_Border * b);
|
||||
void e_border_release(E_Border * b);
|
||||
E_Border *e_border_adopt(Window win, int use_client_pos);
|
||||
void e_border_adopt_children(Window win);
|
||||
void e_border_remove_mouse_grabs(E_Border * b);
|
||||
void e_border_remove_click_grab(E_Border * b);
|
||||
void e_border_attach_mouse_grabs(E_Border * b);
|
||||
void e_border_remove_all_mouse_grabs(void);
|
||||
void e_border_attach_all_mouse_grabs(void);
|
||||
void e_border_redo_grabs(void);
|
||||
E_Border *e_border_find_by_window(Window win);
|
||||
void e_border_set_bits(E_Border * b, char *file);
|
||||
void e_border_set_color_class(E_Border * b, char *class, int rr,
|
||||
int gg, int bb, int aa);
|
||||
void e_border_adjust_limits(E_Border * b);
|
||||
void e_border_update(E_Border * b);
|
||||
void e_border_set_layer(E_Border * b, int layer);
|
||||
void e_border_raise(E_Border * b);
|
||||
void e_border_lower(E_Border * b);
|
||||
void e_border_iconify(E_Border * b);
|
||||
void e_border_uniconify(E_Border * b);
|
||||
void e_border_raise_above(E_Border * b, E_Border * above);
|
||||
void e_border_lower_below(E_Border * b, E_Border * below);
|
||||
E_Border *e_border_current_focused(void);
|
||||
void e_border_focus_grab_ended(void);
|
||||
void e_border_raise_next(void);
|
||||
void e_border_send_pointer(E_Border * b);
|
||||
int e_border_viewable(E_Border * b);
|
||||
void e_border_print_pos(char *buf, E_Border * b);
|
||||
void e_border_print_size(char *buf, E_Border * b);
|
||||
void e_border_set_gravity(E_Border * b, int gravity);
|
||||
Evas_List e_border_get_borders_list();
|
||||
#endif
|
||||
|
|
353
src/bordermenu.c
353
src/bordermenu.c
|
@ -6,139 +6,166 @@
|
|||
#include "icccm.h"
|
||||
#include "bordermenu.h"
|
||||
|
||||
static void e_bordermenu_cb_close(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_kill(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_raise(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_lower(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_sticky(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_iconify(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_max(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_zoom(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_remember_location(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_remember_size(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_remember_desktop(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_remember_sticky(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_remember_prog_location_ignore(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_bordermenu_cb_menu_hide(E_Menu *m, void *data);
|
||||
static void e_bordermenu_cb_close(E_Menu * m, E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_kill(E_Menu * m, E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_raise(E_Menu * m, E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_lower(E_Menu * m, E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_sticky(E_Menu * m, E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_iconify(E_Menu * m, E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_max(E_Menu * m, E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_zoom(E_Menu * m, E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_remember_location(E_Menu * m,
|
||||
E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_remember_size(E_Menu * m, E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_remember_desktop(E_Menu * m,
|
||||
E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_remember_sticky(E_Menu * m,
|
||||
E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_remember_prog_location_ignore(E_Menu * m,
|
||||
E_Menu_Item *
|
||||
mi,
|
||||
void *data);
|
||||
static void e_bordermenu_cb_menu_hide(E_Menu * m, void *data);
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_close(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_close(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
if (b->win.client) e_icccm_delete(b->win.client);
|
||||
|
||||
if (b->win.client)
|
||||
e_icccm_delete(b->win.client);
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_kill(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_kill(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
if (b->win.client) ecore_window_kill_client(b->win.client);
|
||||
|
||||
if (b->win.client)
|
||||
ecore_window_kill_client(b->win.client);
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_raise(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_raise(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
e_border_raise(b);
|
||||
|
||||
e_border_raise(b);
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_lower(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_lower(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
e_border_lower(b);
|
||||
|
||||
|
||||
e_border_lower(b);
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_sticky(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_sticky(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
if (mi->on) e_menu_item_set_state(mi, 0);
|
||||
else e_menu_item_set_state(mi, 1);
|
||||
if (mi->on)
|
||||
e_menu_item_set_state(mi, 0);
|
||||
else
|
||||
e_menu_item_set_state(mi, 1);
|
||||
e_menu_set_state(m, mi);
|
||||
|
||||
|
||||
b->client.sticky = mi->on;
|
||||
b->changed = 1;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_iconify(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_iconify(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_max(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_max(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
if (b->client.is_desktop) D_RETURN;
|
||||
if (b->current.shaded > 0) D_RETURN;
|
||||
if ((b->mode.move) || (b->mode.resize)) D_RETURN;
|
||||
if (b->client.is_desktop)
|
||||
D_RETURN;
|
||||
if (b->current.shaded > 0)
|
||||
D_RETURN;
|
||||
if ((b->mode.move) || (b->mode.resize))
|
||||
D_RETURN;
|
||||
b->mode.move = 0;
|
||||
b->mode.resize = 0;
|
||||
|
||||
if (mi->on) e_menu_item_set_state(mi, 0);
|
||||
else e_menu_item_set_state(mi, 1);
|
||||
if (mi->on)
|
||||
e_menu_item_set_state(mi, 0);
|
||||
else
|
||||
e_menu_item_set_state(mi, 1);
|
||||
e_menu_set_state(m, mi);
|
||||
|
||||
|
||||
if (mi->on)
|
||||
{
|
||||
b->max.x = b->current.x;
|
||||
|
@ -171,134 +198,145 @@ e_bordermenu_cb_max(E_Menu *m, E_Menu_Item *mi, void *data)
|
|||
b->current.requested.w = b->current.w;
|
||||
b->current.requested.h = b->current.h;
|
||||
}
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_zoom(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_zoom(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_remember_location(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_remember_location(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
if (mi->on) e_menu_item_set_state(mi, 0);
|
||||
else e_menu_item_set_state(mi, 1);
|
||||
|
||||
if (mi->on)
|
||||
e_menu_item_set_state(mi, 0);
|
||||
else
|
||||
e_menu_item_set_state(mi, 1);
|
||||
e_menu_set_state(m, mi);
|
||||
|
||||
b->client.matched.matched = 1;
|
||||
b->client.matched.location.matched = mi->on;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_remember_size(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_remember_size(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
if (mi->on) e_menu_item_set_state(mi, 0);
|
||||
else e_menu_item_set_state(mi, 1);
|
||||
|
||||
if (mi->on)
|
||||
e_menu_item_set_state(mi, 0);
|
||||
else
|
||||
e_menu_item_set_state(mi, 1);
|
||||
e_menu_set_state(m, mi);
|
||||
|
||||
b->client.matched.matched = 1;
|
||||
b->client.matched.size.matched = mi->on;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_remember_desktop(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_remember_desktop(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
if (mi->on) e_menu_item_set_state(mi, 0);
|
||||
else e_menu_item_set_state(mi, 1);
|
||||
|
||||
if (mi->on)
|
||||
e_menu_item_set_state(mi, 0);
|
||||
else
|
||||
e_menu_item_set_state(mi, 1);
|
||||
e_menu_set_state(m, mi);
|
||||
|
||||
b->client.matched.matched = 1;
|
||||
b->client.matched.desktop.matched = mi->on;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_remember_sticky(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_remember_sticky(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
if (mi->on) e_menu_item_set_state(mi, 0);
|
||||
else e_menu_item_set_state(mi, 1);
|
||||
|
||||
if (mi->on)
|
||||
e_menu_item_set_state(mi, 0);
|
||||
else
|
||||
e_menu_item_set_state(mi, 1);
|
||||
e_menu_set_state(m, mi);
|
||||
|
||||
b->client.matched.matched = 1;
|
||||
b->client.matched.sticky.matched = mi->on;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_remember_prog_location_ignore(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
e_bordermenu_cb_remember_prog_location_ignore(E_Menu * m, E_Menu_Item * mi,
|
||||
void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
if (mi->on) e_menu_item_set_state(mi, 0);
|
||||
else e_menu_item_set_state(mi, 1);
|
||||
|
||||
if (mi->on)
|
||||
e_menu_item_set_state(mi, 0);
|
||||
else
|
||||
e_menu_item_set_state(mi, 1);
|
||||
e_menu_set_state(m, mi);
|
||||
|
||||
b->client.matched.matched = 1;
|
||||
b->client.matched.prog_location.matched = mi->on;
|
||||
b->client.matched.prog_location.ignore = 1;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
}
|
||||
|
||||
static void
|
||||
e_bordermenu_cb_menu_hide(E_Menu *m, void *data)
|
||||
e_bordermenu_cb_menu_hide(E_Menu * m, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
|
||||
while (b->menus)
|
||||
|
@ -307,19 +345,19 @@ e_bordermenu_cb_menu_hide(E_Menu *m, void *data)
|
|||
m->delete_me = 1;
|
||||
b->menus = evas_list_remove(b->menus, m);
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
}
|
||||
|
||||
void
|
||||
e_bordermenu_do(E_Border *b)
|
||||
e_bordermenu_do(E_Border * b)
|
||||
{
|
||||
E_Menu *menu;
|
||||
E_Menu_Item *menuitem;
|
||||
|
||||
E_Menu *menu;
|
||||
E_Menu_Item *menuitem;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
if (!b->menus)
|
||||
{
|
||||
menu = e_menu_new();
|
||||
|
@ -327,11 +365,11 @@ e_bordermenu_do(E_Border *b)
|
|||
e_menu_set_padding_icon(menu, 2);
|
||||
e_menu_set_padding_state(menu, 2);
|
||||
e_menu_hide_callback(menu, e_bordermenu_cb_menu_hide, b);
|
||||
|
||||
|
||||
menuitem = e_menu_item_new("Close");
|
||||
/* e_menu_item_set_icon(menuitem, icon); */
|
||||
/* e_menu_item_set_scale_icon(menuitem, 1);*/
|
||||
/* e_menu_item_set_separator(menuitem, 1);*/
|
||||
/* e_menu_item_set_scale_icon(menuitem, 1); */
|
||||
/* e_menu_item_set_separator(menuitem, 1); */
|
||||
e_menu_item_set_callback(menuitem, e_bordermenu_cb_close, b);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
|
@ -342,43 +380,44 @@ e_bordermenu_do(E_Border *b)
|
|||
menuitem = e_menu_item_new("Lower");
|
||||
e_menu_item_set_callback(menuitem, e_bordermenu_cb_lower, b);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
|
||||
menuitem = e_menu_item_new("Iconify");
|
||||
e_menu_item_set_callback(menuitem, e_bordermenu_cb_iconify, b);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
|
||||
menuitem = e_menu_item_new("Zoom");
|
||||
e_menu_item_set_callback(menuitem, e_bordermenu_cb_zoom, b);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
|
||||
menuitem = e_menu_item_new("Maximise");
|
||||
e_menu_item_set_check(menuitem, 1);
|
||||
e_menu_item_set_state(menuitem, b->max.is);
|
||||
e_menu_item_set_callback(menuitem, e_bordermenu_cb_max, b);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
|
||||
menuitem = e_menu_item_new("Sticky");
|
||||
e_menu_item_set_check(menuitem, 1);
|
||||
e_menu_item_set_state(menuitem, b->client.sticky);
|
||||
e_menu_item_set_callback(menuitem, e_bordermenu_cb_sticky, b);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
|
||||
menuitem = e_menu_item_new("");
|
||||
e_menu_item_set_separator(menuitem, 1);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
|
||||
menuitem = e_menu_item_new("Kill");
|
||||
e_menu_item_set_callback(menuitem, e_bordermenu_cb_kill, b);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
|
||||
menuitem = e_menu_item_new("");
|
||||
e_menu_item_set_separator(menuitem, 1);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
|
||||
menuitem = e_menu_item_new("Remember Location");
|
||||
e_menu_item_set_check(menuitem, 1);
|
||||
e_menu_item_set_state(menuitem, b->client.matched.location.matched);
|
||||
e_menu_item_set_callback(menuitem, e_bordermenu_cb_remember_location, b);
|
||||
e_menu_item_set_callback(menuitem, e_bordermenu_cb_remember_location,
|
||||
b);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
e_menu_set_state(menu, menuitem);
|
||||
|
||||
|
@ -405,31 +444,39 @@ e_bordermenu_do(E_Border *b)
|
|||
|
||||
menuitem = e_menu_item_new("Ignore Program Specified Position");
|
||||
e_menu_item_set_check(menuitem, 1);
|
||||
e_menu_item_set_state(menuitem, b->client.matched.prog_location.matched);
|
||||
e_menu_item_set_callback(menuitem, e_bordermenu_cb_remember_prog_location_ignore, b);
|
||||
e_menu_item_set_state(menuitem,
|
||||
b->client.matched.prog_location.matched);
|
||||
e_menu_item_set_callback(menuitem,
|
||||
e_bordermenu_cb_remember_prog_location_ignore,
|
||||
b);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
e_menu_set_state(menu, menuitem);
|
||||
}
|
||||
|
||||
{
|
||||
int pl, pr, pt, pb;
|
||||
int crx, cry, crw, crh;
|
||||
int mx, my;
|
||||
|
||||
menu = b->menus->data;
|
||||
pl = pr = pt = pb = 0;
|
||||
if (b->bits.t) ebits_get_insets(b->bits.t, &pl, &pr, &pt, &pb);
|
||||
crx = b->current.x + pl;
|
||||
cry = b->current.y + pt;
|
||||
crw = b->client.w;
|
||||
crh = b->client.h;
|
||||
ecore_pointer_xy_get(&mx, &my);
|
||||
if (mx + menu->current.w > crx + crw) mx = crx + crw - menu->current.w;
|
||||
if (my + menu->current.h > cry + crh) my = cry + crh - menu->current.h;
|
||||
if (mx < crx) mx = crx;
|
||||
if (my < cry) my = cry;
|
||||
e_menu_show_at_mouse(menu, mx, my, CurrentTime);
|
||||
}
|
||||
|
||||
{
|
||||
int pl, pr, pt, pb;
|
||||
int crx, cry, crw, crh;
|
||||
int mx, my;
|
||||
|
||||
menu = b->menus->data;
|
||||
pl = pr = pt = pb = 0;
|
||||
if (b->bits.t)
|
||||
ebits_get_insets(b->bits.t, &pl, &pr, &pt, &pb);
|
||||
crx = b->current.x + pl;
|
||||
cry = b->current.y + pt;
|
||||
crw = b->client.w;
|
||||
crh = b->client.h;
|
||||
ecore_pointer_xy_get(&mx, &my);
|
||||
if (mx + menu->current.w > crx + crw)
|
||||
mx = crx + crw - menu->current.w;
|
||||
if (my + menu->current.h > cry + crh)
|
||||
my = cry + crh - menu->current.h;
|
||||
if (mx < crx)
|
||||
mx = crx;
|
||||
if (my < cry)
|
||||
my = cry;
|
||||
e_menu_show_at_mouse(menu, mx, my, CurrentTime);
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include "e.h"
|
||||
|
||||
void e_bordermenu_do(E_Border *b);
|
||||
void e_bordermenu_do(E_Border * b);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
433
src/config.c
433
src/config.c
|
@ -3,27 +3,27 @@
|
|||
#include "file.h"
|
||||
#include "util.h"
|
||||
|
||||
static char cfg_root[] = "";
|
||||
static char cfg_root[] = "";
|
||||
|
||||
static char cfg_grabs_db[PATH_MAX] = "";
|
||||
static char cfg_settings_db[PATH_MAX] = "";
|
||||
static char cfg_actions_db[PATH_MAX] = "";
|
||||
static char cfg_borders_db[PATH_MAX] = "";
|
||||
static char cfg_apps_menu_db[PATH_MAX] = "";
|
||||
static char cfg_match_db[PATH_MAX] = "";
|
||||
static char cfg_menus_dir[PATH_MAX] = "";
|
||||
static char cfg_entries_dir[PATH_MAX] = "";
|
||||
static char cfg_selections_dir[PATH_MAX] = "";
|
||||
static char cfg_scrollbars_dir[PATH_MAX] = "";
|
||||
static char cfg_guides_dir[PATH_MAX] = "";
|
||||
static char cfg_user_dir[PATH_MAX] = "";
|
||||
static char cfg_images_dir[PATH_MAX] = "";
|
||||
static char cfg_cursors_dir[PATH_MAX] = "";
|
||||
static char cfg_backgrounds_dir[PATH_MAX] = "";
|
||||
static char cfg_fonts_dir[PATH_MAX] = "";
|
||||
static char cfg_epplets_dir[PATH_MAX] = "";
|
||||
static char cfg_grabs_db[PATH_MAX] = "";
|
||||
static char cfg_settings_db[PATH_MAX] = "";
|
||||
static char cfg_actions_db[PATH_MAX] = "";
|
||||
static char cfg_borders_db[PATH_MAX] = "";
|
||||
static char cfg_apps_menu_db[PATH_MAX] = "";
|
||||
static char cfg_match_db[PATH_MAX] = "";
|
||||
static char cfg_menus_dir[PATH_MAX] = "";
|
||||
static char cfg_entries_dir[PATH_MAX] = "";
|
||||
static char cfg_selections_dir[PATH_MAX] = "";
|
||||
static char cfg_scrollbars_dir[PATH_MAX] = "";
|
||||
static char cfg_guides_dir[PATH_MAX] = "";
|
||||
static char cfg_user_dir[PATH_MAX] = "";
|
||||
static char cfg_images_dir[PATH_MAX] = "";
|
||||
static char cfg_cursors_dir[PATH_MAX] = "";
|
||||
static char cfg_backgrounds_dir[PATH_MAX] = "";
|
||||
static char cfg_fonts_dir[PATH_MAX] = "";
|
||||
static char cfg_epplets_dir[PATH_MAX] = "";
|
||||
|
||||
char *
|
||||
char *
|
||||
e_config_get(char *type)
|
||||
{
|
||||
D_ENTER;
|
||||
|
@ -40,7 +40,7 @@ e_config_get(char *type)
|
|||
/* Later when things are a bit mroe stabilised these will look */
|
||||
/* something like: */
|
||||
/* E_CONF("grabs", cfg_grabs_db, */
|
||||
/* "%sbehavior/default/grabs.db", e_config_user_dir()); */
|
||||
/* "%sbehavior/default/grabs.db", e_config_user_dir()); */
|
||||
/* notice it would use the user config location instead */
|
||||
/* but for now i'm keeping it as is for development "ease" */
|
||||
|
||||
|
@ -54,39 +54,28 @@ e_config_get(char *type)
|
|||
} \
|
||||
}
|
||||
|
||||
E_CONF("grabs", cfg_grabs_db,
|
||||
"%s/behavior/grabs.db", e_config_user_dir());
|
||||
E_CONF("grabs", cfg_grabs_db, "%s/behavior/grabs.db", e_config_user_dir());
|
||||
E_CONF("settings", cfg_settings_db,
|
||||
"%s/behavior/settings.db", e_config_user_dir());
|
||||
E_CONF("actions", cfg_actions_db,
|
||||
"%s/behavior/actions.db", e_config_user_dir());
|
||||
E_CONF("apps_menu", cfg_apps_menu_db,
|
||||
"%s/behavior/apps_menu.db", e_config_user_dir());
|
||||
E_CONF("match", cfg_match_db,
|
||||
"%s/behavior/match.db", e_config_user_dir());
|
||||
E_CONF("borders", cfg_borders_db,
|
||||
PACKAGE_DATA_DIR"/data/borders/");
|
||||
E_CONF("menus", cfg_menus_dir,
|
||||
PACKAGE_DATA_DIR"/data/menus/");
|
||||
E_CONF("entries", cfg_entries_dir,
|
||||
PACKAGE_DATA_DIR"/data/entries/");
|
||||
E_CONF("match", cfg_match_db, "%s/behavior/match.db", e_config_user_dir());
|
||||
E_CONF("borders", cfg_borders_db, PACKAGE_DATA_DIR "/data/borders/");
|
||||
E_CONF("menus", cfg_menus_dir, PACKAGE_DATA_DIR "/data/menus/");
|
||||
E_CONF("entries", cfg_entries_dir, PACKAGE_DATA_DIR "/data/entries/");
|
||||
E_CONF("selections", cfg_selections_dir,
|
||||
PACKAGE_DATA_DIR"/data/selections/");
|
||||
PACKAGE_DATA_DIR "/data/selections/");
|
||||
E_CONF("scrollbars", cfg_scrollbars_dir,
|
||||
PACKAGE_DATA_DIR"/data/scrollbars/");
|
||||
E_CONF("guides", cfg_guides_dir,
|
||||
PACKAGE_DATA_DIR"/data/guides/");
|
||||
E_CONF("images", cfg_images_dir,
|
||||
PACKAGE_DATA_DIR"/data/images/");
|
||||
E_CONF("cursors", cfg_cursors_dir,
|
||||
PACKAGE_DATA_DIR"/data/cursors/");
|
||||
PACKAGE_DATA_DIR "/data/scrollbars/");
|
||||
E_CONF("guides", cfg_guides_dir, PACKAGE_DATA_DIR "/data/guides/");
|
||||
E_CONF("images", cfg_images_dir, PACKAGE_DATA_DIR "/data/images/");
|
||||
E_CONF("cursors", cfg_cursors_dir, PACKAGE_DATA_DIR "/data/cursors/");
|
||||
E_CONF("backgrounds", cfg_backgrounds_dir,
|
||||
PACKAGE_DATA_DIR"/data/backgrounds/");
|
||||
E_CONF("fonts", cfg_fonts_dir,
|
||||
PACKAGE_DATA_DIR"/data/fonts/");
|
||||
E_CONF("epplets", cfg_epplets_dir,
|
||||
PACKAGE_DATA_DIR"/data/epplets/");
|
||||
|
||||
PACKAGE_DATA_DIR "/data/backgrounds/");
|
||||
E_CONF("fonts", cfg_fonts_dir, PACKAGE_DATA_DIR "/data/fonts/");
|
||||
E_CONF("epplets", cfg_epplets_dir, PACKAGE_DATA_DIR "/data/epplets/");
|
||||
|
||||
D_RETURN_("");
|
||||
}
|
||||
|
@ -94,33 +83,41 @@ e_config_get(char *type)
|
|||
void
|
||||
e_config_init(void)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
char buf[PATH_MAX];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
#if 1 /* for now don't do this. i think a cp -r will be needed later anyway */
|
||||
if (!e_file_is_dir(e_config_user_dir())) e_file_mkdir(e_config_user_dir());
|
||||
snprintf(buf, PATH_MAX, "%sappearance", e_config_user_dir());
|
||||
if (!e_file_is_dir(buf)) e_file_mkdir(buf);
|
||||
snprintf(buf, PATH_MAX, "%sappearance/borders", e_config_user_dir());
|
||||
if (!e_file_is_dir(buf)) e_file_mkdir(buf);
|
||||
snprintf(buf, PATH_MAX, "%sbehavior", e_config_user_dir());
|
||||
if (!e_file_is_dir(buf)) e_file_mkdir(buf);
|
||||
snprintf(buf, PATH_MAX, "%sbehavior/grabs.db", e_config_user_dir());
|
||||
#if 1 /* for now don't do this. i think a cp -r will be needed later anyway */
|
||||
if (!e_file_is_dir(e_config_user_dir()))
|
||||
e_file_mkdir(e_config_user_dir());
|
||||
snprintf(buf, PATH_MAX, "%sappearance", e_config_user_dir());
|
||||
if (!e_file_is_dir(buf))
|
||||
e_file_mkdir(buf);
|
||||
snprintf(buf, PATH_MAX, "%sappearance/borders", e_config_user_dir());
|
||||
if (!e_file_is_dir(buf))
|
||||
e_file_mkdir(buf);
|
||||
snprintf(buf, PATH_MAX, "%sbehavior", e_config_user_dir());
|
||||
if (!e_file_is_dir(buf))
|
||||
e_file_mkdir(buf);
|
||||
snprintf(buf, PATH_MAX, "%sbehavior/grabs.db", e_config_user_dir());
|
||||
if (!e_file_exists(buf))
|
||||
e_file_cp(PACKAGE_DATA_DIR"/data/config/behavior/default/grabs.db", buf);
|
||||
e_file_cp(PACKAGE_DATA_DIR "/data/config/behavior/default/grabs.db", buf);
|
||||
snprintf(buf, PATH_MAX, "%sbehavior/settings.db", e_config_user_dir());
|
||||
if (!e_file_exists(buf))
|
||||
e_file_cp(PACKAGE_DATA_DIR"/data/config/behavior/default/settings.db", buf);
|
||||
snprintf(buf, PATH_MAX, "%sbehavior/actions.db", e_config_user_dir());
|
||||
e_file_cp(PACKAGE_DATA_DIR "/data/config/behavior/default/settings.db",
|
||||
buf);
|
||||
snprintf(buf, PATH_MAX, "%sbehavior/actions.db", e_config_user_dir());
|
||||
if (!e_file_exists(buf))
|
||||
e_file_cp(PACKAGE_DATA_DIR"/data/config/behavior/default/actions.db", buf);
|
||||
snprintf(buf, PATH_MAX, "%sbehavior/apps_menu.db", e_config_user_dir());
|
||||
e_file_cp(PACKAGE_DATA_DIR "/data/config/behavior/default/actions.db",
|
||||
buf);
|
||||
snprintf(buf, PATH_MAX, "%sbehavior/apps_menu.db", e_config_user_dir());
|
||||
if (!e_file_exists(buf))
|
||||
e_file_cp(PACKAGE_DATA_DIR"/data/config/behavior/default/apps_menu.db", buf);
|
||||
snprintf(buf, PATH_MAX, "%sappearance/borders/border.bits.db", e_config_user_dir());
|
||||
e_file_cp(PACKAGE_DATA_DIR "/data/config/behavior/default/apps_menu.db",
|
||||
buf);
|
||||
snprintf(buf, PATH_MAX, "%sappearance/borders/border.bits.db",
|
||||
e_config_user_dir());
|
||||
#endif
|
||||
#if 0
|
||||
#if 0
|
||||
ts();
|
||||
#endif
|
||||
|
||||
|
@ -134,40 +131,42 @@ e_config_set_user_dir(char *dir)
|
|||
|
||||
strcpy(cfg_root, dir);
|
||||
/* reset the cached dir paths */
|
||||
cfg_grabs_db[0] = 0;
|
||||
cfg_grabs_db[0] = 0;
|
||||
cfg_settings_db[0] = 0;
|
||||
cfg_actions_db[0] = 0;
|
||||
cfg_borders_db[0] = 0;
|
||||
cfg_apps_menu_db[0]= 0;
|
||||
cfg_match_db[0]= 0;
|
||||
cfg_menus_dir[0] = 0;
|
||||
cfg_actions_db[0] = 0;
|
||||
cfg_borders_db[0] = 0;
|
||||
cfg_apps_menu_db[0] = 0;
|
||||
cfg_match_db[0] = 0;
|
||||
cfg_menus_dir[0] = 0;
|
||||
cfg_entries_dir[0] = 0;
|
||||
cfg_selections_dir[0] = 0;
|
||||
cfg_scrollbars_dir[0] = 0;
|
||||
cfg_guides_dir[0] = 0;
|
||||
cfg_user_dir[0] = 0;
|
||||
cfg_images_dir[0] = 0;
|
||||
cfg_user_dir[0] = 0;
|
||||
cfg_images_dir[0] = 0;
|
||||
cfg_cursors_dir[0] = 0;
|
||||
cfg_backgrounds_dir[0] = 0;
|
||||
cfg_fonts_dir[0] = 0;
|
||||
cfg_backgrounds_dir[0] = 0;
|
||||
cfg_fonts_dir[0] = 0;
|
||||
/* init again - if the user hasnt got all the data */
|
||||
e_config_init();
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
char *
|
||||
char *
|
||||
e_config_user_dir(void)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (cfg_user_dir[0]) D_RETURN_(cfg_user_dir);
|
||||
if (cfg_root[0]) D_RETURN_(cfg_root);
|
||||
#if 1 /* disabled for now - use system ones only */
|
||||
if (cfg_user_dir[0])
|
||||
D_RETURN_(cfg_user_dir);
|
||||
if (cfg_root[0])
|
||||
D_RETURN_(cfg_root);
|
||||
#if 1 /* disabled for now - use system ones only */
|
||||
snprintf(cfg_user_dir, PATH_MAX, "%s/.e/", e_util_get_user_home());
|
||||
#else
|
||||
snprintf(cfg_user_dir, PATH_MAX, PACKAGE_DATA_DIR"/data/config/");
|
||||
#endif
|
||||
#else
|
||||
snprintf(cfg_user_dir, PATH_MAX, PACKAGE_DATA_DIR "/data/config/");
|
||||
#endif
|
||||
|
||||
D_RETURN_(cfg_user_dir);
|
||||
}
|
||||
|
@ -176,12 +175,14 @@ typedef struct _e_config_file_entry E_Config_File_Entry;
|
|||
|
||||
struct _e_config_file_entry
|
||||
{
|
||||
char *name;
|
||||
struct {
|
||||
char *path;
|
||||
time_t last_mod;
|
||||
} user, system;
|
||||
Evas_List hash[256];
|
||||
char *name;
|
||||
struct
|
||||
{
|
||||
char *path;
|
||||
time_t last_mod;
|
||||
}
|
||||
user , system;
|
||||
Evas_List hash[256];
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -204,41 +205,35 @@ e_config_val_float_get(char *file, char *key, float def)
|
|||
{
|
||||
}
|
||||
|
||||
char *
|
||||
char *
|
||||
e_config_val_str_get(char *file, char *key, char *def)
|
||||
{
|
||||
}
|
||||
|
||||
char *
|
||||
char *
|
||||
e_config_val_key_get(char *file, char *key, char *def)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void
|
||||
e_config_type_add_node(E_Config_Base_Type *base, char *prefix,
|
||||
E_Config_Datatype type, E_Config_Base_Type *list_type,
|
||||
int offset,
|
||||
int def_int,
|
||||
float def_float,
|
||||
char *def_str)
|
||||
e_config_type_add_node(E_Config_Base_Type * base, char *prefix,
|
||||
E_Config_Datatype type, E_Config_Base_Type * list_type,
|
||||
int offset, int def_int, float def_float, char *def_str)
|
||||
{
|
||||
E_Config_Node *cfg_node;
|
||||
|
||||
E_Config_Node *cfg_node;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
cfg_node = NEW(E_Config_Node, 1);
|
||||
ZERO(cfg_node, E_Config_Node, 1);
|
||||
|
||||
cfg_node->prefix = strdup(prefix);
|
||||
cfg_node->type = type;
|
||||
cfg_node->sub_type = list_type;
|
||||
cfg_node->offset = offset;
|
||||
cfg_node->def_int = def_int;
|
||||
|
||||
cfg_node->prefix = strdup(prefix);
|
||||
cfg_node->type = type;
|
||||
cfg_node->sub_type = list_type;
|
||||
cfg_node->offset = offset;
|
||||
cfg_node->def_int = def_int;
|
||||
cfg_node->def_float = def_float;
|
||||
if (cfg_node->def_str)
|
||||
if (cfg_node->def_str)
|
||||
{
|
||||
e_strdup(cfg_node->def_str, def_str);
|
||||
}
|
||||
|
@ -251,7 +246,7 @@ E_Config_Base_Type *
|
|||
e_config_type_new(void)
|
||||
{
|
||||
E_Config_Base_Type *t;
|
||||
|
||||
|
||||
D_ENTER;
|
||||
|
||||
t = NEW(E_Config_Base_Type, 1);
|
||||
|
@ -260,94 +255,98 @@ e_config_type_new(void)
|
|||
D_RETURN_(t);
|
||||
}
|
||||
|
||||
void *
|
||||
e_config_load(char *file, char *prefix, E_Config_Base_Type *type)
|
||||
void *
|
||||
e_config_load(char *file, char *prefix, E_Config_Base_Type * type)
|
||||
{
|
||||
E_DB_File *db;
|
||||
char buf[PATH_MAX];
|
||||
Evas_List l;
|
||||
char *data;
|
||||
|
||||
E_DB_File *db;
|
||||
char buf[PATH_MAX];
|
||||
Evas_List l;
|
||||
char *data;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!e_file_exists(file)) D_RETURN_(NULL);
|
||||
if (!e_file_exists(file))
|
||||
D_RETURN_(NULL);
|
||||
db = e_db_open_read(file);
|
||||
|
||||
if (!db)
|
||||
D_RETURN_(NULL);
|
||||
D_RETURN_(NULL);
|
||||
|
||||
data = NEW(char, type->size);
|
||||
ZERO(data, char , type->size);
|
||||
ZERO(data, char, type->size);
|
||||
|
||||
for (l = type->nodes; l; l = l->next)
|
||||
{
|
||||
E_Config_Node *node;
|
||||
E_Config_Node *node;
|
||||
|
||||
node = l->data;
|
||||
|
||||
|
||||
switch (node->type)
|
||||
{
|
||||
case E_CFG_TYPE_INT:
|
||||
{
|
||||
int val;
|
||||
|
||||
val = 0;
|
||||
snprintf(buf, PATH_MAX, "%s/%s", prefix, node->prefix);
|
||||
if (e_db_int_get(db, buf, &val))
|
||||
(*((int *)(&(data[node->offset])))) = val;
|
||||
else
|
||||
(*((int *)(&(data[node->offset])))) = node->def_int;
|
||||
}
|
||||
case E_CFG_TYPE_INT:
|
||||
{
|
||||
int val;
|
||||
|
||||
val = 0;
|
||||
snprintf(buf, PATH_MAX, "%s/%s", prefix, node->prefix);
|
||||
if (e_db_int_get(db, buf, &val))
|
||||
(*((int *)(&(data[node->offset])))) = val;
|
||||
else
|
||||
(*((int *)(&(data[node->offset])))) = node->def_int;
|
||||
}
|
||||
break;
|
||||
case E_CFG_TYPE_STR:
|
||||
{
|
||||
char *val;
|
||||
|
||||
snprintf(buf, PATH_MAX, "%s/%s", prefix, node->prefix);
|
||||
if ((val = e_db_str_get(db, buf)))
|
||||
(*((char **)(&(data[node->offset])))) = val;
|
||||
else
|
||||
e_strdup((*((char **)(&(data[node->offset])))), node->def_str);
|
||||
}
|
||||
case E_CFG_TYPE_STR:
|
||||
{
|
||||
char *val;
|
||||
|
||||
snprintf(buf, PATH_MAX, "%s/%s", prefix, node->prefix);
|
||||
if ((val = e_db_str_get(db, buf)))
|
||||
(*((char **)(&(data[node->offset])))) = val;
|
||||
else
|
||||
e_strdup((*((char **)(&(data[node->offset])))),
|
||||
node->def_str);
|
||||
}
|
||||
break;
|
||||
case E_CFG_TYPE_FLOAT:
|
||||
{
|
||||
float val;
|
||||
|
||||
val = 0;
|
||||
snprintf(buf, PATH_MAX, "%s/%s", prefix, node->prefix);
|
||||
if (e_db_float_get(db, buf, &val))
|
||||
(*((float *)(&(data[node->offset])))) = val;
|
||||
else
|
||||
(*((float *)(&(data[node->offset])))) = node->def_float;
|
||||
}
|
||||
case E_CFG_TYPE_FLOAT:
|
||||
{
|
||||
float val;
|
||||
|
||||
val = 0;
|
||||
snprintf(buf, PATH_MAX, "%s/%s", prefix, node->prefix);
|
||||
if (e_db_float_get(db, buf, &val))
|
||||
(*((float *)(&(data[node->offset])))) = val;
|
||||
else
|
||||
(*((float *)(&(data[node->offset])))) = node->def_float;
|
||||
}
|
||||
break;
|
||||
case E_CFG_TYPE_LIST:
|
||||
{
|
||||
Evas_List l2;
|
||||
int i, count;
|
||||
|
||||
l2 = NULL;
|
||||
snprintf(buf, PATH_MAX, "%s/%s/count", prefix, node->prefix);
|
||||
count = 0;
|
||||
e_db_int_get(db, buf, &count);
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
void *data2;
|
||||
|
||||
snprintf(buf, PATH_MAX, "%s/%s/%i", prefix, node->prefix, i);
|
||||
data2 = e_config_load(file, buf, node->sub_type);
|
||||
l2 = evas_list_append(l2, data2);
|
||||
}
|
||||
(*((Evas_List *)(&(data[node->offset])))) = l2;
|
||||
}
|
||||
case E_CFG_TYPE_LIST:
|
||||
{
|
||||
Evas_List l2;
|
||||
int i, count;
|
||||
|
||||
l2 = NULL;
|
||||
snprintf(buf, PATH_MAX, "%s/%s/count", prefix, node->prefix);
|
||||
count = 0;
|
||||
e_db_int_get(db, buf, &count);
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
void *data2;
|
||||
|
||||
snprintf(buf, PATH_MAX, "%s/%s/%i", prefix, node->prefix,
|
||||
i);
|
||||
data2 = e_config_load(file, buf, node->sub_type);
|
||||
l2 = evas_list_append(l2, data2);
|
||||
}
|
||||
(*((Evas_List *) (&(data[node->offset])))) = l2;
|
||||
}
|
||||
break;
|
||||
case E_CFG_TYPE_KEY:
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "%s/%s", prefix, node->prefix);
|
||||
(*((char **)(&(data[node->offset])))) = strdup(buf);
|
||||
}
|
||||
case E_CFG_TYPE_KEY:
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "%s/%s", prefix, node->prefix);
|
||||
(*((char **)(&(data[node->offset])))) = strdup(buf);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -356,69 +355,73 @@ e_config_load(char *file, char *prefix, E_Config_Base_Type *type)
|
|||
D_RETURN_(data);
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
typedef struct _list_base List_Base;
|
||||
typedef struct _list_element List_Element;
|
||||
|
||||
struct _list_base
|
||||
{
|
||||
Evas_List elements;
|
||||
Evas_List elements;
|
||||
};
|
||||
|
||||
struct _list_element
|
||||
{
|
||||
char *name;
|
||||
int size;
|
||||
float perc;
|
||||
char *name;
|
||||
int size;
|
||||
float perc;
|
||||
};
|
||||
|
||||
/* eg: */
|
||||
void ts(void)
|
||||
void
|
||||
ts(void)
|
||||
{
|
||||
/* define the different config types and structs to the config engine */
|
||||
E_Config_Base_Type *cf_list;
|
||||
E_Config_Base_Type *cf_element;
|
||||
|
||||
|
||||
D_ENTER;
|
||||
|
||||
cf_element = e_config_type_new();
|
||||
E_CONFIG_NODE(cf_element, "name", E_CFG_TYPE_STR, NULL, List_Element, name, 0, 0, "DEFAULT_NAME");
|
||||
E_CONFIG_NODE(cf_element, "size", E_CFG_TYPE_INT, NULL, List_Element, size, 777, 0, NULL);
|
||||
E_CONFIG_NODE(cf_element, "perc", E_CFG_TYPE_FLOAT, NULL, List_Element, perc, 0, 3.1415, NULL);
|
||||
|
||||
E_CONFIG_NODE(cf_element, "name", E_CFG_TYPE_STR, NULL, List_Element, name,
|
||||
0, 0, "DEFAULT_NAME");
|
||||
E_CONFIG_NODE(cf_element, "size", E_CFG_TYPE_INT, NULL, List_Element, size,
|
||||
777, 0, NULL);
|
||||
E_CONFIG_NODE(cf_element, "perc", E_CFG_TYPE_FLOAT, NULL, List_Element, perc,
|
||||
0, 3.1415, NULL);
|
||||
|
||||
cf_list = e_config_type_new();
|
||||
E_CONFIG_NODE(cf_list, "list", E_CFG_TYPE_LIST, cf_element, List_Base, elements, 0, 0, NULL);
|
||||
E_CONFIG_NODE(cf_list, "list", E_CFG_TYPE_LIST, cf_element, List_Base,
|
||||
elements, 0, 0, NULL);
|
||||
|
||||
/* now test it */
|
||||
{
|
||||
List_Base *cfg_data;
|
||||
|
||||
/* load the base data type from the base of the test db file */
|
||||
cfg_data = e_config_load("test.db", "", cf_list);
|
||||
/* no data file? */
|
||||
if (!cfg_data)
|
||||
{
|
||||
D("no load!\n");
|
||||
}
|
||||
/* got data */
|
||||
else
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
for (l = cfg_data->elements; l; l = l->next)
|
||||
{
|
||||
List_Element *cfg_element;
|
||||
|
||||
D("element\n");
|
||||
cfg_element = l->data;
|
||||
D("... name %s\n", cfg_element->name);
|
||||
D("... size %i\n", cfg_element->size);
|
||||
D("... perc %3.3f\n", cfg_element->perc);
|
||||
}
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
{
|
||||
List_Base *cfg_data;
|
||||
|
||||
/* load the base data type from the base of the test db file */
|
||||
cfg_data = e_config_load("test.db", "", cf_list);
|
||||
/* no data file? */
|
||||
if (!cfg_data)
|
||||
{
|
||||
D("no load!\n");
|
||||
}
|
||||
/* got data */
|
||||
else
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
for (l = cfg_data->elements; l; l = l->next)
|
||||
{
|
||||
List_Element *cfg_element;
|
||||
|
||||
D("element\n");
|
||||
cfg_element = l->data;
|
||||
D("... name %s\n", cfg_element->name);
|
||||
D("... size %i\n", cfg_element->size);
|
||||
D("... perc %3.3f\n", cfg_element->perc);
|
||||
}
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
|
102
src/config.h
102
src/config.h
|
@ -3,8 +3,8 @@
|
|||
|
||||
#include "e.h"
|
||||
|
||||
typedef struct _E_Config_File E_Config_File;
|
||||
typedef struct _E_Config_Element E_Config_Element;
|
||||
typedef struct _E_Config_File E_Config_File;
|
||||
typedef struct _E_Config_Element E_Config_Element;
|
||||
|
||||
/* something to check validity of config files where we get data from */
|
||||
/* for now its just a 5 second timout so it will only invalidate */
|
||||
|
@ -12,26 +12,26 @@ typedef struct _E_Config_Element E_Config_Element;
|
|||
/* we should use that to tell us when its invalid */
|
||||
struct _E_Config_File
|
||||
{
|
||||
char *src;
|
||||
double last_fetch;
|
||||
char *src;
|
||||
double last_fetch;
|
||||
};
|
||||
|
||||
struct _E_Config_Element
|
||||
struct _E_Config_Element
|
||||
{
|
||||
char *src;
|
||||
char *key;
|
||||
double last_fetch;
|
||||
int type;
|
||||
int def_int_val;
|
||||
float def_float_val;
|
||||
char *def_str_val;
|
||||
void *def_data_val;
|
||||
int def_data_val_size;
|
||||
int cur_int_val;
|
||||
float cur_float_val;
|
||||
char *cur_str_val;
|
||||
void *cur_data_val;
|
||||
int cur_data_val_size;
|
||||
char *src;
|
||||
char *key;
|
||||
double last_fetch;
|
||||
int type;
|
||||
int def_int_val;
|
||||
float def_float_val;
|
||||
char *def_str_val;
|
||||
void *def_data_val;
|
||||
int def_data_val_size;
|
||||
int cur_int_val;
|
||||
float cur_float_val;
|
||||
char *cur_str_val;
|
||||
void *cur_data_val;
|
||||
int cur_data_val_size;
|
||||
};
|
||||
|
||||
#define E_CFG_FILE(_var, _src) \
|
||||
|
@ -47,12 +47,12 @@ _var.last_fetch = __time;
|
|||
}
|
||||
|
||||
typedef enum e_config_type
|
||||
{
|
||||
E_CFG_INT_T,
|
||||
E_CFG_FLOAT_T,
|
||||
E_CFG_STR_T,
|
||||
E_CFG_DATA_T,
|
||||
}
|
||||
{
|
||||
E_CFG_INT_T,
|
||||
E_CFG_FLOAT_T,
|
||||
E_CFG_STR_T,
|
||||
E_CFG_DATA_T,
|
||||
}
|
||||
E_Config_Type;
|
||||
|
||||
#define E_CFG_INT(_var, _src, _key, _default) \
|
||||
|
@ -146,16 +146,15 @@ E_CFG_END_VALIDITY_CHECK \
|
|||
_val = _var.cur_data_val; \
|
||||
_size = _var.cur_data_size;}
|
||||
|
||||
|
||||
char *e_config_get(char *type);
|
||||
void e_config_init(void);
|
||||
void e_config_set_user_dir(char *dir);
|
||||
char *e_config_user_dir(void);
|
||||
char *e_config_get(char *type);
|
||||
void e_config_init(void);
|
||||
void e_config_set_user_dir(char *dir);
|
||||
char *e_config_user_dir(void);
|
||||
|
||||
typedef struct _e_config_base_type E_Config_Base_Type;
|
||||
typedef struct _e_config_node E_Config_Node;
|
||||
typedef struct _e_config_value E_Config_Value;
|
||||
typedef enum _e_config_datatype E_Config_Datatype;
|
||||
typedef struct _e_config_node E_Config_Node;
|
||||
typedef struct _e_config_value E_Config_Value;
|
||||
typedef enum _e_config_datatype E_Config_Datatype;
|
||||
|
||||
enum _e_config_datatype
|
||||
{
|
||||
|
@ -168,8 +167,8 @@ enum _e_config_datatype
|
|||
|
||||
struct _e_config_base_type
|
||||
{
|
||||
int size;
|
||||
Evas_List nodes;
|
||||
int size;
|
||||
Evas_List nodes;
|
||||
};
|
||||
|
||||
struct _e_config_node
|
||||
|
@ -197,26 +196,25 @@ struct _e_config_node
|
|||
var->size = sizeof(struct_type); \
|
||||
}
|
||||
|
||||
E_Config_Value *e_config_value_get_int(E_Config_Value *handle, char *file,
|
||||
char *prefix, char *key,
|
||||
int *val_ret, int default_val);
|
||||
E_Config_Value *e_config_value_get_str(E_Config_Value *handle, char *file,
|
||||
char *prefix, char *key,
|
||||
char **val_ret, char *default_val);
|
||||
E_Config_Value *e_config_value_get_float(E_Config_Value *handle, char *file,
|
||||
char *prefix, char *key,
|
||||
float *val_ret, float default_val);
|
||||
E_Config_Value *e_config_value_get_int(E_Config_Value * handle, char *file,
|
||||
char *prefix, char *key,
|
||||
int *val_ret, int default_val);
|
||||
E_Config_Value *e_config_value_get_str(E_Config_Value * handle, char *file,
|
||||
char *prefix, char *key,
|
||||
char **val_ret, char *default_val);
|
||||
E_Config_Value *e_config_value_get_float(E_Config_Value * handle,
|
||||
char *file, char *prefix,
|
||||
char *key, float *val_ret,
|
||||
float default_val);
|
||||
E_Config_Base_Type *e_config_type_new(void);
|
||||
void e_config_type_add_node(E_Config_Base_Type *base,
|
||||
void e_config_type_add_node(E_Config_Base_Type * base,
|
||||
char *prefix,
|
||||
E_Config_Datatype type,
|
||||
E_Config_Base_Type *list_type,
|
||||
E_Config_Datatype type,
|
||||
E_Config_Base_Type * list_type,
|
||||
int offset,
|
||||
int def_int,
|
||||
float def_float,
|
||||
char *def_str);
|
||||
void *e_config_load(char *file,
|
||||
char *prefix,
|
||||
E_Config_Base_Type *type);
|
||||
float def_float, char *def_str);
|
||||
void *e_config_load(char *file,
|
||||
char *prefix, E_Config_Base_Type * type);
|
||||
|
||||
#endif
|
||||
|
|
152
src/cursors.c
152
src/cursors.c
|
@ -8,35 +8,37 @@ typedef struct _e_cursor E_Cursor;
|
|||
|
||||
struct _e_cursor
|
||||
{
|
||||
char *type;
|
||||
Cursor cursor;
|
||||
time_t mod;
|
||||
char *type;
|
||||
Cursor cursor;
|
||||
time_t mod;
|
||||
};
|
||||
|
||||
static int cursor_change = 0;
|
||||
static char *cur_cursor = NULL;
|
||||
static char *prev_cursor = NULL;
|
||||
static Evas_List cursors = NULL;
|
||||
static int cursor_change = 0;
|
||||
static char *cur_cursor = NULL;
|
||||
static char *prev_cursor = NULL;
|
||||
static Evas_List cursors = NULL;
|
||||
|
||||
static void e_cursors_idle(void *data);
|
||||
static void e_cursors_set(char *type);
|
||||
static E_Cursor * e_cursors_find(char *type);
|
||||
static void e_cursors_idle(void *data);
|
||||
static void e_cursors_set(char *type);
|
||||
static E_Cursor *e_cursors_find(char *type);
|
||||
|
||||
static void
|
||||
e_cursors_idle(void *data)
|
||||
{
|
||||
int change = 0;
|
||||
int change = 0;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!cursor_change) D_RETURN;
|
||||
|
||||
if (!cursor_change)
|
||||
D_RETURN;
|
||||
if ((prev_cursor) && (cur_cursor) && (strcmp(prev_cursor, cur_cursor)))
|
||||
change = 1;
|
||||
change = 1;
|
||||
if ((prev_cursor) && (!cur_cursor))
|
||||
change = 1;
|
||||
change = 1;
|
||||
if ((!prev_cursor) && (cur_cursor))
|
||||
change = 1;
|
||||
if (change) e_cursors_set(cur_cursor);
|
||||
change = 1;
|
||||
if (change)
|
||||
e_cursors_set(cur_cursor);
|
||||
IF_FREE(prev_cursor);
|
||||
e_strdup(prev_cursor, cur_cursor);
|
||||
IF_FREE(cur_cursor);
|
||||
|
@ -57,22 +59,22 @@ e_cursors_set(char *type)
|
|||
D_RETURN;
|
||||
}
|
||||
|
||||
static E_Cursor *
|
||||
static E_Cursor *
|
||||
e_cursors_find(char *type)
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
for (l = cursors; l; l = l->next)
|
||||
{
|
||||
E_Cursor *c;
|
||||
|
||||
E_Cursor *c;
|
||||
|
||||
c = l->data;
|
||||
if (!strcmp(c->type, type))
|
||||
if (!strcmp(c->type, type))
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
|
||||
char buf[PATH_MAX];
|
||||
|
||||
snprintf(buf, PATH_MAX, "%s/%s.db", e_config_get("cursors"), type);
|
||||
if (e_file_mod_time(buf) > c->mod)
|
||||
{
|
||||
|
@ -91,63 +93,66 @@ e_cursors_find(char *type)
|
|||
void
|
||||
e_cursors_display_in_window(Window win, char *type)
|
||||
{
|
||||
E_Cursor *c;
|
||||
E_Cursor *c;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!type) type = "Default";
|
||||
if (!type)
|
||||
type = "Default";
|
||||
c = e_cursors_find(type);
|
||||
if (!c)
|
||||
{
|
||||
Pixmap pmap, mask;
|
||||
int hx = 0, hy = 0;
|
||||
int fr = 255, fg = 255, fb = 255;
|
||||
int br = 0, bg = 0, bb = 0;
|
||||
int w = 32, h = 32;
|
||||
int ok;
|
||||
char buf[PATH_MAX];
|
||||
Imlib_Image im;
|
||||
|
||||
Pixmap pmap, mask;
|
||||
int hx = 0, hy = 0;
|
||||
int fr = 255, fg = 255, fb = 255;
|
||||
int br = 0, bg = 0, bb = 0;
|
||||
int w = 32, h = 32;
|
||||
int ok;
|
||||
char buf[PATH_MAX];
|
||||
Imlib_Image im;
|
||||
|
||||
c = NEW(E_Cursor, 1);
|
||||
ZERO(c, E_Cursor, 1);
|
||||
|
||||
|
||||
e_strdup(c->type, type);
|
||||
|
||||
|
||||
snprintf(buf, PATH_MAX, "%s/%s.db", e_config_get("cursors"), type);
|
||||
c->mod = e_file_mod_time(buf);
|
||||
E_DB_INT_GET(buf, "/cursor/x", hx, ok);
|
||||
E_DB_INT_GET(buf, "/cursor/y", hy, ok);
|
||||
snprintf(buf, PATH_MAX, "%s/%s.db:/cursor/image", e_config_get("cursors"), type);
|
||||
snprintf(buf, PATH_MAX, "%s/%s.db:/cursor/image",
|
||||
e_config_get("cursors"), type);
|
||||
im = imlib_load_image(buf);
|
||||
if (im)
|
||||
{
|
||||
DATA32 *data;
|
||||
int x, y;
|
||||
GC gcf, gcb;
|
||||
int have_bg = 0, have_fg = 0;
|
||||
|
||||
DATA32 *data;
|
||||
int x, y;
|
||||
GC gcf, gcb;
|
||||
int have_bg = 0, have_fg = 0;
|
||||
|
||||
imlib_context_set_image(im);
|
||||
w = imlib_image_get_width();
|
||||
h = imlib_image_get_height();
|
||||
pmap = ecore_pixmap_new(0, w, h, 1);
|
||||
mask = ecore_pixmap_new(0, w, h, 1);
|
||||
data = imlib_image_get_data_for_reading_only();
|
||||
|
||||
|
||||
/* figure out fg & bg */
|
||||
if (!data) goto done;
|
||||
if (!data)
|
||||
goto done;
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
int r, g, b, a;
|
||||
DATA32 pix;
|
||||
|
||||
int r, g, b, a;
|
||||
DATA32 pix;
|
||||
|
||||
pix = data[(y * w) + x];
|
||||
r = (pix >> 16) & 0xff;
|
||||
g = (pix >> 8 ) & 0xff;
|
||||
b = (pix ) & 0xff;
|
||||
g = (pix >> 8) & 0xff;
|
||||
b = (pix) & 0xff;
|
||||
a = (pix >> 24) & 0xff;
|
||||
|
||||
|
||||
if (a > 127)
|
||||
{
|
||||
if (!have_bg)
|
||||
|
@ -159,7 +164,7 @@ e_cursors_display_in_window(Window win, char *type)
|
|||
}
|
||||
if (!have_fg)
|
||||
{
|
||||
if ((have_bg) &&
|
||||
if ((have_bg) &&
|
||||
((br != r) || (bg != g) || (bb != b)))
|
||||
{
|
||||
fr = r;
|
||||
|
@ -172,47 +177,48 @@ e_cursors_display_in_window(Window win, char *type)
|
|||
}
|
||||
}
|
||||
}
|
||||
done:
|
||||
|
||||
done:
|
||||
|
||||
/* FIXME: inefficient - using pixmaps and draw point... should */
|
||||
/* use XImages & XShm */
|
||||
|
||||
|
||||
/* get some gc's set up */
|
||||
gcb = ecore_gc_new(pmap);
|
||||
gcf = ecore_gc_new(pmap);
|
||||
ecore_gc_set_fg(gcb, 0);
|
||||
ecore_gc_set_fg(gcf, 1);
|
||||
|
||||
|
||||
/* fill out cursor pixmap with 0's (bg) */
|
||||
ecore_fill_rectangle(pmap, gcb, 0, 0, w, h);
|
||||
ecore_fill_rectangle(mask, gcb, 0, 0, w, h);
|
||||
if (!data) goto done2;
|
||||
if (!data)
|
||||
goto done2;
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
int r, g, b, a;
|
||||
DATA32 pix;
|
||||
|
||||
int r, g, b, a;
|
||||
DATA32 pix;
|
||||
|
||||
pix = data[(y * w) + x];
|
||||
r = (pix >> 16) & 0xff;
|
||||
g = (pix >> 8 ) & 0xff;
|
||||
b = (pix ) & 0xff;
|
||||
g = (pix >> 8) & 0xff;
|
||||
b = (pix) & 0xff;
|
||||
a = (pix >> 24) & 0xff;
|
||||
|
||||
if (a > 127)
|
||||
|
||||
if (a > 127)
|
||||
{
|
||||
ecore_draw_point(mask, gcf, x, y);
|
||||
if ((r == fr) && (g == fg) && (b == fb))
|
||||
ecore_draw_point(pmap, gcf, x, y);
|
||||
ecore_draw_point(pmap, gcf, x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
done2:
|
||||
done2:
|
||||
/* clean up */
|
||||
ecore_gc_free(gcb);
|
||||
ecore_gc_free(gcf);
|
||||
|
||||
|
||||
imlib_image_put_back_data(data);
|
||||
imlib_free_image();
|
||||
}
|
||||
|
@ -222,19 +228,21 @@ e_cursors_display_in_window(Window win, char *type)
|
|||
FREE(c);
|
||||
c = NULL;
|
||||
}
|
||||
if (c)
|
||||
if (c)
|
||||
{
|
||||
c->cursor = ecore_cursor_new(pmap, mask, hx, hy, fr, fg, fb, br, bg, bb);
|
||||
c->cursor =
|
||||
ecore_cursor_new(pmap, mask, hx, hy, fr, fg, fb, br, bg, bb);
|
||||
ecore_pixmap_free(pmap);
|
||||
ecore_pixmap_free(mask);
|
||||
cursors = evas_list_append(cursors, c);
|
||||
}
|
||||
}
|
||||
if (c)
|
||||
ecore_cursor_set(win, c->cursor);
|
||||
ecore_cursor_set(win, c->cursor);
|
||||
else
|
||||
{
|
||||
if (!strcmp(type, "Default")) D_RETURN;
|
||||
if (!strcmp(type, "Default"))
|
||||
D_RETURN;
|
||||
e_cursors_display_in_window(win, "Default");
|
||||
}
|
||||
|
||||
|
|
|
@ -3,9 +3,8 @@
|
|||
|
||||
#include "e.h"
|
||||
|
||||
void e_cursors_display(char *type);
|
||||
void e_cursors_display_in_window(Window win, char *type);
|
||||
void e_cursors_init(void);
|
||||
void e_cursors_display(char *type);
|
||||
void e_cursors_display_in_window(Window win, char *type);
|
||||
void e_cursors_init(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
75
src/debug.c
75
src/debug.c
|
@ -33,63 +33,56 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
||||
#include "debug.h"
|
||||
|
||||
static int do_print = 0;
|
||||
static int calldepth = 0;
|
||||
|
||||
static int do_print = 0;
|
||||
static int calldepth = 0;
|
||||
static void debug_whitespace(int calldepth);
|
||||
static void debug_print_info(void);
|
||||
|
||||
static void debug_whitespace(int calldepth);
|
||||
static void debug_print_info(void);
|
||||
|
||||
static void
|
||||
static void
|
||||
debug_whitespace(int calldepth)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 2*calldepth; i++)
|
||||
printf("-");
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 2 * calldepth; i++)
|
||||
printf("-");
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
static void
|
||||
debug_print_info(void)
|
||||
{
|
||||
printf("e17 dbg: ");
|
||||
printf("e17 dbg: ");
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
e_debug_enter(const char *file, const char *func)
|
||||
{
|
||||
if (do_print)
|
||||
{
|
||||
calldepth++;
|
||||
|
||||
printf("ENTER ");
|
||||
debug_print_info();
|
||||
debug_whitespace(calldepth);
|
||||
printf("%s, %s()\n", file, func);
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
if (do_print)
|
||||
{
|
||||
calldepth++;
|
||||
|
||||
printf("ENTER ");
|
||||
debug_print_info();
|
||||
debug_whitespace(calldepth);
|
||||
printf("%s, %s()\n", file, func);
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_debug_return(const char *file, const char *func)
|
||||
{
|
||||
if (do_print)
|
||||
{
|
||||
printf("RETURN ");
|
||||
debug_print_info();
|
||||
debug_whitespace(calldepth);
|
||||
printf("%s, %s()\n", file, func);
|
||||
fflush(stdout);
|
||||
|
||||
calldepth--;
|
||||
|
||||
if (calldepth < 0)
|
||||
printf("NEGATIVE!!!\n");
|
||||
}
|
||||
if (do_print)
|
||||
{
|
||||
printf("RETURN ");
|
||||
debug_print_info();
|
||||
debug_whitespace(calldepth);
|
||||
printf("%s, %s()\n", file, func);
|
||||
fflush(stdout);
|
||||
|
||||
calldepth--;
|
||||
|
||||
if (calldepth < 0)
|
||||
printf("NEGATIVE!!!\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -41,8 +41,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
||||
#ifdef DEBUG_NEST
|
||||
|
||||
void e_debug_enter(const char *file, const char *func);
|
||||
void e_debug_return(const char *file, const char *func);
|
||||
void e_debug_enter(const char *file, const char *func);
|
||||
void e_debug_return(const char *file, const char *func);
|
||||
|
||||
#define D_ENTER e_debug_enter(__FILE__, __FUNCTION__)
|
||||
|
||||
|
@ -64,5 +64,4 @@ void e_debug_return(const char *file, const char *func);
|
|||
#define D_RETURN_(x) return (x)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3,43 +3,40 @@
|
|||
#include "delayed.h"
|
||||
|
||||
static void
|
||||
e_delayed_action_cleanup(E_Delayed_Action *eda)
|
||||
e_delayed_action_cleanup(E_Delayed_Action * eda)
|
||||
{
|
||||
D_ENTER;
|
||||
D_ENTER;
|
||||
|
||||
e_delayed_action_cancel(eda);
|
||||
e_observer_cleanup(E_OBSERVER(eda));
|
||||
e_delayed_action_cancel(eda);
|
||||
e_observer_cleanup(E_OBSERVER(eda));
|
||||
|
||||
D_RETURN;
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
|
||||
E_Delayed_Action *
|
||||
e_delayed_action_new(E_Event_Type event,
|
||||
double delay, E_Delay_Func delay_func)
|
||||
E_Delayed_Action *
|
||||
e_delayed_action_new(E_Event_Type event, double delay, E_Delay_Func delay_func)
|
||||
{
|
||||
E_Delayed_Action *eda = NULL;
|
||||
E_Delayed_Action *eda = NULL;
|
||||
|
||||
D_ENTER;
|
||||
D_ENTER;
|
||||
|
||||
eda = NEW(E_Delayed_Action, 1);
|
||||
memset(eda, 0, sizeof(E_Delayed_Action));
|
||||
eda = NEW(E_Delayed_Action, 1);
|
||||
memset(eda, 0, sizeof(E_Delayed_Action));
|
||||
|
||||
e_observer_init(E_OBSERVER(eda), event, e_delayed_action_start,
|
||||
(E_Cleanup_Func) e_delayed_action_cleanup);
|
||||
e_observer_init(E_OBSERVER(eda), event, e_delayed_action_start,
|
||||
(E_Cleanup_Func) e_delayed_action_cleanup);
|
||||
|
||||
eda->delay = delay;
|
||||
eda->delay_func = delay_func;
|
||||
eda->delay = delay;
|
||||
eda->delay_func = delay_func;
|
||||
|
||||
D_RETURN_(eda);
|
||||
D_RETURN_(eda);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
e_delayed_action_start(E_Observer *obs, E_Observee *obj, E_Event_Type event)
|
||||
e_delayed_action_start(E_Observer * obs, E_Observee * obj, E_Event_Type event)
|
||||
{
|
||||
char event_name[PATH_MAX];
|
||||
E_Delayed_Action *eda = (E_Delayed_Action*) obs;
|
||||
char event_name[PATH_MAX];
|
||||
E_Delayed_Action *eda = (E_Delayed_Action *) obs;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
@ -49,17 +46,16 @@ e_delayed_action_start(E_Observer *obs, E_Observee *obj, E_Event_Type event)
|
|||
D_RETURN;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
e_delayed_action_cancel(E_Delayed_Action *eda)
|
||||
e_delayed_action_cancel(E_Delayed_Action * eda)
|
||||
{
|
||||
char event_name[PATH_MAX];
|
||||
char event_name[PATH_MAX];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
snprintf(event_name, PATH_MAX, "_e_delayed_action_notify(%d)", E_OBSERVER(eda)->event);
|
||||
snprintf(event_name, PATH_MAX, "_e_delayed_action_notify(%d)",
|
||||
E_OBSERVER(eda)->event);
|
||||
ecore_del_event_timer(event_name);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,23 +4,23 @@
|
|||
#include "e.h"
|
||||
#include "observer.h"
|
||||
|
||||
typedef void (*E_Delay_Func)(int val, void *obj);
|
||||
typedef void (*E_Delay_Func) (int val, void *obj);
|
||||
|
||||
typedef struct _e_delayed_action
|
||||
{
|
||||
E_Observer obs;
|
||||
E_Observer obs;
|
||||
|
||||
double delay;
|
||||
E_Delay_Func delay_func;
|
||||
double delay;
|
||||
E_Delay_Func delay_func;
|
||||
|
||||
} E_Delayed_Action;
|
||||
}
|
||||
E_Delayed_Action;
|
||||
|
||||
E_Delayed_Action *e_delayed_action_new(E_Event_Type event,
|
||||
double delay, E_Delay_Func delay_func);
|
||||
|
||||
E_Delayed_Action *e_delayed_action_new(E_Event_Type event,
|
||||
double delay, E_Delay_Func delay_func);
|
||||
|
||||
void e_delayed_action_start(E_Observer *obs, E_Observee *obj, E_Event_Type event);
|
||||
void e_delayed_action_cancel(E_Delayed_Action *eda);
|
||||
void e_delayed_action_start(E_Observer * obs, E_Observee * obj,
|
||||
E_Event_Type event);
|
||||
void e_delayed_action_cancel(E_Delayed_Action * eda);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
170
src/desktops.c
170
src/desktops.c
|
@ -9,11 +9,11 @@
|
|||
#include "object.h"
|
||||
#include "e_view_machine.h"
|
||||
|
||||
static Evas_List desktops = NULL;
|
||||
static Window e_base_win = 0;
|
||||
static int screen_w, screen_h;
|
||||
static Evas_List desktops = NULL;
|
||||
static Window e_base_win = 0;
|
||||
static int screen_w, screen_h;
|
||||
|
||||
static void ecore_idle(void *data);
|
||||
static void ecore_idle(void *data);
|
||||
|
||||
static void
|
||||
ecore_idle(void *data)
|
||||
|
@ -29,8 +29,8 @@ ecore_idle(void *data)
|
|||
void
|
||||
e_desktops_init(void)
|
||||
{
|
||||
E_Desktop *desk;
|
||||
|
||||
E_Desktop *desk;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
ecore_window_get_geometry(0, NULL, NULL, &screen_w, &screen_h);
|
||||
|
@ -39,13 +39,13 @@ e_desktops_init(void)
|
|||
desk = e_desktops_new();
|
||||
e_desktops_show(desk);
|
||||
ecore_event_filter_idle_handler_add(ecore_idle, NULL);
|
||||
|
||||
|
||||
e_icccm_advertise_e_compat();
|
||||
e_icccm_advertise_mwm_compat();
|
||||
e_icccm_advertise_gnome_compat();
|
||||
e_icccm_advertise_kde_compat();
|
||||
e_icccm_advertise_net_compat();
|
||||
|
||||
|
||||
e_icccm_set_desk_area_size(0, 1, 1);
|
||||
e_icccm_set_desk_area(0, 0, 0);
|
||||
e_icccm_set_desk(0, 0);
|
||||
|
@ -54,16 +54,17 @@ e_desktops_init(void)
|
|||
}
|
||||
|
||||
void
|
||||
e_desktops_scroll(E_Desktop *desk, int dx, int dy)
|
||||
e_desktops_scroll(E_Desktop * desk, int dx, int dy)
|
||||
{
|
||||
Evas_List l;
|
||||
int xd, yd, wd, hd;
|
||||
int grav, grav_stick;
|
||||
|
||||
Evas_List l;
|
||||
int xd, yd, wd, hd;
|
||||
int grav, grav_stick;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
/* set grav */
|
||||
if ((dx ==0) && (dy == 0)) D_RETURN;
|
||||
if ((dx == 0) && (dy == 0))
|
||||
D_RETURN;
|
||||
desk->x -= dx;
|
||||
desk->y -= dy;
|
||||
xd = yd = wd = hd = 0;
|
||||
|
@ -107,41 +108,40 @@ e_desktops_scroll(E_Desktop *desk, int dx, int dy)
|
|||
}
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
b = l->data;
|
||||
/* if sticky */
|
||||
if ((b->client.sticky) && (!b->mode.move))
|
||||
ecore_window_gravity_set(b->win.main, StaticGravity);
|
||||
if ((b->client.sticky) && (!b->mode.move))
|
||||
ecore_window_gravity_set(b->win.main, StaticGravity);
|
||||
else
|
||||
ecore_window_gravity_set(b->win.main, grav);
|
||||
ecore_window_gravity_set(b->win.main, grav);
|
||||
}
|
||||
grav_stick = StaticGravity;
|
||||
/* scroll */
|
||||
ecore_window_move_resize(desk->win.container,
|
||||
xd, yd,
|
||||
screen_w + wd, screen_h + hd);
|
||||
ecore_window_move_resize(desk->win.container,
|
||||
xd, yd, screen_w + wd, screen_h + hd);
|
||||
/* reset */
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
b = l->data;
|
||||
/* if sticky */
|
||||
if (b->client.sticky)
|
||||
ecore_window_gravity_set(b->win.main, StaticGravity);
|
||||
ecore_window_gravity_set(b->win.main, StaticGravity);
|
||||
else
|
||||
ecore_window_gravity_set(b->win.main, grav_stick);
|
||||
ecore_window_gravity_set(b->win.main, grav_stick);
|
||||
/* ecore_window_gravity_set(b->win.main, grav_stick);*/
|
||||
}
|
||||
}
|
||||
ecore_window_move_resize(desk->win.container, 0, 0, screen_w, screen_h);
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
b = l->data;
|
||||
ecore_window_gravity_reset(b->win.main);
|
||||
if ((!b->client.sticky) && (!b->mode.move))
|
||||
if ((!b->client.sticky) && (!b->mode.move))
|
||||
{
|
||||
b->current.requested.x += dx;
|
||||
b->current.requested.y += dy;
|
||||
|
@ -159,37 +159,37 @@ e_desktops_scroll(E_Desktop *desk, int dx, int dy)
|
|||
}
|
||||
|
||||
void
|
||||
e_desktops_cleanup(E_Desktop *desk)
|
||||
e_desktops_cleanup(E_Desktop * desk)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
while (desk->windows)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
b = desk->windows->data;
|
||||
e_action_stop_by_object(E_OBJECT(b), NULL, 0, 0, 0, 0);
|
||||
|
||||
if (e_object_get_usecount(E_OBJECT(b)) == 1)
|
||||
e_border_release(b);
|
||||
e_border_release(b);
|
||||
e_object_unref(E_OBJECT(b));
|
||||
}
|
||||
|
||||
ecore_window_destroy(desk->win.main);
|
||||
IF_FREE(desk->name);
|
||||
IF_FREE(desk->dir);
|
||||
|
||||
|
||||
e_object_cleanup(E_OBJECT(desk));
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_desktops_init_file_display(E_Desktop *desk)
|
||||
e_desktops_init_file_display(E_Desktop * desk)
|
||||
{
|
||||
E_View *v;
|
||||
E_Border *b;
|
||||
char buf[PATH_MAX];
|
||||
E_View *v;
|
||||
E_Border *b;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
@ -223,27 +223,30 @@ e_desktops_init_file_display(E_Desktop *desk)
|
|||
b->client.fixed = 1;
|
||||
b->client.is_desktop = 1;
|
||||
|
||||
if (v->options.back_pixmap) e_view_update(v);
|
||||
if (v->options.back_pixmap)
|
||||
e_view_update(v);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
E_Desktop *
|
||||
E_Desktop *
|
||||
e_desktops_new(void)
|
||||
{
|
||||
E_Desktop *desk;
|
||||
|
||||
E_Desktop *desk;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
desk = NEW(E_Desktop, 1);
|
||||
ZERO(desk, E_Desktop, 1);
|
||||
|
||||
|
||||
e_observee_init(E_OBSERVEE(desk), (E_Cleanup_Func) e_desktops_cleanup);
|
||||
|
||||
desk->win.main = ecore_window_override_new(e_base_win, 0, 0, screen_w, screen_h);
|
||||
desk->win.container = ecore_window_override_new(desk->win.main, 0, 0, screen_w, screen_h);
|
||||
|
||||
desk->win.main =
|
||||
ecore_window_override_new(e_base_win, 0, 0, screen_w, screen_h);
|
||||
desk->win.container =
|
||||
ecore_window_override_new(desk->win.main, 0, 0, screen_w, screen_h);
|
||||
ecore_window_lower(desk->win.container);
|
||||
|
||||
|
||||
ecore_window_show(desk->win.container);
|
||||
|
||||
desk->x = 0;
|
||||
|
@ -252,18 +255,19 @@ e_desktops_new(void)
|
|||
desk->real.h = screen_h;
|
||||
desk->virt.w = screen_w;
|
||||
desk->virt.h = screen_h;
|
||||
|
||||
|
||||
desktops = evas_list_append(desktops, desk);
|
||||
|
||||
|
||||
D_RETURN_(desk);
|
||||
}
|
||||
|
||||
void
|
||||
e_desktops_add_border(E_Desktop *d, E_Border *b)
|
||||
e_desktops_add_border(E_Desktop * d, E_Border * b)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if ((!d) || (!b)) D_RETURN;
|
||||
if ((!d) || (!b))
|
||||
D_RETURN;
|
||||
b->desk = d;
|
||||
b->client.desk = d->desk.desk;
|
||||
b->client.area.x = d->desk.area.x;
|
||||
|
@ -274,11 +278,12 @@ e_desktops_add_border(E_Desktop *d, E_Border *b)
|
|||
}
|
||||
|
||||
void
|
||||
e_desktops_del_border(E_Desktop *d, E_Border *b)
|
||||
e_desktops_del_border(E_Desktop * d, E_Border * b)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if ((!d) || (!b)) D_RETURN;
|
||||
if ((!d) || (!b))
|
||||
D_RETURN;
|
||||
d->windows = evas_list_remove(d->windows, b);
|
||||
b->desk = NULL;
|
||||
|
||||
|
@ -286,7 +291,7 @@ e_desktops_del_border(E_Desktop *d, E_Border *b)
|
|||
}
|
||||
|
||||
void
|
||||
e_desktops_delete(E_Desktop *d)
|
||||
e_desktops_delete(E_Desktop * d)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -296,7 +301,7 @@ e_desktops_delete(E_Desktop *d)
|
|||
}
|
||||
|
||||
void
|
||||
e_desktops_show(E_Desktop *d)
|
||||
e_desktops_show(E_Desktop * d)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -306,7 +311,7 @@ e_desktops_show(E_Desktop *d)
|
|||
}
|
||||
|
||||
void
|
||||
e_desktops_hide(E_Desktop *d)
|
||||
e_desktops_hide(E_Desktop * d)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -322,18 +327,18 @@ e_desktops_get_num(void)
|
|||
D_RETURN_(8);
|
||||
}
|
||||
|
||||
E_Desktop *
|
||||
E_Desktop *
|
||||
e_desktops_get(int d)
|
||||
{
|
||||
Evas_List l;
|
||||
int i;
|
||||
|
||||
Evas_List l;
|
||||
int i;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
for (i = 0, l = desktops; l; l = l->next, i++)
|
||||
{
|
||||
if (i == d)
|
||||
D_RETURN_((E_Desktop *)l->data);
|
||||
if (i == d)
|
||||
D_RETURN_((E_Desktop *) l->data);
|
||||
}
|
||||
|
||||
D_RETURN_(NULL);
|
||||
|
@ -342,13 +347,13 @@ e_desktops_get(int d)
|
|||
int
|
||||
e_desktops_get_current(void)
|
||||
{
|
||||
E_Desktop *desk;
|
||||
E_Desktop *desk;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
desk = e_desktops_get(0);
|
||||
if (desk)
|
||||
D_RETURN_(desk->desk.desk);
|
||||
D_RETURN_(desk->desk.desk);
|
||||
|
||||
D_RETURN_(0);
|
||||
}
|
||||
|
@ -359,7 +364,6 @@ e_desktops_goto_desk(int d)
|
|||
D_ENTER;
|
||||
|
||||
e_desktops_goto(d, 0, 0);
|
||||
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
@ -367,29 +371,30 @@ e_desktops_goto_desk(int d)
|
|||
void
|
||||
e_desktops_goto(int d, int ax, int ay)
|
||||
{
|
||||
E_Desktop *desk;
|
||||
|
||||
E_Desktop *desk;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
desk = e_desktops_get(0);
|
||||
if (desk)
|
||||
{
|
||||
int dx, dy;
|
||||
Evas_List l;
|
||||
|
||||
int dx, dy;
|
||||
Evas_List l;
|
||||
|
||||
if ((d == desk->desk.desk) &&
|
||||
(ax == desk->desk.area.x) &&
|
||||
(ay == desk->desk.area.y)) D_RETURN;
|
||||
|
||||
(ax == desk->desk.area.x) && (ay == desk->desk.area.y))
|
||||
D_RETURN;
|
||||
|
||||
dx = ax - desk->desk.area.x;
|
||||
dy = ay - desk->desk.area.y;
|
||||
|
||||
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
E_Border *b;
|
||||
|
||||
b = l->data;
|
||||
if ((!b->client.sticky) && (!b->mode.move) && (!b->client.iconified))
|
||||
if ((!b->client.sticky) && (!b->mode.move)
|
||||
&& (!b->client.iconified))
|
||||
{
|
||||
if (b->client.desk != d)
|
||||
{
|
||||
|
@ -410,18 +415,18 @@ e_desktops_goto(int d, int ax, int ay)
|
|||
}
|
||||
}
|
||||
e_border_update_borders();
|
||||
|
||||
|
||||
/* if no scrolling... */
|
||||
e_desktops_scroll(desk, -(dx * desk->real.w), -(dy * desk->real.h));
|
||||
/* if scrolling.. need to setup a timeout etc. */
|
||||
|
||||
|
||||
desk->desk.desk = d;
|
||||
desk->desk.area.x = ax;
|
||||
desk->desk.area.y = ay;
|
||||
e_icccm_set_desk_area(0, desk->desk.area.x, desk->desk.area.y);
|
||||
e_icccm_set_desk(0, desk->desk.desk);
|
||||
e_observee_notify_observers(E_OBSERVEE(desk), E_EVENT_DESKTOP_SWITCH);
|
||||
}
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
@ -432,4 +437,3 @@ e_desktops_get_desktops_list()
|
|||
D_ENTER;
|
||||
D_RETURN_(desktops);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,32 +8,40 @@
|
|||
|
||||
#ifndef E_DESKTOPS_TYPEDEF
|
||||
#define E_DESKTOPS_TYPEDEF
|
||||
typedef struct _E_Desktop E_Desktop;
|
||||
typedef struct _E_Desktop E_Desktop;
|
||||
#endif
|
||||
|
||||
struct _E_Desktop
|
||||
{
|
||||
E_Observee obs;
|
||||
|
||||
char *name;
|
||||
char *dir;
|
||||
struct {
|
||||
Window main;
|
||||
Window container;
|
||||
} win;
|
||||
int x, y;
|
||||
struct {
|
||||
int w, h;
|
||||
} real, virt;
|
||||
Evas_List windows;
|
||||
struct {
|
||||
int desk;
|
||||
struct {
|
||||
int x, y;
|
||||
} area;
|
||||
} desk;
|
||||
E_View *view;
|
||||
int changed;
|
||||
E_Observee obs;
|
||||
|
||||
char *name;
|
||||
char *dir;
|
||||
struct
|
||||
{
|
||||
Window main;
|
||||
Window container;
|
||||
}
|
||||
win;
|
||||
int x, y;
|
||||
struct
|
||||
{
|
||||
int w, h;
|
||||
}
|
||||
real , virt;
|
||||
Evas_List windows;
|
||||
struct
|
||||
{
|
||||
int desk;
|
||||
struct
|
||||
{
|
||||
int x, y;
|
||||
}
|
||||
area;
|
||||
}
|
||||
desk;
|
||||
E_View *view;
|
||||
int changed;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -44,10 +52,10 @@ struct _E_Desktop
|
|||
* the loading of background graphics information. It also makes
|
||||
* sure E rregisters itself as being compatible to GNOME, KDE etc.
|
||||
*/
|
||||
void e_desktops_init(void);
|
||||
void e_desktops_init(void);
|
||||
|
||||
void e_desktops_scroll(E_Desktop *desk, int dx, int dy);
|
||||
void e_desktops_free(E_Desktop *desk);
|
||||
void e_desktops_scroll(E_Desktop * desk, int dx, int dy);
|
||||
void e_desktops_free(E_Desktop * desk);
|
||||
|
||||
/**
|
||||
* e_desktops_init_file_display - Loads desktop graphics information
|
||||
|
@ -56,19 +64,19 @@ void e_desktops_free(E_Desktop *desk);
|
|||
* This function loads the desktop's graphics from the user's desktop
|
||||
* file definition, which lives in ~/.e/desktop/default/.e_background.bg.db.
|
||||
*/
|
||||
void e_desktops_init_file_display(E_Desktop *desk);
|
||||
void e_desktops_init_file_display(E_Desktop * desk);
|
||||
|
||||
E_Desktop *e_desktops_new(void);
|
||||
void e_desktops_add_border(E_Desktop *d, E_Border *b);
|
||||
void e_desktops_del_border(E_Desktop *d, E_Border *b);
|
||||
void e_desktops_delete(E_Desktop *d);
|
||||
void e_desktops_show(E_Desktop *d);
|
||||
void e_desktops_hide(E_Desktop *d);
|
||||
E_Desktop *e_desktops_new(void);
|
||||
void e_desktops_add_border(E_Desktop * d, E_Border * b);
|
||||
void e_desktops_del_border(E_Desktop * d, E_Border * b);
|
||||
void e_desktops_delete(E_Desktop * d);
|
||||
void e_desktops_show(E_Desktop * d);
|
||||
void e_desktops_hide(E_Desktop * d);
|
||||
|
||||
/**
|
||||
* e_desktops_get_num - Returns number of desktops.
|
||||
*/
|
||||
int e_desktops_get_num(void);
|
||||
int e_desktops_get_num(void);
|
||||
|
||||
/**
|
||||
* e_desktops_get - Returns nth desktop
|
||||
|
@ -78,11 +86,11 @@ int e_desktops_get_num(void);
|
|||
* returns the nth of those desktops, NULL if no desktop
|
||||
* was found at that index.
|
||||
*/
|
||||
E_Desktop *e_desktops_get(int d);
|
||||
E_Desktop *e_desktops_get(int d);
|
||||
|
||||
int e_desktops_get_current(void);
|
||||
void e_desktops_goto_desk(int d);
|
||||
void e_desktops_goto(int d, int ax, int ay);
|
||||
Evas_List e_desktops_get_desktops_list();
|
||||
int e_desktops_get_current(void);
|
||||
void e_desktops_goto_desk(int d);
|
||||
void e_desktops_goto(int d, int ax, int ay);
|
||||
Evas_List e_desktops_get_desktops_list();
|
||||
|
||||
#endif
|
||||
|
|
12
src/e.h
12
src/e.h
|
@ -44,14 +44,16 @@ backtrace_symbols_fd(__BT_array, __BT_n, fileno(stdout)); \
|
|||
/* macros for allowing sections of code to be runtime profiled */
|
||||
#define E_PROF 1
|
||||
#ifdef E_PROF
|
||||
extern Evas_List __e_profiles;
|
||||
extern Evas_List __e_profiles;
|
||||
|
||||
typedef struct _e_prof
|
||||
{
|
||||
char *func;
|
||||
double total;
|
||||
double t1, t2;
|
||||
} E_Prof;
|
||||
char *func;
|
||||
double total;
|
||||
double t1, t2;
|
||||
}
|
||||
E_Prof;
|
||||
|
||||
#define E_PROF_START(_prof_func) \
|
||||
{ \
|
||||
E_Prof __p, *__pp; \
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include "debug.h"
|
||||
|
||||
#if 0
|
||||
#ifdef D /* until ferite doesn't pullte the D(ebug) macro */
|
||||
#ifdef D /* until ferite doesn't pullte the D(ebug) macro */
|
||||
# undef D
|
||||
# define D(x,...)
|
||||
# define D_ENTER
|
||||
|
@ -13,59 +13,64 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
void e_ferite_init(void)
|
||||
void
|
||||
e_ferite_init(void)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
D( "Initialising ferite....\n" );
|
||||
ferite_init( 0, NULL );
|
||||
D("Initialising ferite....\n");
|
||||
ferite_init(0, NULL);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void e_ferite_deinit(void)
|
||||
void
|
||||
e_ferite_deinit(void)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
D( "Deinitialising ferite....\n" );
|
||||
D("Deinitialising ferite....\n");
|
||||
ferite_deinit();
|
||||
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
int e_ferite_script_error( FeriteScript *script, char *errmsg, int val )
|
||||
int
|
||||
e_ferite_script_error(FeriteScript * script, char *errmsg, int val)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
fprintf( stderr, "e17: ferite error: %s\n", errmsg );
|
||||
fprintf(stderr, "e17: ferite error: %s\n", errmsg);
|
||||
|
||||
D_RETURN_(1);
|
||||
}
|
||||
|
||||
int e_ferite_script_warning( FeriteScript *script, char *warnmsg )
|
||||
int
|
||||
e_ferite_script_warning(FeriteScript * script, char *warnmsg)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
fprintf( stderr, "e17: ferite warning: %s\n", warnmsg );
|
||||
fprintf(stderr, "e17: ferite warning: %s\n", warnmsg);
|
||||
|
||||
D_RETURN_(1);
|
||||
}
|
||||
|
||||
void e_ferite_run( char *txt )
|
||||
void
|
||||
e_ferite_run(char *txt)
|
||||
{
|
||||
FeriteScript *script = NULL;
|
||||
|
||||
FeriteScript *script = NULL;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
D("Ferite: Compiling script `%s'\n", txt);
|
||||
script = __ferite_compile_string( txt );
|
||||
e_ferite_register( script, script->mainns );
|
||||
script = __ferite_compile_string(txt);
|
||||
e_ferite_register(script, script->mainns);
|
||||
script->error_cb = e_ferite_script_error;
|
||||
script->warning_cb = e_ferite_script_warning;
|
||||
D("Ferite: executing script.\n");
|
||||
ferite_script_execute( script );
|
||||
ferite_script_execute(script);
|
||||
D("Ferite: Cleaning up.\n");
|
||||
ferite_script_delete( script );
|
||||
ferite_script_delete(script);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
|
|
@ -17,11 +17,14 @@
|
|||
|
||||
#endif
|
||||
|
||||
void e_ferite_init(void);
|
||||
void e_ferite_deinit(void);
|
||||
void e_ferite_run( char *script );
|
||||
void e_ferite_register( FeriteScript *script, FeriteNamespace *ns );
|
||||
int e_ferite_script_error( FeriteScript *script, char *errmsg, int val );
|
||||
int e_ferite_script_warning( FeriteScript *script, char *warnmsg );
|
||||
void e_ferite_init(void);
|
||||
void e_ferite_deinit(void);
|
||||
void e_ferite_run(char *script);
|
||||
void e_ferite_register(FeriteScript * script,
|
||||
FeriteNamespace * ns);
|
||||
int e_ferite_script_error(FeriteScript * script, char *errmsg,
|
||||
int val);
|
||||
int e_ferite_script_warning(FeriteScript * script,
|
||||
char *warnmsg);
|
||||
|
||||
#endif /* E_FERITE_H */
|
||||
|
|
106
src/e_file.c
106
src/e_file.c
|
@ -3,16 +3,15 @@
|
|||
#include "file.h"
|
||||
#include "util.h"
|
||||
|
||||
static void e_file_cleanup (E_File *f);
|
||||
static void e_file_cleanup(E_File * f);
|
||||
|
||||
static void
|
||||
e_file_cleanup(E_File *f)
|
||||
e_file_cleanup(E_File * f)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
IF_FREE(f->info.icon);
|
||||
IF_FREE(f->info.link)
|
||||
IF_FREE(f->info.custom_icon);
|
||||
IF_FREE(f->info.link) IF_FREE(f->info.custom_icon);
|
||||
IF_FREE(f->info.mime.base);
|
||||
IF_FREE(f->info.mime.type);
|
||||
IF_FREE(f->file);
|
||||
|
@ -21,19 +20,19 @@ e_file_cleanup(E_File *f)
|
|||
D_RETURN;
|
||||
}
|
||||
|
||||
E_File *
|
||||
E_File *
|
||||
e_file_new(char *file)
|
||||
{
|
||||
E_File *f;
|
||||
E_File *f;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!file || *file == 0)
|
||||
D_RETURN_(NULL);
|
||||
D_RETURN_(NULL);
|
||||
|
||||
f = NEW(E_File, 1);
|
||||
|
||||
e_object_init(E_OBJECT(f),
|
||||
(E_Cleanup_Func) e_file_cleanup);
|
||||
|
||||
e_object_init(E_OBJECT(f), (E_Cleanup_Func) e_file_cleanup);
|
||||
|
||||
f->info.icon = NULL;
|
||||
f->info.link = NULL;
|
||||
|
@ -41,60 +40,58 @@ e_file_new(char *file)
|
|||
f->info.mime.base = NULL;
|
||||
f->info.mime.type = NULL;
|
||||
f->file = strdup(file);
|
||||
|
||||
D_RETURN_(f);
|
||||
|
||||
D_RETURN_(f);
|
||||
}
|
||||
|
||||
E_File *
|
||||
E_File *
|
||||
e_file_get_by_name(Evas_List l, char *file)
|
||||
{
|
||||
Evas_List ll;
|
||||
E_File *f;
|
||||
Evas_List ll;
|
||||
E_File *f;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!l || !file || *file == 0)
|
||||
D_RETURN_(NULL);
|
||||
D_RETURN_(NULL);
|
||||
|
||||
for (ll=l; ll; ll=ll->next)
|
||||
{
|
||||
f = (E_File*) ll->data;
|
||||
for (ll = l; ll; ll = ll->next)
|
||||
{
|
||||
f = (E_File *) ll->data;
|
||||
|
||||
if (!strcmp(file, f->file))
|
||||
{
|
||||
D_RETURN_(f);
|
||||
}
|
||||
}
|
||||
if (!strcmp(file, f->file))
|
||||
{
|
||||
D_RETURN_(f);
|
||||
}
|
||||
}
|
||||
|
||||
D_RETURN_(NULL);
|
||||
}
|
||||
|
||||
void
|
||||
e_file_set_mime(E_File *f, char *base, char *mime)
|
||||
e_file_set_mime(E_File * f, char *base, char *mime)
|
||||
{
|
||||
char icon[PATH_MAX];
|
||||
char type[PATH_MAX];
|
||||
char *p;
|
||||
char icon[PATH_MAX];
|
||||
char type[PATH_MAX];
|
||||
char *p;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!f || !base || !mime)
|
||||
D_RETURN;
|
||||
D_RETURN;
|
||||
|
||||
D("Setting mime: %40s: %s/%s\n", f->file, base, mime);
|
||||
|
||||
|
||||
if ( ((f->info.mime.base) && !(strcmp(f->info.mime.base, base)))
|
||||
&&((f->info.mime.type) && !(strcmp(f->info.mime.type, mime))))
|
||||
D_RETURN;
|
||||
if (((f->info.mime.base) && !(strcmp(f->info.mime.base, base)))
|
||||
&& ((f->info.mime.type) && !(strcmp(f->info.mime.type, mime))))
|
||||
D_RETURN;
|
||||
|
||||
IF_FREE(f->info.mime.base);
|
||||
IF_FREE(f->info.mime.type);
|
||||
|
||||
|
||||
f->info.mime.base = strdup(base);
|
||||
f->info.mime.type = strdup(mime);
|
||||
|
||||
|
||||
|
||||
/* effect changes here */
|
||||
/*
|
||||
* if (f->info.custom_icon)
|
||||
|
@ -107,40 +104,41 @@ e_file_set_mime(E_File *f, char *base, char *mime)
|
|||
* D_RETURN;
|
||||
* }
|
||||
*/
|
||||
|
||||
|
||||
/* find an icon */
|
||||
strcpy(type, f->info.mime.type);
|
||||
p=type;
|
||||
do
|
||||
{
|
||||
snprintf(icon, PATH_MAX, "%s/data/icons/%s/%s.db",
|
||||
PACKAGE_DATA_DIR, f->info.mime.base, type);
|
||||
p = strrchr(type, '/');
|
||||
if (p) *p = 0;
|
||||
}
|
||||
p = type;
|
||||
do
|
||||
{
|
||||
snprintf(icon, PATH_MAX, "%s/data/icons/%s/%s.db",
|
||||
PACKAGE_DATA_DIR, f->info.mime.base, type);
|
||||
p = strrchr(type, '/');
|
||||
if (p)
|
||||
*p = 0;
|
||||
}
|
||||
while (p && !e_file_exists(icon));
|
||||
|
||||
/* fallback to base type icon */
|
||||
if (!e_file_exists(icon))
|
||||
snprintf(icon, PATH_MAX, "%s/data/icons/%s/default.db",
|
||||
PACKAGE_DATA_DIR, f->info.mime.base);
|
||||
/* still no luck fall back to default */
|
||||
|
||||
/* fallback to base type icon */
|
||||
if (!e_file_exists(icon))
|
||||
snprintf(icon, PATH_MAX, "%s/data/icons/%s/default.db",
|
||||
PACKAGE_DATA_DIR, f->info.mime.base);
|
||||
/* still no luck fall back to default */
|
||||
if (!e_file_exists(icon))
|
||||
snprintf(icon, PATH_MAX, "%s/data/icons/unknown/default.db",
|
||||
PACKAGE_DATA_DIR);
|
||||
|
||||
f->info.icon = strdup(icon);
|
||||
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_file_set_link(E_File *f, char *link)
|
||||
e_file_set_link(E_File * f, char *link)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (!f)
|
||||
D_RETURN;
|
||||
D_RETURN;
|
||||
|
||||
if ((!link) && (f->info.link))
|
||||
{
|
||||
|
|
42
src/e_file.h
42
src/e_file.h
|
@ -3,28 +3,32 @@
|
|||
#include "object.h"
|
||||
#include <sys/stat.h>
|
||||
|
||||
typedef struct _E_File E_File;
|
||||
typedef struct _E_File E_File;
|
||||
struct _E_File
|
||||
{
|
||||
E_Object o;
|
||||
|
||||
char *file;
|
||||
struct stat stat;
|
||||
|
||||
struct {
|
||||
char *icon;
|
||||
char *custom_icon;
|
||||
char *link;
|
||||
struct {
|
||||
char *base;
|
||||
char *type;
|
||||
} mime;
|
||||
} info;
|
||||
E_Object o;
|
||||
|
||||
char *file;
|
||||
struct stat stat;
|
||||
|
||||
struct
|
||||
{
|
||||
char *icon;
|
||||
char *custom_icon;
|
||||
char *link;
|
||||
struct
|
||||
{
|
||||
char *base;
|
||||
char *type;
|
||||
}
|
||||
mime;
|
||||
}
|
||||
info;
|
||||
};
|
||||
|
||||
E_File *e_file_new(char *file);
|
||||
E_File *e_file_get_by_name(Evas_List l, char *file);
|
||||
void e_file_set_mime(E_File *f, char *base, char *mime);
|
||||
void e_file_set_link(E_File *f, char *link);
|
||||
E_File *e_file_new(char *file);
|
||||
E_File *e_file_get_by_name(Evas_List l, char *file);
|
||||
void e_file_set_mime(E_File * f, char *base, char *mime);
|
||||
void e_file_set_link(E_File * f, char *link);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -9,21 +9,21 @@ void
|
|||
e_view_machine_init()
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
||||
if (VM == NULL)
|
||||
{
|
||||
VM = NEW(E_View_Model, 1);
|
||||
VM->views = NULL;
|
||||
VM->models = NULL;
|
||||
e_view_init();
|
||||
e_view_model_init();
|
||||
VM = NEW(E_View_Model, 1);
|
||||
VM->views = NULL;
|
||||
VM->models = NULL;
|
||||
e_view_init();
|
||||
e_view_model_init();
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_view_machine_register_view_model (E_View_Model *m)
|
||||
e_view_machine_register_view_model(E_View_Model * m)
|
||||
{
|
||||
D_ENTER;
|
||||
VM->models = evas_list_append(VM->models, m);
|
||||
|
@ -31,7 +31,7 @@ e_view_machine_register_view_model (E_View_Model *m)
|
|||
}
|
||||
|
||||
void
|
||||
e_view_machine_unregister_view_model(E_View_Model *m)
|
||||
e_view_machine_unregister_view_model(E_View_Model * m)
|
||||
{
|
||||
D_ENTER;
|
||||
VM->models = evas_list_remove(VM->models, m);
|
||||
|
@ -39,7 +39,7 @@ e_view_machine_unregister_view_model(E_View_Model *m)
|
|||
}
|
||||
|
||||
void
|
||||
e_view_machine_register_view(E_View *v)
|
||||
e_view_machine_register_view(E_View * v)
|
||||
{
|
||||
D_ENTER;
|
||||
VM->views = evas_list_append(VM->views, v);
|
||||
|
@ -47,7 +47,7 @@ e_view_machine_register_view(E_View *v)
|
|||
}
|
||||
|
||||
void
|
||||
e_view_machine_unregister_view(E_View *v)
|
||||
e_view_machine_unregister_view(E_View * v)
|
||||
{
|
||||
D_ENTER;
|
||||
VM->views = evas_list_remove(VM->views, v);
|
||||
|
@ -57,72 +57,77 @@ e_view_machine_unregister_view(E_View *v)
|
|||
void
|
||||
e_view_machine_close_all_views(void)
|
||||
{
|
||||
Evas_List l;
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
/* Copy the list of views and unregister them */
|
||||
for (l=VM->views;l;l=l->next)
|
||||
{
|
||||
E_View *v = l->data;
|
||||
e_object_unref (E_OBJECT(v->model));
|
||||
}
|
||||
for (l = VM->views; l; l = l->next)
|
||||
{
|
||||
E_View *v = l->data;
|
||||
|
||||
e_object_unref(E_OBJECT(v->model));
|
||||
}
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
E_View_Model *
|
||||
E_View_Model *
|
||||
e_view_machine_model_lookup(char *path)
|
||||
{
|
||||
E_View_Model *m;
|
||||
Evas_List l;
|
||||
char *realpath = NULL;
|
||||
E_View_Model *m;
|
||||
Evas_List l;
|
||||
char *realpath = NULL;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!path)
|
||||
D_RETURN_(NULL);
|
||||
|
||||
D_RETURN_(NULL);
|
||||
|
||||
realpath = e_file_realpath(path);
|
||||
|
||||
for (l=VM->models; l; l = l->next)
|
||||
for (l = VM->models; l; l = l->next)
|
||||
{
|
||||
m = l->data;
|
||||
if (!strcmp(m->dir, realpath))
|
||||
{
|
||||
D("Model for this dir already exists\n");
|
||||
m = l->data;
|
||||
if (!strcmp(m->dir, realpath))
|
||||
{
|
||||
D("Model for this dir already exists\n");
|
||||
|
||||
IF_FREE(realpath);
|
||||
D_RETURN_(m);
|
||||
}
|
||||
IF_FREE(realpath);
|
||||
D_RETURN_(m);
|
||||
}
|
||||
}
|
||||
|
||||
IF_FREE(realpath);
|
||||
D_RETURN_(NULL);
|
||||
}
|
||||
|
||||
E_View *
|
||||
E_View *
|
||||
e_view_machine_get_view_by_main_window(Window win)
|
||||
{
|
||||
Evas_List l;
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
for (l = VM->views; l; l = l->next)
|
||||
{
|
||||
E_View *v = l->data;
|
||||
E_View *v = l->data;
|
||||
|
||||
if (v && win == v->win.main)
|
||||
D_RETURN_(v);
|
||||
}
|
||||
}
|
||||
D_RETURN_(NULL);
|
||||
}
|
||||
|
||||
E_View *
|
||||
E_View *
|
||||
e_view_machine_get_view_by_base_window(Window win)
|
||||
{
|
||||
Evas_List l;
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
for (l = VM->views; l; l = l->next)
|
||||
{
|
||||
E_View *v = l->data;
|
||||
E_View *v = l->data;
|
||||
|
||||
if (v && win == v->win.base)
|
||||
D_RETURN_(v);
|
||||
}
|
||||
}
|
||||
D_RETURN_(NULL);
|
||||
}
|
||||
|
||||
|
|
|
@ -4,20 +4,20 @@
|
|||
#include "view.h"
|
||||
struct _e_view_machine
|
||||
{
|
||||
Evas_List views;
|
||||
Evas_List models;
|
||||
Evas_List views;
|
||||
Evas_List models;
|
||||
};
|
||||
typedef struct _e_view_machine E_View_Machine;
|
||||
|
||||
void e_view_machine_init(void);
|
||||
void e_view_machine_register_view(E_View *v);
|
||||
void e_view_machine_unregister_view(E_View *v);
|
||||
void e_view_machine_register_view_model(E_View_Model *m);
|
||||
void e_view_machine_unregister_view_model(E_View_Model *m);
|
||||
void e_view_machine_init(void);
|
||||
void e_view_machine_register_view(E_View * v);
|
||||
void e_view_machine_unregister_view(E_View * v);
|
||||
void e_view_machine_register_view_model(E_View_Model * m);
|
||||
void e_view_machine_unregister_view_model(E_View_Model * m);
|
||||
|
||||
void e_view_machine_close_all_views(void);
|
||||
E_View_Model *e_view_machine_model_lookup(char *path);
|
||||
E_View *e_view_machine_get_view_by_main_window(Window win);
|
||||
E_View *e_view_machine_get_view_by_base_window(Window win);
|
||||
void e_view_machine_close_all_views(void);
|
||||
E_View_Model *e_view_machine_model_lookup(char *path);
|
||||
E_View *e_view_machine_get_view_by_main_window(Window win);
|
||||
E_View *e_view_machine_get_view_by_base_window(Window win);
|
||||
|
||||
#endif
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -7,12 +7,12 @@
|
|||
|
||||
#ifndef E_VIEW_TYPEDEF
|
||||
#define E_VIEW_TYPEDEF
|
||||
typedef struct _E_View E_View;
|
||||
typedef struct _E_View E_View;
|
||||
#endif
|
||||
|
||||
#ifndef E_ICON_TYPEDEF
|
||||
#define E_ICON_TYPEDEF
|
||||
typedef struct _E_Icon E_Icon;
|
||||
typedef struct _E_Icon E_Icon;
|
||||
#endif
|
||||
|
||||
#ifndef E_VIEW_MODEL_TYPEDEF
|
||||
|
@ -22,25 +22,25 @@ typedef struct _E_View_Model E_View_Model;
|
|||
|
||||
struct _E_View_Model
|
||||
{
|
||||
E_Object o;
|
||||
E_Object o;
|
||||
|
||||
/* The realpath of the view's directory */
|
||||
char *dir;
|
||||
char *dir;
|
||||
|
||||
Evas_List files;
|
||||
Evas_List files;
|
||||
|
||||
Evas_Object obj_bg;
|
||||
|
||||
char *bg_file;
|
||||
|
||||
E_FS_Restarter *restarter;
|
||||
|
||||
int monitor_id;
|
||||
Evas_Object obj_bg;
|
||||
|
||||
char *bg_file;
|
||||
|
||||
E_FS_Restarter *restarter;
|
||||
|
||||
int monitor_id;
|
||||
|
||||
/* A list of all the views for which a model is sharing data */
|
||||
Evas_List views;
|
||||
Evas_List views;
|
||||
|
||||
int is_desktop;
|
||||
int is_desktop;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -50,18 +50,18 @@ struct _E_View_Model
|
|||
*
|
||||
* Set the directory for a view_model and starts monitoring it via efsd.
|
||||
*/
|
||||
void e_view_model_set_dir(E_View_Model *m, char *dir);
|
||||
void e_view_model_set_dir(E_View_Model * m, char *dir);
|
||||
|
||||
E_View_Model * e_view_model_new(void);
|
||||
void e_view_model_init(void);
|
||||
void e_view_model_register_view(E_View_Model *m,E_View *v);
|
||||
void e_view_model_unregister_view(E_View *v);
|
||||
E_View_Model *e_view_model_new(void);
|
||||
void e_view_model_init(void);
|
||||
void e_view_model_register_view(E_View_Model * m, E_View * v);
|
||||
void e_view_model_unregister_view(E_View * v);
|
||||
|
||||
E_View_Model * e_view_model_find_by_monitor_id(int id);
|
||||
E_View_Model *e_view_model_find_by_monitor_id(int id);
|
||||
|
||||
/* Deal with incoming file events */
|
||||
void e_view_model_file_added(int id, char *file);
|
||||
void e_view_model_file_deleted(int id, char *file);
|
||||
void e_view_model_file_changed(int id, char *file);
|
||||
void e_view_model_file_moved(int id, char *file);
|
||||
void e_view_model_file_added(int id, char *file);
|
||||
void e_view_model_file_deleted(int id, char *file);
|
||||
void e_view_model_file_changed(int id, char *file);
|
||||
void e_view_model_file_moved(int id, char *file);
|
||||
#endif
|
||||
|
|
196
src/embed.c
196
src/embed.c
|
@ -6,23 +6,24 @@ typedef struct _Embed Embed_Private;
|
|||
|
||||
struct _Embed
|
||||
{
|
||||
Ebits_Object o;
|
||||
Evas evas;
|
||||
Evas_Object image_obj;
|
||||
Evas_Object clip_obj;
|
||||
int clip_x, clip_y;
|
||||
E_Text *text_obj;
|
||||
Ebits_Object o;
|
||||
Evas evas;
|
||||
Evas_Object image_obj;
|
||||
Evas_Object clip_obj;
|
||||
int clip_x, clip_y;
|
||||
E_Text *text_obj;
|
||||
};
|
||||
|
||||
static void
|
||||
e_embed_text_func_show(void *_data)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
if (em->clip_obj) evas_show(em->evas, em->clip_obj);
|
||||
if (em->clip_obj)
|
||||
evas_show(em->evas, em->clip_obj);
|
||||
e_text_show(em->text_obj);
|
||||
|
||||
D_RETURN;
|
||||
|
@ -31,12 +32,13 @@ e_embed_text_func_show(void *_data)
|
|||
static void
|
||||
e_embed_text_func_hide(void *_data)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
if (em->clip_obj) evas_hide(em->evas, em->clip_obj);
|
||||
if (em->clip_obj)
|
||||
evas_hide(em->evas, em->clip_obj);
|
||||
e_text_hide(em->text_obj);
|
||||
|
||||
D_RETURN;
|
||||
|
@ -45,12 +47,13 @@ e_embed_text_func_hide(void *_data)
|
|||
static void
|
||||
e_embed_text_func_move(void *_data, double x, double y)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
if (em->clip_obj) evas_move(em->evas, em->clip_obj, x, y);
|
||||
if (em->clip_obj)
|
||||
evas_move(em->evas, em->clip_obj, x, y);
|
||||
e_text_move(em->text_obj, x, y);
|
||||
|
||||
D_RETURN;
|
||||
|
@ -59,12 +62,13 @@ e_embed_text_func_move(void *_data, double x, double y)
|
|||
static void
|
||||
e_embed_text_func_resize(void *_data, double w, double h)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
if (em->clip_obj) evas_resize(em->evas, em->clip_obj, w, h);
|
||||
if (em->clip_obj)
|
||||
evas_resize(em->evas, em->clip_obj, w, h);
|
||||
e_text_resize(em->text_obj, w, h);
|
||||
|
||||
D_RETURN;
|
||||
|
@ -73,12 +77,13 @@ e_embed_text_func_resize(void *_data, double w, double h)
|
|||
static void
|
||||
e_embed_text_func_raise(void *_data)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
if (em->clip_obj) evas_raise(em->evas, em->clip_obj);
|
||||
if (em->clip_obj)
|
||||
evas_raise(em->evas, em->clip_obj);
|
||||
e_text_raise(em->text_obj);
|
||||
|
||||
D_RETURN;
|
||||
|
@ -87,12 +92,13 @@ e_embed_text_func_raise(void *_data)
|
|||
static void
|
||||
e_embed_text_func_lower(void *_data)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
if (em->clip_obj) evas_lower(em->evas, em->clip_obj);
|
||||
if (em->clip_obj)
|
||||
evas_lower(em->evas, em->clip_obj);
|
||||
e_text_lower(em->text_obj);
|
||||
|
||||
D_RETURN;
|
||||
|
@ -101,12 +107,13 @@ e_embed_text_func_lower(void *_data)
|
|||
static void
|
||||
e_embed_text_func_set_layer(void *_data, int l)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
if (em->clip_obj) evas_set_layer(em->evas, em->clip_obj, l);
|
||||
if (em->clip_obj)
|
||||
evas_set_layer(em->evas, em->clip_obj, l);
|
||||
e_text_set_layer(em->text_obj, l);
|
||||
|
||||
D_RETURN;
|
||||
|
@ -115,31 +122,32 @@ e_embed_text_func_set_layer(void *_data, int l)
|
|||
static void
|
||||
e_embed_text_func_set_clip(void *_data, Evas_Object clip)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
if (em->clip_obj)
|
||||
{
|
||||
if (clip)
|
||||
e_text_set_clip(em->clip_obj, clip);
|
||||
e_text_set_clip(em->clip_obj, clip);
|
||||
else
|
||||
e_text_unset_clip(em->clip_obj);
|
||||
e_text_unset_clip(em->clip_obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (clip)
|
||||
e_text_set_clip(em->text_obj, clip);
|
||||
e_text_set_clip(em->text_obj, clip);
|
||||
else
|
||||
e_text_unset_clip(em->text_obj);
|
||||
e_text_unset_clip(em->text_obj);
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
static void
|
||||
e_embed_text_func_set_color_class(void *_data, char *cc, int r, int g, int b, int a)
|
||||
e_embed_text_func_set_color_class(void *_data, char *cc, int r, int g, int b,
|
||||
int a)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -156,14 +164,16 @@ e_embed_text_func_set_color_class(void *_data, char *cc, int r, int g, int b, in
|
|||
static void
|
||||
e_embed_text_func_get_min_size(void *_data, double *w, double *h)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
e_text_get_min_size(em->text_obj, w, h);
|
||||
if (em->clip_x) *w = 0;
|
||||
if (em->clip_y) *h = 0;
|
||||
if (em->clip_x)
|
||||
*w = 0;
|
||||
if (em->clip_y)
|
||||
*h = 0;
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
@ -171,14 +181,16 @@ e_embed_text_func_get_min_size(void *_data, double *w, double *h)
|
|||
static void
|
||||
e_embed_text_func_get_max_size(void *_data, double *w, double *h)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
e_text_get_max_size(em->text_obj, w, h);
|
||||
if (em->clip_x) *w = 999999999;
|
||||
if (em->clip_y) *h = 999999999;
|
||||
if (em->clip_x)
|
||||
*w = 999999999;
|
||||
if (em->clip_y)
|
||||
*h = 999999999;
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
@ -186,10 +198,11 @@ e_embed_text_func_get_max_size(void *_data, double *w, double *h)
|
|||
/***/
|
||||
|
||||
Embed
|
||||
e_embed_text(Ebits_Object o, char *bit_name, Evas evas, E_Text *text_obj, int clip_x, int clip_y)
|
||||
e_embed_text(Ebits_Object o, char *bit_name, Evas evas, E_Text * text_obj,
|
||||
int clip_x, int clip_y)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = NEW(Embed_Private, 1);
|
||||
|
@ -206,7 +219,7 @@ e_embed_text(Ebits_Object o, char *bit_name, Evas evas, E_Text *text_obj, int cl
|
|||
e_text_set_clip(em->text_obj, em->clip_obj);
|
||||
evas_show(em->evas, em->clip_obj);
|
||||
}
|
||||
ebits_set_named_bit_replace(o, bit_name,
|
||||
ebits_set_named_bit_replace(o, bit_name,
|
||||
e_embed_text_func_show,
|
||||
e_embed_text_func_hide,
|
||||
e_embed_text_func_move,
|
||||
|
@ -217,8 +230,7 @@ e_embed_text(Ebits_Object o, char *bit_name, Evas evas, E_Text *text_obj, int cl
|
|||
e_embed_text_func_set_clip,
|
||||
e_embed_text_func_set_color_class,
|
||||
e_embed_text_func_get_min_size,
|
||||
e_embed_text_func_get_max_size,
|
||||
em);
|
||||
e_embed_text_func_get_max_size, em);
|
||||
D_RETURN_(em);
|
||||
}
|
||||
|
||||
|
@ -227,8 +239,8 @@ e_embed_text(Ebits_Object o, char *bit_name, Evas evas, E_Text *text_obj, int cl
|
|||
static void
|
||||
e_embed_image_func_show(void *_data)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
|
@ -240,8 +252,8 @@ e_embed_image_func_show(void *_data)
|
|||
static void
|
||||
e_embed_image_func_hide(void *_data)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
|
@ -253,8 +265,8 @@ e_embed_image_func_hide(void *_data)
|
|||
static void
|
||||
e_embed_image_func_move(void *_data, double x, double y)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
|
@ -266,8 +278,8 @@ e_embed_image_func_move(void *_data, double x, double y)
|
|||
static void
|
||||
e_embed_image_func_resize(void *_data, double w, double h)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
|
@ -280,8 +292,8 @@ e_embed_image_func_resize(void *_data, double w, double h)
|
|||
static void
|
||||
e_embed_image_func_raise(void *_data)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
|
@ -293,8 +305,8 @@ e_embed_image_func_raise(void *_data)
|
|||
static void
|
||||
e_embed_image_func_lower(void *_data)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
|
@ -306,8 +318,8 @@ e_embed_image_func_lower(void *_data)
|
|||
static void
|
||||
e_embed_image_func_set_layer(void *_data, int l)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
|
@ -319,29 +331,30 @@ e_embed_image_func_set_layer(void *_data, int l)
|
|||
static void
|
||||
e_embed_image_func_set_clip(void *_data, Evas_Object clip)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
if (clip)
|
||||
evas_set_clip(em->evas, em->image_obj, clip);
|
||||
evas_set_clip(em->evas, em->image_obj, clip);
|
||||
else
|
||||
evas_unset_clip(em->evas, em->image_obj);
|
||||
evas_unset_clip(em->evas, em->image_obj);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
static void
|
||||
e_embed_image_func_set_color_class(void *_data, char *cc, int r, int g, int b, int a)
|
||||
e_embed_image_func_set_color_class(void *_data, char *cc, int r, int g, int b,
|
||||
int a)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
if ((cc) && (!strcmp(cc, "icon")))
|
||||
evas_set_color(em->evas, em->image_obj, r, g, b, a);
|
||||
evas_set_color(em->evas, em->image_obj, r, g, b, a);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
@ -349,17 +362,19 @@ e_embed_image_func_set_color_class(void *_data, char *cc, int r, int g, int b, i
|
|||
static void
|
||||
e_embed_image_func_get_min_size(void *_data, double *w, double *h)
|
||||
{
|
||||
Embed_Private *em;
|
||||
int iw, ih;
|
||||
|
||||
Embed_Private *em;
|
||||
int iw, ih;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
iw = 0;
|
||||
ih = 0;
|
||||
evas_get_image_size(em->evas, em->image_obj, &iw, &ih);
|
||||
if (w) *w = iw;
|
||||
if (h) *h = ih;
|
||||
if (w)
|
||||
*w = iw;
|
||||
if (h)
|
||||
*h = ih;
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
@ -367,15 +382,17 @@ e_embed_image_func_get_min_size(void *_data, double *w, double *h)
|
|||
static void
|
||||
e_embed_image_func_get_max_size(void *_data, double *w, double *h)
|
||||
{
|
||||
Embed_Private *em;
|
||||
int iw, ih;
|
||||
|
||||
Embed_Private *em;
|
||||
int iw, ih;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = _data;
|
||||
evas_get_image_size(em->evas, em->image_obj, &iw, &ih);
|
||||
if (w) *w = iw;
|
||||
if (h) *h = ih;
|
||||
if (w)
|
||||
*w = iw;
|
||||
if (h)
|
||||
*h = ih;
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
@ -383,10 +400,11 @@ e_embed_image_func_get_max_size(void *_data, double *w, double *h)
|
|||
/***/
|
||||
|
||||
Embed
|
||||
e_embed_image_object(Ebits_Object o, char *bit_name, Evas evas, Evas_Object image_obj)
|
||||
e_embed_image_object(Ebits_Object o, char *bit_name, Evas evas,
|
||||
Evas_Object image_obj)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = NEW(Embed_Private, 1);
|
||||
|
@ -394,7 +412,7 @@ e_embed_image_object(Ebits_Object o, char *bit_name, Evas evas, Evas_Object imag
|
|||
em->o = o;
|
||||
em->evas = evas;
|
||||
em->image_obj = image_obj;
|
||||
ebits_set_named_bit_replace(o, bit_name,
|
||||
ebits_set_named_bit_replace(o, bit_name,
|
||||
e_embed_image_func_show,
|
||||
e_embed_image_func_hide,
|
||||
e_embed_image_func_move,
|
||||
|
@ -405,8 +423,7 @@ e_embed_image_object(Ebits_Object o, char *bit_name, Evas evas, Evas_Object imag
|
|||
e_embed_image_func_set_clip,
|
||||
e_embed_image_func_set_color_class,
|
||||
e_embed_image_func_get_min_size,
|
||||
e_embed_image_func_get_max_size,
|
||||
em);
|
||||
e_embed_image_func_get_max_size, em);
|
||||
D_RETURN_(em);
|
||||
}
|
||||
|
||||
|
@ -415,12 +432,13 @@ e_embed_image_object(Ebits_Object o, char *bit_name, Evas evas, Evas_Object imag
|
|||
void
|
||||
e_embed_free(Embed emb)
|
||||
{
|
||||
Embed_Private *em;
|
||||
|
||||
Embed_Private *em;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
em = emb;
|
||||
if (em->clip_obj) evas_del_object(em->evas, em->clip_obj);
|
||||
if (em->clip_obj)
|
||||
evas_del_object(em->evas, em->clip_obj);
|
||||
FREE(em);
|
||||
|
||||
D_RETURN;
|
||||
|
|
10
src/embed.h
10
src/embed.h
|
@ -4,10 +4,12 @@
|
|||
#include "e.h"
|
||||
#include "text.h"
|
||||
|
||||
typedef void * Embed;
|
||||
typedef void *Embed;
|
||||
|
||||
Embed e_embed_text(Ebits_Object o, char *bit_name, Evas evas, E_Text *text_obj, int clip_x, int clip_y);
|
||||
Embed e_embed_image_object(Ebits_Object o, char *bit_name, Evas evas, Evas_Object image_obj);
|
||||
void e_embed_free(Embed em);
|
||||
Embed e_embed_text(Ebits_Object o, char *bit_name, Evas evas,
|
||||
E_Text * text_obj, int clip_x, int clip_y);
|
||||
Embed e_embed_image_object(Ebits_Object o, char *bit_name,
|
||||
Evas evas, Evas_Object image_obj);
|
||||
void e_embed_free(Embed em);
|
||||
|
||||
#endif
|
||||
|
|
695
src/entry.c
695
src/entry.c
File diff suppressed because it is too large
Load Diff
142
src/entry.h
142
src/entry.h
|
@ -3,80 +3,96 @@
|
|||
|
||||
#include "e.h"
|
||||
|
||||
typedef struct _E_Entry E_Entry;
|
||||
typedef struct _E_Entry E_Entry;
|
||||
|
||||
struct _E_Entry
|
||||
{
|
||||
Evas evas;
|
||||
char *buffer;
|
||||
int cursor_pos;
|
||||
struct {
|
||||
int start, length, down;
|
||||
} select;
|
||||
int mouse_down;
|
||||
int visible;
|
||||
int focused;
|
||||
int scroll_pos;
|
||||
int x, y, w, h;
|
||||
int min_size;
|
||||
Ebits_Object obj_base;
|
||||
Ebits_Object obj_cursor;
|
||||
Ebits_Object obj_selection;
|
||||
Evas_Object event_box;
|
||||
Evas_Object clip_box;
|
||||
Evas_Object text;
|
||||
Window paste_win;
|
||||
Window selection_win;
|
||||
int end_width;
|
||||
void (*func_changed) (E_Entry *entry, void *data);
|
||||
void *data_changed;
|
||||
void (*func_enter) (E_Entry *entry, void *data);
|
||||
void *data_enter;
|
||||
void (*func_focus_in) (E_Entry *entry, void *data);
|
||||
void *data_focus_in;
|
||||
void (*func_focus_out) (E_Entry *entry, void *data);
|
||||
void *data_focus_out;
|
||||
Evas evas;
|
||||
char *buffer;
|
||||
int cursor_pos;
|
||||
struct
|
||||
{
|
||||
int start, length, down;
|
||||
}
|
||||
select;
|
||||
int mouse_down;
|
||||
int visible;
|
||||
int focused;
|
||||
int scroll_pos;
|
||||
int x, y, w, h;
|
||||
int min_size;
|
||||
Ebits_Object obj_base;
|
||||
Ebits_Object obj_cursor;
|
||||
Ebits_Object obj_selection;
|
||||
Evas_Object event_box;
|
||||
Evas_Object clip_box;
|
||||
Evas_Object text;
|
||||
Window paste_win;
|
||||
Window selection_win;
|
||||
int end_width;
|
||||
void (*func_changed) (E_Entry * entry, void *data);
|
||||
void *data_changed;
|
||||
void (*func_enter) (E_Entry * entry, void *data);
|
||||
void *data_enter;
|
||||
void (*func_focus_in) (E_Entry * entry, void *data);
|
||||
void *data_focus_in;
|
||||
void (*func_focus_out) (E_Entry * entry, void *data);
|
||||
void *data_focus_out;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* e_entry_init - Text entry widget event handler initialization.
|
||||
*
|
||||
* This function initalizes the entry widget code, it registers
|
||||
* the event handlers needed for managing a text entry widget.
|
||||
*/
|
||||
void e_entry_init(void);
|
||||
void e_entry_init(void);
|
||||
|
||||
void e_entry_free(E_Entry *entry);
|
||||
E_Entry *e_entry_new(void);
|
||||
void e_entry_handle_keypress(E_Entry *entry, Ecore_Event_Key_Down *e);
|
||||
void e_entry_set_evas(E_Entry *entry, Evas evas);
|
||||
void e_entry_show(E_Entry *entry);
|
||||
void e_entry_hide(E_Entry *entry);
|
||||
void e_entry_raise(E_Entry *entry);
|
||||
void e_entry_lower(E_Entry *entry);
|
||||
void e_entry_set_layer(E_Entry *entry, int l);
|
||||
void e_entry_set_clip(E_Entry *entry, Evas_Object clip);
|
||||
void e_entry_unset_clip(E_Entry *entry);
|
||||
void e_entry_move(E_Entry *entry, int x, int y);
|
||||
void e_entry_resize(E_Entry *entry, int w, int h);
|
||||
void e_entry_query_max_size(E_Entry *entry, int *w, int *h);
|
||||
void e_entry_max_size(E_Entry *entry, int *w, int *h);
|
||||
void e_entry_min_size(E_Entry *entry, int *w, int *h);
|
||||
void e_entry_set_size(E_Entry *entry, int w, int h);
|
||||
void e_entry_set_focus(E_Entry *entry, int focused);
|
||||
void e_entry_set_text(E_Entry *entry, const char *text);
|
||||
const char *e_entry_get_text(E_Entry *entry);
|
||||
void e_entry_set_cursor(E_Entry *entry, int cursor_pos);
|
||||
int e_entry_get_cursor(E_Entry *entry);
|
||||
void e_entry_set_changed_callback(E_Entry *entry, void (*func) (E_Entry *_entry, void *_data), void *data);
|
||||
void e_entry_set_enter_callback(E_Entry *entry, void (*func) (E_Entry *_entry, void *_data), void *data);
|
||||
void e_entry_set_focus_in_callback(E_Entry *entry, void (*func) (E_Entry *_entry, void *_data), void *data);
|
||||
void e_entry_set_focus_out_callback(E_Entry *entry, void (*func) (E_Entry *_entry, void *_data), void *data);
|
||||
void e_entry_insert_text(E_Entry *entry, char *text);
|
||||
void e_entry_clear_selection(E_Entry *entry);
|
||||
void e_entry_delete_to_left(E_Entry *entry);
|
||||
void e_entry_delete_to_right(E_Entry *entry);
|
||||
char *e_entry_get_selection(E_Entry *entry);
|
||||
void e_entry_free(E_Entry * entry);
|
||||
E_Entry *e_entry_new(void);
|
||||
void e_entry_handle_keypress(E_Entry * entry,
|
||||
Ecore_Event_Key_Down * e);
|
||||
void e_entry_set_evas(E_Entry * entry, Evas evas);
|
||||
void e_entry_show(E_Entry * entry);
|
||||
void e_entry_hide(E_Entry * entry);
|
||||
void e_entry_raise(E_Entry * entry);
|
||||
void e_entry_lower(E_Entry * entry);
|
||||
void e_entry_set_layer(E_Entry * entry, int l);
|
||||
void e_entry_set_clip(E_Entry * entry, Evas_Object clip);
|
||||
void e_entry_unset_clip(E_Entry * entry);
|
||||
void e_entry_move(E_Entry * entry, int x, int y);
|
||||
void e_entry_resize(E_Entry * entry, int w, int h);
|
||||
void e_entry_query_max_size(E_Entry * entry, int *w, int *h);
|
||||
void e_entry_max_size(E_Entry * entry, int *w, int *h);
|
||||
void e_entry_min_size(E_Entry * entry, int *w, int *h);
|
||||
void e_entry_set_size(E_Entry * entry, int w, int h);
|
||||
void e_entry_set_focus(E_Entry * entry, int focused);
|
||||
void e_entry_set_text(E_Entry * entry, const char *text);
|
||||
const char *e_entry_get_text(E_Entry * entry);
|
||||
void e_entry_set_cursor(E_Entry * entry, int cursor_pos);
|
||||
int e_entry_get_cursor(E_Entry * entry);
|
||||
void e_entry_set_changed_callback(E_Entry * entry,
|
||||
void (*func) (E_Entry * _entry,
|
||||
void *_data),
|
||||
void *data);
|
||||
void e_entry_set_enter_callback(E_Entry * entry,
|
||||
void (*func) (E_Entry * _entry,
|
||||
void *_data),
|
||||
void *data);
|
||||
void e_entry_set_focus_in_callback(E_Entry * entry,
|
||||
void (*func) (E_Entry *
|
||||
_entry,
|
||||
void *_data),
|
||||
void *data);
|
||||
void e_entry_set_focus_out_callback(E_Entry * entry,
|
||||
void (*func) (E_Entry *
|
||||
_entry,
|
||||
void *_data),
|
||||
void *data);
|
||||
void e_entry_insert_text(E_Entry * entry, char *text);
|
||||
void e_entry_clear_selection(E_Entry * entry);
|
||||
void e_entry_delete_to_left(E_Entry * entry);
|
||||
void e_entry_delete_to_right(E_Entry * entry);
|
||||
char *e_entry_get_selection(E_Entry * entry);
|
||||
|
||||
#endif
|
||||
|
|
945
src/epplet.c
945
src/epplet.c
File diff suppressed because it is too large
Load Diff
131
src/epplet.h
131
src/epplet.h
|
@ -14,103 +14,110 @@ typedef struct _E_Epplet_Observer E_Epplet_Observer;
|
|||
|
||||
struct _E_Epplet_Observer
|
||||
{
|
||||
E_Observer o;
|
||||
E_Observer o;
|
||||
|
||||
FeriteScript *script;
|
||||
FeriteFunction *func;
|
||||
FeriteObject *data;
|
||||
FeriteScript *script;
|
||||
FeriteFunction *func;
|
||||
FeriteObject *data;
|
||||
};
|
||||
|
||||
struct _E_Epplet_CB_Info
|
||||
{
|
||||
FeriteScript *script;
|
||||
FeriteFunction *func;
|
||||
FeriteObject *data;
|
||||
FeriteObject *data2;
|
||||
FeriteScript *script;
|
||||
FeriteFunction *func;
|
||||
FeriteObject *data;
|
||||
FeriteObject *data2;
|
||||
};
|
||||
|
||||
struct _E_Epplet_Context
|
||||
{
|
||||
char *name;
|
||||
E_View *view;
|
||||
FeriteScript *script;
|
||||
char *name;
|
||||
E_View *view;
|
||||
FeriteScript *script;
|
||||
|
||||
E_Epplet *epp;
|
||||
E_Epplet *epp;
|
||||
|
||||
struct {
|
||||
double x, y;
|
||||
double w, h;
|
||||
} geom;
|
||||
struct
|
||||
{
|
||||
double x, y;
|
||||
double w, h;
|
||||
}
|
||||
geom;
|
||||
};
|
||||
|
||||
|
||||
struct _E_Epplet
|
||||
{
|
||||
E_Object o;
|
||||
|
||||
E_Epplet_Context *context;
|
||||
E_Object o;
|
||||
|
||||
char *name;
|
||||
E_View *view;
|
||||
char *dir;
|
||||
Ebits_Object layout;
|
||||
Ebits_Object ui;
|
||||
E_Epplet_Context *context;
|
||||
|
||||
char *name;
|
||||
E_View *view;
|
||||
char *dir;
|
||||
Ebits_Object layout;
|
||||
Ebits_Object ui;
|
||||
|
||||
struct {
|
||||
double x, y;
|
||||
double w, h;
|
||||
} current, requested, offset;
|
||||
struct
|
||||
{
|
||||
double x, y;
|
||||
double w, h;
|
||||
}
|
||||
current , requested, offset;
|
||||
|
||||
struct {
|
||||
int changed;
|
||||
int moving;
|
||||
struct {
|
||||
int up, down, left, right;
|
||||
}resizing;
|
||||
} state;
|
||||
struct
|
||||
{
|
||||
int changed;
|
||||
int moving;
|
||||
struct
|
||||
{
|
||||
int up, down, left, right;
|
||||
}
|
||||
resizing;
|
||||
}
|
||||
state;
|
||||
|
||||
Evas_List evas_objects;
|
||||
Evas_List ebits;
|
||||
Evas_List evas_objects;
|
||||
Evas_List ebits;
|
||||
};
|
||||
|
||||
struct _Evas_Object_Wrapper
|
||||
{
|
||||
Evas evas;
|
||||
Evas_Object obj;
|
||||
E_Epplet *epp;
|
||||
Evas evas;
|
||||
Evas_Object obj;
|
||||
E_Epplet *epp;
|
||||
};
|
||||
|
||||
/* epplet loading / cleanup */
|
||||
E_Epplet *e_epplet_new();
|
||||
void e_epplet_load_from_layout(E_View *v);
|
||||
void e_epplet_script_load(E_Epplet_Context *v, char *script_path);
|
||||
E_Epplet_Context *e_epplet_get_context_from_script(FeriteScript *script);
|
||||
E_Epplet *e_epplet_new();
|
||||
void e_epplet_load_from_layout(E_View * v);
|
||||
void e_epplet_script_load(E_Epplet_Context * v,
|
||||
char *script_path);
|
||||
E_Epplet_Context *e_epplet_get_context_from_script(FeriteScript * script);
|
||||
|
||||
/* probably won't use this... */
|
||||
void e_epplet_set_common_callbacks(E_Epplet *epp);
|
||||
|
||||
void e_epplet_set_common_callbacks(E_Epplet * epp);
|
||||
|
||||
/* callbacks */
|
||||
E_Epplet_CB_Info *e_epplet_cb_new( FeriteScript *script, char *func_name,
|
||||
FeriteObject *data, FeriteObject *data2 );
|
||||
void e_epplet_cb_cleanup( E_Epplet_CB_Info *cb);
|
||||
void e_epplet_bits_cb (void *_data, Ebits_Object _o, char *_c,
|
||||
int _b, int _x, int _y, int _ox, int _oy,
|
||||
int _ow, int _oh);
|
||||
void e_epplet_evas_cb (void *_data, Evas _e, Evas_Object _o,
|
||||
int _b, int _x, int _y);
|
||||
E_Epplet_CB_Info *e_epplet_cb_new(FeriteScript * script, char *func_name,
|
||||
FeriteObject * data, FeriteObject * data2);
|
||||
void e_epplet_cb_cleanup(E_Epplet_CB_Info * cb);
|
||||
void e_epplet_bits_cb(void *_data, Ebits_Object _o, char *_c,
|
||||
int _b, int _x, int _y, int _ox, int _oy,
|
||||
int _ow, int _oh);
|
||||
void e_epplet_evas_cb(void *_data, Evas _e, Evas_Object _o,
|
||||
int _b, int _x, int _y);
|
||||
/* timers */
|
||||
void e_epplet_timer_func(int val, void *data);
|
||||
void e_epplet_timer_func(int val, void *data);
|
||||
|
||||
/* Observers */
|
||||
E_Epplet_Observer *e_epplet_observer_new( FeriteScript *script,
|
||||
char *func_name, FeriteObject *data,
|
||||
E_Epplet_Observer *e_epplet_observer_new(FeriteScript * script,
|
||||
char *func_name, FeriteObject * data,
|
||||
char *event_type);
|
||||
void e_epplet_observer_register_desktops(E_Epplet_Observer *obs);
|
||||
void e_epplet_desktop_observer_func(E_Observer *observer,
|
||||
E_Observee *observee,
|
||||
E_Event_Type event);
|
||||
void e_epplet_observer_register_desktops(E_Epplet_Observer *
|
||||
obs);
|
||||
void e_epplet_desktop_observer_func(E_Observer * observer,
|
||||
E_Observee * observee,
|
||||
E_Event_Type event);
|
||||
/*void e_epplet_border_observer_func(E_Observer *observer, E_Observee *observee);*/
|
||||
|
||||
#endif
|
||||
|
|
89
src/exec.c
89
src/exec.c
|
@ -3,25 +3,25 @@
|
|||
#include "desktops.h"
|
||||
#include "util.h"
|
||||
|
||||
static int e_argc = 0;
|
||||
static char **e_argv = NULL;
|
||||
static int e_argc = 0;
|
||||
static char **e_argv = NULL;
|
||||
|
||||
typedef struct _e_hack_found_cb E_Hack_Found_CB;
|
||||
|
||||
struct _e_hack_found_cb
|
||||
{
|
||||
int dirty;
|
||||
void (*func) (Window win, void *data);
|
||||
void *func_data;
|
||||
int dirty;
|
||||
void (*func) (Window win, void *data);
|
||||
void *func_data;
|
||||
};
|
||||
|
||||
static Evas_List hack_found_cb = NULL;
|
||||
static Evas_List hack_found_cb = NULL;
|
||||
|
||||
void *
|
||||
void *
|
||||
e_exec_broadcast_cb_add(void (*func) (Window win, void *_data), void *data)
|
||||
{
|
||||
E_Hack_Found_CB *cb;
|
||||
|
||||
E_Hack_Found_CB *cb;
|
||||
|
||||
cb = NEW(E_Hack_Found_CB, 1);
|
||||
ZERO(cb, E_Hack_Found_CB, 1);
|
||||
cb->func = func;
|
||||
|
@ -33,33 +33,33 @@ e_exec_broadcast_cb_add(void (*func) (Window win, void *_data), void *data)
|
|||
void
|
||||
e_exec_broadcast_cb_del(void *cbp)
|
||||
{
|
||||
E_Hack_Found_CB *cb;
|
||||
|
||||
cb = (E_Hack_Found_CB *)cbp;
|
||||
E_Hack_Found_CB *cb;
|
||||
|
||||
cb = (E_Hack_Found_CB *) cbp;
|
||||
cb->dirty = 1;
|
||||
}
|
||||
|
||||
void
|
||||
e_exec_broadcast_e_hack_found(Window win)
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
Evas_List l;
|
||||
|
||||
for (l = hack_found_cb; l; l = l->next)
|
||||
{
|
||||
E_Hack_Found_CB *cb;
|
||||
|
||||
E_Hack_Found_CB *cb;
|
||||
|
||||
cb = l->data;
|
||||
if (!cb->dirty)
|
||||
{
|
||||
if (cb->func)
|
||||
cb->func(win, cb->func_data);
|
||||
cb->func(win, cb->func_data);
|
||||
}
|
||||
}
|
||||
again:
|
||||
again:
|
||||
for (l = hack_found_cb; l; l = l->next)
|
||||
{
|
||||
E_Hack_Found_CB *cb;
|
||||
|
||||
E_Hack_Found_CB *cb;
|
||||
|
||||
cb = l->data;
|
||||
if (cb->dirty)
|
||||
{
|
||||
|
@ -83,8 +83,8 @@ e_exec_set_args(int argc, char **argv)
|
|||
void
|
||||
e_exec_restart(void)
|
||||
{
|
||||
int i, num;
|
||||
char exe[PATH_MAX];
|
||||
int i, num;
|
||||
char exe[PATH_MAX];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
@ -97,8 +97,8 @@ e_exec_restart(void)
|
|||
num = e_desktops_get_num();
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
E_Desktop *desk;
|
||||
|
||||
E_Desktop *desk;
|
||||
|
||||
desk = e_desktops_get(0);
|
||||
e_desktops_delete(desk);
|
||||
}
|
||||
|
@ -111,7 +111,7 @@ e_exec_restart(void)
|
|||
strcat(exe, e_argv[i]);
|
||||
strcat(exe, " ");
|
||||
}
|
||||
execl("/bin/sh", "/bin/sh", "-c", exe, NULL);
|
||||
execl("/bin/sh", "/bin/sh", "-c", exe, NULL);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
@ -120,12 +120,12 @@ pid_t
|
|||
e_exec_run(char *exe)
|
||||
{
|
||||
pid_t pid;
|
||||
|
||||
|
||||
D_ENTER;
|
||||
|
||||
pid = fork();
|
||||
if (pid)
|
||||
D_RETURN_(pid);
|
||||
D_RETURN_(pid);
|
||||
setsid();
|
||||
execl("/bin/sh", "/bin/sh", "-c", exe, NULL);
|
||||
exit(0);
|
||||
|
@ -137,12 +137,12 @@ pid_t
|
|||
e_exec_run_in_dir(char *exe, char *dir)
|
||||
{
|
||||
pid_t pid;
|
||||
|
||||
|
||||
D_ENTER;
|
||||
|
||||
pid = fork();
|
||||
if (pid)
|
||||
D_RETURN_(pid);
|
||||
D_RETURN_(pid);
|
||||
chdir(dir);
|
||||
setsid();
|
||||
execl("/bin/sh", "/bin/sh", "-c", exe, NULL);
|
||||
|
@ -152,20 +152,23 @@ e_exec_run_in_dir(char *exe, char *dir)
|
|||
}
|
||||
|
||||
pid_t
|
||||
e_exec_in_dir_with_env(char *exe, char *dir, int *launch_id_ret, char **env, char *launch_path)
|
||||
e_exec_in_dir_with_env(char *exe, char *dir, int *launch_id_ret, char **env,
|
||||
char *launch_path)
|
||||
{
|
||||
static int launch_id = 0;
|
||||
char preload_paths[PATH_MAX];
|
||||
char preload[PATH_MAX];
|
||||
char *exe2;
|
||||
static int launch_id = 0;
|
||||
char preload_paths[PATH_MAX];
|
||||
char preload[PATH_MAX];
|
||||
char *exe2;
|
||||
pid_t pid;
|
||||
|
||||
|
||||
D_ENTER;
|
||||
|
||||
launch_id++;
|
||||
if (launch_id_ret) *launch_id_ret = launch_id;
|
||||
if (launch_id_ret)
|
||||
*launch_id_ret = launch_id;
|
||||
pid = fork();
|
||||
if (pid) D_RETURN_(pid);
|
||||
if (pid)
|
||||
D_RETURN_(pid);
|
||||
chdir(dir);
|
||||
setsid();
|
||||
if (env)
|
||||
|
@ -179,13 +182,13 @@ e_exec_in_dir_with_env(char *exe, char *dir, int *launch_id_ret, char **env, cha
|
|||
/* launch Id hack - if it's an X program the windows popped up should */
|
||||
/* have this launch Id number set on them - as well as process ID */
|
||||
/* machine name, and user name */
|
||||
if (launch_path) e_util_set_env("E_HACK_LAUNCH_PATH", launch_path);
|
||||
snprintf(preload_paths, PATH_MAX, "E_HACK_LAUNCH_ID=%i LD_PRELOAD_PATH='%s'",
|
||||
launch_id, PACKAGE_LIB_DIR);
|
||||
if (launch_path)
|
||||
e_util_set_env("E_HACK_LAUNCH_PATH", launch_path);
|
||||
snprintf(preload_paths, PATH_MAX, "E_HACK_LAUNCH_ID=%i LD_PRELOAD_PATH='%s'",
|
||||
launch_id, PACKAGE_LIB_DIR);
|
||||
snprintf(preload, PATH_MAX, "LD_PRELOAD='libehack.so libX11.so libdl.so'");
|
||||
exe2 = malloc(strlen(exe) + 1 +
|
||||
strlen(preload_paths) + 1 +
|
||||
strlen(preload) + 1);
|
||||
exe2 = malloc(strlen(exe) + 1 +
|
||||
strlen(preload_paths) + 1 + strlen(preload) + 1);
|
||||
snprintf(exe2, PATH_MAX, "%s %s %s", preload_paths, preload, exe);
|
||||
|
||||
execl("/bin/sh", "/bin/sh", "-c", exe2, NULL);
|
||||
|
|
19
src/exec.h
19
src/exec.h
|
@ -3,13 +3,16 @@
|
|||
|
||||
#include "e.h"
|
||||
|
||||
void *e_exec_broadcast_cb_add(void (*func) (Window win, void *data), void *data);
|
||||
void e_exec_broadcast_cb_del(void *cb);
|
||||
void e_exec_broadcast_e_hack_found(Window win);
|
||||
void e_exec_set_args(int argc, char **argv);
|
||||
void e_exec_restart(void);
|
||||
pid_t e_exec_run(char *exe);
|
||||
pid_t e_exec_run_in_dir(char *exe, char *dir);
|
||||
pid_t e_exec_in_dir_with_env(char *exe, char *dir, int *launch_id_ret, char **env, char *launch_path);
|
||||
void
|
||||
*e_exec_broadcast_cb_add(void (*func) (Window win, void *data), void *data);
|
||||
void e_exec_broadcast_cb_del(void *cb);
|
||||
void e_exec_broadcast_e_hack_found(Window win);
|
||||
void e_exec_set_args(int argc, char **argv);
|
||||
void e_exec_restart(void);
|
||||
pid_t e_exec_run(char *exe);
|
||||
pid_t e_exec_run_in_dir(char *exe, char *dir);
|
||||
pid_t e_exec_in_dir_with_env(char *exe, char *dir,
|
||||
int *launch_id_ret, char **env,
|
||||
char *launch_path);
|
||||
|
||||
#endif
|
||||
|
|
164
src/file.c
164
src/file.c
|
@ -9,8 +9,9 @@ e_file_mod_time(char *file)
|
|||
struct stat st;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (stat(file, &st) < 0) D_RETURN_(0);
|
||||
|
||||
if (stat(file, &st) < 0)
|
||||
D_RETURN_(0);
|
||||
|
||||
D_RETURN_(st.st_mtime);
|
||||
}
|
||||
|
@ -19,10 +20,11 @@ int
|
|||
e_file_exists(char *file)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (stat(file, &st) < 0) D_RETURN_(0);
|
||||
|
||||
if (stat(file, &st) < 0)
|
||||
D_RETURN_(0);
|
||||
|
||||
D_RETURN_(1);
|
||||
}
|
||||
|
@ -31,23 +33,27 @@ int
|
|||
e_file_is_dir(char *file)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (stat(file, &st) < 0) D_RETURN_(0);
|
||||
if (S_ISDIR(st.st_mode)) D_RETURN_(1);
|
||||
|
||||
if (stat(file, &st) < 0)
|
||||
D_RETURN_(0);
|
||||
if (S_ISDIR(st.st_mode))
|
||||
D_RETURN_(1);
|
||||
|
||||
D_RETURN_(0);
|
||||
}
|
||||
|
||||
static mode_t default_mode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
|
||||
static mode_t default_mode =
|
||||
S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
|
||||
|
||||
int
|
||||
e_file_mkdir(char *dir)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (mkdir(dir, default_mode) < 0) D_RETURN_(0);
|
||||
|
||||
if (mkdir(dir, default_mode) < 0)
|
||||
D_RETURN_(0);
|
||||
|
||||
D_RETURN_(1);
|
||||
}
|
||||
|
@ -55,72 +61,74 @@ e_file_mkdir(char *dir)
|
|||
int
|
||||
e_file_cp(char *src, char *dst)
|
||||
{
|
||||
FILE *f1, *f2;
|
||||
char buf[16384];
|
||||
size_t num;
|
||||
|
||||
FILE *f1, *f2;
|
||||
char buf[16384];
|
||||
size_t num;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
f1 = fopen(src, "rb");
|
||||
if (!f1) D_RETURN_(0);
|
||||
if (!f1)
|
||||
D_RETURN_(0);
|
||||
f2 = fopen(dst, "wb");
|
||||
if (!f2)
|
||||
{
|
||||
fclose(f1);
|
||||
D_RETURN_(0);
|
||||
}
|
||||
while ((num = fread(buf, 1, 16384, f1)) > 0) fwrite(buf, 1, num, f2);
|
||||
while ((num = fread(buf, 1, 16384, f1)) > 0)
|
||||
fwrite(buf, 1, num, f2);
|
||||
fclose(f1);
|
||||
fclose(f2);
|
||||
|
||||
D_RETURN_(1);
|
||||
}
|
||||
|
||||
char *
|
||||
char *
|
||||
e_file_realpath(char *file)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
char *f;
|
||||
|
||||
char buf[PATH_MAX];
|
||||
char *f;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!realpath(file, buf)) D_RETURN_(strdup(""));
|
||||
|
||||
if (!realpath(file, buf))
|
||||
D_RETURN_(strdup(""));
|
||||
e_strdup(f, buf);
|
||||
|
||||
D_RETURN_(f);
|
||||
}
|
||||
|
||||
char *
|
||||
char *
|
||||
e_file_get_file(char *path)
|
||||
{
|
||||
char *result = NULL;
|
||||
char *result = NULL;
|
||||
|
||||
D_ENTER;
|
||||
D_ENTER;
|
||||
|
||||
if (!path)
|
||||
D_RETURN_(NULL);
|
||||
|
||||
if ((result = strrchr(path, '/')))
|
||||
result++;
|
||||
else
|
||||
result = path;
|
||||
|
||||
D_RETURN_(result);
|
||||
if (!path)
|
||||
D_RETURN_(NULL);
|
||||
|
||||
if ((result = strrchr(path, '/')))
|
||||
result++;
|
||||
else
|
||||
result = path;
|
||||
|
||||
D_RETURN_(result);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
char *
|
||||
e_file_get_dir(char *file)
|
||||
{
|
||||
char *p;
|
||||
char *f;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
char *p;
|
||||
char *f;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
strcpy(buf, file);
|
||||
p = strrchr(buf, '/');
|
||||
if (!p)
|
||||
if (!p)
|
||||
{
|
||||
e_strdup(f, file);
|
||||
D_RETURN_(f);
|
||||
|
@ -134,70 +142,77 @@ e_file_get_dir(char *file)
|
|||
int
|
||||
e_file_can_exec(struct stat *st)
|
||||
{
|
||||
static int have_uid = 0;
|
||||
static uid_t uid = -1;
|
||||
static gid_t gid = -1;
|
||||
int ok;
|
||||
|
||||
static int have_uid = 0;
|
||||
static uid_t uid = -1;
|
||||
static gid_t gid = -1;
|
||||
int ok;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!st) D_RETURN_(0);
|
||||
|
||||
if (!st)
|
||||
D_RETURN_(0);
|
||||
ok = 0;
|
||||
if (!have_uid) uid = getuid();
|
||||
if (!have_uid) gid = getgid();
|
||||
if (!have_uid)
|
||||
uid = getuid();
|
||||
if (!have_uid)
|
||||
gid = getgid();
|
||||
have_uid = 1;
|
||||
if (st->st_uid == uid)
|
||||
{
|
||||
if (st->st_mode & S_IXUSR) ok = 1;
|
||||
if (st->st_mode & S_IXUSR)
|
||||
ok = 1;
|
||||
}
|
||||
else if (st->st_gid == gid)
|
||||
{
|
||||
if (st->st_mode & S_IXGRP) ok = 1;
|
||||
if (st->st_mode & S_IXGRP)
|
||||
ok = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (st->st_mode & S_IXOTH) ok = 1;
|
||||
if (st->st_mode & S_IXOTH)
|
||||
ok = 1;
|
||||
}
|
||||
|
||||
D_RETURN_(ok);
|
||||
}
|
||||
|
||||
char *
|
||||
char *
|
||||
e_file_readlink(char *link)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
char *f;
|
||||
int count;
|
||||
|
||||
char buf[PATH_MAX];
|
||||
char *f;
|
||||
int count;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if ((count = readlink(link, buf, sizeof(buf))) < 0) D_RETURN_(NULL);
|
||||
|
||||
if ((count = readlink(link, buf, sizeof(buf))) < 0)
|
||||
D_RETURN_(NULL);
|
||||
buf[count] = 0;
|
||||
e_strdup(f, buf);
|
||||
|
||||
D_RETURN_(f);
|
||||
}
|
||||
|
||||
Evas_List
|
||||
Evas_List
|
||||
e_file_ls(char *dir)
|
||||
{
|
||||
DIR *dirp;
|
||||
struct dirent *dp;
|
||||
Evas_List list;
|
||||
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
dirp = opendir(dir);
|
||||
if (!dirp) D_RETURN_(NULL);
|
||||
if (!dirp)
|
||||
D_RETURN_(NULL);
|
||||
list = NULL;
|
||||
while ((dp = readdir(dirp)))
|
||||
{
|
||||
if ((strcmp(dp->d_name, ".")) &&
|
||||
(strcmp(dp->d_name, "..")))
|
||||
if ((strcmp(dp->d_name, ".")) && (strcmp(dp->d_name, "..")))
|
||||
{
|
||||
Evas_List l;
|
||||
char *f;
|
||||
|
||||
Evas_List l;
|
||||
char *f;
|
||||
|
||||
/* insertion sort */
|
||||
for (l = list; l; l = l->next)
|
||||
{
|
||||
|
@ -210,7 +225,8 @@ e_file_ls(char *dir)
|
|||
}
|
||||
/* nowhwre to go? just append it */
|
||||
e_strdup(f, dp->d_name);
|
||||
if (!l) list = evas_list_append(list, f);
|
||||
if (!l)
|
||||
list = evas_list_append(list, f);
|
||||
}
|
||||
}
|
||||
closedir(dirp);
|
||||
|
|
22
src/file.h
22
src/file.h
|
@ -4,12 +4,12 @@
|
|||
#include <sys/stat.h>
|
||||
#include <Evas.h>
|
||||
|
||||
time_t e_file_mod_time(char *file);
|
||||
int e_file_exists(char *file);
|
||||
int e_file_is_dir(char *file);
|
||||
int e_file_mkdir(char *dir);
|
||||
int e_file_cp(char *src, char *dst);
|
||||
char *e_file_realpath(char *file);
|
||||
time_t e_file_mod_time(char *file);
|
||||
int e_file_exists(char *file);
|
||||
int e_file_is_dir(char *file);
|
||||
int e_file_mkdir(char *dir);
|
||||
int e_file_cp(char *src, char *dst);
|
||||
char *e_file_realpath(char *file);
|
||||
|
||||
/**
|
||||
* e_file_get_file - returns file in a path
|
||||
|
@ -20,7 +20,7 @@ char *e_file_realpath(char *file);
|
|||
* a pointer into the original string, so you don't
|
||||
* need to free the result.
|
||||
*/
|
||||
char *e_file_get_file(char *path);
|
||||
char *e_file_get_file(char *path);
|
||||
|
||||
/**
|
||||
* e_file_get_dir - returns directory in a path
|
||||
|
@ -31,10 +31,10 @@ char *e_file_get_file(char *path);
|
|||
* a freshly allocated string, so you need to free
|
||||
*the result.
|
||||
*/
|
||||
char *e_file_get_dir(char *path);
|
||||
char *e_file_get_dir(char *path);
|
||||
|
||||
int e_file_can_exec(struct stat *st);
|
||||
char *e_file_readlink(char *link);
|
||||
Evas_List e_file_ls(char *dir);
|
||||
int e_file_can_exec(struct stat *st);
|
||||
char *e_file_readlink(char *link);
|
||||
Evas_List e_file_ls(char *dir);
|
||||
|
||||
#endif
|
||||
|
|
14
src/focus.c
14
src/focus.c
|
@ -4,20 +4,20 @@
|
|||
#include "e.h"
|
||||
#include "util.h"
|
||||
|
||||
static Evas_List focus_list = NULL;
|
||||
static Evas_List focus_list = NULL;
|
||||
|
||||
void
|
||||
e_focus_set_focus(E_Border *b)
|
||||
e_focus_set_focus(E_Border * b)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
e_icccm_send_focus_to(b->win.client, e_focus_can_focus(b));
|
||||
e_icccm_send_focus_to(b->win.client, e_focus_can_focus(b));
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
int
|
||||
e_focus_can_focus(E_Border *b)
|
||||
e_focus_can_focus(E_Border * b)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -25,7 +25,7 @@ e_focus_can_focus(E_Border *b)
|
|||
}
|
||||
|
||||
void
|
||||
e_focus_list_border_add(E_Border *b)
|
||||
e_focus_list_border_add(E_Border * b)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -34,7 +34,7 @@ e_focus_list_border_add(E_Border *b)
|
|||
}
|
||||
|
||||
void
|
||||
e_focus_list_border_del(E_Border *b)
|
||||
e_focus_list_border_del(E_Border * b)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -47,7 +47,7 @@ e_focus_list_clear(void)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
if (focus_list)
|
||||
if (focus_list)
|
||||
{
|
||||
evas_list_free(focus_list);
|
||||
focus_list = NULL;
|
||||
|
|
11
src/focus.h
11
src/focus.h
|
@ -3,11 +3,10 @@
|
|||
|
||||
#include "border.h"
|
||||
|
||||
void e_focus_set_focus(E_Border *b);
|
||||
int e_focus_can_focus(E_Border *b);
|
||||
void e_focus_list_border_add(E_Border *b);
|
||||
void e_focus_list_border_del(E_Border *b);
|
||||
void e_focus_list_clear(void);
|
||||
void e_focus_set_focus(E_Border * b);
|
||||
int e_focus_can_focus(E_Border * b);
|
||||
void e_focus_list_border_add(E_Border * b);
|
||||
void e_focus_list_border_del(E_Border * b);
|
||||
void e_focus_list_clear(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
120
src/fs.c
120
src/fs.c
|
@ -3,28 +3,29 @@
|
|||
#include "exec.h"
|
||||
#include "util.h"
|
||||
|
||||
static EfsdConnection *ec = NULL;
|
||||
static Evas_List fs_handlers = NULL;
|
||||
static Evas_List fs_restart_handlers = NULL;
|
||||
static pid_t efsd_pid = 0;
|
||||
static EfsdConnection *ec = NULL;
|
||||
static Evas_List fs_handlers = NULL;
|
||||
static Evas_List fs_restart_handlers = NULL;
|
||||
static pid_t efsd_pid = 0;
|
||||
|
||||
static void e_fs_child_handle(Ecore_Event *ev);
|
||||
static void e_fs_fd_handle(int fd);
|
||||
static void e_fs_restarter(int val, void *data);
|
||||
static void e_fs_idle(void *data);
|
||||
static void e_fs_flush_timeout(int val, void *data);
|
||||
static void e_fs_child_handle(Ecore_Event * ev);
|
||||
static void e_fs_fd_handle(int fd);
|
||||
static void e_fs_restarter(int val, void *data);
|
||||
static void e_fs_idle(void *data);
|
||||
static void e_fs_flush_timeout(int val, void *data);
|
||||
|
||||
static void
|
||||
e_fs_flush_timeout(int val, void *data)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (!ec) D_RETURN;
|
||||
if (!ec)
|
||||
D_RETURN;
|
||||
if (efsd_commands_pending(ec) > 0)
|
||||
{
|
||||
if (efsd_flush(ec) > 0)
|
||||
ecore_add_event_timer("e_fs_flush_timeout()",
|
||||
0.00, e_fs_flush_timeout, 0, NULL);
|
||||
ecore_add_event_timer("e_fs_flush_timeout()",
|
||||
0.00, e_fs_flush_timeout, 0, NULL);
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
|
@ -44,10 +45,10 @@ e_fs_idle(void *data)
|
|||
}
|
||||
|
||||
static void
|
||||
e_fs_child_handle(Ecore_Event *ev)
|
||||
e_fs_child_handle(Ecore_Event * ev)
|
||||
{
|
||||
Ecore_Event_Child *e;
|
||||
|
||||
Ecore_Event_Child *e;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
e = ev->event;
|
||||
|
@ -55,7 +56,8 @@ e_fs_child_handle(Ecore_Event *ev)
|
|||
if (e->pid == efsd_pid)
|
||||
{
|
||||
D("it was efsd!\n");
|
||||
if (ec) efsd_close(ec);
|
||||
if (ec)
|
||||
efsd_close(ec);
|
||||
ec = NULL;
|
||||
efsd_pid = 0;
|
||||
e_fs_restarter(1, NULL);
|
||||
|
@ -67,23 +69,23 @@ e_fs_child_handle(Ecore_Event *ev)
|
|||
static void
|
||||
e_fs_fd_handle(int fd)
|
||||
{
|
||||
double start, current;
|
||||
|
||||
double start, current;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
start = ecore_get_time();
|
||||
while ((ec) && efsd_events_pending(ec))
|
||||
{
|
||||
EfsdEvent ev;
|
||||
|
||||
EfsdEvent ev;
|
||||
|
||||
if (efsd_next_event(ec, &ev) >= 0)
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
Evas_List l;
|
||||
|
||||
for (l = fs_handlers; l; l = l->next)
|
||||
{
|
||||
void (*func) (EfsdEvent *ev);
|
||||
|
||||
void (*func) (EfsdEvent * ev);
|
||||
|
||||
func = l->data;
|
||||
func(&ev);
|
||||
}
|
||||
|
@ -99,10 +101,10 @@ e_fs_fd_handle(int fd)
|
|||
/* efsd went wonky */
|
||||
D("EEEEEEEEEEK efsd went wonky. Bye bye efsd.\n");
|
||||
}
|
||||
|
||||
|
||||
/* spent more thna 1/20th of a second here.. get out */
|
||||
current = ecore_get_time();
|
||||
if ((current - start) > 0.05)
|
||||
if ((current - start) > 0.05)
|
||||
{
|
||||
D("fs... too much time spent..\n");
|
||||
break;
|
||||
|
@ -117,50 +119,54 @@ e_fs_restarter(int val, void *data)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
if (ec) D_RETURN;
|
||||
if (ec)
|
||||
D_RETURN;
|
||||
|
||||
ec = efsd_open();
|
||||
|
||||
if ((!ec) && (val > 0))
|
||||
{
|
||||
if (efsd_pid <= 0)
|
||||
if (efsd_pid <= 0)
|
||||
{
|
||||
efsd_pid = e_exec_run("efsd -f");
|
||||
D("launch efsd... %i\n", efsd_pid);
|
||||
}
|
||||
if (efsd_pid > 0) ec = efsd_open();
|
||||
if (efsd_pid > 0)
|
||||
ec = efsd_open();
|
||||
}
|
||||
if (ec)
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
Evas_List l;
|
||||
|
||||
ecore_add_event_fd(efsd_get_connection_fd(ec), e_fs_fd_handle);
|
||||
for (l = fs_restart_handlers; l; l = l->next)
|
||||
{
|
||||
E_FS_Restarter *rs;
|
||||
|
||||
E_FS_Restarter *rs;
|
||||
|
||||
rs = l->data;
|
||||
rs->func(rs->data);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
double gap;
|
||||
|
||||
double gap;
|
||||
|
||||
gap = (double)val / 10;
|
||||
if (gap > 10.0) gap = 10.0;
|
||||
ecore_add_event_timer("e_fs_restarter", gap, e_fs_restarter, val + 1, NULL);
|
||||
if (gap > 10.0)
|
||||
gap = 10.0;
|
||||
ecore_add_event_timer("e_fs_restarter", gap, e_fs_restarter, val + 1,
|
||||
NULL);
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
UN(data);
|
||||
}
|
||||
|
||||
E_FS_Restarter *
|
||||
E_FS_Restarter *
|
||||
e_fs_add_restart_handler(void (*func) (void *data), void *data)
|
||||
{
|
||||
E_FS_Restarter *rs;
|
||||
|
||||
E_FS_Restarter *rs;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
rs = NEW(E_FS_Restarter, 1);
|
||||
|
@ -173,25 +179,26 @@ e_fs_add_restart_handler(void (*func) (void *data), void *data)
|
|||
}
|
||||
|
||||
void
|
||||
e_fs_del_restart_handler(E_FS_Restarter *rs)
|
||||
e_fs_del_restart_handler(E_FS_Restarter * rs)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (evas_list_find(fs_restart_handlers, rs))
|
||||
{
|
||||
fs_restart_handlers = evas_list_remove(fs_restart_handlers, rs);
|
||||
FREE(rs);
|
||||
FREE(rs);
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_fs_add_event_handler(void (*func) (EfsdEvent *ev))
|
||||
e_fs_add_event_handler(void (*func) (EfsdEvent * ev))
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (!func) D_RETURN;
|
||||
if (!func)
|
||||
D_RETURN;
|
||||
fs_handlers = evas_list_append(fs_handlers, func);
|
||||
|
||||
D_RETURN;
|
||||
|
@ -203,24 +210,24 @@ e_fs_init(void)
|
|||
D_ENTER;
|
||||
|
||||
/* Hook in an fs handler that gets called whenever
|
||||
a child of this process exits.
|
||||
*/
|
||||
ecore_event_filter_handler_add(ECORE_EVENT_CHILD, e_fs_child_handle);
|
||||
* a child of this process exits.
|
||||
*/
|
||||
ecore_event_filter_handler_add(ECORE_EVENT_CHILD, e_fs_child_handle);
|
||||
|
||||
/* Also hook in an idle handler to flush efsd's
|
||||
write queue.
|
||||
|
||||
FIXME: This should be handled by letting ecore
|
||||
report when Efsd's file descriptor becomes
|
||||
writeable, and then calling efsd_flush().
|
||||
*/
|
||||
ecore_event_filter_idle_handler_add(e_fs_idle, NULL);
|
||||
* write queue.
|
||||
*
|
||||
* FIXME: This should be handled by letting ecore
|
||||
* report when Efsd's file descriptor becomes
|
||||
* writeable, and then calling efsd_flush().
|
||||
*/
|
||||
ecore_event_filter_idle_handler_add(e_fs_idle, NULL);
|
||||
e_fs_restarter(0, NULL);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
e_fs_cleanup(void)
|
||||
{
|
||||
D_ENTER;
|
||||
|
@ -231,8 +238,7 @@ e_fs_cleanup(void)
|
|||
D_RETURN;
|
||||
}
|
||||
|
||||
|
||||
EfsdConnection *
|
||||
EfsdConnection *
|
||||
e_fs_get_connection(void)
|
||||
{
|
||||
D_ENTER;
|
||||
|
|
19
src/fs.h
19
src/fs.h
|
@ -3,12 +3,12 @@
|
|||
|
||||
#include <libefsd.h>
|
||||
|
||||
typedef struct _E_FS_Restarter E_FS_Restarter;
|
||||
typedef struct _E_FS_Restarter E_FS_Restarter;
|
||||
|
||||
struct _E_FS_Restarter
|
||||
{
|
||||
void (*func) (void *data);
|
||||
void *data;
|
||||
void (*func) (void *data);
|
||||
void *data;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -18,7 +18,7 @@ struct _E_FS_Restarter
|
|||
* starts it when necessary, and makes sure that
|
||||
* it can be restarted in case efsd dies.
|
||||
*/
|
||||
void e_fs_init(void);
|
||||
void e_fs_init(void);
|
||||
|
||||
/**
|
||||
* e_fs_cleanup - Filesystem code cleanup routine.
|
||||
|
@ -26,11 +26,12 @@ void e_fs_init(void);
|
|||
* This function takes care of properly saying
|
||||
* good bye to Efsd.
|
||||
*/
|
||||
void e_fs_cleanup(void);
|
||||
void e_fs_cleanup(void);
|
||||
|
||||
E_FS_Restarter *e_fs_add_restart_handler(void (*func) (void *data), void *data);
|
||||
void e_fs_del_restart_handler(E_FS_Restarter *rs);
|
||||
void e_fs_add_event_handler(void (*func) (EfsdEvent *ev));
|
||||
EfsdConnection *e_fs_get_connection(void);
|
||||
E_FS_Restarter *e_fs_add_restart_handler(void (*func) (void *data),
|
||||
void *data);
|
||||
void e_fs_del_restart_handler(E_FS_Restarter * rs);
|
||||
void e_fs_add_event_handler(void (*func) (EfsdEvent * ev));
|
||||
EfsdConnection *e_fs_get_connection(void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -5,4 +5,4 @@
|
|||
|
||||
Ecore_Event_Key_Modifiers multi_select_mod = ECORE_EVENT_KEY_MODIFIER_SHIFT;
|
||||
Ecore_Event_Key_Modifiers range_select_mod = ECORE_EVENT_KEY_MODIFIER_CTRL;
|
||||
E_View_Machine *VM = NULL;
|
||||
E_View_Machine *VM = NULL;
|
||||
|
|
362
src/guides.c
362
src/guides.c
|
@ -5,46 +5,56 @@
|
|||
#include "embed.h"
|
||||
#include "util.h"
|
||||
|
||||
static struct
|
||||
static struct
|
||||
{
|
||||
int changed;
|
||||
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
E_Guides_Location loc;
|
||||
struct
|
||||
{
|
||||
double x, y;
|
||||
} align;
|
||||
char *text;
|
||||
char *icon;
|
||||
} display;
|
||||
int x, y, w, h;
|
||||
int visible;
|
||||
E_Guides_Mode mode;
|
||||
} current, prev;
|
||||
|
||||
struct {
|
||||
Window display;
|
||||
Window l, r, t, b;
|
||||
} win;
|
||||
struct {
|
||||
Evas evas;
|
||||
Ebits_Object bg;
|
||||
E_Text *text;
|
||||
Evas_Object icon;
|
||||
Imlib_Image image;
|
||||
} disp;
|
||||
struct {
|
||||
Embed icon;
|
||||
Embed text;
|
||||
} embed;
|
||||
} guides;
|
||||
int changed;
|
||||
|
||||
static void e_guides_idle(void *data);
|
||||
static void e_guides_update(void);
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
E_Guides_Location loc;
|
||||
struct
|
||||
{
|
||||
double x, y;
|
||||
}
|
||||
align;
|
||||
char *text;
|
||||
char *icon;
|
||||
}
|
||||
display;
|
||||
int x, y, w, h;
|
||||
int visible;
|
||||
E_Guides_Mode mode;
|
||||
}
|
||||
current , prev;
|
||||
|
||||
struct
|
||||
{
|
||||
Window display;
|
||||
Window l, r, t, b;
|
||||
}
|
||||
win;
|
||||
struct
|
||||
{
|
||||
Evas evas;
|
||||
Ebits_Object bg;
|
||||
E_Text *text;
|
||||
Evas_Object icon;
|
||||
Imlib_Image image;
|
||||
}
|
||||
disp;
|
||||
struct
|
||||
{
|
||||
Embed icon;
|
||||
Embed text;
|
||||
}
|
||||
embed;
|
||||
}
|
||||
guides;
|
||||
|
||||
static void e_guides_idle(void *data);
|
||||
static void e_guides_update(void);
|
||||
|
||||
static void
|
||||
e_guides_idle(void *data)
|
||||
|
@ -60,14 +70,15 @@ e_guides_idle(void *data)
|
|||
static void
|
||||
e_guides_update(void)
|
||||
{
|
||||
int font_cache = 1024 * 1024;
|
||||
int image_cache = 8192 * 1024;
|
||||
char *font_dir;
|
||||
int redraw;
|
||||
|
||||
int font_cache = 1024 * 1024;
|
||||
int image_cache = 8192 * 1024;
|
||||
char *font_dir;
|
||||
int redraw;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!guides.changed) D_RETURN;
|
||||
if (!guides.changed)
|
||||
D_RETURN;
|
||||
|
||||
redraw = 0;
|
||||
if (guides.prev.visible != guides.current.visible)
|
||||
|
@ -93,12 +104,12 @@ e_guides_update(void)
|
|||
font_dir = e_config_get("fonts");
|
||||
guides.disp.evas = evas_new();
|
||||
evas_set_output_method(guides.disp.evas, RENDER_METHOD_IMAGE);
|
||||
|
||||
|
||||
guides.disp.image = imlib_create_image(1, 1);
|
||||
imlib_context_set_image(guides.disp.image);
|
||||
imlib_image_set_has_alpha(1);
|
||||
imlib_image_clear();
|
||||
|
||||
|
||||
evas_set_output_image(guides.disp.evas, guides.disp.image);
|
||||
evas_font_add_path(guides.disp.evas, font_dir);
|
||||
evas_set_output_size(guides.disp.evas, 1, 1);
|
||||
|
@ -124,12 +135,16 @@ e_guides_update(void)
|
|||
}
|
||||
if (guides.disp.evas)
|
||||
{
|
||||
if (guides.embed.icon) e_embed_free(guides.embed.icon);
|
||||
if (guides.embed.text) e_embed_free(guides.embed.text);
|
||||
if (guides.embed.icon)
|
||||
e_embed_free(guides.embed.icon);
|
||||
if (guides.embed.text)
|
||||
e_embed_free(guides.embed.text);
|
||||
guides.embed.icon = NULL;
|
||||
guides.embed.text = NULL;
|
||||
if (guides.disp.bg) ebits_free(guides.disp.bg);
|
||||
if (guides.disp.text) e_text_free(guides.disp.text);
|
||||
if (guides.disp.bg)
|
||||
ebits_free(guides.disp.bg);
|
||||
if (guides.disp.text)
|
||||
e_text_free(guides.disp.text);
|
||||
if (guides.disp.image)
|
||||
{
|
||||
imlib_context_set_image(guides.disp.image);
|
||||
|
@ -144,25 +159,37 @@ e_guides_update(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
if (guides.current.x != guides.prev.x) redraw = 1;
|
||||
if (guides.current.y != guides.prev.y) redraw = 1;
|
||||
if (guides.current.w != guides.prev.w) redraw = 1;
|
||||
if (guides.current.h != guides.prev.h) redraw = 1;
|
||||
if (guides.current.display.loc != guides.prev.display.loc) redraw = 1;
|
||||
if (guides.current.display.align.x != guides.prev.display.align.x) redraw = 1;
|
||||
if (guides.current.display.align.y != guides.prev.display.align.y) redraw = 1;
|
||||
if (guides.current.display.text != guides.prev.display.text) redraw = 1;
|
||||
if (guides.current.display.icon != guides.prev.display.icon) redraw = 1;
|
||||
if (guides.current.mode != guides.prev.mode) redraw = 1;
|
||||
|
||||
if (guides.current.x != guides.prev.x)
|
||||
redraw = 1;
|
||||
if (guides.current.y != guides.prev.y)
|
||||
redraw = 1;
|
||||
if (guides.current.w != guides.prev.w)
|
||||
redraw = 1;
|
||||
if (guides.current.h != guides.prev.h)
|
||||
redraw = 1;
|
||||
if (guides.current.display.loc != guides.prev.display.loc)
|
||||
redraw = 1;
|
||||
if (guides.current.display.align.x != guides.prev.display.align.x)
|
||||
redraw = 1;
|
||||
if (guides.current.display.align.y != guides.prev.display.align.y)
|
||||
redraw = 1;
|
||||
if (guides.current.display.text != guides.prev.display.text)
|
||||
redraw = 1;
|
||||
if (guides.current.display.icon != guides.prev.display.icon)
|
||||
redraw = 1;
|
||||
if (guides.current.mode != guides.prev.mode)
|
||||
redraw = 1;
|
||||
|
||||
if ((guides.win.display) && (redraw))
|
||||
{
|
||||
int dx, dy, dw, dh, sw, sh, mw, mh;
|
||||
char file[PATH_MAX];
|
||||
|
||||
int dx, dy, dw, dh, sw, sh, mw, mh;
|
||||
char file[PATH_MAX];
|
||||
|
||||
if (!guides.disp.text)
|
||||
{
|
||||
guides.disp.text = e_text_new(guides.disp.evas, guides.current.display.text, "guides");
|
||||
guides.disp.text =
|
||||
e_text_new(guides.disp.evas, guides.current.display.text,
|
||||
"guides");
|
||||
e_text_set_layer(guides.disp.text, 100);
|
||||
e_text_show(guides.disp.text);
|
||||
}
|
||||
|
@ -173,69 +200,90 @@ e_guides_update(void)
|
|||
}
|
||||
if ((guides.current.display.icon) && (!guides.disp.icon))
|
||||
{
|
||||
guides.disp.icon = evas_add_image_from_file(guides.disp.evas, guides.current.display.icon);
|
||||
guides.disp.icon =
|
||||
evas_add_image_from_file(guides.disp.evas,
|
||||
guides.current.display.icon);
|
||||
evas_show(guides.disp.evas, guides.disp.icon);
|
||||
}
|
||||
if (guides.disp.icon)
|
||||
evas_set_image_file(guides.disp.evas, guides.disp.icon, guides.current.display.icon);
|
||||
evas_set_image_file(guides.disp.evas, guides.disp.icon,
|
||||
guides.current.display.icon);
|
||||
e_text_set_text(guides.disp.text, guides.current.display.text);
|
||||
if (!guides.disp.bg)
|
||||
if (!guides.disp.bg)
|
||||
{
|
||||
char *dir;
|
||||
|
||||
char *dir;
|
||||
|
||||
dir = e_config_get("guides");
|
||||
snprintf(file, PATH_MAX, "%s/display.bits.db", dir);
|
||||
guides.disp.bg = ebits_load(file);
|
||||
if (guides.disp.bg)
|
||||
if (guides.disp.bg)
|
||||
{
|
||||
ebits_add_to_evas(guides.disp.bg, guides.disp.evas);
|
||||
ebits_set_layer(guides.disp.bg, 0);
|
||||
ebits_show(guides.disp.bg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
mw = 1;
|
||||
mh = 1;
|
||||
|
||||
|
||||
if (guides.disp.bg)
|
||||
{
|
||||
if (!guides.embed.icon)
|
||||
{
|
||||
if (guides.embed.icon) e_embed_free(guides.embed.icon);
|
||||
if (guides.embed.text) e_embed_free(guides.embed.text);
|
||||
guides.embed.icon = e_embed_image_object(guides.disp.bg, "Icon", guides.disp.evas, guides.disp.icon);
|
||||
guides.embed.text = e_embed_text(guides.disp.bg, "Text", guides.disp.evas, guides.disp.text, 0, 0);
|
||||
if (guides.embed.icon)
|
||||
e_embed_free(guides.embed.icon);
|
||||
if (guides.embed.text)
|
||||
e_embed_free(guides.embed.text);
|
||||
guides.embed.icon =
|
||||
e_embed_image_object(guides.disp.bg, "Icon",
|
||||
guides.disp.evas, guides.disp.icon);
|
||||
guides.embed.text =
|
||||
e_embed_text(guides.disp.bg, "Text", guides.disp.evas,
|
||||
guides.disp.text, 0, 0);
|
||||
}
|
||||
ebits_get_real_min_size(guides.disp.bg, &mw, &mh);
|
||||
}
|
||||
|
||||
|
||||
dw = mw;
|
||||
dh = mh;
|
||||
|
||||
if (guides.disp.bg)
|
||||
|
||||
if (guides.disp.bg)
|
||||
{
|
||||
ebits_move(guides.disp.bg, 0, 0);
|
||||
ebits_resize(guides.disp.bg, dw, dh);
|
||||
}
|
||||
if (guides.current.display.loc == E_GUIDES_DISPLAY_LOCATION_SCREEN_MIDDLE)
|
||||
if (guides.current.display.loc ==
|
||||
E_GUIDES_DISPLAY_LOCATION_SCREEN_MIDDLE)
|
||||
{
|
||||
ecore_window_get_geometry(0, NULL, NULL, &sw, &sh);
|
||||
dx = (int)(((double)sw - (double)dw) * guides.current.display.align.x);
|
||||
dy = (int)(((double)sh - (double)dh) * guides.current.display.align.y);
|
||||
dx =
|
||||
(int)(((double)sw -
|
||||
(double)dw) * guides.current.display.align.x);
|
||||
dy =
|
||||
(int)(((double)sh -
|
||||
(double)dh) * guides.current.display.align.y);
|
||||
}
|
||||
else if (guides.current.display.loc == E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE)
|
||||
else if (guides.current.display.loc ==
|
||||
E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE)
|
||||
{
|
||||
dx = guides.current.x + (int)(((double)guides.current.w - (double)dw) * guides.current.display.align.x);
|
||||
dy = guides.current.y + (int)(((double)guides.current.h - (double)dh) * guides.current.display.align.y);
|
||||
dx =
|
||||
guides.current.x +
|
||||
(int)(((double)guides.current.w -
|
||||
(double)dw) * guides.current.display.align.x);
|
||||
dy =
|
||||
guides.current.y +
|
||||
(int)(((double)guides.current.h -
|
||||
(double)dh) * guides.current.display.align.y);
|
||||
}
|
||||
|
||||
|
||||
if (guides.disp.image)
|
||||
{
|
||||
imlib_context_set_image(guides.disp.image);
|
||||
imlib_free_image();
|
||||
guides.disp.image = NULL;
|
||||
}
|
||||
|
||||
|
||||
guides.disp.image = imlib_create_image(dw, dh);
|
||||
imlib_context_set_image(guides.disp.image);
|
||||
imlib_image_set_has_alpha(1);
|
||||
|
@ -246,46 +294,52 @@ e_guides_update(void)
|
|||
evas_set_output_viewport(guides.disp.evas, 0, 0, dw, dh);
|
||||
evas_update_rect(guides.disp.evas, 0, 0, dw, dh);
|
||||
evas_render(guides.disp.evas);
|
||||
{
|
||||
Pixmap pmap, mask;
|
||||
|
||||
pmap = ecore_pixmap_new(guides.win.display, dw, dh, 0);
|
||||
mask = ecore_pixmap_new(guides.win.display, dw, dh, 1);
|
||||
|
||||
imlib_context_set_image(guides.disp.image);
|
||||
|
||||
imlib_context_set_dither_mask(1);
|
||||
imlib_context_set_dither(1);
|
||||
imlib_context_set_drawable(pmap);
|
||||
imlib_context_set_mask(mask);
|
||||
imlib_context_set_blend(0);
|
||||
imlib_context_set_color_modifier(NULL);
|
||||
|
||||
imlib_render_image_on_drawable(0, 0);
|
||||
ecore_window_set_background_pixmap(guides.win.display, pmap);
|
||||
ecore_window_set_shape_mask(guides.win.display, mask);
|
||||
ecore_window_clear(guides.win.display);
|
||||
ecore_pixmap_free(pmap);
|
||||
ecore_pixmap_free(mask);
|
||||
}
|
||||
{
|
||||
Pixmap pmap, mask;
|
||||
|
||||
pmap = ecore_pixmap_new(guides.win.display, dw, dh, 0);
|
||||
mask = ecore_pixmap_new(guides.win.display, dw, dh, 1);
|
||||
|
||||
imlib_context_set_image(guides.disp.image);
|
||||
|
||||
imlib_context_set_dither_mask(1);
|
||||
imlib_context_set_dither(1);
|
||||
imlib_context_set_drawable(pmap);
|
||||
imlib_context_set_mask(mask);
|
||||
imlib_context_set_blend(0);
|
||||
imlib_context_set_color_modifier(NULL);
|
||||
|
||||
imlib_render_image_on_drawable(0, 0);
|
||||
ecore_window_set_background_pixmap(guides.win.display, pmap);
|
||||
ecore_window_set_shape_mask(guides.win.display, mask);
|
||||
ecore_window_clear(guides.win.display);
|
||||
ecore_pixmap_free(pmap);
|
||||
ecore_pixmap_free(mask);
|
||||
}
|
||||
ecore_window_move(guides.win.display, dx, dy);
|
||||
ecore_window_resize(guides.win.display, dw, dh);
|
||||
|
||||
|
||||
if (guides.current.mode == E_GUIDES_BOX)
|
||||
{
|
||||
int fr, fg, fb, fa, br, bg, bb, ba;
|
||||
int x, y, w, h;
|
||||
Pixmap pmap, mask;
|
||||
Imlib_Image image;
|
||||
|
||||
int fr, fg, fb, fa, br, bg, bb, ba;
|
||||
int x, y, w, h;
|
||||
Pixmap pmap, mask;
|
||||
Imlib_Image image;
|
||||
|
||||
imlib_context_set_dither_mask(1);
|
||||
imlib_context_set_dither(1);
|
||||
imlib_context_set_blend(1);
|
||||
imlib_context_set_color_modifier(NULL);
|
||||
|
||||
fr = 255; fg = 255; fb = 255; fa = 255;
|
||||
br = 0 ; bg = 0 ; bb = 0 ; ba = 255;
|
||||
|
||||
|
||||
fr = 255;
|
||||
fg = 255;
|
||||
fb = 255;
|
||||
fa = 255;
|
||||
br = 0;
|
||||
bg = 0;
|
||||
bb = 0;
|
||||
ba = 255;
|
||||
|
||||
x = guides.current.x;
|
||||
y = guides.current.y + 3;
|
||||
w = 3;
|
||||
|
@ -296,13 +350,13 @@ e_guides_update(void)
|
|||
imlib_context_set_image(image);
|
||||
imlib_image_set_has_alpha(1);
|
||||
imlib_image_clear();
|
||||
|
||||
|
||||
imlib_context_set_color(fr, fg, fb, fa);
|
||||
imlib_image_draw_line(1, 0, 1, h - 1, 0);
|
||||
imlib_context_set_color(br, bg, bb, ba);
|
||||
imlib_image_draw_line(0, 0, 0, h - 1, 0);
|
||||
imlib_image_draw_line(2, 0, 2, h - 1, 0);
|
||||
|
||||
|
||||
pmap = ecore_pixmap_new(guides.win.l, w, h, 0);
|
||||
mask = ecore_pixmap_new(guides.win.l, w, h, 1);
|
||||
imlib_context_set_drawable(pmap);
|
||||
|
@ -321,7 +375,7 @@ e_guides_update(void)
|
|||
{
|
||||
ecore_window_resize(guides.win.l, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
x = guides.current.x + guides.current.w - 3;
|
||||
y = guides.current.y + 3;
|
||||
w = 3;
|
||||
|
@ -332,13 +386,13 @@ e_guides_update(void)
|
|||
imlib_context_set_image(image);
|
||||
imlib_image_set_has_alpha(1);
|
||||
imlib_image_clear();
|
||||
|
||||
|
||||
imlib_context_set_color(fr, fg, fb, fa);
|
||||
imlib_image_draw_line(1, 0, 1, h - 1, 0);
|
||||
imlib_context_set_color(br, bg, bb, ba);
|
||||
imlib_image_draw_line(0, 0, 0, h - 1, 0);
|
||||
imlib_image_draw_line(2, 0, 2, h - 1, 0);
|
||||
|
||||
|
||||
pmap = ecore_pixmap_new(guides.win.r, w, h, 0);
|
||||
mask = ecore_pixmap_new(guides.win.r, w, h, 1);
|
||||
imlib_context_set_drawable(pmap);
|
||||
|
@ -357,7 +411,7 @@ e_guides_update(void)
|
|||
{
|
||||
ecore_window_resize(guides.win.r, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
x = guides.current.x;
|
||||
y = guides.current.y;
|
||||
w = guides.current.w;
|
||||
|
@ -368,7 +422,7 @@ e_guides_update(void)
|
|||
imlib_context_set_image(image);
|
||||
imlib_image_set_has_alpha(1);
|
||||
imlib_image_clear();
|
||||
|
||||
|
||||
imlib_context_set_color(br, bg, bb, ba);
|
||||
imlib_image_draw_line(0, 0, w - 1, 0, 0);
|
||||
imlib_image_draw_line(2, 2, w - 3, 2, 0);
|
||||
|
@ -378,7 +432,7 @@ e_guides_update(void)
|
|||
imlib_image_draw_line(1, 1, w - 2, 1, 0);
|
||||
imlib_image_draw_line(1, 2, 1, 2, 0);
|
||||
imlib_image_draw_line(w - 2, 2, w - 2, 2, 0);
|
||||
|
||||
|
||||
pmap = ecore_pixmap_new(guides.win.t, w, h, 0);
|
||||
mask = ecore_pixmap_new(guides.win.t, w, h, 1);
|
||||
imlib_context_set_drawable(pmap);
|
||||
|
@ -397,7 +451,7 @@ e_guides_update(void)
|
|||
{
|
||||
ecore_window_resize(guides.win.t, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
x = guides.current.x;
|
||||
y = guides.current.y + guides.current.h - 3;
|
||||
w = guides.current.w;
|
||||
|
@ -408,7 +462,7 @@ e_guides_update(void)
|
|||
imlib_context_set_image(image);
|
||||
imlib_image_set_has_alpha(1);
|
||||
imlib_image_clear();
|
||||
|
||||
|
||||
imlib_context_set_color(br, bg, bb, ba);
|
||||
imlib_image_draw_line(0, 2, w - 1, 2, 0);
|
||||
imlib_image_draw_line(2, 0, w - 3, 0, 0);
|
||||
|
@ -418,7 +472,7 @@ e_guides_update(void)
|
|||
imlib_image_draw_line(1, 1, w - 2, 1, 0);
|
||||
imlib_image_draw_line(1, 0, 1, 0, 0);
|
||||
imlib_image_draw_line(w - 2, 0, w - 2, 0, 0);
|
||||
|
||||
|
||||
pmap = ecore_pixmap_new(guides.win.b, w, h, 0);
|
||||
mask = ecore_pixmap_new(guides.win.b, w, h, 1);
|
||||
imlib_context_set_drawable(pmap);
|
||||
|
@ -439,7 +493,7 @@ e_guides_update(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (guides.prev.visible != guides.current.visible)
|
||||
{
|
||||
if (guides.current.visible)
|
||||
|
@ -495,7 +549,8 @@ e_guides_show(void)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
if (guides.current.visible) D_RETURN;
|
||||
if (guides.current.visible)
|
||||
D_RETURN;
|
||||
guides.changed = 1;
|
||||
guides.current.visible = 1;
|
||||
|
||||
|
@ -507,7 +562,8 @@ e_guides_hide(void)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
if (!guides.current.visible) D_RETURN;
|
||||
if (!guides.current.visible)
|
||||
D_RETURN;
|
||||
guides.changed = 1;
|
||||
guides.current.visible = 0;
|
||||
|
||||
|
@ -519,8 +575,8 @@ e_guides_move(int x, int y)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
if ((guides.current.x == x) &&
|
||||
(guides.current.y == y)) D_RETURN;
|
||||
if ((guides.current.x == x) && (guides.current.y == y))
|
||||
D_RETURN;
|
||||
guides.changed = 1;
|
||||
guides.current.x = x;
|
||||
guides.current.y = y;
|
||||
|
@ -533,8 +589,8 @@ e_guides_resize(int w, int h)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
if ((guides.current.w == w) &&
|
||||
(guides.current.h == h)) D_RETURN;
|
||||
if ((guides.current.w == w) && (guides.current.h == h))
|
||||
D_RETURN;
|
||||
guides.changed = 1;
|
||||
guides.current.w = w;
|
||||
guides.current.h = h;
|
||||
|
@ -548,7 +604,8 @@ e_guides_display_text(char *text)
|
|||
D_ENTER;
|
||||
|
||||
if ((guides.current.display.text) && (text) &&
|
||||
(!strcmp(guides.current.display.text, text))) D_RETURN;
|
||||
(!strcmp(guides.current.display.text, text)))
|
||||
D_RETURN;
|
||||
guides.changed = 1;
|
||||
IF_FREE(guides.current.display.text);
|
||||
guides.current.display.text = NULL;
|
||||
|
@ -564,7 +621,8 @@ e_guides_display_icon(char *icon)
|
|||
D_ENTER;
|
||||
|
||||
if ((guides.current.display.icon) && (icon) &&
|
||||
(!strcmp(guides.current.display.icon, icon))) D_RETURN;
|
||||
(!strcmp(guides.current.display.icon, icon)))
|
||||
D_RETURN;
|
||||
guides.changed = 1;
|
||||
IF_FREE(guides.current.display.icon);
|
||||
guides.current.display.icon = NULL;
|
||||
|
@ -579,7 +637,8 @@ e_guides_set_display_location(E_Guides_Location loc)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
if (guides.current.display.loc == loc) D_RETURN;
|
||||
if (guides.current.display.loc == loc)
|
||||
D_RETURN;
|
||||
guides.changed = 1;
|
||||
guides.current.display.loc = loc;
|
||||
|
||||
|
@ -592,7 +651,8 @@ e_guides_set_display_alignment(double x, double y)
|
|||
D_ENTER;
|
||||
|
||||
if ((guides.current.display.align.x == x) &&
|
||||
(guides.current.display.align.y == y)) D_RETURN;
|
||||
(guides.current.display.align.y == y))
|
||||
D_RETURN;
|
||||
guides.changed = 1;
|
||||
guides.current.display.align.x = x;
|
||||
guides.current.display.align.y = y;
|
||||
|
@ -605,22 +665,24 @@ e_guides_set_mode(E_Guides_Mode mode)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
if (guides.current.mode == mode) D_RETURN;
|
||||
if (guides.current.mode == mode)
|
||||
D_RETURN;
|
||||
guides.changed = 1;
|
||||
guides.current.mode = mode;
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void e_guides_init(void)
|
||||
void
|
||||
e_guides_init(void)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
guides.changed = 0;
|
||||
|
||||
|
||||
guides.current.display.loc = E_GUIDES_DISPLAY_LOCATION_SCREEN_MIDDLE;
|
||||
guides.current.display.text = NULL;
|
||||
guides.current.display.icon = NULL;
|
||||
guides.current.display.icon = NULL;
|
||||
guides.current.display.align.x = 0.5;
|
||||
guides.current.display.align.y = 0.5;
|
||||
guides.current.x = 0;
|
||||
|
@ -629,21 +691,21 @@ void e_guides_init(void)
|
|||
guides.current.h = 0;
|
||||
guides.current.visible = 0;
|
||||
guides.current.mode = E_GUIDES_BOX;
|
||||
|
||||
|
||||
guides.prev = guides.current;
|
||||
|
||||
|
||||
guides.win.display = 0;
|
||||
guides.win.l = 0;
|
||||
guides.win.r = 0;
|
||||
guides.win.t = 0;
|
||||
guides.win.b = 0;
|
||||
|
||||
|
||||
guides.disp.evas = NULL;
|
||||
guides.disp.bg = NULL;
|
||||
guides.disp.text = NULL;
|
||||
guides.disp.icon = NULL;
|
||||
guides.disp.image = NULL;
|
||||
|
||||
|
||||
ecore_event_filter_idle_handler_add(e_guides_idle, NULL);
|
||||
|
||||
D_RETURN;
|
||||
|
|
41
src/guides.h
41
src/guides.h
|
@ -2,22 +2,21 @@
|
|||
#define E_GUIDES_H
|
||||
|
||||
typedef enum e_guides_mode
|
||||
{
|
||||
E_GUIDES_OPAQUE, /* configure window border & client */
|
||||
E_GUIDES_BORDER, /* unmap client and configure window border */
|
||||
E_GUIDES_BOX, /* box outline */
|
||||
E_GUIDES_TECHNICAL /* lots of lines & info */
|
||||
}
|
||||
{
|
||||
E_GUIDES_OPAQUE, /* configure window border & client */
|
||||
E_GUIDES_BORDER, /* unmap client and configure window border */
|
||||
E_GUIDES_BOX, /* box outline */
|
||||
E_GUIDES_TECHNICAL /* lots of lines & info */
|
||||
}
|
||||
E_Guides_Mode;
|
||||
|
||||
typedef enum e_guides_location
|
||||
{
|
||||
E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE,
|
||||
E_GUIDES_DISPLAY_LOCATION_SCREEN_MIDDLE
|
||||
}
|
||||
{
|
||||
E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE,
|
||||
E_GUIDES_DISPLAY_LOCATION_SCREEN_MIDDLE
|
||||
}
|
||||
E_Guides_Location;
|
||||
|
||||
|
||||
/**
|
||||
* e_guides_init - Guides initialization.
|
||||
*
|
||||
|
@ -25,16 +24,16 @@ E_Guides_Location;
|
|||
* little help windows that pop up when you move or resize
|
||||
* a window.
|
||||
*/
|
||||
void e_guides_init(void);
|
||||
void e_guides_init(void);
|
||||
|
||||
void e_guides_show(void);
|
||||
void e_guides_hide(void);
|
||||
void e_guides_move(int x, int y);
|
||||
void e_guides_resize(int w, int h);
|
||||
void e_guides_display_text(char *text);
|
||||
void e_guides_display_icon(char *icon);
|
||||
void e_guides_set_display_location(E_Guides_Location loc);
|
||||
void e_guides_set_display_alignment(double x, double y);
|
||||
void e_guides_set_mode(E_Guides_Mode mode);
|
||||
void e_guides_show(void);
|
||||
void e_guides_hide(void);
|
||||
void e_guides_move(int x, int y);
|
||||
void e_guides_resize(int w, int h);
|
||||
void e_guides_display_text(char *text);
|
||||
void e_guides_display_icon(char *icon);
|
||||
void e_guides_set_display_location(E_Guides_Location loc);
|
||||
void e_guides_set_display_alignment(double x, double y);
|
||||
void e_guides_set_mode(E_Guides_Mode mode);
|
||||
|
||||
#endif
|
||||
|
|
383
src/icccm.c
383
src/icccm.c
|
@ -38,11 +38,11 @@
|
|||
/* Motif window hints */
|
||||
typedef struct _mwmhints
|
||||
{
|
||||
int flags;
|
||||
int functions;
|
||||
int decorations;
|
||||
int inputMode;
|
||||
int status;
|
||||
int flags;
|
||||
int functions;
|
||||
int decorations;
|
||||
int inputMode;
|
||||
int status;
|
||||
}
|
||||
MWMHints;
|
||||
|
||||
|
@ -59,35 +59,36 @@ e_icccm_move_resize(Window win, int x, int y, int w, int h)
|
|||
void
|
||||
e_icccm_send_focus_to(Window win, int takes_focus)
|
||||
{
|
||||
static Atom a_wm_take_focus = 0;
|
||||
static Atom a_wm_protocols = 0;
|
||||
int msg_focus = 0;
|
||||
int *props;
|
||||
int size;
|
||||
static Atom a_wm_take_focus = 0;
|
||||
static Atom a_wm_protocols = 0;
|
||||
int msg_focus = 0;
|
||||
int *props;
|
||||
int size;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
ECORE_ATOM(a_wm_take_focus, "WM_TAKE_FOCUS");
|
||||
ECORE_ATOM(a_wm_protocols, "WM_PROTOCOLS");
|
||||
|
||||
|
||||
props = ecore_window_property_get(win, a_wm_protocols, XA_ATOM, &size);
|
||||
if (props)
|
||||
{
|
||||
int i, num;
|
||||
|
||||
int i, num;
|
||||
|
||||
num = size / sizeof(int);
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
if (props[i] == (int)a_wm_take_focus) msg_focus = 1;
|
||||
if (props[i] == (int)a_wm_take_focus)
|
||||
msg_focus = 1;
|
||||
}
|
||||
FREE(props);
|
||||
}
|
||||
if (takes_focus)
|
||||
ecore_focus_to_window(win);
|
||||
ecore_focus_to_window(win);
|
||||
if (msg_focus)
|
||||
{
|
||||
unsigned int data[5];
|
||||
|
||||
unsigned int data[5];
|
||||
|
||||
data[0] = a_wm_take_focus;
|
||||
data[1] = CurrentTime;
|
||||
ecore_window_send_client_message(win, a_wm_protocols, 32, data);
|
||||
|
@ -99,33 +100,34 @@ e_icccm_send_focus_to(Window win, int takes_focus)
|
|||
void
|
||||
e_icccm_delete(Window win)
|
||||
{
|
||||
static Atom a_wm_delete_window = 0;
|
||||
static Atom a_wm_protocols = 0;
|
||||
int *props;
|
||||
int size;
|
||||
int del_win = 0;
|
||||
|
||||
static Atom a_wm_delete_window = 0;
|
||||
static Atom a_wm_protocols = 0;
|
||||
int *props;
|
||||
int size;
|
||||
int del_win = 0;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
ECORE_ATOM(a_wm_delete_window, "WM_DELETE_WINDOW");
|
||||
ECORE_ATOM(a_wm_protocols, "WM_PROTOCOLS");
|
||||
|
||||
|
||||
props = ecore_window_property_get(win, a_wm_protocols, XA_ATOM, &size);
|
||||
if (props)
|
||||
{
|
||||
int i, num;
|
||||
|
||||
int i, num;
|
||||
|
||||
num = size / sizeof(int);
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
if (props[i] == (int)a_wm_delete_window) del_win = 1;
|
||||
if (props[i] == (int)a_wm_delete_window)
|
||||
del_win = 1;
|
||||
}
|
||||
FREE(props);
|
||||
}
|
||||
if (del_win)
|
||||
{
|
||||
unsigned int data[5];
|
||||
|
||||
unsigned int data[5];
|
||||
|
||||
data[0] = a_wm_delete_window;
|
||||
data[1] = CurrentTime;
|
||||
ecore_window_send_client_message(win, a_wm_protocols, 32, data);
|
||||
|
@ -141,9 +143,9 @@ e_icccm_delete(Window win)
|
|||
void
|
||||
e_icccm_state_mapped(Window win)
|
||||
{
|
||||
static Atom a_wm_state = 0;
|
||||
unsigned int data[2];
|
||||
|
||||
static Atom a_wm_state = 0;
|
||||
unsigned int data[2];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
ECORE_ATOM(a_wm_state, "WM_STATE");
|
||||
|
@ -157,9 +159,9 @@ e_icccm_state_mapped(Window win)
|
|||
void
|
||||
e_icccm_state_iconified(Window win)
|
||||
{
|
||||
static Atom a_wm_state = 0;
|
||||
unsigned int data[2];
|
||||
|
||||
static Atom a_wm_state = 0;
|
||||
unsigned int data[2];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
ECORE_ATOM(a_wm_state, "WM_STATE");
|
||||
|
@ -173,9 +175,9 @@ e_icccm_state_iconified(Window win)
|
|||
void
|
||||
e_icccm_state_withdrawn(Window win)
|
||||
{
|
||||
static Atom a_wm_state = 0;
|
||||
unsigned int data[2];
|
||||
|
||||
static Atom a_wm_state = 0;
|
||||
unsigned int data[2];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
ECORE_ATOM(a_wm_state, "WM_STATE");
|
||||
|
@ -207,24 +209,24 @@ e_icccm_release(Window win)
|
|||
}
|
||||
|
||||
void
|
||||
e_icccm_get_pos_info(Window win, E_Border *b)
|
||||
e_icccm_get_pos_info(Window win, E_Border * b)
|
||||
{
|
||||
XSizeHints hint;
|
||||
int mask;
|
||||
|
||||
XSizeHints hint;
|
||||
int mask;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (ecore_window_get_wm_size_hints(win, &hint, &mask))
|
||||
{
|
||||
if ((hint.flags & USPosition) || ((hint.flags & PPosition)))
|
||||
{
|
||||
int x, y, w, h;
|
||||
|
||||
int x, y, w, h;
|
||||
|
||||
D("%li %li\n", hint.flags & USPosition, hint.flags & PPosition);
|
||||
b->client.pos.requested = 1;
|
||||
b->client.pos.gravity = NorthWestGravity;
|
||||
if (hint.flags & PWinGravity)
|
||||
b->client.pos.gravity = hint.win_gravity;
|
||||
if (hint.flags & PWinGravity)
|
||||
b->client.pos.gravity = hint.win_gravity;
|
||||
x = y = w = h = 0;
|
||||
ecore_window_get_geometry(win, &x, &y, &w, &h);
|
||||
b->client.pos.x = x;
|
||||
|
@ -240,13 +242,14 @@ e_icccm_get_pos_info(Window win, E_Border *b)
|
|||
}
|
||||
|
||||
void
|
||||
e_icccm_get_size_info(Window win, E_Border *b)
|
||||
e_icccm_get_size_info(Window win, E_Border * b)
|
||||
{
|
||||
int base_w, base_h, min_w, min_h, max_w, max_h, grav, step_w, step_h;
|
||||
double aspect_min, aspect_max;
|
||||
int mask;
|
||||
XSizeHints hint;
|
||||
|
||||
int base_w, base_h, min_w, min_h, max_w, max_h, grav, step_w,
|
||||
step_h;
|
||||
double aspect_min, aspect_max;
|
||||
int mask;
|
||||
XSizeHints hint;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
grav = NorthWestGravity;
|
||||
|
@ -268,38 +271,46 @@ e_icccm_get_size_info(Window win, E_Border *b)
|
|||
min_w = hint.min_width;
|
||||
min_h = hint.min_height;
|
||||
}
|
||||
if (hint.flags & PMaxSize)
|
||||
if (hint.flags & PMaxSize)
|
||||
{
|
||||
max_w = hint.max_width;
|
||||
max_h = hint.max_height;
|
||||
if (max_w < min_w) max_w = min_w;
|
||||
if (max_h < min_h) max_h = min_h;
|
||||
if (max_w < min_w)
|
||||
max_w = min_w;
|
||||
if (max_h < min_h)
|
||||
max_h = min_h;
|
||||
}
|
||||
if (hint.flags & PResizeInc)
|
||||
if (hint.flags & PResizeInc)
|
||||
{
|
||||
step_w = hint.width_inc;
|
||||
step_h = hint.height_inc;
|
||||
if (step_w < 1) step_w = 1;
|
||||
if (step_h < 1) step_h = 1;
|
||||
if (step_w < 1)
|
||||
step_w = 1;
|
||||
if (step_h < 1)
|
||||
step_h = 1;
|
||||
}
|
||||
if (hint.flags & PBaseSize)
|
||||
if (hint.flags & PBaseSize)
|
||||
{
|
||||
base_w = hint.base_width;
|
||||
base_h = hint.base_height;
|
||||
if (base_w > max_w) max_w = base_w;
|
||||
if (base_h > max_h) max_h = base_h;
|
||||
if (base_w > max_w)
|
||||
max_w = base_w;
|
||||
if (base_h > max_h)
|
||||
max_h = base_h;
|
||||
}
|
||||
else
|
||||
{
|
||||
base_w = min_w;
|
||||
base_h = min_h;
|
||||
}
|
||||
if (hint.flags & PAspect)
|
||||
if (hint.flags & PAspect)
|
||||
{
|
||||
if (hint.min_aspect.y > 0)
|
||||
aspect_min = ((double)hint.min_aspect.x) / ((double)hint.min_aspect.y);
|
||||
aspect_min =
|
||||
((double)hint.min_aspect.x) / ((double)hint.min_aspect.y);
|
||||
if (hint.max_aspect.y > 0)
|
||||
aspect_max = ((double)hint.max_aspect.x) / ((double)hint.max_aspect.y);
|
||||
aspect_max =
|
||||
((double)hint.max_aspect.x) / ((double)hint.max_aspect.y);
|
||||
}
|
||||
}
|
||||
b->client.min.w = min_w;
|
||||
|
@ -318,23 +329,24 @@ e_icccm_get_size_info(Window win, E_Border *b)
|
|||
}
|
||||
|
||||
void
|
||||
e_icccm_get_mwm_hints(Window win, E_Border *b)
|
||||
e_icccm_get_mwm_hints(Window win, E_Border * b)
|
||||
{
|
||||
static Atom a_motif_wm_hints = 0;
|
||||
MWMHints *mwmhints;
|
||||
int size;
|
||||
|
||||
static Atom a_motif_wm_hints = 0;
|
||||
MWMHints *mwmhints;
|
||||
int size;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
ECORE_ATOM(a_motif_wm_hints, "_MOTIF_WM_HINTS");
|
||||
|
||||
mwmhints = ecore_window_property_get(win, a_motif_wm_hints, a_motif_wm_hints, &size);
|
||||
|
||||
mwmhints =
|
||||
ecore_window_property_get(win, a_motif_wm_hints, a_motif_wm_hints, &size);
|
||||
if (mwmhints)
|
||||
{
|
||||
int num;
|
||||
|
||||
int num;
|
||||
|
||||
num = size / sizeof(int);
|
||||
if (num < PROP_MWM_HINTS_ELEMENTS)
|
||||
if (num < PROP_MWM_HINTS_ELEMENTS)
|
||||
{
|
||||
FREE(mwmhints);
|
||||
D_RETURN;
|
||||
|
@ -350,9 +362,12 @@ e_icccm_get_mwm_hints(Window win, E_Border *b)
|
|||
b->client.handles = 1;
|
||||
b->client.titlebar = 1;
|
||||
}
|
||||
if (mwmhints->decorations & MWM_DECOR_BORDER) b->client.border = 1;
|
||||
if (mwmhints->decorations & MWM_DECOR_RESIZEH) b->client.handles = 1;
|
||||
if (mwmhints->decorations & MWM_DECOR_TITLE) b->client.titlebar = 1;
|
||||
if (mwmhints->decorations & MWM_DECOR_BORDER)
|
||||
b->client.border = 1;
|
||||
if (mwmhints->decorations & MWM_DECOR_RESIZEH)
|
||||
b->client.handles = 1;
|
||||
if (mwmhints->decorations & MWM_DECOR_TITLE)
|
||||
b->client.titlebar = 1;
|
||||
}
|
||||
FREE(mwmhints);
|
||||
}
|
||||
|
@ -361,23 +376,24 @@ e_icccm_get_mwm_hints(Window win, E_Border *b)
|
|||
}
|
||||
|
||||
void
|
||||
e_icccm_get_layer(Window win, E_Border *b)
|
||||
e_icccm_get_layer(Window win, E_Border * b)
|
||||
{
|
||||
static Atom a_win_layer = 0;
|
||||
int *props;
|
||||
int size;
|
||||
static Atom a_win_layer = 0;
|
||||
int *props;
|
||||
int size;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
ECORE_ATOM(a_win_layer, "_WIN_LAYER");
|
||||
|
||||
|
||||
props = ecore_window_property_get(win, a_win_layer, XA_CARDINAL, &size);
|
||||
if (props)
|
||||
{
|
||||
int num;
|
||||
|
||||
int num;
|
||||
|
||||
num = size / sizeof(int);
|
||||
if (num > 0) b->client.layer = props[0];
|
||||
if (num > 0)
|
||||
b->client.layer = props[0];
|
||||
FREE(props);
|
||||
}
|
||||
|
||||
|
@ -385,17 +401,17 @@ e_icccm_get_layer(Window win, E_Border *b)
|
|||
}
|
||||
|
||||
void
|
||||
e_icccm_get_title(Window win, E_Border *b)
|
||||
e_icccm_get_title(Window win, E_Border * b)
|
||||
{
|
||||
char *title;
|
||||
|
||||
char *title;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
title = ecore_window_get_title(win);
|
||||
|
||||
if (b->client.title)
|
||||
if (b->client.title)
|
||||
{
|
||||
if ((title) && (!strcmp(title, b->client.title)))
|
||||
if ((title) && (!strcmp(title, b->client.title)))
|
||||
{
|
||||
FREE(title);
|
||||
D_RETURN;
|
||||
|
@ -404,15 +420,16 @@ e_icccm_get_title(Window win, E_Border *b)
|
|||
FREE(b->client.title);
|
||||
}
|
||||
b->client.title = NULL;
|
||||
if (title) b->client.title = title;
|
||||
else e_strdup(b->client.title, "No Title");
|
||||
if (title)
|
||||
b->client.title = title;
|
||||
else
|
||||
e_strdup(b->client.title, "No Title");
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
e_icccm_get_class(Window win, E_Border *b)
|
||||
e_icccm_get_class(Window win, E_Border * b)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -421,28 +438,29 @@ e_icccm_get_class(Window win, E_Border *b)
|
|||
b->client.name = NULL;
|
||||
b->client.class = NULL;
|
||||
ecore_window_get_name_class(win, &(b->client.name), &(b->client.class));
|
||||
if (!b->client.name) e_strdup(b->client.name, "Unknown");
|
||||
if (!b->client.class) e_strdup(b->client.class, "Unknown");
|
||||
if (!b->client.name)
|
||||
e_strdup(b->client.name, "Unknown");
|
||||
if (!b->client.class)
|
||||
e_strdup(b->client.class, "Unknown");
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_icccm_get_hints(Window win, E_Border *b)
|
||||
e_icccm_get_hints(Window win, E_Border * b)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
ecore_window_get_hints(win,
|
||||
ecore_window_get_hints(win,
|
||||
&(b->client.takes_focus),
|
||||
&(b->client.initial_state),
|
||||
NULL, NULL, NULL,
|
||||
&(b->client.group));
|
||||
&(b->client.initial_state),
|
||||
NULL, NULL, NULL, &(b->client.group));
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_icccm_get_machine(Window win, E_Border *b)
|
||||
e_icccm_get_machine(Window win, E_Border * b)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -454,7 +472,7 @@ e_icccm_get_machine(Window win, E_Border *b)
|
|||
}
|
||||
|
||||
void
|
||||
e_icccm_get_command(Window win, E_Border *b)
|
||||
e_icccm_get_command(Window win, E_Border * b)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -466,7 +484,7 @@ e_icccm_get_command(Window win, E_Border *b)
|
|||
}
|
||||
|
||||
void
|
||||
e_icccm_get_icon_name(Window win, E_Border *b)
|
||||
e_icccm_get_icon_name(Window win, E_Border * b)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -478,11 +496,10 @@ e_icccm_get_icon_name(Window win, E_Border *b)
|
|||
}
|
||||
|
||||
void
|
||||
e_icccm_get_state(Window win, E_Border *b)
|
||||
e_icccm_get_state(Window win, E_Border * b)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(win);
|
||||
UN(b);
|
||||
|
@ -491,8 +508,8 @@ e_icccm_get_state(Window win, E_Border *b)
|
|||
void
|
||||
e_icccm_set_frame_size(Window win, int l, int r, int t, int b)
|
||||
{
|
||||
static Atom a_e_frame_size = 0;
|
||||
int props[4];
|
||||
static Atom a_e_frame_size = 0;
|
||||
int props[4];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
@ -509,8 +526,8 @@ e_icccm_set_frame_size(Window win, int l, int r, int t, int b)
|
|||
void
|
||||
e_icccm_set_desk_area(Window win, int ax, int ay)
|
||||
{
|
||||
static Atom a_win_area = 0;
|
||||
int props[2];
|
||||
static Atom a_win_area = 0;
|
||||
int props[2];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
@ -525,8 +542,8 @@ e_icccm_set_desk_area(Window win, int ax, int ay)
|
|||
void
|
||||
e_icccm_set_desk_area_size(Window win, int ax, int ay)
|
||||
{
|
||||
static Atom a_win_area_count = 0;
|
||||
int props[2];
|
||||
static Atom a_win_area_count = 0;
|
||||
int props[2];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
@ -541,8 +558,8 @@ e_icccm_set_desk_area_size(Window win, int ax, int ay)
|
|||
void
|
||||
e_icccm_set_desk(Window win, int d)
|
||||
{
|
||||
static Atom a_win_workspace = 0;
|
||||
int props[2];
|
||||
static Atom a_win_workspace = 0;
|
||||
int props[2];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
@ -556,9 +573,9 @@ e_icccm_set_desk(Window win, int d)
|
|||
int
|
||||
e_icccm_is_shaped(Window win)
|
||||
{
|
||||
int w, h, num;
|
||||
int shaped = 1;
|
||||
XRectangle *rect;
|
||||
int w, h, num;
|
||||
int shaped = 1;
|
||||
XRectangle *rect;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
@ -566,89 +583,100 @@ e_icccm_is_shaped(Window win)
|
|||
rect = ecore_window_get_shape_rectangles(win, &num);
|
||||
|
||||
if (!rect)
|
||||
D_RETURN_(1);
|
||||
D_RETURN_(1);
|
||||
|
||||
if ((num == 1) &&
|
||||
if ((num == 1) &&
|
||||
(rect[0].x == 0) && (rect[0].y == 0) &&
|
||||
(rect[0].width == w) && (rect[0].height == h))
|
||||
shaped = 0;
|
||||
shaped = 0;
|
||||
XFree(rect);
|
||||
|
||||
D_RETURN_(shaped);
|
||||
}
|
||||
|
||||
void
|
||||
e_icccm_get_e_hack_launch_id(Window win, E_Border *b)
|
||||
e_icccm_get_e_hack_launch_id(Window win, E_Border * b)
|
||||
{
|
||||
static Atom a_e_hack_launch_id = 0;
|
||||
int *props;
|
||||
int size;
|
||||
static Atom a_e_hack_launch_id = 0;
|
||||
int *props;
|
||||
int size;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
ECORE_ATOM(a_e_hack_launch_id, "_E_HACK_LAUNCH_ID");
|
||||
|
||||
|
||||
props = ecore_window_property_get(win, a_e_hack_launch_id, XA_STRING, &size);
|
||||
if (props)
|
||||
{
|
||||
char *str;
|
||||
|
||||
char *str;
|
||||
|
||||
str = NEW(char, size + 1);
|
||||
ZERO(str, char, size + 1);
|
||||
|
||||
memcpy(str, props, size);
|
||||
b->client.e.launch_id = atoi(str);
|
||||
FREE(str);
|
||||
FREE(props);
|
||||
}
|
||||
else
|
||||
b->client.e.launch_id = 0;
|
||||
b->client.e.launch_id = 0;
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_icccm_handle_property_change(Atom a, E_Border *b)
|
||||
e_icccm_handle_property_change(Atom a, E_Border * b)
|
||||
{
|
||||
static Atom a_wm_normal_hints = 0;
|
||||
static Atom a_motif_wm_hints = 0;
|
||||
static Atom a_wm_name = 0;
|
||||
static Atom a_wm_class = 0;
|
||||
static Atom a_wm_hints = 0;
|
||||
static Atom a_wm_client_machine = 0;
|
||||
static Atom a_wm_command = 0;
|
||||
static Atom a_wm_icon_name = 0;
|
||||
static Atom a_wm_state = 0;
|
||||
static Atom a_e_hack_launch_id = 0;
|
||||
|
||||
static Atom a_wm_normal_hints = 0;
|
||||
static Atom a_motif_wm_hints = 0;
|
||||
static Atom a_wm_name = 0;
|
||||
static Atom a_wm_class = 0;
|
||||
static Atom a_wm_hints = 0;
|
||||
static Atom a_wm_client_machine = 0;
|
||||
static Atom a_wm_command = 0;
|
||||
static Atom a_wm_icon_name = 0;
|
||||
static Atom a_wm_state = 0;
|
||||
static Atom a_e_hack_launch_id = 0;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
ECORE_ATOM(a_wm_normal_hints, "WM_NORMAL_HINTS");
|
||||
ECORE_ATOM(a_motif_wm_hints, "_MOTIF_WM_HINTS");
|
||||
ECORE_ATOM(a_wm_name, "WM_NAME");
|
||||
ECORE_ATOM(a_wm_class, "WM_CLASS");
|
||||
ECORE_ATOM(a_wm_hints, "WM_HINTS");
|
||||
ECORE_ATOM(a_wm_client_machine, "WM_CLIENT_MACHINE");
|
||||
ECORE_ATOM(a_wm_command, "WM_COMMAND");
|
||||
ECORE_ATOM(a_wm_icon_name, "WM_ICON_NAME");
|
||||
ECORE_ATOM(a_wm_state, "WM_STATE");
|
||||
ECORE_ATOM(a_wm_hints, "WM_HINTS");
|
||||
ECORE_ATOM(a_wm_client_machine, "WM_CLIENT_MACHINE");
|
||||
ECORE_ATOM(a_wm_command, "WM_COMMAND");
|
||||
ECORE_ATOM(a_wm_icon_name, "WM_ICON_NAME");
|
||||
ECORE_ATOM(a_wm_state, "WM_STATE");
|
||||
ECORE_ATOM(a_e_hack_launch_id, "_E_HACK_LAUNCH_ID");
|
||||
|
||||
if (a == a_wm_normal_hints) e_icccm_get_size_info(b->win.client, b);
|
||||
else if (a == a_motif_wm_hints) e_icccm_get_mwm_hints(b->win.client, b);
|
||||
else if (a == a_wm_name) e_icccm_get_title(b->win.client, b);
|
||||
else if (a == a_wm_class) e_icccm_get_class(b->win.client, b);
|
||||
else if (a == a_wm_hints) e_icccm_get_hints(b->win.client, b);
|
||||
else if (a == a_wm_client_machine) e_icccm_get_machine(b->win.client, b);
|
||||
else if (a == a_wm_command) e_icccm_get_command(b->win.client, b);
|
||||
else if (a == a_wm_icon_name) e_icccm_get_icon_name(b->win.client, b);
|
||||
else if (a == a_wm_state) e_icccm_get_state(b->win.client, b);
|
||||
else if (a == a_e_hack_launch_id) e_icccm_get_e_hack_launch_id(b->win.client, b);
|
||||
|
||||
|
||||
if (a == a_wm_normal_hints)
|
||||
e_icccm_get_size_info(b->win.client, b);
|
||||
else if (a == a_motif_wm_hints)
|
||||
e_icccm_get_mwm_hints(b->win.client, b);
|
||||
else if (a == a_wm_name)
|
||||
e_icccm_get_title(b->win.client, b);
|
||||
else if (a == a_wm_class)
|
||||
e_icccm_get_class(b->win.client, b);
|
||||
else if (a == a_wm_hints)
|
||||
e_icccm_get_hints(b->win.client, b);
|
||||
else if (a == a_wm_client_machine)
|
||||
e_icccm_get_machine(b->win.client, b);
|
||||
else if (a == a_wm_command)
|
||||
e_icccm_get_command(b->win.client, b);
|
||||
else if (a == a_wm_icon_name)
|
||||
e_icccm_get_icon_name(b->win.client, b);
|
||||
else if (a == a_wm_state)
|
||||
e_icccm_get_state(b->win.client, b);
|
||||
else if (a == a_e_hack_launch_id)
|
||||
e_icccm_get_e_hack_launch_id(b->win.client, b);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_icccm_handle_client_message(Ecore_Event_Message *e)
|
||||
e_icccm_handle_client_message(Ecore_Event_Message * e)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -661,22 +689,21 @@ e_icccm_advertise_e_compat(void)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_icccm_advertise_mwm_compat(void)
|
||||
{
|
||||
static Atom a_motif_wm_info = 0;
|
||||
int props[2];
|
||||
|
||||
static Atom a_motif_wm_info = 0;
|
||||
int props[2];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
ECORE_ATOM(a_motif_wm_info, "_MOTIF_WM_INFO");
|
||||
props[0] = 2;
|
||||
props[0] = ecore_window_root();
|
||||
ecore_window_property_set(0, a_motif_wm_info, a_motif_wm_info, 32, props, 2);
|
||||
ecore_window_property_set(0, a_motif_wm_info, a_motif_wm_info, 32, props, 2);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
@ -684,13 +711,13 @@ e_icccm_advertise_mwm_compat(void)
|
|||
void
|
||||
e_icccm_advertise_gnome_compat(void)
|
||||
{
|
||||
static Atom a_win_supporting_wm_check = 0;
|
||||
static Atom a_win_protocols = 0;
|
||||
static Atom a_win_wm_name = 0;
|
||||
static Atom a_win_wm_version = 0;
|
||||
static Atom a_win_layer = 0;
|
||||
int props[32];
|
||||
Window win;
|
||||
static Atom a_win_supporting_wm_check = 0;
|
||||
static Atom a_win_protocols = 0;
|
||||
static Atom a_win_wm_name = 0;
|
||||
static Atom a_win_wm_version = 0;
|
||||
static Atom a_win_layer = 0;
|
||||
int props[32];
|
||||
Window win;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
@ -700,15 +727,19 @@ e_icccm_advertise_gnome_compat(void)
|
|||
ecore_window_property_set(0, a_win_protocols, XA_ATOM, 32, props, 1);
|
||||
|
||||
ECORE_ATOM(a_win_wm_name, "_WIN_WM_NAME");
|
||||
ecore_window_property_set(0, a_win_wm_name, XA_STRING, 8, "Enlightenment", strlen("Enlightenment"));
|
||||
ecore_window_property_set(0, a_win_wm_name, XA_STRING, 8, "Enlightenment",
|
||||
strlen("Enlightenment"));
|
||||
ECORE_ATOM(a_win_wm_version, "_WIN_WM_VERSION");
|
||||
ecore_window_property_set(0, a_win_wm_version, XA_STRING, 8, "0.17.0", strlen("0.17.0"));
|
||||
|
||||
ecore_window_property_set(0, a_win_wm_version, XA_STRING, 8, "0.17.0",
|
||||
strlen("0.17.0"));
|
||||
|
||||
ECORE_ATOM(a_win_supporting_wm_check, "_WIN_SUPPORTING_WM_CHECK");
|
||||
win = ecore_window_override_new(0, 0, 0, 7, 7);
|
||||
props[0] = win;
|
||||
ecore_window_property_set(win, a_win_supporting_wm_check, XA_CARDINAL, 32, props, 1);
|
||||
ecore_window_property_set(0, a_win_supporting_wm_check, XA_CARDINAL, 32, props, 1);
|
||||
ecore_window_property_set(win, a_win_supporting_wm_check, XA_CARDINAL, 32,
|
||||
props, 1);
|
||||
ecore_window_property_set(0, a_win_supporting_wm_check, XA_CARDINAL, 32,
|
||||
props, 1);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
@ -718,7 +749,6 @@ e_icccm_advertise_kde_compat(void)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
|
@ -727,6 +757,5 @@ e_icccm_advertise_net_compat(void)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
|
65
src/icccm.h
65
src/icccm.h
|
@ -3,37 +3,38 @@
|
|||
|
||||
#include "e.h"
|
||||
|
||||
void e_icccm_move_resize(Window win, int x, int y, int w, int h);
|
||||
void e_icccm_send_focus_to(Window win, int takes_focus);
|
||||
void e_icccm_delete(Window win);
|
||||
void e_icccm_state_mapped(Window win);
|
||||
void e_icccm_state_iconified(Window win);
|
||||
void e_icccm_state_withdrawn(Window win);
|
||||
void e_icccm_adopt(Window win);
|
||||
void e_icccm_release(Window win);
|
||||
void e_icccm_get_pos_info(Window win, E_Border *b);
|
||||
void e_icccm_get_size_info(Window win, E_Border *b);
|
||||
void e_icccm_get_mwm_hints(Window win, E_Border *b);
|
||||
void e_icccm_get_layer(Window win, E_Border *b);
|
||||
void e_icccm_get_title(Window win, E_Border *b);
|
||||
void e_icccm_get_class(Window win, E_Border *b);
|
||||
void e_icccm_get_hints(Window win, E_Border *b);
|
||||
void e_icccm_get_machine(Window win, E_Border *b);
|
||||
void e_icccm_get_command(Window win, E_Border *b);
|
||||
void e_icccm_get_icon_name(Window win, E_Border *b);
|
||||
void e_icccm_get_state(Window win, E_Border *b);
|
||||
void e_icccm_set_frame_size(Window win, int l, int r, int t, int b);
|
||||
void e_icccm_set_desk_area(Window win, int ax, int ay);
|
||||
void e_icccm_set_desk_area_size(Window win, int ax, int ay);
|
||||
void e_icccm_set_desk(Window win, int d);
|
||||
int e_icccm_is_shaped(Window win);
|
||||
void e_icccm_get_e_hack_launch_id(Window win, E_Border *b);
|
||||
void e_icccm_handle_property_change(Atom a, E_Border *b);
|
||||
void e_icccm_handle_client_message(Ecore_Event_Message *e);
|
||||
void e_icccm_advertise_e_compat(void);
|
||||
void e_icccm_advertise_mwm_compat(void);
|
||||
void e_icccm_advertise_gnome_compat(void);
|
||||
void e_icccm_advertise_kde_compat(void);
|
||||
void e_icccm_advertise_net_compat(void);
|
||||
void e_icccm_move_resize(Window win, int x, int y, int w, int h);
|
||||
void e_icccm_send_focus_to(Window win, int takes_focus);
|
||||
void e_icccm_delete(Window win);
|
||||
void e_icccm_state_mapped(Window win);
|
||||
void e_icccm_state_iconified(Window win);
|
||||
void e_icccm_state_withdrawn(Window win);
|
||||
void e_icccm_adopt(Window win);
|
||||
void e_icccm_release(Window win);
|
||||
void e_icccm_get_pos_info(Window win, E_Border * b);
|
||||
void e_icccm_get_size_info(Window win, E_Border * b);
|
||||
void e_icccm_get_mwm_hints(Window win, E_Border * b);
|
||||
void e_icccm_get_layer(Window win, E_Border * b);
|
||||
void e_icccm_get_title(Window win, E_Border * b);
|
||||
void e_icccm_get_class(Window win, E_Border * b);
|
||||
void e_icccm_get_hints(Window win, E_Border * b);
|
||||
void e_icccm_get_machine(Window win, E_Border * b);
|
||||
void e_icccm_get_command(Window win, E_Border * b);
|
||||
void e_icccm_get_icon_name(Window win, E_Border * b);
|
||||
void e_icccm_get_state(Window win, E_Border * b);
|
||||
void e_icccm_set_frame_size(Window win, int l, int r, int t,
|
||||
int b);
|
||||
void e_icccm_set_desk_area(Window win, int ax, int ay);
|
||||
void e_icccm_set_desk_area_size(Window win, int ax, int ay);
|
||||
void e_icccm_set_desk(Window win, int d);
|
||||
int e_icccm_is_shaped(Window win);
|
||||
void e_icccm_get_e_hack_launch_id(Window win, E_Border * b);
|
||||
void e_icccm_handle_property_change(Atom a, E_Border * b);
|
||||
void e_icccm_handle_client_message(Ecore_Event_Message * e);
|
||||
void e_icccm_advertise_e_compat(void);
|
||||
void e_icccm_advertise_mwm_compat(void);
|
||||
void e_icccm_advertise_gnome_compat(void);
|
||||
void e_icccm_advertise_kde_compat(void);
|
||||
void e_icccm_advertise_net_compat(void);
|
||||
|
||||
#endif
|
||||
|
|
2596
src/iconbar.c
2596
src/iconbar.c
File diff suppressed because it is too large
Load Diff
147
src/iconbar.h
147
src/iconbar.h
|
@ -9,6 +9,7 @@
|
|||
#include "resist.h"
|
||||
|
||||
typedef struct _E_Iconbar_Icon E_Iconbar_Icon;
|
||||
|
||||
#ifndef E_ICONBAR_TYPEDEF
|
||||
#define E_ICONBAR_TYPEDEF
|
||||
typedef struct _E_Iconbar E_Iconbar;
|
||||
|
@ -16,86 +17,96 @@ typedef struct _E_Iconbar E_Iconbar;
|
|||
|
||||
#ifndef E_VIEW_TYPEDEF
|
||||
#define E_VIEW_TYPEDEF
|
||||
typedef struct _E_View E_View;
|
||||
typedef struct _E_View E_View;
|
||||
#endif
|
||||
|
||||
struct _E_Iconbar
|
||||
{
|
||||
E_Object o;
|
||||
E_Object o;
|
||||
|
||||
E_View *view;
|
||||
Evas_List icons;
|
||||
|
||||
Evas_Object clip;
|
||||
|
||||
int has_been_scrolled;
|
||||
int changed;
|
||||
int just_saved;
|
||||
float scroll;
|
||||
|
||||
Ebits_Object *bit;
|
||||
struct {
|
||||
double x, y, w, h;
|
||||
} icon_area;
|
||||
E_View *view;
|
||||
Evas_List icons;
|
||||
|
||||
struct {
|
||||
int x, y;
|
||||
} dnd;
|
||||
Evas_Object clip;
|
||||
|
||||
int has_been_scrolled;
|
||||
int changed;
|
||||
int just_saved;
|
||||
float scroll;
|
||||
|
||||
Ebits_Object *bit;
|
||||
struct
|
||||
{
|
||||
double x, y, w, h;
|
||||
}
|
||||
icon_area;
|
||||
|
||||
struct
|
||||
{
|
||||
int x, y;
|
||||
}
|
||||
dnd;
|
||||
};
|
||||
|
||||
struct _E_Iconbar_Icon
|
||||
{
|
||||
E_Object o;
|
||||
E_Object o;
|
||||
|
||||
E_Iconbar *iconbar;
|
||||
|
||||
Evas_Object image;
|
||||
Imlib_Image imlib_image;
|
||||
|
||||
char *image_path;
|
||||
char *exec;
|
||||
|
||||
int hilited;
|
||||
struct {
|
||||
Evas_Object image;
|
||||
char *timer;
|
||||
double start;
|
||||
} hi;
|
||||
|
||||
struct {
|
||||
double x, y;
|
||||
} down, mouse;
|
||||
|
||||
struct {
|
||||
double x, y;
|
||||
double w, h;
|
||||
} current;
|
||||
|
||||
int mouse_down;
|
||||
int moving;
|
||||
|
||||
int wait;
|
||||
float wait_timeout;
|
||||
|
||||
pid_t launch_pid;
|
||||
int launch_id;
|
||||
void *launch_id_cb;
|
||||
E_Iconbar *iconbar;
|
||||
|
||||
Evas_Object image;
|
||||
Imlib_Image imlib_image;
|
||||
|
||||
char *image_path;
|
||||
char *exec;
|
||||
|
||||
int hilited;
|
||||
struct
|
||||
{
|
||||
Evas_Object image;
|
||||
char *timer;
|
||||
double start;
|
||||
}
|
||||
hi;
|
||||
|
||||
struct
|
||||
{
|
||||
double x, y;
|
||||
}
|
||||
down , mouse;
|
||||
|
||||
struct
|
||||
{
|
||||
double x, y;
|
||||
double w, h;
|
||||
}
|
||||
current;
|
||||
|
||||
int mouse_down;
|
||||
int moving;
|
||||
|
||||
int wait;
|
||||
float wait_timeout;
|
||||
|
||||
pid_t launch_pid;
|
||||
int launch_id;
|
||||
void *launch_id_cb;
|
||||
};
|
||||
|
||||
void e_iconbar_init(void);
|
||||
E_Iconbar *e_iconbar_new(E_View *v);
|
||||
void e_iconbar_icon_free(E_Iconbar_Icon *);
|
||||
void e_iconbar_realize(E_Iconbar *ib);
|
||||
void e_iconbar_fix(E_Iconbar *ib);
|
||||
double e_iconbar_get_length(E_Iconbar *ib);
|
||||
void e_iconbar_file_add(E_View *v, char *file);
|
||||
void e_iconbar_file_delete(E_View *v, char *file);
|
||||
void e_iconbar_file_change(E_View *v, char *file);
|
||||
void e_iconbar_save_out_final(E_Iconbar *ib);
|
||||
E_Rect * e_iconbar_get_resist_rect(E_Iconbar *ib);
|
||||
void e_iconbar_set_view_window_spacing(E_Iconbar *ib);
|
||||
void e_iconbar_icon_move(E_Iconbar_Icon *ic, int x, int y);
|
||||
void e_iconbar_dnd_add_files (E_View * v, E_View * source,
|
||||
int num_files, char **dnd_files);
|
||||
void e_iconbar_init(void);
|
||||
E_Iconbar *e_iconbar_new(E_View * v);
|
||||
void e_iconbar_icon_free(E_Iconbar_Icon *);
|
||||
void e_iconbar_realize(E_Iconbar * ib);
|
||||
void e_iconbar_fix(E_Iconbar * ib);
|
||||
double e_iconbar_get_length(E_Iconbar * ib);
|
||||
void e_iconbar_file_add(E_View * v, char *file);
|
||||
void e_iconbar_file_delete(E_View * v, char *file);
|
||||
void e_iconbar_file_change(E_View * v, char *file);
|
||||
void e_iconbar_save_out_final(E_Iconbar * ib);
|
||||
E_Rect *e_iconbar_get_resist_rect(E_Iconbar * ib);
|
||||
void e_iconbar_set_view_window_spacing(E_Iconbar * ib);
|
||||
void e_iconbar_icon_move(E_Iconbar_Icon * ic, int x, int y);
|
||||
void e_iconbar_dnd_add_files(E_View * v, E_View * source,
|
||||
int num_files, char **dnd_files);
|
||||
|
||||
#endif
|
||||
|
|
738
src/icons.c
738
src/icons.c
File diff suppressed because it is too large
Load Diff
142
src/icons.h
142
src/icons.h
|
@ -7,69 +7,84 @@
|
|||
|
||||
#ifndef E_ICON_TYPEDEF
|
||||
#define E_ICON_TYPEDEF
|
||||
typedef struct _E_Icon E_Icon;
|
||||
typedef struct _E_Icon E_Icon;
|
||||
#endif
|
||||
|
||||
#ifndef E_VIEW_TYPEDEF
|
||||
#define E_VIEW_TYPEDEF
|
||||
typedef struct _E_View E_View;
|
||||
typedef struct _E_View E_View;
|
||||
#endif
|
||||
|
||||
struct _E_Icon
|
||||
{
|
||||
E_Object o;
|
||||
E_Object o;
|
||||
|
||||
E_File *file;
|
||||
E_View *view;
|
||||
|
||||
struct {
|
||||
Evas_Object icon;
|
||||
Evas_Object event1;
|
||||
Evas_Object event2;
|
||||
E_Text *text;
|
||||
struct {
|
||||
struct {
|
||||
Ebits_Object icon;
|
||||
Ebits_Object text;
|
||||
} over, under;
|
||||
} sel;
|
||||
} obj;
|
||||
|
||||
struct {
|
||||
int hilited;
|
||||
int clicked;
|
||||
int selected;
|
||||
int running;
|
||||
int disabled;
|
||||
int visible;
|
||||
int just_selected;
|
||||
int just_executed;
|
||||
int drag_delete;
|
||||
} state;
|
||||
|
||||
struct {
|
||||
int x, y, w, h;
|
||||
struct {
|
||||
int w, h;
|
||||
} icon;
|
||||
struct {
|
||||
int w, h;
|
||||
} text;
|
||||
} geom, prev_geom;
|
||||
|
||||
struct {
|
||||
int write_xy;
|
||||
} q;
|
||||
|
||||
int changed;
|
||||
E_File *file;
|
||||
E_View *view;
|
||||
|
||||
struct
|
||||
{
|
||||
Evas_Object icon;
|
||||
Evas_Object event1;
|
||||
Evas_Object event2;
|
||||
E_Text *text;
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
Ebits_Object icon;
|
||||
Ebits_Object text;
|
||||
}
|
||||
over , under;
|
||||
}
|
||||
sel;
|
||||
}
|
||||
obj;
|
||||
|
||||
struct
|
||||
{
|
||||
int hilited;
|
||||
int clicked;
|
||||
int selected;
|
||||
int running;
|
||||
int disabled;
|
||||
int visible;
|
||||
int just_selected;
|
||||
int just_executed;
|
||||
int drag_delete;
|
||||
}
|
||||
state;
|
||||
|
||||
struct
|
||||
{
|
||||
int x, y, w, h;
|
||||
struct
|
||||
{
|
||||
int w, h;
|
||||
}
|
||||
icon;
|
||||
struct
|
||||
{
|
||||
int w, h;
|
||||
}
|
||||
text;
|
||||
}
|
||||
geom , prev_geom;
|
||||
|
||||
struct
|
||||
{
|
||||
int write_xy;
|
||||
}
|
||||
q;
|
||||
|
||||
int changed;
|
||||
};
|
||||
|
||||
|
||||
E_Icon *e_icon_new(void);
|
||||
void e_icon_update_state(E_Icon *ic);
|
||||
void e_icon_invert_selection(E_Icon *ic);
|
||||
void e_icon_select(E_Icon *ic);
|
||||
void e_icon_deselect(E_Icon *ic);
|
||||
E_Icon *e_icon_new(void);
|
||||
void e_icon_update_state(E_Icon * ic);
|
||||
void e_icon_invert_selection(E_Icon * ic);
|
||||
void e_icon_select(E_Icon * ic);
|
||||
void e_icon_deselect(E_Icon * ic);
|
||||
|
||||
/**
|
||||
* e_icon_exec - handles execution paths when user activates an icon
|
||||
|
@ -78,17 +93,18 @@ void e_icon_deselect(E_Icon *ic);
|
|||
* This function takes care of opening views when the user activates a
|
||||
* directory, launching commands when an executable is activated etc.
|
||||
*/
|
||||
void e_icon_exec(E_Icon *ic);
|
||||
void e_icon_exec(E_Icon * ic);
|
||||
|
||||
void e_icon_initial_show(E_Icon *ic);
|
||||
void e_icon_set_mime(E_Icon *ic, char *base, char *mime);
|
||||
void e_icon_set_link(E_Icon *ic, char *link);
|
||||
E_Icon *e_icon_find_by_file(E_View *view, char *file);
|
||||
void e_icon_show(E_Icon *ic);
|
||||
void e_icon_hide(E_Icon *ic);
|
||||
void e_icon_hide_delete_pending(E_Icon *ic);
|
||||
void e_icon_show_delete_end(E_Icon *ic, E_dnd_enum dnd_pending_mode);
|
||||
void e_icon_apply_xy(E_Icon *ic);
|
||||
void e_icon_check_permissions(E_Icon *ic);
|
||||
void e_icon_initial_show(E_Icon * ic);
|
||||
void e_icon_set_mime(E_Icon * ic, char *base, char *mime);
|
||||
void e_icon_set_link(E_Icon * ic, char *link);
|
||||
E_Icon *e_icon_find_by_file(E_View * view, char *file);
|
||||
void e_icon_show(E_Icon * ic);
|
||||
void e_icon_hide(E_Icon * ic);
|
||||
void e_icon_hide_delete_pending(E_Icon * ic);
|
||||
void e_icon_show_delete_end(E_Icon * ic,
|
||||
E_dnd_enum dnd_pending_mode);
|
||||
void e_icon_apply_xy(E_Icon * ic);
|
||||
void e_icon_check_permissions(E_Icon * ic);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include "e.h"
|
||||
|
||||
void e_ipc_init(void);
|
||||
void e_ipc_init(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
34
src/keys.c
34
src/keys.c
|
@ -2,42 +2,42 @@
|
|||
#include "keys.h"
|
||||
#include "actions.h"
|
||||
|
||||
static void e_key_down(Ecore_Event * ev);
|
||||
static void e_key_up(Ecore_Event * ev);
|
||||
static void e_key_down(Ecore_Event * ev);
|
||||
static void e_key_up(Ecore_Event * ev);
|
||||
|
||||
static void
|
||||
static void
|
||||
e_key_down(Ecore_Event * ev)
|
||||
{
|
||||
Ecore_Event_Key_Down *e;
|
||||
|
||||
Ecore_Event_Key_Down *e;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
e = ev->event;
|
||||
if (e->win == ecore_get_key_grab_win())
|
||||
{
|
||||
e_action_stop("Key_Binding", ACT_KEY_DOWN, 0, e->key, e->mods,
|
||||
NULL, NULL, 0, 0, 0, 0);
|
||||
e_action_start("Key_Binding", ACT_KEY_DOWN, 0, e->key, e->mods,
|
||||
e_action_stop("Key_Binding", ACT_KEY_DOWN, 0, e->key, e->mods,
|
||||
NULL, NULL, 0, 0, 0, 0);
|
||||
e_action_start("Key_Binding", ACT_KEY_DOWN, 0, e->key, e->mods,
|
||||
NULL, NULL, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
static void
|
||||
static void
|
||||
e_key_up(Ecore_Event * ev)
|
||||
{
|
||||
Ecore_Event_Key_Up *e;
|
||||
|
||||
Ecore_Event_Key_Up *e;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
e = ev->event;
|
||||
if (e->win == ecore_get_key_grab_win())
|
||||
{
|
||||
e_action_stop("Key_Binding", ACT_KEY_UP, 0, e->key, e->mods,
|
||||
NULL, NULL, 0, 0, 0, 0);
|
||||
e_action_start("Key_Binding", ACT_KEY_UP, 0, e->key, e->mods,
|
||||
e_action_stop("Key_Binding", ACT_KEY_UP, 0, e->key, e->mods,
|
||||
NULL, NULL, 0, 0, 0, 0);
|
||||
e_action_start("Key_Binding", ACT_KEY_UP, 0, e->key, e->mods,
|
||||
NULL, NULL, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
|
@ -50,9 +50,9 @@ e_keys_init(void)
|
|||
|
||||
/* load up our actions .... once to get some grabbed keys */
|
||||
e_action_start("", ACT_KEY_DOWN, 0, NULL, ECORE_EVENT_KEY_MODIFIER_NONE,
|
||||
NULL, NULL, 0, 0, 0, 0);
|
||||
ecore_event_filter_handler_add(ECORE_EVENT_KEY_DOWN, e_key_down);
|
||||
ecore_event_filter_handler_add(ECORE_EVENT_KEY_UP, e_key_up);
|
||||
NULL, NULL, 0, 0, 0, 0);
|
||||
ecore_event_filter_handler_add(ECORE_EVENT_KEY_DOWN, e_key_down);
|
||||
ecore_event_filter_handler_add(ECORE_EVENT_KEY_UP, e_key_up);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
|
|
@ -3,8 +3,10 @@
|
|||
|
||||
#include "e.h"
|
||||
|
||||
void e_keys_init(void);
|
||||
void e_keys_grab(char *key, Ecore_Event_Key_Modifiers mods, int anymod);
|
||||
void e_keys_ungrab(char *key, Ecore_Event_Key_Modifiers mods, int anymod);
|
||||
void e_keys_init(void);
|
||||
void e_keys_grab(char *key, Ecore_Event_Key_Modifiers mods,
|
||||
int anymod);
|
||||
void e_keys_ungrab(char *key, Ecore_Event_Key_Modifiers mods,
|
||||
int anymod);
|
||||
|
||||
#endif
|
||||
|
|
58
src/main.c
58
src/main.c
|
@ -25,36 +25,36 @@
|
|||
#include <X11/Xproto.h>
|
||||
|
||||
#ifdef E_PROF
|
||||
Evas_List __e_profiles = NULL;
|
||||
Evas_List __e_profiles = NULL;
|
||||
#endif
|
||||
|
||||
static void cb_exit(void);
|
||||
static void wm_running_error(Display * d, XErrorEvent * ev);
|
||||
static void setup(void);
|
||||
static void cb_exit(void);
|
||||
static void wm_running_error(Display * d, XErrorEvent * ev);
|
||||
static void setup(void);
|
||||
|
||||
static void cb_exit(void)
|
||||
static void
|
||||
cb_exit(void)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
e_fs_cleanup();
|
||||
E_PROF_DUMP;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
static void
|
||||
wm_running_error(Display * d, XErrorEvent * ev)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if ((ev->request_code == X_ChangeWindowAttributes) &&
|
||||
if ((ev->request_code == X_ChangeWindowAttributes) &&
|
||||
(ev->error_code == BadAccess))
|
||||
{
|
||||
fprintf(stderr, "A window manager is already running.\n");
|
||||
fprintf(stderr, "Exiting Enlightenment. Error.\n");
|
||||
exit(-2);
|
||||
}
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
UN(d);
|
||||
|
@ -64,7 +64,7 @@ static void
|
|||
setup(void)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
||||
ecore_grab();
|
||||
ecore_sync();
|
||||
|
||||
|
@ -79,45 +79,43 @@ setup(void)
|
|||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
char *display = NULL;
|
||||
int i;
|
||||
char *display = NULL;
|
||||
int i;
|
||||
|
||||
srand(time(NULL));
|
||||
atexit(cb_exit);
|
||||
e_exec_set_args(argc, argv);
|
||||
|
||||
|
||||
e_config_init();
|
||||
|
||||
/* Check command line options here: */
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if (( (!strcmp("-d", argv[i]))
|
||||
|| (!strcmp("-disp", argv[i]))
|
||||
|| (!strcmp("-display", argv[i]))
|
||||
|| (!strcmp("--display", argv[i])))
|
||||
&& (argc - i > 1))
|
||||
if (((!strcmp("-d", argv[i]))
|
||||
|| (!strcmp("-disp", argv[i]))
|
||||
|| (!strcmp("-display", argv[i]))
|
||||
|| (!strcmp("--display", argv[i]))) && (argc - i > 1))
|
||||
{
|
||||
display = argv[++i];
|
||||
}
|
||||
else if ( (!strcmp("-h", argv[i]))
|
||||
|| (!strcmp("-?", argv[i]))
|
||||
|| (!strcmp("-help", argv[i]))
|
||||
|| (!strcmp("--help", argv[i])))
|
||||
else if ((!strcmp("-h", argv[i]))
|
||||
|| (!strcmp("-?", argv[i]))
|
||||
|| (!strcmp("-help", argv[i])) || (!strcmp("--help", argv[i])))
|
||||
{
|
||||
printf("enlightenment options: \n"
|
||||
"\t[-d | -disp | -display --display] display_name \n"
|
||||
"\t[-v | -version | --version] \n");
|
||||
exit(0);
|
||||
}
|
||||
else if ( (!strcmp("-v", argv[i]))
|
||||
|| (!strcmp("-version", argv[i]))
|
||||
else if ((!strcmp("-v", argv[i]))
|
||||
|| (!strcmp("-version", argv[i]))
|
||||
|| (!strcmp("--version", argv[i])))
|
||||
{
|
||||
printf("Enlightenment Version: %s\n", ENLIGHTENMENT_VERSION);
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!ecore_display_init(display))
|
||||
{
|
||||
fprintf(stderr, "Enlightenment Error: cannot connect to display!\n");
|
||||
|
@ -130,7 +128,7 @@ main(int argc, char **argv)
|
|||
ecore_event_signal_init();
|
||||
ecore_event_filter_init();
|
||||
ecore_event_x_init();
|
||||
|
||||
|
||||
/* become a wm */
|
||||
ecore_grab();
|
||||
ecore_sync();
|
||||
|
@ -154,15 +152,15 @@ main(int argc, char **argv)
|
|||
e_place_init();
|
||||
e_cursors_init();
|
||||
e_iconbar_init();
|
||||
|
||||
|
||||
#ifdef USE_FERITE
|
||||
e_ferite_init();
|
||||
#endif
|
||||
|
||||
e_desktops_init_file_display(e_desktops_get(0));
|
||||
e_desktops_init_file_display(e_desktops_get(0));
|
||||
|
||||
setup();
|
||||
|
||||
|
||||
ecore_event_loop();
|
||||
|
||||
#ifdef USE_FERITE
|
||||
|
|
198
src/match.c
198
src/match.c
|
@ -3,47 +3,70 @@
|
|||
#include "config.h"
|
||||
|
||||
void
|
||||
e_match_set_props(E_Border *b)
|
||||
e_match_set_props(E_Border * b)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
E_DB_File *db;
|
||||
int ok;
|
||||
|
||||
char buf[PATH_MAX];
|
||||
E_DB_File *db;
|
||||
int ok;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if ((!b->client.name) || (!b->client.class)) D_RETURN;
|
||||
|
||||
if ((!b->client.name) || (!b->client.class))
|
||||
D_RETURN;
|
||||
db = e_db_open(e_config_get("match"));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/match", b->client.name, b->client.class);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/match", b->client.name,
|
||||
b->client.class);
|
||||
ok = e_db_int_get(db, buf, &(b->client.matched.matched));
|
||||
if (!ok)
|
||||
{
|
||||
e_db_close(db);
|
||||
D_RETURN;
|
||||
}
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/prog_location/ignore", b->client.name, b->client.class);
|
||||
b->client.matched.prog_location.matched = e_db_int_get(db, buf, &(b->client.matched.prog_location.ignore));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/border/border", b->client.name, b->client.class);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/prog_location/ignore", b->client.name,
|
||||
b->client.class);
|
||||
b->client.matched.prog_location.matched =
|
||||
e_db_int_get(db, buf, &(b->client.matched.prog_location.ignore));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/border/border", b->client.name,
|
||||
b->client.class);
|
||||
b->client.matched.border.style = e_db_str_get(db, buf);
|
||||
b->client.matched.border.matched = (int)b->client.matched.border.style;
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/location/x", b->client.name, b->client.class);
|
||||
b->client.matched.location.matched = e_db_int_get(db, buf, &(b->client.matched.location.x));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/location/y", b->client.name, b->client.class);
|
||||
b->client.matched.location.matched = e_db_int_get(db, buf, &(b->client.matched.location.y));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/desk_area/x", b->client.name, b->client.class);
|
||||
b->client.matched.desk_area.matched = e_db_int_get(db, buf, &(b->client.matched.desk_area.x));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/desk_area/y", b->client.name, b->client.class);
|
||||
b->client.matched.desk_area.matched = e_db_int_get(db, buf, &(b->client.matched.desk_area.y));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/size/w", b->client.name, b->client.class);
|
||||
b->client.matched.size.matched = e_db_int_get(db, buf, &(b->client.matched.size.w));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/size/h", b->client.name, b->client.class);
|
||||
b->client.matched.size.matched = e_db_int_get(db, buf, &(b->client.matched.size.h));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/desktop/desk", b->client.name, b->client.class);
|
||||
b->client.matched.desktop.matched = e_db_int_get(db, buf, &(b->client.matched.desktop.desk));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/sticky/sticky", b->client.name, b->client.class);
|
||||
b->client.matched.sticky.matched = e_db_int_get(db, buf, &(b->client.matched.sticky.sticky));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/layer/layer", b->client.name, b->client.class);
|
||||
b->client.matched.layer.matched = e_db_int_get(db, buf, &(b->client.matched.layer.layer));
|
||||
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/location/x", b->client.name,
|
||||
b->client.class);
|
||||
b->client.matched.location.matched =
|
||||
e_db_int_get(db, buf, &(b->client.matched.location.x));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/location/y", b->client.name,
|
||||
b->client.class);
|
||||
b->client.matched.location.matched =
|
||||
e_db_int_get(db, buf, &(b->client.matched.location.y));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/desk_area/x", b->client.name,
|
||||
b->client.class);
|
||||
b->client.matched.desk_area.matched =
|
||||
e_db_int_get(db, buf, &(b->client.matched.desk_area.x));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/desk_area/y", b->client.name,
|
||||
b->client.class);
|
||||
b->client.matched.desk_area.matched =
|
||||
e_db_int_get(db, buf, &(b->client.matched.desk_area.y));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/size/w", b->client.name,
|
||||
b->client.class);
|
||||
b->client.matched.size.matched =
|
||||
e_db_int_get(db, buf, &(b->client.matched.size.w));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/size/h", b->client.name,
|
||||
b->client.class);
|
||||
b->client.matched.size.matched =
|
||||
e_db_int_get(db, buf, &(b->client.matched.size.h));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/desktop/desk", b->client.name,
|
||||
b->client.class);
|
||||
b->client.matched.desktop.matched =
|
||||
e_db_int_get(db, buf, &(b->client.matched.desktop.desk));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/sticky/sticky", b->client.name,
|
||||
b->client.class);
|
||||
b->client.matched.sticky.matched =
|
||||
e_db_int_get(db, buf, &(b->client.matched.sticky.sticky));
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/layer/layer", b->client.name,
|
||||
b->client.class);
|
||||
b->client.matched.layer.matched =
|
||||
e_db_int_get(db, buf, &(b->client.matched.layer.layer));
|
||||
|
||||
if (b->client.matched.prog_location.matched)
|
||||
{
|
||||
b->client.pos.requested = 0;
|
||||
|
@ -63,8 +86,12 @@ e_match_set_props(E_Border *b)
|
|||
}
|
||||
if (b->client.matched.desk_area.matched)
|
||||
{
|
||||
b->client.pos.x += (b->client.matched.desk_area.x - b->desk->desk.area.x) * b->desk->real.w;
|
||||
b->client.pos.y += (b->client.matched.desk_area.y - b->desk->desk.area.y) * b->desk->real.h;
|
||||
b->client.pos.x +=
|
||||
(b->client.matched.desk_area.x -
|
||||
b->desk->desk.area.x) * b->desk->real.w;
|
||||
b->client.pos.y +=
|
||||
(b->client.matched.desk_area.y -
|
||||
b->desk->desk.area.y) * b->desk->real.h;
|
||||
b->client.area.x = b->client.matched.desk_area.x;
|
||||
b->client.area.y = b->client.matched.desk_area.y;
|
||||
}
|
||||
|
@ -72,13 +99,15 @@ e_match_set_props(E_Border *b)
|
|||
{
|
||||
b->current.requested.w = b->client.matched.size.w;
|
||||
b->current.requested.h = b->client.matched.size.h;
|
||||
ecore_window_resize(b->win.client, b->client.matched.size.w, b->client.matched.size.h);
|
||||
ecore_window_resize(b->win.client, b->client.matched.size.w,
|
||||
b->client.matched.size.h);
|
||||
}
|
||||
if (b->client.matched.desktop.matched)
|
||||
{
|
||||
b->client.desk = b->client.matched.desktop.desk;
|
||||
b->client.desk = b->client.matched.desktop.desk;
|
||||
e_border_raise(b);
|
||||
if (b->client.desk != b->desk->desk.desk) b->current.requested.visible = 0;
|
||||
if (b->client.desk != b->desk->desk.desk)
|
||||
b->current.requested.visible = 0;
|
||||
b->client.no_place = 1;
|
||||
}
|
||||
if (b->client.matched.sticky.matched)
|
||||
|
@ -91,95 +120,112 @@ e_match_set_props(E_Border *b)
|
|||
}
|
||||
|
||||
e_db_close(db);
|
||||
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_match_save_props(E_Border *b)
|
||||
e_match_save_props(E_Border * b)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
E_DB_File *db;
|
||||
|
||||
char buf[PATH_MAX];
|
||||
E_DB_File *db;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if ((!b->client.name) || (!b->client.class)) D_RETURN;
|
||||
|
||||
|
||||
if ((!b->client.name) || (!b->client.class))
|
||||
D_RETURN;
|
||||
|
||||
db = e_db_open(e_config_get("match"));
|
||||
if (!db) D_RETURN;
|
||||
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/match", b->client.name, b->client.class);
|
||||
if (!db)
|
||||
D_RETURN;
|
||||
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/match", b->client.name,
|
||||
b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.matched);
|
||||
|
||||
if (b->client.matched.location.matched)
|
||||
if (b->client.matched.location.matched)
|
||||
{
|
||||
b->client.matched.location.x = b->current.x;
|
||||
b->client.matched.location.y = b->current.y;
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/location/x", b->client.name, b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.location.x);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/location/y", b->client.name, b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.location.y);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/location/x", b->client.name,
|
||||
b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.location.x);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/location/y", b->client.name,
|
||||
b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.location.y);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/location/x", b->client.name, b->client.class);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/location/x", b->client.name,
|
||||
b->client.class);
|
||||
e_db_data_del(db, buf);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/location/y", b->client.name, b->client.class);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/location/y", b->client.name,
|
||||
b->client.class);
|
||||
e_db_data_del(db, buf);
|
||||
}
|
||||
|
||||
if (b->client.matched.size.matched)
|
||||
if (b->client.matched.size.matched)
|
||||
{
|
||||
b->client.matched.size.w = b->client.w;
|
||||
b->client.matched.size.h = b->client.h;
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/size/w", b->client.name, b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.size.w);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/size/h", b->client.name, b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.size.h);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/size/w", b->client.name,
|
||||
b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.size.w);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/size/h", b->client.name,
|
||||
b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.size.h);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/size/w", b->client.name, b->client.class);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/size/w", b->client.name,
|
||||
b->client.class);
|
||||
e_db_data_del(db, buf);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/size/h", b->client.name, b->client.class);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/size/h", b->client.name,
|
||||
b->client.class);
|
||||
e_db_data_del(db, buf);
|
||||
}
|
||||
|
||||
if (b->client.matched.desktop.matched)
|
||||
|
||||
if (b->client.matched.desktop.matched)
|
||||
{
|
||||
b->client.matched.desktop.desk = b->client.desk;
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/desktop/desk", b->client.name, b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.desktop.desk);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/desktop/desk", b->client.name,
|
||||
b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.desktop.desk);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/desktop/desk", b->client.name, b->client.class);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/desktop/desk", b->client.name,
|
||||
b->client.class);
|
||||
e_db_data_del(db, buf);
|
||||
}
|
||||
|
||||
if (b->client.matched.sticky.matched)
|
||||
|
||||
if (b->client.matched.sticky.matched)
|
||||
{
|
||||
b->client.matched.sticky.sticky = b->client.sticky;
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/sticky/sticky", b->client.name, b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.sticky.sticky);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/sticky/sticky", b->client.name,
|
||||
b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.sticky.sticky);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/sticky/sticky", b->client.name, b->client.class);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/sticky/sticky", b->client.name,
|
||||
b->client.class);
|
||||
e_db_data_del(db, buf);
|
||||
}
|
||||
|
||||
if (b->client.matched.prog_location.matched)
|
||||
|
||||
if (b->client.matched.prog_location.matched)
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/prog_location/ignore", b->client.name, b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.prog_location.ignore);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/prog_location/ignore",
|
||||
b->client.name, b->client.class);
|
||||
e_db_int_set(db, buf, b->client.matched.prog_location.ignore);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/prog_location/ignore", b->client.name, b->client.class);
|
||||
snprintf(buf, PATH_MAX, "match/%s/%s/prog_location/ignore",
|
||||
b->client.name, b->client.class);
|
||||
e_db_data_del(db, buf);
|
||||
}
|
||||
|
||||
|
||||
e_db_close(db);
|
||||
e_db_runtime_flush();
|
||||
D_RETURN;
|
||||
|
|
|
@ -5,8 +5,7 @@
|
|||
#include "border.h"
|
||||
#include "desktops.h"
|
||||
|
||||
void e_match_set_props(E_Border *b);
|
||||
void e_match_save_props(E_Border *b);
|
||||
void e_match_set_props(E_Border * b);
|
||||
void e_match_save_props(E_Border * b);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
1193
src/menu.c
1193
src/menu.c
File diff suppressed because it is too large
Load Diff
254
src/menu.h
254
src/menu.h
|
@ -4,141 +4,161 @@
|
|||
#include "e.h"
|
||||
#include "object.h"
|
||||
|
||||
typedef struct _E_Menu E_Menu;
|
||||
typedef struct _E_Menu_Item E_Menu_Item;
|
||||
typedef struct _E_Menu E_Menu;
|
||||
typedef struct _E_Menu_Item E_Menu_Item;
|
||||
|
||||
struct _E_Menu
|
||||
{
|
||||
E_Object o;
|
||||
|
||||
struct {
|
||||
int x, y, w, h;
|
||||
int visible;
|
||||
} current, previous;
|
||||
struct {
|
||||
int l, r, t, b;
|
||||
} border, sel_border;
|
||||
struct {
|
||||
Window main, evas;
|
||||
} win;
|
||||
Evas evas;
|
||||
Ebits_Object bg;
|
||||
Evas_List entries;
|
||||
char *bg_file;
|
||||
|
||||
int first_expose;
|
||||
E_Object o;
|
||||
|
||||
int recalc_entries;
|
||||
int redo_sel;
|
||||
int changed;
|
||||
|
||||
int delete_me;
|
||||
|
||||
struct {
|
||||
int state, icon, text;
|
||||
} size;
|
||||
struct {
|
||||
int icon, state;
|
||||
} pad;
|
||||
|
||||
E_Menu_Item *selected;
|
||||
|
||||
Time time;
|
||||
struct
|
||||
{
|
||||
int x, y, w, h;
|
||||
int visible;
|
||||
}
|
||||
current , previous;
|
||||
struct
|
||||
{
|
||||
int l, r, t, b;
|
||||
}
|
||||
border , sel_border;
|
||||
struct
|
||||
{
|
||||
Window main, evas;
|
||||
}
|
||||
win;
|
||||
Evas evas;
|
||||
Ebits_Object bg;
|
||||
Evas_List entries;
|
||||
char *bg_file;
|
||||
|
||||
void (*func_hide) (E_Menu *m, void *data);
|
||||
void *func_hide_data;
|
||||
int first_expose;
|
||||
|
||||
int recalc_entries;
|
||||
int redo_sel;
|
||||
int changed;
|
||||
|
||||
int delete_me;
|
||||
|
||||
struct
|
||||
{
|
||||
int state, icon, text;
|
||||
}
|
||||
size;
|
||||
struct
|
||||
{
|
||||
int icon, state;
|
||||
}
|
||||
pad;
|
||||
|
||||
E_Menu_Item *selected;
|
||||
|
||||
Time time;
|
||||
|
||||
void (*func_hide) (E_Menu * m, void *data);
|
||||
void *func_hide_data;
|
||||
};
|
||||
|
||||
struct _E_Menu_Item
|
||||
{
|
||||
int x, y;
|
||||
struct {
|
||||
struct {
|
||||
int w, h;
|
||||
} min;
|
||||
int w, h;
|
||||
} size;
|
||||
|
||||
Ebits_Object bg;
|
||||
char *bg_file;
|
||||
int selected;
|
||||
int x, y;
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
int w, h;
|
||||
}
|
||||
min;
|
||||
int w, h;
|
||||
}
|
||||
size;
|
||||
|
||||
Evas_Object obj_entry;
|
||||
|
||||
char *str;
|
||||
Evas_Object obj_text;
|
||||
|
||||
char *icon;
|
||||
Evas_Object obj_icon;
|
||||
int scale_icon;
|
||||
|
||||
Ebits_Object state;
|
||||
char *state_file;
|
||||
|
||||
Ebits_Object sep;
|
||||
char *sep_file;
|
||||
|
||||
int separator;
|
||||
int radio_group;
|
||||
int radio;
|
||||
int check;
|
||||
int on;
|
||||
|
||||
E_Menu *menu;
|
||||
E_Menu *submenu;
|
||||
|
||||
void (*func_select) (E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
void *func_select_data;
|
||||
Ebits_Object bg;
|
||||
char *bg_file;
|
||||
int selected;
|
||||
|
||||
Evas_Object obj_entry;
|
||||
|
||||
char *str;
|
||||
Evas_Object obj_text;
|
||||
|
||||
char *icon;
|
||||
Evas_Object obj_icon;
|
||||
int scale_icon;
|
||||
|
||||
Ebits_Object state;
|
||||
char *state_file;
|
||||
|
||||
Ebits_Object sep;
|
||||
char *sep_file;
|
||||
|
||||
int separator;
|
||||
int radio_group;
|
||||
int radio;
|
||||
int check;
|
||||
int on;
|
||||
|
||||
E_Menu *menu;
|
||||
E_Menu *submenu;
|
||||
|
||||
void (*func_select) (E_Menu * m, E_Menu_Item * mi,
|
||||
void *data);
|
||||
void *func_select_data;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* e_menu_init - Menu event handling initalization.
|
||||
*
|
||||
* This function hooks in the necessary event handlers for
|
||||
* menu handling.
|
||||
*/
|
||||
void e_menu_init(void );
|
||||
void e_menu_init(void);
|
||||
|
||||
void e_menu_callback_item(E_Menu *m, E_Menu_Item *mi);
|
||||
void e_menu_item_set_callback(E_Menu_Item *mi, void (*func) (E_Menu *m, E_Menu_Item *mi, void *data), void *data);
|
||||
void e_menu_hide_callback(E_Menu *m, void (*func) (E_Menu *m, void *data), void *data);
|
||||
void e_menu_hide_submenus(E_Menu *menus_after);
|
||||
void e_menu_select(int dx, int dy);
|
||||
void e_menu_event_win_show(void );
|
||||
void e_menu_event_win_hide(void );
|
||||
void e_menu_set_background(E_Menu *m);
|
||||
void e_menu_set_sel(E_Menu *m, E_Menu_Item *mi);
|
||||
void e_menu_set_sep(E_Menu *m, E_Menu_Item *mi);
|
||||
void e_menu_set_state(E_Menu *m, E_Menu_Item *mi);
|
||||
E_Menu *e_menu_new(void );
|
||||
void e_menu_hide(E_Menu *m);
|
||||
void e_menu_show(E_Menu *m);
|
||||
void e_menu_move_to(E_Menu *m, int x, int y);
|
||||
void e_menu_show_at_mouse(E_Menu *m, int x, int y, Time t);
|
||||
void e_menu_add_item(E_Menu *m, E_Menu_Item *mi);
|
||||
void e_menu_del_item(E_Menu *m, E_Menu_Item *mi);
|
||||
void e_menu_item_update(E_Menu *m, E_Menu_Item *mi);
|
||||
void e_menu_item_unrealize(E_Menu *m, E_Menu_Item *mi);
|
||||
void e_menu_item_realize(E_Menu *m, E_Menu_Item *mi);
|
||||
E_Menu_Item *e_menu_item_new(char *str);
|
||||
void e_menu_obscure_outside_screen(E_Menu *m);
|
||||
void e_menu_scroll_all_by(int dx, int dy);
|
||||
void e_menu_update_visibility(E_Menu *m);
|
||||
void e_menu_update_base(E_Menu *m);
|
||||
void e_menu_update_finish(E_Menu *m);
|
||||
void e_menu_update_shows(E_Menu *m);
|
||||
void e_menu_update_hides(E_Menu *m);
|
||||
void e_menu_update(E_Menu *m);
|
||||
void e_menu_item_set_icon(E_Menu_Item *mi, char *icon);
|
||||
void e_menu_item_set_text(E_Menu_Item *mi, char *text);
|
||||
void e_menu_item_set_separator(E_Menu_Item *mi, int sep);
|
||||
void e_menu_item_set_radio(E_Menu_Item *mi, int radio);
|
||||
void e_menu_item_set_check(E_Menu_Item *mi, int check);
|
||||
void e_menu_item_set_state(E_Menu_Item *mi, int state);
|
||||
void e_menu_item_set_submenu(E_Menu_Item *mi, E_Menu *submenu);
|
||||
void e_menu_item_set_scale_icon(E_Menu_Item *mi, int scale);
|
||||
void e_menu_set_padding_icon(E_Menu *m, int pad);
|
||||
void e_menu_set_padding_state(E_Menu *m, int pad);
|
||||
void e_menu_callback_item(E_Menu * m, E_Menu_Item * mi);
|
||||
void e_menu_item_set_callback(E_Menu_Item * mi,
|
||||
void (*func) (E_Menu * m,
|
||||
E_Menu_Item * mi,
|
||||
void *data),
|
||||
void *data);
|
||||
void e_menu_hide_callback(E_Menu * m,
|
||||
void (*func) (E_Menu * m, void *data),
|
||||
void *data);
|
||||
void e_menu_hide_submenus(E_Menu * menus_after);
|
||||
void e_menu_select(int dx, int dy);
|
||||
void e_menu_event_win_show(void);
|
||||
void e_menu_event_win_hide(void);
|
||||
void e_menu_set_background(E_Menu * m);
|
||||
void e_menu_set_sel(E_Menu * m, E_Menu_Item * mi);
|
||||
void e_menu_set_sep(E_Menu * m, E_Menu_Item * mi);
|
||||
void e_menu_set_state(E_Menu * m, E_Menu_Item * mi);
|
||||
E_Menu *e_menu_new(void);
|
||||
void e_menu_hide(E_Menu * m);
|
||||
void e_menu_show(E_Menu * m);
|
||||
void e_menu_move_to(E_Menu * m, int x, int y);
|
||||
void e_menu_show_at_mouse(E_Menu * m, int x, int y, Time t);
|
||||
void e_menu_add_item(E_Menu * m, E_Menu_Item * mi);
|
||||
void e_menu_del_item(E_Menu * m, E_Menu_Item * mi);
|
||||
void e_menu_item_update(E_Menu * m, E_Menu_Item * mi);
|
||||
void e_menu_item_unrealize(E_Menu * m, E_Menu_Item * mi);
|
||||
void e_menu_item_realize(E_Menu * m, E_Menu_Item * mi);
|
||||
E_Menu_Item *e_menu_item_new(char *str);
|
||||
void e_menu_obscure_outside_screen(E_Menu * m);
|
||||
void e_menu_scroll_all_by(int dx, int dy);
|
||||
void e_menu_update_visibility(E_Menu * m);
|
||||
void e_menu_update_base(E_Menu * m);
|
||||
void e_menu_update_finish(E_Menu * m);
|
||||
void e_menu_update_shows(E_Menu * m);
|
||||
void e_menu_update_hides(E_Menu * m);
|
||||
void e_menu_update(E_Menu * m);
|
||||
void e_menu_item_set_icon(E_Menu_Item * mi, char *icon);
|
||||
void e_menu_item_set_text(E_Menu_Item * mi, char *text);
|
||||
void e_menu_item_set_separator(E_Menu_Item * mi, int sep);
|
||||
void e_menu_item_set_radio(E_Menu_Item * mi, int radio);
|
||||
void e_menu_item_set_check(E_Menu_Item * mi, int check);
|
||||
void e_menu_item_set_state(E_Menu_Item * mi, int state);
|
||||
void e_menu_item_set_submenu(E_Menu_Item * mi, E_Menu * submenu);
|
||||
void e_menu_item_set_scale_icon(E_Menu_Item * mi, int scale);
|
||||
void e_menu_set_padding_icon(E_Menu * m, int pad);
|
||||
void e_menu_set_padding_state(E_Menu * m, int pad);
|
||||
|
||||
#endif
|
||||
|
|
529
src/menubuild.c
529
src/menubuild.c
|
@ -11,32 +11,38 @@
|
|||
# include "e_ferite.h"
|
||||
#endif
|
||||
|
||||
Evas_List build_menus = NULL;
|
||||
Evas_List build_menus = NULL;
|
||||
|
||||
static void e_build_menu_cb_exec(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_build_menu_cb_exec(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_build_menu_cb_exec(E_Menu * m, E_Menu_Item * mi,
|
||||
void *data);
|
||||
static void e_build_menu_cb_exec(E_Menu * m, E_Menu_Item * mi,
|
||||
void *data);
|
||||
|
||||
static void e_build_menu_unbuild(E_Build_Menu *bm);
|
||||
static void e_build_menu_unbuild(E_Build_Menu * bm);
|
||||
|
||||
static void e_build_menu_db_poll(int val, void *data);
|
||||
static E_Menu *e_build_menu_db_build_number(E_Build_Menu *bm, E_DB_File *db, int num);
|
||||
static void e_build_menu_db_build(E_Build_Menu *bm);
|
||||
static void e_build_menu_db_poll(int val, void *data);
|
||||
static E_Menu *e_build_menu_db_build_number(E_Build_Menu * bm,
|
||||
E_DB_File * db, int num);
|
||||
static void e_build_menu_db_build(E_Build_Menu * bm);
|
||||
|
||||
static void e_build_menu_gnome_apps_poll(int val, void *data);
|
||||
static void e_build_menu_gnome_apps_build(E_Build_Menu *bm);
|
||||
|
||||
static E_Menu *e_build_menu_iconified_borders_build(E_Build_Menu *bm);
|
||||
static void e_build_menu_iconified_borders_changed(E_Observer *observer, E_Observee *observee, E_Event_Type event);
|
||||
static void e_build_menu_gnome_apps_poll(int val, void *data);
|
||||
static void e_build_menu_gnome_apps_build(E_Build_Menu * bm);
|
||||
|
||||
static E_Menu *e_build_menu_iconified_borders_build(E_Build_Menu * bm);
|
||||
static void e_build_menu_iconified_borders_changed(E_Observer *
|
||||
observer,
|
||||
E_Observee *
|
||||
observee,
|
||||
E_Event_Type event);
|
||||
|
||||
/* ------------ various callbacks ---------------------- */
|
||||
static void
|
||||
e_build_menu_cb_exec(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
static void
|
||||
e_build_menu_cb_exec(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
char *exe;
|
||||
char *exe;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
exe = data;
|
||||
e_exec_run(exe);
|
||||
|
||||
|
@ -45,35 +51,35 @@ e_build_menu_cb_exec(E_Menu *m, E_Menu_Item *mi, void *data)
|
|||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_build_menu_cb_uniconify(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
static void
|
||||
e_build_menu_cb_uniconify(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
b = data;
|
||||
e_border_uniconify(b);
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_build_menu_cb_script(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
static void
|
||||
e_build_menu_cb_script(E_Menu * m, E_Menu_Item * mi, void *data)
|
||||
{
|
||||
char *script;
|
||||
char *script;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
#ifdef USE_FERITE
|
||||
script = data;
|
||||
e_ferite_run(script);
|
||||
#else
|
||||
D("No cookies for you. You will have to install ferite.\n");
|
||||
#endif
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
|
@ -84,19 +90,19 @@ e_build_menu_cb_script(E_Menu *m, E_Menu_Item *mi, void *data)
|
|||
/*--------------------------------------------------------*/
|
||||
|
||||
static void
|
||||
e_build_menu_unbuild(E_Build_Menu *bm)
|
||||
e_build_menu_unbuild(E_Build_Menu * bm)
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
bm->menu = NULL;
|
||||
if (bm->menus)
|
||||
{
|
||||
for (l = bm->menus; l; l = l->next)
|
||||
{
|
||||
E_Menu *m;
|
||||
|
||||
E_Menu *m;
|
||||
|
||||
m = l->data;
|
||||
e_menu_hide(m);
|
||||
e_menu_update_shows(m);
|
||||
|
@ -119,31 +125,30 @@ e_build_menu_unbuild(E_Build_Menu *bm)
|
|||
D_RETURN;
|
||||
}
|
||||
|
||||
|
||||
/* BUILDING from DB's */
|
||||
|
||||
|
||||
static void
|
||||
e_build_menu_db_poll(int val, void *data)
|
||||
{
|
||||
time_t mod;
|
||||
E_Build_Menu *bm;
|
||||
|
||||
time_t mod;
|
||||
E_Build_Menu *bm;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
bm = data;
|
||||
mod = e_file_mod_time(bm->file);
|
||||
if (mod <= bm->mod_time)
|
||||
if (mod <= bm->mod_time)
|
||||
{
|
||||
ecore_add_event_timer(bm->file, 1.0, e_build_menu_db_poll, 0, data);
|
||||
D_RETURN;
|
||||
}
|
||||
bm->mod_time = mod;
|
||||
|
||||
|
||||
e_build_menu_unbuild(bm);
|
||||
e_build_menu_db_build(bm);
|
||||
if (!bm->menu) bm->mod_time = 0;
|
||||
|
||||
if (!bm->menu)
|
||||
bm->mod_time = 0;
|
||||
|
||||
ecore_add_event_timer(bm->file, 1.0, e_build_menu_db_poll, 0, data);
|
||||
|
||||
D_RETURN;
|
||||
|
@ -153,50 +158,53 @@ e_build_menu_db_poll(int val, void *data)
|
|||
static void
|
||||
e_build_menu_gnome_apps_poll(int val, void *data)
|
||||
{
|
||||
time_t mod;
|
||||
E_Build_Menu *bm;
|
||||
|
||||
time_t mod;
|
||||
E_Build_Menu *bm;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
bm = data;
|
||||
mod = e_file_mod_time(bm->file);
|
||||
if (mod <= bm->mod_time)
|
||||
if (mod <= bm->mod_time)
|
||||
{
|
||||
ecore_add_event_timer(bm->file, 1.0, e_build_menu_gnome_apps_poll, 0, data);
|
||||
ecore_add_event_timer(bm->file, 1.0, e_build_menu_gnome_apps_poll, 0,
|
||||
data);
|
||||
D_RETURN;
|
||||
}
|
||||
bm->mod_time = mod;
|
||||
|
||||
|
||||
e_build_menu_unbuild(bm);
|
||||
e_build_menu_gnome_apps_build(bm);
|
||||
if (!bm->menu) bm->mod_time = 0;
|
||||
|
||||
if (!bm->menu)
|
||||
bm->mod_time = 0;
|
||||
|
||||
ecore_add_event_timer(bm->file, 1.0, e_build_menu_gnome_apps_poll, 0, data);
|
||||
|
||||
D_RETURN;
|
||||
UN(val);
|
||||
}
|
||||
|
||||
static E_Menu *
|
||||
e_build_menu_db_build_number(E_Build_Menu *bm, E_DB_File *db, int num)
|
||||
static E_Menu *
|
||||
e_build_menu_db_build_number(E_Build_Menu * bm, E_DB_File * db, int num)
|
||||
{
|
||||
E_Menu *menu;
|
||||
char buf[PATH_MAX];
|
||||
int num2, i2;
|
||||
|
||||
E_Menu *menu;
|
||||
char buf[PATH_MAX];
|
||||
int num2, i2;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
snprintf(buf, PATH_MAX, "/menu/%i/count", num);
|
||||
if (!e_db_int_get(db, buf, &num2)) D_RETURN_(NULL);
|
||||
if (!e_db_int_get(db, buf, &num2))
|
||||
D_RETURN_(NULL);
|
||||
menu = e_menu_new();
|
||||
e_menu_set_padding_icon(menu, 2);
|
||||
e_menu_set_padding_state(menu, 2);
|
||||
for (i2 = 0; i2 < num2; i2++)
|
||||
{
|
||||
E_Menu_Item *menuitem;
|
||||
char *text, *icon, *exe, *script;
|
||||
int ok, sub, sep;
|
||||
|
||||
E_Menu_Item *menuitem;
|
||||
char *text, *icon, *exe, *script;
|
||||
int ok, sub, sep;
|
||||
|
||||
snprintf(buf, PATH_MAX, "/menu/%i/%i/text", num, i2);
|
||||
text = e_db_str_get(db, buf);
|
||||
snprintf(buf, PATH_MAX, "/menu/%i/%i/icon", num, i2);
|
||||
|
@ -212,16 +220,18 @@ e_build_menu_db_build_number(E_Build_Menu *bm, E_DB_File *db, int num)
|
|||
e_db_int_get(db, buf, &sep);
|
||||
menuitem = e_menu_item_new(text);
|
||||
e_menu_item_set_icon(menuitem, icon);
|
||||
if ((icon) && (text)) e_menu_item_set_scale_icon(menuitem, 1);
|
||||
if ((icon) && (text))
|
||||
e_menu_item_set_scale_icon(menuitem, 1);
|
||||
IF_FREE(text);
|
||||
IF_FREE(icon);
|
||||
if (sep) e_menu_item_set_separator(menuitem, 1);
|
||||
if (sep)
|
||||
e_menu_item_set_separator(menuitem, 1);
|
||||
else
|
||||
{
|
||||
if (ok)
|
||||
{
|
||||
E_Menu *menu2;
|
||||
|
||||
E_Menu *menu2;
|
||||
|
||||
menu2 = e_build_menu_db_build_number(bm, db, sub);
|
||||
e_menu_item_set_submenu(menuitem, menu2);
|
||||
}
|
||||
|
@ -231,11 +241,11 @@ e_build_menu_db_build_number(E_Build_Menu *bm, E_DB_File *db, int num)
|
|||
e_menu_item_set_callback(menuitem, e_build_menu_cb_exec, exe);
|
||||
bm->commands = evas_list_prepend(bm->commands, exe);
|
||||
}
|
||||
if( script )
|
||||
{
|
||||
e_menu_item_set_callback(menuitem, e_build_menu_cb_script, script);
|
||||
bm->commands = evas_list_prepend(bm->commands, script);
|
||||
}
|
||||
if (script)
|
||||
{
|
||||
e_menu_item_set_callback(menuitem, e_build_menu_cb_script, script);
|
||||
bm->commands = evas_list_prepend(bm->commands, script);
|
||||
}
|
||||
e_menu_add_item(menu, menuitem);
|
||||
}
|
||||
bm->menus = evas_list_prepend(bm->menus, menu);
|
||||
|
@ -244,104 +254,106 @@ e_build_menu_db_build_number(E_Build_Menu *bm, E_DB_File *db, int num)
|
|||
}
|
||||
|
||||
static void
|
||||
e_build_menu_db_build(E_Build_Menu *bm)
|
||||
e_build_menu_db_build(E_Build_Menu * bm)
|
||||
{
|
||||
E_DB_File *db;
|
||||
int num;
|
||||
|
||||
E_DB_File *db;
|
||||
int num;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
e_db_flush();
|
||||
db = e_db_open_read(bm->file);
|
||||
if (!db) D_RETURN;
|
||||
|
||||
if (!e_db_int_get(db, "/menu/count", &num)) goto error;
|
||||
if (num > 0) bm->menu = e_build_menu_db_build_number(bm, db, 0);
|
||||
error:
|
||||
if (!db)
|
||||
D_RETURN;
|
||||
|
||||
if (!e_db_int_get(db, "/menu/count", &num))
|
||||
goto error;
|
||||
if (num > 0)
|
||||
bm->menu = e_build_menu_db_build_number(bm, db, 0);
|
||||
error:
|
||||
e_db_close(db);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
|
||||
/* BUILD from GNOME APPS directory structure */
|
||||
|
||||
|
||||
static E_Menu *
|
||||
e_build_menu_gnome_apps_build_dir(E_Build_Menu *bm, char *dir)
|
||||
static E_Menu *
|
||||
e_build_menu_gnome_apps_build_dir(E_Build_Menu * bm, char *dir)
|
||||
{
|
||||
E_Menu *menu = NULL;
|
||||
Evas_List l, entries = NULL;
|
||||
|
||||
E_Menu *menu = NULL;
|
||||
Evas_List l, entries = NULL;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
menu = e_menu_new();
|
||||
e_menu_set_padding_icon(menu, 2);
|
||||
e_menu_set_padding_state(menu, 2);
|
||||
/* build the order of things to scan ...*/
|
||||
{
|
||||
FILE *f;
|
||||
char buf[PATH_MAX];
|
||||
Evas_List dirlist = NULL;
|
||||
|
||||
/* read .order file */
|
||||
snprintf(buf, PATH_MAX, "%s/.order", dir);
|
||||
f = fopen(buf, "rb");
|
||||
if (f)
|
||||
{
|
||||
while (fgets(buf, PATH_MAX, f))
|
||||
{
|
||||
int buf_len;
|
||||
|
||||
buf_len = strlen(buf);
|
||||
if (buf_len > 0)
|
||||
{
|
||||
if (buf[buf_len - 1] == '\n')
|
||||
buf[buf_len - 1] = 0;
|
||||
entries = evas_list_append(entries, strdup(buf));
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
/* read dir listing in alphabetical order and use that to suppliment */
|
||||
dirlist = e_file_ls(dir);
|
||||
for (l = dirlist; l; l = l->next)
|
||||
{
|
||||
char *s;
|
||||
|
||||
s = l->data;
|
||||
/* if it isnt a "dot" file or dir */
|
||||
if (s[0] != '.')
|
||||
{
|
||||
Evas_List ll;
|
||||
int have_it;
|
||||
|
||||
have_it = 0;
|
||||
for (ll = entries; ll; ll = ll->next)
|
||||
{
|
||||
if (!strcmp(ll->data, s))
|
||||
{
|
||||
have_it = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!have_it)
|
||||
entries = evas_list_append(entries, strdup(s));
|
||||
}
|
||||
free(s);
|
||||
}
|
||||
if (dirlist) evas_list_free(dirlist);
|
||||
}
|
||||
/* build the order of things to scan ... */
|
||||
{
|
||||
FILE *f;
|
||||
char buf[PATH_MAX];
|
||||
Evas_List dirlist = NULL;
|
||||
|
||||
/* read .order file */
|
||||
snprintf(buf, PATH_MAX, "%s/.order", dir);
|
||||
f = fopen(buf, "rb");
|
||||
if (f)
|
||||
{
|
||||
while (fgets(buf, PATH_MAX, f))
|
||||
{
|
||||
int buf_len;
|
||||
|
||||
buf_len = strlen(buf);
|
||||
if (buf_len > 0)
|
||||
{
|
||||
if (buf[buf_len - 1] == '\n')
|
||||
buf[buf_len - 1] = 0;
|
||||
entries = evas_list_append(entries, strdup(buf));
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
/* read dir listing in alphabetical order and use that to suppliment */
|
||||
dirlist = e_file_ls(dir);
|
||||
for (l = dirlist; l; l = l->next)
|
||||
{
|
||||
char *s;
|
||||
|
||||
s = l->data;
|
||||
/* if it isnt a "dot" file or dir */
|
||||
if (s[0] != '.')
|
||||
{
|
||||
Evas_List ll;
|
||||
int have_it;
|
||||
|
||||
have_it = 0;
|
||||
for (ll = entries; ll; ll = ll->next)
|
||||
{
|
||||
if (!strcmp(ll->data, s))
|
||||
{
|
||||
have_it = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!have_it)
|
||||
entries = evas_list_append(entries, strdup(s));
|
||||
}
|
||||
free(s);
|
||||
}
|
||||
if (dirlist)
|
||||
evas_list_free(dirlist);
|
||||
}
|
||||
/* now go thru list... */
|
||||
for (l = entries; l; l = l->next)
|
||||
{
|
||||
char *s;
|
||||
char buf[PATH_MAX];
|
||||
E_Menu_Item *menuitem;
|
||||
char *icon, *name, *exe;
|
||||
E_Menu *sub;
|
||||
FILE *f;
|
||||
|
||||
char *s;
|
||||
char buf[PATH_MAX];
|
||||
E_Menu_Item *menuitem;
|
||||
char *icon, *name, *exe;
|
||||
E_Menu *sub;
|
||||
FILE *f;
|
||||
|
||||
f = NULL;
|
||||
icon = NULL;
|
||||
exe = NULL;
|
||||
|
@ -354,52 +366,54 @@ e_build_menu_gnome_apps_build_dir(E_Build_Menu *bm, char *dir)
|
|||
{
|
||||
sub = e_build_menu_gnome_apps_build_dir(bm, buf);
|
||||
snprintf(buf, PATH_MAX, "%s/%s/.directory", dir, s);
|
||||
|
||||
|
||||
f = fopen(buf, "rb");
|
||||
}
|
||||
/* regular file */
|
||||
else if (e_file_exists(buf))
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "%s/%s", dir, s);
|
||||
|
||||
|
||||
f = fopen(buf, "rb");
|
||||
}
|
||||
/* doesnt exist at all? next item */
|
||||
else continue;
|
||||
else
|
||||
continue;
|
||||
if (f)
|
||||
{
|
||||
while (fgets(buf, PATH_MAX, f))
|
||||
{
|
||||
int buf_len;
|
||||
|
||||
int buf_len;
|
||||
|
||||
buf_len = strlen(buf);
|
||||
if (buf_len > 0)
|
||||
{
|
||||
if (buf[buf_len - 1] == '\n')
|
||||
buf[buf_len - 1] = 0;
|
||||
buf[buf_len - 1] = 0;
|
||||
/* look for Name= */
|
||||
if ((!name) &&
|
||||
(((e_util_glob_matches(buf, "Name[en]=*")) ||
|
||||
(e_util_glob_matches(buf, "Name=*")))))
|
||||
{
|
||||
char *eq;
|
||||
|
||||
char *eq;
|
||||
|
||||
eq = strchr(buf, '=');
|
||||
if (eq)
|
||||
name = strdup(eq + 1);
|
||||
name = strdup(eq + 1);
|
||||
}
|
||||
/* look for Icon= */
|
||||
else if ((!icon) &&
|
||||
((e_util_glob_matches(buf, "Icon=*"))))
|
||||
{
|
||||
char *eq;
|
||||
|
||||
char *eq;
|
||||
|
||||
eq = strchr(buf, '=');
|
||||
if (eq)
|
||||
{
|
||||
char buf2[PATH_MAX];
|
||||
|
||||
snprintf(buf2, PATH_MAX, "/usr/share/pixmaps/%s", eq +1);
|
||||
char buf2[PATH_MAX];
|
||||
|
||||
snprintf(buf2, PATH_MAX,
|
||||
"/usr/share/pixmaps/%s", eq + 1);
|
||||
icon = strdup(buf2);
|
||||
}
|
||||
}
|
||||
|
@ -407,46 +421,51 @@ e_build_menu_gnome_apps_build_dir(E_Build_Menu *bm, char *dir)
|
|||
else if ((!exe) &&
|
||||
((e_util_glob_matches(buf, "Exec=*"))))
|
||||
{
|
||||
char *eq;
|
||||
|
||||
char *eq;
|
||||
|
||||
eq = strchr(buf, '=');
|
||||
if (eq)
|
||||
exe = strdup(eq + 1);
|
||||
exe = strdup(eq + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
if (!name) name = strdup(s);
|
||||
|
||||
if (!name)
|
||||
name = strdup(s);
|
||||
menuitem = e_menu_item_new(name);
|
||||
if (icon) e_menu_item_set_icon(menuitem, icon);
|
||||
if ((icon) && (name)) e_menu_item_set_scale_icon(menuitem, 1);
|
||||
if (icon)
|
||||
e_menu_item_set_icon(menuitem, icon);
|
||||
if ((icon) && (name))
|
||||
e_menu_item_set_scale_icon(menuitem, 1);
|
||||
if (exe)
|
||||
{
|
||||
e_menu_item_set_callback(menuitem, e_build_menu_cb_exec, exe);
|
||||
bm->commands = evas_list_prepend(bm->commands, exe);
|
||||
bm->commands = evas_list_prepend(bm->commands, exe);
|
||||
}
|
||||
if (sub) e_menu_item_set_submenu(menuitem, sub);
|
||||
if (sub)
|
||||
e_menu_item_set_submenu(menuitem, sub);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
|
||||
IF_FREE(name);
|
||||
IF_FREE(icon);
|
||||
free(s);
|
||||
}
|
||||
if (entries) evas_list_free(entries);
|
||||
bm->menus = evas_list_prepend(bm->menus, menu);
|
||||
if (entries)
|
||||
evas_list_free(entries);
|
||||
bm->menus = evas_list_prepend(bm->menus, menu);
|
||||
|
||||
D_RETURN_(menu);
|
||||
}
|
||||
|
||||
static void
|
||||
e_build_menu_gnome_apps_build(E_Build_Menu *bm)
|
||||
e_build_menu_gnome_apps_build(E_Build_Menu * bm)
|
||||
{
|
||||
E_Menu *menu;
|
||||
|
||||
E_Menu *menu;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
menu = e_build_menu_gnome_apps_build_dir(bm, bm->file);
|
||||
bm->menu = menu;
|
||||
|
||||
|
@ -454,14 +473,14 @@ e_build_menu_gnome_apps_build(E_Build_Menu *bm)
|
|||
}
|
||||
|
||||
static void
|
||||
e_build_menu_cleanup(E_Build_Menu *bm)
|
||||
e_build_menu_cleanup(E_Build_Menu * bm)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
||||
ecore_del_event_timer(bm->file);
|
||||
e_build_menu_unbuild(bm);
|
||||
IF_FREE(bm->file);
|
||||
build_menus = evas_list_remove(build_menus, bm);
|
||||
build_menus = evas_list_remove(build_menus, bm);
|
||||
|
||||
/* Call the destructor of the base class */
|
||||
e_object_cleanup(E_OBJECT(bm));
|
||||
|
@ -469,42 +488,44 @@ e_build_menu_cleanup(E_Build_Menu *bm)
|
|||
D_RETURN;
|
||||
}
|
||||
|
||||
E_Build_Menu *
|
||||
E_Build_Menu *
|
||||
e_build_menu_new_from_db(char *file)
|
||||
{
|
||||
E_Build_Menu *bm;
|
||||
|
||||
E_Build_Menu *bm;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!file) D_RETURN_(NULL);
|
||||
|
||||
if (!file)
|
||||
D_RETURN_(NULL);
|
||||
bm = NEW(E_Build_Menu, 1);
|
||||
ZERO(bm, E_Build_Menu, 1);
|
||||
|
||||
e_object_init(E_OBJECT(bm), (E_Cleanup_Func) e_build_menu_cleanup);
|
||||
|
||||
|
||||
bm->file = strdup(file);
|
||||
|
||||
build_menus = evas_list_prepend(build_menus, bm);
|
||||
e_build_menu_db_poll(0, bm);
|
||||
|
||||
build_menus = evas_list_prepend(build_menus, bm);
|
||||
e_build_menu_db_poll(0, bm);
|
||||
|
||||
D_RETURN_(bm);
|
||||
}
|
||||
|
||||
E_Build_Menu *
|
||||
E_Build_Menu *
|
||||
e_build_menu_new_from_gnome_apps(char *dir)
|
||||
{
|
||||
E_Build_Menu *bm;
|
||||
|
||||
E_Build_Menu *bm;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!dir) D_RETURN_(NULL);
|
||||
|
||||
if (!dir)
|
||||
D_RETURN_(NULL);
|
||||
bm = NEW(E_Build_Menu, 1);
|
||||
ZERO(bm, E_Build_Menu, 1);
|
||||
|
||||
e_object_init(E_OBJECT(bm), (E_Cleanup_Func) e_build_menu_cleanup);
|
||||
|
||||
bm->file = strdup(dir);
|
||||
|
||||
|
||||
build_menus = evas_list_prepend(build_menus, bm);
|
||||
e_build_menu_gnome_apps_poll(0, bm);
|
||||
|
||||
|
@ -513,11 +534,11 @@ e_build_menu_new_from_gnome_apps(char *dir)
|
|||
|
||||
/*------------------------- iconified borders menu ----------------*/
|
||||
|
||||
E_Build_Menu *
|
||||
E_Build_Menu *
|
||||
e_build_menu_new_from_iconified_borders()
|
||||
{
|
||||
E_Build_Menu *bm;
|
||||
Evas_List l;
|
||||
E_Build_Menu *bm;
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
@ -525,22 +546,25 @@ e_build_menu_new_from_iconified_borders()
|
|||
ZERO(bm, E_Build_Menu, 1);
|
||||
|
||||
/* e_observer_init(E_OBSERVER(bm), E_EVENT_BORDER_ICONIFY | E_EVENT_BORDER_UNICONIFY | E_EVENT_BORDER_NEW, e_build_menu_iconified_borders_changed, (E_Cleanup_Func) e_build_menu_cleanup);*/
|
||||
e_observer_init(E_OBSERVER(bm), E_EVENT_BORDER_ALL, e_build_menu_iconified_borders_changed, (E_Cleanup_Func) e_build_menu_cleanup);
|
||||
e_observer_init(E_OBSERVER(bm), E_EVENT_BORDER_ALL,
|
||||
e_build_menu_iconified_borders_changed,
|
||||
(E_Cleanup_Func) e_build_menu_cleanup);
|
||||
|
||||
for (l = e_border_get_borders_list(); l; l = l->next)
|
||||
{
|
||||
E_Border *b = l->data;
|
||||
e_observer_register_observee(E_OBSERVER(bm), E_OBSERVEE(b));
|
||||
}
|
||||
{
|
||||
E_Border *b = l->data;
|
||||
|
||||
e_observer_register_observee(E_OBSERVER(bm), E_OBSERVEE(b));
|
||||
}
|
||||
bm->menu = e_build_menu_iconified_borders_build(bm);
|
||||
|
||||
|
||||
build_menus = evas_list_prepend(build_menus, bm);
|
||||
|
||||
D_RETURN_(bm);
|
||||
}
|
||||
|
||||
void
|
||||
e_build_menu_iconified_borders_rebuild(E_Build_Menu *bm)
|
||||
e_build_menu_iconified_borders_rebuild(E_Build_Menu * bm)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -552,65 +576,68 @@ e_build_menu_iconified_borders_rebuild(E_Build_Menu *bm)
|
|||
}
|
||||
|
||||
static void
|
||||
e_build_menu_iconified_borders_changed(E_Observer *observer, E_Observee *observee, E_Event_Type event)
|
||||
e_build_menu_iconified_borders_changed(E_Observer * observer,
|
||||
E_Observee * observee,
|
||||
E_Event_Type event)
|
||||
{
|
||||
E_Build_Menu *bm;
|
||||
|
||||
E_Build_Menu *bm;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (event & E_EVENT_BORDER_NEW)
|
||||
{
|
||||
D("catch new border, register it\n");
|
||||
e_observer_register_observee(E_OBSERVER(observer), E_OBSERVEE(observee));
|
||||
}
|
||||
{
|
||||
D("catch new border, register it\n");
|
||||
e_observer_register_observee(E_OBSERVER(observer),
|
||||
E_OBSERVEE(observee));
|
||||
}
|
||||
|
||||
else if (event & E_EVENT_BORDER_DELETE)
|
||||
{
|
||||
bm = (E_Build_Menu *) observer;
|
||||
bm->changed = 1;
|
||||
}
|
||||
{
|
||||
bm = (E_Build_Menu *) observer;
|
||||
bm->changed = 1;
|
||||
}
|
||||
else if (event & (E_EVENT_BORDER_ICONIFY | E_EVENT_BORDER_UNICONIFY))
|
||||
{
|
||||
D("catch iconify, set menu to changed\n");
|
||||
bm = (E_Build_Menu *)observer;
|
||||
|
||||
bm->changed = 1;
|
||||
}
|
||||
{
|
||||
D("catch iconify, set menu to changed\n");
|
||||
bm = (E_Build_Menu *) observer;
|
||||
|
||||
bm->changed = 1;
|
||||
}
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
static E_Menu *
|
||||
e_build_menu_iconified_borders_build(E_Build_Menu *bm)
|
||||
static E_Menu *
|
||||
e_build_menu_iconified_borders_build(E_Build_Menu * bm)
|
||||
{
|
||||
E_Menu *menu = NULL;
|
||||
Evas_List l, entries = NULL;
|
||||
|
||||
E_Menu *menu = NULL;
|
||||
Evas_List l, entries = NULL;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
menu = e_menu_new();
|
||||
e_menu_set_padding_icon(menu, 2);
|
||||
e_menu_set_padding_state(menu, 2);
|
||||
|
||||
|
||||
for (l = e_border_get_borders_list(); l; l = l->next)
|
||||
{
|
||||
E_Border *b;
|
||||
char *name = NULL;
|
||||
E_Menu_Item *menuitem;
|
||||
|
||||
b = l->data;
|
||||
|
||||
if (b->client.iconified)
|
||||
{
|
||||
e_strdup(name, b->client.title);
|
||||
D("adding menu item: %s\n", name);
|
||||
menuitem = e_menu_item_new(name);
|
||||
e_menu_item_set_callback(menuitem, e_build_menu_cb_uniconify, b);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
E_Border *b;
|
||||
char *name = NULL;
|
||||
E_Menu_Item *menuitem;
|
||||
|
||||
IF_FREE(name);
|
||||
}
|
||||
}
|
||||
bm->menus = evas_list_prepend(bm->menus, menu);
|
||||
b = l->data;
|
||||
|
||||
if (b->client.iconified)
|
||||
{
|
||||
e_strdup(name, b->client.title);
|
||||
D("adding menu item: %s\n", name);
|
||||
menuitem = e_menu_item_new(name);
|
||||
e_menu_item_set_callback(menuitem, e_build_menu_cb_uniconify, b);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
IF_FREE(name);
|
||||
}
|
||||
}
|
||||
bm->menus = evas_list_prepend(bm->menus, menu);
|
||||
|
||||
D_RETURN_(menu);
|
||||
}
|
||||
|
|
|
@ -5,26 +5,26 @@
|
|||
#include "object.h"
|
||||
#include "observer.h"
|
||||
|
||||
typedef struct _E_Build_Menu E_Build_Menu;
|
||||
typedef struct _E_Build_Menu E_Build_Menu;
|
||||
|
||||
struct _E_Build_Menu
|
||||
{
|
||||
E_Observer o;
|
||||
E_Observer o;
|
||||
|
||||
char *file;
|
||||
time_t mod_time;
|
||||
|
||||
E_Menu *menu;
|
||||
|
||||
Evas_List menus;
|
||||
Evas_List commands;
|
||||
char *file;
|
||||
time_t mod_time;
|
||||
|
||||
int changed;
|
||||
E_Menu *menu;
|
||||
|
||||
Evas_List menus;
|
||||
Evas_List commands;
|
||||
|
||||
int changed;
|
||||
};
|
||||
|
||||
E_Build_Menu *e_build_menu_new_from_db(char *file);
|
||||
E_Build_Menu *e_build_menu_new_from_gnome_apps(char *dir);
|
||||
E_Build_Menu *e_build_menu_new_from_iconified_borders();
|
||||
E_Build_Menu *e_build_menu_new_from_db(char *file);
|
||||
E_Build_Menu *e_build_menu_new_from_gnome_apps(char *dir);
|
||||
E_Build_Menu *e_build_menu_new_from_iconified_borders();
|
||||
|
||||
void e_build_menu_iconified_borders_rebuild(E_Build_Menu *bm);
|
||||
void e_build_menu_iconified_borders_rebuild(E_Build_Menu * bm);
|
||||
#endif
|
||||
|
|
96
src/object.c
96
src/object.c
|
@ -2,78 +2,76 @@
|
|||
#include "object.h"
|
||||
|
||||
void
|
||||
e_object_init(E_Object *obj, E_Cleanup_Func cleanup_func)
|
||||
e_object_init(E_Object * obj, E_Cleanup_Func cleanup_func)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (!obj)
|
||||
D_RETURN;
|
||||
D_ENTER;
|
||||
|
||||
memset(obj, 0, sizeof(E_Object));
|
||||
obj->references = 1;
|
||||
obj->cleanup_func = cleanup_func;
|
||||
if (!obj)
|
||||
D_RETURN;
|
||||
|
||||
D_RETURN;
|
||||
memset(obj, 0, sizeof(E_Object));
|
||||
obj->references = 1;
|
||||
obj->cleanup_func = cleanup_func;
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_object_cleanup(E_Object *obj)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (!obj)
|
||||
D_RETURN;
|
||||
|
||||
free(obj);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
e_object_ref(E_Object *obj)
|
||||
e_object_cleanup(E_Object * obj)
|
||||
{
|
||||
D_ENTER;
|
||||
D_ENTER;
|
||||
|
||||
if (!obj)
|
||||
D_RETURN;
|
||||
if (!obj)
|
||||
D_RETURN;
|
||||
|
||||
obj->references++;
|
||||
D("++ refcount on %p, now %i\n", obj, obj->references);
|
||||
free(obj);
|
||||
|
||||
D_RETURN;
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_object_ref(E_Object * obj)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (!obj)
|
||||
D_RETURN;
|
||||
|
||||
obj->references++;
|
||||
D("++ refcount on %p, now %i\n", obj, obj->references);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
int
|
||||
e_object_unref(E_Object *obj)
|
||||
e_object_unref(E_Object * obj)
|
||||
{
|
||||
D_ENTER;
|
||||
D_ENTER;
|
||||
|
||||
if (!obj)
|
||||
D_RETURN_(-1);
|
||||
if (!obj)
|
||||
D_RETURN_(-1);
|
||||
|
||||
obj->references--;
|
||||
obj->references--;
|
||||
|
||||
D("-- refcount on %p, now %i\n", obj, obj->references);
|
||||
D("-- refcount on %p, now %i\n", obj, obj->references);
|
||||
|
||||
if (obj->references == 0 && obj->cleanup_func)
|
||||
{
|
||||
D("Refcount is zero, freeing.\n");
|
||||
obj->cleanup_func(obj);
|
||||
D_RETURN_(0);
|
||||
}
|
||||
if (obj->references == 0 && obj->cleanup_func)
|
||||
{
|
||||
D("Refcount is zero, freeing.\n");
|
||||
obj->cleanup_func(obj);
|
||||
D_RETURN_(0);
|
||||
}
|
||||
|
||||
D_RETURN_(obj->references);
|
||||
D_RETURN_(obj->references);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
e_object_get_usecount(E_Object *obj)
|
||||
e_object_get_usecount(E_Object * obj)
|
||||
{
|
||||
D_ENTER;
|
||||
D_ENTER;
|
||||
|
||||
if (!obj)
|
||||
D_RETURN_(-1);
|
||||
if (!obj)
|
||||
D_RETURN_(-1);
|
||||
|
||||
D_RETURN_(obj->references);
|
||||
D_RETURN_(obj->references);
|
||||
}
|
||||
|
|
21
src/object.h
21
src/object.h
|
@ -6,14 +6,15 @@
|
|||
|
||||
#define E_OBJECT(x) ((E_Object*)(x))
|
||||
|
||||
typedef void (*E_Cleanup_Func) (void *object);
|
||||
typedef void (*E_Cleanup_Func) (void *object);
|
||||
|
||||
typedef struct _e_object
|
||||
{
|
||||
int references;
|
||||
E_Cleanup_Func cleanup_func;
|
||||
|
||||
} E_Object;
|
||||
int references;
|
||||
E_Cleanup_Func cleanup_func;
|
||||
|
||||
}
|
||||
E_Object;
|
||||
|
||||
/**
|
||||
* e_object_init - Initializes an E object
|
||||
|
@ -32,7 +33,7 @@ typedef struct _e_object
|
|||
* The final free() call has to happen in the root class,
|
||||
* here, it happens in e_object_cleanup().
|
||||
*/
|
||||
void e_object_init(E_Object *obj, E_Cleanup_Func cleanup_func);
|
||||
void e_object_init(E_Object * obj, E_Cleanup_Func cleanup_func);
|
||||
|
||||
/**
|
||||
* e_object_cleanup - Cleanup function for E_Objects
|
||||
|
@ -43,13 +44,13 @@ void e_object_init(E_Object *obj, E_Cleanup_Func cleanup_func);
|
|||
* at the end. This is the place where the final free()
|
||||
* call occurs.
|
||||
*/
|
||||
void e_object_cleanup(E_Object *obj);
|
||||
void e_object_cleanup(E_Object * obj);
|
||||
|
||||
/**
|
||||
* e_object_ref - Increment the reference count of this object
|
||||
* @obj: The object whose reference count to increase
|
||||
*/
|
||||
void e_object_ref(E_Object *obj);
|
||||
void e_object_ref(E_Object * obj);
|
||||
|
||||
/**
|
||||
* e_object_unref - Decrememnt the reference count of this object
|
||||
|
@ -62,7 +63,7 @@ void e_object_ref(E_Object *obj);
|
|||
* and works its way back to the root class's destructor,
|
||||
* e_object_cleanup().
|
||||
*/
|
||||
int e_object_unref(E_Object *obj);
|
||||
int e_object_unref(E_Object * obj);
|
||||
|
||||
/**
|
||||
* e_object_get_usecount - Returns the current use count
|
||||
|
@ -73,6 +74,6 @@ int e_object_unref(E_Object *obj);
|
|||
* gets cleaned up by checking if the use count is one,
|
||||
* cleaning up, and then calling e_object_unref().
|
||||
*/
|
||||
int e_object_get_usecount(E_Object *obj);
|
||||
int e_object_get_usecount(E_Object * obj);
|
||||
|
||||
#endif
|
||||
|
|
212
src/observer.c
212
src/observer.c
|
@ -3,172 +3,168 @@
|
|||
#include "debug.h"
|
||||
#include "observer.h"
|
||||
|
||||
static Evas_List observers;
|
||||
static Evas_List observers;
|
||||
|
||||
void
|
||||
e_observer_init(E_Observer *obs, E_Event_Type event,
|
||||
E_Notify_Func notify_func,
|
||||
E_Cleanup_Func cleanup_func)
|
||||
e_observer_init(E_Observer * obs, E_Event_Type event,
|
||||
E_Notify_Func notify_func, E_Cleanup_Func cleanup_func)
|
||||
{
|
||||
D_ENTER;
|
||||
D_ENTER;
|
||||
|
||||
if (!obs)
|
||||
D_RETURN;
|
||||
if (!obs)
|
||||
D_RETURN;
|
||||
|
||||
memset(obs, 0, sizeof(E_Observer));
|
||||
memset(obs, 0, sizeof(E_Observer));
|
||||
|
||||
obs->watched = NULL;
|
||||
obs->event = event;
|
||||
obs->notify_func = notify_func;
|
||||
obs->watched = NULL;
|
||||
obs->event = event;
|
||||
obs->notify_func = notify_func;
|
||||
|
||||
e_object_init(E_OBJECT(obs), cleanup_func);
|
||||
e_object_init(E_OBJECT(obs), cleanup_func);
|
||||
|
||||
observers = evas_list_append(observers, obs);
|
||||
observers = evas_list_append(observers, obs);
|
||||
|
||||
D_RETURN;
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_observer_cleanup(E_Observer *obs)
|
||||
e_observer_cleanup(E_Observer * obs)
|
||||
{
|
||||
E_Observee *o = NULL;
|
||||
E_Observee *o = NULL;
|
||||
|
||||
D_ENTER;
|
||||
D_ENTER;
|
||||
|
||||
if (!obs)
|
||||
D_RETURN;
|
||||
if (!obs)
|
||||
D_RETURN;
|
||||
|
||||
while (obs->watched)
|
||||
{
|
||||
o = E_OBSERVEE(obs->watched->data);
|
||||
e_observer_unregister_observee(obs, o);
|
||||
}
|
||||
while (obs->watched)
|
||||
{
|
||||
o = E_OBSERVEE(obs->watched->data);
|
||||
e_observer_unregister_observee(obs, o);
|
||||
}
|
||||
|
||||
evas_list_remove(observers, obs);
|
||||
/* Call the destructor of the base class */
|
||||
e_object_cleanup(E_OBJECT(obs));
|
||||
evas_list_remove(observers, obs);
|
||||
/* Call the destructor of the base class */
|
||||
e_object_cleanup(E_OBJECT(obs));
|
||||
|
||||
D_RETURN;
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_observer_register_observee(E_Observer *observer, E_Observee *observee)
|
||||
e_observer_register_observee(E_Observer * observer, E_Observee * observee)
|
||||
{
|
||||
D_ENTER;
|
||||
D_ENTER;
|
||||
|
||||
if (!observer || !observee)
|
||||
D_RETURN;
|
||||
if (!observer || !observee)
|
||||
D_RETURN;
|
||||
|
||||
observee->observers = evas_list_append(observee->observers, observer);
|
||||
observer->watched = evas_list_append(observer->watched, observee);
|
||||
D_RETURN;
|
||||
observee->observers = evas_list_append(observee->observers, observer);
|
||||
observer->watched = evas_list_append(observer->watched, observee);
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_observer_unregister_observee(E_Observer *observer, E_Observee *observee)
|
||||
e_observer_unregister_observee(E_Observer * observer, E_Observee * observee)
|
||||
{
|
||||
D_ENTER;
|
||||
D_ENTER;
|
||||
|
||||
if (!observer || !observee)
|
||||
D_RETURN;
|
||||
if (!observer || !observee)
|
||||
D_RETURN;
|
||||
|
||||
observee->observers = evas_list_remove(observee->observers, observer);
|
||||
observer->watched = evas_list_remove(observer->watched, observee);
|
||||
observee->observers = evas_list_remove(observee->observers, observer);
|
||||
observer->watched = evas_list_remove(observer->watched, observee);
|
||||
|
||||
D_RETURN;
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
|
||||
/* --------------------- Observee code below */
|
||||
|
||||
void
|
||||
e_observee_init(E_Observee *obs, E_Cleanup_Func cleanup_func)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (!obs)
|
||||
D_RETURN;
|
||||
|
||||
memset(obs, 0, sizeof(E_Observee));
|
||||
|
||||
e_object_init(E_OBJECT(obs), cleanup_func);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
e_observee_notify_observers(E_Observee *o, E_Event_Type event)
|
||||
e_observee_init(E_Observee * obs, E_Cleanup_Func cleanup_func)
|
||||
{
|
||||
Evas_List obs_list = NULL;
|
||||
E_Observer *obs = NULL;
|
||||
D_ENTER;
|
||||
|
||||
D_ENTER;
|
||||
if (!obs)
|
||||
D_RETURN;
|
||||
|
||||
if (!o)
|
||||
D_RETURN;
|
||||
memset(obs, 0, sizeof(E_Observee));
|
||||
|
||||
for (obs_list = o->observers; obs_list; obs_list = obs_list->next)
|
||||
{
|
||||
obs = E_OBSERVER(obs_list->data);
|
||||
e_object_init(E_OBJECT(obs), cleanup_func);
|
||||
|
||||
/* check bit mask */
|
||||
if (obs->event & event)
|
||||
{
|
||||
obs->notify_func(obs, o, event);
|
||||
}
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_observee_notify_all_observers(E_Observee *o, E_Event_Type event)
|
||||
e_observee_notify_observers(E_Observee * o, E_Event_Type event)
|
||||
{
|
||||
Evas_List obs_list = NULL;
|
||||
E_Observer *obs = NULL;
|
||||
Evas_List obs_list = NULL;
|
||||
E_Observer *obs = NULL;
|
||||
|
||||
D_ENTER;
|
||||
D_ENTER;
|
||||
|
||||
if (!o)
|
||||
D_RETURN;
|
||||
if (!o)
|
||||
D_RETURN;
|
||||
|
||||
for (obs_list = observers; obs_list; obs_list = obs_list->next)
|
||||
{
|
||||
obs = E_OBSERVER(obs_list->data);
|
||||
for (obs_list = o->observers; obs_list; obs_list = obs_list->next)
|
||||
{
|
||||
obs = E_OBSERVER(obs_list->data);
|
||||
|
||||
/* check bit mask */
|
||||
if (obs->event & event)
|
||||
{
|
||||
obs->notify_func(obs, o, event);
|
||||
}
|
||||
}
|
||||
/* check bit mask */
|
||||
if (obs->event & event)
|
||||
{
|
||||
obs->notify_func(obs, o, event);
|
||||
}
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_observee_cleanup(E_Observee *obs)
|
||||
e_observee_notify_all_observers(E_Observee * o, E_Event_Type event)
|
||||
{
|
||||
E_Observer *observer = NULL;
|
||||
Evas_List obs_list = NULL;
|
||||
E_Observer *obs = NULL;
|
||||
|
||||
D_ENTER;
|
||||
D_ENTER;
|
||||
|
||||
if (!obs)
|
||||
D_RETURN;
|
||||
if (!o)
|
||||
D_RETURN;
|
||||
|
||||
if (e_object_get_usecount(E_OBJECT(obs)) == 1)
|
||||
{
|
||||
while (obs->observers)
|
||||
{
|
||||
observer = E_OBSERVER(obs->observers->data);
|
||||
e_observer_unregister_observee(observer, obs);
|
||||
}
|
||||
}
|
||||
for (obs_list = observers; obs_list; obs_list = obs_list->next)
|
||||
{
|
||||
obs = E_OBSERVER(obs_list->data);
|
||||
|
||||
/* Call the destructor of the base class */
|
||||
e_object_cleanup(E_OBJECT(obs));
|
||||
/* check bit mask */
|
||||
if (obs->event & event)
|
||||
{
|
||||
obs->notify_func(obs, o, event);
|
||||
}
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_observee_cleanup(E_Observee * obs)
|
||||
{
|
||||
E_Observer *observer = NULL;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (!obs)
|
||||
D_RETURN;
|
||||
|
||||
if (e_object_get_usecount(E_OBJECT(obs)) == 1)
|
||||
{
|
||||
while (obs->observers)
|
||||
{
|
||||
observer = E_OBSERVER(obs->observers->data);
|
||||
e_observer_unregister_observee(observer, obs);
|
||||
}
|
||||
}
|
||||
|
||||
/* Call the destructor of the base class */
|
||||
e_object_cleanup(E_OBJECT(obs));
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
|
|
@ -15,51 +15,53 @@ typedef struct _e_observee E_Observee;
|
|||
typedef enum _e_event_type
|
||||
{
|
||||
/* basic event types */
|
||||
E_EVENT_BORDER_NEW = 1 << 0,
|
||||
E_EVENT_BORDER_DELETE = 1 << 1,
|
||||
E_EVENT_BORDER_FOCUS_IN = 1 << 2,
|
||||
E_EVENT_BORDER_ICONIFY = 1 << 3,
|
||||
E_EVENT_BORDER_UNICONIFY = 1 << 4,
|
||||
E_EVENT_BORDER_MAXIMIZE = 1 << 5,
|
||||
E_EVENT_BORDER_UNMAXIMIZE = 1 << 6,
|
||||
E_EVENT_BORDER_MOVE = 1 << 7,
|
||||
E_EVENT_BORDER_RESIZE = 1 << 8,
|
||||
|
||||
E_EVENT_DESKTOP_NEW = 1 << 10,
|
||||
E_EVENT_DESKTOP_DELETE = 1 << 11,
|
||||
E_EVENT_DESKTOP_SWITCH = 1 << 12,
|
||||
E_EVENT_BORDER_NEW = 1 << 0,
|
||||
E_EVENT_BORDER_DELETE = 1 << 1,
|
||||
E_EVENT_BORDER_FOCUS_IN = 1 << 2,
|
||||
E_EVENT_BORDER_ICONIFY = 1 << 3,
|
||||
E_EVENT_BORDER_UNICONIFY = 1 << 4,
|
||||
E_EVENT_BORDER_MAXIMIZE = 1 << 5,
|
||||
E_EVENT_BORDER_UNMAXIMIZE = 1 << 6,
|
||||
E_EVENT_BORDER_MOVE = 1 << 7,
|
||||
E_EVENT_BORDER_RESIZE = 1 << 8,
|
||||
|
||||
E_EVENT_DESKTOP_NEW = 1 << 10,
|
||||
E_EVENT_DESKTOP_DELETE = 1 << 11,
|
||||
E_EVENT_DESKTOP_SWITCH = 1 << 12,
|
||||
|
||||
/* meta event types */
|
||||
E_EVENT_BORDER_ALL = E_EVENT_BORDER_NEW |
|
||||
E_EVENT_BORDER_DELETE | E_EVENT_BORDER_FOCUS_IN |
|
||||
E_EVENT_BORDER_ICONIFY | E_EVENT_BORDER_UNICONIFY |
|
||||
E_EVENT_BORDER_MAXIMIZE | E_EVENT_BORDER_UNMAXIMIZE,
|
||||
E_EVENT_DESKTOP_ALL = E_EVENT_DESKTOP_NEW |
|
||||
E_EVENT_DESKTOP_DELETE | E_EVENT_DESKTOP_SWITCH,
|
||||
|
||||
/* ALL events */
|
||||
E_EVENT_MAX = 0xFFFFFFFF
|
||||
} E_Event_Type;
|
||||
E_EVENT_BORDER_ALL = E_EVENT_BORDER_NEW |
|
||||
E_EVENT_BORDER_DELETE | E_EVENT_BORDER_FOCUS_IN |
|
||||
E_EVENT_BORDER_ICONIFY | E_EVENT_BORDER_UNICONIFY |
|
||||
E_EVENT_BORDER_MAXIMIZE | E_EVENT_BORDER_UNMAXIMIZE,
|
||||
E_EVENT_DESKTOP_ALL = E_EVENT_DESKTOP_NEW |
|
||||
E_EVENT_DESKTOP_DELETE | E_EVENT_DESKTOP_SWITCH,
|
||||
|
||||
typedef void(*E_Notify_Func)(E_Observer *observer, E_Observee *observee, E_Event_Type event);
|
||||
/* ALL events */
|
||||
E_EVENT_MAX = 0xFFFFFFFF
|
||||
}
|
||||
E_Event_Type;
|
||||
|
||||
typedef void (*E_Notify_Func) (E_Observer * observer,
|
||||
E_Observee * observee,
|
||||
E_Event_Type event);
|
||||
|
||||
struct _e_observer
|
||||
{
|
||||
E_Object obj;
|
||||
E_Object obj;
|
||||
|
||||
Evas_List watched; /* list<E_Observee> */
|
||||
E_Event_Type event;
|
||||
E_Notify_Func notify_func;
|
||||
Evas_List watched; /* list<E_Observee> */
|
||||
E_Event_Type event;
|
||||
E_Notify_Func notify_func;
|
||||
};
|
||||
|
||||
struct _e_observee
|
||||
{
|
||||
E_Object obj;
|
||||
E_Object obj;
|
||||
|
||||
Evas_List observers; /* list<E_Observer> */
|
||||
Evas_List observers; /* list<E_Observer> */
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* e_observer_init - Initializes an observer
|
||||
* @obs: The observer to initialize
|
||||
|
@ -72,9 +74,9 @@ struct _e_observee
|
|||
* e_observee_notify_observers() call. Observers are derived from
|
||||
* E_Objects, therefore, this function also handles E_Object initalization.
|
||||
*/
|
||||
void e_observer_init(E_Observer *obs, E_Event_Type event,
|
||||
E_Notify_Func notify_func,
|
||||
E_Cleanup_Func cleanup_func);
|
||||
void e_observer_init(E_Observer * obs, E_Event_Type event,
|
||||
E_Notify_Func notify_func,
|
||||
E_Cleanup_Func cleanup_func);
|
||||
|
||||
/**
|
||||
* e_observer_cleanup - Cleans up an observer.
|
||||
|
@ -82,7 +84,7 @@ void e_observer_init(E_Observer *obs, E_Event_Type event,
|
|||
*
|
||||
* This function cleans up an observer by unregistering all observees.
|
||||
*/
|
||||
void e_observer_cleanup(E_Observer *obs);
|
||||
void e_observer_cleanup(E_Observer * obs);
|
||||
|
||||
/**
|
||||
* e_observer_register_observee - Registers an observee
|
||||
|
@ -91,7 +93,8 @@ void e_observer_cleanup(E_Observer *obs);
|
|||
*
|
||||
* This function registers the observer in the observee and vice versa.
|
||||
*/
|
||||
void e_observer_register_observee(E_Observer *observer, E_Observee *observee);
|
||||
void e_observer_register_observee(E_Observer * observer,
|
||||
E_Observee * observee);
|
||||
|
||||
/**
|
||||
* e_observer_unregister_observee - Unregisters an observee
|
||||
|
@ -100,7 +103,8 @@ void e_observer_register_observee(E_Observer *observer, E_Observee *observee)
|
|||
*
|
||||
* This function unregisters the observer in the observee and vice versa.
|
||||
*/
|
||||
void e_observer_unregister_observee(E_Observer *observer, E_Observee *observee);
|
||||
void e_observer_unregister_observee(E_Observer * observer,
|
||||
E_Observee * observee);
|
||||
|
||||
/**
|
||||
* e_observee_init - Initializes an observee.
|
||||
|
@ -111,7 +115,8 @@ void e_observer_unregister_observee(E_Observer *observer, E_Observee *observe
|
|||
* from E_Objects, which is why this function gets the destructor
|
||||
* function as a parameter. It is passed on to e_object_init().
|
||||
*/
|
||||
void e_observee_init(E_Observee *obs, E_Cleanup_Func cleanup_func);
|
||||
void e_observee_init(E_Observee * obs,
|
||||
E_Cleanup_Func cleanup_func);
|
||||
|
||||
/**
|
||||
* e_observee_cleanup - Cleans up an observee.
|
||||
|
@ -119,7 +124,7 @@ void e_observee_init(E_Observee *obs, E_Cleanup_Func cleanup_func);
|
|||
*
|
||||
* This function cleans up an observee by unregistering it from all observers.
|
||||
*/
|
||||
void e_observee_cleanup(E_Observee *obs);
|
||||
void e_observee_cleanup(E_Observee * obs);
|
||||
|
||||
/**
|
||||
* e_observee_notify_observers - Notify observers of a given Ecore event
|
||||
|
@ -130,8 +135,8 @@ void e_observee_cleanup(E_Observee *obs);
|
|||
* and calls the notify_func() of the observers that are
|
||||
* responsible for the given @event.
|
||||
*/
|
||||
void e_observee_notify_observers(E_Observee *o, E_Event_Type event);
|
||||
|
||||
void e_observee_notify_observers(E_Observee * o,
|
||||
E_Event_Type event);
|
||||
|
||||
/**
|
||||
* e_observee_notify_all_observers - Notify all observers of a given E event
|
||||
|
@ -147,5 +152,6 @@ void e_observee_notify_observers(E_Observee *o, E_Event_Type event);
|
|||
* If they are looking for this type of NEW event, then they can register
|
||||
* it as a legitimate observee.
|
||||
*/
|
||||
void e_observee_notify_all_observers(E_Observee *o, E_Event_Type event);
|
||||
void e_observee_notify_all_observers(E_Observee * o,
|
||||
E_Event_Type event);
|
||||
#endif
|
||||
|
|
643
src/place.c
643
src/place.c
|
@ -5,22 +5,23 @@
|
|||
#include "guides.h"
|
||||
#include "util.h"
|
||||
|
||||
static void e_mouse_down(Ecore_Event * ev);
|
||||
static void e_mouse_up(Ecore_Event * ev);
|
||||
static void e_mouse_move(Ecore_Event * ev);
|
||||
static void e_mouse_down(Ecore_Event * ev);
|
||||
static void e_mouse_up(Ecore_Event * ev);
|
||||
static void e_mouse_move(Ecore_Event * ev);
|
||||
|
||||
static int prx, pry;
|
||||
static Window win_place = 0;
|
||||
static int prx, pry;
|
||||
static Window win_place = 0;
|
||||
|
||||
static void
|
||||
e_mouse_down(Ecore_Event * ev)
|
||||
{
|
||||
Ecore_Event_Mouse_Down *e;
|
||||
Ecore_Event_Mouse_Down *e;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
e = ev->event;
|
||||
if (!win_place) D_RETURN;
|
||||
if (!win_place)
|
||||
D_RETURN;
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
@ -28,14 +29,16 @@ e_mouse_down(Ecore_Event * ev)
|
|||
static void
|
||||
e_mouse_up(Ecore_Event * ev)
|
||||
{
|
||||
Ecore_Event_Mouse_Up *e;
|
||||
Ecore_Event_Mouse_Up *e;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
e = ev->event;
|
||||
if (!win_place) D_RETURN;
|
||||
e_action_stop("Window_Place", ACT_MOUSE_UP, 1, NULL,
|
||||
ECORE_EVENT_KEY_MODIFIER_NONE, NULL, NULL, e->x, e->y, e->rx, e->ry);
|
||||
if (!win_place)
|
||||
D_RETURN;
|
||||
e_action_stop("Window_Place", ACT_MOUSE_UP, 1, NULL,
|
||||
ECORE_EVENT_KEY_MODIFIER_NONE, NULL, NULL, e->x, e->y, e->rx,
|
||||
e->ry);
|
||||
ecore_window_destroy(win_place);
|
||||
win_place = 0;
|
||||
|
||||
|
@ -45,15 +48,16 @@ e_mouse_up(Ecore_Event * ev)
|
|||
static void
|
||||
e_mouse_move(Ecore_Event * ev)
|
||||
{
|
||||
Ecore_Event_Mouse_Move *e;
|
||||
Ecore_Event_Mouse_Move *e;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
e = ev->event;
|
||||
if (!win_place) D_RETURN;
|
||||
e_action_cont("Window_Place", ACT_MOUSE_MOVE, 1, NULL,
|
||||
ECORE_EVENT_KEY_MODIFIER_NONE, NULL, NULL, e->x, e->y, e->rx, e->ry,
|
||||
e->rx - prx, e->ry - pry);
|
||||
if (!win_place)
|
||||
D_RETURN;
|
||||
e_action_cont("Window_Place", ACT_MOUSE_MOVE, 1, NULL,
|
||||
ECORE_EVENT_KEY_MODIFIER_NONE, NULL, NULL, e->x, e->y, e->rx,
|
||||
e->ry, e->rx - prx, e->ry - pry);
|
||||
prx = e->rx;
|
||||
pry = e->ry;
|
||||
|
||||
|
@ -61,19 +65,21 @@ e_mouse_move(Ecore_Event * ev)
|
|||
}
|
||||
|
||||
static int
|
||||
e_place_manual(E_Border *b, E_Desktop *desk, int *x, int *y)
|
||||
e_place_manual(E_Border * b, E_Desktop * desk, int *x, int *y)
|
||||
{
|
||||
int w, h;
|
||||
int mx, my, rx, ry;
|
||||
int move_mode = E_GUIDES_BOX;
|
||||
E_CFG_INT(cfg_window_move_mode, "settings", "/window/move/mode", E_GUIDES_BOX);
|
||||
|
||||
int w, h;
|
||||
int mx, my, rx, ry;
|
||||
int move_mode = E_GUIDES_BOX;
|
||||
|
||||
E_CFG_INT(cfg_window_move_mode, "settings", "/window/move/mode",
|
||||
E_GUIDES_BOX);
|
||||
|
||||
D_ENTER;
|
||||
|
||||
E_CONFIG_INT_GET(cfg_window_move_mode, move_mode);
|
||||
w = b->current.requested.w;
|
||||
h = b->current.requested.h;
|
||||
|
||||
|
||||
if (!win_place)
|
||||
{
|
||||
win_place = ecore_window_input_new(0, 0, 0, desk->real.w, desk->real.h);
|
||||
|
@ -85,7 +91,7 @@ e_place_manual(E_Border *b, E_Desktop *desk, int *x, int *y)
|
|||
{
|
||||
e_action_stop_by_type("Window_Place");
|
||||
}
|
||||
|
||||
|
||||
/* get mouse coords */
|
||||
ecore_pointer_xy(desk->win.main, &mx, &my);
|
||||
rx = mx;
|
||||
|
@ -95,27 +101,29 @@ e_place_manual(E_Border *b, E_Desktop *desk, int *x, int *y)
|
|||
/* grab mouse to desktop */
|
||||
ecore_pointer_ungrab(CurrentTime);
|
||||
ecore_pointer_grab(win_place, CurrentTime);
|
||||
|
||||
|
||||
*x = mx - (w / 2);
|
||||
*y = my - (h / 2);
|
||||
|
||||
/* start a move mode */
|
||||
e_action_stop_by_type("Window_Place");
|
||||
e_action_start("Window_Place", ACT_MOUSE_CLICK, 1, NULL,
|
||||
ECORE_EVENT_KEY_MODIFIER_NONE, E_OBJECT(b), NULL, mx, my, rx, ry);
|
||||
|
||||
if (move_mode != E_GUIDES_OPAQUE) D_RETURN_(0);
|
||||
e_action_start("Window_Place", ACT_MOUSE_CLICK, 1, NULL,
|
||||
ECORE_EVENT_KEY_MODIFIER_NONE, E_OBJECT(b), NULL, mx, my, rx,
|
||||
ry);
|
||||
|
||||
if (move_mode != E_GUIDES_OPAQUE)
|
||||
D_RETURN_(0);
|
||||
D_RETURN_(1);
|
||||
}
|
||||
|
||||
static int
|
||||
e_place_smart(E_Border *b, E_Desktop *desk, int *x, int *y)
|
||||
e_place_smart(E_Border * b, E_Desktop * desk, int *x, int *y)
|
||||
{
|
||||
int w, h;
|
||||
int a_w = 0, a_h = 0;
|
||||
int *a_x = NULL, *a_y = NULL;
|
||||
Evas_List l;
|
||||
|
||||
int w, h;
|
||||
int a_w = 0, a_h = 0;
|
||||
int *a_x = NULL, *a_y = NULL;
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
w = b->current.requested.w;
|
||||
|
@ -124,16 +132,16 @@ e_place_smart(E_Border *b, E_Desktop *desk, int *x, int *y)
|
|||
a_h = 2;
|
||||
a_x = NEW(int, 2);
|
||||
a_y = NEW(int, 2);
|
||||
|
||||
|
||||
a_x[0] = 0;
|
||||
a_x[1] = desk->real.w;
|
||||
a_y[0] = 0;
|
||||
a_y[1] = desk->real.h;
|
||||
|
||||
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
|
||||
E_Border *bd;
|
||||
|
||||
bd = l->data;
|
||||
if ((bd != b) && (bd->current.visible))
|
||||
{
|
||||
|
@ -141,291 +149,320 @@ e_place_smart(E_Border *b, E_Desktop *desk, int *x, int *y)
|
|||
bd->current.w, bd->current.h,
|
||||
0, 0, desk->real.w, desk->real.h))
|
||||
{
|
||||
int i, j;
|
||||
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < a_w; i++)
|
||||
{
|
||||
int ok = 1;
|
||||
|
||||
int ok = 1;
|
||||
|
||||
if (bd->current.x > 0)
|
||||
{
|
||||
if (a_x[i] == bd->current.x) ok = 0;
|
||||
if (a_x[i] == bd->current.x)
|
||||
ok = 0;
|
||||
else if (a_x[i] > bd->current.x)
|
||||
{
|
||||
a_w++;
|
||||
REALLOC(a_x, int, a_w);
|
||||
|
||||
for (j = a_w - 1; j > i; j--)
|
||||
a_x[j] = a_x[j - 1];
|
||||
a_x[j] = a_x[j - 1];
|
||||
a_x[i] = bd->current.x;
|
||||
ok = 0;
|
||||
}
|
||||
}
|
||||
if (!ok) break;
|
||||
if (!ok)
|
||||
break;
|
||||
}
|
||||
for (i = 0; i < a_w; i++)
|
||||
{
|
||||
int ok = 1;
|
||||
|
||||
int ok = 1;
|
||||
|
||||
if (bd->current.x + bd->current.w < desk->real.w)
|
||||
{
|
||||
if (a_x[i] == bd->current.x + bd->current.w) ok = 0;
|
||||
if (a_x[i] == bd->current.x + bd->current.w)
|
||||
ok = 0;
|
||||
else if (a_x[i] > bd->current.x + bd->current.w)
|
||||
{
|
||||
a_w++;
|
||||
REALLOC(a_x, int, a_w);
|
||||
|
||||
for (j = a_w - 1; j > i; j--)
|
||||
a_x[j] = a_x[j - 1];
|
||||
a_x[j] = a_x[j - 1];
|
||||
a_x[i] = bd->current.x + bd->current.w;
|
||||
ok = 0;
|
||||
}
|
||||
}
|
||||
if (!ok) break;
|
||||
if (!ok)
|
||||
break;
|
||||
}
|
||||
for (i = 0; i < a_h; i++)
|
||||
{
|
||||
int ok = 1;
|
||||
|
||||
int ok = 1;
|
||||
|
||||
if (bd->current.y > 0)
|
||||
{
|
||||
if (a_y[i] == bd->current.y) ok = 0;
|
||||
if (a_y[i] == bd->current.y)
|
||||
ok = 0;
|
||||
else if (a_y[i] > bd->current.y)
|
||||
{
|
||||
a_h++;
|
||||
REALLOC(a_y, int, a_h);
|
||||
|
||||
for (j = a_h - 1; j > i; j--)
|
||||
a_y[j] = a_y[j - 1];
|
||||
a_y[j] = a_y[j - 1];
|
||||
a_y[i] = bd->current.y;
|
||||
ok = 0;
|
||||
}
|
||||
}
|
||||
if (!ok) break;
|
||||
if (!ok)
|
||||
break;
|
||||
}
|
||||
for (i = 0; i < a_h; i++)
|
||||
{
|
||||
int ok = 1;
|
||||
|
||||
int ok = 1;
|
||||
|
||||
if (bd->current.y + bd->current.h < desk->real.h)
|
||||
{
|
||||
if (a_y[i] == bd->current.y + bd->current.h) ok = 0;
|
||||
if (a_y[i] == bd->current.y + bd->current.h)
|
||||
ok = 0;
|
||||
else if (a_y[i] > bd->current.y + bd->current.h)
|
||||
{
|
||||
a_h++;
|
||||
REALLOC(a_y, int, a_h);
|
||||
|
||||
for (j = a_h - 1; j > i; j--)
|
||||
a_y[j] = a_y[j - 1];
|
||||
a_y[j] = a_y[j - 1];
|
||||
a_y[i] = bd->current.y + bd->current.h;
|
||||
ok = 0;
|
||||
}
|
||||
}
|
||||
if (!ok) break;
|
||||
if (!ok)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
int i, j;
|
||||
int area = 0x7fffffff;
|
||||
|
||||
for (j = 0; j < a_h - 1; j++)
|
||||
{
|
||||
for (i = 0; i < a_w - 1; i++)
|
||||
{
|
||||
if ((a_x[i] < (desk->real.w - w)) &&
|
||||
(a_y[j] < (desk->real.h - h)))
|
||||
{
|
||||
int ar = 0;
|
||||
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
int x1, y1, w1, h1, x2, y2, w2, h2;
|
||||
|
||||
bd = l->data;
|
||||
x1 = a_x[i];
|
||||
y1 = a_y[j];
|
||||
w1 = w;
|
||||
h1 = h;
|
||||
x2 = bd->current.x;
|
||||
y2 = bd->current.y;
|
||||
w2 = bd->current.w;
|
||||
h2 = bd->current.h;
|
||||
if ((bd != b) && (bd->current.visible) &&
|
||||
INTERSECTS(x1, y1, w1, h1, x2, y2, w2, h2))
|
||||
{
|
||||
int iw, ih;
|
||||
int x0, x00, y0, y00;
|
||||
|
||||
x0 = x1;
|
||||
if (x1 < x2) x0 = x2;
|
||||
x00 = (x1 + w1);
|
||||
if ((x2 + w2) < (x1 + w1)) x00 = (x2 + w2);
|
||||
|
||||
y0 = y1;
|
||||
if (y1 < y2) y0 = y2;
|
||||
y00 = (y1 + h1);
|
||||
if ((y2 + h2) < (y1 + h1)) y00 = (y2 + h2);
|
||||
|
||||
iw = x00 - x0;
|
||||
ih = y00 - y0;
|
||||
ar += (iw * ih);
|
||||
}
|
||||
}
|
||||
if (ar < area)
|
||||
{
|
||||
area = ar;
|
||||
*x = a_x[i];
|
||||
*y = a_y[j];
|
||||
if (ar == 0) goto done;
|
||||
}
|
||||
}
|
||||
if ((a_x[i + 1] - w > 0) &&
|
||||
(a_y[j] < (desk->real.h - h)))
|
||||
{
|
||||
int ar = 0;
|
||||
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
int x1, y1, w1, h1, x2, y2, w2, h2;
|
||||
|
||||
bd = l->data;
|
||||
x1 = a_x[i + 1] - w;
|
||||
y1 = a_y[j];
|
||||
w1 = w;
|
||||
h1 = h;
|
||||
x2 = bd->current.x;
|
||||
y2 = bd->current.y;
|
||||
w2 = bd->current.w;
|
||||
h2 = bd->current.h;
|
||||
if ((bd != b) && (bd->current.visible) &&
|
||||
INTERSECTS(x1, y1, w1, h1, x2, y2, w2, h2))
|
||||
{
|
||||
int iw, ih;
|
||||
int x0, x00, y0, y00;
|
||||
|
||||
x0 = x1;
|
||||
if (x1 < x2) x0 = x2;
|
||||
x00 = (x1 + w1);
|
||||
if ((x2 + w2) < (x1 + w1)) x00 = (x2 + w2);
|
||||
|
||||
y0 = y1;
|
||||
if (y1 < y2) y0 = y2;
|
||||
y00 = (y1 + h1);
|
||||
if ((y2 + h2) < (y1 + h1)) y00 = (y2 + h2);
|
||||
|
||||
iw = x00 - x0;
|
||||
ih = y00 - y0;
|
||||
ar += (iw * ih);
|
||||
}
|
||||
}
|
||||
if (ar < area)
|
||||
{
|
||||
area = ar;
|
||||
*x = a_x[i + 1] - w;
|
||||
*y = a_y[j];
|
||||
if (ar == 0) goto done;
|
||||
}
|
||||
}
|
||||
if ((a_x[i + 1] - w > 0) &&
|
||||
(a_y[j + 1] - h > 0))
|
||||
{
|
||||
int ar = 0;
|
||||
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
int x1, y1, w1, h1, x2, y2, w2, h2;
|
||||
|
||||
bd = l->data;
|
||||
x1 = a_x[i + 1] - w;
|
||||
y1 = a_y[j + 1] - h;
|
||||
w1 = w;
|
||||
h1 = h;
|
||||
x2 = bd->current.x;
|
||||
y2 = bd->current.y;
|
||||
w2 = bd->current.w;
|
||||
h2 = bd->current.h;
|
||||
if ((bd != b) && (bd->current.visible) &&
|
||||
INTERSECTS(x1, y1, w1, h1, x2, y2, w2, h2))
|
||||
{
|
||||
int iw, ih;
|
||||
int x0, x00, y0, y00;
|
||||
|
||||
x0 = x1;
|
||||
if (x1 < x2) x0 = x2;
|
||||
x00 = (x1 + w1);
|
||||
if ((x2 + w2) < (x1 + w1)) x00 = (x2 + w2);
|
||||
|
||||
y0 = y1;
|
||||
if (y1 < y2) y0 = y2;
|
||||
y00 = (y1 + h1);
|
||||
if ((y2 + h2) < (y1 + h1)) y00 = (y2 + h2);
|
||||
|
||||
iw = x00 - x0;
|
||||
ih = y00 - y0;
|
||||
ar += (iw * ih);
|
||||
}
|
||||
}
|
||||
if (ar < area)
|
||||
{
|
||||
area = ar;
|
||||
*x = a_x[i + 1] - w;
|
||||
*y = a_y[j + 1] - h;
|
||||
if (ar == 0) goto done;
|
||||
}
|
||||
}
|
||||
if ((a_x[i] < (desk->real.w - w)) &&
|
||||
(a_y[j + 1] - h > 0))
|
||||
{
|
||||
int ar = 0;
|
||||
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
int x1, y1, w1, h1, x2, y2, w2, h2;
|
||||
|
||||
bd = l->data;
|
||||
x1 = a_x[i];
|
||||
y1 = a_y[j + 1] - h;
|
||||
w1 = w;
|
||||
h1 = h;
|
||||
x2 = bd->current.x;
|
||||
y2 = bd->current.y;
|
||||
w2 = bd->current.w;
|
||||
h2 = bd->current.h;
|
||||
if ((bd != b) && (bd->current.visible) &&
|
||||
INTERSECTS(x1, y1, w1, h1, x2, y2, w2, h2))
|
||||
{
|
||||
int iw, ih;
|
||||
int x0, x00, y0, y00;
|
||||
|
||||
x0 = x1;
|
||||
if (x1 < x2) x0 = x2;
|
||||
x00 = (x1 + w1);
|
||||
if ((x2 + w2) < (x1 + w1)) x00 = (x2 + w2);
|
||||
|
||||
y0 = y1;
|
||||
if (y1 < y2) y0 = y2;
|
||||
y00 = (y1 + h1);
|
||||
if ((y2 + h2) < (y1 + h1)) y00 = (y2 + h2);
|
||||
|
||||
iw = x00 - x0;
|
||||
ih = y00 - y0;
|
||||
ar += (iw * ih);
|
||||
}
|
||||
}
|
||||
if (ar < area)
|
||||
{
|
||||
area = ar;
|
||||
*x = a_x[i];
|
||||
*y = a_y[j + 1] - h;
|
||||
if (ar == 0) goto done;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
done:
|
||||
{
|
||||
int i, j;
|
||||
int area = 0x7fffffff;
|
||||
|
||||
for (j = 0; j < a_h - 1; j++)
|
||||
{
|
||||
for (i = 0; i < a_w - 1; i++)
|
||||
{
|
||||
if ((a_x[i] < (desk->real.w - w)) &&
|
||||
(a_y[j] < (desk->real.h - h)))
|
||||
{
|
||||
int ar = 0;
|
||||
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
int x1, y1, w1, h1, x2, y2, w2, h2;
|
||||
|
||||
bd = l->data;
|
||||
x1 = a_x[i];
|
||||
y1 = a_y[j];
|
||||
w1 = w;
|
||||
h1 = h;
|
||||
x2 = bd->current.x;
|
||||
y2 = bd->current.y;
|
||||
w2 = bd->current.w;
|
||||
h2 = bd->current.h;
|
||||
if ((bd != b) && (bd->current.visible) &&
|
||||
INTERSECTS(x1, y1, w1, h1, x2, y2, w2, h2))
|
||||
{
|
||||
int iw, ih;
|
||||
int x0, x00, y0, y00;
|
||||
|
||||
x0 = x1;
|
||||
if (x1 < x2)
|
||||
x0 = x2;
|
||||
x00 = (x1 + w1);
|
||||
if ((x2 + w2) < (x1 + w1))
|
||||
x00 = (x2 + w2);
|
||||
|
||||
y0 = y1;
|
||||
if (y1 < y2)
|
||||
y0 = y2;
|
||||
y00 = (y1 + h1);
|
||||
if ((y2 + h2) < (y1 + h1))
|
||||
y00 = (y2 + h2);
|
||||
|
||||
iw = x00 - x0;
|
||||
ih = y00 - y0;
|
||||
ar += (iw * ih);
|
||||
}
|
||||
}
|
||||
if (ar < area)
|
||||
{
|
||||
area = ar;
|
||||
*x = a_x[i];
|
||||
*y = a_y[j];
|
||||
if (ar == 0)
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
if ((a_x[i + 1] - w > 0) && (a_y[j] < (desk->real.h - h)))
|
||||
{
|
||||
int ar = 0;
|
||||
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
int x1, y1, w1, h1, x2, y2, w2, h2;
|
||||
|
||||
bd = l->data;
|
||||
x1 = a_x[i + 1] - w;
|
||||
y1 = a_y[j];
|
||||
w1 = w;
|
||||
h1 = h;
|
||||
x2 = bd->current.x;
|
||||
y2 = bd->current.y;
|
||||
w2 = bd->current.w;
|
||||
h2 = bd->current.h;
|
||||
if ((bd != b) && (bd->current.visible) &&
|
||||
INTERSECTS(x1, y1, w1, h1, x2, y2, w2, h2))
|
||||
{
|
||||
int iw, ih;
|
||||
int x0, x00, y0, y00;
|
||||
|
||||
x0 = x1;
|
||||
if (x1 < x2)
|
||||
x0 = x2;
|
||||
x00 = (x1 + w1);
|
||||
if ((x2 + w2) < (x1 + w1))
|
||||
x00 = (x2 + w2);
|
||||
|
||||
y0 = y1;
|
||||
if (y1 < y2)
|
||||
y0 = y2;
|
||||
y00 = (y1 + h1);
|
||||
if ((y2 + h2) < (y1 + h1))
|
||||
y00 = (y2 + h2);
|
||||
|
||||
iw = x00 - x0;
|
||||
ih = y00 - y0;
|
||||
ar += (iw * ih);
|
||||
}
|
||||
}
|
||||
if (ar < area)
|
||||
{
|
||||
area = ar;
|
||||
*x = a_x[i + 1] - w;
|
||||
*y = a_y[j];
|
||||
if (ar == 0)
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
if ((a_x[i + 1] - w > 0) && (a_y[j + 1] - h > 0))
|
||||
{
|
||||
int ar = 0;
|
||||
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
int x1, y1, w1, h1, x2, y2, w2, h2;
|
||||
|
||||
bd = l->data;
|
||||
x1 = a_x[i + 1] - w;
|
||||
y1 = a_y[j + 1] - h;
|
||||
w1 = w;
|
||||
h1 = h;
|
||||
x2 = bd->current.x;
|
||||
y2 = bd->current.y;
|
||||
w2 = bd->current.w;
|
||||
h2 = bd->current.h;
|
||||
if ((bd != b) && (bd->current.visible) &&
|
||||
INTERSECTS(x1, y1, w1, h1, x2, y2, w2, h2))
|
||||
{
|
||||
int iw, ih;
|
||||
int x0, x00, y0, y00;
|
||||
|
||||
x0 = x1;
|
||||
if (x1 < x2)
|
||||
x0 = x2;
|
||||
x00 = (x1 + w1);
|
||||
if ((x2 + w2) < (x1 + w1))
|
||||
x00 = (x2 + w2);
|
||||
|
||||
y0 = y1;
|
||||
if (y1 < y2)
|
||||
y0 = y2;
|
||||
y00 = (y1 + h1);
|
||||
if ((y2 + h2) < (y1 + h1))
|
||||
y00 = (y2 + h2);
|
||||
|
||||
iw = x00 - x0;
|
||||
ih = y00 - y0;
|
||||
ar += (iw * ih);
|
||||
}
|
||||
}
|
||||
if (ar < area)
|
||||
{
|
||||
area = ar;
|
||||
*x = a_x[i + 1] - w;
|
||||
*y = a_y[j + 1] - h;
|
||||
if (ar == 0)
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
if ((a_x[i] < (desk->real.w - w)) && (a_y[j + 1] - h > 0))
|
||||
{
|
||||
int ar = 0;
|
||||
|
||||
for (l = desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
int x1, y1, w1, h1, x2, y2, w2, h2;
|
||||
|
||||
bd = l->data;
|
||||
x1 = a_x[i];
|
||||
y1 = a_y[j + 1] - h;
|
||||
w1 = w;
|
||||
h1 = h;
|
||||
x2 = bd->current.x;
|
||||
y2 = bd->current.y;
|
||||
w2 = bd->current.w;
|
||||
h2 = bd->current.h;
|
||||
if ((bd != b) && (bd->current.visible) &&
|
||||
INTERSECTS(x1, y1, w1, h1, x2, y2, w2, h2))
|
||||
{
|
||||
int iw, ih;
|
||||
int x0, x00, y0, y00;
|
||||
|
||||
x0 = x1;
|
||||
if (x1 < x2)
|
||||
x0 = x2;
|
||||
x00 = (x1 + w1);
|
||||
if ((x2 + w2) < (x1 + w1))
|
||||
x00 = (x2 + w2);
|
||||
|
||||
y0 = y1;
|
||||
if (y1 < y2)
|
||||
y0 = y2;
|
||||
y00 = (y1 + h1);
|
||||
if ((y2 + h2) < (y1 + h1))
|
||||
y00 = (y2 + h2);
|
||||
|
||||
iw = x00 - x0;
|
||||
ih = y00 - y0;
|
||||
ar += (iw * ih);
|
||||
}
|
||||
}
|
||||
if (ar < area)
|
||||
{
|
||||
area = ar;
|
||||
*x = a_x[i];
|
||||
*y = a_y[j + 1] - h;
|
||||
if (ar == 0)
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
done:
|
||||
FREE(a_x);
|
||||
FREE(a_y);
|
||||
|
||||
|
@ -433,10 +470,10 @@ e_place_smart(E_Border *b, E_Desktop *desk, int *x, int *y)
|
|||
}
|
||||
|
||||
static int
|
||||
e_place_middle(E_Border *b, E_Desktop *desk, int *x, int *y)
|
||||
e_place_middle(E_Border * b, E_Desktop * desk, int *x, int *y)
|
||||
{
|
||||
int w, h;
|
||||
|
||||
int w, h;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
w = b->current.requested.w;
|
||||
|
@ -448,21 +485,24 @@ e_place_middle(E_Border *b, E_Desktop *desk, int *x, int *y)
|
|||
}
|
||||
|
||||
static int
|
||||
e_place_cascade(E_Border *b, E_Desktop *desk, int *x, int *y)
|
||||
e_place_cascade(E_Border * b, E_Desktop * desk, int *x, int *y)
|
||||
{
|
||||
int w, h;
|
||||
static int count_x = 0;
|
||||
static int count_y = 0;
|
||||
int pl, pr, pt, pb;
|
||||
|
||||
int w, h;
|
||||
static int count_x = 0;
|
||||
static int count_y = 0;
|
||||
int pl, pr, pt, pb;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
pl = pr = pt = pb = 0;
|
||||
if (b->bits.l) ebits_get_insets(b->bits.l, &pl, &pr, &pt, &pb);
|
||||
if (b->bits.l)
|
||||
ebits_get_insets(b->bits.l, &pl, &pr, &pt, &pb);
|
||||
w = b->current.requested.w;
|
||||
h = b->current.requested.h;
|
||||
if ((count_x + w) > desk->real.w) count_x = 0;
|
||||
if ((count_y + h) > desk->real.h) count_y = 0;
|
||||
if ((count_x + w) > desk->real.w)
|
||||
count_x = 0;
|
||||
if ((count_y + h) > desk->real.h)
|
||||
count_y = 0;
|
||||
*x = count_x;
|
||||
*y = count_y;
|
||||
count_x += pl;
|
||||
|
@ -472,56 +512,57 @@ e_place_cascade(E_Border *b, E_Desktop *desk, int *x, int *y)
|
|||
}
|
||||
|
||||
static int
|
||||
e_place_random(E_Border *b, E_Desktop *desk, int *x, int *y)
|
||||
e_place_random(E_Border * b, E_Desktop * desk, int *x, int *y)
|
||||
{
|
||||
int w, h;
|
||||
|
||||
int w, h;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
w = b->current.requested.w;
|
||||
h = b->current.requested.h;
|
||||
|
||||
if (w < desk->real.w)
|
||||
*x = (rand() % (desk->real.w - w));
|
||||
*x = (rand() % (desk->real.w - w));
|
||||
else
|
||||
*x = 0;
|
||||
*x = 0;
|
||||
|
||||
if (h < desk->real.h)
|
||||
*y = (rand() % (desk->real.h - h));
|
||||
*y = (rand() % (desk->real.h - h));
|
||||
else
|
||||
*y = 0;
|
||||
*y = 0;
|
||||
|
||||
D_RETURN_(1);
|
||||
}
|
||||
|
||||
int
|
||||
e_place_border(E_Border *b, E_Desktop *desk, int *x, int *y, E_Placement_Mode mode)
|
||||
e_place_border(E_Border * b, E_Desktop * desk, int *x, int *y,
|
||||
E_Placement_Mode mode)
|
||||
{
|
||||
int result = 1;
|
||||
int result = 1;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (b->client.no_place)
|
||||
D_RETURN_(1);
|
||||
|
||||
D_RETURN_(1);
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case E_PLACE_MANUAL:
|
||||
result = e_place_manual (b, desk, x, y);
|
||||
case E_PLACE_MANUAL:
|
||||
result = e_place_manual(b, desk, x, y);
|
||||
break;
|
||||
case E_PLACE_SMART:
|
||||
result = e_place_smart (b, desk, x, y);
|
||||
case E_PLACE_SMART:
|
||||
result = e_place_smart(b, desk, x, y);
|
||||
break;
|
||||
case E_PLACE_MIDDLE:
|
||||
result = e_place_middle (b, desk, x, y);
|
||||
case E_PLACE_MIDDLE:
|
||||
result = e_place_middle(b, desk, x, y);
|
||||
break;
|
||||
case E_PLACE_CASCADE:
|
||||
case E_PLACE_CASCADE:
|
||||
result = e_place_cascade(b, desk, x, y);
|
||||
break;
|
||||
case E_PLACE_RANDOM:
|
||||
result = e_place_random (b, desk, x, y);
|
||||
case E_PLACE_RANDOM:
|
||||
result = e_place_random(b, desk, x, y);
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -533,9 +574,9 @@ e_place_init(void)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
ecore_event_filter_handler_add(ECORE_EVENT_MOUSE_DOWN, e_mouse_down);
|
||||
ecore_event_filter_handler_add(ECORE_EVENT_MOUSE_UP, e_mouse_up);
|
||||
ecore_event_filter_handler_add(ECORE_EVENT_MOUSE_MOVE, e_mouse_move);
|
||||
ecore_event_filter_handler_add(ECORE_EVENT_MOUSE_DOWN, e_mouse_down);
|
||||
ecore_event_filter_handler_add(ECORE_EVENT_MOUSE_UP, e_mouse_up);
|
||||
ecore_event_filter_handler_add(ECORE_EVENT_MOUSE_MOVE, e_mouse_move);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
|
18
src/place.h
18
src/place.h
|
@ -7,11 +7,11 @@
|
|||
|
||||
typedef enum e_placement_mode
|
||||
{
|
||||
E_PLACE_MANUAL,
|
||||
E_PLACE_SMART,
|
||||
E_PLACE_MIDDLE,
|
||||
E_PLACE_CASCADE,
|
||||
E_PLACE_RANDOM
|
||||
E_PLACE_MANUAL,
|
||||
E_PLACE_SMART,
|
||||
E_PLACE_MIDDLE,
|
||||
E_PLACE_CASCADE,
|
||||
E_PLACE_RANDOM
|
||||
}
|
||||
E_Placement_Mode;
|
||||
|
||||
|
@ -21,7 +21,7 @@ E_Placement_Mode;
|
|||
* This function registers the event handlers necessary
|
||||
* to be able to manage window placement strategies.
|
||||
*/
|
||||
void e_place_init(void);
|
||||
void e_place_init(void);
|
||||
|
||||
/**
|
||||
* e_place_border - calculates window coordinates with given strategy
|
||||
|
@ -35,7 +35,7 @@ void e_place_init(void);
|
|||
* and returns them in the @x and @y pointers. It does not actually
|
||||
* place the window.
|
||||
*/
|
||||
int e_place_border(E_Border *b, E_Desktop *desk, int *x, int *y, E_Placement_Mode mode);
|
||||
|
||||
#endif
|
||||
int e_place_border(E_Border * b, E_Desktop * desk, int *x,
|
||||
int *y, E_Placement_Mode mode);
|
||||
|
||||
#endif
|
||||
|
|
88
src/resist.c
88
src/resist.c
|
@ -5,23 +5,24 @@
|
|||
#include "util.h"
|
||||
|
||||
void
|
||||
e_resist_border(E_Border *b)
|
||||
e_resist_border(E_Border * b)
|
||||
{
|
||||
int resist = 1;
|
||||
int desk_resist = 32;
|
||||
int win_resist = 12;
|
||||
int resist = 1;
|
||||
int desk_resist = 32;
|
||||
int win_resist = 12;
|
||||
|
||||
/* int ok = 0; */
|
||||
int dx, dy, d;
|
||||
int resist_x = 0, resist_y = 0;
|
||||
Evas_List l, rects = NULL;
|
||||
E_Rect *r;
|
||||
int dx, dy, d;
|
||||
int resist_x = 0, resist_y = 0;
|
||||
Evas_List l, rects = NULL;
|
||||
E_Rect *r;
|
||||
|
||||
E_CFG_INT(cfg_resist, "settings", "/move/resist", 1);
|
||||
E_CFG_INT(cfg_desk_resist, "settings", "/move/resist/desk", 32);
|
||||
E_CFG_INT(cfg_win_resist, "settings", "/move/resist/win", 12);
|
||||
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
E_CONFIG_INT_GET(cfg_resist, resist);
|
||||
E_CONFIG_INT_GET(cfg_desk_resist, desk_resist);
|
||||
E_CONFIG_INT_GET(cfg_win_resist, win_resist);
|
||||
|
@ -31,7 +32,8 @@ e_resist_border(E_Border *b)
|
|||
b->current.y = b->current.requested.y;
|
||||
D_RETURN;
|
||||
}
|
||||
if (!b->desk) D_RETURN;
|
||||
if (!b->desk)
|
||||
D_RETURN;
|
||||
dx = b->current.requested.x - b->previous.requested.x;
|
||||
dy = b->current.requested.y - b->previous.requested.y;
|
||||
/* edges of screen */
|
||||
|
@ -41,28 +43,34 @@ r = NEW(E_Rect, 1); \
|
|||
r->x = _x; r->y = _y; r->w = _w; r->h = _h; r->v1 = _resist; \
|
||||
rects = evas_list_append(rects, r); \
|
||||
}
|
||||
OBSTACLE(-1000000, -1000000, 2000000 + b->desk->real.w, 1000000, desk_resist);
|
||||
OBSTACLE(-1000000, -1000000, 1000000, 2000000 + b->desk->real.h, desk_resist);
|
||||
OBSTACLE(-1000000, b->desk->real.h, 2000000 + b->desk->real.w, 1000000, desk_resist);
|
||||
OBSTACLE(b->desk->real.w, -1000000, 1000000, 2000000 + b->desk->real.h, desk_resist);
|
||||
OBSTACLE(-1000000, -1000000, 2000000 + b->desk->real.w, 1000000,
|
||||
desk_resist);
|
||||
OBSTACLE(-1000000, -1000000, 1000000, 2000000 + b->desk->real.h,
|
||||
desk_resist);
|
||||
OBSTACLE(-1000000, b->desk->real.h, 2000000 + b->desk->real.w, 1000000,
|
||||
desk_resist);
|
||||
OBSTACLE(b->desk->real.w, -1000000, 1000000, 2000000 + b->desk->real.h,
|
||||
desk_resist);
|
||||
/* can add code here to add more fake obstacles with custom resist values */
|
||||
/* here if need be - ie xinerama middle between screens and panels etc. */
|
||||
|
||||
{
|
||||
if (b->desk->view->iconbar)
|
||||
evas_list_append(rects, e_iconbar_get_resist_rect(b->desk->view->iconbar));
|
||||
evas_list_append(rects,
|
||||
e_iconbar_get_resist_rect(b->desk->view->iconbar));
|
||||
}
|
||||
|
||||
for (l = b->desk->windows; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
|
||||
E_Border *bd;
|
||||
|
||||
bd = l->data;
|
||||
if (bd->current.visible)
|
||||
{
|
||||
if (bd != b)
|
||||
{
|
||||
r = NEW(struct _E_Rect, 1);
|
||||
|
||||
r->x = bd->current.x;
|
||||
r->y = bd->current.y;
|
||||
r->w = bd->current.w;
|
||||
|
@ -81,18 +89,20 @@ rects = evas_list_append(rects, r); \
|
|||
{
|
||||
/* moving right - check left edge of windows against right */
|
||||
d = r->x - (b->current.requested.x + b->current.w);
|
||||
if ((d < 0) && (d >= - r->v1))
|
||||
if ((d < 0) && (d >= -r->v1))
|
||||
{
|
||||
if (resist_x > d) resist_x = d;
|
||||
if (resist_x > d)
|
||||
resist_x = d;
|
||||
}
|
||||
}
|
||||
else if (dx < 0)
|
||||
{
|
||||
/* moving left - check right edge of windows against left */
|
||||
d = b->current.requested.x - (r->x + r->w);
|
||||
if ((d < 0) && (d >= - r->v1))
|
||||
if ((d < 0) && (d >= -r->v1))
|
||||
{
|
||||
if (resist_x > d) resist_x = -d;
|
||||
if (resist_x > d)
|
||||
resist_x = -d;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -102,18 +112,20 @@ rects = evas_list_append(rects, r); \
|
|||
{
|
||||
/* moving down - check top edge of windows against bottom */
|
||||
d = r->y - (b->current.requested.y + b->current.h);
|
||||
if ((d < 0) && (d >=2 - r->v1))
|
||||
if ((d < 0) && (d >= 2 - r->v1))
|
||||
{
|
||||
if (resist_y > d) resist_y = d;
|
||||
if (resist_y > d)
|
||||
resist_y = d;
|
||||
}
|
||||
}
|
||||
else if (dy < 0)
|
||||
{
|
||||
/* moving up - check bottom edge of windows against top */
|
||||
d = b->current.requested.y - (r->y + r->h);
|
||||
if ((d < 0) && (d >= - r->v1))
|
||||
if ((d < 0) && (d >= -r->v1))
|
||||
{
|
||||
if (resist_y > d) resist_y = -d;
|
||||
if (resist_y > d)
|
||||
resist_y = -d;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -123,26 +135,28 @@ rects = evas_list_append(rects, r); \
|
|||
for (l = rects; l; l = l->next)
|
||||
{
|
||||
FREE(l->data);
|
||||
}
|
||||
}
|
||||
evas_list_free(rects);
|
||||
}
|
||||
if (dx != 0)
|
||||
if (dx != 0)
|
||||
{
|
||||
if ((b->previous.requested.x != b->previous.x) &&
|
||||
(((b->previous.requested.dx < 0) && (b->current.requested.dx > 0)) ||
|
||||
((b->previous.requested.dx > 0) && (b->current.requested.dx < 0))))
|
||||
b->current.requested.x = b->current.x;
|
||||
(((b->previous.requested.dx < 0) && (b->current.requested.dx > 0))
|
||||
|| ((b->previous.requested.dx > 0)
|
||||
&& (b->current.requested.dx < 0))))
|
||||
b->current.requested.x = b->current.x;
|
||||
else
|
||||
b->current.x = b->current.requested.x + resist_x;
|
||||
b->current.x = b->current.requested.x + resist_x;
|
||||
}
|
||||
if (dy != 0)
|
||||
if (dy != 0)
|
||||
{
|
||||
if ((b->previous.requested.y != b->previous.y) &&
|
||||
(((b->previous.requested.dy < 0) && (b->current.requested.dy > 0)) ||
|
||||
((b->previous.requested.dy > 0) && (b->current.requested.dy < 0))))
|
||||
b->current.requested.y = b->current.y;
|
||||
(((b->previous.requested.dy < 0) && (b->current.requested.dy > 0))
|
||||
|| ((b->previous.requested.dy > 0)
|
||||
&& (b->current.requested.dy < 0))))
|
||||
b->current.requested.y = b->current.y;
|
||||
else
|
||||
b->current.y = b->current.requested.y + resist_y;
|
||||
b->current.y = b->current.requested.y + resist_y;
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
|
|
|
@ -4,14 +4,14 @@
|
|||
#include "e.h"
|
||||
#include "border.h"
|
||||
|
||||
typedef struct _E_Rect E_Rect;
|
||||
typedef struct _E_Rect E_Rect;
|
||||
|
||||
struct _E_Rect
|
||||
{
|
||||
int x, y, w, h;
|
||||
int v1, v2, v3, v4;
|
||||
int x, y, w, h;
|
||||
int v1, v2, v3, v4;
|
||||
};
|
||||
|
||||
void e_resist_border(E_Border *b);
|
||||
void e_resist_border(E_Border * b);
|
||||
|
||||
#endif
|
||||
|
|
591
src/scrollbar.c
591
src/scrollbar.c
|
@ -3,28 +3,36 @@
|
|||
#include "config.h"
|
||||
#include "util.h"
|
||||
|
||||
static void e_scrollbar_recalc(E_Scrollbar *sb);
|
||||
static void e_scrollbar_setup_bits(E_Scrollbar *sb);
|
||||
static void e_sb_base_down_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, int ox, int oy, int ow, int oh);
|
||||
static void e_sb_base_up_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, int ox, int oy, int ow, int oh);
|
||||
static void e_sb_bar_down_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, int ox, int oy, int ow, int oh);
|
||||
static void e_sb_bar_up_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, int ox, int oy, int ow, int oh);
|
||||
static void e_sb_bar_move_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, int ox, int oy, int ow, int oh);
|
||||
static void e_sb_scroll_timer(int val, void *data);
|
||||
static void e_scrollbar_cleanup(E_Scrollbar *sb);
|
||||
|
||||
static void e_scrollbar_recalc(E_Scrollbar * sb);
|
||||
static void e_scrollbar_setup_bits(E_Scrollbar * sb);
|
||||
static void e_sb_base_down_cb(void *data, Ebits_Object o, char *class,
|
||||
int bt, int x, int y, int ox, int oy,
|
||||
int ow, int oh);
|
||||
static void e_sb_base_up_cb(void *data, Ebits_Object o, char *class,
|
||||
int bt, int x, int y, int ox, int oy,
|
||||
int ow, int oh);
|
||||
static void e_sb_bar_down_cb(void *data, Ebits_Object o, char *class,
|
||||
int bt, int x, int y, int ox, int oy,
|
||||
int ow, int oh);
|
||||
static void e_sb_bar_up_cb(void *data, Ebits_Object o, char *class,
|
||||
int bt, int x, int y, int ox, int oy, int ow,
|
||||
int oh);
|
||||
static void e_sb_bar_move_cb(void *data, Ebits_Object o, char *class,
|
||||
int bt, int x, int y, int ox, int oy,
|
||||
int ow, int oh);
|
||||
static void e_sb_scroll_timer(int val, void *data);
|
||||
static void e_scrollbar_cleanup(E_Scrollbar * sb);
|
||||
|
||||
static void
|
||||
e_scrollbar_recalc(E_Scrollbar *sb)
|
||||
e_scrollbar_recalc(E_Scrollbar * sb)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (sb->base)
|
||||
{
|
||||
double x, y, w, h;
|
||||
|
||||
ebits_get_named_bit_geometry(sb->base, "Trough_Area",
|
||||
&x, &y, &w, &h);
|
||||
double x, y, w, h;
|
||||
|
||||
ebits_get_named_bit_geometry(sb->base, "Trough_Area", &x, &y, &w, &h);
|
||||
sb->bar_area.x = x + sb->x;
|
||||
sb->bar_area.y = y + sb->y;
|
||||
sb->bar_area.w = w;
|
||||
|
@ -34,20 +42,20 @@ e_scrollbar_recalc(E_Scrollbar *sb)
|
|||
sb->bar_pos.w = sb->bar_area.w;
|
||||
sb->bar_pos.h = (sb->bar_area.h * sb->range) / sb->max;
|
||||
sb->bar_pos.x = sb->bar_area.x;
|
||||
sb->bar_pos.y = sb->bar_area.y +
|
||||
((sb->bar_area.h * sb->val) / (sb->max - 1));
|
||||
sb->bar_pos.y = sb->bar_area.y +
|
||||
((sb->bar_area.h * sb->val) / (sb->max - 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
sb->bar_pos.w = (sb->bar_area.w * sb->range) / sb->max;
|
||||
sb->bar_pos.h = sb->bar_area.h;
|
||||
sb->bar_pos.x = sb->bar_area.x +
|
||||
((sb->bar_area.w * sb->val) / (sb->max - 1));
|
||||
sb->bar_pos.x = sb->bar_area.x +
|
||||
((sb->bar_area.w * sb->val) / (sb->max - 1));
|
||||
sb->bar_pos.y = sb->bar_area.y;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
sb->bar_area.x = sb->x;
|
||||
sb->bar_area.y = sb->y;
|
||||
sb->bar_area.w = sb->w;
|
||||
|
@ -63,79 +71,102 @@ e_scrollbar_recalc(E_Scrollbar *sb)
|
|||
}
|
||||
|
||||
static void
|
||||
e_scrollbar_setup_bits(E_Scrollbar *sb)
|
||||
e_scrollbar_setup_bits(E_Scrollbar * sb)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
|
||||
char buf[PATH_MAX];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (sb->direction == 1)
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "%s/scroll_base_v.bits.db", e_config_get("scrollbars"));
|
||||
snprintf(buf, PATH_MAX, "%s/scroll_base_v.bits.db",
|
||||
e_config_get("scrollbars"));
|
||||
sb->base = ebits_load(buf);
|
||||
snprintf(buf, PATH_MAX, "%s/scroll_bar_v.bits.db", e_config_get("scrollbars"));
|
||||
snprintf(buf, PATH_MAX, "%s/scroll_bar_v.bits.db",
|
||||
e_config_get("scrollbars"));
|
||||
sb->bar = ebits_load(buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf(buf, PATH_MAX, "%s/scroll_base_h.bits.db", e_config_get("scrollbars"));
|
||||
snprintf(buf, PATH_MAX, "%s/scroll_base_h.bits.db",
|
||||
e_config_get("scrollbars"));
|
||||
sb->base = ebits_load(buf);
|
||||
snprintf(buf, PATH_MAX, "%s/scroll_bar_h.bits.db", e_config_get("scrollbars"));
|
||||
snprintf(buf, PATH_MAX, "%s/scroll_bar_h.bits.db",
|
||||
e_config_get("scrollbars"));
|
||||
sb->bar = ebits_load(buf);
|
||||
}
|
||||
if (sb->base)
|
||||
{
|
||||
int w, h;
|
||||
|
||||
int w, h;
|
||||
|
||||
ebits_add_to_evas(sb->base, sb->evas);
|
||||
ebits_get_min_size(sb->base, &w, &h);
|
||||
sb->w = w;
|
||||
sb->h = h;
|
||||
|
||||
ebits_set_classed_bit_callback(sb->base, "Scrollbar_Trough", CALLBACK_MOUSE_DOWN, e_sb_base_down_cb, sb);
|
||||
ebits_set_classed_bit_callback(sb->base, "Scrollbar_Trough", CALLBACK_MOUSE_UP, e_sb_base_up_cb, sb);
|
||||
ebits_set_classed_bit_callback(sb->base, "Scrollbar_Arrow1", CALLBACK_MOUSE_DOWN, e_sb_base_down_cb, sb);
|
||||
ebits_set_classed_bit_callback(sb->base, "Scrollbar_Arrow1", CALLBACK_MOUSE_UP, e_sb_base_up_cb, sb);
|
||||
ebits_set_classed_bit_callback(sb->base, "Scrollbar_Arrow2", CALLBACK_MOUSE_DOWN, e_sb_base_down_cb, sb);
|
||||
ebits_set_classed_bit_callback(sb->base, "Scrollbar_Arrow2", CALLBACK_MOUSE_UP, e_sb_base_up_cb, sb);
|
||||
|
||||
ebits_set_classed_bit_callback(sb->base, "Scrollbar_Trough",
|
||||
CALLBACK_MOUSE_DOWN, e_sb_base_down_cb,
|
||||
sb);
|
||||
ebits_set_classed_bit_callback(sb->base, "Scrollbar_Trough",
|
||||
CALLBACK_MOUSE_UP, e_sb_base_up_cb, sb);
|
||||
ebits_set_classed_bit_callback(sb->base, "Scrollbar_Arrow1",
|
||||
CALLBACK_MOUSE_DOWN, e_sb_base_down_cb,
|
||||
sb);
|
||||
ebits_set_classed_bit_callback(sb->base, "Scrollbar_Arrow1",
|
||||
CALLBACK_MOUSE_UP, e_sb_base_up_cb, sb);
|
||||
ebits_set_classed_bit_callback(sb->base, "Scrollbar_Arrow2",
|
||||
CALLBACK_MOUSE_DOWN, e_sb_base_down_cb,
|
||||
sb);
|
||||
ebits_set_classed_bit_callback(sb->base, "Scrollbar_Arrow2",
|
||||
CALLBACK_MOUSE_UP, e_sb_base_up_cb, sb);
|
||||
}
|
||||
if (sb->bar)
|
||||
{
|
||||
ebits_add_to_evas(sb->bar, sb->evas);
|
||||
ebits_set_classed_bit_callback(sb->bar, "Scrollbar_Bar", CALLBACK_MOUSE_DOWN, e_sb_bar_down_cb, sb);
|
||||
ebits_set_classed_bit_callback(sb->bar, "Scrollbar_Bar", CALLBACK_MOUSE_UP, e_sb_bar_up_cb, sb);
|
||||
ebits_set_classed_bit_callback(sb->bar, "Scrollbar_Bar", CALLBACK_MOUSE_MOVE, e_sb_bar_move_cb, sb);
|
||||
ebits_set_classed_bit_callback(sb->bar, "Scrollbar_Bar",
|
||||
CALLBACK_MOUSE_DOWN, e_sb_bar_down_cb,
|
||||
sb);
|
||||
ebits_set_classed_bit_callback(sb->bar, "Scrollbar_Bar",
|
||||
CALLBACK_MOUSE_UP, e_sb_bar_up_cb, sb);
|
||||
ebits_set_classed_bit_callback(sb->bar, "Scrollbar_Bar",
|
||||
CALLBACK_MOUSE_MOVE, e_sb_bar_move_cb,
|
||||
sb);
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
static void
|
||||
e_sb_base_down_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, int ox, int oy, int ow, int oh)
|
||||
e_sb_base_down_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y,
|
||||
int ox, int oy, int ow, int oh)
|
||||
{
|
||||
E_Scrollbar *sb;
|
||||
double prev;
|
||||
char name[PATH_MAX];
|
||||
int inc;
|
||||
|
||||
E_Scrollbar *sb;
|
||||
double prev;
|
||||
char name[PATH_MAX];
|
||||
int inc;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
sb = data;
|
||||
if (sb->mouse_down) D_RETURN;
|
||||
if (sb->mouse_down)
|
||||
D_RETURN;
|
||||
sb->mouse_down = bt;
|
||||
if (!class) D_RETURN;
|
||||
if (!class)
|
||||
D_RETURN;
|
||||
prev = sb->val;
|
||||
|
||||
D ( "x %d y %d bt %d\n" , x , y , bt );
|
||||
D ( "val %f range %f max %f\n" , sb->val , sb->range , sb->max );
|
||||
D ( "sb x %f y %f w %f h %f\n" , sb->x, sb->y, sb->w, sb->h );
|
||||
D ( "sb area x %f y %f w %f h %f\n" , sb->bar_area.x, sb->bar_area.y, sb->bar_area.w, sb->bar_area.h );
|
||||
D ( "sb pos x %f y %f w %f h %f\n" , sb->bar_pos.x, sb->bar_pos.y, sb->bar_pos.w, sb->bar_pos.h );
|
||||
D("x %d y %d bt %d\n", x, y, bt);
|
||||
D("val %f range %f max %f\n", sb->val, sb->range, sb->max);
|
||||
D("sb x %f y %f w %f h %f\n", sb->x, sb->y, sb->w, sb->h);
|
||||
D("sb area x %f y %f w %f h %f\n", sb->bar_area.x, sb->bar_area.y,
|
||||
sb->bar_area.w, sb->bar_area.h);
|
||||
D("sb pos x %f y %f w %f h %f\n", sb->bar_pos.x, sb->bar_pos.y,
|
||||
sb->bar_pos.w, sb->bar_pos.h);
|
||||
|
||||
if (!strcmp(class, "Scrollbar_Arrow1"))
|
||||
{
|
||||
sb->scroll_step = -16;
|
||||
sb->scroll_speed = 0.01;
|
||||
sb->scroll_step = -16;
|
||||
sb->scroll_speed = 0.01;
|
||||
|
||||
snprintf(name, PATH_MAX, "scroll_up.%i.%s", sb->direction, sb->dir);
|
||||
ecore_add_event_timer(name, sb->scroll_speed, e_sb_scroll_timer, 0, sb);
|
||||
|
@ -143,8 +174,8 @@ e_sb_base_down_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y,
|
|||
|
||||
else if (!strcmp(class, "Scrollbar_Arrow2"))
|
||||
{
|
||||
sb->scroll_step = 16;
|
||||
sb->scroll_speed = 0.01;
|
||||
sb->scroll_step = 16;
|
||||
sb->scroll_speed = 0.01;
|
||||
|
||||
snprintf(name, PATH_MAX, "scroll_down.%i.%s", sb->direction, sb->dir);
|
||||
ecore_add_event_timer(name, sb->scroll_speed, e_sb_scroll_timer, 0, sb);
|
||||
|
@ -152,57 +183,71 @@ e_sb_base_down_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y,
|
|||
|
||||
else if (!strcmp(class, "Scrollbar_Trough"))
|
||||
{
|
||||
if ( bt == 1 )
|
||||
{
|
||||
if ( sb->direction ) /* vertical */
|
||||
{
|
||||
sb->scroll_step = sb->bar_area.h;
|
||||
inc = y - sb->bar_pos.y;
|
||||
}
|
||||
else /* horizontal */
|
||||
{
|
||||
sb->scroll_step = sb->bar_area.w;
|
||||
inc = x - sb->bar_pos.x;
|
||||
}
|
||||
if (bt == 1)
|
||||
{
|
||||
if (sb->direction) /* vertical */
|
||||
{
|
||||
sb->scroll_step = sb->bar_area.h;
|
||||
inc = y - sb->bar_pos.y;
|
||||
}
|
||||
else /* horizontal */
|
||||
{
|
||||
sb->scroll_step = sb->bar_area.w;
|
||||
inc = x - sb->bar_pos.x;
|
||||
}
|
||||
|
||||
if ( inc < 0 ) /* scroll up (or left) */
|
||||
{
|
||||
sb->scroll_step = -sb->scroll_step;
|
||||
snprintf ( name , PATH_MAX , "scroll_up.%i.%s" , sb->direction , sb->dir );
|
||||
}
|
||||
else /* scroll down (or right) */
|
||||
{
|
||||
snprintf ( name , PATH_MAX , "scroll_down.%i.%s" , sb->direction , sb->dir );
|
||||
}
|
||||
if (inc < 0) /* scroll up (or left) */
|
||||
{
|
||||
sb->scroll_step = -sb->scroll_step;
|
||||
snprintf(name, PATH_MAX, "scroll_up.%i.%s", sb->direction,
|
||||
sb->dir);
|
||||
}
|
||||
else /* scroll down (or right) */
|
||||
{
|
||||
snprintf(name, PATH_MAX, "scroll_down.%i.%s", sb->direction,
|
||||
sb->dir);
|
||||
}
|
||||
|
||||
/* scroll once in the chosen direction */
|
||||
sb->val += sb->scroll_step;
|
||||
if (sb->val < 0) sb->val = 0;
|
||||
if ((sb->val + sb->range) > sb->max) sb->val = sb->max - sb->range;
|
||||
/* scroll once in the chosen direction */
|
||||
sb->val += sb->scroll_step;
|
||||
if (sb->val < 0)
|
||||
sb->val = 0;
|
||||
if ((sb->val + sb->range) > sb->max)
|
||||
sb->val = sb->max - sb->range;
|
||||
|
||||
/* set a timer to keep on scrolling */
|
||||
sb->scroll_speed = 0.1;
|
||||
ecore_add_event_timer ( name , sb->scroll_speed , e_sb_scroll_timer , 0 , sb );
|
||||
}
|
||||
/* set a timer to keep on scrolling */
|
||||
sb->scroll_speed = 0.1;
|
||||
ecore_add_event_timer(name, sb->scroll_speed, e_sb_scroll_timer, 0,
|
||||
sb);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (sb->direction)
|
||||
sb->val = ( y - sb->bar_area.y) * sb->max / sb->bar_area.h - sb->bar_area.h / 2;
|
||||
else
|
||||
sb->val = ( x - sb->bar_area.x) * sb->max / sb->bar_area.w - sb->bar_area.w / 2;
|
||||
else
|
||||
{
|
||||
if (sb->direction)
|
||||
sb->val =
|
||||
(y - sb->bar_area.y) * sb->max / sb->bar_area.h -
|
||||
sb->bar_area.h / 2;
|
||||
else
|
||||
sb->val =
|
||||
(x - sb->bar_area.x) * sb->max / sb->bar_area.w -
|
||||
sb->bar_area.w / 2;
|
||||
|
||||
if (sb->val < 0) sb->val = 0;
|
||||
if ((sb->val + sb->range) > sb->max) sb->val = sb->max - sb->range;
|
||||
}
|
||||
if (sb->val < 0)
|
||||
sb->val = 0;
|
||||
if ((sb->val + sb->range) > sb->max)
|
||||
sb->val = sb->max - sb->range;
|
||||
}
|
||||
}
|
||||
|
||||
e_scrollbar_recalc(sb);
|
||||
if (sb->bar) ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar) ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (sb->bar)
|
||||
ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar)
|
||||
ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (prev != sb->val)
|
||||
{
|
||||
if (sb->func_change) sb->func_change(sb->func_data, sb, sb->val);
|
||||
if (sb->func_change)
|
||||
sb->func_change(sb->func_data, sb, sb->val);
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
|
@ -214,17 +259,21 @@ e_sb_base_down_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y,
|
|||
}
|
||||
|
||||
static void
|
||||
e_sb_base_up_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, int ox, int oy, int ow, int oh)
|
||||
e_sb_base_up_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y,
|
||||
int ox, int oy, int ow, int oh)
|
||||
{
|
||||
E_Scrollbar *sb;
|
||||
char name[PATH_MAX];
|
||||
|
||||
E_Scrollbar *sb;
|
||||
char name[PATH_MAX];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
sb = data;
|
||||
if (bt == sb->mouse_down) sb->mouse_down = 0;
|
||||
else D_RETURN;
|
||||
if (!class) D_RETURN;
|
||||
if (bt == sb->mouse_down)
|
||||
sb->mouse_down = 0;
|
||||
else
|
||||
D_RETURN;
|
||||
if (!class)
|
||||
D_RETURN;
|
||||
|
||||
if (!strcmp(class, "Scrollbar_Arrow1"))
|
||||
{
|
||||
|
@ -244,18 +293,20 @@ e_sb_base_up_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, i
|
|||
|
||||
else if (!strcmp(class, "Scrollbar_Trough"))
|
||||
{
|
||||
if ( sb->scroll_step < 0 )
|
||||
{
|
||||
sb->scroll_step = 0;
|
||||
snprintf(name, PATH_MAX, "scroll_up.%i.%s", sb->direction, sb->dir);
|
||||
ecore_del_event_timer(name);
|
||||
}
|
||||
else if ( sb->scroll_step > 0 )
|
||||
{
|
||||
sb->scroll_step = 0;
|
||||
snprintf(name, PATH_MAX, "scroll_down.%i.%s", sb->direction, sb->dir);
|
||||
ecore_del_event_timer(name);
|
||||
}
|
||||
if (sb->scroll_step < 0)
|
||||
{
|
||||
sb->scroll_step = 0;
|
||||
snprintf(name, PATH_MAX, "scroll_up.%i.%s", sb->direction,
|
||||
sb->dir);
|
||||
ecore_del_event_timer(name);
|
||||
}
|
||||
else if (sb->scroll_step > 0)
|
||||
{
|
||||
sb->scroll_step = 0;
|
||||
snprintf(name, PATH_MAX, "scroll_down.%i.%s", sb->direction,
|
||||
sb->dir);
|
||||
ecore_del_event_timer(name);
|
||||
}
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
|
@ -269,14 +320,16 @@ e_sb_base_up_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, i
|
|||
}
|
||||
|
||||
static void
|
||||
e_sb_bar_down_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, int ox, int oy, int ow, int oh)
|
||||
e_sb_bar_down_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y,
|
||||
int ox, int oy, int ow, int oh)
|
||||
{
|
||||
E_Scrollbar *sb;
|
||||
|
||||
E_Scrollbar *sb;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
sb = data;
|
||||
if (sb->mouse_down) D_RETURN;
|
||||
if (sb->mouse_down)
|
||||
D_RETURN;
|
||||
sb->mouse_down = bt;
|
||||
sb->down_x = x;
|
||||
sb->down_y = y;
|
||||
|
@ -295,17 +348,18 @@ e_sb_bar_down_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y,
|
|||
}
|
||||
|
||||
static void
|
||||
e_sb_bar_up_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, int ox, int oy, int ow, int oh)
|
||||
e_sb_bar_up_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y,
|
||||
int ox, int oy, int ow, int oh)
|
||||
{
|
||||
E_Scrollbar *sb;
|
||||
|
||||
E_Scrollbar *sb;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
sb = data;
|
||||
if (bt == sb->mouse_down)
|
||||
sb->mouse_down = 0;
|
||||
sb->mouse_down = 0;
|
||||
else
|
||||
D_RETURN;
|
||||
D_RETURN;
|
||||
|
||||
D_RETURN;
|
||||
UN(o);
|
||||
|
@ -319,15 +373,17 @@ e_sb_bar_up_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, in
|
|||
}
|
||||
|
||||
static void
|
||||
e_sb_bar_move_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y, int ox, int oy, int ow, int oh)
|
||||
e_sb_bar_move_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y,
|
||||
int ox, int oy, int ow, int oh)
|
||||
{
|
||||
E_Scrollbar *sb;
|
||||
int dx, dy;
|
||||
double prev;
|
||||
|
||||
E_Scrollbar *sb;
|
||||
int dx, dy;
|
||||
double prev;
|
||||
|
||||
D_ENTER;
|
||||
sb = data;
|
||||
if (!sb->mouse_down) D_RETURN;
|
||||
if (!sb->mouse_down)
|
||||
D_RETURN;
|
||||
dx = x - sb->mouse_x;
|
||||
dy = y - sb->mouse_y;
|
||||
sb->mouse_x = x;
|
||||
|
@ -335,24 +391,31 @@ e_sb_bar_move_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y,
|
|||
prev = sb->val;
|
||||
if (sb->direction)
|
||||
{
|
||||
if (sb->bar_area.h > sb->bar_pos.h) sb->val +=
|
||||
((double)dy * sb->max) / sb->bar_area.h;
|
||||
else sb->val = 0;
|
||||
if (sb->bar_area.h > sb->bar_pos.h)
|
||||
sb->val += ((double)dy * sb->max) / sb->bar_area.h;
|
||||
else
|
||||
sb->val = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sb->bar_area.w > sb->bar_pos.w) sb->val +=
|
||||
((double)dx * sb->max) / sb->bar_area.w;
|
||||
else sb->val = 0;
|
||||
if (sb->bar_area.w > sb->bar_pos.w)
|
||||
sb->val += ((double)dx * sb->max) / sb->bar_area.w;
|
||||
else
|
||||
sb->val = 0;
|
||||
}
|
||||
if (sb->val < 0) sb->val = 0;
|
||||
if ((sb->val + sb->range) > sb->max) sb->val = sb->max - sb->range;
|
||||
if (sb->val < 0)
|
||||
sb->val = 0;
|
||||
if ((sb->val + sb->range) > sb->max)
|
||||
sb->val = sb->max - sb->range;
|
||||
if (prev != sb->val)
|
||||
{
|
||||
e_scrollbar_recalc(sb);
|
||||
if (sb->bar) ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar) ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (sb->func_change) sb->func_change(sb->func_data, sb, sb->val);
|
||||
if (sb->bar)
|
||||
ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar)
|
||||
ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (sb->func_change)
|
||||
sb->func_change(sb->func_data, sb, sb->val);
|
||||
}
|
||||
|
||||
D_RETURN;
|
||||
|
@ -370,47 +433,50 @@ e_sb_bar_move_cb(void *data, Ebits_Object o, char *class, int bt, int x, int y,
|
|||
static void
|
||||
e_sb_scroll_timer(int val, void *data)
|
||||
{
|
||||
E_Scrollbar *sb;
|
||||
char name[PATH_MAX];
|
||||
E_Scrollbar *sb;
|
||||
char name[PATH_MAX];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
sb = data;
|
||||
|
||||
if ( sb->scroll_step < 0 )
|
||||
if (sb->scroll_step < 0)
|
||||
{
|
||||
sb->val += sb->scroll_step;
|
||||
if (sb->val < 0) sb->val = 0;
|
||||
|
||||
sb->val += sb->scroll_step;
|
||||
if (sb->val < 0)
|
||||
sb->val = 0;
|
||||
|
||||
snprintf(name, PATH_MAX, "scroll_up.%i.%s", sb->direction, sb->dir);
|
||||
ecore_add_event_timer(name, sb->scroll_speed, e_sb_scroll_timer, 0, sb);
|
||||
}
|
||||
|
||||
else if ( sb->scroll_step > 0 )
|
||||
else if (sb->scroll_step > 0)
|
||||
{
|
||||
sb->val += sb->scroll_step;
|
||||
if ((sb->val + sb->range) > sb->max) sb->val = sb->max - sb->range;
|
||||
sb->val += sb->scroll_step;
|
||||
if ((sb->val + sb->range) > sb->max)
|
||||
sb->val = sb->max - sb->range;
|
||||
|
||||
snprintf(name, PATH_MAX, "scroll_down.%i.%s", sb->direction, sb->dir);
|
||||
ecore_add_event_timer(name, sb->scroll_speed, e_sb_scroll_timer, 0, sb);
|
||||
}
|
||||
|
||||
|
||||
e_scrollbar_recalc(sb);
|
||||
if (sb->bar) ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar) ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (sb->func_change) sb->func_change(sb->func_data, sb, sb->val);
|
||||
if (sb->bar)
|
||||
ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar)
|
||||
ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (sb->func_change)
|
||||
sb->func_change(sb->func_data, sb, sb->val);
|
||||
|
||||
D_RETURN;
|
||||
UN(val);
|
||||
}
|
||||
|
||||
|
||||
|
||||
E_Scrollbar *
|
||||
E_Scrollbar *
|
||||
e_scrollbar_new(void)
|
||||
{
|
||||
E_Scrollbar *sb;
|
||||
|
||||
E_Scrollbar *sb;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
sb = NEW(E_Scrollbar, 1);
|
||||
|
@ -427,16 +493,18 @@ e_scrollbar_new(void)
|
|||
}
|
||||
|
||||
static void
|
||||
e_scrollbar_cleanup(E_Scrollbar *sb)
|
||||
e_scrollbar_cleanup(E_Scrollbar * sb)
|
||||
{
|
||||
char name[PATH_MAX];
|
||||
|
||||
char name[PATH_MAX];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (sb->evas)
|
||||
{
|
||||
if (sb->base) ebits_free(sb->base);
|
||||
if (sb->bar) ebits_free(sb->bar);
|
||||
if (sb->base)
|
||||
ebits_free(sb->base);
|
||||
if (sb->bar)
|
||||
ebits_free(sb->bar);
|
||||
}
|
||||
IF_FREE(sb->dir);
|
||||
|
||||
|
@ -451,30 +519,40 @@ e_scrollbar_cleanup(E_Scrollbar *sb)
|
|||
}
|
||||
|
||||
void
|
||||
e_scrollbar_add_to_evas(E_Scrollbar *sb, Evas evas)
|
||||
e_scrollbar_add_to_evas(E_Scrollbar * sb, Evas evas)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (sb->evas)
|
||||
{
|
||||
if (sb->base) ebits_free(sb->base);
|
||||
if (sb->bar) ebits_free(sb->bar);
|
||||
if (sb->base)
|
||||
ebits_free(sb->base);
|
||||
if (sb->bar)
|
||||
ebits_free(sb->bar);
|
||||
}
|
||||
sb->evas = evas;
|
||||
if (sb->evas)
|
||||
{
|
||||
e_scrollbar_setup_bits(sb);
|
||||
if (sb->base) ebits_set_layer(sb->base, sb->layer);
|
||||
if (sb->bar) ebits_set_layer(sb->bar, sb->layer);
|
||||
if (sb->base) ebits_move(sb->base, sb->x, sb->y);
|
||||
if (sb->base) ebits_resize(sb->base, sb->w, sb->h);
|
||||
if (sb->base)
|
||||
ebits_set_layer(sb->base, sb->layer);
|
||||
if (sb->bar)
|
||||
ebits_set_layer(sb->bar, sb->layer);
|
||||
if (sb->base)
|
||||
ebits_move(sb->base, sb->x, sb->y);
|
||||
if (sb->base)
|
||||
ebits_resize(sb->base, sb->w, sb->h);
|
||||
e_scrollbar_recalc(sb);
|
||||
if (sb->bar) ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar) ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (sb->bar)
|
||||
ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar)
|
||||
ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (sb->visible)
|
||||
{
|
||||
if (sb->base) ebits_show(sb->base);
|
||||
if (sb->bar) ebits_show(sb->bar);
|
||||
if (sb->base)
|
||||
ebits_show(sb->base);
|
||||
if (sb->bar)
|
||||
ebits_show(sb->bar);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -482,79 +560,95 @@ e_scrollbar_add_to_evas(E_Scrollbar *sb, Evas evas)
|
|||
}
|
||||
|
||||
void
|
||||
e_scrollbar_show(E_Scrollbar *sb)
|
||||
e_scrollbar_show(E_Scrollbar * sb)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (sb->visible) D_RETURN;
|
||||
if (sb->visible)
|
||||
D_RETURN;
|
||||
sb->visible = 1;
|
||||
if (sb->base) ebits_show(sb->base);
|
||||
if (sb->bar) ebits_show(sb->bar);
|
||||
if (sb->base)
|
||||
ebits_show(sb->base);
|
||||
if (sb->bar)
|
||||
ebits_show(sb->bar);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_scrollbar_hide(E_Scrollbar *sb)
|
||||
e_scrollbar_hide(E_Scrollbar * sb)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (!sb->visible) D_RETURN;
|
||||
if (!sb->visible)
|
||||
D_RETURN;
|
||||
sb->visible = 0;
|
||||
if (sb->base) ebits_hide(sb->base);
|
||||
if (sb->bar) ebits_hide(sb->bar);
|
||||
if (sb->base)
|
||||
ebits_hide(sb->base);
|
||||
if (sb->bar)
|
||||
ebits_hide(sb->bar);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_scrollbar_raise(E_Scrollbar *sb)
|
||||
e_scrollbar_raise(E_Scrollbar * sb)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (sb->base) ebits_raise(sb->base);
|
||||
if (sb->bar) ebits_raise(sb->bar);
|
||||
if (sb->base)
|
||||
ebits_raise(sb->base);
|
||||
if (sb->bar)
|
||||
ebits_raise(sb->bar);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_scrollbar_lower(E_Scrollbar *sb)
|
||||
e_scrollbar_lower(E_Scrollbar * sb)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (sb->bar) ebits_lower(sb->bar);
|
||||
if (sb->base) ebits_lower(sb->base);
|
||||
if (sb->bar)
|
||||
ebits_lower(sb->bar);
|
||||
if (sb->base)
|
||||
ebits_lower(sb->base);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_scrollbar_set_layer(E_Scrollbar *sb, int l)
|
||||
e_scrollbar_set_layer(E_Scrollbar * sb, int l)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (l == sb->layer) D_RETURN;
|
||||
if (l == sb->layer)
|
||||
D_RETURN;
|
||||
sb->layer = l;
|
||||
if (sb->base) ebits_set_layer(sb->base, sb->layer);
|
||||
if (sb->bar) ebits_set_layer(sb->bar, sb->layer);
|
||||
if (sb->base)
|
||||
ebits_set_layer(sb->base, sb->layer);
|
||||
if (sb->bar)
|
||||
ebits_set_layer(sb->bar, sb->layer);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_scrollbar_set_direction(E_Scrollbar *sb, int d)
|
||||
e_scrollbar_set_direction(E_Scrollbar * sb, int d)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (d == sb->direction) D_RETURN;
|
||||
if (d == sb->direction)
|
||||
D_RETURN;
|
||||
sb->direction = d;
|
||||
if (sb->evas)
|
||||
{
|
||||
Evas evas;
|
||||
|
||||
if (sb->base) ebits_free(sb->base);
|
||||
if (sb->bar) ebits_free(sb->bar);
|
||||
Evas evas;
|
||||
|
||||
if (sb->base)
|
||||
ebits_free(sb->base);
|
||||
if (sb->bar)
|
||||
ebits_free(sb->bar);
|
||||
evas = sb->evas;
|
||||
sb->evas = NULL;
|
||||
e_scrollbar_add_to_evas(sb, evas);
|
||||
|
@ -564,40 +658,47 @@ e_scrollbar_set_direction(E_Scrollbar *sb, int d)
|
|||
}
|
||||
|
||||
void
|
||||
e_scrollbar_move(E_Scrollbar *sb, double x, double y)
|
||||
e_scrollbar_move(E_Scrollbar * sb, double x, double y)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if ((x == sb->x) && (y == sb->y)) D_RETURN;
|
||||
if ((x == sb->x) && (y == sb->y))
|
||||
D_RETURN;
|
||||
sb->x = x;
|
||||
sb->y = y;
|
||||
if (sb->base) ebits_move(sb->base, sb->x, sb->y);
|
||||
if (sb->base)
|
||||
ebits_move(sb->base, sb->x, sb->y);
|
||||
e_scrollbar_recalc(sb);
|
||||
if (sb->bar) ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar)
|
||||
ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_scrollbar_resize(E_Scrollbar *sb, double w, double h)
|
||||
e_scrollbar_resize(E_Scrollbar * sb, double w, double h)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if ((w == sb->w) && (h == sb->h)) D_RETURN;
|
||||
if ((w == sb->w) && (h == sb->h))
|
||||
D_RETURN;
|
||||
sb->w = w;
|
||||
sb->h = h;
|
||||
if (sb->base) ebits_resize(sb->base, sb->w, sb->h);
|
||||
if (sb->base)
|
||||
ebits_resize(sb->base, sb->w, sb->h);
|
||||
e_scrollbar_recalc(sb);
|
||||
if (sb->bar) ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar) ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (sb->bar)
|
||||
ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar)
|
||||
ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_scrollbar_set_change_func(E_Scrollbar *sb,
|
||||
void (*func_change) (void *_data, E_Scrollbar *sb, double val),
|
||||
void *data)
|
||||
e_scrollbar_set_change_func(E_Scrollbar * sb,
|
||||
void (*func_change) (void *_data, E_Scrollbar * sb,
|
||||
double val), void *data)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -608,52 +709,64 @@ e_scrollbar_set_change_func(E_Scrollbar *sb,
|
|||
}
|
||||
|
||||
void
|
||||
e_scrollbar_set_value(E_Scrollbar *sb, double val)
|
||||
e_scrollbar_set_value(E_Scrollbar * sb, double val)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (val > sb->max - sb->range) val = sb->max - sb->range;
|
||||
if (val < 0 ) val = 0;
|
||||
if (sb->val == val) D_RETURN;
|
||||
if (val > sb->max - sb->range)
|
||||
val = sb->max - sb->range;
|
||||
if (val < 0)
|
||||
val = 0;
|
||||
if (sb->val == val)
|
||||
D_RETURN;
|
||||
sb->val = val;
|
||||
e_scrollbar_recalc(sb);
|
||||
if (sb->bar) ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar) ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (sb->func_change) sb->func_change(sb->func_data, sb, sb->val);
|
||||
if (sb->bar)
|
||||
ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar)
|
||||
ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (sb->func_change)
|
||||
sb->func_change(sb->func_data, sb, sb->val);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_scrollbar_set_range(E_Scrollbar *sb, double range)
|
||||
e_scrollbar_set_range(E_Scrollbar * sb, double range)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (sb->range == range) D_RETURN;
|
||||
if (sb->range == range)
|
||||
D_RETURN;
|
||||
sb->range = range;
|
||||
e_scrollbar_recalc(sb);
|
||||
if (sb->bar) ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar) ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (sb->bar)
|
||||
ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar)
|
||||
ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_scrollbar_set_max(E_Scrollbar *sb, double max)
|
||||
e_scrollbar_set_max(E_Scrollbar * sb, double max)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (sb->max == max) D_RETURN;
|
||||
if (sb->max == max)
|
||||
D_RETURN;
|
||||
sb->max = max;
|
||||
e_scrollbar_recalc(sb);
|
||||
if (sb->bar) ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar) ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
if (sb->bar)
|
||||
ebits_move(sb->bar, sb->bar_pos.x, sb->bar_pos.y);
|
||||
if (sb->bar)
|
||||
ebits_resize(sb->bar, sb->bar_pos.w, sb->bar_pos.h);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
double
|
||||
e_scrollbar_get_value(E_Scrollbar *sb)
|
||||
e_scrollbar_get_value(E_Scrollbar * sb)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -661,7 +774,7 @@ e_scrollbar_get_value(E_Scrollbar *sb)
|
|||
}
|
||||
|
||||
double
|
||||
e_scrollbar_get_range(E_Scrollbar *sb)
|
||||
e_scrollbar_get_range(E_Scrollbar * sb)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -669,7 +782,7 @@ e_scrollbar_get_range(E_Scrollbar *sb)
|
|||
}
|
||||
|
||||
double
|
||||
e_scrollbar_get_max(E_Scrollbar *sb)
|
||||
e_scrollbar_get_max(E_Scrollbar * sb)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -677,15 +790,19 @@ e_scrollbar_get_max(E_Scrollbar *sb)
|
|||
}
|
||||
|
||||
void
|
||||
e_scrollbar_get_geometry(E_Scrollbar *sb, double *x, double *y, double *w, double *h)
|
||||
e_scrollbar_get_geometry(E_Scrollbar * sb, double *x, double *y, double *w,
|
||||
double *h)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (x) *x = sb->x;
|
||||
if (y) *y = sb->y;
|
||||
if (w) *w = sb->w;
|
||||
if (h) *h = sb->h;
|
||||
if (x)
|
||||
*x = sb->x;
|
||||
if (y)
|
||||
*y = sb->y;
|
||||
if (w)
|
||||
*w = sb->w;
|
||||
if (h)
|
||||
*h = sb->h;
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
|
|
113
src/scrollbar.h
113
src/scrollbar.h
|
@ -1,64 +1,75 @@
|
|||
#include "e.h"
|
||||
#include "object.h"
|
||||
|
||||
typedef struct _E_Scrollbar E_Scrollbar;
|
||||
typedef struct _E_Scrollbar E_Scrollbar;
|
||||
|
||||
struct _E_Scrollbar
|
||||
{
|
||||
E_Object o;
|
||||
E_Object o;
|
||||
|
||||
/* I<---val--->|<==range==>|<-->I<-max */
|
||||
double val;
|
||||
double max;
|
||||
double range;
|
||||
double val;
|
||||
double max;
|
||||
double range;
|
||||
|
||||
char *dir;
|
||||
|
||||
Evas evas;
|
||||
|
||||
Ebits_Object bar;
|
||||
Ebits_Object base;
|
||||
|
||||
int visible;
|
||||
int layer;
|
||||
int direction;
|
||||
double x, y, w, h;
|
||||
|
||||
int mouse_down;
|
||||
int down_x, down_y;
|
||||
int mouse_x, mouse_y;
|
||||
char *dir;
|
||||
|
||||
int scroll_step;
|
||||
double scroll_speed;
|
||||
Evas evas;
|
||||
|
||||
struct {
|
||||
double x, y, w, h;
|
||||
} bar_area;
|
||||
struct {
|
||||
double x, y, w, h;
|
||||
} bar_pos;
|
||||
|
||||
void (*func_change) (void *_data, E_Scrollbar *sb, double val);
|
||||
void *func_data;
|
||||
Ebits_Object bar;
|
||||
Ebits_Object base;
|
||||
|
||||
int visible;
|
||||
int layer;
|
||||
int direction;
|
||||
double x, y, w, h;
|
||||
|
||||
int mouse_down;
|
||||
int down_x, down_y;
|
||||
int mouse_x, mouse_y;
|
||||
|
||||
int scroll_step;
|
||||
double scroll_speed;
|
||||
|
||||
struct
|
||||
{
|
||||
double x, y, w, h;
|
||||
}
|
||||
bar_area;
|
||||
struct
|
||||
{
|
||||
double x, y, w, h;
|
||||
}
|
||||
bar_pos;
|
||||
|
||||
void (*func_change) (void *_data, E_Scrollbar * sb,
|
||||
double val);
|
||||
void *func_data;
|
||||
};
|
||||
|
||||
E_Scrollbar *e_scrollbar_new(void);
|
||||
void e_scrollbar_add_to_evas(E_Scrollbar *sb, Evas evas);
|
||||
void e_scrollbar_show(E_Scrollbar *sb);
|
||||
void e_scrollbar_hide(E_Scrollbar *sb);
|
||||
void e_scrollbar_raise(E_Scrollbar *sb);
|
||||
void e_scrollbar_lower(E_Scrollbar *sb);
|
||||
void e_scrollbar_set_layer(E_Scrollbar *sb, int l);
|
||||
void e_scrollbar_set_direction(E_Scrollbar *sb, int d);
|
||||
void e_scrollbar_move(E_Scrollbar *sb, double x, double y);
|
||||
void e_scrollbar_resize(E_Scrollbar *sb, double w, double h);
|
||||
void e_scrollbar_set_change_func(E_Scrollbar *sb,
|
||||
void (*func_change) (void *_data, E_Scrollbar *sb, double val),
|
||||
void *data);
|
||||
void e_scrollbar_set_value(E_Scrollbar *sb, double val);
|
||||
void e_scrollbar_set_range(E_Scrollbar *sb, double range);
|
||||
void e_scrollbar_set_max(E_Scrollbar *sb, double max);
|
||||
double e_scrollbar_get_value(E_Scrollbar *sb);
|
||||
double e_scrollbar_get_range(E_Scrollbar *sb);
|
||||
double e_scrollbar_get_max(E_Scrollbar *sb);
|
||||
void e_scrollbar_get_geometry(E_Scrollbar *sb, double *x, double *y, double *w, double *h);
|
||||
E_Scrollbar *e_scrollbar_new(void);
|
||||
void e_scrollbar_add_to_evas(E_Scrollbar * sb, Evas evas);
|
||||
void e_scrollbar_show(E_Scrollbar * sb);
|
||||
void e_scrollbar_hide(E_Scrollbar * sb);
|
||||
void e_scrollbar_raise(E_Scrollbar * sb);
|
||||
void e_scrollbar_lower(E_Scrollbar * sb);
|
||||
void e_scrollbar_set_layer(E_Scrollbar * sb, int l);
|
||||
void e_scrollbar_set_direction(E_Scrollbar * sb, int d);
|
||||
void e_scrollbar_move(E_Scrollbar * sb, double x, double y);
|
||||
void e_scrollbar_resize(E_Scrollbar * sb, double w, double h);
|
||||
void e_scrollbar_set_change_func(E_Scrollbar * sb,
|
||||
void (*func_change) (void
|
||||
*_data,
|
||||
E_Scrollbar
|
||||
* sb,
|
||||
double
|
||||
val),
|
||||
void *data);
|
||||
void e_scrollbar_set_value(E_Scrollbar * sb, double val);
|
||||
void e_scrollbar_set_range(E_Scrollbar * sb, double range);
|
||||
void e_scrollbar_set_max(E_Scrollbar * sb, double max);
|
||||
double e_scrollbar_get_value(E_Scrollbar * sb);
|
||||
double e_scrollbar_get_range(E_Scrollbar * sb);
|
||||
double e_scrollbar_get_max(E_Scrollbar * sb);
|
||||
void e_scrollbar_get_geometry(E_Scrollbar * sb, double *x,
|
||||
double *y, double *w, double *h);
|
||||
|
|
108
src/text.c
108
src/text.c
|
@ -2,20 +2,24 @@
|
|||
#include "text.h"
|
||||
#include "util.h"
|
||||
|
||||
E_Text *
|
||||
E_Text *
|
||||
e_text_new(Evas evas, char *text, char *class)
|
||||
{
|
||||
E_Text *t;
|
||||
|
||||
E_Text *t;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
t = NEW(E_Text, 1);
|
||||
ZERO(t, E_Text, 1);
|
||||
t->state = strdup("normal");
|
||||
if (class) t->class = strdup(class);
|
||||
else t->class = strdup("");
|
||||
if (text) t->text = strdup(text);
|
||||
else t->text = strdup("");
|
||||
if (class)
|
||||
t->class = strdup(class);
|
||||
else
|
||||
t->class = strdup("");
|
||||
if (text)
|
||||
t->text = strdup(text);
|
||||
else
|
||||
t->text = strdup("");
|
||||
t->evas = evas;
|
||||
t->obj.o1 = evas_add_text(t->evas, "borzoib", 8, t->text);
|
||||
t->obj.o2 = evas_add_text(t->evas, "borzoib", 8, t->text);
|
||||
|
@ -52,14 +56,14 @@ e_text_new(Evas evas, char *text, char *class)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_free(E_Text *t)
|
||||
e_text_free(E_Text * t)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
IF_FREE(t->state);
|
||||
IF_FREE(t->class);
|
||||
IF_FREE(t->text);
|
||||
|
||||
|
||||
if ((t->evas) && (t->obj.text))
|
||||
{
|
||||
evas_del_object(t->evas, t->obj.o1);
|
||||
|
@ -74,12 +78,14 @@ e_text_free(E_Text *t)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_set_text(E_Text *t, char *text)
|
||||
e_text_set_text(E_Text * t, char *text)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (!text) text = "";
|
||||
if (!strcmp(t->text, text)) D_RETURN;
|
||||
if (!text)
|
||||
text = "";
|
||||
if (!strcmp(t->text, text))
|
||||
D_RETURN;
|
||||
FREE(t->text);
|
||||
t->text = strdup(text);
|
||||
evas_set_text(t->evas, t->obj.o1, t->text);
|
||||
|
@ -98,11 +104,12 @@ e_text_set_text(E_Text *t, char *text)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_set_layer(E_Text *t, int l)
|
||||
e_text_set_layer(E_Text * t, int l)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (t->layer == l) D_RETURN;
|
||||
if (t->layer == l)
|
||||
D_RETURN;
|
||||
t->layer = l;
|
||||
evas_set_layer(t->evas, t->obj.o1, t->layer);
|
||||
evas_set_layer(t->evas, t->obj.o2, t->layer);
|
||||
|
@ -114,7 +121,7 @@ e_text_set_layer(E_Text *t, int l)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_set_clip(E_Text *t, Evas_Object clip)
|
||||
e_text_set_clip(E_Text * t, Evas_Object clip)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -128,7 +135,7 @@ e_text_set_clip(E_Text *t, Evas_Object clip)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_unset_clip(E_Text *t)
|
||||
e_text_unset_clip(E_Text * t)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -142,7 +149,7 @@ e_text_unset_clip(E_Text *t)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_raise(E_Text *t)
|
||||
e_text_raise(E_Text * t)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -156,7 +163,7 @@ e_text_raise(E_Text *t)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_lower(E_Text *t)
|
||||
e_text_lower(E_Text * t)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -170,11 +177,12 @@ e_text_lower(E_Text *t)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_show(E_Text *t)
|
||||
e_text_show(E_Text * t)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (t->visible) D_RETURN;
|
||||
if (t->visible)
|
||||
D_RETURN;
|
||||
t->visible = 1;
|
||||
evas_show(t->evas, t->obj.o1);
|
||||
evas_show(t->evas, t->obj.o2);
|
||||
|
@ -186,11 +194,12 @@ e_text_show(E_Text *t)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_hide(E_Text *t)
|
||||
e_text_hide(E_Text * t)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (!t->visible) D_RETURN;
|
||||
if (!t->visible)
|
||||
D_RETURN;
|
||||
t->visible = 0;
|
||||
evas_hide(t->evas, t->obj.o1);
|
||||
evas_hide(t->evas, t->obj.o2);
|
||||
|
@ -202,29 +211,30 @@ e_text_hide(E_Text *t)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_set_color(E_Text *t, int r, int g, int b, int a)
|
||||
e_text_set_color(E_Text * t, int r, int g, int b, int a)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if ((r == t->color.r) &&
|
||||
(g == t->color.g) &&
|
||||
(b == t->color.b) &&
|
||||
(a == t->color.a)) D_RETURN;
|
||||
(g == t->color.g) && (b == t->color.b) && (a == t->color.a))
|
||||
D_RETURN;
|
||||
t->color.r = r;
|
||||
t->color.g = g;
|
||||
t->color.b = b;
|
||||
t->color.a = a;
|
||||
evas_set_color(t->evas, t->obj.text, t->color.r, t->color.g, t->color.b, t->color.a);
|
||||
evas_set_color(t->evas, t->obj.text, t->color.r, t->color.g, t->color.b,
|
||||
t->color.a);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_text_move(E_Text *t, double x, double y)
|
||||
e_text_move(E_Text * t, double x, double y)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if ((t->x == x) && (t->y == y)) D_RETURN;
|
||||
if ((t->x == x) && (t->y == y))
|
||||
D_RETURN;
|
||||
t->x = x;
|
||||
t->y = y;
|
||||
evas_move(t->evas, t->obj.o1, t->x + 1, t->y);
|
||||
|
@ -237,11 +247,10 @@ e_text_move(E_Text *t, double x, double y)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_resize(E_Text *t, double w, double h)
|
||||
e_text_resize(E_Text * t, double w, double h)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(t);
|
||||
UN(w);
|
||||
|
@ -249,42 +258,50 @@ e_text_resize(E_Text *t, double w, double h)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_get_geometry(E_Text *t, double *x, double *y, double *w, double *h)
|
||||
e_text_get_geometry(E_Text * t, double *x, double *y, double *w, double *h)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (x) *x = t->x;
|
||||
if (y) *y = t->y;
|
||||
if (w) *w = t->w;
|
||||
if (h) *h = t->h;
|
||||
if (x)
|
||||
*x = t->x;
|
||||
if (y)
|
||||
*y = t->y;
|
||||
if (w)
|
||||
*w = t->w;
|
||||
if (h)
|
||||
*h = t->h;
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_text_get_min_size(E_Text *t, double *w, double *h)
|
||||
e_text_get_min_size(E_Text * t, double *w, double *h)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (w) *w = t->min.w;
|
||||
if (h) *h = t->min.h;
|
||||
if (w)
|
||||
*w = t->min.w;
|
||||
if (h)
|
||||
*h = t->min.h;
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_text_get_max_size(E_Text *t, double *w, double *h)
|
||||
e_text_get_max_size(E_Text * t, double *w, double *h)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (w) *w = t->max.w;
|
||||
if (h) *h = t->max.h;
|
||||
if (w)
|
||||
*w = t->max.w;
|
||||
if (h)
|
||||
*h = t->max.h;
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_text_set_state(E_Text *t, char *state)
|
||||
e_text_set_state(E_Text * t, char *state)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -295,7 +312,7 @@ e_text_set_state(E_Text *t, char *state)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_set_class(E_Text *t, char *class)
|
||||
e_text_set_class(E_Text * t, char *class)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
@ -306,11 +323,10 @@ e_text_set_class(E_Text *t, char *class)
|
|||
}
|
||||
|
||||
void
|
||||
e_text_update_class(E_Text *t)
|
||||
e_text_update_class(E_Text * t)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
|
||||
D_RETURN;
|
||||
UN(t);
|
||||
}
|
||||
|
|
91
src/text.h
91
src/text.h
|
@ -3,51 +3,58 @@
|
|||
|
||||
#include "e.h"
|
||||
|
||||
typedef struct _E_Text E_Text;
|
||||
typedef struct _E_Text E_Text;
|
||||
|
||||
struct _E_Text
|
||||
{
|
||||
char *text;
|
||||
char *class;
|
||||
char *state;
|
||||
|
||||
int visible;
|
||||
double x, y, w, h;
|
||||
struct {
|
||||
double w, h;
|
||||
} min, max;
|
||||
struct {
|
||||
int r, g, b, a;
|
||||
} color;
|
||||
int layer;
|
||||
|
||||
Evas evas;
|
||||
struct {
|
||||
Evas_Object text;
|
||||
Evas_Object o1;
|
||||
Evas_Object o2;
|
||||
Evas_Object o3;
|
||||
Evas_Object o4;
|
||||
} obj;
|
||||
char *text;
|
||||
char *class;
|
||||
char *state;
|
||||
|
||||
int visible;
|
||||
double x, y, w, h;
|
||||
struct
|
||||
{
|
||||
double w, h;
|
||||
}
|
||||
min , max;
|
||||
struct
|
||||
{
|
||||
int r, g, b, a;
|
||||
}
|
||||
color;
|
||||
int layer;
|
||||
|
||||
Evas evas;
|
||||
struct
|
||||
{
|
||||
Evas_Object text;
|
||||
Evas_Object o1;
|
||||
Evas_Object o2;
|
||||
Evas_Object o3;
|
||||
Evas_Object o4;
|
||||
}
|
||||
obj;
|
||||
};
|
||||
|
||||
E_Text *e_text_new(Evas evas, char *text, char *class);
|
||||
void e_text_free(E_Text *t);
|
||||
void e_text_set_text(E_Text *t, char *text);
|
||||
void e_text_set_layer(E_Text *t, int l);
|
||||
void e_text_set_clip(E_Text *t, Evas_Object clip);
|
||||
void e_text_unset_clip(E_Text *t);
|
||||
void e_text_raise(E_Text *t);
|
||||
void e_text_lower(E_Text *t);
|
||||
void e_text_show(E_Text *t);
|
||||
void e_text_hide(E_Text *t);
|
||||
void e_text_set_color(E_Text *t, int r, int g, int b, int a);
|
||||
void e_text_move(E_Text *t, double x, double y);
|
||||
void e_text_resize(E_Text *t, double w, double h);
|
||||
void e_text_get_geometry(E_Text *t, double *x, double *y, double *w, double *h);
|
||||
void e_text_get_min_size(E_Text *t, double *w, double *h);
|
||||
void e_text_get_max_size(E_Text *t, double *w, double *h);
|
||||
void e_text_set_state(E_Text *t, char *state);
|
||||
void e_text_set_class(E_Text *t, char *class);
|
||||
void e_text_update_class(E_Text *t);
|
||||
E_Text *e_text_new(Evas evas, char *text, char *class);
|
||||
void e_text_free(E_Text * t);
|
||||
void e_text_set_text(E_Text * t, char *text);
|
||||
void e_text_set_layer(E_Text * t, int l);
|
||||
void e_text_set_clip(E_Text * t, Evas_Object clip);
|
||||
void e_text_unset_clip(E_Text * t);
|
||||
void e_text_raise(E_Text * t);
|
||||
void e_text_lower(E_Text * t);
|
||||
void e_text_show(E_Text * t);
|
||||
void e_text_hide(E_Text * t);
|
||||
void e_text_set_color(E_Text * t, int r, int g, int b, int a);
|
||||
void e_text_move(E_Text * t, double x, double y);
|
||||
void e_text_resize(E_Text * t, double w, double h);
|
||||
void e_text_get_geometry(E_Text * t, double *x, double *y,
|
||||
double *w, double *h);
|
||||
void e_text_get_min_size(E_Text * t, double *w, double *h);
|
||||
void e_text_get_max_size(E_Text * t, double *w, double *h);
|
||||
void e_text_set_state(E_Text * t, char *state);
|
||||
void e_text_set_class(E_Text * t, char *class);
|
||||
void e_text_update_class(E_Text * t);
|
||||
#endif
|
||||
|
|
78
src/util.c
78
src/util.c
|
@ -4,40 +4,44 @@
|
|||
void
|
||||
e_util_set_env(char *variable, char *content)
|
||||
{
|
||||
char env[PATH_MAX];
|
||||
|
||||
char env[PATH_MAX];
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
snprintf(env, PATH_MAX, "%s=%s", variable, content);
|
||||
putenv(env);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
char *
|
||||
char *
|
||||
e_util_get_user_home(void)
|
||||
{
|
||||
static char *home = NULL;
|
||||
|
||||
static char *home = NULL;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
if (home) D_RETURN_(home);
|
||||
|
||||
if (home)
|
||||
D_RETURN_(home);
|
||||
home = getenv("HOME");
|
||||
if (!home) home = getenv("TMPDIR");
|
||||
if (!home) home = "/tmp";
|
||||
if (!home)
|
||||
home = getenv("TMPDIR");
|
||||
if (!home)
|
||||
home = "/tmp";
|
||||
|
||||
D_RETURN_(home);
|
||||
}
|
||||
|
||||
void *
|
||||
void *
|
||||
e_util_memdup(void *data, int size)
|
||||
{
|
||||
void *data_dup;
|
||||
|
||||
void *data_dup;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
data_dup = malloc(size);
|
||||
if (!data_dup) D_RETURN_(NULL);
|
||||
if (!data_dup)
|
||||
D_RETURN_(NULL);
|
||||
memcpy(data_dup, data, size);
|
||||
|
||||
D_RETURN_(data_dup);
|
||||
|
@ -47,13 +51,13 @@ int
|
|||
e_util_glob_matches(char *str, char *glob)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if (!fnmatch(glob, str, 0)) D_RETURN_(1);
|
||||
|
||||
if (!fnmatch(glob, str, 0))
|
||||
D_RETURN_(1);
|
||||
|
||||
D_RETURN_(0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Function to take a URL of the form
|
||||
* file://dir1/dir2/file
|
||||
|
@ -63,38 +67,38 @@ e_util_glob_matches(char *str, char *glob)
|
|||
*
|
||||
* todo:
|
||||
*/
|
||||
char *
|
||||
char *
|
||||
e_util_de_url_and_verify(const char *fi)
|
||||
{
|
||||
char *wk;
|
||||
|
||||
char *wk;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
wk = strstr( fi, "file:" );
|
||||
|
||||
|
||||
wk = strstr(fi, "file:");
|
||||
|
||||
/* Valid URL contains "file:" */
|
||||
if( !wk )
|
||||
D_RETURN_ (NULL);
|
||||
|
||||
if (!wk)
|
||||
D_RETURN_(NULL);
|
||||
|
||||
/* Need some form of hostname to continue */
|
||||
/* if( !hostn )
|
||||
* D_RETURN_ (NULL);
|
||||
* * D_RETURN_ (NULL);
|
||||
*/
|
||||
|
||||
|
||||
/* Do we contain hostname? */
|
||||
/* wk = strstr( fi, hostn );
|
||||
*/
|
||||
|
||||
|
||||
/* Hostname mismatch, reject file */
|
||||
/* if( !wk )
|
||||
* D_RETURN_ (NULL);
|
||||
* * D_RETURN_ (NULL);
|
||||
*/
|
||||
|
||||
|
||||
/* Local file name starts after "hostname" */
|
||||
wk = strchr( wk, '/' );
|
||||
|
||||
if ( !wk )
|
||||
D_RETURN_(NULL);
|
||||
|
||||
wk = strchr(wk, '/');
|
||||
|
||||
if (!wk)
|
||||
D_RETURN_(NULL);
|
||||
|
||||
D_RETURN_(wk);
|
||||
}
|
||||
|
|
10
src/util.h
10
src/util.h
|
@ -3,11 +3,11 @@
|
|||
|
||||
#include "e.h"
|
||||
|
||||
void e_util_set_env(char *variable, char *content);
|
||||
char *e_util_get_user_home(void);
|
||||
void *e_util_memdup(void *data, int size);
|
||||
int e_util_glob_matches(char *str, char *glob);
|
||||
char *e_util_de_url_and_verify(const char *fi);
|
||||
void e_util_set_env(char *variable, char *content);
|
||||
char *e_util_get_user_home(void);
|
||||
void *e_util_memdup(void *data, int size);
|
||||
int e_util_glob_matches(char *str, char *glob);
|
||||
char *e_util_de_url_and_verify(const char *fi);
|
||||
|
||||
#define e_strdup(__dest, __var) \
|
||||
{ \
|
||||
|
|
2336
src/view.c
2336
src/view.c
File diff suppressed because it is too large
Load Diff
330
src/view.h
330
src/view.h
|
@ -12,12 +12,12 @@
|
|||
|
||||
#ifndef E_VIEW_TYPEDEF
|
||||
#define E_VIEW_TYPEDEF
|
||||
typedef struct _E_View E_View;
|
||||
typedef struct _E_View E_View;
|
||||
#endif
|
||||
|
||||
#ifndef E_ICON_TYPEDEF
|
||||
#define E_ICON_TYPEDEF
|
||||
typedef struct _E_Icon E_Icon;
|
||||
typedef struct _E_Icon E_Icon;
|
||||
#endif
|
||||
|
||||
#ifndef E_ICONBAR_TYPEDEF
|
||||
|
@ -30,49 +30,61 @@ typedef struct _E_Iconbar E_Iconbar;
|
|||
typedef struct _E_View_Model E_View_Model;
|
||||
#endif
|
||||
|
||||
|
||||
typedef enum {
|
||||
E_DND_NONE,
|
||||
E_DND_COPY,
|
||||
E_DND_MOVE,
|
||||
E_DND_LINK,
|
||||
E_DND_ASK,
|
||||
E_DND_DELETED,
|
||||
E_DND_COPIED,
|
||||
E_DND_ICONBAR_ADD
|
||||
} E_dnd_enum ;
|
||||
typedef enum
|
||||
{
|
||||
E_DND_NONE,
|
||||
E_DND_COPY,
|
||||
E_DND_MOVE,
|
||||
E_DND_LINK,
|
||||
E_DND_ASK,
|
||||
E_DND_DELETED,
|
||||
E_DND_COPIED,
|
||||
E_DND_ICONBAR_ADD
|
||||
}
|
||||
E_dnd_enum;
|
||||
|
||||
struct _E_View
|
||||
{
|
||||
E_Object o;
|
||||
E_Object o;
|
||||
|
||||
char * name;
|
||||
|
||||
E_View_Model *model;
|
||||
|
||||
struct {
|
||||
char *name;
|
||||
|
||||
E_View_Model *model;
|
||||
|
||||
struct
|
||||
{
|
||||
Evas_Render_Method render_method;
|
||||
int back_pixmap;
|
||||
} options;
|
||||
|
||||
Evas evas;
|
||||
struct {
|
||||
}
|
||||
options;
|
||||
|
||||
Evas evas;
|
||||
struct
|
||||
{
|
||||
Window base;
|
||||
Window main;
|
||||
} win;
|
||||
Pixmap pmap;
|
||||
struct {
|
||||
}
|
||||
win;
|
||||
Pixmap pmap;
|
||||
struct
|
||||
{
|
||||
int w, h;
|
||||
int force;
|
||||
} size;
|
||||
struct {
|
||||
}
|
||||
size;
|
||||
struct
|
||||
{
|
||||
int x, y;
|
||||
} scroll;
|
||||
struct {
|
||||
}
|
||||
scroll;
|
||||
struct
|
||||
{
|
||||
int x, y;
|
||||
} location;
|
||||
}
|
||||
location;
|
||||
|
||||
struct {
|
||||
struct
|
||||
{
|
||||
/* +-----------------+
|
||||
* | Wt |
|
||||
* | +-----------+ |
|
||||
|
@ -85,100 +97,121 @@ struct _E_View
|
|||
* | Wb |
|
||||
* +-----------------+
|
||||
*/
|
||||
struct {
|
||||
int l, r, t, b;
|
||||
} window;
|
||||
struct {
|
||||
int s, g, b;
|
||||
} icon;
|
||||
} spacing;
|
||||
struct {
|
||||
int on;
|
||||
struct
|
||||
{
|
||||
int l, r, t, b;
|
||||
}
|
||||
window;
|
||||
struct
|
||||
{
|
||||
int s, g, b;
|
||||
}
|
||||
icon;
|
||||
}
|
||||
spacing;
|
||||
struct
|
||||
{
|
||||
int on;
|
||||
/* The number of selected icons. */
|
||||
int count;
|
||||
int count;
|
||||
/* The number of icons we selected the last time.
|
||||
If this is > 0, we don't pop up menus when
|
||||
the user clicks in a view. */
|
||||
int last_count;
|
||||
int x, y, w, h;
|
||||
struct {
|
||||
int x, y;
|
||||
} down;
|
||||
|
||||
struct {
|
||||
struct {
|
||||
int r, g, b, a;
|
||||
}
|
||||
edge_l, edge_r, edge_t, edge_b,
|
||||
middle,
|
||||
grad_l, grad_r, grad_t, grad_b;
|
||||
struct {
|
||||
int l, r, t, b;
|
||||
} grad_size;
|
||||
} config;
|
||||
struct {
|
||||
Evas_Object clip;
|
||||
Evas_Object edge_l;
|
||||
Evas_Object edge_r;
|
||||
Evas_Object edge_t;
|
||||
Evas_Object edge_b;
|
||||
Evas_Object middle;
|
||||
Evas_Object grad_l;
|
||||
Evas_Object grad_r;
|
||||
Evas_Object grad_t;
|
||||
Evas_Object grad_b;
|
||||
} obj;
|
||||
} select;
|
||||
|
||||
struct {
|
||||
int started;
|
||||
Window win;
|
||||
int x, y;
|
||||
struct {
|
||||
int x, y;
|
||||
} offset;
|
||||
int update;
|
||||
int drop_mode;
|
||||
int icon_hide;
|
||||
int icon_show;
|
||||
int matching_drop_attempt;
|
||||
} drag;
|
||||
struct {
|
||||
int valid;
|
||||
double x1, x2, y1, y2;
|
||||
} extents;
|
||||
|
||||
E_Background bg;
|
||||
* If this is > 0, we don't pop up menus when
|
||||
* the user clicks in a view. */
|
||||
int last_count;
|
||||
int x, y, w, h;
|
||||
struct
|
||||
{
|
||||
int x, y;
|
||||
}
|
||||
down;
|
||||
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
int r, g, b, a;
|
||||
}
|
||||
edge_l , edge_r, edge_t, edge_b,
|
||||
middle, grad_l, grad_r, grad_t, grad_b;
|
||||
struct
|
||||
{
|
||||
int l, r, t, b;
|
||||
}
|
||||
grad_size;
|
||||
}
|
||||
config;
|
||||
struct
|
||||
{
|
||||
Evas_Object clip;
|
||||
Evas_Object edge_l;
|
||||
Evas_Object edge_r;
|
||||
Evas_Object edge_t;
|
||||
Evas_Object edge_b;
|
||||
Evas_Object middle;
|
||||
Evas_Object grad_l;
|
||||
Evas_Object grad_r;
|
||||
Evas_Object grad_t;
|
||||
Evas_Object grad_b;
|
||||
}
|
||||
obj;
|
||||
}
|
||||
select;
|
||||
|
||||
struct {
|
||||
EfsdCmdId x, y, w, h;
|
||||
int busy;
|
||||
} geom_get;
|
||||
|
||||
EfsdCmdId getbg;
|
||||
struct
|
||||
{
|
||||
int started;
|
||||
Window win;
|
||||
int x, y;
|
||||
struct
|
||||
{
|
||||
int x, y;
|
||||
}
|
||||
offset;
|
||||
int update;
|
||||
int drop_mode;
|
||||
int icon_hide;
|
||||
int icon_show;
|
||||
int matching_drop_attempt;
|
||||
}
|
||||
drag;
|
||||
struct
|
||||
{
|
||||
int valid;
|
||||
double x1, x2, y1, y2;
|
||||
}
|
||||
extents;
|
||||
|
||||
|
||||
struct {
|
||||
E_Background bg;
|
||||
|
||||
struct
|
||||
{
|
||||
EfsdCmdId x, y, w, h;
|
||||
int busy;
|
||||
}
|
||||
geom_get;
|
||||
|
||||
EfsdCmdId getbg;
|
||||
|
||||
struct
|
||||
{
|
||||
E_Scrollbar *h, *v;
|
||||
} scrollbar;
|
||||
|
||||
int is_listing;
|
||||
|
||||
E_Iconbar *iconbar;
|
||||
|
||||
Evas_List icons;
|
||||
|
||||
int have_resort_queued;
|
||||
}
|
||||
scrollbar;
|
||||
|
||||
int changed;
|
||||
int is_listing;
|
||||
|
||||
Evas_List epplet_contexts;
|
||||
Ebits_Object epplet_layout;
|
||||
E_Iconbar *iconbar;
|
||||
|
||||
Evas_List icons;
|
||||
|
||||
int have_resort_queued;
|
||||
|
||||
int changed;
|
||||
|
||||
Evas_List epplet_contexts;
|
||||
Ebits_Object epplet_layout;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* e_view_init - View event handlers initialization.
|
||||
*
|
||||
|
@ -186,27 +219,31 @@ struct _E_View
|
|||
* Views are the windows in which e as a desktop shell
|
||||
* displays file icons.
|
||||
*/
|
||||
void e_view_init(void);
|
||||
void e_view_init(void);
|
||||
|
||||
void e_view_selection_update(E_View *v);
|
||||
void e_view_deselect_all(E_View *v);
|
||||
void e_view_deselect_all_except(E_Icon *not_ic);
|
||||
Ecore_Event *e_view_get_current_event(void);
|
||||
int e_view_filter_file(E_View *v, char *file);
|
||||
void e_view_icons_get_extents(E_View *v, int *min_x, int *min_y, int *max_x, int *max_y);
|
||||
void e_view_icons_apply_xy(E_View *v);
|
||||
void e_view_scroll_to(E_View *v, int sx, int sy);
|
||||
void e_view_scroll_by(E_View *v, int sx, int sy);
|
||||
void e_view_scroll_to_percent(E_View *v, double psx, double psy);
|
||||
void e_view_get_viewable_percentage(E_View *v, double *vw, double *vh);
|
||||
void e_view_get_position_percentage(E_View *v, double *vx, double *vy);
|
||||
void e_view_selection_update(E_View * v);
|
||||
void e_view_deselect_all(E_View * v);
|
||||
void e_view_deselect_all_except(E_Icon * not_ic);
|
||||
Ecore_Event *e_view_get_current_event(void);
|
||||
int e_view_filter_file(E_View * v, char *file);
|
||||
void e_view_icons_get_extents(E_View * v, int *min_x, int *min_y,
|
||||
int *max_x, int *max_y);
|
||||
void e_view_icons_apply_xy(E_View * v);
|
||||
void e_view_scroll_to(E_View * v, int sx, int sy);
|
||||
void e_view_scroll_by(E_View * v, int sx, int sy);
|
||||
void e_view_scroll_to_percent(E_View * v, double psx,
|
||||
double psy);
|
||||
void e_view_get_viewable_percentage(E_View * v, double *vw,
|
||||
double *vh);
|
||||
void e_view_get_position_percentage(E_View * v, double *vx,
|
||||
double *vy);
|
||||
|
||||
void e_view_resort_alphabetical(E_View *v);
|
||||
void e_view_arrange(E_View *v);
|
||||
void e_view_resort(E_View *v);
|
||||
void e_view_queue_geometry_record(E_View *v);
|
||||
void e_view_queue_icon_xy_record(E_View *v);
|
||||
void e_view_queue_resort(E_View *v);
|
||||
void e_view_resort_alphabetical(E_View * v);
|
||||
void e_view_arrange(E_View * v);
|
||||
void e_view_resort(E_View * v);
|
||||
void e_view_queue_geometry_record(E_View * v);
|
||||
void e_view_queue_icon_xy_record(E_View * v);
|
||||
void e_view_queue_resort(E_View * v);
|
||||
|
||||
/**
|
||||
* e_view_new - Creates a new view object
|
||||
|
@ -214,7 +251,7 @@ void e_view_queue_resort(E_View *v);
|
|||
* This function creates a new view and sets default
|
||||
* properties on it, such as colors and icon spacings.
|
||||
*/
|
||||
E_View *e_view_new(void);
|
||||
E_View *e_view_new(void);
|
||||
|
||||
/**
|
||||
* e_view_set_dir - Sets view to a given directory
|
||||
|
@ -226,7 +263,7 @@ E_View *e_view_new(void);
|
|||
* view's metadata (view window coordinates etc). If a view_model already
|
||||
* exists for this dir, it is reused, otherwise a new on is created.
|
||||
*/
|
||||
void e_view_set_dir(E_View *v, char *dir, int is_desktop);
|
||||
void e_view_set_dir(E_View * v, char *dir, int is_desktop);
|
||||
|
||||
/**
|
||||
* e_view_populate - Draws icons for all files in view
|
||||
|
@ -236,7 +273,7 @@ void e_view_set_dir(E_View *v, char *dir, int is_desktop);
|
|||
* view_add_file for each one. This results in icons being created for each
|
||||
* file.
|
||||
*/
|
||||
void e_view_populate(E_View *v);
|
||||
void e_view_populate(E_View * v);
|
||||
|
||||
/**
|
||||
* e_view_realize - Initializes a view's graphics and content
|
||||
|
@ -245,7 +282,7 @@ void e_view_populate(E_View *v);
|
|||
* This function initializes a created view by loading
|
||||
* all the graphics and creating the evas.
|
||||
*/
|
||||
void e_view_realize(E_View *v);
|
||||
void e_view_realize(E_View * v);
|
||||
|
||||
/**
|
||||
* e_view_update - Redraws a view
|
||||
|
@ -253,16 +290,15 @@ void e_view_realize(E_View *v);
|
|||
*
|
||||
* If the contents of the view have changed, this function redraws it.
|
||||
*/
|
||||
void e_view_update(E_View *v);
|
||||
void e_view_update(E_View * v);
|
||||
|
||||
void e_view_bg_reload(E_View * v);
|
||||
void e_view_ib_reload(E_View * v);
|
||||
|
||||
void e_view_bg_reload(E_View *v);
|
||||
void e_view_ib_reload(E_View *v);
|
||||
void e_view_file_add(E_View * v, E_File * file);
|
||||
void e_view_file_changed(E_View * v, E_File * file);
|
||||
void e_view_file_delete(E_View * v, E_File * file);
|
||||
|
||||
void e_view_file_add(E_View *v, E_File *file);
|
||||
void e_view_file_changed(E_View *v, E_File *file);
|
||||
void e_view_file_delete(E_View *v, E_File *file);
|
||||
|
||||
void e_view_close_all(void);
|
||||
void e_view_close_all(void);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue