1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# Copyright (C) 2006, Red Hat, Inc.
# Copyright (C) 2009, One Laptop Per Child Association Inc
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import logging
from gi.repository import GConf
from gi.repository import GdkX11
_USE_XKL = False
try:
from gi.repository import Xkl
_USE_XKL = True
except ImportError:
logging.debug('Could not load xklavier for keyboard configuration')
def setup():
if not _USE_XKL:
return
gconf_client = GConf.Client.get_default()
have_config = False
try:
display = GdkX11.x11_get_default_xdisplay()
if display is not None:
engine = Xkl.Engine.get_instance(display)
else:
logging.debug('setup_keyboard_cb: Could not get default display.')
return
configrec = Xkl.ConfigRec()
configrec.get_from_server(engine)
# FIXME, gconf_client_get_list not introspectable #681433
layouts_from_gconf = gconf_client.get(
'/desktop/sugar/peripherals/keyboard/layouts')
layouts_list = []
variants_list = []
if layouts_from_gconf:
for gval in layouts_from_gconf.get_list():
layout = gval.get_string()
layouts_list.append(layout.split('(')[0])
variants_list.append(layout.split('(')[1][:-1])
if layouts_list and variants_list:
have_config = True
configrec.set_layouts(layouts_list)
configrec.set_variants(variants_list)
model = gconf_client.get_string(\
'/desktop/sugar/peripherals/keyboard/model')
if model:
have_config = True
configrec.set_model(model)
options = []
# FIXME, gconf_client_get_list not introspectable #681433
options_from_gconf = gconf_client.get(\
'/desktop/sugar/peripherals/keyboard/options')
if options_from_gconf:
for gval in options_from_gconf.get_list():
option = gval.get_string()
options.append(option)
if options:
have_config = True
configrec.set_options(options)
if have_config:
configrec.activate(engine)
except Exception:
logging.exception('Error during keyboard configuration')
|