Commit f3ce154a7e63cb2a5c9be400c1d1fc212879b90a
1 parent
cea814c3
Exists in
master
and in
1 other branch
Refactoring PFkey engine to allow remapping from accelerator dialog.
Showing
4 changed files
with
68 additions
and
6 deletions
Show diff stats
src/include/internals.h
| @@ -158,6 +158,7 @@ | @@ -158,6 +158,7 @@ | ||
| 158 | V3270_ACCELERATOR_TYPE_INTERNAL, ///< @brief Accelerator is internal. | 158 | V3270_ACCELERATOR_TYPE_INTERNAL, ///< @brief Accelerator is internal. |
| 159 | V3270_ACCELERATOR_TYPE_LIB3270_ACTION, ///< @brief Accelerator is a lib3270 action. | 159 | V3270_ACCELERATOR_TYPE_LIB3270_ACTION, ///< @brief Accelerator is a lib3270 action. |
| 160 | V3270_ACCELERATOR_TYPE_LIB3270_TOGGLE, ///< @brief Accelerator is a lib3270 toggle. | 160 | V3270_ACCELERATOR_TYPE_LIB3270_TOGGLE, ///< @brief Accelerator is a lib3270 toggle. |
| 161 | + V3270_ACCELERATOR_TYPE_PFKEY, ///< @brief Accelerator is a PFKEY. | ||
| 161 | V3270_ACCELERATOR_TYPE_CUSTOM, ///< @brief Custom (application based) accelerator. | 162 | V3270_ACCELERATOR_TYPE_CUSTOM, ///< @brief Custom (application based) accelerator. |
| 162 | }; | 163 | }; |
| 163 | 164 | ||
| @@ -170,6 +171,12 @@ | @@ -170,6 +171,12 @@ | ||
| 170 | GCallback activate; | 171 | GCallback activate; |
| 171 | }; | 172 | }; |
| 172 | 173 | ||
| 174 | + typedef struct _V3270PFKeyAccelerator | ||
| 175 | + { | ||
| 176 | + struct _V3270Accelerator parent; | ||
| 177 | + GdkAtom name; | ||
| 178 | + } V3270PFKeyAccelerator; | ||
| 179 | + | ||
| 173 | typedef struct _V3270CustomAccelerator | 180 | typedef struct _V3270CustomAccelerator |
| 174 | { | 181 | { |
| 175 | struct _V3270Accelerator parent; | 182 | struct _V3270Accelerator parent; |
src/terminal/keyboard.c
| @@ -148,6 +148,7 @@ | @@ -148,6 +148,7 @@ | ||
| 148 | return TRUE; | 148 | return TRUE; |
| 149 | } | 149 | } |
| 150 | 150 | ||
| 151 | + /* | ||
| 151 | if(event->keyval >= GDK_F1 && event->keyval <= GDK_F12 && !(event->state & (GDK_CONTROL_MASK|GDK_MOD1_MASK))) | 152 | if(event->keyval >= GDK_F1 && event->keyval <= GDK_F12 && !(event->state & (GDK_CONTROL_MASK|GDK_MOD1_MASK))) |
| 152 | { | 153 | { |
| 153 | // It's a PFKey Action. | 154 | // It's a PFKey Action. |
| @@ -162,6 +163,7 @@ | @@ -162,6 +163,7 @@ | ||
| 162 | } | 163 | } |
| 163 | 164 | ||
| 164 | } | 165 | } |
| 166 | + */ | ||
| 165 | 167 | ||
| 166 | return FALSE; | 168 | return FALSE; |
| 167 | 169 |
src/terminal/keyboard/accelerator.c
| @@ -51,6 +51,14 @@ | @@ -51,6 +51,14 @@ | ||
| 51 | } | 51 | } |
| 52 | break; | 52 | break; |
| 53 | 53 | ||
| 54 | + case V3270_ACCELERATOR_TYPE_PFKEY: | ||
| 55 | + { | ||
| 56 | + V3270PFKeyAccelerator * accell = g_new0(V3270PFKeyAccelerator,1); | ||
| 57 | + *accell = *((V3270PFKeyAccelerator *) accel); | ||
| 58 | + rc = (V3270Accelerator *) accell; | ||
| 59 | + } | ||
| 60 | + break; | ||
| 61 | + | ||
| 54 | default: | 62 | default: |
| 55 | rc = g_new0(V3270Accelerator,1); | 63 | rc = g_new0(V3270Accelerator,1); |
| 56 | *rc = *accel; | 64 | *rc = *accel; |
| @@ -271,6 +279,9 @@ | @@ -271,6 +279,9 @@ | ||
| 271 | case V3270_ACCELERATOR_TYPE_INTERNAL: | 279 | case V3270_ACCELERATOR_TYPE_INTERNAL: |
| 272 | return lib3270_property_get_name((const LIB3270_PROPERTY *) accel->arg); | 280 | return lib3270_property_get_name((const LIB3270_PROPERTY *) accel->arg); |
| 273 | 281 | ||
| 282 | + case V3270_ACCELERATOR_TYPE_PFKEY: | ||
| 283 | + return gdk_atom_name(((const V3270PFKeyAccelerator *) accel)->name); | ||
| 284 | + | ||
| 274 | case V3270_ACCELERATOR_TYPE_CUSTOM: | 285 | case V3270_ACCELERATOR_TYPE_CUSTOM: |
| 275 | return ((V3270CustomAccelerator *) accel)->name; | 286 | return ((V3270CustomAccelerator *) accel)->name; |
| 276 | 287 |
src/terminal/keyboard/init.c
| @@ -68,15 +68,42 @@ | @@ -68,15 +68,42 @@ | ||
| 68 | return lib3270_toggle(v3270_get_session(widget),action->id); | 68 | return lib3270_toggle(v3270_get_session(widget),action->id); |
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | - /* | ||
| 72 | - static int fire_pfkey_action(GtkWidget *widget, V3270PFKeyAccelerator *accel) | 71 | + static int fire_pfkey_action(GtkWidget *widget, gpointer *id) |
| 73 | { | 72 | { |
| 74 | - debug("%s accel=%p",__FUNCTION__,accel); | ||
| 75 | - debug("%s Accelerator(%s)=%p pfkey=%d",__FUNCTION__,accel->name,accel,accel->keycode); | 73 | + debug("%s(%u)",__FUNCTION__,GPOINTER_TO_INT(id)); |
| 74 | + return lib3270_pfkey(GTK_V3270(widget)->host,GPOINTER_TO_INT(id)); | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + static V3270PFKeyAccelerator * v3270_pfkey_accelerator_new(int id, const gchar *keyname) | ||
| 78 | + { | ||
| 79 | + V3270PFKeyAccelerator * accelerator = g_new0(V3270PFKeyAccelerator,1); | ||
| 80 | + | ||
| 81 | + accelerator->parent.type = V3270_ACCELERATOR_TYPE_PFKEY; | ||
| 82 | + accelerator->parent.arg = GINT_TO_POINTER(id); | ||
| 83 | + | ||
| 84 | + g_autofree gchar *name = g_strdup_printf("pf%02d",id); | ||
| 85 | + debug("%s(%s)",__FUNCTION__,name); | ||
| 86 | + accelerator->name = gdk_atom_intern(name,FALSE); | ||
| 76 | 87 | ||
| 77 | - return lib3270_pfkey(v3270_get_session(widget),(int) accel->keycode); | 88 | + if(keyname) { |
| 89 | + | ||
| 90 | + v3270_accelerator_parse((V3270Accelerator *) accelerator,keyname); | ||
| 91 | + | ||
| 92 | + } else { | ||
| 93 | + | ||
| 94 | + g_autofree gchar *kn = NULL; | ||
| 95 | + if(id < 12) | ||
| 96 | + kn = g_strdup_printf("F%u",id); | ||
| 97 | + else | ||
| 98 | + kn = g_strdup_printf("<shift>F%u",id-12); | ||
| 99 | + | ||
| 100 | + v3270_accelerator_parse((V3270Accelerator *) accelerator,kn); | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + accelerator->parent.activate = G_CALLBACK(fire_pfkey_action); | ||
| 104 | + | ||
| 105 | + return accelerator; | ||
| 78 | } | 106 | } |
| 79 | - */ | ||
| 80 | 107 | ||
| 81 | GSList * v3270_accelerator_map_load_default(GSList * accelerators) | 108 | GSList * v3270_accelerator_map_load_default(GSList * accelerators) |
| 82 | { | 109 | { |
| @@ -194,6 +221,21 @@ | @@ -194,6 +221,21 @@ | ||
| 194 | } | 221 | } |
| 195 | 222 | ||
| 196 | // Create PF-Key accelerators | 223 | // Create PF-Key accelerators |
| 224 | + { | ||
| 225 | + unsigned short key; | ||
| 226 | + // PF1 - PF24 | ||
| 227 | + for(key = 1; key < 25; key++) { | ||
| 228 | + accelerators = g_slist_prepend(accelerators,v3270_pfkey_accelerator_new(key,NULL)); | ||
| 229 | + | ||
| 230 | + if(key == 7) { | ||
| 231 | + accelerators = g_slist_prepend(accelerators,v3270_pfkey_accelerator_new(key,"Page_Up")); | ||
| 232 | + } else if(key == 8) { | ||
| 233 | + accelerators = g_slist_prepend(accelerators,v3270_pfkey_accelerator_new(key,"Page_Down")); | ||
| 234 | + } | ||
| 235 | + | ||
| 236 | + } | ||
| 237 | + | ||
| 238 | + } | ||
| 197 | /* | 239 | /* |
| 198 | { | 240 | { |
| 199 | static const struct | 241 | static const struct |