Genel menü için gtt olmayan, qt olmayan bir uygulamaya python desteği nasıl eklenir?


24

Gtk olmayan, qt olmayan bir uygulamaya genel menü desteğinin nasıl ekleneceğine dair iyi belgeler (örnek, öğretici veya kılavuz) arıyorum. (Gtk ana menü için 'sihirli' olarak çalışır ...). Ben bu kullanmak istediğiniz araç olduğunu kivy glib-mainloop (örn gstreamer için) destekleyen, böylece prensipte tüm orada çalışmalıdır.

Dbusmenu'nun API referansını gördüm ve burada , ancak mekanizmaların anlaşılmasında çok yardımcı olmuyor.

Genel menü / uygulama için değil, bir dbus menüsü içeren başlatıcı hızlı listesi oluşturmak için kısa bir örnek var .

Var "Diğer araç setlerinde uygulama menüsünü destekleme konusunda çalışmak hoşuna gider, ancak DX ekibi için yardım istenmez" den başka bir bilgi içermeyen wiki sayfası vardır.

Bu grafikte gösterge-appmenu kaynak kodundan küçük bir bilgi var, ancak bu yeterli değil, developer.ubuntu.com'da bulunamıyor ve daha fazla açıklama gerektiriyor:

görüntü tanımını buraya girin

Yani:

  • Görüntülenecek bir dizi menü öğesinin (Dbusmenu.Menuitem) alınması prosedürü nedir?
  • İstemcinin ve sunucunun rolü nedir? (Bunlardan hangisinin benim başvurumda çalıştırılması gerekiyor?

Benzer soru


Belki kullandığınız araç kitini ekleyebilirsiniz.
Timo

Tabii ki: bu kivy araç kiti.
xubuntix

1
Bence bu sorunun kanonik bir cevaba ihtiyacı var.
Takyonlar

Başlangıçta, dbusmenu-glib (örneğin Ted Gould), hatta libdbusmenu-qt (Aurelien Gateau) yazarlarının zamanlarının bir kısmını kodlarının dokümanlarını yazarak geçirebileceklerini ummuştum. Ancak 4 aylık bekleme süresinden sonra hiçbir şey olmadı. Bu yüzden, en iyi ikinci seçeneği denedim, adım atmak için itibarımla uyuşan bir topluluğa 'rüşvet vermeye' çalıştım. Bu da işe yaramadı gibi görünüyor ...
xubuntix

@ xubuntix, doğrudan Ted ( gould.cx/ted/blog ) ve aurelien ( agateau.com/about-me ) ile iletişime geçmenizi önerir
fossfreedom

Yanıtlar:


14

Genel olarak, menüleri global menü çubuğuna koymak için araç setinin desteklediği yolları kullanmanızı öneririm ... ama, sizi bu noktada ikna etmek için çok geç olduğunu farz ediyorum :-) Dbusmenu'yu kullanıyor ve 12.04'te tescili hedefliyoruz, GMenuModel'e geçmek ve pencereyi menüleri ile 14.04'e kadar işaretlemek, böylece bu bilgiler tarihlenecek. Tabii ki, araç eklentileri güncellenecektir ;-) (deneyeceğim, son kez söz veriyorum)

İçerdiği temel ilke, hangi menülerin hangi pencereyle ilişkilendirildiğini bilmemiz gerektiğidir. Pencereyi XID kullanarak izliyoruz ve menüler DBus'taki Dbusmenu Sunucusunun bir yolu. Kayıt olmak için bu iki bilgi parçasına da ihtiyacınız olacak. Kayıt arayüzü oldukça basit , çünkü bu iki bilgiyi de kayıt şirketine iletin. Kayıt şirketinin DBus'ta iyi bilinen adı com.canonical.AppMenu.Registrar'dır. .

Bunun nasıl işe yarayabileceğine dair bir örnek için, gösterge-uygulama menüsünde bulunan mock-json-app örnek koduna bakabilirsiniz . Bu, JSON dosya çıktısını dbusmenu-damper ( libdbusmenu-tools içinde) alan küçük bir araçtır. ) tarafından alacak ve o menüye sahip olduğunu iddia eden bir pencere . Aynı zamanda, çoğu uygulama için gerçekten gerekmeyebilecek olan appmenu çöküşü gibi şeyleri de ele alır (gerçekte geliştirme için gerçekten önemlidir :-)).

