Commit 8df52aa9569ae235250d86857e7cd8b920ca0e3f

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

Refactoring keyboard management engine.

@@ -38,6 +38,7 @@ SOURCES= \ @@ -38,6 +38,7 @@ SOURCES= \
38 $(wildcard src/terminal/properties/*.c) \ 38 $(wildcard src/terminal/properties/*.c) \
39 $(wildcard src/terminal/drawing/*.c) \ 39 $(wildcard src/terminal/drawing/*.c) \
40 $(wildcard src/terminal/font/*.c) \ 40 $(wildcard src/terminal/font/*.c) \
  41 + $(wildcard src/terminal/keyboard/*.c) \
41 $(wildcard src/filetransfer/*.c) \ 42 $(wildcard src/filetransfer/*.c) \
42 $(wildcard src/selection/*.c) \ 43 $(wildcard src/selection/*.c) \
43 $(wildcard src/selection/@OSNAME@/*.c) \ 44 $(wildcard src/selection/@OSNAME@/*.c) \
src/include/internals.h
@@ -309,7 +309,6 @@ G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned @@ -309,7 +309,6 @@ G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned
309 309
310 G_GNUC_INTERNAL void v3270_blink_ssl(v3270 *terminal); 310 G_GNUC_INTERNAL void v3270_blink_ssl(v3270 *terminal);
311 311
312 - G_GNUC_INTERNAL void v3270_init_properties(GObjectClass * gobject_class);  
313 G_GNUC_INTERNAL void v3270_queue_draw_area(GtkWidget *widget, gint x, gint y, gint width, gint height); 312 G_GNUC_INTERNAL void v3270_queue_draw_area(GtkWidget *widget, gint x, gint y, gint width, gint height);
314 313
315 G_GNUC_INTERNAL void v3270_disable_updates(GtkWidget *widget); 314 G_GNUC_INTERNAL void v3270_disable_updates(GtkWidget *widget);
@@ -340,9 +339,13 @@ G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned @@ -340,9 +339,13 @@ G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned
340 G_GNUC_INTERNAL gchar * v3270_translate_rgba_to_text(GdkRGBA *clr); 339 G_GNUC_INTERNAL gchar * v3270_translate_rgba_to_text(GdkRGBA *clr);
341 340
342 // Properties 341 // Properties
  342 + G_GNUC_INTERNAL void v3270_init_properties(GObjectClass * gobject_class);
343 G_GNUC_INTERNAL gboolean v3270_update_associated_lu(v3270 *terminal); 343 G_GNUC_INTERNAL gboolean v3270_update_associated_lu(v3270 *terminal);
344 G_GNUC_INTERNAL void v3270_update_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID id, unsigned char value, const char *name); 344 G_GNUC_INTERNAL void v3270_update_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID id, unsigned char value, const char *name);
345 345
  346 + // Accelerators
  347 + G_GNUC_INTERNAL void v3270_init_accelerators(v3270 *widget);
  348 +
346 G_END_DECLS 349 G_END_DECLS
347 350
348 #endif // V3270_INTERNALS_H_INCLUDED 351 #endif // V3270_INTERNALS_H_INCLUDED
src/include/terminal.h
@@ -217,6 +217,9 @@ G_BEGIN_DECLS @@ -217,6 +217,9 @@ G_BEGIN_DECLS
217 217
218 GtkWidget * trace; ///< @brief Trace window handle. 218 GtkWidget * trace; ///< @brief Trace window handle.
219 219
  220 + // Keyboard accelerators.
  221 + GSList * accelerators; ///< @brief Keyboard accelerators.
  222 +
220 }; 223 };
221 224
222 G_GNUC_INTERNAL void v3270_activate(GtkWidget *widget); 225 G_GNUC_INTERNAL void v3270_activate(GtkWidget *widget);
src/include/v3270.h
@@ -273,11 +273,6 @@ @@ -273,11 +273,6 @@
273 LIB3270_EXPORT void v3270_set_remap_filename(GtkWidget *widget, const gchar *path); 273 LIB3270_EXPORT void v3270_set_remap_filename(GtkWidget *widget, const gchar *path);
274 LIB3270_EXPORT const gchar * v3270_get_remap_filename(GtkWidget *widget); 274 LIB3270_EXPORT const gchar * v3270_get_remap_filename(GtkWidget *widget);
275 275
276 - // Actions  
277 - LIB3270_EXPORT void v3270_set_scroll_action(GtkWidget *widget, GdkScrollDirection direction, GtkAction *action) G_GNUC_DEPRECATED;  
278 - LIB3270_EXPORT void v3270_tab(GtkWidget *widget);  
279 - LIB3270_EXPORT void v3270_backtab(GtkWidget *widget);  
280 -  
281 // SSL & Security 276 // SSL & Security
282 LIB3270_EXPORT const gchar * v3270_get_ssl_state_icon_name(GtkWidget *widget); 277 LIB3270_EXPORT const gchar * v3270_get_ssl_state_icon_name(GtkWidget *widget);
283 LIB3270_EXPORT const gchar * v3270_get_ssl_state_message(GtkWidget *widget); 278 LIB3270_EXPORT const gchar * v3270_get_ssl_state_message(GtkWidget *widget);
src/include/v3270/actions.h 0 → 100644
@@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como - e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 +#ifndef V3270_ACTIONS_H_INCLUDED
  31 +
  32 + #define V3270_ACTIONS_H_INCLUDED 1
  33 +
  34 + #include <gtk/gtk.h>
  35 +
  36 + G_BEGIN_DECLS
  37 +
  38 + typedef struct _V3270Accelerator V3270Accelerator;
  39 +
  40 + LIB3270_EXPORT void v3270_set_scroll_action(GtkWidget *widget, GdkScrollDirection direction, GtkAction *action) G_GNUC_DEPRECATED;
  41 + LIB3270_EXPORT void v3270_tab(GtkWidget *widget);
  42 + LIB3270_EXPORT void v3270_backtab(GtkWidget *widget);
  43 +
  44 + LIB3270_EXPORT void v3270_accelerator_activate(V3270Accelerator * accell, GtkWidget *terminal);
  45 + LIB3270_EXPORT gboolean v3270_accelerator_compare(const V3270Accelerator * accell, const guint keyval, const GdkModifierType mods);
  46 +
  47 +
  48 + G_END_DECLS
  49 +
  50 +#endif // V3270_ACTIONS_H_INCLUDED
src/include/v3270/keyboard.h
@@ -1,73 +0,0 @@ @@ -1,73 +0,0 @@
1 -/*  
2 - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270  
3 - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a  
4 - * aplicativos mainframe. Registro no INPI sob o nome G3270.  
5 - *  
6 - * Copyright (C) <2008> <Banco do Brasil S.A.>  
7 - *  
8 - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob  
9 - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela  
10 - * Free Software Foundation.  
11 - *  
12 - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER  
13 - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO  
14 - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para  
15 - * obter mais detalhes.  
16 - *  
17 - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este  
18 - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin  
19 - * St, Fifth Floor, Boston, MA 02110-1301 USA  
20 - *  
21 - * Este programa está nomeado como - e possui - linhas de código.  
22 - *  
23 - * Contatos:  
24 - *  
25 - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)  
26 - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)  
27 - *  
28 - */  
29 -  
30 -#ifndef V3270_KEYBOARD_H_INCLUDED  
31 -  
32 - #define V3270_KEYBOARD_H_INCLUDED 1  
33 -  
34 - #include <gtk/gtk.h>  
35 -  
36 - G_BEGIN_DECLS  
37 -  
38 - #define GTK_TYPE_V3270_ACCELERATOR (V3270Accelerator_get_type ())  
39 - #define GTK_V3270_ACCELERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270_ACCELERATOR, V3270Accelerator))  
40 - #define GTK_V3270_ACCELERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_V3270_ACCELERATOR, V3270AcceleratorClass))  
41 - #define GTK_IS_V3270_ACCELERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_V3270_ACCELERATOR))  
42 - #define GTK_IS_V3270_ACCELERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_V3270_ACCELERATOR))  
43 - #define GTK_V3270_ACCELERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_V3270_ACCELERATOR, V3270AcceleratorClass))  
44 -  
45 - typedef struct _V3270Accelerator  
46 - {  
47 - GObject parent;  
48 - guint accel_key;  
49 - GdkModifierType accel_mods;  
50 - } V3270Accelerator;  
51 -  
52 - typedef struct _V3270AcceleratorClass  
53 - {  
54 - GObjectClass parent_class;  
55 -  
56 - void (*activate)(GObject *accelerator, GtkWidget *widget);  
57 - const gchar * (*get_name)(GObject *accelerator);  
58 -  
59 - } V3270AcceleratorClass;  
60 -  
61 - LIB3270_EXPORT GType V3270Accelerator_get_type(void);  
62 -  
63 - LIB3270_EXPORT GObject * v3270_accelerator_new_from_lib3270_action(const LIB3270_ACTION *action);  
64 -  
65 - LIB3270_EXPORT void v3270_accelerator_activate(GtkWidget *widget);  
66 - LIB3270_EXPORT const gchar * v3270_accelerator_get_name(GObject *accelerator);  
67 - LIB3270_EXPORT void v3270_accelerator_parse(GObject *object, const gchar *accelerator);  
68 -  
69 - LIB3270_EXPORT void v3270_append_accelerator(GtkWidget *terminal, GObject *accelerator);  
70 -  
71 - G_END_DECLS  
72 -  
73 -#endif // V3270_DIALOGS_H_INCLUDED  
src/terminal/keyboard.c
@@ -32,6 +32,7 @@ @@ -32,6 +32,7 @@
32 32
33 #include <lib3270.h> 33 #include <lib3270.h>
34 #include <lib3270/actions.h> 34 #include <lib3270/actions.h>
  35 + #include <v3270/actions.h>
35 #include <lib3270/log.h> 36 #include <lib3270/log.h>
36 #include <gtk/gtk.h> 37 #include <gtk/gtk.h>
37 #include <string.h> 38 #include <string.h>
@@ -57,6 +58,7 @@ @@ -57,6 +58,7 @@
57 58
58 /*--[ Globals ]--------------------------------------------------------------------------------------*/ 59 /*--[ Globals ]--------------------------------------------------------------------------------------*/
59 60
  61 + /*
60 static struct _keycode 62 static struct _keycode
61 { 63 {
62 guint keyval; 64 guint keyval;
@@ -64,20 +66,17 @@ @@ -64,20 +66,17 @@
64 int (*exec)(H3270 *session); 66 int (*exec)(H3270 *session);
65 } keycode[] = 67 } keycode[] =
66 { 68 {
67 - { GDK_Left, 0, lib3270_cursor_left },  
68 - { GDK_Up, 0, lib3270_cursor_up },  
69 - { GDK_Right, 0, lib3270_cursor_right },  
70 - { GDK_Down, 0, lib3270_cursor_down },  
71 - { GDK_Tab, 0, lib3270_nextfield },  
72 - { GDK_ISO_Left_Tab, GDK_SHIFT_MASK, lib3270_previousfield }, 69 + { GDK_Left, 0, lib3270_cursor_left }, // OK
  70 + { GDK_Up, 0, lib3270_cursor_up }, // OK
  71 + { GDK_Right, 0, lib3270_cursor_right }, // OK
  72 + { GDK_Down, 0, lib3270_cursor_down }, // OK
  73 + { GDK_Tab, 0, lib3270_nextfield }, // OK
  74 + { GDK_ISO_Left_Tab, GDK_SHIFT_MASK, lib3270_previousfield }, // OK
73 { GDK_KP_Left, 0, lib3270_cursor_left }, 75 { GDK_KP_Left, 0, lib3270_cursor_left },
74 { GDK_KP_Up, 0, lib3270_cursor_up }, 76 { GDK_KP_Up, 0, lib3270_cursor_up },
75 { GDK_KP_Right, 0, lib3270_cursor_right }, 77 { GDK_KP_Right, 0, lib3270_cursor_right },
76 { GDK_KP_Down, 0, lib3270_cursor_down }, 78 { GDK_KP_Down, 0, lib3270_cursor_down },
77 79
78 -// { GDK_KP_Add, GDK_NUMLOCK_MASK, NULL },  
79 -// { GDK_KP_Subtract, GDK_NUMLOCK_MASK, NULL },  
80 -  
81 { GDK_3270_PrintScreen, 0, lib3270_print_all }, 80 { GDK_3270_PrintScreen, 0, lib3270_print_all },
82 { GDK_P, GDK_CONTROL_MASK, lib3270_print_all }, 81 { GDK_P, GDK_CONTROL_MASK, lib3270_print_all },
83 82
@@ -85,14 +84,14 @@ @@ -85,14 +84,14 @@
85 84
86 { GDK_Print, GDK_CONTROL_MASK, lib3270_print_all }, 85 { GDK_Print, GDK_CONTROL_MASK, lib3270_print_all },
87 { GDK_Print, GDK_SHIFT_MASK, lib3270_sysreq }, 86 { GDK_Print, GDK_SHIFT_MASK, lib3270_sysreq },
88 -// { GDK_Control_R, 0, NULL },  
89 -// { GDK_Control_L, 0, NULL },  
90 87
91 88
92 //#ifdef WIN32 89 //#ifdef WIN32
93 // { GDK_Pause, 0, NULL }, 90 // { GDK_Pause, 0, NULL },
94 //#endif 91 //#endif
  92 +
95 }; 93 };
  94 + */
96 95
97 /*--[ Implement ]------------------------------------------------------------------------------------*/ 96 /*--[ Implement ]------------------------------------------------------------------------------------*/
98 97
@@ -124,7 +123,7 @@ @@ -124,7 +123,7 @@
124 123
125 static gboolean check_keypress(v3270 *widget, GdkEventKey *event) 124 static gboolean check_keypress(v3270 *widget, GdkEventKey *event)
126 { 125 {
127 - int f; 126 +// int f;
128 GdkModifierType state = event->state & (GDK_SHIFT_MASK|GDK_CONTROL_MASK|GDK_ALT_MASK); 127 GdkModifierType state = event->state & (GDK_SHIFT_MASK|GDK_CONTROL_MASK|GDK_ALT_MASK);
129 gboolean handled = FALSE; 128 gboolean handled = FALSE;
130 129
@@ -150,6 +149,19 @@ @@ -150,6 +149,19 @@
150 } 149 }
151 #endif // DEBUG 150 #endif // DEBUG
152 151
  152 + // Check accelerator table.
  153 + GSList * acccelerator;
  154 + for(acccelerator = widget->accelerators; acccelerator; acccelerator = g_slist_next(acccelerator))
  155 + {
  156 + if(v3270_accelerator_compare((V3270Accelerator *) acccelerator->data, event->keyval, state))
  157 + {
  158 + v3270_accelerator_activate((V3270Accelerator *) acccelerator->data,GTK_WIDGET(widget));
  159 + return TRUE;
  160 + }
  161 +
  162 + }
  163 +
  164 + // Check PFKeys
153 if(event->keyval >= GDK_F1 && event->keyval <= GDK_F12 && !(state & (GDK_CONTROL_MASK|GDK_ALT_MASK))) 165 if(event->keyval >= GDK_F1 && event->keyval <= GDK_F12 && !(state & (GDK_CONTROL_MASK|GDK_ALT_MASK)))
154 { 166 {
155 int pfcode = (event->keyval - GDK_F1) + ((state & GDK_SHIFT_MASK) ? 13 : 1); 167 int pfcode = (event->keyval - GDK_F1) + ((state & GDK_SHIFT_MASK) ? 13 : 1);
@@ -161,6 +173,7 @@ @@ -161,6 +173,7 @@
161 } 173 }
162 } 174 }
163 175
  176 + /*
164 for(f=0; f < (int) G_N_ELEMENTS(keycode);f++) 177 for(f=0; f < (int) G_N_ELEMENTS(keycode);f++)
165 { 178 {
166 if(keycode[f].keyval == event->keyval && state == keycode[f].state) 179 if(keycode[f].keyval == event->keyval && state == keycode[f].state)
@@ -173,6 +186,7 @@ @@ -173,6 +186,7 @@
173 186
174 } 187 }
175 } 188 }
  189 + */
