Hi,
On 07/04/13 12:49, bruno wrote:
when I click on magnet links in iceweasel, they don't get opened in
transmission; iceweasel says there's no protocol associated with that
kind of link. I checked transmission's trac, and it says that since
version 1.80 it should set the appropriate gnome preferences [1].
I checked my preferences with
gconf -R /desktop/gnome/url-hanlders/magnet
and nothing was set. I set them by hand and now it works. I suppose
debian's transmission doesn't do the right thing when it gets launched.
This is a bit weird. The version of Iceweasel in Wheezy should be able
to fetch handlers from GIO (AFAIU the code). Could you please compile
and run the attached little test program?
$ gcc `pkg-config --cflags --libs gio-unix-2.0 gconf-2.0` -o
test_handlers test_handlers.c
$ ./test_handlers magnet
Could you also please make a few tests with other protocol handlers? For
instance: vnc if you have vinagre installed, or ghelp if you have yelp,
or one of the many media protocols supported by totem. It should only be
a matter of typing in the protocol in the addressbar with a random
non-existent address, just to check if iceweasel starts the responsible
program (and if you manage to do this, please also note the output of
./test_handlers for the tested protocols).
I'll upload a new version to unstable with the GConf info as well, just
as a stopgap measure, but I believe this problem should be looked into a
bit further, since AFAICT Iceweasel shouldn't need the GConf info to
handle protocols.
[1] https://trac.transmissionbt.com/wiki/MagnetLinks
This page mentions transmission 1.80. Back then I believe there was no
GIO support in iceweasel, so the suggested solution was indeed the only
option. However, I don't think this is the case for the versions in
wheezy or newer (but I'm of course open to corrections from anyone more
familiar with iceweasel's code).
Cheers
--
Leo costela Antunes
[insert a witty retort here]
#include stdio.h
#include gconf/gconf.h
#include gconf/gconf-client.h
#include gio/gdesktopappinfo.h
int main(int argc, char *argv[]){
if(argc 2){
printf(must specify protocol as first argument\n);
return 1;
}
GAppInfo *app_info = g_app_info_get_default_for_uri_scheme(argv[1]);
if(app_info == NULL){
printf(no GIO handler found!\n);
} else {
printf(GIO handler: %s\n, g_app_info_get_commandline(app_info));
}
GConfClient *mClient = gconf_client_get_default();
GError *err = NULL;
char key[100];
sprintf(key, /desktop/gnome/url-handlers/%s/command, argv[1]);
gchar* gconf_handler = gconf_client_get_string(mClient, key, err);
if(err || !gconf_handler){
printf(no GConf handler found!\n);
} else {
printf(GConf handler: %s\n, gconf_handler);
}
return 0;
}