Braille keysyms ?

Samuel Thibault samuel.thibault at ens-lyon.org
Sat Mar 25 07:48:35 PST 2006


Hi,

Some time let me think a bit more about braille input.

Ivan Paskal, le Sun 12 Mar 2006 01:19:36 -0500, a écrit :
> >For now, we use the XTest extension for emulating key presses. For
> >emulating braille keysyms, we would hence need 256 keycodes to be
> >associated with the braille keysyms; this can't work.
> 
> You could use methods the same as for usual alphabets: a keyboard maps with
> many 'shift levels' or composing a keysym with some dead_keys sequence.

Well, this is a quite hairy solution.

> >Another possibility would be to define some dead XK_dead_braille_dot1..8
> >keysyms and a XK_braille_empty keysym for finishing the braille
> >combination.
> 
> Yes, it could be a solution.  Then in the Compose file you could
> define sequences of these dead_keys and resulting keysyms.

That makes a lot of sequences: people should be able to press braille
dots in any order. Since there are 8 dots, that makes roughly !8~=40 000
compose sequences while the current en_US compose file holds only 5600
sequences...

> >Maybe XIM could be yet another alternative? (I don't know much about
> >that)
> 
> It depends on what do you want.  How would you want to input the braille
> symbols?  XIM is just a mechanism to plug-in some additional modules
> for input processing.  Anyway such module gets keyboard and pointer
> events as an input and somehow converts this stream into keysym
> sequences.

Indeed. Digging into the code revealed that it seems to be quite adapted.

The usual way of entering braille patterns is to press several keys at
once, and releasing them all. The symbol is actually produced when the
last dot is released. Some timeout lets the user release one of the dots
first, and the all the others, the resulting pattern being the other
dots only.

The attached patches implement this:

- patch-Xorg-braille-keysymdef defines symbol names for 0x10028xy
values, and adds names for some new keysyms 0xfff[1-8] that represent
the individual dot keys that can be pressed together. (I had to increase
the hash size).
- patch-Xorg-brl adds to the default xim the handling of braille keys as
explained above.
- patch-Xorg-xev fixes a bug in xev: it only passes KeyPress events to
XFilterEvent(), while it should pass them all (KeyRelease too, for
instance).

Regards,
Samuel
-------------- next part --------------
Index: proto/X11keysym.h
===================================================================
RCS file: /cvs/xorg/proto/X11/keysym.h,v
retrieving revision 1.3
diff -u -r1.3 keysym.h
--- proto/X11keysym.h	9 Oct 2005 15:37:29 -0000	1.3
+++ proto/X11keysym.h	25 Mar 2006 15:31:06 -0000
@@ -70,6 +70,7 @@
 #define XK_VIETNAMESE
 #define XK_CURRENCY
 #define XK_MATHEMATICAL
+#define XK_BRAILLE
 
 #include <X11/keysymdef.h>
 
Index: proto/X11keysymdef.h
===================================================================
RCS file: /cvs/xorg/proto/X11/keysymdef.h,v
retrieving revision 1.6
--- proto/X11keysymdef.h	21 Nov 2005 02:47:21 -0000	1.6
+++ proto/X11keysymdef.h	25 Mar 2006 15:31:08 -0000
@@ -2071,3 +2071,270 @@
 #define XK_notidentical               0x1002262  /* U+2262 NOT IDENTICAL TO */
 #define XK_stricteq                   0x1002263  /* U+2263 STRICTLY EQUIVALENT TO */          
 #endif /* XK_MATHEMATICAL */
