我遇到了一个后台应用程序使用LSUIElement = 1来隐藏它的停靠项目,菜单栏和防止它出现在Command-Tab应用程序切换器中。Snow Leopard&LSUIElement - >应用程序无法正常激活,窗口不是“激活”,尽管是“钥匙”
这似乎是雪豹唯一的问题。
应用程序在菜单栏中放置一个NSStatusItem,并在点击时弹出一个菜单。选择“首选项...”应根据偏好调出NSWindow。
看起来不起作用的第一件事是该窗口没有在前面排序,而是出现在所有其他应用程序窗口的后面。
我试图通过调用
[[NSApplication sharedApplication] activateIgnoringOtherApps: YES]
解决这一问题,但没有奏效。
一会儿我想出的是,菜单被阻止消息被发送的运行循环,所以我写在MainController的另一种方法,用一个延迟发送的消息后:
[自performSelector:@选择器(setFront :) withObject:[preferencesController window] afterDelay:1.0];
-(void)setFront: (id) theWindow {
[[NSApplication sharedApplication]activateIgnoringOtherApps:YES];
[theWindow orderFrontRegardless];
[theWindow makeKeyWindow];
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}
请注意发送每一个可能的消息使它做它应该做的方法。
这种方法很有用,窗口在所有应用程序的所有其他窗口的顶端显示,但大多数情况下它不是活动的,这意味着它的标题栏变灰。点击标题栏也不会使窗口处于活动状态。点击窗口的INSIDE将使其激活!?
这一切在Leopard中似乎都不是问题;只是调用activateIgnoringOtherApps并使窗口键似乎工作得很好。
在Snow Leopard中有一个新的API设计,以取代LSUIElement是应该效仿其行为:
http://developer.apple.com/mac/library/releasenotes/cocoa/appkit.html
我与周围的发挥,但它的SL-只和我的天堂”没有能够得到LSUIElement被设置。
你想做些什么可以被看作是偷的焦点,这是作出相当困难。这是一件好事。你的菜单做什么? '[preferencesController showWindow:]'? – zneak 2010-05-28 11:56:30
当用户选择“首选项...”并且您将首选项窗口指向前端并将其设置为关键时,它几乎不会窃取焦点,但是苹果公司的好人可能会试图阻止您这样做。 – 2010-05-28 13:55:19