Commit cea814c38b8326606b4e4a41aae00b829b34eb8c

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

refactoring pfkey accelerators.

src/dialogs/settings/accelerator.c
@@ -444,27 +444,6 @@ static void alternative_edited(GtkCellRendererAccel G_GNUC_UNUSED(*renderer), gc @@ -444,27 +444,6 @@ static void alternative_edited(GtkCellRendererAccel G_GNUC_UNUSED(*renderer), gc
444 } 444 }
445 gtk_tree_path_free(tree_path); 445 gtk_tree_path_free(tree_path);
446 446
447 - if(accel && accel->type == V3270_ACCELERATOR_TYPE_PFKEY)  
448 - {  
449 - GtkWidget * dialog =  
450 - gtk_message_dialog_new_with_markup(  
451 - GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(widget))),  
452 - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,  
453 - GTK_MESSAGE_ERROR,  
454 - GTK_BUTTONS_CANCEL,  
455 - _( "The action \"%s\" can't manage alternative keys" ),  
456 - v3270_accelerator_get_description(accel)  
457 - );  
458 -  
459 - gtk_window_set_title(GTK_WINDOW(dialog),_("Rejected by action"));  
460 - gtk_widget_show_all(dialog);  
461 -  
462 - g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL);  
463 - g_signal_connect(dialog,"response",G_CALLBACK(gtk_widget_destroy),NULL);  
464 -  
465 - return;  
466 - }  
467 -  
468 // Call the common validation. 447 // Call the common validation.
469 change_accel(widget, path, accel_key, mask, ALTERNATIVE_VALUE, ALTERNATIVE_MASK); 448 change_accel(widget, path, accel_key, mask, ALTERNATIVE_VALUE, ALTERNATIVE_MASK);
470 } 449 }
@@ -490,17 +469,8 @@ void load(GtkWidget *widget, GtkWidget *terminal) @@ -490,17 +469,8 @@ void load(GtkWidget *widget, GtkWidget *terminal)
490 469
491 if(ix < G_N_ELEMENTS(keymaps)) 470 if(ix < G_N_ELEMENTS(keymaps))
492 { 471 {
493 - if(accel->type == V3270_ACCELERATOR_TYPE_PFKEY)  
494 - {  
495 - keymaps[ix].key = GDK_F1 + (((V3270PFKeyAccelerator *)accel)->keycode - 1);  
496 - keymaps[ix].mods = 0;  
497 - }  
498 - else  
499 - {  
500 - keymaps[ix].key = accel->key;  
501 - keymaps[ix].mods = accel->mods;  
502 - }  
503 - 472 + keymaps[ix].key = accel->key;
  473 + keymaps[ix].mods = accel->mods;
504 ix++; 474 ix++;
505 } 475 }
506 476
@@ -560,44 +530,19 @@ static gboolean add_accel(GtkTreeModel *model, GtkTreePath G_GNUC_UNUSED(*path), @@ -560,44 +530,19 @@ static gboolean add_accel(GtkTreeModel *model, GtkTreePath G_GNUC_UNUSED(*path),
560 // Allways create the "main" accelerator to keep the action active. 530 // Allways create the "main" accelerator to keep the action active.
561 V3270Accelerator * acc = v3270_accelerator_clone(accel); 531 V3270Accelerator * acc = v3270_accelerator_clone(accel);
562 532
563 - if(acc->type == V3270_ACCELERATOR_TYPE_PFKEY) {  
564 -  
565 - if(keymap[0].mods) {  
566 - g_warning("PFKey accelerator can't manage modifiers");  
567 - }  
568 -  
569 - int pfkey = (keymap[0].key - GDK_F1) + 1;  
570 -  
571 - if(pfkey < 0 || pfkey > 22) {  
572 -  
573 - g_warning("Invalid pfkey code: %d",pfkey); 533 + acc->key = keymap[0].key;
  534 + acc->mods = keymap[0].mods;
  535 + *accelerators = g_slist_prepend(*accelerators,acc);
574 536
575 - } else {  
576 -  
577 - ((V3270PFKeyAccelerator *) acc)->keycode = (unsigned short) pfkey;  
578 -  
579 - }  
580 -  
581 - *accelerators = g_slist_prepend(*accelerators,acc);  
582 -  
583 - } else {  
584 -  
585 - acc->key = keymap[0].key;  
586 - acc->mods = keymap[0].mods; 537 + // The alternative one is created only when set.
  538 + if(keymap[1].key)
  539 + {
  540 + acc = v3270_accelerator_clone(accel);
  541 + acc->key = keymap[1].key;
  542 + acc->mods = keymap[1].mods;
587 *accelerators = g_slist_prepend(*accelerators,acc); 543 *accelerators = g_slist_prepend(*accelerators,acc);
588 -  
589 - // The alternative one is created only when set.  
590 - if(keymap[1].key)  
591 - {  
592 - acc = v3270_accelerator_clone(accel);  
593 - acc->key = keymap[1].key;  
594 - acc->mods = keymap[1].mods;  
595 - *accelerators = g_slist_prepend(*accelerators,acc);  
596 - }  
597 -  
598 } 544 }
599 545
600 -  
601 return FALSE; 546 return FALSE;
602 } 547 }
603 548
@@ -617,10 +562,7 @@ void apply(GtkWidget *s, GtkWidget *t) @@ -617,10 +562,7 @@ void apply(GtkWidget *s, GtkWidget *t)
617 if(terminal->accelerators) 562 if(terminal->accelerators)
618 g_slist_free_full(terminal->accelerators,g_free); 563 g_slist_free_full(terminal->accelerators,g_free);
619 564
620 - terminal->accelerators = accelerators;  
621 -  
622 - // And sort it.  
623 - v3270_accelerator_map_sort(terminal); 565 + terminal->accelerators = v3270_accelerator_map_sort(accelerators);
624 566
625 } 567 }
626 568
src/include/internals.h
@@ -158,7 +158,6 @@ @@ -158,7 +158,6 @@
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 redirector.  
162 V3270_ACCELERATOR_TYPE_CUSTOM, ///< @brief Custom (application based) accelerator. 161 V3270_ACCELERATOR_TYPE_CUSTOM, ///< @brief Custom (application based) accelerator.
163 }; 162 };
164 163
@@ -177,24 +176,6 @@ @@ -177,24 +176,6 @@
177 const gchar *name; 176 const gchar *name;
178 } V3270CustomAccelerator; 177 } V3270CustomAccelerator;
179 178
180 - typedef struct _V3270PFKeyAccelerator  
181 - {  
182 - struct _V3270Accelerator parent;  
183 - const gchar *name;  
184 - const gchar *description;  
185 - unsigned short keycode;  
186 - } V3270PFKeyAccelerator;  
187 -  
188 - /*  
189 - typedef enum v3270_toggleable_dialog  
190 - {  
191 - V3270_TOGGLEABLE_DIALOG_PASTE_FAILED,  
192 -  
193 - V3270_TOGGLEABLE_DIALOG_CUSTOM  
194 - } V3270_TOGGLEABLE_DIALOG;  
195 -  
196 - G_GNUC_INTERNAL GtkResponseType v3270_popup_toggleable_dialog(GtkWidget *widget, V3270_TOGGLEABLE_DIALOG id, const gchar *title, const gchar *summary, const gchar *body, const gchar *first_button_text, ...) G_GNUC_NULL_TERMINATED;  
197 - */  
198 179
199 #if GTK_CHECK_VERSION(3,12,0) 180 #if GTK_CHECK_VERSION(3,12,0)
200 G_GNUC_INTERNAL GtkHeaderBar * v3270_dialog_get_header_bar(GtkWidget * widget); 181 G_GNUC_INTERNAL GtkHeaderBar * v3270_dialog_get_header_bar(GtkWidget * widget);
@@ -387,8 +368,8 @@ G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned @@ -387,8 +368,8 @@ G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned
387 G_GNUC_INTERNAL void v3270_update_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID id, unsigned char value, const char *name); 368 G_GNUC_INTERNAL void v3270_update_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID id, unsigned char value, const char *name);
388 369
389 // Accelerators 370 // Accelerators
390 - G_GNUC_INTERNAL void v3270_accelerator_map_sort(v3270 *widget);  
391 - G_GNUC_INTERNAL void v3270_init_accelerators(v3270 *widget); 371 + G_GNUC_INTERNAL GSList * v3270_accelerator_map_sort(GSList * accelerators);
  372 + G_GNUC_INTERNAL GSList * v3270_accelerator_map_load_default(GSList * accelerators);