176 190
177 return FALSE; 191 return FALSE;
178 } 192 }
src/terminal/keyboard/init.c 0 → 100644
@@ -0,0 +1,109 @@ @@ -0,0 +1,109 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como properties.c e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 + #include "private.h"
  31 + #include <errno.h>
  32 + #include <internals.h>
  33 + #include <terminal.h>
  34 + #include <lib3270/actions.h>
  35 +
  36 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  37 +
  38 + static int fire_lib3270_action(GtkWidget *widget, const LIB3270_ACTION * action)
  39 + {
  40 + int rc = EPERM;
  41 +
  42 + H3270 *hSession = v3270_get_session(widget);
  43 +
  44 + debug("%s(%s)",__FUNCTION__,action->name);
  45 +
  46 + if(action->activatable(hSession))
  47 + rc = action->activate(hSession);
  48 +
  49 + debug("%s(%s)=%d %s",__FUNCTION__,action->name,rc,strerror(rc));
  50 + return rc;
  51 +
  52 + }
  53 +
  54 + void v3270_init_accelerators(v3270 *widget)
  55 + {
  56 + size_t ix;
  57 +
  58 + // Create accelerators for lib3270 actions.
  59 + const LIB3270_ACTION * actions = lib3270_get_actions();
  60 +
  61 + for(ix = 0; actions[ix].name; ix++)
  62 + {
  63 + if(actions[ix].keys)
  64 + {
  65 + size_t key;
  66 +
  67 + gchar ** keys = g_strsplit(actions[ix].keys,",",-1);
  68 +
  69 + for(key = 0; keys[key]; key++)
  70 + {
  71 +
  72 + V3270Accelerator * accelerator = g_new0(V3270Accelerator,1);
  73 +
  74 + accelerator->type = ACCELERATOR_TYPE_LIB3270_ACTION;
  75 + accelerator->arg = (gconstpointer) &actions[ix];
  76 + accelerator->activate = G_CALLBACK(fire_lib3270_action);
  77 +
  78 + debug("%s=%s",actions[ix].name,keys[key]);
  79 +
  80 + gtk_accelerator_parse(keys[key],&accelerator->key,&accelerator->mods);
  81 +
  82 + widget->accelerators = g_slist_prepend(widget->accelerators,accelerator);
  83 +
  84 + }
  85 +
  86 + g_strfreev(keys);
  87 +
  88 + }
  89 +
  90 + }
  91 +
  92 +
  93 + }
  94 +
  95 + gboolean v3270_accelerator_compare(const V3270Accelerator * accell, const guint keyval, const GdkModifierType mods)
  96 + {
  97 + return accell->key == keyval && accell->mods == mods;
  98 + }
  99 +
  100 + void v3270_accelerator_activate(V3270Accelerator * accell, GtkWidget *terminal)
  101 + {
  102 + int rc = ((int (*)(GtkWidget *, const void *)) accell->activate)(terminal,accell->arg);
  103 +
  104 + if(rc)
  105 + gdk_display_beep(gdk_display_get_default());
  106 +
  107 + }
  108 +
  109 +