+
+#ifdef XK_BRAILLE
+#define XK_braille_dot_1                 0xfff1
+#define XK_braille_dot_2                 0xfff2
+#define XK_braille_dot_3                 0xfff3
+#define XK_braille_dot_4                 0xfff4
+#define XK_braille_dot_5                 0xfff5
+#define XK_braille_dot_6                 0xfff6
+#define XK_braille_dot_7                 0xfff7
+#define XK_braille_dot_8                 0xfff8
+#define XK_braille_blank              0x1002800  /* U+2800 BRAILLE PATTERN BLANK */
+#define XK_braille_dots_1             0x1002801  /* U+2801 BRAILLE PATTERN DOTS-1 */
+#define XK_braille_dots_2             0x1002802  /* U+2802 BRAILLE PATTERN DOTS-2 */
+#define XK_braille_dots_12            0x1002803  /* U+2803 BRAILLE PATTERN DOTS-12 */
+#define XK_braille_dots_3             0x1002804  /* U+2804 BRAILLE PATTERN DOTS-3 */
+#define XK_braille_dots_13            0x1002805  /* U+2805 BRAILLE PATTERN DOTS-13 */
+#define XK_braille_dots_23            0x1002806  /* U+2806 BRAILLE PATTERN DOTS-23 */
+#define XK_braille_dots_123           0x1002807  /* U+2807 BRAILLE PATTERN DOTS-123 */
+#define XK_braille_dots_4             0x1002808  /* U+2808 BRAILLE PATTERN DOTS-4 */
+#define XK_braille_dots_14            0x1002809  /* U+2809 BRAILLE PATTERN DOTS-14 */
+#define XK_braille_dots_24            0x100280a  /* U+280a BRAILLE PATTERN DOTS-24 */
+#define XK_braille_dots_124           0x100280b  /* U+280b BRAILLE PATTERN DOTS-124 */
+#define XK_braille_dots_34            0x100280c  /* U+280c BRAILLE PATTERN DOTS-34 */
+#define XK_braille_dots_134           0x100280d  /* U+280d BRAILLE PATTERN DOTS-134 */
+#define XK_braille_dots_234           0x100280e  /* U+280e BRAILLE PATTERN DOTS-234 */
+#define XK_braille_dots_1234          0x100280f  /* U+280f BRAILLE PATTERN DOTS-1234 */
+#define XK_braille_dots_5             0x1002810  /* U+2810 BRAILLE PATTERN DOTS-5 */
+#define XK_braille_dots_15            0x1002811  /* U+2811 BRAILLE PATTERN DOTS-15 */
+#define XK_braille_dots_25            0x1002812  /* U+2812 BRAILLE PATTERN DOTS-25 */
+#define XK_braille_dots_125           0x1002813  /* U+2813 BRAILLE PATTERN DOTS-125 */
+#define XK_braille_dots_35            0x1002814  /* U+2814 BRAILLE PATTERN DOTS-35 */
+#define XK_braille_dots_135           0x1002815  /* U+2815 BRAILLE PATTERN DOTS-135 */
+#define XK_braille_dots_235           0x1002816  /* U+2816 BRAILLE PATTERN DOTS-235 */
+#define XK_braille_dots_1235          0x1002817  /* U+2817 BRAILLE PATTERN DOTS-1235 */
+#define XK_braille_dots_45            0x1002818  /* U+2818 BRAILLE PATTERN DOTS-45 */
+#define XK_braille_dots_145           0x1002819  /* U+2819 BRAILLE PATTERN DOTS-145 */
+#define XK_braille_dots_245           0x100281a  /* U+281a BRAILLE PATTERN DOTS-245 */
+#define XK_braille_dots_1245          0x100281b  /* U+281b BRAILLE PATTERN DOTS-1245 */
+#define XK_braille_dots_345           0x100281c  /* U+281c BRAILLE PATTERN DOTS-345 */
+#define XK_braille_dots_1345          0x100281d  /* U+281d BRAILLE PATTERN DOTS-1345 */
+#define XK_braille_dots_2345          0x100281e  /* U+281e BRAILLE PATTERN DOTS-2345 */
+#define XK_braille_dots_12345         0x100281f  /* U+281f BRAILLE PATTERN DOTS-12345 */
+#define XK_braille_dots_6             0x1002820  /* U+2820 BRAILLE PATTERN DOTS-6 */
+#define XK_braille_dots_16            0x1002821  /* U+2821 BRAILLE PATTERN DOTS-16 */
+#define XK_braille_dots_26            0x1002822  /* U+2822 BRAILLE PATTERN DOTS-26 */
+#define XK_braille_dots_126           0x1002823  /* U+2823 BRAILLE PATTERN DOTS-126 */
+#define XK_braille_dots_36            0x1002824  /* U+2824 BRAILLE PATTERN DOTS-36 */
+#define XK_braille_dots_136           0x1002825  /* U+2825 BRAILLE PATTERN DOTS-136 */
+#define XK_braille_dots_236           0x1002826  /* U+2826 BRAILLE PATTERN DOTS-236 */
+#define XK_braille_dots_1236          0x1002827  /* U+2827 BRAILLE PATTERN DOTS-1236 */
+#define XK_braille_dots_46            0x1002828  /* U+2828 BRAILLE PATTERN DOTS-46 */
+#define XK_braille_dots_146           0x1002829  /* U+2829 BRAILLE PATTERN DOTS-146 */
+#define XK_braille_dots_246           0x100282a  /* U+282a BRAILLE PATTERN DOTS-246 */
+#define XK_braille_dots_1246          0x100282b  /* U+282b BRAILLE PATTERN DOTS-1246 */
+#define XK_braille_dots_346           0x100282c  /* U+282c BRAILLE PATTERN DOTS-346 */
+#define XK_braille_dots_1346          0x100282d  /* U+282d BRAILLE PATTERN DOTS-1346 */
+#define XK_braille_dots_2346          0x100282e  /* U+282e BRAILLE PATTERN DOTS-2346 */
+#define XK_braille_dots_12346         0x100282f  /* U+282f BRAILLE PATTERN DOTS-12346 */
+#define XK_braille_dots_56            0x1002830  /* U+2830 BRAILLE PATTERN DOTS-56 */
+#define XK_braille_dots_156           0x1002831  /* U+2831 BRAILLE PATTERN DOTS-156 */
+#define XK_braille_dots_256           0x1002832  /* U+2832 BRAILLE PATTERN DOTS-256 */
+#define XK_braille_dots_1256          0x1002833  /* U+2833 BRAILLE PATTERN DOTS-1256 */
+#define XK_braille_dots_356           0x1002834  /* U+2834 BRAILLE PATTERN DOTS-356 */
+#define XK_braille_dots_1356          0x1002835  /* U+2835 BRAILLE PATTERN DOTS-1356 */
+#define XK_braille_dots_2356          0x1002836  /* U+2836 BRAILLE PATTERN DOTS-2356 */
+#define XK_braille_dots_12356         0x1002837  /* U+2837 BRAILLE PATTERN DOTS-12356 */
+#define XK_braille_dots_456           0x1002838  /* U+2838 BRAILLE PATTERN DOTS-456 */
+#define XK_braille_dots_1456          0x1002839  /* U+2839 BRAILLE PATTERN DOTS-1456 */
+#define XK_braille_dots_2456          0x100283a  /* U+283a BRAILLE PATTERN DOTS-2456 */
+#define XK_braille_dots_12456         0x100283b  /* U+283b BRAILLE PATTERN DOTS-12456 */
+#define XK_braille_dots_3456          0x100283c  /* U+283c BRAILLE PATTERN DOTS-3456 */
+#define XK_braille_dots_13456         0x100283d  /* U+283d BRAILLE PATTERN DOTS-13456 */
+#define XK_braille_dots_23456         0x100283e  /* U+283e BRAILLE PATTERN DOTS-23456 */
+#define XK_braille_dots_123456        0x100283f  /* U+283f BRAILLE PATTERN DOTS-123456 */
+#define XK_braille_dots_7             0x1002840  /* U+2840 BRAILLE PATTERN DOTS-7 */
+#define XK_braille_dots_17            0x1002841  /* U+2841 BRAILLE PATTERN DOTS-17 */
+#define XK_braille_dots_27            0x1002842  /* U+2842 BRAILLE PATTERN DOTS-27 */
+#define XK_braille_dots_127           0x1002843  /* U+2843 BRAILLE PATTERN DOTS-127 */
+#define XK_braille_dots_37            0x1002844  /* U+2844 BRAILLE PATTERN DOTS-37 */
+#define XK_braille_dots_137           0x1002845  /* U+2845 BRAILLE PATTERN DOTS-137 */
+#define XK_braille_dots_237           0x1002846  /* U+2846 BRAILLE PATTERN DOTS-237 */
+#define XK_braille_dots_1237          0x1002847  /* U+2847 BRAILLE PATTERN DOTS-1237 */
+#define XK_braille_dots_47            0x1002848  /* U+2848 BRAILLE PATTERN DOTS-47 */
+#define XK_braille_dots_147           0x1002849  /* U+2849 BRAILLE PATTERN DOTS-147 */
+#define XK_braille_dots_247           0x100284a  /* U+284a BRAILLE PATTERN DOTS-247 */
+#define XK_braille_dots_1247          0x100284b  /* U+284b BRAILLE PATTERN DOTS-1247 */
+#define XK_braille_dots_347           0x100284c  /* U+284c BRAILLE PATTERN DOTS-347 */
+#define XK_braille_dots_1347          0x100284d  /* U+284d BRAILLE PATTERN DOTS-1347 */
+#define XK_braille_dots_2347          0x100284e  /* U+284e BRAILLE PATTERN DOTS-2347 */
+#define XK_braille_dots_12347         0x100284f  /* U+284f BRAILLE PATTERN DOTS-12347 */
+#define XK_braille_dots_57            0x1002850  /* U+2850 BRAILLE PATTERN DOTS-57 */
+#define XK_braille_dots_157           0x1002851  /* U+2851 BRAILLE PATTERN DOTS-157 */
+#define XK_braille_dots_257           0x1002852  /* U+2852 BRAILLE PATTERN DOTS-257 */
+#define XK_braille_dots_1257          0x1002853  /* U+2853 BRAILLE PATTERN DOTS-1257 */
+#define XK_braille_dots_357           0x1002854  /* U+2854 BRAILLE PATTERN DOTS-357 */
+#define XK_braille_dots_1357          0x1002855  /* U+2855 BRAILLE PATTERN DOTS-1357 */
+#define XK_braille_dots_2357          0x1002856  /* U+2856 BRAILLE PATTERN DOTS-2357 */
+#define XK_braille_dots_12357         0x1002857  /* U+2857 BRAILLE PATTERN DOTS-12357 */
+#define XK_braille_dots_457           0x1002858  /* U+2858 BRAILLE PATTERN DOTS-457 */
+#define XK_braille_dots_1457          0x1002859  /* U+2859 BRAILLE PATTERN DOTS-1457 */
+#define XK_braille_dots_2457          0x100285a  /* U+285a BRAILLE PATTERN DOTS-2457 */
+#define XK_braille_dots_12457         0x100285b  /* U+285b BRAILLE PATTERN DOTS-12457 */
+#define XK_braille_dots_3457          0x100285c  /* U+285c BRAILLE PATTERN DOTS-3457 */
+#define XK_braille_dots_13457         0x100285d  /* U+285d BRAILLE PATTERN DOTS-13457 */
+#define XK_braille_dots_23457         0x100285e  /* U+285e BRAILLE PATTERN DOTS-23457 */
+#define XK_braille_dots_123457        0x100285f  /* U+285f BRAILLE PATTERN DOTS-123457 */
+#define XK_braille_dots_67            0x1002860  /* U+2860 BRAILLE PATTERN DOTS-67 */
+#define XK_braille_dots_167           0x1002861  /* U+2861 BRAILLE PATTERN DOTS-167 */
+#define XK_braille_dots_267           0x1002862  /* U+2862 BRAILLE PATTERN DOTS-267 */
+#define XK_braille_dots_1267          0x1002863  /* U+2863 BRAILLE PATTERN DOTS-1267 */
+#define XK_braille_dots_367           0x1002864  /* U+2864 BRAILLE PATTERN DOTS-367 */
+#define XK_braille_dots_1367          0x1002865  /* U+2865 BRAILLE PATTERN DOTS-1367 */
+#define XK_braille_dots_2367          0x1002866  /* U+2866 BRAILLE PATTERN DOTS-2367 */
+#define XK_braille_dots_12367         0x1002867  /* U+2867 BRAILLE PATTERN DOTS-12367 */
+#define XK_braille_dots_467           0x1002868  /* U+2868 BRAILLE PATTERN DOTS-467 */
+#define XK_braille_dots_1467          0x1002869  /* U+2869 BRAILLE PATTERN DOTS-1467 */
+#define XK_braille_dots_2467          0x100286a  /* U+286a BRAILLE PATTERN DOTS-2467 */
+#define XK_braille_dots_12467         0x100286b  /* U+286b BRAILLE PATTERN DOTS-12467 */
+#define XK_braille_dots_3467          0x100286c  /* U+286c BRAILLE PATTERN DOTS-3467 */
+#define XK_braille_dots_13467         0x100286d  /* U+286d BRAILLE PATTERN DOTS-13467 */
+#define XK_braille_dots_23467         0x100286e  /* U+286e BRAILLE PATTERN DOTS-23467 */
+#define XK_braille_dots_123467        0x100286f  /* U+286f BRAILLE PATTERN DOTS-123467 */
+#define XK_braille_dots_567           0x1002870  /* U+2870 BRAILLE PATTERN DOTS-567 */
+#define XK_braille_dots_1567          0x1002871  /* U+2871 BRAILLE PATTERN DOTS-1567 */
+#define XK_braille_dots_2567          0x1002872  /* U+2872 BRAILLE PATTERN DOTS-2567 */
+#define XK_braille_dots_12567         0x1002873  /* U+2873 BRAILLE PATTERN DOTS-12567 */
+#define XK_braille_dots_3567          0x1002874  /* U+2874 BRAILLE PATTERN DOTS-3567 */
+#define XK_braille_dots_13567         0x1002875  /* U+2875 BRAILLE PATTERN DOTS-13567 */
+#define XK_braille_dots_23567         0x1002876  /* U+2876 BRAILLE PATTERN DOTS-23567 */
+#define XK_braille_dots_123567        0x1002877  /* U+2877 BRAILLE PATTERN DOTS-123567 */
+#define XK_braille_dots_4567          0x1002878  /* U+2878 BRAILLE PATTERN DOTS-4567 */
+#define XK_braille_dots_14567         0x1002879  /* U+2879 BRAILLE PATTERN DOTS-14567 */
+#define XK_braille_dots_24567         0x100287a  /* U+287a BRAILLE PATTERN DOTS-24567 */
+#define XK_braille_dots_124567        0x100287b  /* U+287b BRAILLE PATTERN DOTS-124567 */
+#define XK_braille_dots_34567         0x100287c  /* U+287c BRAILLE PATTERN DOTS-34567 */
+#define XK_braille_dots_134567        0x100287d  /* U+287d BRAILLE PATTERN DOTS-134567 */
+#define XK_braille_dots_234567        0x100287e  /* U+287e BRAILLE PATTERN DOTS-234567 */
+#define XK_braille_dots_1234567       0x100287f  /* U+287f BRAILLE PATTERN DOTS-1234567 */
+#define XK_braille_dots_8             0x1002880  /* U+2880 BRAILLE PATTERN DOTS-8 */
+#define XK_braille_dots_18            0x1002881  /* U+2881 BRAILLE PATTERN DOTS-18 */
+#define XK_braille_dots_28            0x1002882  /* U+2882 BRAILLE PATTERN DOTS-28 */
+#define XK_braille_dots_128           0x1002883  /* U+2883 BRAILLE PATTERN DOTS-128 */
+#define XK_braille_dots_38            0x1002884  /* U+2884 BRAILLE PATTERN DOTS-38 */
+#define XK_braille_dots_138           0x1002885  /* U+2885 BRAILLE PATTERN DOTS-138 */
+#define XK_braille_dots_238           0x1002886  /* U+2886 BRAILLE PATTERN DOTS-238 */
+#define XK_braille_dots_1238          0x1002887  /* U+2887 BRAILLE PATTERN DOTS-1238 */
+#define XK_braille_dots_48            0x1002888  /* U+2888 BRAILLE PATTERN DOTS-48 */
+#define XK_braille_dots_148           0x1002889  /* U+2889 BRAILLE PATTERN DOTS-148 */
+#define XK_braille_dots_248           0x100288a  /* U+288a BRAILLE PATTERN DOTS-248 */
+#define XK_braille_dots_1248          0x100288b  /* U+288b BRAILLE PATTERN DOTS-1248 */
+#define XK_braille_dots_348           0x100288c  /* U+288c BRAILLE PATTERN DOTS-348 */
+#define XK_braille_dots_1348          0x100288d  /* U+288d BRAILLE PATTERN DOTS-1348 */
+#define XK_braille_dots_2348          0x100288e  /* U+288e BRAILLE PATTERN DOTS-2348 */
+#define XK_braille_dots_12348         0x100288f  /* U+288f BRAILLE PATTERN DOTS-12348 */
+#define XK_braille_dots_58            0x1002890  /* U+2890 BRAILLE PATTERN DOTS-58 */
+#define XK_braille_dots_158           0x1002891  /* U+2891 BRAILLE PATTERN DOTS-158 */
+#define XK_braille_dots_258           0x1002892  /* U+2892 BRAILLE PATTERN DOTS-258 */
+#define XK_braille_dots_1258          0x1002893  /* U+2893 BRAILLE PATTERN DOTS-1258 */
+#define XK_braille_dots_358           0x1002894  /* U+2894 BRAILLE PATTERN DOTS-358 */
+#define XK_braille_dots_1358          0x1002895  /* U+2895 BRAILLE PATTERN DOTS-1358 */
+#define XK_braille_dots_2358          0x1002896  /* U+2896 BRAILLE PATTERN DOTS-2358 */
+#define XK_braille_dots_12358         0x1002897  /* U+2897 BRAILLE PATTERN DOTS-12358 */
+#define XK_braille_dots_458           0x1002898  /* U+2898 BRAILLE PATTERN DOTS-458 */
+#define XK_braille_dots_1458          0x1002899  /* U+2899 BRAILLE PATTERN DOTS-1458 */
+#define XK_braille_dots_2458          0x100289a  /* U+289a BRAILLE PATTERN DOTS-2458 */
+#define XK_braille_dots_12458         0x100289b  /* U+289b BRAILLE PATTERN DOTS-12458 */
+#define XK_braille_dots_3458          0x100289c  /* U+289c BRAILLE PATTERN DOTS-3458 */
+#define XK_braille_dots_13458         0x100289d  /* U+289d BRAILLE PATTERN DOTS-13458 */
+#define XK_braille_dots_23458         0x100289e  /* U+289e BRAILLE PATTERN DOTS-23458 */
+#define XK_braille_dots_123458        0x100289f  /* U+289f BRAILLE PATTERN DOTS-123458 */
+#define XK_braille_dots_68            0x10028a0  /* U+28a0 BRAILLE PATTERN DOTS-68 */
+#define XK_braille_dots_168           0x10028a1  /* U+28a1 BRAILLE PATTERN DOTS-168 */
+#define XK_braille_dots_268           0x10028a2  /* U+28a2 BRAILLE PATTERN DOTS-268 */
+#define XK_braille_dots_1268          0x10028a3  /* U+28a3 BRAILLE PATTERN DOTS-1268 */
+#define XK_braille_dots_368           0x10028a4  /* U+28a4 BRAILLE PATTERN DOTS-368 */
+#define XK_braille_dots_1368          0x10028a5  /* U+28a5 BRAILLE PATTERN DOTS-1368 */
+#define XK_braille_dots_2368          0x10028a6  /* U+28a6 BRAILLE PATTERN DOTS-2368 */
+#define XK_braille_dots_12368         0x10028a7  /* U+28a7 BRAILLE PATTERN DOTS-12368 */
+#define XK_braille_dots_468           0x10028a8  /* U+28a8 BRAILLE PATTERN DOTS-468 */
+#define XK_braille_dots_1468          0x10028a9  /* U+28a9 BRAILLE PATTERN DOTS-1468 */
+#define XK_braille_dots_2468          0x10028aa  /* U+28aa BRAILLE PATTERN DOTS-2468 */
+#define XK_braille_dots_12468         0x10028ab  /* U+28ab BRAILLE PATTERN DOTS-12468 */
+#define XK_braille_dots_3468          0x10028ac  /* U+28ac BRAILLE PATTERN DOTS-3468 */
+#define XK_braille_dots_13468         0x10028ad  /* U+28ad BRAILLE PATTERN DOTS-13468 */
+#define XK_braille_dots_23468         0x10028ae  /* U+28ae BRAILLE PATTERN DOTS-23468 */
+#define XK_braille_dots_123468        0x10028af  /* U+28af BRAILLE PATTERN DOTS-123468 */
+#define XK_braille_dots_568           0x10028b0  /* U+28b0 BRAILLE PATTERN DOTS-568 */
+#define XK_braille_dots_1568          0x10028b1  /* U+28b1 BRAILLE PATTERN DOTS-1568 */
+#define XK_braille_dots_2568          0x10028b2  /* U+28b2 BRAILLE PATTERN DOTS-2568 */
+#define XK_braille_dots_12568         0x10028b3  /* U+28b3 BRAILLE PATTERN DOTS-12568 */
+#define XK_braille_dots_3568          0x10028b4  /* U+28b4 BRAILLE PATTERN DOTS-3568 */
+#define XK_braille_dots_13568         0x10028b5  /* U+28b5 BRAILLE PATTERN DOTS-13568 */
+#define XK_braille_dots_23568         0x10028b6  /* U+28b6 BRAILLE PATTERN DOTS-23568 */
+#define XK_braille_dots_123568        0x10028b7  /* U+28b7 BRAILLE PATTERN DOTS-123568 */
+#define XK_braille_dots_4568          0x10028b8  /* U+28b8 BRAILLE PATTERN DOTS-4568 */
+#define XK_braille_dots_14568         0x10028b9  /* U+28b9 BRAILLE PATTERN DOTS-14568 */
+#define XK_braille_dots_24568         0x10028ba  /* U+28ba BRAILLE PATTERN DOTS-24568 */
+#define XK_braille_dots_124568        0x10028bb  /* U+28bb BRAILLE PATTERN DOTS-124568 */
+#define XK_braille_dots_34568         0x10028bc  /* U+28bc BRAILLE PATTERN DOTS-34568 */
+#define XK_braille_dots_134568        0x10028bd  /* U+28bd BRAILLE PATTERN DOTS-134568 */
+#define XK_braille_dots_234568        0x10028be  /* U+28be BRAILLE PATTERN DOTS-234568 */
+#define XK_braille_dots_1234568       0x10028bf  /* U+28bf BRAILLE PATTERN DOTS-1234568 */
+#define XK_braille_dots_78            0x10028c0  /* U+28c0 BRAILLE PATTERN DOTS-78 */
+#define XK_braille_dots_178           0x10028c1  /* U+28c1 BRAILLE PATTERN DOTS-178 */
+#define XK_braille_dots_278           0x10028c2  /* U+28c2 BRAILLE PATTERN DOTS-278 */
+#define XK_braille_dots_1278          0x10028c3  /* U+28c3 BRAILLE PATTERN DOTS-1278 */
+#define XK_braille_dots_378           0x10028c4  /* U+28c4 BRAILLE PATTERN DOTS-378 */
+#define XK_braille_dots_1378          0x10028c5  /* U+28c5 BRAILLE PATTERN DOTS-1378 */
+#define XK_braille_dots_2378          0x10028c6  /* U+28c6 BRAILLE PATTERN DOTS-2378 */
+#define XK_braille_dots_12378         0x10028c7  /* U+28c7 BRAILLE PATTERN DOTS-12378 */
+#define XK_braille_dots_478           0x10028c8  /* U+28c8 BRAILLE PATTERN DOTS-478 */
+#define XK_braille_dots_1478          0x10028c9  /* U+28c9 BRAILLE PATTERN DOTS-1478 */
+#define XK_braille_dots_2478          0x10028ca  /* U+28ca BRAILLE PATTERN DOTS-2478 */
+#define XK_braille_dots_12478         0x10028cb  /* U+28cb BRAILLE PATTERN DOTS-12478 */
+#define XK_braille_dots_3478          0x10028cc  /* U+28cc BRAILLE PATTERN DOTS-3478 */
+#define XK_braille_dots_13478         0x10028cd  /* U+28cd BRAILLE PATTERN DOTS-13478 */
+#define XK_braille_dots_23478         0x10028ce  /* U+28ce BRAILLE PATTERN DOTS-23478 */
+#define XK_braille_dots_123478        0x10028cf  /* U+28cf BRAILLE PATTERN DOTS-123478 */
+#define XK_braille_dots_578           0x10028d0  /* U+28d0 BRAILLE PATTERN DOTS-578 */
+#define XK_braille_dots_1578          0x10028d1  /* U+28d1 BRAILLE PATTERN DOTS-1578 */
+#define XK_braille_dots_2578          0x10028d2  /* U+28d2 BRAILLE PATTERN DOTS-2578 */
+#define XK_braille_dots_12578         0x10028d3  /* U+28d3 BRAILLE PATTERN DOTS-12578 */
+#define XK_braille_dots_3578          0x10028d4  /* U+28d4 BRAILLE PATTERN DOTS-3578 */
+#define XK_braille_dots_13578         0x10028d5  /* U+28d5 BRAILLE PATTERN DOTS-13578 */
+#define XK_braille_dots_23578         0x10028d6  /* U+28d6 BRAILLE PATTERN DOTS-23578 */
+#define XK_braille_dots_123578        0x10028d7  /* U+28d7 BRAILLE PATTERN DOTS-123578 */
+#define XK_braille_dots_4578          0x10028d8  /* U+28d8 BRAILLE PATTERN DOTS-4578 */
+#define XK_braille_dots_14578         0x10028d9  /* U+28d9 BRAILLE PATTERN DOTS-14578 */
+#define XK_braille_dots_24578         0x10028da  /* U+28da BRAILLE PATTERN DOTS-24578 */
+#define XK_braille_dots_124578        0x10028db  /* U+28db BRAILLE PATTERN DOTS-124578 */
+#define XK_braille_dots_34578         0x10028dc  /* U+28dc BRAILLE PATTERN DOTS-34578 */
+#define XK_braille_dots_134578        0x10028dd  /* U+28dd BRAILLE PATTERN DOTS-134578 */
+#define XK_braille_dots_234578        0x10028de  /* U+28de BRAILLE PATTERN DOTS-234578 */
+#define XK_braille_dots_1234578       0x10028df  /* U+28df BRAILLE PATTERN DOTS-1234578 */
+#define XK_braille_dots_678           0x10028e0  /* U+28e0 BRAILLE PATTERN DOTS-678 */
+#define XK_braille_dots_1678          0x10028e1  /* U+28e1 BRAILLE PATTERN DOTS-1678 */
+#define XK_braille_dots_2678          0x10028e2  /* U+28e2 BRAILLE PATTERN DOTS-2678 */
+#define XK_braille_dots_12678         0x10028e3  /* U+28e3 BRAILLE PATTERN DOTS-12678 */
+#define XK_braille_dots_3678          0x10028e4  /* U+28e4 BRAILLE PATTERN DOTS-3678 */
+#define XK_braille_dots_13678         0x10028e5  /* U+28e5 BRAILLE PATTERN DOTS-13678 */
+#define XK_braille_dots_23678         0x10028e6  /* U+28e6 BRAILLE PATTERN DOTS-23678 */
+#define XK_braille_dots_123678        0x10028e7  /* U+28e7 BRAILLE PATTERN DOTS-123678 */
+#define XK_braille_dots_4678          0x10028e8  /* U+28e8 BRAILLE PATTERN DOTS-4678 */
+#define XK_braille_dots_14678         0x10028e9  /* U+28e9 BRAILLE PATTERN DOTS-14678 */
+#define XK_braille_dots_24678         0x10028ea  /* U+28ea BRAILLE PATTERN DOTS-24678 */
+#define XK_braille_dots_124678        0x10028eb  /* U+28eb BRAILLE PATTERN DOTS-124678 */
+#define XK_braille_dots_34678         0x10028ec  /* U+28ec BRAILLE PATTERN DOTS-34678 */
+#define XK_braille_dots_134678        0x10028ed  /* U+28ed BRAILLE PATTERN DOTS-134678 */
+#define XK_braille_dots_234678        0x10028ee  /* U+28ee BRAILLE PATTERN DOTS-234678 */
+#define XK_braille_dots_1234678       0x10028ef  /* U+28ef BRAILLE PATTERN DOTS-1234678 */
+#define XK_braille_dots_5678          0x10028f0  /* U+28f0 BRAILLE PATTERN DOTS-5678 */
+#define XK_braille_dots_15678         0x10028f1  /* U+28f1 BRAILLE PATTERN DOTS-15678 */
+#define XK_braille_dots_25678         0x10028f2  /* U+28f2 BRAILLE PATTERN DOTS-25678 */
+#define XK_braille_dots_125678        0x10028f3  /* U+28f3 BRAILLE PATTERN DOTS-125678 */
+#define XK_braille_dots_35678         0x10028f4  /* U+28f4 BRAILLE PATTERN DOTS-35678 */
+#define XK_braille_dots_135678        0x10028f5  /* U+28f5 BRAILLE PATTERN DOTS-135678 */
+#define XK_braille_dots_235678        0x10028f6  /* U+28f6 BRAILLE PATTERN DOTS-235678 */
+#define XK_braille_dots_1235678       0x10028f7  /* U+28f7 BRAILLE PATTERN DOTS-1235678 */
+#define XK_braille_dots_45678         0x10028f8  /* U+28f8 BRAILLE PATTERN DOTS-45678 */
+#define XK_braille_dots_145678        0x10028f9  /* U+28f9 BRAILLE PATTERN DOTS-145678 */
+#define XK_braille_dots_245678        0x10028fa  /* U+28fa BRAILLE PATTERN DOTS-245678 */
+#define XK_braille_dots_1245678       0x10028fb  /* U+28fb BRAILLE PATTERN DOTS-1245678 */
+#define XK_braille_dots_345678        0x10028fc  /* U+28fc BRAILLE PATTERN DOTS-345678 */
+#define XK_braille_dots_1345678       0x10028fd  /* U+28fd BRAILLE PATTERN DOTS-1345678 */
+#define XK_braille_dots_2345678       0x10028fe  /* U+28fe BRAILLE PATTERN DOTS-2345678 */
+#define XK_braille_dots_12345678      0x10028ff  /* U+28ff BRAILLE PATTERN DOTS-12345678 */
+#endif /* XK_BRAILLE */
Index: lib/X11/src/util/makekeys.c
===================================================================
RCS file: /cvs/xorg/lib/X11/src/util/makekeys.c,v
retrieving revision 1.5
--- lib/X11/src/util/makekeys.c	3 Jul 2005 07:00:56 -0000	1.5
+++ lib/X11/src/util/makekeys.c	25 Mar 2006 15:32:16 -0000
@@ -49,7 +49,7 @@
     KeySym	val;
 } info[KTNUM];
 
