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 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;
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 (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<n_desktops; ++i)
char *s;
int len;
long x, y, width, height;
+ /* hack for GUADEC demo, to make sure name changes are spoken */
+ shutup_previous_speech = (shutup_previous_speech && !name_changed);
if (use_festival)
{
char *s;
g_return_if_fail (event->source != NULL);
-
s = Accessible_getName (event->source);
if (s)
{
report_focussed_accessible (event->source, TRUE);
}
Accessible_getParent (event->source);
+ name_changed = FALSE;
}
void
}
void
+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)
+ if (use_magnifier && strcmp (event->type, "object:text-changed"))
{
- AccessibleText *text = Accessible_getText (event->source);
long offset = AccessibleText_getCaretOffset (text);
long x, y, w, h;
fprintf (stderr, "offset %d\n", (int) offset);
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
int n_selections;
int i;
char *s;
+ fprintf (stderr, "property change event!\n");
if (selection)
{
n_selections = (int) AccessibleSelection_getNSelectedChildren (selection);
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