Activate the action in a regular clicked handler instead of the default

* gtk/gtkbutton.c: Activate the action in a regular clicked
        handler instead of the default handler, to make it work with
        derived classes which don't chain up their clicked handler.


svn path=/trunk/; revision=22227
This commit is contained in:
Matthias Clasen 2009-01-27 02:55:02 +00:00
parent 67273372cd
commit 2d0c9e81be
2 changed files with 41 additions and 29 deletions

View File

@ -1,3 +1,9 @@
2009-01-26 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkbutton.c: Activate the action in a regular clicked
handler instead of the default handler, to make it work with
derived classes which don't chain up their clicked handler.
2009-01-26 Matthias Clasen <mclasen@redhat.com> 2009-01-26 Matthias Clasen <mclasen@redhat.com>
Bug 569104 Toggle menu entries showed as check menu entries Bug 569104 Toggle menu entries showed as check menu entries

View File

@ -110,22 +110,19 @@ static void gtk_button_realize (GtkWidget *widget);
static void gtk_button_unrealize (GtkWidget * widget); static void gtk_button_unrealize (GtkWidget * widget);
static void gtk_button_map (GtkWidget * widget); static void gtk_button_map (GtkWidget * widget);
static void gtk_button_unmap (GtkWidget * widget); static void gtk_button_unmap (GtkWidget * widget);
static void gtk_button_style_set (GtkWidget *widget, static void gtk_button_style_set (GtkWidget * widget, GtkStyle * prev_style);
GtkStyle *prev_style);
static void gtk_button_size_request (GtkWidget * widget, static void gtk_button_size_request (GtkWidget * widget,
GtkRequisition * requisition); GtkRequisition * requisition);
static void gtk_button_size_allocate (GtkWidget * widget, static void gtk_button_size_allocate (GtkWidget * widget,
GtkAllocation * allocation); GtkAllocation * allocation);
static gint gtk_button_expose (GtkWidget *widget, static gint gtk_button_expose (GtkWidget * widget, GdkEventExpose * event);
GdkEventExpose *event);
static gint gtk_button_button_press (GtkWidget * widget, static gint gtk_button_button_press (GtkWidget * widget,
GdkEventButton * event); GdkEventButton * event);
static gint gtk_button_button_release (GtkWidget * widget, static gint gtk_button_button_release (GtkWidget * widget,
GdkEventButton * event); GdkEventButton * event);
static gint gtk_button_grab_broken (GtkWidget * widget, static gint gtk_button_grab_broken (GtkWidget * widget,
GdkEventGrabBroken * event); GdkEventGrabBroken * event);
static gint gtk_button_key_release (GtkWidget *widget, static gint gtk_button_key_release (GtkWidget * widget, GdkEventKey * event);
GdkEventKey *event);
static gint gtk_button_enter_notify (GtkWidget * widget, static gint gtk_button_enter_notify (GtkWidget * widget,
GdkEventCrossing * event); GdkEventCrossing * event);
static gint gtk_button_leave_notify (GtkWidget * widget, static gint gtk_button_leave_notify (GtkWidget * widget,
@ -211,7 +208,7 @@ gtk_button_class_init (GtkButtonClass *klass)
klass->pressed = gtk_real_button_pressed; klass->pressed = gtk_real_button_pressed;
klass->released = gtk_real_button_released; klass->released = gtk_real_button_released;
klass->clicked = gtk_real_button_clicked; klass->clicked = NULL;
klass->enter = gtk_button_update_state; klass->enter = gtk_button_update_state;
klass->leave = gtk_button_update_state; klass->leave = gtk_button_update_state;
klass->activate = gtk_real_button_activate; klass->activate = gtk_real_button_activate;
@ -874,6 +871,15 @@ gtk_button_set_related_action (GtkButton *button,
if (priv->action == action) if (priv->action == action)
return; return;
/* This should be a default handler, but for compatibility reasons
* we need to support derived classes that don't chain up their
* clicked handler.
*/
g_signal_handlers_disconnect_by_func (button, gtk_real_button_clicked, NULL);
if (action)
g_signal_connect_after (button, "clicked",
G_CALLBACK (gtk_real_button_clicked), NULL);
gtk_activatable_do_set_related_action (GTK_ACTIVATABLE (button), action); gtk_activatable_do_set_related_action (GTK_ACTIVATABLE (button), action);
priv->action = action; priv->action = action;