From 0abeaa4038dfa7d8a9755249e1ac8afe57a272a6 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 19 Jun 2014 10:40:03 -0400 Subject: [PATCH] add back comp object eo/eolian usage --- Makefile.am | 16 + config/Makefile.mk | 2 +- configure.ac | 6 + src/bin/Makefile.mk | 18 +- src/bin/e_client.c | 6 +- src/bin/e_comp_object.c | 560 +++++++++++++++------------------- src/bin/e_comp_object.eo | 173 +++++++++++ src/bin/e_comp_object.h | 32 +- src/bin/e_deskmirror.c | 8 +- src/modules/ibar/e_mod_main.c | 4 +- 10 files changed, 472 insertions(+), 353 deletions(-) create mode 100644 src/bin/e_comp_object.eo diff --git a/Makefile.am b/Makefile.am index fa91c5a86..bda60eaf6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -9,6 +9,7 @@ SUBDIRS += po endif +SUFFIXES = CLEANFILES = DISTCLEANFILES = INSTALL_DATA_HOOKS = @@ -90,3 +91,18 @@ clean-local: doc-clean rm -f data/themes/*.edj install-data-hook: $(INSTALL_DATA_HOOKS) + +AM_V_EOL = $(am__v_EOL_@AM_V@) +am__v_EOL_ = $(am__v_EOL_@AM_DEFAULT_V@) +am__v_EOL_0 = @echo " EOLIAN " $@; + +SUFFIXES += .eo .eo.c .eo.h .eo.legacy.h + +%.eo.c: %.eo @eolian_gen@ + $(AM_V_EOL)@eolian_gen@ --eo --legacy $(EOLIAN_FLAGS) --gc -o $@ $< + +%.eo.h: %.eo @eolian_gen@ + $(AM_V_EOL)@eolian_gen@ --eo $(EOLIAN_FLAGS) --gh -o $@ $< + +%.eo.legacy.h: %.eo @eolian_gen@ + $(AM_V_EOL)@eolian_gen@ --legacy $(EOLIAN_FLAGS) --gh -o $@ $< diff --git a/config/Makefile.mk b/config/Makefile.mk index 8d42f087d..1bb81a1a8 100644 --- a/config/Makefile.mk +++ b/config/Makefile.mk @@ -6,7 +6,7 @@ configfilesdir = $(datadir)/enlightenment/data/config configfiles_DATA = config/profile.cfg -SUFFIXES = .cfg +SUFFIXES += .cfg .src.cfg: $(MKDIR_P) $(@D) diff --git a/configure.ac b/configure.ac index deaa27821..ba37ac99c 100644 --- a/configure.ac +++ b/configure.ac @@ -602,6 +602,12 @@ AC_SUBST([e_cflags]) AC_SUBST([e_configflags]) AC_SUBST([requirements_e]) +EFL_WITH_BIN([eolian], [eolian-gen], [eolian_gen]) +# Force the helper to try external eolian-gen +AM_CONDITIONAL(HAVE_EOLIAN_GEN, [true]) +EOLIAN_FLAGS=`pkg-config --variable=eolian_flags eo evas edje` +AC_SUBST(EOLIAN_FLAGS) + PKG_CHECK_EXISTS([xkeyboard-config],[ xkb_base=`$PKG_CONFIG --variable=xkb_base xkeyboard-config 2>/dev/null` AC_DEFINE_UNQUOTED([XKB_BASE],["$xkb_base"],[Define to the base directory for X keyboard configuration data]) diff --git a/src/bin/Makefile.mk b/src/bin/Makefile.mk index 1678001ba..be626d27d 100644 --- a/src/bin/Makefile.mk +++ b/src/bin/Makefile.mk @@ -1,4 +1,17 @@ -DISTCLEANFILES += src/bin/e_fm_shared_types.h +E_EOLIANFILES = \ +src/bin/e_comp_object.eo.c \ +src/bin/e_comp_object.eo.h \ +src/bin/e_comp_object.eo.legacy.h + +MAINTAINERCLEANFILES += \ +$(E_EOLIANFILES) + +DISTCLEANFILES += \ +src/bin/e_fm_shared_types.h + +EXTRA_DIST += \ +$(E_EOLIANFILES) \ +src/bin/e_comp_object.eo E_CPPFLAGS = \ -I$(top_builddir) \ @@ -58,6 +71,7 @@ src/bin/e_comp.h \ src/bin/e_comp_canvas.h \ src/bin/e_comp_cfdata.h \ src/bin/e_comp_object.h \ +src/bin/e_comp_object.eo.h \ src/bin/e_comp_x.h \ src/bin/e_config_data.h \ src/bin/e_config_dialog.h \ @@ -381,6 +395,8 @@ src/bin/e_uuid_store.c \ src/bin/e_comp_wl.c endif +src/bin/e_comp_object.c: $(E_EOLIANFILES) + src_bin_enlightenment_CPPFLAGS = $(E_CPPFLAGS) -DEFL_BETA_API_SUPPORT -DEFL_EO_API_SUPPORT -DE_LOGGING=1 @WAYLAND_CFLAGS@ @WAYLAND_EGL_CFLAGS@ @ECORE_X_CFLAGS@ -DNEED_X=1 src_bin_enlightenment_SOURCES = \ src/bin/e_main.c \ diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 0e563da6e..ac51fbcd8 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -3324,7 +3324,7 @@ e_client_focused_set(E_Client *ec) E_FREE_FUNC(ec_unfocus->raise_timer, ecore_timer_del); - e_comp_object_signal_emit(ec_unfocus->frame, "e,state,unfocused", "e"); + edje_object_signal_emit(ec_unfocus->frame, "e,state,unfocused", "e"); /* if there unfocus client is fullscreen and visible */ if ((!e_config->allow_above_fullscreen) && @@ -3873,12 +3873,12 @@ e_client_urgent_set(E_Client *ec, Eina_Bool urgent) _e_client_event_property(ec, E_CLIENT_PROPERTY_URGENCY); if (urgent && (!ec->focused) && (!ec->want_focus)) { - e_comp_object_signal_emit(ec->frame, "e,state,urgent", "e"); + edje_object_signal_emit(ec->frame, "e,state,urgent", "e"); ec->urgent = urgent; } else { - e_comp_object_signal_emit(ec->frame, "e,state,not_urgent", "e"); + edje_object_signal_emit(ec->frame, "e,state,not_urgent", "e"); ec->urgent = 0; } if (urgent && e_screensaver_on_get() && e_config->screensaver_wake_on_urgent) diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c index 79f003d0b..f95d521dd 100644 --- a/src/bin/e_comp_object.c +++ b/src/bin/e_comp_object.c @@ -1,24 +1,24 @@ #include "e.h" -#define UPDATE_MAX 512 // same as evas -#define SMART_NAME "e_comp_object" +#include "e_comp_object.eo.h" -/* for non-util functions */ -#define API_ENTRY E_Comp_Object *cw; \ - cw = evas_object_smart_data_get(obj); \ - if ((!obj) || (!cw) || (e_util_strcmp(evas_object_type_get(obj), SMART_NAME))) return +#define UPDATE_MAX 512 // same as evas + +#define MY_CLASS E_COMP_OBJECT_CLASS +#define MY_CLASS_NAME "E_Comp_Object" +#define MY_CLASS_NAME_LEGACY "e_comp_object" /* for util functions (obj may or may not be E_Comp_Object */ -#define SOFT_ENTRY(...) E_Comp_Object *cw; \ +#define SOFT_ENTRY(...) E_Comp_Object *cw = NULL; \ if (!obj) \ { \ CRI("YOU PASSED NULL! ARGH!"); \ return __VA_ARGS__; \ } \ - cw = evas_object_smart_data_get(obj); \ - if ((!cw) || (e_util_strcmp(evas_object_type_get(obj), SMART_NAME))) \ - cw = NULL -#define INTERNAL_ENTRY E_Comp_Object *cw; cw = evas_object_smart_data_get(obj); + if (eo_isa(obj, MY_CLASS)) \ + cw = eo_data_scope_get(obj, MY_CLASS) + +#define INTERNAL_ENTRY E_Comp_Object *cw; cw = eo_data_scope_get(obj, MY_CLASS) /* enable for lots of client size info in console output */ #if 1 @@ -111,7 +111,6 @@ struct E_Comp_Object_Mover }; static Eina_Inlist *_e_comp_object_movers = NULL; -static Evas_Smart *_e_comp_smart = NULL; /* sekrit functionzzz */ EINTERN void e_client_focused_set(E_Client *ec); @@ -168,7 +167,10 @@ _e_comp_object_layers_add(E_Comp_Object *cw, E_Comp_Object *above, E_Comp_Object * will return NULL for fake layers (eg. wayland) */ if (cw->comp->layers[cw->layer].obj) - layer_cw = evas_object_smart_data_get(cw->comp->layers[cw->layer].obj); + { + if (eo_isa(cw->comp->layers[cw->layer].obj, MY_CLASS)) + layer_cw = eo_data_scope_get(cw->comp->layers[cw->layer].obj, MY_CLASS); + } if (layer_cw == cw) layer_cw = NULL; /* if (above) @@ -547,31 +549,31 @@ _e_comp_object_shadow_setup(E_Comp_Object *cw) } if (focus || cw->ec->focused) - e_comp_object_signal_emit(cw->smart_obj, "e,state,focused", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,focused", "e"); else - e_comp_object_signal_emit(cw->smart_obj, "e,state,unfocused", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,unfocused", "e"); if (urgent || cw->ec->urgent) - e_comp_object_signal_emit(cw->smart_obj, "e,state,urgent", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,urgent", "e"); else - e_comp_object_signal_emit(cw->smart_obj, "e,state,not_urgent", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,not_urgent", "e"); if (cw->ec->shaded) - e_comp_object_signal_emit(cw->smart_obj, "e,state,shaded", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,shaded", "e"); if (cw->ec->sticky) - e_comp_object_signal_emit(cw->smart_obj, "e,state,sticky", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,sticky", "e"); if (cw->ec->hung) - e_comp_object_signal_emit(cw->smart_obj, "e,state,hung", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,hung", "e"); /* visibility must always be enabled for re_manage clients to prevent * pop-in animations every time the user sees a persistent client again; * applying visibility for iconic clients prevents the client from getting * stuck as hidden */ if (cw->visible || cw->ec->iconic || cw->ec->re_manage) - e_comp_object_signal_emit(cw->smart_obj, "e,state,visible", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,visible", "e"); else - e_comp_object_signal_emit(cw->smart_obj, "e,state,hidden", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,hidden", "e"); if (cw->ec->iconic) - e_comp_object_signal_emit(cw->smart_obj, "e,action,iconify", "e"); + edje_object_signal_emit(cw->smart_obj, "e,action,iconify", "e"); if (!cw->zoomap_disabled) e_zoomap_child_set(cw->zoomobj, NULL); if (cw->frame_object) @@ -634,16 +636,12 @@ _e_comp_object_done_defer(void *data, Evas_Object *obj EINA_UNUSED, const char * static void _e_comp_object_setup(E_Comp_Object *cw) { - cw->clip = evas_object_rectangle_add(cw->comp->evas); - evas_object_resize(cw->clip, cw->comp->man->w, cw->comp->man->h); - evas_object_smart_member_add(cw->clip, cw->smart_obj); + cw->clip = evas_object_smart_clipped_clipper_get(cw->smart_obj); cw->effect_obj = edje_object_add(cw->comp->evas); evas_object_move(cw->effect_obj, cw->x, cw->y); - evas_object_clip_set(cw->effect_obj, cw->clip); evas_object_smart_member_add(cw->effect_obj, cw->smart_obj); e_theme_edje_object_set(cw->effect_obj, "base/theme/comp", "e/comp/effects/none"); cw->shobj = edje_object_add(cw->comp->evas); - evas_object_data_set(cw->shobj, "comp_smart_obj", cw->smart_obj); edje_object_part_swallow(cw->effect_obj, "e.swallow.content", cw->shobj); edje_object_signal_callback_add(cw->shobj, "e,action,*,done", "e", _e_comp_object_done_defer, cw); @@ -1173,7 +1171,12 @@ _e_comp_intercept_raise(void *data, Evas_Object *obj) } if (evas_object_layer_get(o) != evas_object_layer_get(obj)) return; //already at top! if (obj == cw->comp->layers[cw->layer].obj) //never raise a non-layer marker! - evas_object_raise(obj); + { + _e_comp_object_layers_remove(cw); + /* append to client list to put this one at end of list */ + _e_comp_object_layers_add(cw, NULL, NULL, 0); + evas_object_raise(obj); + } else { /* still stack below layer marker */ @@ -1218,10 +1221,10 @@ _e_comp_intercept_hide(void *data, Evas_Object *obj) if ((!cw->animating) || (cw->ec->iconic)) { if (cw->ec->iconic) - e_comp_object_signal_emit(obj, "e,action,iconify", "e"); + edje_object_signal_emit(obj, "e,action,iconify", "e"); else { - e_comp_object_signal_emit(obj, "e,state,hidden", "e"); + edje_object_signal_emit(obj, "e,state,hidden", "e"); cw->comp->animating++; cw->animating++; e_object_ref(E_OBJECT(cw->ec)); @@ -1243,13 +1246,13 @@ _e_comp_intercept_show_helper(E_Comp_Object *cw) int w = 0, h = 0; if (cw->ec->sticky) - e_comp_object_signal_emit(cw->smart_obj, "e,state,sticky", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,sticky", "e"); if (cw->visible) { if (cw->ec->iconic && cw->animating) { /* triggered during iconify animation */ - e_comp_object_signal_emit(cw->smart_obj, "e,action,uniconify", "e"); + edje_object_signal_emit(cw->smart_obj, "e,action,uniconify", "e"); cw->defer_hide = 0; } return; @@ -1440,6 +1443,41 @@ _e_comp_intercept_focus(void *data, Evas_Object *obj, Eina_Bool focus) //////////////////////////////////////////////////// +EOLIAN static void +_e_comp_object_edje_signal_emit(Eo *obj, E_Comp_Object *cw, const char *sig, const char *src) +{ + E_Comp_Object_Mover *prov; + + //INF("EMIT %p: %s %s", cw->ec, sig, src); + edje_object_signal_emit(cw->shobj, sig, src); + if (cw->frame_object) edje_object_signal_emit(cw->frame_object, sig, src); + if (cw->frame_icon && e_icon_edje_get(cw->frame_icon)) + edje_object_signal_emit(e_icon_edje_get(cw->frame_icon), sig, src); + if ((cw->ec->override && e_comp_config_get()->match.disable_overrides) || + ((!cw->ec->override) && e_comp_config_get()->match.disable_borders)) + return; + /* start with highest priority callback first */ + EINA_INLIST_REVERSE_FOREACH(_e_comp_object_movers, prov) + { + if (!e_util_glob_match(sig, prov->sig)) continue; + if (prov->func(prov->data, obj, sig)) break; + } +} + +EOLIAN static void +_e_comp_object_edje_signal_callback_add(Eo *obj EINA_UNUSED, E_Comp_Object *cw, const char *sig, const char *src, Edje_Signal_Cb cb, void *data) +{ + edje_object_signal_callback_add(cw->shobj, sig, src, cb, (void*)data); +} + +EOLIAN static void * +_e_comp_object_edje_signal_callback_del(Eo *obj EINA_UNUSED, E_Comp_Object *cw, const char *sig, const char *src, Edje_Signal_Cb cb, void *data) +{ + return edje_object_signal_callback_del_full(cw->shobj, sig, src, cb, (void*)data); +} + +//////////////////////////////////////////////////// + static void _e_comp_object_frame_recalc(E_Comp_Object *cw) { @@ -1474,7 +1512,7 @@ _e_comp_object_frame_recalc(E_Comp_Object *cw) } static void -_e_comp_smart_cb_frame_recalc(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_comp_object_smart_cb_frame_recalc(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) { E_Comp_Object *cw = data; int w, h, pw, ph; @@ -1617,17 +1655,17 @@ _e_comp_object_shade_animator(void *data) evas_object_smart_callback_call(cw->smart_obj, "shade_done", NULL); if (cw->ec->shaded) - e_comp_object_signal_emit(cw->smart_obj, "e,state,shaded", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,shaded", "e"); else - e_comp_object_signal_emit(cw->smart_obj, "e,state,unshaded", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,unshaded", "e"); edje_object_message_signal_process(cw->frame_object); - _e_comp_smart_cb_frame_recalc(cw, cw->smart_obj, NULL); + _e_comp_object_smart_cb_frame_recalc(cw, cw->smart_obj, NULL); } return cw->ec->shading; } static void -_e_comp_smart_cb_shading(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) +_e_comp_object_smart_cb_shading(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) { E_Comp_Object *cw = data; @@ -1636,14 +1674,14 @@ _e_comp_smart_cb_shading(void *data, Evas_Object *obj EINA_UNUSED, void *event_i cw->shade.x = cw->x; cw->shade.y = cw->y; - e_comp_object_signal_emit(cw->smart_obj, "e,state,shading", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,shading", "e"); cw->shade.start = ecore_loop_time_get(); cw->shade.dir = (E_Direction)event_info; cw->shade.anim = ecore_animator_add(_e_comp_object_shade_animator, cw); } static void -_e_comp_smart_cb_shaded(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) +_e_comp_object_smart_cb_shaded(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) { E_Comp_Object *cw = data; @@ -1652,14 +1690,14 @@ _e_comp_smart_cb_shaded(void *data, Evas_Object *obj EINA_UNUSED, void *event_in cw->shade.x = cw->x; cw->shade.y = cw->y; - e_comp_object_signal_emit(cw->smart_obj, "e,state,shaded", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,shaded", "e"); cw->shade.start = -100; cw->shade.dir = (E_Direction)event_info; _e_comp_object_shade_animator(cw); } static void -_e_comp_smart_cb_unshading(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) +_e_comp_object_smart_cb_unshading(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) { E_Comp_Object *cw = data; @@ -1678,13 +1716,13 @@ _e_comp_smart_cb_unshading(void *data, Evas_Object *obj EINA_UNUSED, void *event cw->shade.x = cw->x - cw->w; cw->shade.y = cw->y - cw->h; } - e_comp_object_signal_emit(cw->smart_obj, "e,state,unshading", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,unshading", "e"); cw->shade.start = ecore_loop_time_get(); cw->shade.anim = ecore_animator_add(_e_comp_object_shade_animator, cw); } static void -_e_comp_smart_cb_unshaded(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) +_e_comp_object_smart_cb_unshaded(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) { E_Comp_Object *cw = data; @@ -1703,13 +1741,13 @@ _e_comp_smart_cb_unshaded(void *data, Evas_Object *obj EINA_UNUSED, void *event_ cw->shade.x = cw->x - cw->w; cw->shade.y = cw->y - cw->h; } - e_comp_object_signal_emit(cw->smart_obj, "e,state,unshaded", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,unshaded", "e"); cw->shade.start = -100; _e_comp_object_shade_animator(cw); } static void -_e_comp_smart_cb_maximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_comp_object_smart_cb_maximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { E_Comp_Object *cw = data; @@ -1717,14 +1755,14 @@ _e_comp_smart_cb_maximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_ if (cw->frame_object) { _e_comp_object_shadow(cw); - e_comp_object_signal_emit(cw->smart_obj, "e,action,maximize", "e"); + edje_object_signal_emit(cw->smart_obj, "e,action,maximize", "e"); _e_comp_object_frame_recalc(cw); evas_object_smart_callback_call(cw->smart_obj, "frame_recalc_done", &cw->client_inset); } } static void -_e_comp_smart_cb_fullscreen(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_comp_object_smart_cb_fullscreen(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { E_Comp_Object *cw = data; @@ -1733,28 +1771,28 @@ _e_comp_smart_cb_fullscreen(void *data, Evas_Object *obj EINA_UNUSED, void *even if (cw->frame_object) { _e_comp_object_shadow(cw); - e_comp_object_signal_emit(cw->smart_obj, "e,action,maximize,fullscreen", "e"); + edje_object_signal_emit(cw->smart_obj, "e,action,maximize,fullscreen", "e"); _e_comp_object_frame_recalc(cw); evas_object_smart_callback_call(cw->smart_obj, "frame_recalc_done", &cw->client_inset); } } static void -_e_comp_smart_cb_unmaximize(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_comp_object_smart_cb_unmaximize(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) { E_Comp_Object *cw = data; if (cw->frame_object) { _e_comp_object_shadow(cw); - e_comp_object_signal_emit(obj, "e,action,unmaximize", "e"); + edje_object_signal_emit(obj, "e,action,unmaximize", "e"); _e_comp_object_frame_recalc(cw); evas_object_smart_callback_call(cw->smart_obj, "frame_recalc_done", &cw->client_inset); } } static void -_e_comp_smart_cb_unfullscreen(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_comp_object_smart_cb_unfullscreen(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) { E_Comp_Object *cw = data; @@ -1766,66 +1804,96 @@ _e_comp_smart_cb_unfullscreen(void *data, Evas_Object *obj, void *event_info EIN if (cw->frame_object) { _e_comp_object_shadow(cw); - e_comp_object_signal_emit(obj, "e,action,unmaximize,unfullscreen", "e"); + edje_object_signal_emit(obj, "e,action,unmaximize,unfullscreen", "e"); _e_comp_object_frame_recalc(cw); evas_object_smart_callback_call(cw->smart_obj, "frame_recalc_done", &cw->client_inset); } } static void -_e_comp_smart_cb_sticky(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_comp_object_smart_cb_sticky(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) { - e_comp_object_signal_emit(obj, "e,state,sticky", "e"); + edje_object_signal_emit(obj, "e,state,sticky", "e"); } static void -_e_comp_smart_cb_unsticky(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_comp_object_smart_cb_unsticky(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) { - e_comp_object_signal_emit(obj, "e,state,unsticky", "e"); + edje_object_signal_emit(obj, "e,state,unsticky", "e"); } static void -_e_comp_smart_cb_unhung(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_comp_object_smart_cb_unhung(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { E_Comp_Object *cw = data; if (!cw->ec) return; //NYI - e_comp_object_signal_emit(cw->smart_obj, "e,state,unhung", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,unhung", "e"); } static void -_e_comp_smart_cb_hung(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_comp_object_smart_cb_hung(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { E_Comp_Object *cw = data; if (!cw->ec) return; //NYI - e_comp_object_signal_emit(cw->smart_obj, "e,state,hung", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,hung", "e"); } static void -_e_comp_smart_focus_in(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_comp_object_smart_focus_in(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) { - e_comp_object_signal_emit(obj, "e,state,focused", "e"); + edje_object_signal_emit(obj, "e,state,focused", "e"); } static void -_e_comp_smart_focus_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_comp_object_smart_focus_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) { E_Comp_Object *cw = data; if (!e_object_is_del(E_OBJECT(cw->ec))) - e_comp_object_signal_emit(obj, "e,state,unfocused", "e"); + edje_object_signal_emit(obj, "e,state,unfocused", "e"); } -static void -_e_comp_smart_add(Evas_Object *obj) +EOLIAN static void +_e_comp_object_evas_object_smart_add(Eo *obj, E_Comp_Object *cw EINA_UNUSED) { - E_Comp_Object *cw; + eo_do_super(obj, MY_CLASS, evas_obj_smart_add()); +} - cw = E_NEW(E_Comp_Object, 1); +EOLIAN static void +_e_comp_object_constructor(Eo *obj, E_Comp_Object *cw, E_Client *ec) +{ cw->smart_obj = obj; + + eo_do(obj, eo_parent_set(ec->comp->evas)); + eo_do_super(obj, MY_CLASS, eo_constructor()); + eo_do(obj, + evas_obj_type_set(MY_CLASS_NAME_LEGACY) + ); + + evas_object_smart_callback_add(obj, "shading", _e_comp_object_smart_cb_shading, cw); + evas_object_smart_callback_add(obj, "shaded", _e_comp_object_smart_cb_shaded, cw); + evas_object_smart_callback_add(obj, "unshading", _e_comp_object_smart_cb_unshading, cw); + evas_object_smart_callback_add(obj, "unshaded", _e_comp_object_smart_cb_unshaded, cw); + + evas_object_smart_callback_add(obj, "maximize", _e_comp_object_smart_cb_maximize, cw); + evas_object_smart_callback_add(obj, "fullscreen", _e_comp_object_smart_cb_fullscreen, cw); + evas_object_smart_callback_add(obj, "unmaximize", _e_comp_object_smart_cb_unmaximize, cw); + evas_object_smart_callback_add(obj, "unfullscreen", _e_comp_object_smart_cb_unfullscreen, cw); + + evas_object_smart_callback_add(obj, "stick", _e_comp_object_smart_cb_sticky, cw); + evas_object_smart_callback_add(obj, "unstick", _e_comp_object_smart_cb_unsticky, cw); + + evas_object_smart_callback_add(obj, "hung", _e_comp_object_smart_cb_hung, cw); + evas_object_smart_callback_add(obj, "unhung", _e_comp_object_smart_cb_unhung, cw); + + evas_object_smart_callback_add(obj, "frame_recalc", _e_comp_object_smart_cb_frame_recalc, cw); + + evas_object_event_callback_add(obj, EVAS_CALLBACK_FOCUS_IN, _e_comp_object_smart_focus_in, cw); + evas_object_event_callback_add(obj, EVAS_CALLBACK_FOCUS_OUT, _e_comp_object_smart_focus_out, cw); + cw->x = cw->y = cw->w = cw->h = -1; - evas_object_smart_data_set(obj, cw); cw->opacity = 255.0; evas_object_data_set(obj, "comp_obj", cw); evas_object_move(obj, -1, -1); @@ -1841,57 +1909,57 @@ _e_comp_smart_add(Evas_Object *obj) evas_object_intercept_hide_callback_add(obj, _e_comp_intercept_hide, cw); evas_object_intercept_focus_set_callback_add(obj, _e_comp_intercept_focus, cw); - evas_object_smart_callback_add(obj, "shading", _e_comp_smart_cb_shading, cw); - evas_object_smart_callback_add(obj, "shaded", _e_comp_smart_cb_shaded, cw); - evas_object_smart_callback_add(obj, "unshading", _e_comp_smart_cb_unshading, cw); - evas_object_smart_callback_add(obj, "unshaded", _e_comp_smart_cb_unshaded, cw); + cw->comp = ec->comp; + evas_object_data_set(obj, "E_Client", ec); + cw->ec = ec; + ec->frame = obj; + evas_object_data_set(obj, "comp_object", (void*)1); - evas_object_smart_callback_add(obj, "maximize", _e_comp_smart_cb_maximize, cw); - evas_object_smart_callback_add(obj, "fullscreen", _e_comp_smart_cb_fullscreen, cw); - evas_object_smart_callback_add(obj, "unmaximize", _e_comp_smart_cb_unmaximize, cw); - evas_object_smart_callback_add(obj, "unfullscreen", _e_comp_smart_cb_unfullscreen, cw); - - evas_object_smart_callback_add(obj, "stick", _e_comp_smart_cb_sticky, cw); - evas_object_smart_callback_add(obj, "unstick", _e_comp_smart_cb_unsticky, cw); - - evas_object_smart_callback_add(obj, "hung", _e_comp_smart_cb_hung, cw); - evas_object_smart_callback_add(obj, "unhung", _e_comp_smart_cb_unhung, cw); - - evas_object_smart_callback_add(obj, "frame_recalc", _e_comp_smart_cb_frame_recalc, cw); - - evas_object_event_callback_add(obj, EVAS_CALLBACK_FOCUS_IN, _e_comp_smart_focus_in, cw); - evas_object_event_callback_add(obj, EVAS_CALLBACK_FOCUS_OUT, _e_comp_smart_focus_out, cw); + e_object_ref(E_OBJECT(ec)); + _e_comp_object_event_add(obj); } -static void -_e_comp_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) +EOLIAN static void +_e_comp_object_class_constructor(Eo_Class *klass) { - INTERNAL_ENTRY; + evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); +} + +EOLIAN static void +_e_comp_object_eo_base_constructor(Eo *obj, E_Comp_Object *cw EINA_UNUSED) +{ + eo_error_set(obj); + ERR("only custom constructor can be used with '%s' class", MY_CLASS_NAME); +} + +EOLIAN static void +_e_comp_object_evas_object_smart_color_set(Eo *obj, E_Comp_Object *cw, int r, int g, int b, int a) +{ + eo_do_super(obj, MY_CLASS, evas_obj_smart_color_set(r, g, b, a)); evas_object_color_set(cw->clip, r, g, b, a); evas_object_smart_callback_call(obj, "color_set", NULL); } -static void -_e_comp_smart_clip_set(Evas_Object *obj, Evas_Object *clip) +EOLIAN static void +_e_comp_object_evas_object_smart_clip_set(Eo *obj, E_Comp_Object *cw, Evas_Object *clip) { - INTERNAL_ENTRY; + eo_do_super(obj, MY_CLASS, evas_obj_smart_clip_set(clip)); evas_object_clip_set(cw->clip, clip); } -static void -_e_comp_smart_clip_unset(Evas_Object *obj) +EOLIAN static void +_e_comp_object_evas_object_smart_clip_unset(Eo *obj, E_Comp_Object *cw) { - INTERNAL_ENTRY; + eo_do_super(obj, MY_CLASS, evas_obj_smart_clip_unset()); evas_object_clip_unset(cw->clip); } -static void -_e_comp_smart_hide(Evas_Object *obj) +EOLIAN static void +_e_comp_object_evas_object_smart_hide(Eo *obj, E_Comp_Object *cw) { - INTERNAL_ENTRY; + eo_do_super(obj, MY_CLASS, evas_obj_smart_hide()); cw->visible = 0; - evas_object_hide(cw->clip); if (cw->input_obj) evas_object_hide(cw->input_obj); evas_object_hide(cw->effect_obj); if (stopping) return; @@ -1902,13 +1970,13 @@ _e_comp_smart_hide(Evas_Object *obj) e_comp_shape_queue(cw->comp); } -static void -_e_comp_smart_show(Evas_Object *obj) +EOLIAN static void +_e_comp_object_evas_object_smart_show(Eo *obj, E_Comp_Object *cw) { E_Client *tmp; Eina_List *l; - INTERNAL_ENTRY; + eo_do_super(obj, MY_CLASS, evas_obj_smart_show()); cw->defer_hide = 0; cw->visible = 1; if ((cw->w < 0) || (cw->h < 0)) @@ -1919,16 +1987,15 @@ _e_comp_smart_show(Evas_Object *obj) EINA_LIST_FOREACH(cw->ec->e.state.video_child, l, tmp) evas_object_show(tmp->frame); - evas_object_show(cw->clip); if (cw->input_obj) evas_object_show(cw->input_obj); evas_object_show(cw->effect_obj); e_comp_shape_queue(cw->comp); if (cw->ec->input_only) return; if (cw->ec->iconic && (!cw->ec->new_client)) - e_comp_object_signal_emit(cw->smart_obj, "e,action,uniconify", "e"); + edje_object_signal_emit(cw->smart_obj, "e,action,uniconify", "e"); else { - e_comp_object_signal_emit(cw->smart_obj, "e,state,visible", "e"); + edje_object_signal_emit(cw->smart_obj, "e,state,visible", "e"); cw->comp->animating++; cw->animating++; e_object_ref(E_OBJECT(cw->ec)); @@ -1946,13 +2013,11 @@ _e_comp_object_cb_mirror_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, cw->obj_mirror = eina_list_remove(cw->obj_mirror, obj); } -static void -_e_comp_smart_del(Evas_Object *obj) +EOLIAN static void +_e_comp_object_evas_object_smart_del(Eo *obj, E_Comp_Object *cw) { Eina_List *l; - INTERNAL_ENTRY; - if (cw->animating) { cw->comp->animating--; @@ -1978,7 +2043,6 @@ _e_comp_smart_del(Evas_Object *obj) _e_comp_object_layers_remove(cw); l = evas_object_data_get(obj, "comp_object-to_del"); E_FREE_LIST(l, evas_object_del); - evas_object_del(cw->clip); evas_object_del(cw->effect_obj); evas_object_del(cw->shobj); evas_object_del(cw->frame_icon); @@ -1989,16 +2053,14 @@ _e_comp_smart_del(Evas_Object *obj) e_comp_shape_queue(cw->comp); eina_stringshare_del(cw->frame_theme); eina_stringshare_del(cw->frame_name); - free(cw); + eo_do_super(obj, MY_CLASS, evas_obj_smart_del()); } -static void -_e_comp_smart_move(Evas_Object *obj, int x, int y) +EOLIAN static void +_e_comp_object_evas_object_smart_move(Eo *obj, E_Comp_Object *cw, int x, int y) { - INTERNAL_ENTRY; - + eo_do_super(obj, MY_CLASS, evas_obj_smart_move(x, y)); cw->x = x, cw->y = y; - evas_object_move(cw->clip, 0, 0); evas_object_move(cw->effect_obj, x, y); if (cw->input_obj) evas_object_geometry_set(cw->input_obj, cw->x + cw->input_rect.x, cw->y + cw->input_rect.y, cw->input_rect.w, cw->input_rect.h); @@ -2007,18 +2069,16 @@ _e_comp_smart_move(Evas_Object *obj, int x, int y) e_comp_shape_queue(cw->comp); } -static void -_e_comp_smart_resize(Evas_Object *obj, int w, int h) +EOLIAN static void +_e_comp_object_evas_object_smart_resize(Eo *obj, E_Comp_Object *cw, int w, int h) { Eina_Bool first = EINA_FALSE; - INTERNAL_ENTRY; - //INF("RSZ(%p): %dx%d -> %dx%d", cw->ec, cw->w, cw->h, w, h); if (!cw->effect_obj) CRI("ACK!"); + eo_do_super(obj, MY_CLASS, evas_obj_smart_resize(w, h)); first = ((cw->w < 1) || (cw->h < 1)); cw->w = w, cw->h = h; - evas_object_resize(cw->clip, cw->comp->man->w, cw->comp->man->h); if ((!cw->ec->shading) && (!cw->ec->shaded)) { int ww, hh, pw, ph; @@ -2059,42 +2119,11 @@ _e_comp_smart_resize(Evas_Object *obj, int w, int h) e_comp_shape_queue(cw->comp); } -static void -_e_comp_smart_init(void) -{ - if (_e_comp_smart) return; - { - static const Evas_Smart_Class sc = - { - SMART_NAME, - EVAS_SMART_CLASS_VERSION, - _e_comp_smart_add, - _e_comp_smart_del, - _e_comp_smart_move, - _e_comp_smart_resize, - _e_comp_smart_show, - _e_comp_smart_hide, - _e_comp_smart_color_set, - _e_comp_smart_clip_set, - _e_comp_smart_clip_unset, - NULL, - NULL, - NULL, - - NULL, - NULL, - NULL, - NULL - }; - _e_comp_smart = evas_smart_class_new(&sc); - } -} - EAPI void e_comp_object_zoomap_set(Evas_Object *obj, Eina_Bool enabled) { - API_ENTRY; - + SOFT_ENTRY(); + EINA_SAFETY_ON_NULL_RETURN(cw); enabled = !enabled; if (cw->zoomap_disabled == enabled) return; if (enabled) @@ -2348,7 +2377,7 @@ e_comp_object_util_add(Evas_Object *obj, E_Comp_Object_Type type) evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, _e_comp_object_util_moveresize, z); evas_object_event_callback_add(o, EVAS_CALLBACK_RESTACK, _e_comp_object_util_restack, z); - e_comp_object_signal_emit(o, "e,state,hidden", "e"); + edje_object_signal_emit(o, "e,state,hidden", "e"); edje_object_part_swallow(o, "e.swallow.content", z ?: obj); @@ -2366,7 +2395,7 @@ e_comp_object_util_del_list_append(Evas_Object *obj, Evas_Object *to_del) { Eina_List *l; - SOFT_ENTRY(); + EINA_SAFETY_ON_NULL_RETURN(obj); EINA_SAFETY_ON_NULL_RETURN(to_del); l = evas_object_data_get(obj, "comp_object-to_del"); evas_object_data_set(obj, "comp_object-to_del", eina_list_append(l, to_del)); @@ -2379,7 +2408,7 @@ e_comp_object_util_del_list_remove(Evas_Object *obj, Evas_Object *to_del) { Eina_List *l; - SOFT_ENTRY(); + EINA_SAFETY_ON_NULL_RETURN(obj); EINA_SAFETY_ON_NULL_RETURN(to_del); l = evas_object_data_get(obj, "comp_object-to_del"); if (l) @@ -2392,30 +2421,20 @@ EAPI Evas_Object * e_comp_object_client_add(E_Client *ec) { Evas_Object *o; - E_Comp_Object *cw; EINA_SAFETY_ON_NULL_RETURN_VAL(ec, NULL); if (ec->frame) return NULL; - _e_comp_smart_init(); - o = evas_object_smart_add(ec->comp->evas, _e_comp_smart); - cw = evas_object_smart_data_get(o); - cw->comp = ec->comp; - evas_object_data_set(o, "E_Client", ec); - cw->ec = ec; - ec->frame = o; - evas_object_data_set(o, "comp_object", (void*)1); - e_object_ref(E_OBJECT(ec)); - _e_comp_object_event_add(o); + o = eo_add_custom(MY_CLASS, ec->comp->evas, e_comp_obj_constructor(ec)); + eo_unref(o); return o; } /* utility functions for getting client inset */ -EAPI void -e_comp_object_frame_xy_adjust(Evas_Object *obj, int x, int y, int *ax, int *ay) +EOLIAN static void +_e_comp_object_frame_xy_adjust(Eo *obj EINA_UNUSED, E_Comp_Object *cw, int x, int y, int *ax, int *ay) { - API_ENTRY; if (!cw->client_inset.calc) { if (ax) *ax = x; @@ -2426,10 +2445,9 @@ e_comp_object_frame_xy_adjust(Evas_Object *obj, int x, int y, int *ax, int *ay) if (ay) *ay = y - cw->client_inset.t; } -EAPI void -e_comp_object_frame_xy_unadjust(Evas_Object *obj, int x, int y, int *ax, int *ay) +EOLIAN static void +_e_comp_object_frame_xy_unadjust(Eo *obj EINA_UNUSED, E_Comp_Object *cw, int x, int y, int *ax, int *ay) { - API_ENTRY; if (!cw->client_inset.calc) { if (ax) *ax = x; @@ -2440,10 +2458,9 @@ e_comp_object_frame_xy_unadjust(Evas_Object *obj, int x, int y, int *ax, int *ay if (ay) *ay = y + cw->client_inset.t; } -EAPI void -e_comp_object_frame_wh_adjust(Evas_Object *obj, int w, int h, int *aw, int *ah) +EOLIAN static void +_e_comp_object_frame_wh_adjust(Eo *obj EINA_UNUSED, E_Comp_Object *cw, int w, int h, int *aw, int *ah) { - API_ENTRY; if (!cw->client_inset.calc) { if (aw) *aw = w; @@ -2454,10 +2471,9 @@ e_comp_object_frame_wh_adjust(Evas_Object *obj, int w, int h, int *aw, int *ah) if (ah) *ah = h + cw->client_inset.t + cw->client_inset.b; } -EAPI void -e_comp_object_frame_wh_unadjust(Evas_Object *obj, int w, int h, int *aw, int *ah) +EOLIAN static void +_e_comp_object_frame_wh_unadjust(Eo *obj EINA_UNUSED, E_Comp_Object *cw, int w, int h, int *aw, int *ah) { - API_ENTRY; if (!cw->client_inset.calc) { if (aw) *aw = w; @@ -2471,20 +2487,13 @@ e_comp_object_frame_wh_unadjust(Evas_Object *obj, int w, int h, int *aw, int *ah EAPI E_Client * e_comp_object_client_get(Evas_Object *obj) { - Evas_Object *o; - SOFT_ENTRY(NULL); - /* FIXME: remove this when eo is used */ - o = evas_object_data_get(obj, "comp_smart_obj"); - if (o) - return e_comp_object_client_get(o); return cw ? cw->ec : NULL; } -EAPI void -e_comp_object_frame_extends_get(Evas_Object *obj, int *x, int *y, int *w, int *h) +EOLIAN static void +_e_comp_object_frame_extends_get(Eo *obj EINA_UNUSED, E_Comp_Object *cw, int *x, int *y, int *w, int *h) { - API_ENTRY; if (cw->frame_extends) edje_object_parts_extends_calc(cw->frame_object, x, y, w, h); else @@ -2613,10 +2622,9 @@ e_comp_object_util_center_pos_get(Evas_Object *obj, int *x, int *y) if (y) *y = zy + (zh - cw->h) / 2; } -EAPI void -e_comp_object_input_area_set(Evas_Object *obj, int x, int y, int w, int h) +EOLIAN static void +_e_comp_object_input_area_set(Eo *obj, E_Comp_Object *cw, int x, int y, int w, int h) { - API_ENTRY; //INF("%d,%d %dx%d", x, y, w, h); E_RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, cw->ec->w, cw->ec->h); @@ -2632,7 +2640,6 @@ e_comp_object_input_area_set(Evas_Object *obj, int x, int y, int w, int h) evas_object_name_set(cw->input_obj, "cw->input_obj"); evas_object_color_set(cw->input_obj, 0, 0, 0, 0); evas_object_pass_events_set(cw->obj, 1); - evas_object_clip_set(cw->input_obj, cw->clip); evas_object_smart_member_add(cw->input_obj, obj); } evas_object_geometry_set(cw->input_obj, MAX(cw->x, 0) + x, MAX(cw->y, 0) + y, w, h); @@ -2647,20 +2654,18 @@ e_comp_object_input_area_set(Evas_Object *obj, int x, int y, int w, int h) } } -EAPI void -e_comp_object_frame_geometry_get(Evas_Object *obj, int *l, int *r, int *t, int *b) +EOLIAN static void +_e_comp_object_frame_geometry_get(Eo *obj EINA_UNUSED, E_Comp_Object *cw, int *l, int *r, int *t, int *b) { - API_ENTRY; if (l) *l = cw->client_inset.l; if (r) *r = cw->client_inset.r; if (t) *t = cw->client_inset.t; if (b) *b = cw->client_inset.b; } -EAPI void -e_comp_object_frame_icon_geometry_get(Evas_Object *obj, int *x, int *y, int *w, int *h) +EOLIAN static void +_e_comp_object_frame_icon_geometry_get(Eo *obj EINA_UNUSED, E_Comp_Object *cw, int *x, int *y, int *w, int *h) { - API_ENTRY; if (x) *x = 0; if (y) *y = 0; @@ -2670,10 +2675,9 @@ e_comp_object_frame_icon_geometry_get(Evas_Object *obj, int *x, int *y, int *w, evas_object_geometry_get(cw->frame_icon, x, y, w, h); } -EAPI Eina_Bool -e_comp_object_frame_title_set(Evas_Object *obj, const char *name) +EOLIAN static Eina_Bool +_e_comp_object_frame_title_set(Eo *obj EINA_UNUSED, E_Comp_Object *cw, const char *name) { - API_ENTRY EINA_FALSE; if (!e_util_strcmp(cw->frame_name, name)) return EINA_FALSE; eina_stringshare_replace(&cw->frame_name, name); if (cw->frame_object) @@ -2681,17 +2685,15 @@ e_comp_object_frame_title_set(Evas_Object *obj, const char *name) return EINA_TRUE; } -EAPI Eina_Bool -e_comp_object_frame_exists(Evas_Object *obj) +EOLIAN static Eina_Bool +_e_comp_object_frame_exists(Eo *obj EINA_UNUSED, E_Comp_Object *cw) { - API_ENTRY EINA_FALSE; return !!cw->frame_object; } -EAPI void -e_comp_object_frame_icon_update(Evas_Object *obj) +EOLIAN static void +_e_comp_object_frame_icon_update(Eo *obj EINA_UNUSED, E_Comp_Object *cw) { - API_ENTRY; E_FREE_FUNC(cw->frame_icon, evas_object_del); if (!edje_object_part_exists(cw->frame_object, "e.swallow.icon")) @@ -2702,16 +2704,14 @@ e_comp_object_frame_icon_update(Evas_Object *obj) E_FREE_FUNC(cw->frame_icon, evas_object_del); } -EAPI Eina_Bool -e_comp_object_frame_theme_set(Evas_Object *obj, const char *name) +EOLIAN static Eina_Bool +_e_comp_object_frame_theme_set(Eo *obj EINA_UNUSED, E_Comp_Object *cw, const char *name) { Evas_Object *o, *pbg; char buf[4096]; int ok; Eina_Stringshare *theme; - API_ENTRY EINA_FALSE; - if (!e_util_strcmp(cw->frame_theme, name)) return edje_object_part_swallow(cw->shobj, "e.swallow.content", cw->frame_object ?: cw->obj); if (!e_util_strcmp(name, "COMP_RESHADOW")) @@ -2800,7 +2800,7 @@ reshadow: _e_comp_object_shadow_setup(cw); do { - _e_comp_smart_cb_frame_recalc(cw, cw->smart_obj, NULL); + _e_comp_object_smart_cb_frame_recalc(cw, cw->smart_obj, NULL); /* this guarantees that we won't get blocked by the NOP check in the interceptor */ cw->y = cw->x = -99999; if (pbg) @@ -2846,58 +2846,10 @@ reshadow: return EINA_TRUE; } -EAPI void -e_comp_object_signal_emit(Evas_Object *obj, const char *sig, const char *src) -{ - E_Comp_Object_Mover *prov; - - API_ENTRY; - //INF("EMIT %p: %s %s", cw->ec, sig, src); - edje_object_signal_emit(cw->shobj, sig, src); - if (cw->frame_object) edje_object_signal_emit(cw->frame_object, sig, src); - if (cw->frame_icon && e_icon_edje_get(cw->frame_icon)) - edje_object_signal_emit(e_icon_edje_get(cw->frame_icon), sig, src); - if ((cw->ec->override && e_comp_config_get()->match.disable_overrides) || - ((!cw->ec->override) && e_comp_config_get()->match.disable_borders)) - return; - /* start with highest priority callback first */ - EINA_INLIST_REVERSE_FOREACH(_e_comp_object_movers, prov) - { - if (!e_util_glob_match(sig, prov->sig)) continue; - if (prov->func(prov->data, obj, sig)) break; - } -} - -EAPI void -e_comp_object_signal_callback_add(Evas_Object *obj, const char *sig, const char *src, Edje_Signal_Cb cb, const void *data) -{ - /* FIXME: at some point I guess this should use eo to inherit - * -EDJE_OBJ_SUB_ID_SIGNAL_CALLBACK_ADD - * -EDJE_OBJ_SUB_ID_SIGNAL_CALLBACK_DEL - */ - API_ENTRY; - edje_object_signal_callback_add(cw->shobj, sig, src, cb, (void*)data); -} - -EAPI void -e_comp_object_signal_callback_del(Evas_Object *obj, const char *sig, const char *src, Edje_Signal_Cb cb) -{ - API_ENTRY; - edje_object_signal_callback_del(cw->shobj, sig, src, cb); -} - -EAPI void -e_comp_object_signal_callback_del_full(Evas_Object *obj, const char *sig, const char *src, Edje_Signal_Cb cb, const void *data) -{ - API_ENTRY; - edje_object_signal_callback_del_full(cw->shobj, sig, src, cb, (void*)data); -} - -EAPI void -e_comp_object_damage(Evas_Object *obj, int x, int y, int w, int h) +EOLIAN static void +_e_comp_object_damage(Eo *obj, E_Comp_Object *cw, int x, int y, int w, int h) { int tw, th; - API_ENTRY; if (cw->ec->input_only || (!cw->updates)) return; if (cw->nocomp) return; @@ -2953,17 +2905,15 @@ e_comp_object_damage(Evas_Object *obj, int x, int y, int w, int h) e_comp_object_render_update_add(obj); } -EAPI Eina_Bool -e_comp_object_damage_exists(Evas_Object *obj) +EOLIAN static Eina_Bool +_e_comp_object_damage_exists(Eo *obj EINA_UNUSED, E_Comp_Object *cw) { - API_ENTRY EINA_FALSE; return cw->updates_exist; } -EAPI void -e_comp_object_render_update_add(Evas_Object *obj) +EOLIAN static void +_e_comp_object_render_update_add(Eo *obj EINA_UNUSED, E_Comp_Object *cw) { - API_ENTRY; if (cw->ec->input_only || (!cw->updates) || (!cw->redirected)) return; if (e_object_is_del(E_OBJECT(cw->ec))) @@ -2979,10 +2929,9 @@ e_comp_object_render_update_add(Evas_Object *obj) e_comp_render_queue(cw->comp); } -EAPI void -e_comp_object_render_update_del(Evas_Object *obj) +EOLIAN static void +_e_comp_object_render_update_del(Eo *obj EINA_UNUSED, E_Comp_Object *cw) { - API_ENTRY; if (cw->ec->input_only || (!cw->updates)) return; if (!cw->update) return; @@ -2998,15 +2947,14 @@ e_comp_object_render_update_del(Evas_Object *obj) } } -EAPI void -e_comp_object_shape_apply(Evas_Object *obj) +EOLIAN static void +_e_comp_object_shape_apply(Eo *obj EINA_UNUSED, E_Comp_Object *cw) { Eina_List *l; Evas_Object *o; unsigned int i, *pix, *p; int w, h, px, py; - API_ENTRY; if (!cw->ec) return; //NYI if (!_e_comp_shaped_check(cw->ec->client.w, cw->ec->client.h, cw->ec->shape_rects, cw->ec->shape_rects_num)) { @@ -3100,10 +3048,9 @@ e_comp_object_shape_apply(Evas_Object *obj) } /* helper function to simplify toggling of redirection for display servers which support it */ -EAPI void -e_comp_object_redirected_set(Evas_Object *obj, Eina_Bool set) +EOLIAN static void +_e_comp_object_redirected_set(Eo *obj, E_Comp_Object *cw, Eina_Bool set) { - API_ENTRY; set = !!set; if (cw->redirected == set) return; @@ -3138,14 +3085,13 @@ e_comp_object_redirected_set(Evas_Object *obj, Eina_Bool set) } } -EAPI void -e_comp_object_native_surface_set(Evas_Object *obj, Eina_Bool set) +EOLIAN static void +_e_comp_object_native_surface_set(Eo *obj EINA_UNUSED, E_Comp_Object *cw, Eina_Bool set) { Evas_Native_Surface ns; Eina_List *l; Evas_Object *o; - API_ENTRY; EINA_SAFETY_ON_NULL_RETURN(cw->ec); if (cw->ec->input_only) return; set = !!set; @@ -3165,8 +3111,8 @@ e_comp_object_native_surface_set(Evas_Object *obj, Eina_Bool set) } /* mark an object as dirty and setup damages */ -EAPI void -e_comp_object_dirty(Evas_Object *obj) +EOLIAN static void +_e_comp_object_dirty(Eo *obj, E_Comp_Object *cw) { Eina_Iterator *it; Eina_Rectangle *r; @@ -3175,7 +3121,6 @@ e_comp_object_dirty(Evas_Object *obj) int w, h; Eina_Bool dirty, visible; - API_ENTRY; /* only actually dirty if pixmap is available */ dirty = e_pixmap_size_get(cw->ec->pixmap, &w, &h); visible = cw->visible; @@ -3228,8 +3173,8 @@ e_comp_object_dirty(Evas_Object *obj) e_comp_object_render(obj); } -EAPI Eina_Bool -e_comp_object_render(Evas_Object *obj) +EOLIAN static Eina_Bool +_e_comp_object_render(Eo *obj, E_Comp_Object *cw) { Eina_Iterator *it; Eina_Rectangle *r; @@ -3239,8 +3184,6 @@ e_comp_object_render(Evas_Object *obj) unsigned int *pix, *srcpix; Eina_Bool ret = EINA_FALSE; - API_ENTRY EINA_FALSE; - EINA_SAFETY_ON_NULL_RETURN_VAL(cw->ec, EINA_FALSE); if (cw->ec->input_only) return EINA_TRUE; e_comp_object_render_update_del(obj); @@ -3386,13 +3329,12 @@ e_comp_object_util_mirror_add(Evas_Object *obj) ////////////////////////////////////////////////////// /* setup an api effect for a client */ -EAPI void -e_comp_object_effect_set(Evas_Object *obj, const char *effect) +EOLIAN static void +_e_comp_object_effect_set(Eo *obj EINA_UNUSED, E_Comp_Object *cw, const char *effect) { char buf[4096]; Eina_Stringshare *grp; - API_ENTRY; if (!cw->shobj) return; //input window if (!effect) effect = "none"; @@ -3408,20 +3350,18 @@ e_comp_object_effect_set(Evas_Object *obj, const char *effect) edje_object_part_swallow(cw->effect_obj, "e.swallow.content", cw->shobj); if (cw->effect_clip) { - evas_object_clip_unset(cw->clip); cw->effect_clip = 0; } cw->effect_clip_able = !edje_object_data_get(cw->effect_obj, "noclip"); } /* set params for embryo scripts in effect */ -EAPI void -e_comp_object_effect_params_set(Evas_Object *obj, int id, int *params, unsigned int count) +EOLIAN static void +_e_comp_object_effect_params_set(Eo *obj EINA_UNUSED, E_Comp_Object *cw, int id, int *params, unsigned int count) { Edje_Message_Int_Set *msg; unsigned int x; - API_ENTRY; EINA_SAFETY_ON_NULL_RETURN(params); EINA_SAFETY_ON_FALSE_RETURN(count); @@ -3456,10 +3396,9 @@ _e_comp_object_effect_end_cb(void *data, Evas_Object *obj, const char *emission, } /* clip effect to client's zone */ -EAPI void -e_comp_object_effect_clip(Evas_Object *obj) +EOLIAN static void +_e_comp_object_effect_clip(Eo *obj EINA_UNUSED, E_Comp_Object *cw) { - API_ENTRY; if (!cw->ec->zone) return; if (cw->effect_clip) e_comp_object_effect_unclip(cw->smart_obj); if (!cw->effect_clip_able) return; @@ -3468,20 +3407,18 @@ e_comp_object_effect_clip(Evas_Object *obj) } /* unclip effect from client's zone */ -EAPI void -e_comp_object_effect_unclip(Evas_Object *obj) +EOLIAN static void +_e_comp_object_effect_unclip(Eo *obj EINA_UNUSED, E_Comp_Object *cw) { - API_ENTRY; if (!cw->effect_clip) return; evas_object_clip_unset(cw->smart_obj); cw->effect_clip = 0; } /* start effect, running end_cb after */ -EAPI void -e_comp_object_effect_start(Evas_Object *obj, Edje_Signal_Cb end_cb, const void *end_data) +EOLIAN static void +_e_comp_object_effect_start(Eo *obj, E_Comp_Object *cw, Edje_Signal_Cb end_cb, const void *end_data) { - API_ENTRY; EINA_SAFETY_ON_NULL_RETURN(cw->ec); //NYI e_comp_object_effect_clip(obj); edje_object_signal_callback_del(cw->effect_obj, "e,action,done", "e", _e_comp_object_effect_end_cb); @@ -3498,10 +3435,9 @@ e_comp_object_effect_start(Evas_Object *obj, Edje_Signal_Cb end_cb, const void * } /* stop a currently-running effect immediately */ -EAPI void -e_comp_object_effect_stop(Evas_Object *obj, Edje_Signal_Cb end_cb) +EOLIAN static void +_e_comp_object_effect_stop(Eo *obj, E_Comp_Object *cw, Edje_Signal_Cb end_cb) { - API_ENTRY; if (evas_object_data_get(cw->effect_obj, "_e_comp.end_cb") != end_cb) return; e_comp_object_effect_unclip(obj); if (cw->effect_clip) @@ -3638,7 +3574,7 @@ e_comp_object_util_autoclose(Evas_Object *obj, E_Comp_Object_Autoclose_Cb del_cb { E_Comp *c; - SOFT_ENTRY(); + EINA_SAFETY_ON_NULL_RETURN(obj); c = e_comp_util_evas_object_comp_get(obj); EINA_SAFETY_ON_NULL_RETURN(c); @@ -3667,3 +3603,5 @@ e_comp_object_util_autoclose(Evas_Object *obj, E_Comp_Object_Autoclose_Cb del_cb evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, _e_comp_object_autoclose_show, c); evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _e_comp_object_autoclose_del, c); } + +#include "e_comp_object.eo.c" diff --git a/src/bin/e_comp_object.eo b/src/bin/e_comp_object.eo new file mode 100644 index 000000000..bcf233b7d --- /dev/null +++ b/src/bin/e_comp_object.eo @@ -0,0 +1,173 @@ +class E_Comp_Object (Edje) +{ + legacy_prefix: e_comp_object; + eo_prefix: e_comp_obj; + data: E_Comp_Object; + constructors { + constructor { + params { + @in E_Client *ec; + } + } + } + properties { + effect { + set {} + values { + const char *effect; + } + } + frame_geometry { + get {} + values { + int l; + int r; + int t; + int b; + } + } + frame_extends { + get {} + values { + int x; + int y; + int w; + int h; + } + } + frame_icon_geometry { + get {} + values { + int x; + int y; + int w; + int h; + } + } + input_area { + set {} + values { + int x; + int y; + int w; + int h; + } + } + native_surface { + set {} + values { + Eina_Bool set; + } + } + redirected { + set {} + values { + Eina_Bool set; + } + } + } + methods { + damage { + params { + @in int x; + @in int y; + @in int w; + @in int h; + } + } + damage_exists { + return Eina_Bool; + } + dirty {} + effect_clip {} + effect_unclip {} + effect_params_set { + params { + @in int id; + @in int *params; + @in unsigned int count; + } + } + effect_start { + params { + @in Edje_Signal_Cb end_cb; + @in const void *end_data; + } + } + effect_stop { + params { + @in Edje_Signal_Cb end_cb; + } + } + frame_xy_adjust { + params { + @in int x; + @in int y; + @out int ax; + @out int ay; + } + } + frame_xy_unadjust { + params { + @in int x; + @in int y; + @out int ax; + @out int ay; + } + } + frame_wh_adjust { + params { + @in int w; + @in int h; + @out int aw; + @out int ah; + } + } + frame_wh_unadjust { + params { + @in int w; + @in int h; + @out int aw; + @out int ah; + } + } + frame_exists { + return Eina_Bool; + } + frame_icon_update {}; + frame_theme_set { + return Eina_Bool; + params { + @in const char *name; + } + } + frame_title_set { + return Eina_Bool; + params { + @in const char *name; + } + } + render { + return Eina_Bool; + } + render_update_add {} + render_update_del {} + shape_apply {} + } + implements { + class::constructor; + Eo_Base::constructor; + Evas_Object_Smart::hide; + Evas_Object_Smart::show; + Evas_Object_Smart::move; + Evas_Object_Smart::add; + Evas_Object_Smart::del; + Evas_Object_Smart::resize; + Evas_Object_Smart::clip::set; + Evas_Object_Smart::clip_unset; + Evas_Object_Smart::color::set; + Edje::signal_callback_add; + Edje::signal_callback_del; + Edje::signal_emit; + } +} diff --git a/src/bin/e_comp_object.h b/src/bin/e_comp_object.h index 4aeaca785..65e20e110 100644 --- a/src/bin/e_comp_object.h +++ b/src/bin/e_comp_object.h @@ -39,11 +39,6 @@ EAPI void e_comp_object_zoomap_set(Evas_Object *obj, Eina_Bool enabled); EAPI Evas_Object *e_comp_object_client_add(E_Client *ec); EAPI Evas_Object *e_comp_object_util_mirror_add(Evas_Object *obj); EAPI Evas_Object *e_comp_object_util_add(Evas_Object *obj, E_Comp_Object_Type type); -EAPI void e_comp_object_frame_xy_adjust(Evas_Object *obj, int x, int y, int *ax, int *ay); -EAPI void e_comp_object_frame_xy_unadjust(Evas_Object *obj, int x, int y, int *ax, int *ay); -EAPI void e_comp_object_frame_wh_adjust(Evas_Object *obj, int w, int h, int *aw, int *ah); -EAPI void e_comp_object_frame_wh_unadjust(Evas_Object *obj, int w, int h, int *aw, int *ah); -EAPI void e_comp_object_frame_extends_get(Evas_Object *obj, int *x, int *y, int *w, int *h); EAPI E_Client *e_comp_object_client_get(Evas_Object *obj); EAPI E_Zone *e_comp_object_util_zone_get(Evas_Object *obj); EAPI void e_comp_object_util_del_list_append(Evas_Object *obj, Evas_Object *to_del); @@ -53,35 +48,10 @@ EAPI void e_comp_object_util_center(Evas_Object *obj); EAPI void e_comp_object_util_center_on(Evas_Object *obj, Evas_Object *on); EAPI void e_comp_object_util_center_pos_get(Evas_Object *obj, int *x, int *y); EAPI void e_comp_object_util_fullscreen(Evas_Object *obj); -EAPI void e_comp_object_frame_geometry_get(Evas_Object *obj, int *l, int *r, int *t, int *b); -EAPI void e_comp_object_frame_icon_geometry_get(Evas_Object *obj, int *x, int *y, int *w, int *h); -EAPI Eina_Bool e_comp_object_frame_title_set(Evas_Object *obj, const char *name); -EAPI Eina_Bool e_comp_object_frame_exists(Evas_Object *obj); -EAPI void e_comp_object_frame_icon_update(Evas_Object *obj); -EAPI Eina_Bool e_comp_object_frame_theme_set(Evas_Object *obj, const char *name); -EAPI void e_comp_object_signal_emit(Evas_Object *obj, const char *sig, const char *src); -EAPI void e_comp_object_signal_callback_add(Evas_Object *obj, const char *sig, const char *src, Edje_Signal_Cb cb, const void *data); -EAPI void e_comp_object_signal_callback_del(Evas_Object *obj, const char *sig, const char *src, Edje_Signal_Cb cb); -EAPI void e_comp_object_signal_callback_del_full(Evas_Object *obj, const char *sig, const char *src, Edje_Signal_Cb cb, const void *data); -EAPI void e_comp_object_input_area_set(Evas_Object *obj, int x, int y, int w, int h); -EAPI void e_comp_object_damage(Evas_Object *obj, int x, int y, int w, int h); -EAPI Eina_Bool e_comp_object_damage_exists(Evas_Object *obj); -EAPI void e_comp_object_render_update_add(Evas_Object *obj); -EAPI void e_comp_object_render_update_del(Evas_Object *obj); -EAPI void e_comp_object_shape_apply(Evas_Object *obj); -EAPI void e_comp_object_redirected_set(Evas_Object *obj, Eina_Bool set); -EAPI void e_comp_object_native_surface_set(Evas_Object *obj, Eina_Bool set); -EAPI void e_comp_object_dirty(Evas_Object *obj); -EAPI Eina_Bool e_comp_object_render(Evas_Object *obj); -EAPI void e_comp_object_effect_set(Evas_Object *obj, const char *effect); -EAPI void e_comp_object_effect_params_set(Evas_Object *obj, int id, int *params, unsigned int count); -EAPI void e_comp_object_effect_clip(Evas_Object *obj); -EAPI void e_comp_object_effect_unclip(Evas_Object *obj); -EAPI void e_comp_object_effect_start(Evas_Object *obj, Edje_Signal_Cb end_cb, const void *end_data); -EAPI void e_comp_object_effect_stop(Evas_Object *obj, Edje_Signal_Cb end_cb); EAPI E_Comp_Object_Mover *e_comp_object_effect_mover_add(int pri, const char *sig, E_Comp_Object_Mover_Cb provider, const void *data); EAPI void e_comp_object_effect_mover_del(E_Comp_Object_Mover *prov); +#include "e_comp_object.eo.legacy.h" #endif #endif diff --git a/src/bin/e_deskmirror.c b/src/bin/e_deskmirror.c index c66a6fc4b..b34b9667c 100644 --- a/src/bin/e_deskmirror.c +++ b/src/bin/e_deskmirror.c @@ -319,7 +319,7 @@ _mirror_client_smart_del(Evas_Object *obj) Mirror_Border *mb = evas_object_smart_data_get(obj); if (mb->m->comp_object && mb->m->ec) { - e_comp_object_signal_callback_del_full(mb->m->ec->frame, "*", "*", _mirror_client_signal_cb, mb->frame); + edje_object_signal_callback_del_full(mb->m->ec->frame, "*", "*", _mirror_client_signal_cb, mb->frame); evas_object_smart_callback_del_full(mb->m->ec->frame, "shadow_change", _mirror_client_shadow_change, mb->frame); } evas_object_del(mb->frame); @@ -482,7 +482,7 @@ _mirror_client_new(Mirror *m) _mirror_client_theme_setup(mb); if (m->comp_object) { - e_comp_object_signal_callback_add(mb->m->comp_object, "*", "*", _mirror_client_signal_cb, mb->frame); + edje_object_signal_callback_add(mb->m->comp_object, "*", "*", _mirror_client_signal_cb, mb->frame); evas_object_smart_callback_add(mb->m->comp_object, "shadow_change", _mirror_client_shadow_change, mb->frame); evas_object_event_callback_add(m->comp_object, EVAS_CALLBACK_DEL, _e_deskmirror_mirror_del_cb, m); } @@ -778,7 +778,7 @@ e_deskmirror_mirror_list(Evas_Object *deskmirror) static void _mirror_copy_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) { - e_comp_object_signal_callback_del_full(data, "*", "*", _mirror_client_signal_cb, obj); + edje_object_signal_callback_del_full(data, "*", "*", _mirror_client_signal_cb, obj); evas_object_smart_callback_del_full(data, "shadow_change", _mirror_client_shadow_change, obj); } @@ -804,7 +804,7 @@ e_deskmirror_mirror_copy(Evas_Object *obj) edje_object_signal_emit(o, "e,state,shadow,off", "e"); if (mb->m->comp_object) { - e_comp_object_signal_callback_add(mb->m->comp_object, "*", "*", _mirror_client_signal_cb, o); + edje_object_signal_callback_add(mb->m->comp_object, "*", "*", _mirror_client_signal_cb, o); evas_object_smart_callback_add(mb->m->comp_object, "shadow_change", _mirror_client_shadow_change, o); evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _mirror_copy_del, mb->m->comp_object); } diff --git a/src/modules/ibar/e_mod_main.c b/src/modules/ibar/e_mod_main.c index bcda3f1b8..849804539 100644 --- a/src/modules/ibar/e_mod_main.c +++ b/src/modules/ibar/e_mod_main.c @@ -1240,7 +1240,7 @@ _ibar_cb_icon_menu_img_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, vo ec = evas_object_data_get(obj, "E_Client"); if (ec) { - e_comp_object_signal_callback_del_full(ec->frame, "e,state,*focused", "e", _ibar_cb_icon_menu_focus_change, data); + edje_object_signal_callback_del_full(ec->frame, "e,state,*focused", "e", _ibar_cb_icon_menu_focus_change, data); evas_object_smart_callback_del_full(ec->frame, "desk_change", _ibar_cb_icon_menu_desk_change, data); } evas_object_del(data); @@ -1308,7 +1308,7 @@ _ibar_icon_menu_client_add(IBar_Icon *ic, E_Client *ec) e_theme_edje_object_set(it, "base/theme/modules/ibar", "e/modules/ibar/menu/item"); img = e_comp_object_util_mirror_add(ec->frame); - e_comp_object_signal_callback_add(ec->frame, "e,state,*focused", "e", _ibar_cb_icon_menu_focus_change, it); + edje_object_signal_callback_add(ec->frame, "e,state,*focused", "e", _ibar_cb_icon_menu_focus_change, it); evas_object_smart_callback_add(ec->frame, "desk_change", _ibar_cb_icon_menu_desk_change, it); evas_object_event_callback_add(img, EVAS_CALLBACK_DEL, _ibar_cb_icon_menu_img_del, it);