Commit 92d516aaab9b2ab2aac3b3a452c786d146400b5d

Authored by Perry Werneck
1 parent 0b69e655

Fixing GAction<->lib3270 adapters.

src/actions/abstract.c
@@ -28,6 +28,7 @@ @@ -28,6 +28,7 @@
28 */ 28 */
29 29
30 #include "private.h" 30 #include "private.h"
  31 + #include <v3270.h>
31 32
32 static void pw3270_action_iface_init(GActionInterface *iface); 33 static void pw3270_action_iface_init(GActionInterface *iface);
33 static void pw3270Action_class_init(pw3270ActionClass *klass); 34 static void pw3270Action_class_init(pw3270ActionClass *klass);
@@ -35,6 +36,12 @@ @@ -35,6 +36,12 @@
35 static void pw3270_action_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); 36 static void pw3270_action_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
36 static void pw3270_action_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); 37 static void pw3270_action_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
37 static void pw3270_action_set_state(GAction *action, GVariant *value); 38 static void pw3270_action_set_state(GAction *action, GVariant *value);
  39 + static gboolean pw3270_action_get_enabled(GAction *action);
  40 + static void pw3270_action_activate(GAction *action, GVariant *parameter);
  41 +
  42 + static gboolean get_enabled(GAction *action, GtkWidget *terminal);
  43 + static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal);
  44 + static void change_widget(GAction *action, GtkWidget *from, GtkWidget *to);
