GtkColorSwatch: Use gesture for button events too

This commit is contained in:
Matthias Clasen 2014-05-09 19:24:27 -04:00 committed by Carlos Garnacho
parent 6896c979a9
commit 6a290bdecb

View File

@ -93,6 +93,7 @@ gtk_color_swatch_init (GtkColorSwatch *swatch)
gtk_gesture_attach (swatch->priv->long_press_gesture, GTK_PHASE_BUBBLE);
swatch->priv->multipress_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (swatch));
gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (swatch->priv->multipress_gesture), FALSE);
g_signal_connect (swatch->priv->multipress_gesture, "pressed",
G_CALLBACK (tap_action), swatch);
gtk_gesture_attach (swatch->priv->multipress_gesture, GTK_PHASE_BUBBLE);
@ -455,7 +456,8 @@ popup_position_func (GtkMenu *menu,
static void
do_popup (GtkWidget *swatch,
GdkEventButton *event)
gint button,
gint time)
{
GtkWidget *menu;
GtkWidget *item;
@ -474,41 +476,13 @@ do_popup (GtkWidget *swatch,
gtk_widget_show_all (item);
if (event)
if (button != 0)
gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
NULL, NULL, event->button, event->time);
NULL, NULL, button, time);
else
gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
popup_position_func, swatch,
0, gtk_get_current_event_time ());
}
static gboolean
swatch_button_press (GtkWidget *widget,
GdkEventButton *event)
{
GtkColorSwatch *swatch = GTK_COLOR_SWATCH (widget);
gtk_widget_grab_focus (widget);
if (gdk_event_triggers_context_menu ((GdkEvent *) event) &&
swatch->priv->has_color)
{
do_popup (widget, event);
return TRUE;
}
else if (event->type == GDK_2BUTTON_PRESS &&
event->button == GDK_BUTTON_PRIMARY)
{
g_signal_emit (swatch, signals[ACTIVATE], 0);
return TRUE;
}
else if (event->button == GDK_BUTTON_PRIMARY)
{
return TRUE;
}
return FALSE;
button, time);
}
static gboolean
@ -533,19 +507,6 @@ swatch_primary_action (GtkColorSwatch *swatch)
return FALSE;
}
static gboolean
swatch_button_release (GtkWidget *widget,
GdkEventButton *event)
{
GtkColorSwatch *swatch = GTK_COLOR_SWATCH (widget);
if (event->button == GDK_BUTTON_PRIMARY &&
swatch->priv->contains_pointer)
return swatch_primary_action (swatch);
return FALSE;
}
static void
hold_action (GtkGestureLongPress *gesture,
gdouble x,
@ -563,8 +524,22 @@ tap_action (GtkGestureMultiPress *gesture,
gdouble y,
GtkColorSwatch *swatch)
{
if (n_press == 1)
swatch_primary_action (swatch);
guint button;
button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
if (button == GDK_BUTTON_PRIMARY)
{
if (n_press == 1)
swatch_primary_action (swatch);
else if (n_press > 1)
g_signal_emit (swatch, signals[ACTIVATE], 0);
}
else if (button == GDK_BUTTON_SECONDARY)
{
if (swatch->priv->has_color)
do_popup (GTK_WIDGET (swatch), button, gtk_get_current_event_time ());
}
}
static void
@ -660,7 +635,7 @@ swatch_size_allocate (GtkWidget *widget,
static gboolean
swatch_popup_menu (GtkWidget *swatch)
{
do_popup (swatch, NULL);
do_popup (swatch, 0, gtk_get_current_event_time ());
return TRUE;
}
@ -746,8 +721,6 @@ gtk_color_swatch_class_init (GtkColorSwatchClass *class)
widget_class->drag_data_received = swatch_drag_data_received;
widget_class->key_press_event = swatch_key_press;
widget_class->popup_menu = swatch_popup_menu;
widget_class->button_press_event = swatch_button_press;
widget_class->button_release_event = swatch_button_release;
widget_class->enter_notify_event = swatch_enter_notify;
widget_class->leave_notify_event = swatch_leave_notify;
widget_class->realize = swatch_realize;