comparison finch/libgnt/gntstyle.c @ 21212:b65f1bff6412

Allow binding key-shortcuts to menuitems. For example, to bind ctrl+m to the 'Options -> Send IM...' menu, you would add: [buddylist::menu] c-m = send-im in ~/.gntrc
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Wed, 03 Oct 2007 06:51:26 +0000
parents 9b2376dde204
children 430fd445a053
comparison
equal deleted inserted replaced
21210:5a12b881ac39 21212:b65f1bff6412
225 } 225 }
226 g_free(name); 226 g_free(name);
227 #endif 227 #endif
228 } 228 }
229 229
230 gboolean gnt_style_read_menu_accels(const char *name, GHashTable *table)
231 {
232 #if GLIB_CHECK_VERSION(2,6,0)
233 char *kname;
234 GError *error = NULL;
235 gboolean ret = FALSE;
236
237 kname = g_strdup_printf("%s::menu", name);
238
239 if (g_key_file_has_group(gkfile, kname))
240 {
241 gsize len = 0;
242 char **keys;
243
244 keys = g_key_file_get_keys(gkfile, kname, &len, &error);
245 if (error)
246 {
247 g_printerr("GntStyle: %s\n", error->message);
248 g_error_free(error);
249 g_free(kname);
250 return ret;
251 }
252
253 while (len--)
254 {
255 char *key, *menuid;
256
257 key = g_strdup(keys[len]);
258 menuid = g_key_file_get_string(gkfile, kname, keys[len], &error);
259
260 if (error)
261 {
262 g_printerr("GntStyle: %s\n", error->message);
263 g_error_free(error);
264 error = NULL;
265 }
266 else
267 {
268 const char *keycode = parse_key(key);
269 if (keycode == NULL) {
270 g_printerr("GntStyle: Invalid key-binding %s\n", key);
271 } else {
272 ret = TRUE;
273 g_hash_table_replace(table, g_strdup(keycode), menuid);
274 menuid = NULL;
275 }
276 }
277 g_free(key);
278 g_free(menuid);
279 }
280 g_strfreev(keys);
281 }
282
283 g_free(kname);
284 return ret;
285 #endif
286 return FALSE;
287 }
288
230 void gnt_styles_get_keyremaps(GType type, GHashTable *hash) 289 void gnt_styles_get_keyremaps(GType type, GHashTable *hash)
231 { 290 {
232 #if GLIB_CHECK_VERSION(2,6,0) 291 #if GLIB_CHECK_VERSION(2,6,0)
233 char *name; 292 char *name;
234 GError *error = NULL; 293 GError *error = NULL;