|
Packit Service |
93d855 |
#!/usr/bin/python
|
|
Packit Service |
93d855 |
#
|
|
Packit Service |
93d855 |
# Test GI binding of libxklavier
|
|
Packit Service |
93d855 |
# Copyright (C) 2011 Martin Pitt <martin.pitt@ubuntu.com>
|
|
Packit Service |
93d855 |
#
|
|
Packit Service |
93d855 |
# This library is free software; you can redistribute it and/or
|
|
Packit Service |
93d855 |
# modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
93d855 |
# License as published by the Free Software Foundation; either
|
|
Packit Service |
93d855 |
# version 2 of the License, or (at your option) any later version.
|
|
Packit Service |
93d855 |
#
|
|
Packit Service |
93d855 |
# This library is distributed in the hope that it will be useful,
|
|
Packit Service |
93d855 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
93d855 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
93d855 |
# Lesser General Public License for more details.
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
import sys
|
|
Packit Service |
93d855 |
import os
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
# use source tree typelib
|
|
Packit Service |
93d855 |
os.environ['GI_TYPELIB_PATH'] = 'libxklavier:' + os.environ.get('GI_TYPELIB_PATH', '')
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
from gi.repository import Xkl, Gdk, GdkX11
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
def item_str(s):
|
|
Packit Service |
93d855 |
'''Convert a zero-terminated byte array to a proper str'''
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
i = s.find(b'\x00')
|
|
Packit Service |
93d855 |
return s[:i].decode()
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
display = GdkX11.x11_get_default_xdisplay()
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('== Engine ==')
|
|
Packit Service |
93d855 |
engine = Xkl.Engine.get_instance(display)
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('indicator names:', engine.get_indicators_names())
|
|
Packit Service |
93d855 |
print('group names:', engine.get_groups_names())
|
|
Packit Service |
93d855 |
print('default layout:', engine.get_groups_names()[engine.get_default_group()])
|
|
Packit Service |
93d855 |
print('features: %X' % engine.get_features())
|
|
Packit Service |
93d855 |
st = engine.get_current_state()
|
|
Packit Service |
93d855 |
print('current state: group: %i, indicators: %u' % (st.group, st.indicators))
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
# check ConfigItem ctor with data
|
|
Packit Service |
93d855 |
i = Xkl.ConfigItem()
|
|
Packit Service |
93d855 |
assert item_str(i.name) == ''
|
|
Packit Service |
93d855 |
i.set_name('fr')
|
|
Packit Service |
93d855 |
assert item_str(i.name) == 'fr'
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
# load registry
|
|
Packit Service |
93d855 |
registry = Xkl.ConfigRegistry.get_instance(engine)
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
if not registry.load(False):
|
|
Packit Service |
93d855 |
print('Failed to load registry')
|
|
Packit Service |
93d855 |
sys.exit(1)
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('\n== Available Layouts ==')
|
|
Packit Service |
93d855 |
def layout_iter(registry, item, data):
|
|
Packit Service |
93d855 |
print('[%s] %s, ' % (item_str(item.name), item_str(item.description)))
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
registry.foreach_layout(layout_iter, None)
|
|
Packit Service |
93d855 |
print()
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('\n== ConfigRec ==')
|
|
Packit Service |
93d855 |
rec = Xkl.ConfigRec()
|
|
Packit Service |
93d855 |
if not rec.get_from_server(engine):
|
|
Packit Service |
93d855 |
print('Failed to get configuration from server')
|
|
Packit Service |
93d855 |
sys.exit(1)
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('Curent configuration:')
|
|
Packit Service |
93d855 |
print(' Model:', rec.model)
|
|
Packit Service |
93d855 |
print(' Layouts:', rec.layouts)
|
|
Packit Service |
93d855 |
print(' Variants:', rec.variants)
|
|
Packit Service |
93d855 |
print(' Options:', rec.options)
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('Adding Danish layout...')
|
|
Packit Service |
93d855 |
rec.set_layouts(rec.layouts + ['dk'])
|
|
Packit Service |
93d855 |
rec.set_variants(rec.variants + [''])
|
|
Packit Service |
93d855 |
if not rec.activate(engine):
|
|
Packit Service |
93d855 |
print('Failed to activate new configuration')
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('Curent configuration:')
|
|
Packit Service |
93d855 |
rec = Xkl.ConfigRec()
|
|
Packit Service |
93d855 |
if not rec.get_from_server(engine):
|
|
Packit Service |
93d855 |
print('Failed to get configuration from server')
|
|
Packit Service |
93d855 |
sys.exit(1)
|
|
Packit Service |
93d855 |
print(' Model:', rec.model)
|
|
Packit Service |
93d855 |
print(' Layouts:', rec.layouts)
|
|
Packit Service |
93d855 |
print(' Variants:', rec.variants)
|
|
Packit Service |
93d855 |
print(' Options:', rec.options)
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('Removing Danish layout...')
|
|
Packit Service |
93d855 |
rec.set_layouts(rec.layouts[:-1])
|
|
Packit Service |
93d855 |
rec.set_variants(rec.variants[:-1])
|
|
Packit Service |
93d855 |
if not rec.activate(engine):
|
|
Packit Service |
93d855 |
print('Failed to activate new configuration')
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('Curent configuration:')
|
|
Packit Service |
93d855 |
rec = Xkl.ConfigRec()
|
|
Packit Service |
93d855 |
if not rec.get_from_server(engine):
|
|
Packit Service |
93d855 |
print('Failed to get configuration from server')
|
|
Packit Service |
93d855 |
sys.exit(1)
|
|
Packit Service |
93d855 |
print(' Model:', rec.model)
|
|
Packit Service |
93d855 |
print(' Layouts:', rec.layouts)
|
|
Packit Service |
93d855 |
print(' Variants:', rec.variants)
|
|
Packit Service |
93d855 |
print(' Options:', rec.options)
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('Changing model to "pc105"...')
|
|
Packit Service |
93d855 |
original_model = rec.model
|
|
Packit Service |
93d855 |
rec.set_model("pc105")
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('Curent configuration:')
|
|
Packit Service |
93d855 |
print(' Model:', rec.model)
|
|
Packit Service |
93d855 |
print(' Layouts:', rec.layouts)
|
|
Packit Service |
93d855 |
print(' Variants:', rec.variants)
|
|
Packit Service |
93d855 |
print(' Options:', rec.options)
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('Changing back to original model...')
|
|
Packit Service |
93d855 |
rec.set_model(original_model)
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('Curent configuration:')
|
|
Packit Service |
93d855 |
print(' Model:', rec.model)
|
|
Packit Service |
93d855 |
print(' Layouts:', rec.layouts)
|
|
Packit Service |
93d855 |
print(' Variants:', rec.variants)
|
|
Packit Service |
93d855 |
print(' Options:', rec.options)
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print
|
|
Packit Service |
93d855 |
original_options = rec.options[:]
|
|
Packit Service |
93d855 |
if not any("toggle" in opt for opt in rec.options):
|
|
Packit Service |
93d855 |
print('Adding Alt+Shift as an option for switching layouts...')
|
|
Packit Service |
93d855 |
rec.set_options(rec.options + ["grp:alt_shift_toggle"])
|
|
Packit Service |
93d855 |
if not rec.activate(engine):
|
|
Packit Service |
93d855 |
print('Failed to activate new configuration')
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
original_layouts = rec.layouts[:]
|
|
Packit Service |
93d855 |
original_variants = rec.variants[:]
|
|
Packit Service |
93d855 |
if len(rec.layouts) == 1:
|
|
Packit Service |
93d855 |
print('Adding Danish layout...')
|
|
Packit Service |
93d855 |
rec.set_layouts(rec.layouts + ['dk'])
|
|
Packit Service |
93d855 |
rec.set_variants(rec.variants + [''])
|
|
Packit Service |
93d855 |
if not rec.activate(engine):
|
|
Packit Service |
93d855 |
print('Failed to activate new configuration')
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
engine.start_listen(Xkl.EngineListenModes.TRACK_KEYBOARD_STATE)
|
|
Packit Service |
93d855 |
groups_names = engine.get_groups_names()
|
|
Packit Service |
93d855 |
state = engine.get_current_state()
|
|
Packit Service |
93d855 |
engine.start_listen(Xkl.EngineListenModes.TRACK_KEYBOARD_STATE)
|
|
Packit Service |
93d855 |
curent_layout = groups_names[state.group]
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('Curent active layout: %s' % curent_layout)
|
|
Packit Service |
93d855 |
raw_input('Please change your layout and hit ENTER')
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
engine.start_listen(Xkl.EngineListenModes.TRACK_KEYBOARD_STATE)
|
|
Packit Service |
93d855 |
groups_names = engine.get_groups_names()
|
|
Packit Service |
93d855 |
state = engine.get_current_state()
|
|
Packit Service |
93d855 |
engine.start_listen(Xkl.EngineListenModes.TRACK_KEYBOARD_STATE)
|
|
Packit Service |
93d855 |
curent_layout = groups_names[state.group]
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('Curent active layout: %s' % curent_layout)
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
print('Restoring original configuration...')
|
|
Packit Service |
93d855 |
rec.set_layouts(original_layouts)
|
|
Packit Service |
93d855 |
rec.set_variants(original_variants)
|
|
Packit Service |
93d855 |
rec.set_options(original_options)
|
|
Packit Service |
93d855 |
if not rec.activate(engine):
|
|
Packit Service |
93d855 |
print('Failed to activate new configuration')
|