Commit fc3438274130fcd419e9de9f0a189d512375b11f

Authored by Perry Werneck
1 parent 766bb646

Refactoring toggle action.

Makefile.in
... ... @@ -88,6 +88,7 @@ BINRLS=$(BINDIR)/Release
88 88 DEPENDS= \
89 89 Makefile \
90 90 src/include/*.h \
  91 + src/include/pw3270/*.h \
91 92 src/objects/toolbar/private.h \
92 93 src/objects/window/private.h \
93 94 src/objects/actions/private.h \
... ...
src/include/pw3270/actions.h
... ... @@ -56,14 +56,21 @@
56 56  
57 57 GObject parent;
58 58  
59   - const gchar * name; /// @brief Action name (const string).
60   - GVariantType * parameter_type; /// @brief Parameter type.
61   - GVariant * state; /// @brief Action state.
62   - GtkWidget * terminal; /// @brief The active terminal widget.
  59 + const gchar * name; ///> @brief Action name (const string).
  60 + GtkWidget * terminal; ///> @brief The active terminal widget.
  61 +
  62 + struct {
  63 + const GVariantType * state; ///> @brief State type type.
  64 + const GVariantType * parameter; ///> @brief Parameter type.
  65 + } types;
63 66  
64 67 /// @brief Activation method.
65 68 void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal);
66 69  
  70 + /// @brief Get State method.
  71 + GVariant * (*get_state_property)(GAction *action, GtkWidget *terminal);
  72 +
  73 +
67 74 } pw3270Action;
68 75  
69 76 typedef struct _pw3270ActionClass {
... ... @@ -77,7 +84,7 @@
77 84  
78 85 void (*change_widget)(GAction *action, GtkWidget *from, GtkWidget *to);
79 86 gboolean (*get_enabled)(GAction *action, GtkWidget *terminal);
80   - const GVariantType * (*get_parameter_type)(GAction *action);
  87 +
81 88 const gchar * (*get_icon_name)(GAction *action);
82 89 const gchar * (*get_label)(GAction *action);
83 90 const gchar * (*get_tooltip)(GAction *action);
... ...
src/objects/actions/abstract.c
... ... @@ -46,9 +46,12 @@
46 46  
47 47 static void finalize(GObject *object);
48 48  
49   - static const GVariantType * pw3270_action_get_state_type(GAction *action);
50   - static GVariant * pw3270_action_get_state_property(GAction *action);
51   - static const GVariantType * pw3270_action_get_parameter_type(GAction *action);
  49 + static const GVariantType * get_state_type(GAction *action);
  50 + static GVariant * get_state_property(GAction *action);
  51 +
  52 + static GVariant * internal_get_state_property(GAction *action, GtkWidget *terminal);
  53 +
  54 + static const GVariantType * get_parameter_type(GAction *action);
52 55 static GVariant * pw3270_action_get_state_hint(GAction *action);
53 56 static void pw3270_action_change_state(GAction *action, GVariant *value);
54 57  
... ... @@ -72,20 +75,15 @@
72 75  
73 76 void pw3270_action_iface_init(GActionInterface *iface) {
74 77 iface->get_name = pw3270_action_get_name;
75   - iface->get_parameter_type = pw3270_action_get_parameter_type;
76   - iface->get_state_type = pw3270_action_get_state_type;
  78 + iface->get_parameter_type = get_parameter_type;
  79 + iface->get_state_type = get_state_type;
77 80 iface->get_state_hint = pw3270_action_get_state_hint;
78 81 iface->get_enabled = pw3270_action_get_enabled;
79   - iface->get_state = pw3270_action_get_state_property;
  82 + iface->get_state = get_state_property;
80 83 iface->change_state = pw3270_action_change_state;
81 84 iface->activate = pw3270_action_activate;
82 85 }
83 86  
84   - static const GVariantType * get_parameter_type(GAction G_GNUC_UNUSED(*action))
85   - {
86   - return NULL;
87   - }
88   -
89 87 void pw3270Action_class_init(pw3270ActionClass *klass) {
90 88  
91 89 GObjectClass *object_class = G_OBJECT_CLASS(klass);
... ... @@ -94,7 +92,6 @@
94 92  
95 93 klass->change_widget = change_widget;
96 94 klass->get_enabled = get_enabled;
97   - klass->get_parameter_type = get_parameter_type;
98 95 klass->get_icon_name = get_null;
99 96 klass->get_label = get_null;
100 97 klass->get_tooltip = get_null;
... ... @@ -171,9 +168,11 @@
171 168  
172 169 void pw3270Action_init(pw3270Action *action) {
173 170  
174   - action->terminal = NULL;
175   - action->state = NULL;
176   - action->activate = activate;
  171 + action->terminal = NULL;
  172 + action->types.parameter = NULL;
  173 +
  174 + action->activate = activate;
  175 + action->get_state_property = internal_get_state_property;
177 176  
178 177 }
179 178  
... ... @@ -181,30 +180,11 @@
181 180  
182 181 pw3270Action * action = PW3270_ACTION(object);
183 182  
184   -// debug("Finalizing action %p (%s)",object,action->name);
185   -
186   - if(action->state) {
187   - g_variant_unref(action->state);
188   - action->state = NULL;
189   - }
190   -
191 183 if(action->terminal) {
192 184 pw3270_action_set_terminal_widget(G_ACTION(object),NULL);
193 185 action->terminal = NULL;
194 186 }
195 187  
196   - /*
197   - if(action->name) {
198   - g_free(action->name);
199   - action->name = NULL;
200   - }
201   - */
202   -
203   - if(action->parameter_type) {
204   - g_variant_type_free(action->parameter_type);
205   - action->parameter_type = NULL;
206   - }
207   -
208 188 G_OBJECT_CLASS(pw3270Action_parent_class)->finalize(object);
209 189  
210 190 }
... ... @@ -221,7 +201,7 @@
221 201 break;
222 202  
223 203 case PROP_PARAMETER_TYPE:
224   - g_value_set_boxed(value, pw3270_action_get_parameter_type(action));
  204 + g_value_set_boxed(value, get_parameter_type(action));
