Libxfce4ui spawn api break

Nick Schermer nickschermer at
Mon Nov 2 11:35:29 CET 2009

2009/11/1 Brian J. Tarricone <brian at>:
> Hash: SHA1
> On 11/01/2009 02:41 PM, Nick Schermer wrote:
>> It turns out returning the pid is not useful, because you can create
>> only 1 child watch per pid and we already need a child watch for
>> handling startup notification.
>> I though about adding a GChildWatchFunc and gpointer, which could be
>> called from the child watch we connect, but then there is not way to
>> disconnect the function, so that is not really a solution either.
> Oh hmm, yeah, that kinda sucks.  Stupid glib.
> Well, I guess it depends on how much work you want to do...  We could
> create a xfce_add_child_watch() that *does* allow more than one child
> watch (just store a list of callbacks in a hash table keyed by pid), and
> put that in libxfce4util.
> Not sure that's really a good idea, though... I hate adding new API for
> a one-off need.

Well right now it's only 1 place where we need it, but it's not
uncommon to watch a child. Not that I agree we should add a lot of api
for it, but still.

Another option would be a function that returns the XfceSpawnData on
succeed. Normally we free the data when the spawn is completed, but as
an alternative we could not free the data and leave that to the owner
(when the _full function is called).

XfceSpawnData *
xfce_spawn_on_screen_full (...);

xfce_spawn_set_callback (XfceSpawnData *data,
                                        GChildWatchFunc function,
                                        gpointer data,
                                        GDestroyNotify notify);

xfce_spawn_disconnect (XfceSpawnData *data);

Not a free function since the spawn could still be running, so
disconnect will unset the users' callbacks and enable auto-freeing
again or directly free if the spawn was completed. That is not a lot
of work, more like splitting the current code a bit.


More information about the Xfce4-dev mailing list