File: | test/cafekbd-keyboard-drawing-test.c |
Warning: | line 225, column 3 This statement is never executed |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* |
2 | * Copyright (C) 2006 Sergey V. Udaltsov <svu@gnome.org> |
3 | * |
4 | * This library is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU Lesser General Public |
6 | * License as published by the Free Software Foundation; either |
7 | * version 2 of the License, or (at your option) any later version. |
8 | * |
9 | * This library is distributed in the hope that it will be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | * Lesser General Public License for more details. |
13 | * |
14 | * You should have received a copy of the GNU Lesser General Public |
15 | * License along with this library; if not, write to the |
16 | * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, |
17 | * Boston, MA 02110-1301, USA. |
18 | */ |
19 | |
20 | #if HAVE_CONFIG_H1 |
21 | # include <config.h> |
22 | #endif |
23 | |
24 | #include <ctk/ctk.h> |
25 | #include <stdlib.h> |
26 | #include <string.h> |
27 | #include <glib.h> |
28 | #include "libcafekbd/cafekbd-keyboard-drawing.h" |
29 | |
30 | |
31 | static gchar *groups = NULL((void*)0); |
32 | static gchar *levels = NULL((void*)0); |
33 | static gchar *symbols = NULL((void*)0); |
34 | static gchar *keycodes = NULL((void*)0); |
35 | static gchar *geometry = NULL((void*)0); |
36 | |
37 | static gboolean track_config = FALSE(0); |
38 | static gboolean track_modifiers = FALSE(0); |
39 | static gboolean program_version = FALSE(0); |
40 | |
41 | static const GOptionEntry options[] = { |
42 | {"groups", '\0', 0, G_OPTION_ARG_STRING, &groups, |
43 | "Keyboard groups to display, from 1-4. Up to four groups only may be " |
44 | "displayed. Examples: --groups=3 or --groups=1,2,1,2", |
45 | "group1[,group2[,group3[,group4]]]"}, |
46 | {"levels", '\0', 0, G_OPTION_ARG_STRING, &levels, |
47 | "Keyboard shift levels to display, from 1-64. Up to four shift levels " |
48 | "only may be displayed. Examples: --levels=3 or --levels=1,2,1,2", |
49 | "level1[,level2[,level3[,level4]]]"}, |
50 | {"symbols", '\0', 0, G_OPTION_ARG_STRING, &symbols, |
51 | "Symbols component of the keyboard. If you omit this option, it is " |
52 | "obtained from the X server; that is, the keyboard that is currently " |
53 | "configured is drawn. Examples: --symbols=us or " |
54 | "--symbols=us(pc104)+iso9995-3+group(switch)+ctrl(nocaps)", NULL((void*)0)}, |
55 | {"keycodes", '\0', 0, G_OPTION_ARG_STRING, &keycodes, |
56 | "Keycodes component of the keyboard. If you omit this option, it is " |
57 | "obtained from the X server; that is, the keyboard that is currently" |
58 | " configured is drawn. Examples: --keycodes=xfree86+aliases(qwerty)", |
59 | NULL((void*)0)}, |
60 | {"geometry", '\0', 0, G_OPTION_ARG_STRING, &geometry, |
61 | "Geometry xkb component. If you omit this option, it is obtained from the" |
62 | " X server; that is, the keyboard that is currently configured is drawn. " |
63 | "Example: --geometry=kinesis", NULL((void*)0)}, |
64 | {"track-modifiers", '\0', 0, G_OPTION_ARG_NONE, &track_modifiers, |
65 | "Track the current modifiers", NULL((void*)0)}, |
66 | {"track-config", '\0', 0, G_OPTION_ARG_NONE, &track_config, |
67 | "Track the server XKB configuration", NULL((void*)0)}, |
68 | {"version", '\0', 0, G_OPTION_ARG_NONE, &program_version, |
69 | "Show current version", NULL((void*)0)}, |
70 | {NULL((void*)0)}, |
71 | }; |
72 | |
73 | static gboolean |
74 | set_groups (gchar * groups_option, |
75 | CafekbdKeyboardDrawingGroupLevel * groupLevels) |
76 | { |
77 | CafekbdKeyboardDrawingGroupLevel *pgl = groupLevels; |
78 | gint cntr, g; |
79 | |
80 | groupLevels[0].group = |
81 | groupLevels[1].group = |
82 | groupLevels[2].group = groupLevels[3].group = -1; |
83 | |
84 | if (groups_option == NULL((void*)0)) |
85 | return TRUE(!(0)); |
86 | |
87 | for (cntr = 4; --cntr >= 0;) { |
88 | if (*groups_option == '\0') |
89 | return FALSE(0); |
90 | |
91 | g = *groups_option - '1'; |
92 | if (g < 0 || g >= 4) |
93 | return FALSE(0); |
94 | |
95 | pgl->group = g; |
96 | /* printf ("group %d\n", pgl->group); */ |
97 | |
98 | groups_option++; |
99 | if (*groups_option == '\0') |
100 | return TRUE(!(0)); |
101 | if (*groups_option != ',') |
102 | return FALSE(0); |
103 | |
104 | groups_option++; |
105 | pgl++; |
106 | } |
107 | |
108 | return TRUE(!(0)); |
109 | } |
110 | |
111 | static gboolean |
112 | set_levels (gchar * levels_option, |
113 | CafekbdKeyboardDrawingGroupLevel * groupLevels) |
114 | { |
115 | CafekbdKeyboardDrawingGroupLevel *pgl = groupLevels; |
116 | gint cntr, l; |
117 | gchar *p; |
118 | |
119 | groupLevels[0].level = |
120 | groupLevels[1].level = |
121 | groupLevels[2].level = groupLevels[3].level = -1; |
122 | |
123 | if (levels_option == NULL((void*)0)) |
124 | return TRUE(!(0)); |
125 | |
126 | for (cntr = 4; --cntr >= 0;) { |
127 | if (*levels_option == '\0') |
128 | return FALSE(0); |
129 | |
130 | l = (gint) strtol (levels_option, &p, 10) - 1; |
131 | if (l < 0 || l >= 64) |
132 | return FALSE(0); |
133 | |
134 | pgl->level = l; |
135 | /* printf ("level %d\n", pgl->level); */ |
136 | |
137 | levels_option = p; |
138 | if (*levels_option == '\0') |
139 | return TRUE(!(0)); |
140 | if (*levels_option != ',') |
141 | return FALSE(0); |
142 | |
143 | levels_option++; |
144 | pgl++; |
145 | } |
146 | |
147 | return TRUE(!(0)); |
148 | } |
149 | |
150 | static void |
151 | bad_keycode (CafekbdKeyboardDrawing *drawing G_GNUC_UNUSED__attribute__ ((__unused__)), |
152 | guint keycode) |
153 | { |
154 | g_warning |
155 | ("got keycode %u, which is not on your keyboard according to your configuration", |
156 | keycode); |
157 | } |
158 | |
159 | gint |
160 | main (gint argc, gchar ** argv) |
161 | { |
162 | CtkWidget *window; |
163 | CtkWidget *cafekbd_keyboard_drawing; |
164 | CdkScreen *screen; |
165 | CdkMonitor *monitor; |
166 | CdkRectangle rect; |
167 | GOptionContext *context; |
168 | GError *error = NULL((void*)0); |
169 | |
170 | CafekbdKeyboardDrawingGroupLevel groupLevels[4] = |
171 | { {0, 0}, {1, 0}, {0, 1}, {1, 1} }; |
172 | CafekbdKeyboardDrawingGroupLevel *pgroupLevels[4] = |
173 | { &groupLevels[0], &groupLevels[1], &groupLevels[2], |
174 | &groupLevels[3] |
175 | }; |
176 | |
177 | context = g_option_context_new ("kbdraw"); |
178 | g_option_context_add_main_entries (context, options, NULL((void*)0)); |
179 | if (!g_option_context_parse (context, &argc, &argv, &error)) { |
180 | g_message ("option parsing failed: %s", error->message); |
181 | g_option_context_free (context); |
182 | exit (EXIT_FAILURE1); |
183 | } |
184 | g_option_context_free (context); |
185 | |
186 | if (program_version) { |
187 | g_print ("kbdraw %s\n", VERSION"2.0.0"); |
188 | exit (0); |
189 | } |
190 | |
191 | ctk_init (&argc, &argv); |
192 | |
193 | if (!set_groups (groups, groupLevels)) { |
194 | g_printerr ("--groups: invalid argument\n"); |
195 | exit (1); |
196 | } |
197 | |
198 | if (!set_levels (levels, groupLevels)) { |
199 | g_printerr ("--levels: invalid argument\n"); |
200 | exit (1); |
201 | } |
202 | |
203 | window = ctk_window_new (CTK_WINDOW_TOPLEVEL); |
204 | g_signal_connect (G_OBJECT (window), "destroy",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((window)), (((GType) ((20) << (2))) )))))), ("destroy"), (((GCallback) (ctk_main_quit))), (((void *)0)), ((void*)0), (GConnectFlags) 0) |
205 | G_CALLBACK (ctk_main_quit), NULL)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((window)), (((GType) ((20) << (2))) )))))), ("destroy"), (((GCallback) (ctk_main_quit))), (((void *)0)), ((void*)0), (GConnectFlags) 0); |
206 | |
207 | screen = ctk_window_get_screen (CTK_WINDOW (window)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((window)), ((ctk_window_get_type ()))))))); |
208 | monitor = cdk_display_get_monitor_at_point (cdk_screen_get_display (screen), 0, 0); |
209 | cdk_monitor_get_geometry (monitor, &rect); |
210 | ctk_window_set_default_size (CTK_WINDOW (window)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((window)), ((ctk_window_get_type ())))))), |
211 | rect.width * 4 / 5, |
212 | rect.height * 1 / 2); |
213 | |
214 | ctk_widget_show (window); |
215 | |
216 | cafekbd_keyboard_drawing = cafekbd_keyboard_drawing_new (); |
217 | ctk_widget_show (cafekbd_keyboard_drawing); |
218 | ctk_container_add (CTK_CONTAINER (window)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((window)), ((ctk_container_get_type ())))))), cafekbd_keyboard_drawing); |
219 | |
220 | cafekbd_keyboard_drawing_set_groups_levels (CAFEKBD_KEYBOARD_DRAWING((((CafekbdKeyboardDrawing*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (cafekbd_keyboard_drawing_get_type ()))))) |
221 | (cafekbd_keyboard_drawing)((((CafekbdKeyboardDrawing*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (cafekbd_keyboard_drawing_get_type ()))))), |
222 | pgroupLevels); |
223 | |
224 | if (track_modifiers) |
225 | cafekbd_keyboard_drawing_set_track_modifiers |
This statement is never executed | |
226 | (CAFEKBD_KEYBOARD_DRAWING (cafekbd_keyboard_drawing)((((CafekbdKeyboardDrawing*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (cafekbd_keyboard_drawing_get_type ()))))), TRUE(!(0))); |
227 | if (track_config) |
228 | cafekbd_keyboard_drawing_set_track_config |
229 | (CAFEKBD_KEYBOARD_DRAWING (cafekbd_keyboard_drawing)((((CafekbdKeyboardDrawing*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (cafekbd_keyboard_drawing_get_type ()))))), TRUE(!(0))); |
230 | g_signal_connect (G_OBJECT (cafekbd_keyboard_drawing), "bad-keycode",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (((GType) (( 20) << (2))))))))), ("bad-keycode"), (((GCallback) (bad_keycode ))), (((void*)0)), ((void*)0), (GConnectFlags) 0) |
231 | G_CALLBACK (bad_keycode), NULL)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (((GType) (( 20) << (2))))))))), ("bad-keycode"), (((GCallback) (bad_keycode ))), (((void*)0)), ((void*)0), (GConnectFlags) 0); |
232 | |
233 | if (symbols || geometry || keycodes) { |
234 | XkbComponentNamesRec names; |
235 | gint success; |
236 | |
237 | memset (&names, '\0', sizeof (names)); |
238 | |
239 | if (symbols) |
240 | names.symbols = symbols; |
241 | else |
242 | names.symbols = (gchar *) |
243 | cafekbd_keyboard_drawing_get_symbols |
244 | (CAFEKBD_KEYBOARD_DRAWING((((CafekbdKeyboardDrawing*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (cafekbd_keyboard_drawing_get_type ()))))) |
245 | (cafekbd_keyboard_drawing)((((CafekbdKeyboardDrawing*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (cafekbd_keyboard_drawing_get_type ())))))); |
246 | |
247 | if (keycodes) |
248 | names.keycodes = keycodes; |
249 | else |
250 | names.keycodes = (gchar *) |
251 | cafekbd_keyboard_drawing_get_keycodes |
252 | (CAFEKBD_KEYBOARD_DRAWING((((CafekbdKeyboardDrawing*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (cafekbd_keyboard_drawing_get_type ()))))) |
253 | (cafekbd_keyboard_drawing)((((CafekbdKeyboardDrawing*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (cafekbd_keyboard_drawing_get_type ())))))); |
254 | |
255 | if (geometry) |
256 | names.geometry = geometry; |
257 | else |
258 | names.geometry = (gchar *) |
259 | cafekbd_keyboard_drawing_get_geometry |
260 | (CAFEKBD_KEYBOARD_DRAWING((((CafekbdKeyboardDrawing*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (cafekbd_keyboard_drawing_get_type ()))))) |
261 | (cafekbd_keyboard_drawing)((((CafekbdKeyboardDrawing*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (cafekbd_keyboard_drawing_get_type ())))))); |
262 | |
263 | success = |
264 | cafekbd_keyboard_drawing_set_keyboard |
265 | (CAFEKBD_KEYBOARD_DRAWING (cafekbd_keyboard_drawing)((((CafekbdKeyboardDrawing*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((cafekbd_keyboard_drawing)), (cafekbd_keyboard_drawing_get_type ()))))), |
266 | &names); |
267 | if (!success) { |
268 | g_printerr |
269 | ("\nError loading new keyboard description with components:\n\n" |
270 | " keycodes: %s\n" " types: %s\n" |
271 | " compat: %s\n" " symbols: %s\n" |
272 | " geometry: %s\n\n", names.keycodes, |
273 | names.types, names.compat, names.symbols, |
274 | names.geometry); |
275 | exit (1); |
276 | } |
277 | } |
278 | |
279 | ctk_widget_grab_focus (cafekbd_keyboard_drawing); |
280 | |
281 | ctk_main (); |
282 | |
283 | return 0; |
284 | } |