Commit e459184ea2465ff3039a9e629a673c5727485e62

Authored by Perry Werneck
1 parent f50da19d
Exists in master and in 1 other branch develop

Refactoring standard V3270 action object.

src/include/v3270/actions.h
@@ -120,11 +120,6 @@ @@ -120,11 +120,6 @@
120 const LIB3270_PROPERTY * info; ///> @brief Action info. 120 const LIB3270_PROPERTY * info; ///> @brief Action info.
121 const void * listener; ///> @brief Signal listener for the action group. 121 const void * listener; ///> @brief Signal listener for the action group.
122 122
123 - struct {  
124 - const GVariantType * state; ///> @brief State type type.  
125 - const GVariantType * parameter; ///> @brief Parameter type.  
126 - } types;  
127 -  
128 /// @brief Activation method. 123 /// @brief Activation method.
129 void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); 124 void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal);
130 125
@@ -139,11 +134,14 @@ @@ -139,11 +134,14 @@
139 GParamSpec * enabled; 134 GParamSpec * enabled;
140 } properties; 135 } properties;
141 136
  137 + struct {
  138 + const GVariantType * type; ///> @brief State type.
  139 + } state;
  140 +
142 void (*change_widget)(GAction *action, GtkWidget *from, GtkWidget *to); 141 void (*change_widget)(GAction *action, GtkWidget *from, GtkWidget *to);
143 - gboolean (*get_enabled)(GAction *action, GtkWidget *terminal);  
144 142
145 - GVariant * (*get_state)(GAction *action, GtkWidget *terminal);  
146 - GVariant * (*get_state_hint)(GAction *action, GtkWidget *terminal); 143 + gboolean (*get_enabled)(GAction *action, GtkWidget *terminal);
  144 + GVariant * (*get_state)(GAction *action, GtkWidget *terminal);
147 145
148 } V3270ActionClass; 146 } V3270ActionClass;
149 147
src/terminal/actions/action.c
@@ -43,27 +43,22 @@ @@ -43,27 +43,22 @@
43 static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); 43 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); 44 static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
45 45
46 - static gboolean get_enabled(GAction *action);  
47 - static void activate(GAction *action, GVariant *parameter);  
48 -  
49 static void change_widget(GAction *action, GtkWidget *from, GtkWidget *to); 46 static void change_widget(GAction *action, GtkWidget *from, GtkWidget *to);
50 -  
51 static void finalize(GObject *object); 47 static void finalize(GObject *object);
52 48
53 - static const GVariantType * get_state_type(GAction *action);  
54 - static GVariant * get_state_property(GAction *action);  
55 -  
56 - static gboolean internal_get_enabled(GAction *action, GtkWidget *terminal);  
57 - static void internal_activate(GAction *action, GVariant *parameter, GtkWidget *terminal);  
58 -  
59 - static GVariant * internal_get_state(GAction *action, GtkWidget *terminal);  
60 - static GVariant * internal_get_state_hint(GAction *action, GtkWidget *terminal); 49 + static gboolean get_enabled(GAction *action, GtkWidget *terminal);
  50 + static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal);
  51 + static GVariant * get_state(GAction *action, GtkWidget *terminal);
61 52
62 - static const GVariantType * get_parameter_type(GAction *action);  
63 - static GVariant * get_state_hint(GAction *action);  
64 - static const gchar * get_name(GAction *action);  
65 -  
66 - static void change_state(GAction *action, GVariant *value); 53 + static const gchar * iface_get_name(GAction *action);
  54 + static const GVariantType * iface_get_parameter_type(GAction *action);
  55 + static GVariant * iface_get_state_hint(GAction *action);
  56 + static const GVariantType * iface_get_state_type(GAction *action);
  57 + static GVariant * iface_get_state(GAction *action);
  58 + static gboolean iface_get_enabled(GAction *action);
  59 + static GVariant * iface_get_state(GAction *object);
  60 + static void iface_change_state(GAction *object, GVariant *value);
  61 + static void iface_activate(GAction *object, GVariant *parameter);
