Commit 6bb62c53021e09c227108283bdd73f26b6b1dbf0
1 parent
8cfde575
Exists in
master
and in
4 other branches
GAction Adapter for lib3270 toggles seens ok.
Showing
4 changed files
with
63 additions
and
27 deletions
Show diff stats
src/actions/abstract.c
... | ... | @@ -128,8 +128,6 @@ |
128 | 128 | NULL, |
129 | 129 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT | |
130 | 130 | G_PARAM_STATIC_STRINGS)); |
131 | - | |
132 | - | |
133 | 131 | } |
134 | 132 | |
135 | 133 | void pw3270Action_init(pw3270Action *action) { |
... | ... | @@ -144,19 +142,27 @@ |
144 | 142 | |
145 | 143 | pw3270Action * action = PW3270_ACTION(object); |
146 | 144 | |
147 | - if(action->terminal) | |
145 | + debug("Finalizing action %p (%s)",object,action->name); | |
146 | + | |
147 | + if(action->state) { | |
148 | + g_variant_unref(action->state); | |
149 | + action->state = NULL; | |
150 | + } | |
151 | + | |
152 | + if(action->terminal) { | |
148 | 153 | pw3270_action_set_terminal_widget(G_ACTION(object),NULL); |
154 | + action->terminal = NULL; | |
155 | + } | |
149 | 156 | |
150 | 157 | if(action->name) { |
151 | - | |
152 | - debug("Finalizing action \"%s\"",action->name); | |
153 | 158 | g_free(action->name); |
154 | 159 | action->name = NULL; |
155 | - | |
156 | 160 | } |
157 | 161 | |
158 | - if(action->parameter_type) | |
162 | + if(action->parameter_type) { | |
159 | 163 | g_variant_type_free(action->parameter_type); |
164 | + action->parameter_type = NULL; | |
165 | + } | |
160 | 166 | |
161 | 167 | G_OBJECT_CLASS(pw3270Action_parent_class)->finalize(object); |
162 | 168 | |
... | ... | @@ -246,8 +252,9 @@ |
246 | 252 | |
247 | 253 | } |
248 | 254 | |
249 | - GVariant * pw3270_action_get_state_property(GAction *action) { | |
250 | - return PW3270_ACTION(action)->state; | |
255 | + GVariant * pw3270_action_get_state_property(GAction *object) { | |
256 | + pw3270Action *action = PW3270_ACTION(object); | |
257 | + return action->state ? g_variant_ref(action->state) : NULL; | |
251 | 258 | } |
252 | 259 | |
253 | 260 | const GVariantType * pw3270_action_get_parameter_type(GAction *action) { |
... | ... | @@ -259,10 +266,10 @@ |
259 | 266 | |
260 | 267 | pw3270Action * action = PW3270_ACTION(object); |
261 | 268 | |
262 | - if(action->state != NULL) | |
269 | + if(action->state) | |
263 | 270 | return g_variant_get_type(action->state); |
264 | - else | |
265 | - return NULL; | |
271 | + | |
272 | + return NULL; | |
266 | 273 | |
267 | 274 | } |
268 | 275 | |
... | ... | @@ -272,15 +279,13 @@ |
272 | 279 | } |
273 | 280 | |
274 | 281 | void pw3270_action_change_state(GAction *object, GVariant *value) { |
282 | + pw3270_action_set_state(object, value); | |
283 | + } | |
275 | 284 | |
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 | - */ | |
285 | + void pw3270_action_change_state_boolean(GAction *action, gboolean state) { | |
282 | 286 | |
283 | - pw3270_action_set_state(object, value); | |
287 | + g_return_if_fail(PW3270_IS_ACTION(action)); | |
288 | + pw3270_action_set_state(action,g_variant_new_boolean(state)); | |
284 | 289 | |
285 | 290 | } |
286 | 291 | |
... | ... | @@ -300,6 +305,7 @@ |
300 | 305 | action->state = g_variant_ref(value); |
301 | 306 | |
302 | 307 | g_object_notify(G_OBJECT(object), "state"); |
308 | + | |
303 | 309 | } |
304 | 310 | |
305 | 311 | g_variant_unref(value); |
... | ... | @@ -325,10 +331,6 @@ |
325 | 331 | |
326 | 332 | } |
327 | 333 | |
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 | 334 | gboolean pw3270_action_get_enabled(GAction *object) { |
333 | 335 | |
334 | 336 | pw3270Action * action = PW3270_ACTION(object); |
... | ... | @@ -358,7 +360,7 @@ |
358 | 360 | } |
359 | 361 | |
360 | 362 | gboolean get_enabled(GAction *object, GtkWidget *terminal) { |
361 | - debug("%s",__FUNCTION__); | |
363 | + debug("%s(%s)",__FUNCTION__,pw3270_action_get_name(object)); | |
362 | 364 | return TRUE; |
363 | 365 | } |
364 | 366 | ... | ... |
src/actions/lib3270/toggle.c
... | ... | @@ -59,6 +59,7 @@ |
59 | 59 | G_DEFINE_TYPE(Lib3270ToggleAction, Lib3270ToggleAction, PW3270_TYPE_ACTION); |
60 | 60 | |
61 | 61 | static void change_state(H3270 *hSession, LIB3270_TOGGLE_ID id, char state, void * action) { |
62 | + debug("%s: %s",__FUNCTION__,state ? "ON" : "OFF"); | |
62 | 63 | pw3270_action_change_state_boolean((GAction *) action, state == 0 ? FALSE : TRUE); |
63 | 64 | } |
64 | 65 | |
... | ... | @@ -71,7 +72,7 @@ |
71 | 72 | } |
72 | 73 | |
73 | 74 | if(to) { |
74 | - action->listener = lib3270_register_toggle_listener(v3270_get_session(from),action->definition->id,change_state,object); | |
75 | + action->listener = lib3270_register_toggle_listener(v3270_get_session(to),action->definition->id,change_state,object); | |
75 | 76 | pw3270_action_change_state_boolean(object,lib3270_get_toggle(v3270_get_session(to),action->definition->id)); |
76 | 77 | } |
77 | 78 | |
... | ... | @@ -80,7 +81,21 @@ |
80 | 81 | } |
81 | 82 | |
82 | 83 | static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { |
83 | - lib3270_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id); | |
84 | + | |
85 | + debug("Activating \"%s\"",pw3270_action_get_name(action)); | |
86 | + | |
87 | + if(parameter && g_variant_is_of_type(parameter,G_VARIANT_TYPE_BOOLEAN)) { | |
88 | + | |
89 | + lib3270_set_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id,g_variant_get_boolean(parameter)); | |
90 | + debug("Toggle set to %s",lib3270_get_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id) ? "ON" : "OFF"); | |
91 | + | |
92 | + } else { | |
93 | + | |
94 | + lib3270_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id); | |
95 | + debug("Toggle is %s",lib3270_get_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id) ? "ON" : "OFF"); | |
96 | + | |
97 | + } | |
98 | + | |
84 | 99 | } |
85 | 100 | |
86 | 101 | void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) { | ... | ... |
src/actions/testprogram/testprogram.c
... | ... | @@ -32,7 +32,9 @@ |
32 | 32 | #include <v3270.h> |
33 | 33 | #include <v3270/trace.h> |
34 | 34 | #include <lib3270/log.h> |
35 | + #include <lib3270/toggle.h> | |
35 | 36 | #include <pw3270/actions.h> |
37 | + #include "../private.h" | |
36 | 38 | |
37 | 39 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
38 | 40 | ... | ... |
src/actions/window.c
... | ... | @@ -53,10 +53,19 @@ |
53 | 53 | debug("--> \"%s\"",pw3270_action_get_name(action)); |
54 | 54 | */ |
55 | 55 | |
56 | + /* | |
57 | + GAction *action = pw3270_toggle_action_new_from_lib3270(lib3270_get_toggles() + LIB3270_TOGGLE_INSERT); | |
58 | + pw3270_action_set_terminal_widget(action,terminal); | |
59 | + | |
60 | + debug("--> \"%s\"",pw3270_action_get_name(action)); | |
61 | + | |
62 | + g_action_map_add_action(map,action); | |
63 | + | |
64 | + debug("--> \"%s\"",pw3270_action_get_name(action)); | |
65 | + */ | |
56 | 66 | |
57 | 67 | // Map lib3270 actions |
58 | 68 | const LIB3270_ACTION * actions = lib3270_get_actions(); |
59 | - | |
60 | 69 | for(ix = 0; actions[ix].name; ix++) { |
61 | 70 | |
62 | 71 | GAction *action = pw3270_action_new_from_lib3270(&actions[ix]); |
... | ... | @@ -66,6 +75,14 @@ |
66 | 75 | } |
67 | 76 | |
68 | 77 | // Map toggles |
78 | + const LIB3270_TOGGLE * toggles = lib3270_get_toggles(); | |
79 | + for(ix = 0; toggles[ix].name; ix++) { | |
80 | + | |
81 | + GAction *action = pw3270_toggle_action_new_from_lib3270(&toggles[ix]); | |
82 | + pw3270_action_set_terminal_widget(action,terminal); | |
83 | + g_action_map_add_action(map,action); | |
84 | + | |
85 | + } | |
69 | 86 | |
70 | 87 | debug("%s ends",__FUNCTION__); |
71 | 88 | } | ... | ... |