Comment puis-je poster une "feuille" de cacao sur la fenêtre d'un autre programme?
-
09-06-2019 - |
Question
À l'aide du cadre Apple OS X Cocoa, comment puis-je publier une feuille (boîte de dialogue modale) sur la fenêtre d'un autre processus?
Modifier: Clarification un peu:
Mon application est une extension du Finder permettant de contrôler la version de Subversion ( http://scplugin.tigris.org/ a>). Une partie de mon application est un plug-in (un élément de menu contextuel pour le Finder); Cependant, le gros de mon application se trouve dans un processus de démon distinct. Pour plusieurs raisons, nous avons choisi de mettre pratiquement tout le code dans le démon. le plug-in définit uniquement le menu lui-même, et Apple-Events passe au démon.
Parfois, le démon doit demander à l'utilisateur de plus amples informations. Cela peut afficher une fenêtre à l'écran pour cela, mais c'est perturbant (positionné au hasard), et il me semble que le flux de travail ici est légitimement modal, par exemple "sélectionnez un fichier, choisissez" commit "dans le menu, indiquez commit commentaires, effectuez l'opération. "
La coopération entre processus (par exemple, passer une référence) est acceptable: les deux processus sont les miens, mais je veux éviter de lier le code de la feuille au processus principal.
La solution
Vraiment, on dirait que vous essayez de faire en sorte que votre communication inter-processus se déroule au niveau de la vue, ce qui n’est pas vraiment le fonctionnement de Cocoa. Les choses seront beaucoup plus faciles si vous séparez un peu plus vos couches.
Pourquoi ne voulez-vous pas insérer le code de feuille dans l’autre processus? C'est le code de vue, et le code de vue est intrinsèquement spécifique au processus. La bonne chose à faire ici est probablement d'ajouter un support quelque peu générique à votre code de plug-in, et un appel IPC que votre démon peut effectuer pour appeler ce code. Essayer d'expédier des objets de vue au processus distant va devenir cauchemardesque si vous pouvez le faire fonctionner.
Vous combattez les cadres avec cette approche.
Autres conseils
Vous ne pouvez pas ajouter de feuille à une fenêtre dans un autre processus, car vous disposez au maximum de l'accès le plus restreint possible aux fenêtres de l'autre processus.
S'il vous plaît, ne faites pas ça. Rendre l’interaction non modale si possible. Surtout dans un type de commit, il est bien plus agréable de pouvoir parcourir vos fichiers pendant que vous écrivez des commentaires de commit.
OS X a des groupes de fenêtres, mais je ne pense pas qu’ils puissent étendre (facilement) des applications.
Il est également important de noter que sous OS X, il est possible d’avoir plusieurs fenêtres du Finder ouvertes sur le même dossier (contrairement à OS 9). Même si vous disposiez de privilèges / API suffisants pour ajouter une feuille à une fenêtre du Finder, ce n'est pas comme si la modalité de cette fenêtre empêcherait l'utilisateur de continuer à utiliser les fichiers.
(Mon opinion personnelle, en tant qu'utilisateur Mac de longue date, est que ce type d'interaction me conduirait droit au mur.)