Comment puis-je déterminer si une fenêtre enfant a été déplacée directement par l'utilisateur plutôt que par le déplacement de sa fenêtre parent?Déterminer si la fenêtre enfant a été déplacée par l'utilisateur ou si la fenêtre parent a été déplacée?
Je reçois les notifications NSWindowDidMoveNotification
dans les deux cas. J'ai pensé que je pourrais tester l'origine du cadre parent dans le gestionnaire NSWindowWillMoveNotification
et le comparer à l'origine dans le gestionnaire NSWindowDidMoveNotification
, mais y a-t-il peut-être un meilleur moyen?
Voici ma solution actuelle:
- (void)windowWillMove:(NSNotification *)notification
{
NSWindow *window = [notification object];
_parentOrigin = [[window parentWindow] frame].origin;
}
- (void)windowDidMove:(NSNotification *)notification
{
NSWindow *window = [notification object];
NSPoint newParentOrigin = [[window parentWindow] frame].origin;
if (_parentOrigin.x == newParentOrigin.x &&
_parentOrigin.y == newParentOrigin.y)
{
// The parent hasn't moved, therefore the user moved the window directly...
[window doThing];
}
}
C'est intéressant. Pouvez-vous expliquer pourquoi le statut «clé» est important ici? – trojanfoe
Nevermind; Je pense que je comprends. Je vais essayer le matin et vous faire savoir comment je m'entends; Si cela fonctionne, c'est une meilleure solution qui nécessite une méthode ivar et une méthode déléguée de moins. – trojanfoe
J'ai édité ma réponse pour être plus complète, donc la raison de tester isKey sera claire pour tout le monde. – rdelmar