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,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