Как можно обойти эту причуду NSTrackingArea?

У меня проблема. Я создаю NSTrackingArea следующим образом:

NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:[self frame] options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways owner:self userInfo:nil];
[self addTrackingArea:area];
[area release];

Это отлично работает. Однако есть проблема. Я настроил его так:

-(void)mouseEntered:(NSEvent *)event {
    [self toggleDetail];
}
-(void)mouseExited:(NSEvent *)event {
    [self toggleDetail];
}

А toggleDetail в основном выглядит так:

- (void)toggleDetail {
if (!attachedWindow) {
    NSPoint buttonPoint = NSMakePoint(NSMidX([conditionImage frame]),
                                      NSMidY([conditionImage frame]));
    attachedWindow = [[MAAttachedWindow alloc] initWithView:view 
                                            attachedToPoint:buttonPoint 
                                                   inWindow:[self window] 
                                                     onSide:12
                                                 atDistance:10.0];
    //config removed because of irrelevance
    [[self window] addChildWindow:attachedWindow ordered:NSWindowAbove];
} else {
    [[self window] removeChildWindow:attachedWindow];
    [attachedWindow orderOut:self];
    [attachedWindow release];
    attachedWindow = nil;
}

}

Вот моя проблема. Когда мое MAAttachedWindow закрывается, и я наводил указатель мыши на окно, оно открывается. Денди. Однако это хорошо только тогда, когда я держу мышь подальше от MAAttachedWindow . Как только я наведу на него указатель мыши (все еще находясь над главным окном), он начинает резко открывать и закрывать MAAttachedWindow .

Вот почему: как только окно открывается, область отслеживания считает, что моя мышь больше не находится над окном, потому что всплывающее окно находится перед ним. Однако, как только он удаляет всплывающее окно, он думает, что моя мышь снова над ним, таким образом создавая и показывая всплывающее окно еще раз. Таким образом, это бесконечный цикл.

Мой вопрос: есть ли способ обойти это? где он не может закрыть окно, если моя мышь не находится вне как окна, так и всплывающего окна или чего-то подобного. Есть ли способ сделать это?

6
задан sudo rm -rf 25 February 2011 в 04:56
поделиться