/** * st_widget_set_hover: * @widget: A #StWidget * @hover: whether the pointer is hovering over the widget * * Sets @widget's hover property and adds or removes "hover" from its * pseudo class accordingly. If #StWidget:has-tooltip is %TRUE, this * will also show or hide the tooltip, as appropriate. * * If you have set #StWidget:track-hover, you should not need to call * this directly. You can call st_widget_sync_hover() if the hover * state might be out of sync due to another actor's pointer grab. */ void st_widget_set_hover (StWidget *widget, gboolean hover) { StWidgetPrivate *priv; g_return_if_fail (ST_IS_WIDGET (widget)); priv = widget->priv; if (priv->hover != hover) { priv->hover = hover; if (priv->hover) { st_widget_add_style_pseudo_class (widget, "hover"); if (priv->has_tooltip) st_widget_show_tooltip (widget); } else { st_widget_remove_style_pseudo_class (widget, "hover"); if (priv->has_tooltip) st_widget_hide_tooltip (widget); } g_object_notify (G_OBJECT (widget), "hover"); } }
static gboolean st_button_key_press (ClutterActor *actor, ClutterKeyEvent *event) { StButton *button = ST_BUTTON (actor); st_widget_hide_tooltip (ST_WIDGET (actor)); if (button->priv->button_mask & ST_BUTTON_ONE) { if (event->keyval == CLUTTER_KEY_space || event->keyval == CLUTTER_KEY_Return) { st_button_press (button, ST_BUTTON_ONE); return TRUE; } } return CLUTTER_ACTOR_CLASS (st_button_parent_class)->key_press_event (actor, event); }
static gboolean st_button_button_press (ClutterActor *actor, ClutterButtonEvent *event) { StButton *button = ST_BUTTON (actor); StButtonMask mask = ST_BUTTON_MASK_FROM_BUTTON (event->button); st_widget_hide_tooltip (ST_WIDGET (actor)); 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; }