1 | /* gtkcellrendereraccel.h |
2 | * Copyright (C) 2000 Red Hat, Inc., Jonathan Blandford <jrb@redhat.com> |
3 | * |
4 | * This library is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU Library General Public |
6 | * License as published by the Free Software Foundation; either |
7 | * version 2 of the License, or (at your option) any later version. |
8 | * |
9 | * This library is distributed in the hope that it will be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | * Library General Public License for more details. |
13 | * |
14 | * You should have received a copy of the GNU Library General Public |
15 | * License along with this library. If not, see <http://www.gnu.org/licenses/>. |
16 | */ |
17 | |
18 | #include <gtk/gtk.h> |
19 | #include <gdk/gdkkeysyms.h> |
20 | |
21 | static void |
22 | accel_edited_callback (GtkCellRendererText *cell, |
23 | const char *path_string, |
24 | guint keyval, |
25 | GdkModifierType mask, |
26 | guint hardware_keycode, |
27 | gpointer data) |
28 | { |
29 | GtkTreeModel *model = (GtkTreeModel *)data; |
30 | GtkTreePath *path = gtk_tree_path_new_from_string (path: path_string); |
31 | GtkTreeIter iter; |
32 | |
33 | gtk_tree_model_get_iter (tree_model: model, iter: &iter, path); |
34 | |
35 | g_print (format: "%u %d %u\n" , keyval, mask, hardware_keycode); |
36 | |
37 | gtk_list_store_set (GTK_LIST_STORE (model), iter: &iter, |
38 | 0, (int)mask, |
39 | 1, keyval, |
40 | 2, hardware_keycode, |
41 | -1); |
42 | gtk_tree_path_free (path); |
43 | } |
44 | |
45 | static void |
46 | accel_cleared_callback (GtkCellRendererText *cell, |
47 | const char *path_string, |
48 | gpointer data) |
49 | { |
50 | GtkTreeModel *model = (GtkTreeModel *)data; |
51 | GtkTreePath *path; |
52 | GtkTreeIter iter; |
53 | |
54 | path = gtk_tree_path_new_from_string (path: path_string); |
55 | gtk_tree_model_get_iter (tree_model: model, iter: &iter, path); |
56 | gtk_list_store_set (GTK_LIST_STORE (model), iter: &iter, 0, 0, 1, 0, 2, 0, -1); |
57 | gtk_tree_path_free (path); |
58 | } |
59 | static GtkWidget * |
60 | key_test (void) |
61 | { |
62 | GtkWidget *window, *sw, *tv; |
63 | GtkListStore *store; |
64 | GtkTreeViewColumn *column; |
65 | GtkCellRenderer *rend; |
66 | int i; |
67 | GtkWidget *box, *entry; |
68 | |
69 | /* create window */ |
70 | window = gtk_window_new (); |
71 | gtk_window_set_default_size (GTK_WINDOW (window), width: 400, height: 400); |
72 | |
73 | sw = gtk_scrolled_window_new (); |
74 | gtk_widget_set_vexpand (widget: sw, TRUE); |
75 | box = gtk_box_new (orientation: GTK_ORIENTATION_VERTICAL, spacing: 10); |
76 | gtk_window_set_child (GTK_WINDOW (window), child: box); |
77 | gtk_box_append (GTK_BOX (box), child: sw); |
78 | |
79 | store = gtk_list_store_new (n_columns: 3, G_TYPE_INT, G_TYPE_UINT, G_TYPE_UINT); |
80 | tv = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); |
81 | gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), child: tv); |
82 | column = gtk_tree_view_column_new (); |
83 | rend = gtk_cell_renderer_accel_new (); |
84 | g_object_set (G_OBJECT (rend), |
85 | first_property_name: "accel-mode" , GTK_CELL_RENDERER_ACCEL_MODE_GTK, |
86 | "editable" , TRUE, |
87 | NULL); |
88 | g_signal_connect (G_OBJECT (rend), |
89 | "accel-edited" , |
90 | G_CALLBACK (accel_edited_callback), |
91 | store); |
92 | g_signal_connect (G_OBJECT (rend), |
93 | "accel-cleared" , |
94 | G_CALLBACK (accel_cleared_callback), |
95 | store); |
96 | |
97 | gtk_tree_view_column_pack_start (tree_column: column, cell: rend, |
98 | TRUE); |
99 | gtk_tree_view_column_set_attributes (tree_column: column, cell_renderer: rend, |
100 | "accel-mods" , 0, |
101 | "accel-key" , 1, |
102 | "keycode" , 2, |
103 | NULL); |
104 | gtk_tree_view_append_column (GTK_TREE_VIEW (tv), column); |
105 | |
106 | for (i = 0; i < 10; i++) |
107 | { |
108 | GtkTreeIter iter; |
109 | |
110 | gtk_list_store_append (list_store: store, iter: &iter); |
111 | } |
112 | |
113 | entry = gtk_entry_new (); |
114 | gtk_box_append (GTK_BOX (box), child: entry); |
115 | |
116 | return window; |
117 | } |
118 | |
119 | int |
120 | main (int argc, char **argv) |
121 | { |
122 | GtkWidget *dialog; |
123 | |
124 | gtk_init (); |
125 | |
126 | dialog = key_test (); |
127 | |
128 | gtk_widget_show (widget: dialog); |
129 | |
130 | while (TRUE) |
131 | g_main_context_iteration (NULL, TRUE); |
132 | |
133 | return 0; |
134 | } |
135 | |