コード例 #1
0
ファイル: st-button.c プロジェクト: GNOME/gnome-shell
static gboolean
st_button_button_press (ClutterActor       *actor,
                        ClutterButtonEvent *event)
{
  StButton *button = ST_BUTTON (actor);
  StButtonPrivate *priv = st_button_get_instance_private (button);
  StButtonMask mask = ST_BUTTON_MASK_FROM_BUTTON (event->button);
  ClutterInputDevice *device = clutter_event_get_device ((ClutterEvent*) event);

  if (priv->press_sequence)
    return CLUTTER_EVENT_PROPAGATE;

  if (priv->button_mask & mask)
    {
      if (priv->grabbed == 0)
        clutter_grab_pointer (actor);

      priv->grabbed |= mask;
      st_button_press (button, device, mask, NULL);

      return TRUE;
    }

  return FALSE;
}
コード例 #2
0
ファイル: st-button.c プロジェクト: GNOME/gnome-shell
static gboolean
st_button_button_release (ClutterActor       *actor,
                          ClutterButtonEvent *event)
{
  StButton *button = ST_BUTTON (actor);
  StButtonPrivate *priv = st_button_get_instance_private (button);
  StButtonMask mask = ST_BUTTON_MASK_FROM_BUTTON (event->button);
  ClutterInputDevice *device = clutter_event_get_device ((ClutterEvent*) event);

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

      is_click = priv->grabbed && clutter_actor_contains (actor, event->source);
      st_button_release (button, device, mask, is_click ? event->button : 0, NULL);

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

      return TRUE;
    }

  return FALSE;
}
コード例 #3
0
ファイル: st-button.c プロジェクト: Endika/gnome-shell
static gboolean
st_button_touch_event (ClutterActor      *actor,
                       ClutterTouchEvent *event)
{
  StButton *button = ST_BUTTON (actor);
  StButtonPrivate *priv = st_button_get_instance_private (button);
  StButtonMask mask = ST_BUTTON_MASK_FROM_BUTTON (1);
  ClutterEventSequence *sequence;
  ClutterInputDevice *device;

  if (priv->pressed != 0)
    return CLUTTER_EVENT_PROPAGATE;

  device = clutter_event_get_device ((ClutterEvent*) event);
  sequence = clutter_event_get_event_sequence ((ClutterEvent*) event);

  if (event->type == CLUTTER_TOUCH_BEGIN && !priv->press_sequence)
    {
      clutter_input_device_sequence_grab (device, sequence, actor);
      st_button_press (button, device, 0, sequence);
      return CLUTTER_EVENT_STOP;
    }
  else if (event->type == CLUTTER_TOUCH_END &&
           priv->device == device &&
           priv->press_sequence == sequence)
    {
      st_button_release (button, device, mask, 0, sequence);
      clutter_input_device_sequence_ungrab (device, sequence);
      return CLUTTER_EVENT_STOP;
    }

  return CLUTTER_EVENT_PROPAGATE;
}
コード例 #4
0
ファイル: st-button.c プロジェクト: 2gud4u/Cinnamon
static gboolean
st_button_button_press (ClutterActor       *actor,
                        ClutterButtonEvent *event)
{
  StButton *button = ST_BUTTON (actor);
  StButtonMask mask = ST_BUTTON_MASK_FROM_BUTTON (event->button);

  if (button->priv->button_mask & mask)
    {
      if (button->priv->grabbed == 0)
        clutter_grab_pointer (actor);

      button->priv->grabbed |= mask;
      st_button_press (button, mask);

      return TRUE;
    }

  return FALSE;
}
コード例 #5
0
ファイル: st-button.c プロジェクト: branton/Cinnamon
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;
}