Commit f3ce154a7e63cb2a5c9be400c1d1fc212879b90a

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

Refactoring PFkey engine to allow remapping from accelerator dialog.

src/include/internals.h
... ... @@ -158,6 +158,7 @@
158 158 V3270_ACCELERATOR_TYPE_INTERNAL, ///< @brief Accelerator is internal.
159 159 V3270_ACCELERATOR_TYPE_LIB3270_ACTION, ///< @brief Accelerator is a lib3270 action.
160 160 V3270_ACCELERATOR_TYPE_LIB3270_TOGGLE, ///< @brief Accelerator is a lib3270 toggle.
  161 + V3270_ACCELERATOR_TYPE_PFKEY, ///< @brief Accelerator is a PFKEY.
161 162 V3270_ACCELERATOR_TYPE_CUSTOM, ///< @brief Custom (application based) accelerator.
162 163 };
163 164  
... ... @@ -170,6 +171,12 @@
170 171 GCallback activate;
171 172 };
172 173  
  174 + typedef struct _V3270PFKeyAccelerator
  175 + {
  176 + struct _V3270Accelerator parent;
  177 + GdkAtom name;
  178 + } V3270PFKeyAccelerator;
  179 +
173 180 typedef struct _V3270CustomAccelerator
174 181 {
175 182 struct _V3270Accelerator parent;
... ...
src/terminal/keyboard.c
... ... @@ -148,6 +148,7 @@
148 148 return TRUE;
149 149 }
150 150  
  151 + /*
151 152 if(event->keyval >= GDK_F1 && event->keyval <= GDK_F12 && !(event->state & (GDK_CONTROL_MASK|GDK_MOD1_MASK)))
152 153 {
153 154 // It's a PFKey Action.
... ... @@ -162,6 +163,7 @@
162 163 }
163 164  
164 165 }
  166 + */
165 167  
166 168 return FALSE;
167 169  
... ...
src/terminal/keyboard/accelerator.c
... ... @@ -51,6 +51,14 @@
51 51 }
52 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 62 default:
55 63 rc = g_new0(V3270Accelerator,1);
56 64 *rc = *accel;
... ... @@ -271,6 +279,9 @@
271 279 case V3270_ACCELERATOR_TYPE_INTERNAL:
272 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 285 case V3270_ACCELERATOR_TYPE_CUSTOM:
275 286 return ((V3270CustomAccelerator *) accel)->name;
276 287  
... ...
src/terminal/keyboard/init.c
... ... @@ -68,15 +68,42 @@
68 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 108 GSList * v3270_accelerator_map_load_default(GSList * accelerators)
82 109 {
... ... @@ -194,6 +221,21 @@
194 221 }
195 222  
196 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 241 static const struct
... ...