-#define MIN_REHASH 10
+#define MIN_REHASH 15
 #define MATCHES 10
 
 char tab[KTNUM];
-------------- next part --------------
Index: lib/X11/modules/im/ximcp/imLcFlt.c
===================================================================
RCS file: /cvs/xorg/lib/X11/modules/im/ximcp/imLcFlt.c,v
retrieving revision 1.3
diff -u -r1.3 imLcFlt.c
--- lib/X11/modules/im/ximcp/imLcFlt.c	13 May 2005 22:53:44 -0000	1.3
+++ lib/X11/modules/im/ximcp/imLcFlt.c	25 Mar 2006 03:20:15 -0000
@@ -51,16 +51,43 @@
     static char	 buf[256];
     DefTree	*p;
 
-    if(   (ev->type != KeyPress)
-       || (ev->xkey.keycode == 0)
-       || (((Xim)ic->core.im)->private.local.top == (DefTree *)NULL) )
-	return(False);
+    if(ev->xkey.keycode == 0)
+	return (False);
 
     XLookupString((XKeyEvent *)ev, buf, sizeof(buf), &keysym, NULL);
 
     if(IsModifierKey(keysym))
 	return (False);
 
+    if(keysym >= XK_braille_dot_1 && keysym <= XK_braille_dot_8) {
+	if(ev->type == KeyPress) {
+	    ic->private.local.brl_pressed |=
+		1<<(keysym-XK_braille_dot_1);
+	} else {
+	    if(!ic->private.local.brl_committing
+		    || ev->xkey.time - ic->private.local.brl_release_start > 300) {
+	    	ic->private.local.brl_committing = ic->private.local.brl_pressed;
+		ic->private.local.brl_release_start = ev->xkey.time;
+	    }
+	    ic->private.local.brl_pressed &= ~(1<<(keysym-XK_braille_dot_1));
+	    if(!ic->private.local.brl_pressed) {
+		if(ic->private.local.brl_committing) {
+		    ic->private.local.brl_committed =
+			ic->private.local.brl_committing;
+		    ic->private.local.composed = NULL;
+		    ev->type = KeyPress;
+		    ev->xkey.keycode = 0;
+		    _XPutBackEvent(d, ev);
+		}
+	    }
+	}
+	return(True);
+    }
+
+    if(   (ev->type != KeyPress)
+       || (((Xim)ic->core.im)->private.local.top == (DefTree *)NULL) )
+	return(False);
+
     for(p = ic->private.local.context; p; p = p->next) {
 	if(((ev->xkey.state & p->modifier_mask) == p->modifier) &&
 	    (keysym == p->keysym)) {
@@ -74,6 +101,7 @@
 	    return(True);
 	} else { /* Terminate (reached to leaf) */
 	    ic->private.local.composed = p;
+	    ic->private.local.brl_committed = 0;
 	    /* return back to client KeyPressEvent keycode == 0 */
 	    ev->xkey.keycode = 0;
 	    _XPutBackEvent(d, ev);
Index: lib/X11/modules/im/ximcp/imLcIc.c
===================================================================
RCS file: /cvs/xorg/lib/X11/modules/im/ximcp/imLcIc.c,v
retrieving revision 1.3
diff -u -r1.3 imLcIc.c
--- lib/X11/modules/im/ximcp/imLcIc.c	13 May 2005 22:53:44 -0000	1.3
+++ lib/X11/modules/im/ximcp/imLcIc.c	25 Mar 2006 03:20:15 -0000
@@ -87,7 +87,7 @@
 
     if (ic->core.focus_window)
 	_XRegisterFilterByType(ic->core.im->core.display,
-			ic->core.focus_window, KeyPress, KeyPress,
+			ic->core.focus_window, KeyPress, KeyRelease,
 			_XimLocalFilter, (XPointer)ic);
     return;
 }
@@ -97,8 +97,11 @@
     XIC	 xic)
 {
     Xic	 ic = (Xic)xic;
-    ic->private.local.composed = (DefTree *)NULL;
-    ic->private.local.context  = ((Xim)ic->core.im)->private.local.top;
+    ic->private.local.composed       = (DefTree *)NULL;
+    ic->private.local.context        = ((Xim)ic->core.im)->private.local.top;
+    ic->private.local.brl_pressed    = 0;
+    ic->private.local.brl_committing = 0;
+    ic->private.local.brl_committed  = 0;
 }
 
 Private char *
