ひtoりgoと

影、復活

macOS 開発

「アプリケーションウインドウ」Exposé を実行したときにウインドウの影が消えてしまう問題の解決法を発見。

ここによると、NSWindow のウインドウレベルをデスクトップのレベル(kCGDesktopIconWindowLevel)以下にしたときに発生する問題で、あるウインドウのタグをいじれば解決するらしい。

いつからか自分の Mac でも起こっていてちょっと気になっていた。
zumuya のソフトでウインドウレベルをデスクトップ以下にしているもの... そう、iTunesVolume。

setLevel: をオーバーライドして簡単に解決できた。

-(void)setLevel: (NSInteger)toLevel
{
    [super setLevel: toLevel];
    [self CGSetExposeFade:  (toLevel > NSNormalWindowLevel)];
}

-(void)CGSetExposeFade: (BOOL)flag
{
    CGSWindow wid = [self windowNumber];
    CGSConnection cid = _CGSDefaultConnection();
    int tags[2];
    tags[0] = tags[1] = 0;
    OSStatus retVal = CGSGetWindowTags(cid, wid, (CGSWindowTag*)tags, 32);
    if (!retVal) {
        if (flag){
            tags[0] = tags[0] | 0x00000002;
            retVal = CGSSetWindowTags(cid, wid, (CGSWindowTag*)tags, 32);
        } else {
            tags[0] = tags[0] & 0x00000002;
            retVal = CGSClearWindowTags(cid, wid, (CGSWindowTag*)tags, 32);
        }
    }
}

Share

リンクも共有もお気軽に。記事を書くモチベーションの向上に役立てます。

© 2005-2022 zumuya