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 | } |