67 62
68 enum { 63 enum {
69 PROP_NONE, 64 PROP_NONE,
@@ -79,17 +74,6 @@ @@ -79,17 +74,6 @@
79 74
80 G_DEFINE_TYPE_WITH_CODE(V3270Action, V3270Action, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE(G_TYPE_ACTION, V3270_action_iface_init)) 75 G_DEFINE_TYPE_WITH_CODE(V3270Action, V3270Action, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE(G_TYPE_ACTION, V3270_action_iface_init))
81 76
82 - void V3270_action_iface_init(GActionInterface *iface) {  
83 - iface->get_name = get_name;  
84 - iface->get_parameter_type = get_parameter_type;  
85 - iface->get_state_type = get_state_type;  
86 - iface->get_state_hint = get_state_hint;  
87 - iface->get_enabled = get_enabled;  
88 - iface->get_state = get_state_property;  
89 - iface->change_state = change_state;  
90 - iface->activate = activate;  
91 - }  
92 -  
93 void V3270Action_class_init(V3270ActionClass *klass) { 77 void V3270Action_class_init(V3270ActionClass *klass) {
94 78
95 GObjectClass *object_class = G_OBJECT_CLASS(klass); 79 GObjectClass *object_class = G_OBJECT_CLASS(klass);
@@ -97,10 +81,10 @@ @@ -97,10 +81,10 @@
97 debug("%s",__FUNCTION__); 81 debug("%s",__FUNCTION__);
98 82
99 klass->change_widget = change_widget; 83 klass->change_widget = change_widget;
100 - klass->get_enabled = internal_get_enabled;  
101 - klass->get_state = internal_get_state;  
102 - klass->get_state_hint = internal_get_state_hint; 84 + klass->get_enabled = get_enabled;
  85 + klass->get_state = get_state;
103 86
  87 + klass->state.type = NULL;
104 88
105 object_class->finalize = finalize; 89 object_class->finalize = finalize;
106 object_class->get_property = get_property; 90 object_class->get_property = get_property;
@@ -188,11 +172,7 @@ @@ -188,11 +172,7 @@
188 172
189 action->terminal = NULL; 173 action->terminal = NULL;
190 action->info = &default_info; 174 action->info = &default_info;
191 - action->types.parameter = NULL;  
192 -  
193 - action->activate = internal_activate;  
194 -// action->get_state_property = internal_get_state_property;  
195 -// action->get_state_hint = internal_get_state_hint; 175 + action->activate = activate;
196 176
197 } 177 }
198 178
@@ -217,7 +197,7 @@ @@ -217,7 +197,7 @@
217 197
218 switch (prop_id) { 198 switch (prop_id) {
219 case PROP_NAME: 199 case PROP_NAME:
220 - g_value_set_string(value, get_name(action)); 200 + g_value_set_string(value, g_action_get_name(action));
221 break; 201 break;
222 202
223 case PROP_ICON_NAME: 203 case PROP_ICON_NAME:
@@ -233,19 +213,19 @@ @@ -233,19 +213,19 @@
233 break; 213 break;
234 214
235 case PROP_PARAMETER_TYPE: 215 case PROP_PARAMETER_TYPE:
236 - g_value_set_boxed(value, get_parameter_type(action)); 216 + g_value_set_boxed(value, g_action_get_parameter_type(action));
237 break; 217 break;
238 218
239 case PROP_ENABLED: 219 case PROP_ENABLED:
240 - g_value_set_boolean(value, get_enabled(action)); 220 + g_value_set_boolean(value, g_action_get_enabled(action));
241 break; 221 break;
242 222
243 case PROP_STATE_TYPE: 223 case PROP_STATE_TYPE:
244 - g_value_set_boxed(value, get_state_type(action)); 224 + g_value_set_boxed(value, g_action_get_state_type(action));
245 break; 225 break;
246 226
247 case PROP_STATE: 227 case PROP_STATE:
248 - g_value_take_variant(value, get_state_property(action)); 228 + g_value_take_variant(value, g_action_get_state(action));
249 break; 229 break;
250 230
251 default: 231 default:
@@ -254,46 +234,8 @@ @@ -254,46 +234,8 @@
254 234
255 } 235 }
256 236
257 - void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) {  
258 - g_message("Action property \"%s\" is read-only",pspec->name);  
259 - }  
260 -  
261 - const gchar * get_name(GAction *action) {  
262 - return V3270_ACTION_GET_DESCRIPTOR(action)->name;  
263 - }  
264 -  
265 - GVariant * internal_get_state_hint(GAction G_GNUC_UNUSED(*action), GtkWidget G_GNUC_UNUSED(*terminal)) {  
266 - return NULL;  
267 - }  
268 -  
269 - GVariant * internal_get_state(GAction *object, GtkWidget G_GNUC_UNUSED(*terminal)) {  
270 -  
271 - V3270Action * action = V3270_ACTION(object);  
272 -  
273 - if(action->types.state == G_VARIANT_TYPE_BOOLEAN)  
274 - return g_variant_new_boolean(FALSE);  
275 -  
276 - return NULL;  
277 - }  
278 -  
279 - GVariant * get_state_property(GAction *object) {  
280 - return V3270_ACTION_GET_CLASS(object)->get_state(object,V3270_ACTION(object)->terminal);  
281 - }  
282 -  
283 - const GVariantType * get_parameter_type(GAction *action) {  
284 - return V3270_ACTION(action)->types.parameter;  
285 - }  
286 -  
287 - const GVariantType * get_state_type(GAction *object) {  
288 - return V3270_ACTION(object)->types.state;  
289 - }  
290 -  
291 - GVariant * get_state_hint(GAction *object) {  
292 - return V3270_ACTION_GET_CLASS(object)->get_state_hint(object,V3270_ACTION(object)->terminal);  
293 - }  
294 -  
295 - void change_state(GAction G_GNUC_UNUSED(*object), GVariant G_GNUC_UNUSED(*value)) {  
296 - debug("%s",__FUNCTION__); 237 + void set_property(GObject *object, guint G_GNUC_UNUSED(prop_id), const GValue G_GNUC_UNUSED(*value), GParamSpec *pspec) {
  238 + g_message("Action %s property %s is read-only",g_action_get_name(G_ACTION(object)),pspec->name);
297 } 239 }
298 240
299 static gboolean bg_notify_enabled(GObject *action) { 241 static gboolean bg_notify_enabled(GObject *action) {
@@ -338,7 +280,7 @@ @@ -338,7 +280,7 @@
338 280
339 g_idle_add((GSourceFunc) bg_notify_enabled, G_OBJECT(action)); 281 g_idle_add((GSourceFunc) bg_notify_enabled, G_OBJECT(action));
340 282
341 - if(action->types.state) 283 + if(V3270_ACTION_GET_CLASS(action)->state.type)
342 g_idle_add((GSourceFunc) bg_notify_state, G_OBJECT(action)); 284 g_idle_add((GSourceFunc) bg_notify_state, G_OBJECT(action));
343 285
344 } 286 }
@@ -367,43 +309,11 @@ @@ -367,43 +309,11 @@
367 return V3270_ACTION(object)->terminal; 309 return V3270_ACTION(object)->terminal;
368 } 310 }
369 311
370 - gboolean get_enabled(GAction *object) {  
371 -  
372 - V3270Action * action = V3270_ACTION(object);  
373 -  
374 - if(action && action->terminal) {  
375 -  
376 - if(action->info->group != LIB3270_ACTION_GROUP_NONE) {  
377 -  
378 - if(!lib3270_action_group_get_activatable(v3270_get_session(action->terminal),action->info->group))  
379 - return FALSE;  
380 -  
381 - }  
382 -  
383 - return V3270_ACTION_GET_CLASS(object)->get_enabled(object,action->terminal);  
384 - }  
385 -  
386 - return FALSE;  
387 -  
388 - }  
389 -  
390 - void activate(GAction *object, GVariant *parameter) {  
391 -  
392 - V3270Action * action = V3270_ACTION(object);  
393 -  
394 - debug("%s: terminal=%p",__FUNCTION__,action->terminal);  
395 -  
396 - if(action && action->terminal) {  
397 - action->activate(object,parameter,action->terminal);  
398 - }  
399 -  
400 - }  
401 -  
402 - gboolean internal_get_enabled(GAction G_GNUC_UNUSED(*object), GtkWidget *terminal) { 312 + gboolean get_enabled(GAction G_GNUC_UNUSED(*object), GtkWidget *terminal) {
403 return terminal != NULL; 313 return terminal != NULL;
404 } 314 }
405 315
406 - void internal_activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) { 316 + void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) {
407 g_message("Action %s can't be activated",g_action_get_name(action)); 317 g_message("Action %s can't be activated",g_action_get_name(action));
408 } 318 }
409 319
@@ -421,14 +331,23 @@ @@ -421,14 +331,23 @@
421 } 331 }
422 332
423 const gchar * v3270_action_get_tooltip(GAction *action) { 333 const gchar * v3270_action_get_tooltip(GAction *action) {
424 - const gchar * tooltip = V3270_ACTION_GET_DESCRIPTOR(action)->description;  
425 334
  335 + const gchar * tooltip;
  336 +
  337 + tooltip = V3270_ACTION_GET_DESCRIPTOR(action)->description;
  338 + if(tooltip)
  339 + return gettext(tooltip);
  340 +
  341 + tooltip = V3270_ACTION_GET_DESCRIPTOR(action)->summary;
426 if(tooltip) 342 if(tooltip)
427 return gettext(tooltip); 343 return gettext(tooltip);
428 344
429 return NULL; 345 return NULL;
430 } 346 }
431 347
  348 + //
  349 + // Action methods.
  350 + //
