Comment 74 for bug 411358

Revision history for this message
In , Jhorak (jhorak) wrote :

(In reply to Karl Tomlinson (:karlt) from comment #66)
> Comment on attachment 681454
> fix for gconf v2
>
> >+ /* This check is to avoid bug #541130 when old version of gnomevfs (2.16 tested)
> >+ is installed then error window pops up if scheme is containing '+' character.
> >+ Let's pretend these kind of schemes are not supported by gnomevfs. */
>
> Are you sure gnomevfs is involved in gconf_client_get_* calls?
> Can you point me at the GConf code that uses GnomeVFS, please?
Sorry, I've got confused with gnomevfs (for some reason I thought gconf was part of it). The comment is invalid. This is issue with gconf of course.
>
> > GError *err = nullptr;
> > gchar *command = gconf_client_get_string(mClient, key.get(), &err);
> > if (!err && command) {
> > key.Replace(key.Length() - 7, 7, NS_LITERAL_CSTRING("enabled"));
>
> Can you explain, please, why a dialog would be shown when there is a GError
> parameter passed to the gconf_client_get_* functions?
>
> (Removing review request for now until we understand what is happening.)

I've looked into it deeper into gconf code and it seems there's a bug with forwarding GError value:
gconf_client_get_string(GConfClient* client, const gchar* key,
                        GError** err)
{
  GError* error = NULL;
  GConfValue* val;

  g_return_val_if_fail (err == NULL || *err == NULL, NULL);

  val = gconf_client_get (client, key, error);

gconf_client_get (GConfClient* client,
                              const gchar* key,
                              GError** err)
{
  g_return_val_if_fail (GCONF_IS_CLIENT (client), NULL);
  g_return_val_if_fail (key != NULL, NULL);
  return gconf_client_get_full (client, key, NULL, TRUE, err);
}

See passing of error variable, it should most likely be:
  val = gconf_client_get (client, key, &error);

When the error is NULL the handle_error use gconf_client_unreturned_error to emit unreturned error signal which subsequently leads into showing the error message.

This is valid for older gconf2 library (in my case GConf2-2.14.0). So the patch is actually workaround for systems where these old libraries are. We should probably push on gconf2 package maintainers to fix this issue in gconf2.