jamse brown ... errr... gadman is dead.

basically if moduels wish to put objects on a desktop - they now will have to
DIY and look after themselves. until we have gadcons with "free" layout that
do similar stuff - but this simply means module authors need to d a bit more
work. gadman code is unmaintained and a burden - thus removed.

also borders and e_win's have their own pointers now - this should nuke the
stuck pointer bug... :)


SVN revision: 24925
This commit is contained in:
Carsten Haitzler 2006-08-20 04:48:27 +00:00
parent 770820eee8
commit 0a5e26b82b
23 changed files with 134 additions and 2669 deletions

View File

@ -54,7 +54,6 @@ e_place.h \
e_resist.h \
e_startup.h \
e_hints.h \
e_gadman.h \
e_signals.h \
e_xinerama.h \
e_table.h \
@ -203,7 +202,6 @@ e_place.c \
e_resist.c \
e_startup.c \
e_hints.c \
e_gadman.c \
e_signals.c \
e_xinerama.c \
e_table.c \

View File

@ -1351,49 +1351,6 @@ ACT_FN_GO_KEY(winlist)
}
}
/***************************************************************************/
ACT_FN_GO(edit_mode)
{
if (!obj) obj = E_OBJECT(e_container_current_get(e_manager_current_get()));
if (!obj) return;
if (obj->type != E_CONTAINER_TYPE)
{
obj = E_OBJECT(e_container_current_get(e_manager_current_get()));
if (!obj) return;
}
e_gadman_mode_set(((E_Container *)obj)->gadman, E_GADMAN_MODE_EDIT);
e_gadcon_all_edit_begin();
}
ACT_FN_END(edit_mode)
{
if (!obj) obj = E_OBJECT(e_container_current_get(e_manager_current_get()));
if (!obj) return;
if (obj->type != E_CONTAINER_TYPE)
{
obj = E_OBJECT(e_container_current_get(e_manager_current_get()));
if (!obj) return;
}
e_gadman_mode_set(((E_Container *)obj)->gadman, E_GADMAN_MODE_NORMAL);
e_gadcon_all_edit_end();
}
/***************************************************************************/
ACT_FN_GO(edit_mode_toggle)
{
if (!obj) obj = E_OBJECT(e_container_current_get(e_manager_current_get()));
if (!obj) return;
if (obj->type != E_CONTAINER_TYPE)
{
obj = E_OBJECT(e_container_current_get(e_manager_current_get()));
if (!obj) return;
}
if (e_gadman_mode_get(((E_Container *)obj)->gadman) == E_GADMAN_MODE_NORMAL)
e_gadman_mode_set(((E_Container *)obj)->gadman, E_GADMAN_MODE_EDIT);
else
e_gadman_mode_set(((E_Container *)obj)->gadman, E_GADMAN_MODE_NORMAL);
}
/***************************************************************************/
/***************************************************************************/
ACT_FN_GO(desk_deskshow_toggle)
{
@ -1476,10 +1433,8 @@ ACT_FN_GO(pointer_resize_push)
return;
if (bd->zone)
man = bd->zone->container->manager;
e_pointer_type_push(bd->pointer, bd, params);
}
if (!man) man = e_manager_current_get();
if (!man) return;
e_pointer_type_push(man->pointer, obj, params);
}
ACT_FN_GO(pointer_resize_pop)
@ -1497,10 +1452,8 @@ ACT_FN_GO(pointer_resize_pop)
return;
if (bd->zone)
man = (E_Manager *)bd->zone->container->manager;
e_pointer_type_pop(bd->pointer, bd, params);
}
if (!man) man = e_manager_current_get();
if (!man) return;
e_pointer_type_pop(man->pointer, obj, params);
}
/***************************************************************************/
@ -1812,14 +1765,6 @@ e_actions_init(void)
ACT_GO_MOUSE(winlist);
ACT_GO_KEY(winlist);
ACT_GO(edit_mode);
ACT_END(edit_mode);
/* edit_mode */
ACT_GO(edit_mode_toggle);
e_register_action_predef_name(_("Gadgets"), _("Toggle Edit Mode"), "edit_mode_toggle", NULL,
EDIT_RESTRICT_ACTION | EDIT_RESTRICT_PARAMS, 0);
/* restart */
ACT_GO(restart);
e_register_action_predef_name(_("Enlightenment"), _("Restart"), "restart", NULL,

View File

@ -473,6 +473,7 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map, int internal)
focus_stack = evas_list_append(focus_stack, bd);
bd->pointer = e_pointer_window_new(bd->win, 0);
return bd;
}
@ -2973,6 +2974,7 @@ e_border_resize_limit(E_Border *bd, int *w, int *h)
static void
_e_border_free(E_Border *bd)
{
e_object_del(E_OBJECT(bd->pointer));
if (bd->focused)
{
if (e_config->focus_revert_on_hide_or_close)
@ -3189,8 +3191,6 @@ _e_border_del(E_Border *bd)
ecore_event_add(E_EVENT_BORDER_REMOVE, ev, _e_border_event_border_remove_free, NULL);
}
/* remove all pointers for this win. */
e_pointer_type_pop(bd->zone->container->manager->pointer, bd, NULL);
e_container_border_remove(bd);
if (bd->parent)
{
@ -6981,28 +6981,28 @@ _e_border_pointer_resize_begin(E_Border *bd)
switch (bd->resize_mode)
{
case RESIZE_TL:
e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_tl");
e_pointer_type_push(bd->pointer, bd, "resize_tl");
break;
case RESIZE_T:
e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_t");
e_pointer_type_push(bd->pointer, bd, "resize_t");
break;
case RESIZE_TR:
e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_tr");
e_pointer_type_push(bd->pointer, bd, "resize_tr");
break;
case RESIZE_R:
e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_r");
e_pointer_type_push(bd->pointer, bd, "resize_r");
break;
case RESIZE_BR:
e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_br");
e_pointer_type_push(bd->pointer, bd, "resize_br");
break;
case RESIZE_B:
e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_b");
e_pointer_type_push(bd->pointer, bd, "resize_b");
break;
case RESIZE_BL:
e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_bl");
e_pointer_type_push(bd->pointer, bd, "resize_bl");
break;
case RESIZE_L:
e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_l");
e_pointer_type_push(bd->pointer, bd, "resize_l");
break;
}
}
@ -7013,28 +7013,28 @@ _e_border_pointer_resize_end(E_Border *bd)
switch (bd->resize_mode)
{
case RESIZE_TL:
e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_tl");
e_pointer_type_pop(bd->pointer, bd, "resize_tl");
break;
case RESIZE_T:
e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_t");
e_pointer_type_pop(bd->pointer, bd, "resize_t");
break;
case RESIZE_TR:
e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_tr");
e_pointer_type_pop(bd->pointer, bd, "resize_tr");
break;
case RESIZE_R:
e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_r");
e_pointer_type_pop(bd->pointer, bd, "resize_r");
break;
case RESIZE_BR:
e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_br");
e_pointer_type_pop(bd->pointer, bd, "resize_br");
break;
case RESIZE_B:
e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_b");
e_pointer_type_pop(bd->pointer, bd, "resize_b");
break;
case RESIZE_BL:
e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_bl");
e_pointer_type_pop(bd->pointer, bd, "resize_bl");
break;
case RESIZE_L:
e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_l");
e_pointer_type_pop(bd->pointer, bd, "resize_l");
break;
}
}
@ -7042,11 +7042,11 @@ _e_border_pointer_resize_end(E_Border *bd)
static void
_e_border_pointer_move_begin(E_Border *bd)
{
e_pointer_type_push(bd->zone->container->manager->pointer, bd, "move");
e_pointer_type_push(bd->pointer, bd, "move");
}
static void
_e_border_pointer_move_end(E_Border *bd)
{
e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "move");
e_pointer_type_pop(bd->pointer, bd, "move");
}

