Какао Dock запускает 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

}

person loretoparisi    schedule 26.10.2011    source источник


Ответы (1)


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

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

person omz    schedule 26.10.2011