mirror of https://github.com/GNOME/gimp.git
don't reset button->press_state on double clicks because GDK_2BUTTON_PRESS
2005-02-23 Michael Natterer <mitch@gimp.org> * libgimpwidgets/gimpbutton.c (gimp_button_button_press): don't reset button->press_state on double clicks because GDK_2BUTTON_PRESS always arrive immediately after GDK_BUTTON_PRESS, so resetting the state causes the second click of a double click to be always interpreted as "clicked", not "extended-clicked", breaking e.g. adding of multiple layers by shift-clicking the layers dialog's "new" button. Phew, too much text for a one-liner bug fix, blah... Spotted by Jimmac. Cleaned up this antique file a bit.
This commit is contained in:
parent
ea8c0e3bc9
commit
65f360d6c7
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
|||
2005-02-23 Michael Natterer <mitch@gimp.org>
|
||||
|
||||
* libgimpwidgets/gimpbutton.c (gimp_button_button_press): don't
|
||||
reset button->press_state on double clicks because
|
||||
GDK_2BUTTON_PRESS always arrive immediately after
|
||||
GDK_BUTTON_PRESS, so resetting the state causes the second click
|
||||
of a double click to be always interpreted as "clicked", not
|
||||
"extended-clicked", breaking e.g. adding of multiple layers by
|
||||
shift-clicking the layers dialog's "new" button. Phew, too much
|
||||
text for a one-liner bug fix, blah... Spotted by Jimmac.
|
||||
Cleaned up this antique file a bit.
|
||||
|
||||
2005-02-23 Bill Skaggs <weskaggs@primate.ucdavis.edu>
|
||||
|
||||
* plug-ins/*/Makefile.am
|
||||
|
|
|
@ -40,9 +40,9 @@ static void gimp_button_class_init (GimpButtonClass *klass);
|
|||
static void gimp_button_init (GimpButton *button);
|
||||
|
||||
static gboolean gimp_button_button_press (GtkWidget *widget,
|
||||
GdkEventButton *event);
|
||||
GdkEventButton *event);
|
||||
static gboolean gimp_button_button_release (GtkWidget *widget,
|
||||
GdkEventButton *event);
|
||||
GdkEventButton *event);
|
||||
|
||||
|
||||
static guint button_signals[LAST_SIGNAL] = { 0 };
|
||||
|
@ -71,8 +71,8 @@ gimp_button_get_type (void)
|
|||
};
|
||||
|
||||
button_type = g_type_register_static (GTK_TYPE_BUTTON,
|
||||
"GimpButton",
|
||||
&button_info, 0);
|
||||
"GimpButton",
|
||||
&button_info, 0);
|
||||
}
|
||||
|
||||
return button_type;
|
||||
|
@ -81,23 +81,19 @@ gimp_button_get_type (void)
|
|||
static void
|
||||
gimp_button_class_init (GimpButtonClass *klass)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
GtkWidgetClass *widget_class;
|
||||
|
||||
object_class = G_OBJECT_CLASS (klass);
|
||||
widget_class = GTK_WIDGET_CLASS (klass);
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
|
||||
parent_class = g_type_class_peek_parent (klass);
|
||||
|
||||
button_signals[EXTENDED_CLICKED] =
|
||||
g_signal_new ("extended_clicked",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
G_STRUCT_OFFSET (GimpButtonClass, extended_clicked),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__FLAGS,
|
||||
G_TYPE_NONE, 1,
|
||||
GDK_TYPE_MODIFIER_TYPE);
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
G_STRUCT_OFFSET (GimpButtonClass, extended_clicked),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__FLAGS,
|
||||
G_TYPE_NONE, 1,
|
||||
GDK_TYPE_MODIFIER_TYPE);
|
||||
|
||||
widget_class->button_press_event = gimp_button_button_press;
|
||||
widget_class->button_release_event = gimp_button_button_release;
|
||||
|
@ -119,11 +115,7 @@ gimp_button_init (GimpButton *button)
|
|||
GtkWidget *
|
||||
gimp_button_new (void)
|
||||
{
|
||||
GimpButton *button;
|
||||
|
||||
button = g_object_new (GIMP_TYPE_BUTTON, NULL);
|
||||
|
||||
return GTK_WIDGET (button);
|
||||
return g_object_new (GIMP_TYPE_BUTTON, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -144,16 +136,11 @@ gimp_button_extended_clicked (GimpButton *button,
|
|||
|
||||
static gboolean
|
||||
gimp_button_button_press (GtkWidget *widget,
|
||||
GdkEventButton *bevent)
|
||||
GdkEventButton *bevent)
|
||||
{
|
||||
GimpButton *button;
|
||||
GimpButton *button = GIMP_BUTTON (widget);
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_BUTTON (widget), FALSE);
|
||||
g_return_val_if_fail (bevent != NULL, FALSE);
|
||||
|
||||
button = GIMP_BUTTON (widget);
|
||||
|
||||
if (bevent->type == GDK_BUTTON_PRESS && bevent->button == 1)
|
||||
if (bevent->button == 1)
|
||||
{
|
||||
button->press_state = bevent->state;
|
||||
}
|
||||
|
@ -165,37 +152,32 @@ gimp_button_button_press (GtkWidget *widget,
|
|||
if (GTK_WIDGET_CLASS (parent_class)->button_press_event)
|
||||
return GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, bevent);
|
||||
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_button_button_release (GtkWidget *widget,
|
||||
GdkEventButton *bevent)
|
||||
GdkEventButton *bevent)
|
||||
{
|
||||
GtkButton *button;
|
||||
GtkButton *button = GTK_BUTTON (widget);
|
||||
gboolean extended_clicked = FALSE;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_BUTTON (widget), FALSE);
|
||||
g_return_val_if_fail (bevent != NULL, FALSE);
|
||||
|
||||
button = GTK_BUTTON (widget);
|
||||
|
||||
if (bevent->button == 1)
|
||||
{
|
||||
if (button->in_button &&
|
||||
(GIMP_BUTTON (button)->press_state &
|
||||
(GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)))
|
||||
{
|
||||
gimp_button_extended_clicked (GIMP_BUTTON (button),
|
||||
(GIMP_BUTTON (button)->press_state &
|
||||
(GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)))
|
||||
{
|
||||
gimp_button_extended_clicked (GIMP_BUTTON (button),
|
||||
GIMP_BUTTON (button)->press_state);
|
||||
|
||||
extended_clicked = TRUE;
|
||||
extended_clicked = TRUE;
|
||||
|
||||
/* HACK: don't let GtkButton emit "clicked" by telling it that
|
||||
* the mouse pointer is outside the widget
|
||||
*/
|
||||
button->in_button = FALSE;
|
||||
}
|
||||
/* HACK: don't let GtkButton emit "clicked" by telling it that
|
||||
* the mouse pointer is outside the widget
|
||||
*/
|
||||
button->in_button = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (GTK_WIDGET_CLASS (parent_class)->button_release_event)
|
||||
|
|
Loading…
Reference in New Issue