3 #ifndef E_MOD_COMP_UTIL_H
4 #define E_MOD_COMP_UTIL_H
6 /* check whether region of given window is equal to root */
7 #ifdef _F_USE_BORDER_TRANSFORM_
9 #define TRANSFORM_EQUAL(bd, x_, y_, w_, h_) \
10 (((bd) && ((bd)->transform.enable)) && \
11 (((bd)->transform.border_geometry.x == (x_)) && \
12 ((bd)->transform.border_geometry.y == (y_)) && \
13 ((bd)->transform.border_geometry.w == (w_)) && \
14 ((bd)->transform.border_geometry.h == (h_))))
16 #define CW_EQUAL(cw_, x_, y_, w_, h_) \
17 ((!((cw_)->bd) || (((cw_)->bd) && (!(((cw_)->bd)->transform.enable)))) && \
18 (((cw_)->x == (x_)) && \
19 ((cw_)->y == (y_)) && \
20 ((cw_)->w == (w_)) && \
23 #define TRANSFORM_EQUAL_SIZE(bd, w_, h_) \
24 (((bd) && ((bd)->transform.enable)) && \
25 (((bd)->transform.border_geometry.w == (w_)) && \
26 ((bd)->transform.border_geometry.h == (h_))))
28 #define CW_EQUAL_SIZE(cw_, w_, h_) \
29 (((!((cw_)->bd) || (((cw_)->bd) && (!(((cw_)->bd)->transform.enable))))) && \
30 (((cw_)->w == (w_)) && \
33 #define TRANSFORM_BIGGER(bd, x_, y_, w_, h_) \
34 (((bd) && ((bd)->transform.enable)) && \
35 (((bd)->transform.border_geometry.x <= (x_)) && \
36 ((bd)->transform.border_geometry.y <= (y_)) && \
37 ((bd)->transform.border_geometry.x + (bd)->transform.border_geometry.w >= (x_) + (w_)) && \
38 ((bd)->transform.border_geometry.y + (bd)->transform.border_geometry.h >= (y_) + (h_))))
40 #define CW_BIGGER(cw_, x_, y_, w_, h_) \
41 (((!((cw_)->bd) || (((cw_)->bd) && (!(((cw_)->bd)->transform.enable))))) && \
42 (((cw_)->x <= (x_)) && \
43 ((cw_)->y <= (y_)) && \
44 ((cw_)->x + (cw_)->w >= (x_) + (w_)) && \
45 ((cw_)->y + (cw_)->h >= (y_) + (h_))))
47 #define TRANSFORM_INTERSECTS(bd, x_, y_, w_, h_) \
48 (((bd) && ((bd)->transform.enable)) && \
49 ((((bd)->transform.border_geometry.x) < ((x_) + (w_))) && \
50 ((bd)->transform.border_geometry.y) < ((y_) + (h_)) && \
51 (((bd)->transform.border_geometry.x + (bd)->transform.border_geometry.w) > (x_)) && \
52 (((bd)->transform.border_geometry.y + (bd)->transform.border_geometry.h) > (y_))))
54 #define CW_INTERSECTS(cw_, x_, y_, w_, h_) \
55 (((!((cw_)->bd) || (((cw_)->bd) && (!(((cw_)->bd)->transform.enable))))) && \
56 (((cw_->x) < ((x_) + (w_))) && \
57 ((cw_->y) < ((y_) + (h_))) && \
58 (((cw_->x) + (cw_->w)) > (x_)) && \
59 (((cw_->y) + (cw_->h)) > (y_))))
62 #define TRANSFORM_EQUAL(bd, x_, y_, w_, h_) (0)
63 #define TRANSFORM_EQUAL_SIZE(bd, w_, h_) (0)
64 #define TRANSFORM_BIGGER(bd, x_, y_, w_, h_) (0)
65 #define TRANSFORM_INTERSECTS(bd, x_, y_, w_, h_) (0)
67 #define CW_EQUAL(cw_, x_, y_, w_, h_) \
68 (((cw_)->x == (x_)) && \
69 ((cw_)->y == (y_)) && \
70 ((cw_)->w == (w_)) && \
73 #define CW_EQUAL_SIZE(cw_, w_, h_) \
74 (((cw_)->w == (w_)) && \
77 #define CW_BIGGER(cw_, x_, y_, w_, h_) \
78 (((cw_)->x <= (x_)) && \
79 ((cw_)->y <= (y_)) && \
80 ((cw_)->x + (cw_)->w >= (x_) + (w_)) && \
81 ((cw_)->y + (cw_)->h >= (y_) + (h_)))
83 #define CW_INTERSECTS(cw, x_, y_, w_, h_) \
84 (((cw->x) < ((x_) + (w_))) && \
85 ((cw->y) < ((y_) + (h_))) && \
86 (((cw->x) + (cw->w)) > (x_)) && \
87 (((cw->y) + (cw->h)) > (y_)))
89 #endif /* end of _F_USE_BORDER_TRANSFORM_ */
91 #define REGION_EQUAL_TO_ROOT(a) \
92 (CW_EQUAL((a), 0, 0, ((a)->c->man->w), ((a)->c->man->h)) || \
93 TRANSFORM_EQUAL(((a)->bd), 0, 0, ((a)->c->man->w), ((a)->c->man->h)))
95 #define SIZE_EQUAL_TO_ROOT(a) \
96 (CW_EQUAL_SIZE((a), ((a)->c->man->w), ((a)->c->man->h)) || \
97 TRANSFORM_EQUAL_SIZE(((a)->bd), ((a)->c->man->w), ((a)->c->man->h)))
99 #define REGION_EQUAL_TO_ZONE(a, z) \
100 (CW_EQUAL((a), ((z)->x), ((z)->y), ((z)->w), ((z)->h)) || \
101 TRANSFORM_EQUAL(((a)->bd), ((z)->x), ((z)->y), ((z)->w), ((z)->h)))
103 #define REGION_BIGGER_THAN_ZONE(a, z) \
104 (CW_BIGGER((a), ((z)->x), ((z)->y), ((z)->w), ((z)->h)) || \
105 TRANSFORM_BIGGER(((a)->bd), ((z)->x), ((z)->y), ((z)->w), ((z)->h)))
107 # define E_INTERSECTS_EFFECT(cw, xx, yy, ww, hh) \
108 (CW_INTERSECTS((cw), (xx), (yy), (ww), (hh)) || \
109 TRANSFORM_INTERSECTS(((cw)->bd), (xx), (yy), (ww), (hh)))
111 #define REGION_EQUAL_TO_CANVAS(a, c) \
112 ((((a)->x) == ((c)->x)) && \
113 (((a)->y) == ((c)->y)) && \
114 (((a)->w) == ((c)->w)) && \
115 (((a)->h) == ((c)->h)))
117 #define STATE_INSET_CHECK(a) \
119 ((a->bd->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_FLOATING) || \
120 (a->bd->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_ASSISTANT_MENU)))
122 #define CLASS_ICONIC_CHECK(a) \
124 (a->bd->client.icccm.class) && \
125 (!strcmp(a->bd->client.icccm.class, "ICON_WIN")))
127 #define PARENT_FLOAT_CHECK(a) \
130 ((a->bd->parent->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_FLOATING) ||\
131 (a->bd->parent->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_ASSISTANT_MENU)))
133 EAPI void e_mod_comp_util_set(E_Comp *c, E_Manager *man);
134 EAPI E_Comp *e_mod_comp_util_get(void);
135 EAPI Eina_Bool e_mod_comp_util_grab_key_set(Eina_Bool grab);
136 EAPI Eina_Bool e_mod_comp_util_grab_home_key_set(Eina_Bool grab);
137 EAPI Eina_Bool e_mod_comp_util_screen_input_region_set(Eina_Bool set);
138 EAPI E_Comp_Win *e_mod_comp_util_win_nocomp_get(E_Comp *c, E_Zone *zone);
139 #if USE_NOCOMP_DISPOSE
140 EAPI E_Comp_Win *e_mod_comp_util_win_nocomp_end_get(E_Comp *c, E_Zone *zone);
142 EAPI E_Comp_Win *e_mod_comp_util_win_normal_get(E_Comp_Win *cw, Eina_Bool opaque);
143 EAPI E_Comp_Win *e_mod_comp_util_win_home_get(E_Comp_Win *cw);
144 EAPI E_Comp_Win *e_mod_comp_util_win_below_get(E_Comp_Win *cw, Eina_Bool normal_check, Eina_Bool visible_check);
145 EAPI Eina_Bool e_mod_comp_util_win_below_check(E_Comp_Win *cw, E_Comp_Win *cw2);
146 EAPI Eina_Bool e_mod_comp_util_win_visible_get(E_Comp_Win *cw, Eina_Bool alpha_check);
147 EAPI Eina_Bool e_mod_comp_util_win_visible_below_get(E_Comp_Win *cw, E_Comp_Win *cw2);
148 EAPI Ecore_X_Window e_mod_comp_util_client_xid_get(E_Comp_Win *cw);
149 EAPI void e_mod_comp_util_fb_visible_set(Eina_Bool set);
150 EAPI void e_mod_comp_util_rr_prop_set(Ecore_X_Atom atom, const char* state);
151 EAPI Ecore_X_Pixmap e_mod_comp_util_copied_pixmap_get(E_Comp_Win *cw);