Я быстро создаю нативное приложение для Ubuntu. Как можно отключить несколько привязок клавиш, таких как предотвращение закрытия окна Ctrl kbd> + F4 kbd> и другие комбинации клавиш?
Это - то, как Вы изменили бы глобальные привязки клавиш, организованные 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()