static void gtk_switch_init (GtkSwitch *self) { GtkGesture *gesture; self->priv = gtk_switch_get_instance_private (self); self->priv->use_action_appearance = TRUE; gtk_widget_set_has_window (GTK_WIDGET (self), FALSE); gtk_widget_set_can_focus (GTK_WIDGET (self), TRUE); gesture = gtk_gesture_multi_press_new (GTK_WIDGET (self)); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (gesture), FALSE); gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (gesture), TRUE); g_signal_connect (gesture, "pressed", G_CALLBACK (gtk_switch_multipress_gesture_pressed), self); g_signal_connect (gesture, "released", G_CALLBACK (gtk_switch_multipress_gesture_released), self); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_BUBBLE); self->priv->multipress_gesture = gesture; gesture = gtk_gesture_pan_new (GTK_WIDGET (self), GTK_ORIENTATION_HORIZONTAL); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (gesture), FALSE); gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (gesture), TRUE); g_signal_connect (gesture, "pan", G_CALLBACK (gtk_switch_pan_gesture_pan), self); g_signal_connect (gesture, "drag-end", G_CALLBACK (gtk_switch_pan_gesture_drag_end), self); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_BUBBLE); self->priv->pan_gesture = gesture; }
static void ide_frame_constructed (GObject *object) { IdeFrame *self = (IdeFrame *)object; IdeFramePrivate *priv = ide_frame_get_instance_private (self); g_assert (IDE_IS_FRAME (self)); G_OBJECT_CLASS (ide_frame_parent_class)->constructed (object); priv->addins = peas_extension_set_new (peas_engine_get_default (), IDE_TYPE_FRAME_ADDIN, NULL); g_signal_connect (priv->addins, "extension-added", G_CALLBACK (ide_frame_addin_added), self); g_signal_connect (priv->addins, "extension-removed", G_CALLBACK (ide_frame_addin_removed), self); peas_extension_set_foreach (priv->addins, ide_frame_addin_added, self); gtk_widget_add_events (GTK_WIDGET (priv->event_box), GDK_TOUCH_MASK); priv->pan = g_object_new (GTK_TYPE_GESTURE_PAN, "widget", priv->event_box, "orientation", GTK_ORIENTATION_HORIZONTAL, "n-points", 3, NULL); g_signal_connect_swapped (priv->pan, "begin", G_CALLBACK (ide_frame_pan_begin), self); g_signal_connect_swapped (priv->pan, "update", G_CALLBACK (ide_frame_pan_update), self); g_signal_connect_swapped (priv->pan, "end", G_CALLBACK (ide_frame_pan_end), self); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (priv->pan), GTK_PHASE_BUBBLE); /* * FIXME: Our priv->pan gesture does not activate unless we add another * dummy gesture. I currently have no idea why that is. * * https://bugzilla.gnome.org/show_bug.cgi?id=788914 */ priv->dummy = gtk_gesture_rotate_new (GTK_WIDGET (priv->event_box)); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (priv->dummy), GTK_PHASE_BUBBLE); }
static void gtk_switch_init (GtkSwitch *self) { GtkSwitchPrivate *priv; GtkGesture *gesture; GtkCssNode *widget_node; priv = self->priv = gtk_switch_get_instance_private (self); gtk_widget_set_has_window (GTK_WIDGET (self), FALSE); gtk_widget_set_can_focus (GTK_WIDGET (self), TRUE); widget_node = gtk_widget_get_css_node (GTK_WIDGET (self)); priv->gadget = gtk_css_custom_gadget_new_for_node (widget_node, GTK_WIDGET (self), gtk_switch_get_content_size, gtk_switch_allocate_contents, gtk_switch_snapshot_trough, NULL, NULL); priv->slider_gadget = gtk_css_custom_gadget_new ("slider", GTK_WIDGET (self), priv->gadget, NULL, NULL, NULL, gtk_switch_snapshot_slider, NULL, NULL); gesture = gtk_gesture_multi_press_new (GTK_WIDGET (self)); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (gesture), FALSE); gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (gesture), TRUE); g_signal_connect (gesture, "pressed", G_CALLBACK (gtk_switch_multipress_gesture_pressed), self); g_signal_connect (gesture, "released", G_CALLBACK (gtk_switch_multipress_gesture_released), self); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_BUBBLE); priv->multipress_gesture = gesture; gesture = gtk_gesture_pan_new (GTK_WIDGET (self), GTK_ORIENTATION_HORIZONTAL); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (gesture), FALSE); gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (gesture), TRUE); g_signal_connect (gesture, "pan", G_CALLBACK (gtk_switch_pan_gesture_pan), self); g_signal_connect (gesture, "drag-end", G_CALLBACK (gtk_switch_pan_gesture_drag_end), self); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_BUBBLE); priv->pan_gesture = gesture; gtk_switch_create_pango_layouts (self); }
static void gstyle_color_widget_init (GstyleColorWidget *self) { GtkStyleContext *context; GtkWidget *widget = GTK_WIDGET (self); gtk_widget_set_has_window (GTK_WIDGET (self), TRUE); self->label = GTK_LABEL (g_object_new (GTK_TYPE_LABEL, "ellipsize", PANGO_ELLIPSIZE_END, "visible", TRUE, "halign", GTK_ALIGN_CENTER, "valign", GTK_ALIGN_CENTER, NULL)); gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->label)); self->is_name_visible = TRUE; self->is_fallback_name_visible = TRUE; self->fallback_name_kind = GSTYLE_COLOR_KIND_RGB_HEX6; self->checkered_pattern = gstyle_utils_get_checkered_pattern (); gtk_widget_set_valign (widget, GTK_ALIGN_FILL); gtk_widget_set_halign (widget, GTK_ALIGN_FILL); gtk_widget_set_hexpand (widget, TRUE); gtk_widget_set_vexpand (widget, TRUE); context = gtk_widget_get_style_context (GTK_WIDGET (self)); self->default_provider = gstyle_css_provider_init_default (gtk_style_context_get_screen (context)); self->target_list = gtk_target_list_new (dnd_targets, G_N_ELEMENTS (dnd_targets)); gtk_target_list_add_text_targets (self->target_list, 0); gtk_drag_dest_set (widget, 0, NULL, 0, GDK_ACTION_MOVE); gtk_drag_dest_set_target_list (widget, self->target_list); gtk_drag_dest_set_track_motion (GTK_WIDGET (self), TRUE); update_container_parent_informations (self); self->multipress_gesture = gtk_gesture_multi_press_new (widget); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (self->multipress_gesture), 0); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (self->multipress_gesture), GTK_PHASE_BUBBLE); g_signal_connect (self->multipress_gesture, "pressed", G_CALLBACK (gstyle_color_widget_multipress_gesture_pressed), widget); self->drag_gesture = gtk_gesture_drag_new (GTK_WIDGET (self)); g_signal_connect (self->drag_gesture, "drag-update", G_CALLBACK (gstyle_color_widget_drag_gesture_update), self); g_signal_connect_swapped (self, "key-press-event", G_CALLBACK (gstyle_color_widget_key_pressed_cb), self); gstyle_color_widget_actions_init (self); gtk_widget_set_can_focus (GTK_WIDGET (self), TRUE); }
static void handle_secondary_button (CcMousePropertiesPrivate *d, GtkWidget *button, GtkGesture *gesture) { gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (gesture), FALSE); gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (gesture), TRUE); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_SECONDARY); g_signal_connect_swapped (gesture, "pressed", G_CALLBACK (gtk_button_clicked), button); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_BUBBLE); }
static void cb_media_image_widget_init (CbMediaImageWidget *self) { self->image = gtk_image_new (); gtk_container_add (GTK_CONTAINER (self), self->image); self->initial_scroll_x = 0.5; self->initial_scroll_y = 0.5; self->drag_gesture = gtk_gesture_drag_new (GTK_WIDGET (self)); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (self->drag_gesture), GDK_BUTTON_MIDDLE); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (self->drag_gesture), GTK_PHASE_CAPTURE); g_signal_connect (self->drag_gesture, "drag-begin", G_CALLBACK (drag_begin_cb), self); g_signal_connect (self->drag_gesture, "drag-update", G_CALLBACK (drag_update_cb), self); }
static void gtk_im_context_wayland_set_client_window (GtkIMContext *context, GdkWindow *window) { GtkIMContextWayland *context_wayland = GTK_IM_CONTEXT_WAYLAND (context); GtkWidget *widget = NULL; if (window == context_wayland->window) return; if (window) gdk_window_get_user_data (window, (gpointer*) &widget); if (context_wayland->widget && context_wayland->widget != widget) g_clear_object (&context_wayland->gesture); g_set_object (&context_wayland->window, window); if (context_wayland->widget != widget) { context_wayland->widget = widget; if (widget) { GtkGesture *gesture; gesture = gtk_gesture_multi_press_new (widget); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_CAPTURE); g_signal_connect (gesture, "pressed", G_CALLBACK (pressed_cb), context); g_signal_connect (gesture, "released", G_CALLBACK (released_cb), context); context_wayland->gesture = gesture; } } }
static void gtk_button_init (GtkButton *button) { GtkButtonPrivate *priv; button->priv = gtk_button_get_instance_private (button); priv = button->priv; gtk_widget_set_can_focus (GTK_WIDGET (button), TRUE); gtk_widget_set_receives_default (GTK_WIDGET (button), TRUE); gtk_widget_set_has_window (GTK_WIDGET (button), FALSE); priv->in_button = FALSE; priv->button_down = FALSE; priv->use_underline = FALSE; priv->child_type = WIDGET_CHILD; priv->gesture = gtk_gesture_multi_press_new (GTK_WIDGET (button)); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (priv->gesture), FALSE); gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (priv->gesture), TRUE); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (priv->gesture), GDK_BUTTON_PRIMARY); g_signal_connect (priv->gesture, "pressed", G_CALLBACK (multipress_pressed_cb), button); g_signal_connect (priv->gesture, "released", G_CALLBACK (multipress_released_cb), button); g_signal_connect (priv->gesture, "update", G_CALLBACK (multipress_gesture_update_cb), button); g_signal_connect (priv->gesture, "cancel", G_CALLBACK (multipress_gesture_cancel_cb), button); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (priv->gesture), GTK_PHASE_BUBBLE); priv->gadget = gtk_css_custom_gadget_new_for_node (gtk_widget_get_css_node (GTK_WIDGET (button)), GTK_WIDGET (button), gtk_button_measure, gtk_button_allocate, gtk_button_render, NULL, NULL); }
GtkWidget * do_gestures (GtkWidget *do_widget) { GtkWidget *drawing_area; GtkGesture *gesture; if (!window) { window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (window), 400, 400); gtk_window_set_title (GTK_WINDOW (window), "Gestures"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); drawing_area = gtk_drawing_area_new (); gtk_container_add (GTK_CONTAINER (window), drawing_area); gtk_widget_add_events (drawing_area, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_TOUCH_MASK); g_signal_connect (drawing_area, "draw", G_CALLBACK (drawing_area_draw), NULL); /* Swipe */ gesture = gtk_gesture_swipe_new (drawing_area); g_signal_connect (gesture, "swipe", G_CALLBACK (swipe_gesture_swept), drawing_area); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_BUBBLE); g_object_weak_ref (G_OBJECT (drawing_area), (GWeakNotify) g_object_unref, gesture); /* Long press */ gesture = gtk_gesture_long_press_new (drawing_area); g_signal_connect (gesture, "pressed", G_CALLBACK (long_press_gesture_pressed), drawing_area); g_signal_connect (gesture, "end", G_CALLBACK (long_press_gesture_end), drawing_area); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_BUBBLE); g_object_weak_ref (G_OBJECT (drawing_area), (GWeakNotify) g_object_unref, gesture); /* Rotate */ rotate = gesture = gtk_gesture_rotate_new (drawing_area); g_signal_connect (gesture, "angle-changed", G_CALLBACK (rotation_angle_changed), drawing_area); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_BUBBLE); g_object_weak_ref (G_OBJECT (drawing_area), (GWeakNotify) g_object_unref, gesture); /* Zoom */ zoom = gesture = gtk_gesture_zoom_new (drawing_area); g_signal_connect (gesture, "scale-changed", G_CALLBACK (zoom_scale_changed), drawing_area); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_BUBBLE); g_object_weak_ref (G_OBJECT (drawing_area), (GWeakNotify) g_object_unref, gesture); } if (!gtk_widget_get_visible (window)) gtk_widget_show_all (window); else { gtk_widget_destroy (window); window = NULL; } return window; }
GestureController::Gesture::Gesture(GtkGesture* gesture, WebPageProxy& page) : m_gesture(adoptGRef(gesture)) , m_page(page) { gtk_event_controller_set_propagation_phase(GTK_EVENT_CONTROLLER(m_gesture.get()), GTK_PHASE_NONE); }