Как переопределить некоторые привязки клавиш с помощью Quickly

Я быстро создаю нативное приложение для Ubuntu. Как можно отключить несколько привязок клавиш, таких как предотвращение закрытия окна Ctrl + F4 и другие комбинации клавиш?

0
задан 3 September 2012 в 21:26

1 ответ

Это - то, как Вы изменили бы глобальные привязки клавиш, организованные Compiz. Однако это только работало бы на системы с помощью compiz как менеджер окон. Это требует python-compizconfig модуль. BTW, значение по умолчанию для закрывает окно, 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

, Что могло бы на самом деле быть лучше, должен получить уничтожение или сигнал удалять-события, отправленный в окно и тест, чтобы видеть, произошло ли это на самом деле с нажатием клавиши. Я написал некоторый код и смог протестировать на нажатие клавиши, но даже при том, что я могу препятствовать тому, чтобы цикл Gtk.main был завершен, я не могу препятствовать тому, чтобы окно было уничтожено. Возможно, у кого-то еще есть идея об этом.

Редактирование: вот мой код, который работает правильно, но является там лучшим способом протестировать на ключевую комбинацию в функции quit_test?

Edit2: Измененный для тестирования на модифицирующие клавиши и 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()
1
ответ дан 3 September 2012 в 21:26

Другие вопросы по тегам:

Похожие вопросы: