Dock + Drag&Drop
tablier
Membre
Je sais gérer le drag&drop sur l'icône ou sur la fenêtre de l'application.
Quand l'application est ouverte, son icône est dans le dock. Je ne trouve pas comment faire le Drag&drop sur cette icône.
De quel coté dois-je chercher ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il m semble que c'est : application(sender: NSApplication, openFile filename: String) -> Bool qui se charge de ça. (désolé pour le Swift)
Je confirme, méthode de NSApplicationDelegate. Il n'y a pas de différence avec double-cliquer sur le fichier depuis le Finder.
heu..! J'ai vérifié. C'est ce que j'avais programmé pour la réception d'un drag&drop sur l'icône de l'application. ça ne marche que si l'application est fermée et ça ne marche plus si l'application est ouverte !
Je me suis peut-être mal exprimé sur ce que je cherche. L'application étant lancée, son icône apparait dans le dock. Je veux ouvrir le fichier que je drag&drop sur son icône dans le dock.
Non, tu t'es bien exprimé.
Tu me mets le doute, et je n'ai pas le temps de vérifier, mais la doc d'Apple de cette méthode -[application:openFile:] distingue bien le cas où l'appli n'est pas encore ouverte.
Si tu utilises NSDocument, tu dois laisser faire le NSDocumentController, et ne pas implémenter cette méthode.
ça ne marche toujours pas ! Je ne traite qu'un fichier à la fois, donc je n'utilise pas NSDocument et donc pas de NSDocumentController. J'ai donc implémenté les 4 méthodes draggingEntered:, prepareForDragOperation:, performDragOperation: et concludeDragOperation: pour le Drag&Drop sur la fenêtre de l'application. Puis j'ai implémenté la méthode application:openFile pour le Drag&Drop sur l'icône de l'application.
Il n'y a pas besoin d'implémenter draggingEntered:, etc.
Attention à ne pas se mélanger les pinceaux. Il faut utiliser la méthode suivante...
- avec un "s" à file. -
La méthode sans "s" renvoie un booléen et est juste utilisée pour savoir si une extension de fichier est supportée par l'appli. Elle ne sert en aucun cas à initier un chargement.
Oui, j'ai bien vu cette méthode. Mais je n'ai pas vraiment compris la chose.
Je vais re-essayer !
Mala tu as raison mais ce n'est pas ce que je comprend dans la doc de application:openFiles:
Je n'autorise pas le drag&drop multiple, alors pourquoi application:openFile: ne fonctionne-t-il pas ? Sa doc semble pourtant autoriser l'ouverture d'un fichier unique:
Bon je vais reprendre ça pour vérifier que je fais tout correctement. (j'aime bien comprendre !)
Il faut toujours conclure une suite de posts ! allons-y !
J'ai trouvé mon erreur. Tout tient dans cette phrase que je n'ai pas suffisamment respecté:
Donc pour traiter le fichier reçu, les initialisations nécessaires doivent être faites soit dans awakeFromNib, soit dans applicationWillFinishLauching:.
Et j'ai oublié une des initialisations dans applicationDidFinishLauching: !!
Donc application:openFile avec ou sans s marche quand on n'oublie rien !!