Table des matières
PyGTK possède un ensemble de fonctions de haut niveau de communication inter-processus via le système glisser-déposer. PyGTK peut utiliser le glisser-déposer par dessus les protocoles de bas niveau de Xdnd et le glisser-déposer Motif.
Une application capable du glisser-déposer doit d'abord définir et configurer le(s) widget(s) pour le glisser-déposer. Chacun des widgets peut être l'origine et/ou la destination du glisser-déposer. Il faut noter que ces widgets doivent possèder une fenêtre X associée.
Les widgets origine peuvent exporter des données du glisser, en permettant ainsi à l'utilisateur de tirer des objets à partir d'elles, pendant que les widgets de destination peuvent recevoir des données du glisser. Les destinations du glisser-déposer peuvent limiter de qui ils acceptent des données du glisser, par ex. la même application ou n'importe quelle application (y compris eux-mêmes).
Envoyer et recevoir des données de déposer utilisent des signaux. Déposer un élément sur un widget de destination exige à la fois une demande de données (pour le widget origine) et un gestionnaire de signal de réception de données (pour le widget destination). Des gestionnaires de signaux supplémentaires peuvent être connectés si on souhaite savoir quand un glisser commence (à l'instant même du début), jusqu'à la réalisation du déposer, et quand la procédure glisser-déposer entière s'esr terminée (avec succès ou pas).
Votre application aura besoin de fournir des données aux widgets origine quand ce sera demandé, ce qui implique d'avoir ungestionnaire de signal de requête de données de glisser. Pour les widgets de destination, ils auront besoin d'un gestionnaire de signal de données de déposer reçues.
Un cycle de glisser-déposer typique se présentera ainsi :
Le glisser commence. Le widget origine peut recevoir le signal "drag-begin". Il peut configurer une icône de glisser, etc.
Le glisser se déplace au-dessus d'une zone de déposer. Le widget destination peut recevoir le signal "drag-motion".
Le déposer est réalisé. Le widget destination peut recevoir le signal "drag-drop". Il doit demander les données de l'origine.
Requête des données du glisser (quand le déposer a lieu). Le widget origine peut recevoir le signal "drag-data-get"
Données du déposer reçues (de la même application ou d'une autre). Le widget destination peut recevoir le signal "drag-data-received".
Données du glisser supprimées (si le glisser était un déplacement). Le widget origne peut recevoir le signal "drag-data-delete".
Procédure glisser-déposer effectuée. Le widget origine peut recevoir le signal "drag-end".
Il existe quelques étapes mineures qui peuvent s'intercaler ici où là, mais nous entrerons dans les détails plus tard.