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 |