View File

@ -444,6 +444,7 @@ struct _E_Border
Evas_List *transients;
E_App *app;
E_Pointer *pointer;
};
struct _E_Border_Pending_Move_Resize

View File

@ -857,9 +857,6 @@ e_config_init(void)
CFG_KEYBIND(E_BINDING_CONTEXT_ANY, "Tab",
E_BINDING_MODIFIER_SHIFT | E_BINDING_MODIFIER_ALT, 0,
"winlist", "prev");
CFG_KEYBIND(E_BINDING_CONTEXT_ANY, "g",
E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"edit_mode_toggle", NULL);
CFG_KEYBIND(E_BINDING_CONTEXT_ANY, "End",
E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"restart", NULL);

View File

@ -174,8 +174,6 @@ e_container_new(E_Manager *man)
{
zone = e_zone_new(con, 0, 0, 0, con->w, con->h);
}
con->gadman = e_gadman_new(con);
return con;
}
@ -965,7 +963,6 @@ _e_container_free(E_Container *con)
l = l->next;
e_object_del(E_OBJECT(tmp->data));
}
if (con->gadman) e_object_del(E_OBJECT(con->gadman));
con->manager->containers = evas_list_remove(con->manager->containers, con);
e_canvas_del(con->bg_ecore_evas);
ecore_evas_free(con->bg_ecore_evas);
@ -1150,7 +1147,6 @@ _e_container_resize_handle(E_Container *con)
ev->container = con;
e_object_ref(E_OBJECT(con));
e_gadman_all_save(con->gadman);
e_xinerama_update();
screens = (Evas_List *)e_xinerama_screens_get();
if (screens)
@ -1186,8 +1182,6 @@ _e_container_resize_handle(E_Container *con)
e_shelf_zone_move_resize_handle(zone);
}
e_gadman_container_resize(con->gadman);
ecore_event_add(E_EVENT_CONTAINER_RESIZE, ev, _e_container_event_container_resize_free, NULL);
for (i = 0; i < 7; i++)

