Commit ee3269dbb8cc080dc2a6cd54138c4fd3df3447e7
1 parent
a221488b
Exists in
master
and in
1 other branch
Refactoring actions to fix problem with the screen-size action behavior.
Showing
11 changed files
with
197 additions
and
138 deletions
Show diff stats
src/include/v3270/actions.h
| @@ -32,6 +32,7 @@ | @@ -32,6 +32,7 @@ | ||
| 32 | #define V3270_ACTIONS_H_INCLUDED 1 | 32 | #define V3270_ACTIONS_H_INCLUDED 1 |
| 33 | 33 | ||
| 34 | #include <gtk/gtk.h> | 34 | #include <gtk/gtk.h> |
| 35 | + #include <lib3270.h> | ||
| 35 | #include <lib3270/actions.h> | 36 | #include <lib3270/actions.h> |
| 36 | #include <lib3270/toggle.h> | 37 | #include <lib3270/toggle.h> |
| 37 | 38 | ||
| @@ -119,14 +120,10 @@ | @@ -119,14 +120,10 @@ | ||
| 119 | GObject parent; | 120 | GObject parent; |
| 120 | 121 | ||
| 121 | GtkWidget * terminal; ///> @brief The active terminal widget. | 122 | GtkWidget * terminal; ///> @brief The active terminal widget. |
| 122 | - const LIB3270_PROPERTY * info; ///> @brief Action info. | ||
| 123 | const void * listener; ///> @brief Signal listener for the action group. | 123 | const void * listener; ///> @brief Signal listener for the action group. |
| 124 | 124 | ||
| 125 | const gchar * translation_domain; ///> @brief The translation domain for the action. | 125 | const gchar * translation_domain; ///> @brief The translation domain for the action. |
| 126 | 126 | ||
| 127 | - /// @brief Activation method. | ||
| 128 | - void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); | ||
| 129 | - | ||
| 130 | } V3270Action; | 127 | } V3270Action; |
| 131 | 128 | ||
| 132 | typedef struct _V3270ActionClass { | 129 | typedef struct _V3270ActionClass { |
| @@ -138,21 +135,24 @@ | @@ -138,21 +135,24 @@ | ||
| 138 | GParamSpec * enabled; | 135 | GParamSpec * enabled; |
| 139 | } properties; | 136 | } properties; |
| 140 | 137 | ||
| 141 | - void (*change_widget)(GAction *action, GtkWidget *from, GtkWidget *to); | 138 | + void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); |
| 142 | 139 | ||
| 143 | - const gchar * (*translate)(GAction *action, const gchar *text); | 140 | + void (*change_widget)(GAction *action, GtkWidget *from, GtkWidget *to); |
| 144 | 141 | ||
| 145 | - const GVariantType * (*get_state_type)(GAction *object); | ||
| 146 | - GVariant * (*get_state)(GAction *action, GtkWidget *terminal); | 142 | + const gchar * (*translate)(GAction *action, const gchar *text); |
| 147 | 143 | ||
| 148 | - const GVariantType * (*get_parameter_type)(GAction *object); | 144 | + const GVariantType * (*get_state_type)(GAction *object); |
| 145 | + GVariant * (*get_state)(GAction *action, GtkWidget *terminal); | ||
| 149 | 146 | ||
| 150 | - gboolean (*get_enabled)(GAction *action, GtkWidget *terminal); | 147 | + const GVariantType * (*get_parameter_type)(GAction *object); |
| 151 | 148 | ||
| 152 | - const gchar * (*get_name)(GAction *action); | ||
| 153 | - const gchar * (*get_icon_name)(GAction *action); | ||
| 154 | - const gchar * (*get_label)(GAction *action); | ||
| 155 | - const gchar * (*get_tooltip)(GAction *action); | 149 | + gboolean (*get_enabled)(GAction *action, GtkWidget *terminal); |
| 150 | + | ||
| 151 | + const gchar * (*get_name)(GAction *action); | ||
| 152 | + const gchar * (*get_icon_name)(GAction *action); | ||
| 153 | + const gchar * (*get_label)(GAction *action); | ||
| 154 | + const gchar * (*get_tooltip)(GAction *action); | ||
| 155 | + LIB3270_ACTION_GROUP (*get_action_group)(GAction *action); | ||
| 156 | 156 | ||
| 157 | } V3270ActionClass; | 157 | } V3270ActionClass; |
| 158 | 158 | ||
| @@ -162,6 +162,8 @@ | @@ -162,6 +162,8 @@ | ||
| 162 | LIB3270_EXPORT void v3270_action_set_terminal_widget(GAction *object, GtkWidget *widget); | 162 | LIB3270_EXPORT void v3270_action_set_terminal_widget(GAction *object, GtkWidget *widget); |
| 163 | LIB3270_EXPORT GtkWidget * v3270_action_get_terminal_widget(GAction *object); | 163 | LIB3270_EXPORT GtkWidget * v3270_action_get_terminal_widget(GAction *object); |
| 164 | 164 | ||
| 165 | + LIB3270_EXPORT LIB3270_ACTION_GROUP v3270_action_get_group(GAction *action); | ||
| 166 | + | ||
| 165 | LIB3270_EXPORT void v3270_action_notify_state(GAction *action); | 167 | LIB3270_EXPORT void v3270_action_notify_state(GAction *action); |
| 166 | LIB3270_EXPORT void v3270_action_notify_enabled(GAction *action); | 168 | LIB3270_EXPORT void v3270_action_notify_enabled(GAction *action); |
| 167 | 169 | ||
| @@ -213,6 +215,7 @@ | @@ -213,6 +215,7 @@ | ||
| 213 | /// @brief Activation method. | 215 | /// @brief Activation method. |
| 214 | void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); | 216 | void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); |
| 215 | 217 | ||
| 218 | + | ||
| 216 | } V3270SimpleAction; | 219 | } V3270SimpleAction; |
| 217 | 220 | ||
| 218 | typedef struct _V3270SimpleActionClass { | 221 | typedef struct _V3270SimpleActionClass { |
src/terminal/actions/action.c
| @@ -34,8 +34,6 @@ | @@ -34,8 +34,6 @@ | ||
| 34 | #include <lib3270.h> | 34 | #include <lib3270.h> |
| 35 | #include <lib3270/log.h> | 35 | #include <lib3270/log.h> |
| 36 | 36 | ||
| 37 | - #define V3270_ACTION_GET_DESCRIPTOR(obj) ((V3270Action *) obj)->info | ||
| 38 | - | ||
| 39 | static void V3270_action_iface_init(GActionInterface *iface); | 37 | static void V3270_action_iface_init(GActionInterface *iface); |
| 40 | static void V3270Action_class_init(V3270ActionClass *klass); | 38 | static void V3270Action_class_init(V3270ActionClass *klass); |
| 41 | static void V3270Action_init(V3270Action *action); | 39 | static void V3270Action_init(V3270Action *action); |
| @@ -43,12 +41,10 @@ | @@ -43,12 +41,10 @@ | ||
| 43 | static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); | 41 | static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); |
| 44 | static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); | 42 | static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); |
| 45 | 43 | ||
| 46 | - static const gchar * get_icon_name(GAction *action); | ||
| 47 | - static const gchar * get_label(GAction *action); | ||
| 48 | - static const gchar * get_tooltip(GAction *action); | ||
| 49 | - static const gchar * get_name(GAction *action); | 44 | + static const gchar * get_null(GAction *action); |
| 50 | static const GVariantType * get_state_type(GAction *action); | 45 | static const GVariantType * get_state_type(GAction *action); |
| 51 | static const GVariantType * get_parameter_type(GAction *object); | 46 | static const GVariantType * get_parameter_type(GAction *object); |
| 47 | + static LIB3270_ACTION_GROUP get_action_group(GAction *action); | ||
| 52 | 48 | ||
| 53 | static void change_widget(GAction *action, GtkWidget *from, GtkWidget *to); | 49 | static void change_widget(GAction *action, GtkWidget *from, GtkWidget *to); |
| 54 | static void finalize(GObject *object); | 50 | static void finalize(GObject *object); |
| @@ -88,15 +84,18 @@ | @@ -88,15 +84,18 @@ | ||
| 88 | 84 | ||
| 89 | debug("%s",__FUNCTION__); | 85 | debug("%s",__FUNCTION__); |
| 90 | 86 | ||
| 87 | + klass->get_name = get_null; | ||
| 88 | + klass->get_icon_name = get_null; | ||
| 89 | + klass->get_label = get_null; | ||
| 90 | + klass->get_tooltip = get_null; | ||
| 91 | + klass->get_action_group = get_action_group; | ||
| 92 | + | ||
| 91 | klass->change_widget = change_widget; | 93 | klass->change_widget = change_widget; |
| 92 | klass->get_enabled = get_enabled; | 94 | klass->get_enabled = get_enabled; |
| 93 | klass->get_state = get_state; | 95 | klass->get_state = get_state; |
| 94 | - klass->get_name = get_name; | ||
| 95 | klass->translate = translate; | 96 | klass->translate = translate; |
| 97 | + klass->activate = activate; | ||
| 96 | 98 | ||
| 97 | - klass->get_icon_name = get_icon_name; | ||
| 98 | - klass->get_label = get_label; | ||
| 99 | - klass->get_tooltip = get_tooltip; | ||
| 100 | klass->get_state_type = get_state_type; | 99 | klass->get_state_type = get_state_type; |
| 101 | klass->get_parameter_type = get_parameter_type; | 100 | klass->get_parameter_type = get_parameter_type; |
| 102 | 101 | ||
| @@ -180,13 +179,7 @@ | @@ -180,13 +179,7 @@ | ||
| 180 | 179 | ||
| 181 | void V3270Action_init(V3270Action *action) { | 180 | void V3270Action_init(V3270Action *action) { |
| 182 | 181 | ||
| 183 | - static const LIB3270_PROPERTY default_info = { | ||
| 184 | - .name = NULL | ||
| 185 | - }; | ||
| 186 | - | ||
| 187 | - action->terminal = NULL; | ||
| 188 | - action->info = &default_info; | ||
| 189 | - action->activate = activate; | 182 | + action->terminal = NULL; |
| 190 | 183 | ||
| 191 | } | 184 | } |
| 192 | 185 | ||
| @@ -280,17 +273,18 @@ | @@ -280,17 +273,18 @@ | ||
| 280 | 273 | ||
| 281 | if(from != to) { | 274 | if(from != to) { |
| 282 | 275 | ||
| 283 | - V3270Action *action = V3270_ACTION(object); | 276 | + V3270Action *action = V3270_ACTION(object); |
| 277 | + LIB3270_ACTION_GROUP group = v3270_action_get_group(object); | ||
| 284 | 278 | ||
| 285 | if(action->listener) { | 279 | if(action->listener) { |
| 286 | - lib3270_unregister_action_group_listener(v3270_action_get_session(object),action->info->group,action->listener); | 280 | + lib3270_unregister_action_group_listener(v3270_action_get_session(object),group,action->listener); |
| 287 | action->listener = NULL; | 281 | action->listener = NULL; |
| 288 | } | 282 | } |
| 289 | 283 | ||
| 290 | action->terminal = to; | 284 | action->terminal = to; |
| 291 | 285 | ||
| 292 | - if(action->info->group != LIB3270_ACTION_GROUP_NONE && to) { | ||
| 293 | - action->listener = lib3270_register_action_group_listener(v3270_action_get_session(object),action->info->group,event_listener,object); | 286 | + if(group != LIB3270_ACTION_GROUP_NONE && to) { |
| 287 | + action->listener = lib3270_register_action_group_listener(v3270_action_get_session(object),group,event_listener,object); | ||
| 294 | } | 288 | } |
| 295 | 289 | ||
| 296 | g_idle_add((GSourceFunc) bg_notify_enabled, G_OBJECT(action)); | 290 | g_idle_add((GSourceFunc) bg_notify_enabled, G_OBJECT(action)); |
| @@ -323,18 +317,29 @@ | @@ -323,18 +317,29 @@ | ||
| 323 | return V3270_ACTION(object)->terminal; | 317 | return V3270_ACTION(object)->terminal; |
| 324 | } | 318 | } |
| 325 | 319 | ||
| 326 | - gboolean get_enabled(GAction G_GNUC_UNUSED(*object), GtkWidget *terminal) { | ||
| 327 | - return terminal != NULL; | 320 | + gboolean get_enabled(GAction *object, GtkWidget *terminal) { |
| 321 | + | ||
| 322 | + if(terminal == NULL) | ||
| 323 | + return FALSE; | ||
| 324 | + | ||
| 325 | + LIB3270_ACTION_GROUP group = v3270_action_get_group(object); | ||
| 326 | + | ||
| 327 | + debug("**************** %s(%d %d)",g_action_get_name(object),(int) group, (int) LIB3270_ACTION_GROUP_NONE); | ||
| 328 | + | ||
| 329 | + if(group != LIB3270_ACTION_GROUP_NONE) { | ||
| 330 | + | ||
| 331 | + debug("**************** %s",g_action_get_name(object)); | ||
| 332 | + | ||
| 333 | + return FALSE; | ||
| 334 | + } | ||
| 335 | + | ||
| 336 | + return TRUE; | ||
| 328 | } | 337 | } |
| 329 | 338 | ||
| 330 | void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) { | 339 | void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) { |
| 331 | g_message("Action %s can't be activated",g_action_get_name(action)); | 340 | g_message("Action %s can't be activated",g_action_get_name(action)); |
| 332 | } | 341 | } |
| 333 | 342 | ||
| 334 | - const gchar * v3270_action_translate(GAction *action, const gchar *text) { | ||
| 335 | - return V3270_ACTION_GET_CLASS(action)->translate(action,text); | ||
| 336 | - } | ||
| 337 | - | ||
| 338 | // | 343 | // |
| 339 | // Action methods. | 344 | // Action methods. |
| 340 | // | 345 | // |
| @@ -447,9 +452,11 @@ | @@ -447,9 +452,11 @@ | ||
| 447 | 452 | ||
| 448 | if(action && action->terminal) { | 453 | if(action && action->terminal) { |
| 449 | 454 | ||
| 450 | - if(action->info->group != LIB3270_ACTION_GROUP_NONE) { | 455 | + LIB3270_ACTION_GROUP group = v3270_action_get_group(object); |
| 451 | 456 | ||
| 452 | - if(!lib3270_action_group_get_activatable(v3270_get_session(action->terminal),action->info->group)) | 457 | + if(group != LIB3270_ACTION_GROUP_NONE) { |
| 458 | + | ||
| 459 | + if(!lib3270_action_group_get_activatable(v3270_get_session(action->terminal),group)) | ||
| 453 | return FALSE; | 460 | return FALSE; |
| 454 | 461 | ||
| 455 | } | 462 | } |
| @@ -466,42 +473,33 @@ | @@ -466,42 +473,33 @@ | ||
| 466 | V3270Action * action = V3270_ACTION(object); | 473 | V3270Action * action = V3270_ACTION(object); |
| 467 | 474 | ||
| 468 | if(action && action->terminal) { | 475 | if(action && action->terminal) { |
| 469 | - action->activate(object,parameter,action->terminal); | 476 | + V3270_ACTION_GET_CLASS(object)->activate(object,parameter,action->terminal); |
| 470 | } | 477 | } |
| 471 | 478 | ||
| 472 | } | 479 | } |
| 473 | 480 | ||
| 474 | - const gchar * get_icon_name(GAction *action) { | ||
| 475 | - return V3270_ACTION_GET_DESCRIPTOR(action)->icon; | 481 | + LIB3270_ACTION_GROUP get_action_group(GAction G_GNUC_UNUSED(*action)) { |
| 482 | + return LIB3270_ACTION_GROUP_NONE; | ||
| 476 | } | 483 | } |
| 477 | 484 | ||
| 478 | - const gchar * get_label(GAction *action) { | ||
| 479 | - const gchar * label = V3270_ACTION_GET_DESCRIPTOR(action)->label; | ||
| 480 | - | ||
| 481 | - debug("%s(%s): [%s] [%s]",__FUNCTION__,g_action_get_name(action),label,v3270_action_translate(action,label)); | ||
| 482 | - | ||
| 483 | - if(label && *label) | ||
| 484 | - return v3270_action_translate(action,label); | ||
| 485 | - | 485 | + const gchar * get_null(GAction G_GNUC_UNUSED(*action)) { |
| 486 | return NULL; | 486 | return NULL; |
| 487 | } | 487 | } |
| 488 | 488 | ||
| 489 | - const gchar * get_tooltip(GAction *action) { | ||
| 490 | - | ||
| 491 | - const gchar * tooltip = V3270_ACTION_GET_DESCRIPTOR(action)->description; | ||
| 492 | - | ||
| 493 | - if(!tooltip) | ||
| 494 | - tooltip = V3270_ACTION_GET_DESCRIPTOR(action)->summary; | ||
| 495 | - | ||
| 496 | - if(tooltip) | ||
| 497 | - return v3270_action_translate(action,tooltip); | 489 | + const GVariantType * get_state_type(GAction G_GNUC_UNUSED(*object)) { |
| 490 | + return NULL; | ||
| 491 | + } | ||
| 498 | 492 | ||
| 499 | - return NULL; | 493 | + const GVariantType * get_parameter_type(GAction G_GNUC_UNUSED(*object)) { |
| 494 | + return NULL; | ||
| 495 | + } | ||
| 500 | 496 | ||
| 497 | + const gchar * v3270_action_translate(GAction *action, const gchar *text) { | ||
| 498 | + return V3270_ACTION_GET_CLASS(action)->translate(action,text); | ||
| 501 | } | 499 | } |
| 502 | 500 | ||
| 503 | - const gchar * get_name(GAction *action) { | ||
| 504 | - return V3270_ACTION_GET_DESCRIPTOR(action)->name; | 501 | + LIB3270_ACTION_GROUP v3270_action_get_group(GAction *action) { |
| 502 | + return V3270_ACTION_GET_CLASS(action)->get_action_group(action); | ||
| 505 | } | 503 | } |
| 506 | 504 | ||
| 507 | const gchar * v3270_action_get_icon_name(GAction *action) { | 505 | const gchar * v3270_action_get_icon_name(GAction *action) { |
| @@ -509,17 +507,9 @@ | @@ -509,17 +507,9 @@ | ||
| 509 | } | 507 | } |
| 510 | 508 | ||
| 511 | const gchar * v3270_action_get_label(GAction *action) { | 509 | const gchar * v3270_action_get_label(GAction *action) { |
| 512 | - return V3270_ACTION_GET_CLASS(action)->get_label(action); | 510 | + return v3270_action_translate(action,V3270_ACTION_GET_CLASS(action)->get_label(action)); |
| 513 | } | 511 | } |
| 514 | 512 | ||
| 515 | const gchar * v3270_action_get_tooltip(GAction *action) { | 513 | const gchar * v3270_action_get_tooltip(GAction *action) { |
| 516 | - return V3270_ACTION_GET_CLASS(action)->get_tooltip(action); | ||
| 517 | - } | ||
| 518 | - | ||
| 519 | - const GVariantType * get_state_type(GAction G_GNUC_UNUSED(*object)) { | ||
| 520 | - return NULL; | ||
| 521 | - } | ||
| 522 | - | ||
| 523 | - const GVariantType * get_parameter_type(GAction G_GNUC_UNUSED(*object)) { | ||
| 524 | - return NULL; | 514 | + return v3270_action_translate(action,v3270_action_translate(action,V3270_ACTION_GET_CLASS(action)->get_tooltip(action))); |
| 525 | } | 515 | } |
src/terminal/actions/dialog.c
| @@ -77,13 +77,13 @@ | @@ -77,13 +77,13 @@ | ||
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | static void V3270DialogAction_class_init(V3270DialogActionClass *klass) { | 79 | static void V3270DialogAction_class_init(V3270DialogActionClass *klass) { |
| 80 | - klass->parent_class.parent_class.get_enabled = get_enabled; | 80 | + klass->parent_class.parent_class.get_enabled = get_enabled; |
| 81 | + klass->parent_class.parent_class.activate = activate; | ||
| 81 | } | 82 | } |
| 82 | 83 | ||
| 83 | static void V3270DialogAction_init(V3270DialogAction *action) { | 84 | static void V3270DialogAction_init(V3270DialogAction *action) { |
| 84 | 85 | ||
| 85 | action->dialog = NULL; | 86 | action->dialog = NULL; |
| 86 | - action->parent.parent.activate = activate; | ||
| 87 | 87 | ||
| 88 | } | 88 | } |
| 89 | 89 |
src/terminal/actions/lib3270.c
| @@ -36,23 +36,12 @@ | @@ -36,23 +36,12 @@ | ||
| 36 | #include <lib3270/actions.h> | 36 | #include <lib3270/actions.h> |
| 37 | #include <v3270.h> | 37 | #include <v3270.h> |
| 38 | #include <v3270/actions.h> | 38 | #include <v3270/actions.h> |
| 39 | - | ||
| 40 | - #define LIB3270_TYPE_ACTION (Lib3270Action_get_type()) | ||
| 41 | - #define LIB3270_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_ACTION, Lib3270Action)) | ||
| 42 | - #define LIB3270_IS_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_ACTION)) | ||
| 43 | - | ||
| 44 | - typedef struct _Lib3270ActionClass { | ||
| 45 | - V3270ActionClass parent_class; | ||
| 46 | - } Lib3270ActionClass; | ||
| 47 | - | ||
| 48 | - typedef struct _Lib3270Action { | ||
| 49 | - V3270Action parent; | ||
| 50 | - } Lib3270Action; | 39 | + #include "private.h" |
| 51 | 40 | ||
| 52 | static void Lib3270Action_class_init(Lib3270ActionClass *klass); | 41 | static void Lib3270Action_class_init(Lib3270ActionClass *klass); |
| 53 | static void Lib3270Action_init(Lib3270Action *action); | 42 | static void Lib3270Action_init(Lib3270Action *action); |
| 54 | 43 | ||
| 55 | - #define LIB3270_ACTION_GET_DESCRIPTOR(obj) ((LIB3270_ACTION *) ((V3270Action *) obj)->info) | 44 | + #define LIB3270_ACTION_GET_DESCRIPTOR(obj) ((const LIB3270_ACTION *) LIB3270_ACTION(obj)->definition) |
| 56 | 45 | ||
| 57 | G_DEFINE_TYPE(Lib3270Action, Lib3270Action, V3270_TYPE_ACTION); | 46 | G_DEFINE_TYPE(Lib3270Action, Lib3270Action, V3270_TYPE_ACTION); |
| 58 | 47 | ||
| @@ -85,21 +74,47 @@ | @@ -85,21 +74,47 @@ | ||
| 85 | 74 | ||
| 86 | static void dispose(GObject *object) { | 75 | static void dispose(GObject *object) { |
| 87 | 76 | ||
| 88 | - //Lib3270Action *action = LIB3270_ACTION(object); | 77 | +// Lib3270Action *action = LIB3270_ACTION(object); |
| 89 | 78 | ||
| 90 | 79 | ||
| 91 | G_OBJECT_CLASS(Lib3270Action_parent_class)->dispose(object); | 80 | G_OBJECT_CLASS(Lib3270Action_parent_class)->dispose(object); |
| 92 | } | 81 | } |
| 93 | 82 | ||
| 83 | + static const gchar * get_name(GAction *action) { | ||
| 84 | + return LIB3270_ACTION_GET_DESCRIPTOR(action)->name; | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + static const gchar * get_icon_name(GAction *action) { | ||
| 88 | + return LIB3270_ACTION_GET_DESCRIPTOR(action)->icon; | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + static const gchar * get_label(GAction *action) { | ||
| 92 | + return LIB3270_ACTION_GET_DESCRIPTOR(action)->label; | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + static const gchar * get_tooltip(GAction *action) { | ||
| 96 | + return LIB3270_ACTION_GET_DESCRIPTOR(action)->summary; | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + static LIB3270_ACTION_GROUP get_action_group(GAction *action) { | ||
| 100 | + return LIB3270_ACTION_GET_DESCRIPTOR(action)->group; | ||
| 101 | + } | ||
| 102 | + | ||
| 94 | void Lib3270Action_class_init(Lib3270ActionClass *klass) { | 103 | void Lib3270Action_class_init(Lib3270ActionClass *klass) { |
| 95 | 104 | ||
| 96 | - V3270_ACTION_CLASS(klass)->get_enabled = get_enabled; | 105 | + klass->parent_class.get_name = get_name; |
| 106 | + klass->parent_class.get_icon_name = get_icon_name; | ||
| 107 | + klass->parent_class.get_label = get_label; | ||
| 108 | + klass->parent_class.get_tooltip = get_tooltip; | ||
| 109 | + klass->parent_class.get_action_group = get_action_group; | ||
| 110 | + klass->parent_class.get_enabled = get_enabled; | ||
| 111 | + klass->parent_class.activate = activate; | ||
| 112 | + | ||
| 97 | G_OBJECT_CLASS(klass)->dispose = dispose; | 113 | G_OBJECT_CLASS(klass)->dispose = dispose; |
| 98 | 114 | ||
| 99 | } | 115 | } |
| 100 | 116 | ||
| 101 | void Lib3270Action_init(Lib3270Action *action) { | 117 | void Lib3270Action_init(Lib3270Action *action) { |
| 102 | - action->parent.activate = activate; | ||
| 103 | action->parent.translation_domain = lib3270_get_translation_domain(); | 118 | action->parent.translation_domain = lib3270_get_translation_domain(); |
| 104 | } | 119 | } |
| 105 | 120 | ||
| @@ -108,7 +123,7 @@ | @@ -108,7 +123,7 @@ | ||
| 108 | Lib3270Action * action = (Lib3270Action *) g_object_new(LIB3270_TYPE_ACTION, NULL); | 123 | Lib3270Action * action = (Lib3270Action *) g_object_new(LIB3270_TYPE_ACTION, NULL); |
| 109 | 124 | ||
| 110 | // Setup hooks. | 125 | // Setup hooks. |
| 111 | - action->parent.info = (const LIB3270_PROPERTY *) definition; | 126 | + action->definition = definition; |
| 112 | 127 | ||
| 113 | return G_ACTION(action); | 128 | return G_ACTION(action); |
| 114 | } | 129 | } |
| @@ -123,7 +138,7 @@ | @@ -123,7 +138,7 @@ | ||
| 123 | GAction *action = g_action_new_from_lib3270(&actions[ix]); | 138 | GAction *action = g_action_new_from_lib3270(&actions[ix]); |
| 124 | 139 | ||
| 125 | if(!g_action_get_name(action)) { | 140 | if(!g_action_get_name(action)) { |
| 126 | - g_warning("Action \"%s\" is invalid",actions[ix].name); | 141 | + g_warning("Action \"%s\" is invalid (no name)",actions[ix].name); |
| 127 | } else { | 142 | } else { |
| 128 | g_action_map_add_action(action_map,action); | 143 | g_action_map_add_action(action_map,action); |
| 129 | } | 144 | } |
src/terminal/actions/pakey.c
| @@ -35,24 +35,25 @@ | @@ -35,24 +35,25 @@ | ||
| 35 | #include <internals.h> | 35 | #include <internals.h> |
| 36 | #include <v3270.h> | 36 | #include <v3270.h> |
| 37 | #include <v3270/actions.h> | 37 | #include <v3270/actions.h> |
| 38 | + #include "private.h" | ||
| 38 | 39 | ||
| 39 | #define LIB3270_TYPE_PA_ACTION (Lib3270PaAction_get_type()) | 40 | #define LIB3270_TYPE_PA_ACTION (Lib3270PaAction_get_type()) |
| 40 | #define LIB3270_PA_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_PA_ACTION, Lib3270PaAction)) | 41 | #define LIB3270_PA_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_PA_ACTION, Lib3270PaAction)) |
| 41 | #define LIB3270_IS_PA_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_PA_ACTION)) | 42 | #define LIB3270_IS_PA_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_PA_ACTION)) |
| 42 | 43 | ||
| 43 | typedef struct _Lib3270PaActionClass { | 44 | typedef struct _Lib3270PaActionClass { |
| 44 | - V3270ActionClass parent_class; | 45 | + Lib3270ActionClass parent_class; |
| 45 | 46 | ||
| 46 | } Lib3270PaActionClass; | 47 | } Lib3270PaActionClass; |
| 47 | 48 | ||
| 48 | typedef struct _Lib3270PaAction { | 49 | typedef struct _Lib3270PaAction { |
| 49 | - V3270Action parent; | 50 | + Lib3270Action parent; |
| 50 | } Lib3270PaAction; | 51 | } Lib3270PaAction; |
| 51 | 52 | ||
| 52 | static void Lib3270PaAction_class_init(Lib3270PaActionClass *klass); | 53 | static void Lib3270PaAction_class_init(Lib3270PaActionClass *klass); |
| 53 | static void Lib3270PaAction_init(Lib3270PaAction *action); | 54 | static void Lib3270PaAction_init(Lib3270PaAction *action); |
| 54 | 55 | ||
| 55 | - G_DEFINE_TYPE(Lib3270PaAction, Lib3270PaAction, V3270_TYPE_ACTION); | 56 | + G_DEFINE_TYPE(Lib3270PaAction, Lib3270PaAction, LIB3270_TYPE_ACTION); |
| 56 | 57 | ||
| 57 | static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { | 58 | static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { |
| 58 | 59 | ||
| @@ -86,8 +87,14 @@ | @@ -86,8 +87,14 @@ | ||
| 86 | return G_VARIANT_TYPE_UINT32; | 87 | return G_VARIANT_TYPE_UINT32; |
| 87 | } | 88 | } |
| 88 | 89 | ||
| 90 | + static gboolean get_enabled(GAction *action, GtkWidget *terminal) { | ||
| 91 | + return V3270_ACTION_GET_CLASS(action)->get_enabled(action,terminal); | ||
| 92 | + } | ||
| 93 | + | ||
| 89 | void Lib3270PaAction_class_init(Lib3270PaActionClass *klass) { | 94 | void Lib3270PaAction_class_init(Lib3270PaActionClass *klass) { |
| 90 | - klass->parent_class.get_parameter_type = get_parameter_type; | 95 | + klass->parent_class.parent_class.get_parameter_type = get_parameter_type; |
| 96 | + klass->parent_class.parent_class.activate = activate; | ||
| 97 | + klass->parent_class.parent_class.get_enabled = get_enabled; | ||
| 91 | } | 98 | } |
| 92 | 99 | ||
| 93 | void Lib3270PaAction_init(Lib3270PaAction *action) { | 100 | void Lib3270PaAction_init(Lib3270PaAction *action) { |
| @@ -98,9 +105,8 @@ | @@ -98,9 +105,8 @@ | ||
| 98 | .summary = N_("Emit a PA Key action") | 105 | .summary = N_("Emit a PA Key action") |
| 99 | }; | 106 | }; |
| 100 | 107 | ||
| 101 | - action->parent.activate = activate; | ||
| 102 | - action->parent.info = &info; | ||
| 103 | - action->parent.translation_domain = GETTEXT_PACKAGE; | 108 | + action->parent.definition = &info; |
| 109 | + action->parent.parent.translation_domain = GETTEXT_PACKAGE; | ||
| 104 | 110 | ||
| 105 | } | 111 | } |
| 106 | 112 |
src/terminal/actions/pfkey.c
| @@ -35,24 +35,25 @@ | @@ -35,24 +35,25 @@ | ||
| 35 | #include <internals.h> | 35 | #include <internals.h> |
| 36 | #include <v3270.h> | 36 | #include <v3270.h> |
| 37 | #include <v3270/actions.h> | 37 | #include <v3270/actions.h> |
| 38 | + #include "private.h" | ||
| 38 | 39 | ||
| 39 | #define LIB3270_TYPE_PF_ACTION (Lib3270PfAction_get_type()) | 40 | #define LIB3270_TYPE_PF_ACTION (Lib3270PfAction_get_type()) |
| 40 | #define LIB3270_PF_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_PF_ACTION, Lib3270PfAction)) | 41 | #define LIB3270_PF_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_PF_ACTION, Lib3270PfAction)) |
| 41 | #define LIB3270_IS_PF_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_PF_ACTION)) | 42 | #define LIB3270_IS_PF_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_PF_ACTION)) |
| 42 | 43 | ||
| 43 | typedef struct _Lib3270PfActionClass { | 44 | typedef struct _Lib3270PfActionClass { |
| 44 | - V3270ActionClass parent_class; | 45 | + Lib3270ActionClass parent_class; |
| 45 | 46 | ||
| 46 | } Lib3270PfActionClass; | 47 | } Lib3270PfActionClass; |
| 47 | 48 | ||
| 48 | typedef struct _Lib3270PfAction { | 49 | typedef struct _Lib3270PfAction { |
| 49 | - V3270Action parent; | 50 | + Lib3270Action parent; |
| 50 | } Lib3270PfAction; | 51 | } Lib3270PfAction; |
| 51 | 52 | ||
| 52 | static void Lib3270PfAction_class_init(Lib3270PfActionClass *klass); | 53 | static void Lib3270PfAction_class_init(Lib3270PfActionClass *klass); |
| 53 | static void Lib3270PfAction_init(Lib3270PfAction *action); | 54 | static void Lib3270PfAction_init(Lib3270PfAction *action); |
| 54 | 55 | ||
| 55 | - G_DEFINE_TYPE(Lib3270PfAction, Lib3270PfAction, V3270_TYPE_ACTION); | 56 | + G_DEFINE_TYPE(Lib3270PfAction, Lib3270PfAction, LIB3270_TYPE_ACTION); |
| 56 | 57 | ||
| 57 | static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { | 58 | static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { |
| 58 | 59 | ||
| @@ -86,8 +87,15 @@ | @@ -86,8 +87,15 @@ | ||
| 86 | return G_VARIANT_TYPE_UINT32; | 87 | return G_VARIANT_TYPE_UINT32; |
| 87 | } | 88 | } |
| 88 | 89 | ||
| 90 | + static gboolean get_enabled(GAction *action, GtkWidget *terminal) { | ||
| 91 | + return V3270_ACTION_GET_CLASS(action)->get_enabled(action,terminal); | ||
| 92 | + } | ||
| 93 | + | ||
| 89 | void Lib3270PfAction_class_init(Lib3270PfActionClass *klass) { | 94 | void Lib3270PfAction_class_init(Lib3270PfActionClass *klass) { |
| 90 | - klass->parent_class.get_parameter_type = get_parameter_type; | 95 | + klass->parent_class.parent_class.get_parameter_type = get_parameter_type; |
| 96 | + klass->parent_class.parent_class.activate = activate; | ||
| 97 | + klass->parent_class.parent_class.get_enabled = get_enabled; | ||
| 98 | + | ||
| 91 | } | 99 | } |
| 92 | 100 | ||
| 93 | void Lib3270PfAction_init(Lib3270PfAction *action) { | 101 | void Lib3270PfAction_init(Lib3270PfAction *action) { |
| @@ -99,9 +107,8 @@ | @@ -99,9 +107,8 @@ | ||
| 99 | 107 | ||
| 100 | }; | 108 | }; |
| 101 | 109 | ||
| 102 | - action->parent.activate = activate; | ||
| 103 | - action->parent.info = &info; | ||
| 104 | - action->parent.translation_domain = GETTEXT_PACKAGE; | 110 | + action->parent.definition = &info; |
| 111 | + action->parent.parent.translation_domain = GETTEXT_PACKAGE; | ||
| 105 | 112 | ||
| 106 | } | 113 | } |
| 107 | 114 |
src/terminal/actions/private.h
| @@ -28,10 +28,33 @@ | @@ -28,10 +28,33 @@ | ||
| 28 | */ | 28 | */ |
| 29 | 29 | ||
| 30 | #include <config.h> | 30 | #include <config.h> |
| 31 | + | ||
| 32 | + #include <glib.h> | ||
| 33 | + #include <gtk/gtk.h> | ||
| 34 | + | ||
| 31 | #include <v3270.h> | 35 | #include <v3270.h> |
| 32 | #include <v3270/actions.h> | 36 | #include <v3270/actions.h> |
| 33 | #include <internals.h> | 37 | #include <internals.h> |
| 34 | 38 | ||
| 39 | + // Lib3270 action | ||
| 40 | + | ||
| 41 | + G_GNUC_INTERNAL GType Lib3270Action_get_type(void) G_GNUC_CONST; | ||
| 42 | + | ||
| 43 | + #define LIB3270_TYPE_ACTION (Lib3270Action_get_type()) | ||
| 44 | + #define LIB3270_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_ACTION, Lib3270Action)) | ||
| 45 | + #define LIB3270_IS_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_ACTION)) | ||
| 46 | + | ||
| 47 | + typedef struct _Lib3270ActionClass { | ||
| 48 | + V3270ActionClass parent_class; | ||
| 49 | + } Lib3270ActionClass; | ||
| 50 | + | ||
| 51 | + typedef struct _Lib3270Action { | ||
| 52 | + V3270Action parent; | ||
| 53 | + const LIB3270_PROPERTY * definition; | ||
| 54 | + } Lib3270Action; | ||
| 55 | + | ||
| 56 | + | ||
| 57 | + // Internal methods | ||
| 35 | G_GNUC_INTERNAL int fire_copy_accelerator(GtkWidget *widget, const V3270_ACTION *action); | 58 | G_GNUC_INTERNAL int fire_copy_accelerator(GtkWidget *widget, const V3270_ACTION *action); |
| 36 | G_GNUC_INTERNAL int fire_paste_accelerator(GtkWidget *widget, const V3270_ACTION *action); | 59 | G_GNUC_INTERNAL int fire_paste_accelerator(GtkWidget *widget, const V3270_ACTION *action); |
| 37 | G_GNUC_INTERNAL int fire_zoom_action(GtkWidget *widget, const V3270_ACTION *action); | 60 | G_GNUC_INTERNAL int fire_zoom_action(GtkWidget *widget, const V3270_ACTION *action); |
src/terminal/actions/property.c
| @@ -73,14 +73,17 @@ | @@ -73,14 +73,17 @@ | ||
| 73 | static const GVariantType * get_state_type(GAction *object); | 73 | static const GVariantType * get_state_type(GAction *object); |
| 74 | static const GVariantType * get_parameter_type(GAction *object); | 74 | static const GVariantType * get_parameter_type(GAction *object); |
| 75 | static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to); | 75 | static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to); |
| 76 | + static void activate(GAction *object, GVariant *parameter, GtkWidget *terminal); | ||
| 77 | + | ||
| 76 | 78 | ||
| 77 | G_DEFINE_TYPE(v3270PropertyAction, v3270PropertyAction, V3270_TYPE_SIMPLE_ACTION); | 79 | G_DEFINE_TYPE(v3270PropertyAction, v3270PropertyAction, V3270_TYPE_SIMPLE_ACTION); |
| 78 | 80 | ||
| 79 | void v3270PropertyAction_class_init(v3270PropertyActionClass *klass) { | 81 | void v3270PropertyAction_class_init(v3270PropertyActionClass *klass) { |
| 80 | - klass->parent_class.parent_class.change_widget = change_widget; | ||
| 81 | - klass->parent_class.parent_class.get_parameter_type = get_parameter_type; | ||
| 82 | - klass->parent_class.parent_class.get_state = get_state; | ||
| 83 | - klass->parent_class.parent_class.get_state_type = get_state_type; | 82 | + klass->parent_class.parent_class.change_widget = change_widget; |
| 83 | + klass->parent_class.parent_class.get_parameter_type = get_parameter_type; | ||
| 84 | + klass->parent_class.parent_class.get_state = get_state; | ||
| 85 | + klass->parent_class.parent_class.get_state_type = get_state_type; | ||
| 86 | + klass->parent_class.parent_class.activate = activate; | ||
| 84 | } | 87 | } |
| 85 | 88 | ||
| 86 | static void v3270PropertyAction_init(v3270PropertyAction G_GNUC_UNUSED(*action)) { | 89 | static void v3270PropertyAction_init(v3270PropertyAction G_GNUC_UNUSED(*action)) { |
| @@ -134,7 +137,7 @@ | @@ -134,7 +137,7 @@ | ||
| 134 | 137 | ||
| 135 | } | 138 | } |
| 136 | 139 | ||
| 137 | - static void activate(GAction *object, GVariant *parameter, GtkWidget *terminal) { | 140 | + void activate(GAction *object, GVariant *parameter, GtkWidget *terminal) { |
| 138 | 141 | ||
| 139 | v3270PropertyAction * action = V3270_PROPERTY_ACTION(object); | 142 | v3270PropertyAction * action = V3270_PROPERTY_ACTION(object); |
| 140 | 143 | ||
| @@ -246,7 +249,6 @@ | @@ -246,7 +249,6 @@ | ||
| 246 | if(!action->parent.tooltip) | 249 | if(!action->parent.tooltip) |
| 247 | action->parent.tooltip = g_param_spec_get_blurb(pspec); | 250 | action->parent.tooltip = g_param_spec_get_blurb(pspec); |
| 248 | 251 | ||
| 249 | - action->parent.parent.activate = activate; | ||
| 250 | action->pspec = pspec; | 252 | action->pspec = pspec; |
| 251 | action->parent.group.id = action_group; | 253 | action->parent.group.id = action_group; |
| 252 | 254 |
src/terminal/actions/simple.c
| @@ -41,10 +41,6 @@ | @@ -41,10 +41,6 @@ | ||
| 41 | 41 | ||
| 42 | G_DEFINE_TYPE(V3270SimpleAction, V3270SimpleAction, V3270_TYPE_ACTION); | 42 | G_DEFINE_TYPE(V3270SimpleAction, V3270SimpleAction, V3270_TYPE_ACTION); |
| 43 | 43 | ||
| 44 | - static void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) { | ||
| 45 | - g_warning("Action %s activation method is invalid",g_action_get_name(action)); | ||
| 46 | - } | ||
| 47 | - | ||
| 48 | static const gchar * get_icon_name(GAction *action) { | 44 | static const gchar * get_icon_name(GAction *action) { |
| 49 | return V3270_SIMPLE_ACTION(action)->icon_name; | 45 | return V3270_SIMPLE_ACTION(action)->icon_name; |
| 50 | } | 46 | } |
| @@ -73,25 +69,34 @@ | @@ -73,25 +69,34 @@ | ||
| 73 | G_OBJECT_CLASS(V3270SimpleAction_parent_class)->dispose(object); | 69 | G_OBJECT_CLASS(V3270SimpleAction_parent_class)->dispose(object); |
| 74 | } | 70 | } |
| 75 | 71 | ||
| 72 | + static void klass_activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { | ||
| 73 | + V3270_SIMPLE_ACTION(action)->activate(action,parameter,terminal); | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | static void V3270SimpleAction_class_init(V3270SimpleActionClass *klass) { | 76 | static void V3270SimpleAction_class_init(V3270SimpleActionClass *klass) { |
| 77 | 77 | ||
| 78 | klass->parent_class.get_name = get_name; | 78 | klass->parent_class.get_name = get_name; |
| 79 | klass->parent_class.get_icon_name = get_icon_name; | 79 | klass->parent_class.get_icon_name = get_icon_name; |
| 80 | klass->parent_class.get_label = get_label; | 80 | klass->parent_class.get_label = get_label; |
| 81 | klass->parent_class.get_tooltip = get_tooltip; | 81 | klass->parent_class.get_tooltip = get_tooltip; |
| 82 | + klass->parent_class.activate = klass_activate; | ||
| 82 | 83 | ||
| 83 | G_OBJECT_CLASS(klass)->dispose = dispose; | 84 | G_OBJECT_CLASS(klass)->dispose = dispose; |
| 84 | 85 | ||
| 85 | } | 86 | } |
| 86 | 87 | ||
| 88 | + static void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) { | ||
| 89 | + g_warning("Action %s activation method is invalid",g_action_get_name(action)); | ||
| 90 | + } | ||
| 91 | + | ||
| 87 | static void V3270SimpleAction_init(V3270SimpleAction *action) { | 92 | static void V3270SimpleAction_init(V3270SimpleAction *action) { |
| 88 | 93 | ||
| 89 | - action->icon_name = NULL; | ||
| 90 | - action->label = _( "No label" ); | ||
| 91 | - action->tooltip = NULL; | ||
| 92 | - action->activate = activate; | ||
| 93 | - action->group.id = LIB3270_ACTION_GROUP_NONE; | ||
| 94 | - action->group.listener = NULL; | 94 | + action->icon_name = NULL; |
| 95 | + action->label = _( "No label" ); | ||
| 96 | + action->tooltip = NULL; | ||
| 97 | + action->activate = activate; | ||
| 98 | + action->group.id = LIB3270_ACTION_GROUP_NONE; | ||
| 99 | + action->group.listener = NULL; | ||
| 95 | 100 | ||
| 96 | } | 101 | } |
| 97 | 102 |
src/terminal/actions/table.c
| @@ -348,8 +348,10 @@ | @@ -348,8 +348,10 @@ | ||
| 348 | { | 348 | { |
| 349 | debug("Activating action \"%s\"",g_action_get_name(action)); | 349 | debug("Activating action \"%s\"",g_action_get_name(action)); |
| 350 | 350 | ||
| 351 | + /* | ||
| 351 | V3270_ACTION * descriptor = (V3270_ACTION *) ((V3270Action *) action)->info; | 352 | V3270_ACTION * descriptor = (V3270_ACTION *) ((V3270Action *) action)->info; |
| 352 | descriptor->activate(terminal,descriptor); | 353 | descriptor->activate(terminal,descriptor); |
| 354 | + */ | ||
| 353 | 355 | ||
| 354 | } | 356 | } |
| 355 | 357 | ||
| @@ -359,6 +361,7 @@ | @@ -359,6 +361,7 @@ | ||
| 359 | const V3270_ACTION * actions = v3270_get_actions(); | 361 | const V3270_ACTION * actions = v3270_get_actions(); |
| 360 | size_t ix; | 362 | size_t ix; |
| 361 | 363 | ||
| 364 | + /* | ||
| 362 | for(ix = 0; actions[ix].name; ix++) { | 365 | for(ix = 0; actions[ix].name; ix++) { |
| 363 | 366 | ||
| 364 | V3270Action * action = V3270_ACTION(g_object_new(V3270_TYPE_ACTION, NULL)); | 367 | V3270Action * action = V3270_ACTION(g_object_new(V3270_TYPE_ACTION, NULL)); |
| @@ -374,6 +377,7 @@ | @@ -374,6 +377,7 @@ | ||
| 374 | } | 377 | } |
| 375 | 378 | ||
| 376 | } | 379 | } |
| 380 | + */ | ||
| 377 | 381 | ||
| 378 | } | 382 | } |
| 379 | 383 |
src/terminal/actions/toggle.c
| @@ -35,26 +35,27 @@ | @@ -35,26 +35,27 @@ | ||
| 35 | #include <internals.h> | 35 | #include <internals.h> |
| 36 | #include <v3270.h> | 36 | #include <v3270.h> |
| 37 | #include <v3270/actions.h> | 37 | #include <v3270/actions.h> |
| 38 | + #include "private.h" | ||
| 38 | 39 | ||
| 39 | #define LIB3270_TYPE_TOGGLE_ACTION (Lib3270ToggleAction_get_type()) | 40 | #define LIB3270_TYPE_TOGGLE_ACTION (Lib3270ToggleAction_get_type()) |
| 40 | #define LIB3270_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_TOGGLE_ACTION, Lib3270ToggleAction)) | 41 | #define LIB3270_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_TOGGLE_ACTION, Lib3270ToggleAction)) |
| 41 | #define LIB3270_IS_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_TOGGLE_ACTION)) | 42 | #define LIB3270_IS_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_TOGGLE_ACTION)) |
| 42 | 43 | ||
| 43 | - #define GET_DESCRIPTOR(obj) ((const LIB3270_TOGGLE *) ((V3270Action *) obj)->info) | 44 | + #define GET_DESCRIPTOR(obj) ((const LIB3270_TOGGLE *) LIB3270_ACTION(obj)->definition) |
| 44 | 45 | ||
| 45 | typedef struct _Lib3270ToggleActionClass { | 46 | typedef struct _Lib3270ToggleActionClass { |
| 46 | - V3270ActionClass parent_class; | 47 | + Lib3270ActionClass parent_class; |
| 47 | } Lib3270ToggleActionClass; | 48 | } Lib3270ToggleActionClass; |
| 48 | 49 | ||
| 49 | typedef struct _Lib3270ToggleAction { | 50 | typedef struct _Lib3270ToggleAction { |
| 50 | - V3270Action parent; | ||
| 51 | - const void * listener; | 51 | + Lib3270Action parent; |
| 52 | + const void * listener; ///> @brief Signal listener for the toggle. | ||
| 52 | } Lib3270ToggleAction; | 53 | } Lib3270ToggleAction; |
| 53 | 54 | ||
| 54 | static void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass); | 55 | static void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass); |
| 55 | static void Lib3270ToggleAction_init(Lib3270ToggleAction *action); | 56 | static void Lib3270ToggleAction_init(Lib3270ToggleAction *action); |
| 56 | 57 | ||
| 57 | - G_DEFINE_TYPE(Lib3270ToggleAction, Lib3270ToggleAction, V3270_TYPE_ACTION); | 58 | + G_DEFINE_TYPE(Lib3270ToggleAction, Lib3270ToggleAction, LIB3270_TYPE_ACTION); |
| 58 | 59 | ||
| 59 | 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)) { | 60 | 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)) { |
| 60 | v3270_action_notify_state(G_ACTION(action)); | 61 | v3270_action_notify_state(G_ACTION(action)); |
| @@ -111,24 +112,27 @@ | @@ -111,24 +112,27 @@ | ||
| 111 | return G_VARIANT_TYPE_BOOLEAN; | 112 | return G_VARIANT_TYPE_BOOLEAN; |
| 112 | } | 113 | } |
| 113 | 114 | ||
| 115 | + static gboolean get_enabled(GAction *action, GtkWidget *terminal) { | ||
| 116 | + return V3270_ACTION_GET_CLASS(action)->get_enabled(action,terminal); | ||
| 117 | + } | ||
| 118 | + | ||
| 114 | void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) { | 119 | void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) { |
| 115 | 120 | ||
| 116 | - klass->parent_class.change_widget = change_widget; | ||
| 117 | - klass->parent_class.get_state = get_state; | ||
| 118 | - klass->parent_class.get_state_type = get_state_type; | 121 | + klass->parent_class.parent_class.change_widget = change_widget; |
| 122 | + klass->parent_class.parent_class.get_state = get_state; | ||
| 123 | + klass->parent_class.parent_class.get_state_type = get_state_type; | ||
| 124 | + klass->parent_class.parent_class.activate = activate; | ||
| 125 | + klass->parent_class.parent_class.get_enabled = get_enabled; | ||
| 119 | 126 | ||
| 120 | } | 127 | } |
| 121 | 128 | ||
| 122 | void Lib3270ToggleAction_init(Lib3270ToggleAction *action) { | 129 | void Lib3270ToggleAction_init(Lib3270ToggleAction *action) { |
| 123 | - action->parent.activate = activate; | ||
| 124 | - action->parent.translation_domain = lib3270_get_translation_domain(); | ||
| 125 | } | 130 | } |
| 126 | 131 | ||
| 127 | GAction * g_action_new_from_toggle(const LIB3270_TOGGLE * definition) { | 132 | GAction * g_action_new_from_toggle(const LIB3270_TOGGLE * definition) { |
| 128 | 133 | ||
| 129 | Lib3270ToggleAction * action = (Lib3270ToggleAction *) g_object_new(LIB3270_TYPE_TOGGLE_ACTION, NULL); | 134 | Lib3270ToggleAction * action = (Lib3270ToggleAction *) g_object_new(LIB3270_TYPE_TOGGLE_ACTION, NULL); |
| 130 | - action->parent.info = (const LIB3270_PROPERTY *) definition; | ||
| 131 | - | 135 | + action->parent.definition = (const LIB3270_PROPERTY *) definition; |
| 132 | return G_ACTION(action); | 136 | return G_ACTION(action); |
| 133 | 137 | ||
| 134 | } | 138 | } |