remove most E_Comp usage from e_comp

This commit is contained in:
Mike Blumenkrantz 2015-03-18 17:14:54 -04:00
parent 089ef5aa14
commit 138e84370d
4 changed files with 150 additions and 163 deletions

View File

@ -167,7 +167,7 @@ _e_comp_visible_object_is_above(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Ev
} }
static E_Client * static E_Client *
_e_comp_fullscreen_check(E_Comp *c) _e_comp_fullscreen_check(void)
{ {
E_Client *ec; E_Client *ec;
@ -185,7 +185,7 @@ _e_comp_fullscreen_check(E_Comp *c)
while (o) while (o)
{ {
if (_e_comp_visible_object_is_above if (_e_comp_visible_object_is_above
(o, 0, 0, c->man->w, c->man->h)) return NULL; (o, 0, 0, e_comp->man->w, e_comp->man->h)) return NULL;
o = evas_object_smart_parent_get(o); o = evas_object_smart_parent_get(o);
} }
return ec; return ec;
@ -194,63 +194,63 @@ _e_comp_fullscreen_check(E_Comp *c)
} }
static void static void
_e_comp_fps_update(E_Comp *c) _e_comp_fps_update(void)
{ {
if (conf->fps_show) if (conf->fps_show)
{ {
if (c->fps_bg) return; if (e_comp->fps_bg) return;
c->fps_bg = evas_object_rectangle_add(c->evas); e_comp->fps_bg = evas_object_rectangle_add(e_comp->evas);
evas_object_color_set(c->fps_bg, 0, 0, 0, 128); evas_object_color_set(e_comp->fps_bg, 0, 0, 0, 128);
evas_object_layer_set(c->fps_bg, E_LAYER_MAX); evas_object_layer_set(e_comp->fps_bg, E_LAYER_MAX);
evas_object_name_set(c->fps_bg, "c->fps_bg"); evas_object_name_set(e_comp->fps_bg, "e_comp->fps_bg");
evas_object_lower(c->fps_bg); evas_object_lower(e_comp->fps_bg);
evas_object_show(c->fps_bg); evas_object_show(e_comp->fps_bg);
c->fps_fg = evas_object_text_add(c->evas); e_comp->fps_fg = evas_object_text_add(e_comp->evas);
evas_object_text_font_set(c->fps_fg, "Sans", 10); evas_object_text_font_set(e_comp->fps_fg, "Sans", 10);
evas_object_text_text_set(c->fps_fg, "???"); evas_object_text_text_set(e_comp->fps_fg, "???");
evas_object_color_set(c->fps_fg, 255, 255, 255, 255); evas_object_color_set(e_comp->fps_fg, 255, 255, 255, 255);
evas_object_layer_set(c->fps_fg, E_LAYER_MAX); evas_object_layer_set(e_comp->fps_fg, E_LAYER_MAX);
evas_object_name_set(c->fps_bg, "c->fps_fg"); evas_object_name_set(e_comp->fps_bg, "e_comp->fps_fg");
evas_object_stack_above(c->fps_fg, c->fps_bg); evas_object_stack_above(e_comp->fps_fg, e_comp->fps_bg);
evas_object_show(c->fps_fg); evas_object_show(e_comp->fps_fg);
} }
else else
{ {
E_FREE_FUNC(c->fps_fg, evas_object_del); E_FREE_FUNC(e_comp->fps_fg, evas_object_del);
E_FREE_FUNC(c->fps_bg, evas_object_del); E_FREE_FUNC(e_comp->fps_bg, evas_object_del);
} }
} }
static void static void
_e_comp_cb_nocomp_begin(E_Comp *c) _e_comp_cb_nocomp_begin(void)
{ {
E_Client *ec, *ecf; E_Client *ec, *ecf;
if (c->nocomp) return; if (e_comp->nocomp) return;
E_FREE_FUNC(c->nocomp_delay_timer, ecore_timer_del); E_FREE_FUNC(e_comp->nocomp_delay_timer, ecore_timer_del);
ecf = _e_comp_fullscreen_check(c); ecf = _e_comp_fullscreen_check();
if (!ecf) return; if (!ecf) return;
c->nocomp_ec = ecf; e_comp->nocomp_ec = ecf;
E_CLIENT_FOREACH(ec) E_CLIENT_FOREACH(ec)
if (ec != ecf) e_client_redirected_set(ec, 0); if (ec != ecf) e_client_redirected_set(ec, 0);
INF("NOCOMP %p: frame %p", ecf, ecf->frame); INF("NOCOMP %p: frame %p", ecf, ecf->frame);
c->nocomp = 1; e_comp->nocomp = 1;
evas_object_raise(ecf->frame); evas_object_raise(ecf->frame);
e_client_redirected_set(ecf, 0); e_client_redirected_set(ecf, 0);
//ecore_evas_manual_render_set(c->ee, EINA_TRUE); //ecore_evas_manual_render_set(e_comp->ee, EINA_TRUE);
ecore_evas_hide(c->ee); ecore_evas_hide(e_comp->ee);
edje_file_cache_flush(); edje_file_cache_flush();
edje_collection_cache_flush(); edje_collection_cache_flush();
evas_image_cache_flush(c->evas); evas_image_cache_flush(e_comp->evas);
evas_font_cache_flush(c->evas); evas_font_cache_flush(e_comp->evas);
evas_render_dump(c->evas); evas_render_dump(e_comp->evas);
DBG("JOB2..."); DBG("JOB2...");
e_comp_render_queue(); e_comp_render_queue();
@ -259,15 +259,15 @@ _e_comp_cb_nocomp_begin(E_Comp *c)
} }
static void static void
_e_comp_cb_nocomp_end(E_Comp *c) _e_comp_cb_nocomp_end(void)
{ {
E_Client *ec; E_Client *ec;
if (!c->nocomp) return; if (!e_comp->nocomp) return;
INF("COMP RESUME!"); INF("COMP RESUME!");
//ecore_evas_manual_render_set(c->ee, EINA_FALSE); //ecore_evas_manual_render_set(e_comp->ee, EINA_FALSE);
ecore_evas_show(c->ee); ecore_evas_show(e_comp->ee);
E_CLIENT_FOREACH(ec) E_CLIENT_FOREACH(ec)
{ {
e_client_redirected_set(ec, 1); e_client_redirected_set(ec, 1);
@ -275,7 +275,7 @@ _e_comp_cb_nocomp_end(E_Comp *c)
e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h);
} }
#ifndef HAVE_WAYLAND_ONLY #ifndef HAVE_WAYLAND_ONLY
e_comp_x_nocomp_end(c); e_comp_x_nocomp_end();
#endif #endif
e_comp_render_queue(); e_comp_render_queue();
e_comp_shape_queue_block(0); e_comp_shape_queue_block(0);
@ -283,15 +283,13 @@ _e_comp_cb_nocomp_end(E_Comp *c)
} }
static Eina_Bool static Eina_Bool
_e_comp_cb_nocomp_begin_timeout(void *data) _e_comp_cb_nocomp_begin_timeout(void *data EINA_UNUSED)
{ {
E_Comp *c = data; e_comp->nocomp_delay_timer = NULL;
if (e_comp->nocomp_override == 0)
c->nocomp_delay_timer = NULL;
if (c->nocomp_override == 0)
{ {
if (_e_comp_fullscreen_check(c)) c->nocomp_want = 1; if (_e_comp_fullscreen_check()) e_comp->nocomp_want = 1;
_e_comp_cb_nocomp_begin(c); _e_comp_cb_nocomp_begin();
} }
return EINA_FALSE; return EINA_FALSE;
} }
@ -340,46 +338,46 @@ _e_comp_client_update(E_Client *ec)
} }
static void static void
_e_comp_nocomp_end(E_Comp *c) _e_comp_nocomp_end(void)
{ {
c->nocomp_want = 0; e_comp->nocomp_want = 0;
E_FREE_FUNC(c->nocomp_delay_timer, ecore_timer_del); E_FREE_FUNC(e_comp->nocomp_delay_timer, ecore_timer_del);
_e_comp_cb_nocomp_end(c); _e_comp_cb_nocomp_end();
c->nocomp_ec = NULL; e_comp->nocomp_ec = NULL;
} }
static Eina_Bool static Eina_Bool
_e_comp_cb_update(E_Comp *c) _e_comp_cb_update(void)
{ {
E_Client *ec; E_Client *ec;
Eina_List *l; Eina_List *l;
// static int doframeinfo = -1; // static int doframeinfo = -1;
if (!c) return EINA_FALSE; if (!e_comp) return EINA_FALSE;
if (c->update_job) if (e_comp->update_job)
c->update_job = NULL; e_comp->update_job = NULL;
else else
ecore_animator_freeze(c->render_animator); ecore_animator_freeze(e_comp->render_animator);
DBG("UPDATE ALL"); DBG("UPDATE ALL");
if (c->nocomp) goto nocomp; if (e_comp->nocomp) goto nocomp;
if (conf->grab && (!c->grabbed)) if (conf->grab && (!e_comp->grabbed))
{ {
if (c->grab_cb) c->grab_cb(c); if (e_comp->grab_cb) e_comp->grab_cb();
c->grabbed = 1; e_comp->grabbed = 1;
} }
l = c->updates; l = e_comp->updates;
c->updates = NULL; e_comp->updates = NULL;
EINA_LIST_FREE(l, ec) EINA_LIST_FREE(l, ec)
{ {
/* clear update flag */ /* clear update flag */
e_comp_object_render_update_del(ec->frame); e_comp_object_render_update_del(ec->frame);
if (_e_comp_client_update(ec)) if (_e_comp_client_update(ec))
{ {
c->post_updates = eina_list_append(c->post_updates, ec); e_comp->post_updates = eina_list_append(e_comp->post_updates, ec);
e_object_ref(E_OBJECT(ec)); e_object_ref(E_OBJECT(ec));
} }
} }
_e_comp_fps_update(c); _e_comp_fps_update();
if (conf->fps_show) if (conf->fps_show)
{ {
char buf[128]; char buf[128];
@ -393,21 +391,21 @@ _e_comp_cb_update(E_Comp *c)
conf->fps_average_range = 30; conf->fps_average_range = 30;
else if (conf->fps_average_range > 120) else if (conf->fps_average_range > 120)
conf->fps_average_range = 120; conf->fps_average_range = 120;
dt = t - c->frametimes[conf->fps_average_range - 1]; dt = t - e_comp->frametimes[conf->fps_average_range - 1];
if (dt > 0.0) fps = (double)conf->fps_average_range / dt; if (dt > 0.0) fps = (double)conf->fps_average_range / dt;
else fps = 0.0; else fps = 0.0;
if (fps > 0.0) snprintf(buf, sizeof(buf), "FPS: %1.1f", fps); if (fps > 0.0) snprintf(buf, sizeof(buf), "FPS: %1.1f", fps);
else snprintf(buf, sizeof(buf), "N/A"); else snprintf(buf, sizeof(buf), "N/A");
for (i = 121; i >= 1; i--) for (i = 121; i >= 1; i--)
c->frametimes[i] = c->frametimes[i - 1]; e_comp->frametimes[i] = e_comp->frametimes[i - 1];
c->frametimes[0] = t; e_comp->frametimes[0] = t;
c->frameskip++; e_comp->frameskip++;
if (c->frameskip >= conf->fps_average_range) if (e_comp->frameskip >= conf->fps_average_range)
{ {
c->frameskip = 0; e_comp->frameskip = 0;
evas_object_text_text_set(c->fps_fg, buf); evas_object_text_text_set(e_comp->fps_fg, buf);
} }
evas_object_geometry_get(c->fps_fg, NULL, NULL, &w, &h); evas_object_geometry_get(e_comp->fps_fg, NULL, NULL, &w, &h);
w += 8; w += 8;
h += 8; h += 8;
z = e_zone_current_get(); z = e_zone_current_get();
@ -435,23 +433,23 @@ _e_comp_cb_update(E_Comp *c)
break; break;
} }
} }
evas_object_move(c->fps_bg, x, y); evas_object_move(e_comp->fps_bg, x, y);
evas_object_resize(c->fps_bg, w, h); evas_object_resize(e_comp->fps_bg, w, h);
evas_object_move(c->fps_fg, x + 4, y + 4); evas_object_move(e_comp->fps_fg, x + 4, y + 4);
} }
if (conf->lock_fps) if (conf->lock_fps)
{ {
DBG("MANUAL RENDER..."); DBG("MANUAL RENDER...");
// if (!c->nocomp) ecore_evas_manual_render(c->ee); // if (!e_comp->nocomp) ecore_evas_manual_render(e_comp->ee);
} }
if (conf->grab && c->grabbed) if (conf->grab && e_comp->grabbed)
{ {
if (c->grab_cb) c->grab_cb(c); if (e_comp->grab_cb) e_comp->grab_cb();
c->grabbed = 0; e_comp->grabbed = 0;
} }
if (c->updates && (!c->update_job)) if (e_comp->updates && (!e_comp->update_job))
ecore_animator_thaw(c->render_animator); ecore_animator_thaw(e_comp->render_animator);
/* /*
if (doframeinfo == -1) if (doframeinfo == -1)
{ {
@ -477,56 +475,56 @@ _e_comp_cb_update(E_Comp *c)
} }
*/ */
nocomp: nocomp:
ec = _e_comp_fullscreen_check(c); ec = _e_comp_fullscreen_check();
if (ec) if (ec)
{ {
if (conf->nocomp_fs) if (conf->nocomp_fs)
{ {
if (c->nocomp && c->nocomp_ec) if (e_comp->nocomp && e_comp->nocomp_ec)
{ {
E_Client *nec = NULL; E_Client *nec = NULL;
for (ec = e_client_top_get(), nec = e_client_below_get(ec); for (ec = e_client_top_get(), nec = e_client_below_get(ec);
(ec && nec) && (ec != nec); ec = nec, nec = e_client_below_get(ec)) (ec && nec) && (ec != nec); ec = nec, nec = e_client_below_get(ec))
{ {
if (ec == c->nocomp_ec) break; if (ec == e_comp->nocomp_ec) break;
if (evas_object_layer_get(ec->frame) < evas_object_layer_get(c->nocomp_ec->frame)) break; if (evas_object_layer_get(ec->frame) < evas_object_layer_get(e_comp->nocomp_ec->frame)) break;
if (e_client_is_stacking(ec)) continue; if (e_client_is_stacking(ec)) continue;
if (!ec->visible) continue; if (!ec->visible) continue;
if (evas_object_data_get(ec->frame, "comp_skip")) continue; if (evas_object_data_get(ec->frame, "comp_skip")) continue;
if (e_object_is_del(E_OBJECT(ec)) || (!e_client_util_desk_visible(ec, e_desk_current_get(ec->zone)))) continue; if (e_object_is_del(E_OBJECT(ec)) || (!e_client_util_desk_visible(ec, e_desk_current_get(ec->zone)))) continue;
if (ec->override || (e_config->allow_above_fullscreen && (!e_config->mode.presentation))) if (ec->override || (e_config->allow_above_fullscreen && (!e_config->mode.presentation)))
{ {
_e_comp_nocomp_end(c); _e_comp_nocomp_end();
break; break;
} }
else else
evas_object_stack_below(ec->frame, c->nocomp_ec->frame); evas_object_stack_below(ec->frame, e_comp->nocomp_ec->frame);
} }
} }
else if ((!c->nocomp) && (!c->nocomp_override > 0)) else if ((!e_comp->nocomp) && (!e_comp->nocomp_override > 0))
{ {
if (!c->nocomp_delay_timer) if (!e_comp->nocomp_delay_timer)
c->nocomp_delay_timer = ecore_timer_add(1.0, _e_comp_cb_nocomp_begin_timeout, c); e_comp->nocomp_delay_timer = ecore_timer_add(1.0, _e_comp_cb_nocomp_begin_timeout, NULL);
} }
} }
} }
else else
_e_comp_nocomp_end(c); _e_comp_nocomp_end();
return ECORE_CALLBACK_RENEW; return ECORE_CALLBACK_RENEW;
} }
static void static void
_e_comp_cb_job(void *data) _e_comp_cb_job(void *data EINA_UNUSED)
{ {
DBG("UPDATE ALL JOB..."); DBG("UPDATE ALL JOB...");
_e_comp_cb_update(data); _e_comp_cb_update();
} }
static Eina_Bool static Eina_Bool
_e_comp_cb_animator(void *data) _e_comp_cb_animator(void *data EINA_UNUSED)
{ {
return _e_comp_cb_update(data); return _e_comp_cb_update();
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -534,12 +532,12 @@ _e_comp_cb_animator(void *data)
#ifdef SHAPE_DEBUG #ifdef SHAPE_DEBUG
static void static void
_e_comp_shape_debug_rect(E_Comp *c, Eina_Rectangle *rect, E_Color *color) _e_comp_shape_debug_rect(Eina_Rectangle *rect, E_Color *color)
{ {
Evas_Object *o; Evas_Object *o;
#define COLOR_INCREMENT 30 #define COLOR_INCREMENT 30
o = evas_object_rectangle_add(c->evas); o = evas_object_rectangle_add(e_comp->evas);
if (color->r < 256 - COLOR_INCREMENT) if (color->r < 256 - COLOR_INCREMENT)
evas_object_color_set(o, (color->r += COLOR_INCREMENT), 0, 0, 255); evas_object_color_set(o, (color->r += COLOR_INCREMENT), 0, 0, 255);
else if (color->g < 256 - COLOR_INCREMENT) else if (color->g < 256 - COLOR_INCREMENT)
@ -550,19 +548,19 @@ _e_comp_shape_debug_rect(E_Comp *c, Eina_Rectangle *rect, E_Color *color)
evas_object_layer_set(o, E_LAYER_MENU - 1); evas_object_layer_set(o, E_LAYER_MENU - 1);
evas_object_move(o, rect->x, rect->y); evas_object_move(o, rect->x, rect->y);
evas_object_resize(o, rect->w, rect->h); evas_object_resize(o, rect->w, rect->h);
c->debug_rects = eina_list_append(c->debug_rects, o); e_comp->debug_rects = eina_list_append(e_comp->debug_rects, o);
evas_object_show(o); evas_object_show(o);
} }
#endif #endif
static Eina_Bool static Eina_Bool
_e_comp_shapes_update_object_checker_function_thingy(E_Comp *c, Evas_Object *o) _e_comp_shapes_update_object_checker_function_thingy(Evas_Object *o)
{ {
Eina_List *l; Eina_List *l;
E_Zone *zone; E_Zone *zone;
if (o == c->bg_blank_object) return EINA_TRUE; if (o == e_comp->bg_blank_object) return EINA_TRUE;
EINA_LIST_FOREACH(c->zones, l, zone) EINA_LIST_FOREACH(e_comp->zones, l, zone)
{ {
if ((o == zone->over) || (o == zone->base)) return EINA_TRUE; if ((o == zone->over) || (o == zone->base)) return EINA_TRUE;
if ((o == zone->bg_object) || (o == zone->bg_event_object) || if ((o == zone->bg_object) || (o == zone->bg_event_object) ||
@ -675,14 +673,14 @@ _e_comp_shapes_update_comp_client_shape_comp_helper(E_Client *ec, Eina_Tiler *tb
} }
static void static void
_e_comp_shapes_update_object_shape_comp_helper(E_Comp *c, Evas_Object *o, Eina_Tiler *tb) _e_comp_shapes_update_object_shape_comp_helper(Evas_Object *o, Eina_Tiler *tb)
{ {
int x, y, w, h; int x, y, w, h;
/* ignore hidden and pass-event objects */ /* ignore hidden and pass-event objects */
if ((!evas_object_visible_get(o)) || evas_object_pass_events_get(o) || evas_object_repeat_events_get(o)) return; if ((!evas_object_visible_get(o)) || evas_object_pass_events_get(o) || evas_object_repeat_events_get(o)) return;
/* ignore canvas objects */ /* ignore canvas objects */
if (_e_comp_shapes_update_object_checker_function_thingy(c, o)) return; if (_e_comp_shapes_update_object_checker_function_thingy(o)) return;
SHAPE_INF("OBJ: %p:%s", o, evas_object_name_get(o)); SHAPE_INF("OBJ: %p:%s", o, evas_object_name_get(o));
evas_object_geometry_get(o, &x, &y, &w, &h); evas_object_geometry_get(o, &x, &y, &w, &h);
eina_tiler_rect_add(tb, &(Eina_Rectangle){x, y, w, h}); eina_tiler_rect_add(tb, &(Eina_Rectangle){x, y, w, h});
@ -690,7 +688,7 @@ _e_comp_shapes_update_object_shape_comp_helper(E_Comp *c, Evas_Object *o, Eina_T
} }
static void static void
_e_comp_shapes_update_job(E_Comp *c) _e_comp_shapes_update_job(void *d EINA_UNUSED)
{ {
Eina_Tiler *tb; Eina_Tiler *tb;
E_Client *ec; E_Client *ec;
@ -707,11 +705,11 @@ _e_comp_shapes_update_job(E_Comp *c)
INF("---------------------"); INF("---------------------");
#endif #endif
E_FREE_LIST(c->debug_rects, evas_object_del); E_FREE_LIST(e_comp->debug_rects, evas_object_del);
tb = eina_tiler_new(c->man->w, c->man->h); tb = eina_tiler_new(e_comp->man->w, e_comp->man->h);
eina_tiler_tile_size_set(tb, 1, 1); eina_tiler_tile_size_set(tb, 1, 1);
/* background */ /* background */
eina_tiler_rect_add(tb, &(Eina_Rectangle){0, 0, c->man->w, c->man->h}); eina_tiler_rect_add(tb, &(Eina_Rectangle){0, 0, e_comp->man->w, e_comp->man->h});
ec = e_client_bottom_get(); ec = e_client_bottom_get();
if (ec) o = ec->frame; if (ec) o = ec->frame;
@ -722,7 +720,7 @@ _e_comp_shapes_update_job(E_Comp *c)
layer = evas_object_layer_get(o); layer = evas_object_layer_get(o);
if (e_comp_canvas_client_layer_map(layer) == 9999) //not a client layer if (e_comp_canvas_client_layer_map(layer) == 9999) //not a client layer
{ {
_e_comp_shapes_update_object_shape_comp_helper(c, o, tb); _e_comp_shapes_update_object_shape_comp_helper(o, tb);
continue; continue;
} }
ec = e_comp_object_client_get(o); ec = e_comp_object_client_get(o);
@ -734,7 +732,7 @@ _e_comp_shapes_update_job(E_Comp *c)
); );
else else
_e_comp_shapes_update_object_shape_comp_helper(c, o, tb); _e_comp_shapes_update_object_shape_comp_helper(o, tb);
} }
ti = eina_tiler_iterator_new(tb); ti = eina_tiler_iterator_new(tb);
@ -749,7 +747,7 @@ _e_comp_shapes_update_job(E_Comp *c)
#ifdef SHAPE_DEBUG #ifdef SHAPE_DEBUG
Eina_List *l; Eina_List *l;
_e_comp_shape_debug_rect(c, &exr[i - 1], &color); _e_comp_shape_debug_rect(&exr[i - 1], &color);
INF("%d,%d @ %dx%d", exr[i - 1].x, exr[i - 1].y, exr[i - 1].w, exr[i - 1].h); INF("%d,%d @ %dx%d", exr[i - 1].x, exr[i - 1].y, exr[i - 1].w, exr[i - 1].h);
EINA_LIST_FOREACH(rl, l, r) EINA_LIST_FOREACH(rl, l, r)
{ {
@ -760,7 +758,7 @@ _e_comp_shapes_update_job(E_Comp *c)
} }
#ifndef HAVE_WAYLAND_ONLY #ifndef HAVE_WAYLAND_ONLY
ecore_x_window_shape_input_rectangles_set(c->win, (Ecore_X_Rectangle*)exr, i); ecore_x_window_shape_input_rectangles_set(e_comp->win, (Ecore_X_Rectangle*)exr, i);
#endif #endif
#ifdef SHAPE_DEBUG #ifdef SHAPE_DEBUG
@ -770,7 +768,7 @@ _e_comp_shapes_update_job(E_Comp *c)
free(exr); free(exr);
eina_iterator_free(ti); eina_iterator_free(ti);
eina_tiler_free(tb); eina_tiler_free(tb);
c->shape_job = NULL; e_comp->shape_job = NULL;
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -828,17 +826,15 @@ _e_comp_free(E_Comp *c)
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
static Eina_Bool static Eina_Bool
_e_comp_override_expire(void *data) _e_comp_override_expire(void *data EINA_UNUSED)
{ {
E_Comp *c = data; e_comp->nocomp_override_timer = NULL;
e_comp->nocomp_override--;
c->nocomp_override_timer = NULL; if (e_comp->nocomp_override <= 0)
c->nocomp_override--;
if (c->nocomp_override <= 0)
{ {
c->nocomp_override = 0; e_comp->nocomp_override = 0;
if (c->nocomp_want) _e_comp_cb_nocomp_begin(c); if (e_comp->nocomp_want) _e_comp_cb_nocomp_begin();
} }
return EINA_FALSE; return EINA_FALSE;
} }
@ -1261,18 +1257,15 @@ e_comp_style_selector_create(Evas *evas, const char **source)
EAPI E_Comp * EAPI E_Comp *
e_comp_new(void) e_comp_new(void)
{ {
E_Comp *c;
if (e_comp) if (e_comp)
CRI("CANNOT REPLACE EXISTING COMPOSITOR"); CRI("CANNOT REPLACE EXISTING COMPOSITOR");
c = E_OBJECT_ALLOC(E_Comp, E_COMP_TYPE, _e_comp_free); e_comp = E_OBJECT_ALLOC(E_Comp, E_COMP_TYPE, _e_comp_free);
if (!c) return NULL; if (!e_comp) return NULL;
c->name = eina_stringshare_add(_("Compositor")); e_comp->name = eina_stringshare_add(_("Compositor"));
c->render_animator = ecore_animator_add(_e_comp_cb_animator, c); e_comp->render_animator = ecore_animator_add(_e_comp_cb_animator, NULL);
ecore_animator_freeze(c->render_animator); ecore_animator_freeze(e_comp->render_animator);
e_comp = c; return e_comp;
return c;
} }
EAPI int EAPI int
@ -1310,11 +1303,8 @@ e_comp_shutdown(void)
} }
EAPI void EAPI void
e_comp_render_queue() e_comp_render_queue(void)
{ {
E_OBJECT_CHECK(e_comp);
E_OBJECT_TYPE_CHECK(e_comp, E_COMP_TYPE);
if (conf->lock_fps) if (conf->lock_fps)
{ {
ecore_animator_thaw(e_comp->render_animator); ecore_animator_thaw(e_comp->render_animator);
@ -1332,20 +1322,16 @@ e_comp_render_queue()
} }
EAPI void EAPI void
e_comp_shape_queue() e_comp_shape_queue(void)
{ {
EINA_SAFETY_ON_NULL_RETURN(e_comp);
if (e_comp->comp_type != E_PIXMAP_TYPE_X) return; if (e_comp->comp_type != E_PIXMAP_TYPE_X) return;
if (!e_comp->shape_job) if (!e_comp->shape_job)
e_comp->shape_job = ecore_job_add((Ecore_Cb)_e_comp_shapes_update_job, e_comp); e_comp->shape_job = ecore_job_add(_e_comp_shapes_update_job, NULL);
} }
EAPI void EAPI void
e_comp_shape_queue_block(Eina_Bool block) e_comp_shape_queue_block(Eina_Bool block)
{ {
EINA_SAFETY_ON_NULL_RETURN(e_comp);
e_comp->shape_queue_blocked = !!block; e_comp->shape_queue_blocked = !!block;
if (block) if (block)
E_FREE_FUNC(e_comp->shape_job, ecore_job_del); E_FREE_FUNC(e_comp->shape_job, ecore_job_del);
@ -1364,7 +1350,7 @@ e_comp_shadows_reset(void)
{ {
E_Client *ec; E_Client *ec;
_e_comp_fps_update(e_comp); _e_comp_fps_update();
E_LIST_FOREACH(e_comp->zones, e_comp_canvas_zone_update); E_LIST_FOREACH(e_comp->zones, e_comp_canvas_zone_update);
E_CLIENT_FOREACH(ec) E_CLIENT_FOREACH(ec)
e_comp_object_frame_theme_set(ec->frame, E_COMP_OBJECT_FRAME_RESHADOW); e_comp_object_frame_theme_set(ec->frame, E_COMP_OBJECT_FRAME_RESHADOW);
@ -1446,7 +1432,7 @@ e_comp_override_del()
if (e_comp->nocomp_override <= 0) if (e_comp->nocomp_override <= 0)
{ {
e_comp->nocomp_override = 0; e_comp->nocomp_override = 0;
if (e_comp->nocomp_want) _e_comp_cb_nocomp_begin(e_comp); if (e_comp->nocomp_want) _e_comp_cb_nocomp_begin();
} }
} }
@ -1454,7 +1440,7 @@ EAPI void
e_comp_override_add() e_comp_override_add()
{ {
e_comp->nocomp_override++; e_comp->nocomp_override++;
if ((e_comp->nocomp_override > 0) && (e_comp->nocomp)) _e_comp_cb_nocomp_end(e_comp); if ((e_comp->nocomp_override > 0) && (e_comp->nocomp)) _e_comp_cb_nocomp_end();
} }
#if 0 #if 0
@ -1493,14 +1479,13 @@ e_comp_find_by_window(Ecore_Window win)
} }
EAPI void EAPI void
e_comp_override_timed_pop() e_comp_override_timed_pop(void)
{ {
EINA_SAFETY_ON_NULL_RETURN(e_comp);
if (e_comp->nocomp_override <= 0) return; if (e_comp->nocomp_override <= 0) return;
if (e_comp->nocomp_override_timer) if (e_comp->nocomp_override_timer)
e_comp->nocomp_override--; e_comp->nocomp_override--;
else else
e_comp->nocomp_override_timer = ecore_timer_add(1.0, _e_comp_override_expire, e_comp); e_comp->nocomp_override_timer = ecore_timer_add(1.0, _e_comp_override_expire, NULL);
} }
EAPI unsigned int EAPI unsigned int
@ -1601,14 +1586,14 @@ EAPI void
e_comp_button_bindings_ungrab_all(void) e_comp_button_bindings_ungrab_all(void)
{ {
if (e_comp->bindings_ungrab_cb) if (e_comp->bindings_ungrab_cb)
e_comp->bindings_ungrab_cb(e_comp); e_comp->bindings_ungrab_cb();
} }
EAPI void EAPI void
e_comp_button_bindings_grab_all(void) e_comp_button_bindings_grab_all(void)
{ {
if (e_comp->bindings_grab_cb) if (e_comp->bindings_grab_cb)
e_comp->bindings_grab_cb(e_comp); e_comp->bindings_grab_cb();
} }
EAPI void EAPI void

View File

@ -55,6 +55,8 @@ typedef enum _E_Layer
extern EAPI int E_EVENT_COMPOSITOR_DISABLE; extern EAPI int E_EVENT_COMPOSITOR_DISABLE;
extern EAPI int E_EVENT_COMPOSITOR_ENABLE; extern EAPI int E_EVENT_COMPOSITOR_ENABLE;
typedef void (*E_Comp_Grab_Cb)(void);
struct _E_Comp struct _E_Comp
{ {
E_Object e_obj_inherit; E_Object e_obj_inherit;
@ -124,9 +126,9 @@ struct _E_Comp
unsigned int input_key_grabs; unsigned int input_key_grabs;
unsigned int input_mouse_grabs; unsigned int input_mouse_grabs;
Ecore_Cb grab_cb; E_Comp_Grab_Cb grab_cb;
Ecore_Cb bindings_grab_cb; E_Comp_Grab_Cb bindings_grab_cb;
Ecore_Cb bindings_ungrab_cb; E_Comp_Grab_Cb bindings_ungrab_cb;
Eina_Bool gl : 1; Eina_Bool gl : 1;
Eina_Bool grabbed : 1; Eina_Bool grabbed : 1;

View File

@ -4124,7 +4124,7 @@ _e_comp_x_hook_client_redirect(void *d EINA_UNUSED, E_Client *ec)
else if (e_comp->nocomp) else if (e_comp->nocomp)
{ {
/* first window */ /* first window */
e_comp_x_nocomp_end(e_comp); e_comp_x_nocomp_end();
ecore_x_window_reparent(_e_comp_x_client_window_get(ec), e_comp->man->root, ec->client.x, ec->client.y); ecore_x_window_reparent(_e_comp_x_client_window_get(ec), e_comp->man->root, ec->client.x, ec->client.y);
_e_comp_x_client_stack(ec); _e_comp_x_client_stack(ec);
} }
@ -4887,12 +4887,12 @@ _e_comp_x_manage_windows(E_Comp *c)
} }
static void static void
_e_comp_x_bindings_grab_cb(E_Comp *c) _e_comp_x_bindings_grab_cb(void)
{ {
Eina_List *l; Eina_List *l;
E_Client *ec; E_Client *ec;
EINA_LIST_FOREACH(c->clients, l, ec) EINA_LIST_FOREACH(e_comp->clients, l, ec)
{ {
if (e_client_util_ignored_get(ec)) continue; if (e_client_util_ignored_get(ec)) continue;
_e_comp_x_focus_setup(ec); _e_comp_x_focus_setup(ec);
@ -4902,12 +4902,12 @@ _e_comp_x_bindings_grab_cb(E_Comp *c)
} }
static void static void
_e_comp_x_bindings_ungrab_cb(E_Comp *c) _e_comp_x_bindings_ungrab_cb(void)
{ {
Eina_List *l; Eina_List *l;
E_Client *ec; E_Client *ec;
EINA_LIST_FOREACH(c->clients, l, ec) EINA_LIST_FOREACH(e_comp->clients, l, ec)
{ {
if (e_client_util_ignored_get(ec)) continue; if (e_client_util_ignored_get(ec)) continue;
_e_comp_x_focus_setdown(ec); _e_comp_x_focus_setdown(ec);
@ -4917,9 +4917,9 @@ _e_comp_x_bindings_ungrab_cb(E_Comp *c)
} }
static void static void
_e_comp_x_grab_cb(E_Comp *c) _e_comp_x_grab_cb(void)
{ {
if (!c->grabbed) if (!e_comp->grabbed)
{ {
ecore_x_grab(); ecore_x_grab();
ecore_x_sync(); ecore_x_sync();
@ -5124,9 +5124,9 @@ _e_comp_x_setup(E_Comp *c, Ecore_X_Window root, int w, int h)
ecore_evas_callback_resize_set(c->ee, _e_comp_x_ee_resize); ecore_evas_callback_resize_set(c->ee, _e_comp_x_ee_resize);
ecore_evas_data_set(c->ee, "comp", c); ecore_evas_data_set(c->ee, "comp", c);
c->grab_cb = (Ecore_Cb)_e_comp_x_grab_cb; c->grab_cb = _e_comp_x_grab_cb;
c->bindings_grab_cb = (Ecore_Cb)_e_comp_x_bindings_grab_cb; c->bindings_grab_cb = _e_comp_x_bindings_grab_cb;
c->bindings_ungrab_cb = (Ecore_Cb)_e_comp_x_bindings_ungrab_cb; c->bindings_ungrab_cb = _e_comp_x_bindings_ungrab_cb;
if (!e_comp_canvas_init()) return EINA_FALSE; if (!e_comp_canvas_init()) return EINA_FALSE;
@ -5379,10 +5379,10 @@ e_comp_x_shutdown(void)
} }
EINTERN void EINTERN void
e_comp_x_nocomp_end(E_Comp *comp) e_comp_x_nocomp_end(void)
{ {
comp->nocomp = 0; e_comp->nocomp = 0;
ecore_x_window_show(comp->win); ecore_x_window_show(e_comp->win);
ecore_x_composite_redirect_subwindows(comp->man->root, ECORE_X_COMPOSITE_UPDATE_MANUAL); ecore_x_composite_redirect_subwindows(e_comp->man->root, ECORE_X_COMPOSITE_UPDATE_MANUAL);
_e_comp_x_focus_check(comp); _e_comp_x_focus_check(e_comp);
} }

View File

@ -109,6 +109,6 @@ EINTERN Eina_Bool e_comp_x_init(void);
EINTERN void e_comp_x_shutdown(void); EINTERN void e_comp_x_shutdown(void);
EAPI void e_alert_composite_win(Ecore_X_Window root, Ecore_X_Window win); EAPI void e_alert_composite_win(Ecore_X_Window root, Ecore_X_Window win);
EINTERN void e_comp_x_nocomp_end(E_Comp *comp); EINTERN void e_comp_x_nocomp_end(void);
# endif # endif
#endif #endif