Commit b0ece9a932a7239cf7fc14888c88ec7aae51cd58

Authored by perry.werneck@gmail.com
1 parent 7f11a0a3

Implementando acessibilidade

Showing 1 changed file with 112 additions and 14 deletions   Show diff stats
src/gtk/v3270/accessible.c
... ... @@ -52,7 +52,7 @@
52 52 /*--[ Prototipes ]-----------------------------------------------------------------------------------*/
53 53  
54 54 static void atk_component_interface_init (AtkComponentIface *iface);
55   -
  55 +static void atk_action_interface_init (AtkActionIface *iface);
56 56 static void v3270_accessible_class_init (v3270AccessibleClass *klass);
57 57 static void v3270_accessible_init (v3270Accessible *widget);
58 58  
... ... @@ -62,7 +62,9 @@ static void atk_text_interface_init (AtkTextIface *iface);
62 62  
63 63 G_DEFINE_TYPE_WITH_CODE (v3270Accessible, v3270_accessible, GTK_TYPE_ACCESSIBLE,
64 64 G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, atk_component_interface_init)
65   - G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init) )
  65 + G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)
  66 + G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init)
  67 + )
66 68  
67 69 // G_IMPLEMENT_INTERFACE (ATK_TYPE_EDITABLE_TEXT, atk_editable_text_interface_init) )
68 70 // G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)
... ... @@ -71,12 +73,25 @@ G_DEFINE_TYPE_WITH_CODE (v3270Accessible, v3270_accessible, GTK_TYPE_ACCESSIBLE,
71 73  
72 74 /*--[ Implement ]------------------------------------------------------------------------------------*/
73 75  
  76 +/*
  77 +static const gchar * v3270_accessible_get_description (AtkObject *accessible)
  78 +{
  79 + GtkWidget *widget = gtk_accessible_get_widget(GTK_ACCESSIBLE (accessible));
  80 +
  81 + if (widget == NULL)
  82 + return NULL;
  83 +
  84 + return _( "3270 screen" );
  85 +}
  86 +*/
  87 +
74 88 static void v3270_accessible_class_init(v3270AccessibleClass *klass)
75 89 {
76 90 AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
77 91  
  92 +// class->get_description = v3270_accessible_get_description;
  93 +
78 94 /*
79   - class->get_description = v3270_accessible_get_description;
80 95  
81 96  
82 97 klass->notify_gtk = gtk_widget_accessible_notify_gtk;
... ... @@ -91,16 +106,45 @@ static void v3270_accessible_class_init(v3270AccessibleClass *klass)
91 106 */
92 107 }
93 108  
94   -static void atk_component_interface_init(AtkComponentIface *iface)
  109 +static gint v3270_accessible_get_n_actions(AtkAction *action)
  110 +{
  111 + return 1;
  112 +}
  113 +
  114 +static const gchar* v3270_accessible_action_get_name (AtkAction *action, gint i)
  115 +{
  116 + if (i != 0)
  117 + return NULL;
  118 +
  119 + return "activate";
  120 +}
  121 +
  122 +static gboolean v3270_accessible_do_action(AtkAction *action, gint i)
95 123 {
  124 + GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action));
  125 +
  126 + if(widget == NULL)
  127 + return FALSE;
  128 +
  129 + if(!gtk_widget_get_sensitive (widget) || !gtk_widget_get_visible (widget))
  130 + return FALSE;
  131 +
  132 + if (i != 0)
  133 + return FALSE;
  134 +
  135 + gtk_widget_activate(widget);
  136 +
  137 + return TRUE;
  138 +}
  139 +
  140 +static void atk_action_interface_init(AtkActionIface *iface)
  141 +{
  142 + iface->get_name = v3270_accessible_action_get_name;
  143 + iface->get_n_actions = v3270_accessible_get_n_actions;
  144 + iface->do_action = v3270_accessible_do_action;
  145 +
96 146 /*
97   - iface->get_extents = gtk_widget_accessible_get_extents;
98   - iface->get_size = gtk_widget_accessible_get_size;
99   - iface->get_layer = gtk_widget_accessible_get_layer;
100   - iface->grab_focus = gtk_widget_accessible_grab_focus;
101   - iface->set_extents = gtk_widget_accessible_set_extents;
102   - iface->set_position = gtk_widget_accessible_set_position;
103   - iface->set_size = gtk_widget_accessible_set_size;
  147 + iface->get_keybinding = gtk_entry_accessible_get_keybinding;
104 148 */
105 149 }
106 150  
... ... @@ -215,8 +259,6 @@ static void v3270_accessible_get_character_extents( AtkText *text,
215 259 GdkWindow * window;
216 260 gint x_window, y_window;
217 261  
218   - trace("**************************** %s",__FUNCTION__);
219   -
220 262 if (widget == NULL)
221 263 return;
222 264  
... ... @@ -241,6 +283,8 @@ static void v3270_accessible_get_character_extents( AtkText *text,
241 283 *y -= y_window;
242 284 }
243 285  
  286 + trace("%s: offset=%d x=%d y=%d",__FUNCTION__,offset,x,y);
  287 +
244 288 }
245 289  
246 290 static gchar * v3270_accessible_get_text_at_offset(AtkText *atk_text, gint offset, AtkTextBoundary boundary_type, gint *start_offset, gint *end_offset)
... ... @@ -412,10 +456,64 @@ static void atk_text_interface_init(AtkTextIface *iface)
412 456 static void v3270_accessible_init(v3270Accessible *widget)
413 457 {
414 458 AtkObject *obj = ATK_OBJECT(widget);
  459 + obj->role = ATK_ROLE_TEXT;
  460 +}