src/terminal/keyboard/private.h 0 → 100644
@@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como - e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 + #include <config.h>
  31 + #include <v3270.h>
  32 + #include <v3270/actions.h>
  33 +
  34 + enum
  35 + {
  36 + ACCELERATOR_TYPE_LIB3270_ACTION, ///< @brief Accelerator is a lib3270 action
  37 + };
  38 +
  39 + struct _V3270Accelerator
  40 + {
  41 + unsigned short type;
  42 + guint key;
  43 + GdkModifierType mods;
  44 + gconstpointer arg;
  45 + GCallback activate;
  46 + };
src/terminal/widget.c
@@ -180,6 +180,12 @@ static void finalize(GObject *object) @@ -180,6 +180,12 @@ static void finalize(GObject *object)
180 terminal->host = NULL; 180 terminal->host = NULL;
181 } 181 }
182 182
  183 + if(terminal->accelerators)
  184 + {
  185 + g_slist_free_full(terminal->accelerators,g_free);
  186 + terminal->accelerators = NULL;
  187 + }
  188 +
183 G_OBJECT_CLASS(v3270_parent_class)->finalize(object); 189 G_OBJECT_CLASS(v3270_parent_class)->finalize(object);
184 } 190 }
185 191
@@ -526,6 +532,9 @@ static void v3270_init(v3270 *widget) @@ -526,6 +532,9 @@ static void v3270_init(v3270 *widget)
526 for(ix = 0; ix < G_N_ELEMENTS(widget->responses); ix++) 532 for(ix = 0; ix < G_N_ELEMENTS(widget->responses); ix++)
527 widget->responses[ix] = GTK_RESPONSE_NONE; 533 widget->responses[ix] = GTK_RESPONSE_NONE;
528 534
  535 + // Init accelerators
  536 + v3270_init_accelerators(widget);
  537 +
