コード例 #1
0
ファイル: ide-frame.c プロジェクト: GNOME/gnome-builder
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);
}
コード例 #2
0
ファイル: gestures.c プロジェクト: ELWIN-MAO/gtk
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;
}