forked from enlightenment/enlightenment
Add add and remove - except remove does not work, free's are causing problems - can someone tell me how to fix please?
SVN revision: 12877
This commit is contained in:
parent
2ab6fa51e8
commit
2c2dd2a469
|
@ -72,6 +72,8 @@ static void _e_border_menu_cb_stick(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
|
|
||||||
static void _e_border_event_border_resize_free(void *data, void *ev);
|
static void _e_border_event_border_resize_free(void *data, void *ev);
|
||||||
static void _e_border_event_border_move_free(void *data, void *ev);
|
static void _e_border_event_border_move_free(void *data, void *ev);
|
||||||
|
static void _e_border_event_border_add_free(void *data, void *ev);
|
||||||
|
static void _e_border_event_border_remove_free(void *data, void *ev);
|
||||||
|
|
||||||
/* local subsystem globals */
|
/* local subsystem globals */
|
||||||
static Evas_List *handlers = NULL;
|
static Evas_List *handlers = NULL;
|
||||||
|
@ -80,6 +82,8 @@ static E_Border *focused = NULL;
|
||||||
|
|
||||||
int E_EVENT_BORDER_RESIZE = 0;
|
int E_EVENT_BORDER_RESIZE = 0;
|
||||||
int E_EVENT_BORDER_MOVE = 0;
|
int E_EVENT_BORDER_MOVE = 0;
|
||||||
|
int E_EVENT_BORDER_ADD = 0;
|
||||||
|
int E_EVENT_BORDER_REMOVE = 0;
|
||||||
|
|
||||||
#define GRAV_SET(bd, grav) \
|
#define GRAV_SET(bd, grav) \
|
||||||
printf("GRAV TO %i\n", grav); \
|
printf("GRAV TO %i\n", grav); \
|
||||||
|
@ -111,6 +115,8 @@ e_border_init(void)
|
||||||
|
|
||||||
E_EVENT_BORDER_RESIZE = ecore_event_type_new();
|
E_EVENT_BORDER_RESIZE = ecore_event_type_new();
|
||||||
E_EVENT_BORDER_MOVE = ecore_event_type_new();
|
E_EVENT_BORDER_MOVE = ecore_event_type_new();
|
||||||
|
E_EVENT_BORDER_ADD = ecore_event_type_new();
|
||||||
|
E_EVENT_BORDER_REMOVE = ecore_event_type_new();
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -134,6 +140,7 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map)
|
||||||
{
|
{
|
||||||
E_Border *bd;
|
E_Border *bd;
|
||||||
Ecore_X_Window_Attributes *att;
|
Ecore_X_Window_Attributes *att;
|
||||||
|
E_Event_Border_Add *ev;
|
||||||
|
|
||||||
bd = E_OBJECT_ALLOC(E_Border, _e_border_free);
|
bd = E_OBJECT_ALLOC(E_Border, _e_border_free);
|
||||||
if (!bd) return NULL;
|
if (!bd) return NULL;
|
||||||
|
@ -259,6 +266,10 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map)
|
||||||
con->clients = evas_list_append(con->clients, bd);
|
con->clients = evas_list_append(con->clients, bd);
|
||||||
borders = evas_list_append(borders, bd);
|
borders = evas_list_append(borders, bd);
|
||||||
|
|
||||||
|
ev = calloc(1, sizeof(E_Event_Border_Add));
|
||||||
|
ev->border = bd;
|
||||||
|
e_object_ref(E_OBJECT(bd));
|
||||||
|
ecore_event_add(E_EVENT_BORDER_ADD, ev, _e_border_event_border_add_free, NULL);
|
||||||
return bd;
|
return bd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,6 +319,8 @@ e_border_hide(E_Border *bd)
|
||||||
void
|
void
|
||||||
e_border_move(E_Border *bd, int x, int y)
|
e_border_move(E_Border *bd, int x, int y)
|
||||||
{
|
{
|
||||||
|
E_Event_Border_Move *ev;
|
||||||
|
|
||||||
E_OBJECT_CHECK(bd);
|
E_OBJECT_CHECK(bd);
|
||||||
if ((x == bd->x) && (y == bd->y)) return;
|
if ((x == bd->x) && (y == bd->y)) return;
|
||||||
bd->x = x;
|
bd->x = x;
|
||||||
|
@ -319,11 +332,17 @@ e_border_move(E_Border *bd, int x, int y)
|
||||||
bd->y + bd->client_inset.t,
|
bd->y + bd->client_inset.t,
|
||||||
bd->client.w,
|
bd->client.w,
|
||||||
bd->client.h);
|
bd->client.h);
|
||||||
|
|
||||||
|
ev = calloc(1, sizeof(E_Event_Border_Resize));
|
||||||
|
ev->border = bd;
|
||||||
|
e_object_ref(E_OBJECT(bd));
|
||||||
|
ecore_event_add(E_EVENT_BORDER_RESIZE, ev, _e_border_event_border_resize_free, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
e_border_resize(E_Border *bd, int w, int h)
|
e_border_resize(E_Border *bd, int w, int h)
|
||||||
{
|
{
|
||||||
|
E_Event_Border_Resize *ev;
|
||||||
E_OBJECT_CHECK(bd);
|
E_OBJECT_CHECK(bd);
|
||||||
if ((w == bd->w) && (h == bd->h)) return;
|
if ((w == bd->w) && (h == bd->h)) return;
|
||||||
bd->w = w;
|
bd->w = w;
|
||||||
|
@ -337,6 +356,11 @@ e_border_resize(E_Border *bd, int w, int h)
|
||||||
bd->y + bd->client_inset.t,
|
bd->y + bd->client_inset.t,
|
||||||
bd->client.w,
|
bd->client.w,
|
||||||
bd->client.h);
|
bd->client.h);
|
||||||
|
|
||||||
|
ev = calloc(1, sizeof(E_Event_Border_Resize));
|
||||||
|
ev->border = bd;
|
||||||
|
e_object_ref(E_OBJECT(bd));
|
||||||
|
ecore_event_add(E_EVENT_BORDER_RESIZE, ev, _e_border_event_border_resize_free, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -716,6 +740,16 @@ e_border_idler_before(void)
|
||||||
static void
|
static void
|
||||||
_e_border_free(E_Border *bd)
|
_e_border_free(E_Border *bd)
|
||||||
{
|
{
|
||||||
|
E_Event_Border_Remove *ev;
|
||||||
|
|
||||||
|
/* FIXME - can the bd is getting freed no matter so the event gets NULL :(
|
||||||
|
* any ideas?
|
||||||
|
ev = calloc(1, sizeof(E_Event_Border_Remove));
|
||||||
|
ev->border = bd;
|
||||||
|
e_object_ref(E_OBJECT(bd));
|
||||||
|
ecore_event_add(E_EVENT_BORDER_REMOVE, ev, _e_border_event_border_remove_free, NULL);
|
||||||
|
*/
|
||||||
|
|
||||||
if (focused == bd) focused = NULL;
|
if (focused == bd) focused = NULL;
|
||||||
while (bd->handlers)
|
while (bd->handlers)
|
||||||
{
|
{
|
||||||
|
@ -773,6 +807,7 @@ static int _e_border_cb_window_destroy(void *data, int ev_type, void *ev)
|
||||||
e = ev;
|
e = ev;
|
||||||
bd = e_border_find_by_client_window(e->win);
|
bd = e_border_find_by_client_window(e->win);
|
||||||
if (!bd) return 1;
|
if (!bd) return 1;
|
||||||
|
|
||||||
e_object_del(E_OBJECT(bd));
|
e_object_del(E_OBJECT(bd));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -1604,7 +1639,6 @@ _e_border_cb_mouse_move(void *data, int type, void *event)
|
||||||
bd->mouse.current.my = ev->root.y;
|
bd->mouse.current.my = ev->root.y;
|
||||||
if (bd->moving)
|
if (bd->moving)
|
||||||
{
|
{
|
||||||
E_Event_Border_Move *pass;
|
|
||||||
int x, y, new_x, new_y;
|
int x, y, new_x, new_y;
|
||||||
Evas_List *skiplist = NULL;
|
Evas_List *skiplist = NULL;
|
||||||
|
|
||||||
|
@ -1632,19 +1666,10 @@ _e_border_cb_mouse_move(void *data, int type, void *event)
|
||||||
evas_list_free(skiplist);
|
evas_list_free(skiplist);
|
||||||
e_border_move(bd, new_x, new_y);
|
e_border_move(bd, new_x, new_y);
|
||||||
|
|
||||||
pass = calloc(1, sizeof(E_Event_Border_Move));
|
|
||||||
pass->border = bd;
|
|
||||||
e_object_ref(E_OBJECT(bd));
|
|
||||||
ecore_event_add(E_EVENT_BORDER_MOVE, pass, _e_border_event_border_move_free, NULL);
|
|
||||||
}
|
}
|
||||||
else if (bd->resize_mode != RESIZE_NONE)
|
else if (bd->resize_mode != RESIZE_NONE)
|
||||||
{
|
{
|
||||||
E_Event_Border_Resize *pass;
|
|
||||||
_e_border_resize_handle(bd);
|
_e_border_resize_handle(bd);
|
||||||
pass = calloc(1, sizeof(E_Event_Border_Resize));
|
|
||||||
pass->border = bd;
|
|
||||||
e_object_ref(E_OBJECT(bd));
|
|
||||||
ecore_event_add(E_EVENT_BORDER_RESIZE, pass, _e_border_event_border_resize_free, NULL);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2671,3 +2696,23 @@ _e_border_event_border_move_free(void *data, void *ev)
|
||||||
free(e);
|
free(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_border_event_border_add_free(void *data, void *ev)
|
||||||
|
{
|
||||||
|
E_Event_Border_Add *e;
|
||||||
|
|
||||||
|
e = ev;
|
||||||
|
e_object_unref(E_OBJECT(e->border));
|
||||||
|
free(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_border_event_border_remove_free(void *data, void *ev)
|
||||||
|
{
|
||||||
|
E_Event_Border_Resize *e;
|
||||||
|
|
||||||
|
e = ev;
|
||||||
|
e_object_unref(E_OBJECT(e->border));
|
||||||
|
free(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -177,6 +177,10 @@ _pager_init(E_Module *m)
|
||||||
_pager_cb_event_border_events, e);
|
_pager_cb_event_border_events, e);
|
||||||
ecore_event_handler_add(E_EVENT_BORDER_MOVE,
|
ecore_event_handler_add(E_EVENT_BORDER_MOVE,
|
||||||
_pager_cb_event_border_events, e);
|
_pager_cb_event_border_events, e);
|
||||||
|
ecore_event_handler_add(E_EVENT_BORDER_ADD,
|
||||||
|
_pager_cb_event_border_events, e);
|
||||||
|
ecore_event_handler_add(E_EVENT_BORDER_REMOVE,
|
||||||
|
_pager_cb_event_border_events, e);
|
||||||
|
|
||||||
_pager_reconfigure(e);
|
_pager_reconfigure(e);
|
||||||
return e;
|
return e;
|
||||||
|
|
Loading…
Reference in New Issue