392 373
393 G_END_DECLS 374 G_END_DECLS
394 375
src/terminal/keyboard/accelerator.c
@@ -51,15 +51,6 @@ @@ -51,15 +51,6 @@
51 } 51 }
52 break; 52 break;
53 53
54 - case V3270_ACCELERATOR_TYPE_PFKEY:  
55 - {  
56 - V3270PFKeyAccelerator * customAccel = g_new0(V3270PFKeyAccelerator,1);  
57 - *customAccel = *((V3270PFKeyAccelerator *) accel);  
58 - customAccel->parent.arg = (gconstpointer) customAccel;  
59 - rc = (V3270Accelerator *) customAccel;  
60 - }  
61 - break;  
62 -  
63 default: 54 default:
64 rc = g_new0(V3270Accelerator,1); 55 rc = g_new0(V3270Accelerator,1);
65 *rc = *accel; 56 *rc = *accel;
@@ -176,14 +167,6 @@ @@ -176,14 +167,6 @@
176 description = g_dgettext(GETTEXT_PACKAGE,property->summary); 167 description = g_dgettext(GETTEXT_PACKAGE,property->summary);
177 break; 168 break;
178 169
179 - case V3270_ACCELERATOR_TYPE_PFKEY:  
180 - debug("%s","V3270_ACCELERATOR_TYPE_PFKEY");  
181 -  
182 - if( ((V3270PFKeyAccelerator *)accel)->description )  
183 - description = g_dgettext(GETTEXT_PACKAGE,((V3270PFKeyAccelerator *)accel)->description);  
184 -  
185 - break;  
186 -  
187 } 170 }
188 171
189 debug("%s=%s",__FUNCTION__,description); 172 debug("%s=%s",__FUNCTION__,description);
@@ -218,14 +201,6 @@ @@ -218,14 +201,6 @@
218 description = g_dgettext(GETTEXT_PACKAGE,property->summary); 201 description = g_dgettext(GETTEXT_PACKAGE,property->summary);
219 break; 202 break;
220 203
221 - case V3270_ACCELERATOR_TYPE_PFKEY:  
222 - debug("%s","V3270_ACCELERATOR_TYPE_PFKEY");  
223 -  
224 - if( ((V3270PFKeyAccelerator *)accel)->description )  
225 - description = g_dgettext(GETTEXT_PACKAGE,((V3270PFKeyAccelerator *)accel)->description);  
226 -  
227 - break;  
228 -  
229 } 204 }
230 205
231 debug("%s=%s",__FUNCTION__,description); 206 debug("%s=%s",__FUNCTION__,description);
@@ -299,9 +274,6 @@ @@ -299,9 +274,6 @@
299 case V3270_ACCELERATOR_TYPE_CUSTOM: 274 case V3270_ACCELERATOR_TYPE_CUSTOM:
300 return ((V3270CustomAccelerator *) accel)->name; 275 return ((V3270CustomAccelerator *) accel)->name;
301 276
302 - case V3270_ACCELERATOR_TYPE_PFKEY:  
303 - return ((V3270PFKeyAccelerator *) accel)->name;  
304 -  
305 } 277 }
306 278
307 return NULL; 279 return NULL;
src/terminal/keyboard/init.c
@@ -68,6 +68,7 @@ @@ -68,6 +68,7 @@
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 + /*
71 static int fire_pfkey_action(GtkWidget *widget, V3270PFKeyAccelerator *accel) 72 static int fire_pfkey_action(GtkWidget *widget, V3270PFKeyAccelerator *accel)
72 { 73 {
73 debug("%s accel=%p",__FUNCTION__,accel); 74 debug("%s accel=%p",__FUNCTION__,accel);
@@ -75,12 +76,13 @@ @@ -75,12 +76,13 @@
75 76
76 return lib3270_pfkey(v3270_get_session(widget),(int) accel->keycode); 77 return lib3270_pfkey(v3270_get_session(widget),(int) accel->keycode);
77 } 78 }
  79 + */
