Commit 38e4ce37eec3bc0eacef766b8d13c6b48906e6ba
1 parent
01021486
Exists in
master
and in
1 other branch
Adding method to "dump" the accelerator table.
Showing
3 changed files
with
100 additions
and
7 deletions
Show diff stats
src/include/v3270/actions.h
... | ... | @@ -37,16 +37,33 @@ |
37 | 37 | |
38 | 38 | typedef struct _V3270Accelerator V3270Accelerator; |
39 | 39 | |
40 | - LIB3270_EXPORT void v3270_set_scroll_action(GtkWidget *widget, GdkScrollDirection direction, GtkAction *action) G_GNUC_DEPRECATED; | |
40 | + | |
41 | + | |
42 | + // | |
43 | + // Actions | |
44 | + // | |
41 | 45 | LIB3270_EXPORT void v3270_tab(GtkWidget *widget); |
42 | - LIB3270_EXPORT void v3270_backtab(GtkWidget *widget); | |
46 | + | |
47 | + // | |
48 | + // Misc | |
49 | + // | |
50 | + LIB3270_EXPORT void v3270_set_scroll_action(GtkWidget *widget, GdkScrollDirection direction, GtkAction *action) G_GNUC_DEPRECATED; | |
51 | + | |
52 | + // | |
53 | + // Keyboard accelerators | |
54 | + // | |
55 | + LIB3270_EXPORT void v3270_backtab(GtkWidget *widget); | |
43 | 56 | |
44 | 57 | /// @brief Reset accelerator map to defaults. |
45 | - LIB3270_EXPORT void v3270_accelerator_map_reset(GtkWidget *widget); | |
58 | + LIB3270_EXPORT void v3270_accelerator_map_reset(GtkWidget *widget); | |
59 | + | |
60 | + LIB3270_EXPORT void v3270_accelerator_map_foreach(GtkWidget *widget,void (*call)(const V3270Accelerator * accel, const char *keys, gpointer ptr), gpointer ptr); | |
46 | 61 | |
47 | - LIB3270_EXPORT const V3270Accelerator * v3270_get_accelerator(GtkWidget *widget, guint keyval, GdkModifierType state); | |
48 | - LIB3270_EXPORT void v3270_accelerator_activate(const V3270Accelerator * accell, GtkWidget *terminal); | |
49 | - LIB3270_EXPORT gboolean v3270_accelerator_compare(const V3270Accelerator * accell, const guint keyval, const GdkModifierType mods); | |
62 | + LIB3270_EXPORT const V3270Accelerator * v3270_get_accelerator(GtkWidget *widget, guint keyval, GdkModifierType state); | |
63 | + LIB3270_EXPORT void v3270_accelerator_activate(const V3270Accelerator * accel, GtkWidget *terminal); | |
64 | + LIB3270_EXPORT gboolean v3270_accelerator_compare(const V3270Accelerator * accel, const guint keyval, const GdkModifierType mods); | |
65 | + LIB3270_EXPORT const gchar * v3270_accelerator_get_name(const V3270Accelerator * accel); | |
66 | + LIB3270_EXPORT const gchar * v3270_accelerator_get_description(const V3270Accelerator * accel); | |
50 | 67 | |
51 | 68 | G_END_DECLS |
52 | 69 | ... | ... |
src/terminal/keyboard/accelerator.c
... | ... | @@ -90,3 +90,67 @@ |
90 | 90 | |
91 | 91 | } |
92 | 92 | |
93 | + const gchar * v3270_accelerator_get_description(const V3270Accelerator * accel) | |
94 | + { | |
95 | + switch(accel->type) | |
96 | + { | |
97 | + case V3270_ACCELERATOR_TYPE_LIB3270_ACTION: | |
98 | + return gettext(((LIB3270_ACTION *) accel->arg)->summary); | |
99 | + | |
100 | + // case V3270_ACCELERATOR_TYPE_INTERNAL: | |
101 | + // case V3270_ACCELERATOR_TYPE_GTK_ACTION: | |
102 | + | |
103 | + } | |
104 | + | |
105 | + return NULL; | |
106 | + } | |
107 | + | |
108 | + const gchar * v3270_accelerator_get_name(const V3270Accelerator * accel) | |
109 | + { | |
110 | + switch(accel->type) | |
111 | + { | |
112 | + case V3270_ACCELERATOR_TYPE_LIB3270_ACTION: | |
113 | + return gettext(((LIB3270_ACTION *) accel->arg)->name); | |
114 | + | |
115 | + // case V3270_ACCELERATOR_TYPE_INTERNAL: | |
116 | + // case V3270_ACCELERATOR_TYPE_GTK_ACTION: | |
117 | + | |
118 | + } | |
119 | + | |
120 | + return NULL; | |
121 | + } | |
122 | + | |
123 | + void v3270_accelerator_map_foreach(GtkWidget *widget,void (*call)(const V3270Accelerator * accel, const char *keys, gpointer ptr), gpointer ptr) | |
124 | + { | |
125 | + GSList * accelerator = GTK_V3270(widget)->accelerators; | |
126 | + GString * str = g_string_new(""); | |
127 | + | |
128 | + while(accelerator) | |
129 | + { | |
130 | + V3270Accelerator * current = (V3270Accelerator *) accelerator->data; | |
131 | + | |
132 | + g_string_truncate(str,0); | |
133 | + | |
134 | + while(accelerator && (((V3270Accelerator *) accelerator->data)->activate == current->activate) && (((V3270Accelerator *) accelerator->data)->arg == current->arg)) | |
135 | + { | |
136 | + V3270Accelerator *accel = (V3270Accelerator *) accelerator->data; | |
137 | + if(accel->key) | |
138 | + { | |
139 | + | |
140 | + if(str->str[0]) | |
141 | + g_string_append(str," "); | |
142 | + | |
143 | + g_autofree gchar * keyname = gtk_accelerator_name(accel->key,accel->mods); | |
144 | + g_string_append(str,keyname); | |
145 | + } | |
146 | + | |
147 | + accelerator = g_slist_next(accelerator); | |
148 | + } | |
149 | + | |
150 | + call(current,str->str,ptr); | |
151 | + | |
152 | + } | |
153 | + | |
154 | + g_string_free(str,FALSE); | |
155 | + | |
156 | + } | ... | ... |
src/terminal/keyboard/init.c
... | ... | @@ -33,6 +33,7 @@ |
33 | 33 | #include <terminal.h> |
34 | 34 | #include <lib3270/actions.h> |
35 | 35 | #include <gdk/gdkkeysyms-compat.h> |
36 | + #include <v3270/actions.h> | |
36 | 37 | |
37 | 38 | #ifndef GDK_NUMLOCK_MASK |
38 | 39 | #define GDK_NUMLOCK_MASK GDK_MOD2_MASK |
... | ... | @@ -95,6 +96,13 @@ |
95 | 96 | |
96 | 97 | } |
97 | 98 | |
99 | +#ifdef DEBUG | |
100 | + void show_accelerator(const V3270Accelerator * accel, const char *keys, gpointer ptr) | |
101 | + { | |
102 | + debug("%s=%s",v3270_accelerator_get_name(accel),keys); | |
103 | + } | |
104 | +#endif // DEBUG | |
105 | + | |
98 | 106 | void v3270_init_accelerators(v3270 *widget) |
99 | 107 | { |
100 | 108 | size_t ix; |
... | ... | @@ -120,7 +128,7 @@ |
120 | 128 | accelerator->arg = (gconstpointer) &actions[ix]; |
121 | 129 | accelerator->activate = G_CALLBACK(fire_lib3270_action); |
122 | 130 | |
123 | - debug("%s=%s",actions[ix].name,keys[key]); | |
131 | +// debug("%s=%s",actions[ix].name,keys[key]); | |
124 | 132 | |
125 | 133 | gtk_accelerator_parse(keys[key],&accelerator->key,&accelerator->mods); |
126 | 134 | |
... | ... | @@ -157,6 +165,10 @@ |
157 | 165 | |
158 | 166 | v3270_accelerator_map_sort(widget); |
159 | 167 | |
168 | +#ifdef DEBUG | |
169 | + v3270_accelerator_map_foreach(widget,show_accelerator,NULL); | |
170 | +#endif // DEBUG | |
171 | + | |
160 | 172 | } |
161 | 173 | |
162 | 174 | ... | ... |