एक गैर-gtk, गैर-क्यूटी ऐप के लिए वैश्विक मेनू के लिए समर्थन कैसे जोड़ें?


24

मैं गैर-gtk, गैर-qc अनुप्रयोग में वैश्विक मेनू समर्थन को जोड़ने के तरीके पर अच्छे प्रलेखन (उदाहरण, ट्यूटोरियल या गाइड) की तलाश कर रहा हूं। (Gtk में यह मुख्य मेनू के लिए 'जादुई रूप से' काम करता है ...)। मैं जिस टूलकिट के साथ इसका उपयोग करना चाहता हूं वह किवी है , जो ग्लिब -मेनलूप (जैसे कि गॉस्ट्रीमर ) का समर्थन करता है, इसलिए सिद्धांत रूप में सभी को वहां काम करना चाहिए।

मैंने Dbusmenu और यहाँ का एपीआई संदर्भ देखा है , लेकिन यह तंत्र को समझने के लिए बहुत मददगार नहीं है।

लॉन्चर -मेनू बनाने के लिए एक छोटा उदाहरण है जिसमें एक डब-मेन्यू है, लेकिन ग्लोबल-मेन्यू / अप्पमू के लिए नहीं।

एक विकी पृष्ठ होता है जिसमें कोई अन्य प्रासंगिक जानकारी नहीं होती है, फिर "अन्य टूलकिट पर अन्य एप्लिकेशन मेनू का समर्थन करने पर काम स्वागत योग्य होगा, लेकिन डीएक्स टीम के लिए प्राथमिकता नहीं, मदद करना चाहता था।"

संकेतक-एपमेनू स्रोत कोड से इस ग्राफिक में थोड़ी जानकारी है, लेकिन इसके पर्याप्त नहीं है, इसे developer.ubuntu.com पर नहीं पाया जा सकता है और अधिक स्पष्टीकरण की आवश्यकता है:

यहाँ छवि विवरण दर्ज करें

इसलिए:

  • वह कौन सी प्रक्रिया है जिसे प्रदर्शित करने के लिए मेनू आइटम (Dbusmenu.Menuitem) का एक सेट मिलता है?
  • क्लाइंट और सर्वर क्या भूमिका निभाते हैं? (मेरे आवेदन में उन में से किसे माना जाता है? या दोनों?)

इसी तरह का सवाल


हो सकता है कि आप अपने द्वारा उपयोग किए जा रहे टूलकिट को जोड़ सकते हैं।
तैमू

यकीन है: यह कीवी टूलकिट है।
xubuntix

1
मुझे लगता है कि इस सवाल के लिए विहित का जवाब चाहिए।
टैकियन्स

शुरू में मुझे उम्मीद थी कि dbusmenu-glib (उदाहरण के टेड गोल्ड) के लेखक, या यहां तक ​​कि libdbusmenu-qt (Aurelien Gateau) अपने कोड के प्रलेखन लिखने में अपना कुछ समय बिता सकते हैं। लेकिन 4 महीने के इंतजार के बाद भी कुछ नहीं हुआ। इसलिए मैंने दूसरे सबसे अच्छे विकल्प की कोशिश की, जिसमें मेरी प्रतिष्ठा के साथ कदम बढ़ाने के लिए समुदाय को 'रिश्वत' देने की कोशिश की गई। ऐसा लगता है कि यह भी काम नहीं करता ...
xubuntix

@xubuntix सुझाव है कि आप टेड (संपर्क gould.cx/ted/blog ) और ऑरेलीन ( agateau.com/about-me ) सीधे
fossfreedom

जवाबों:


14

