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 *
_e_comp_fullscreen_check(E_Comp *c)
_e_comp_fullscreen_check(void)
{
E_Client *ec;
@ -185,7 +185,7 @@ _e_comp_fullscreen_check(E_Comp *c)
while (o)
{
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);
}
return ec;
@ -194,63 +194,63 @@ _e_comp_fullscreen_check(E_Comp *c)
}
static void
_e_comp_fps_update(E_Comp *c)
_e_comp_fps_update(void)
{
if (conf->fps_show)
{
if (c->fps_bg) return;
if (e_comp->fps_bg) return;
c->fps_bg = evas_object_rectangle_add(c->evas);
evas_object_color_set(c->fps_bg, 0, 0, 0, 128);
evas_object_layer_set(c->fps_bg, E_LAYER_MAX);
evas_object_name_set(c->fps_bg, "c->fps_bg");
evas_object_lower(c->fps_bg);
evas_object_show(c->fps_bg);
e_comp->fps_bg = evas_object_rectangle_add(e_comp->evas);
evas_object_color_set(e_comp->fps_bg, 0, 0, 0, 128);
evas_object_layer_set(e_comp->fps_bg, E_LAYER_MAX);
evas_object_name_set(e_comp->fps_bg, "e_comp->fps_bg");
evas_object_lower(e_comp->fps_bg);
evas_object_show(e_comp->fps_bg);
c->fps_fg = evas_object_text_add(c->evas);
evas_object_text_font_set(c->fps_fg, "Sans", 10);
evas_object_text_text_set(c->fps_fg, "???");
evas_object_color_set(c->fps_fg, 255, 255, 255, 255);
evas_object_layer_set(c->fps_fg, E_LAYER_MAX);
evas_object_name_set(c->fps_bg, "c->fps_fg");
evas_object_stack_above(c->fps_fg, c->fps_bg);
evas_object_show(c->fps_fg);
e_comp->fps_fg = evas_object_text_add(e_comp->evas);
evas_object_text_font_set(e_comp->fps_fg, "Sans", 10);
evas_object_text_text_set(e_comp->fps_fg, "???");
evas_object_color_set(e_comp->fps_fg, 255, 255, 255, 255);
evas_object_layer_set(e_comp->fps_fg, E_LAYER_MAX);
evas_object_name_set(e_comp->fps_bg, "e_comp->fps_fg");
evas_object_stack_above(e_comp->fps_fg, e_comp->fps_bg);
evas_object_show(e_comp->fps_fg);
}
else
{
E_FREE_FUNC(c->fps_fg, evas_object_del);
E_FREE_FUNC(c->fps_bg, evas_object_del);
E_FREE_FUNC(e_comp->fps_fg, evas_object_del);
E_FREE_FUNC(e_comp->fps_bg, evas_object_del);
}
}
static void
_e_comp_cb_nocomp_begin(E_Comp *c)
_e_comp_cb_nocomp_begin(void)
{
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;
c->nocomp_ec = ecf;
e_comp->nocomp_ec = ecf;
E_CLIENT_FOREACH(ec)
if (ec != ecf) e_client_redirected_set(ec, 0);
INF("NOCOMP %p: frame %p", ecf, ecf->frame);
c->nocomp = 1;
e_comp->nocomp = 1;
evas_object_raise(ecf->frame);
e_client_redirected_set(ecf, 0);
//ecore_evas_manual_render_set(c->ee, EINA_TRUE);
ecore_evas_hide(c->ee);
//ecore_evas_manual_render_set(e_comp->ee, EINA_TRUE);
ecore_evas_hide(e_comp->ee);
edje_file_cache_flush();
edje_collection_cache_flush();
evas_image_cache_flush(c->evas);
evas_font_cache_flush(c->evas);
evas_render_dump(c->evas);
evas_image_cache_flush(e_comp->evas);
evas_font_cache_flush(e_comp->evas);
evas_render_dump(e_comp->evas);
DBG("JOB2...");
e_comp_render_queue();
@ -259,15 +259,15 @@ _e_comp_cb_nocomp_begin(E_Comp *c)
}
static void
_e_comp_cb_nocomp_end(E_Comp *c)
_e_comp_cb_nocomp_end(void)
{
E_Client *ec;
if (!c->nocomp) return;
if (!e_comp->nocomp) return;
INF("COMP RESUME!");
//ecore_evas_manual_render_set(c->ee, EINA_FALSE);
ecore_evas_show(c->ee);
//ecore_evas_manual_render_set(e_comp->ee, EINA_FALSE);
ecore_evas_show(e_comp->ee);
E_CLIENT_FOREACH(ec)
{
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);
}
#ifndef HAVE_WAYLAND_ONLY
e_comp_x_nocomp_end(c);
e_comp_x_nocomp_end();
#endif
e_comp_render_queue();
e_comp_shape_queue_block(0);
@ -283,15 +283,13 @@ _e_comp_cb_nocomp_end(E_Comp *c)
}
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;
c->nocomp_delay_timer = NULL;
if (c->nocomp_override == 0)
e_comp->nocomp_delay_timer = NULL;
if (e_comp->nocomp_override == 0)
{
if (_e_comp_fullscreen_check(c)) c->nocomp_want = 1;
_e_comp_cb_nocomp_begin(c);
if (_e_comp_fullscreen_check()) e_comp->nocomp_want = 1;
_e_comp_cb_nocomp_begin();
}
return EINA_FALSE;
}
@ -340,46 +338,46 @@ _e_comp_client_update(E_Client *ec)
}
static void
_e_comp_nocomp_end(E_Comp *c)
_e_comp_nocomp_end(void)
{
c->nocomp_want = 0;
E_FREE_FUNC(c->nocomp_delay_timer, ecore_timer_del);
_e_comp_cb_nocomp_end(c);
c->nocomp_ec = NULL;
e_comp->nocomp_want = 0;
E_FREE_FUNC(e_comp->nocomp_delay_timer, ecore_timer_del);
_e_comp_cb_nocomp_end();
e_comp->nocomp_ec = NULL;
}
static Eina_Bool
_e_comp_cb_update(E_Comp *c)
_e_comp_cb_update(void)
{
E_Client *ec;
Eina_List *l;
// static int doframeinfo = -1;
if (!c) return EINA_FALSE;
if (c->update_job)
c->update_job = NULL;
if (!e_comp) return EINA_FALSE;
if (e_comp->update_job)
e_comp->update_job = NULL;
else
ecore_animator_freeze(c->render_animator);
ecore_animator_freeze(e_comp->render_animator);
DBG("UPDATE ALL");
if (c->nocomp) goto nocomp;
if (conf->grab && (!c->grabbed))
if (e_comp->nocomp) goto nocomp;
if (conf->grab && (!e_comp->grabbed))
{
if (c->grab_cb) c->grab_cb(c);
c->grabbed = 1;
if (e_comp->grab_cb) e_comp->grab_cb();
e_comp->grabbed = 1;
}
l = c->updates;
c->updates = NULL;
l = e_comp->updates;
e_comp->updates = NULL;
EINA_LIST_FREE(l, ec)
{
/* clear update flag */
e_comp_object_render_update_del(ec->frame);
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_comp_fps_update(c);
_e_comp_fps_update();
if (conf->fps_show)
{
char buf[128];
@ -393,21 +391,21 @@ _e_comp_cb_update(E_Comp *c)
conf->fps_average_range = 30;
else if (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;
else fps = 0.0;
if (fps > 0.0) snprintf(buf, sizeof(buf), "FPS: %1.1f", fps);
else snprintf(buf, sizeof(buf), "N/A");
for (i = 121; i >= 1; i--)
c->frametimes[i] = c->frametimes[i - 1];
c->frametimes[0] = t;
c->frameskip++;
if (c->frameskip >= conf->fps_average_range)
e_comp->frametimes[i] = e_comp->frametimes[i - 1];
e_comp->frametimes[0] = t;
e_comp->frameskip++;
if (e_comp->frameskip >= conf->fps_average_range)
{
c->frameskip = 0;
evas_object_text_text_set(c->fps_fg, buf);
e_comp->frameskip = 0;
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;
h += 8;
z = e_zone_current_get();
@ -435,23 +433,23 @@ _e_comp_cb_update(E_Comp *c)
break;
}
}
evas_object_move(c->fps_bg, x, y);
evas_object_resize(c->fps_bg, w, h);
evas_object_move(c->fps_fg, x + 4, y + 4);
evas_object_move(e_comp->fps_bg, x, y);
evas_object_resize(e_comp->fps_bg, w, h);
evas_object_move(e_comp->fps_fg, x + 4, y + 4);
}
if (conf->lock_fps)
{
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);
c->grabbed = 0;
if (e_comp->grab_cb) e_comp->grab_cb();
e_comp->grabbed = 0;
}
if (c->updates && (!c->update_job))
ecore_animator_thaw(c->render_animator);
if (e_comp->updates && (!e_comp->update_job))
ecore_animator_thaw(e_comp->render_animator);
/*
if (doframeinfo == -1)
{
@ -477,56 +475,56 @@ _e_comp_cb_update(E_Comp *c)
}
*/
nocomp:
ec = _e_comp_fullscreen_check(c);
ec = _e_comp_fullscreen_check();
if (ec)
{
if (conf->nocomp_fs)
{
if (c->nocomp && c->nocomp_ec)
if (e_comp->nocomp && e_comp->nocomp_ec)
{
E_Client *nec = NULL;
for (ec = e_client_top_get(), 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 (evas_object_layer_get(ec->frame) < evas_object_layer_get(c->nocomp_ec->frame)) break;
if (ec == e_comp->nocomp_ec) 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 (!ec->visible) 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 (ec->override || (e_config->allow_above_fullscreen && (!e_config->mode.presentation)))
{
_e_comp_nocomp_end(c);
_e_comp_nocomp_end();
break;
}
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)
c->nocomp_delay_timer = ecore_timer_add(1.0, _e_comp_cb_nocomp_begin_timeout, c);
if (!e_comp->nocomp_delay_timer)
e_comp->nocomp_delay_timer = ecore_timer_add(1.0, _e_comp_cb_nocomp_begin_timeout, NULL);
}
}
}
else
_e_comp_nocomp_end(c);
_e_comp_nocomp_end();
return ECORE_CALLBACK_RENEW;
}
static void
_e_comp_cb_job(void *data)
_e_comp_cb_job(void *data EINA_UNUSED)
{
DBG("UPDATE ALL JOB...");
_e_comp_cb_update(data);
_e_comp_cb_update();
}
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
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;
#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)
evas_object_color_set(o, (color->r += COLOR_INCREMENT), 0, 0, 255);
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_move(o, rect->x, rect->y);
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);
}
#endif
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;
E_Zone *zone;
if (o == c->bg_blank_object) return EINA_TRUE;
EINA_LIST_FOREACH(c->zones, l, zone)
if (o == e_comp->bg_blank_object) return EINA_TRUE;
EINA_LIST_FOREACH(e_comp->zones, l, zone)
{
if ((o == zone->over) || (o == zone->base)) return EINA_TRUE;
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
_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;
/* 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;
/* 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));
evas_object_geometry_get(o, &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
_e_comp_shapes_update_job(E_Comp *c)
_e_comp_shapes_update_job(void *d EINA_UNUSED)
{
Eina_Tiler *tb;
E_Client *ec;
@ -707,11 +705,11 @@ _e_comp_shapes_update_job(E_Comp *c)
INF("---------------------");
#endif
E_FREE_LIST(c->debug_rects, evas_object_del);
tb = eina_tiler_new(c->man->w, c->man->h);
E_FREE_LIST(e_comp->debug_rects, evas_object_del);
tb = eina_tiler_new(e_comp->man->w, e_comp->man->h);
eina_tiler_tile_size_set(tb, 1, 1);
/* 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();
if (ec) o = ec->frame;
@ -722,7 +720,7 @@ _e_comp_shapes_update_job(E_Comp *c)
layer = evas_object_layer_get(o);
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;
}
ec = e_comp_object_client_get(o);
@ -734,7 +732,7 @@ _e_comp_shapes_update_job(E_Comp *c)
);
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);
@ -749,7 +747,7 @@ _e_comp_shapes_update_job(E_Comp *c)
#ifdef SHAPE_DEBUG
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);
EINA_LIST_FOREACH(rl, l, r)
{
@ -760,7 +758,7 @@ _e_comp_shapes_update_job(E_Comp *c)
}
#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
#ifdef SHAPE_DEBUG
@ -770,7 +768,7 @@ _e_comp_shapes_update_job(E_Comp *c)
free(exr);
eina_iterator_free(ti);
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
_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;
c->nocomp_override--;
if (c->nocomp_override <= 0)
if (e_comp->nocomp_override <= 0)
{
c->nocomp_override = 0;
if (c->nocomp_want) _e_comp_cb_nocomp_begin(c);
e_comp->nocomp_override = 0;
if (e_comp->nocomp_want) _e_comp_cb_nocomp_begin();
}
return EINA_FALSE;
}
@ -1261,18 +1257,15 @@ e_comp_style_selector_create(Evas *evas, const char **source)
EAPI E_Comp *
e_comp_new(void)
{
E_Comp *c;
if (e_comp)
CRI("CANNOT REPLACE EXISTING COMPOSITOR");
c = E_OBJECT_ALLOC(E_Comp, E_COMP_TYPE, _e_comp_free);
if (!c) return NULL;
e_comp = E_OBJECT_ALLOC(E_Comp, E_COMP_TYPE, _e_comp_free);
if (!e_comp) return NULL;
c->name = eina_stringshare_add(_("Compositor"));
c->render_animator = ecore_animator_add(_e_comp_cb_animator, c);
ecore_animator_freeze(c->render_animator);
e_comp = c;
return c;
e_comp->name = eina_stringshare_add(_("Compositor"));
e_comp->render_animator = ecore_animator_add(_e_comp_cb_animator, NULL);
ecore_animator_freeze(e_comp->render_animator);
return e_comp;
}
EAPI int
@ -1310,11 +1303,8 @@ e_comp_shutdown(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)
{
ecore_animator_thaw(e_comp->render_animator);
@ -1332,20 +1322,16 @@ e_comp_render_queue()
}
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->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
e_comp_shape_queue_block(Eina_Bool block)
{
EINA_SAFETY_ON_NULL_RETURN(e_comp);
e_comp->shape_queue_blocked = !!block;
if (block)
E_FREE_FUNC(e_comp->shape_job, ecore_job_del);
@ -1364,7 +1350,7 @@ e_comp_shadows_reset(void)
{
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_CLIENT_FOREACH(ec)
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)
{
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->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
@ -1493,14 +1479,13 @@ e_comp_find_by_window(Ecore_Window win)
}
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_timer)
e_comp->nocomp_override--;
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
@ -1601,14 +1586,14 @@ EAPI void
e_comp_button_bindings_ungrab_all(void)
{
if (e_comp->bindings_ungrab_cb)
e_comp->bindings_ungrab_cb(e_comp);
e_comp->bindings_ungrab_cb();
}
EAPI void
e_comp_button_bindings_grab_all(void)
{
if (e_comp->bindings_grab_cb)
e_comp->bindings_grab_cb(e_comp);
e_comp->bindings_grab_cb();
}
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_ENABLE;
typedef void (*E_Comp_Grab_Cb)(void);
struct _E_Comp
{
E_Object e_obj_inherit;
@ -124,9 +126,9 @@ struct _E_Comp
unsigned int input_key_grabs;
unsigned int input_mouse_grabs;
Ecore_Cb grab_cb;
Ecore_Cb bindings_grab_cb;
Ecore_Cb bindings_ungrab_cb;
E_Comp_Grab_Cb grab_cb;
E_Comp_Grab_Cb bindings_grab_cb;
E_Comp_Grab_Cb bindings_ungrab_cb;
Eina_Bool gl : 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)
{
/* 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);
_e_comp_x_client_stack(ec);
}
@ -4887,12 +4887,12 @@ _e_comp_x_manage_windows(E_Comp *c)
}
static void
_e_comp_x_bindings_grab_cb(E_Comp *c)
_e_comp_x_bindings_grab_cb(void)
{
Eina_List *l;
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;
_e_comp_x_focus_setup(ec);
@ -4902,12 +4902,12 @@ _e_comp_x_bindings_grab_cb(E_Comp *c)
}
static void
_e_comp_x_bindings_ungrab_cb(E_Comp *c)
_e_comp_x_bindings_ungrab_cb(void)
{
Eina_List *l;
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;
_e_comp_x_focus_setdown(ec);
@ -4917,9 +4917,9 @@ _e_comp_x_bindings_ungrab_cb(E_Comp *c)
}
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_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_data_set(c->ee, "comp", c);
c->grab_cb = (Ecore_Cb)_e_comp_x_grab_cb;
c->bindings_grab_cb = (Ecore_Cb)_e_comp_x_bindings_grab_cb;
c->bindings_ungrab_cb = (Ecore_Cb)_e_comp_x_bindings_ungrab_cb;
c->grab_cb = _e_comp_x_grab_cb;
c->bindings_grab_cb = _e_comp_x_bindings_grab_cb;
c->bindings_ungrab_cb = _e_comp_x_bindings_ungrab_cb;
if (!e_comp_canvas_init()) return EINA_FALSE;
@ -5379,10 +5379,10 @@ e_comp_x_shutdown(void)
}
EINTERN void
e_comp_x_nocomp_end(E_Comp *comp)
e_comp_x_nocomp_end(void)
{
comp->nocomp = 0;
ecore_x_window_show(comp->win);
ecore_x_composite_redirect_subwindows(comp->man->root, ECORE_X_COMPOSITE_UPDATE_MANUAL);
_e_comp_x_focus_check(comp);
e_comp->nocomp = 0;
ecore_x_window_show(e_comp->win);
ecore_x_composite_redirect_subwindows(e_comp->man->root, ECORE_X_COMPOSITE_UPDATE_MANUAL);
_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);
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