2012-05-09 14 views
5

है मेरे पास GtkEntry विजेट का संग्रह है, जिनमें से कुछ संपादन योग्य और केंद्रित हैं, और इनमें से कुछ नहीं हैं। एक एडिट-> कॉपी मेनू आइटम को लागू करने के लिए, मैं यह जानना चाहता हूं कि उनमें से कौन सा, वर्तमान में टेक्स्ट का चयन किया गया है। क्या gtk_editable_get_selection_bounds तक सभी रिटर्न पर पुनरावृत्ति करने के अलावा ऐसा करने का कोई तरीका है?पता लगाएं कि किस gtk विजेट में वर्तमान चयन

मैं वर्तमान में gtk_clipboard_get(GDK_SELECTION_PRIMARY) पर कॉल करके इस मुद्दे को दूर कर रहा हूं लेकिन दस्तावेज़ों के कहने से, यह पोर्टेबल नहीं है (और वर्तमान प्रदर्शन के भीतर कहीं भी चयनित टेक्स्ट भी उठाएगा, न केवल मेरे आवेदन के भीतर से)।

+0

दुर्भाग्य से जब कोई विजेट चयन का दावा करता है तो संकेत नहीं लगता है, लेकिन आप प्रत्येक प्रविष्टि के लिए "चयन-प्राप्त" सिग्नल हैंडलर का उपयोग करने में सक्षम हो सकते हैं, और फिर चयन चयन नकली कर सकते हैं ताकि आपको कॉल किया जा सके चयन के साथ प्रवेश के लिए (यदि कोई है)। – ergosys

+0

ergosys: नकली चयन चयन का मतलब क्या है? –

+0

वास्तव में डेटा प्राप्त करने के इरादे के बिना चयन रूपांतरण का अनुरोध करें। अर्थात। gtk_selection_convert() पर कॉल करें, लेकिन कोई (या शायद एक स्टब) "चयन प्राप्त" सिग्नल हैंडलर है। – ergosys

उत्तर

1

क्या आपने gtk_window_get_focus() को आजमाया है? उपयोगकर्ता अक्सर प्रविष्टियों के साथ बातचीत कर रहे हैं, इसलिए यह आपके लिए काम कर सकता है। दस्तावेज कहता है कि यह "विंडो के भीतर वर्तमान केंद्रित विजेट पुनर्प्राप्त करता है।" आप इसे अपने आप देख सकते हैं here। फिर, अगर विजेट पुनर्प्राप्त किया गया है तो इसकी तुलना करें अपनी प्रविष्टियों में से एक है।

एक बार जब आप केंद्रित प्रविष्टि प्राप्त कर लेते हैं, तो शायद आप gtk_entry_get_text() का उपयोग करके अपना टेक्स्ट प्राप्त करना चाहते हैं, हालांकि, यह प्रविष्टि में सभी टेक्स्ट प्राप्त करेगा। यदि यह आपके उद्देश्यों के अनुरूप नहीं है, तो समाधान gtk_editable_copy_clipboard() का उपयोग कर रहा है जो वर्तमान में चयनित सामग्री की सामग्री को संपादन योग्य में कॉपी करता है (बेशक, संपादन योग्य में प्रविष्टि डालें) और उसे क्लिपबोर्ड पर रखता है। फिर यदि यह लागू होता है, तो gtk_editable_paste_clipboard() का उपयोग करके कॉपी की गई प्रतिलिपि बनाएं।

+0

'g_signal_emit_by_name (प्रविष्टि," कॉपी-क्लिपबोर्ड ", एनयूएलएल) 'प्रतिलिपि बनाने के लिए भी काम करता है। – ptomato

+0

जो मैंने पहली कोशिश की थी, लेकिन यह काम नहीं किया, क्योंकि केंद्रित प्रविष्टि आवश्यक रूप से टेक्स्ट चयन के साथ प्रविष्टि नहीं है –

संबंधित मुद्दे