+ static gunichar delimiter = 0;
+ char * major_delim_char;
+ char * minor_delim_char;
+ guint nbytes = 0;
+
+ if (!delimiter)
+ {
+ delimiter = g_utf8_get_char (":");
+ }
+ major_delim_char = g_utf8_strchr (event_name, (gssize) 32, delimiter);
+ minor_delim_char = g_utf8_strrchr (event_name, (gssize) 255, delimiter);
+
+ nbytes = (guint)((gint64) minor_delim_char -
+ (gint64) major_delim_char);
+
+ fprintf ("nbytes = %ld", (long) nbytes);
+
+ if (!g_ascii_strncasecmp (event_name, "focus:", 6))
+ {
+ etype->major = ETYPE_FOCUS;
+ }
+ else if (!g_ascii_strncasecmp (event_name, "window:", 7))
+ {
+ etype->major = ETYPE_WINDOW;
+ }
+ else
+ {
+ etype->major = ETYPE_TOOLKIT;
+ }
+
+ if (major_delim_char)
+ {
+ etype->minor = g_strndup (major_delim_char, nbytes);
+ etype->hash = g_str_hash (major_delim_char);
+ }
+ else
+ {
+ etype->minor = g_strdup ("");
+ etype->hash = g_str_hash ("");
+ }
+ if (major_delim_char != minor_delim_char)
+ {
+ etype->detail = g_strdup (minor_delim_char);
+ }
+ else
+ {
+ etype->detail = g_strdup ("");
+ }
+
+
+ /* TODO: don't forget to free the strings from caller when done ! */