From bb3a6069c17573ab08e6bb1a3c0fe51f9c7d6a41 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 31 Jul 2014 19:15:44 +0200 Subject: Bug 733918 - Color chooser for citation color is not working in Composer --- e-util/e-color-chooser-widget.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/e-util/e-color-chooser-widget.c b/e-util/e-color-chooser-widget.c index c1357ea572..7091324e1f 100644 --- a/e-util/e-color-chooser-widget.c +++ b/e-util/e-color-chooser-widget.c @@ -53,6 +53,8 @@ G_DEFINE_TYPE ( e_color_chooser_widget, GTK_TYPE_COLOR_CHOOSER_WIDGET); +static gboolean (* origin_swatch_button_press_event) (GtkWidget *widget, GdkEventButton *event); + /* UGLY UGLY UGLY! * GtkColorChooserWidget sends "color-activated" signal * only when user double-clicks the color. This is totally stupid @@ -71,15 +73,23 @@ static gboolean color_chooser_widget_button_press_event (GtkWidget *widget, GdkEventButton *event) { - if ((event->type == GDK_BUTTON_PRESS) && - (event->button == GDK_BUTTON_PRIMARY)) { + GtkWidget *parent; - g_signal_emit_by_name (widget, "activate"); + g_return_val_if_fail (origin_swatch_button_press_event != NULL, FALSE); + + /* Override the behaviour only for GtkColorSwatch which is part of the EColorChooserWidget */ + parent = widget; + while (parent && !E_IS_COLOR_CHOOSER_WIDGET (parent)) + parent = gtk_widget_get_parent (parent); + if (parent && + event->type == GDK_BUTTON_PRESS && + event->button == GDK_BUTTON_PRIMARY) { + g_signal_emit_by_name (widget, "activate"); return TRUE; } - return FALSE; + return origin_swatch_button_press_event (widget, event); } static void @@ -230,6 +240,7 @@ e_color_chooser_widget_init (EColorChooserWidget *widget) if (swatch) { GtkWidgetClass *swatch_class; swatch_class = GTK_WIDGET_GET_CLASS (swatch); + origin_swatch_button_press_event = swatch_class->button_press_event; swatch_class->button_press_event = color_chooser_widget_button_press_event; } -- cgit v1.2.3