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;
|
||||
bd = e_border_find_by_client_window(e->win);
|
||||
if (!bd) return 1;
|
||||
|
||||
e_border_hide(bd);
|
||||
e_object_del(E_OBJECT(bd));
|
||||
return 1;
|
||||
}
|
||||
|
@ -950,6 +950,7 @@ _e_border_cb_window_hide(void *data, int ev_type, void *ev)
|
|||
{
|
||||
E_Border *bd;
|
||||
Ecore_X_Event_Window_Hide *e;
|
||||
int was_iconic = 0, was_visible = 0;
|
||||
|
||||
// printf("in hide cb\n");
|
||||
bd = data;
|
||||
|
@ -962,8 +963,10 @@ _e_border_cb_window_hide(void *data, int ev_type, void *ev)
|
|||
return 1;
|
||||
}
|
||||
/* 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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
if (!bd) return 1;
|
||||
if (e->parent == bd->client.shell_win) return 1;
|
||||
e_border_hide(bd);
|
||||
e_object_del(E_OBJECT(bd));
|
||||
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_sync();
|
||||
// ecore_x_window_del(bd->client.win);
|
||||
e_border_hide(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_sync();
|
||||
// ecore_x_window_del(bd->client.win);
|
||||
e_border_hide(bd);
|
||||
e_object_del(E_OBJECT(bd));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
/* local subsystem functions */
|
||||
static void _e_gadman_free(E_Gadman *gm);
|
||||
static void _e_gadman_client_free(E_Gadman_Client *gmc);
|
||||
|
||||
/* externally accessible functions */
|
||||
int
|
||||
|
@ -30,9 +31,117 @@ e_gadman_new(E_Container *con)
|
|||
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 */
|
||||
static void
|
||||
_e_gadman_free(E_Gadman *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
|
||||
{
|
||||
/* type */
|
||||
E_GADMAN_ANYWHERE = 0,
|
||||
E_GADMAN_EDGES = 1,
|
||||
E_GADMAN_LEFT_EDGE = 2,
|
||||
E_GADMAN_RIGHT_EDGE = 3,
|
||||
E_GADMAN_TOP_EDGE = 4,
|
||||
E_GADMAN_BOTTOM_EDGE = 5,
|
||||
E_GADMAN_POLICY_ANYWHERE = 0,
|
||||
E_GADMAN_POLICY_EDGES = 1,
|
||||
E_GADMAN_POLICY_LEFT_EDGE = 2,
|
||||
E_GADMAN_POLICY_RIGHT_EDGE = 3,
|
||||
E_GADMAN_POLICY_TOP_EDGE = 4,
|
||||
E_GADMAN_POLICY_BOTTOM_EDGE = 5,
|
||||
/* extra flags */
|
||||
E_GADMAN_FIXED_ZONE = 1 << 8,
|
||||
E_GADMAN_HSIZE = 1 << 9,
|
||||
E_GADMAN_VSIZE = 1 << 10,
|
||||
E_GADMAN_HMOVE = 1 << 11,
|
||||
E_GADMAN_VMOVE = 1 << 12
|
||||
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
|
||||
} 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_Client E_Gadman_Client;
|
||||
|
||||
|
@ -27,7 +33,6 @@ typedef struct _E_Gadman_Client E_Gadman_Client;
|
|||
struct _E_Gadman
|
||||
{
|
||||
E_Object e_obj_inherit;
|
||||
|
||||
E_Container *container;
|
||||
Evas_List *clients;
|
||||
};
|
||||
|
@ -35,18 +40,34 @@ struct _E_Gadman
|
|||
struct _E_Gadman_Client
|
||||
{
|
||||
E_Object e_obj_inherit;
|
||||
|
||||
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_shutdown(void);
|
||||
EAPI E_Gadman *e_gadman_new(E_Container *con);
|
||||
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_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_default_align_set(E_Gadman_Client *gmc, double xalign, double yalign);
|
||||
|
||||
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_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
|
||||
|
|
Loading…
Reference in New Issue