如何使用 Quickly 覆盖某些键绑定

如何使用 Quickly 覆盖某些键绑定

我正在使用 quickstart 为 Ubuntu 开发一个原生应用程序。如何禁用一些键绑定,例如防止Ctrl+F4关闭窗口和其他键组合?

答案1

这就是您修改 Compiz 管理的全局键绑定的方法。但是,这仅适用于使用 compiz 作为窗口管理器的系统。它需要模块python-compizconfig。顺便说一句,关闭窗口的默认键是 ALT+F4,它是常规设置插件。

你可以通过以下方式以编程方式执行此操作:

import compizconfig
context=compizconfig.Context()
commandplugin=context.Plugins['core']
c0=commandplugin.Screen['close_window_key']
defaultkey=c0.Value  # store the oldkey so you can put it back at the end
c0.Value='' # Unset the key
context.Write()   #Note that sometimes you have to pass False to get it to update settings

请注意,要获取许多设置,您可以使用该keys()函数列出它们(即),context.Plugins.keys()因为它们大多只是修改过的字典。

这里有一个代码链接,它帮助我弄清楚了这是如何工作的,因为我找不到任何文档:http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/precise/compizconfig-python/precise/view/head:/src/compizconfig.pyx

实际上,更好的办法可能是捕获发送到窗口的 destroy 或 delete-event 信号,并测试它是否真的源自按键。我编写了一些代码,并能够测试按键,但即使我可以阻止 Gtk.main 循环终止,我也无法阻止窗口被销毁。也许其他人对此有想法。

编辑:这是我的正确运行的代码,但是有没有更好的方法来测试 quit_test 函数中的按键组合?

编辑 2:修改为正确测试修饰键和 F4,但这不起作用?!如果我让它测试Gdk.ModifierType.CONTROL_MASK,它会起作用,但 MOD1(应该是 Alt 键)不起作用。

#!/usr/bin/python

from gi.repository import Gtk
keypress=True
def quit_test(widget, data):
    global keypress
    print "destroying"

    if keypress:
        keypress=False
        return True
    else:
        Gtk.main_quit()
        widget.destroy()

def handle_keys(widget,event):
    global keypress
    modifiers=Gtk.accelerator_get_default_mod_mask() 
    for mod in dir(Gdk.ModifierType): #just printing what the modifier is
        if (event.state&modifiers) == getattr(Gdk.ModifierType,mod): print mod
    if event.keyval==Gdk.KEY_F4 and (event.state&modifiers)==Gdk.ModifierType.MOD1_MASK:
        keypress=True
    print event.keyval, keypress

win=Gtk.Window()
win.connect('delete-event', quit_test)
win.connect('key-press-event', handle_keys)
label=Gtk.Label("just some text")
win.add(label)
win.show_all()
Gtk.main()

相关内容