38 45
39 static void finalize(GObject *object); 46 static void finalize(GObject *object);
40 47
@@ -66,20 +73,18 @@ @@ -66,20 +73,18 @@
66 iface->activate = pw3270_action_activate; 73 iface->activate = pw3270_action_activate;
67 } 74 }
68 75
69 - static gboolean return_false(GAction G_GNUC_UNUSED(*action), GtkWidget G_GNUC_UNUSED(*window)) {  
70 - return FALSE;  
71 - }  
72 -  
73 void pw3270Action_class_init(pw3270ActionClass *klass) { 76 void pw3270Action_class_init(pw3270ActionClass *klass) {
74 77
75 GObjectClass *object_class = G_OBJECT_CLASS(klass); 78 GObjectClass *object_class = G_OBJECT_CLASS(klass);
76 79
  80 + klass->change_widget = change_widget;
  81 + klass->get_enabled = get_enabled;
  82 + klass->activate = activate;
  83 +
77 object_class->finalize = finalize; 84 object_class->finalize = finalize;
78 object_class->set_property = pw3270_action_set_property; 85 object_class->set_property = pw3270_action_set_property;
79 object_class->get_property = pw3270_action_get_property; 86 object_class->get_property = pw3270_action_get_property;
80 87
81 - klass->get_enabled = return_false;  
82 -  
83 // Install properties 88 // Install properties
84 g_object_class_install_property(object_class, PROP_NAME, 89 g_object_class_install_property(object_class, PROP_NAME,
85 g_param_spec_string ("name", 90 g_param_spec_string ("name",
@@ -129,9 +134,9 @@ @@ -129,9 +134,9 @@
129 134
130 void pw3270Action_init(pw3270Action *action) { 135 void pw3270Action_init(pw3270Action *action) {
131 136
132 - action->name = NULL;  
133 - action->window = NULL;  
134 - action->state = NULL; 137 + action->name = NULL;
  138 + action->terminal = NULL;
  139 + action->state = NULL;
135 140
136 } 141 }
137 142
@@ -139,6 +144,9 @@ @@ -139,6 +144,9 @@
139 144
140 pw3270Action * action = PW3270_ACTION(object); 145 pw3270Action * action = PW3270_ACTION(object);
141 146
  147 + if(action->terminal)
  148 + pw3270_action_set_terminal_widget(G_ACTION(object),NULL);
  149 +
142 if(action->name) { 150 if(action->name) {
143 151
144 debug("Finalizing action \"%s\"",action->name); 152 debug("Finalizing action \"%s\"",action->name);
@@ -242,23 +250,6 @@ @@ -242,23 +250,6 @@
242 return PW3270_ACTION(action)->state; 250 return PW3270_ACTION(action)->state;
243 } 251 }
244 252
245 - gboolean pw3270_action_get_enabled(GAction *action) {  
246 - GtkWidget *window = PW3270_ACTION(action)->window;  
247 -  
248 - if(window)  
249 - return PW3270_ACTION_GET_CLASS(action)->get_enabled(action,window);  
250 -  
251 - return FALSE;  
252 - }  
253 -  
254 - void pw3270_action_activate(GAction *action, GVariant *parameter) {  
255 - GtkWidget *window = PW3270_ACTION(action)->window;  
256 -  
257 - if(window)  
258 - PW3270_ACTION_GET_CLASS(action)->activate(action,window);  
259 -  
260 - }  
261 -  
262 const GVariantType * pw3270_action_get_parameter_type(GAction *action) { 253 const GVariantType * pw3270_action_get_parameter_type(GAction *action) {
263 debug("%s",__FUNCTION__); 254 debug("%s",__FUNCTION__);
264 return NULL; 255 return NULL;
@@ -280,11 +271,97 @@ @@ -280,11 +271,97 @@
280 return NULL; 271 return NULL;
281 } 272 }
282 273
283 - void pw3270_action_change_state(GAction *action, GVariant *value) {  
284 - debug("%s",__FUNCTION__);  
285 - pw3270_action_set_state (action, value); 274 + void pw3270_action_change_state(GAction *object, GVariant *value) {
  275 +
  276 + /*
  277 + pw3270Action * action = PW3270_ACTION(object);
  278 +
  279 + if (g_signal_has_handler_pending(object, pw3270_action_signals[SIGNAL_CHANGE_STATE], 0, TRUE))
  280 + g_signal_emit(action, pw3270_action_signals[SIGNAL_CHANGE_STATE], 0, value);
  281 + */
  282 +
  283 + pw3270_action_set_state(object, value);
  284 +
286 } 285 }
287 286
288 - void pw3270_action_set_state(GAction *action, GVariant *value) { 287 + void pw3270_action_set_state(GAction *object, GVariant *value) {
  288 +
  289 + if(value) {
  290 +
  291 + pw3270Action * action = PW3270_ACTION(object);
  292 +
  293 + g_variant_ref_sink(value);
  294 +
  295 + if (!action->state || !g_variant_equal(action->state, value)) {
  296 +
  297 + if(action->state)
  298 + g_variant_unref(action->state);
  299 +
  300 + action->state = g_variant_ref(value);
  301 +
  302 + g_object_notify(G_OBJECT(object), "state");
  303 + }
  304 +
  305 + g_variant_unref(value);
  306 +
  307 + }
  308 +
  309 + }
  310 +
  311 + static void change_widget(GAction *action, GtkWidget G_GNUC_UNUSED(*from), GtkWidget *to) {
  312 + PW3270_ACTION(action)->terminal = to;
  313 + }
  314 +
  315 + void pw3270_action_set_terminal_widget(GAction *object, GtkWidget *widget) {
  316 +
  317 + g_return_if_fail(PW3270_IS_ACTION(object) && GTK_IS_V3270(widget));
  318 +
  319 + pw3270Action * action = PW3270_ACTION(object);
  320 +
  321 + if(action->terminal != widget) {
  322 + PW3270_ACTION_GET_CLASS(object)->change_widget(object,action->terminal,widget);
  323 + action->terminal = widget;
  324 + }
  325 +
  326 + }
  327 +
  328 + void pw3270_action_change_state_boolean(GAction *action, gboolean state) {
  329 + pw3270_action_change_state(action,g_variant_new_boolean(state));
  330 + }
  331 +
  332 + gboolean pw3270_action_get_enabled(GAction *object) {
  333 +
  334 + pw3270Action * action = PW3270_ACTION(object);
  335 +
  336 + debug("%s: terminal=%p",__FUNCTION__,action->terminal);
  337 +
  338 + if(action && action->terminal) {
  339 +
  340 + return PW3270_ACTION_GET_CLASS(object)->get_enabled(object,action->terminal);
  341 +
  342 + }
  343 +
  344 + return FALSE;
  345 +
  346 + }
  347 +
  348 + void pw3270_action_activate(GAction *object, GVariant *parameter) {
  349 +
  350 + pw3270Action * action = PW3270_ACTION(object);
  351 +
  352 + debug("%s: terminal=%p",__FUNCTION__,action->terminal);
  353 +
  354 + if(action && action->terminal) {
  355 + return PW3270_ACTION_GET_CLASS(object)->activate(object,parameter,action->terminal);
  356 + }
  357 +
  358 + }
  359 +
  360 + gboolean get_enabled(GAction *object, GtkWidget *terminal) {
289 debug("%s",__FUNCTION__); 361 debug("%s",__FUNCTION__);
  362 + return TRUE;
  363 + }
  364 +
  365 + void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) {
  366 + g_message("Action %s can't be activated",pw3270_action_get_name(action));
290 } 367 }
src/actions/lib3270/action.c
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 */ 33 */
34 34
35 #include "../private.h" 35 #include "../private.h"
36 - #include <pw3270/window.h> 36 + #include <v3270.h>
37 37
38 #define PW3270_TYPE_LIB3270_ACTION (Lib3270Action_get_type()) 38 #define PW3270_TYPE_LIB3270_ACTION (Lib3270Action_get_type())
39 #define PW3270_LIB3270_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_LIB3270_ACTION, Lib3270Action)) 39 #define PW3270_LIB3270_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_LIB3270_ACTION, Lib3270Action))
@@ -56,48 +56,33 @@ @@ -56,48 +56,33 @@
56 56
57 G_DEFINE_TYPE(Lib3270Action, Lib3270Action, PW3270_TYPE_ACTION); 57 G_DEFINE_TYPE(Lib3270Action, Lib3270Action, PW3270_TYPE_ACTION);
58 58
59 - static gboolean action_enabled(GAction *action, GtkWidget *window) {  
60 -  
61 - H3270 * hSession = pw3270_window_get_session_handle(window);  
62 -  
63 - if(hSession)  
64 - return PW3270_LIB3270_ACTION(action)->definition->activatable(hSession) > 0 ? TRUE : FALSE;  
65 -  
66 - return FALSE; 59 + static gboolean get_enabled(GAction *action, GtkWidget *terminal) {
  60 + return PW3270_LIB3270_ACTION(action)->definition->activatable(v3270_get_session(terminal)) > 0 ? TRUE : FALSE;
67 } 61 }
68 62
69 - static void action_activate(GAction *action, GtkWidget *window) {  
70 -  
71 - H3270 * hSession = pw3270_window_get_session_handle(window);  
72 -  
73 - debug("Activating action %s on hSession %p", pw3270_action_get_name(action), hSession);  
74 -  
75 - if(hSession)  
76 - PW3270_LIB3270_ACTION(action)->definition->activate(hSession);  
77 - else  
78 - g_message("Action \"%s\" requires a lib3270 session", pw3270_action_get_name(action));  
79 - 63 + static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) {
  64 + PW3270_LIB3270_ACTION(action)->definition->activate(v3270_get_session(terminal));
80 } 65 }
81 66
82 void Lib3270Action_class_init(Lib3270ActionClass *klass) { 67 void Lib3270Action_class_init(Lib3270ActionClass *klass) {
83 68
84 - pw3270ActionClass * action = PW3270_ACTION_CLASS(klass); 69 + pw3270ActionClass * action = PW3270_ACTION_CLASS(klass);
85 70
86 - action->get_enabled = action_enabled;  
87 - action->activate = action_activate; 71 + action->activate = activate;
  72 + action->get_enabled = get_enabled;
88 73
89 } 74 }
90 75
91 void Lib3270Action_init(Lib3270Action *action) { 76 void Lib3270Action_init(Lib3270Action *action) {
92 } 77 }
93 78
94 - GAction * pw3270_action_new_from_lib3270(const LIB3270_ACTION * definition, GtkWidget *window) { 79 + GAction * pw3270_action_new_from_lib3270(const LIB3270_ACTION * definition) {
95 80
96 Lib3270Action * action = (Lib3270Action *) g_object_new(PW3270_TYPE_LIB3270_ACTION, NULL); 81 Lib3270Action * action = (Lib3270Action *) g_object_new(PW3270_TYPE_LIB3270_ACTION, NULL);
97 - pw3270Action * abstract = PW3270_ACTION(action);  
98 -  
99 action->definition = definition; 82 action->definition = definition;
100 - abstract->window = window; 83 +
  84 + // Setup the default name.
  85 + pw3270Action * abstract = PW3270_ACTION(action);
101 86
102 if(abstract->name) 87 if(abstract->name)
103 g_free(abstract->name); 88 g_free(abstract->name);
src/actions/lib3270/toggle.c
@@ -34,9 +34,10 @@ @@ -34,9 +34,10 @@
34 34
35 #include "../private.h" 35 #include "../private.h"
36 #include <pw3270/window.h> 36 #include <pw3270/window.h>
  37 + #include <v3270.h>
37 38
38 #define PW3270_TYPE_LIB3270_TOGGLE_ACTION (Lib3270ToggleAction_get_type()) 39 #define PW3270_TYPE_LIB3270_TOGGLE_ACTION (Lib3270ToggleAction_get_type())
39 - #define PW3270_LIB3270_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_LIB3270_TOGGLE_ACTION, Lib3270Action)) 40 + #define PW3270_LIB3270_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_LIB3270_TOGGLE_ACTION, Lib3270ToggleAction))
40 #define PW3270_IS_LIB3270_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), PW3270_TYPE_LIB3270_TOGGLE_ACTION)) 41 #define PW3270_IS_LIB3270_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), PW3270_TYPE_LIB3270_TOGGLE_ACTION))
41 42
42 typedef struct _Lib3270ToggleActionClass { 43 typedef struct _Lib3270ToggleActionClass {
@@ -47,45 +48,54 @@ @@ -47,45 +48,54 @@
47 typedef struct _Lib3270ToggleAction { 48 typedef struct _Lib3270ToggleAction {
48 pw3270Action parent; 49 pw3270Action parent;
49 50
50 - const LIB3270_TOGGLE_ENTRY * definition; 51 + const LIB3270_TOGGLE * definition;
  52 + const void * listener;
51 53
52 } Lib3270ToggleAction; 54 } Lib3270ToggleAction;
53 55
54 - static void Lib3270ToggleAction_class_init(Lib3270ActionClass *klass);  
55 - static void Lib3270ToggleAction_init(Lib3270Action *action); 56 + static void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass);
  57 + static void Lib3270ToggleAction_init(Lib3270ToggleAction *action);
56 58
57 G_DEFINE_TYPE(Lib3270ToggleAction, Lib3270ToggleAction, PW3270_TYPE_ACTION); 59 G_DEFINE_TYPE(Lib3270ToggleAction, Lib3270ToggleAction, PW3270_TYPE_ACTION);
58 60
59 - static gboolean action_enabled(GAction *action, GtkWidget *window) {  
60 -  
61 -  
62 - return FALSE; 61 + static void change_state(H3270 *hSession, LIB3270_TOGGLE_ID id, char state, void * action) {
  62 + pw3270_action_change_state_boolean(PW3270_ACTION(action), state == 0 ? FALSE : TRUE);
63 } 63 }
64 64
65 - static void action_activate(GAction *action, GtkWidget *window) { 65 + static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to) {
66 66
  67 + Lib3270ToggleAction * action = PW3270_LIB3270_TOGGLE_ACTION(object);
67 68
68 - } 69 + if(action->listener) {
  70 + lib3270_unregister_toggle_listener(v3270_get_session(from),action->definition->id,object);
  71 + }
69 72
70 - void Lib3270Action_class_init(Lib3270ActionClass *klass) { 73 + if(to) {
  74 + action->listener = lib3270_register_toggle_listener(v3270_get_session(from),action->definition->id,change_state,object);
  75 + pw3270_action_change_state_boolean(object,lib3270_get_toggle(v3270_get_session(to),action->definition->id));
  76 + }
71 77
72 - pw3270ActionClass * action = PW3270_TOGGLE_ACTION_CLASS(klass); 78 + PW3270_ACTION_CLASS(Lib3270ToggleAction_parent_class)->change_widget(object,from,to);
73 79
74 - action->get_enabled = action_enabled;  
75 - action->activate = action_activate; 80 + }
76 81
  82 + void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) {
77 } 83 }
78 84
79 - void Lib3270Action_init(Lib3270Action *action) { 85 + void Lib3270ToggleAction_init(Lib3270ToggleAction *action) {
  86 +
  87 + action->definition = NULL;
  88 + action->listener = NULL;
  89 +
80 } 90 }
81 91
82 - GAction * pw3270_toggle_action_new_from_lib3270(const LIB3270_TOGGLE_ENTRY * definition, GtkWidget *window) { 92 + GAction * pw3270_toggle_action_new_from_lib3270(const LIB3270_TOGGLE * definition) {
83 93
84 - Lib3270Action * action = (Lib3270Action *) g_object_new(PW3270_TYPE_LIB3270_TOGGLE_ACTION, NULL);  
85 - pw3270Action * abstract = PW3270_ACTION(action); 94 + Lib3270ToggleAction * action = (Lib3270ToggleAction *) g_object_new(PW3270_TYPE_LIB3270_TOGGLE_ACTION, NULL);
  95 + action->definition = definition;
86 96
87 - action->definition = definition;  
88 - abstract->window = window; 97 + // Setup the default name.
  98 + pw3270Action * abstract = PW3270_ACTION(action);
89 99
90 if(abstract->name) 100 if(abstract->name)
91 g_free(abstract->name); 101 g_free(abstract->name);
@@ -93,6 +103,7 @@ @@ -93,6 +103,7 @@
93 abstract->name = g_strconcat("win.",definition->name,NULL); 103 abstract->name = g_strconcat("win.",definition->name,NULL);
94 104
95 return G_ACTION(action); 105 return G_ACTION(action);
  106 +
96 } 107 }
97 108
98 109
src/actions/private.h
@@ -42,6 +42,10 @@ @@ -42,6 +42,10 @@
42 #include <gtk/gtk.h> 42 #include <gtk/gtk.h>
43 43
44 #include <pw3270/actions.h> 44 #include <pw3270/actions.h>
  45 +
  46 + #include <lib3270/actions.h>
  47 + #include <lib3270/toggle.h>
  48 +
45 #include <lib3270/log.h> 49 #include <lib3270/log.h>
46 50
47 struct _pw3270Action { 51 struct _pw3270Action {
@@ -49,7 +53,7 @@ @@ -49,7 +53,7 @@
49 53
50 GVariantType * parameter_type; 54 GVariantType * parameter_type;
51 GVariant * state; 55 GVariant * state;
52 - GtkWidget * window; 56 + GtkWidget * terminal;
53 gchar * name; 57 gchar * name;
54 58
55 }; 59 };
@@ -57,9 +61,16 @@ @@ -57,9 +61,16 @@
57 struct _pw3270ActionClass { 61 struct _pw3270ActionClass {
58 GObjectClass parent_class; 62 GObjectClass parent_class;
59 63
60 - gboolean (*get_enabled)(GAction *action, GtkWidget *window);  
61 - void (*activate)(GAction *action, GtkWidget *window); 64 + void (*change_widget)(GAction *action, GtkWidget *from, GtkWidget *to);
  65 + gboolean (*get_enabled)(GAction *action, GtkWidget *terminal);
  66 + void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal);
62 67
63 }; 68 };
64 69
  70 + G_GNUC_INTERNAL GAction * pw3270_action_new_from_lib3270(const LIB3270_ACTION * definition);
  71 + G_GNUC_INTERNAL GAction * pw3270_toggle_action_new_from_lib3270(const LIB3270_TOGGLE * definition);
  72 +
  73 + G_GNUC_INTERNAL void pw3270_action_change_state_boolean(GAction *action, gboolean state);
  74 +
  75 +
65 #endif // PRIVATE_H_INCLUDED 76 #endif // PRIVATE_H_INCLUDED
src/actions/testprogram/testprogram.c
@@ -40,9 +40,11 @@ @@ -40,9 +40,11 @@
40 return g_object_get_data(G_OBJECT(window), "v3270_terminal"); 40 return g_object_get_data(G_OBJECT(window), "v3270_terminal");
41 } 41 }
42 42
  43 + /*
43 H3270 * pw3270_window_get_session_handle(GtkWidget *window) { 44 H3270 * pw3270_window_get_session_handle(GtkWidget *window) {
44 return v3270_get_session(pw3270_window_get_terminal_widget(window)); 45 return v3270_get_session(pw3270_window_get_terminal_widget(window));
45 } 46 }
  47 + */
46 48
47 static gboolean handle_command(GtkWidget *trace, const gchar *cmd, const gchar *args, GtkWidget *window) { 49 static gboolean handle_command(GtkWidget *trace, const gchar *cmd, const gchar *args, GtkWidget *window) {
48 50
src/actions/window.c
@@ -37,11 +37,13 @@ @@ -37,11 +37,13 @@
37 37
38 void pw3270_window_add_actions(GtkWidget * appwindow) { 38 void pw3270_window_add_actions(GtkWidget * appwindow) {
39 39
40 - GActionMap *map = G_ACTION_MAP(appwindow); 40 + GActionMap * map = G_ACTION_MAP(appwindow);
  41 + GtkWidget * terminal = pw3270_window_get_terminal_widget(appwindow);
41 42
42 // g_action_map_add_action(map,pw3270_action_new_from_lib3270(lib3270_action_get_by_name("testpattern"), appwindow)); 43 // g_action_map_add_action(map,pw3270_action_new_from_lib3270(lib3270_action_get_by_name("testpattern"), appwindow));
43 44
44 - GAction *action = pw3270_action_new_from_lib3270(lib3270_action_get_by_name("testpattern"), appwindow); 45 + GAction *action = pw3270_action_new_from_lib3270(lib3270_action_get_by_name("testpattern"));
  46 + pw3270_action_set_terminal_widget(action,terminal);
45 47
46 debug("--> \"%s\"",pw3270_action_get_name(action)); 48 debug("--> \"%s\"",pw3270_action_get_name(action));
47 49
src/include/pw3270/actions.h
@@ -38,7 +38,6 @@ @@ -38,7 +38,6 @@
38 38
39 #include <gio/gio.h> 39 #include <gio/gio.h>
40 #include <lib3270.h> 40 #include <lib3270.h>
41 - #include <lib3270/actions.h>  
42 41
43 G_BEGIN_DECLS 42 G_BEGIN_DECLS
44 43
@@ -54,14 +53,14 @@ @@ -54,14 +53,14 @@
54 53
55 GType pw3270Action_get_type(void) G_GNUC_CONST; 54 GType pw3270Action_get_type(void) G_GNUC_CONST;
56 55
57 - GAction * pw3270_action_new_from_lib3270(const LIB3270_ACTION * definition, GtkWidget *window);  
58 - GAction * pw3270_toggle_action_new_from_lib3270(const LIB3270_TOGGLE_ENTRY * definition, GtkWidget *window);  
59 -  
60 const gchar * pw3270_action_get_name(GAction *action); 56 const gchar * pw3270_action_get_name(GAction *action);
61 void pw3270_action_set_name(GAction *action, const gchar *name); 57 void pw3270_action_set_name(GAction *action, const gchar *name);
62 58
63 - gboolean pw3270_action_get_enabled(GAction *action);  
64 - void pw3270_action_activate(GAction *action, GVariant *parameter); 59 + /// @brief Associate action with the terminal widget.
  60 + void pw3270_action_set_terminal_widget(GAction *action, GtkWidget *terminal);
  61 +
  62 + /// @brief Get lib3270 session handle.
  63 + H3270 * pw3270_action_get_session(GAction *action);
65 64
66 /// @brief Add lib3270 actions to an application window. 65 /// @brief Add lib3270 actions to an application window.
67 void pw3270_window_add_actions(GtkWidget * appwindow); 66 void pw3270_window_add_actions(GtkWidget * appwindow);