GTK позволяет открывать файлы с новым приложением vala
Я разрабатываю медиаплеер с Vala и хочу иметь возможность открывать аудиофайлы с помощью этого приложения (после его установки).
В файлы.descktop я добавил следующие типы MIME, чтобы указать, какие файлы можно открывать (это те же типы MIME, что и в banshee):
MimeType=application/musepack;application/ogg;application/rss+xml;application/vnd.emusic-emusic_list;application/x-ape;application/x-democracy;application/x-extension-m4a;application/x-extension-mp4;application/x-flac;application/x-flash-video;application/x-id3;application/x-linguist;application/x-matroska;application/x-miro;application/x-musepack;application/x-netshow-channel;application/x-ogg;application/x-quicktime-media-link;application/x-quicktimeplayer;application/x-shorten;application/x-troff-msvideo;application/xspf+xml;audio/3gpp;audio/AMR;audio/AMR-WB;audio/ac3;audio/ape;audio/avi;audio/basic;audio/flac;audio/midi;audio/mp;audio/mp2;audio/mp3;audio/mp4;audio/mp4a-latm;audio/mpc;audio/mpeg;audio/mpeg3;audio/mpegurl;audio/musepack;audio/ogg;audio/vorbis;audio/wav;audio/wave;audio/x-amzxml;audio/x-ape;audio/x-flac;audio/x-it;audio/x-m4a;audio/x-matroska;audio/x-mod;audio/x-mp;audio/x-mp3;audio/x-mpc;audio/x-mpeg;audio/x-mpeg-3;audio/x-mpegurl;audio/x-ms-asf;audio/x-ms-asx;audio/x-ms-wax;audio/x-ms-wma;audio/x-musepack;audio/x-ogg;audio/x-pn-aiff;audio/x-pn-au;audio/x-pn-wav;audio/x-pn-windows-acm;audio/x-s3m;audio/x-sbc;audio/x-scpls;audio/x-speex;audio/x-tta;audio/x-vorbis;audio/x-vorbis+ogg;audio/x-wav;audio/x-wavpack;audio/x-xm;image/avi;image/x-pict;misc/ultravox;text/google-video-pointer;text/x-google-video-pointer;text/x-opml+xml;video/3gpp;video/avi;video/dv;video/fli;video/flv;video/mp4;video/mp4v-es;video/mpeg;video/msvideo;video/ogg;video/quicktime;video/vivo;video/vnd.divx;video/vnd.vivo;video/x-anim;video/x-avi;video/x-flc;video/x-fli;video/x-flic;video/x-flv;video/x-m4v;video/x-matroska;video/x-mpeg;video/x-mpg;video/x-ms-asf;video/x-ms-wm;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvx;video/x-msvideo;video/x-nsv;video/x-ogm+ogg;video/x-theora;video/x-theora+ogg;x-scheme-handler/lastfm;x-scheme-handler/u1ms;
По этой причине приложение отображается в диалоговом окне "Открыть с помощью", когда я нажимаю на файл.
Затем в своем классе Gtk.Application я добавил в конструктор:
class SomeClass (string[] args) {
Object (application_id: "some.id", flags: ApplicationFlags.HANDLES_OPEN);
// do stuff...
}
И, наконец, я добавил "открытый" метод, который предлагается вызывать при открытии файла с помощью приложения:
public override void open (File[] files, string hint) {
// do stuff ...
}
Однако, когда я пытаюсь открыть файл.mp3 с моим приложением, появляется диалоговое окно, которое говорит:
"Нет никаких проблем, как у нас, так и у нас"
по-английски:
"Файлы или Uris не могут быть открыты с этим приложением"
Итак, мой вопрос: я что-то упустил?
Я добавил MIME-типы в файл descktop, активировал флаг "HANDLES_OPEN" и реализовал метод "open".
PD: я работаю с elementaryOS и устанавливаю свое приложение с системой сборки CMake.
1 ответ
В терминологии GLib/C: Вам необходимо подключить свою реализацию open
к GApplication
"s ::open
сигнал.
В терминологии Вала: см. Сигналы:
class Foo : Object {
public signal void some_event (); // definition of the signal
public void method () {
some_event (); // emitting the signal (callbacks get invoked)
}
}
void callback_a () {
stdout.printf ("Callback A\n");
}
void callback_b () {
stdout.printf ("Callback B\n");
}
void main () {
var foo = new Foo ();
foo.some_event.connect (callback_a); // connecting the callback functions
foo.some_event.connect (callback_b);
foo.method ();
}
...
Итак, в терминах Вала:
- Вам нужна ссылка на GLib.Application.
- Вам нужно позвонить
app.connect(open);
где-то, прежде чем ваш основной цикл начинает работать.