如何在C语言中使用GTK4(〈4.10)忽略双击并检测单击?

gmxoilav  于 2023-04-05  发布在  其他
关注(0)|答案(1)|浏览(152)

在Ubuntu 22.04上的Gtk4(4.6)中,我试图检测单击而忽略双击。但是,当双击发生时,两次非常接近的单击中的第一次被视为单击。我查阅了Gtk4文档,但我不知道如何用简单的方法解决这个问题。
下面是我的尝试:

GtkGesture *controller;
controller = gtk_gesture_click_new ();
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (controller), 0);
gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (controller), TRUE);
gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (controller), GTK_PHASE_CAPTURE);
g_signal_connect_after (controller, "released", G_CALLBACK (on_click), myWidget);
gtk_widget_add_controller (GTK_WIDGET (myWidget), GTK_EVENT_CONTROLLER (controller));
fzsnzjdm

fzsnzjdm1#

GtkGestureClick"released"信号的回调函数有一个n_press参数,它允许你检查连续点击的次数。换句话说,如果n_press被设置为2,你正在处理双击。
例如,on_click函数可能如下所示:

static void
on_click (GtkGestureClick *controller,
          int n_press,
          double x,
          double y,
          void *user_data)
{
    if (n_press == 2) { // Maybe you would check (n_press > 1) here
        g_debug ("Detected double click, ignoring");
        return;
    }

    // Do whatever logic you wanted to do here for single clicks
}

相关问题