/* gtkcellrendereraccel.h * Copyright (C) 2000 Red Hat, Inc., Jonathan Blandford * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library. If not, see . */ #include #include static void accel_edited_callback (GtkCellRendererText *cell, const char *path_string, guint keyval, GdkModifierType mask, guint hardware_keycode, gpointer data) { GtkTreeModel *model = (GtkTreeModel *)data; GtkTreePath *path = gtk_tree_path_new_from_string (path_string); GtkTreeIter iter; gtk_tree_model_get_iter (model, &iter, path); g_print ("%u %d %u\n", keyval, mask, hardware_keycode); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, (gint)mask, 1, keyval, 2, hardware_keycode, -1); gtk_tree_path_free (path); } static void accel_cleared_callback (GtkCellRendererText *cell, const char *path_string, gpointer data) { GtkTreeModel *model = (GtkTreeModel *)data; GtkTreePath *path; GtkTreeIter iter; path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, 0, 1, 0, 2, 0, -1); gtk_tree_path_free (path); } static GtkWidget * key_test (void) { GtkWidget *window, *sw, *tv; GtkListStore *store; GtkTreeViewColumn *column; GtkCellRenderer *rend; gint i; GtkWidget *box, *entry; /* create window */ window = gtk_window_new (); gtk_window_set_default_size (GTK_WINDOW (window), 400, 400); sw = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_vexpand (sw, TRUE); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10); gtk_window_set_child (GTK_WINDOW (window), box); gtk_box_append (GTK_BOX (box), sw); store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_UINT, G_TYPE_UINT); tv = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), tv); column = gtk_tree_view_column_new (); rend = gtk_cell_renderer_accel_new (); g_object_set (G_OBJECT (rend), "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK, "editable", TRUE, NULL); g_signal_connect (G_OBJECT (rend), "accel-edited", G_CALLBACK (accel_edited_callback), store); g_signal_connect (G_OBJECT (rend), "accel-cleared", G_CALLBACK (accel_cleared_callback), store); gtk_tree_view_column_pack_start (column, rend, TRUE); gtk_tree_view_column_set_attributes (column, rend, "accel-mods", 0, "accel-key", 1, "keycode", 2, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (tv), column); for (i = 0; i < 10; i++) { GtkTreeIter iter; gtk_list_store_append (store, &iter); } entry = gtk_entry_new (); gtk_box_append (GTK_BOX (box), entry); return window; } gint main (gint argc, gchar **argv) { GtkWidget *dialog; gtk_init (); dialog = key_test (); gtk_widget_show (dialog); while (TRUE) g_main_context_iteration (NULL, TRUE); return 0; }