From 6bb62c53021e09c227108283bdd73f26b6b1dbf0 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Mon, 14 Oct 2019 16:13:13 -0300 Subject: [PATCH] GAction Adapter for lib3270 toggles seens ok. --- src/actions/abstract.c | 50 ++++++++++++++++++++++++++------------------------ src/actions/lib3270/toggle.c | 19 +++++++++++++++++-- src/actions/testprogram/testprogram.c | 2 ++ src/actions/window.c | 19 ++++++++++++++++++- 4 files changed, 63 insertions(+), 27 deletions(-) diff --git a/src/actions/abstract.c b/src/actions/abstract.c index 00cd113..eeaf314 100644 --- a/src/actions/abstract.c +++ b/src/actions/abstract.c @@ -128,8 +128,6 @@ NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); - - } void pw3270Action_init(pw3270Action *action) { @@ -144,19 +142,27 @@ pw3270Action * action = PW3270_ACTION(object); - if(action->terminal) + debug("Finalizing action %p (%s)",object,action->name); + + if(action->state) { + g_variant_unref(action->state); + action->state = NULL; + } + + if(action->terminal) { pw3270_action_set_terminal_widget(G_ACTION(object),NULL); + action->terminal = NULL; + } if(action->name) { - - debug("Finalizing action \"%s\"",action->name); g_free(action->name); action->name = NULL; - } - if(action->parameter_type) + if(action->parameter_type) { g_variant_type_free(action->parameter_type); + action->parameter_type = NULL; + } G_OBJECT_CLASS(pw3270Action_parent_class)->finalize(object); @@ -246,8 +252,9 @@ } - GVariant * pw3270_action_get_state_property(GAction *action) { - return PW3270_ACTION(action)->state; + GVariant * pw3270_action_get_state_property(GAction *object) { + pw3270Action *action = PW3270_ACTION(object); + return action->state ? g_variant_ref(action->state) : NULL; } const GVariantType * pw3270_action_get_parameter_type(GAction *action) { @@ -259,10 +266,10 @@ pw3270Action * action = PW3270_ACTION(object); - if(action->state != NULL) + if(action->state) return g_variant_get_type(action->state); - else - return NULL; + + return NULL; } @@ -272,15 +279,13 @@ } void pw3270_action_change_state(GAction *object, GVariant *value) { + pw3270_action_set_state(object, value); + } - /* - pw3270Action * action = PW3270_ACTION(object); - - if (g_signal_has_handler_pending(object, pw3270_action_signals[SIGNAL_CHANGE_STATE], 0, TRUE)) - g_signal_emit(action, pw3270_action_signals[SIGNAL_CHANGE_STATE], 0, value); - */ + void pw3270_action_change_state_boolean(GAction *action, gboolean state) { - pw3270_action_set_state(object, value); + g_return_if_fail(PW3270_IS_ACTION(action)); + pw3270_action_set_state(action,g_variant_new_boolean(state)); } @@ -300,6 +305,7 @@ action->state = g_variant_ref(value); g_object_notify(G_OBJECT(object), "state"); + } g_variant_unref(value); @@ -325,10 +331,6 @@ } - void pw3270_action_change_state_boolean(GAction *action, gboolean state) { - pw3270_action_change_state(action,g_variant_new_boolean(state)); - } - gboolean pw3270_action_get_enabled(GAction *object) { pw3270Action * action = PW3270_ACTION(object); @@ -358,7 +360,7 @@ } gboolean get_enabled(GAction *object, GtkWidget *terminal) { - debug("%s",__FUNCTION__); + debug("%s(%s)",__FUNCTION__,pw3270_action_get_name(object)); return TRUE; } diff --git a/src/actions/lib3270/toggle.c b/src/actions/lib3270/toggle.c index 1d99472..870dc0b 100644 --- a/src/actions/lib3270/toggle.c +++ b/src/actions/lib3270/toggle.c @@ -59,6 +59,7 @@ G_DEFINE_TYPE(Lib3270ToggleAction, Lib3270ToggleAction, PW3270_TYPE_ACTION); static void change_state(H3270 *hSession, LIB3270_TOGGLE_ID id, char state, void * action) { + debug("%s: %s",__FUNCTION__,state ? "ON" : "OFF"); pw3270_action_change_state_boolean((GAction *) action, state == 0 ? FALSE : TRUE); } @@ -71,7 +72,7 @@ } if(to) { - action->listener = lib3270_register_toggle_listener(v3270_get_session(from),action->definition->id,change_state,object); + action->listener = lib3270_register_toggle_listener(v3270_get_session(to),action->definition->id,change_state,object); pw3270_action_change_state_boolean(object,lib3270_get_toggle(v3270_get_session(to),action->definition->id)); } @@ -80,7 +81,21 @@ } static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { - lib3270_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id); + + debug("Activating \"%s\"",pw3270_action_get_name(action)); + + if(parameter && g_variant_is_of_type(parameter,G_VARIANT_TYPE_BOOLEAN)) { + + lib3270_set_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id,g_variant_get_boolean(parameter)); + debug("Toggle set to %s",lib3270_get_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id) ? "ON" : "OFF"); + + } else { + + lib3270_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id); + debug("Toggle is %s",lib3270_get_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id) ? "ON" : "OFF"); + + } + } void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) { diff --git a/src/actions/testprogram/testprogram.c b/src/actions/testprogram/testprogram.c index c4e84a1..5e2e002 100644 --- a/src/actions/testprogram/testprogram.c +++ b/src/actions/testprogram/testprogram.c @@ -32,7 +32,9 @@ #include #include #include + #include #include + #include "../private.h" /*---[ Implement ]----------------------------------------------------------------------------------*/ diff --git a/src/actions/window.c b/src/actions/window.c index 7cf9ce1..703e57c 100644 --- a/src/actions/window.c +++ b/src/actions/window.c @@ -53,10 +53,19 @@ debug("--> \"%s\"",pw3270_action_get_name(action)); */ + /* + GAction *action = pw3270_toggle_action_new_from_lib3270(lib3270_get_toggles() + LIB3270_TOGGLE_INSERT); + pw3270_action_set_terminal_widget(action,terminal); + + debug("--> \"%s\"",pw3270_action_get_name(action)); + + g_action_map_add_action(map,action); + + debug("--> \"%s\"",pw3270_action_get_name(action)); + */ // Map lib3270 actions const LIB3270_ACTION * actions = lib3270_get_actions(); - for(ix = 0; actions[ix].name; ix++) { GAction *action = pw3270_action_new_from_lib3270(&actions[ix]); @@ -66,6 +75,14 @@ } // Map toggles + const LIB3270_TOGGLE * toggles = lib3270_get_toggles(); + for(ix = 0; toggles[ix].name; ix++) { + + GAction *action = pw3270_toggle_action_new_from_lib3270(&toggles[ix]); + pw3270_action_set_terminal_widget(action,terminal); + g_action_map_add_action(map,action); + + } debug("%s ends",__FUNCTION__); } -- libgit2 0.21.2