我迈出了开发 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
最有可能的是,当您的扩展覆盖已构建它的模板时,处理程序已经实例化。您需要找到正在运行的实例并覆盖它,而不是库模板。