def grab(self, accelerator):
keyVal, modifiers = Gtk.accelerator_parse(accelerator)
if not accelerator or (not keyVal and not modifiers):
return
keyCode = self.keymap.get_entries_for_keyval(keyVal)[1][0].keycode
modifiers = int(modifiers)
catch = error.CatchError(error.BadAccess)
for ignored_mask in self.ignored_masks:
mod = modifiers | ignored_mask
self.root.grab_key(keyCode, mod, True, X.GrabModeAsync, X.GrabModeSync, onerror=catch)
self.display.sync()
if catch.get_error():
return False
self.hotKeyList.append(HotKey().set(keyVal=keyVal, keyCode=keyCode, modifiers=modifiers))
return True
python类accelerator_parse()的实例源码
def _refresh(self):
self._store.clear()
sorted_keybindings = [(k, self._keybindings[k]) for k in sorted(
self._keybindings,
key=self._keybindings.get,
reverse=False
)]
for kb_key, kb_name in sorted_keybindings:
key, mods = Gtk.accelerator_parse(common.SETTINGS[kb_key])
iter = self._store.append()
columns = [
KeybindingsWidget.Columns.SETTINGS_KEY,
KeybindingsWidget.Columns.ACCEL_NAME,
KeybindingsWidget.Columns.MODS,
KeybindingsWidget.Columns.KEY
]
values = [kb_key, kb_name, mods, key]
self._store.set(iter, columns, values)
def _setup_accels(self):
"""Setup accels."""
self._accels = Gtk.AccelGroup()
self.add_accel_group(self._accels)
key, mod = Gtk.accelerator_parse("Escape")
self._accels.connect(key, mod, Gtk.AccelFlags.VISIBLE,
self.close_window)
key, mod = Gtk.accelerator_parse("Return")
self._accels.connect(key, mod, Gtk.AccelFlags.VISIBLE,
self._do_select)
key, mod = Gtk.accelerator_parse("<Control>F")
self._accels.connect(key, mod, Gtk.AccelFlags.VISIBLE,
self._toggle_search)
def onViKeys(globalhotkey, hotkey):
for key in hotKeys:
keyVal, modifiers = Gtk.accelerator_parse(key[0])
if keyVal == hotkey.keyVal and modifiers == hotkey.modifiers:
key[1](globalhotkey)
return True
return False
def onSwitchWnd(hotkey):
for key in hotKeys:
keyVal, modifiers = Gtk.accelerator_parse(key[0])
if keyVal == hotkey.keyVal and modifiers == hotkey.modifiers:
switchToWnd(key[1])
return True
return False
def _get_existed(self, key, mods):
result = [None, None]
for settings_key in self._keybindings:
ex_key, ex_mods = Gtk.accelerator_parse(
common.SETTINGS[settings_key]
)
if ex_key == key and ex_mods == mods:
result = [settings_key, self._keybindings[settings_key]]
break
return result
def grab(self, key):
if self.display == None:
return False
accelerator = key
accelerator = accelerator.replace("<Super>", "<Mod4>")
keyval, modifiers = Gtk.accelerator_parse(accelerator)
if not accelerator or (not keyval and not modifiers):
self.keycode = None
self.modifiers = None
return False
self.keytext = key
self.keycode = self.get_keycode(keyval)
self.modifiers = int(modifiers)
catch = error.CatchError(error.BadAccess)
for ignored_mask in self.ignored_masks:
mod = modifiers | ignored_mask
result = self.window.grab_key(self.keycode, mod, True, X.GrabModeAsync, X.GrabModeSync, onerror=catch)
result = self.window.grab_key(134, mod, True, X.GrabModeAsync, X.GrabModeSync, onerror=catch)
self.display.flush()
# sync has been blocking. Don't know why.
#self.display.sync()
if catch.get_error():
return False
return True
def grab(self, key):
accelerator = key
accelerator = accelerator.replace("<Super>", "<Mod4>")
keyval, modifiers = Gtk.accelerator_parse(accelerator)
if not accelerator or (not keyval and not modifiers):
self.keycode = None
self.modifiers = None
return False
self.keytext = key
try:
self.keycode = self.keymap.get_entries_for_keyval(keyval).keys[0].keycode
except AttributeError:
# In older Gtk3 the get_entries_for_keyval() returns an unnamed tuple...
self.keycode = self.keymap.get_entries_for_keyval(keyval)[1][0].keycode
self.modifiers = int(modifiers)
# Request to receive key press/release reports from other windows that may not be using modifiers
catch = error.CatchError(error.BadWindow)
if self.modifiers:
self.window.change_attributes(onerror=catch, event_mask = X.KeyPressMask | X.KeyReleaseMask)
else:
self.window.change_attributes(onerror=catch, event_mask = X.NoEventMask)
if catch.get_error():
return False
catch = error.CatchError(error.BadAccess)
for ignored_mask in self.ignored_masks:
mod = modifiers | ignored_mask
result = self.window.grab_key(self.keycode, mod, True, X.GrabModeAsync, X.GrabModeAsync, onerror=catch)
self.display.flush()
# sync has been blocking. Don't know why.
#self.display.sync()
if catch.get_error():
return False
return True
def create(toolbar):
'''Set of instructions to create the search widget in a toolbar.'''
# Search components
toolbar.search_combo_tb = Gtk.ToolItem()
toolbar.search_combo_align = Gtk.Alignment.new(0, 0.5, 0, 0)
store = Gtk.ListStore(GdkPixbuf.Pixbuf, str)
toolbar.search_combo = Gtk.ComboBox.new_with_model(store)
rendererText = Gtk.CellRendererText()
rendererPix = Gtk.CellRendererPixbuf()
toolbar.search_combo.pack_start(rendererPix, False)
toolbar.search_combo.pack_start(rendererText, True)
toolbar.search_combo.add_attribute(rendererPix, 'pixbuf', 0)
toolbar.search_combo.add_attribute(rendererText, 'text', 1)
options = {
'String':GdkPixbuf.Pixbuf.new_from_file(datafile_path('icon_string_16.png')),
'String no case':GdkPixbuf.Pixbuf.new_from_file(datafile_path('icon_string_no_case_16.png')),
'Hexadecimal':GdkPixbuf.Pixbuf.new_from_file(datafile_path('icon_hexadecimal_16.png')),
'Regexp':GdkPixbuf.Pixbuf.new_from_file(datafile_path('icon_regexp_16.png'))
}
for option in options.keys():
store.append([options[option], option])
toolbar.search_combo.set_active(0)
toolbar.search_combo_align.add(toolbar.search_combo)
toolbar.search_combo_tb.add(toolbar.search_combo_align)
toolbar.main_tb.insert(toolbar.search_combo_tb, -1)
# Separator
toolbar.sep = Gtk.SeparatorToolItem()
toolbar.sep.set_draw(False)
toolbar.main_tb.insert(toolbar.sep, -1)
toolbar.search_entry_tb = Gtk.ToolItem()
toolbar.search_entry = Gtk.Entry()
toolbar.search_entry.set_max_length(100)
toolbar.search_entry.set_text('Text to search')
toolbar.search_entry.set_icon_from_stock(1, Gtk.STOCK_FIND)
toolbar.search_entry.set_icon_tooltip_text(1, 'Search')
toolbar.search_entry.connect("activate", toolbar.search)
toolbar.search_entry.connect("icon-press", toolbar.search)
toolbar.search_entry.connect('focus-in-event', toolbar._clean, 'in')
toolbar.search_entry.connect('focus-out-event', toolbar._clean, 'out')
toolbar.search_entry_tb.add(toolbar.search_entry)
# We use the AccelGroup object from the main window.
my_accel = Gtk.accel_groups_from_object(toolbar.main.window)[0]
key, mod = Gtk.accelerator_parse('<Control>F')
toolbar.search_entry.set_tooltip_text('Control-F to search')
toolbar.search_entry.add_accelerator('grab-focus', my_accel, key, mod, Gtk.AccelFlags.MASK)
toolbar.main_tb.insert(toolbar.search_entry_tb, -1)