forked from enlightenment/enlightenment
add zone geometry property to windows and keep it updated.
SVN revision: 75310
This commit is contained in:
parent
f6030fa521
commit
7a5d5b5fa4
|
@ -12,6 +12,7 @@ EAPI Ecore_X_Atom E_ATOM_BORDER_SIZE = 0;
|
|||
EAPI Ecore_X_Atom E_ATOM_WINDOW_STATE = 0;
|
||||
EAPI Ecore_X_Atom E_ATOM_WINDOW_STATE_CENTERED = 0;
|
||||
EAPI Ecore_X_Atom E_ATOM_DESKTOP_FILE = 0;
|
||||
EAPI Ecore_X_Atom E_ATOM_ZONE_GEOMETRY = 0;
|
||||
|
||||
/* externally accessible functions */
|
||||
EINTERN int
|
||||
|
@ -28,9 +29,10 @@ e_atoms_init(void)
|
|||
"__E_WINDOW_BORDER_SIZE",
|
||||
"__E_ATOM_WINDOW_STATE",
|
||||
"__E_ATOM_WINDOW_STATE_CENTERED",
|
||||
"__E_ATOM_DESKTOP_FILE"
|
||||
"__E_ATOM_DESKTOP_FILE",
|
||||
"E_ZONE_GEOMETRY"
|
||||
};
|
||||
Ecore_X_Atom atoms[11];
|
||||
Ecore_X_Atom atoms[12];
|
||||
|
||||
ecore_x_atoms_get(atom_names, 11, atoms);
|
||||
E_ATOM_MANAGED = atoms[0];
|
||||
|
@ -44,6 +46,7 @@ e_atoms_init(void)
|
|||
E_ATOM_WINDOW_STATE = atoms[8];
|
||||
E_ATOM_WINDOW_STATE_CENTERED = atoms[9];
|
||||
E_ATOM_DESKTOP_FILE = atoms[10];
|
||||
E_ATOM_ZONE_GEOMETRY = atoms[11];
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,6 @@ extern EAPI Ecore_X_Atom E_ATOM_SHADE_DIRECTION;
|
|||
extern EAPI Ecore_X_Atom E_ATOM_HIDDEN;
|
||||
extern EAPI Ecore_X_Atom E_ATOM_BORDER_SIZE;
|
||||
extern EAPI Ecore_X_Atom E_ATOM_DESKTOP_FILE;
|
||||
|
||||
/* extra e window states */
|
||||
/* if we add more states, we need to fix
|
||||
* * e_hints_window_e_state_get()
|
||||
|
@ -25,6 +24,8 @@ extern EAPI Ecore_X_Atom E_ATOM_DESKTOP_FILE;
|
|||
extern EAPI Ecore_X_Atom E_ATOM_WINDOW_STATE;
|
||||
extern EAPI Ecore_X_Atom E_ATOM_WINDOW_STATE_CENTERED;
|
||||
|
||||
extern EAPI Ecore_X_Atom E_ATOM_ZONE_GEOMETRY;
|
||||
|
||||
EINTERN int e_atoms_init(void);
|
||||
EINTERN int e_atoms_shutdown(void);
|
||||
|
||||
|
|
|
@ -708,6 +708,15 @@ e_border_new(E_Container *con,
|
|||
ecore_x_window_prop_card32_set(win, E_ATOM_MANAGED, &managed, 1);
|
||||
ecore_x_window_prop_card32_set(win, E_ATOM_CONTAINER, &bd->zone->container->num, 1);
|
||||
ecore_x_window_prop_card32_set(win, E_ATOM_ZONE, &bd->zone->num, 1);
|
||||
{
|
||||
unsigned int zgeom[4];
|
||||
|
||||
zgeom[0] = bd->zone->x;
|
||||
zgeom[1] = bd->zone->y;
|
||||
zgeom[2] = bd->zone->w;
|
||||
zgeom[3] = bd->zone->h;
|
||||
ecore_x_window_prop_card32_set(win, E_ATOM_ZONE_GEOMETRY, zgeom, 4);
|
||||
}
|
||||
e_desk_xy_get(bd->desk, &deskx, &desky);
|
||||
desk[0] = deskx;
|
||||
desk[1] = desky;
|
||||
|
@ -864,6 +873,18 @@ e_border_zone_set(E_Border *bd,
|
|||
ecore_event_add(E_EVENT_BORDER_ZONE_SET, ev, _e_border_event_border_zone_set_free, NULL);
|
||||
|
||||
ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_ZONE, &bd->zone->num, 1);
|
||||
// XXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
// XXX ZZZZZZZZZZZZZZZZZZZzz
|
||||
// need to adjust this if zone pos/size changes
|
||||
{
|
||||
unsigned int zgeom[4];
|
||||
|
||||
zgeom[0] = bd->zone->x;
|
||||
zgeom[1] = bd->zone->y;
|
||||
zgeom[2] = bd->zone->w;
|
||||
zgeom[3] = bd->zone->h;
|
||||
ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_ZONE_GEOMETRY, zgeom, 4);
|
||||
}
|
||||
e_remember_update(bd);
|
||||
}
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@ static void _e_zone_object_del_attach(void *o);
|
|||
static E_Zone_Edge _e_zone_detect_edge(E_Zone *zone,
|
||||
Ecore_X_Window win);
|
||||
static void _e_zone_edge_move_resize(E_Zone *zone);
|
||||
static void _e_zone_border_geometry_update(E_Zone *zone);
|
||||
|
||||
EAPI int E_EVENT_ZONE_DESK_COUNT_SET = 0;
|
||||
EAPI int E_EVENT_POINTER_WARP = 0;
|
||||
|
@ -299,6 +300,7 @@ e_zone_move(E_Zone *zone,
|
|||
ecore_evas_move(zone->black_ecore_evas, zone->x, zone->y);
|
||||
ecore_evas_resize(zone->black_ecore_evas, zone->w, zone->h);
|
||||
}
|
||||
_e_zone_border_geometry_update(zone);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -331,6 +333,7 @@ e_zone_resize(E_Zone *zone,
|
|||
ecore_evas_move(zone->black_ecore_evas, zone->x, zone->y);
|
||||
ecore_evas_resize(zone->black_ecore_evas, zone->w, zone->h);
|
||||
}
|
||||
_e_zone_border_geometry_update(zone);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -374,6 +377,7 @@ e_zone_move_resize(E_Zone *zone,
|
|||
ecore_evas_move(zone->black_ecore_evas, zone->x, zone->y);
|
||||
ecore_evas_resize(zone->black_ecore_evas, zone->w, zone->h);
|
||||
}
|
||||
_e_zone_border_geometry_update(zone);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -1829,3 +1833,25 @@ _e_zone_edge_move_resize(E_Zone *zone)
|
|||
ecore_x_window_move_resize(zone->corner.bottom_left,
|
||||
zone->x + zone->w - cw - 2, zone->y + zone->h - 1, cw, 1);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_zone_border_geometry_update(E_Zone *zone)
|
||||
{
|
||||
Eina_List *borders, *l;
|
||||
E_Border *bd;
|
||||
unsigned int zgeom[4];
|
||||
|
||||
zgeom[0] = zone->x;
|
||||
zgeom[1] = zone->y;
|
||||
zgeom[2] = zone->w;
|
||||
zgeom[3] = zone->h;
|
||||
borders = e_border_client_list();
|
||||
EINA_LIST_FOREACH(borders, l, bd)
|
||||
{
|
||||
if (bd->zone == zone)
|
||||
ecore_x_window_prop_card32_set(bd->client.win,
|
||||
E_ATOM_ZONE_GEOMETRY,
|
||||
zgeom, 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue