Mercurial > pidgin
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; |