2016-04-18 7 views
5

में वैश्विक फ़ाइल ड्रैग ईवेंट के लिए पंजीकरण करें जब मैं ओएस एक्स उपयोगकर्ता ओएस एक्स में किसी भी फाइल को खींच रहा हूं, न केवल मेरे ऐप में, जब मैं अधिसूचित होने की कोशिश कर रहा हूं।कोको

मेरे वर्तमान दृष्टिकोण NSEvent पर addGlobalMonitorForEventsMatchingMask:handler: उपयोग कर रहा था, इस प्रकार है:

[NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDraggedMask handler:^(NSEvent* event) { 
    NSPasteboard* pb = [NSPasteboard pasteboardWithName:NSDragPboard]; 
    NSLog(@"%@", [pb propertyListForType:NSFilenamesPboardType]); 
}]; 

यह आंशिक रूप से काम करता है - हैंडलर बुलाया जा रहा है, जब मैं अपने डेस्कटॉप या खोजक से एक फ़ाइल खींचना शुरू करें, लेकिन यह भी कहा जाता है की जा रही है जब मैं हर दूसरे ऑपरेशन करता हूं जिसमें बाएं-माउस-ड्रैग होता है, उदाहरण के लिए एक खिड़की चलती है। मुद्दा यह है कि NSDragPboard में अभी भी नवीनतम ड्रैग किए गए फ़ाइल यूआरएल शामिल हैं। जब मैंने फ़ाइल को छोड़ दिया और एक खिड़की चलाना शुरू किया, जिससे इन परिचालनों के बीच अंतर करना मुश्किल हो जाता है।

टीएल; डीआर - मुझे फाइल ड्रैग ऑपरेशंस सिस्टम-व्यापी में दिलचस्पी है। मुझे ड्रैग फ़ाइल के बारे में किसी भी जानकारी की आवश्यकता नहीं है, केवल वह जानकारी जो फ़ाइल ड्रैग ऑपरेशन शुरू या बंद कर दी गई है। मैं इस प्रश्न के संभावित समाधान के लिए किसी भी संकेत की सराहना करता हूं।

उत्तर

2

ऐप्पल डीटीएस से बात करने के बाद, यह एक बग की संभावना है। मैंने इस मुद्दे के लिए rdar://25892115 दायर किया है। वर्तमान में दिए गए एपीआई के साथ मेरे मूल प्रश्न को हल करने का कोई तरीका नहीं है।

मेरी समस्या को हल करने के लिए, अब मैं यह पता लगाने के लिए एक्सेसिबिलिटी एपीआई का उपयोग कर रहा हूं कि कर्सर के नीचे की गई वस्तु एक फ़ाइल है (kAXFilenameAttribute NULL नहीं है)।