@@ -149,8 +152,11 @@
 
     ic->methods = &Local_ic_methods;
     ic->core.im = im;
-    ic->private.local.context   = ((Xim)im)->private.local.top;
-    ic->private.local.composed  = (DefTree *)NULL;
+    ic->private.local.context        = ((Xim)im)->private.local.top;
+    ic->private.local.composed       = (DefTree *)NULL;
+    ic->private.local.brl_pressed    = 0;
+    ic->private.local.brl_committing = 0;
+    ic->private.local.brl_committed  = 0;
 
     num = im->core.ic_num_resources;
     len = sizeof(XIMResource) * num;
Index: lib/X11/modules/im/ximcp/imLcLkup.c
===================================================================
RCS file: /cvs/xorg/lib/X11/modules/im/ximcp/imLcLkup.c,v
retrieving revision 1.3
diff -u -r1.3 imLcLkup.c
--- lib/X11/modules/im/ximcp/imLcLkup.c	13 May 2005 22:53:44 -0000	1.3
+++ lib/X11/modules/im/ximcp/imLcLkup.c	25 Mar 2006 03:20:15 -0000
@@ -42,6 +42,7 @@
 #include <X11/Xutil.h>
 #include "Xlibint.h"
 #include "Xlcint.h"
+#include "XlcPubI.h"
 #include "Ximint.h"
 
 Public int
