-------- Original Message --------
Subject: Re: where is error? (Glib::spawn_async)
Date: Fri, 03 Nov 2006 14:11:46 +1100
From: Michael J M Thomson <[EMAIL PROTECTED]>
To: Jonathon Jongsma <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]>  
<[EMAIL PROTECTED]> 
<[EMAIL PROTECTED]>

Jonathon Jongsma wrote:
> On 11/2/06, Michael J M Thomson <[EMAIL PROTECTED]> wrote:
>> Paul Pogonyshev wrote:
>> > Hi.
>> >
>> > Where is error in this code fragment?
>> >
>> >       std::vector <std::string>  yelp_arguments;
>> >
>> >       yelp_arguments.push_back ("yelp");
>> >       yelp_arguments.push_back 
>> ("ghelp:///usr/share/gnome/help/gedit/C/gedit.xml");
>> >
>> >       try
>> >       {
>> >         Glib::spawn_async (".", yelp_arguments, std::vector 
>> <std::string> (),
>> >                            Glib::SPAWN_SEARCH_PATH);
>> >         return;
>> >       }
>> >       catch (Glib::Error& exception)
>> >       {
>> >         g_print ("%s...\n", exception.what ().c_str ());
>> >       }
>> >
>> > I get this in terminal:
>> >
>> >     (yelp:14036): Gtk-WARNING **: cannot open display:
>> >
>> > and Yelp window is never shown.
>> >
>> > Paul
>> > _______________________________________________
>> > gtkmm-list mailing list
>> > [email protected]
>> > http://mail.gnome.org/mailman/listinfo/gtkmm-list
>> >
>>
>> The third argument you're passing to Glib::spawn_async(),
>> std::vector<std::string>(), you shouldn't (and don't need to). It 
>> becomes the
>> set of environment variables seen by the spawned child, instead of 
>> those already
>> present in the parent process' environment. And while it may seem more 
>> secure or
>> neater or something to change it, some variables are vital, e.g. 
>> without DISPLAY
>> most Xlib-based programs won't work, and in GNOME's (and probably 
>> KDE's and
>> other desktops) case there are several variables that allow session 
>> management
>> and other desktop stuff to work properly. Non-GUI programs might also 
>> crap out,
>> if they rely on e.g. HOME or USER (even though they shouldn't). Not 
>> sure but Mac
>> OS X and probably Windows mightn't appreciate certain environment 
>> variables not
>> being set properly ,either.
>> _______________________________________________
>> gtkmm-list mailing list
>> [email protected]
>> http://mail.gnome.org/mailman/listinfo/gtkmm-list
>>
> 
> what makes you say that you don't need to pass the third parameter?
> the function expects a reference to an array here so you must pass it
> something.  Am I missing something?
> 

No I probably wasn't clear, sorry. Just there are several overloads of
Glib::spawn_async(), one of which doesn't expect that argument:

Glib::spawn_async(const std::string& working_directory,
                   const Glib::ArrayHandle<std::string>& argv,
                   SpawnFlags flags = SpawnFlags(0),
                   const sigc::slot<void>& child_setup = sigc::slot<void>(),
                   Pid* child_pid = 0);

Kind of makes sense IMHO, if you consider vector<string>() as equivalent to
passing an empty array (char* env[1] = { NULL }) rather than NULL.

_______________________________________________
gtkmm-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to