X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=test%2Fsimple-at.c;h=63bec0afbafaf94832a51022ca21f69126e3f947;hb=4653a37c7f84b40047393325fe59ba4e97b9a9a9;hp=35ffec3b9fd5efe55cb348d53ff36cf54727a24f;hpb=5d068548ecc323fedcc3899be9a2fe68aa9ea9eb;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/test/simple-at.c b/test/simple-at.c index 35ffec3..63bec0a 100644 --- a/test/simple-at.c +++ b/test/simple-at.c @@ -24,33 +24,45 @@ #include #include #include +#include #include #include "../util/mag_client.h" #include "../cspi/spi-private.h" /* A hack for now */ -static void report_focus_event (AccessibleEvent *event, void *user_data); -static void report_generic_event (AccessibleEvent *event, void *user_data); -static void report_button_press (AccessibleEvent *event, void *user_data); -static void check_property_change (AccessibleEvent *event, void *user_data); -static SPIBoolean report_command_key_event (AccessibleKeystroke *stroke, void *user_data); -static SPIBoolean report_ordinary_key_event (AccessibleKeystroke *stroke, void *user_data); +#undef PRINT_TREE + +static void report_focus_event (const AccessibleEvent *event, void *user_data); +static void report_generic_event (const AccessibleEvent *event, void *user_data); +static void report_window_event (const AccessibleEvent *event, void *user_data); +static void report_text_event (const AccessibleEvent *event, void *user_data); +static void report_button_press (const AccessibleEvent *event, void *user_data); +static void check_property_change (const AccessibleEvent *event, void *user_data); +static SPIBoolean report_command_key_event (const AccessibleKeystroke *stroke, void *user_data); +static SPIBoolean report_ordinary_key_event (const AccessibleKeystroke *stroke, void *user_data); static void get_environment_vars (void); static int _festival_init (); static void _festival_say (const char *text, const char *voice, SPIBoolean shutup); static void _festival_write (const char *buff, int fd); +#ifdef PRINT_TREE +static void print_accessible_tree (Accessible *accessible, char *prefix); +#endif + static SPIBoolean use_magnifier = FALSE; static SPIBoolean use_festival = FALSE; static SPIBoolean festival_chatty = FALSE; +static SPIBoolean name_changed = FALSE; static AccessibleEventListener *focus_listener; static AccessibleEventListener *property_listener; static AccessibleEventListener *generic_listener; +static AccessibleEventListener *window_listener; static AccessibleEventListener *button_listener; +static AccessibleEventListener *text_listener; static AccessibleKeystrokeListener *command_key_listener; static AccessibleKeystrokeListener *ordinary_key_listener; -static AccessibleKeySet *spacebar_key_set; +static AccessibleKeySet *command_keyset; int main (int argc, char **argv) @@ -73,7 +85,7 @@ main (int argc, char **argv) modules = g_getenv ("GTK_MODULES"); if (!modules || modules [0] == '\0') { - putenv ("GTK_MODULES=gail:at-bridge"); + putenv ("GTK_MODULES="); } modules = NULL; @@ -82,16 +94,21 @@ main (int argc, char **argv) focus_listener = SPI_createAccessibleEventListener (report_focus_event, NULL); property_listener = SPI_createAccessibleEventListener (check_property_change, NULL); generic_listener = SPI_createAccessibleEventListener (report_generic_event, NULL); + window_listener = SPI_createAccessibleEventListener (report_window_event, NULL); + text_listener = SPI_createAccessibleEventListener (report_text_event, NULL); button_listener = SPI_createAccessibleEventListener (report_button_press, NULL); SPI_registerGlobalEventListener (focus_listener, "focus:"); - SPI_registerGlobalEventListener (property_listener, "object:property-change:accessible-selection"); + SPI_registerGlobalEventListener (property_listener, "object:property-change"); +/* :accessible-selection"); */ + SPI_registerGlobalEventListener (property_listener, "object:property-change:accessible-name"); SPI_registerGlobalEventListener (generic_listener, "object:selection-changed"); SPI_registerGlobalEventListener (generic_listener, "object:children-changed"); SPI_registerGlobalEventListener (generic_listener, "object:visible-data-changed"); SPI_registerGlobalEventListener (generic_listener, "object:text-selection-changed"); - SPI_registerGlobalEventListener (generic_listener, "object:text-caret-moved"); + SPI_registerGlobalEventListener (text_listener, "object:text-caret-moved"); SPI_registerGlobalEventListener (generic_listener, "object:text-changed"); SPI_registerGlobalEventListener (button_listener, "Gtk:GtkWidget:button-press-event"); + SPI_registerGlobalEventListener (window_listener, "Gtk:GtkWidget:window-state-event"); n_desktops = SPI_getDesktopCount (); for (i=0; i 0) + { + AccessibleText_getCharacterExtents (text, 0, &x0, &y0, &w0, &h0, + SPI_COORD_TYPE_SCREEN); + AccessibleText_getCharacterExtents (text, nchars-1, &xN, &yN, &wN, &hN, + SPI_COORD_TYPE_SCREEN); + x = MIN (x0, xN); + width = MAX (x0 + w0, xN + wN) - x; + fprintf (stderr, "Text bounding box: (%ld, %ld) ; (%ld, %ld)\n", + x, y, x+width, y+height); + } + } if (use_magnifier) { - magnifier_set_roi ((short) 0, x, y, width, height); + magnifier_set_roi ((short) 0, x, y, width, height); } } @@ -237,7 +301,7 @@ report_focussed_accessible (Accessible *obj, SPIBoolean shutup_previous_speech) text_interface = Accessible_getText (obj); first_sentence = AccessibleText_getTextAtOffset ( text_interface, (long) 0, SPI_TEXT_BOUNDARY_SENTENCE_START, &start_offset, &end_offset); - if (first_sentence) + if (first_sentence && use_festival) { _festival_say(first_sentence, "voice_don_diphone", FALSE); SPI_freeString (first_sentence); @@ -249,12 +313,11 @@ report_focussed_accessible (Accessible *obj, SPIBoolean shutup_previous_speech) } void -report_focus_event (AccessibleEvent *event, void *user_data) +report_focus_event (const AccessibleEvent *event, void *user_data) { char *s; g_return_if_fail (event->source != NULL); - s = Accessible_getName (event->source); if (s) { @@ -263,16 +326,47 @@ report_focus_event (AccessibleEvent *event, void *user_data) report_focussed_accessible (event->source, TRUE); } Accessible_getParent (event->source); + name_changed = FALSE; } void -report_generic_event (AccessibleEvent *event, void *user_data) +report_generic_event (const AccessibleEvent *event, void *user_data) { fprintf (stderr, "%s event received\n", event->type); } void -report_button_press (AccessibleEvent *event, void *user_data) +report_window_event (const AccessibleEvent *event, void *user_data) +{ + fprintf (stderr, "%s event received\n", event->type); +} + +void +report_text_event (const AccessibleEvent *event, void *user_data) +{ + AccessibleText *text = Accessible_getText (event->source); + fprintf (stderr, "%s event received\n", event->type); + if (use_magnifier && strcmp (event->type, "object:text-changed")) + { + long offset = AccessibleText_getCaretOffset (text); + long x, y, w, h; + fprintf (stderr, "offset %d\n", (int) offset); + AccessibleText_getCharacterExtents (text, offset, &x, &y, &w, &h, + SPI_COORD_TYPE_SCREEN); + fprintf (stderr, "new roi %d %d %d %d\n", (int) x, (int) y, (int) w, (int) h); + magnifier_set_roi ((short) 0, x, y, w, h); + } + if (!strcmp (event->type, "object:text-changed")) + { + long start, end; + char *new_text = AccessibleText_getTextAtOffset (text, (long) 0, SPI_TEXT_BOUNDARY_SENTENCE_START, &start, &end); + _festival_say (new_text, "voice_kal_diphone", FALSE); + SPI_freeString (new_text); + } +} + +void +report_button_press (const AccessibleEvent *event, void *user_data) { char *s; @@ -288,12 +382,13 @@ report_button_press (AccessibleEvent *event, void *user_data) } void -check_property_change (AccessibleEvent *event, void *user_data) +check_property_change (const AccessibleEvent *event, void *user_data) { AccessibleSelection *selection = Accessible_getSelection (event->source); int n_selections; int i; char *s; + fprintf (stderr, "property change event!\n"); if (selection) { n_selections = (int) AccessibleSelection_getNSelectedChildren (selection); @@ -312,6 +407,15 @@ check_property_change (AccessibleEvent *event, void *user_data) report_focussed_accessible (obj, i==0); } } + else if (!strcmp (event->type, "object:property-change:accessible-name")) + { + name_changed = TRUE; + report_focussed_accessible (event->source, TRUE); + } + else + { + fprintf (stderr, "Property change %s received\n", event->type); + } } static void @@ -326,23 +430,24 @@ simple_at_exit () SPI_deregisterGlobalEventListenerAll (generic_listener); AccessibleEventListener_unref (generic_listener); + SPI_deregisterGlobalEventListenerAll (text_listener); + AccessibleEventListener_unref (text_listener); + SPI_deregisterGlobalEventListenerAll (button_listener); AccessibleEventListener_unref (button_listener); - SPI_deregisterAccessibleKeystrokeListener (command_key_listener, SPI_KEYMASK_ALT); + SPI_deregisterAccessibleKeystrokeListener (command_key_listener, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL); AccessibleKeystrokeListener_unref (command_key_listener); + SPI_freeAccessibleKeySet (command_keyset); - SPI_deregisterAccessibleKeystrokeListener (ordinary_key_listener, SPI_KEYMASK_UNMODIFIED); - SPI_deregisterAccessibleKeystrokeListener (ordinary_key_listener, SPI_KEYMASK_SHIFT); + SPI_deregisterAccessibleKeystrokeListener (ordinary_key_listener, SPI_KEYMASK_SHIFTLOCK); AccessibleKeystrokeListener_unref (ordinary_key_listener); - SPI_freeAccessibleKeySet (spacebar_key_set); - SPI_event_quit (); } static SPIBoolean -is_command_key (AccessibleKeystroke *key) +is_command_key (const AccessibleKeystroke *key) { switch (key->keyID) { @@ -353,10 +458,12 @@ is_command_key (AccessibleKeystroke *key) case 'M': case 'm': use_magnifier = ! use_magnifier; + fprintf (stderr, "%ssing magnifier\n", use_magnifier ? "U" : "Not u"); return TRUE; case 'F': case 'f': use_festival = ! use_festival; + fprintf (stderr, "%speech output\n", use_festival ? "S" : "No s"); return TRUE; default: return FALSE; @@ -364,7 +471,7 @@ is_command_key (AccessibleKeystroke *key) } static SPIBoolean -report_command_key_event (AccessibleKeystroke *key, void *user_data) +report_command_key_event (const AccessibleKeystroke *key, void *user_data) { fprintf (stderr, "Command KeyEvent %s%c (keycode %d); string=%s; time=%lx\n", (key->modifiers & SPI_KEYMASK_ALT)?"Alt-":"", @@ -378,7 +485,7 @@ report_command_key_event (AccessibleKeystroke *key, void *user_data) static SPIBoolean -report_ordinary_key_event (AccessibleKeystroke *key, void *user_data) +report_ordinary_key_event (const AccessibleKeystroke *key, void *user_data) { fprintf (stderr, "Received key event:\tsym %ld\n\tmods %x\n\tcode %d\n\tstring=\'%s\'\n\ttime %lx\n", (long) key->keyID,