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,8 +128,6 @@ | ||
| 128 | NULL, | 128 | NULL, |
| 129 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT | | 129 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT | |
| 130 | G_PARAM_STATIC_STRINGS)); | 130 | G_PARAM_STATIC_STRINGS)); |
| 131 | - | ||
| 132 | - | ||
| 133 | } | 131 | } |
| 134 | 132 | ||
| 135 | void pw3270Action_init(pw3270Action *action) { | 133 | void pw3270Action_init(pw3270Action *action) { |
| @@ -144,19 +142,27 @@ | @@ -144,19 +142,27 @@ | ||
| 144 | 142 | ||
| 145 | pw3270Action * action = PW3270_ACTION(object); | 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 | pw3270_action_set_terminal_widget(G_ACTION(object),NULL); | 153 | pw3270_action_set_terminal_widget(G_ACTION(object),NULL); |
| 154 | + action->terminal = NULL; | ||
| 155 | + } | ||
| 149 | 156 | ||
| 150 | if(action->name) { | 157 | if(action->name) { |
| 151 | - | ||
| 152 | - debug("Finalizing action \"%s\"",action->name); | ||
| 153 | g_free(action->name); | 158 | g_free(action->name); |
| 154 | action->name = NULL; | 159 | action->name = NULL; |
| 155 | - | ||
| 156 | } | 160 | } |
| 157 | 161 | ||
| 158 | - if(action->parameter_type) | 162 | + if(action->parameter_type) { |
| 159 | g_variant_type_free(action->parameter_type); | 163 | g_variant_type_free(action->parameter_type); |
| 164 | + action->parameter_type = NULL; | ||
| 165 | + } | ||
| 160 | 166 | ||
| 161 | G_OBJECT_CLASS(pw3270Action_parent_class)->finalize(object); | 167 | G_OBJECT_CLASS(pw3270Action_parent_class)->finalize(object); |
| 162 | 168 | ||
| @@ -246,8 +252,9 @@ | @@ -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 | const GVariantType * pw3270_action_get_parameter_type(GAction *action) { | 260 | const GVariantType * pw3270_action_get_parameter_type(GAction *action) { |
| @@ -259,10 +266,10 @@ | @@ -259,10 +266,10 @@ | ||
| 259 | 266 | ||
| 260 | pw3270Action * action = PW3270_ACTION(object); | 267 | pw3270Action * action = PW3270_ACTION(object); |
| 261 | 268 | ||
| 262 | - if(action->state != NULL) | 269 | + if(action->state) |
| 263 | return g_variant_get_type(action->state); | 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,15 +279,13 @@ | ||
| 272 | } | 279 | } |
| 273 | 280 | ||
| 274 | void pw3270_action_change_state(GAction *object, GVariant *value) { | 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,6 +305,7 @@ | ||
| 300 | action->state = g_variant_ref(value); | 305 | action->state = g_variant_ref(value); |
| 301 | 306 | ||
| 302 | g_object_notify(G_OBJECT(object), "state"); | 307 | g_object_notify(G_OBJECT(object), "state"); |
| 308 | + | ||
| 303 | } | 309 | } |
| 304 | 310 | ||
| 305 | g_variant_unref(value); | 311 | g_variant_unref(value); |
| @@ -325,10 +331,6 @@ | @@ -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 | gboolean pw3270_action_get_enabled(GAction *object) { | 334 | gboolean pw3270_action_get_enabled(GAction *object) { |
| 333 | 335 | ||
| 334 | pw3270Action * action = PW3270_ACTION(object); | 336 | pw3270Action * action = PW3270_ACTION(object); |
| @@ -358,7 +360,7 @@ | @@ -358,7 +360,7 @@ | ||
| 358 | } | 360 | } |
| 359 | 361 | ||
| 360 | gboolean get_enabled(GAction *object, GtkWidget *terminal) { | 362 | gboolean get_enabled(GAction *object, GtkWidget *terminal) { |
| 361 | - debug("%s",__FUNCTION__); | 363 | + debug("%s(%s)",__FUNCTION__,pw3270_action_get_name(object)); |
| 362 | return TRUE; | 364 | return TRUE; |
| 363 | } | 365 | } |
| 364 | 366 |
src/actions/lib3270/toggle.c
| @@ -59,6 +59,7 @@ | @@ -59,6 +59,7 @@ | ||
| 59 | G_DEFINE_TYPE(Lib3270ToggleAction, Lib3270ToggleAction, PW3270_TYPE_ACTION); | 59 | G_DEFINE_TYPE(Lib3270ToggleAction, Lib3270ToggleAction, PW3270_TYPE_ACTION); |
| 60 | 60 | ||
| 61 | static void change_state(H3270 *hSession, LIB3270_TOGGLE_ID id, char state, void * action) { | 61 | static void change_state(H3270 *hSession, LIB3270_TOGGLE_ID id, char state, void * action) { |
| 62 | + debug("%s: %s",__FUNCTION__,state ? "ON" : "OFF"); | ||
| 62 | pw3270_action_change_state_boolean((GAction *) action, state == 0 ? FALSE : TRUE); | 63 | pw3270_action_change_state_boolean((GAction *) action, state == 0 ? FALSE : TRUE); |
| 63 | } | 64 | } |
| 64 | 65 | ||
| @@ -71,7 +72,7 @@ | @@ -71,7 +72,7 @@ | ||
| 71 | } | 72 | } |
| 72 | 73 | ||
| 73 | if(to) { | 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 | pw3270_action_change_state_boolean(object,lib3270_get_toggle(v3270_get_session(to),action->definition->id)); | 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,7 +81,21 @@ | ||
| 80 | } | 81 | } |
| 81 | 82 | ||
| 82 | static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { | 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 | void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) { | 101 | void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) { |
src/actions/testprogram/testprogram.c
| @@ -32,7 +32,9 @@ | @@ -32,7 +32,9 @@ | ||
| 32 | #include <v3270.h> | 32 | #include <v3270.h> |
| 33 | #include <v3270/trace.h> | 33 | #include <v3270/trace.h> |
| 34 | #include <lib3270/log.h> | 34 | #include <lib3270/log.h> |
| 35 | + #include <lib3270/toggle.h> | ||
| 35 | #include <pw3270/actions.h> | 36 | #include <pw3270/actions.h> |
| 37 | + #include "../private.h" | ||
| 36 | 38 | ||
| 37 | /*---[ Implement ]----------------------------------------------------------------------------------*/ | 39 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
| 38 | 40 |
src/actions/window.c
| @@ -53,10 +53,19 @@ | @@ -53,10 +53,19 @@ | ||
| 53 | debug("--> \"%s\"",pw3270_action_get_name(action)); | 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 | // Map lib3270 actions | 67 | // Map lib3270 actions |
| 58 | const LIB3270_ACTION * actions = lib3270_get_actions(); | 68 | const LIB3270_ACTION * actions = lib3270_get_actions(); |
| 59 | - | ||
| 60 | for(ix = 0; actions[ix].name; ix++) { | 69 | for(ix = 0; actions[ix].name; ix++) { |
| 61 | 70 | ||
| 62 | GAction *action = pw3270_action_new_from_lib3270(&actions[ix]); | 71 | GAction *action = pw3270_action_new_from_lib3270(&actions[ix]); |
| @@ -66,6 +75,14 @@ | @@ -66,6 +75,14 @@ | ||
| 66 | } | 75 | } |
| 67 | 76 | ||
| 68 | // Map toggles | 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 | debug("%s ends",__FUNCTION__); | 87 | debug("%s ends",__FUNCTION__); |
| 71 | } | 88 | } |