सामान्य तौर पर, मैं वैश्विक मेनूबार में मेनू डालने के लिए टूलकिट समर्थित तरीके का उपयोग करने की सलाह दूंगा ... लेकिन, मैं यह मानने में बहुत देर कर रहा हूं कि इस बिंदु पर आपको समझाने में बहुत देर हो जाएगी :-) साथ ही, मैं यह भी नोट करूंगा कि हमने भी सोचा था 12.04 में Dbusmenu और पंजीकरण का उपयोग करते हुए लक्ष्य GMenuModel पर जाना है और 14.04 तक इसके मेनू के साथ विंडो को चिह्नित करना है, इसलिए यह जानकारी दिनांकित हो जाएगी। बेशक, टूलकिट प्लग-इन को अपडेट किया जाएगा ;-) (आखिरी बार जब मैं कोशिश करूँगा, मैं वादा करता हूँ)

इसमें शामिल मूल सिद्धांत यह है कि हमें यह जानना होगा कि कौन से मेनू किस विंडो से जुड़े हैं। हम इसकी XID का उपयोग करके विंडो को ट्रैक करते हैं और मेनू DBus पर Dbusmenu सर्वर के लिए एक मार्ग है। पंजीकरण के लिए आपको उन दोनों जानकारी की आवश्यकता होगी। पंजीकरण इंटरफ़ेस बहुत सरल है कि आप मूल रूप से रजिस्ट्रार को सूचना के उन दोनों टुकड़ों को पास करते हैं। DBus पर रजिस्ट्रार की अच्छी तरह से ज्ञात नाम है com.canonical.AppMenu.Registrar

यह कैसे अपने आप को देखो कर सकते हैं काम कर सकते हैं का एक उदाहरण के लिए नकली json-ऐप नमूना कोड में है कि सूचक-appmenu । यह एक छोटा सा टूल है जो dbusmenu-dumper (जो कि libdbusmenu-tools में है ) द्वारा JSON फाइल आउटपुट लेगा और एक विंडो बनाएगा जो उस मेनू का दावा करती है। यह अप्पमुनु दुर्घटनाग्रस्त होने जैसी चीजों को भी संभालता है, जो कि वास्तव में अधिकांश एप्लिकेशन के लिए आवश्यक नहीं हो सकता है (हालांकि विकास :-) में वास्तव में महत्वपूर्ण है)।

Dbusmenu सर्वर बनाने के लिए, आपको मूल रूप से ऑब्जेक्ट को आवंटित करने की आवश्यकता है और यह बताएं कि DBus पर कहां प्रदर्शित होना है (इसलिए आप रजिस्ट्रार को स्थान दे सकते हैं)। Appmenu-gtk जैसे प्लगइन्स के लिए हम एक उत्पन्न पथ का उपयोग करते हैं ताकि कोई संघर्ष न हो, लेकिन यदि आप एप्लिकेशन को नियंत्रित कर रहे हैं तो आप निश्चित पथ का उपयोग कर सकते हैं। फिर आप Dbusmenu Menuitem ऑब्जेक्ट्स की ट्री संरचना बनाएँ । रूट एक नहीं दिखाया गया है, लेकिन मेनू को शुरू करने के लिए Dbusmenu सर्वर को पास किया गया है । रूट का पहला लेवल बलो को उबंटू मेनूबार में आइटम के रूप में दिखाया जाएगा ।

सौभाग्य, उन सभी लोगों का धन्यवाद जिन्होंने मुझे इस सवाल का जवाब देने के लिए परेशान किया। मुझे अभी भी विश्वास है कि आपको टूलकिट समर्थन का उपयोग करना चाहिए (मैंने पिछली बार होने के बारे में झूठ बोला था), लेकिन शुभकामनाएँ!


1
आपका बहुत बहुत धन्यवाद! और उन सभी लोगों के लिए धन्यवाद जिन्होंने आपको परेशान किया: टूलकिट प्रश्न के रूप में: मैं टूलकिट समर्थन का उपयोग करना पसंद करूंगा, लेकिन किवी के लिए कोई नहीं है। और मैं सिर्फ मेनू के लिए टूलकिट स्विच नहीं करूँगा ... क्या GMenuModel पर स्विच करना अन्य टूलकिट के साथ इसका उपयोग करना असंभव बना देगा?
xubuntix

