-static void
-generate_match_rule (const char *category, const char *name, const char *detail, char **matchrule)
-{
- if (!matchrule)
- return;
- *matchrule = g_strdup_printf ("type='signal',interface='org.a11y.atspi.Event.%s'", category);
- if (!*matchrule)
- return;
- if (name && name [0])
- {
- gchar *new_str = g_strconcat (*matchrule, ",member='", name, "'", NULL);
- if (new_str)
- {
- g_free (*matchrule);
- *matchrule = new_str;
- }
- }
- if (detail && detail [0])
- {
- gchar *new_str = g_strconcat (*matchrule, ",arg0='", detail, "'", NULL);
- if (new_str)
- {
- g_free (*matchrule);
- *matchrule = new_str;
- }
- }
-}
-
-static gboolean
-convert_event_type_to_dbus (AtspiEventType *type, char **categoryp, char **namep, char **detailp, char **matchrule)
-{
- gchar *category = strdup_and_adjust_for_dbus (type->klass);
- gchar *name = strdup_and_adjust_for_dbus (type->major);
- gchar *detail = g_strdup (type->minor);
-
- generate_match_rule (category, name, detail, matchrule);
-
- if (categoryp) *categoryp = category;
- else g_free (category);
- if (namep) *namep = name;
- else if (name) g_free (name);
- if (detailp) *detailp = detail;
- else if (detail) g_free (detail);
- return TRUE;
-oom:
- if (category) g_free (category);
- if (name) g_free (name);
- if (detail) g_free (detail);
- return FALSE;
-}
-