【笔记】GTK的bind函数的参数

自打用了cinnamon之后 无比想念gnome的扩展 虽然都是基于gjs的东西 但是gnome的插件在cinnamon上没有就很痛苦

这次修改了个插件 recents 记录历史打开的文件 想添加个功能 鼠标右键文件打开该文件所在的目录

这个功能在gnome上是有的 但是cinnamon上没有

对比半天 找到主要实现方法是 _launchFile(a, event, uri)

在cinnamon的插件recents的applets文件中的函数定义是_launchFile(a, b, c, uri)

给我弄懵了 为啥参数数量不一样 而且这个abc啥玩意

我用global.log打印出来在调试器看(alt+f2 -> lg = melange)

发现a是actor 就是点击的元素 b没有输出 c输出false

往上找发现是调用的Lang.bind()函数

该函数接收两个参数 第一个为元素对象 就是个actor 第二个是触发的事件

直接按照gnome的扩展调用 b.get_button();

果然输出鼠标按下的键

1是左键 2是中键 3是右键

那么直接把原来判断按键的代码复制过来就能用了

_launchFile(a, event, uri) {
    if (event.get_button() == 3) {
        uri = Gio.Vfs.get_default().get_file_for_uri(uri).get_parent().get_uri();
    }

    try {
        Gio.app_info_launch_default_for_uri(uri, global.create_app_launch_context(0, -1));
    } catch (err) {
        Main.notify(_('Recent Manager'), err.message);
    }
}
来自1942年冬季攻势中的中央集团军的037号17吨救援拖车
原文地址:https://www.cnblogs.com/panther1942/p/15717745.html