Bir Dbusmenu Sunucusu oluşturmak için temel olarak sadece nesneyi ayırmanız ve DBus'ta nerede görüneceğini söylemeniz gerekir (böylece konumu kayıt memuruna verebilirsiniz). Appmenu-gtk gibi eklentiler için , herhangi bir çakışma olmaması için üretilen bir yol kullanırız, ancak uygulamayı kontrol ediyorsanız muhtemelen sabit bir yol kullanabilirsiniz. Daha sonra Dbusmenu Menuitem nesnelerinin bir ağaç yapısını yaratırsınız . Kök olan gösterilmez, ancak menüleri başlatmak için Dbusmenu Sunucusuna iletilir . Kökün altındaki ilk seviye, Ubuntu Menubar'ın karşısındaki öğeler olarak gösterilecektir .

İyi şanslar, bu soruyu cevaplamam için beni rahatsız eden herkese teşekkürler. Hala araç desteği desteğini kullanmanız gerektiğine inanıyorum (son kez olduğu hakkında yalan söyledim), ama iyi şanslar!


1
Çok teşekkür ederim! Ve sizi rahatsız eden herkese teşekkürler :-) Araç kiti sorusuna gelince: Araç kiti desteğini kullanmayı çok isterdim, ama Kivy için bir şey yok. Ve sadece menü için araç kitlerini değiştirmeyeceğim ... GMenuModel'e geçiş, diğer araç kitleriyle birlikte kullanılmasını imkansız hale getirecek mi?
xubuntix

GMenuModel, destek doğrudan GLib'da olduğu için birçok araç setinde yukarı akış işlemini kolaylaştıracak, bu nedenle bazı araç seti bakımcılarını rahatsız eden ek bir bağımlılık olmamıştır.
Ted Gould

@TedGould Harika cevap Ted! Ancak, GTK'sız bir örnek var mı? Mümkün olduğunca yalnızca Xlib kullanmaya yakın olan ve başka hiçbir şey olmayan bir şey? Verdiğiniz sahte-json-app örneği, eğer biri Gtk kullanıyorsa, harika; eğer X11 doğrudan kullanılıyorsa (veya başka bir araç takımı) çok fazla değil. Yalnızca Glib, libdbusmenu-glib ve X11 kullanan bir şeyler bir araya getirmeye çalışıyorum ama başım derde giriyor gibi görünüyor. Benim hedeflerim? Bir SDL uygulamasına destek eklemekle ilgileniyorum ve sürekli dbusmenu desteği olmayan GNUstep uygulamalarını düşünüyorum.
Ivan Vučica

1
@TedGould Girişim burada bitti: bitbucket.org/ivucica/minidbus-menu Umarım siz (ya da başkası!) Koda bir göz atmak ve menünün neden görünmediğini görmek için birkaç dakikanız olacak ve neden başlık çubuğu "Hud" diyor. :-)
Ivan Vučica

Görünüşe göre C kodumu 12.04 altında çalışacağım. Menüye bağımsız öğeler eklemeye çalışmamalıydım; onları başka bir menü öğesinin alt öğesi olarak ekledi, şimdi çalışıyor. Serin;)
Ivan Vučica 24:13

0

Ne yazık ki, bunun için uygun bir belge bulamayacaksınız. Global menü, GTK ve Qt göz önünde bulundurularak geliştirilmiştir ve protokol DBus tabanlı olduğundan, diğer web kitlerine destek uygulamak teorik olarak mümkün olsa da, dokümantasyonun sağlanmasında çok az çaba vardı.

Size verebileceğim en iyi işaretçiler gösterge-appmenu ve plasma-widget- menubar'ın kaynak kodlarıdır . Dbus protokolünün nasıl çalıştığını anlamak için bunları okuyabilirsiniz.


1
Bazı temsili vakalarda dbus-monitörü sohbeti izlemek için de yardımcı olabilir mi? Dbusmenu veya bilmek için dbus izlemek hakkında yeterince bilgim yok, ancak bunu yapan birinden bazı örnekler görmeyi çok isterim.
nealmcb

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.