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); }
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; }