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 |