예제 #1
0
static gboolean
st_button_leave (ClutterActor         *actor,
                 ClutterCrossingEvent *event)
{
  StButton *button = ST_BUTTON (actor);
  gboolean ret;

  ret = CLUTTER_ACTOR_CLASS (st_button_parent_class)->leave_event (actor, event);

  if (button->priv->grabbed)
    {
      if (st_widget_get_hover (ST_WIDGET (button)))
        st_button_press (button, button->priv->grabbed);
      else
        st_button_release (button, button->priv->grabbed, 0);
    }

  return ret;
}
예제 #2
0
static gboolean
st_button_enter (ClutterActor         *actor,
                 ClutterCrossingEvent *event)
{
  StButton *button = ST_BUTTON (actor);
  StButtonPrivate *priv = st_button_get_instance_private (button);
  gboolean ret;

  ret = CLUTTER_ACTOR_CLASS (st_button_parent_class)->enter_event (actor, event);

  if (priv->grabbed)
    {
      if (st_widget_get_hover (ST_WIDGET (button)))
        st_button_press (button,  priv->device,
                         priv->grabbed, NULL);
      else
        st_button_release (button, priv->device,
                           priv->grabbed, 0, NULL);
    }

  return ret;
}
예제 #3
0
static gboolean
st_button_button_release (ClutterActor       *actor,
                          ClutterButtonEvent *event)
{
  StButton *button = ST_BUTTON (actor);
  StButtonMask mask = ST_BUTTON_MASK_FROM_BUTTON (event->button);

  if (button->priv->button_mask & mask)
    {
      gboolean is_click;

      is_click = button->priv->grabbed && st_widget_get_hover (ST_WIDGET (button));
      st_button_release (button, mask, is_click ? event->button : 0);

      button->priv->grabbed &= ~mask;
      if (button->priv->grabbed == 0)
        clutter_ungrab_pointer ();

      return TRUE;
    }

  return FALSE;
}