Commit b0ece9a932a7239cf7fc14888c88ec7aae51cd58
1 parent
7f11a0a3
Exists in
master
and in
5 other branches
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 | ... | ... |