forked from AuroraMiddleware/gtk
gtkbutton: Handle crossing events without the event window
The event shall no longer be "directed" to the event window, but the widget. Getting a enter/leave event is enough now to know whether the pointer is inside or outside the widget.
This commit is contained in:
parent
23d2126729
commit
5836beee78
@ -473,7 +473,7 @@ gtk_button_init (GtkButton *button)
|
|||||||
g_signal_connect (priv->gesture, "released", G_CALLBACK (multipress_released_cb), button);
|
g_signal_connect (priv->gesture, "released", G_CALLBACK (multipress_released_cb), button);
|
||||||
g_signal_connect (priv->gesture, "update", G_CALLBACK (multipress_gesture_update_cb), button);
|
g_signal_connect (priv->gesture, "update", G_CALLBACK (multipress_gesture_update_cb), button);
|
||||||
g_signal_connect (priv->gesture, "cancel", G_CALLBACK (multipress_gesture_cancel_cb), button);
|
g_signal_connect (priv->gesture, "cancel", G_CALLBACK (multipress_gesture_cancel_cb), button);
|
||||||
gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (priv->gesture), GTK_PHASE_BUBBLE);
|
gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (priv->gesture), GTK_PHASE_CAPTURE);
|
||||||
|
|
||||||
priv->gadget = gtk_css_custom_gadget_new_for_node (gtk_widget_get_css_node (GTK_WIDGET (button)),
|
priv->gadget = gtk_css_custom_gadget_new_for_node (gtk_widget_get_css_node (GTK_WIDGET (button)),
|
||||||
GTK_WIDGET (button),
|
GTK_WIDGET (button),
|
||||||
@ -977,12 +977,8 @@ gtk_button_enter_notify (GtkWidget *widget,
|
|||||||
GtkButton *button = GTK_BUTTON (widget);
|
GtkButton *button = GTK_BUTTON (widget);
|
||||||
GtkButtonPrivate *priv = button->priv;
|
GtkButtonPrivate *priv = button->priv;
|
||||||
|
|
||||||
if ((event->window == button->priv->event_window) &&
|
priv->in_button = TRUE;
|
||||||
(event->detail != GDK_NOTIFY_INFERIOR))
|
gtk_button_update_state (button);
|
||||||
{
|
|
||||||
priv->in_button = TRUE;
|
|
||||||
gtk_button_update_state (button);
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -994,12 +990,8 @@ gtk_button_leave_notify (GtkWidget *widget,
|
|||||||
GtkButton *button = GTK_BUTTON (widget);
|
GtkButton *button = GTK_BUTTON (widget);
|
||||||
GtkButtonPrivate *priv = button->priv;
|
GtkButtonPrivate *priv = button->priv;
|
||||||
|
|
||||||
if ((event->window == button->priv->event_window) &&
|
priv->in_button = FALSE;
|
||||||
(event->detail != GDK_NOTIFY_INFERIOR))
|
gtk_button_update_state (button);
|
||||||
{
|
|
||||||
priv->in_button = FALSE;
|
|
||||||
gtk_button_update_state (button);
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,6 @@ struct _GtkButtonPrivate
|
|||||||
GtkCssGadget *gadget;
|
GtkCssGadget *gadget;
|
||||||
|
|
||||||
GdkDevice *grab_keyboard;
|
GdkDevice *grab_keyboard;
|
||||||
GdkWindow *event_window;
|
|
||||||
|
|
||||||
GtkGesture *gesture;
|
GtkGesture *gesture;
|
||||||
|
|
||||||
|
@ -872,18 +872,6 @@ gtk_model_button_allocate (GtkCssGadget *gadget,
|
|||||||
gtk_widget_size_allocate_with_baseline (child, &child_allocation, baseline);
|
gtk_widget_size_allocate_with_baseline (child, &child_allocation, baseline);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gtk_widget_get_realized (widget))
|
|
||||||
{
|
|
||||||
GtkAllocation border_allocation;
|
|
||||||
gtk_css_gadget_get_border_allocation (gadget, &border_allocation, NULL);
|
|
||||||
|
|
||||||
gdk_window_move_resize (GTK_BUTTON (widget)->priv->event_window,
|
|
||||||
border_allocation.x,
|
|
||||||
border_allocation.y,
|
|
||||||
border_allocation.width,
|
|
||||||
border_allocation.height);
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_container_get_children_clip (GTK_CONTAINER (widget), out_clip);
|
gtk_container_get_children_clip (GTK_CONTAINER (widget), out_clip);
|
||||||
gdk_rectangle_union (out_clip, &check_clip, out_clip);
|
gdk_rectangle_union (out_clip, &check_clip, out_clip);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user