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 | 32 | #define V3270_ACTIONS_H_INCLUDED 1 |
33 | 33 | |
34 | 34 | #include <gtk/gtk.h> |
35 | + #include <lib3270.h> | |
35 | 36 | #include <lib3270/actions.h> |
36 | 37 | #include <lib3270/toggle.h> |
37 | 38 | |
... | ... | @@ -119,14 +120,10 @@ |
119 | 120 | GObject parent; |
120 | 121 | |
121 | 122 | GtkWidget * terminal; ///> @brief The active terminal widget. |
122 | - const LIB3270_PROPERTY * info; ///> @brief Action info. | |
123 | 123 | const void * listener; ///> @brief Signal listener for the action group. |
124 | 124 | |
125 | 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 | 127 | } V3270Action; |
131 | 128 | |
132 | 129 | typedef struct _V3270ActionClass { |
... | ... | @@ -138,21 +135,24 @@ |
138 | 135 | GParamSpec * enabled; |
139 | 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 | 157 | } V3270ActionClass; |
158 | 158 | |
... | ... | @@ -162,6 +162,8 @@ |
162 | 162 | LIB3270_EXPORT void v3270_action_set_terminal_widget(GAction *object, GtkWidget *widget); |
163 | 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 | 167 | LIB3270_EXPORT void v3270_action_notify_state(GAction *action); |
166 | 168 | LIB3270_EXPORT void v3270_action_notify_enabled(GAction *action); |
167 | 169 | |
... | ... | @@ -213,6 +215,7 @@ |
213 | 215 | /// @brief Activation method. |
214 | 216 | void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); |
215 | 217 | |
218 | + | |
216 | 219 | } V3270SimpleAction; |
217 | 220 | |
218 | 221 | typedef struct _V3270SimpleActionClass { | ... | ... |
src/terminal/actions/action.c
... | ... | @@ -34,8 +34,6 @@ |
34 | 34 | #include <lib3270.h> |
35 | 35 | #include <lib3270/log.h> |
36 | 36 | |
37 | - #define V3270_ACTION_GET_DESCRIPTOR(obj) ((V3270Action *) obj)->info | |
38 | - | |
39 | 37 | static void V3270_action_iface_init(GActionInterface *iface); |
40 | 38 | static void V3270Action_class_init(V3270ActionClass *klass); |
41 | 39 | static void V3270Action_init(V3270Action *action); |
... | ... | @@ -43,12 +41,10 @@ |
43 | 41 | static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); |
44 | 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 | 45 | static const GVariantType * get_state_type(GAction *action); |
51 | 46 | static const GVariantType * get_parameter_type(GAction *object); |
47 | + static LIB3270_ACTION_GROUP get_action_group(GAction *action); | |
52 | 48 | |
53 | 49 | static void change_widget(GAction *action, GtkWidget *from, GtkWidget *to); |
54 | 50 | static void finalize(GObject *object); |
... | ... | @@ -88,15 +84,18 @@ |
88 | 84 | |
89 | 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 | 93 | klass->change_widget = change_widget; |
92 | 94 | klass->get_enabled = get_enabled; |
93 | 95 | klass->get_state = get_state; |
94 | - klass->get_name = get_name; | |
95 | 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 | 99 | klass->get_state_type = get_state_type; |
101 | 100 | klass->get_parameter_type = get_parameter_type; |
102 | 101 | |
... | ... | @@ -180,13 +179,7 @@ |
180 | 179 | |
181 | 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 | 273 | |
281 | 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 | 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 | 281 | action->listener = NULL; |
288 | 282 | } |
289 | 283 | |
290 | 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 | 290 | g_idle_add((GSourceFunc) bg_notify_enabled, G_OBJECT(action)); |
... | ... | @@ -323,18 +317,29 @@ |
323 | 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 | 339 | void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) { |
331 | 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 | 344 | // Action methods. |
340 | 345 | // |
... | ... | @@ -447,9 +452,11 @@ |
447 | 452 | |
448 | 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 | 460 | return FALSE; |
454 | 461 | |
455 | 462 | } |
... | ... | @@ -466,42 +473,33 @@ |
466 | 473 | V3270Action * action = V3270_ACTION(object); |
467 | 474 | |
468 | 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 | 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 | 505 | const gchar * v3270_action_get_icon_name(GAction *action) { |
... | ... | @@ -509,17 +507,9 @@ |
509 | 507 | } |
510 | 508 | |
511 | 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 | 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 | 77 | } |
78 | 78 | |
79 | 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 | 84 | static void V3270DialogAction_init(V3270DialogAction *action) { |
84 | 85 | |
85 | 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 | 36 | #include <lib3270/actions.h> |
37 | 37 | #include <v3270.h> |
38 | 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 | 41 | static void Lib3270Action_class_init(Lib3270ActionClass *klass); |
53 | 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 | 46 | G_DEFINE_TYPE(Lib3270Action, Lib3270Action, V3270_TYPE_ACTION); |
58 | 47 | |
... | ... | @@ -85,21 +74,47 @@ |
85 | 74 | |
86 | 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 | 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 | 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 | 113 | G_OBJECT_CLASS(klass)->dispose = dispose; |
98 | 114 | |
99 | 115 | } |
100 | 116 | |
101 | 117 | void Lib3270Action_init(Lib3270Action *action) { |
102 | - action->parent.activate = activate; | |
103 | 118 | action->parent.translation_domain = lib3270_get_translation_domain(); |
104 | 119 | } |
105 | 120 | |
... | ... | @@ -108,7 +123,7 @@ |
108 | 123 | Lib3270Action * action = (Lib3270Action *) g_object_new(LIB3270_TYPE_ACTION, NULL); |
109 | 124 | |
110 | 125 | // Setup hooks. |
111 | - action->parent.info = (const LIB3270_PROPERTY *) definition; | |
126 | + action->definition = definition; | |
112 | 127 | |
113 | 128 | return G_ACTION(action); |
114 | 129 | } |
... | ... | @@ -123,7 +138,7 @@ |
123 | 138 | GAction *action = g_action_new_from_lib3270(&actions[ix]); |
124 | 139 | |
125 | 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 | 142 | } else { |
128 | 143 | g_action_map_add_action(action_map,action); |
129 | 144 | } | ... | ... |
src/terminal/actions/pakey.c
... | ... | @@ -35,24 +35,25 @@ |
35 | 35 | #include <internals.h> |
36 | 36 | #include <v3270.h> |
37 | 37 | #include <v3270/actions.h> |
38 | + #include "private.h" | |
38 | 39 | |
39 | 40 | #define LIB3270_TYPE_PA_ACTION (Lib3270PaAction_get_type()) |
40 | 41 | #define LIB3270_PA_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_PA_ACTION, Lib3270PaAction)) |
41 | 42 | #define LIB3270_IS_PA_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_PA_ACTION)) |
42 | 43 | |
43 | 44 | typedef struct _Lib3270PaActionClass { |
44 | - V3270ActionClass parent_class; | |
45 | + Lib3270ActionClass parent_class; | |
45 | 46 | |
46 | 47 | } Lib3270PaActionClass; |
47 | 48 | |
48 | 49 | typedef struct _Lib3270PaAction { |
49 | - V3270Action parent; | |
50 | + Lib3270Action parent; | |
50 | 51 | } Lib3270PaAction; |
51 | 52 | |
52 | 53 | static void Lib3270PaAction_class_init(Lib3270PaActionClass *klass); |
53 | 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 | 58 | static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { |
58 | 59 | |
... | ... | @@ -86,8 +87,14 @@ |
86 | 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 | 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 | 100 | void Lib3270PaAction_init(Lib3270PaAction *action) { |
... | ... | @@ -98,9 +105,8 @@ |
98 | 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 | 35 | #include <internals.h> |
36 | 36 | #include <v3270.h> |
37 | 37 | #include <v3270/actions.h> |
38 | + #include "private.h" | |
38 | 39 | |
39 | 40 | #define LIB3270_TYPE_PF_ACTION (Lib3270PfAction_get_type()) |
40 | 41 | #define LIB3270_PF_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_PF_ACTION, Lib3270PfAction)) |
41 | 42 | #define LIB3270_IS_PF_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), LIB3270_TYPE_PF_ACTION)) |
42 | 43 | |
43 | 44 | typedef struct _Lib3270PfActionClass { |
44 | - V3270ActionClass parent_class; | |
45 | + Lib3270ActionClass parent_class; | |
45 | 46 | |
46 | 47 | } Lib3270PfActionClass; |
47 | 48 | |
48 | 49 | typedef struct _Lib3270PfAction { |
49 | - V3270Action parent; | |
50 | + Lib3270Action parent; | |
50 | 51 | } Lib3270PfAction; |
51 | 52 | |
52 | 53 | static void Lib3270PfAction_class_init(Lib3270PfActionClass *klass); |
53 | 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 | 58 | static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { |
58 | 59 | |
... | ... | @@ -86,8 +87,15 @@ |
86 | 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 | 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 | 101 | void Lib3270PfAction_init(Lib3270PfAction *action) { |
... | ... | @@ -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 | 28 | */ |
29 | 29 | |
30 | 30 | #include <config.h> |
31 | + | |
32 | + #include <glib.h> | |
33 | + #include <gtk/gtk.h> | |
34 | + | |
31 | 35 | #include <v3270.h> |
32 | 36 | #include <v3270/actions.h> |
33 | 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 | 58 | G_GNUC_INTERNAL int fire_copy_accelerator(GtkWidget *widget, const V3270_ACTION *action); |
36 | 59 | G_GNUC_INTERNAL int fire_paste_accelerator(GtkWidget *widget, const V3270_ACTION *action); |
37 | 60 | G_GNUC_INTERNAL int fire_zoom_action(GtkWidget *widget, const V3270_ACTION *action); | ... | ... |
src/terminal/actions/property.c
... | ... | @@ -73,14 +73,17 @@ |
73 | 73 | static const GVariantType * get_state_type(GAction *object); |
74 | 74 | static const GVariantType * get_parameter_type(GAction *object); |
75 | 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 | 79 | G_DEFINE_TYPE(v3270PropertyAction, v3270PropertyAction, V3270_TYPE_SIMPLE_ACTION); |
78 | 80 | |
79 | 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 | 89 | static void v3270PropertyAction_init(v3270PropertyAction G_GNUC_UNUSED(*action)) { |
... | ... | @@ -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 | 142 | v3270PropertyAction * action = V3270_PROPERTY_ACTION(object); |
140 | 143 | |
... | ... | @@ -246,7 +249,6 @@ |
246 | 249 | if(!action->parent.tooltip) |
247 | 250 | action->parent.tooltip = g_param_spec_get_blurb(pspec); |
248 | 251 | |
249 | - action->parent.parent.activate = activate; | |
250 | 252 | action->pspec = pspec; |
251 | 253 | action->parent.group.id = action_group; |
252 | 254 | ... | ... |
src/terminal/actions/simple.c
... | ... | @@ -41,10 +41,6 @@ |
41 | 41 | |
42 | 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 | 44 | static const gchar * get_icon_name(GAction *action) { |
49 | 45 | return V3270_SIMPLE_ACTION(action)->icon_name; |
50 | 46 | } |
... | ... | @@ -73,25 +69,34 @@ |
73 | 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 | 76 | static void V3270SimpleAction_class_init(V3270SimpleActionClass *klass) { |
77 | 77 | |
78 | 78 | klass->parent_class.get_name = get_name; |
79 | 79 | klass->parent_class.get_icon_name = get_icon_name; |
80 | 80 | klass->parent_class.get_label = get_label; |
81 | 81 | klass->parent_class.get_tooltip = get_tooltip; |
82 | + klass->parent_class.activate = klass_activate; | |
82 | 83 | |
83 | 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 | 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 | 348 | { |
349 | 349 | debug("Activating action \"%s\"",g_action_get_name(action)); |
350 | 350 | |
351 | + /* | |
351 | 352 | V3270_ACTION * descriptor = (V3270_ACTION *) ((V3270Action *) action)->info; |
352 | 353 | descriptor->activate(terminal,descriptor); |
354 | + */ | |
353 | 355 | |
354 | 356 | } |
355 | 357 | |
... | ... | @@ -359,6 +361,7 @@ |
359 | 361 | const V3270_ACTION * actions = v3270_get_actions(); |
360 | 362 | size_t ix; |
361 | 363 | |
364 | + /* | |
362 | 365 | for(ix = 0; actions[ix].name; ix++) { |
363 | 366 | |
364 | 367 | V3270Action * action = V3270_ACTION(g_object_new(V3270_TYPE_ACTION, NULL)); |
... | ... | @@ -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 | 35 | #include <internals.h> |
36 | 36 | #include <v3270.h> |
37 | 37 | #include <v3270/actions.h> |
38 | + #include "private.h" | |
38 | 39 | |
39 | 40 | #define LIB3270_TYPE_TOGGLE_ACTION (Lib3270ToggleAction_get_type()) |
40 | 41 | #define LIB3270_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_TOGGLE_ACTION, Lib3270ToggleAction)) |
41 | 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 | 46 | typedef struct _Lib3270ToggleActionClass { |
46 | - V3270ActionClass parent_class; | |
47 | + Lib3270ActionClass parent_class; | |
47 | 48 | } Lib3270ToggleActionClass; |
48 | 49 | |
49 | 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 | 53 | } Lib3270ToggleAction; |
53 | 54 | |
54 | 55 | static void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass); |
55 | 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 | 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 | 61 | v3270_action_notify_state(G_ACTION(action)); |
... | ... | @@ -111,24 +112,27 @@ |
111 | 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 | 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 | 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 | 132 | GAction * g_action_new_from_toggle(const LIB3270_TOGGLE * definition) { |
128 | 133 | |
129 | 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 | 136 | return G_ACTION(action); |
133 | 137 | |
134 | 138 | } | ... | ... |