gtkswitch: Remove event window

It's not necessary anymore to receive input events. The pan gesture has
been set on the capture phase as the child widgets may capture during
bubbling.
This commit is contained in:
Carlos Garnacho 2017-04-02 16:35:16 +02:00
parent ef1e900a53
commit 072a13d0b7

View File

@ -75,7 +75,6 @@
struct _GtkSwitchPrivate
{
GdkWindow *event_window;
GtkActionHelper *action_helper;
GtkGesture *pan_gesture;
@ -286,11 +285,8 @@ gtk_switch_enter (GtkWidget *widget,
{
GtkSwitchPrivate *priv = GTK_SWITCH (widget)->priv;
if (event->window == priv->event_window)
{
priv->in_switch = TRUE;
gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_PRELIGHT, FALSE);
}
priv->in_switch = TRUE;
gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_PRELIGHT, FALSE);
return FALSE;
}
@ -301,11 +297,8 @@ gtk_switch_leave (GtkWidget *widget,
{
GtkSwitchPrivate *priv = GTK_SWITCH (widget)->priv;
if (event->window == priv->event_window)
{
priv->in_switch = FALSE;
gtk_widget_unset_state_flags (widget, GTK_STATE_FLAG_PRELIGHT);
}
priv->in_switch = FALSE;
gtk_widget_unset_state_flags (widget, GTK_STATE_FLAG_PRELIGHT);
return FALSE;
}
@ -411,18 +404,6 @@ gtk_switch_allocate_contents (GtkCssGadget *gadget,
child_alloc.y = allocation->y + (allocation->height - min) / 2;
child_alloc.height = min;
gtk_widget_size_allocate (priv->off_label, &child_alloc);
if (gtk_widget_get_realized (GTK_WIDGET (self)))
{
GtkAllocation border_allocation;
gtk_css_gadget_get_border_allocation (gadget, &border_allocation, NULL);
gdk_window_move_resize (priv->event_window,
border_allocation.x,
border_allocation.y,
border_allocation.width,
border_allocation.height);
}
}
static void
@ -441,65 +422,6 @@ gtk_switch_size_allocate (GtkWidget *widget,
gtk_widget_set_clip (widget, &clip);
}
static void
gtk_switch_realize (GtkWidget *widget)
{
GtkSwitchPrivate *priv = GTK_SWITCH (widget)->priv;
GdkWindow *parent_window;
GtkAllocation allocation;
GTK_WIDGET_CLASS (gtk_switch_parent_class)->realize (widget);
parent_window = gtk_widget_get_parent_window (widget);
gtk_widget_set_window (widget, parent_window);
g_object_ref (parent_window);
gtk_widget_get_allocation (widget, &allocation);
priv->event_window = gdk_window_new_input (parent_window,
GDK_ALL_EVENTS_MASK,
&allocation);
gtk_widget_register_window (widget, priv->event_window);
}
static void
gtk_switch_unrealize (GtkWidget *widget)
{
GtkSwitchPrivate *priv = GTK_SWITCH (widget)->priv;
if (priv->event_window != NULL)
{
gtk_widget_unregister_window (widget, priv->event_window);
gdk_window_destroy (priv->event_window);
priv->event_window = NULL;
}
GTK_WIDGET_CLASS (gtk_switch_parent_class)->unrealize (widget);
}
static void
gtk_switch_map (GtkWidget *widget)
{
GtkSwitchPrivate *priv = GTK_SWITCH (widget)->priv;
GTK_WIDGET_CLASS (gtk_switch_parent_class)->map (widget);
if (priv->event_window)
gdk_window_show (priv->event_window);
}
static void
gtk_switch_unmap (GtkWidget *widget)
{
GtkSwitchPrivate *priv = GTK_SWITCH (widget)->priv;
if (priv->event_window)
gdk_window_hide (priv->event_window);
GTK_WIDGET_CLASS (gtk_switch_parent_class)->unmap (widget);
}
static gboolean
gtk_switch_snapshot_trough (GtkCssGadget *gadget,
GtkSnapshot *snapshot,
@ -718,10 +640,6 @@ gtk_switch_class_init (GtkSwitchClass *klass)
widget_class->measure = gtk_switch_measure;
widget_class->size_allocate = gtk_switch_size_allocate;
widget_class->realize = gtk_switch_realize;
widget_class->unrealize = gtk_switch_unrealize;
widget_class->map = gtk_switch_map;
widget_class->unmap = gtk_switch_unmap;
widget_class->snapshot = gtk_switch_snapshot;
widget_class->enter_notify_event = gtk_switch_enter;
widget_class->leave_notify_event = gtk_switch_leave;
@ -834,7 +752,7 @@ gtk_switch_init (GtkSwitch *self)
g_signal_connect (gesture, "drag-end",
G_CALLBACK (gtk_switch_pan_gesture_drag_end), self);
gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture),
GTK_PHASE_BUBBLE);
GTK_PHASE_CAPTURE);
priv->pan_gesture = gesture;
/* Translators: if the "on" state label requires more than three