From ee3269dbb8cc080dc2a6cd54138c4fd3df3447e7 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Fri, 14 Feb 2020 14:26:01 -0300 Subject: [PATCH] Refactoring actions to fix problem with the screen-size action behavior. --- src/include/v3270/actions.h | 31 +++++++++++++++++-------------- src/terminal/actions/action.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------- src/terminal/actions/dialog.c | 4 ++-- src/terminal/actions/lib3270.c | 51 +++++++++++++++++++++++++++++++++------------------ src/terminal/actions/pakey.c | 20 +++++++++++++------- src/terminal/actions/pfkey.c | 21 ++++++++++++++------- src/terminal/actions/private.h | 23 +++++++++++++++++++++++ src/terminal/actions/property.c | 14 ++++++++------ src/terminal/actions/simple.c | 25 +++++++++++++++---------- src/terminal/actions/table.c | 4 ++++ src/terminal/actions/toggle.c | 28 ++++++++++++++++------------ 11 files changed, 197 insertions(+), 138 deletions(-) diff --git a/src/include/v3270/actions.h b/src/include/v3270/actions.h index 7439ab3..ca65b04 100644 --- a/src/include/v3270/actions.h +++ b/src/include/v3270/actions.h @@ -32,6 +32,7 @@ #define V3270_ACTIONS_H_INCLUDED 1 #include + #include #include #include @@ -119,14 +120,10 @@ GObject parent; GtkWidget * terminal; ///> @brief The active terminal widget. - const LIB3270_PROPERTY * info; ///> @brief Action info. const void * listener; ///> @brief Signal listener for the action group. const gchar * translation_domain; ///> @brief The translation domain for the action. - /// @brief Activation method. - void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); - } V3270Action; typedef struct _V3270ActionClass { @@ -138,21 +135,24 @@ GParamSpec * enabled; } properties; - void (*change_widget)(GAction *action, GtkWidget *from, GtkWidget *to); + void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); - const gchar * (*translate)(GAction *action, const gchar *text); + void (*change_widget)(GAction *action, GtkWidget *from, GtkWidget *to); - const GVariantType * (*get_state_type)(GAction *object); - GVariant * (*get_state)(GAction *action, GtkWidget *terminal); + const gchar * (*translate)(GAction *action, const gchar *text); - const GVariantType * (*get_parameter_type)(GAction *object); + const GVariantType * (*get_state_type)(GAction *object); + GVariant * (*get_state)(GAction *action, GtkWidget *terminal); - gboolean (*get_enabled)(GAction *action, GtkWidget *terminal); + const GVariantType * (*get_parameter_type)(GAction *object); - const gchar * (*get_name)(GAction *action); - const gchar * (*get_icon_name)(GAction *action); - const gchar * (*get_label)(GAction *action); - const gchar * (*get_tooltip)(GAction *action); + gboolean (*get_enabled)(GAction *action, GtkWidget *terminal); + + const gchar * (*get_name)(GAction *action); + const gchar * (*get_icon_name)(GAction *action); + const gchar * (*get_label)(GAction *action); + const gchar * (*get_tooltip)(GAction *action); + LIB3270_ACTION_GROUP (*get_action_group)(GAction *action); } V3270ActionClass; @@ -162,6 +162,8 @@ LIB3270_EXPORT void v3270_action_set_terminal_widget(GAction *object, GtkWidget *widget); LIB3270_EXPORT GtkWidget * v3270_action_get_terminal_widget(GAction *object); + LIB3270_EXPORT LIB3270_ACTION_GROUP v3270_action_get_group(GAction *action); + LIB3270_EXPORT void v3270_action_notify_state(GAction *action); LIB3270_EXPORT void v3270_action_notify_enabled(GAction *action); @@ -213,6 +215,7 @@ /// @brief Activation method. void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); + } V3270SimpleAction; typedef struct _V3270SimpleActionClass { diff --git a/src/terminal/actions/action.c b/src/terminal/actions/action.c index 5823355..b7d0b45 100644 --- a/src/terminal/actions/action.c +++ b/src/terminal/actions/action.c @@ -34,8 +34,6 @@ #include #include - #define V3270_ACTION_GET_DESCRIPTOR(obj) ((V3270Action *) obj)->info - static void V3270_action_iface_init(GActionInterface *iface); static void V3270Action_class_init(V3270ActionClass *klass); static void V3270Action_init(V3270Action *action); @@ -43,12 +41,10 @@ static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); - static const gchar * get_icon_name(GAction *action); - static const gchar * get_label(GAction *action); - static const gchar * get_tooltip(GAction *action); - static const gchar * get_name(GAction *action); + static const gchar * get_null(GAction *action); static const GVariantType * get_state_type(GAction *action); static const GVariantType * get_parameter_type(GAction *object); + static LIB3270_ACTION_GROUP get_action_group(GAction *action); static void change_widget(GAction *action, GtkWidget *from, GtkWidget *to); static void finalize(GObject *object); @@ -88,15 +84,18 @@ debug("%s",__FUNCTION__); + klass->get_name = get_null; + klass->get_icon_name = get_null; + klass->get_label = get_null; + klass->get_tooltip = get_null; + klass->get_action_group = get_action_group; + klass->change_widget = change_widget; klass->get_enabled = get_enabled; klass->get_state = get_state; - klass->get_name = get_name; klass->translate = translate; + klass->activate = activate; - klass->get_icon_name = get_icon_name; - klass->get_label = get_label; - klass->get_tooltip = get_tooltip; klass->get_state_type = get_state_type; klass->get_parameter_type = get_parameter_type; @@ -180,13 +179,7 @@ void V3270Action_init(V3270Action *action) { - static const LIB3270_PROPERTY default_info = { - .name = NULL - }; - - action->terminal = NULL; - action->info = &default_info; - action->activate = activate; + action->terminal = NULL; } @@ -280,17 +273,18 @@ if(from != to) { - V3270Action *action = V3270_ACTION(object); + V3270Action *action = V3270_ACTION(object); + LIB3270_ACTION_GROUP group = v3270_action_get_group(object); if(action->listener) { - lib3270_unregister_action_group_listener(v3270_action_get_session(object),action->info->group,action->listener); + lib3270_unregister_action_group_listener(v3270_action_get_session(object),group,action->listener); action->listener = NULL; } action->terminal = to; - if(action->info->group != LIB3270_ACTION_GROUP_NONE && to) { - action->listener = lib3270_register_action_group_listener(v3270_action_get_session(object),action->info->group,event_listener,object); + if(group != LIB3270_ACTION_GROUP_NONE && to) { + action->listener = lib3270_register_action_group_listener(v3270_action_get_session(object),group,event_listener,object); } g_idle_add((GSourceFunc) bg_notify_enabled, G_OBJECT(action)); @@ -323,18 +317,29 @@ return V3270_ACTION(object)->terminal; } - gboolean get_enabled(GAction G_GNUC_UNUSED(*object), GtkWidget *terminal) { - return terminal != NULL; + gboolean get_enabled(GAction *object, GtkWidget *terminal) { + + if(terminal == NULL) + return FALSE; + + LIB3270_ACTION_GROUP group = v3270_action_get_group(object); + + debug("**************** %s(%d %d)",g_action_get_name(object),(int) group, (int) LIB3270_ACTION_GROUP_NONE); + + if(group != LIB3270_ACTION_GROUP_NONE) { + + debug("**************** %s",g_action_get_name(object)); + + return FALSE; + } + + return TRUE; } void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) { g_message("Action %s can't be activated",g_action_get_name(action)); } - const gchar * v3270_action_translate(GAction *action, const gchar *text) { - return V3270_ACTION_GET_CLASS(action)->translate(action,text); - } - // // Action methods. // @@ -447,9 +452,11 @@ if(action && action->terminal) { - if(action->info->group != LIB3270_ACTION_GROUP_NONE) { + LIB3270_ACTION_GROUP group = v3270_action_get_group(object); - if(!lib3270_action_group_get_activatable(v3270_get_session(action->terminal),action->info->group)) + if(group != LIB3270_ACTION_GROUP_NONE) { + + if(!lib3270_action_group_get_activatable(v3270_get_session(action->terminal),group)) return FALSE; } @@ -466,42 +473,33 @@ V3270Action * action = V3270_ACTION(object); if(action && action->terminal) { - action->activate(object,parameter,action->terminal); + V3270_ACTION_GET_CLASS(object)->activate(object,parameter,action->terminal); } } - const gchar * get_icon_name(GAction *action) { - return V3270_ACTION_GET_DESCRIPTOR(action)->icon; + LIB3270_ACTION_GROUP get_action_group(GAction G_GNUC_UNUSED(*action)) { + return LIB3270_ACTION_GROUP_NONE; } - const gchar * get_label(GAction *action) { - const gchar * label = V3270_ACTION_GET_DESCRIPTOR(action)->label; - - debug("%s(%s): [%s] [%s]",__FUNCTION__,g_action_get_name(action),label,v3270_action_translate(action,label)); - - if(label && *label) - return v3270_action_translate(action,label); - + const gchar * get_null(GAction G_GNUC_UNUSED(*action)) { return NULL; } - const gchar * get_tooltip(GAction *action) { - - const gchar * tooltip = V3270_ACTION_GET_DESCRIPTOR(action)->description; - - if(!tooltip) - tooltip = V3270_ACTION_GET_DESCRIPTOR(action)->summary; - - if(tooltip) - return v3270_action_translate(action,tooltip); + const GVariantType * get_state_type(GAction G_GNUC_UNUSED(*object)) { + return NULL; + } - return NULL; + const GVariantType * get_parameter_type(GAction G_GNUC_UNUSED(*object)) { + return NULL; + } + const gchar * v3270_action_translate(GAction *action, const gchar *text) { + return V3270_ACTION_GET_CLASS(action)->translate(action,text); } - const gchar * get_name(GAction *action) { - return V3270_ACTION_GET_DESCRIPTOR(action)->name; + LIB3270_ACTION_GROUP v3270_action_get_group(GAction *action) { + return V3270_ACTION_GET_CLASS(action)->get_action_group(action); } const gchar * v3270_action_get_icon_name(GAction *action) { @@ -509,17 +507,9 @@ } const gchar * v3270_action_get_label(GAction *action) { - return V3270_ACTION_GET_CLASS(action)->get_label(action); + return v3270_action_translate(action,V3270_ACTION_GET_CLASS(action)->get_label(action)); } const gchar * v3270_action_get_tooltip(GAction *action) { - return V3270_ACTION_GET_CLASS(action)->get_tooltip(action); - } - - const GVariantType * get_state_type(GAction G_GNUC_UNUSED(*object)) { - return NULL; - } - - const GVariantType * get_parameter_type(GAction G_GNUC_UNUSED(*object)) { - return NULL; + return v3270_action_translate(action,v3270_action_translate(action,V3270_ACTION_GET_CLASS(action)->get_tooltip(action))); } diff --git a/src/terminal/actions/dialog.c b/src/terminal/actions/dialog.c index dc2313e..49ae146 100644 --- a/src/terminal/actions/dialog.c +++ b/src/terminal/actions/dialog.c @@ -77,13 +77,13 @@ } static void V3270DialogAction_class_init(V3270DialogActionClass *klass) { - klass->parent_class.parent_class.get_enabled = get_enabled; + klass->parent_class.parent_class.get_enabled = get_enabled; + klass->parent_class.parent_class.activate = activate; } static void V3270DialogAction_init(V3270DialogAction *action) { action->dialog = NULL; - action->parent.parent.activate = activate; } diff --git a/src/terminal/actions/lib3270.c b/src/terminal/actions/lib3270.c index 59b1f5b..ffb4e3f 100644 --- a/src/terminal/actions/lib3270.c +++ b/src/terminal/actions/lib3270.c @@ -36,23 +36,12 @@ #include #include #include - - #define LIB3270_TYPE_ACTION (Lib3270Action_get_type()) - #define LIB3270_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_ACTION, Lib3270Action)) - #define LIB3270_IS_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_ACTION)) - - typedef struct _Lib3270ActionClass { - V3270ActionClass parent_class; - } Lib3270ActionClass; - - typedef struct _Lib3270Action { - V3270Action parent; - } Lib3270Action; + #include "private.h" static void Lib3270Action_class_init(Lib3270ActionClass *klass); static void Lib3270Action_init(Lib3270Action *action); - #define LIB3270_ACTION_GET_DESCRIPTOR(obj) ((LIB3270_ACTION *) ((V3270Action *) obj)->info) + #define LIB3270_ACTION_GET_DESCRIPTOR(obj) ((const LIB3270_ACTION *) LIB3270_ACTION(obj)->definition) G_DEFINE_TYPE(Lib3270Action, Lib3270Action, V3270_TYPE_ACTION); @@ -85,21 +74,47 @@ static void dispose(GObject *object) { - //Lib3270Action *action = LIB3270_ACTION(object); +// Lib3270Action *action = LIB3270_ACTION(object); G_OBJECT_CLASS(Lib3270Action_parent_class)->dispose(object); } + static const gchar * get_name(GAction *action) { + return LIB3270_ACTION_GET_DESCRIPTOR(action)->name; + } + + static const gchar * get_icon_name(GAction *action) { + return LIB3270_ACTION_GET_DESCRIPTOR(action)->icon; + } + + static const gchar * get_label(GAction *action) { + return LIB3270_ACTION_GET_DESCRIPTOR(action)->label; + } + + static const gchar * get_tooltip(GAction *action) { + return LIB3270_ACTION_GET_DESCRIPTOR(action)->summary; + } + + static LIB3270_ACTION_GROUP get_action_group(GAction *action) { + return LIB3270_ACTION_GET_DESCRIPTOR(action)->group; + } + void Lib3270Action_class_init(Lib3270ActionClass *klass) { - V3270_ACTION_CLASS(klass)->get_enabled = get_enabled; + klass->parent_class.get_name = get_name; + klass->parent_class.get_icon_name = get_icon_name; + klass->parent_class.get_label = get_label; + klass->parent_class.get_tooltip = get_tooltip; + klass->parent_class.get_action_group = get_action_group; + klass->parent_class.get_enabled = get_enabled; + klass->parent_class.activate = activate; + G_OBJECT_CLASS(klass)->dispose = dispose; } void Lib3270Action_init(Lib3270Action *action) { - action->parent.activate = activate; action->parent.translation_domain = lib3270_get_translation_domain(); } @@ -108,7 +123,7 @@ Lib3270Action * action = (Lib3270Action *) g_object_new(LIB3270_TYPE_ACTION, NULL); // Setup hooks. - action->parent.info = (const LIB3270_PROPERTY *) definition; + action->definition = definition; return G_ACTION(action); } @@ -123,7 +138,7 @@ GAction *action = g_action_new_from_lib3270(&actions[ix]); if(!g_action_get_name(action)) { - g_warning("Action \"%s\" is invalid",actions[ix].name); + g_warning("Action \"%s\" is invalid (no name)",actions[ix].name); } else { g_action_map_add_action(action_map,action); } diff --git a/src/terminal/actions/pakey.c b/src/terminal/actions/pakey.c index cb25bdc..d816544 100644 --- a/src/terminal/actions/pakey.c +++ b/src/terminal/actions/pakey.c @@ -35,24 +35,25 @@ #include #include #include + #include "private.h" #define LIB3270_TYPE_PA_ACTION (Lib3270PaAction_get_type()) #define LIB3270_PA_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_PA_ACTION, Lib3270PaAction)) #define LIB3270_IS_PA_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_PA_ACTION)) typedef struct _Lib3270PaActionClass { - V3270ActionClass parent_class; + Lib3270ActionClass parent_class; } Lib3270PaActionClass; typedef struct _Lib3270PaAction { - V3270Action parent; + Lib3270Action parent; } Lib3270PaAction; static void Lib3270PaAction_class_init(Lib3270PaActionClass *klass); static void Lib3270PaAction_init(Lib3270PaAction *action); - G_DEFINE_TYPE(Lib3270PaAction, Lib3270PaAction, V3270_TYPE_ACTION); + G_DEFINE_TYPE(Lib3270PaAction, Lib3270PaAction, LIB3270_TYPE_ACTION); static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { @@ -86,8 +87,14 @@ return G_VARIANT_TYPE_UINT32; } + static gboolean get_enabled(GAction *action, GtkWidget *terminal) { + return V3270_ACTION_GET_CLASS(action)->get_enabled(action,terminal); + } + void Lib3270PaAction_class_init(Lib3270PaActionClass *klass) { - klass->parent_class.get_parameter_type = get_parameter_type; + klass->parent_class.parent_class.get_parameter_type = get_parameter_type; + klass->parent_class.parent_class.activate = activate; + klass->parent_class.parent_class.get_enabled = get_enabled; } void Lib3270PaAction_init(Lib3270PaAction *action) { @@ -98,9 +105,8 @@ .summary = N_("Emit a PA Key action") }; - action->parent.activate = activate; - action->parent.info = &info; - action->parent.translation_domain = GETTEXT_PACKAGE; + action->parent.definition = &info; + action->parent.parent.translation_domain = GETTEXT_PACKAGE; } diff --git a/src/terminal/actions/pfkey.c b/src/terminal/actions/pfkey.c index d9c8c5f..d44b5b7 100644 --- a/src/terminal/actions/pfkey.c +++ b/src/terminal/actions/pfkey.c @@ -35,24 +35,25 @@ #include #include #include + #include "private.h" #define LIB3270_TYPE_PF_ACTION (Lib3270PfAction_get_type()) #define LIB3270_PF_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_PF_ACTION, Lib3270PfAction)) #define LIB3270_IS_PF_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_PF_ACTION)) typedef struct _Lib3270PfActionClass { - V3270ActionClass parent_class; + Lib3270ActionClass parent_class; } Lib3270PfActionClass; typedef struct _Lib3270PfAction { - V3270Action parent; + Lib3270Action parent; } Lib3270PfAction; static void Lib3270PfAction_class_init(Lib3270PfActionClass *klass); static void Lib3270PfAction_init(Lib3270PfAction *action); - G_DEFINE_TYPE(Lib3270PfAction, Lib3270PfAction, V3270_TYPE_ACTION); + G_DEFINE_TYPE(Lib3270PfAction, Lib3270PfAction, LIB3270_TYPE_ACTION); static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { @@ -86,8 +87,15 @@ return G_VARIANT_TYPE_UINT32; } + static gboolean get_enabled(GAction *action, GtkWidget *terminal) { + return V3270_ACTION_GET_CLASS(action)->get_enabled(action,terminal); + } + void Lib3270PfAction_class_init(Lib3270PfActionClass *klass) { - klass->parent_class.get_parameter_type = get_parameter_type; + klass->parent_class.parent_class.get_parameter_type = get_parameter_type; + klass->parent_class.parent_class.activate = activate; + klass->parent_class.parent_class.get_enabled = get_enabled; + } void Lib3270PfAction_init(Lib3270PfAction *action) { @@ -99,9 +107,8 @@ }; - action->parent.activate = activate; - action->parent.info = &info; - action->parent.translation_domain = GETTEXT_PACKAGE; + action->parent.definition = &info; + action->parent.parent.translation_domain = GETTEXT_PACKAGE; } diff --git a/src/terminal/actions/private.h b/src/terminal/actions/private.h index 5d07e8c..217cbbc 100644 --- a/src/terminal/actions/private.h +++ b/src/terminal/actions/private.h @@ -28,10 +28,33 @@ */ #include + + #include + #include + #include #include #include + // Lib3270 action + + G_GNUC_INTERNAL GType Lib3270Action_get_type(void) G_GNUC_CONST; + + #define LIB3270_TYPE_ACTION (Lib3270Action_get_type()) + #define LIB3270_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_ACTION, Lib3270Action)) + #define LIB3270_IS_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_ACTION)) + + typedef struct _Lib3270ActionClass { + V3270ActionClass parent_class; + } Lib3270ActionClass; + + typedef struct _Lib3270Action { + V3270Action parent; + const LIB3270_PROPERTY * definition; + } Lib3270Action; + + + // Internal methods G_GNUC_INTERNAL int fire_copy_accelerator(GtkWidget *widget, const V3270_ACTION *action); G_GNUC_INTERNAL int fire_paste_accelerator(GtkWidget *widget, const V3270_ACTION *action); G_GNUC_INTERNAL int fire_zoom_action(GtkWidget *widget, const V3270_ACTION *action); diff --git a/src/terminal/actions/property.c b/src/terminal/actions/property.c index 1e0fe68..5312bb5 100644 --- a/src/terminal/actions/property.c +++ b/src/terminal/actions/property.c @@ -73,14 +73,17 @@ static const GVariantType * get_state_type(GAction *object); static const GVariantType * get_parameter_type(GAction *object); static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to); + static void activate(GAction *object, GVariant *parameter, GtkWidget *terminal); + G_DEFINE_TYPE(v3270PropertyAction, v3270PropertyAction, V3270_TYPE_SIMPLE_ACTION); void v3270PropertyAction_class_init(v3270PropertyActionClass *klass) { - klass->parent_class.parent_class.change_widget = change_widget; - klass->parent_class.parent_class.get_parameter_type = get_parameter_type; - klass->parent_class.parent_class.get_state = get_state; - klass->parent_class.parent_class.get_state_type = get_state_type; + klass->parent_class.parent_class.change_widget = change_widget; + klass->parent_class.parent_class.get_parameter_type = get_parameter_type; + klass->parent_class.parent_class.get_state = get_state; + klass->parent_class.parent_class.get_state_type = get_state_type; + klass->parent_class.parent_class.activate = activate; } static void v3270PropertyAction_init(v3270PropertyAction G_GNUC_UNUSED(*action)) { @@ -134,7 +137,7 @@ } - static void activate(GAction *object, GVariant *parameter, GtkWidget *terminal) { + void activate(GAction *object, GVariant *parameter, GtkWidget *terminal) { v3270PropertyAction * action = V3270_PROPERTY_ACTION(object); @@ -246,7 +249,6 @@ if(!action->parent.tooltip) action->parent.tooltip = g_param_spec_get_blurb(pspec); - action->parent.parent.activate = activate; action->pspec = pspec; action->parent.group.id = action_group; diff --git a/src/terminal/actions/simple.c b/src/terminal/actions/simple.c index 9d9fbfa..a8b51ff 100644 --- a/src/terminal/actions/simple.c +++ b/src/terminal/actions/simple.c @@ -41,10 +41,6 @@ G_DEFINE_TYPE(V3270SimpleAction, V3270SimpleAction, V3270_TYPE_ACTION); - static void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) { - g_warning("Action %s activation method is invalid",g_action_get_name(action)); - } - static const gchar * get_icon_name(GAction *action) { return V3270_SIMPLE_ACTION(action)->icon_name; } @@ -73,25 +69,34 @@ G_OBJECT_CLASS(V3270SimpleAction_parent_class)->dispose(object); } + static void klass_activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { + V3270_SIMPLE_ACTION(action)->activate(action,parameter,terminal); + } + static void V3270SimpleAction_class_init(V3270SimpleActionClass *klass) { klass->parent_class.get_name = get_name; klass->parent_class.get_icon_name = get_icon_name; klass->parent_class.get_label = get_label; klass->parent_class.get_tooltip = get_tooltip; + klass->parent_class.activate = klass_activate; G_OBJECT_CLASS(klass)->dispose = dispose; } + static void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) { + g_warning("Action %s activation method is invalid",g_action_get_name(action)); + } + static void V3270SimpleAction_init(V3270SimpleAction *action) { - action->icon_name = NULL; - action->label = _( "No label" ); - action->tooltip = NULL; - action->activate = activate; - action->group.id = LIB3270_ACTION_GROUP_NONE; - action->group.listener = NULL; + action->icon_name = NULL; + action->label = _( "No label" ); + action->tooltip = NULL; + action->activate = activate; + action->group.id = LIB3270_ACTION_GROUP_NONE; + action->group.listener = NULL; } diff --git a/src/terminal/actions/table.c b/src/terminal/actions/table.c index f59a730..5c264c0 100644 --- a/src/terminal/actions/table.c +++ b/src/terminal/actions/table.c @@ -348,8 +348,10 @@ { debug("Activating action \"%s\"",g_action_get_name(action)); + /* V3270_ACTION * descriptor = (V3270_ACTION *) ((V3270Action *) action)->info; descriptor->activate(terminal,descriptor); + */ } @@ -359,6 +361,7 @@ const V3270_ACTION * actions = v3270_get_actions(); size_t ix; + /* for(ix = 0; actions[ix].name; ix++) { V3270Action * action = V3270_ACTION(g_object_new(V3270_TYPE_ACTION, NULL)); @@ -374,6 +377,7 @@ } } + */ } diff --git a/src/terminal/actions/toggle.c b/src/terminal/actions/toggle.c index 7e14e7a..3ce5994 100644 --- a/src/terminal/actions/toggle.c +++ b/src/terminal/actions/toggle.c @@ -35,26 +35,27 @@ #include #include #include + #include "private.h" #define LIB3270_TYPE_TOGGLE_ACTION (Lib3270ToggleAction_get_type()) #define LIB3270_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_TOGGLE_ACTION, Lib3270ToggleAction)) #define LIB3270_IS_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_TOGGLE_ACTION)) - #define GET_DESCRIPTOR(obj) ((const LIB3270_TOGGLE *) ((V3270Action *) obj)->info) + #define GET_DESCRIPTOR(obj) ((const LIB3270_TOGGLE *) LIB3270_ACTION(obj)->definition) typedef struct _Lib3270ToggleActionClass { - V3270ActionClass parent_class; + Lib3270ActionClass parent_class; } Lib3270ToggleActionClass; typedef struct _Lib3270ToggleAction { - V3270Action parent; - const void * listener; + Lib3270Action parent; + const void * listener; ///> @brief Signal listener for the toggle. } Lib3270ToggleAction; static void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass); static void Lib3270ToggleAction_init(Lib3270ToggleAction *action); - G_DEFINE_TYPE(Lib3270ToggleAction, Lib3270ToggleAction, V3270_TYPE_ACTION); + G_DEFINE_TYPE(Lib3270ToggleAction, Lib3270ToggleAction, LIB3270_TYPE_ACTION); static void change_state(H3270 G_GNUC_UNUSED(*hSession), LIB3270_TOGGLE_ID G_GNUC_UNUSED(id), char G_GNUC_UNUSED(state), void G_GNUC_UNUSED(*action)) { v3270_action_notify_state(G_ACTION(action)); @@ -111,24 +112,27 @@ return G_VARIANT_TYPE_BOOLEAN; } + static gboolean get_enabled(GAction *action, GtkWidget *terminal) { + return V3270_ACTION_GET_CLASS(action)->get_enabled(action,terminal); + } + void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) { - klass->parent_class.change_widget = change_widget; - klass->parent_class.get_state = get_state; - klass->parent_class.get_state_type = get_state_type; + klass->parent_class.parent_class.change_widget = change_widget; + klass->parent_class.parent_class.get_state = get_state; + klass->parent_class.parent_class.get_state_type = get_state_type; + klass->parent_class.parent_class.activate = activate; + klass->parent_class.parent_class.get_enabled = get_enabled; } void Lib3270ToggleAction_init(Lib3270ToggleAction *action) { - action->parent.activate = activate; - action->parent.translation_domain = lib3270_get_translation_domain(); } GAction * g_action_new_from_toggle(const LIB3270_TOGGLE * definition) { Lib3270ToggleAction * action = (Lib3270ToggleAction *) g_object_new(LIB3270_TYPE_TOGGLE_ACTION, NULL); - action->parent.info = (const LIB3270_PROPERTY *) definition; - + action->parent.definition = (const LIB3270_PROPERTY *) definition; return G_ACTION(action); } -- libgit2 0.21.2