From d33b599ac77991a3ee9da6d292ba1b402102aeee Mon Sep 17 00:00:00 2001 From: Li Yuan Date: Wed, 2 Apr 2008 08:29:31 +0000 Subject: [PATCH] =?UTF-8?q?Patch=20from=20Alejandro=20Pi=C3=B1eiro=20Igles?= =?UTF-8?q?ias=20.=20Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. svn path=/trunk/; revision=19958 --- modules/other/gail/ChangeLog | 7 +++++++ modules/other/gail/gailbutton.c | 23 ++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) 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;