From 8ecc8aa21bf61063a8e2d0ef29a78d4a62616d29 Mon Sep 17 00:00:00 2001 From: mitchell <70453897+667e-11@users.noreply.github.com> Date: Wed, 13 Jul 2011 20:51:17 -0400 Subject: Refactored key commands and added menu accelerators. Key commands are now in keys.conf and keys.osx.conf which are loaded by the _m.textadept.menu module. --- src/textadept.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/textadept.c') diff --git a/src/textadept.c b/src/textadept.c index 661b8ca6..057742a6 100644 --- a/src/textadept.c +++ b/src/textadept.c @@ -22,6 +22,9 @@ #elif __OSX__ #include #include "igemacintegration/ige-mac-menu.h" +#define GDK_CONTROL_MASK 1 << 3 // Command key (GDK_MOD1_MASK) +#define GDK_MOD1_MASK 1 << 7 // Alt/option key (GDK_MOD5_MASK) +#define GDK_MOD5_MASK 1 << 2 // Control key (GDK_CONTROL_MASK) #elif __BSD__ #include #include @@ -77,6 +80,7 @@ // Window GtkWidget *window, *focused_editor, *menubar, *statusbar[2]; +GtkAccelGroup *accel = 0; char *textadept_home; void create_ui(); @@ -242,6 +246,7 @@ void create_ui() { signal(window, "delete-event", w_exit); signal(window, "focus-in-event", w_focus); signal(window, "key-press-event", w_keypress); + accel = gtk_accel_group_new(); #if __OSX__ AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, @@ -1369,12 +1374,16 @@ GtkWidget *l_create_gtkmenu(lua_State *lua, GCallback callback, int submenu) { gtk_menu_shell_append(GTK_MENU_SHELL(menu), l_create_gtkmenu(lua, callback, TRUE)); else - if (lua_objlen(lua, -1) == 2) { + if (lua_objlen(lua, -1) == 2 || lua_objlen(lua, -1) == 4) { lua_rawgeti(lua, -1, 1); lua_rawgeti(lua, -2, 2); label = lua_tostring(lua, -2); int menu_id = lua_tointeger(lua, -1); - lua_pop(lua, 2); // label and id + lua_rawgeti(lua, -3, 3); + lua_rawgeti(lua, -4, 4); + int key = !lua_isnil(lua, -2) ? lua_tointeger(lua, -2) : 0; + int modifiers = !lua_isnil(lua, -1) ? lua_tointeger(lua, -1) : 0; + lua_pop(lua, 4); // label, id, key, and modifiers if (label) { if (g_str_has_prefix(label, "gtk-")) menu_item = gtk_image_menu_item_new_from_stock(label, NULL); @@ -1382,11 +1391,14 @@ GtkWidget *l_create_gtkmenu(lua_State *lua, GCallback callback, int submenu) { menu_item = gtk_separator_menu_item_new(); else menu_item = gtk_menu_item_new_with_mnemonic(label); + if (key || modifiers) + gtk_widget_add_accelerator(menu_item, "activate", accel, key, + modifiers, GTK_ACCEL_VISIBLE); g_signal_connect(menu_item, "activate", callback, GINT_TO_POINTER(menu_id)); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); } - } else warn("gtkmenu: { 'menu label', id_number } expected"); + } else warn("gtkmenu: { 'label', id_num [, keycode, mods] } expected"); } lua_pop(lua, 1); // value } -- cgit v1.2.3