static void gtk_switch_multipress_gesture_pressed (GtkGestureMultiPress *gesture, gint n_press, gdouble x, gdouble y, GtkSwitch *sw) { GtkSwitchPrivate *priv = sw->priv; GtkAllocation allocation; gtk_widget_get_allocation (GTK_WIDGET (sw), &allocation); gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); if (priv->is_active) priv->offset = allocation.width / 2; else priv->offset = 0; /* If the press didn't happen in the draggable handle, * cancel the pan gesture right away */ if ((priv->is_active && x <= allocation.width / 2) || (!priv->is_active && x > allocation.width / 2)) gtk_gesture_set_state (priv->pan_gesture, GTK_EVENT_SEQUENCE_DENIED); }
void GestureController::DragGesture::end(DragGesture* dragGesture, GdkEventSequence* sequence, GtkGesture* gesture) { dragGesture->m_longPressTimeout.cancel(); if (!dragGesture->m_inDrag) { dragGesture->handleTap(gtk_gesture_get_last_event(gesture, sequence)); gtk_gesture_set_state(gesture, GTK_EVENT_SEQUENCE_DENIED); } else if (!gtk_gesture_handles_sequence(gesture, sequence)) gtk_gesture_set_state(gesture, GTK_EVENT_SEQUENCE_DENIED); }
static void gtk_switch_pan_gesture_pan (GtkGesturePan *gesture, GtkPanDirection direction, gdouble offset, GtkSwitch *sw) { GtkWidget *widget = GTK_WIDGET (sw); GtkSwitchPrivate *priv = sw->priv; gint width; if (direction == GTK_PAN_DIRECTION_LEFT) offset = -offset; gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); width = gtk_widget_get_allocated_width (widget); if (priv->is_active) offset += width / 2; offset /= width / 2; /* constrain the handle within the trough width */ priv->handle_pos = CLAMP (offset, 0, 1.0); /* we need to redraw the handle */ gtk_widget_queue_allocate (widget); }
void GestureController::ZoomGesture::begin(ZoomGesture* zoomGesture, GdkEventSequence*, GtkGesture* gesture) { gtk_gesture_set_state(gesture, GTK_EVENT_SEQUENCE_CLAIMED); zoomGesture->m_initialScale = zoomGesture->m_page.pageScaleFactor(); zoomGesture->m_page.getCenterForZoomGesture(zoomGesture->center(), zoomGesture->m_initialPoint); }
static void photos_preview_nav_buttons_multi_press_released (PhotosPreviewNavButtons *self) { gtk_gesture_set_state (GTK_GESTURE (self->tap_gesture), GTK_EVENT_SEQUENCE_CLAIMED); self->visible_internal = !self->visible_internal; photos_preview_nav_buttons_unqueue_auto_hide (self); photos_preview_nav_buttons_update_visibility (self); }
static void hold_action (GtkGestureLongPress *gesture, gdouble x, gdouble y, GtkColorSwatch *swatch) { do_popup (swatch); gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); }
static void photos_preview_nav_buttons_multi_press_end (PhotosPreviewNavButtons *self, GdkEventSequence *sequence) { GtkEventSequenceState state; state = gtk_gesture_get_sequence_state (self->tap_gesture, sequence); if (state == GTK_EVENT_SEQUENCE_DENIED) return; gtk_gesture_set_state (GTK_GESTURE (self->tap_gesture), GTK_EVENT_SEQUENCE_CLAIMED); self->visible_internal = !self->visible_internal; photos_preview_nav_buttons_unqueue_auto_hide (self); photos_preview_nav_buttons_update_visibility (self); }
static void drag_update_cb (GtkGestureDrag *gesture, double offset_x, double offset_y, gpointer user_data) { CbMediaImageWidget *self = user_data; GtkAdjustment *adjustment; adjustment = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (self)); gtk_adjustment_set_value (adjustment, self->drag_start_hvalue - offset_x); adjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self)); gtk_adjustment_set_value (adjustment, self->drag_start_vvalue - offset_y); gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); }
static void gtk_switch_pan_gesture_pan (GtkGesturePan *gesture, GtkPanDirection direction, gdouble offset, GtkSwitch *sw) { GtkWidget *widget = GTK_WIDGET (sw); GtkSwitchPrivate *priv = sw->priv; GtkAllocation allocation; GtkStyleContext *context; GtkStateFlags state; GtkBorder padding; gint width, position; if (direction == GTK_PAN_DIRECTION_LEFT) offset = -offset; gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); position = priv->offset + offset; context = gtk_widget_get_style_context (widget); state = gtk_widget_get_state_flags (widget); gtk_style_context_save (context); gtk_style_context_add_class (context, GTK_STYLE_CLASS_SLIDER); gtk_style_context_get_padding (context, state, &padding); gtk_style_context_restore (context); gtk_widget_get_allocation (widget, &allocation); width = allocation.width; /* constrain the handle within the trough width */ if (position > (width / 2) - padding.right) priv->handle_x = width / 2 - padding.right; else if (position < padding.left) priv->handle_x = 0; else priv->handle_x = position; /* we need to redraw the handle */ gtk_widget_queue_draw (widget); }
static void multipress_pressed_cb (GtkGestureMultiPress *gesture, guint n_press, gdouble x, gdouble y, IdeOmniBar *self) { GtkStyleContext *style_context; GtkStateFlags state_flags; g_assert (IDE_IS_OMNI_BAR (self)); gtk_popover_popup (self->popover); style_context = gtk_widget_get_style_context (GTK_WIDGET (self)); state_flags = gtk_style_context_get_state (style_context); gtk_style_context_set_state (style_context, state_flags | GTK_STATE_FLAG_ACTIVE); gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); }
static void multipress_pressed_cb (GtkGestureMultiPress *gesture, guint n_press, gdouble x, gdouble y, GtkWidget *widget) { GtkButton *button = GTK_BUTTON (widget); GtkButtonPrivate *priv = button->priv; if (gtk_widget_get_focus_on_click (widget) && !gtk_widget_has_focus (widget)) gtk_widget_grab_focus (widget); priv->in_button = TRUE; if (!priv->activate_timeout) { priv->button_down = TRUE; gtk_button_update_state (button); } gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); }
static void ide_frame_pan_update (IdeFrame *self, GdkEventSequence *sequence, GtkGestureSwipe *gesture) { IdeFramePrivate *priv = ide_frame_get_instance_private (self); GtkAllocation alloc; GtkWidget *grid; gdouble x, y; IDE_ENTRY; g_assert (IDE_IS_FRAME (self)); g_assert (GTK_IS_GESTURE_PAN (gesture)); g_assert (!priv->pan_theatric || DZL_IS_BOX_THEATRIC (priv->pan_theatric)); if (priv->pan_theatric == NULL) { if (sequence != NULL) gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED); IDE_EXIT; } gtk_gesture_drag_get_offset (GTK_GESTURE_DRAG (gesture), &x, &y); gtk_widget_get_allocation (GTK_WIDGET (self), &alloc); grid = gtk_widget_get_ancestor (GTK_WIDGET (self), IDE_TYPE_GRID); gtk_widget_translate_coordinates (GTK_WIDGET (priv->top_stack), grid, 0, 0, &alloc.x, &alloc.y); g_object_set (priv->pan_theatric, "x", alloc.x + (gint)x, NULL); IDE_EXIT; }
static void photos_preview_nav_buttons_multi_press_stopped (PhotosPreviewNavButtons *self) { gtk_gesture_set_state (GTK_GESTURE (self->tap_gesture), GTK_EVENT_SEQUENCE_DENIED); }
/* The multi-press gesture used by the flowbox to select a child * forbid us to use dnd so we need to catch it here and select yourself * the child */ static void gstyle_color_widget_multipress_gesture_pressed (GtkGestureMultiPress *gesture, guint n_press, gdouble x, gdouble y, GstyleColorWidget *self) { GtkWidget *container; GtkWidget *child; GtkWidget *popover; GtkBuilder *builder; GtkWidget *button_rename; GtkWidget *button_remove; GtkWidget *ancestor; gint button; button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture)); gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); child = gtk_widget_get_parent (GTK_WIDGET (self)); if (child != NULL && button == GDK_BUTTON_PRIMARY) { if (GTK_IS_LIST_BOX_ROW (child)) { container = gtk_widget_get_parent (GTK_WIDGET (child)); if (container != NULL && GTK_IS_LIST_BOX (container)) { gtk_list_box_select_row (GTK_LIST_BOX (container), GTK_LIST_BOX_ROW (child)); gtk_widget_grab_focus (GTK_WIDGET (self)); if (n_press == 2) g_signal_emit_by_name (container, "row-activated", child); } } else if (GTK_IS_FLOW_BOX_CHILD (child)) { container = gtk_widget_get_parent (GTK_WIDGET (child)); if (container != NULL && GTK_IS_FLOW_BOX (container)) { gtk_flow_box_select_child (GTK_FLOW_BOX (container), GTK_FLOW_BOX_CHILD (child)); gtk_widget_grab_focus (GTK_WIDGET (self)); if (n_press == 2) g_signal_emit_by_name (container, "child-activated", child); } } } if (button == GDK_BUTTON_SECONDARY) { ancestor = gtk_widget_get_ancestor (GTK_WIDGET (self), GSTYLE_TYPE_PALETTE_WIDGET); if (ancestor != NULL) { builder = gtk_builder_new_from_resource ("/org/gnome/libgstyle/ui/gstyle-color-widget.ui"); popover = GTK_WIDGET (gtk_builder_get_object (builder, "popover")); button_rename = GTK_WIDGET (gtk_builder_get_object (builder, "button_rename")); g_signal_connect_object (button_rename, "button-release-event", G_CALLBACK (popover_button_rename_clicked_cb), self, G_CONNECT_SWAPPED); button_remove = GTK_WIDGET (gtk_builder_get_object (builder, "button_remove")); g_signal_connect_object (button_remove, "button-release-event", G_CALLBACK (popover_button_remove_clicked_cb), self, G_CONNECT_SWAPPED); gtk_popover_set_relative_to (GTK_POPOVER (popover), GTK_WIDGET (self)); g_signal_connect_swapped (popover, "closed", G_CALLBACK (contextual_popover_closed_cb), self); gtk_widget_show (popover); g_object_unref (builder); } } }
static gboolean ide_frame_pan_begin (IdeFrame *self, GdkEventSequence *sequence, GtkGesturePan *gesture) { IdeFramePrivate *priv = ide_frame_get_instance_private (self); GtkAllocation alloc; cairo_surface_t *surface = NULL; IdePage *page; GdkWindow *window; GtkWidget *grid; cairo_t *cr; gdouble x, y; gboolean enable_animations; IDE_ENTRY; g_assert (IDE_IS_FRAME (self)); g_assert (GTK_IS_GESTURE_PAN (gesture)); g_assert (priv->pan_theatric == NULL); page = ide_frame_get_visible_child (self); if (page != NULL) gtk_widget_get_allocation (GTK_WIDGET (page), &alloc); g_object_get (gtk_settings_get_default (), "gtk-enable-animations", &enable_animations, NULL); if (sequence != NULL || page == NULL || !enable_animations || is_uninitialized (&alloc) || NULL == (window = gtk_widget_get_window (GTK_WIDGET (page))) || NULL == (surface = gdk_window_create_similar_surface (window, CAIRO_CONTENT_COLOR, alloc.width, alloc.height))) { if (sequence != NULL) gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED); IDE_RETURN (FALSE); } gtk_gesture_drag_get_offset (GTK_GESTURE_DRAG (gesture), &x, &y); cr = cairo_create (surface); gtk_widget_draw (GTK_WIDGET (page), cr); cairo_destroy (cr); grid = gtk_widget_get_ancestor (GTK_WIDGET (self), IDE_TYPE_GRID); gtk_widget_translate_coordinates (GTK_WIDGET (priv->top_stack), grid, 0, 0, &alloc.x, &alloc.y); priv->pan_page = g_object_ref (page); priv->pan_theatric = g_object_new (DZL_TYPE_BOX_THEATRIC, "surface", surface, "target", grid, "x", alloc.x + (gint)x, "y", alloc.y, "width", alloc.width, "height", alloc.height, NULL); g_clear_pointer (&surface, cairo_surface_destroy); /* Hide the page while we begin the possible transition to another * layout stack. */ gtk_widget_hide (GTK_WIDGET (priv->pan_page)); /* * Hide the mouse cursor until ide_frame_pan_end() is called. * It can be distracting otherwise (and we want to warp it to the new * grid column too). */ ide_frame_set_cursor (self, "none"); IDE_RETURN (TRUE); }