529 } 538 }
530 539
531 LIB3270_EXPORT GtkWidget * v3270_new(void) 540 LIB3270_EXPORT GtkWidget * v3270_new(void)
@@ -173,11 +173,11 @@ @@ -173,11 +173,11 @@
173 <Unit filename="src/include/terminal.h" /> 173 <Unit filename="src/include/terminal.h" />
174 <Unit filename="src/include/v3270.h" /> 174 <Unit filename="src/include/v3270.h" />
175 <Unit filename="src/include/v3270/accessible.h" /> 175 <Unit filename="src/include/v3270/accessible.h" />
  176 + <Unit filename="src/include/v3270/actions.h" />
176 <Unit filename="src/include/v3270/colorscheme.h" /> 177 <Unit filename="src/include/v3270/colorscheme.h" />
177 <Unit filename="src/include/v3270/dialogs.h" /> 178 <Unit filename="src/include/v3270/dialogs.h" />
178 <Unit filename="src/include/v3270/filetransfer.h" /> 179 <Unit filename="src/include/v3270/filetransfer.h" />
179 <Unit filename="src/include/v3270/ftprogress.h" /> 180 <Unit filename="src/include/v3270/ftprogress.h" />
180 - <Unit filename="src/include/v3270/keyboard.h" />  
181 <Unit filename="src/include/v3270/print.h" /> 181 <Unit filename="src/include/v3270/print.h" />
182 <Unit filename="src/include/v3270/security.h" /> 182 <Unit filename="src/include/v3270/security.h" />
183 <Unit filename="src/include/v3270/settings.h" /> 183 <Unit filename="src/include/v3270/settings.h" />
@@ -268,6 +268,10 @@ @@ -268,6 +268,10 @@
268 <Unit filename="src/terminal/keyboard.c"> 268 <Unit filename="src/terminal/keyboard.c">
269 <Option compilerVar="CC" /> 269 <Option compilerVar="CC" />
270 </Unit> 270 </Unit>
  271 + <Unit filename="src/terminal/keyboard/init.c">
  272 + <Option compilerVar="CC" />
  273 + </Unit>
  274 + <Unit filename="src/terminal/keyboard/private.h" />
271 <Unit filename="src/terminal/keyfile.c"> 275 <Unit filename="src/terminal/keyfile.c">
272 <Option compilerVar="CC" /> 276 <Option compilerVar="CC" />
273 </Unit> 277 </Unit>