Какао док запускает NSApplicationDidChangeScreenParametersNotification

При изменении позиции дока Какао запускает NSApplicationDidChangeScreenParametersNotification:

Проблема в том, что для Apple Docs его следует поднимать только тогда, когда

Размещается при изменении конфигурации дисплеев, подключенных к компьютеру. Изменение конфигурации может быть сделано либо программно, либо когда пользователь меняет настройки на панели управления дисплеями. Объект уведомления является sharedApplication. Это уведомление не содержит словаря userInfo.

Поэтому, если вы хотите обновить окна своего приложения при подключении нового дисплея (например, изменить / переместить рамку какого-либо окна HUD и т. Д.), Вы получите поддельное уведомление о приходе на док-станцию. Кроме того, к этому уведомлению не добавлен словарь userInfo, поэтому у меня не было возможности проверить, был ли док или новый контроллер дисплея.

Так как с этим справиться?

Возможным решением является проверка размера [NSScreen mainScreen] при отправке уведомления. Если этот NSSize изменяется, это уведомление приходит от нового прикрепленного дисплея, а не от дока:

static NSSize mainScreenSize;

-(void)handleApplicationDidChangeScreenParameters:(NSNotification *)notification {


    NSSize screenSize = [[NSScreen mainScreen] frame].size;


    if( screenSize.width != mainScreenSize.width || screenSize.height != mainScreenSize.height ) { // screen size changed

        mainScreenSize =  [[NSScreen mainScreen] frame].size;
        [myWindowController updateContent];
        [[myWindow contentView] setNeedsDisplay:YES]; // update custom window

}

1 ответ

Решение

Уведомление запускается, потому что основной экран visibleFrame (что исключает пространство, занимаемое док-станцией), зависит от положения док-станции.

Так что если visibleFrame из главного экрана изменения, вы можете быть уверены, что уведомление является результатом перемещения док-станции.

Другие вопросы по тегам