gpt4 book ai didi

cocoa - Snow Leopard 和 LSUIElement -> 应用程序未正确激活,窗口不是 "active",尽管是 "key"

转载 作者:行者123 更新时间:2023-12-03 16:03:47 26 4
gpt4 key购买 nike

我在后台应用程序中遇到了一些问题,该应用程序使用 LSUIElement=1 来隐藏其停靠项、菜单栏并阻止其出现在 Command-Tab 应用程序切换器中。

这似乎是雪豹独有的问题。

应用程序在菜单栏中放置一个 NSStatusItem,单击时会弹出一个菜单。选择“首选项...”应该会弹出一个带有首选项的 NSWindow。

第一件似乎不起作用的事情是,窗口没有排在前面,而是出现在所有其他应用程序窗口的后面。

我尝试通过调用来解决此问题

[[NSApplication sharedApplication] activateIgnoringOtherApps: YES]

但这没有用。

过了一会儿,我发现菜单阻止了向运行循环发送消息,因此我在 MainController 上编写了另一个方法并延迟发送消息:

[ self 执行选择器:@selector(setFront:) withObject: [preferencesController 窗口] afterDelay:1.0];

-(void)setFront: (id) theWindow {

[[NSApplication sharedApplication]activateIgnoringOtherApps:YES];
[theWindow orderFrontRegardless];
[theWindow makeKeyWindow];
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}

请注意“发送所有可能的消息以使其执行应该执行的操作”的方法。

这有点有效,窗口被带到所有应用程序的所有其他窗口之上,但大多数时候它不处于事件状态,这意味着它的标题栏是灰色的。单击标题栏也不会激活窗口。单击窗口内部将使其激活!?

这一切在 Leopard 中似乎都不是问题;只需调用 activateIgnoringOtherApps 并设置窗口键似乎就可以正常工作。

在 Snow Leopard 中,有一个新的 API 旨在替换 LSUIElement,该 API 应该模拟其行为:

http://developer.apple.com/mac/library/releasenotes/cocoa/appkit.html

我已经尝试过了,但它仅限于 SL,而且我无法设置 LSUIElement。

最佳答案

这很奇怪 - 我正在 Snow Leopard 下编写 LSUIElement 应用程序,并且没有遇到您所描述的此类问题...我确实遇到了新创建的窗口没有出现在前面的问题,但我通过调用 activateIgnoringOtherApps 修复了它。为了让它正常工作,我所要做的就是:

[NSApp activateIgnoringOtherApps: YES];
[preferencesWindow makeKeyAndOrderFront: self];

我什至没有碰任何名称中带有“政策”的东西。

关于cocoa - Snow Leopard 和 LSUIElement -> 应用程序未正确激活,窗口不是 "active",尽管是 "key",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2928695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com