#define LOGD(arg...) do {if (log_file) {fprintf(log_file, ##arg);fprintf(log_file, "\n"); fflush(log_file);}} while(0)
#endif
+static gboolean _launch_screen_reader_repeat_until_success(gpointer user_data);
typedef enum {
A11Y_BUS_STATE_IDLE = 0,
&builder,
&invalidated_builder),
NULL);
+ g_variant_builder_clear (&builder);
+ g_variant_builder_clear (&invalidated_builder);
}
static void
&builder,
&invalidated_builder),
NULL);
+ g_variant_builder_clear (&builder);
+ g_variant_builder_clear (&invalidated_builder);
}
static gboolean
handle_screen_reader_enabled_change (_global_app, new_val, FALSE);
}
+static int
+_screen_reader_dead_tracker (int pid, void *data)
+{
+ A11yBusLauncher *app = data;
+
+ if (app->pid > 0 && pid == app->pid)
+ {
+ LOGE("screen reader is dead, pid: %d, restarting", pid);
+ app->pid = 0;
+ g_timeout_add_seconds (2, _launch_screen_reader_repeat_until_success, app);
+ }
+ return 0;
+}
+
static gboolean
_launch_screen_reader(gpointer user_data, gboolean by_vconf_change)
{
if (bl->pid > 0)
{
LOGD("Screen reader launched with pid: %i", bl->pid);
+ LOGD("registering screen reader dead tracker");
+ aul_listen_app_dead_signal(_screen_reader_dead_tracker, bl);
ret = TRUE;
}
else
return FALSE;
+ LOGD("unregistering screen reader dead tracker");
+ aul_listen_app_dead_signal(NULL, NULL);
+
int status = aul_app_get_status_bypid(bl->pid);
if (status < 0)