forked from enlightenment/enlightenment
comp structs now public, remove comp struct accessor functions, add comp utility functions to simplify getting comp from an e_object
SVN revision: 83745
This commit is contained in:
parent
9fd79a5994
commit
321f2b4fa3
|
@ -1100,7 +1100,7 @@ e_border_hide(E_Border *bd,
|
|||
|
||||
case 1:
|
||||
default:
|
||||
if (!e_comp_evas_get(bd->zone->container->manager->comp))
|
||||
if (!e_comp_evas_exists(bd))
|
||||
{
|
||||
/* Make sure that this border isn't deleted */
|
||||
bd->await_hide_event++;
|
||||
|
@ -3501,7 +3501,7 @@ _e_border_shape_input_rectangle_set(E_Border *bd)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!e_comp_evas_get(bd->zone->container->manager->comp))
|
||||
if (!e_comp_evas_exists(bd))
|
||||
ecore_x_composite_window_events_enable(bd->win);
|
||||
else
|
||||
ecore_x_composite_window_events_disable(bd->win);
|
||||
|
@ -3677,7 +3677,7 @@ _e_border_hide(E_Border *bd)
|
|||
E_Border *tmp;
|
||||
Eina_List *l;
|
||||
|
||||
if (!e_comp_evas_get(bd->zone->container->manager->comp))
|
||||
if (!e_comp_evas_exists(bd))
|
||||
{
|
||||
ecore_x_window_hide(bd->win);
|
||||
ecore_evas_hide(bd->bg_ecore_evas);
|
||||
|
|
220
src/bin/e_comp.c
220
src/bin/e_comp.c
|
@ -24,136 +24,6 @@
|
|||
//
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct _E_Comp
|
||||
{
|
||||
Ecore_X_Window win; // input overlay
|
||||
Ecore_Evas *ee;
|
||||
Evas *evas;
|
||||
Evas_Object *layout;
|
||||
Eina_List *zones;
|
||||
E_Manager *man;
|
||||
Eina_Inlist *wins;
|
||||
Eina_List *wins_list;
|
||||
Eina_List *updates;
|
||||
Ecore_Animator *render_animator;
|
||||
Ecore_Job *update_job;
|
||||
Ecore_Timer *new_up_timer;
|
||||
Evas_Object *fps_bg;
|
||||
Evas_Object *fps_fg;
|
||||
Ecore_Job *screen_job;
|
||||
Ecore_Timer *nocomp_delay_timer;
|
||||
Ecore_Timer *nocomp_override_timer;
|
||||
Ecore_X_Window ee_win;
|
||||
int animating;
|
||||
int render_overflow;
|
||||
double frametimes[122];
|
||||
int frameskip;
|
||||
|
||||
int nocomp_override;
|
||||
|
||||
Ecore_X_Window cm_selection;
|
||||
|
||||
Eina_Bool gl : 1;
|
||||
Eina_Bool grabbed : 1;
|
||||
Eina_Bool nocomp : 1;
|
||||
Eina_Bool nocomp_want : 1;
|
||||
Eina_Bool wins_invalid : 1;
|
||||
Eina_Bool saver : 1;
|
||||
};
|
||||
|
||||
struct _E_Comp_Zone
|
||||
{
|
||||
E_Zone *zone; // never deref - just use for handle cmp's
|
||||
Evas_Object *base;
|
||||
Evas_Object *over;
|
||||
int container_num;
|
||||
int zone_num;
|
||||
int x, y, w, h;
|
||||
double bl;
|
||||
Eina_Bool bloff;
|
||||
};
|
||||
|
||||
struct _E_Comp_Win
|
||||
{
|
||||
EINA_INLIST;
|
||||
|
||||
E_Comp *c; // parent compositor
|
||||
Ecore_X_Window win; // raw window - for menus etc.
|
||||
E_Border *bd; // if its a border - later
|
||||
E_Popup *pop; // if its a popup - later
|
||||
E_Menu *menu; // if it is a menu - later
|
||||
int x, y, w, h; // geometry
|
||||
struct
|
||||
{
|
||||
int x, y, w, h; // hidden geometry (used when its unmapped and re-instated on map)
|
||||
} hidden;
|
||||
int pw, ph; // pixmap w/h
|
||||
int border; // border width
|
||||
Ecore_X_Pixmap pixmap; // the compositing pixmap
|
||||
Ecore_X_Damage damage; // damage region
|
||||
Ecore_X_Visual vis; // window visual
|
||||
Ecore_X_Colormap cmap; // colormap of window
|
||||
int depth; // window depth
|
||||
Evas_Object *obj; // composite object
|
||||
Evas_Object *shobj; // shadow object
|
||||
Eina_List *obj_mirror; // extra mirror objects
|
||||
Ecore_X_Image *xim; // x image - software fallback
|
||||
E_Update *up; // update handler
|
||||
E_Object_Delfn *dfn; // delete function handle for objects being tracked
|
||||
Ecore_X_Sync_Counter counter; // sync counter for syncronised drawing
|
||||
Ecore_Timer *update_timeout; // max time between damage and "done" event
|
||||
Ecore_Timer *ready_timeout; // max time on show (new window draw) to wait for window contents to be ready if sync protocol not handled. this is fallback.
|
||||
int dmg_updates; // num of damage event updates since a redirect
|
||||
Ecore_X_Rectangle *rects; // shape rects... if shaped :(
|
||||
int rects_num; // num rects above
|
||||
|
||||
Ecore_X_Pixmap cache_pixmap; // the cached pixmap (1/nth the dimensions)
|
||||
int cache_w, cache_h; // cached pixmap size
|
||||
int update_count; // how many updates have happened to this win
|
||||
double last_visible_time; // last time window was visible
|
||||
double last_draw_time; // last time window was damaged
|
||||
|
||||
int pending_count; // pending event count
|
||||
|
||||
unsigned int opacity; // opacity set with _NET_WM_WINDOW_OPACITY
|
||||
|
||||
char *title, *name, *clas, *role; // fetched for override-redirect windowa
|
||||
Ecore_X_Window_Type primary_type; // fetched for override-redirect windowa
|
||||
|
||||
unsigned char misses; // number of sync misses
|
||||
|
||||
Eina_Bool delete_pending : 1; // delete pendig
|
||||
Eina_Bool hidden_override : 1; // hidden override
|
||||
Eina_Bool animating : 1; // it's busy animating - defer hides/dels
|
||||
Eina_Bool force : 1; // force del/hide even if animating
|
||||
Eina_Bool defer_hide : 1; // flag to get hide to work on deferred hide
|
||||
Eina_Bool delete_me : 1; // delete me!
|
||||
Eina_Bool visible : 1; // is visible
|
||||
Eina_Bool input_only : 1; // is input_only
|
||||
|
||||
Eina_Bool override : 1; // is override-redirect
|
||||
Eina_Bool argb : 1; // is argb
|
||||
Eina_Bool shaped : 1; // is shaped
|
||||
Eina_Bool update : 1; // has updates to fetch
|
||||
Eina_Bool redirected : 1; // has updates to fetch
|
||||
Eina_Bool shape_changed : 1; // shape changed
|
||||
Eina_Bool native : 1; // native
|
||||
Eina_Bool drawme : 1; // drawme flag fo syncing rendering
|
||||
|
||||
Eina_Bool invalid : 1; // invalid depth used - just use as marker
|
||||
Eina_Bool nocomp : 1; // nocomp applied
|
||||
Eina_Bool nocomp_need_update : 1; // nocomp in effect, but this window updated while in nocomp mode
|
||||
Eina_Bool needpix : 1; // need new pixmap
|
||||
Eina_Bool needxim : 1; // need new xim
|
||||
Eina_Bool real_hid : 1; // last hide was a real window unmap
|
||||
Eina_Bool inhash : 1; // is in the windows hash
|
||||
Eina_Bool show_ready : 1; // is this window ready for its first show
|
||||
|
||||
Eina_Bool show_anim : 1; // ran show animation
|
||||
|
||||
Eina_Bool bg_win : 1; // window is the bg win for a container
|
||||
};
|
||||
|
||||
static Eina_List *handlers = NULL;
|
||||
static Eina_List *compositors = NULL;
|
||||
static Eina_Hash *windows = NULL;
|
||||
|
@ -4443,13 +4313,6 @@ e_comp_shadows_reset(void)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
EAPI Evas *
|
||||
e_comp_evas_get(E_Comp *c)
|
||||
{
|
||||
return c ? c->evas : NULL;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_comp_update(E_Comp *c)
|
||||
{
|
||||
|
@ -4457,19 +4320,19 @@ e_comp_update(E_Comp *c)
|
|||
}
|
||||
|
||||
EAPI E_Comp_Win *
|
||||
e_comp_border_src_get(Ecore_X_Window win)
|
||||
e_comp_win_find_border_win(Ecore_X_Window win)
|
||||
{
|
||||
return _e_comp_border_client_find(win);
|
||||
}
|
||||
|
||||
EAPI E_Comp_Win *
|
||||
e_comp_src_get(Ecore_X_Window win)
|
||||
e_comp_win_find(Ecore_X_Window win)
|
||||
{
|
||||
return _e_comp_win_find(win);
|
||||
}
|
||||
|
||||
EAPI const Eina_List *
|
||||
e_comp_src_list_get(E_Comp *c)
|
||||
e_comp_win_list_get(E_Comp *c)
|
||||
{
|
||||
E_Comp_Win *cw;
|
||||
|
||||
|
@ -4489,35 +4352,14 @@ e_comp_src_list_get(E_Comp *c)
|
|||
}
|
||||
|
||||
EAPI Evas_Object *
|
||||
e_comp_src_image_get(E_Comp_Win *cw)
|
||||
{
|
||||
if ((!cw) || (!cw->c)) return NULL;
|
||||
return cw->obj;
|
||||
}
|
||||
|
||||
EAPI Evas_Object *
|
||||
e_comp_src_shadow_get(E_Comp_Win *cw)
|
||||
{
|
||||
if ((!cw) || (!cw->c)) return NULL;
|
||||
return cw->shobj;
|
||||
}
|
||||
|
||||
EAPI Evas_Object *
|
||||
e_comp_src_image_mirror_add(E_Comp_Win *cw)
|
||||
e_comp_win_image_mirror_add(E_Comp_Win *cw)
|
||||
{
|
||||
if ((!cw) || (!cw->c)) return NULL;
|
||||
return _e_comp_win_mirror_add(cw);
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
e_comp_src_visible_get(E_Comp_Win *cw)
|
||||
{
|
||||
if ((!cw) || (!cw->c)) return EINA_FALSE;
|
||||
return cw->visible;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_comp_src_hidden_set(E_Comp_Win *cw, Eina_Bool hidden)
|
||||
e_comp_win_hidden_set(E_Comp_Win *cw, Eina_Bool hidden)
|
||||
{
|
||||
if (!cw->c) return;
|
||||
if (cw->hidden_override == hidden) return;
|
||||
|
@ -4536,30 +4378,34 @@ e_comp_src_hidden_set(E_Comp_Win *cw, Eina_Bool hidden)
|
|||
}
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
e_comp_src_hidden_get(E_Comp_Win *cw)
|
||||
EAPI E_Comp *
|
||||
e_comp_get(void *o)
|
||||
{
|
||||
if ((!cw) || (!cw->c)) return EINA_FALSE;
|
||||
return cw->hidden_override;
|
||||
}
|
||||
E_Border *bd;
|
||||
E_Object *obj = o;
|
||||
E_Zone *zone = NULL;
|
||||
E_Container *con = NULL;
|
||||
E_Manager *man = NULL;
|
||||
|
||||
EAPI E_Popup *
|
||||
e_comp_src_popup_get(E_Comp_Win *cw)
|
||||
{
|
||||
if ((!cw) || (!cw->c)) return NULL;
|
||||
return cw->pop;
|
||||
}
|
||||
|
||||
EAPI E_Border *
|
||||
e_comp_src_border_get(E_Comp_Win *cw)
|
||||
{
|
||||
if ((!cw) || (!cw->c)) return NULL;
|
||||
return cw->bd;
|
||||
}
|
||||
|
||||
EAPI Ecore_X_Window
|
||||
e_comp_src_window_get(E_Comp_Win *cw)
|
||||
{
|
||||
if ((!cw) || (!cw->c)) return 0;
|
||||
return cw->win;
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
|
||||
switch (obj->type)
|
||||
{
|
||||
case E_BORDER_TYPE:
|
||||
bd = (E_Border*)obj;
|
||||
zone = bd->zone;
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(zone, NULL);
|
||||
case E_ZONE_TYPE:
|
||||
if (!zone) zone = (E_Zone*)obj;
|
||||
con = zone->container;
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(con, NULL);
|
||||
case E_CONTAINER_TYPE:
|
||||
if (!con) con = (E_Container*)obj;
|
||||
man = con->manager;
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(man, NULL);
|
||||
case E_MANAGER_TYPE:
|
||||
if (!man) man = (E_Manager*)obj;
|
||||
return man->comp;
|
||||
}
|
||||
CRI("UNIMPLEMENTED TYPE PASSED! FIXME!");
|
||||
return NULL;
|
||||
}
|
||||
|
|
164
src/bin/e_comp.h
164
src/bin/e_comp.h
|
@ -11,6 +11,137 @@ typedef struct E_Event_Comp E_Event_Comp;
|
|||
# include "e_comp_cfdata.h"
|
||||
# include "e_comp_update.h"
|
||||
|
||||
|
||||
struct _E_Comp
|
||||
{
|
||||
Ecore_X_Window win; // input overlay
|
||||
Ecore_Evas *ee;
|
||||
Evas *evas;
|
||||
Evas_Object *layout;
|
||||
Eina_List *zones;
|
||||
E_Manager *man;
|
||||
Eina_Inlist *wins;
|
||||
Eina_List *wins_list;
|
||||
Eina_List *updates;
|
||||
Ecore_Animator *render_animator;
|
||||
Ecore_Job *update_job;
|
||||
Ecore_Timer *new_up_timer;
|
||||
Evas_Object *fps_bg;
|
||||
Evas_Object *fps_fg;
|
||||
Ecore_Job *screen_job;
|
||||
Ecore_Timer *nocomp_delay_timer;
|
||||
Ecore_Timer *nocomp_override_timer;
|
||||
Ecore_X_Window ee_win;
|
||||
int animating;
|
||||
int render_overflow;
|
||||
double frametimes[122];
|
||||
int frameskip;
|
||||
|
||||
int nocomp_override;
|
||||
|
||||
Ecore_X_Window cm_selection;
|
||||
|
||||
Eina_Bool gl : 1;
|
||||
Eina_Bool grabbed : 1;
|
||||
Eina_Bool nocomp : 1;
|
||||
Eina_Bool nocomp_want : 1;
|
||||
Eina_Bool wins_invalid : 1;
|
||||
Eina_Bool saver : 1;
|
||||
};
|
||||
|
||||
struct _E_Comp_Zone
|
||||
{
|
||||
E_Zone *zone; // never deref - just use for handle cmp's
|
||||
Evas_Object *base;
|
||||
Evas_Object *over;
|
||||
int container_num;
|
||||
int zone_num;
|
||||
int x, y, w, h;
|
||||
double bl;
|
||||
Eina_Bool bloff;
|
||||
};
|
||||
|
||||
struct _E_Comp_Win
|
||||
{
|
||||
EINA_INLIST;
|
||||
|
||||
E_Comp *c; // parent compositor
|
||||
Ecore_X_Window win; // raw window - for menus etc.
|
||||
E_Border *bd; // if its a border - later
|
||||
E_Popup *pop; // if its a popup - later
|
||||
E_Menu *menu; // if it is a menu - later
|
||||
int x, y, w, h; // geometry
|
||||
struct
|
||||
{
|
||||
int x, y, w, h; // hidden geometry (used when its unmapped and re-instated on map)
|
||||
} hidden;
|
||||
int pw, ph; // pixmap w/h
|
||||
int border; // border width
|
||||
Ecore_X_Pixmap pixmap; // the compositing pixmap
|
||||
Ecore_X_Damage damage; // damage region
|
||||
Ecore_X_Visual vis; // window visual
|
||||
Ecore_X_Colormap cmap; // colormap of window
|
||||
int depth; // window depth
|
||||
Evas_Object *obj; // composite object
|
||||
Evas_Object *shobj; // shadow object
|
||||
Eina_List *obj_mirror; // extra mirror objects
|
||||
Ecore_X_Image *xim; // x image - software fallback
|
||||
E_Update *up; // update handler
|
||||
E_Object_Delfn *dfn; // delete function handle for objects being tracked
|
||||
Ecore_X_Sync_Counter counter; // sync counter for syncronised drawing
|
||||
Ecore_Timer *update_timeout; // max time between damage and "done" event
|
||||
Ecore_Timer *ready_timeout; // max time on show (new window draw) to wait for window contents to be ready if sync protocol not handled. this is fallback.
|
||||
int dmg_updates; // num of damage event updates since a redirect
|
||||
Ecore_X_Rectangle *rects; // shape rects... if shaped :(
|
||||
int rects_num; // num rects above
|
||||
|
||||
Ecore_X_Pixmap cache_pixmap; // the cached pixmap (1/nth the dimensions)
|
||||
int cache_w, cache_h; // cached pixmap size
|
||||
int update_count; // how many updates have happened to this win
|
||||
double last_visible_time; // last time window was visible
|
||||
double last_draw_time; // last time window was damaged
|
||||
|
||||
int pending_count; // pending event count
|
||||
|
||||
unsigned int opacity; // opacity set with _NET_WM_WINDOW_OPACITY
|
||||
|
||||
char *title, *name, *clas, *role; // fetched for override-redirect windowa
|
||||
Ecore_X_Window_Type primary_type; // fetched for override-redirect windowa
|
||||
|
||||
unsigned char misses; // number of sync misses
|
||||
|
||||
Eina_Bool delete_pending : 1; // delete pendig
|
||||
Eina_Bool hidden_override : 1; // hidden override
|
||||
Eina_Bool animating : 1; // it's busy animating - defer hides/dels
|
||||
Eina_Bool force : 1; // force del/hide even if animating
|
||||
Eina_Bool defer_hide : 1; // flag to get hide to work on deferred hide
|
||||
Eina_Bool delete_me : 1; // delete me!
|
||||
Eina_Bool visible : 1; // is visible
|
||||
Eina_Bool input_only : 1; // is input_only
|
||||
|
||||
Eina_Bool override : 1; // is override-redirect
|
||||
Eina_Bool argb : 1; // is argb
|
||||
Eina_Bool shaped : 1; // is shaped
|
||||
Eina_Bool update : 1; // has updates to fetch
|
||||
Eina_Bool redirected : 1; // has updates to fetch
|
||||
Eina_Bool shape_changed : 1; // shape changed
|
||||
Eina_Bool native : 1; // native
|
||||
Eina_Bool drawme : 1; // drawme flag fo syncing rendering
|
||||
|
||||
Eina_Bool invalid : 1; // invalid depth used - just use as marker
|
||||
Eina_Bool nocomp : 1; // nocomp applied
|
||||
Eina_Bool nocomp_need_update : 1; // nocomp in effect, but this window updated while in nocomp mode
|
||||
Eina_Bool needpix : 1; // need new pixmap
|
||||
Eina_Bool needxim : 1; // need new xim
|
||||
Eina_Bool real_hid : 1; // last hide was a real window unmap
|
||||
Eina_Bool inhash : 1; // is in the windows hash
|
||||
Eina_Bool show_ready : 1; // is this window ready for its first show
|
||||
|
||||
Eina_Bool show_anim : 1; // ran show animation
|
||||
|
||||
Eina_Bool bg_win : 1; // window is the bg win for a container
|
||||
};
|
||||
|
||||
struct E_Event_Comp
|
||||
{
|
||||
E_Comp_Win *cw;
|
||||
|
@ -36,20 +167,27 @@ EAPI int e_comp_internal_save(void);
|
|||
EAPI E_Comp_Config *e_comp_config_get(void);
|
||||
EAPI void e_comp_shadows_reset(void);
|
||||
|
||||
EAPI Evas *e_comp_evas_get(E_Comp *c);
|
||||
EAPI void e_comp_update(E_Comp *c);
|
||||
EAPI E_Comp_Win *e_comp_border_src_get(Ecore_X_Window win);
|
||||
EAPI E_Comp_Win *e_comp_src_get(Ecore_X_Window win);
|
||||
EAPI const Eina_List *e_comp_src_list_get(E_Comp *c);
|
||||
EAPI Evas_Object *e_comp_src_image_get(E_Comp_Win *cw);
|
||||
EAPI Evas_Object *e_comp_src_shadow_get(E_Comp_Win *cw);
|
||||
EAPI Evas_Object *e_comp_src_image_mirror_add(E_Comp_Win *cw);
|
||||
EAPI Eina_Bool e_comp_src_visible_get(E_Comp_Win *cw);
|
||||
EAPI void e_comp_src_hidden_set(E_Comp_Win *cw, Eina_Bool hidden);
|
||||
EAPI Eina_Bool e_comp_src_hidden_get(E_Comp_Win *cw);
|
||||
EAPI E_Popup *e_comp_src_popup_get(E_Comp_Win *cw);
|
||||
EAPI E_Border *e_comp_src_border_get(E_Comp_Win *cw);
|
||||
EAPI Ecore_X_Window e_comp_src_window_get(E_Comp_Win *cw);
|
||||
|
||||
EAPI E_Comp_Win *e_comp_win_find_border_win(Ecore_X_Window win);
|
||||
EAPI E_Comp_Win *e_comp_win_find(Ecore_X_Window win);
|
||||
EAPI const Eina_List *e_comp_win_list_get(E_Comp *c);
|
||||
EAPI Evas_Object *e_comp_win_image_mirror_add(E_Comp_Win *cw);
|
||||
EAPI void e_comp_win_hidden_set(E_Comp_Win *cw, Eina_Bool hidden);
|
||||
|
||||
|
||||
EAPI E_Comp *e_comp_get(void *o);
|
||||
|
||||
|
||||
static inline Eina_Bool
|
||||
e_comp_evas_exists(void *o)
|
||||
{
|
||||
E_Comp *c;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(o, EINA_FALSE);
|
||||
c = e_comp_get(o);
|
||||
return c ? !!c->evas : EINA_FALSE;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue