diff --git a/modules/other/gail/ChangeLog b/modules/other/gail/ChangeLog index 8f3dcd529f..993b9f0608 100644 --- a/modules/other/gail/ChangeLog +++ b/modules/other/gail/ChangeLog @@ -1,3 +1,10 @@ +2008-04-02 Li Yuan + + * gailbutton.c: (idle_do_action): + Patch from Alejandro PiƱeiro Iglesias . + Bug #496167. Synthesize press and release GdkEvent in button's click + action. + 2008-03-31 Li Yuan * gailbutton.c: (gail_button_ref_state_set): diff --git a/modules/other/gail/gailbutton.c b/modules/other/gail/gailbutton.c index 64232f5e93..dc2e9d5ebd 100644 --- a/modules/other/gail/gailbutton.c +++ b/modules/other/gail/gailbutton.c @@ -522,7 +522,28 @@ idle_do_action (gpointer data) switch (action_number) { case 0: - gtk_widget_activate (widget); + /* first a press */ + + button->in_button = TRUE; + gtk_button_enter (button); + /* + * Simulate a button press event. calling gtk_button_pressed() does + * not get the job done for a GtkOptionMenu. + */ + tmp_event.button.type = GDK_BUTTON_PRESS; + tmp_event.button.window = widget->window; + tmp_event.button.button = 1; + tmp_event.button.send_event = TRUE; + tmp_event.button.time = GDK_CURRENT_TIME; + tmp_event.button.axes = NULL; + + gtk_widget_event (widget, &tmp_event); + + /* then a release */ + tmp_event.button.type = GDK_BUTTON_RELEASE; + gtk_widget_event (widget, &tmp_event); + button->in_button = FALSE; + gtk_button_leave (button); break; case 1: button->in_button = TRUE;