Como sobrescrever algumas associações de teclas usando Rapidamente

0

Estou desenvolvendo um aplicativo nativo para o Ubuntu usando rapidamente. Como posso desabilitar alguns atalhos de teclado, como impedir que a Ctrl + F4 feche a janela e outras combinações de teclas?

    
por Juzer Ali 03.09.2012 / 18:58

1 resposta

1

É assim que você modifica os atalhos globais gerenciados pelo Compiz. No entanto, isso só funcionaria para sistemas que usam o compiz como gerenciador de janelas. Requer o módulo python-compizconfig . BTW, o padrão para fechar a janela é ALT + F4, é o plugin de configurações gerais.

Veja como você pode fazer isso de maneira programática:

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

Observe que, para obter muitas das configurações, você pode usar a função keys() para listá-las (ou seja, context.Plugins.keys() , já que elas são apenas dicionários modificados.

Aqui está um link para o código que me ajudou a descobrir como isso funciona, já que não consigo encontrar nenhuma documentação: link

O que pode realmente ser melhor, é capturar o sinal do evento destroy ou delete enviado para a janela e testar para ver se ele realmente se originou com um pressionamento de tecla. Eu escrevi algum código e pude testar o pressionamento de tecla, mas mesmo que eu possa impedir que o loop Gtk.main seja terminado, não posso impedir que a janela seja destruída. Talvez outra pessoa tenha uma ideia sobre isso.

Edit: Aqui está o meu código que funciona corretamente, mas existe uma maneira melhor de testar o combo de teclas na função quit_test?

Edit2: Modificado para testar as teclas modificadoras e F4 corretamente, mas isso NÃO FUNCIONA ?! Ele funcionará se eu fizer o teste para Gdk.ModifierType.CONTROL_MASK , mas MOD1, que deve ser a tecla Alt, não funciona.

#!/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()
    
por Ian B. 03.09.2012 / 22:22