225 205 break;
226 206  
227 207 case PROP_ENABLED:
... ... @@ -229,11 +209,11 @@
229 209 break;
230 210  
231 211 case PROP_STATE_TYPE:
232   - g_value_set_boxed(value, pw3270_action_get_state_type(action));
  212 + g_value_set_boxed(value, get_state_type(action));
233 213 break;
234 214  
235 215 case PROP_STATE:
236   - g_value_take_variant(value, pw3270_action_get_state_property(action));
  216 + g_value_take_variant(value, get_state_property(action));
237 217 break;
238 218  
239 219 default:
... ... @@ -283,24 +263,38 @@
283 263  
284 264 }
285 265  
286   - GVariant * pw3270_action_get_state_property(GAction *object) {
287   - pw3270Action *action = PW3270_ACTION(object);
288   - return action->state ? g_variant_ref(action->state) : NULL;
289   - }
  266 + GVariant * internal_get_state_property(GAction *object, GtkWidget G_GNUC_UNUSED(*terminal)) {
  267 +
  268 + pw3270Action * action = PW3270_ACTION(object);
  269 +
  270 + if(action->types.state == G_VARIANT_TYPE_BOOLEAN)
  271 + return g_variant_new_boolean(TRUE);
290 272  
291   - const GVariantType * pw3270_action_get_parameter_type(GAction *action) {
292   - return PW3270_ACTION_GET_CLASS(action)->get_parameter_type(action);
  273 + return NULL;
293 274 }
294 275  
295   - const GVariantType * pw3270_action_get_state_type(GAction *object) {
  276 + GVariant * get_state_property(GAction *object) {
296 277  
297   - pw3270Action * action = PW3270_ACTION(object);
  278 + pw3270Action * action = PW3270_ACTION(object);
  279 + GVariant * state;
298 280  
299   - if(action->state)
300   - return g_variant_get_type(action->state);
  281 + if(action->terminal)
  282 + state = action->get_state_property(object,action->terminal);
  283 + else
  284 + state = internal_get_state_property(object,NULL);
301 285  
302   - return NULL;
  286 + if(state)
  287 + g_variant_ref(state);
  288 +
  289 + return state;
  290 + }
303 291  
  292 + const GVariantType * get_parameter_type(GAction *action) {
  293 + return PW3270_ACTION(action)->types.parameter;
  294 + }
  295 +
  296 + const GVariantType * get_state_type(GAction *object) {
  297 + return PW3270_ACTION(object)->types.state;
304 298 }
305 299  
306 300 GVariant * pw3270_action_get_state_hint(GAction G_GNUC_UNUSED(*action)) {
... ... @@ -320,6 +314,7 @@
320 314  
321 315 void pw3270_action_set_state(GAction *object, GVariant *value) {
322 316  
  317 + /*
323 318 if(value) {
324 319  
325 320 pw3270Action * action = PW3270_ACTION(object);
... ... @@ -344,6 +339,7 @@
344 339 g_variant_unref(value);
345 340  
346 341 }
  342 + */
347 343  
348 344 }
349 345  
... ...
src/objects/actions/lib3270/pakey.c
... ... @@ -94,18 +94,10 @@
94 94  
95 95 }
96 96  
97   - static const GVariantType * get_parameter_type(GAction G_GNUC_UNUSED(*action))
98   - {
99   - return G_VARIANT_TYPE_UINT16;
100   - }
101   -
102 97 void Lib3270PaAction_class_init(Lib3270PaActionClass *klass) {
103 98  
104   - pw3270ActionClass * action = PW3270_ACTION_CLASS(klass);
105   -
106   - action->get_enabled = get_enabled;
107   - action->change_widget = change_widget;
108   - action->get_parameter_type = get_parameter_type;
  99 + klass->parent_class.get_enabled = get_enabled;
  100 + klass->parent_class.change_widget = change_widget;
109 101  
110 102 }
111 103  
... ...
src/objects/actions/lib3270/pfkey.c
... ... @@ -94,17 +94,20 @@
94 94  
95 95 }
96 96  
97   - static const GVariantType * get_parameter_type(GAction G_GNUC_UNUSED(*action)) {
98   - return G_VARIANT_TYPE_UINT16;
99   - }
100   -
101 97 void Lib3270PfAction_class_init(Lib3270PfActionClass *klass) {
102 98  
  99 + klass->parent_class.get_enabled = get_enabled;
  100 + klass->parent_class.change_widget = change_widget;
  101 +
  102 + /*
103 103 pw3270ActionClass * action = PW3270_ACTION_CLASS(klass);
104 104  
105 105 action->get_enabled = get_enabled;
106 106 action->change_widget = change_widget;
  107 +
  108 + action->
107 109 action->get_parameter_type = get_parameter_type;
  110 +*/
108 111  
109 112 }
110 113  
... ...
src/objects/actions/lib3270/toggle.c
... ... @@ -104,8 +104,18 @@
104 104  
105 105 void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) {
106 106  
107   - pw3270ActionClass * action = PW3270_ACTION_CLASS(klass);
108   - action->change_widget = change_widget;
  107 + klass->parent_class.change_widget = change_widget;
  108 +
  109 + }
  110 +
  111 + static GVariant * get_state_property(GAction *action, GtkWidget *terminal) {
  112 +
  113 + return g_variant_new_boolean(
  114 + lib3270_get_toggle(
  115 + v3270_get_session(terminal),
  116 + PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id
  117 + )
  118 + );
109 119  
110 120 }
111 121  
... ... @@ -114,8 +124,12 @@
114 124 action->definition = NULL;
115 125 action->listener = NULL;
116 126  
117   - action->parent.activate = activate;
118   - action->parent.name = "toggle";
  127 + action->parent.name = "toggle";
  128 +
  129 + action->parent.get_state_property = get_state_property;
  130 + action->parent.activate = activate;
  131 +
  132 + action->parent.types.state = G_VARIANT_TYPE_BOOLEAN;
119 133  
120 134 }
121 135  
... ...
src/objects/application/actions/window.c
... ... @@ -35,7 +35,7 @@
35 35 #include <pw3270/application.h>
36 36  
37 37  
38   - void pw3270_application_quit_activated(GSimpleAction * action, GVariant *parameter, gpointer application) {
  38 + void pw3270_application_quit_activated(GSimpleAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), gpointer G_GNUC_UNUSED(application)) {
39 39  
40 40 g_print("Exiting application\n");
41 41  
... ...
ui/application.xml
... ... @@ -148,6 +148,7 @@
148 148 </item>
149 149  
150 150 </section>
  151 +
151 152  
152 153 <section>
153 154  
... ... @@ -204,6 +205,12 @@
204 205  
205 206 </submenu>
206 207  
  208 + <submenu id="view-menu-placeholder">
  209 +
  210 + <attribute name='label' translatable='yes'>_View</attribute>
  211 +
  212 + </submenu>
  213 +
207 214 <submenu>
208 215  
209 216 <attribute name='label' translatable='yes'>_Network</attribute>
... ...