6

(この質問の範囲外の理由で)各ウィンドウを個別のプロセスとして起動するQtアプリケーションがあります。

これは問題なく動作しますが、MacOS/X では、各ウィンドウ/プロセスが Dock の個別のエントリとして表示されます。したがって、ユーザーが多数のウィンドウを開いた場合、Docks には多数の同一のアイコンが表示されますが、これはあまり役に立ちません (どれがどれかわかりにくく、アイコンが小さくなり始めるため)。

これらのプロセスをすべて 1 つの Dock アイコンの下にグループ化するように Dock に指示する方法はありますか? (Mac 固有の API で十分です)

4

2 に答える 2

4

次のスニペットを使用して、アクティブでないプロセスの Dock タイルを非表示にすることができます。

 - (void)applicationWillResignActive:(NSNotification *)notification
{
    ProcessSerialNumber psn = {0, kCurrentProcess};
    TransformProcessType(&psn, kProcessTransformToBackgroundApplication);
    if([self.window isVisible])
    {
        [self.window performSelector:@selector(orderFrontRegardless) withObject:nil afterDelay:0.05];
    }
}

- (void)applicationWillBecomeActive:(NSNotification *)notification
{
    ProcessSerialNumber psn = {0, kCurrentProcess};
    TransformProcessType(&psn, kProcessTransformToForegroundApplication);
    SetFrontProcessWithOptions(&psn, kSetFrontProcessCausedByUser);
}

上記のコードをアプリ デリゲートに追加するだけで、プロセスがアクティブでなくなると、アプリの Dock アイコンが消えます。
プロセスが UIElement アプリケーションになった後もウィンドウを表示したままにするには、orderFrontRegardlessメッセージを送信します。(非常にハックなことは知っていますが、それは非標準のウィンドウ/プロセス処理の代償に違いありません)

おそらく、ユーザーが非表示のウィンドウを選択できるようにする Dock メニューも維持する必要があります。
「メイン」アプリからエントリを動的に追加できます。詳細については、ドック タイル プログラミング ガイドの「アプリケーション デリゲートを使用してメニュー項目を動的に追加する」セクションを参照してください。

更新:
上記のコード サンプルを少し変更しました。これは、以前のアプローチではアプリを再アクティブ化した後にメイン メニューが応答しなくなったためです。

于 2013-06-24T08:54:05.297 に答える