static gboolean on_trough_bg_button_press_event (ClutterActor *actor, ClutterButtonEvent *event, MxSlider *self) { MxSliderPrivate *priv = self->priv; ClutterActor *stage; if (event->button != 1) return FALSE; if (mx_widget_get_disabled (MX_WIDGET (actor))) return FALSE; move_handle (self, event->x, event->y); stage = clutter_actor_get_stage (priv->handle); /* Turn off picking for motion events */ clutter_stage_set_motion_events_enabled (CLUTTER_STAGE (stage), FALSE); priv->capture_handler = g_signal_connect_after (stage, "captured-event", G_CALLBACK (on_handle_capture_event), self); return TRUE; }
static gboolean on_handle_capture_event (ClutterActor *trough, ClutterEvent *event, MxSlider *bar) { MxSliderPrivate *priv = bar->priv; if (clutter_event_type (event) == CLUTTER_MOTION) { drag_handle (bar, ((ClutterMotionEvent*)event)->x, ((ClutterMotionEvent*)event)->y); } else if (clutter_event_type (event) == CLUTTER_BUTTON_RELEASE && ((ClutterButtonEvent*)event)->button == 1) { ClutterActor *stage, *target; stage = clutter_actor_get_stage(priv->trough); if (priv->capture_handler) { g_signal_handler_disconnect (stage, priv->capture_handler); priv->capture_handler = 0; /* update the handle position */ mx_slider_allocate_fill_handle (bar, NULL, 0); clutter_actor_queue_redraw (CLUTTER_ACTOR (bar)); } clutter_stage_set_motion_events_enabled (CLUTTER_STAGE (stage), TRUE); /* check if the mouse pointer has left the handle during the drag and * remove the hover state if it has */ target = clutter_stage_get_actor_at_pos ((ClutterStage*) stage, CLUTTER_PICK_REACTIVE, ((ClutterButtonEvent*) event)->x, ((ClutterButtonEvent*) event)->y); if (target != priv->handle) { mx_stylable_set_style_pseudo_class (MX_STYLABLE (priv->handle), NULL); } /* emit the stop signal */ g_signal_emit (bar, signals[SLIDE_STOP], 0); } return FALSE; }
static void stop_scrolling (StScrollBar *bar) { ClutterStage *stage; if (!bar->priv->capture_handler) return; stage = CLUTTER_STAGE (clutter_actor_get_stage (bar->priv->trough)); g_signal_handler_disconnect (stage, bar->priv->capture_handler); bar->priv->capture_handler = 0; clutter_stage_set_motion_events_enabled (stage, TRUE); g_signal_emit (bar, signals[SCROLL_STOP], 0); }
static gboolean red_button_cb (ClutterActor *actor, ClutterEvent *event, gpointer data) { ClutterActor *stage; if (IsMotion) IsMotion = FALSE; else IsMotion = TRUE; stage = clutter_actor_get_stage (actor); clutter_stage_set_motion_events_enabled (CLUTTER_STAGE (stage), IsMotion); g_print ("*** Per actor motion events %s ***\n", IsMotion ? "enabled" : "disabled"); return FALSE; }
static gboolean on_handle_button_press_event (ClutterActor *actor, ClutterButtonEvent *event, MxSlider *bar) { MxSliderPrivate *priv = bar->priv; ClutterActor *stage; if (mx_widget_get_disabled (MX_WIDGET (actor))) return FALSE; if (event->button != 1) return FALSE; if (!clutter_actor_transform_stage_point (priv->handle, event->x, event->y, &priv->x_origin, NULL)) return FALSE; g_signal_emit (bar, signals[SLIDE_START], 0); /* Account for the scrollbar-trough-handle nesting. */ priv->x_origin += clutter_actor_get_x (priv->trough); /* Turn off picking for motion events */ stage = clutter_actor_get_stage (priv->trough); clutter_stage_set_motion_events_enabled (CLUTTER_STAGE (stage), FALSE); priv->capture_handler = g_signal_connect_after (stage, "captured-event", G_CALLBACK (on_handle_capture_event), bar); return FALSE; }
static gboolean handle_button_press_event_cb (ClutterActor *actor, ClutterButtonEvent *event, StScrollBar *bar) { ClutterStage *stage; StScrollBarPrivate *priv = bar->priv; if (event->button != 1) return FALSE; if (!clutter_actor_transform_stage_point (priv->handle, event->x, event->y, &priv->x_origin, &priv->y_origin)) return FALSE; /* Account for the scrollbar-trough-handle nesting. */ priv->x_origin += clutter_actor_get_x (priv->trough); priv->y_origin += clutter_actor_get_y (priv->trough); stage = CLUTTER_STAGE (clutter_actor_get_stage (bar->priv->trough)); /* Turn off picking for motion events */ clutter_stage_set_motion_events_enabled (stage, FALSE); priv->capture_handler = g_signal_connect_after ( clutter_actor_get_stage (priv->trough), "captured-event", G_CALLBACK (handle_capture_event_cb), bar); g_signal_emit (bar, signals[SCROLL_START], 0); return TRUE; }