Sto tentando di ricevere una notifica quando un utente di OS X sta trascinando qualsiasi file in OS X, non solo nella mia app.Registrati per eventi di trascinamento di file globali in Cocoa
mio approccio attuale stava usando addGlobalMonitorForEventsMatchingMask:handler:
su NSEvent
, come segue:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDraggedMask handler:^(NSEvent* event) {
NSPasteboard* pb = [NSPasteboard pasteboardWithName:NSDragPboard];
NSLog(@"%@", [pb propertyListForType:NSFilenamesPboardType]);
}];
questo funziona parzialmente - il gestore viene chiamato quando inizio trascinando un file dal desktop o dal Finder, ma anche viene chiamato quando eseguo ogni altra operazione che contiene il trascinamento del mouse sinistro, ad es spostare una finestra. Il problema è che il NSDragPboard
sembra ancora contenere l'ultimo URL di file trascinato, ad es. quando lascio il file e inizio a spostare una finestra, il che rende difficile distinguere tra queste operazioni.
TL; DR - Sono interessato alle operazioni di trascinamento dei file in tutto il sistema. Non ho bisogno di informazioni sul file trascinato, solo le informazioni che l'operazione di trascinamento del file è stata avviata o interrotta. Gradirei qualsiasi suggerimento su una possibile soluzione per questa domanda.