0

我似乎有与停止码头反弹的问题完全相反的问题。

我无法让我的应用程序不断弹跳停靠图标!

我也讨厌不断弹跳停靠图标,但在这种情况下,如果用户没有意识到我的应用程序无法启动,他们可能会丢失数小时的时间跟踪数据。

这是我放在应用程序委托 applicationWillFinishLaunching: 方法中的代码。

if (!AXAPIEnabled()) {        // I'm checking that Accessibility is turned on

    NSAlert *alert = [[NSAlert alloc] init];
    [alert setAlertStyle:NSCriticalAlertStyle];
    [alert setMessageText:@"Lapsus cannot run."];
    [alert addButtonWithTitle:@"Open Accessibility Prefs..."];
    [alert addButtonWithTitle:@"Quit"];
    [alert setInformativeText:@"Lapsus needs \"Enable access for assistive devices\" in the Accessibility pane of System Preferences to be turned on."];

    [NSApp activateIgnoringOtherApps:YES];
    int attentionrequest = [NSApp requestUserAttention:NSCriticalRequest];

    NSInteger returnValue = [alert runModal];
    ....
    [NSApp cancelUserAttentionRequest:attentionrequest];
}

我试过删除 requestUserAttention 行。

我尝试将 requestUserAttention 行放在很多不同的地方:直接在 runModal 调用之前,第一件事等。

我试过删除 activateIgnoringOtherApps 行。

无论我做什么,停靠图标都会反弹一次然后停止。

用户可能会在我将其置于最前面时看到我的应用程序,但如果他们在正确的时间单击,他们的活动应用程序可能会隐藏严重错误消息。

所以我想要一些东西,即使他们的码头被隐藏了,他们也知道有些事情是不对的。

我正在 Mac OS X 10.5 Leopard 上构建它。关于我做错了什么的任何想法?或者 Leopard 不再支持不断弹跳的停靠栏图标了?

更新:

我将方法调用放在 applicationWillFinishLaunching 中:

一旦我将它放入 applicationDidFinishLaunching:,并删除了 activateIgnoringOtherApps: 调用,它就会按要求工作。

但是,我的问题仍然是“我可以将我的应用程序放在前面以及弹跳停靠图标吗?从第一个答案来看,似乎不是,尽管我不确定我明白为什么。

更新:

我不明白为什么,因为我没有考虑清楚。既然有人向我指出,窃取焦点意味着扩展坞得到了它想要的东西,这完全有道理。

结论

如果您希望用户注意,请不要使用 [NSApp activateIgnoringOtherApps:YES];

4

1 回答 1

2

如果您发送 activateIgnoringOtherApps 那么您基本上是在忽略您自己的通知。

于 2009-10-16T16:07:39.557 回答