78 80
79 - void v3270_init_accelerators(v3270 *widget) 81 + GSList * v3270_accelerator_map_load_default(GSList * accelerators)
80 { 82 {
81 size_t ix; 83 size_t ix;
82 84
83 - // Create accelerators for lib3270 actions. 85 + // Create accelerators for lib3270 actions.
84 { 86 {
85 const LIB3270_ACTION * actions = lib3270_get_actions(); 87 const LIB3270_ACTION * actions = lib3270_get_actions();
86 88
@@ -105,7 +107,7 @@ @@ -105,7 +107,7 @@
105 107
106 v3270_accelerator_parse(accelerator,keys[key]); 108 v3270_accelerator_parse(accelerator,keys[key]);
107 109
108 - widget->accelerators = g_slist_prepend(widget->accelerators,accelerator); 110 + accelerators = g_slist_prepend(accelerators,accelerator);
109 111
110 } 112 }
111 113
@@ -119,7 +121,7 @@ @@ -119,7 +121,7 @@
119 accelerator->type = V3270_ACCELERATOR_TYPE_LIB3270_ACTION; 121 accelerator->type = V3270_ACCELERATOR_TYPE_LIB3270_ACTION;
120 accelerator->arg = (gconstpointer) &actions[ix]; 122 accelerator->arg = (gconstpointer) &actions[ix];
121 accelerator->activate = G_CALLBACK(fire_lib3270_action); 123 accelerator->activate = G_CALLBACK(fire_lib3270_action);
122 - widget->accelerators = g_slist_prepend(widget->accelerators,accelerator); 124 + accelerators = g_slist_prepend(accelerators,accelerator);
123 125
124 } 126 }
125 127
@@ -141,7 +143,7 @@ @@ -141,7 +143,7 @@
141 143
142 v3270_accelerator_parse(accelerator,toggles[ix].key); 144 v3270_accelerator_parse(accelerator,toggles[ix].key);
143 145
144 - widget->accelerators = g_slist_prepend(widget->accelerators,accelerator); 146 + accelerators = g_slist_prepend(accelerators,accelerator);
145 147
146 } 148 }
147 149
@@ -169,7 +171,7 @@ @@ -169,7 +171,7 @@
169 171
170 v3270_accelerator_parse(accelerator,keys[key]); 172 v3270_accelerator_parse(accelerator,keys[key]);
171 173
172 - widget->accelerators = g_slist_prepend(widget->accelerators,accelerator); 174 + accelerators = g_slist_prepend(accelerators,accelerator);
173 175
174 } 176 }
175 177
@@ -184,7 +186,7 @@ @@ -184,7 +186,7 @@
184 accelerator->arg = (gconstpointer) &actions[ix]; 186 accelerator->arg = (gconstpointer) &actions[ix];
185 accelerator->activate = G_CALLBACK(actions[ix].activate); 187 accelerator->activate = G_CALLBACK(actions[ix].activate);
186 188
187 - widget->accelerators = g_slist_prepend(widget->accelerators,accelerator); 189 + accelerators = g_slist_prepend(accelerators,accelerator);
188 190
189 } 191 }
190 } 192 }
@@ -192,6 +194,7 @@ @@ -192,6 +194,7 @@
192 } 194 }
193 195
194 // Create PF-Key accelerators 196 // Create PF-Key accelerators
  197 + /*
195 { 198 {
196 static const struct 199 static const struct
197 { 200 {
@@ -236,8 +239,9 @@ @@ -236,8 +239,9 @@
236 } 239 }
237 240
238 } 241 }
  242 + */
