static gboolean Save_shortcuts(GtkWidget *button, gpointer pointer) { GtkTreeIter iter; GtkTreeView *treeview = (GtkTreeView *)pointer; GtkTreeModel *model = gtk_tree_view_get_model (treeview); gint i = 0; remove_shortcuts(); if(gtk_tree_model_get_iter_first(model, &iter)) { do { i++; } while(gtk_tree_model_iter_next(model, &iter)); gtk_tree_model_get_iter_first(model, &iter); macros = g_malloc((i + 1) * sizeof(macro_t)); i = 0; if(macros != NULL) { do { gtk_tree_model_get(model, &iter, COLUMN_SHORTCUT, &(macros[i].shortcut), \ COLUMN_ACTION, &(macros[i].action), \ -1); i++; } while(gtk_tree_model_iter_next(model, &iter)); macros[i].shortcut = NULL; macros[i].action = NULL; } } add_shortcuts(); return FALSE; }
int main(int argc, char *argv[]) { gchar *message; config_file = g_strdup_printf("%s/.gtktermrc", getenv("HOME")); bindtextdomain(PACKAGE, LOCALEDIR); bind_textdomain_codeset(PACKAGE, "UTF-8"); textdomain(PACKAGE); gtk_init(&argc, &argv); create_buffer(); create_main_window(); if(read_command_line(argc, argv) < 0) { delete_buffer(); exit(1); } Config_port(); message = get_port_string(); Set_window_title(message); Set_status_message(message); g_free(message); add_shortcuts(); set_view(ASCII_VIEW); gtk_main(); delete_buffer(); Close_port(); return 0; }
//------------------------------------------------------------------------------ void mforms::gtk::MenuItemImpl::set_shortcut(mforms::MenuItem *item, const std::string &item_shortcut) { if (item_shortcut.empty()) { logWarning("Shortcut is empty\n"); return; } Gtk::MenuItem *menu_item = cast<Gtk::MenuItem *>(item->get_data_ptr()); if (menu_item == NULL) { logError("Menu item was not defined (%s)\n", item_shortcut.c_str()); return; } // convert the accelerator format from Control+X to <control>x which is recognized by gtk std::vector<std::string> parts(base::split(item_shortcut, "+")); std::vector<std::string> keys; std::string key = parts.back(); parts.pop_back(); if (key == "Space") keys.push_back("space"); else if (key == "PageUp") { keys.push_back("Page_Up"); keys.push_back("KP_Page_Up"); } else if (key == "PageDown") { keys.push_back("Page_Down"); keys.push_back("KP_Page_Down"); } else if (key == "Slash") { keys.push_back("slash"); keys.push_back("KP_Divide"); } else if (key == "Minus") { keys.push_back("minus"); keys.push_back("KP_Subtract"); } else if (key == "Plus") { keys.push_back("plus"); keys.push_back("KP_Add"); } else if (key == "Asterisk") { keys.push_back("multiply"); keys.push_back("KP_Multiply"); } else if (key == "Period") { keys.push_back("period"); keys.push_back("KP_Decimal"); } else if (key == "Return") { keys.push_back("Return"); keys.push_back("KP_Enter"); } else if (key == "Home") { keys.push_back("Home"); keys.push_back("KP_Home"); } else if (key == "End") { keys.push_back("End"); keys.push_back("KP_End"); } else if (key == "Insert") { keys.push_back("Insert"); keys.push_back("KP_Insert"); } else if (key == "Delete") { keys.push_back("Delete"); keys.push_back("KP_Delete"); } else if (key == "Up") { keys.push_back("Up"); keys.push_back("KP_Up"); } else if (key == "Down") { keys.push_back("Down"); keys.push_back("KP_Down"); } else if (key == "Left") { keys.push_back("Left"); keys.push_back("KP_Left"); } else if (key == "Right") { keys.push_back("Right"); keys.push_back("KP_Right"); } else if (key == "0") { keys.push_back("0"); keys.push_back("KP_0"); } else if (key == "1") { keys.push_back("1"); keys.push_back("KP_1"); } else if (key == "2") { keys.push_back("2"); keys.push_back("KP_2"); } else if (key == "3") { keys.push_back("3"); keys.push_back("KP_3"); } else if (key == "4") { keys.push_back("4"); keys.push_back("KP_4"); } else if (key == "5") { keys.push_back("5"); keys.push_back("KP_5"); } else if (key == "6") { keys.push_back("6"); keys.push_back("KP_6"); } else if (key == "7") { keys.push_back("7"); keys.push_back("KP_7"); } else if (key == "8") { keys.push_back("8"); keys.push_back("KP_8"); } else if (key == "9") { keys.push_back("9"); keys.push_back("KP_9"); } else keys.push_back(key); // if the item is not in a menu yet, the shortcut adding will be deferred if (item->get_parent() && get_accel_group(item->get_parent())) add_shortcuts(get_accel_group(item->get_parent()), menu_item, parts, keys); }