Commit c7967136bb9b0bfb09f8ad068f8b7b0c21359f9a
1 parent
3d042e76
Exists in
master
and in
1 other branch
Implementing accelerator customization.
Showing
1 changed file
with
62 additions
and
4 deletions
Show diff stats
src/dialogs/settings/accelerator.c
@@ -36,6 +36,8 @@ | @@ -36,6 +36,8 @@ | ||
36 | #include <v3270/dialogs.h> | 36 | #include <v3270/dialogs.h> |
37 | #include <v3270/settings.h> | 37 | #include <v3270/settings.h> |
38 | #include <lib3270/log.h> | 38 | #include <lib3270/log.h> |
39 | + #include <v3270/actions.h> | ||
40 | + #include <terminal.h> | ||
39 | 41 | ||
40 | /*--[ Widget Definition ]----------------------------------------------------------------------------*/ | 42 | /*--[ Widget Definition ]----------------------------------------------------------------------------*/ |
41 | 43 | ||
@@ -50,6 +52,8 @@ | @@ -50,6 +52,8 @@ | ||
50 | { | 52 | { |
51 | V3270Settings parent; | 53 | V3270Settings parent; |
52 | 54 | ||
55 | + GtkListStore * store; | ||
56 | + | ||
53 | } V3270AcceleratorSettings; | 57 | } V3270AcceleratorSettings; |
54 | 58 | ||
55 | typedef struct _V3270AcceleratorSettingsClass | 59 | typedef struct _V3270AcceleratorSettingsClass |
@@ -92,10 +96,14 @@ | @@ -92,10 +96,14 @@ | ||
92 | GtkCellRenderer * text_renderer = gtk_cell_renderer_text_new(); | 96 | GtkCellRenderer * text_renderer = gtk_cell_renderer_text_new(); |
93 | 97 | ||
94 | GtkCellRenderer * accel_renderer = gtk_cell_renderer_accel_new(); | 98 | GtkCellRenderer * accel_renderer = gtk_cell_renderer_accel_new(); |
95 | - g_object_set(accel_renderer, "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK,"editable", TRUE, NULL); | 99 | + g_object_set( |
100 | + accel_renderer, | ||
101 | + "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER, | ||
102 | + "editable", TRUE, | ||
103 | + NULL); | ||
96 | 104 | ||
97 | - GtkTreeModel * model = (GtkTreeModel *) gtk_tree_store_new(COLUMNS, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_INT, G_TYPE_UINT, G_TYPE_INT, G_TYPE_UINT); | ||
98 | - GtkWidget * view = gtk_tree_view_new_with_model(model); | 105 | + widget->store = GTK_LIST_STORE(gtk_list_store_new(COLUMNS, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_INT, G_TYPE_UINT, G_TYPE_INT, G_TYPE_UINT)); |
106 | + GtkWidget * view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(widget->store)); | ||
99 | 107 | ||
100 | gtk_widget_set_tooltip_markup(view,_("Keyboard accelerators")); | 108 | gtk_widget_set_tooltip_markup(view,_("Keyboard accelerators")); |
101 | 109 | ||
@@ -153,12 +161,62 @@ LIB3270_EXPORT GtkWidget * v3270_accelerator_settings_new() | @@ -153,12 +161,62 @@ LIB3270_EXPORT GtkWidget * v3270_accelerator_settings_new() | ||
153 | return GTK_WIDGET(settings); | 161 | return GTK_WIDGET(settings); |
154 | } | 162 | } |
155 | 163 | ||
164 | + | ||
156 | void load(GtkWidget *widget, GtkWidget *terminal) | 165 | void load(GtkWidget *widget, GtkWidget *terminal) |
157 | { | 166 | { |
167 | + struct KeyMap | ||
168 | + { | ||
169 | + guint key; | ||
170 | + GdkModifierType mods; | ||
171 | + }; | ||
172 | + | ||
173 | + debug("%s::%s","V3270AcceleratorSettings",__FUNCTION__); | ||
174 | + | ||
175 | + GtkListStore * store = GTK_V3270_ACCELERATOR_SETTINGS(widget)->store; | ||
176 | + GSList * accelerator = GTK_V3270(terminal)->accelerators; | ||
177 | + | ||
178 | + while(accelerator) | ||
179 | + { | ||
180 | + struct KeyMap keymaps[2]; | ||
181 | + size_t ix = 0; | ||
182 | + V3270Accelerator * current = (V3270Accelerator *) accelerator->data; | ||
183 | + | ||
184 | + memset(keymaps,0,sizeof(keymaps)); | ||
185 | + | ||
186 | + while(accelerator && (((V3270Accelerator *) accelerator->data)->activate == current->activate) && (((V3270Accelerator *) accelerator->data)->arg == current->arg)) | ||
187 | + { | ||
188 | + V3270Accelerator *accel = (V3270Accelerator *) accelerator->data; | ||
189 | + | ||
190 | + if(ix < G_N_ELEMENTS(keymaps)) | ||
191 | + { | ||
192 | + keymaps[ix].key = accel->key; | ||
193 | + keymaps[ix].mods = accel->mods; | ||
194 | + ix++; | ||
195 | + } | ||
196 | + | ||
197 | + accelerator = g_slist_next(accelerator); | ||
198 | + } | ||
199 | + | ||
200 | + // Add entry | ||
201 | + GtkTreeIter iter; | ||
202 | + gtk_list_store_append(store, &iter); | ||
203 | + gtk_list_store_set( | ||
204 | + store, | ||
205 | + &iter, | ||
206 | + ACTION, current, | ||
207 | + DESCRIPTION, v3270_accelerator_get_description(current), | ||
208 | + MAIN_MASK, keymaps[0].mods, | ||
209 | + MAIN_VALUE, keymaps[0].key, | ||
210 | + ALTERNATIVE_MASK, keymaps[1].mods, | ||
211 | + ALTERNATIVE_VALUE, keymaps[1].key, | ||
212 | + -1 | ||
213 | + ); | ||
214 | + | ||
215 | + } | ||
158 | 216 | ||
159 | } | 217 | } |
160 | 218 | ||
161 | void apply(GtkWidget *widget, GtkWidget *terminal) | 219 | void apply(GtkWidget *widget, GtkWidget *terminal) |
162 | { | 220 | { |
163 | - | 221 | + debug("%s::%s","V3270AcceleratorSettings",__FUNCTION__); |
164 | } | 222 | } |