static gboolean mex_player_set_controls_visible (MexPlayer *player, gboolean visible) { MexPlayerPrivate *priv = player->priv; gfloat pos; ClutterStage *stage; MxFocusManager *fmanager; stage = (ClutterStage*) clutter_actor_get_stage (CLUTTER_ACTOR (player)); fmanager = mx_focus_manager_get_for_stage (stage); pos = clutter_actor_get_height (priv->controls); if (visible) { priv->controls_prev_visible = FALSE; priv->controls_visible = TRUE; mx_widget_set_disabled (MX_WIDGET (priv->controls), FALSE); clutter_actor_animate (priv->controls, CLUTTER_EASE_IN_SINE, 250, "opacity", 0xff, "anchor-y", 0.0, NULL); mex_player_restart_timer (player); if (priv->related_tile) { mx_focus_manager_push_focus_with_hint (fmanager, MX_FOCUSABLE (priv->related_tile), MX_FOCUS_HINT_PRIOR); g_object_unref (priv->related_tile); priv->related_tile = NULL; } else { mx_focus_manager_push_focus (fmanager, MX_FOCUSABLE (priv->controls)); } } if (!visible) { priv->controls_visible = FALSE; clutter_actor_animate (priv->controls, CLUTTER_EASE_IN_SINE, 250, "opacity", 0x00, "anchor-y", -pos, NULL); if (priv->hide_controls_source) { g_source_remove (priv->hide_controls_source); priv->hide_controls_source = 0; } } return TRUE; }
static gboolean mex_player_captured_event (ClutterActor *actor, ClutterEvent *event) { MexPlayerPrivate *priv = MEX_PLAYER (actor)->priv; if (!priv->controls_prev_visible) mex_player_restart_timer (MEX_PLAYER (actor)); return FALSE; }
static gboolean mex_player_captured_event (ClutterActor *actor, ClutterEvent *event) { MexPlayer *self = MEX_PLAYER (actor); MexPlayerPrivate *priv = self->priv; /* Do nothing if the info panel is up */ if (priv->controls_prev_visible) return FALSE; /* If a mouse button was pressed and the controls aren't visible, show them, * otherwise restart the control-showing timer. */ if ((event->type == CLUTTER_BUTTON_PRESS) && !priv->controls_visible) mex_player_set_controls_visible (self, TRUE); else mex_player_restart_timer (MEX_PLAYER (actor)); return FALSE; }
static gboolean mex_player_key_press_event (ClutterActor *actor, ClutterKeyEvent *event) { MexPlayerPrivate *priv = MEX_PLAYER (actor)->priv; ClutterStage *stage; MxFocusManager *fmanager; stage = (ClutterStage*) clutter_actor_get_stage (actor); fmanager = mx_focus_manager_get_for_stage (stage); switch (event->keyval) { case CLUTTER_KEY_Down: { if (!priv->controls_visible && !priv->info_visible) return mex_player_set_controls_visible (MEX_PLAYER (actor), TRUE); break; } case MEX_KEY_INFO: { MexContent *content; ClutterActor *controls; controls = priv->controls; content = priv->content; if (priv->info_visible) { /* hide the info panel */ clutter_actor_animate (priv->info_panel, CLUTTER_EASE_IN_SINE, 250, "opacity", 0x00, NULL); mx_widget_set_disabled (MX_WIDGET (priv->info_panel), TRUE); mx_widget_set_disabled (MX_WIDGET (priv->controls), FALSE); priv->info_visible = FALSE; if (priv->controls_prev_visible) mex_player_set_controls_visible (MEX_PLAYER (actor), TRUE); } else { /* if you're pressing info button while the media controls are up set them as previously visible */ if (priv->controls_visible) priv->controls_prev_visible = TRUE; MxFocusable *focusable; focusable = mx_focus_manager_get_focused (fmanager); if (MEX_IS_CONTENT_TILE (focusable) && priv->controls_prev_visible == TRUE) { content = mex_content_view_get_content (MEX_CONTENT_VIEW (focusable)); /* to avoid any accidental leak */ if (priv->related_tile) { g_object_unref (priv->related_tile); priv->related_tile = NULL; } priv->related_tile = g_object_ref (focusable); } mex_content_view_set_content (MEX_CONTENT_VIEW (priv->info_panel), content); /* show the info panel */ clutter_actor_animate (priv->info_panel, CLUTTER_EASE_IN_SINE, 250, "opacity", 0xff, NULL); mx_widget_set_disabled (MX_WIDGET (priv->info_panel), FALSE); mx_widget_set_disabled (MX_WIDGET (priv->controls), TRUE); priv->info_visible = TRUE; mex_player_set_controls_visible (MEX_PLAYER (actor), FALSE); mex_push_focus (MX_FOCUSABLE (priv->info_panel)); } return TRUE; } } /* any other key presses should reset the hide timer */ mex_player_restart_timer (MEX_PLAYER (actor)); return FALSE; }