Undo dans une fenêtre modale
bxdiesel
Membre
J'ai un petit problème avec le undo dans une fenêtre modale : quand je tape cmd-Z, toute la pile de undos du NSUndoManager est executée au lieu d'annuler la dernière opération enregistrée.
Le même code dans une fenêtre non modale fonctionne normalement, c'est-à -dire annule juste la dernière commande enregistrée dans le NSUndoManager.
Quelqu'un a t-il rencontré ce problème ?
Le même code dans une fenêtre non modale fonctionne normalement, c'est-à -dire annule juste la dernière commande enregistrée dans le NSUndoManager.
Quelqu'un a t-il rencontré ce problème ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Normalement, chaque doc possède son propre undo manager. L'appli en maintient également un. Quand tu affiches une fenêtre modale, c'est celui de l'appli qui doit être actif.
A priori, oui. A chaque Cmd-Z dans la fenêtre principale, le code passe une fois dans la méthode réciproque. Par contre, dans la fenêtre modale, il y a passe autant de fois qu'il y a d'éléments dans la pile des undos.
Dans mon cas, je veux que le undo soit lié au fonctionnement de la fenêtre modale. En gros, cette fenêtre permet de remplir un formulaire et je veux que l'utilisateur puisse utiliser le undo dans cette fenêtre. Une fois que ce formulaire est validé (ou annulé), je ne veux pas me retrouver avec ces undos dans le undoManager du doc ou de l'appli.
J'ai donc instancié un undoManager dans le contrôleur de cette fenêtre modale.
Pour info, j'ai le même problème en essayant avec le undoManager du document. Quant à celui de l'appli, [NSApp undoManager] retourne nil.
Est-ce que tu joues sur les undo groups ? J'imagine que non, mais ça pourrait expliquer le comportement. Normalement, un undo group est créé à chaque boucle du runtime. Quand une fenêtre modale est affichée, le runtime crée une nouvelle boucle d'événements dédiée à cette fenêtre. Voilà quelques pistes...