432 H3270 * v3270_action_get_session(GAction *action) { 351 H3270 * v3270_action_get_session(GAction *action) {
433 g_return_val_if_fail(V3270_IS_ACTION(action),NULL); 352 g_return_val_if_fail(V3270_IS_ACTION(action),NULL);
434 return v3270_get_session(V3270_ACTION(action)->terminal); 353 return v3270_get_session(V3270_ACTION(action)->terminal);
@@ -438,17 +357,6 @@ @@ -438,17 +357,6 @@
438 return G_ACTION(g_object_new(V3270_TYPE_ACTION, NULL)); 357 return G_ACTION(g_object_new(V3270_TYPE_ACTION, NULL));
439 } 358 }
440 359
441 - /*  
442 - static GdkPixbuf * pixbuf_from_icon_name(GValue *value, GtkIconSize icon_size) {  
443 -  
444 - const gchar * icon_name = g_value_get_string(value);  
445 -  
446 - if(!icon_name)  
447 - return NULL;  
448 -  
449 - }  
450 - */  
451 -  
452 GdkPixbuf * v3270_action_get_pixbuf(GAction *action, GtkIconSize icon_size, GtkIconLookupFlags flags) { 360 GdkPixbuf * v3270_action_get_pixbuf(GAction *action, GtkIconSize icon_size, GtkIconLookupFlags flags) {
453 361
454 const gchar * icon_name = v3270_action_get_icon_name(action); 362 const gchar * icon_name = v3270_action_get_icon_name(action);
@@ -466,3 +374,84 @@ @@ -466,3 +374,84 @@
466 374
467 } 375 }
468 376
  377 +//
  378 +// Default methods.
  379 +//
  380 + GVariant * get_state(GAction G_GNUC_UNUSED(*object), GtkWidget *terminal) {
  381 + return g_variant_new_boolean(terminal != NULL);
  382 + }
  383 +
  384 +//
  385 +// Interface Methods.
  386 +//
  387 + void V3270_action_iface_init(GActionInterface *iface) {
  388 + iface->get_name = iface_get_name;
  389 + iface->get_parameter_type = iface_get_parameter_type;
  390 + iface->get_state_type = iface_get_state_type;
  391 + iface->get_state_hint = iface_get_state_hint;
  392 + iface->get_enabled = iface_get_enabled;
  393 + iface->get_state = iface_get_state;
  394 + iface->change_state = iface_change_state;
  395 + iface->activate = iface_activate;
  396 + }
  397 +
  398 + const gchar * iface_get_name(GAction *action) {
  399 + return V3270_ACTION_GET_DESCRIPTOR(action)->name;
  400 + }
  401 +
  402 + GVariant * iface_get_state(GAction *object) {
  403 +
  404 + GtkWidget * terminal = V3270_ACTION(object)->terminal;
  405 +
  406 + if(!terminal)
  407 + g_variant_new_boolean(FALSE);
  408 +
  409 + return V3270_ACTION_GET_CLASS(object)->get_state(object,terminal);
  410 + }
  411 +
  412 + const GVariantType * iface_get_parameter_type(GAction G_GNUC_UNUSED(*action)) {
  413 + return NULL;
  414 + }
  415 +
  416 + const GVariantType * iface_get_state_type(GAction *object) {
  417 + return V3270_ACTION_GET_CLASS(object)->state.type;
  418 + }
  419 +
  420 + GVariant * iface_get_state_hint(GAction G_GNUC_UNUSED(*object)) {
  421 + return NULL;
  422 + }
  423 +
  424 + void iface_change_state(GAction G_GNUC_UNUSED(*object), GVariant G_GNUC_UNUSED(*value)) {
  425 + debug("%s",__FUNCTION__);
  426 + }
  427 +
  428 + gboolean iface_get_enabled(GAction *object) {
  429 +
  430 + V3270Action * action = V3270_ACTION(object);
  431 +
  432 + if(action && action->terminal) {
  433 +
  434 + if(action->info->group != LIB3270_ACTION_GROUP_NONE) {
  435 +
  436 + if(!lib3270_action_group_get_activatable(v3270_get_session(action->terminal),action->info->group))
  437 + return FALSE;
  438 +
  439 + }
  440 +
  441 + return V3270_ACTION_GET_CLASS(object)->get_enabled(object,action->terminal);
  442 + }
  443 +
  444 + return FALSE;
  445 +
  446 + }
  447 +
  448 + void iface_activate(GAction *object, GVariant *parameter) {
  449 +
  450 + V3270Action * action = V3270_ACTION(object);
  451 +
  452 + if(action && action->terminal) {
  453 + action->activate(object,parameter,action->terminal);
  454 + }
  455 +
  456 + }
  457 +
@@ -171,7 +171,6 @@ @@ -171,7 +171,6 @@
171 <Option compilerVar="CC" /> 171 <Option compilerVar="CC" />
172 </Unit> 172 </Unit>
173 <Unit filename="src/include/clipboard.h" /> 173 <Unit filename="src/include/clipboard.h" />
174 - <Unit filename="src/include/config.h" />  
175 <Unit filename="src/include/config.h.in" /> 174 <Unit filename="src/include/config.h.in" />
176 <Unit filename="src/include/hostselect.h" /> 175 <Unit filename="src/include/hostselect.h" />
177 <Unit filename="src/include/internals.h" /> 176 <Unit filename="src/include/internals.h" />