Undo dans une fenêtre modale

bxdieselbxdiesel Membre
04:34 modifié dans API AppKit #1
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 ?

Réponses

  • CéroceCéroce Membre, Modérateur
    04:34 modifié #2
    Non, jamais, mais en es-tu sûr ? (je veux dire, testé au débogueur que les méthodes réciproques aux actions sont effectivement appelées).

    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.
  • bxdieselbxdiesel Membre
    04:34 modifié #3
    Non, jamais, mais en es-tu sûr ? (je veux dire, testé au débogueur que les méthodes réciproques aux actions sont effectivement appelées).

    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.

    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.

    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.
  • CéroceCéroce Membre, Modérateur
    avril 2009 modifié #4
    Avec un tel problème, j'accuserais mon code, parce que ces mécanismes d'undo sont très anciens, ils ont dû peu changer depuis OpenStep, et doivent être bien débogués du côté d'Apple maintenant.

    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...
  • bxdieselbxdiesel Membre
    04:34 modifié #5
    Merci pour les pistes, je vais chercher de côté...
Connectez-vous ou Inscrivez-vous pour répondre.