34
34
#include <gdk/gdkx.h>
37
create_shortcuts_settings()
39
GtkWidget *vbox, *result_frame, *window, *treeview, *scrolled_window, *label;
44
vbox = gtk_vbox_new(FALSE, 10);
45
gtk_container_set_border_width(GTK_CONTAINER(vbox), 10);
47
gnome_main_section_new(_("General"), &result_frame);
49
label = gtk_label_new(_("Be careful: these shortcuts might override system-wide shortcuts."));
51
treeview = gtk_tree_view_new();
52
setup_tree_view(treeview);
54
GtkListStore *store = gtk_list_store_new(COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_UINT);
56
Accelerator* list = shortcuts_get_list();
58
while (list[i].action != NULL)
60
gtk_list_store_append(store, &iter);
61
gtk_list_store_set(store, &iter, ACTION, _(list[i].action), MASK,
62
(gint) list[i].mask, VALUE, XKeycodeToKeysym(GDK_DISPLAY(),
63
list[i].value, 0), -1);
37
accel_cleared (GtkCellRendererAccel *renderer UNUSED, gchar *path,
38
GtkTreeView *treeview)
40
DEBUG ("Accel cleared");
46
model = gtk_tree_view_get_model (treeview);
48
if (gtk_tree_model_get_iter_from_string (model, &iter, path))
49
gtk_list_store_set (GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0, -1);
51
// Update GDK bindings
52
shortcuts_update_bindings (atoi (path), 0, 0);
56
accel_edited (GtkCellRendererAccel *renderer UNUSED, gchar *path, guint accel_key,
57
GdkModifierType mask, guint hardware_keycode UNUSED, GtkTreeView *treeview)
59
DEBUG ("Accel edited");
64
Accelerator* list = shortcuts_get_list ();
65
model = gtk_tree_view_get_model (treeview);
66
guint code = XKeysymToKeycode (GDK_DISPLAY(), accel_key);
68
// Disable existing binding if key already used
70
gtk_tree_model_get_iter_first (model, &iter);
72
while (list[i].action != NULL) {
73
if (list[i].key == code && list[i].mask == mask) {
74
gtk_list_store_set (GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0,
76
WARN ("This key was already affected");
79
gtk_tree_model_iter_next (model, &iter);
67
gtk_tree_view_set_model(GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store));
68
g_object_unref(store);
70
gtk_container_add(GTK_CONTAINER (result_frame), treeview);
71
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
72
gtk_box_pack_start(GTK_BOX(vbox), result_frame, FALSE, FALSE, 0);
74
gtk_widget_show_all(vbox);
84
if (gtk_tree_model_get_iter_from_string (model, &iter, path))
85
gtk_list_store_set (GTK_LIST_STORE (model), &iter, MASK, (gint) mask,
86
VALUE, accel_key, -1);
88
// Update GDK bindings
89
shortcuts_update_bindings (atoi (path), code, mask);
81
94
* second is a keyboard accelerator.
84
setup_tree_view(GtkWidget *treeview)
86
GtkCellRenderer *renderer;
87
GtkTreeViewColumn *column;
89
renderer = gtk_cell_renderer_text_new();
90
column = gtk_tree_view_column_new_with_attributes("Action", renderer, "text",
92
gtk_tree_view_append_column(GTK_TREE_VIEW (treeview), column);
94
renderer = gtk_cell_renderer_accel_new();
95
g_object_set(renderer, "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK,
96
"editable", TRUE, NULL);
97
column = gtk_tree_view_column_new_with_attributes("Shortcut", renderer,
98
"accel-mods", MASK, "accel-key", VALUE, NULL);
100
gtk_tree_view_append_column(GTK_TREE_VIEW (treeview), column);
101
g_signal_connect (G_OBJECT (renderer), "accel_edited", G_CALLBACK (accel_edited), (gpointer) treeview);
102
g_signal_connect (G_OBJECT (renderer), "accel_cleared", G_CALLBACK (accel_cleared), (gpointer) treeview);
106
accel_edited(GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
107
GdkModifierType mask, guint hardware_keycode, GtkTreeView *treeview)
109
DEBUG("Accel edited");
114
Accelerator* list = shortcuts_get_list();
115
model = gtk_tree_view_get_model(treeview);
116
gint code = XKeysymToKeycode(GDK_DISPLAY(), accel_key);
118
// Disable existing binding if key already used
120
gtk_tree_model_get_iter_first(model, &iter);
121
while (list[i].action != NULL)
123
if(list[i].value == code)
125
gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0, -1);
126
WARN("This key was already affected");
128
gtk_tree_model_iter_next(model, &iter);
133
if (gtk_tree_model_get_iter_from_string(model, &iter, path))
134
gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, (gint) mask, VALUE,
137
// Update GDK bindings
138
shortcuts_update_bindings(atoi(path), code);
142
accel_cleared(GtkCellRendererAccel *renderer, gchar *path, GtkTreeView *treeview)
144
DEBUG("Accel cleared");
150
model = gtk_tree_view_get_model(treeview);
151
if (gtk_tree_model_get_iter_from_string(model, &iter, path))
152
gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0, -1);
154
// Update GDK bindings
155
shortcuts_update_bindings(atoi(path), 0);
97
setup_tree_view (GtkWidget *treeview)
99
GtkCellRenderer *renderer;
100
GtkTreeViewColumn *column;
102
renderer = gtk_cell_renderer_text_new ();
103
column = gtk_tree_view_column_new_with_attributes ("Action", renderer,
104
"text", ACTION, NULL);
105
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
107
renderer = gtk_cell_renderer_accel_new ();
108
g_object_set (renderer, "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK,
109
"editable", TRUE, NULL);
110
column = gtk_tree_view_column_new_with_attributes ("Shortcut", renderer,
111
"accel-mods", MASK, "accel-key", VALUE, NULL);
113
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
114
g_signal_connect (G_OBJECT (renderer), "accel_edited", G_CALLBACK (accel_edited), (gpointer) treeview);
115
g_signal_connect (G_OBJECT (renderer), "accel_cleared", G_CALLBACK (accel_cleared), (gpointer) treeview);
119
create_shortcuts_settings ()
121
GtkWidget *vbox, *result_frame, *treeview, *label;
126
vbox = gtk_vbox_new (FALSE, 10);
127
gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
129
gnome_main_section_new (_ ("General"), &result_frame);
131
label = gtk_label_new (
132
_ ("Be careful: these shortcuts might override system-wide shortcuts."));
133
treeview = gtk_tree_view_new ();
134
setup_tree_view (treeview);
136
GtkListStore *store = gtk_list_store_new (COLUMNS, G_TYPE_STRING, G_TYPE_INT,
139
Accelerator* list = shortcuts_get_list ();
141
while (list[i].action != NULL) {
142
gtk_list_store_append (store, &iter);
143
gtk_list_store_set (store, &iter, ACTION, _ (list[i].action), MASK,
144
(gint) list[i].mask, VALUE, XKeycodeToKeysym (GDK_DISPLAY(),
145
list[i].key, 0), -1);
149
gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store));
150
g_object_unref (store);
152
gtk_container_add (GTK_CONTAINER (result_frame), treeview);
153
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
154
gtk_box_pack_start (GTK_BOX (vbox), result_frame, FALSE, FALSE, 0);
156
gtk_widget_show_all (vbox);