Mike, ffs, start conforming to the commit guidelines.
As for the content itself, it's very wrong and ugly. Why the fuck would you add a new internal parameter to a user facing function? I will fix this solution, though I suspect there are better solutions in general. -- Tom. On 10/01/15 05:32, Mike Blumenkrantz wrote: > discomfitor pushed a commit to branch master. > > http://git.enlightenment.org/core/elementary.git/commit/?id=63a5cdf0f8516c16a62233da0c2af0e10a13264b > > commit 63a5cdf0f8516c16a62233da0c2af0e10a13264b > Author: Mike Blumenkrantz <[email protected]> > Date: Sat Jan 10 00:33:55 2015 -0500 > > +elm_win_fake(), ELM_WIN_FAKE type > > this is a giant hack to provide widget parenting in e. do not use this > function, do not use this type, do not even read the related documentation. > > @feature > --- > src/lib/elm_win.c | 73 > +++++++++++++++++++++++++++++------------------- > src/lib/elm_win.eo | 1 + > src/lib/elm_win_common.h | 4 +++ > src/lib/elm_win_legacy.h | 19 +++++++++++++ > 4 files changed, 69 insertions(+), 28 deletions(-) > > diff --git a/src/lib/elm_win.c b/src/lib/elm_win.c > index e5de5e8..3de1efd 100644 > --- a/src/lib/elm_win.c > +++ b/src/lib/elm_win.c > @@ -21,10 +21,11 @@ static const Elm_Win_Trap *trap = NULL; > #define TRAP(sd, name, ...) \ > do \ > { \ > - if ((!trap) || (!trap->name) || \ > - ((trap->name) && \ > - (trap->name(sd->trap_data, sd->obj, ## __VA_ARGS__)))) \ > - ecore_evas_##name(sd->ee, ##__VA_ARGS__); \ > + if (sd->type != ELM_WIN_FAKE) \ > + if ((!trap) || (!trap->name) || \ > + ((trap->name) && \ > + (trap->name(sd->trap_data, sd->obj, ## __VA_ARGS__)))) \ > + ecore_evas_##name(sd->ee, ##__VA_ARGS__); \ > } \ > while (0) > > @@ -1946,6 +1947,7 @@ _elm_win_xwin_update(Elm_Win_Data *sd) > { > const char *s; > > + if (sd->type == ELM_WIN_FAKE) return; > _internal_elm_win_xwindow_get(sd); > if (sd->parent) > { > @@ -2908,10 +2910,16 @@ elm_win_add(Evas_Object *parent, > const char *name, > Elm_Win_Type type) > { > - Evas_Object *obj = eo_add(MY_CLASS, parent, elm_obj_win_constructor(name, > type)); > + Evas_Object *obj = eo_add(MY_CLASS, parent, elm_obj_win_constructor(name, > type, NULL)); > return obj; > } > > +EAPI Evas_Object * > +elm_win_fake(Ecore_Evas *ee) > +{ > + return eo_add(MY_CLASS, NULL, elm_obj_win_constructor(NULL, ELM_WIN_FAKE, > ee)); > +} > + > static void > _elm_win_cb_hide(void *data EINA_UNUSED, > Evas *e EINA_UNUSED, > @@ -3008,7 +3016,7 @@ _accel_is_gl(void) > } > > EOLIAN static void > -_elm_win_constructor(Eo *obj, Elm_Win_Data *sd, const char *name, > Elm_Win_Type type) > +_elm_win_constructor(Eo *obj, Elm_Win_Data *sd, const char *name, > Elm_Win_Type type, Ecore_Evas *oee) > { > sd->obj = obj; // in ctor > > @@ -3027,6 +3035,9 @@ _elm_win_constructor(Eo *obj, Elm_Win_Data *sd, const > char *name, Elm_Win_Type t > > switch (type) > { > + case ELM_WIN_FAKE: > + tmp_sd.ee = oee; > + break; > case ELM_WIN_INLINED_IMAGE: > if (!parent) break; > { > @@ -3366,7 +3377,7 @@ _elm_win_constructor(Eo *obj, Elm_Win_Data *sd, const > char *name, Elm_Win_Type t > SD_CPY(shot.info); > #undef SD_CPY > > - if ((trap) && (trap->add)) > + if ((type != ELM_WIN_FAKE) && (trap) && (trap->add)) > sd->trap_data = trap->add(obj); > > /* complementary actions, which depend on final smart data > @@ -3438,31 +3449,35 @@ _elm_win_constructor(Eo *obj, Elm_Win_Data *sd, const > char *name, Elm_Win_Type t > /* use own version of ecore_evas_object_associate() that does TRAP() */ > ecore_evas_data_set(sd->ee, "elm_win", obj); > > - evas_object_event_callback_add > - (obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, > - _elm_win_obj_callback_changed_size_hints, obj); > - > - evas_object_intercept_raise_callback_add > - (obj, _elm_win_obj_intercept_raise, obj); > - evas_object_intercept_lower_callback_add > - (obj, _elm_win_obj_intercept_lower, obj); > - evas_object_intercept_stack_above_callback_add > - (obj, _elm_win_obj_intercept_stack_above, obj); > - evas_object_intercept_stack_below_callback_add > - (obj, _elm_win_obj_intercept_stack_below, obj); > - evas_object_intercept_layer_set_callback_add > - (obj, _elm_win_obj_intercept_layer_set, obj); > - evas_object_intercept_show_callback_add > - (obj, _elm_win_obj_intercept_show, obj); > + if (type != ELM_WIN_FAKE) > + { > + evas_object_event_callback_add(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, > + _elm_win_obj_callback_changed_size_hints, obj); > + evas_object_intercept_raise_callback_add > + (obj, _elm_win_obj_intercept_raise, obj); > + evas_object_intercept_lower_callback_add > + (obj, _elm_win_obj_intercept_lower, obj); > + evas_object_intercept_stack_above_callback_add > + (obj, _elm_win_obj_intercept_stack_above, obj); > + evas_object_intercept_stack_below_callback_add > + (obj, _elm_win_obj_intercept_stack_below, obj); > + evas_object_intercept_layer_set_callback_add > + (obj, _elm_win_obj_intercept_layer_set, obj); > + evas_object_intercept_show_callback_add > + (obj, _elm_win_obj_intercept_show, obj); > + } > > TRAP(sd, name_class_set, name, _elm_appname); > ecore_evas_callback_delete_request_set(sd->ee, _elm_win_delete_request); > - ecore_evas_callback_resize_set(sd->ee, _elm_win_resize); > - ecore_evas_callback_mouse_in_set(sd->ee, _elm_win_mouse_in); > - ecore_evas_callback_focus_in_set(sd->ee, _elm_win_focus_in); > - ecore_evas_callback_focus_out_set(sd->ee, _elm_win_focus_out); > - ecore_evas_callback_move_set(sd->ee, _elm_win_move); > ecore_evas_callback_state_change_set(sd->ee, _elm_win_state_change); > + if (type != ELM_WIN_FAKE) > + { > + ecore_evas_callback_resize_set(sd->ee, _elm_win_resize); > + ecore_evas_callback_mouse_in_set(sd->ee, _elm_win_mouse_in); > + ecore_evas_callback_focus_in_set(sd->ee, _elm_win_focus_in); > + ecore_evas_callback_focus_out_set(sd->ee, _elm_win_focus_out); > + ecore_evas_callback_move_set(sd->ee, _elm_win_move); > + } > evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE, > _elm_win_cb_hide, NULL); > evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, > _elm_win_cb_show, NULL); > > @@ -3483,6 +3498,8 @@ _elm_win_constructor(Eo *obj, Elm_Win_Data *sd, const > char *name, Elm_Win_Type t > _elm_win_xwin_update(sd); > #endif > > + /* do not append to list; all windows render as black rects */ > + if (type == ELM_WIN_FAKE) return; > _elm_win_list = eina_list_append(_elm_win_list, obj); > _elm_win_count++; > > diff --git a/src/lib/elm_win.eo b/src/lib/elm_win.eo > index 76e317b..9cea8ea 100644 > --- a/src/lib/elm_win.eo > +++ b/src/lib/elm_win.eo > @@ -1193,6 +1193,7 @@ class Elm_Win (Elm_Widget, Elm_Interface_Atspi_Window, > params { > @in const(char)* name; > @in Elm_Win_Type type; > + @in Ecore_Evas *oee; > } > } > wm_manual_rotation_done_manual { > diff --git a/src/lib/elm_win_common.h b/src/lib/elm_win_common.h > index 5b5b6ff..7e45a3a 100644 > --- a/src/lib/elm_win_common.h > +++ b/src/lib/elm_win_common.h > @@ -69,6 +69,10 @@ typedef enum > instead the window and all of its contents will be > rendered to an image buffer and can be shown > other process's plug image object*/ > + ELM_WIN_FAKE /**< This window was created using a pre-existing canvas. > + The window widget can be deleted, but the canvas > + must be managed externally. > + @since 1.13 */ > } Elm_Win_Type; > > /** > diff --git a/src/lib/elm_win_legacy.h b/src/lib/elm_win_legacy.h > index a6f0c2b..e32f274 100644 > --- a/src/lib/elm_win_legacy.h > +++ b/src/lib/elm_win_legacy.h > @@ -17,6 +17,25 @@ > EAPI Evas_Object *elm_win_add(Evas_Object *parent, const char > *name, Elm_Win_Type type); > > /** > + * Creates a fake window object using a pre-existing canvas. > + * > + * @param ee The Ecore_Evas to use > + * > + * The returned window widget will not manage or modify the canvas; > + * this canvas must continue to be managed externally. > + * > + * Do not use this function if you are not writing a window manager. > + * @warning Exact behaviors of this function are not guaranteed. > + * > + * @return The created object, or @c NULL on failure > + * > + * @ingroup Win > + * > + * @since 1.13 > + */ > +EAPI Evas_Object *elm_win_fake(Ecore_Evas *ee); > + > +/** > * Adds a window object with standard setup > * > * @param name The name of the window > ------------------------------------------------------------------------------ New Year. New Location. New Benefits. New Data Center in Ashburn, VA. GigeNET is offering a free month of service with a new server in Ashburn. Choose from 2 high performing configs, both with 100TB of bandwidth. Higher redundancy.Lower latency.Increased capacity.Completely compliant. vanity: www.gigenet.com _______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
