Commit 38e4ce37eec3bc0eacef766b8d13c6b48906e6ba

Authored by Perry Werneck
1 parent 01021486
Exists in master and in 1 other branch develop

Adding method to "dump" the accelerator table.

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