View File

@ -35,7 +35,6 @@ struct _E_Container
int x, y, w, h;
char visible : 1;
E_Manager *manager;
E_Gadman *gadman;
unsigned int num;
const char *name;

File diff suppressed because it is too large Load Diff

View File

@ -1,128 +0,0 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef E_TYPEDEFS
typedef enum _E_Gadman_Policy
{
/* type */
E_GADMAN_POLICY_ANYWHERE = 0,
E_GADMAN_POLICY_EDGES = 1,
/* extra flags */
E_GADMAN_POLICY_FIXED_ZONE = 1 << 8,
E_GADMAN_POLICY_HSIZE = 1 << 9,
E_GADMAN_POLICY_VSIZE = 1 << 10,
E_GADMAN_POLICY_HMOVE = 1 << 11,
E_GADMAN_POLICY_VMOVE = 1 << 12,
/* more extra flags */
E_GADMAN_POLICY_ALLOW_OVERLAP = 1 << 15,
E_GADMAN_POLICY_ALWAYS_ON_TOP = 1 << 16 // not used yet
} E_Gadman_Policy;
typedef enum _E_Gadman_Change
{
E_GADMAN_CHANGE_MOVE_RESIZE,
E_GADMAN_CHANGE_EDGE,
E_GADMAN_CHANGE_ZONE,
E_GADMAN_CHANGE_RAISE
} E_Gadman_Change;
typedef enum _E_Gadman_Edge
{
E_GADMAN_EDGE_LEFT,
E_GADMAN_EDGE_RIGHT,
E_GADMAN_EDGE_TOP,
E_GADMAN_EDGE_BOTTOM
} E_Gadman_Edge;
typedef enum _E_Gadman_Mode
{
E_GADMAN_MODE_NORMAL,
E_GADMAN_MODE_EDIT
} E_Gadman_Mode;
typedef struct _E_Gadman E_Gadman;
typedef struct _E_Gadman_Client E_Gadman_Client;
#else
#ifndef E_GADMAN_H
#define E_GADMAN_H
#define E_GADMAN_TYPE 0xE0b01006
#define E_GADMAN_CLIENT_TYPE 0xE0b01007
struct _E_Gadman
{
E_Object e_obj_inherit;
E_Container *container;
Evas_List *clients;
E_Gadman_Mode mode;
};
struct _E_Gadman_Client
{
E_Object e_obj_inherit;
E_Gadman *gadman;
Evas_Object *control_object;
Evas_Object *event_object;
E_Menu *menu;
Evas_Coord down_x, down_y;
Evas_Coord down_store_x, down_store_y, down_store_w, down_store_h;
unsigned char moving : 1;
unsigned char resizing_l : 1;
unsigned char resizing_r : 1;
unsigned char resizing_u : 1;
unsigned char resizing_d : 1;
E_Gadman_Edge edge;
const char *domain;
E_Zone *zone;
int instance;
E_Gadman_Policy policy;
Evas_Coord x, y, w, h;
Evas_Coord minw, minh, maxw, maxh;
unsigned char use_autow : 1;
unsigned char use_autoh : 1;
unsigned char allow_overlap : 1;
unsigned char always_on_top : 1;
Evas_Coord autow, autoh;
double ax, ay;
double mina, maxa;
struct {
int l, r, t, b;
} pad;
void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change);
void *data;
void *config;
};
EAPI int e_gadman_init(void);
EAPI int e_gadman_shutdown(void);
EAPI E_Gadman *e_gadman_new(E_Container *con);
EAPI void e_gadman_mode_set(E_Gadman *gm, E_Gadman_Mode mode);
EAPI E_Gadman_Mode e_gadman_mode_get(E_Gadman *gm);
EAPI void e_gadman_all_save(E_Gadman *gm);
EAPI void e_gadman_container_resize(E_Gadman *gm);
EAPI E_Gadman_Client *e_gadman_client_new(E_Gadman *gm);
EAPI void e_gadman_client_save(E_Gadman_Client *gmc);
EAPI void e_gadman_client_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge);
EAPI void e_gadman_client_load(E_Gadman_Client *gmc);
EAPI void e_gadman_client_domain_set(E_Gadman_Client *gmc, char *domain, int instance);
EAPI void e_gadman_client_zone_set(E_Gadman_Client *gmc, E_Zone *zone);
EAPI void e_gadman_client_policy_set(E_Gadman_Client *gmc, E_Gadman_Policy pol);
EAPI void e_gadman_client_min_size_set(E_Gadman_Client *gmc, Evas_Coord minw, Evas_Coord minh);
EAPI void e_gadman_client_max_size_set(E_Gadman_Client *gmc, Evas_Coord maxw, Evas_Coord maxh);
EAPI void e_gadman_client_align_set(E_Gadman_Client *gmc, double xalign, double yalign);
EAPI void e_gadman_client_aspect_set(E_Gadman_Client *gmc, double mina, double maxa);
EAPI void e_gadman_client_padding_set(E_Gadman_Client *gmc, int l, int r, int t, int b);
EAPI void e_gadman_client_auto_size_set(E_Gadman_Client *gmc, Evas_Coord autow, Evas_Coord autoh);
EAPI void e_gadman_client_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge);
EAPI E_Gadman_Edge e_gadman_client_edge_get(E_Gadman_Client *gmc);
EAPI void e_gadman_client_geometry_get(E_Gadman_Client *gmc, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
EAPI void e_gadman_client_user_resize(E_Gadman_Client *gmc, Evas_Coord w, Evas_Coord h);
EAPI void e_gadman_client_resize(E_Gadman_Client *gmc, Evas_Coord w, Evas_Coord h);
EAPI void e_gadman_client_change_func_set(E_Gadman_Client *gmc, void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change), void *data);
EAPI E_Menu *e_gadman_client_menu_new(E_Gadman_Client *gmc);
#endif
#endif

