forked from enlightenment/enlightenment
some more gadman code and make shutdown of borders a little faster :)
SVN revision: 12982
This commit is contained in:
parent
6e7716f2c1
commit
7f9c92a6e7
|
@ -940,7 +940,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_border_hide(bd);
|
||||||
e_object_del(E_OBJECT(bd));
|
e_object_del(E_OBJECT(bd));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -950,6 +950,7 @@ _e_border_cb_window_hide(void *data, int ev_type, void *ev)
|
||||||
{
|
{
|
||||||
E_Border *bd;
|
E_Border *bd;
|
||||||
Ecore_X_Event_Window_Hide *e;
|
Ecore_X_Event_Window_Hide *e;
|
||||||
|
int was_iconic = 0, was_visible = 0;
|
||||||
|
|
||||||
// printf("in hide cb\n");
|
// printf("in hide cb\n");
|
||||||
bd = data;
|
bd = data;
|
||||||
|
@ -962,8 +963,10 @@ _e_border_cb_window_hide(void *data, int ev_type, void *ev)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/* Don't delete hidden or iconified windows */
|
/* Don't delete hidden or iconified windows */
|
||||||
if (!(bd->iconic) && (bd->visible)) e_object_del(E_OBJECT(bd));
|
was_iconic = bd->iconic;
|
||||||
|
was_visible = bd->visible;
|
||||||
|
e_border_hide(bd);
|
||||||
|
if (!(was_iconic) && (was_visible)) e_object_del(E_OBJECT(bd));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -978,6 +981,7 @@ _e_border_cb_window_reparent(void *data, int ev_type, void *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;
|
||||||
if (e->parent == bd->client.shell_win) return 1;
|
if (e->parent == bd->client.shell_win) return 1;
|
||||||
|
e_border_hide(bd);
|
||||||
e_object_del(E_OBJECT(bd));
|
e_object_del(E_OBJECT(bd));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -1485,6 +1489,7 @@ _e_border_cb_signal_action(void *data, Evas_Object *obj, const char *emission, c
|
||||||
ecore_x_kill(bd->client.win);
|
ecore_x_kill(bd->client.win);
|
||||||
ecore_x_sync();
|
ecore_x_sync();
|
||||||
// ecore_x_window_del(bd->client.win);
|
// ecore_x_window_del(bd->client.win);
|
||||||
|
e_border_hide(bd);
|
||||||
e_object_del(E_OBJECT(bd));
|
e_object_del(E_OBJECT(bd));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2780,6 +2785,7 @@ _e_border_menu_cb_close(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
ecore_x_kill(bd->client.win);
|
ecore_x_kill(bd->client.win);
|
||||||
ecore_x_sync();
|
ecore_x_sync();
|
||||||
// ecore_x_window_del(bd->client.win);
|
// ecore_x_window_del(bd->client.win);
|
||||||
|
e_border_hide(bd);
|
||||||
e_object_del(E_OBJECT(bd));
|
e_object_del(E_OBJECT(bd));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
/* local subsystem functions */
|
/* local subsystem functions */
|
||||||
static void _e_gadman_free(E_Gadman *gm);
|
static void _e_gadman_free(E_Gadman *gm);
|
||||||
|
static void _e_gadman_client_free(E_Gadman_Client *gmc);
|
||||||
|
|
||||||
/* externally accessible functions */
|
/* externally accessible functions */
|
||||||
int
|
int
|
||||||
|
@ -30,9 +31,117 @@ e_gadman_new(E_Container *con)
|
||||||
return gm;
|
return gm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
E_Gadman_Client *
|
||||||
|
e_gadman_client_new(E_Gadman *gm)
|
||||||
|
{
|
||||||
|
E_Gadman_Client *gmc;
|
||||||
|
E_OBJECT_CHECK_RETURN(gm, NULL);
|
||||||
|
|
||||||
|
gmc = E_OBJECT_ALLOC(E_Gadman_Client, _e_gadman_client_free);
|
||||||
|
if (!gmc) return NULL;
|
||||||
|
gmc->gadman = gm;
|
||||||
|
gmc->policy = E_GADMAN_POLICY_ANYWHERE;
|
||||||
|
gmc->minw = 1;
|
||||||
|
gmc->minh = 1;
|
||||||
|
gmc->maxw = 0;
|
||||||
|
gmc->maxh = 0;
|
||||||
|
gmc->ax = 0.0;
|
||||||
|
gmc->ay = 1.0;
|
||||||
|
gmc->mina = 0.0;
|
||||||
|
gmc->maxa = 9999999.0;
|
||||||
|
gm->clients = evas_list_append(gm->clients, gmc);
|
||||||
|
return gmc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_gadman_client_domain_set(E_Gadman_Client *gmc, char *domain, int instance)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(gmc);
|
||||||
|
if (gmc->domain) free(gmc->domain);
|
||||||
|
gmc->domain = strdup(domain);
|
||||||
|
gmc->instance = instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_gadman_client_save(E_Gadman_Client *gmc, char *domain, int instance)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(gmc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_gadman_client_load(E_Gadman_Client *gmc, char *domain, int instance)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(gmc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_gadman_client_policy_set(E_Gadman_Client *gmc, E_Gadman_Policy pol)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(gmc);
|
||||||
|
gmc->policy = pol;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_gadman_client_min_size_set(E_Gadman_Client *gmc, Evas_Coord minw, Evas_Coord minh)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(gmc);
|
||||||
|
gmc->minw = minw;
|
||||||
|
gmc->minh = minh;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_gadman_client_max_size_set(E_Gadman_Client *gmc, Evas_Coord maxw, Evas_Coord maxh)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(gmc);
|
||||||
|
gmc->maxw = maxw;
|
||||||
|
gmc->maxh = maxh;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_gadman_client_align_set(E_Gadman_Client *gmc, double xalign, double yalign)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(gmc);
|
||||||
|
gmc->ax = xalign;
|
||||||
|
gmc->ay = yalign;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_gadman_client_aspect_set(E_Gadman_Client *gmc, double mina, double maxa)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(gmc);
|
||||||
|
gmc->mina = mina;
|
||||||
|
gmc->maxa = maxa;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_gadman_client_geometry_get(E_Gadman_Client *gmc, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(gmc);
|
||||||
|
if (x) *x = gmc->x;
|
||||||
|
if (y) *y = gmc->y;
|
||||||
|
if (w) *w = gmc->w;
|
||||||
|
if (h) *h = gmc->h;
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(gmc);
|
||||||
|
gmc->func = func;
|
||||||
|
gmc->data = data;
|
||||||
|
}
|
||||||
|
|
||||||
/* local subsystem functions */
|
/* local subsystem functions */
|
||||||
static void
|
static void
|
||||||
_e_gadman_free(E_Gadman *gm)
|
_e_gadman_free(E_Gadman *gm)
|
||||||
{
|
{
|
||||||
free(gm);
|
free(gm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_gadman_client_free(E_Gadman_Client *gmc)
|
||||||
|
{
|
||||||
|
gmc->gadman->clients = evas_list_remove(gmc->gadman->clients, gmc);
|
||||||
|
if (gmc->domain) free(gmc->domain);
|
||||||
|
free(gmc);
|
||||||
|
}
|
||||||
|
|
|
@ -3,20 +3,26 @@
|
||||||
typedef enum _E_Gadman_Policy
|
typedef enum _E_Gadman_Policy
|
||||||
{
|
{
|
||||||
/* type */
|
/* type */
|
||||||
E_GADMAN_ANYWHERE = 0,
|
E_GADMAN_POLICY_ANYWHERE = 0,
|
||||||
E_GADMAN_EDGES = 1,
|
E_GADMAN_POLICY_EDGES = 1,
|
||||||
E_GADMAN_LEFT_EDGE = 2,
|
E_GADMAN_POLICY_LEFT_EDGE = 2,
|
||||||
E_GADMAN_RIGHT_EDGE = 3,
|
E_GADMAN_POLICY_RIGHT_EDGE = 3,
|
||||||
E_GADMAN_TOP_EDGE = 4,
|
E_GADMAN_POLICY_TOP_EDGE = 4,
|
||||||
E_GADMAN_BOTTOM_EDGE = 5,
|
E_GADMAN_POLICY_BOTTOM_EDGE = 5,
|
||||||
/* extra flags */
|
/* extra flags */
|
||||||
E_GADMAN_FIXED_ZONE = 1 << 8,
|
E_GADMAN_POLICY_FIXED_ZONE = 1 << 8,
|
||||||
E_GADMAN_HSIZE = 1 << 9,
|
E_GADMAN_POLICY_HSIZE = 1 << 9,
|
||||||
E_GADMAN_VSIZE = 1 << 10,
|
E_GADMAN_POLICY_VSIZE = 1 << 10,
|
||||||
E_GADMAN_HMOVE = 1 << 11,
|
E_GADMAN_POLICY_HMOVE = 1 << 11,
|
||||||
E_GADMAN_VMOVE = 1 << 12
|
E_GADMAN_POLICY_VMOVE = 1 << 12
|
||||||
} E_Gadman_Policy;
|
} E_Gadman_Policy;
|
||||||
|
|
||||||
|
typedef enum _E_Gadman_Change
|
||||||
|
{
|
||||||
|
E_GADMAN_CHANGE_MOVE,
|
||||||
|
E_GADMAN_CHANGE_RESIZE,
|
||||||
|
} E_Gadman_Change;
|
||||||
|
|
||||||
typedef struct _E_Gadman E_Gadman;
|
typedef struct _E_Gadman E_Gadman;
|
||||||
typedef struct _E_Gadman_Client E_Gadman_Client;
|
typedef struct _E_Gadman_Client E_Gadman_Client;
|
||||||
|
|
||||||
|
@ -27,7 +33,6 @@ typedef struct _E_Gadman_Client E_Gadman_Client;
|
||||||
struct _E_Gadman
|
struct _E_Gadman
|
||||||
{
|
{
|
||||||
E_Object e_obj_inherit;
|
E_Object e_obj_inherit;
|
||||||
|
|
||||||
E_Container *container;
|
E_Container *container;
|
||||||
Evas_List *clients;
|
Evas_List *clients;
|
||||||
};
|
};
|
||||||
|
@ -35,18 +40,34 @@ struct _E_Gadman
|
||||||
struct _E_Gadman_Client
|
struct _E_Gadman_Client
|
||||||
{
|
{
|
||||||
E_Object e_obj_inherit;
|
E_Object e_obj_inherit;
|
||||||
|
|
||||||
E_Gadman *gadman;
|
E_Gadman *gadman;
|
||||||
|
|
||||||
|
Evas_Object *control_object;
|
||||||
|
char *domain;
|
||||||
|
int instance;
|
||||||
|
E_Gadman_Policy policy;
|
||||||
|
Evas_Coord x, y, w, h;
|
||||||
|
Evas_Coord minw, minh, maxw, maxh;
|
||||||
|
double ax, ay;
|
||||||
|
double mina, maxa;
|
||||||
|
void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change);
|
||||||
|
void *data;
|
||||||
};
|
};
|
||||||
|
|
||||||
EAPI int e_gadman_init(void);
|
EAPI int e_gadman_init(void);
|
||||||
EAPI int e_gadman_shutdown(void);
|
EAPI int e_gadman_shutdown(void);
|
||||||
EAPI E_Gadman *e_gadman_new(E_Container *con);
|
EAPI E_Gadman *e_gadman_new(E_Container *con);
|
||||||
EAPI E_Gadman_Client *e_gadman_client_new(E_Gadman *gm);
|
EAPI E_Gadman_Client *e_gadman_client_new(E_Gadman *gm);
|
||||||
|
EAPI void e_gadman_client_domain_set(E_Gadman_Client *gmc, char *domain, int instance);
|
||||||
|
EAPI void e_gadman_client_save(E_Gadman_Client *gmc, char *domain, int instance);
|
||||||
|
EAPI void e_gadman_client_load(E_Gadman_Client *gmc, char *domain, int instance);
|
||||||
EAPI void e_gadman_client_policy_set(E_Gadman_Client *gmc, E_Gadman_Policy pol);
|
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_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 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_default_align_set(E_Gadman_Client *gmc, double xalign, double yalign);
|
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_geometry_get(E_Gadman_Client *gmc, Evas_Coord *x, Evas_Coord *y, 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);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue