Jak wstawić syntetyczne zdarzenia myszy do kolejki wejściowej X11

Mam wbudowane urządzenie z systemem Linux / X11 podłączone do urządzenia, które zapewnia zdarzenia dotykowe za pośrednictwem połączenia USB. To urządzenie nie jest rozpoznawane jako żadna forma standardowego wejścia wskaźnika / myszy. Próbuję znaleźć sposób „wstrzyknięcia” zdarzeń myszy do X11, gdy urządzenie zewnętrzne zgłosi zdarzenie.

Dzięki temu moja aplikacja (napisana w C za pomocą Gtk +) nie będzie musiała fałszować myszy za pomocą wywołań Gtk +.

Jeśli można to zrobić, moja aplikacja Gtk + nie będzie musiała znać ani dbać o urządzenie generujące zdarzenia dotykowe. Po prostu pojawiłby się w aplikacji jako standardowe zdarzenia myszy.

Czy ktoś wie, jak wstawić syntetyczne zdarzenia myszy do X11?

W tej chwili robię co następuje, ale nie jest optymalna.

<code>GtkWidget *btnSpin;     /* sample button */

gboolean buttonPress_cb( void *btn );
gboolean buttonDePress_cb( void *btn );


/*  make this call after the device library calls the TouchEvent_cb() callback
    and the application has determined which, if any, button was touched

    In this example we are assuming btnSpin was touched.

    This function will, in 5ms, begin the process of causing the button to do it's 
    normal animation ( button in, button out effects ) and then send the actual
    button_clicked event to the button.
*/
g_timeout_add(5, (GSourceFunc) buttonPress_cb, (void *)btnSpin);


/*  this callback is fired 5ms after the g_timeout_add() function above.
    It first sets the button state to ACTIVE to begin the animation cycle (pressed look)
    And then 250ms later calls buttonDePress_cb which will make the button look un-pressed
    and then send the button_clicked event.
*/    
gboolean buttonPress_cb( void *btn )
{

    gtk_widget_set_state((GtkWidget *)btn, GTK_STATE_ACTIVE);
    g_timeout_add(250, (GSourceFunc) buttonDePress_cb, btn);


    return( FALSE );
}

/*  Sets button state back to NORMAL ( not pressed look )
    and sends the button_clicked event so that the registered signal handler for the
    button can be activated
*/
gboolean buttonDePress_cb( void *btn )
{

    gtk_widget_set_state( btn, GTK_STATE_NORMAL);
    gtk_button_clicked( GTK_BUTTON( btn ));

    return( FALSE );
}
</code>

questionAnswers(4)

yourAnswerToTheQuestion