Hi; Le dimanche 05 août 2007 à 10:04 +0100, Matthew Allum a écrit :
> Hi; > > On Sun, 2007-08-05 at 09:13 +0100, Emmanuele Bassi wrote: > > On Sat, 2007-08-04 at 18:05 -0400, Pierre-Luc Beaudoin wrote: > > > Hi, > > > > > > I began porting Sofa to Clutter 0.4. Unfortunately it didn't work > > > right off the box. I suspect clutter_actor_show_all() has a different > > > behavior between 0.2 and 0.4. > > Right I think there was some confusing in adding actor_show_all as it > behaved differently to the original group_show_all (i.e. recursing). We > then sorted that so both non recursed - sorry for confusion. If that's how it will be in the future, I'll make the proper changes to my app where needed. > > I have my actors grouped in 3 levels: > > > > > > MenuList -> Menu -> Label > > > > > > In 0.2, I only had to clutter_actor_show_all() on MenuList to have all > > > the menu show up. Now in 0.4, after a good search ;), I found out I > > > have to do a clutter_actor_show_all() on each menu. > > > > in 0.2, clutter_actor_show_all() was recursive on every actor; in 0.3 it > > was changed not to be recursive on ClutterGroup actors because you'll > > get every single actor shown at the same time -- which may or may not be > > what you want; for instance, you might add a "spinner" texture to your > > group but decide for yourself whether to hide it or not. > > > > you can override this behaviour, though: instead of directly using a > > ClutterGroup, you can subclass it and override the ClutterActor > > methods ::show_all() and ::hide_all() to be recursive; in Python it > > means you have to provide a do_show_all() and a do_hide_all() methods in > > your class, something like: > > > > Yes. In what you describe above you probably want the Menu as its own > actor subclass (composting a number of sub actors) and then overiding > show_all (or just show) to do exactly what you want. > > > > It might be a performance improvement, but I preferred the previous > > > behavior... what do you think? > > > > we are nearing 0.4, so further API churning would delay the release; my > > personal take on this is: > > > > * make clutter_actor_show_all() and clutter_actor_hide_all() > > recursive on every container - except for the stage; > > * add a CLUTTER_ACTOR_NO_SHOW_ALL flag to be set on actors > > we absolutely don't want to show even when we call > > clutter_actor_show_all(); > > > > this would solve the issue with the expected behaviour of a show_all() > > method; for more complex behaviour, subclassing and overriding are > > always an option. > > > > I dunno, either way has its advantages and disadvantages. Id rather > stick with what we have now and make sure its clearly documented. > I did compare the doc between 0.2 and 0.4 and the text is exactly the same, even though the behavior was different. I think the text is clear enough on how it behaves. In fact, there could be a note: "Reimplemented in 0.4 to correct behavior." to warn porters. Thanks for your time. > -- Matthew > Pierre-Luc
