- items = {
- 'N': Gtk.MenuItem.new_with_label(_('Num Lock')),
- 'C': Gtk.MenuItem.new_with_label(_('Caps Lock')),
- 'S': Gtk.MenuItem.new_with_label(_('Scroll Lock'))
- }
- items['N'].connect('activate', self.send_keypress, 'Num_Lock')
- items['C'].connect('activate', self.send_keypress, 'Caps_Lock')
- items['S'].connect('activate', self.send_keypress, 'Scroll_Lock')
+ xdotool = xdotool or shutil.which('xdotool')
+ if xdotool and os.access(xdotool, os.X_OK) and os.path.isfile(xdotool):
+ def send_keypress(menuitem, keystroke):
+ subprocess.call([xdotool, 'key', keystroke])
+ def new_menu_item(itemtype):
+ if itemtype == 'N':
+ item = Gtk.MenuItem.new_with_label(_('Num Lock'))
+ item.connect('activate', send_keypress, 'Num_Lock')
+ elif itemtype == 'C':
+ item = Gtk.MenuItem.new_with_label(_('Caps Lock'))
+ item.connect('activate', send_keypress, 'Caps_Lock')
+ elif itemtype == 'S':
+ item = Gtk.MenuItem.new_with_label(_('Scroll Lock'))
+ item.connect('activate', send_keypress, 'Scroll_Lock')
+ else:
+ raise ValueError('Invalid itemtype')
+ return item