Минималистское приложение с какао не отображается в доке - PullRequest
1 голос
/ 28 мая 2019

В рамках более широкого проекта я реализую свое собственное управление окнами для приложения Cocoa.При компиляции я использую флаг «target c ++», потому что большая часть кодовой базы находится в c ++.

Я поместил некоторый код заглушки в мой main.cpp, чтобы открыть окно, но значок окна непроисходит в доке приложений и не поднимается на передний план стека окон.

У меня есть этот бит в моем main.cpp:

main.cpp

    TestAppDelegate* appDel = [TestAppDelegate alloc];
    [NSApp setDelegate:appDel];

    NSApplication* app = [NSApplication sharedApplication];

    app.delegate = appDel;
    [app run];

    return NSApplicationMain(argc, argv);

И мой объект AppDelegate выглядит следующим образом

test.h

@interface TestAppDelegate : NSObject <NSApplicationDelegate, NSWindowDelegate> {

NSWindow * win;

}
@end

test.cpp

#include "test.h"

@implementation TestAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application

    NSRect rect;
    rect.origin.x = 0;
    rect.origin.y = 0;
    rect.size.width = 500;
    rect.size.height = 500;

    unsigned int style = (NSWindowStyleMaskTitled|NSWindowStyleMaskClosable|NSWindowStyleMaskMiniaturizable);

    NSWindow* win = [[NSWindow alloc] initWithContentRect:rect styleMask:style backing:NSBackingStoreBuffered defer:FALSE];

    NSButton* butan = [NSButton buttonWithTitle:@"SomeText" target:nil action:nil];
    butan.frame = NSMakeRect(20, 20, 100, 30);
    butan.title = [NSString stringWithUTF8String:"Things"];
    [win.contentView addSubview:butan];
    [win makeKeyAndOrderFront:nil];

}

- (void)applicationWillTerminate:(NSNotification *)aNotification {
    // Insert code here to tear down your application
}

- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender {
    return YES;
}

@end

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

Моя проблема в том, что окно не кажется "активным".Это не в доке, я не могу «команда + вкладка +, чтобы добраться до него, и когда я нажимаю на него и фокусирую его, верхние левые кнопки не загораются, как другие приложения.

Что такоеЯ забыл здесь?

В качестве ссылки, я смотрю на источник SDL , который мой проект в основном использует, за исключением этого небольшого эксперимента. Если я запускаю графическое окно с SDL, котороеиспользует какао в качестве драйвера. Я увижу окно в доке, и оно будет более «активным», чем мое маленькое окно.

1 Ответ

1 голос
/ 28 мая 2019

Поскольку ваша программа не является приложением в комплекте, вам необходимо настроить ее "политику активации", чтобы она отображалась в переключателе Dock и Command-Tab:

[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];

Вы такжехотите активировать его при запуске:

[NSApp activateIgnoringOtherApps:YES];
...