Gnome Shell 扩展开发

Gnome Shell 扩展开发

我迈出了开发 gnome 3 shell 扩展的第一步。实际上,我试图实现这个简单的事情:我想抑制烦人的“应用程序 xyz 已准备就绪”通知。经过一番研究,我发现这个类负责:

WindowAttentionHandler from /usr/share/gnome-shell/js/ui/windowAttentionHandler.js

这包括一个名为“ _onWindowDemandsAttention”的事件处理程序方法,该方法用于发送通知。通过注释掉此方法中负责的代码,进行快速而粗略的测试,得到了我想要的结果:不再有“ Application xyz is ready”通知。

为了避免对原始源代码进行如此肮脏的攻击,我想编写一个小型的 shell 扩展,它WindowAttentionHandler._onWindowDemandsAttention只需一个简单的“”就可以重载“”方法return

可以读这里- 在“如何扩展功能”下,只需使用 .prototype 即可重载函数。在研究了正确的语法后,我现在在 extension.js 中有一个包含此简单代码的扩展,仅用于测试它是否有效:

const WindowAttentionHandler = imports.ui.windowAttentionHandler;

function init() {
}

function enable() {
WindowAttentionHandler.WindowAttentionHandler.prototype._onWindowDemandsAttention=function(display, window) { 
                return;
        }
}

function disable() {
}

启用扩展并重新启动 gnome shell 不会引发任何错误(gnome 会话日志或 LookingGlass 中没有任何内容)但是它也不起作用:“ Application xyz is ready”通知仍然出现。

我可以通过在“init”或“enable”函数中添加一些调试输出(log(“BLAA”))来确保扩展确实已加载。

有什么提示我做错了吗?还是我必须使用其他解决方案?

答案1

最有可能的是,当您的扩展覆盖已构建它的模板时,处理程序已经实例化。您需要找到正在运行的实例并覆盖它,而不是库模板。

相关内容