Какао док запускает NSApplicationDidChangeScreenParametersNotification - PullRequest
1 голос
/ 26 октября 2011

При изменении позиции дока Какао запускает 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 Ответ

4 голосов
/ 26 октября 2011

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

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

...