239 243
240 - v3270_accelerator_map_sort(widget); 244 + return v3270_accelerator_map_sort(accelerators);
241 245
242 } 246 }
243 247
src/terminal/keyboard/keyfile.c
@@ -44,36 +44,18 @@ @@ -44,36 +44,18 @@
44 static void save_accelerator(const V3270Accelerator * accel, const char *keys, gpointer ptr) 44 static void save_accelerator(const V3270Accelerator * accel, const char *keys, gpointer ptr)
45 { 45 {
46 46
47 - if(accel->type == V3270_ACCELERATOR_TYPE_PFKEY)  
48 - {  
49 - // It's a PF-Key action!  
50 - g_autofree gchar * key = g_strdup_printf("pf%u",((V3270PFKeyAccelerator *)accel)->keycode);  
51 -  
52 - debug("%p %s=%s",accel,v3270_accelerator_get_name(accel),key);  
53 -  
54 - g_key_file_set_string(  
55 - ((struct Args *) ptr)->key_file,  
56 - ((struct Args *) ptr)->group_name,  
57 - v3270_accelerator_get_name(accel),  
58 - key  
59 - );  
60 -  
61 - }  
62 - else  
63 - {  
64 - const gchar * key = v3270_accelerator_get_name(accel);  
65 - if(!key)  
66 - return; 47 + const gchar * key = v3270_accelerator_get_name(accel);
  48 + if(!key)
  49 + return;
67 50
68 // debug("%s=%s",v3270_accelerator_get_name(accel),keys); 51 // debug("%s=%s",v3270_accelerator_get_name(accel),keys);
69 52
70 - g_key_file_set_string(  
71 - ((struct Args *) ptr)->key_file,  
72 - ((struct Args *) ptr)->group_name,  
73 - key,  
74 - (keys ? keys : "")  
75 - );  
76 - } 53 + g_key_file_set_string(
  54 + ((struct Args *) ptr)->key_file,
  55 + ((struct Args *) ptr)->group_name,
  56 + key,
  57 + (keys ? keys : "")
  58 + );
77 59
78 } 60 }
79 61
@@ -137,36 +119,11 @@ @@ -137,36 +119,11 @@
137 for(ix=0;keycodes[ix];ix++) 119 for(ix=0;keycodes[ix];ix++)
138 { 120 {
139 121
140 - if(accel->type == V3270_ACCELERATOR_TYPE_PFKEY)  
141 - {  
142 - // It's a PFKey redirector  
143 -  
144 - unsigned int pfkey = 0;  
145 -  
146 - if(sscanf(keycodes[ix],"pf%u",&pfkey) != 1)  
147 - {  
148 - g_warning("Can't parse key \"%s\" for accelerator %s",keycodes[ix],v3270_accelerator_get_name(accel));  
149 - return;  
150 - }  
151 -  
152 - debug("Creating special accelerator %s",v3270_accelerator_get_name(accel));  
153 -  
154 - // Remap PFKey accelerator  
155 - V3270Accelerator * acc = v3270_accelerator_clone(accel);  
156 - ((V3270PFKeyAccelerator *) acc)->keycode = (unsigned short) pfkey;  
157 - terminal->accelerators = g_slist_prepend(terminal->accelerators,acc);  
158 -  
159 - debug("****[%s]***",v3270_accelerator_get_name(accel));  
160 -  
161 - }  
162 - else  
163 - {  
164 - // Standard accelerator.  
165 - V3270Accelerator * acc = v3270_accelerator_clone(accel);  
166 - gtk_accelerator_parse(keycodes[ix],&acc->key,&acc->mods);  
167 - acc->key = gdk_keyval_to_lower(acc->key);  
168 - terminal->accelerators = g_slist_prepend(terminal->accelerators,acc);  
169 - } 122 + // Standard accelerator.
  123 + V3270Accelerator * acc = v3270_accelerator_clone(accel);
  124 + gtk_accelerator_parse(keycodes[ix],&acc->key,&acc->mods);
  125 + acc->key = gdk_keyval_to_lower(acc->key);
  126 + terminal->accelerators = g_slist_prepend(terminal->accelerators,acc);
170 127
171 } 128 }
172 129
@@ -205,7 +162,7 @@ @@ -205,7 +162,7 @@
205 162
206 g_strfreev(keys); 163 g_strfreev(keys);
207 164
208 - v3270_accelerator_map_sort(terminal); 165 + terminal->accelerators = v3270_accelerator_map_sort(terminal->accelerators);
209 166
210 g_object_thaw_notify(G_OBJECT(widget)); 167 g_object_thaw_notify(G_OBJECT(widget));
211 terminal->freeze = 0; 168 terminal->freeze = 0;
src/terminal/keyboard/map.c
@@ -44,7 +44,8 @@ @@ -44,7 +44,8 @@
44 g_slist_free_full(terminal->accelerators,g_free); 44 g_slist_free_full(terminal->accelerators,g_free);
45 terminal->accelerators = NULL; 45 terminal->accelerators = NULL;
46 } 46 }
47 - v3270_init_accelerators(terminal); 47 + terminal->accelerators = v3270_accelerator_map_load_default(NULL);
  48 +
