diff --git a/Makefile.in b/Makefile.in index d870f95..44f1868 100644 --- a/Makefile.in +++ b/Makefile.in @@ -88,6 +88,7 @@ BINRLS=$(BINDIR)/Release DEPENDS= \ Makefile \ src/include/*.h \ + src/include/pw3270/*.h \ src/objects/toolbar/private.h \ src/objects/window/private.h \ src/objects/actions/private.h \ diff --git a/src/include/pw3270/actions.h b/src/include/pw3270/actions.h index 27c9b44..be8b593 100644 --- a/src/include/pw3270/actions.h +++ b/src/include/pw3270/actions.h @@ -56,14 +56,21 @@ GObject parent; - const gchar * name; /// @brief Action name (const string). - GVariantType * parameter_type; /// @brief Parameter type. - GVariant * state; /// @brief Action state. - GtkWidget * terminal; /// @brief The active terminal widget. + const gchar * name; ///> @brief Action name (const string). + GtkWidget * terminal; ///> @brief The active terminal widget. + + struct { + const GVariantType * state; ///> @brief State type type. + const GVariantType * parameter; ///> @brief Parameter type. + } types; /// @brief Activation method. void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); + /// @brief Get State method. + GVariant * (*get_state_property)(GAction *action, GtkWidget *terminal); + + } pw3270Action; typedef struct _pw3270ActionClass { @@ -77,7 +84,7 @@ void (*change_widget)(GAction *action, GtkWidget *from, GtkWidget *to); gboolean (*get_enabled)(GAction *action, GtkWidget *terminal); - const GVariantType * (*get_parameter_type)(GAction *action); + const gchar * (*get_icon_name)(GAction *action); const gchar * (*get_label)(GAction *action); const gchar * (*get_tooltip)(GAction *action); diff --git a/src/objects/actions/abstract.c b/src/objects/actions/abstract.c index 800b3b2..e02c372 100644 --- a/src/objects/actions/abstract.c +++ b/src/objects/actions/abstract.c @@ -46,9 +46,12 @@ static void finalize(GObject *object); - static const GVariantType * pw3270_action_get_state_type(GAction *action); - static GVariant * pw3270_action_get_state_property(GAction *action); - static const GVariantType * pw3270_action_get_parameter_type(GAction *action); + static const GVariantType * get_state_type(GAction *action); + static GVariant * get_state_property(GAction *action); + + static GVariant * internal_get_state_property(GAction *action, GtkWidget *terminal); + + static const GVariantType * get_parameter_type(GAction *action); static GVariant * pw3270_action_get_state_hint(GAction *action); static void pw3270_action_change_state(GAction *action, GVariant *value); @@ -72,20 +75,15 @@ void pw3270_action_iface_init(GActionInterface *iface) { iface->get_name = pw3270_action_get_name; - iface->get_parameter_type = pw3270_action_get_parameter_type; - iface->get_state_type = pw3270_action_get_state_type; + iface->get_parameter_type = get_parameter_type; + iface->get_state_type = get_state_type; iface->get_state_hint = pw3270_action_get_state_hint; iface->get_enabled = pw3270_action_get_enabled; - iface->get_state = pw3270_action_get_state_property; + iface->get_state = get_state_property; iface->change_state = pw3270_action_change_state; iface->activate = pw3270_action_activate; } - static const GVariantType * get_parameter_type(GAction G_GNUC_UNUSED(*action)) - { - return NULL; - } - void pw3270Action_class_init(pw3270ActionClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); @@ -94,7 +92,6 @@ klass->change_widget = change_widget; klass->get_enabled = get_enabled; - klass->get_parameter_type = get_parameter_type; klass->get_icon_name = get_null; klass->get_label = get_null; klass->get_tooltip = get_null; @@ -171,9 +168,11 @@ void pw3270Action_init(pw3270Action *action) { - action->terminal = NULL; - action->state = NULL; - action->activate = activate; + action->terminal = NULL; + action->types.parameter = NULL; + + action->activate = activate; + action->get_state_property = internal_get_state_property; } @@ -181,30 +180,11 @@ pw3270Action * action = PW3270_ACTION(object); -// 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) { - g_free(action->name); - action->name = NULL; - } - */ - - if(action->parameter_type) { - g_variant_type_free(action->parameter_type); - action->parameter_type = NULL; - } - G_OBJECT_CLASS(pw3270Action_parent_class)->finalize(object); } @@ -221,7 +201,7 @@ break; case PROP_PARAMETER_TYPE: - g_value_set_boxed(value, pw3270_action_get_parameter_type(action)); + g_value_set_boxed(value, get_parameter_type(action)); break; case PROP_ENABLED: @@ -229,11 +209,11 @@ break; case PROP_STATE_TYPE: - g_value_set_boxed(value, pw3270_action_get_state_type(action)); + g_value_set_boxed(value, get_state_type(action)); break; case PROP_STATE: - g_value_take_variant(value, pw3270_action_get_state_property(action)); + g_value_take_variant(value, get_state_property(action)); break; default: @@ -283,24 +263,38 @@ } - GVariant * pw3270_action_get_state_property(GAction *object) { - pw3270Action *action = PW3270_ACTION(object); - return action->state ? g_variant_ref(action->state) : NULL; - } + GVariant * internal_get_state_property(GAction *object, GtkWidget G_GNUC_UNUSED(*terminal)) { + + pw3270Action * action = PW3270_ACTION(object); + + if(action->types.state == G_VARIANT_TYPE_BOOLEAN) + return g_variant_new_boolean(TRUE); - const GVariantType * pw3270_action_get_parameter_type(GAction *action) { - return PW3270_ACTION_GET_CLASS(action)->get_parameter_type(action); + return NULL; } - const GVariantType * pw3270_action_get_state_type(GAction *object) { + GVariant * get_state_property(GAction *object) { - pw3270Action * action = PW3270_ACTION(object); + pw3270Action * action = PW3270_ACTION(object); + GVariant * state; - if(action->state) - return g_variant_get_type(action->state); + if(action->terminal) + state = action->get_state_property(object,action->terminal); + else + state = internal_get_state_property(object,NULL); - return NULL; + if(state) + g_variant_ref(state); + + return state; + } + const GVariantType * get_parameter_type(GAction *action) { + return PW3270_ACTION(action)->types.parameter; + } + + const GVariantType * get_state_type(GAction *object) { + return PW3270_ACTION(object)->types.state; } GVariant * pw3270_action_get_state_hint(GAction G_GNUC_UNUSED(*action)) { @@ -320,6 +314,7 @@ void pw3270_action_set_state(GAction *object, GVariant *value) { + /* if(value) { pw3270Action * action = PW3270_ACTION(object); @@ -344,6 +339,7 @@ g_variant_unref(value); } + */ } diff --git a/src/objects/actions/lib3270/pakey.c b/src/objects/actions/lib3270/pakey.c index 6e53b06..76c17b0 100644 --- a/src/objects/actions/lib3270/pakey.c +++ b/src/objects/actions/lib3270/pakey.c @@ -94,18 +94,10 @@ } - static const GVariantType * get_parameter_type(GAction G_GNUC_UNUSED(*action)) - { - return G_VARIANT_TYPE_UINT16; - } - void Lib3270PaAction_class_init(Lib3270PaActionClass *klass) { - pw3270ActionClass * action = PW3270_ACTION_CLASS(klass); - - action->get_enabled = get_enabled; - action->change_widget = change_widget; - action->get_parameter_type = get_parameter_type; + klass->parent_class.get_enabled = get_enabled; + klass->parent_class.change_widget = change_widget; } diff --git a/src/objects/actions/lib3270/pfkey.c b/src/objects/actions/lib3270/pfkey.c index 074f8bb..899d500 100644 --- a/src/objects/actions/lib3270/pfkey.c +++ b/src/objects/actions/lib3270/pfkey.c @@ -94,17 +94,20 @@ } - static const GVariantType * get_parameter_type(GAction G_GNUC_UNUSED(*action)) { - return G_VARIANT_TYPE_UINT16; - } - void Lib3270PfAction_class_init(Lib3270PfActionClass *klass) { + klass->parent_class.get_enabled = get_enabled; + klass->parent_class.change_widget = change_widget; + + /* pw3270ActionClass * action = PW3270_ACTION_CLASS(klass); action->get_enabled = get_enabled; action->change_widget = change_widget; + + action-> action->get_parameter_type = get_parameter_type; +*/ } diff --git a/src/objects/actions/lib3270/toggle.c b/src/objects/actions/lib3270/toggle.c index 8fbf444..0253611 100644 --- a/src/objects/actions/lib3270/toggle.c +++ b/src/objects/actions/lib3270/toggle.c @@ -104,8 +104,18 @@ void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) { - pw3270ActionClass * action = PW3270_ACTION_CLASS(klass); - action->change_widget = change_widget; + klass->parent_class.change_widget = change_widget; + + } + + static GVariant * get_state_property(GAction *action, GtkWidget *terminal) { + + return g_variant_new_boolean( + lib3270_get_toggle( + v3270_get_session(terminal), + PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id + ) + ); } @@ -114,8 +124,12 @@ action->definition = NULL; action->listener = NULL; - action->parent.activate = activate; - action->parent.name = "toggle"; + action->parent.name = "toggle"; + + action->parent.get_state_property = get_state_property; + action->parent.activate = activate; + + action->parent.types.state = G_VARIANT_TYPE_BOOLEAN; } diff --git a/src/objects/application/actions/window.c b/src/objects/application/actions/window.c index 65ff5c4..9c20275 100644 --- a/src/objects/application/actions/window.c +++ b/src/objects/application/actions/window.c @@ -35,7 +35,7 @@ #include - void pw3270_application_quit_activated(GSimpleAction * action, GVariant *parameter, gpointer application) { + void pw3270_application_quit_activated(GSimpleAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), gpointer G_GNUC_UNUSED(application)) { g_print("Exiting application\n"); diff --git a/ui/application.xml b/ui/application.xml index a6e2baf..0dc1bcc 100644 --- a/ui/application.xml +++ b/ui/application.xml @@ -148,6 +148,7 @@ +
@@ -204,6 +205,12 @@ + + + _View + + + _Network -- libgit2 0.21.2