【问题标题】:How to programmatically add a Dock icon bounce on launch?如何以编程方式在启动时添加 Dock 图标弹跳?
【发布时间】:2014-11-27 17:16:20
【问题描述】:

我使用Wineskin 已经有一段时间了,最​​近,我一直在尝试使用CodeWeavers 的Winemac.drv(或Mac 驱动程序)而不是X11。主要区别在于 Winemac 完全用 Objective-C 编程(包括它的 Window 系统),而 X11 方法使用 X11 dylibs 和 .nib 文件用于 windows。

但是,由于 Winemac 仍在开发中,它缺少一些 OS X 功能*。考虑到的功能是在 Dock 上弹跳。弹跳有什么问题?好吧,它只是只是不反弹。更具体地说,在发布时。该代码以某种方式覆盖了用户的“启动时为应用设置动画”选项,或者完全忽略了通常的应用启动动画。

我在 Objective-C 方面的经验仍然很少,所以我可能错过了 Apple 的 Mac 文档库中的一些关键文档,但我的问题是:
应用程序通常可以覆盖此选项,还是仅适用于 Wine?如果可以,怎么做?

编辑:我错误地指出 Mac 驱动程序错过了功能,而事实是,正如 Ken Thomases 所提到的,Wine 进程在后台启动,因此启动时 Dock 上没有显示图标,这意味着没有动画

【问题讨论】:

    标签: objective-c macos x11 wine


    【解决方案1】:

    我是 Wine 的 Mac 驱动程序的开发者。

    问题在于,所有 Wine 进程都作为后台进程启动,在 Dock 上不存在。许多 Wine 进程保持这种状态,因为它们从不显示任何窗口。

    当 Wine 进程第一次显示窗口时,它会将自己从后台进程转换为前台进程。此时,它出现在 Dock 和 Command-Tab 应用程序切换器中,并获得一个主菜单栏。碰巧的是,Dock 不会反弹从后台进程转换为前台进程的应用程序的图标。基本上,在进程启动后,Dock 就会很好地参与进来,而弹跳是针对正在启动的进程。

    应用程序可以通过调用-[NSApplication requestUserAttention:] 使其 Dock 图标反弹。但是,如果应用程序已经处于活动状态,这将不起作用。此外,弹跳动画具有不同的质量。它比轻松的反弹更尖锐、更紧迫。

    基本上,对于一般情况,没有办法实现您想要的。可以构建一个基于脚本的应用程序包来配置环境,然后execs Wine。由于该应用程序已捆绑并在其 Info.plist 中将其自身描述为普通的前台应用程序,因此它将立即获得一个 Dock 图标并且该图标应该弹跳。就execed Wine 接管 Dock 图标而言,我不完全确定事情会如何发展。即使它适用于初始流程,由初始流程启动的任何 Wine 流程都将恢复为您熟悉的行为方式。 (例如,许多游戏都有一个补丁程序/启动器,它会为游戏本身启动一个辅助进程。您可能会让补丁程序/启动器图标弹跳,但这对游戏进程的图标没有帮助。)

    【讨论】:

    • 使用requestUserAttention 是我想避免的,因为就像你说的,这是一个需要用户注意的动画。无论如何,我会尝试基于脚本的应用程序方法;此外,具有辅助可执行文件的应用程序的情况实际上对我有利,因为我只希望应用程序仅在第一个可执行文件启动时反弹,并且仅在应用程序完全关闭时再次动画。
    猜你喜欢
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多