48 } 49 }
49 50
50 } 51 }
@@ -57,9 +58,9 @@ @@ -57,9 +58,9 @@
57 return a->arg - b->arg; 58 return a->arg - b->arg;
58 } 59 }
59 60
60 - void v3270_accelerator_map_sort(v3270 *widget) 61 + GSList * v3270_accelerator_map_sort(GSList * accelerators)
61 { 62 {
62 - widget->accelerators = g_slist_sort(widget->accelerators, (GCompareFunc) compare_func); 63 + return g_slist_sort(accelerators, (GCompareFunc) compare_func);
63 } 64 }
64 65
65 void v3270_accelerator_map_foreach(GtkWidget *widget,void (*call)(const V3270Accelerator * accel, const char *keys, gpointer ptr), gpointer ptr) 66 void v3270_accelerator_map_foreach(GtkWidget *widget,void (*call)(const V3270Accelerator * accel, const char *keys, gpointer ptr), gpointer ptr)
src/terminal/widget.c
@@ -565,13 +565,8 @@ static void v3270_init(v3270 *widget) @@ -565,13 +565,8 @@ static void v3270_init(v3270 *widget)
565 v3270_font_info_init(&widget->font); 565 v3270_font_info_init(&widget->font);
566 v3270_set_color_table(widget->color,v3270_get_default_colors()); 566 v3270_set_color_table(widget->color,v3270_get_default_colors());
567 567
568 - /*  
569 - for(ix = 0; ix < G_N_ELEMENTS(widget->responses); ix++)  
570 - widget->responses[ix] = GTK_RESPONSE_NONE;  
571 - */  
572 -  
573 // Init accelerators 568 // Init accelerators
574 - v3270_init_accelerators(widget); 569 + widget->accelerators = v3270_accelerator_map_load_default(NULL);
575 570
576 } 571 }
577 572