Commit f2ab9a417aa20cdc169bc6356a2a359a8e67e9e3

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

Refactoring actions.

src/terminal/actions/pakey.c
... ... @@ -88,7 +88,7 @@
88 88 }
89 89  
90 90 static gboolean get_enabled(GAction *action, GtkWidget *terminal) {
91   - return V3270_ACTION_GET_CLASS(action)->get_enabled(action,terminal);
  91 + return TRUE;
92 92 }
93 93  
94 94 void Lib3270PaAction_class_init(Lib3270PaActionClass *klass) {
... ...
src/terminal/actions/pfkey.c
... ... @@ -88,14 +88,13 @@
88 88 }
89 89  
90 90 static gboolean get_enabled(GAction *action, GtkWidget *terminal) {
91   - return V3270_ACTION_GET_CLASS(action)->get_enabled(action,terminal);
  91 + return TRUE;
92 92 }
93 93  
94 94 void Lib3270PfAction_class_init(Lib3270PfActionClass *klass) {
95 95 klass->parent_class.parent_class.get_parameter_type = get_parameter_type;
96 96 klass->parent_class.parent_class.activate = activate;
97 97 klass->parent_class.parent_class.get_enabled = get_enabled;
98   -
99 98 }
100 99  
101 100 void Lib3270PfAction_init(Lib3270PfAction *action) {
... ...
src/terminal/actions/table.c
... ... @@ -42,6 +42,25 @@
42 42 #define GDK_ALT_MASK GDK_MOD1_MASK
43 43 #endif
44 44  
  45 + #define LIB3270_TYPE_V3270_INTERNAL_ACTION (V270InternalAction_get_type())
  46 + #define V3270_INTERNAL_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), LIB3270_TYPE_V3270_INTERNAL_ACTION, V270InternalAction))
  47 +
  48 + #define GET_DESCRIPTOR(obj) ((const V3270_ACTION *) V3270_INTERNAL_ACTION(obj)->definition)
  49 +
  50 + typedef struct _V270InternalActionClass {
  51 + V3270ActionClass parent_class;
  52 + } V270InternalActionClass;
  53 +
  54 + typedef struct _V270InternalAction {
  55 + V3270Action parent;
  56 + const V3270_ACTION * definition;
  57 + } V270InternalAction;
  58 +
  59 + static void V270InternalAction_class_init(V270InternalActionClass *klass);
  60 + static void V270InternalAction_init(V270InternalAction *action);
  61 +
  62 + G_DEFINE_TYPE(V270InternalAction, V270InternalAction, V3270_TYPE_ACTION);
  63 +
45 64 /*--[ Globals ]--------------------------------------------------------------------------------------*/
46 65  
47 66 static const V3270_ACTION actions[] =
... ... @@ -344,31 +363,56 @@
344 363 return actions;
345 364 }
346 365  
347   - static void activate_v3270(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget *terminal)
348   - {
  366 + static const gchar * get_icon_name(GAction *action) {
  367 + return GET_DESCRIPTOR(action)->icon;
  368 + }
  369 +
  370 + static const gchar * get_label(GAction *action) {
  371 + return GET_DESCRIPTOR(action)->label;
  372 + }
  373 +
  374 + static const gchar * get_tooltip(GAction *action) {
  375 + return GET_DESCRIPTOR(action)->summary;
  376 + }
  377 +
  378 + static const gchar * get_name(GAction *action) {
  379 + return GET_DESCRIPTOR(action)->name;
  380 + }
  381 +
  382 + static void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget *terminal) {
  383 +
349 384 debug("Activating action \"%s\"",g_action_get_name(action));
350 385  
351   - /*
352   - V3270_ACTION * descriptor = (V3270_ACTION *) ((V3270Action *) action)->info;
353   - descriptor->activate(terminal,descriptor);
354   - */
  386 + const V3270_ACTION *descriptor = GET_DESCRIPTOR(action);
  387 +
  388 + descriptor->activate(terminal,descriptor);
355 389  
356 390 }
357 391  
358   - void g_action_map_add_v3270_actions(GActionMap *action_map)
359   - {
  392 + static void V270InternalAction_class_init(V270InternalActionClass *klass) {
  393 +
  394 + klass->parent_class.get_name = get_name;
  395 + klass->parent_class.get_icon_name = get_icon_name;
  396 + klass->parent_class.get_label = get_label;
  397 + klass->parent_class.get_tooltip = get_tooltip;
  398 + klass->parent_class.activate = activate;
  399 +
  400 + }
  401 +
  402 + static void V270InternalAction_init(V270InternalAction G_GNUC_UNUSED(*action)) {
  403 + }
  404 +
  405 + void g_action_map_add_v3270_actions(GActionMap *action_map) {
360 406  
361 407 const V3270_ACTION * actions = v3270_get_actions();
362 408 size_t ix;
363 409  
364   - /*
365 410 for(ix = 0; actions[ix].name; ix++) {
366 411  
367   - V3270Action * action = V3270_ACTION(g_object_new(V3270_TYPE_ACTION, NULL));
  412 + V270InternalAction * action = V3270_INTERNAL_ACTION(g_object_new(LIB3270_TYPE_V3270_INTERNAL_ACTION, NULL));
368 413  
369   - action->info = (const LIB3270_PROPERTY *) &actions[ix];
370   - action->activate = activate_v3270;
371   - action->translation_domain = GETTEXT_PACKAGE;
  414 + action->definition = &actions[ix];
  415 + action->parent.translation_domain = GETTEXT_PACKAGE;
372 416  
373 417 if(!g_action_get_name(G_ACTION(action))) {
374 418 g_warning("Action \"%s\" is invalid",actions[ix].name);
... ... @@ -377,7 +421,6 @@
377 421 }
378 422  
379 423 }
380   - */
381 424  
382 425 }
383 426  
... ...
src/terminal/actions/toggle.c
... ... @@ -113,7 +113,7 @@
113 113 }
114 114  
115 115 static gboolean get_enabled(GAction *action, GtkWidget *terminal) {
116   - return V3270_ACTION_GET_CLASS(action)->get_enabled(action,terminal);
  116 + return TRUE;
117 117 }
118 118  
119 119 void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) {
... ...
src/terminal/drawing/surface.c
... ... @@ -45,15 +45,18 @@
45 45 */
46 46 void v3270_reconfigure(v3270 * terminal)
47 47 {
48   - GtkAllocation allocation;
49   - GtkWidget *widget;
50   - GdkEvent *event = gdk_event_new(GDK_CONFIGURE);
  48 + GtkWidget * widget = GTK_WIDGET(terminal);
  49 + GdkWindow * window = gtk_widget_get_window(widget);
51 50  
52   - widget = GTK_WIDGET(terminal);
  51 + // If the widget isn't realized just return.
  52 + if(!window)
  53 + return;
53 54  
  55 + GtkAllocation allocation;
54 56 gtk_widget_get_allocation(widget, &allocation);
55 57  
56   - event->configure.window = g_object_ref(gtk_widget_get_window(widget));
  58 + GdkEvent *event = gdk_event_new(GDK_CONFIGURE);
  59 + event->configure.window = g_object_ref(window);
57 60 event->configure.send_event = TRUE;
58 61 event->configure.x = allocation.x;
59 62 event->configure.y = allocation.y;
... ... @@ -63,7 +66,7 @@ void v3270_reconfigure(v3270 * terminal)
63 66 if(terminal->surface)
64 67 cairo_surface_destroy(terminal->surface);
65 68  
66   - terminal->surface = (cairo_surface_t *) gdk_window_create_similar_surface(gtk_widget_get_window(widget),CAIRO_CONTENT_COLOR,allocation.width,allocation.height);
  69 + terminal->surface = (cairo_surface_t *) gdk_window_create_similar_surface(window,CAIRO_CONTENT_COLOR,allocation.width,allocation.height);
67 70  
68 71 // Update the created image
69 72 cairo_t * cr = cairo_create(terminal->surface);
... ... @@ -80,7 +83,9 @@ void v3270_reconfigure(v3270 * terminal)
80 83 #endif
81 84  
82 85 gtk_widget_event(widget, event);
  86 +
83 87 gdk_event_free(event);
84 88 }
85 89  
86 90  
  91 +
... ...