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 | ... | ... |