View File

@ -31,7 +31,6 @@
#include "e_resist.h"
#include "e_startup.h"
#include "e_hints.h"
#include "e_gadman.h"
#include "e_signals.h"
#include "e_xinerama.h"
#include "e_table.h"

View File

@ -50,7 +50,7 @@ e_init_init(void)
ecore_evas_name_class_set(_e_init_ecore_evas, "E", "Init_Window");
ecore_evas_title_set(_e_init_ecore_evas, "Enlightenment Init");
_e_init_pointer = e_pointer_window_new(_e_init_win);
_e_init_pointer = e_pointer_window_new(_e_init_win, 1);
ecore_evas_raise(_e_init_ecore_evas);
ecore_evas_show(_e_init_ecore_evas);

View File

@ -79,7 +79,7 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
E_Manager *man;
man = l->data;
if (man->pointer) e_object_del(E_OBJECT(man->pointer));
man->pointer = e_pointer_window_new(man->root);
man->pointer = e_pointer_window_new(man->root, 1);
}
}
return 1;
@ -128,7 +128,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
E_Manager *man;
man = l->data;
if (man->pointer) e_object_del(E_OBJECT(man->pointer));
man->pointer = e_pointer_window_new(man->root);
man->pointer = e_pointer_window_new(man->root, 1);
}
}
return 1;

View File

@ -5354,7 +5354,7 @@ break;
E_Manager *man;
man = ml->data;
if (man->pointer) e_object_del(E_OBJECT(man->pointer));
man->pointer = e_pointer_window_new(man->root);
man->pointer = e_pointer_window_new(man->root, 1);
}
SAVE;
END_INT;

View File

@ -907,7 +907,6 @@ _e_main_screens_init(void)
if (!e_container_init()) return 0;
if (!e_zone_init()) return 0;
if (!e_desk_init()) return 0;
if (!e_gadman_init()) return 0;
if (!e_menu_init()) return 0;
if (!e_exehist_init()) return 0;
@ -971,7 +970,6 @@ _e_main_screens_shutdown(void)
e_focus_shutdown();
e_exehist_shutdown();
e_menu_shutdown();
e_gadman_shutdown();
e_desk_shutdown();
e_zone_shutdown();
e_container_shutdown();

View File

