Ticket #1669: 0001-accessibility.2.patch

File 0001-accessibility.2.patch, 21.0 KB (added by earias, 14 years ago)
Line 
1diff -u -r -N sugar-0.88.1.original.con.parches.viejos/bin/sugar-session sugar-0.88.1/bin/sugar-session
2--- sugar-0.88.1.original.con.parches.viejos/bin/sugar-session    2010-06-02 09:33:43.000000000 -0300
3
4+++ sugar-0.88.1/bin/sugar-session    2010-06-21 11:48:06.837182011 -0300
5@@ -1,6 +1,7 @@
6 #!/usr/bin/env python
7 # Copyright (C) 2006, Red Hat, Inc.
8 # Copyright (C) 2009, One Laptop Per Child Association Inc
9+# Copyright (C) 2010, Plan Ceibal <comunidad@plan.ceibal.edu.uy>
10 #
11 # This program is free software; you can redistribute it and/or modify
12 # it under the terms of the GNU General Public License as published by
13@@ -190,6 +191,7 @@
14     gobject.idle_add(setup_notification_service_cb)
15     gobject.idle_add(setup_file_transfer_cb)
16     gobject.idle_add(show_software_updates_cb)
17+    gobject.idle_add(setup_accessibility_cb)
18 
19     if sys.modules.has_key('xklavier'):
20         gobject.idle_add(setup_keyboard_cb)
21@@ -201,6 +203,11 @@
22     settings = gtk.settings_get_default()
23     settings.set_property("gtk-font-name", "%s %f" % (face, size))
24 
25+def setup_accessibility_cb():
26+    from jarabe.model import accessibility
27+    accessibility_manager = accessibility.AccessibilityManager()
28+    accessibility_manager.setup_accessibility()
29+
30 def main():
31     try:
32         from sugar import env
33diff -u -r -N sugar-0.88.1.original.con.parches.viejos/configure.ac sugar-0.88.1/configure.ac
34--- sugar-0.88.1.original.con.parches.viejos/configure.ac    2010-06-21 11:39:19.902054000 -0300
35
36+++ sugar-0.88.1/configure.ac    2010-06-21 11:44:16.697208930 -0300
37@@ -50,6 +50,7 @@
38 data/Makefile
39 data/sugar-emulator.desktop
40 extensions/cpsection/aboutcomputer/Makefile
41+extensions/cpsection/accessibility/Makefile
42 extensions/cpsection/aboutme/Makefile
43 extensions/cpsection/datetime/Makefile
44 extensions/cpsection/frame/Makefile
45diff -u -r -N sugar-0.88.1.original.con.parches.viejos/data/icons/Makefile.am sugar-0.88.1/data/icons/Makefile.am
46--- sugar-0.88.1.original.con.parches.viejos/data/icons/Makefile.am    2010-06-21 11:39:19.902054000 -0300
47
48+++ sugar-0.88.1/data/icons/Makefile.am    2010-06-21 11:54:27.040055731 -0300
49@@ -3,6 +3,7 @@
50 sugar_DATA =                        \
51     module-about_me.svg             \
52     module-about_my_computer.svg    \
53+    module-accessibility.svg        \
54     module-date_and_time.svg        \
55     module-frame.svg                \
56     module-journalmanagement.svg    \
57diff -u -r -N sugar-0.88.1.original.con.parches.viejos/data/icons/module-accessibility.svg sugar-0.88.1/data/icons/module-accessibility.svg
58--- sugar-0.88.1.original.con.parches.viejos/data/icons/module-accessibility.svg    1969-12-31 21:00:00.000000000 -0300
59+++ sugar-0.88.1/data/icons/module-accessibility.svg    2010-07-08 09:19:22.288067133 -0300
60@@ -0,0 +1,92 @@
61
62+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
63+<!-- Created with Inkscape (http://www.inkscape.org/) -->
64+
65+<svg
66+   xmlns:svg="http://www.w3.org/2000/svg"
67+   xmlns="http://www.w3.org/2000/svg"
68+   version="1.0"
69
70+   width="55"
71+   height="55"
72+   id="svg795">
73+  <defs
74+     id="defs797" />
75+  <g
76+     id="layer1">
77+    <path
78
79+       d="m -23.738584,30.440666 a 8.901969,11.301082 0 1 1 -17.803937,0 8.901969,11.301082 0 1 1 17.803937,0 z"
80+       transform="matrix(1.2765958,0,0,1.0558659,19.192898,-13.127946)"
81+       id="path12"
82+       style="fill:none;stroke:#ffffff" />
83+    <path
84
85+       d="m 30.145644,37.823484 c -0.583589,6.659344 -6.7511,11.52268 -13.775517,10.862567 C 9.3457054,48.02594 4.1243814,42.092348 4.7079694,35.433004 5.2915594,28.773661 20.67887,20.597949 14.885997,24.011638 -12.777062,40.313232 24.43362,62.068174 30.145644,37.823484 z"
86+       id="path1405-0"
87+       style="fill:none;stroke:#ffffff;stroke-width:1.44962609;stroke-opacity:1" />
88+    <rect
89
90+       width="2.916333"
91+       height="21.188446"
92+       ry="1.3939767"
93
94+       x="18.332197"
95+       y="13.76814"
96+       id="rect1438-8"
97+       style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.50547338;stroke-opacity:1" />
98+    <rect
99
100+       width="2.8716421"
101+       height="19.140917"
102+       ry="1.259271"
103
104+       x="-35.091366"
105+       y="-38.207035"
106+       transform="matrix(0,-1,-1,0,0,0)"
107+       id="rect1438-1-87"
108+       style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.41987956;stroke-opacity:1" />
109+    <rect
110
111+       width="2.5733202"
112+       height="15.766372"
113+       ry="1.0372615"
114
115+       x="-5.4068875"
116+       y="-65.997124"
117+       transform="matrix(-0.55477829,0.83199823,-0.68762037,-0.72607041,0,0)"
118+       id="rect1438-0-4"
119+       style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.21988189;stroke-opacity:1" />
120+    <rect
121
122+       width="2.0588"
123+       height="12.916228"
124+       ry="0.84975183"
125
126+       x="6.7647386"
127+       y="-38.278324"
128+       transform="matrix(-0.21998034,0.97550431,-0.88967727,-0.45658992,0,0)"
129+       id="rect1438-0-1-8"
130+       style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.98759735;stroke-opacity:1" />
131+    <rect
132
133+       width="0.98179615"
134+       height="13.275604"
135+       ry="0.87339497"
136
137+       x="-30.243309"
138+       y="-41.495876"
139+       transform="matrix(0,-1,-1,0,0,0)"
140+       id="rect1438-1-8-5"
141+       style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.69142139;stroke-opacity:1" />
142+    <rect
143
144+       width="0.97070193"
145+       height="11.568416"
146+       ry="0.76108003"
147
148+       x="50.822704"
149+       y="-8.6089849"
150+       transform="matrix(0.89791652,0.44016579,0.56230073,-0.82693282,0,0)"
151+       id="rect1438-1-8-0-0"
152+       style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.64177793;stroke-opacity:1" />
153+    <rect
154
155+       width="1.6299056"
156+       height="7.7739253"
157+       ry="0.51144254"
158
159+       x="72.759727"
160+       y="35.364716"
161+       transform="matrix(0.9888174,0.14913131,-0.60877492,0.79334299,0,0)"
162+       id="rect1438-0-1-7-7"
163+       style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.68172067;stroke-opacity:1" />
164+    <path
165
166+       d="m 79.67578,18.634508 a 3.2829957,3.0304577 0 1 1 -6.565992,0 3.2829957,3.0304577 0 1 1 6.565992,0 z"
167+       transform="matrix(1.5397454,0,0,1.4719643,-97.932275,-17.750188)"
168+       id="path1603-2"
169+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-opacity:1" />
170+  </g>
171+</svg>
172diff -u -r -N sugar-0.88.1.original.con.parches.viejos/extensions/cpsection/accessibility/__init__.py sugar-0.88.1/extensions/cpsection/accessibility/__init__.py
173--- sugar-0.88.1.original.con.parches.viejos/extensions/cpsection/accessibility/__init__.py    1969-12-31 21:00:00.000000000 -0300
174
175+++ sugar-0.88.1/extensions/cpsection/accessibility/__init__.py    2010-06-02 15:00:27.328970000 -0300
176@@ -0,0 +1,25 @@
177+# Copyright (C) 2010 Plan Ceibal
178+#
179+# Author: Esteban Arias <earias@plan.ceibal.edu.uy>
180+# Contact information: comunidad@plan.ceibal.edu.uy
181+# Plan Ceibal http://www.ceibal.edu.uy
182+#
183+# This program is free software: you can redistribute it and/or modify
184+# it under the terms of the GNU General Public License as published by
185+# the Free Software Foundation, either version 3 of the License, or
186+# (at your option) any later version.
187+#
188+# This program is distributed in the hope that it will be useful,
189+# but WITHOUT ANY WARRANTY; without even the implied warranty of
190+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
191+# GNU General Public License for more details.
192+#
193+# You should have received a copy of the GNU General Public License
194+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
195+
196+from gettext import gettext as _
197+
198+CLASS = 'accessibility'
199+ICON = 'module-accessibility'
200+TITLE = _('Accessibility')
201+
202diff -u -r -N sugar-0.88.1.original.con.parches.viejos/extensions/cpsection/accessibility/Makefile.am sugar-0.88.1/extensions/cpsection/accessibility/Makefile.am
203--- sugar-0.88.1.original.con.parches.viejos/extensions/cpsection/accessibility/Makefile.am    1969-12-31 21:00:00.000000000 -0300
204
205+++ sugar-0.88.1/extensions/cpsection/accessibility/Makefile.am    2010-06-02 15:00:27.329800000 -0300
206@@ -0,0 +1,6 @@
207+sugardir = $(pkgdatadir)/extensions/cpsection/accessibility
208+
209+sugar_PYTHON =         \
210+    __init__.py    \
211+    model.py    \
212+    view.py       
213diff -u -r -N sugar-0.88.1.original.con.parches.viejos/extensions/cpsection/accessibility/model.py sugar-0.88.1/extensions/cpsection/accessibility/model.py
214--- sugar-0.88.1.original.con.parches.viejos/extensions/cpsection/accessibility/model.py    1969-12-31 21:00:00.000000000 -0300
215- Mostrar texto citado -
216
217+++ sugar-0.88.1/extensions/cpsection/accessibility/model.py    2010-06-03 11:12:50.057315000 -0300
218@@ -0,0 +1,55 @@
219+# Copyright (C) 2010 Plan Ceibal
220+#
221+# Author: Esteban Arias <earias@plan.ceibal.edu.uy>
222+# Contact information: comunidad@plan.ceibal.edu.uy
223+# Plan Ceibal http://www.ceibal.edu.uy
224+#
225+# This program is free software: you can redistribute it and/or modify
226+# it under the terms of the GNU General Public License as published by
227+# the Free Software Foundation, either version 3 of the License, or
228+# (at your option) any later version.
229+#
230+# This program is distributed in the hope that it will be useful,
231+# but WITHOUT ANY WARRANTY; without even the implied warranty of
232+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
233+# GNU General Public License for more details.
234+#
235+# You should have received a copy of the GNU General Public License
236+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
237+
238+import subprocess
239+import gconf
240+
241+from gettext import gettext as _
242+from jarabe.model import accessibility
243+
244+keyboard = accessibility.Keyboard()
245+
246+KEYWORDS = ['mouse_keys', 'sticky_keys', 'bounce_keys']
247+
248+def get_mouse_keys():
249+    return keyboard.get_mouse_keys()
250+
251+def set_mouse_keys(activar):
252+    keyboard.set_mouse_keys(activar)
253+
254+def print_mouse_keys():
255+    print str(get_mouse_keys())
256+
257+def get_sticky_keys():   
258+    return keyboard.get_sticky_keys()
259+
260+def set_sticky_keys(activar):
261+    keyboard.set_sticky_keys(activar)
262+
263+def print_sticky_keys():
264+    print str(get_sticky_keys())
265+
266+def get_bounce_keys():
267+    return keyboard.get_bounce_keys()
268+
269+def set_bounce_keys(activar):
270+    keyboard.set_bounce_keys(activar)
271+
272+def print_bounce_keys():
273+    print str(get_bounce_keys())
274diff -u -r -N sugar-0.88.1.original.con.parches.viejos/extensions/cpsection/accessibility/view.py sugar-0.88.1/extensions/cpsection/accessibility/view.py
275--- sugar-0.88.1.original.con.parches.viejos/extensions/cpsection/accessibility/view.py    1969-12-31 21:00:00.000000000 -0300
276- Mostrar texto citado -
277
278+++ sugar-0.88.1/extensions/cpsection/accessibility/view.py    2010-06-02 15:00:27.316801000 -0300
279@@ -0,0 +1,114 @@
280+# Copyright (C) 2010 Plan Ceibal
281+#
282+# Author: Esteban Arias <earias@plan.ceibal.edu.uy>
283+# Contact information: comunidad@plan.ceibal.edu.uy
284+# Plan Ceibal http://www.ceibal.edu.uy
285+#
286+# This program is free software: you can redistribute it and/or modify
287+# it under the terms of the GNU General Public License as published by
288+# the Free Software Foundation, either version 3 of the License, or
289+# (at your option) any later version.
290+#
291+# This program is distributed in the hope that it will be useful,
292+# but WITHOUT ANY WARRANTY; without even the implied warranty of
293+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
294+# GNU General Public License for more details.
295+#
296+# You should have received a copy of the GNU General Public License
297+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
298+
299+
300+import gtk
301+from gettext import gettext as _
302+
303+from sugar.graphics import style
304+
305+from jarabe import config
306+from jarabe.controlpanel.sectionview import SectionView
307+from jarabe.controlpanel.inlinealert import InlineAlert
308+
309+class accessibility(SectionView):
310+    def __init__(self, model, alerts=None):
311+        SectionView.__init__(self)
312+
313+        self._model = model
314+        self.set_border_width(style.DEFAULT_SPACING * 2)
315+        self.set_spacing(style.DEFAULT_SPACING)
316+        group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
317+   
318+        separator_pm = gtk.HSeparator()
319+        self.pack_start(separator_pm, expand=False)
320+        separator_pm.show()
321+
322+        label_pm_teclado = gtk.Label(_('Keyboard'))
323+        label_pm_teclado.set_alignment(0, 0)
324+        self.pack_start(label_pm_teclado, expand=False)
325+        label_pm_teclado.show()
326+
327+        self.box_pm = gtk.VBox()
328+        self.box_pm.set_border_width(style.DEFAULT_SPACING * 2)
329+        self.box_pm.set_spacing(style.DEFAULT_SPACING)     
330+
331+        self._view_mouse_keys()
332+        self._view_sticky_keys()
333+        self._view_bounce_keys()
334+
335+        self.pack_start(self.box_pm, expand=False)
336+        self.box_pm.show()
337+   
338+    def _set_mouse_keys(self, widget):
339+        state = widget.get_active()
340+        self._model.set_mouse_keys(state)
341+
342+    def _set_sticky_keys(self, widget):
343+        state = widget.get_active()
344+        self._model.set_sticky_keys(state)
345+
346+    def _set_bounce_keys(self, widget):
347+        state = widget.get_active()
348+        self._model.set_bounce_keys(state)
349+
350+    def undo(self):
351+        self._model.set_mouse_keys(self.init_state_mouse_keys)
352+        self._model.set_sticky_keys(self.init_state_sticky_keys)
353+        self._model.set_bounce_keys(self.init_state_bounce_keys)
354+
355+    def _view_mouse_keys(self):
356+        self.btn_mouse_keys = gtk.CheckButton(_('Mouse Keys'))
357+        self._mouse_pm_change_handler = self.btn_mouse_keys.connect("toggled", self._set_mouse_keys)
358+        self.init_state_mouse_keys = self._model.get_mouse_keys()
359+        self.btn_mouse_keys.set_active(self.init_state_mouse_keys)           
360+        self.box_pm.pack_start(self.btn_mouse_keys, True, True, 2)
361+        self.btn_mouse_keys.show()
362+
363+        lbl_mouse = gtk.Label(_('Move the mouse pointer with keyboard number.'))
364+        lbl_mouse.set_alignment(0, 0)
365+        self.box_pm.pack_start(lbl_mouse, True, True, 2)
366+        lbl_mouse.show()
367+
368+    def _view_sticky_keys(self):
369+        self.btn_sticky_keys = gtk.CheckButton(_('Sticky Keys'))
370+        self._sticky_pm_change_handler = self.btn_sticky_keys.connect("toggled", self._set_sticky_keys)
371+        self.init_state_sticky_keys = self._model.get_sticky_keys()
372+        self.btn_sticky_keys.set_active(self.init_state_sticky_keys)
373+        self.box_pm.pack_start(self.btn_sticky_keys, True, True, 2)
374+        self.btn_sticky_keys.show()
375+
376+        lbl_sticky = gtk.Label(_('Instead of having to press two keys at once (such as CTRL + Q), you can press one key at a time.'))
377+        lbl_sticky.set_line_wrap(True)
378+        lbl_sticky.set_alignment(0, 0)
379+        self.box_pm.pack_start(lbl_sticky, True, True, 2)
380+        lbl_sticky.show()
381+
382+    def _view_bounce_keys(self):
383+        self.btn_bounce_keys = gtk.CheckButton(_('Bounce Keys'))
384+        self._bounce_pm_change_handler = self.btn_bounce_keys.connect("toggled", self._set_bounce_keys)
385+        self.init_state_bounce_keys = self._model.get_bounce_keys()
386+        self.btn_bounce_keys.set_active(self.init_state_bounce_keys)
387+        self.box_pm.pack_start(self.btn_bounce_keys, True, True, 2)
388+        self.btn_bounce_keys.show()
389+
390+        lbl_bounce = gtk.Label(_('Ignore rapid, repeated keypresses of the same key.'))
391+        lbl_bounce.set_alignment(0, 0)
392+        self.box_pm.pack_start(lbl_bounce, True, True, 2)
393+        lbl_bounce.show()
394diff -u -r -N sugar-0.88.1.original.con.parches.viejos/extensions/cpsection/Makefile.am sugar-0.88.1/extensions/cpsection/Makefile.am
395--- sugar-0.88.1.original.con.parches.viejos/extensions/cpsection/Makefile.am    2010-06-21 11:39:19.903055000 -0300
396
397+++ sugar-0.88.1/extensions/cpsection/Makefile.am    2010-06-21 13:17:52.794055895 -0300
398@@ -1,6 +1,7 @@
399 SUBDIRS = \
400     aboutme \
401     aboutcomputer \
402+    accessibility \
403     datetime \
404     frame \
405     journalmanagement \
406diff -u -r -N sugar-0.88.1.original.con.parches.viejos/po/es.po sugar-0.88.1/po/es.po
407--- sugar-0.88.1.original.con.parches.viejos/po/es.po    2010-06-21 11:38:52.234179000 -0300
408- Mostrar texto citado -
409
410+++ sugar-0.88.1/po/es.po    2010-06-21 12:14:22.363180560 -0300
411@@ -1313,6 +1313,33 @@
412 "Para aplicar la restauración del Diario, se requiere reiniciar. \n\n"
413 "Se restaurará el respado realizado para este equipo "
414 
415+#: ../extensions/cpsection/accessibility/__init__.py:24
416+msgid "Accessibility"
417+msgstr "Accesibilidad"
418+
419+#: ../extensions/cpsection/accessibility/view.py:77
420+msgid "Mouse Keys"
421+msgstr "Teclas del ratón"
422+
423+#: ../extensions/cpsection/accessibility/view.py:84
424+msgid "Move the mouse pointer with keyboard number."
425+msgstr "Mover el puntero del ratón con un teclado numérico o con las teclas de juego."
426+
427+#: ../extensions/cpsection/accessibility/view.py:90
428+msgid "Sticky Keys"
429+msgstr "Teclas pegajosas"
430+
431+#: ../extensions/cpsection/accessibility/view.py:97
432+msgid "Instead of having to press two keys at once (such as CTRL + Q), you can press one key at a time."
433+msgstr "En lugar de tener que pulsar dos teclas a la vez (por ejemplo, CTRL + Q), permite pulsar una tecla a la vez."
434+
435+#: ../extensions/cpsection/accessibility/view.py:104
436+msgid "Bounce Keys"
437+msgstr "Teclas de rebote"
438+
439+#: ../extensions/cpsection/accessibility/view.py:111
440+msgid "Ignore rapid, repeated keypresses of the same key."
441+msgstr "Ignora la presión rápida y repetida de una tecla."
442 
443 #~ msgid "Cannot obtain data needed for registration."
444 #~ msgstr "No se puede obtener datos necesarios para el registro"
445diff -u -r -N sugar-0.88.1.original.con.parches.viejos/src/jarabe/model/accessibility.py sugar-0.88.1/src/jarabe/model/accessibility.py
446--- sugar-0.88.1.original.con.parches.viejos/src/jarabe/model/accessibility.py    1969-12-31 21:00:00.000000000 -0300
447+++ sugar-0.88.1/src/jarabe/model/accessibility.py    2010-07-08 09:21:33.789068870 -0300
448
449@@ -0,0 +1,76 @@
450+# Copyright (C) 2010 Plan Ceibal
451+#
452+# Author: Esteban Arias <earias@plan.ceibal.edu.uy>
453+# Contact information: comunidad@plan.ceibal.edu.uy
454+# Plan Ceibal http://www.ceibal.edu.uy
455+#
456+# This program is free software: you can redistribute it and/or modify
457+# it under the terms of the GNU General Public License as published by
458+# the Free Software Foundation, either version 3 of the License, or
459+# (at your option) any later version.
460+#
461+# This program is distributed in the hope that it will be useful,
462+# but WITHOUT ANY WARRANTY; without even the implied warranty of
463+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
464+# GNU General Public License for more details.
465+#
466+# You should have received a copy of the GNU General Public License
467+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
468+
469+import subprocess
470+import gconf
471+
472+from gettext import gettext as _
473+
474+class Keyboard:
475+
476+    def get_mouse_keys(self):
477+        client = gconf.client_get_default()
478+        return client.get_bool("/desktop/sugar/accessibility/keyboard/mousekeys_enable")
479
480+
481+    def set_mouse_keys(self, activar):
482+        client = gconf.client_get_default()
483+        client.set_bool("/desktop/sugar/accessibility/keyboard/mousekeys_enable", activar)
484
485+        self.run_config_keyboard()
486+
487+    def get_sticky_keys(self):   
488+        client = gconf.client_get_default()
489+        return client.get_bool("/desktop/sugar/accessibility/keyboard/stickykeys_enable")
490
491+
492+    def set_sticky_keys(self, activar):
493+        client = gconf.client_get_default()
494+        client.set_bool("/desktop/sugar/accessibility/keyboard/stickykeys_enable", activar)
495
496+        self.run_config_keyboard()
497+
498+    def get_bounce_keys(self):
499+        client = gconf.client_get_default()
500+        return client.get_bool("/desktop/sugar/accessibility/keyboard/bouncekeys_enable")
501
502+
503+    def set_bounce_keys(self, activar):
504+        client = gconf.client_get_default()
505+        client.set_bool("/desktop/sugar/accessibility/keyboard/bouncekeys_enable", activar)
506
507+        self.run_config_keyboard()
508+
509+    def run_config_keyboard(self):
510+        cmd = ['ax']
511+        if self.get_sticky_keys():
512+            cmd.append('+stickykeys')
513+        else:
514+            cmd.append('-stickykeys')
515+        if self.get_bounce_keys():
516+            cmd.append('+bouncekeys')
517+        else:
518+            cmd.append('-bouncekeys')
519+        if self.get_mouse_keys():
520+            cmd += ['+mousekeys', 'mousemaxspeed', '3000', 'mousetimetomax', '1000', '-timeout', '-repeatkeys']
521+        else:
522+            cmd += ['-mousekeys', 'mousemaxspeed', '3000', 'mousetimetomax', '1000', '+timeout', '+repeatkeys']
523+        subprocess.call(cmd)
524+
525+class AccessibilityManager:
526+    def setup_accessibility(self):
527+        client = gconf.client_get_default()
528+        is_accessibility = client.dir_exists("/desktop/sugar/accessibility")
529
530+        if is_accessibility:
531+            keyboard = Keyboard()
532+            keyboard.run_config_keyboard()
533diff -u -r -N sugar-0.88.1.original.con.parches.viejos/src/jarabe/model/Makefile.am sugar-0.88.1/src/jarabe/model/Makefile.am
534--- sugar-0.88.1.original.con.parches.viejos/src/jarabe/model/Makefile.am    2010-06-21 11:38:48.943180000 -0300
535
536+++ sugar-0.88.1/src/jarabe/model/Makefile.am    2010-06-21 11:45:58.165181239 -0300
537@@ -1,6 +1,7 @@
538 sugardir = $(pythondir)/jarabe/model
539 sugar_PYTHON =            \
540     __init__.py        \
541+    accessibility.py        \
542     buddy.py        \
543     bundleregistry.py    \
544     filetransfer.py        \