static MxFocusable *
_accept_focus (MxFocusable *focusable,
               MxFocusHint  hint)
{
  MexActionButtonPrivate *priv = MEX_ACTION_BUTTON (focusable)->priv;
  MxFocusableIface *iface;

  priv->has_focus = TRUE;

  clutter_actor_meta_set_enabled (CLUTTER_ACTOR_META (priv->shadow), TRUE);

  iface = g_type_interface_peek_parent (MX_FOCUSABLE_GET_INTERFACE (focusable));
  return iface->accept_focus (focusable, hint);
}
static MxFocusable *
_move_focus (MxFocusable      *focusable,
             MxFocusDirection  direction,
             MxFocusable      *old_focus)
{
  MexActionButtonPrivate *priv = MEX_ACTION_BUTTON (focusable)->priv;
  MxFocusableIface *iface;

  clutter_actor_meta_set_enabled (CLUTTER_ACTOR_META (priv->shadow), FALSE);

  priv->has_focus = FALSE;


  iface = g_type_interface_peek_parent (MX_FOCUSABLE_GET_INTERFACE (focusable));
  return iface->move_focus (focusable, direction, old_focus);
}
static MxFocusable *
_move_focus (MxFocusable      *focusable,
             MxFocusDirection  direction,
             MxFocusable      *old_focus)
{
    MexActionButtonPrivate *priv = MEX_ACTION_BUTTON (focusable)->priv;
    MxFocusableIface *iface;

    g_object_unref (priv->shadow);
    priv->shadow = NULL;

    priv->has_focus = FALSE;


    iface = g_type_interface_peek_parent (MX_FOCUSABLE_GET_INTERFACE (focusable));
    return iface->move_focus (focusable, direction, old_focus);
}
static MxFocusable *
_accept_focus (MxFocusable *focusable,
               MxFocusHint  hint)
{
    MexActionButtonPrivate *priv = MEX_ACTION_BUTTON (focusable)->priv;
    MxFocusableIface *iface;
    ClutterColor shadow_color = {0, 0, 0, 64};

    priv->has_focus = TRUE;

    priv->shadow = mex_shadow_new (CLUTTER_ACTOR (focusable));
    mex_shadow_set_radius_x (priv->shadow, 15);
    mex_shadow_set_radius_y (priv->shadow, 15);
    mex_shadow_set_color (priv->shadow, &shadow_color);

    iface = g_type_interface_peek_parent (MX_FOCUSABLE_GET_INTERFACE (focusable));
    return iface->accept_focus (focusable, hint);
}