@ -148,7 +148,7 @@ e_manager_new(Ecore_X_Window root, int num)
h = ecore_event_handler_add(ECORE_X_EVENT_SCREENSAVER_NOTIFY, _e_manager_cb_screensaver_notify, man);
if (h) man->handlers = evas_list_append(man->handlers, h);
man->pointer = e_pointer_window_new(man->root);
man->pointer = e_pointer_window_new(man->root, 1);
return man;
}

View File

@ -130,14 +130,6 @@ e_maximize_border_gadman_fill(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
Evas_List *l, *rects = NULL;
E_Maximize_Rect *r;
for (l = bd->zone->container->gadman->clients; l; l = l->next)
{
E_Gadman_Client *gmc;
gmc = l->data;
if ((gmc->zone != bd->zone)) continue;
OBSTACLE(gmc->x, gmc->y, gmc->x + gmc->w, gmc->y + gmc->h);
}
for (l = e_shelf_list(); l; l = l->next)
{
E_Shelf *es;

View File

@ -189,66 +189,6 @@ e_place_zone_region_smart(E_Zone *zone, Evas_List *skiplist, int x, int y, int w
{
Evas_List *l;
for (l = zone->container->gadman->clients; l; l = l->next)
{
E_Gadman_Client *gmc;
int bx, by, bw, bh;
gmc = l->data;
if ((gmc->zone != zone)) continue;
bx = gmc->x;
by = gmc->y;
bw = gmc->w;
bh = gmc->h;
if (E_INTERSECTS(bx, by, bw, bh, 0, 0, zw, zh))
{
if ((bx > 0) && (bx <= zw) && (!u_x[bx]))
{
a_w++;
if (a_w > a_alloc_w)
{
a_alloc_w += 32;
E_REALLOC(a_x, int, a_alloc_w);
}
a_x[a_w - 1] = bx;
u_x[bx] = 1;
}
if (((bx + bw) > 0) && ((bx + bw) <= zw) && (!u_x[bx + bw]))
{
a_w++;
if (a_w > a_alloc_w)
{
a_alloc_w += 32;
E_REALLOC(a_x, int, a_alloc_w);
}
a_x[a_w - 1] = bx + bw;
u_x[bx + bw] = 1;
}
if ((by > 0) && (by <= zh) && (!u_y[by]))
{
a_h++;
if (a_h > a_alloc_h)
{
a_alloc_h += 32;
E_REALLOC(a_y, int, a_alloc_h);
}
a_y[a_h - 1] = by;
u_y[by] = 1;
}
if (((by + bh) > 0) && ((by + bh) <= zh) && (!u_y[by + bh]))
{
a_h++;
if (a_h > a_alloc_h)
{
a_alloc_h += 32;
E_REALLOC(a_y, int, a_alloc_h);
}
a_y[a_h - 1] = by + bh;
u_y[by + bh] = 1;
}
}
}
for (l = e_shelf_list(); l; l = l->next)
{
E_Shelf *es;

View File

@ -20,6 +20,8 @@ struct _E_Pointer_Stack
static Evas_List *_e_pointers = NULL;
static void _e_pointer_canvas_add(E_Pointer *p);
static void _e_pointer_canvas_del(E_Pointer *p);
static void _e_pointer_cb_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
static void _e_pointer_free(E_Pointer *p);
static void _e_pointer_stack_free(E_Pointer_Stack *elem);
@ -27,109 +29,29 @@ static int _e_pointer_type_set(E_Pointer *p, const char *type);
/* externally accessible functions */
EAPI E_Pointer *
e_pointer_window_new(Ecore_X_Window win)
e_pointer_window_new(Ecore_X_Window win, int filled)
{
E_Pointer *p = NULL;
p = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_free);
if (!p) return NULL;
if (e_config->use_e_cursor)
{
Evas_Engine_Info_Buffer *einfo;
Evas_Object *o;
int rmethod;
rmethod = evas_render_method_lookup("buffer");
if (!rmethod) return NULL;
p = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_free);
if (!p) return NULL;
p->e_cursor = 1;
p->win = win;
p->w = e_config->cursor_size;
p->h = e_config->cursor_size;
/* create evas */
p->evas = evas_new();
if (!p->evas)
{
e_object_del(E_OBJECT(p));
return NULL;
}
evas_output_method_set(p->evas, rmethod);
evas_output_size_set(p->evas, p->w, p->h);
evas_output_viewport_set(p->evas, 0, 0, p->w, p->h);
p->pixels = malloc(p->w * p->h * sizeof(int));
if (!p->pixels)
{
e_object_del(E_OBJECT(p));
return NULL;
}
einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(p->evas);
if (!einfo)
{
e_object_del(E_OBJECT(p));
return NULL;
}
einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
einfo->info.dest_buffer = p->pixels;
einfo->info.dest_buffer_row_bytes = p->w * sizeof(int);
einfo->info.use_color_key = 0;
einfo->info.alpha_threshold = 0;
einfo->info.func.new_update_region = NULL;
einfo->info.func.free_update_region = NULL;
evas_engine_info_set(p->evas, (Evas_Engine_Info *)einfo);
/* set the pointer edje */
o = edje_object_add(p->evas);
if (!o)
{
e_object_del(E_OBJECT(p));
return NULL;
}
p->pointer_object = o;
/* Create the hotspot object */
o = evas_object_rectangle_add(p->evas);
if (!o)
{
e_object_del(E_OBJECT(p));
return NULL;
}
p->hot_object = o;
evas_object_event_callback_add(o,
EVAS_CALLBACK_MOVE,
_e_pointer_cb_move, p);
/* Init the cursor object */
if (ecore_x_cursor_color_supported_get())
p->color = 1;
else
p->color = 0;
/* init edje */
evas_object_move(p->pointer_object, 0, 0);
evas_object_resize(p->pointer_object, p->w, p->h);
evas_object_show(p->pointer_object);
ecore_x_cursor_size_set(e_config->cursor_size * 3 / 4);
e_pointer_type_push(p, p, "default");
_e_pointers = evas_list_append(_e_pointers, p);
if (ecore_x_cursor_color_supported_get()) p->color = 1;
else p->color = 0;
}
else
{
p = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_free);
if (!p) return NULL;
p->e_cursor = 0;
p->win = win;
ecore_x_cursor_size_set(e_config->cursor_size * 3 / 4);
e_pointer_type_push(p, p, "default");
_e_pointers = evas_list_append(_e_pointers, p);
}
ecore_x_cursor_size_set(e_config->cursor_size * 3 / 4);
if (filled) e_pointer_type_push(p, p, "default");
_e_pointers = evas_list_append(_e_pointers, p);
return p;
}
@ -182,11 +104,15 @@ e_pointer_type_push(E_Pointer *p, void *obj, const char *type)
E_Pointer_Stack *stack;
p->e_cursor = e_config->use_e_cursor;
if (p->e_cursor)
{
if (!p->evas) _e_pointer_canvas_add(p);
}
if (!_e_pointer_type_set(p, type))
{
p->e_cursor = 0;
if (!_e_pointer_type_set(p, type))
return;
if (!_e_pointer_type_set(p, type)) return;
}
if (p->type) evas_stringshare_del(p->type);
@ -224,7 +150,11 @@ e_pointer_type_pop(E_Pointer *p, void *obj, const char *type)
if (!p->stack)
{
printf("BUG: No pointer on the stack!\n");
if (p->e_cursor)
{
if (p->evas) _e_pointer_canvas_del(p);
}
ecore_x_window_cursor_set(p->win, 0);
return;
}
@ -267,6 +197,7 @@ e_pointer_idler_before(void)
p = l->data;
if (!p->e_cursor) continue;
if (!p->evas) continue;
updates = evas_render_updates(p->evas);
if ((updates) || (p->hot.update))
@ -283,6 +214,80 @@ e_pointer_idler_before(void)
}
/* local subsystem functions */
static void
_e_pointer_canvas_add(E_Pointer *p)
{
Evas_Engine_Info_Buffer *einfo;
Evas_Object *o;
int rmethod;
p->w = e_config->cursor_size;
p->h = e_config->cursor_size;
/* create evas */
p->evas = evas_new();
if (!p->evas)
{
e_object_del(E_OBJECT(p));
return;
}
rmethod = evas_render_method_lookup("buffer");
evas_output_method_set(p->evas, rmethod);
evas_output_size_set(p->evas, p->w, p->h);
evas_output_viewport_set(p->evas, 0, 0, p->w, p->h);
p->pixels = malloc(p->w * p->h * sizeof(int));
if (!p->pixels)
{
evas_free(p->evas);
p->evas = NULL;
return;
}
einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(p->evas);
if (!einfo)
{
free(p->pixels);
p->pixels = NULL;
evas_free(p->evas);
p->evas = NULL;
return;
}
einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
einfo->info.dest_buffer = p->pixels;
einfo->info.dest_buffer_row_bytes = p->w * sizeof(int);
einfo->info.use_color_key = 0;
einfo->info.alpha_threshold = 0;
einfo->info.func.new_update_region = NULL;
einfo->info.func.free_update_region = NULL;
evas_engine_info_set(p->evas, (Evas_Engine_Info *)einfo);
/* set the pointer edje */
o = edje_object_add(p->evas);
p->pointer_object = o;
/* Create the hotspot object */
o = evas_object_rectangle_add(p->evas);
p->hot_object = o;
evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE,
_e_pointer_cb_move, p);
/* init edje */
evas_object_move(p->pointer_object, 0, 0);
evas_object_resize(p->pointer_object, p->w, p->h);
evas_object_show(p->pointer_object);
}
static void
_e_pointer_canvas_del(E_Pointer *p)
{
if (p->pointer_object) evas_object_del(p->pointer_object);
if (p->hot_object) evas_object_del(p->hot_object);
if (p->evas) evas_free(p->evas);
if (p->pixels) free(p->pixels);
p->pointer_object = NULL;
p->hot_object = NULL;
p->evas = NULL;
p->pixels = NULL;
}
static void
_e_pointer_cb_move(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
{
@ -305,12 +310,8 @@ _e_pointer_free(E_Pointer *p)
{
_e_pointers = evas_list_remove(_e_pointers, p);
/* free evas */
if (p->pointer_object) evas_object_del(p->pointer_object);
if (p->hot_object) evas_object_del(p->hot_object);
if (p->evas) evas_free(p->evas);
if (p->pixels) free(p->pixels);
_e_pointer_canvas_del(p);
while (p->stack)
{
_e_pointer_stack_free(p->stack->data);
@ -324,8 +325,7 @@ _e_pointer_free(E_Pointer *p)
static void
_e_pointer_stack_free(E_Pointer_Stack *elem)
{
if (elem->type)
evas_stringshare_del(elem->type);
if (elem->type) evas_stringshare_del(elem->type);
free(elem);
}

View File

@ -35,7 +35,7 @@ struct _E_Pointer
} hot;
};
EAPI E_Pointer *e_pointer_window_new(Ecore_X_Window win);
EAPI E_Pointer *e_pointer_window_new(Ecore_X_Window win, int filled);
EAPI void e_pointer_type_push(E_Pointer *p, void *obj, const char *type);
EAPI void e_pointer_type_pop(E_Pointer *p, void *obj, const char *type);
EAPI void e_pointers_size_set(int size);

View File

@ -85,13 +85,6 @@ e_resist_container_border_position(E_Container *con, Evas_List *skiplist,
}
e_container_border_list_free(bl);
for (l = con->gadman->clients; l; l = l->next)
{
E_Gadman_Client *gmc;
gmc = l->data;
OBSTACLE(gmc->x, gmc->y, gmc->w, gmc->h, e_config->gadget_resist);
}
for (l = e_shelf_list(); l; l = l->next)
{
E_Shelf *es;
@ -135,27 +128,6 @@ e_resist_container_gadman_position(E_Container *con, Evas_List *skiplist,
return 0;
}
for (l = con->gadman->clients; l; l = l->next)
{
E_Gadman_Client *gmc;
int ok;
gmc = l->data;
ok = 1;
for (ll = skiplist; ll; ll = ll->next)
{
if (ll->data == gmc)
{
ok = 0;
break;
}
}
if (ok)
{
OBSTACLE(gmc->x, gmc->y, gmc->w, gmc->h, e_config->gadget_resist);
}
}
for (l = e_shelf_list(); l; l = l->next)
{
E_Shelf *es;

View File

@ -4,7 +4,6 @@
#include "e.h"
static void _e_test_internal(E_Container *con);
static void _cb_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change);
EAPI void
e_test(void)
@ -28,149 +27,6 @@ e_test(void)
}
#if 0
/* local subsystem functions */
typedef struct _Dat Dat;
struct _Dat
{
Evas_Object *table;
Evas_List *items;
};
static void
_e_test_internal(E_Container *con)
{
E_Gadman_Client *gmc;
Dat *dat;
Evas_Object *o;
int i, j;
dat = calloc(1, sizeof(Dat));
dat->table = e_table_add(con->bg_evas);
e_table_freeze(dat->table);
e_table_homogenous_set(dat->table, 1);
for (j = 0; j < 5; j++)
{
for (i = 0; i < 5; i++)
{
o = evas_object_rectangle_add(con->bg_evas);
dat->items = evas_list_append(dat->items, o);
evas_object_color_set(o, i * 50, j * 50, 100, 100);
e_table_pack(dat->table, o, i, j, 1, 1);
e_table_pack_options_set(o, 1, 1, 1, 1, 0.5, 0.5, 0, 0, -1, -1);
evas_object_show(o);
}
}
e_table_thaw(dat->table);
evas_object_show(dat->table);
gmc = e_gadman_client_new(con->gadman);
e_gadman_client_domain_set(gmc, "TEST", 0);
e_gadman_client_policy_set(gmc,
E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
E_GADMAN_POLICY_VSIZE);
e_gadman_client_min_size_set(gmc, 10, 10);
e_gadman_client_auto_size_set(gmc, 128, 128);
e_gadman_client_align_set(gmc, 0.5, 0.5);
e_gadman_client_resize(gmc, 128, 128);
e_gadman_client_change_func_set(gmc, _cb_change, dat);
e_gadman_client_load(gmc);
}
static void
_cb_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change)
{
Dat *dat;
Evas_Coord x, y, w, h;
dat = data;
switch (change)
{
case E_GADMAN_CHANGE_MOVE_RESIZE:
e_gadman_client_geometry_get(gmc, &x, &y, &w, &h);
evas_object_move(dat->table, x, y);
evas_object_resize(dat->table, w, h);
break;
default:
break;
}
}
#elif 0
typedef struct _Dat Dat;
struct _Dat
{
Evas_Object *layout;
Evas_List *items;
};
static void
_e_test_internal(E_Container *con)
{
E_Gadman_Client *gmc;
Dat *dat;
Evas_Object *o;
int i;
dat = calloc(1, sizeof(Dat));
dat->layout = e_layout_add(con->bg_evas);
e_layout_freeze(dat->layout);
e_layout_virtual_size_set(dat->layout, 800, 600);
for (i = 0; i < 10; i++)
{
Evas_Coord x, y, w, h;
o = evas_object_rectangle_add(con->bg_evas);
dat->items = evas_list_append(dat->items, o);
evas_object_color_set(o, i * 25, 255 - (i * 25), 100, 100);
e_layout_pack(dat->layout, o);
w = rand() % 800;
h = rand() % 600;
x = rand() % (800 - w);
y = rand() % (600 - h);
e_layout_child_move(o, x, y);
e_layout_child_resize(o, w, h);
evas_object_show(o);
}
e_layout_thaw(dat->layout);
evas_object_show(dat->layout);
gmc = e_gadman_client_new(con->gadman);
e_gadman_client_domain_set(gmc, "TEST", 0);
e_gadman_client_policy_set(gmc,
E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
E_GADMAN_POLICY_VSIZE);
e_gadman_client_min_size_set(gmc, 10, 10);
e_gadman_client_auto_size_set(gmc, 128, 128);
e_gadman_client_align_set(gmc, 0.5, 0.5);
e_gadman_client_resize(gmc, 128, 128);
e_gadman_client_change_func_set(gmc, _cb_change, dat);
e_gadman_client_load(gmc);
}
static void
_cb_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change)
{
Dat *dat;
Evas_Coord x, y, w, h;
dat = data;
switch (change)
{
case E_GADMAN_CHANGE_MOVE_RESIZE:
e_gadman_client_geometry_get(gmc, &x, &y, &w, &h);
evas_object_move(dat->layout, x, y);
evas_object_resize(dat->layout, w, h);
break;
default:
break;
}
}
#elif 0
static int
_e_test_timer(void *data)
{
@ -836,9 +692,4 @@ static void
_e_test_internal(E_Container *con)
{
}
static void
_cb_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change)
{
}
#endif

View File

@ -75,6 +75,8 @@ e_win_new(E_Container *con)
win->min_aspect = 0.0;
win->max_aspect = 0.0;
wins = evas_list_append(wins, win);
win->pointer = e_pointer_window_new(win->evas_win, 0);
return win;
}
@ -104,7 +106,6 @@ e_win_hide(E_Win *win)
E_OBJECT_CHECK(win);
E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
if (win->border) e_border_hide(win->border, 1);
e_pointer_type_pop(win->container->manager->pointer, win, NULL);
}
EAPI void
@ -368,6 +369,7 @@ e_win_evas_object_win_get(Evas_Object *obj)
static void
_e_win_free(E_Win *win)
{
e_object_del(E_OBJECT(win->pointer));
e_canvas_del(win->ecore_evas);
ecore_evas_free(win->ecore_evas);
if (win->border)

View File

@ -35,6 +35,8 @@ struct _E_Win
unsigned char centered : 1;
unsigned char dialog : 1;
} state;
E_Pointer *pointer;
};
EAPI int e_win_init (void);