GMenuModel कई टूलकिट में अपस्ट्रीम करना आसान बना देगा क्योंकि समर्थन सीधे GLib में है इसलिए अतिरिक्त निर्भरता नहीं है, जो कुछ टूलकिट मेंटेनर को परेशान करता है।
टेड गोल्ड

@TedGould शानदार जवाब, टेड! हालांकि, क्या कोई जीटीके-कम उदाहरण है? संभव के रूप में केवल Xlib का उपयोग करने के करीब है, और कुछ नहीं? यदि आपने जो Gtk का उपयोग किया है वह नकली-json-app उदाहरण बहुत अच्छा है; इतना नहीं अगर X11 को सीधे इस्तेमाल किया जाता है (या कोई अन्य टूलकिट)। मैं एक साथ कुछ करने की कोशिश कर रहा हूं जिसमें केवल ग्लिब, लिबडबसमेनु-ग्लिब और एक्स 11 का उपयोग होता है, लेकिन ऐसा लगता है कि मैं मुसीबत में चल रहा हूं। मेरा लक्ष्य? मैं एक SDL ऐप में समर्थन जोड़ने में दिलचस्पी रखता हूं, और मैं लगातार सोच रहा हूं कि GNUstep ऐप्स को dbusmenu का समर्थन नहीं मिल रहा है।
इवान वुज़िका

1
@TedGould मेरा प्रयास यहां समाप्त हो गया है: bitbucket.org/ivucica/minidbus-menu उम्मीद है कि आप (या किसी और!) के पास कोड को देखने के लिए कुछ मिनट होंगे और देखें कि मेनू दिखाई क्यों नहीं देता, और क्यों! टाइटलबार "हड" कहता है। :-)
इवान वूइका

ऐसा लगता है कि मुझे अपना C कोड 12.04 के तहत काम करने के लिए मिला। मुझे मेनू में स्टैंडअलोन आइटम जोड़ने की कोशिश नहीं करनी चाहिए थी; उन्हें किसी अन्य मेनू आइटम के उप-संस्करण के रूप में जोड़ा गया, यह अब काम करता है। कूल;)
इवान वुज़िका

0

दुर्भाग्य से, आपको उसके लिए एक अनुकूल दस्तावेज नहीं मिलेगा। वैश्विक मेनू को GTK और Qt को ध्यान में रखकर विकसित किया गया था, जबकि सैद्धांतिक रूप से अन्य वेबकिट्स के लिए समर्थन लागू करना संभव है क्योंकि प्रोटोकॉल DBus- आधारित है, प्रलेखन उपलब्ध कराने में बहुत कम प्रयास किया गया था।

सबसे अच्छा संकेत मैं आपको दे सकता हूं संकेतक-एपमेनू और प्लाज्मा-विजेट-मेनूबार के स्रोत कोड । आप यह समझने के लिए पढ़ सकते हैं कि डबस प्रोटोकॉल कैसे काम करता है।


1
क्या यह कुछ प्रतिनिधि मामलों के लिए बातचीत का डब-मॉनिटर ट्रेस पाने में भी मदद कर सकता है? मैं dbusmenu या मॉनिटरिंग dbus के बारे में जानने के लिए पर्याप्त नहीं जानता, लेकिन मैं किसी ऐसे व्यक्ति से कुछ उदाहरण देखना पसंद करूंगा।
nealmcb

0

आप ग्लोबल मेनू बार के साथ एकीकरण करने के लिए , अजगर-डब बाइंडिंग का उपयोग कर सकते हैं, और http://developer.ubuntu.com/api/ubuntu-12.04/python/Dbusmenu-0.4.html पर डॉबमेन्यू के लिए प्रलेखित एपीआई का उपयोग कर सकते हैं ।


4
यह ठीक वही लिंक है जो मैंने अपने उत्तर में दिया था, जिसमें कहा गया था कि मुझे समझ नहीं आ रहा है कि इसका उपयोग कैसे किया जाए!
xubuntix
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.