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,16 +37,33 @@ | ||
37 | 37 | ||
38 | typedef struct _V3270Accelerator V3270Accelerator; | 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 | LIB3270_EXPORT void v3270_tab(GtkWidget *widget); | 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 | /// @brief Reset accelerator map to defaults. | 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 | G_END_DECLS | 68 | G_END_DECLS |
52 | 69 |
src/terminal/keyboard/accelerator.c
@@ -90,3 +90,67 @@ | @@ -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,6 +33,7 @@ | ||
33 | #include <terminal.h> | 33 | #include <terminal.h> |
34 | #include <lib3270/actions.h> | 34 | #include <lib3270/actions.h> |
35 | #include <gdk/gdkkeysyms-compat.h> | 35 | #include <gdk/gdkkeysyms-compat.h> |
36 | + #include <v3270/actions.h> | ||
36 | 37 | ||
37 | #ifndef GDK_NUMLOCK_MASK | 38 | #ifndef GDK_NUMLOCK_MASK |
38 | #define GDK_NUMLOCK_MASK GDK_MOD2_MASK | 39 | #define GDK_NUMLOCK_MASK GDK_MOD2_MASK |
@@ -95,6 +96,13 @@ | @@ -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 | void v3270_init_accelerators(v3270 *widget) | 106 | void v3270_init_accelerators(v3270 *widget) |
99 | { | 107 | { |
100 | size_t ix; | 108 | size_t ix; |
@@ -120,7 +128,7 @@ | @@ -120,7 +128,7 @@ | ||
120 | accelerator->arg = (gconstpointer) &actions[ix]; | 128 | accelerator->arg = (gconstpointer) &actions[ix]; |
121 | accelerator->activate = G_CALLBACK(fire_lib3270_action); | 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 | gtk_accelerator_parse(keys[key],&accelerator->key,&accelerator->mods); | 133 | gtk_accelerator_parse(keys[key],&accelerator->key,&accelerator->mods); |
126 | 134 | ||
@@ -157,6 +165,10 @@ | @@ -157,6 +165,10 @@ | ||
157 | 165 | ||
158 | v3270_accelerator_map_sort(widget); | 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 |