@@ -60,25 +61,43 @@
 	if(status) *status = XLookupNone;
 	return(0);
     }
-    if(ev->keycode == 0 && ic->private.local.composed != NULL) { /* Composed Event */
-	ret = strlen(ic->private.local.composed->mb);
-	if(ret > bytes) {
-	    if(status) *status = XBufferOverflow;
-	    return(ret);
-	}
-	memcpy(buffer, ic->private.local.composed->mb, ret);
-	if(keysym) *keysym = ic->private.local.composed->ks;
-	if (ret > 0) {
-	    if (keysym && *keysym != NoSymbol) {
+    if(ev->keycode == 0 && 
+	   (  (ic->private.local.composed != NULL)
+	    ||(ic->private.local.brl_committed != 0))) {
+	if (ic->private.local.brl_committed != 0) { /* Braille Event */
+	    unsigned char pattern = ic->private.local.brl_committed;
+	    char mb[XLC_PUBLIC(ic->core.im->core.lcd, mb_cur_max)];
+	    ret = _Xlcwctomb(ic->core.im->core.lcd, mb, BRL_UC_ROW | pattern);
+	    if(ret > bytes) {
+		if(status) *status = XBufferOverflow;
+		return(ret);
+	    }
+	    if(keysym) {
+		*keysym = XK_braille_blank | pattern;
 		if(status) *status = XLookupBoth;
-	    } else {
+	    } else
 		if(status) *status = XLookupChars;
-	    }
-	} else {
-	    if(keysym && *keysym != NoSymbol) {
-		if(status) *status = XLookupKeySym;
-	    } else {
-		if(status) *status = XLookupNone;
+	    memcpy(buffer, mb, ret);
+	} else { /* Composed Event */
+	    ret = strlen(ic->private.local.composed->mb);
+	    if(ret > bytes) {
+		if(status) *status = XBufferOverflow;
+		return(ret);
+	    }
+	    memcpy(buffer, ic->private.local.composed->mb, ret);
+	    if(keysym) *keysym = ic->private.local.composed->ks;
+	    if (ret > 0) {
+		if (keysym && *keysym != NoSymbol) {
+		    if(status) *status = XLookupBoth;
+		} else {
+		    if(status) *status = XLookupChars;
+		}
+	    } else {
+		if(keysym && *keysym != NoSymbol) {
+		    if(status) *status = XLookupKeySym;
+		} else {
+		    if(status) *status = XLookupNone;
+		}
 	    }
 	}
 	return (ret);
@@ -119,26 +138,41 @@
 	if(status) *status = XLookupNone;
 	return(0);
     }
-    if(ev->keycode == 0) { /* Composed Event */
-	ret = _Xwcslen(ic->private.local.composed->wc);
-	if(ret > wlen) {
-	    if(status) *status = XBufferOverflow;
-	    return (ret);
-	}
-	memcpy((char *)buffer, (char *)ic->private.local.composed->wc,
-	       ret * sizeof(wchar_t));
-	if(keysym) *keysym = ic->private.local.composed->ks;
-	if (ret > 0) {
-	    if (keysym && *keysym != NoSymbol) {
+    if(ev->keycode == 0) {
+	if (ic->private.local.brl_committed != 0) { /* Braille Event */
+	    unsigned char pattern = ic->private.local.brl_committed;
+	    ret = 1;
+	    if (ret > wlen) {
+		if(status) *status = XBufferOverflow;
+		return (ret);
+	    }
+	    *buffer = BRL_UC_ROW | pattern;
+	    if(keysym) {
+		*keysym = XK_braille_blank | pattern;
 		if(status) *status = XLookupBoth;
-	    } else {
+	    } else
 		if(status) *status = XLookupChars;
-	    }
-	} else {
-	    if(keysym && *keysym != NoSymbol) {
-		if(status) *status = XLookupKeySym;
-	    } else {
-		if(status) *status = XLookupNone;
+	} else { /* Composed Event */
+	    ret = _Xwcslen(ic->private.local.composed->wc);
+	    if(ret > wlen) {
+		if(status) *status = XBufferOverflow;
+		return (ret);
+	    }
+	    memcpy((char *)buffer, (char *)ic->private.local.composed->wc,
+		   ret * sizeof(wchar_t));
+	    if(keysym) *keysym = ic->private.local.composed->ks;
+	    if (ret > 0) {
+		if (keysym && *keysym != NoSymbol) {
+		    if(status) *status = XLookupBoth;
+		} else {
+		    if(status) *status = XLookupChars;
+		}
+	    } else {
+		if(keysym && *keysym != NoSymbol) {
+		    if(status) *status = XLookupKeySym;
+		} else {
+		    if(status) *status = XLookupNone;
+		}
 	    }
 	}
 	return (ret);
@@ -179,25 +213,37 @@
 	if(status) *status = XLookupNone;
 	return(0);
     }
-    if(ev->keycode == 0) { /* Composed Event */
-	ret = strlen(ic->private.local.composed->utf8);
-	if(ret > bytes) {
-	    if(status) *status = XBufferOverflow;
-	    return (ret);
-	}
-	memcpy(buffer, ic->private.local.composed->utf8, ret);
-	if(keysym) *keysym = ic->private.local.composed->ks;
-	if (ret > 0) {
-	    if (keysym && *keysym != NoSymbol) {
-		if(status) *status = XLookupBoth;
-	    } else {
-		if(status) *status = XLookupChars;
+    if(ev->keycode == 0) {
+	if (ic->private.local.brl_committed != 0) { /* Braille Event */
+	    unsigned char pattern = ic->private.local.brl_committed;
+	    ret = 3;
+	    if (ret > bytes) {
+		if(status) *status = XBufferOverflow;
+		return (ret);
 	    }
-	} else {
-	    if(keysym && *keysym != NoSymbol) {
-		if(status) *status = XLookupKeySym;
-	    } else {
-		if(status) *status = XLookupNone;
+	    buffer[0] = 0xe0 | ((BRL_UC_ROW >> 12) & 0x0f);
+	    buffer[1] = 0x80 | ((BRL_UC_ROW >> 8) & 0x30) | (pattern >> 6);
+	    buffer[2] = 0x80 | (pattern & 0x3f);
+	} else { /* Composed Event */
+	    ret = strlen(ic->private.local.composed->utf8);
+	    if(ret > bytes) {
+		if(status) *status = XBufferOverflow;
+		return (ret);
+	    }
+	    memcpy(buffer, ic->private.local.composed->utf8, ret);
+	    if(keysym) *keysym = ic->private.local.composed->ks;
+	    if (ret > 0) {
+		if (keysym && *keysym != NoSymbol) {
+		    if(status) *status = XLookupBoth;
+		} else {
+		    if(status) *status = XLookupChars;
+		}
+	    } else {
+		if(keysym && *keysym != NoSymbol) {
+		    if(status) *status = XLookupKeySym;
+		} else {
+		    if(status) *status = XLookupNone;
+		}
 	    }
 	}
 	return (ret);
Index: lib/X11/modules/im/ximcp/imRm.c
===================================================================
RCS file: /cvs/xorg/lib/X11/modules/im/ximcp/imRm.c,v
retrieving revision 1.4
diff -u -r1.4 imRm.c
--- lib/X11/modules/im/ximcp/imRm.c	13 May 2005 22:53:44 -0000	1.4
+++ lib/X11/modules/im/ximcp/imRm.c	25 Mar 2006 03:20:16 -0000
@@ -2702,7 +2702,7 @@
 	if (flag) {
 	    _XRegisterFilterByType(ic->core.im->core.display,
 			ic->core.focus_window,
-			KeyPress, KeyPress, _XimLocalFilter, (XPointer)ic);
+			KeyPress, KeyRelease, _XimLocalFilter, (XPointer)ic);
 	}
     } else if (res->xrm_name == XrmStringToQuark(XNFocusWindow)) {
 	if (ic->core.client_window) {
@@ -2713,7 +2713,7 @@
 	    ic->core.focus_window = (Window)p->value;
 	    if (flag) {
 	        _XRegisterFilterByType(ic->core.im->core.display,
-			ic->core.focus_window, KeyPress, KeyPress,
+			ic->core.focus_window, KeyPress, KeyRelease,
 			_XimLocalFilter, (XPointer)ic);
 	    }
 	} else
Index: lib/X11/src/xlibi18n/Ximint.h
===================================================================
RCS file: /cvs/xorg/lib/X11/src/xlibi18n/Ximint.h,v
retrieving revision 1.2
diff -u -r1.2 Ximint.h
--- lib/X11/src/xlibi18n/Ximint.h	23 Apr 2004 18:43:24 -0000	1.2
+++ lib/X11/src/xlibi18n/Ximint.h	25 Mar 2006 03:20:17 -0000
@@ -180,6 +180,8 @@
 #define	XIM_FALSE	False
 #define	XIM_OVERFLOW	(-1)
 
+#define BRL_UC_ROW	0x2800
+
 /*
  * Global symbols
  */
Index: lib/X11/src/xlibi18n/XimintL.h
===================================================================
RCS file: /cvs/xorg/lib/X11/src/xlibi18n/XimintL.h,v
retrieving revision 1.2
diff -u -r1.2 XimintL.h
--- lib/X11/src/xlibi18n/XimintL.h	23 Apr 2004 18:43:24 -0000	1.2
+++ lib/X11/src/xlibi18n/XimintL.h	25 Mar 2006 03:20:17 -0000
@@ -84,5 +84,8 @@
 
 	XIMResourceList		 ic_resources;
 	unsigned int		 ic_num_resources;
+
+	unsigned char	 	 brl_pressed, brl_committing, brl_committed;
+	Time		 	 brl_release_start;
 } XicLocalPrivateRec;
 #endif /* _XIMINTL_H */
-------------- next part --------------
Index: apps/xev/xev.c
===================================================================
RCS file: /cvs/xorg/app/xev/xev.c,v
retrieving revision 1.2
diff -u -r1.2 xev.c
--- apps/xev/xev.c	23 Apr 2004 19:54:46 -0000	1.2
+++ apps/xev/xev.c	25 Mar 2006 03:20:24 -0000
@@ -157,10 +157,10 @@
         } else {
     	   printf ("\n");
         }
-
-        printf ("    XFilterEvent returns: %s\n", 
-                XFilterEvent (eventp, e->window) ? "True" : "False");
     }
+
+    printf ("    XFilterEvent returns: %s\n", 
+	    XFilterEvent (eventp, e->window) ? "True" : "False");
 }
 
 static void


More information about the xorg mailing list