Saya mencari dokumentasi yang bagus (contoh, tutorial, atau panduan) tentang cara menambahkan dukungan menu global ke aplikasi non-gtk, non-qt. (Di gtk berfungsi 'secara ajaib' untuk menu utama ...). Toolkit yang ingin saya gunakan dengan ini adalah kivy , yang mendukung glib-mainloop (misalnya untuk gstreamer), jadi pada prinsipnya semua harus bekerja di sana.
Saya telah melihat referensi API Dbusmenu dan di sini , tapi itu tidak terlalu membantu untuk memahami mekanisme.
Ada contoh singkat untuk membuat daftar -peluncur yang berisi menu-dbus, tetapi tidak untuk menu-global / appmenu.
Ada halaman wiki yang tidak mengandung informasi yang relevan selain "Bekerja mendukung lainnya menu aplikasi pada toolkit lain akan diterima, tetapi bukan prioritas untuk tim DX, bantuan yang diinginkan."
Ada sedikit informasi dalam grafik ini dari kode sumber indikator-appmenu, tetapi tidak cukup, tidak dapat ditemukan di developer.ubuntu.com dan memerlukan penjelasan lebih lanjut:
Begitu:
- Bagaimana prosedur yang mendapat satu set item menu (Dbusmenu.Menuitem) untuk ditampilkan?
- Apa peran yang dimainkan klien dan server? (Manakah dari mereka yang seharusnya dijalankan dalam aplikasi saya? Atau keduanya?)
sumber
Jawaban:
Secara umum, saya akan merekomendasikan menggunakan toolkit yang didukung cara untuk menempatkan menu di menu global ... tapi, saya anggap sudah terlambat untuk meyakinkan Anda pada saat ini :-) Juga, saya akan perhatikan bahwa bahkan berpikir kami Sedang menggunakan Dbusmenu dan registrasi dalam 12,04 tujuannya adalah untuk pindah ke GMenuModel dan menandai jendela dengan menu-menu pada 14,04, sehingga informasi ini akan menjadi tanggal. Tentu saja, plug-in toolkit akan diperbarui ;-) (terakhir kali saya akan mencoba, saya janji)
Prinsip dasar yang terlibat adalah bahwa kita perlu tahu menu apa yang dikaitkan dengan jendela mana. Kami melacak jendela menggunakan XID-nya dan menunya adalah jalur ke Server Dbusmenu di DBus. Anda membutuhkan kedua informasi tersebut untuk mendaftar. Antarmuka registrasi cukup sederhana karena pada dasarnya Anda menyampaikan kedua informasi tersebut ke registrar. Nama pendaftar yang terkenal di DBus adalah com.canonical.AppMenu.Registrar .
Untuk contoh bagaimana ini bisa bekerja, Anda bisa melihat kode contoh mock-json-app yang ada di indikator-appmenu . Ini adalah alat kecil yang akan mengambil keluaran file JSON oleh dbusmenu-dumper (yang ada di libdbusmenu-tools ) dan membuat jendela yang mengklaim memiliki menu itu. Ini juga menangani hal-hal seperti crash appmenu, yang mungkin tidak benar-benar diperlukan untuk sebagian besar aplikasi (meskipun sangat penting dalam pengembangan :-)).
Untuk membuat Server Dbusmenu, Anda pada dasarnya hanya perlu mengalokasikan objek dan memberitahukannya di mana akan muncul di DBus (sehingga Anda dapat memberikan lokasi ke registrar). Untuk plugin seperti appmenu-gtk, kami menggunakan jalur yang dibuat sehingga tidak ada konflik, tetapi jika Anda mengendalikan aplikasi, Anda mungkin dapat menggunakan jalur tetap. Kemudian Anda membuat struktur pohon objek Dbusmenu Menuitem . Root tidak ditampilkan, tetapi diteruskan ke Server Dbusmenu untuk memulai menu. Tingkat pertama di bawah root akan ditampilkan sebagai item di Ubuntu Menubar .
Semoga beruntung, terima kasih kepada semua orang yang melecehkan saya untuk menjawab pertanyaan ini. Saya masih percaya bahwa Anda harus menggunakan dukungan toolkit (saya berbohong tentang itu yang terakhir kali), tapi semoga berhasil!
sumber
Sayangnya, Anda tidak akan menemukan dokumen yang ramah untuk itu. Menu global dikembangkan dengan mempertimbangkan GTK dan Qt dan, walaupun secara teori dimungkinkan untuk menerapkan dukungan untuk webkit lain karena protokol berbasiskan DBus, ada sedikit upaya dalam membuat dokumentasi tersedia.
Pointer terbaik yang bisa saya berikan adalah kode sumber indikator-appmenu dan plasma-widget-menubar . Anda dapat membacanya untuk memahami cara kerja protokol dbus.
sumber
Anda dapat menggunakan binding python-dbus, dan menggunakan API yang didokumentasikan di http://developer.ubuntu.com/api/ubuntu-12.04/python/Dbusmenu-0.4.html untuk DbusMenu, untuk diintegrasikan dengan bilah menu global.
sumber