415 461  
416 462  
417   - obj->role = ATK_ROLE_TEXT;
  463 +void v3270_accessible_get_extents(AtkComponent *component, gint *x, gint *y,gint *width,gint *height, AtkCoordType coord_type)
  464 +{
  465 + GtkWidget *widget = gtk_accessible_get_widget(GTK_ACCESSIBLE (component));
  466 + GdkWindow *window;
  467 + gint x_window, y_window;
  468 + GtkAllocation allocation;
  469 +
  470 + if (widget == NULL)
  471 + return;
  472 +
  473 + gtk_widget_get_allocation (widget, &allocation);
  474 + *width = allocation.width;
  475 + *height = allocation.height;
  476 +
  477 + if(gtk_widget_get_parent(widget))
  478 + {
  479 + *x = allocation.x;
  480 + *y = allocation.y;
  481 + window = gtk_widget_get_parent_window (widget);
  482 + }
  483 + else
  484 + {
  485 + *x = 0;
  486 + *y = 0;
  487 + window = gtk_widget_get_window (widget);
  488 + }
  489 +
  490 + gdk_window_get_origin(window, &x_window, &y_window);
  491 + *x += x_window;
  492 + *y += y_window;
  493 +
  494 + if (coord_type == ATK_XY_WINDOW)
  495 + {
  496 + gint x_toplevel, y_toplevel;
  497 +
  498 + window = gdk_window_get_toplevel (gtk_widget_get_window (widget));
  499 + gdk_window_get_origin (window, &x_toplevel, &y_toplevel);
  500 +
  501 + *x -= x_toplevel;
  502 + *y -= y_toplevel;
  503 + }
418 504 }
419 505  
  506 +static void atk_component_interface_init(AtkComponentIface *iface)
  507 +{
  508 + iface->get_extents = v3270_accessible_get_extents;
420 509  
  510 +/*
  511 + iface->get_size = gtk_widget_accessible_get_size;
  512 + iface->get_layer = gtk_widget_accessible_get_layer;
  513 + iface->grab_focus = gtk_widget_accessible_grab_focus;
  514 + iface->set_extents = gtk_widget_accessible_set_extents;
  515 + iface->set_position = gtk_widget_accessible_set_position;
  516 + iface->set_size = gtk_widget_accessible_set_size;
  517 +*/
  518 +}
421 519  
... ...