setIgnoresMouseEvents: ДА не работает (например, мигает окно) - PullRequest
0 голосов
/ 18 марта 2011

Я думаю, что мою проблему лучше всего описать в видео: http://cl.ly/5Iou

По сути, я создаю область отслеживания в моем окне следующим образом:

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];
}

И в awakeFromNib я положил это:

[attachedWindow setIgnoresMouseEvents:YES];

toggleDetail выглядит примерно так: (всплывающее окно MAAttachedWindow)

- (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:65.0];
        //irrelevant window setup here
        [[self window] addChildWindow:attachedWindow ordered:NSWindowAbove];
    } 
    else {
        [[self window] removeChildWindow:attachedWindow];
        [attachedWindow orderOut:self];
        [attachedWindow release];
        attachedWindow = nil;
    }
}

Итак, как вы можете видеть на видео, «пульсация» не произойдет, если я наведу указатель мыши на окно подальше от окна, а затем наведу курсор на всплывающее окно.Однако, если я наведу курсор мыши на общую область, где появится всплывающее окно, а затем наведу курсор мыши на окно, оно начнет пульсировать.Похоже, окно не успевает зарегистрироваться, чтобы не получать события мыши.Есть идеи?Я пришел в себя, пытаясь обойти это.

1 Ответ

2 голосов
/ 18 марта 2011

Ух, это было просто.Я просто понял это.Я звонил так:

[attachedWindow setIgnoresMouseEvents:YES];

до инициализации окна.Таким образом, он не зарегистрировался по какой-то причине.Итак, я переместил его сюда:

//in toggleDetail
attachedWindow = [[MAAttachedWindow alloc] initWithView:view 
                                            attachedToPoint:buttonPoint 
                                                   inWindow:[self window] 
                                                     onSide:12
                                                 atDistance:65.0];
[attachedWindow setIgnoresMouseEvents:YES]; //HERE it works!
[[self window] addChildWindow:attachedWindow ordered:NSWindowAbove];

Итак, сразу после его инициализации, но прямо перед его отображениемНаконец-то это работает!:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...